# etiqueta_icms.csv — Documentação e Lógica

Gerado em: 2026-06-30
Arquivo:   `etiqueta_icms.csv` (51.951 linhas)
Fonte:     `Unidade-03-exata_loja03-20260625-003000.backup` (PostgreSQL 14.22)

---

## Colunas

| Coluna | Descrição |
|--------|-----------|
| `etiqueta` | Código interno de 6 dígitos do PDV (tabela `embalagem`) |
| `codigo_barras` | EAN-13 do produto |
| `descricao` | Descrição da embalagem |
| `ncm` | Código NCM de 8 dígitos (Nomenclatura Comum do Mercosul) |
| `cest` | Código CEST de 7 dígitos (quando aplicável) |
| `cfop` | CFOP sugerido para venda ao consumidor final intraestadual (RJ→RJ) |
| `cst_icms` | Código de Situação Tributária do ICMS |
| `aliquota_icms_pct` | Alíquota percentual de ICMS na operação de saída |
| `regime` | Classificação resumida (ver tabela abaixo) |
| `observacao` | Detalhamento da regra aplicada |

---

## Distribuição por regime

| Regime | Quantidade | CST | Alíquota |
|--------|-----------|-----|----------|
| `ICMS-ST` | 40.756 | 60 | 0% |
| `TRIBUTADO` | 9.718 | 00 | 20% |
| `NAO_CONFIGURADO` | 1.477 | — | — |

---

## Lógica de classificação

### Origem dos dados no banco

O banco `exata_loja03` **não armazena o CST por produto** de forma direta.
O campo `icmsproduto.perfilicmsid` está NULL em todos os 72.319 registros.
O vínculo usado pelo sistema ECF é via `totalizadorfiscalid` (tipos A / B / C),
cujo `valoraliquota` também estava NULL — era programado diretamente no hardware
da impressora fiscal (ECF).

Por isso a classificação foi inferida a partir de duas fontes confiáveis:

1. **`icmsestadual`** — alíquota interna por estado cadastrada no sistema:
   - Rio de Janeiro (estado id=97): **20%**

2. **Presença de CEST** em `produto.cestid` → `cest.codigo`:
   - CEST é obrigatório apenas para produtos sujeitos à **Substituição Tributária (ST)**
   - Se o produto tem CEST, ele está sob ST

### Regras aplicadas

```
SE produto.cestid está preenchido (tem CEST):
    → regime     = ICMS-ST
    → CST        = 60  (ICMS cobrado anteriormente por ST)
    → alíquota   = 0%  (imposto não destacado na saída — já retido na entrada
                         pelo fabricante ou distribuidor)

SENÃO SE icmsproduto.totalizadorfiscalid = 66 (tipo A):
    → regime     = TRIBUTADO
    → CST        = 00  (tributado integralmente)
    → alíquota   = 20% (alíquota interna RJ conforme icmsestadual)

SENÃO SE totalizadorfiscalid = 67 ou 68 (tipo B ou C):
    → regime     = ESPECIAL
    → CST / alíquota = em branco (conferir com contador)

SENÃO (sem registro em icmsproduto):
    → regime     = NAO_CONFIGURADO
    → CST / alíquota = em branco (conferir)
```

### Por que CST 60 e alíquota 0% para ST?

Na venda ao **consumidor final** de produtos sob ST (farmácias, supermercados):
- O ICMS foi recolhido antecipadamente na cadeia (fabricante → distribuidor)
- A NF-e de saída usa **CST 60** e **não destaca ICMS**
- A alíquota na operação de saída é **0%** para fins de nota fiscal
- O valor do ICMS-ST está embutido no preço de custo e não aparece na NF ao consumidor

### CFOP 5102

Operação de venda de mercadoria adquirida de terceiros, dentro do estado (RJ → RJ).
Para vendas interestaduais usar 6102. Para devoluções, transferências ou
outros cenários, o CFOP muda — consultar contador.

---

## O que precisaria de servidor para aprimorar

Se o backup for restaurado em um servidor PostgreSQL, é possível obter:

1. **Produtos isentos por lei** (CST 40/41) — alguns medicamentos são isentos de
   ICMS mesmo sem ST (ex.: insulinas, alguns oncológicos). Isso está em tabelas
   de configuração (`configuracaooperacaofiscal`, `naturezaoperacaoperfilicms`)
   que não foram carregadas nesta análise.

2. **Redução de base de cálculo** (CST 20) — alguns produtos têm base reduzida.

3. **Produtos NAO_CONFIGURADO** — cruzar com outras tabelas para entender
   se são inativos ou se falta configuração fiscal.

Query para obter dados completos (após restauração):

```sql
SELECT
    e.etiqueta,
    e.codigobarras,
    e.descricao,
    n.codigo            AS ncm,
    c.codigo            AS cest,
    pi.icmscst          AS cst,
    pi.icmsaliquota     AS aliquota,
    pi.descricao        AS perfil_icms
FROM embalagem e
JOIN produto p           ON p.id = e.produtoid
LEFT JOIN ncm n          ON n.id = p.ncmid
LEFT JOIN cest c         ON c.id = p.cestid
LEFT JOIN icmsproduto ip ON ip.produtoid = p.id
LEFT JOIN perfilicms pi  ON pi.id = ip.perfilicmsid
WHERE p.status = 'A'
ORDER BY e.etiqueta;
```

---

## Arquivos relacionados

| Arquivo | Conteúdo |
|---------|----------|
| `etiqueta_icms.csv` | CSV gerado com a lógica descrita acima |
| `etiqueta_fiscal.csv` | CSV anterior — NCM + CEST sem classificação ICMS |
| `tutorial-postgresql-backup.md` | Como restaurar e consultar o backup |
| `restaurar-banco.ps1` | Script PowerShell para restaurar o banco |
