Pular para o conteúdo
Fiscal ProBiblioteca
NF-e e NFC-e · PIS e PIS-ST

pPIS em PISAliq: percentual, precisão e erros de escala

<pPIS>det › imposto › PIS › PISAliq › pPIS

Revisã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