Modelo ISO 20022 do camt.054 (detalhamento de um lançamento da Conta PI — a contrapartida contábil de cada pacs.008/002 liquidada), versões 1.15 e 1.16 coexistindo. A maior mensagem do catálogo.
Ntfctn é max: ilimitado no schema — o caminho comum é 1 (um
lançamento por notificação, como o próprio mensagens.md descreve: "um
por liquidação"), mas encode/3 aceita 1 mensagem ou uma lista (lote:
vários Ntfctn na mesma Document) e decode/1 devolve 1 struct ou
uma lista de volta, mesmo padrão do Pacs002/Pacs004/Pacs008.
Ntry já é max: 1 no schema real, isso não muda.
Cobre o caminho comum de um lançamento de liquidação (mesmos dados de
pagador/recebedor do Pacs008, mais metadados contábeis e, quando é
devolução, RtrInf). Ficam de fora, mesma razão do Pacs008: Tax e
RmtInf.Strd — ramos raros, disponíveis via codec genérico.
RltdAgts é obrigatório como contêiner, mas DbtrAgt/CdtrAgt dentro
dele são cada um independentemente opcional (diferente do Pacs008,
onde os dois agentes são sempre obrigatórios) — confirmado contra o
schema real, não assumido do padrão anterior.
addtl_tx_inf (AddtlTxInf) não é texto livre, apesar do nome —
o tipo XSD real (Priority2Code) e a planilha ("prioridadePagamento")
confirmam que é a prioridade da transação original (HIGH/NORM),
reaproveitando por engano o mesmo tipo ISO do InstrPrty de
Pacs008/Pain013. Fica com esse nome porque é a tag XML
(AdditionalTransactionInformation) do schema — mas só aceita esses
dois valores.
Summary
Functions
Decodifica um XML de camt.054 de volta para a struct — ou, quando a
mensagem traz mais de um Ntfctn (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
Ntfctn na mesma Document).
Types
@type t() :: %Isox.Camt054{ accptnc_dt_tm: term(), acct_ispb: term(), addtl_ntfctn_inf: term(), addtl_ntry_inf: term(), addtl_tx_inf: term(), bktxcd_domn_cd: term(), bktxcd_fmly_cd: term(), bktxcd_sub_fmly_cd: term(), bookg_dt: term(), cdt_dbt_ind: term(), cdtr_acct_id: term(), cdtr_acct_issr: term(), cdtr_acct_proxy: term(), cdtr_acct_type: term(), cdtr_agt_ispb: term(), cdtr_cpf_cnpj: term(), clr_sys_ref: term(), created_at: term(), dbtr_acct_id: term(), dbtr_acct_issr: term(), dbtr_acct_type: term(), dbtr_agt_ispb: term(), dbtr_cpf_cnpj: term(), dbtr_name: term(), end_to_end_id: term(), initg_pty_id: term(), instr_id: term(), lcl_instrm: term(), msg_id: term(), msg_nm_id: term(), ntfctn_id: term(), prtry_ref: term(), purp_cd: term(), rmt_inf: term(), rtr_rsn_addtl_inf: term(), rtr_rsn_cd: term(), sts_cd: term(), tx_id: term(), val_dt: term(), value: term() }
@type version() :: :v1_15 | :v1_16
Functions
Decodifica um XML de camt.054 de volta para a struct — ou, quando a
mensagem traz mais de um Ntfctn (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
Ntfctn 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.