# 📄 API de Emissão de NF-e

Sistema de emissão e gerenciamento de Notas Fiscais Eletrônicas (NF-e) homologado pela SEFAZ.

---

## 📚 Documentação Completa

**👉 Para integração com sistemas externos, acesse a [Documentação Completa em docs/](docs/README.md)**

**👉 Guia de Integração Direto: [docs/GUIA_INTEGRACAO.md](docs/GUIA_INTEGRACAO.md)**

---

## 🚀 Características

**Versão:** 1.4.0

- ✅ Emissão de NF-e em ambiente de **produção**
- ✅ **Cancelamento de NF-e** (com XML e PDF automático)
- ✅ Inutilização de numeração de NF-e
- ✅ **Carta de Correção Eletrônica (CC-e)** (com XML e PDF automático)
- ✅ Geração automática de DANFE (PDF)
- ✅ Assinatura digital com certificado A1
- ✅ Integração com SEFAZ via webservice
- ✅ API REST para fácil integração
- ✅ Suporte a múltiplas empresas
- ✅ **Suporte completo a CPF (Pessoa Física) e CNPJ (Pessoa Jurídica)**
- ✅ **Detecção automática de consumidor final e não contribuinte de ICMS**

## 📋 Requisitos

- PHP 8.2 ou superior
- Extensões: `openssl`, `soap`, `xml`, `curl`
- Certificado Digital A1 (.pfx)
- Composer

## 🔧 Instalação

```bash
# Clone o repositório
git clone [url-do-repositorio]

# Instale as dependências
composer install

# Configure o certificado digital
# 1. Copie o arquivo de exemplo
cp config_certificado.example.php config_certificado.php

# 2. Edite e coloque sua senha real
# config_certificado.php

# 3. Copie seu certificado .pfx para a pasta certificados
# certificados/empresas/{CNPJ}/{CNPJ}.pfx
```

## ⚙️ Configuração

### 1. Certificado Digital

Copie o arquivo de exemplo e configure:

```bash
cp config_certificado.example.php config_certificado.php
```

Edite `config_certificado.php`:

```php
<?php
return [
    'senha_certificado' => 'SUA_SENHA_REAL_AQUI'
];
```

### 2. Banco de Dados (Opcional)

Se for usar banco de dados:

```bash
cp config_database.example.php config_database.php
```

Edite `config_database.php` com suas credenciais.

### 3. Estrutura de Pastas

As seguintes pastas serão criadas automaticamente ao emitir a primeira nota:

```
logs/           # Logs do sistema
arquivos/       # XMLs e PDFs gerados
certificados/   # Certificados digitais
storage/        # Arquivos temporários
```

**⚠️ IMPORTANTE:** Nunca versione arquivos sensíveis (certificados, senhas, logs)!

---

## 🔒 Segurança e .gitignore

O projeto já vem configurado com `.gitignore` para proteger dados sensíveis:

### 📁 Pastas excluídas do Git:

- ✅ `logs/` - Arquivos de log
- ✅ `arquivos/` - XMLs e PDFs de notas emitidas
- ✅ `certificados/` - Certificados digitais
- ✅ `storage/` - Arquivos temporários
- ✅ `vendor/` - Dependências do Composer

### 🔐 Arquivos sensíveis excluídos:

- ✅ `config_certificado.php` - Senha do certificado
- ✅ `config_database.php` - Credenciais do banco
- ✅ `*.pfx`, `*.p12`, `*.pem` - Certificados digitais
- ✅ `*.log` - Logs do sistema
- ✅ `composer.lock` - Lock de dependências

### ✨ Arquivos versionados como exemplo:

- ✅ `config_certificado.example.php`
- ✅ `config_database.example.php`
- ✅ `.gitkeep` nas pastas necessárias

**⚠️ NUNCA VERSIONE:**
- Certificados digitais (`.pfx`, `.p12`)
- Arquivos de configuração com senhas reais
- XMLs e PDFs de notas fiscais (dados sensíveis de clientes)
- Logs do sistema

---

## 📡 Endpoints da API

### Base URL
```
http://seu-dominio.com.br/pontti_nfe
```

---

## 📤 Emitir NF-e

Emite uma Nota Fiscal Eletrônica na SEFAZ.

### Endpoint
```http
POST /api/nfe/emitir.php
```

### Headers
```http
Content-Type: application/json
```

