ST_IMPOSTO - Cálculo de Imposto na Série
Tela de configuração: MFA002 — Parâmetros de Nota Fiscal por Série Tabela:
PARMNOTA.ST_IMPOSTO—CHAR(1) NOT NULLValor padrão:S(Obriga ter o Imposto)
Controla o comportamento do cálculo de impostos para a série de nota fiscal. O valor é lido a partir de PARMNOTA pela chave (CD_EMPRESA, TP_NOTA, CD_SERIE) e define se o sistema calcula impostos automaticamente, se exige parâmetros cadastrados ou se simplesmente ignora o cálculo.
Telas impactadas
| Tela | Descrição | Uso |
|---|---|---|
| MNF001 | Emissão de NF-e (Saída) | Lê ST_IMPOSTO ao selecionar a série; bloqueia cálculo quando D |
| MNF002 | Emissão de NF-e (Entrada) | Lê ST_IMPOSTO ao selecionar a série; bloqueia cálculo quando D |
| MCA004 | Movimentação Comercial (NF) | Consulta PARMNOTA.ST_IMPOSTO para decidir se calcula imposto |
| MCA013 | Movimentação Comercial (NF) | Consulta PARMNOTA.ST_IMPOSTO para decidir se calcula imposto |
Campos envolvidos
| Campo | Tabela | Descrição |
|---|---|---|
ST_IMPOSTO | PARMNOTA | Parâmetro principal documentado |
ST_IMPOSTONANOTA | IMPOSTO (configurado em MFA001/PARMFATUR) | Indica se o imposto é mostrado na nota |
ST_IMPOSTOXML | IMPOSTO | Define comportamento do imposto ao importar XML |
ST_IMPOSTOPEDIDO | PARMFATUR (configurado em MFA001/PARMFATUR) | Ativa cálculo de imposto já no pedido de venda |
ST_IMPOSTODEVOLUCAO | IMPOSTO | Controla imposto em devolução |
Opções disponíveis
S - Obriga ter o Imposto
| O que faz | Detalhe |
|---|---|
| Calcula imposto automaticamente | Sim |
| Exige parâmetro de imposto cadastrado | Sim — gera erro se não houver |
| Comportamento quando não há parâmetro | Exibe mensagem e suspende a operação |
| Editável pelo usuário | Sim |
O sistema executa CALCULA_IMPOSTONOTA normalmente. Se não existirem parâmetros de imposto cadastrados para o tipo de item/movimentação, a procedure gera uma mensagem de erro do tipo "Não há Parâmetros de Impostos Cadastrados para Efetuar o Cálculo dos Impostos [MFI001]" e interrompe o processamento.
Simulação passo a passo
- Acesse MFA002 e configure a série desejada com
ST_IMPOSTO = S. - Abra uma nota fiscal (MNF001) nessa série.
- Cadastre os itens da nota com produto, quantidade e valor.
- Salve o item (
AfterPost). - Observe que o sistema calcula os impostos (ICMS, IPI, PIS, COFINS, etc.) automaticamente.
Resultado esperado: Os impostos são calculados e gravados. Se não houver parâmetro de imposto para o tipo de item, uma mensagem de erro é exibida e a operação é suspensa.
Exceção / Importante: Quando o item foi importado de XML, o sistema verifica
IMPOSTO.ST_IMPOSTOXMLpara decidir se recalcula ou mantém os valores do XML original.
N - Calcula se Tiver Parâmetro
| O que faz | Detalhe |
|---|---|
| Calcula imposto automaticamente | Sim, apenas se existir parâmetro |
| Exige parâmetro de imposto cadastrado | Não — silenciosamente ignora se não houver |
| Comportamento quando não há parâmetro | Sai da rotina sem erro |
| Editável pelo usuário | Sim |
O sistema tenta calcular os impostos normalmente, mas se não encontrar parâmetros de imposto para o tipo de item/movimentação, simplesmente encerra o cálculo sem gerar erro.
Simulação passo a passo
- Acesse MFA002 e configure a série com
ST_IMPOSTO = N. - Abra uma nota fiscal (MNF001) nessa série.
- Cadastre os itens da nota com produto, quantidade e valor.
- Salve o item (
AfterPost). - Observe que o sistema calcula os impostos somente se houver parâmetros cadastrados (em MFI001). Se não houver, nenhum imposto é calculado e nenhum erro é exibido.
Resultado esperado: Impostos são calculados quando há parâmetros; ausência de parâmetros é tolerada sem mensagem.
D - Não Calcula
| O que faz | Detalhe |
|---|---|
| Calcula imposto automaticamente | Não — totalmente desabilitado |
| Exige parâmetro de imposto cadastrado | Não se aplica |
| Comportamento | Pula toda a rotina de cálculo |
| Editável pelo usuário | Sim |
O sistema verifica ST_IMPOSTO logo no início da rotina de cálculo. Quando o valor é D, a condition IN ('S','N') falha e a rotina inteira de cálculo de impostos é ignorada. No Delphi, a checagem iST_IMPOSTO <> 'D' aparece em múltiplos pontos (MNF001, MNF002) para saltar o cálculo.
Simulação passo a passo
- Acesse MFA002 e configure a série com
ST_IMPOSTO = D. - Abra uma nota fiscal (MNF001) nessa série.
- Cadastre os itens da nota com produto, quantidade e valor.
- Salve o item (
AfterPost). - Observe que nenhum imposto é calculado ou exibido, mesmo que existam parâmetros de imposto cadastrados.
Resultado esperado: Nenhum cálculo de imposto é realizado. Os campos de imposto ficam zerados ou vazios.
Exceção / Importante: Mesmo com
D, o botão "Recalcular" no MNF001/MNF002 continua visível, mas ao clicar, o sistema detectaST_IMPOSTO = 'D'e não executa o recálculo.
Regra Geral de Comportamento
A lógica central está na procedure CALCULA_IMPOSTONOTA:
1. Lê ST_IMPOSTO da PARMNOTA para (CD_EMPRESA, TP_NOTA, CD_SERIE)
2. Se ST_IMPOSTO IN ('S','N') → prossegue com o cálculo
- Busca parâmetros de imposto (IMPOSTOITEM ou IMPOSTOMOV)
- Se não encontrar parâmetros:
- ST_IMPOSTO = 'S' → ERRO + SUSPEND
- ST_IMPOSTO = 'N' → EXIT silencioso
3. Se ST_IMPOSTO = 'D' → não entra no bloco de cálculo (EXIT)
Tabela Comparativa Resumida
| Valor | Descrição | Calcula Imposto? | Sem Parâmetro? |
|---|---|---|---|
S | Obriga ter o Imposto | Sim | Erro — bloqueia |
N | Calcula se tiver parâmetro | Sim (se houver) | Silencioso — ignora |
D | Não Calcula | Não | Não se aplica |
Procedures impactadas
Rotinas Delphi com referência direta ao campo
| Rotina | Arquivo | Descrição |
|---|---|---|
TdmMFA002.tabPARMNOTAAfterInsert | UdmMFA002.pas | Atribui valor padrão 'S' ao criar novo registro |
Busca_Parametros | UdmMFA001.pas | Lê ST_IMPOSTO ao carregar parâmetros da série |
geraSequencial | UdmMFA001.pas | Armazena ST_IMPOSTO em variável para uso durante emissão |
TdmMFA001.tabITEMNOTAAfterPost | UdmMFA001.pas | Verifica iST_IMPOSTO <> 'D' antes de calcular imposto do item |
TdmMFA001.Calcula_ImpostoNota | UdmMFA001.pas | Pulsa cálculo se iST_IMPOSTO = 'D' |
TfrmMFA001.btnRecalcularClick | UdmMFA001.pas | Ignora recálculo quando iST_IMPOSTO = 'D' |
Preenche_VetorPedido | UdmMFA002.pas | Verifica iST_IMPOSTO <> 'D' ao carregar pedido na NF de entrada |
Consulta_Pedidos | UdmMFA002.pas | Verifica iST_IMPOSTO <> 'D' para IPI do pedido |
TfrmMFA002.reprocessaImposto | UdmMFA002.pas | Pula reprocessamento se iST_IMPOSTO = 'D' |
TfrmMFA002.btnRecalcularClick | UdmMFA002.pas | Ignora recálculo quando iST_IMPOSTO = 'D' |
TfrmMCA004.CalculaImposto | UMCA004.pas | Consulta PN.ST_IMPOSTO da PARMNOTA |
TfrmMCA013.CalculaImposto | UMCA013.pas | Consulta PN.ST_IMPOSTO da PARMNOTA |
Procedures SQL com referência direta ao campo
| Procedure | Arquivo | Descrição |
|---|---|---|
CALCULA_IMPOSTONOTA | CALCULA_IMPOSTONOTA.sql | Lógica principal: lê ST_IMPOSTO e decide cálculo/erro/skip |
GERA_IMPOSTONOTA | GERA_IMPOSTONOTA.sql | Gera registros de imposto; segue mesma lógica de ST_IMPOSTO |
GERA_IMPOSTONOTA_INDIVIDUAL | GERA_IMPOSTONOTA_INDIVIDUAL.sql | Variação individual do cálculo de imposto |
GERA_NOTAFISCAL | GERA_NOTAFISCAL.sql | Geração da nota fiscal; lê ST_IMPOSTO para decidir cálculo |
GERA_ESTOQUE_NOTAFISCAL | GERA_ESTOQUE_NOTAFISCAL.sql | Atualização de estoque; lê ST_IMPOSTO para fluxo de imposto |
GERA_DARFLALUR | GERA_DARFLALUR.sql | Filtro ST_IMPOSTO = 'S' para cálculos do LALUR |
RETORNA_LALUR | RETORNA_LALUR.sql | Filtro ST_IMPOSTO = 'N' em cálculos do LALUR |