CALCULA_IMPOSTOS.R001 — Hierarquia de busca da alíquota de ICMS
Módulo: CALCULA_IMPOSTOS Classificação: observado · Relevância: alta
Regra
Para achar a alíquota de ICMS a usar, o sistema tenta nesta ordem: (1) alíquota específica da Movimentação, (2) da Condição Fiscal de Pessoa + Item, (3) só Condição Fiscal de Pessoa, (4) só Condição Fiscal de Item, (5) só Estado Origem/Destino. A primeira que encontrar registro vence.
Quando dispara
Todo cálculo de ICMS (V_TP_IMPOSTO='I') com tipo de cálculo diferente de progressivo.
Como o usuário resolve
Se o imposto está saindo com a alíquota errada, verificar na tela de Alíquotas (tabela ALIQUOTA) se existe um cadastro mais específico (por Movimentação ou Condição Fiscal) conflitando com o que deveria ser usado; a entrada mais específica sempre prevalece sobre a genérica por Estado.
Evidência
| Arquivo | Linhas | Rotina | O que o trecho faz |
|---|---|---|---|
Scripts/CALCULA_IMPOSTOS.sql | 224-303 | CALCULA_IMPOSTOS | Cinco consultas em cascata na tabela ALIQUOTA, da mais específica à mais genérica |
Scripts/CALCULA_IMPOSTOS.sql:224
-- Por Movimentacao
SELECT FIRST 1 A.NR_ALIQUOTA, A.TP_ALIQUOTA
from ALIQUOTA A
where A.SG_ESTORIG = :V_SG_ESTORIG
and A.SG_ESTDEST = :V_SG_ESTDEST
and A.CD_MOVIMENTACAO = :V_CD_MOVIMENTACAO
and coalesce(A.CD_IMPOSTO,:V_CD_IMPOSTO) = :V_CD_IMPOSTO
--and coalesce(A.CD_EMPRESA,:V_CD_EMPRESA) = :V_CD_EMPRESA
AND COALESCE(A.CD_EMPRESA, COALESCE(:V_CD_EMPRESA, -1) ) = COALESCE(:V_CD_EMPRESA, -1)
and A.TP_ALIQUOTA = 'M'
ORDER BY COALESCE(A.CD_EMPRESA, -2) DESC
into :V_NR_ALIQUOTA, :I_TIPO;