### Request Body

```json
{
  "empresa": {
    "nome": "PRINT JET DIGITAL",
    "cnpj": "21497109000156",
    "inscricao_estadual": "093218028",
    "estado": "PE",
    "cidade": "Recife",
    "endereco": "Rua Frei Cassimiro",
    "numero": "644",
    "bairro": "Santo Amaro",
    "cep": "50100260",
    "email": "atendimento@printjetdigital.com.br",
    "telefone": "(81) 99999-9999"
  },
  "cliente": {
    "nome": "Systhema Tecnologia LTDA",
    "cnpj": "20755929000138",
    "endereco": "Rua setenta e cinco, 85",
    "cidade": "Paulista",
    "bairro": "Maranguape1",
    "estado": "PE",
    "cep": "53441-040",
    "inscricao_estadual": "063257424",
    "email": "contato@pontti.com.br",
    "telefone": "(81) 3014-2099"
  },
  "nfe": {
    "numero": "1",
    "serie": "001",
    "data_emissao": "2025-10-15",
    "data_saida": "2025-10-15"
  },
  "itens": [
    {
      "codigo": "PROD001",
      "descricao": "Produto Teste 1",
      "ncm": "84713000",
      "cfop": "5102",
      "unidade_comercial": "UN",
      "quantidade_comercial": 1,
      "valor_unitario": 1.00,
      "valor_total": 1.00,
      "cst_icms": "00",
      "base_calculo_icms": 1.00,
      "aliquota_icms": 20.50,
      "valor_icms": 0.21,
      "origem": "0"
    }
  ]
}
```

---

#### Exemplo: Emissão para **Pessoa Física** (CPF)

```json
{
  "empresa": {
    "nome": "PRINT JET DIGITAL",
    "cnpj": "21497109000156",
    "inscricao_estadual": "093218028",
    "estado": "PE",
    "cidade": "Recife",
    "endereco": "Rua Frei Cassimiro",
    "numero": "644",
    "bairro": "Santo Amaro",
    "cep": "50100260",
    "email": "atendimento@printjetdigital.com.br",
    "telefone": "(81) 99999-9999"
  },
  "cliente": {
    "nome": "João da Silva",
    "cpf": "05138670409",
    "endereco": "Rua das Flores, 123",
    "cidade": "Recife",
    "bairro": "Boa Viagem",
    "estado": "PE",
    "cep": "51020-200",
    "email": "joao@email.com",
    "telefone": "(81) 98888-7777"
  },
  "nfe": {
    "numero": "2",
    "serie": "001",
    "data_emissao": "2025-10-15",
    "data_saida": "2025-10-15"
  },
  "itens": [
    {
      "codigo": "PROD001",
      "descricao": "Produto Teste 1",
      "ncm": "84713000",
      "cfop": "5102",
      "unidade_comercial": "UN",
      "quantidade_comercial": 1,
      "valor_unitario": 100.00,
      "valor_total": 100.00,
      "cst_icms": "00",
      "base_calculo_icms": 100.00,
      "aliquota_icms": 18.00,
      "valor_icms": 18.00,
      "origem": "0"
    }
  ]
}
```

**Nota:** Para pessoa física, **não é necessário** informar `inscricao_estadual`, pois pessoa física não possui IE.

---

### Response - Sucesso (200 OK)

```json
{
  "success": true,
  "chave_acesso": "26250910214971090001565500100000001123456789",
  "protocolo": "126250000123456",
  "cStat": "100",
  "xml_path": "/pontti_nfe/arquivos/21497109000156/nfe/xml/2025_10/assinados/26250910214971090001565500100000001123456789.xml",
  "pdf_path": "/pontti_nfe/arquivos/21497109000156/nfe/pdf/2025_10/emitidos/NFe_26250910214971090001565500100000001123456789.pdf",
  "message": "NFe emitida com sucesso"
}
```

**Campos do retorno:**
- `chave_acesso` - Chave de acesso da NFe (44 dígitos)
- `protocolo` - Número do protocolo de autorização da SEFAZ
- `cStat` - Código de status da SEFAZ (100 = Autorizado, 150 = Autorizado fora do prazo)
- `xml_path` - Caminho do arquivo XML gerado
- `pdf_path` - Caminho do arquivo PDF (DANFE) gerado

### Response - Erro (400/500)

