Pular para o conteúdo principal

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 NULL Valor 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​

TelaDescriçãoUso
MNF001Emissão de NF-e (Saída)Lê ST_IMPOSTO ao selecionar a série; bloqueia cálculo quando D
MNF002Emissão de NF-e (Entrada)Lê ST_IMPOSTO ao selecionar a série; bloqueia cálculo quando D
MCA004Movimentação Comercial (NF)Consulta PARMNOTA.ST_IMPOSTO para decidir se calcula imposto
MCA013Movimentação Comercial (NF)Consulta PARMNOTA.ST_IMPOSTO para decidir se calcula imposto

Campos envolvidos​

CampoTabelaDescrição
ST_IMPOSTOPARMNOTAParâmetro principal documentado
ST_IMPOSTONANOTAIMPOSTO (configurado em MFA001/PARMFATUR)Indica se o imposto é mostrado na nota
ST_IMPOSTOXMLIMPOSTODefine comportamento do imposto ao importar XML
ST_IMPOSTOPEDIDOPARMFATUR (configurado em MFA001/PARMFATUR)Ativa cálculo de imposto já no pedido de venda
ST_IMPOSTODEVOLUCAOIMPOSTOControla imposto em devolução

Opções disponíveis​

S - Obriga ter o Imposto​

O que fazDetalhe
Calcula imposto automaticamenteSim
Exige parâmetro de imposto cadastradoSim — gera erro se não houver
Comportamento quando não há parâmetroExibe mensagem e suspende a operação
Editável pelo usuárioSim

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​

  1. Acesse MFA002 e configure a série desejada com ST_IMPOSTO = S.
  2. Abra uma nota fiscal (MNF001) nessa série.
  3. Cadastre os itens da nota com produto, quantidade e valor.
  4. Salve o item (AfterPost).
  5. 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_IMPOSTOXML para decidir se recalcula ou mantém os valores do XML original.


N - Calcula se Tiver Parâmetro​

O que fazDetalhe
Calcula imposto automaticamenteSim, apenas se existir parâmetro
Exige parâmetro de imposto cadastradoNão — silenciosamente ignora se não houver
Comportamento quando não há parâmetroSai da rotina sem erro
Editável pelo usuárioSim

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​

  1. Acesse MFA002 e configure a série com ST_IMPOSTO = N.
  2. Abra uma nota fiscal (MNF001) nessa série.
  3. Cadastre os itens da nota com produto, quantidade e valor.
  4. Salve o item (AfterPost).
  5. 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 fazDetalhe
Calcula imposto automaticamenteNão — totalmente desabilitado
Exige parâmetro de imposto cadastradoNão se aplica
ComportamentoPula toda a rotina de cálculo
Editável pelo usuárioSim

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​

  1. Acesse MFA002 e configure a série com ST_IMPOSTO = D.
  2. Abra uma nota fiscal (MNF001) nessa série.
  3. Cadastre os itens da nota com produto, quantidade e valor.
  4. Salve o item (AfterPost).
  5. 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 detecta ST_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​

ValorDescriçãoCalcula Imposto?Sem Parâmetro?
SObriga ter o ImpostoSimErro — bloqueia
NCalcula se tiver parâmetroSim (se houver)Silencioso — ignora
DNão CalculaNãoNão se aplica

Procedures impactadas​

Rotinas Delphi com referência direta ao campo​

RotinaArquivoDescrição
TdmMFA002.tabPARMNOTAAfterInsertUdmMFA002.pasAtribui valor padrão 'S' ao criar novo registro
Busca_ParametrosUdmMFA001.pasLê ST_IMPOSTO ao carregar parâmetros da série
geraSequencialUdmMFA001.pasArmazena ST_IMPOSTO em variável para uso durante emissão
TdmMFA001.tabITEMNOTAAfterPostUdmMFA001.pasVerifica iST_IMPOSTO <> 'D' antes de calcular imposto do item
TdmMFA001.Calcula_ImpostoNotaUdmMFA001.pasPulsa cálculo se iST_IMPOSTO = 'D'
TfrmMFA001.btnRecalcularClickUdmMFA001.pasIgnora recálculo quando iST_IMPOSTO = 'D'
Preenche_VetorPedidoUdmMFA002.pasVerifica iST_IMPOSTO <> 'D' ao carregar pedido na NF de entrada
Consulta_PedidosUdmMFA002.pasVerifica iST_IMPOSTO <> 'D' para IPI do pedido
TfrmMFA002.reprocessaImpostoUdmMFA002.pasPula reprocessamento se iST_IMPOSTO = 'D'
TfrmMFA002.btnRecalcularClickUdmMFA002.pasIgnora recálculo quando iST_IMPOSTO = 'D'
TfrmMCA004.CalculaImpostoUMCA004.pasConsulta PN.ST_IMPOSTO da PARMNOTA
TfrmMCA013.CalculaImpostoUMCA013.pasConsulta PN.ST_IMPOSTO da PARMNOTA

Procedures SQL com referência direta ao campo​

ProcedureArquivoDescrição
CALCULA_IMPOSTONOTACALCULA_IMPOSTONOTA.sqlLógica principal: lê ST_IMPOSTO e decide cálculo/erro/skip
GERA_IMPOSTONOTAGERA_IMPOSTONOTA.sqlGera registros de imposto; segue mesma lógica de ST_IMPOSTO
GERA_IMPOSTONOTA_INDIVIDUALGERA_IMPOSTONOTA_INDIVIDUAL.sqlVariação individual do cálculo de imposto
GERA_NOTAFISCALGERA_NOTAFISCAL.sqlGeração da nota fiscal; lê ST_IMPOSTO para decidir cálculo
GERA_ESTOQUE_NOTAFISCALGERA_ESTOQUE_NOTAFISCAL.sqlAtualização de estoque; lê ST_IMPOSTO para fluxo de imposto
GERA_DARFLALURGERA_DARFLALUR.sqlFiltro ST_IMPOSTO = 'S' para cálculos do LALUR
RETORNA_LALURRETORNA_LALUR.sqlFiltro ST_IMPOSTO = 'N' em cálculos do LALUR