Guia completo para preenchimento dos campos de retenção na NFSe Nacional após as mudanças da Nota Técnica 007 (vigência 09/02/2026).
Antes da NT007, muitos sistemas usavam os campos vPis e vCofins
para informar valores retidos na fonte. Isso estava errado — esses campos
existem exclusivamente para apuração própria.
O erro causava redução indevida da base de cálculo do IBS e da CBS, contrariando a Lei Complementar 214/2025. A NT007 corrige isso formalmente com três mudanças:
Todos os campos ficam dentro de servico.retencao.
tpRetPisCofins, sem modificar.csll.valor e use tipoRetencaoPisCofinsCSLL.
csll.valor e use tipoRetencaoPisCofinsCSLL.
vRetCSLL),
este campo recebe a soma de todos os tributos retidos conforme o tipoRetencaoPisCofinsCSLL.tpRet=3: vPIS retido + vCOFINS retido + vCSLL retidotpRet=4: vPIS retido + vCOFINS retidotpRet=8: apenas vCSLL retidotipoRetencaoPisCofinsCSLL.
pis.retido — mantido para outros padrões, sem efeito no XML nacional.
Escolha o tipoRetencaoPisCofinsCSLL com base em quais tributos são retidos na fonte.
| Código | PIS | COFINS | CSLL | csll.valor contém |
|---|---|---|---|---|
| 0 | não retido | não retido | não retido | não informar |
| 3 | retido | retido | retido | PIS + COFINS + CSLL |
| 4 | retido | retido | não retido | PIS + COFINS |
| 5 | retido | não retido | não retido | PIS |
| 6 | não retido | retido | não retido | COFINS |
| 7 | não retido | retido | retido | COFINS + CSLL |
| 8 | não retido | não retido | retido | CSLL |
| 9 | retido | não retido | retido | PIS + CSLL |
| 1 | PIS/COFINS Retidos legado | comportamento antigo | ||
| 2 | PIS/COFINS Não Retidos legado | comportamento antigo | ||
Veja como preencher o JSON da API para cada situação. Serviço de R$ 1.000,00 em todos os exemplos. Note que apuração própria e retenção podem coexistir com alíquotas diferentes.
"retencao": { "tipoRetencaoPisCofinsCSLL": "0", "pis": { "aliquota": 0.65, "valor": 6.50 // apuração própria }, "cofins": { "aliquota": 3.00, "valor": 30.00 // apuração própria } // csll.valor: não informar }
<piscofins> <pAliqPis>0.65</pAliqPis> <vPis>6.50</vPis> <pAliqCofins>3.00</pAliqCofins> <vCofins>30.00</vCofins> <tpRetPisCofins>0</tpRetPisCofins> </piscofins> <!-- vRetCSLL: omitido -->
"retencao": { "tipoRetencaoPisCofinsCSLL": "3", "pis": { "aliquota": 1.65, "valor": 16.50 // apuração própria (1,65% de 1000) }, "cofins": { "aliquota": 7.60, "valor": 76.00 // apuração própria (7,60% de 1000) }, "csll": { // soma das retenções: PIS 0,65% + COFINS 3,00% + CSLL 1,00% // = 6.50 + 30.00 + 10.00 = 46.50 "valor": 46.50 } }
<piscofins> <pAliqPis>1.65</pAliqPis> <vPis>16.50</vPis> <pAliqCofins>7.60</pAliqCofins> <vCofins>76.00</vCofins> <tpRetPisCofins>3</tpRetPisCofins> </piscofins> <vRetCSLL>46.50</vRetCSLL>
"retencao": { "tipoRetencaoPisCofinsCSLL": "4", "pis": { "aliquota": 0.65 }, "cofins": { "aliquota": 3.00 }, "csll": { "valor": 36.50 // 6.50+30.00 (sem CSLL) } }
<piscofins> <pAliqPis>0.65</pAliqPis> <pAliqCofins>3.00</pAliqCofins> <tpRetPisCofins>4</tpRetPisCofins> </piscofins> <vRetCSLL>36.50</vRetCSLL>
"retencao": { "tipoRetencaoPisCofinsCSLL": "8", "pis": { "aliquota": 0.65, "valor": 6.50 // apuração própria }, "cofins": { "aliquota": 3.00, "valor": 30.00 // apuração própria }, "csll": { "valor": 10.00 // só CSLL retida } }
<piscofins> <pAliqPis>0.65</pAliqPis> <vPis>6.50</vPis> <pAliqCofins>3.00</pAliqCofins> <vCofins>30.00</vCofins> <tpRetPisCofins>8</tpRetPisCofins> </piscofins> <vRetCSLL>10.00</vRetCSLL>
Se você já usava a API antes da NT007 com o campo retido: true,
veja o que precisa mudar.
"retencao": { "pis": { "aliquota": 0.65, "valor": 6.50, "retido": true }, "cofins": { "aliquota": 3.00, "valor": 30.00, "retido": true }, "csll": { "valor": 10.00, "retido": true } }
"retencao": { "tipoRetencaoPisCofinsCSLL": "3", "pis": { "aliquota": 0.65 // valor: não informar }, "cofins": { "aliquota": 3.00 // valor: não informar }, "csll": { // soma: 6.50+30.00+10.00 "valor": 46.50 } }
csll.valorpis.valor / cofins.valor apenas os de apuração própriaretido será ignorado — pode remover
vRetCSLL no XML é herança histórica — antes da NT007 esse campo guardava apenas a CSLL retida.
Com a NT007, ele foi reutilizado como agregador de todas as retenções sociais (PIS + COFINS + CSLL),
dependendo do tipoRetencaoPisCofinsCSLL. Na nossa API usamos csll.valor para manter consistência
com os outros campos, mas o comportamento segue a NT007.
vPis (apuração própria)
ao invés de ser agregado em vRetCSLL. Isso pode causar inconsistência na base de cálculo do IBS/CBS
e eventual rejeição pela SEFAZ. Não informe pis.valor quando o PIS for retido.
"0"
(PIS/COFINS/CSLL Não Retidos). Nesse caso o csll.valor não deve ser informado.
tipoRetencaoPisCofinsCSLL.
"3").
Empresas do Simples Nacional geralmente não têm retenção ("0" ou não informar).
Consulte seu contador para definir o código correto para cada tipo de operação.
retido normalmente.
1 e 2 são legados e ainda são aceitos
pela SEFAZ durante o período de transição. Porém, serão removidos quando o grupo IBSCBS
se tornar obrigatório na NFSe Nacional. Recomendamos migrar para os novos códigos (0 e 3–9)
o quanto antes para evitar problemas futuros.