```json
{
  "success": false,
  "chave_acesso": "26250910214971090001565500100000001123456789",
  "cStat": "204",
  "error": "Rejeição: Duplicidade de NF-e [nRec: 126250105861045]"
}
```

**Campos do retorno de erro:**
- `chave_acesso` - Chave de acesso da NFe que foi tentada (quando disponível)
- `cStat` - Código de status de erro da SEFAZ
- `error` - Mensagem descritiva do erro

---

## ❌ Cancelar NF-e

Cancela uma Nota Fiscal Eletrônica previamente autorizada.

### Endpoint
```http
POST /api/nfe/cancelar.php
```

### Headers
```http
Content-Type: application/json
```

### Request Body

```json
{
  "chave_acesso": "26250910214971090001565500100000001123456789",
  "justificativa": "Cancelamento por erro na emissão da nota fiscal",
  "protocolo_autorizacao": "126250000123456",
  "empresa": {
    "nome": "PRINT JET DIGITAL",
    "cnpj": "21497109000156",
    "inscricao_estadual": "093218028",
    "estado": "PE"
  }
}
```

### Response - Sucesso (200 OK)

```json
{
  "success": true,
  "chave_acesso": "26250910214971090001565500100000001123456789",
  "protocolo_cancelamento": "126250000123457",
  "data_cancelamento": "2025-10-15T14:30:00-03:00",
  "message": "NFe cancelada com sucesso"
}
```

### Response - Erro (400/500)

```json
{
  "success": false,
  "error": "Descrição do erro"
}
```

---

## 📊 Verificar Status

Verifica o status da API e conexão com SEFAZ.

### Endpoint
```http
GET /status.php
```

### Response (200 OK)

```json
{
  "status": "online",
  "ambiente": "producao",
  "sefaz": "conectado",
  "timestamp": "2025-10-15T14:30:00-03:00"
}
```

---

## 📝 Campos Obrigatórios

### Empresa
- `nome` - Razão social
- `cnpj` - CNPJ (com ou sem máscara)
- `inscricao_estadual` - IE
- `estado` - UF (sigla)
- `cidade` - Nome do município
- `endereco` - Logradouro
- `numero` - Número do endereço
- `bairro` - Bairro
- `cep` - CEP (com ou sem máscara)

### Cliente
- `nome` - Razão social ou nome
- `cpf` - CPF (obrigatório para pessoa física) **OU** `cnpj` - CNPJ (obrigatório para pessoa jurídica)
  - **Pessoa Física (CPF)**: Informar campo `cpf` com 11 dígitos
  - **Pessoa Jurídica (CNPJ)**: Informar campo `cnpj` com 14 dígitos
- `endereco` - Logradouro
- `cidade` - Nome do município
- `bairro` - Bairro
- `estado` - UF (sigla)
- `cep` - CEP
- `inscricao_estadual` - IE (somente para pessoa jurídica contribuinte)

### NF-e (Opcional - valores automáticos)
- `numero` - Número sequencial (gerado automaticamente se não informado)
- `serie` - Série (padrão: "001")
- `data_emissao` - Data de emissão (padrão: hoje)
- `data_saida` - Data de saída (padrão: data_emissao)

### Itens
- `codigo` - Código do produto
- `descricao` - Descrição do produto
- `ncm` - Código NCM
- `cfop` - CFOP da operação
- `unidade_comercial` - Unidade (UN, KG, etc)
- `quantidade_comercial` - Quantidade
- `valor_unitario` - Valor unitário
- `valor_total` - Valor total do item
- `cst_icms` - CST do ICMS (regime normal) ou CSOSN (Simples Nacional)
  - **CST (Regime Normal)**: 00, 10, 20, 30, 40, 41, 50, 51, 60, 70, 90
  - **CSOSN (Simples Nacional)**: 101, 102, 103, 201, 202, 203, 300, 400, 500, 900
- `base_calculo_icms` - Base de cálculo ICMS
- `aliquota_icms` - Alíquota ICMS
- `origem` - Origem da mercadoria (0-8)

---

## 🤖 Regras Automáticas do Sistema

O sistema aplica **automaticamente** as seguintes regras conforme o tipo de cliente:

### ✅ Detecção de Consumidor Final e Não Contribuinte

