# Isox v0.2.0 - Table of Contents

> Codec ISO 20022 do catálogo de mensagens do SPI (Pix): encode e decode genéricos por envelope, dicionário de campos com o nome de cada um no catálogo do BCB, e assinatura XMLDSig no perfil do Manual de Segurança do SFN.

## Pages

- [Isox](readme.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)

## Modules

- [Isox](Isox.md): Codec das mensagens ISO 20022 do catálogo do SPI (Pix).

- Modelos
  - [Isox.AppHdr](Isox.AppHdr.md): BAH (`head.001`): o cabeçalho que toda mensagem do catálogo carrega
(Manual VIII).
  - [Isox.Envelope](Isox.Envelope.md): Cabeçalho mais mensagem: o par que `Isox.encode/2` recebe e
`Isox.decode/1` devolve.

- Dicionário de campos
  - [Isox.Dictionary](Isox.Dictionary.md): O que cada campo de cada mensagem quer dizer.
  - [Isox.Dictionary.Entry](Isox.Dictionary.Entry.md): Uma entrada do dicionário: tudo que se sabe sobre um campo de uma
mensagem.

- Mensagens (API de baixo nível)
  - [Isox.Admi002](Isox.Admi002.md): Recusa de mensagem: o que o SPI responde quando nem chegou a entender o
que recebeu.
  - [Isox.Admi004](Isox.Admi004.md): Evento de sistema: o aviso que o SPI manda a todos os participantes, sem
relação com transação nenhuma.
  - [Isox.Camt014](Isox.Camt014.md): Identificação de participante: quem é o dono de um ISPB e em que
situação ele está.
  - [Isox.Camt025](Isox.Camt025.md): Recibo: a resposta a uma ou mais `Isox.Trck002`.
  - [Isox.Camt029](Isox.Camt029.md): Resposta ao pedido de cancelamento de Pix Agendado: aceita ou recusa a
`Isox.Camt055`.
  - [Isox.Camt052](Isox.Camt052.md): Relação de lançamentos da Conta PI: a resposta a uma `Isox.Camt060` que
pediu `REL`, `TRD` ou `TRT`.
  - [Isox.Camt053](Isox.Camt053.md): Saldo da Conta PI: a resposta a uma `Isox.Camt060` que pediu `CSA` ou
`CRE`.
  - [Isox.Camt054](Isox.Camt054.md): Detalhe de um lançamento da Conta PI: a contrapartida contábil de cada
pagamento liquidado.
  - [Isox.Camt055](Isox.Camt055.md): Pedido de cancelamento de Pix Agendado.
  - [Isox.Camt060](Isox.Camt060.md): Consulta à Conta PI: saldo, extrato, relação de lançamentos ou detalhe
de um lançamento.
  - [Isox.Pacs002](Isox.Pacs002.md): Relatório de status: a resposta a uma `Isox.Pacs008` ou a uma
`Isox.Pacs004`.
  - [Isox.Pacs004](Isox.Pacs004.md): Devolução: a ordem que faz o dinheiro de um Pix já liquidado voltar.
  - [Isox.Pacs008](Isox.Pacs008.md): Ordem de crédito: a mensagem que move o dinheiro de um Pix.
  - [Isox.Pain009](Isox.Pain009.md): Solicitação de recorrência do Pix Automático: pede ao participante do
pagador que autorize uma série de cobranças.
  - [Isox.Pain011](Isox.Pain011.md): Cancelamento de recorrência do Pix Automático.
  - [Isox.Pain012](Isox.Pain012.md): Resposta sobre uma recorrência do Pix Automático: aceita ou recusa uma
`Isox.Pain009` ou uma `Isox.Pain011`.
  - [Isox.Pain013](Isox.Pain013.md): Instrução de pagamento agendada, vinculada a uma recorrência ativa do
Pix Automático.
  - [Isox.Pain014](Isox.Pain014.md): Resposta a uma instrução agendada: o participante do pagador aceita ou
recusa a `Isox.Pain013`.
  - [Isox.Pibr001](Isox.Pibr001.md): Eco: o ping do SPI.
  - [Isox.Pibr002](Isox.Pibr002.md): Eco: o pong do SPI.
  - [Isox.Reda014](Isox.Reda014.md): Pedido de registro de participante indireto sob um direto.
  - [Isox.Reda016](Isox.Reda016.md): Resposta a um pedido de cadastro: o desfecho de uma `Isox.Reda014`,
`Isox.Reda022` ou `Isox.Reda031`.
  - [Isox.Reda017](Isox.Reda017.md): Relatório de dados de participante.
  - [Isox.Reda022](Isox.Reda022.md): Alteração do cadastro de um participante direto: contatos, diretor
responsável, palavra-chave e CPF do diretor.
  - [Isox.Reda031](Isox.Reda031.md): Pedido de encerramento do serviço de liquidação para um participante
indireto.
  - [Isox.Reda041](Isox.Reda041.md): Aviso de mudança no cadastro de um participante.
  - [Isox.Registry](Isox.Registry.md): Descobre os módulos `Isox.Generated.<Mensagem>.<Versao>` já
carregados e despacha o parse pela combinação namespace + `MsgDefIdr`
(ADR 0002). Os dois precisam concordar, ou é erro.

  - [Isox.Trck002](Isox.Trck002.md): Autorrelato de transferência interna: o participante avisa ao BC um
pagamento que ele liquidou por dentro, sem passar pelo SPI.

- Assinatura digital (avançado)
  - [Isox.Xmldsig.Signer](Isox.Xmldsig.Signer.md): Núcleo do XMLDSig do Pix (Manual de Segurança do SFN Vol. II §3), comum
aos dois perfis que o manual define: SPI, com três `<ds:Reference>`
(tabela 3), e DICT, com duas (tabela 4). Hoje só o perfil SPI está
implementado, em `sign/4`. `sign_references/3` e `key_info_xml/2` já
bastam para montar o do DICT quando existir um simulador para ele, já
que a diferença entre os dois é só a lista de referências, não o resto
do mecanismo (§3.2 do manual: os passos são os mesmos).
  - [Isox.Xmldsig.TestCA](Isox.Xmldsig.TestCA.md): Gera, em memória, um par de chave privada + certificado autoassinado
RSA-2048, para uso em testes e exemplos de `Isox.Xmldsig.Signer`
e `Isox.Xmldsig.Verifier`.
  - [Isox.Xmldsig.Verifier](Isox.Xmldsig.Verifier.md): Verificação do perfil de assinatura SPI (Manual de Segurança do SFN Vol.
II §3.3): recalcula os três digests com canonicalização real, porque os
bytes
vêm de terceiro, então, diferente da assinatura na saída, não dá pra
não dá para supor que já chegaram canônicos, e confere a assinatura
RSA-SHA256
sobre o `SignedInfo`.

## Mix Tasks

- [mix catalog.gen](Mix.Tasks.Catalog.Gen.md): Lê todos os `.xsd` de mensagem em `--xsd-dir` (exceto `xmldsig`, que não é
mensagem) e gera, em `--out`, um módulo `Isox.Generated.<Mensagem>.<Versao>`
por arquivo, mais um módulo interno com o BAH (`head.001`), compartilhado
entre todas as mensagens (ADR 0004).
- [mix xmldsig.spike](Mix.Tasks.Xmldsig.Spike.md): Mede o throughput de assinar e verificar uma pacs.008 realista, sem
servidor HTTP no caminho

