Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

ACBr Python

Cliente Python independente de Django, Flask ou outro framework para o worker nativo público ACBr NF-e/NFC-e. Versão alpha 0.1.0a3, sem homologação fiscal. O pacote é instalado com pip e importa como acbr; não há dependências Python de execução nem necessidade de Node.js ou PHP.

O SDK reaproveita o worker 0.2.0 e o contrato de cosmemilton/acbr-node, sem reimplementar cálculos, assinatura ou regras fiscais. A API pública oferece gerar_xml, validar, assinar, transmitir, consultar, cancelar, inutilizar e a interface experimental recuperar_xml. Todas as operações que podem acessar a SEFAZ exigem allow_network=True explícito por chamada.

O runtime fixado é 0.2.1: ele preserva os executáveis e o contrato da 0.2.0 e completa os textos de licença que acompanham a distribuição nativa.

Este repositório contém o SDK público reutilizável. Aplicações consumidoras, inclusive uma integração privada, instalam o pacote e fornecem sua própria configuração em execução. Dados de empresas, certificados e credenciais da aplicação consumidora não fazem parte do SDK.

Plataformas e instalação

O cliente tem como alvo CPython 3.11 a 3.14, Windows x64 e Linux x64 com glibc. O runtime Linux de referência foi construído para Ubuntu 24.04. A matriz da CI cobre essas versões nos dois sistemas; uma matriz configurada não significa que uma execução tenha passado. macOS, ARM, Python 32 bits, Alpine/musl e outras implementações Python não fazem parte deste MVP.

Crie um ambiente virtual:

python -m venv .venv

Ative o ambiente (.venv\Scripts\Activate.ps1 no PowerShell ou source .venv/bin/activate no bash). Para instalar pelo PyPI quando a versão estiver disponível:

python -m pip install acbr-python==0.1.0a3
python -m acbr ajuda Ide.cUF
python -m acbr ajuda TProd

Para desenvolvimento ou antes da primeira publicação, instale na cópia deste repositório com python -m pip install .; os comandos de ajuda são iguais.

Esses comandos de ajuda são offline e não exigem runtime. Para as operações nativas, a instalação é uma etapa explícita, separada de pip install:

python -m acbr runtime install --directory .runtime
python -m acbr doctor --directory .runtime/runtime

O instalador escolhe o arquivo original 0.2.1 para o sistema e arquitetura atuais. Antes de extrair, verifica tamanho e SHA-256 fixados no pacote; depois confere os arquivos do inventário. Não executa scripts de instalação npm. Fontes, licenças, schemas, serviços e bibliotecas acompanham o runtime. Para uma instalação sem download, obtenha previamente o .tgz correspondente ao pin e use --archive caminho/arquivo.tgz no mesmo comando de instalação.

Use uma pasta de runtime sob seu controle e informe o caminho runtime retornado pelo instalador ao cliente. doctor verifica a instalação; não consulta a SEFAZ nem atesta validade fiscal de documentos.

Uso com documento sintético

A fixture versionada é sintética, sem valor fiscal. O exemplo abaixo gera XML localmente; não transmite documento nem usa certificado:

import json
from pathlib import Path

from acbr import Configuracao, Documento, Emissor

dados = json.loads(Path("tests/fixtures/documento.json").read_text("utf-8"))
config = Configuracao(cnpj="11222333000181", uf="CE", modelo=55, ambiente=2)

with Emissor(config, runtime_directory=Path(".runtime/runtime"), timeout=120) as emissor:
    resultado = emissor.gerar_xml(Documento(dados))
    print(resultado.sucesso, resultado.estado, resultado.codigo)
    if resultado.sucesso and resultado.xml is not None:
        validacao = emissor.validar(resultado.xml)
        print(validacao.sucesso, validacao.codigo)

Um XML sem assinatura pode falhar no schema que exige assinatura. A validação estrutural Python e a validação local nativa não substituem homologação nem autorização fiscal. Nenhum teste desta entrega usa certificado A1 de contribuinte, documentos privados ou tráfego fiscal.

Modelos, campos e tipos

O contrato compartilhado fornece modelos gerados e ajuda de campos/tipos:

python -m acbr ajuda 'Det[].Prod.vProd'
python examples/ajuda.py TProd
python tools/generate_models.py --check

Maiúsculas e minúsculas seguem o contrato ACBr. Decimais são strings, como "10.00", para evitar a perda de precisão de float. Datas seguem o formato civil do contrato e campos omitidos não recebem defaults fiscais inventados. Consulte a ajuda do tipo antes de construir um documento.

Prazos, cancelamento e encerramento

Cada operação usa seu próprio processo nativo, com JSON pelo stdin/stdout, sem shell. O cliente limita bytes, drena os pipes e impõe prazo à comunicação. timeout é expresso em segundos; o limite padrão max_bytes é 8 MiB. Use o emissor como context manager ou chame fechar() ao terminar. Uma instância aceita uma operação por vez; chamadas concorrentes recebem EMISSOR_OCUPADO, sem fila implícita. O prazo cobre comunicação e execução do filho; a verificação prévia dos arquivos tem seu próprio custo.

As operações aceitam cancel=evento, com evento do tipo threading.Event. Definir o evento solicita cancelamento cooperativo durante a chamada; não reverte uma operação que já tenha ocorrido no serviço remoto. O cliente não repete chamadas automaticamente. Um prazo excedido ou uma resposta perdida não prova que uma operação remota deixou de acontecer.