| Situação do Cliente | indFinal | indIEDest | Quando acontece |
|---------------------|----------|-----------|-----------------|
| **Pessoa Física (CPF)** | `1` (Consumidor Final) | `9` (Não Contribuinte) | Sempre que informar CPF (11 dígitos) |
| **PJ sem IE** | `1` (Consumidor Final) | `9` (Não Contribuinte) | CNPJ informado mas `inscricao_estadual` vazio |
| **PJ com IE** | `0` (Normal) | `1` (Contribuinte ICMS) | CNPJ + `inscricao_estadual` informados |

**Importante:**
- Você **não precisa** se preocupar em configurar `indFinal` ou `indIEDest`
- O sistema detecta automaticamente baseado nos dados do cliente
- Evita erro **696 da SEFAZ**: "Operação com não contribuinte deve indicar operação com consumidor final"

### 📋 Exemplos Práticos

#### Exemplo 1: Pessoa Física (CPF)
```json
{
  "cliente": {
    "cpf": "05138670409"  // ← 11 dígitos
  }
}
```
**Resultado automático:**
- ✅ `indFinal = 1` (Consumidor Final)
- ✅ `indIEDest = 9` (Não Contribuinte)
- ✅ Campo `<CPF>` no XML

---

#### Exemplo 2: Pessoa Jurídica SEM Inscrição Estadual
```json
{
  "cliente": {
    "cnpj": "20755929000138",  // ← 14 dígitos
    "inscricao_estadual": ""    // ← Vazio = não contribuinte
  }
}
```
**Resultado automático:**
- ✅ `indFinal = 1` (Consumidor Final)
- ✅ `indIEDest = 9` (Não Contribuinte)
- ✅ Campo `<CNPJ>` no XML (sem tag `<IE>`)

---

#### Exemplo 3: Pessoa Jurídica COM Inscrição Estadual
```json
{
  "cliente": {
    "cnpj": "20755929000138",
    "inscricao_estadual": "063257424"  // ← Preenchido = contribuinte
  }
}
```
**Resultado automático:**
- ✅ `indFinal = 0` (Operação Normal)
- ✅ `indIEDest = 1` (Contribuinte ICMS)
- ✅ Campo `<CNPJ>` e `<IE>` no XML

---

## 📊 CST vs CSOSN

O campo `cst_icms` aceita dois tipos de códigos:

### CST - Código de Situação Tributária (Regime Normal)
Para empresas do Lucro Real ou Lucro Presumido:

| Código | Descrição |
|--------|-----------|
| 00 | Tributada integralmente |
| 10 | Tributada e com cobrança do ICMS por substituição tributária |
| 20 | Com redução de base de cálculo |
| 30 | Isenta ou não tributada e com cobrança do ICMS por ST |
| 40 | Isenta |
| 41 | Não tributada |
| 50 | Suspensão |
| 51 | Diferimento |
| 60 | ICMS cobrado anteriormente por ST |
| 70 | Com redução de base de cálculo e cobrança do ICMS por ST |
| 90 | Outras |

### CSOSN - Código de Situação da Operação no Simples Nacional
Para empresas optantes pelo Simples Nacional:

| Código | Descrição | Exibe Base/Valor ICMS? | Campos Obrigatórios |
|--------|-----------|----------------------|-------------------|
| 101 | Tributada pelo Simples Nacional com permissão de crédito | ✅ Sim | `pCredSN`, `vCredICMSSN` |
| 102 | Tributada pelo Simples Nacional sem permissão de crédito | ❌ Não | Apenas `orig` e `CSOSN` |
| 103 | Isenção do ICMS no Simples Nacional para faixa de receita bruta | ❌ Não | Apenas `orig` e `CSOSN` |
| 201 | Tributada SN com permissão de crédito + ST | ✅ Sim | `pCredSN`, `vCredICMSSN`, campos ST |
| 202 | Tributada SN sem permissão de crédito + ST | ❌ Não | Apenas campos ST |
| 203 | Isenção SN + ST | ❌ Não | Apenas campos ST |
| 300 | Imune | ❌ Não | Apenas `orig` e `CSOSN` |
| 400 | Não tributada pelo Simples Nacional | ❌ Não | Apenas `orig` e `CSOSN` |
| 500 | ICMS cobrado anteriormente por ST | ✅ Sim | Campos de retenção ST |
| 900 | Outros | ✅ Sim | Vários campos possíveis |

