> ## Documentation Index
> Fetch the complete documentation index at: https://docs.engineapi.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# DIFAL (venda interestadual a consumidor final)

> Como emitir NF-e de e-commerce B2C para outro estado com o grupo ICMSUFDest: a partilha do ICMS, o que a engineAPI valida e o que você informa.

Quando você vende para **outro estado**, para **consumidor final** que **não é
contribuinte** do ICMS (o caso clássico do e-commerce B2C), a Emenda
Constitucional 87/2015 manda partilhar o imposto: a diferença entre a alíquota
interna do estado de destino e a interestadual cabe ao **destino**, e quem
recolhe é você, o remetente. No documento fiscal isso é o grupo **`ICMSUFDest`**,
que no payload da engineAPI se chama **`items[].icms.ufDestino`**.

A engineAPI é **passthrough** aqui: você informa a partilha apurada, ela valida
a forma contra o leiaute e transmite. **Ela não calcula a partilha**, e essa é
uma decisão explícita: a base de cálculo e a alíquota internas aplicáveis são as
da **legislação do estado de destino** (Lei Complementar 87/1996, art. 13,
§ 3º e § 7º, com a redação da Lei Complementar 190/2022: o § 3º fixa o valor
devido ao destino e o § 7º a base de cálculo), com reduções por produto e
adicional de Fundo de Combate à Pobreza próprios de cada estado. Nada disso está
curado aqui, e inventar essa conta seria declarar imposto errado com a sua
assinatura digital.

* **Só NF-e (modelo 55)**: a NFC-e é sempre operação interna, dentro do estado
  do emitente, então a partilha interestadual não existe naquele documento.
  Enviar o campo numa NFC-e devolve `400` nomeando o campo.
* **Só fora do Simples**: o Supremo Tribunal Federal, na ADI 5.464, suspendeu a
  exigência da partilha para os optantes do Simples Nacional. Emissor com
  `crt: 1` (Simples) ou `crt: 4` (MEI) que informe o grupo recebe
  `422 DIFAL_NAO_APLICAVEL`.
* **O grupo vai inteiro**: seis campos são obrigatórios juntos, e o bloco do
  FCP do destino (base, percentual e valor) também.
* **A operação precisa ser a hipótese certa**: interestadual (`idDest: 2`), a
  consumidor final (`indFinal: 1`) e destinatário não contribuinte
  (`destinatario.indicadorIE: 9`, ou o campo ausente).

## Pré-requisitos

| Item                     | Detalhe                                                                       |
| ------------------------ | ----------------------------------------------------------------------------- |
| Documento                | NF-e (modelo 55) apenas                                                       |
| Regime do emissor        | Regime Normal (`crt: 3`) ou Simples com excesso de sublimite (`crt: 2`)       |
| Cabeçalho                | `idDest: 2`, `indFinal: 1` e `destinatario.indicadorIE: 9` (ou ausente)       |
| ICMS da operação própria | Em `crt: 3` quem resolve é o Cérebro Fiscal: envie `resolverTributacao: true` |
| Valores da partilha      | Apurados por você (ou pelo seu ERP): a engineAPI não os calcula               |

## Os campos do grupo

| Campo            | Obrigatório | O que é                                                                                                                                                    |
| ---------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `vBCUFDest`      | sim         | Base de cálculo do ICMS na UF de destino, apurada pela legislação de lá. Pode não coincidir com a base da operação própria                                 |
| `pICMSUFDest`    | sim         | Alíquota interna da UF de destino para o produto, em %                                                                                                     |
| `pICMSInter`     | sim         | Alíquota interestadual: `4` (mercadoria importada), `7` (saída do Sul/Sudeste, exceto ES, para Norte, Nordeste, Centro-Oeste ou ES) ou `12` (demais casos) |
| `pICMSInterPart` | sim         | Percentual de partilha para o destino. Desde 2019 é `100`                                                                                                  |
| `vICMSUFDest`    | sim         | Valor do ICMS de partilha devido ao destino                                                                                                                |
| `vICMSUFRemet`   | sim         | Valor devido ao remetente. Desde 2019 é `0`, e o campo continua obrigatório no leiaute                                                                     |
| `vBCFCPUFDest`   | não         | Base do adicional de Fundo de Combate à Pobreza da UF de destino                                                                                           |
| `pFCPUFDest`     | não         | Percentual do adicional, em % (é adicional à alíquota interna, não está dentro de `pICMSUFDest`)                                                           |
| `vFCPUFDest`     | não         | Valor do adicional. Precisa bater com base vezes percentual (tolerância de R\$ 0,01)                                                                       |

Os três campos de FCP formam um bloco: informe os três, ou nenhum.

## Emitindo

