🦀 Rust NFe API
📋 Sobre
A Rust NFe API é uma biblioteca para manipulação de Notas Fiscais Eletrônicas (NF-e) no formato XML, seguindo a especificação do Layout 4.00 da SEFAZ. Escrita em Rust, oferece alto desempenho, segurança de tipos e facilidade de uso.
✨ Funcionalidades
- ⚡ Alto Desempenho - Parsing rápido com quick-xml
- 🔒 Type-Safe - Tipagem forte com enums para campos codificados
- 📋 Layout 4.00 - Suporte completo à especificação SEFAZ
- 🔄 Serialização - Converta entre Rust structs e XML
- 📦 NF-e & NFC-e - Suporte aos modelos 55 e 65
- 🧪 Testado - Cobertura de testes abrangente
- 🌐 API REST & GraphQL - Servidor web completo
- 📄 DANFE PDF - Geração de DANFE profissional
- 🔐 Certificado A1 - Suporte a certificado digital
- 📡 SEFAZ WebService - Cliente SOAP integrado
⚡ Benchmark de Performance
Testes realizados em modo release (Windows 11, i7):
| Operação | Tempo Médio |
|---|---|
| REST API | |
| Health Check | 2 ms |
| Validar Chave Acesso | 2 ms |
| Parse XML NF-e | 3 ms |
| Export PDF Basico | 4 ms |
| DANFE Profissional | 3 ms |
| GraphQL API | |
| GraphQL Health | 5 ms |
| GraphQL Validar Chave | 5 ms |
| GraphQL Schema SDL | 4 ms |
📦 Instalação
Adicione ao seu Cargo.toml:
[]
= "0.1.0"
Ou via cargo:
🚀 Uso Rápido
Parse de arquivo XML
use File;
use TryFrom;
use Nfe;
Parse de string XML
use TryFrom;
use Nfe;
Verificar modelo do documento
use ;
📚 Documentação
Estruturas Principais
| Struct | Descrição | Tag XML |
|---|---|---|
Nfe |
Estrutura principal da nota | <NFe> |
Identificacao |
Dados de identificação | <ide> |
Emitente |
Dados do emitente | <emit> |
Destinatario |
Dados do destinatário | <dest> |
Item |
Item da nota | <det> |
Produto |
Dados do produto | <prod> |
Imposto |
Impostos (ICMS, PIS, COFINS) | <imposto> |
Totalizacao |
Totais da nota | <total> |
Transporte |
Dados de transporte | <transp> |
Endereco |
Endereço | <enderEmit>, <enderDest> |
Enums Importantes
// Modelo do documento fiscal
// Tipo de operação
// Finalidade da emissão
// Modalidade do frete
🌐 API REST & GraphQL
O projeto inclui um servidor web completo (nfe-web) com:
Endpoints REST
# Health check
# Parse XML de NF-e
# Validar chave de acesso
# Gerar DANFE PDF
GraphQL
# Playground: http://localhost:8080/api/graphql/playground
# Query exemplo
# Validar chave
Executar servidor
# Servidor em http://localhost:8080
🧪 Testes
Execute os testes com:
Resultado esperado:
running 6 tests
test tests::endereco::parse_endereco_sem_complemento ... ok
test tests::endereco::parse_endereco_emitente ... ok
test tests::dest::parse_destinatario ... ok
test tests::dest::parse_destinatario_nao_contribuinte ... ok
test tests::itens::parse_produto ... ok
test tests::itens::parse_item ... ok
test result: ok. 6 passed; 0 failed; 0 ignored
🗂️ Estrutura do Projeto
nfe/
├── Cargo.toml
├── src/
│ ├── lib.rs # Entrada da biblioteca
│ ├── main.rs # Exemplo de uso
│ ├── base/ # Estruturas base
│ │ ├── mod.rs # Estrutura principal NFe
│ │ ├── dest.rs # Destinatário
│ │ ├── emit.rs # Emitente
│ │ ├── endereco.rs # Endereço
│ │ ├── totais.rs # Totalizações
│ │ ├── transporte.rs# Transporte
│ │ ├── ide/ # Identificação
│ │ │ ├── mod.rs
│ │ │ ├── emissao.rs
│ │ │ └── operacao.rs
│ │ └── item/ # Itens/Produtos
│ │ ├── mod.rs
│ │ ├── produto.rs
│ │ └── imposto/
│ │ ├── mod.rs
│ │ ├── icms.rs
│ │ ├── pis.rs
│ │ └── cofins.rs
│ ├── modelos/ # Modelos NF-e específicos
│ └── tests/ # Testes unitários
└── xmls/ # XMLs de exemplo
🔧 Dependências
| Crate | Versão | Uso |
|---|---|---|
quick-xml |
0.31 | Parsing XML |
serde |
1.0 | Serialização |
serde_repr |
0.1 | Serialização de enums |
chrono |
0.4 | Data/hora |
derive_more |
0.99 | Derive macros |
tokio |
1.0 | Async runtime |
📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
🤝 Contribuindo
Contribuições são bem-vindas! Por favor:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -m 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
📬 Contato
- GitHub: @leonardo-matheus
- Projeto: Rust-Nfe-API
- Landing Page: https://leonardo-matheus.github.io/Rust-Nfe-API/