**Importante:**
- **CSOSN 101** → Use quando quiser mostrar o crédito de ICMS (aparece `pCredSN` e `vCredICMSSN`)
- **CSOSN 102** → Use quando não houver crédito (não aparece base nem valor de ICMS)

**Nota:** O sistema detecta automaticamente se é CST ou CSOSN baseado no código informado e ajusta:
- **CRT** (Código de Regime Tributário): 1 para Simples Nacional, 3 para Regime Normal
- **Totais da NFe**: Para Simples Nacional, o ICMS não é somado nos totais (vBC e vICMS ficam zerados)

### Diferença importante nos Totais:

| Regime | vBC (Base ICMS) | vICMS (Valor ICMS) | Observação |
|--------|----------------|-------------------|------------|
| **Regime Normal** | Soma das bases dos itens | Soma dos ICMS dos itens | ICMS é somado nos totais |
| **Simples Nacional** | 0.00 | 0.00 | ICMS **NÃO** é somado nos totais |

---

## 🔐 Certificado Digital

O certificado digital deve estar no formato **A1 (.pfx)** e localizado em:

```
certificados/empresas/{CNPJ}/{CNPJ}.pfx
```

Exemplo:
```
certificados/empresas/21497109000156/21497109000156.pfx
```

---

## 📂 Estrutura de Arquivos Gerados

Os XMLs e PDFs são organizados automaticamente:

```
arquivos/{CNPJ}/nfe/
├── xml/
│   └── {ANO_MES}/
│       └── assinados/
│           └── {CHAVE_ACESSO}.xml
│
└── pdf/
    └── {ANO_MES}/
        └── emitidos/
            └── NFe_{CHAVE_ACESSO}.pdf
```

---

## ⚠️ Códigos de Erro Comuns (cStat)

### Códigos de Lote

| cStat | Descrição | Solução |
|-------|-----------|---------|
| 103 | Lote recebido com sucesso | ✅ Sucesso - aguardar processamento |
| 104 | Lote processado | ✅ Sucesso - verificar protocolo |
| 204 | Duplicidade de NF-e | NFe já foi emitida anteriormente |
| 213 | CNPJ do emitente inválido | Verifique o CNPJ da empresa |
| 214 | Tamanho da mensagem excedida | Reduza o tamanho do XML |
| 215 | Falha no schema XML | Verifique a estrutura do XML |
| 225 | Falha no reconhecimento da autoria | Problema no certificado digital |
| 402 | XML mal formado | Verifique a estrutura do XML |
| 539 | CNPJ do emitente diverge do certificado | Use certificado da empresa correta |

### Códigos de Autorização (protNFe)

| cStat | Descrição | Solução |
|-------|-----------|---------|
| 100 | Autorizado o uso da NF-e | ✅ NFe autorizada com sucesso |
| 150 | Autorizado fora de prazo | ✅ NFe autorizada (fora do prazo) |
| 301 | Uso Denegado: Irregularidade fiscal | Empresa com pendência fiscal |
| 302 | Uso Denegado por irregularidade | Verifique situação cadastral |
| 539 | CNPJ não é o emitente | Use o CNPJ correto |
| 573 | Duplicidade de NF-e (código posterior) | Nota já foi autorizada |

### Códigos de Validação

| cStat | Descrição | Solução |
|-------|-----------|---------|
| 202 | Falha na comunicação | Problema de rede/firewall |
| 217 | NF complementar referenciada inexistente | Verifique NFe referenciada |
| 226 | Código da UF diverge da UF autorizadora | Verifique a UF da empresa |
| 236 | Chave de acesso com dígito verificador inválido | Sistema calcula automaticamente |
| 252 | Ambiente de homologação bloqueado | Use ambiente de produção |
| 280 | Certificado digital vencido | Renove o certificado |

---

## 🧪 Exemplo de Integração

### PHP (cURL)

