Guia completo para preenchimento dos novos campos de retenção e apuração própria
na NFSe Nacional e padrões municipais compatíveis, usando versaoEsquema=RTC007.
Com versaoEsquema=RTC007, a API passa a separar explicitamente dois conceitos
que antes ficavam misturados dentro de retencao:
versaoEsquema=RTC007,
o tpRetPisCofins e o vRetCSLL são calculados automaticamente pela API a partir dos valores informados. O cst usa o valor informado em apuracaoPropria.cstPisCofins — quando não informado, a API aplica o default "00".
RTC, a API continua funcionando exatamente
como antes — nenhuma mudança obrigatória para quem não precisar da nova separação.
Com versaoEsquema=RTC007, os campos se dividem em dois grupos dentro de servico.
aliquota e valor.vRetCSLL.apuracaoPropria.pis — são contextos diferentes.
aliquota e valor.vRetCSLL.
aliquota e valor.vRetCSLL automaticamente —
não informe mais o valor somado manualmente.
retencao — não é necessário informar. A API determina qual combinação
de tributos está retida e preenche o tipo correto (0–9).
"00" quando não informado — a API preenche automaticamente
quando há retenção mas não há apuração própria.00 a 99 conforme tabela CST PIS/COFINS.
aliquota — o valor é opcional: se não informado, a API calcula
automaticamente como baseCalculoPisCofins × aliquota. Se informado, o valor fornecido
é mantido sem recálculo.aliquota — o valor é opcional: se não informado, a API calcula
automaticamente como baseCalculoPisCofins × aliquota. Se informado, o valor fornecido
é mantido sem recálculo.Use a tabela abaixo para saber quais grupos informar com base no regime do prestador e no contrato com o tomador.
| Situação | retencao | apuracaoPropria | tpRetPisCofins gerado |
|---|---|---|---|
| Simples Nacional — sem retenção, sem apuração própria | — | — | não enviado |
| Lucro Real — apuração própria, tomador não retém | — | ✓ | 0 — nenhum retido |
| Tomador retém PIS, COFINS e CSLL — sem apuração própria | ✓ (pis + cofins + csll) | — | 3 — todos retidos |
| Lucro Real — apuração própria E tomador retém PIS/COFINS/CSLL | ✓ (pis + cofins + csll) | ✓ | 3 — todos retidos |
| Tomador retém PIS e COFINS — CSLL não retida | ✓ (pis + cofins) | — | 4 — PIS/COFINS retidos |
| Tomador retém somente PIS — COFINS e CSLL não retidas | ✓ (pis) | — | 5 — só PIS retido |
| Tomador retém somente COFINS — PIS e CSLL não retidos | ✓ (cofins) | — | 6 — só COFINS retida |
| Tomador retém COFINS e CSLL — PIS não retido | ✓ (cofins + csll) | — | 7 — COFINS/CSLL retidos |
| Tomador retém somente CSLL — PIS e COFINS não retidos | ✓ (csll) | — | 8 — só CSLL retida |
| Tomador retém PIS e CSLL — COFINS não retida | ✓ (pis + csll) | — | 9 — PIS/CSLL retidos |
tpRetPisCofins é sempre calculado automaticamente a partir dos valores
preenchidos em retencao. Você não precisa calcular nem informar esse campo —
informe apenas os valores de cada tributo no grupo correto.
Serviço de R$ 1.000,00 em todos os exemplos. Todos usam versaoEsquema: "RTC007".
"versaoEsquema": "RTC007", "servico": [{ "apuracaoPropria": { "cstPisCofins": "01", "baseCalculoPisCofins": 1000.00, "pis": { "aliquota": 1.65 // valor omitido: API calcula 1000 × 1.65% = 16.50 }, "cofins": { "aliquota": 7.60 // valor omitido: API calcula 1000 × 7.60% = 76.00 } } // retencao: não informado }]
<piscofins> <Cst>01</Cst> <vBCPisCofins>1000.00</vBCPisCofins> <pAliqPis>1.65</pAliqPis> <vPis>16.50</vPis> <pAliqCofins>7.60</pAliqCofins> <vCofins>76.00</vCofins> <tpRetPisCofins>0</tpRetPisCofins> </piscofins> <!-- vRetCSLL: omitido -->
tpRetPisCofins=0 automaticamente."versaoEsquema": "RTC007", "servico": [{ "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 }, "cofins": { "aliquota": 3.00, "valor": 30.00 }, "csll": { "aliquota": 1.00, "valor": 10.00 } } // apuracaoPropria: não informado // API usa cstPisCofins="00" automaticamente }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>3</tpRetPisCofins> </piscofins> <vRetCSLL>46.50</vRetCSLL> <!-- 6.50 + 30.00 + 10.00, calculado pela API -->
tpRetPisCofins=3 e soma vRetCSLL=46.50 automaticamente. CST padrão "00"."versaoEsquema": "RTC007", "servico": [{ "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 }, "cofins": { "aliquota": 3.00, "valor": 30.00 }, "csll": { "aliquota": 1.00, "valor": 10.00 } }, "apuracaoPropria": { "cstPisCofins": "01", "baseCalculoPisCofins": 1000.00, "pis": { "aliquota": 1.65, "valor": 16.50 }, // valor informado: mantido "cofins": { "aliquota": 7.60, "valor": 76.00 } // valor informado: mantido } }]
<piscofins> <Cst>01</Cst> <vBCPisCofins>1000.00</vBCPisCofins> <pAliqPis>1.65</pAliqPis> <vPis>16.50</vPis> <pAliqCofins>7.60</pAliqCofins> <vCofins>76.00</vCofins> <tpRetPisCofins>3</tpRetPisCofins> </piscofins> <vRetCSLL>46.50</vRetCSLL>
"versaoEsquema": "RTC007", "servico": [{ "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 }, "cofins": { "aliquota": 3.00, "valor": 30.00 } // csll: não retida } }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>4</tpRetPisCofins> </piscofins> <vRetCSLL>36.50</vRetCSLL> <!-- 6.50 + 30.00, calculado pela API -->
vRetCSLL contém apenas PIS + COFINS retidos (36,50), sem CSLL."versaoEsquema": "RTC007", "servico": [{ "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 } // cofins e csll: não retidas } }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>5</tpRetPisCofins> </piscofins> <vRetCSLL>6.50</vRetCSLL>
vRetCSLL contém somente o valor do PIS retido."versaoEsquema": "RTC007", "servico": [{ "retencao": { "cofins": { "aliquota": 3.00, "valor": 30.00 } // pis e csll: não retidos } }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>6</tpRetPisCofins> </piscofins> <vRetCSLL>30.00</vRetCSLL>
vRetCSLL contém somente o valor da COFINS retida."versaoEsquema": "RTC007", "servico": [{ "retencao": { "cofins": { "aliquota": 3.00, "valor": 30.00 }, "csll": { "aliquota": 1.00, "valor": 10.00 } // pis: não retido } }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>7</tpRetPisCofins> </piscofins> <vRetCSLL>40.00</vRetCSLL> <!-- 30.00 + 10.00, calculado pela API -->
vRetCSLL = COFINS + CSLL retidos (40,00)."versaoEsquema": "RTC007", "servico": [{ "retencao": { "csll": { "aliquota": 1.00, "valor": 10.00 } }, "apuracaoPropria": { "cstPisCofins": "01", "baseCalculoPisCofins": 1000.00, "pis": { "aliquota": 0.65, "valor": 6.50 }, "cofins": { "aliquota": 3.00, "valor": 30.00 } } }]
<piscofins> <Cst>01</Cst> <vBCPisCofins>1000.00</vBCPisCofins> <pAliqPis>0.65</pAliqPis> <vPis>6.50</vPis> <pAliqCofins>3.00</pAliqCofins> <vCofins>30.00</vCofins> <tpRetPisCofins>8</tpRetPisCofins> </piscofins> <vRetCSLL>10.00</vRetCSLL>
vPis e vCofins, não para vRetCSLL."versaoEsquema": "RTC007", "servico": [{ "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 }, "csll": { "aliquota": 1.00, "valor": 10.00 } // cofins: não retida } }]
<piscofins> <Cst>00</Cst> <tpRetPisCofins>9</tpRetPisCofins> </piscofins> <vRetCSLL>16.50</vRetCSLL> <!-- 6.50 + 10.00, calculado pela API -->
vRetCSLL = PIS + CSLL retidos (16,50).1 (PIS/COFINS Retidos) e 2 (PIS/COFINS Não Retidos) são
aceitos apenas durante o período de transição. Serão removidos quando o grupo IBS/CBS se tornar
obrigatório. Use preferencialmente os códigos 0 e 3–9.
Se você já usava a API com o campo retido: true ou com tipoRetencaoPisCofinsCSLL
informado manualmente, veja como adaptar para o novo contrato.
"versaoEsquema": "RTC", "retencao": { "tipoRetencaoPisCofinsCSLL": "3", // cliente calcula "pis": { "aliquota": 1.65, "valor": 16.50, // apuração própria "retido": false }, "cofins": { "aliquota": 7.60, "valor": 76.00, // apuração própria "retido": false }, "csll": { "valor": 46.50 // soma manual: 6.50+30.00+10.00 } }
"versaoEsquema": "RTC007", "retencao": { "pis": { "aliquota": 0.65, "valor": 6.50 }, "cofins": { "aliquota": 3.00, "valor": 30.00 }, "csll": { "aliquota": 1.00, "valor": 10.00 } }, "apuracaoPropria": { "cstPisCofins": "01", "baseCalculoPisCofins": 1000.00, "pis": { "aliquota": 1.65, "valor": 16.50 }, "cofins": { "aliquota": 7.60, "valor": 76.00 } } // tpRetPisCofins e vRetCSLL: calculados pela API // cst: usa apuracaoPropria.cstPisCofins, ou "00" por default
versaoEsquema: "RTC007" na notaretencao com cada tributo separadoapuracaoPropria com cstPisCofinstipoRetencaoPisCofinsCSLL — a API calcula automaticamentecsll.valor como agregador — informe apenas o valor real da CSLL retidaretido será ignorado — pode remover
versaoEsquema=RTC007 é opcional — se não informar ou informar RTC,
o comportamento anterior é mantido integralmente. A migração é recomendada para quem tem apuração
própria de PIS/COFINS ou quer simplificar o preenchimento, mas não é obrigatória.
retencao.pis, retencao.cofins e retencao.csll.
A combinação desses três valores determina univocamente o tipo (0–9). Não há ambiguidade, então
não faz sentido o cliente calcular algo que a API pode derivar com certeza.
apuracaoPropria será ignorado completamente. A API processa apenas os campos
do contrato RTC — tipoRetencaoPisCofinsCSLL, pis.retido,
cofins.retido e csll.valor como agregador.
apuracaoPropria não é informado mas há retenção, a API preenche automaticamente
cstPisCofins="00" no XML — obrigatório pelo layout da NFSe Nacional sempre que o grupo
piscofins existir. Você não precisa se preocupar com isso.
versaoEsquema=RTC007 é informado.
NFSes de outros padrões municipais sem suporte ao grupo apuracaoPropria
simplesmente ignoram os novos campos — sem impacto.
valor dentro de apuracaoPropria.pis e apuracaoPropria.cofins
é opcional. Se não informado, a API calcula automaticamente usando
baseCalculoPisCofins × aliquota. Se você informar o valor, ele é mantido como está —
sem recálculo. Isso é útil quando há arredondamentos ou ajustes que diferem do cálculo simples.
RTC (sem versaoEsquema=RTC007) esses campos continuam
funcionando normalmente. No contrato RTC007, pis.retido e
cofins.retido são ignorados, e tipoRetencaoPisCofinsCSLL é calculado
automaticamente pela API — não precisa informar.