
# NF-e

A NF-e (modelo 55) é a nota de mercadoria: venda, devolução, bonificação e transferência. Hoje a emitza emite para empresas de SP.

## Impostos do item: duas formas

**Informando os impostos no item.** Você manda CFOP, ICMS, PIS e COFINS de cada item, e a emitza calcula os valores:

```json
"taxes": {
  "icms": { "cst": "00", "rate": "18" },
  "pis": { "cst": "01", "rate": "1.65" },
  "cofins": { "cst": "01", "rate": "7.6" }
}
```

Use `cst` no regime normal e `csosn` no Simples Nacional.

**Com classe de imposto (recomendado).** Você cadastra uma vez as regras de cada tipo de produto, e o item só informa `taxClass`. A classe escolhe CFOP, ICMS, IPI, PIS e COFINS pela operação, pelo destino (mesmo estado ou outro) e pelo tipo de destinatário:

```json POST /v1/companies/{id}/tax-classes
{
  "code": "CALCADOS",
  "name": "Calçados de fabricação própria",
  "rules": [
    { "when": { "operations": ["sale"], "destination": "internal" }, "cfop": "5101",
      "icms": { "csosn": "101", "creditRate": "1.25" }, "pis": { "cst": "49" }, "cofins": { "cst": "49" } },
    { "when": { "operations": ["sale"], "destination": "interstate" }, "cfop": "6101",
      "icms": { "csosn": "101", "creditRate": "1.25" }, "pis": { "cst": "49" }, "cofins": { "cst": "49" } }
  ]
}
```

Vale a primeira regra que casar. O que vier em `taxes` no item prevalece sobre a classe.

**IBS e CBS.** Sem `taxes.ibsCbs`, o motor da emitza decide o CST, a classificação (`cClassTrib`) e as alíquotas do ano, e explica a decisão. Para fixar a classificação, informe `ibsCbs` no item ou na classe. Para ver o cálculo antes de emitir, use o [cálculo de impostos](../impostos/).

## Devolução

Use `"operation": "return"` e informe, em cada item, a nota original:

```json
"reference": { "accessKey": "35260911444777000161550010000123451000123450", "item": 3 }
```

Com `item`, a classificação do IBS/CBS é copiada da nota original. Em devolução, `direction` diz se a sua nota é de saída (`out`, o padrão) ou de entrada (`in`).

## Cancelamento

```json POST /v1/nfe/{id}/cancel
{ "justification": "Pedido cancelado pelo cliente antes do envio" }
```

Só para nota autorizada e dentro do prazo da SEFAZ (em regra, 24 horas depois da autorização). O resultado chega pelo webhook `nfe.cancelled`, ou `nfe.event_rejected` com o motivo. A nota fica `cancelled`, e o DANFE sai com marca d'água.

## Carta de correção

```json POST /v1/nfe/{id}/correction
{ "text": "Onde se lê volume 1 caixa, leia-se volume 2 caixas" }
```

Até 20 por nota. Cada carta substitui a anterior, então repita as correções anteriores que ainda valem. A carta não corrige valores, impostos, dados que mudem o emitente ou o destinatário, nem a data de emissão.

## Números pulados e inutilização

O Fisco exige inutilizar os números de uma série que não viraram nota autorizada. `GET /v1/nfe/gaps?companyId=...&series=1` lista as faixas pendentes, e você inutiliza com:

```json POST /v1/nfe/disable-range
{ "companyId": "6710a1b2c3d4e5f601234567", "series": 1, "from": 15, "to": 17, "justification": "Números pulados por falha no sistema de origem" }
```

## Documentos

| Rota | Devolve |
|---|---|
| `GET /v1/nfe/{id}/xml` | XML autorizado (`procNFe`), para guardar por 5 anos |
| `GET /v1/nfe/{id}/danfe` | DANFE em PDF (`?download=1` para baixar) |
| `GET /v1/nfe/{id}/events` | Cancelamentos e cartas de correção, com o XML de cada um |
| `GET /v1/nfe/export?companyId=...&month=2026-11` | Zip do mês para o contador: XMLs, eventos, inutilizações e um resumo em CSV (`&danfe=1` inclui os PDFs) |
