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
@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()}
@type t() :: %Isox.Reda022{ created_at: DateTime.t(), ispb: String.t(), mod: [modification()], msg_id: String.t() }
@type version() :: :v1_4
Functions
Decodifica um XML de reda.022 de volta para a struct.
@spec encode(t(), Isox.AppHdr.t(), version()) :: {:ok, binary()} | {:error, String.t()}
Monta o XML (envelope completo, AppHdr + Document) para a versão dada.