Skip to content

Arquitetura

O pt-fiscal é um conjunto de funções puras agrupadas por domínio, sem estado partilhado e sem dependências em runtime. Cada validador normaliza o input, aplica uma verificação estrutural e um checksum/dígito de controlo.

flowchart LR
  IN["input em bruto<br/>(NIF / IBAN / CP7)"] --> N["normalizar<br/>(tirar espaços, prefixo PT)"]
  N --> S{"estrutura ok?"}
  S -- não --> F["false"]
  S -- sim --> C["checksum / dígito de controlo<br/>(mod-11 · ISO 7064 mod-97)"]
  C --> R["valid : boolean"]

Mapa de módulos

Módulo Responsabilidade
nif.ts Normalizar NIF, classificar tipo de entidade, dígito de controlo mod-11
iban.ts Normalizar IBAN, checksum ISO 7064 mod-97, regra de comprimento PT
postal.ts Validação e normalização do formato CP7
atcud.ts Construir/validar o código único de documento
qrcode.ts Compor a string de campos do QR da fatura da AT
index.ts Superfície da API pública

Princípios de design

  • Puras & determinísticas — cada função é input → output, segura no cliente ou servidor.
  • Zero dependências em runtime — nada para auditar ou atualizar; distribuído como ESM com tipos.
  • Estrutura, não existência — a validação prova a forma e os dígitos de controlo, nunca que um identificador está atribuído/ativo.
  • Composição em vez de bundling — o builder do QR devolve uma string; a renderização é escolha tua (mantém o pacote sem dependências).