pPIS em PISAliq: percentual, precisão e erros de escala
<pPIS>det › imposto › PIS › PISAliq › pPISRevisão editorial em 27 de set. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.
pPIS é a alíquota percentual do PIS, Programa de Integração Social, em PISAliq. Seu XPath é /nfeProc/NFe/infNFe/det/imposto/PIS/PISAliq/pPIS. Ele acompanha vBC, a base em reais, e determina a parcela do cálculo que resulta em vPIS.
O campo recebe o número expresso em percentual. Não recebe o fator já dividido por 100 nem um valor monetário por unidade. MOC 7.0, Anexo I, Q08, página 52.
Percentual escrito e fator de cálculo
Assumindo somente para um exemplo fictício base R$ 800,00 e percentual 1,25%, a conta é:
800 × 1,25 ÷ 100 = R$ 10,00.
A integração pode usar internamente o fator 0,0125. Na tag pPIS, a representação correspondente é 1.2500. Se o emissor gravar 0.0125 e ainda dividir por 100, calculará R$ 0,10; o resultado fica cem vezes menor. Se gravar 125, calculará R$ 1.000,00; fica cem vezes maior. A estrutura decimal sozinha não identifica esse erro de escala.
<PISAliq xmlns="http://www.portalfiscal.inf.br/nfe">
<CST>01</CST>
<vBC>800.00</vBC>
<pPIS>1.2500</pPIS>
<vPIS>10.00</vPIS>
</PISAliq>
O fragmento é sintético, parcial em relação à nota e não está pronto para transmissão. CST, base e percentual foram assumidos para explicar a conta, sem indicar a tributação do leitor. O CST 01 ou 02 é dado separado; não basta para descobrir um percentual universal.
Precisão no XML
No XSD real PL_010d_v1.03, referência estrutural histórica, pPIS usa TDec_0302a04: até três dígitos inteiros; se há parte fracionária, ela contém duas a quatro casas. O padrão admite também inteiros e zero. Schemas 010d v1.03, tipos básicos.
| Representação | Leitura estrutural nesse XSD |
|---|---|
| 1.25 ou 1.2500 | Fração com precisão admitida |
| 1 ou 0 | Inteiro admitido pelo padrão |
| 1.2 | Uma casa fracionária, fora do padrão |
| 1.25000 | Cinco casas, fora do padrão |
| 1,25 ou 1.25% | Vírgula ou símbolo não pertencem ao valor XML |
Um zero aceito estruturalmente não prova que a operação tenha alíquota zero nem que PISAliq seja o grupo correto. Se a informação está ausente na origem, não a transforme em zero. A faceta lida no 010d não deve ser atribuída a outro pacote sem conferência.
vPIS tem representação monetária própria, normalmente exibida com duas casas; isso não autoriza reduzir pPIS a duas casas antes da conta. A precisão do percentual e a precisão do valor final são etapas distintas. Não há aqui uma tolerância de rejeição ou regra universal de arredondamento.
Alíquota alterada na integração
Para investigar divergência, compare o percentual confirmado na origem, o valor interno usado na conta e o literal do XML. Documente em qual etapa ocorre a conversão para fator e onde ela é revertida para percentual. Confira também se houve arredondamento antecipado ou troca de separador decimal.
Depois compare vBC e recalcule com os mesmos dados efetivamente enviados. Um resultado diferente pode vir da base, mesmo quando pPIS está certo. Corrija a transformação comprovadamente errada e gere novamente; não ajuste a alíquota só para coincidir com um total nem edite XML assinado.
O valor monetário por unidade é vAliqProd em modalidades por quantidade, com outra unidade e outra fórmula. pPIS também existe em PISOutr e PISST: o nome é igual, mas o grupo define o contexto e o tratamento do resultado. Para a alíquota real, confirme operação, produto, regime e fundamento com o responsável contábil.
Continue na base de PISAliq e no valor de PISAliq.
Referência técnica para integração
- XPath completo
/nfeProc/NFe/infNFe/det/imposto/PIS/PISAliq/pPIS- 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_0302a04 · 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]{2,4}|[1-9]{1}[0-9]{0,2}(\.[0-9]{2,4})?- whiteSpace
preserve