Modelo ISO 20022 do pacs.002 (relatório de status de pagamento),
versões 1.16 e 1.17 (ADR 0002) — a resposta a um pacs.008, referenciando
a mensagem original por OrgnlInstrId/OrgnlEndToEndId e informando o
status (TxSts) e, quando rejeitada, o motivo.
TxInfAndSts é max: ilimitado no XSD e o catálogo oficial documenta
lote de verdade (pacs.002_SPI_10_msg.xml, 10 transações numa mensagem
só). encode/3 aceita 1 mensagem ou uma lista (lote); decode/1
devolve 1 struct quando o XML tem 1 TxInfAndSts, ou uma lista quando
tem mais — sem uma segunda API paralela pra isso.
StsRsnInf continua modelado como no máximo 1 motivo por transação,
com sua lista de AddtlInf.
Mesma validação em duas camadas do Pacs008: encode/3 confere os
campos obrigatórios do modelo e depois reaproveita o decode do próprio
módulo gerado pra validar pattern/enum/cardinalidade sem duplicar regra
— inclusive o enum de Rsn.Cd, que diverge entre 1.16 e 1.17.
Summary
Functions
Decodifica um XML de pacs.002 (qualquer versão) de volta para a struct
— ou, quando a mensagem traz mais de uma TxInfAndSts (lote), para
uma lista de structs, uma por transação.
Monta o XML (envelope completo, AppHdr + Document) para a versão
dada. Aceita 1 mensagem ou uma lista de mensagens (lote — vira várias
TxInfAndSts na mesma Document, com NbOfTxs implícito no XSD desta
mensagem).
Types
@type t() :: %Isox.Pacs002{ created_at: DateTime.t(), fctv_intr_bk_sttlm_dt: DateTime.t() | nil, msg_id: String.t(), orgnl_end_to_end_id: String.t(), orgnl_instr_id: String.t(), orgnl_intr_bk_sttlm_dt: Date.t() | nil, sts_rsn_addtl_inf: [String.t()], sts_rsn_cd: String.t() | nil, tx_sts: String.t() }
@type version() :: :v1_16 | :v1_17
Functions
Decodifica um XML de pacs.002 (qualquer versão) de volta para a struct
— ou, quando a mensagem traz mais de uma TxInfAndSts (lote), para
uma lista de structs, uma por transação.
@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árias
TxInfAndSts na mesma Document, com NbOfTxs implícito no XSD desta
mensagem).
msg_id/created_at são campos de GrpHdr (um por mensagem XML,
não por transação) — em lote, precisam ser iguais em todos os itens da
lista; se divergirem, encode/3 erra em vez de escolher um deles em
silêncio.