Modelo ISO 20022 do pacs.008 (ordem de crédito), versões 1.15 e 1.16 (ADR 0002) — campos com nome amigável em vez do mapa genérico cru que o motor de codec interno produz.
Cobre o caminho comum de uma ordem de crédito do Pix: os campos sempre
obrigatórios da árvore real do XSD, mais os opcionais realmente usados
(InstrId, TxId, InitgPty, Prxy/proxy, RmtInf.Ustrd). Fica de
fora Tax e RmtInf.Strd — ramos raros fora do fluxo padrão do Pix.
CdtTrfTxInf é max: ilimitado no XSD e o catálogo oficial documenta
lote de verdade (pacs.008_CONTA_10_msg.xml/pacs.008_END_10_msg.xml,
10 transações numa mensagem só). encode/3 aceita 1 mensagem ou uma
lista (lote); decode/1 devolve 1 struct ou uma lista, dependendo de
quantas CdtTrfTxInf o XML trouxer.
encode/3 valida antes de montar: o motor de codec interno confia no
termo que recebe (não valida pattern/enum/obrigatoriedade), então essa
camada confere os campos obrigatórios do modelo e, depois de montar o
XML, faz o caminho de volta (decode do próprio módulo gerado) pra
reaproveitar a validação de pattern/enum/cardinalidade que o parser já
faz — sem duplicar regra nenhuma.
Summary
Functions
Decodifica um XML de pacs.008 (qualquer versão) de volta para a struct
— ou, quando a mensagem traz mais de uma CdtTrfTxInf (lote), para
uma lista de structs.
Monta o XML (envelope completo, AppHdr + Document) para a versão
dada. Aceita 1 mensagem ou uma lista (lote — vira várias CdtTrfTxInf
na mesma Document, com NbOfTxs ajustado à quantidade).
Types
@type t() :: %Isox.Pacs008{ accptnc_dt_tm: DateTime.t(), cdtr_acct_id: String.t(), cdtr_acct_issr: String.t() | nil, cdtr_acct_proxy: String.t() | nil, cdtr_acct_type: String.t(), cdtr_agt_ispb: String.t(), cdtr_cpf_cnpj: String.t(), created_at: DateTime.t(), dbtr_acct_id: String.t(), dbtr_acct_issr: String.t() | nil, dbtr_acct_type: String.t(), dbtr_agt_ispb: String.t(), dbtr_cpf_cnpj: String.t(), dbtr_name: String.t(), end_to_end_id: String.t(), initg_pty_id: String.t() | nil, instr_id: String.t() | nil, instr_prty: String.t(), lcl_instrm: String.t(), msg_id: String.t(), purp_cd: String.t(), rmt_inf: String.t() | nil, svc_lvl_prtry: String.t(), tx_id: String.t() | nil, value: String.t() | number() }
@type version() :: :v1_15 | :v1_16
Functions
Decodifica um XML de pacs.008 (qualquer versão) de volta para a struct
— ou, quando a mensagem traz mais de uma CdtTrfTxInf (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 (lote — vira várias CdtTrfTxInf
na mesma Document, com NbOfTxs ajustado à quantidade).
msg_id/created_at/instr_prty/svc_lvl_prtry são de GrpHdr (uma
vez por mensagem XML) — em lote, têm que ser iguais em todos os itens
da lista.