Resultados e erros têm tipos próprios; ResultadoFiscal.xml exige acesso explícito ao conteúdo. Não registre XML, PFX, senhas nem a carga completa de uma chamada. As representações padrão ocultam conteúdo sensível.

Para registrar o início observado de um envio na aplicação consumidora, Emissor(..., ao_iniciar_envio=callback) entrega ao callback um EventoEnvio imutável, com identificador de correlação e comando, sem dados fiscais. O evento apenas observa o marcador do worker para transmitir, cancelar ou inutilizar; não confirma aceitação, não fornece idempotência e não garante persistência antes do envio. Se o callback falhar, o resultado pode ser incerto e não há repetição automática.

Operações públicas e acesso à rede

Método Entrada Rede fiscal
gerar_xml Documento ou dicionário do contrato Não
validar XML em texto Não
assinar XML em texto, com A1 na configuração Não
transmitir XML assinado Exige allow_network=True
consultar Consulta com chave e recibo opcional Exige allow_network=True
cancelar Cancelamento Exige allow_network=True
inutilizar Inutilizacao Exige allow_network=True
recuperar_xml XML assinado, interface experimental Exige allow_network=True

Consulta, Cancelamento e Inutilizacao são dataclasses de entrada exportadas por acbr. Todas as operações retornam ResultadoFiscal e aceitam cancel=threading.Event(). Os métodos de rede também requerem A1 na configuração. O bloqueio é aplicado antes de iniciar uma chamada ao worker; selecionar ambiente=2 não libera rede por si só.

O cliente não oferece repetição automática nem opções de lote ou modo assíncrono. A transmissão segue o comportamento síncrono do worker fixado. A CLI oferece somente ajuda e gestão do runtime: não há comandos CLI para transmitir, consultar, cancelar ou inutilizar documentos.

Veja as assinaturas, tipos, resultados e erros na referência da API. As operações de rede são verificadas por protocolo simulado; nenhuma delas foi exercitada contra a SEFAZ nesta entrega.

Recuperação de XML: interface experimental

recuperar_xml(xml_assinado) requer CertificadoA1(pfx: bytes, senha: str) na configuração e pode consultar a SEFAZ para reconstruir o XML processado. A chamada só permite rede com allow_network=True explícito; o padrão a bloqueia. O cliente envia o certificado pelo stdin, nunca por argumentos.

Nesta entrega, essa interface só é verificada por testes de protocolo com worker simulado e materiais sintéticos. Não há teste de recuperação na SEFAZ nem uso de certificado de contribuinte. A implementação não deve ser tratada como homologada. Não é disponibilizado exemplo que realize essa consulta.

Desenvolvimento e verificação

python -m pip install -e .
python -m unittest discover -s tests -v
python tools/generate_models.py --check
python -m pip install build
python -m build

A suíte padrão usa fixtures e workers simulados e dispensa internet após a instalação das ferramentas. O teste nativo é opt-in: defina ACBR_TEST_RUNTIME para o caminho de uma instalação verificada e execute python -m unittest discover -s tests -p test_native.py -v. Instale antes python -m pip install "cryptography>=46": essa dependência é somente dos testes e cria um A1 sintético efêmero; ela não é dependência de execução do SDK. O smoke cobre geração, assinatura e validação locais pela API pública, rejeição de assinatura alterada e entrada inválida, sem operações fiscais remotas. A CI instala explicitamente os runtimes Windows e Linux e essa dependência de teste, além da matriz de testes offline e build. Não há publicação automática nem credenciais de publicação na CI.

Veja arquitetura e escopo para as decisões do SDK.

Licenças e fontes

Cliente e contrato: LGPL-2.1-or-later; consulte LICENSE e NOTICE. O wheel não incorpora binários nativos. A instalação preserva fontes e licenças dos arquivos originais do runtime; os componentes nativos mantêm as respectivas licenças e exceções.

Referências oficiais consultadas:

Este é um projeto independente, sem certificação oficial pelo Projeto ACBr.

Metadata

Release files for acbr-python 0.1.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for acbr-python 0.1.0a3
File Size Uploaded Provenance
acbr_python-0.1.0a3.tar.gz 104.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for acbr-python 0.1.0a3
File Interpreter ABI Platform
acbr_python-0.1.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 168.8 kB

Release files / acbr_python-0.1.0a3.tar.gz

Download URL acbr_python-0.1.0a3.tar.gz
Size 104.7 kB
Tags Source
SHA-256 checksum
How to use checksums
e76a5ae037320777a91673dca2a93b2fe67c92deac21c15761551318cc56a550
BLAKE2b-256 checksum
How to use checksums
23189f73f46daa0319c4a1ed3238b5c46972c1fcddcf7fc1f000e0ad6320910c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Release files / acbr_python-0.1.0a3-py3-none-any.whl

Download URL acbr_python-0.1.0a3-py3-none-any.whl
Size 64.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
369d132427a71c4ed54b74f53c2afee7e98beba9017ab665d5d9389684301ea6
BLAKE2b-256 checksum
How to use checksums
ada4345452ac42717cc64f0167776a25b0549724ca856cdea914e44dd46984a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

Security for acbr-python 0.1.0a3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for acbr_python-0.1.0a3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page