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 (
producaoouproducao_restrita).
- Python 3.11+
- Certificado A1 ICP-Brasil em arquivo
.pfxou.p12
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"- Copie
params.example.jsonparaparams.json. - Crie um arquivo
.envcom a senha do certificado:CERT_PASSWORD=sua_senha_aqui
- Ajuste os dados da nota e o caminho do certificado em
params.json.- Se receber
495 SSL Certificate Error, informe tambemcertificate.chain_pathcom o bundle PEM da cadeia intermediaria do seu certificado cliente. - Se
chain_pathnao for informado, o sistema tenta gerar automaticamente um arquivo*.chain.pemao lado do.pfxusando os links de cadeia da AC no proprio certificado. - No bloco
dps, seissue_date,competence_dateeissue_datetimeestiverem em branco (""), o sistema preenche automaticamente com data/hora atual. - Quando
competence_dateestiver em branco, ela assume o mesmo valor deissue_date. - Para rotina mensal, normalmente voce so precisa alterar
dps.number.
- Se receber
- 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
- Escolha ambiente:
producao_restrita(teste)producao
Observacao: os endpoints oficiais podem evoluir. Se necessario, use
request.api_base_url_override.
python -m nfe.cli --params params.json --output-json resultado.json --output-xml dps-assinada.xmlOs arquivos de saida sao sempre gravados na pasta results/ (criada automaticamente), em subpasta por NF:
results/<YYYY-MM-DD>_<dps_id>/resultado.jsonresults/<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-emitsrc/nfe/models.py: schema tipado deparams.jsonsrc/nfe/dps_builder.py: gera XML DPS + identificador DPSsrc/nfe/xml_signer.py: assinatura XMLDSig com A1src/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
pytest