Isox.Camt053 (Isox v0.2.0)

Copy Markdown View Source

Saldo da Conta PI: a resposta a uma Isox.Camt060 que pediu CSA ou CRE.

Versão 1.4. Um extrato reporta vários tipos de saldo ao mesmo tempo, então balances é lista de verdade. Vale notar a relação entre dois deles: SADP, o disponível, já vem descontado do SABK, o bloqueado. Bloquear não muda o total, muda onde ele está.

CdtDbtInd é fixo em "CRDT" e não vira campo.

Lote

Stmt é ilimitado no schema. Como a camt.060 pede uma conta por vez, o caminho comum é 1, mas encode/3 aceita uma mensagem ou uma lista, e decode/1 devolve uma struct ou uma lista, conforme o XML.

Summary

Functions

Decodifica um XML de camt.053 de volta para a struct, ou para uma lista de structs quando a mensagem traz mais de um Stmt (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 Stmt na mesma Document).

Types

saldo()

@type saldo() :: %{
  tp_prtry: String.t(),
  value: String.t() | number(),
  dt_tm: DateTime.t()
}

t()

@type t() :: %Isox.Camt053{
  acct_ispb: String.t(),
  balances: [saldo()],
  created_at: DateTime.t(),
  msg_id: String.t(),
  stmt_id: String.t()
}

version()

@type version() :: :v1_4

Functions

decode(xml)

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

Decodifica um XML de camt.053 de volta para a struct, ou para uma lista de structs quando a mensagem traz mais de um Stmt (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 Stmt 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.