vAliqProd em PISOutr: valor por unidade e precisão do cálculo
<vAliqProd>det › imposto › PIS › PISOutr › vAliqProdRevisão editorial em 27 de set. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.
vAliqProd em PISOutr é a alíquota do PIS, Programa de Integração Social, expressa em reais por unidade da base. O caminho é /nfeProc/NFe/infNFe/det/imposto/PIS/PISOutr/vAliqProd. Seu parceiro é qBCProd; o resultado da multiplicação é vPIS.
Preservar as casas decimais do parâmetro é diferente de apresentar o imposto final em reais e centavos.
Reais por unidade, não percentual
A fórmula da alternativa por quantidade é vPIS = qBCProd × vAliqProd. A unidade de qBCProd precisa coincidir com aquela a que se refere o valor por unidade. Não há divisão por 100 nessa conta.
vAliqProd não é pPIS, que expressa percentual sobre base monetária. Também não é o preço comercial de uma unidade do produto: é um parâmetro tributário específico do cálculo. O preço da mercadoria não determina esse campo. MOC 7.0, Anexo I, Q10/Q11 e alternativa de PISOutr, páginas 52–54.
Quatro casas podem alterar o resultado
Hipótese sintética: método por quantidade e CST 99 previamente assumidos, 250 unidades de base e parâmetro R$ 0,1234 por unidade. O resultado é:
250 × 0,1234 = R$ 30,85.
<PISOutr xmlns="http://www.portalfiscal.inf.br/nfe">
<CST>99</CST>
<qBCProd>250.0000</qBCProd>
<vAliqProd>0.1234</vAliqProd>
<vPIS>30.85</vPIS>
</PISOutr>
O fragmento é sintético, parcial em relação à nota e não pronto para transmissão. Código, unidade e parâmetro não recomendam tributação.
Se a integração reduzir o parâmetro para 0.12 antes de multiplicar, obterá R$ 30,00. A diferença de R$ 0,85 vem da perda de precisão na entrada, não de arredondar o valor final de R$ 30,85. Os resultados são exatos; o exemplo não pressupõe uma regra universal de arredondamento fiscal.
A escala também importa: 0.1234 significa R$ 0,1234 por unidade, e não 0,1234%. Dividir por 100 indevidamente altera o resultado.
Alternativa e faceta de PISOutr
PISOutr exige CST, um único par de cálculo e vPIS. Seu domínio de CST é 49, 50–56, 60–67, 70–75, 98 e 99; não é uma faixa contínua nem um código livre. Se o método definido é quantidade, o par é qBCProd/vAliqProd; a alternativa vBC/pPIS não é enviada junto. A presença de vAliqProd não autoriza trocar o grupo para PISQtde, que tem outro domínio de CST. MOC, página 54.
No XSD real PL_010d_v1.03, referência histórica, este campo usa TDec_1104v: até 11 inteiros e de uma a quatro casas se houver fração, com aceitação de zero e inteiros. 0.1234, 0.12 e 1 seguem a faceta; 0,1234, símbolos monetários e cinco casas não seguem. Valor permitido não é necessariamente valor correto para a operação. Schemas 010d v1.03, tipos básicos.
Não transporte essa flexibilidade a PISST/vAliqProd: o 010d histórico usa ali TDec_1104, cuja parte fracionária tem exatamente quatro casas. Mesmo nome não garante mesma faceta.
Rastrear unidade e parâmetro
Para divergência, compare o valor confirmado na origem, sua unidade, a quantidade de base, o parâmetro interno antes da conta e o literal do XML. Confira perda de casas decimais, conversão entre centavos/reais e divisão indevida por 100.
Para falha estrutural, confira se qBCProd acompanha vAliqProd e se o gerador não inseriu também vBC/pPIS. Campo ausente não deve virar zero por padrão. Uma falha de formato pode ser corrigida na serialização preservando o valor confirmado; não justifica escolher uma alíquota diferente.
A alíquota unitária real e a unidade aplicável precisam ser confirmadas com o responsável contábil usando operação, produto, regime e fundamento. Depois corrija a origem comprovadamente errada, gere e valide novamente, sem editar XML assinado.
Veja qBCProd, vPIS e o contexto distinto de vAliqProd em PISST.
Referência técnica para integração
- XPath completo
/nfeProc/NFe/infNFe/det/imposto/PIS/PISOutr/vAliqProd- Namespace
http://www.portalfiscal.inf.br/nfe- Leiaute
- 4.00 · PL_010e_v1.02
- Ocorrências no XSD
- 1–1 no contexto do elemento pai
- Tipo
- TDec_1104v · string
- Preenchimento no catálogo
- Condicional
A ocorrência vale dentro da estrutura XML: um campo obrigatório em um grupo opcional não torna esse grupo obrigatório. A aplicação fiscal depende da operação e da versão da regra.
- pattern
0|0\.[0-9]{1,4}|[1-9]{1}[0-9]{0,10}|[1-9]{1}[0-9]{0,10}(\.[0-9]{1,4})?- whiteSpace
preserve