Isox.Pain009 (Isox v0.2.0)

Copy Markdown View Source

Solicitação de recorrência do Pix Automático: pede ao participante do pagador que autorize uma série de cobranças.

Versão 1.1. Cria a recorrência em estado pendente, com identificador, frequência, vigência e valor. A resposta é uma Isox.Pain012, e o cancelamento é uma Isox.Pain011.

São dois identificadores, e eles não se confundem: mndt_id é a recorrência, o vínculo que dura; mndt_req_id é este pedido de autorização. Uma recorrência pode ter mais de uma solicitação ao longo da vida.

Ocrncs.SeqTp tem valor único ("RCUR") e fica fixo.

As três datas

mndt_prcg_dtls é [3..3] no schema, e a planilha fixa a ordem: CRTN, depois CRAT, depois EXPR. Não é lista livre, é sempre o pacote de três.

Lote

Mndt é ilimitado no schema. 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 pain.009 de volta para a struct, ou para uma lista de structs quando a mensagem traz mais de um Mndt (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 Mndt na mesma Document).

Types

prcg_dtls()

@type prcg_dtls() :: %{tp: String.t(), dt_tm: DateTime.t()}

t()

@type t() :: %Isox.Pain009{
  adjstmnt_amt: term(),
  adjstmnt_dt_ind: term(),
  cdtr_agt_ispb: term(),
  cdtr_cpf_cnpj: term(),
  cdtr_name: term(),
  colltn_amt: term(),
  created_at: term(),
  dbtr_acct_id: term(),
  dbtr_acct_issr: term(),
  dbtr_agt_ispb: term(),
  dbtr_cpf_cnpj: term(),
  fnl_colltn_dt: term(),
  frqcy_tp: term(),
  frst_colltn_dt: term(),
  mndt_id: term(),
  mndt_prcg_dtls: term(),
  mndt_req_id: term(),
  msg_id: term(),
  rfrd_doc_cdtr_ref: term(),
  rfrd_doc_nb: term(),
  trckg_ind: term(),
  ultmt_dbtr_cpf_cnpj: term(),
  ultmt_dbtr_name: term()
}

version()

@type version() :: :v1_1

Functions

decode(xml)

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

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