```php
<?php
$url = 'http://seu-dominio.com.br/pontti_nfe/api/nfe/emitir.php';

$dados = [
    'empresa' => [
        'nome' => 'PRINT JET DIGITAL',
        'cnpj' => '21497109000156',
        // ... outros campos
    ],
    'cliente' => [
        'nome' => 'Cliente Teste',
        // ... outros campos
    ],
    'itens' => [
        [
            'codigo' => 'PROD001',
            'descricao' => 'Produto Teste',
            // ... outros campos
        ]
    ]
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($dados));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json'
]);

$response = curl_exec($ch);
$resultado = json_decode($response, true);

curl_close($ch);

if ($resultado['success']) {
    echo "NF-e emitida com sucesso!\n";
    echo "Chave: " . $resultado['chave_acesso'] . "\n";
    echo "Protocolo: " . $resultado['protocolo'] . "\n";
    echo "Status: " . $resultado['cStat'] . "\n";
    echo "XML: " . $resultado['xml_path'] . "\n";
    echo "PDF: " . $resultado['pdf_path'] . "\n";
} else {
    echo "Erro: " . $resultado['error'] . "\n";
}
```

### JavaScript (Axios)

```javascript
const axios = require('axios');

const url = 'http://seu-dominio.com.br/pontti_nfe/api/nfe/emitir.php';

const dados = {
  empresa: {
    nome: 'PRINT JET DIGITAL',
    cnpj: '21497109000156',
    // ... outros campos
  },
  cliente: {
    nome: 'Cliente Teste',
    // ... outros campos
  },
  itens: [
    {
      codigo: 'PROD001',
      descricao: 'Produto Teste',
      // ... outros campos
    }
  ]
};

axios.post(url, dados, {
  headers: {
    'Content-Type': 'application/json'
  }
})
.then(response => {
  if (response.data.success) {
    console.log('NF-e emitida com sucesso!');
    console.log('Chave:', response.data.chave_acesso);
    console.log('Protocolo:', response.data.protocolo);
    console.log('Status:', response.data.cStat);
    console.log('XML:', response.data.xml_path);
    console.log('PDF:', response.data.pdf_path);
  } else {
    console.log('Erro:', response.data.error);
  }
})
.catch(error => {
  console.error('Erro na requisição:', error);
});
```

<!-- ### Python (Requests)

```python
import requests
import json

url = 'http://seu-dominio.com.br/pontti_nfe/api/nfe/emitir.php'

dados = {
    'empresa': {
        'nome': 'PRINT JET DIGITAL',
        'cnpj': '21497109000156',
        # ... outros campos
    },
    'cliente': {
        'nome': 'Cliente Teste',
        # ... outros campos
    },
    'itens': [
        {
            'codigo': 'PROD001',
            'descricao': 'Produto Teste',
            # ... outros campos
        }
    ]
}

headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=dados, headers=headers)
resultado = response.json()

if resultado['success']:
    print('NF-e emitida com sucesso!')
    print(f"Chave: {resultado['chave_acesso']}")
    print(f"Protocolo: {resultado['protocolo']}")
    print(f"Status: {resultado['cStat']}")
    print(f"XML: {resultado['xml_path']}")
    print(f"PDF: {resultado['pdf_path']}")
else:
    print(f"Erro: {resultado['error']}")
``` -->

---

## 📞 Suporte

- **Email**: contato@pontti.com.br
- **Telefone**: (81) 2011-3434

---

## 📄 Licença

Desenvolvido por [Systhema Tecnologia](https://pontti.com.br)

---

## 📚 Documentação Adicional

### Para Desenvolvedores (Integração)
- **[📘 Guia Completo de Integração](docs/GUIA_INTEGRACAO.md)** - Documento principal com tudo que você precisa
- **[⚠️ Erros Comuns e Soluções](docs/ERROS_COMUNS_SEFAZ.md)** - Troubleshooting rápido
- **[📊 Resumo de Atualizações](docs/RESUMO_ATUALIZACOES.md)** - Detalhes técnicos das mudanças

### Histórico de Versões
- **[🔄 Changelog Completo](docs/CHANGELOG.md)** - Todas as alterações e melhorias

### Índice Geral
- **[📚 Índice da Documentação](docs/README.md)** - Navegue por toda a documentação

---

## 🔄 Versão Atual

**v1.3.0** (09/10/2025)
- ✅ **NOVO**: Carta de Correção Eletrônica (CC-e)
- ✅ **NOVO**: Endpoint de inutilização de numeração de NF-e
- ✅ Correção erro 696 SEFAZ (consumidor final)
- ✅ Detecção automática de CPF/CNPJ
- ✅ Configuração automática de indFinal e indIEDest
- ✅ Suporte completo a pessoa física

[Ver histórico completo →](docs/CHANGELOG.md)
