Relatório de status: a resposta a uma Isox.Pacs008 ou a uma
Isox.Pacs004.
Versões 1.16 e 1.17 (ADR 0002). Aponta a mensagem original por
orgnl_instr_id e orgnl_end_to_end_id, e diz em tx_sts o que
aconteceu. Quando rejeitou, sts_rsn_cd diz por quê.
Repare na diferença entre os dois identificadores: orgnl_instr_id
aceita tanto pagamento quanto devolução, e orgnl_end_to_end_id só
aceita pagamento. É o que permite responder a uma devolução ainda
apontando para o pagamento que a originou.
Lote
TxInfAndSts é ilimitado no XSD, e o catálogo documenta lote de
verdade (pacs.002_SPI_10_msg.xml, 10 transações numa mensagem só).
encode/3 aceita uma mensagem ou uma lista, e decode/1 devolve uma
struct ou uma lista, conforme o XML.
StsRsnInf segue modelado como no máximo um motivo por transação, com
sua lista de AddtlInf.
Validação
encode/3 confere os campos obrigatórios e depois faz o caminho de
volta pelo módulo gerado, reaproveitando a validação de pattern, enum e
cardinalidade. Isso inclui 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 para uma lista de structs 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 para uma lista de structs 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.