ST_DIFALIQUOTAXML - Diferencial de Alíquota na Importação de XML
Tela de configuração: MFA001 - Parâmetros de Faturamento
Localização: Parâmetros → Notas → Parâmetros de Notas Fiscais → campo "Dif. de Alíquota Importação XML [MNF001]"
Tabela: PARMFATUR.ST_DIFALIQUOTAXML
Valor padrão: S (Soma ao Custo do Produto) — atribuído em UdmMFA001.pas AfterInsert, chamado 1350
Telas impactadas
| Módulo | Código | Descrição |
|---|
| NF Entrada | MNF001 | Importação de XML de entrada; controla se VL_DIFALIQUOTA é somado ao custo de reposição |
| Custo de Reposição NF | MNF001 / CUSTOREPOSICAONF | Subtela de recálculo de custo que monta VL_UNITARIO / VL_CUSTO / VL_VENDA do item a partir do VL_LIQUIDO + diferencial de alíquota |
Procedures impactadas
| Procedure | Como usa |
|---|
GERA_NOTAFISCAL | Ao gerar NF a partir de pedidos, lê PARMFATUR.ST_DIFALIQUOTAXML e, combinado com ITEMNOTA.ST_DIFALXML, decide se soma VL_DIFALIQUOTA ao custo de estoque (I_VL_ESTOQUE) ao gravar o item e ao calcular o valor complementar de devolução. |
POPULA_ITEMFRETENOTA | Ao ratear frete sobre a nota, lê PM.ST_DIFALIQUOTAXML junto com PM.ST_MODALIDADECALCULOFRETE para compor a base de rateio do frete (inclui ou não o diferencial no total). |
RECALCULA_ESTOQUE | No recálculo histórico de estoque, lê P.ST_DIFALIQUOTAXML e, combinado com ITEMNOTA.ST_DIFALXML, inclui ou ignora COALESCE(ITN.VL_DIFALIQUOTA, 0) na composição do valor total da nota/item e na geração de notas complementares. |
Campos envolvidos
| Campo | Descrição |
|---|
PARMFATUR.ST_DIFALIQUOTAXML | Define a regra global da empresa para tratar o diferencial de alíquota importado do XML (S / X / I) |
ITEMNOTA.VL_DIFALIQUOTA | Valor do diferencial de alíquota (ICMS) calculado/importado para o item da NF |
ITEMNOTA.ST_DIFALXML | Flag gravada no item da NF ('S' = valor veio do XML / já foi contabilizado; 'N' = calculado/informado e ainda não somado). Usada em conjunto com o parâmetro no modo 'X' |
ITEMNOTA.VL_LIQUIDO | Valor líquido do item somado ao diferencial para compor custo unitário e de reposição |
NOTA.VL_TOTAL, NOTA.VL_FRETE, NOTA.VL_DESPESA, NOTA.VL_DESCONTO | Compõem o total da nota somado ao diferencial conforme o parâmetro |
Opções disponíveis
S - Soma ao Custo do Produto
| O que faz | Detalhe |
|---|
Diferencial de alíquota (VL_DIFALIQUOTA) | Sempre somado ao custo do produto |
Flag ITEMNOTA.ST_DIFALXML | Ignorada — o sistema soma independente da origem |
| Custo de reposição (MNF001) | VL_UNITARIO = (VL_LIQUIDO + VL_DIFALIQUOTA) / quantidade |
Custo de estoque na geração da NF (GERA_NOTAFISCAL) | I_VL_ESTOQUE = I_VL_ESTOQUE + COALESCE(V_VL_DIFALIQUOTA, 0) |
| Rateio de frete / recálculo de estoque | O VL_DIFALIQUOTA entra no valor total da nota base para rateio |
Simulação passo a passo
- MFA001 → Parâmetros → Notas → Parâmetros de Notas Fiscais →
ST_DIFALIQUOTAXML = "Soma ao Custo do Produto"
- Salve os parâmetros (F6)
- Abra MNF001 e importe um XML de compra interestadual com ICMS diferencial de alíquota (ex.:
VL_LIQUIDO = R$ 100,00 e VL_DIFALIQUOTA = R$ 10,00)
- Confirme a importação do XML
- Abra a subtela de Custo de Reposição do item →
VL_UNITARIO aparece como (100 + 10) / quantidade
- Finalize a nota e verifique o estoque ([MEQ...] / relatórios de custo) → o custo lançado inclui os R$ 10,00
- Em
RECALCULA_ESTOQUE, o total da nota utilizado também soma o diferencial
Resultado esperado: O diferencial de alíquota sempre entra no custo do produto, no rateio de frete e no recálculo de estoque.
| O que faz | Detalhe |
|---|
| Diferencial de alíquota | Soma ao custo somente se ITEMNOTA.ST_DIFALXML = 'N' (isto é, o valor foi calculado/informado internamente, não veio pronto do XML) |
Se ST_DIFALXML = 'S' | Ignora (considera que o valor já está embutido no VL_LIQUIDO importado do XML) |
| Objetivo | Evitar soma dupla quando o fornecedor já considerou o ICMS diferencial no valor do item no XML |
Regra em SQL (RECALCULA_ESTOQUE) | IIF(((ST_DIFALIQUOTAXML='X') AND (ITN.ST_DIFALXML='N')), COALESCE(ITN.VL_DIFALIQUOTA,0), 0) |
Regra em PSQL (GERA_NOTAFISCAL) | IF ((V_ST_DIFALIQUOTAXML='X') AND (V_ST_DIFALXML='N')) THEN I_VL_ESTOQUE = I_VL_ESTOQUE + COALESCE(V_VL_DIFALIQUOTA,0) |
Simulação passo a passo
- MFA001 →
ST_DIFALIQUOTAXML = "Soma ao Custo: Calculado pelo Sistema ou Informado Manualmente"
- Salve os parâmetros (F6)
- Cenário A — XML traz o diferencial embutido: importe XML em MNF001 em que o fornecedor já adicionou o diferencial no valor do item. No item a flag
ITEMNOTA.ST_DIFALXML fica 'S'
- Verifique o custo do item → o sistema não soma novamente o
VL_DIFALIQUOTA (evita duplicidade)
- Cenário B — sistema calcula o diferencial: importe XML em que o diferencial é calculado pelo JunsoftERP ou informado manualmente. A flag
ST_DIFALXML fica 'N'
- Verifique o custo → o sistema soma
VL_DIFALIQUOTA ao custo
- Em ambos os cenários,
RECALCULA_ESTOQUE respeita a mesma regra ao recompor o custo histórico
Resultado esperado: O parâmetro só soma o diferencial quando ele foi gerado pelo sistema (para não duplicar quando o XML já traz o valor embutido).
I - Ignora no Custo do Produto
| O que faz | Detalhe |
|---|
| Diferencial de alíquota | Nunca somado ao custo do produto |
| Custo unitário | Baseado apenas em VL_LIQUIDO / quantidade |
Regra em GERA_NOTAFISCAL | O IF que soma V_VL_DIFALIQUOTA ao I_VL_ESTOQUE não dispara |
| Custo de reposição (MNF001) | IIF(PF.ST_DIFALIQUOTAXML = 'S', COALESCE(N.VL_DIFALIQUOTA,0), 0) → como o parâmetro não é 'S', soma zero |
| Rateio de frete / recálculo de estoque | O VL_DIFALIQUOTA fica fora da base de cálculo |
Simulação passo a passo
- MFA001 →
ST_DIFALIQUOTAXML = "Ignora no Custo do Produto"
- Salve os parâmetros (F6)
- Importe em MNF001 um XML com
VL_DIFALIQUOTA > 0
- Abra a subtela de Custo de Reposição do item →
VL_UNITARIO considera apenas VL_LIQUIDO / quantidade
- Finalize a nota → o custo gravado no estoque não inclui o diferencial
- No rateio de frete (
POPULA_ITEMFRETENOTA) e no RECALCULA_ESTOQUE, o diferencial também não compõe o total
Resultado esperado: O diferencial de alíquota é tratado como custo tributário à parte e não afeta o preço de custo do estoque.
Tabela Comparativa Resumida
| Opção | Descrição | Soma diferencial ao custo? | Considera ITEMNOTA.ST_DIFALXML? |
|---|
| S | Soma ao Custo do Produto | Sempre | Não |
| X | Soma quando calculado/informado | Somente se ST_DIFALXML = 'N' | Sim |
| I | Ignora no Custo do Produto | Nunca | Não |
Referências no Código Fonte
Delphi
source/MFA001/UMFA001.dfm linhas 6459-6473 — label lblDIFALIQUOTAXML com Caption Dif. de Alíquota Importação XML [MNF001]
source/MFA001/UMFA001.dfm linhas 7493-7520 — combobox cmbDIFALIQUOTAXML (DataField ST_DIFALIQUOTAXML), opções S, X, I da aba Parâmetros → Notas → Parâmetros de Notas Fiscais
source/MFA001/UdmMFA001.pas linha 279 — declaração tabPARMFATURST_DIFALIQUOTAXML: TStringField
source/MFA001/UdmMFA001.pas linha 570 — AfterInsert atribui o valor padrão 'S' (chamado 1350, 16/10/2018)
source/MNF001/UMNF001.pas linhas 2542-2574 — monta SQL do custo de reposição: quando flagSICMSDifal = 'Difal' usa IIF(PF.ST_DIFALIQUOTAXML = 'S', COALESCE(N.VL_DIFALIQUOTA,0), 0) dentro do cálculo de VL_UNITARIO, VL_CUSTO e VL_VENDA
source/MNF001/UCUSTOREPOSICAONF.dfm linhas 391-436 — SQL persistido do mesmo cálculo na tabCUSTO do formulário CUSTOREPOSICAONF
SQL (Firebird)
Scripts/GERA_NOTAFISCAL.sql linhas 168-268 — declara V_ST_DIFALIQUOTAXML, lê o parâmetro do PARMFATUR e, nas linhas 947-949, aplica a regra: IF ((V_ST_DIFALIQUOTAXML = 'S') OR ((V_ST_DIFALIQUOTAXML = 'X') AND (V_ST_DIFALXML = 'N'))) THEN I_VL_ESTOQUE = I_VL_ESTOQUE + COALESCE(V_VL_DIFALIQUOTA, 0);
Scripts/POPULA_ITEMFRETENOTA.sql linhas 15-62 — declara V_ST_DIFALIQUOTAXML e lê de PARMFATUR PM junto ao cursor de FRETENOTA para compor a base de rateio do frete
Scripts/RECALCULA_ESTOQUE.sql linhas 94, 157-160, 562 e 626 — lê ST_DIFALIQUOTAXML do PARMFATUR e aplica IIF(((V_ST_DIFALIQUOTAXML='S') OR ((V_ST_DIFALIQUOTAXML='X') AND (N.ST_DIFALXML='N'))), COALESCE(N.VL_DIFALIQUOTA, 0), 0) ao somar o total da nota e o valor complementar de devolução