Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nfe

Emissor NFS-e (Sistema Nacional) via API de Contribuintes, com:

  • leitura de parametros em params.json,
  • geracao de DPS em XML,
  • assinatura XMLDSig com certificado A1 (.pfx/.p12),
  • transmissao com mTLS,
  • selecao de ambiente (producao ou producao_restrita).

Requisitos

  • Python 3.11+
  • Certificado A1 ICP-Brasil em arquivo .pfx ou .p12

Instalacao

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Configuracao

  1. Copie params.example.json para params.json.
  2. Crie um arquivo .env com a senha do certificado:
    • CERT_PASSWORD=sua_senha_aqui
  3. Ajuste os dados da nota e o caminho do certificado em params.json.
    • Se receber 495 SSL Certificate Error, informe tambem certificate.chain_path com o bundle PEM da cadeia intermediaria do seu certificado cliente.
    • Se chain_path nao for informado, o sistema tenta gerar automaticamente um arquivo *.chain.pem ao lado do .pfx usando os links de cadeia da AC no proprio certificado.
    • No bloco dps, se issue_date, competence_date e issue_datetime estiverem em branco (""), o sistema preenche automaticamente com data/hora atual.
    • Quando competence_date estiver em branco, ela assume o mesmo valor de issue_date.
    • Para rotina mensal, normalmente voce so precisa alterar dps.number.
  4. O modelo atual esta pronto para tomador estrangeiro no padrao do nf_exemplo.xml:
    • service_taker.is_foreign: true
    • endereco estrangeiro em service_taker.country_code/city/street/number
    • bloco de comercio exterior em service
  5. Escolha ambiente:
    • producao_restrita (teste)
    • producao

Observacao: os endpoints oficiais podem evoluir. Se necessario, use request.api_base_url_override.

Executando emissao

python -m nfe.cli --params params.json --output-json resultado.json --output-xml dps-assinada.xml

Os arquivos de saida sao sempre gravados na pasta results/ (criada automaticamente), em subpasta por NF:

  • results/<YYYY-MM-DD>_<dps_id>/resultado.json
  • results/<YYYY-MM-DD>_<dps_id>/dps-assinada.xml

Mesmo quando voce informar --output-json e --output-xml, o CLI usa esses valores apenas como nome do arquivo dentro de results/<YYYY-MM-DD>_<dps_id>/.

Para consultar /dps/{id} apos enviar:

python -m nfe.cli --params params.json --check-dps-after-emit

Estrutura principal

  • src/nfe/models.py: schema tipado de params.json
  • src/nfe/dps_builder.py: gera XML DPS + identificador DPS
  • src/nfe/xml_signer.py: assinatura XMLDSig com A1
  • src/nfe/api_client.py: cliente HTTP com mTLS para SEFIN Nacional (/SefinNacional, POST /nfse, GET/HEAD /dps/{id})
  • src/nfe/cli.py: orquestracao do fluxo fim a fim

Testes

pytest

About

Gerador de nota fiscal eletrônica do emissor nacional https://www.nfse.gov.br/EmissorNacional/

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages