Isox.Reda022 (Isox v0.2.0)

Copy Markdown View Source

Alteração do cadastro de um participante direto: contatos, diretor responsável, palavra-chave e CPF do diretor.

Versão 1.4. A resposta é uma Isox.Reda016. O ispb tem que ser o próprio remetente: mexer no cadastro de outra instituição volta com ATC7.

O pacote é sempre inteiro

Mod é [4..4] no schema real, exatamente quatro, não ilimitado. Sempre as quatro modificações juntas, uma de cada tipo (:contact, :director, :tech_adr, :mkt_spcfc_attr), nunca um subconjunto. Aqui isso é lista de mapas com :type dizendo qual variante é.

ScpIndctn ("INSE") e MktSpcfcAttr.Nm ("CPFDIRETOR") têm valor único e ficam fixos.

O schema que obrigou a corrigir o compilador

Esta foi a mensagem que expôs um furo no Compiler (issue #27). ReqdMod é um xs:choice entre CtctDtls, que por sua vez é outra escolha entre ReqdModContato e ReqdModDiretor, TechAdr e MktSpcfcAttr. Os dois grupos de CtctDtls compartilham quase todas as tags: só Nm distingue um do outro.

Rspnsblty também é fixo por variante ("CONTATOPSP" em :contact, "DIRETORPSP" em :director). O schema só garante que é um dos dois valores do enum, não que é o valor certo para o ramo, então quem valida isso é o encode/3, junto com a composição exata de mod.

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.