Resposta a uma instrução agendada: o participante do pagador aceita ou
recusa a Isox.Pain013.
Versões 2.3 e 2.4 coexistindo. A correlação é por orgnl_pmt_inf_id e
orgnl_end_to_end_id.
O schema só define dois status, "ACSP" e "RJCT". Não existe estado
de fila ou pendência aqui, então não há o que modelar.
Três campos obrigatórios que não são campos
InitgPty é [0]{14} no schema, e o grupo original é [0]{32} em
OrgnlMsgId e [0]{8} em OrgnlMsgNmId. São zeros literais exigidos
pelo XSD, não valores a preencher: a correlação de verdade acontece em
OrgnlPmtInfAndSts, não no grupo.
Regra cruzada que o XSD não expressa
rsn_prtry é obrigatório quando tx_sts é "RJCT" e proibido quando é
"ACSP". Confirmado nos quatro exemplos oficiais e validado em
encode/3.
Lote
OrgnlPmtInfAndSts é 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.014 de volta para a struct, ou
para uma lista de structs quando a
mensagem traz mais de um OrgnlPmtInfAndSts (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
OrgnlPmtInfAndSts na mesma Document).
Types
@type t() :: %Isox.Pain014{ cdtr_agt_ispb: String.t(), cdtr_cpf_cnpj: String.t(), created_at: DateTime.t(), dbtr_dcsn_dt_tm: DateTime.t(), msg_id: String.t(), orgnl_end_to_end_id: String.t(), orgnl_pmt_inf_id: String.t(), rsn_prtry: String.t() | nil, tx_sts: String.t() }
@type version() :: :v2_3 | :v2_4
Functions
Decodifica um XML de pain.014 de volta para a struct, ou
para uma lista de structs quando a
mensagem traz mais de um OrgnlPmtInfAndSts (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
OrgnlPmtInfAndSts na mesma Document).
msg_id/created_at são de GrpHdr (uma vez por mensagem XML). Em
lote, têm que ser iguais em todos os itens da lista.