Isox.Reda022 (Isox v0.1.0)

Copy Markdown View Source

Modelo ISO 20022 do reda.022 (solicitação de alteração de cadastro de participante), versão 1.4 — a mensagem cujo schema real exigiu corrigir o Compiler (ver ADR/issue #27): ReqdMod é um xs:choice entre CtctDtls (ela mesma outra escolha, entre os grupos ReqdModContato e ReqdModDiretor, que compartilham a maioria das tags — só Nm distingue), TechAdr e MktSpcfcAttr.

Mod é [4..4] no schema real (exatamente 4, não ilimitado) — sempre as 4 modificações juntas, uma de cada tipo (:contact, :director, :tech_adr, :mkt_spcfc_attr), nunca um subconjunto. Modelado como lista de mapas com :type dizendo qual variante de ReqdMod é. ScpIndctn (enum de valor único "INSE") e MktSpcfcAttr.Nm (enum de valor único "CPFDIRETOR") ficam fixos. Rspnsblty também é fixo por tipo ("CONTATOPSP" em :contact, "DIRETORPSP" em :director) — o schema só garante que é um dos 2 valores do enum, não que é o valor certo pro ramo; encode/3 valida isso, junto com a composição exata de mod (4 itens, um de cada tipo).

Summary

Functions

Decodifica um XML de reda.022 de volta para a struct.

Monta o XML (envelope completo, AppHdr + Document) para a versão dada.

Types

modification()

@type modification() ::
  %{
    type: :contact,
    phne_nb: String.t(),
    mob_nb: String.t() | nil,
    fax_nb: String.t() | nil,
    email_adr: String.t(),
    rspnsblty: String.t()
  }
  | %{
      type: :director,
      nm: String.t(),
      phne_nb: String.t(),
      mob_nb: String.t() | nil,
      email_adr: String.t(),
      rspnsblty: String.t()
    }
  | %{type: :tech_adr, tech_adr: String.t()}
  | %{type: :mkt_spcfc_attr, val: String.t()}

t()

@type t() :: %Isox.Reda022{
  created_at: DateTime.t(),
  ispb: String.t(),
  mod: [modification()],
  msg_id: String.t()
}

version()

@type version() :: :v1_4

Functions

decode(xml)

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

Decodifica um XML de reda.022 de volta para a struct.

encode(message, header, version)

@spec encode(t(), Isox.AppHdr.t(), version()) ::
  {:ok, binary()} | {:error, String.t()}

Monta o XML (envelope completo, AppHdr + Document) para a versão dada.