Isox.Trck002 (Isox v0.1.0)

Copy Markdown View Source

Modelo ISO 20022 do trck.002 (autorrelato de transferência entre contas do mesmo participante — book transfer), versão 1.1. Independente de pacs.008/002; responde-se com camt.025.

TrckrStsAndTx/Tx é max: ilimitado no schema — encode/3 aceita 1 mensagem ou uma lista (lote: vários Tx na mesma Document) e decode/1 devolve 1 struct ou uma lista de volta, mesmo padrão do Pacs002/Pacs004/Pacs008. TxSts.Sts (enum de valor único "ACCC") fica fixo — book transfer é sempre reportado como já efetivado.

3 regras da planilha do catálogo (BCB) que o XSD sozinho não expressa, validadas em encode/3:

  • cdtr_acct_proxy (chave Pix) é obrigatório quando lcl_instrm é "DICT"/"QRDN"/"QRES"/"APDN"/"APES"/"INIC", e proibido quando é "MANU"/"AUTO".
  • cdtr_acct_type nunca pode ser "SLRY" (Conta-Salário não recebe pagamentos) — mesmo o XSD reusando o mesmo enum de 5 opções pros dois lados (devedor/credor).
  • instr_id presente (transação de devolução, análoga a uma Pacs004) exige lcl_instrm == "MANU".

Summary

Functions

Decodifica um XML de trck.002 de volta para a struct — ou, quando a mensagem traz mais de um Tx (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 Tx na mesma Document).

Types

t()

@type t() :: %Isox.Trck002{
  cdtr_acct_id: term(),
  cdtr_acct_issr: term(),
  cdtr_acct_proxy: term(),
  cdtr_acct_type: term(),
  cdtr_agt_ispb: term(),
  cdtr_cpf_cnpj: term(),
  created_at: term(),
  dbtr_acct_id: term(),
  dbtr_acct_issr: term(),
  dbtr_acct_type: term(),
  dbtr_agt_ispb: term(),
  dbtr_cpf_cnpj: term(),
  end_to_end_id: term(),
  instr_id: term(),
  lcl_instrm: term(),
  msg_id: term(),
  pmt_scnro_prtry: term(),
  reqd_exctn_dt: term(),
  value: term()
}

version()

@type version() :: :v1_1

Functions

decode(xml)

@spec decode(binary()) :: {:ok, t() | [t(), ...], version()} | {:error, term()}

Decodifica um XML de trck.002 de volta para a struct — ou, quando a mensagem traz mais de um Tx (lote), para uma lista de structs.

encode(message, header, version)

@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 Tx 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.