@useinvio/nfse-sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,225 @@
1
+ # Mapeamento do JSON da DPS
2
+
3
+ Este documento descreve o formato aceito por `DpsJsonRequest`, usado por
4
+ `buildDpsFromJson` e por `emitirNfse` quando a entrada e JSON declarativo.
5
+ O `NfseClient` tambem usa esse mesmo formato em `client.invoices.create` e
6
+ `client.invoices.buildDpsJson`.
7
+
8
+ O JSON e uma representacao tecnica da DPS Nacional. A aplicacao consumidora
9
+ continua responsavel por escolher codigos fiscais, CST, retencoes, serie,
10
+ numero da DPS e demais declaracoes tributarias. Antes de gerar XML, a SDK faz
11
+ validacoes minimas de formato, dominios pequenos do XSD e combinacoes obvias,
12
+ mas nao calcula tributos nem substitui a validacao oficial da SEFIN.
13
+
14
+ ## Visao geral
15
+
16
+ ```ts
17
+ type DpsJsonRequest = {
18
+ ambiente?: 'restrita' | 'producao';
19
+ prestador: PrestadorProfile;
20
+ servico: ServicoProfile;
21
+ emissao: DpsJsonInput;
22
+ };
23
+ ```
24
+
25
+ | Campo | Obrigatorio | Tipo | Descricao |
26
+ | --- | --- | --- | --- |
27
+ | `ambiente` | Nao | `'restrita' \| 'producao'` | Ambiente da NFS-e Nacional. Quando ausente, usa `restrita`. |
28
+ | `prestador` | Sim | `PrestadorProfile` | Dados tecnicos do prestador usados para identificar e emitir a DPS. |
29
+ | `servico` | Sim | `ServicoProfile` | Perfil padrao do servico prestado. Pode ser parcialmente sobrescrito em `emissao.servico`. |
30
+ | `emissao` | Sim | `DpsJsonInput` | Dados especificos da DPS que sera gerada. |
31
+
32
+ ## `prestador`
33
+
34
+ | Campo | Obrigatorio | Tipo | Descricao |
35
+ | --- | --- | --- | --- |
36
+ | `cnpj` | Sim | `string` | CNPJ do prestador. O SDK remove nao digitos e completa com zeros a esquerda ao montar o `Id` da DPS. |
37
+ | `tpInsc` | Nao | `'1' \| '2' \| string` | Tipo de inscricao no `Id` da DPS. `1` = CPF, `2` = CNPJ. Quando ausente, usa `2`. |
38
+ | `cLocEmi` | Sim | `string` | Codigo IBGE do municipio de emissao. |
39
+ | `serie` | Sim | `string` | Serie padrao da DPS. Pode ser sobrescrita por `emissao.serie`. |
40
+ | `opSimpNac` | Sim | `string` | Opcao pelo Simples Nacional, serializada em `prest/regTrib/opSimpNac`. |
41
+ | `regApTribSN` | Nao | `string` | Regime de apuracao do Simples Nacional. So deve ser informado quando `opSimpNac = "3"`. |
42
+ | `regEspTrib` | Sim | `string` | Regime especial de tributacao, serializado em `prest/regTrib/regEspTrib`. |
43
+
44
+ ## `servico`
45
+
46
+ | Campo | Obrigatorio | Tipo | Descricao |
47
+ | --- | --- | --- | --- |
48
+ | `cTribNac` | Sim | `string` | Codigo de tributacao nacional do servico. |
49
+ | `xDescServ` | Sim | `string` | Descricao do servico. Pode ser sobrescrita por `emissao.servico.xDescServ` ou `emissao.xDescServ`. |
50
+ | `cLocPrestacao` | Sim | `string` | Codigo IBGE do local de prestacao. Pode ser sobrescrito por `emissao.servico.cLocPrestacao`. |
51
+ | `cNBS` | Nao | `string` | Codigo NBS do servico. Pode ser sobrescrito por `emissao.servico.cNBS`. |
52
+
53
+ ## `emissao`
54
+
55
+ | Campo | Obrigatorio | Tipo | Descricao |
56
+ | --- | --- | --- | --- |
57
+ | `nDPS` | Sim | `string` | Numero da DPS dentro da serie. |
58
+ | `serie` | Nao | `string` | Serie desta DPS. Quando informado, sobrescreve `prestador.serie` apenas nesta emissao. |
59
+ | `dhEmi` | Nao | `string` | Data e hora da emissao em ISO com offset, por exemplo `2026-06-15T10:30:00-03:00`. Quando ausente, usa a data/hora atual. |
60
+ | `dCompet` | Nao | `string` | Data de competencia no formato `YYYY-MM-DD`. Quando ausente, usa a data de `dhEmi`. |
61
+ | `valores` | Condicional | `Valores` | Valores do servico, descontos e deducoes. Para calcular `vServ`, informe `valores.vServ` ou `valores.vServMoeda` + `valores.cotacao`. |
62
+ | `vServ` | Condicional | `string` | Atalho legado para o valor do servico. Usado quando `valores.vServ` nao foi informado. |
63
+ | `vServMoeda` | Condicional | `string` | Atalho legado para valor em moeda estrangeira. Usado com `cotacao` quando `vServ` nao foi informado. |
64
+ | `cotacao` | Condicional | `number` | Atalho legado para cotacao. Usado com `vServMoeda` quando `vServ` nao foi informado. |
65
+ | `servico` | Nao | `object` | Sobrescritas pontuais de `xDescServ`, `cLocPrestacao` e `cNBS` para esta DPS. |
66
+ | `tomador` | Nao | `Tomador` | Dados do tomador do servico. |
67
+ | `intermediario` | Nao | `Intermediario` | Dados do intermediario do servico. |
68
+ | `tributacaoMunicipal` | Sim | `TribMun` | Bloco de tributacao municipal. A SDK nao assume `tribISSQN` nem `tpRetISSQN` por default. |
69
+ | `tributacaoFederal` | Nao | `TribFed` | Bloco de tributacao federal. |
70
+ | `tribNac` | Nao suportado | `TribNac` | Shape legado bloqueado por validacao. IBS/CBS no layout v1.01 exige o bloco RTC `IBSCBS` oficial, ainda nao implementado. |
71
+ | `comercioExterior` | Nao | `Partial<ComExt>` | Dados de comercio exterior. |
72
+ | `comExt` | Nao | `Partial<ComExt>` | Alias de `comercioExterior`. Usado somente quando `comercioExterior` nao foi informado. |
73
+ | `obra` | Nao | `Obra` | Dados de obra. |
74
+ | `evento` | Nao suportado | `EventoServico` | Shape legado bloqueado por validacao ate refletir `xNome`, `dtIni`, `dtFim` e `idAtvEvt`/endereco do XSD. |
75
+ | `totTrib` | Sim | `TotTrib` | Totais aproximados de carga tributaria. A SDK nao preenche carga tributaria por default. |
76
+ | `xDescServ` | Nao | `string` | Atalho para sobrescrever a descricao do servico nesta DPS. |
77
+
78
+ ## `valores`
79
+
80
+ | Campo | Obrigatorio | Tipo | Descricao |
81
+ | --- | --- | --- | --- |
82
+ | `vServ` | Condicional | `string` | Valor do servico em reais. Preferencial para gerar `vServ`. |
83
+ | `vServMoeda` | Condicional | `string` | Valor em moeda estrangeira. Usado com `cotacao` quando `vServ` nao existe. |
84
+ | `cotacao` | Condicional | `number` | Cotacao usada para converter `vServMoeda` em `vServ`. |
85
+ | `vDesc` | Nao suportado | `string` | Shape legado bloqueado por validacao ate ser mapeado para os grupos oficiais de desconto do layout v1.01. |
86
+ | `vDedRed` | Nao suportado | `string` | Shape legado bloqueado por validacao ate ser mapeado para os grupos oficiais de deducao/reducao do layout v1.01. |
87
+
88
+ Regra condicional: para gerar a DPS, o SDK precisa obter `vServ`. Informe
89
+ `valores.vServ` ou informe o par `valores.vServMoeda` + `valores.cotacao`.
90
+ Os atalhos `emissao.vServ`, `emissao.vServMoeda` e `emissao.cotacao` tambem sao
91
+ aceitos, mas o formato com `valores` e preferencial.
92
+
93
+ ## `emissao.servico`
94
+
95
+ | Campo | Obrigatorio | Tipo | Descricao |
96
+ | --- | --- | --- | --- |
97
+ | `xDescServ` | Nao | `string` | Sobrescreve `servico.xDescServ`. |
98
+ | `cLocPrestacao` | Nao | `string` | Sobrescreve `servico.cLocPrestacao`. |
99
+ | `cNBS` | Nao | `string` | Sobrescreve `servico.cNBS`. |
100
+
101
+ ## `tomador`
102
+
103
+ | Campo | Obrigatorio | Tipo | Descricao |
104
+ | --- | --- | --- | --- |
105
+ | `CNPJ` | Nao | `string` | CNPJ do tomador. |
106
+ | `CPF` | Nao | `string` | CPF do tomador. |
107
+ | `NIF` | Nao | `string` | Numero de identificacao fiscal estrangeiro. |
108
+ | `cNaoNIF` | Nao | `string` | Motivo/codigo de nao informacao do NIF. |
109
+ | `xNome` | Sim, se `tomador` existir | `string` | Nome ou razao social do tomador. |
110
+ | `end` | Nao | `Record<string, string>` | Endereco. Cada chave vira uma tag XML dentro de `end`. |
111
+ | `fone` | Nao | `string` | Telefone. |
112
+ | `email` | Nao | `string` | Email. |
113
+
114
+ Quando `tomador` for informado, use exatamente um identificador entre `CNPJ`,
115
+ `CPF`, `NIF` e `cNaoNIF`.
116
+
117
+ ## `intermediario`
118
+
119
+ | Campo | Obrigatorio | Tipo | Descricao |
120
+ | --- | --- | --- | --- |
121
+ | `CNPJ` | Nao | `string` | CNPJ do intermediario. |
122
+ | `CPF` | Nao | `string` | CPF do intermediario. |
123
+ | `xNome` | Sim, se `intermediario` existir | `string` | Nome ou razao social do intermediario. |
124
+
125
+ Quando `intermediario` for informado, use exatamente um identificador entre
126
+ `CNPJ` e `CPF`.
127
+
128
+ ## `tributacaoMunicipal`
129
+
130
+ | Campo | Obrigatorio | Tipo | Descricao |
131
+ | --- | --- | --- | --- |
132
+ | `tribISSQN` | Sim | `string` | Indicador de tributacao do ISSQN (`1`, `2`, `3` ou `4`). |
133
+ | `cPaisResult` | Condicional | `string` | Codigo ISO-3166 alpha-2 do pais de resultado. Obrigatorio somente quando `tribISSQN = "3"` exportacao. |
134
+ | `tpRetISSQN` | Sim | `string` | Tipo de retencao do ISSQN (`1`, `2` ou `3`). |
135
+ | `vISSQN` | Nao | `string` | Valor do ISSQN. Serializado com duas casas decimais. |
136
+ | `vBC` | Nao | `string` | Base de calculo do ISSQN. Serializada com duas casas decimais. |
137
+ | `pAliq` | Nao | `string` | Aliquota do ISSQN. Serializada com quatro casas decimais. |
138
+ | `tpImunidade` | Condicional | `string` | Tipo de imunidade. Obrigatorio somente quando `tribISSQN = "2"`. |
139
+
140
+ Regras adicionais:
141
+
142
+ - `pAliq` e bloqueado quando `prestador.opSimpNac = "1"`.
143
+ - `cPaisResult` e bloqueado quando `tribISSQN` nao for exportacao (`"3"`).
144
+ - `tpImunidade` e bloqueado quando `tribISSQN` nao for imunidade (`"2"`).
145
+
146
+ ## `tributacaoFederal`
147
+
148
+ | Campo | Obrigatorio | Tipo | Descricao |
149
+ | --- | --- | --- | --- |
150
+ | `piscofins` | Nao | `object` | Bloco de PIS/COFINS. Quando informado, `piscofins.CST` e obrigatorio. |
151
+ | `vRetCP` | Nao | `string` | Valor retido de contribuicao previdenciaria. Serializado com duas casas decimais. |
152
+ | `vRetIRRF` | Nao | `string` | Valor retido de IRRF. Serializado com duas casas decimais. |
153
+ | `vRetCSLL` | Nao | `string` | Valor retido de CSLL. Serializado com duas casas decimais. |
154
+
155
+ ### `tributacaoFederal.piscofins`
156
+
157
+ | Campo | Obrigatorio | Tipo | Descricao |
158
+ | --- | --- | --- | --- |
159
+ | `CST` | Sim, se `piscofins` existir | `string` | CST de PIS/COFINS. |
160
+ | `vBCPisCofins` | Nao | `string` | Base de calculo de PIS/COFINS. Serializada com duas casas decimais. |
161
+ | `pAliqPis` | Nao | `string` | Aliquota de PIS. Serializada com quatro casas decimais. |
162
+ | `pAliqCofins` | Nao | `string` | Aliquota de COFINS. Serializada com quatro casas decimais. |
163
+ | `vPis` | Nao | `string` | Valor de PIS. Serializado com duas casas decimais. |
164
+ | `vCofins` | Nao | `string` | Valor de COFINS. Serializado com duas casas decimais. |
165
+ | `tpRetPisCofins` | Nao | `string` | Tipo de retencao de PIS/COFINS. |
166
+
167
+ ## `tribNac`
168
+
169
+ `tribNac` esta tipado por compatibilidade, mas e rejeitado em runtime. O layout
170
+ NFS-e Nacional v1.01 modela IBS/CBS dentro do bloco RTC `IBSCBS`, com estrutura
171
+ propria de situacao/classificacao tributaria, valores e totalizadores. Esta SDK
172
+ ainda nao implementa esse bloco.
173
+
174
+ ## `comercioExterior` / `comExt`
175
+
176
+ | Campo | Obrigatorio | Tipo | Descricao |
177
+ | --- | --- | --- | --- |
178
+ | `mdPrestacao` | Sim, se `comercioExterior` existir | `string` | Modo de prestacao. |
179
+ | `vincPrest` | Sim, se `comercioExterior` existir | `string` | Vinculo da prestacao. |
180
+ | `tpMoeda` | Sim, se `comercioExterior` existir | `string` | Tipo/codigo da moeda. |
181
+ | `vServMoeda` | Condicional | `string` | Valor do servico na moeda estrangeira. Quando ausente, usa `valores.vServMoeda` ou `emissao.vServMoeda`. |
182
+ | `mecAFComexP` | Sim, se `comercioExterior` existir | `string` | Mecanismo de apoio/fomento de comercio exterior do prestador. |
183
+ | `mecAFComexT` | Sim, se `comercioExterior` existir | `string` | Mecanismo de apoio/fomento de comercio exterior do tomador. |
184
+ | `movTempBens` | Sim, se `comercioExterior` existir | `string` | Indicador de movimentacao temporaria de bens. |
185
+ | `mdic` | Sim, se `comercioExterior` existir | `string` | Indicador relacionado ao MDIC. |
186
+ | `cPaisResult` | Nao | `string` | Campo tipado no SDK, mas ainda nao serializado no XML por esta versao. |
187
+
188
+ ## `obra`
189
+
190
+ | Campo | Obrigatorio | Tipo | Descricao |
191
+ | --- | --- | --- | --- |
192
+ | `cObra` | Nao | `string` | Codigo da obra. |
193
+ | `inscImobFisc` | Nao | `string` | Inscricao imobiliaria fiscal. |
194
+ | `cCM` | Nao suportado | `string` | Campo legado bloqueado por validacao; nao existe como filho de `obra` no XSD v1.01. |
195
+
196
+ ## `evento`
197
+
198
+ | Campo | Obrigatorio | Tipo | Descricao |
199
+ | --- | --- | --- | --- |
200
+ | `xDesc` | Nao | `string` | Descricao da atividade ou evento. |
201
+ | `dtEvento` | Nao | `string` | Data do evento. |
202
+
203
+ ## `totTrib`
204
+
205
+ | Campo | Obrigatorio | Tipo | Descricao |
206
+ | --- | --- | --- | --- |
207
+ | `pTotTribFed` | Condicional | `string` | Percentual aproximado de tributos federais. Serializado com duas casas decimais. |
208
+ | `pTotTribEst` | Condicional | `string` | Percentual aproximado de tributos estaduais. Serializado com duas casas decimais. |
209
+ | `pTotTribMun` | Condicional | `string` | Percentual aproximado de tributos municipais. Serializado com duas casas decimais. |
210
+ | `vTotTrib` | Condicional | `string` | Valor total aproximado de tributos. Serializado com duas casas decimais. |
211
+ | `pTotTribSN` | Condicional | `string` | Percentual aproximado de tributos no Simples Nacional. |
212
+ | `indTotTrib` | Condicional | `string` | Indicador oficial de total aproximado. |
213
+
214
+ Informe ao menos uma forma de totalizacao: `vTotTrib`, grupo `pTotTrib*`,
215
+ `pTotTribSN` ou `indTotTrib`.
216
+
217
+ ## Regras de formatacao
218
+
219
+ - Valores monetarios sao serializados com duas casas decimais.
220
+ - Aliquotas sao serializadas com quatro casas decimais.
221
+ - Percentuais de carga tributaria em `totTrib` sao serializados com duas casas decimais.
222
+ - Campos vazios, `undefined` ou `null` nao geram tags XML opcionais.
223
+ - Campos obrigatorios ausentes geram erro antes da DPS ser retornada.
224
+ - `comercioExterior` tem prioridade sobre `comExt` quando os dois forem informados.
225
+ - O XML gerado nos testes e validado contra `schemas/nfse/v1.01/Schemas/1.01/DPS_v1.01.xsd`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Invio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.