Estrutura do XML da DPS da NFS-e Nacional: os grupos, os campos obrigatórios e a ordem de cada um
· 6 min de leitura
A DPS (Declaração de Prestação de Serviço) é o XML que o sistema do prestador envia ao Sistema Nacional para gerar a NFS-e. O schema dela é rígido em dois pontos que derrubam muita integração: quais campos são obrigatórios e a ordem em que eles aparecem dentro de cada grupo. Um campo certo, na posição errada, é rejeitado do mesmo jeito que um campo faltando. Este guia mostra os grupos principais na ordem do leiaute v1.01, com os obrigatórios marcados com asterisco.
O esqueleto da DPS
DPS
├─ infDPS
│ ├─ tpAmb * ambiente (1 produção, 2 homologação)
│ ├─ dhEmi * data e hora de emissão, com fuso
│ ├─ verAplic * versão do sistema que gerou a DPS
│ ├─ serie * série da DPS
│ ├─ nDPS * número da DPS
│ ├─ dCompet * competência, AAAA-MM-DD
│ ├─ tpEmit * quem emite (1 = prestador)
│ ├─ cMotivoEmisTI motivo, se emitida pelo tomador ou intermediário
│ ├─ chNFSeRej chave da NFS-e rejeitada pelo tomador
│ ├─ cLocEmi * código IBGE do município emissor
│ ├─ subst NFS-e substituída
│ ├─ prest * prestador
│ ├─ toma tomador
│ ├─ interm intermediário
│ ├─ serv * serviço
│ ├─ valores * valores e tributos
│ └─ IBSCBS grupo do IBS e da CBS
└─ Signature assinatura do infDPSA assinatura digital (Signature) vem depois do infDPS, dentro da DPS, e assina o infDPS pelo atributo Id. O schema aceita a DPS sem assinatura, mas o Sistema Nacional exige a assinatura com o certificado do emitente.
Prestador: prest
Primeiro a identificação, que é uma escolha (um só entre CNPJ, CPF, NIF ou cNaoNIF), depois CAEPF, IM, xNome, end, fone, email e, por fim, o grupo obrigatório regTrib, com opSimpNac (obrigatório), regApTribSN e regEspTrib (obrigatório), nessa ordem.
Tomador: toma
Mesma abertura do prestador (um entre CNPJ, CPF, NIF ou cNaoNIF), depois CAEPF, IM, xNome (obrigatório quando o grupo existe), end, fone e email. O grupo inteiro é opcional no schema, para os casos sem tomador identificado.
Serviço: serv
locPrest (obrigatório, o local da prestação), cServ (obrigatório), e depois os grupos opcionais comExt, obra, atvEvento e infoCompl. Dentro de cServ: cTribNac (obrigatório, os 6 dígitos do código nacional), cTribMun, xDescServ (obrigatório), cNBS e cIntContrib.
Valores e tributos: valores
vServPrest (obrigatório, com vReceb e o obrigatório vServ), depois vDescCondIncond, vDedRed e o obrigatório trib. Dentro de trib, três grupos nesta ordem: tribMun (obrigatório), tribFed e totTrib (obrigatório).
- tribMun:
tribISSQN(obrigatório),cPaisResult,tpImunidade,exigSusp,BM,tpRetISSQN(obrigatório) epAliq. - totTrib: é uma escolha. Vai um só entre
vTotTrib(valores),pTotTrib(percentuais),indTotTrib(indicador) epTotTribSN(percentual do Simples).
IBS e CBS: IBSCBS
O grupo fica no fim do infDPS, depois de valores. No schema ele é opcional; quando a regra passa a exigir, e o que acontece com a nota sem ele até o fim de 2026, está em NFS-e sem IBS e CBS: rejeição e desconformidade.
Como conferir o seu XML
Cole a DPS (ou a NFS-e autorizada, que traz a DPS dentro) no validador de XML da DPS. Para cada erro de formato, ele mostra o grupo, a ordem dos campos desse grupo com o que está no seu XML e o que falta, e os valores aceitos. Veja como ler o resultado. Erros de formato voltam do Sistema Nacional como rejeição E1235.
Perguntas frequentes
A ordem dos campos importa no XML da DPS?
Sim. Cada grupo da DPS tem sequência fixa no schema, e um campo fora da posição é rejeitado (E1235) mesmo com o valor certo.
Onde fica a assinatura na DPS?
Depois do infDPS, dentro da DPS, assinando o infDPS pelo atributo Id. O schema aceita a DPS sem assinatura, mas o Sistema Nacional exige.
O tomador é obrigatório na DPS?
No schema, o grupo toma é opcional, para os casos sem tomador identificado. Quando ele vem, o nome (xNome) é obrigatório, e a identificação é uma só entre CNPJ, CPF, NIF ou o motivo de não ter NIF.
Prefere não montar XML? Na API de emissão da Sudrel você manda JSON com 4 campos para um tomador CNPJ, e a DPS sai montada nessa ordem, assinada e conferida.
Notas recebidas por API, sem montar o robô
API e webhook com as notas do Ambiente Nacional, e ambiente de teste para integrar sem risco. Teste grátis, sem cartão.
Criar conta e testar a API