Como o projeto está organizado¶
O nfse é um binário único em Go, sem cgo e sem servidor, fila ou banco de
dados. Já foi uma API REST com worker, MongoDB e Redis; a
ADR 0001 conta por que deixou de ser.
O caminho de uma nota¶
- Entrada.
internal/clilê as flags;internal/configlê onfse.yamle o arquivo da nota passado em--yaml. - Montagem.
pkg/xmlbuildermonta o XML da DPS, epkg/dpsido identificador de 42 caracteres. - Validação.
internal/domain/esquemaconfere a DPS contra os XSDs oficiais, einternal/domain/validationas regras que o XSD não expressa. - Assinatura.
internal/infrastructure/xmlsignerassina com o A1, em XMLDSig com canonicalização exc-c14n. - Envio.
internal/infrastructure/sefintransmite à Sefin Nacional e lê a NFS-e autorizada, ou a rejeição. - Documento auxiliar.
internal/domain/danfsemonta o DANFSe a partir do XML da nota, einternal/infrastructure/danfsepdfo desenha em PDF.
internal/domain não faz I/O: rede, disco e apresentação ficam em
internal/infrastructure e internal/cli.
Os diretórios¶
cmd/nfse/ binário do CLI
internal/
cli/ comandos, apresentação e leitura de entrada
config/ o nfse.yaml e os dados de cada nota
domain/ regras de negócio, sem I/O
emission/ cálculo de valores
validation/ regras de negócio da DPS que o XSD não expressa
esquema/ validação contra os XSDs oficiais (v1.01, embutidos)
servico/ a lista nacional de serviços, embutida
query/ chave de acesso e respostas de consulta
danfse/ modelo do documento auxiliar, montado do XML da NFS-e
texto/ normalização de texto das buscas (acentos, caixa)
infrastructure/
xmlsigner/ XMLDSig, canonicalização exc-c14n, certificado A1
sefin/ cliente HTTP da API do governo
brasilapi/ consulta do cadastro público de CNPJ (só no onboard)
ibge/ municípios do IBGE, com cache
danfsepdf/ desenho do DANFSe em PDF, nas coordenadas da NT 008
anexoa/ leitor do ANEXO_A oficial — só para testes
docs/ testes que conferem a documentação contra o código
sitegen/ gera as páginas deste site que vêm do repositório
pkg/
xmlbuilder/ montagem do XML da DPS
cnpjcpf/ validação de CNPJ e CPF
dpsid/ identificador da DPS (42 caracteres)
codmun/ código de município do IBGE (UF e dígito verificador)
docs/
decisoes/ registro de decisões de arquitetura (ADRs)
api/ especificações OpenAPI oficiais do governo
schemas/ XSDs oficiais
anexos/ planilhas oficiais (municípios, serviços, regras)
notas-tecnicas/ notas técnicas, que superam os manuais
markdown/ manuais oficiais convertidos para markdown
exemplos/ passo a passo executável
site/ este site
Dependências¶
Poucas, de propósito: toda dependência num binário que lida com certificado digital é superfície de risco. O comando usa cobra; o XML é manipulado com etree; o certificado A1 é lido com go-pkcs12. As planilhas do governo são lidas com a biblioteca padrão, sem biblioteca de planilha.