OpenSefaz
⚠️ Aviso Importante
Este projeto está em desenvolvimento ativo. Use em produção com cautela e sempre valide os resultados. A SEFAZ pode alterar especificações sem aviso prévio.
SDK Rust para integração com os sistemas da SEFAZ (NF-e, NFC-e, CT-e)
🚀 Visão Geral
OpenSefaz é um SDK completo escrito em Rust para facilitar a integração com os sistemas da SEFAZ, proporcionando:
- Segurança: Aproveita as garantias de segurança de memória do Rust
- Performance: Código otimizado e eficiente
- Confiabilidade: Sistema de tipos forte previne erros em tempo de compilação
- Facilidade de uso: API intuitiva e bem documentada
📦 Crates
O projeto é organizado em crates modulares:
| Crate | Descrição |
|---|---|
nfe-core |
Tipos core, erros, configurações, validações |
nfe-xml |
Parse, validação e assinatura de XML |
nfe-transport |
Camada de transporte, cliente HTTP, SOAP |
nfe-cli |
Interface de linha de comando |
🚀 Quick Start
use ;
use ;
async
📦 Instalação
Usando crates individuais
[]
= "0.1"
= "0.1"
= { = "1.0", = ["full"] }
Usando todos os crates
[]
= "0.1"
= "0.1"
= "0.1"
CLI
🔧 Uso
Biblioteca - nfe-core (validações)
use ;
// Validar e formatar CNPJ
if validar_cnpj
Biblioteca - nfe-xml (XML)
use ;
let validator = new;
validator.validate_nfe?;
let signer = new;
let signed = signer.sign_xml?;
Biblioteca - nfe-transport (SEFAZ)
use ;
let cert = from_pem_file?;
let client = new?;
let resultado = client.consultar_por_chave.await?;
CLI
# Consultar NF-e
# Verificar status do serviço
# Validar XML
# Gerar chave de acesso
# Formatar documentos
🏗️ Arquitetura do Projeto
opensefaz/
├── nfe-core/ # Core types, error handling, config, validations
│ ├── src/
│ │ ├── lib.rs # Ponto de entrada
│ │ ├── error.rs # Error types
│ │ ├── config.rs # Config, Ambiente
│ │ ├── types.rs # Status, ConsultaResultado, ChaveAcesso
│ │ └── utils.rs # Validação CNPJ/CPF, formatação
│ └── Cargo.toml
├── nfe-xml/ # XML handling, signing, validation
│ ├── src/
│ │ ├── lib.rs
│ │ ├── parse.rs # XML parsing (NFe, InfNFe, etc)
│ │ ├── sign.rs # XML signing
│ │ └── validate.rs # XML validation
│ └── Cargo.toml
├── nfe-transport/ # Transport layer, HTTP, SOAP
│ ├── src/
│ │ ├── lib.rs
│ │ ├── client.rs # NfeClient
│ │ ├── soap.rs # SOAP envelope
│ │ └── certificate.rs
│ └── Cargo.toml
├── nfe-cli/ # CLI binary
│ ├── src/
│ │ └── main.rs
│ └── Cargo.toml
└── Cargo.toml # Workspace
📚 Recursos Principais
nfe-core - Core
- Validação de CNPJ/CPF (módulo 11)
- Validação de chave de acesso (44 dígitos)
- Cálculo de dígito verificador
- Formatação de documentos (CNPJ, CPF, CEP)
- Sistema de erros tipado
nfe-xml - XML
- Parse de NF-e (NFe, InfNFe, Ide, Emit, Dest, etc)
- Validação de estrutura XML
- Extração de chave de acesso
- Detecção de cancelamento/denegação
nfe-transport - Transport
- Cliente HTTP para SEFAZ
- Construção de envelopes SOAP
- Gerenciamento de certificados
- Consulta por chave/protocolo
- Cancelamento de eventos
nfe-cli - CLI
consultar- Consulta NF-e por chavestatus- Status do serviçovalidar- Valida XMLassinar- Assina XMLgerar-chave- Gera chave de acessocertificado- Verifica certificadoformatar- Formata documentos
🔐 Segurança
- Assinatura digital com RSA-SHA256
- Comunicação HTTPS com TLS
- Validação de certificados digitais
- Validação de todas as entradas
🧪 Testes
# Rodar todos os testes
# Testes com output
# Testar crate específico
# Coverage
🛠️ Desenvolvimento
Pré-requisitos
- Rust 1.75+
- OpenSSL (para recursos de criptografia)
Build
# Build completo do workspace
# Build específico
# Release
Features
| Feature | Crate | Descrição |
|---|---|---|
sync |
nfe-transport | API síncrona (padrão) |
async |
nfe-transport | API assíncrona |
openssl-vendored |
nfe-transport | OpenSSL estático |
📖 Documentação
- 📚 Documentação Completa - Guia completo
- 🌐 Site de Documentação - mdBook
- 📄 API Reference - docs.rs
Gerar Site de Documentação
🤝 Contribuindo
Veja CONTRIBUTING.md.
Regra importante: Ao adicionar novas funcionalidades, atualize também a documentação em docs/.
Como contribuir:
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'feat(nfe-core): adiciona nova função') - Push (
git push origin feature/nova-feature) - Abra um Pull Request
- Atualize a documentação em
docs/se necessário
📄 Licença
- MIT License (LICENSE-MIT)
🔗 Links Úteis
📞 Suporte
- Issues: https://github.com/opensefaz/opensefaz/issues
- Discussions: https://github.com/opensefaz/opensefaz/discussions
OpenSefaz - Criando sistemas fiscais robustos com Rust 🦀