Files
GTI_GERENCIADOR_FISCAL/fiscal/docs/pis_cofins_applicability.md
T
gti d21a9d1140 Add 'fiscal/' from commit '102ba84500dbd9655a0471288c3e278652593ca9'
git-subtree-dir: fiscal
git-subtree-mainline: d95165fc8f
git-subtree-split: 102ba84500
2026-09-29 14:43:23 -03:00

47 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PIS/COFINS — aplicabilidade no cadastro de produto (SGV)
Implementação: `central/app/unified_fiscal_coverage.py` (`pis_cofins_applicability`, `evaluate_pis_cofins`, `canonical_cst`). Somente leitura; nenhum valor é preenchido nem normalizado no ERP.
`ACCESSED_AT` das fontes: **2026-09-24** (hashes em `docs/sources/SOURCES_MANIFEST_UNIFIED_FISCAL_V1.json` e `SOURCES_MANIFEST_V3.json`).
## 1. O que o campo do produto é (e o que não é)
Campos: `COD_ENTRADA_PIS`, `COD_SAIDA_PIS`, `ALIQ_PIS`, `COD_ENTRADA_COFINS`, `COD_SAIDA_COFINS`, `ALIQ_COFINS`, `PISCOFINS` (N/S), `INCIDENCIA_PISCOFINS` (NENHUMA / MONOFÁSICA / SUBST.TRIBUTÁRIA).
- São *defaults de cadastro* (tela Produtos > Config. Impostos > CST PIS/COFINS; binding por DFM em `docs/SGV_PRODUCT_FISCAL_UI_MAP_V1.json`). Os campos CST usam um seletor com a lista oficial "NN - descrição" (2 dígitos).
- O SGV copia esses defaults para os itens de documentos de entrada (SQL de inserção do item no executável).
- Não são a tributação efetiva do documento. **DOCUMENT_PIS_COFINS_SOURCE**: em `NFCE_ITENS.CST_PIS_COFINS` o CST **não vem do cadastro do produto**. TESTESOFICIAIS: os 3.336 itens com CST `01` são todos de dezembro/2022 (dias 01–31, notas contíguas), independentes do produto (`PISCOFINS=N`, campos vazios); antes e depois os itens saem em branco; o produto com CST `04` cadastrado emitiu em branco. Nas 4 bases de clientes (~570 mil itens) 100% saem em branco. O emissor de NFC-e não existe localmente (o executável SGV não contém `CST_PIS_COFINS`), então a regra exata do documento **não é comprovável** aqui.
## 2. Modelo de aplicabilidade — não circular
A aplicabilidade usa **somente sinais independentes dos seis campos**: regime da empresa (CRT), flag `PISCOFINS`, `INCIDENCIA_PISCOFINS` e as regras oficiais abaixo. **Campo vazio é estado de dado, nunca prova de não aplicabilidade**: o veredito é idêntico com os campos vazios ou preenchidos (teste `test_applicability_never_depends_on_whether_the_six_fields_are_empty`).
| Estado | Condição | Efeito |
|---|---|---|
| `REQUIRED` | flag `S`, ou incidência MONOFÁSICA / SUBST.TRIBUTÁRIA (declaração própria do produto) | CST de **saída** válido obrigatório (vazio ⇒ `*_CST_MISSING`); alíquota conforme o CST |
| `NOT_APPLICABLE` | CRT 1/2/4 (Simples) **sem** tratamento especial declarado | não entra na completude; valor digitado vira só *warning* |
| `OPTIONAL` | regime tributado (CRT 3 ou outro) **e** declaração explícita "sem tratamento especial" (flag `N` + incidência NENHUMA) | nada obrigatório; o que existir tem de ser válido |
| `NEEDS_REVIEW` | incidência fora do vocabulário do SGV, ou regime tributado com flag/incidência em branco (declaração ilegível) | único caso não decidível → "Não classificado" |
Por quê (fontes): Simples — LC 123/2006 art. 13, IV e V (Cofins e PIS no DAS) e art. 18, §4º-A, I (segregação da receita monofásica): o produto sem tratamento especial não tem PIS/COFINS de documento a calcular. Regime normal — Lei 9.718/1998 arts. 2º–3º (cumulativo), Lei 10.637/2002 art. 1º (PIS) e Lei 10.833/2003 art. 1º (Cofins) (não cumulativo): o tributo incide, mas o perfil (cumulativo/não cumulativo) é fato da empresa; o default do produto é opcional porque o padrão vem da empresa. Regimes especiais por NCM (SPED 4.3.10–4.3.15, Lei 10.147/2000) servem para *coerência de CST* e para o motor de correção — não tornam obrigatório um produto que não declara nada, porque o SGV não usa o campo na emissão e a extração das tabelas por NCM é parcial. Documento — NT 2025.002-RTC v1.51, Grupos Q/S: o grupo é obrigatório no item da NF-e (rejeições 745/748), o que vale para o documento e não para o cadastro.
## 3. CST: normalização canônica (somente leitura)
`canonical_cst`: aceita **exatamente** 2 dígitos oficiais (SPED 4.3.3/4.3.4: 01–09, 49, 50–56, 60–67, 70–75, 98, 99) ou **um** dígito cujo preenchimento com zero à esquerda seja um código oficial (`4` → `04`). Nada mais é normalizado (`049`, `000`, `060`, `2x`, `0` continuam inválidos).
- `VALID_AFTER_NORMALIZATION`: semanticamente válido para a cobertura e para as regras (CST × incidência, alíquota); gera *warning* não bloqueante `CST_PIS_NON_CANONICAL_FORMAT` / `CST_COFINS_NON_CANONICAL_FORMAT` (contagem e amostras em `fiscal_context.non_canonical_warnings`).
- Nada é escrito no Firebird; escrever `04` seria decisão futura.
## 4. Blockers (só onde o campo se aplica: REQUIRED/OPTIONAL)
| Blocker | Quando |
|---|---|
| `{PIS,COFINS}_CST_INVALID` | CST digitado que não é canônico nem normalizável |
| `{PIS,COFINS}_CST_MISSING` | produto `REQUIRED` sem CST de saída |
| `{PIS,COFINS}_RATE_MISSING` | CST de saída (canônico) 01/02 sem alíquota |
| `{PIS,COFINS}_RATE_INVALID` | alíquota não numérica ou > 100 |
| `{PIS,COFINS}_CST_INCIDENCE_MISMATCH` | MONOFÁSICA com CST fora de {02,03,04}; SUBST.TRIBUTÁRIA com CST ≠ 05 |
| `PIS_COFINS_FLAG_INCONSISTENT` | flag N com incidência especial; flag S sem incidência e sem códigos |
Warnings (nunca bloqueiam): `CST_*_NON_CANONICAL_FORMAT`, `CST_*_INVALID_IGNORED` (valor inválido digitado em produto `NOT_APPLICABLE`).
## 5. Regimes no corpus SGV
CRT 1 (CONSTRUCAO, MMMODAS, UNIAO, TESTESOFICIAIS) e CRT 3 (RINCAO, via EMISSOR). Nenhuma regra assume CRT 1.
## 6. Campos ignorados quando não aplicáveis / write targets candidatos
Produto `NOT_APPLICABLE`: os 6 campos, `PISCOFINS` e `INCIDENCIA_PISCOFINS` não contam. Candidatos futuros (sem escrita nesta versão): `COD_SAIDA_PIS`, `COD_SAIDA_COFINS` e a normalização `4→04`.