Isox.Trck002 (Isox v0.2.0)

Copy Markdown View Source

Autorrelato de transferência interna: o participante avisa ao BC um pagamento que ele liquidou por dentro, sem passar pelo SPI.

Versão 1.1. É o chamado book transfer. Independe de pacs.008 e pacs.002, e a resposta é uma Isox.Camt025.

TxSts.Sts tem valor único ("ACCC") e fica fixo: só se reporta o que já foi liquidado.

Três regras da planilha que o XSD não expressa

Validadas em encode/3:

  • cdtr_acct_proxy, a chave Pix, é obrigatório quando lcl_instrm é "DICT", "QRDN", "QRES", "APDN", "APES" ou "INIC", e proibido quando é "MANU" ou "AUTO".
  • cdtr_acct_type nunca pode ser "SLRY", porque conta-salário não recebe pagamento. O XSD aceita porque reusa o mesmo enum de cinco opções para os dois lados.
  • instr_id presente significa que a transação reportada é uma devolução, e devolução exige lcl_instrm igual a "MANU".

Prazo e indicador de nível de serviço

O Manual de Tempos pede 99% dos reportes em até 300 segundos. Isso é percentil, não limite por mensagem: reporte atrasado continua sendo aceito. O prazo que é regra são os 30 dias.

Lote

TrckrStsAndTx/Tx é 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 trck.002 de volta para a struct, ou para uma lista de structs 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 para uma lista de structs 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.