```json theme={null}
{
  "issuerId": "sua-empresa-id",
  "naturezaOperacao": "Venda de Mercadoria",
  "resolverTributacao": true,
  "idDest": 2,
  "indFinal": 1,
  "indPres": 2,
  "destinatario": {
    "cnpjCpf": "11122233344",
    "nome": "Maria Compradora",
    "indicadorIE": 9,
    "endereco": {
      "logradouro": "Rua das Flores",
      "numero": "100",
      "bairro": "Centro",
      "codigoMunicipio": "3550308",
      "municipio": "São Paulo",
      "uf": "SP",
      "cep": "01001000"
    }
  },
  "items": [
    {
      "codigo": "FONE-BT",
      "descricao": "Fone de ouvido bluetooth",
      "ncm": "85183000",
      "cfop": "6108",
      "unidade": "UN",
      "quantidade": 1,
      "valorUnitario": 250.0,
      "icms": {
        "origem": 0,
        "ufDestino": {
          "vBCUFDest": 250.0,
          "pICMSUFDest": 18,
          "pICMSInter": 12,
          "pICMSInterPart": 100,
          "vICMSUFDest": 15.0,
          "vICMSUFRemet": 0
        }
      }
    }
  ],
  "pagamentos": [{ "forma": "03", "valor": 250.0 }]
}
```

Os três somatórios do documento (`vICMSUFDest`, `vICMSUFRemet` e `vFCPUFDest`
do total da nota) são calculados pela engineAPI a partir dos itens, somando os
valores exatamente como cada item os transmite.

## Com o Cérebro Fiscal (`resolverTributacao: true`)

Em Regime Normal o ICMS da operação própria é sempre resolvido pelo Cérebro
Fiscal (não existe caminho manual de `cst` nesse regime). E aí entra a mudança
que esta funcionalidade trouxe: venda interestadual a consumidor final não
contribuinte **sem** o grupo continua recusando com
`422 TRIBUTACAO_NAO_RESOLVIDA`, porque o documento sairia com o ICMS da operação
própria sozinho, subdeclarando a parcela do destino. Informando
`items[].icms.ufDestino`, o Cérebro resolve a operação própria normalmente (com
a alíquota interestadual da lei federal) e a partilha que você apurou vai junto.

## O que a engineAPI recusa antes de numerar

| Código                    | Quando                                                                                                                                                                                                                                                                                                         |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`                     | O campo enviado fora de `items[].icms.ufDestino` (por exemplo com o nome do XML, `ICMSUFDest`), ou enviado numa NFC-e                                                                                                                                                                                          |
| `422 DIFAL_NAO_APLICAVEL` | Emissor no Simples ou MEI (ADI 5.464), ou grupo numa operação que não é a hipótese de partilha: interna, sem consumidor final, ou com destinatário contribuinte. A mensagem diz qual condição falhou                                                                                                           |
| `422 DIFAL_INCOMPLETO`    | Falta um dos seis campos obrigatórios, ou o bloco do FCP veio pela metade. Vale também para `ufDestino: {}`: o grupo fornecido e vazio é recusado, nunca descartado                                                                                                                                            |
| `422 DIFAL_INVALIDO`      | `pICMSInter` fora de 4/7/12, `pICMSInterPart` diferente de 100, `vICMSUFRemet` maior que zero, FCP incoerente com base vezes percentual, campo que não é número, valor que não cabe no campo do leiaute, partilha maior que zero sobre base zero, ou soma dos itens acima do que o total do documento comporta |

Nenhuma dessas recusas consome número fiscal.

## O que ainda não é conferido, e por quê

A engineAPI **não** confere `vICMSUFDest` contra `vBCUFDest × (pICMSUFDest −
pICMSInter)`. Parece a conta óbvia, mas os insumos dela (a base, a alíquota
interna e as reduções por produto) são da legislação do estado de destino, e não
estão curados aqui. Conferir uma conta cujos insumos não temos recusaria emissão
legítima, e a casa não crava regra fiscal sem fonte que a sustente.

O que é conferido é o que a norma afirma diretamente: a partilha vigente, o zero
do remetente que decorre dela, o domínio fechado da alíquota interestadual, a
integridade do grupo e a única identidade que vem da definição dos campos
(`vFCPUFDest = vBCFCPUFDest × pFCPUFDest`).

<Info>
  **Estado desta funcionalidade: provado com emissão real.** Uma NF-e
  interestadual a consumidor final não contribuinte, com o grupo completo, foi
  **autorizada** em homologação (protocolo `152260027584597`), e o documento
  autorizado traz o `ICMSUFDest` íntegro no item e o `vICMSUFDest` no total da
  nota. Cobertura completa em [Cobertura fiscal](/cobertura).
</Info>

<Warning>
  **Escolha do NCM na hora de testar.** O motor recusa, por desenho, todo item
  cujo NCM esteja arrolado em CEST (mercadoria passível de substituição
  tributária), e esse catálogo alcança quase todo bem de consumo. Se a sua
  chamada de teste voltar falando de ICMS-ST em vez de DIFAL, não é o grupo da
  partilha que falhou: é essa guarda. Para exercitar o caminho, use um produto
  sem CEST.
</Warning>
