Resposta sobre uma recorrência do Pix Automático: aceita ou recusa uma
Isox.Pain009 ou uma Isox.Pain011.
Versões 1.3 e 1.4 coexistindo. accptd é o campo que se lê primeiro, e
mndt_sts diz a que mensagem esta resposta se refere: "PDNG" responde
a uma pain.009, "CCLD" responde a uma pain.011.
A cópia da recorrência difere das outras duas
O bloco do mandato original aqui não é igual ao da pain.009 nem ao da
pain.011. Tem Dbtr.PstlAdr.TwnNm e MndtRef, que as outras não têm, e
não tem Adjstmnt. Isso foi conferido contra o schema real de cada uma,
não deduzido por semelhança.
MndtPrcgDtls é opcional e vai de 0 a 3 itens, diferente da pain.009,
que exige exatamente 3. SplmtryData ganha ainda MndtSts.
Regra cruzada que o XSD não expressa
Validada em encode/3, a partir da planilha e confirmada nos 12
exemplos oficiais do BCB, sem exceção:
accptdfalso exigerjct_rsn_prtrypresente, emndt_stsemndt_prcg_dtlsausentes.accptdverdadeiro exige o oposto:rjct_rsn_prtryausente emndt_stspresente.
Que domínios de mndt_prcg_dtls acompanham qual mndt_sts não é
validado aqui. A regra está na planilha, mas verificá-la exigiria
duplicar a lógica de negócio inteira do Pix Automático.
Lote
UndrlygAccptncDtls é ilimitado no schema. encode/3 aceita uma
mensagem ou uma lista, e decode/1 devolve uma struct ou uma lista.
Summary
Functions
Decodifica um XML de pain.012 de volta para a struct, ou
para uma lista de structs quando a
mensagem traz mais de um UndrlygAccptncDtls (lote), para uma lista
de structs.
Monta o XML (envelope completo, AppHdr + Document) para a versão
dada. Aceita 1 mensagem ou uma lista de mensagens (lote: vira vários
UndrlygAccptncDtls na mesma Document).
Types
@type t() :: %Isox.Pain012{ accptd: term(), created_at: term(), instg_agt_ispb: term(), mndt_prcg_dtls: term(), mndt_sts: term(), msg_id: term(), orgnl_cdtr_agt_ispb: term(), orgnl_cdtr_cpf_cnpj: term(), orgnl_cdtr_name: term(), orgnl_colltn_amt: term(), orgnl_dbtr_acct_id: term(), orgnl_dbtr_acct_issr: term(), orgnl_dbtr_agt_ispb: term(), orgnl_dbtr_cpf_cnpj: term(), orgnl_dbtr_twn_nm: term(), orgnl_fnl_colltn_dt: term(), orgnl_frqcy_tp: term(), orgnl_frst_colltn_dt: term(), orgnl_mndt_id: term(), orgnl_mndt_ref: term(), orgnl_mndt_req_id: term(), orgnl_rfrd_doc_cdtr_ref: term(), orgnl_rfrd_doc_nb: term(), orgnl_trckg_ind: term(), orgnl_ultmt_dbtr_cpf_cnpj: term(), orgnl_ultmt_dbtr_name: term(), rjct_rsn_prtry: term() }
@type version() :: :v1_3 | :v1_4
Functions
Decodifica um XML de pain.012 de volta para a struct, ou
para uma lista de structs quando a
mensagem traz mais de um UndrlygAccptncDtls (lote), para uma lista
de structs.
@spec encode(t() | [t(), ...], Isox.AppHdr.t(), version()) :: {:ok, binary()} | {:error, String.t()}
Monta o XML (envelope completo, AppHdr + Document) para a versão
dada. Aceita 1 mensagem ou uma lista de mensagens (lote: vira vários
UndrlygAccptncDtls na mesma Document).
msg_id/created_at/instg_agt_ispb são de GrpHdr (uma vez por
mensagem XML). Em lote, têm que ser iguais em todos os itens da
lista.