@sinete/nfe 0.0.0 → 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.
Files changed (101) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +11 -0
  3. package/README.md +148 -1
  4. package/dist/build/build.d.ts +127 -0
  5. package/dist/build/build.d.ts.map +1 -0
  6. package/dist/build/destinatario.d.ts +19 -0
  7. package/dist/build/destinatario.d.ts.map +1 -0
  8. package/dist/build/ibscbs.d.ts +27 -0
  9. package/dist/build/ibscbs.d.ts.map +1 -0
  10. package/dist/build/icms.d.ts +42 -0
  11. package/dist/build/icms.d.ts.map +1 -0
  12. package/dist/build/nfce.d.ts +122 -0
  13. package/dist/build/nfce.d.ts.map +1 -0
  14. package/dist/build/pl.d.ts +19 -0
  15. package/dist/build/pl.d.ts.map +1 -0
  16. package/dist/build/rejeicoes.d.ts +52 -0
  17. package/dist/build/rejeicoes.d.ts.map +1 -0
  18. package/dist/build/tributos.d.ts +45 -0
  19. package/dist/build/tributos.d.ts.map +1 -0
  20. package/dist/build/values.d.ts +48 -0
  21. package/dist/build/values.d.ts.map +1 -0
  22. package/dist/decimal.d.ts +66 -0
  23. package/dist/decimal.d.ts.map +1 -0
  24. package/dist/format.d.ts +48 -0
  25. package/dist/format.d.ts.map +1 -0
  26. package/dist/ibs-cbs.d.ts +14 -0
  27. package/dist/ibs-cbs.d.ts.map +1 -0
  28. package/dist/ibs-cbs.js +43 -0
  29. package/dist/ibs-cbs.js.map +10 -0
  30. package/dist/index.d.ts +37 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +4399 -0
  33. package/dist/index.js.map +33 -0
  34. package/dist/issues.d.ts +24 -0
  35. package/dist/issues.d.ts.map +1 -0
  36. package/dist/model.d.ts +861 -0
  37. package/dist/model.d.ts.map +1 -0
  38. package/dist/ports.d.ts +109 -0
  39. package/dist/ports.d.ts.map +1 -0
  40. package/dist/rotulo.d.ts +12 -0
  41. package/dist/rotulo.d.ts.map +1 -0
  42. package/dist/rtc.d.ts +65 -0
  43. package/dist/rtc.d.ts.map +1 -0
  44. package/dist/services/client.d.ts +277 -0
  45. package/dist/services/client.d.ts.map +1 -0
  46. package/dist/services/gzip.d.ts +7 -0
  47. package/dist/services/gzip.d.ts.map +1 -0
  48. package/dist/services/index.d.ts +14 -0
  49. package/dist/services/index.d.ts.map +1 -0
  50. package/dist/services/outcome.d.ts +15 -0
  51. package/dist/services/outcome.d.ts.map +1 -0
  52. package/dist/services/proc.d.ts +41 -0
  53. package/dist/services/proc.d.ts.map +1 -0
  54. package/dist/services/recuperar.d.ts +28 -0
  55. package/dist/services/recuperar.d.ts.map +1 -0
  56. package/dist/services/resolver.d.ts +88 -0
  57. package/dist/services/resolver.d.ts.map +1 -0
  58. package/dist/services/soap.d.ts +43 -0
  59. package/dist/services/soap.d.ts.map +1 -0
  60. package/dist/time.d.ts +12 -0
  61. package/dist/time.d.ts.map +1 -0
  62. package/dist/versao-gerada.d.ts +3 -0
  63. package/dist/versao-gerada.d.ts.map +1 -0
  64. package/package.json +58 -3
  65. package/src/build/build.ts +1503 -0
  66. package/src/build/destinatario.ts +212 -0
  67. package/src/build/ibscbs.ts +135 -0
  68. package/src/build/icms.ts +645 -0
  69. package/src/build/nfce.ts +425 -0
  70. package/src/build/pl.ts +73 -0
  71. package/src/build/rejeicoes.ts +142 -0
  72. package/src/build/tributos.ts +217 -0
  73. package/src/build/values.ts +126 -0
  74. package/src/data/arredondamento.json +30 -0
  75. package/src/data/cstat.json +36 -0
  76. package/src/data/fusos.json +17 -0
  77. package/src/data/nfce-urls.json +170 -0
  78. package/src/data/produtor-rural.json +17 -0
  79. package/src/data/reforma.json +6 -0
  80. package/src/data/resp-tec.json +13 -0
  81. package/src/data/servicos.json +44 -0
  82. package/src/data/suframa.json +7 -0
  83. package/src/decimal.ts +232 -0
  84. package/src/format.ts +65 -0
  85. package/src/ibs-cbs.ts +89 -0
  86. package/src/index.ts +155 -0
  87. package/src/issues.ts +80 -0
  88. package/src/model.ts +1033 -0
  89. package/src/ports.ts +96 -0
  90. package/src/rotulo.ts +137 -0
  91. package/src/rtc.ts +305 -0
  92. package/src/services/client.ts +1116 -0
  93. package/src/services/gzip.ts +26 -0
  94. package/src/services/index.ts +45 -0
  95. package/src/services/outcome.ts +50 -0
  96. package/src/services/proc.ts +165 -0
  97. package/src/services/recuperar.ts +93 -0
  98. package/src/services/resolver.ts +127 -0
  99. package/src/services/soap.ts +133 -0
  100. package/src/time.ts +23 -0
  101. package/src/versao-gerada.ts +3 -0
package/src/model.ts ADDED
@@ -0,0 +1,1033 @@
1
+ /**
2
+ * Modelo de entrada da NF-e: o que quem emite descreve. O builder (`montarNfe`) transforma isto no objeto tipado do
3
+ * `@sinete/schemas` do pacote de liberação vigente, calcula os valores derivados e os totais em decimal exato e
4
+ * confere as regras antes de qualquer serialização.
5
+ *
6
+ * Convenções:
7
+ * - Nomes de campo do leiaute (MOC) onde eles existem (`xNome`, `NCM`, `CFOP`, `qCom`, `pICMS`); nomes em português
8
+ * para os agrupamentos que o leiaute não nomeia (`emitente`, `itens`, `pagamento`).
9
+ * - Números entram como `DecimalInput` (`'12.34'`, `12.34`, `12n` ou `Decimal`). Prefira texto: `number` perde dígitos
10
+ * acima de 15 algarismos. Nada é convertido para ponto flutuante nas contas.
11
+ * - Valores derivados (`vProd`, `vICMS`, `vPIS`, totais) são opcionais: omitidos, o builder calcula; informados, o
12
+ * builder usa o valor dado e confere a coerência com tolerância de R$ 0,01 (a mesma das regras de validação).
13
+ * - Códigos do leiaute ficam como uniões de literais (`CST: '00'`), com constantes nomeadas onde ajudam
14
+ * (`MotivoDesoneracaoIcms`, `TipoPagamento`).
15
+ * - Grupos raros ou puramente informativos (veículo novo, medicamento, combustível, DI, exportação, rastro, cana,
16
+ * monofasia do IBS/CBS) entram já no tipo gerado do schema, sem tradução: o builder só os repassa.
17
+ */
18
+
19
+ import type { Uf } from '@sinete/core';
20
+ import type {
21
+ TCIBS_NFe,
22
+ TIS,
23
+ TMonofasia,
24
+ TNFe_infNFe_agropecuario,
25
+ TNFe_infNFe_cana,
26
+ TNFe_infNFe_compra,
27
+ TNFe_infNFe_det_obsItem,
28
+ TNFe_infNFe_det_prod_arma,
29
+ TNFe_infNFe_det_prod_comb,
30
+ TNFe_infNFe_det_prod_DI,
31
+ TNFe_infNFe_det_prod_detExport,
32
+ TNFe_infNFe_det_prod_gCred,
33
+ TNFe_infNFe_det_prod_infProdEmb,
34
+ TNFe_infNFe_det_prod_infProdNFF,
35
+ TNFe_infNFe_det_prod_med,
36
+ TNFe_infNFe_det_prod_rastro,
37
+ TNFe_infNFe_det_prod_veicProd,
38
+ TNFe_infNFe_exporta,
39
+ TNFe_infNFe_ide_NFref_refECF,
40
+ TNFe_infNFe_ide_NFref_refNF,
41
+ TNFe_infNFe_infAdic_obsCont,
42
+ TNFe_infNFe_infAdic_obsFisco,
43
+ TNFe_infNFe_infAdic_procRef,
44
+ TNFe_infNFe_infIntermed,
45
+ TNFe_infNFe_pag_detPag_card,
46
+ TTribNFe,
47
+ TVeiculo,
48
+ } from '@sinete/schemas/nfe/PL_010f';
49
+ import type { DecimalInput } from './decimal.ts';
50
+ import type { Instante } from './time.ts';
51
+
52
+ // ---------------------------------------------------------------------------------------------------------------
53
+ // Participantes
54
+ // ---------------------------------------------------------------------------------------------------------------
55
+
56
+ /** CNPJ (numérico ou alfanumérico) ou CPF, exclusivos. Aceitam máscara; o builder normaliza. */
57
+ export type DocumentoPessoa =
58
+ | { readonly CNPJ: string; readonly CPF?: never }
59
+ | { readonly CPF: string; readonly CNPJ?: never };
60
+
61
+ /** Endereço no Brasil (`TEnderEmi`, `TEndereco`, `TLocal`). */
62
+ export interface Endereco {
63
+ readonly xLgr: string;
64
+ readonly nro: string;
65
+ readonly xCpl?: string;
66
+ readonly xBairro: string;
67
+ /** Código IBGE do município, 7 dígitos. */
68
+ readonly cMun: string;
69
+ readonly xMun: string;
70
+ readonly UF: Uf;
71
+ /** 8 dígitos, com ou sem máscara. */
72
+ readonly CEP?: string;
73
+ /** DDD + número, só dígitos (6 a 14). */
74
+ readonly fone?: string;
75
+ }
76
+
77
+ /** Endereço de destinatário no exterior: o leiaute usa `cMun` 9999999, `xMun` EXTERIOR e `UF` EX. */
78
+ export interface EnderecoExterior {
79
+ readonly exterior: true;
80
+ readonly xLgr: string;
81
+ readonly nro: string;
82
+ readonly xCpl?: string;
83
+ readonly xBairro: string;
84
+ /** Código do país (tabela do BACEN, até 4 dígitos). */
85
+ readonly cPais: string;
86
+ readonly xPais: string;
87
+ readonly fone?: string;
88
+ }
89
+
90
+ /** Código de Regime Tributário (C21): 1 Simples Nacional; 2 Simples com excesso de sublimite; 3 Regime Normal; 4 MEI. */
91
+ export type Crt = '1' | '2' | '3' | '4';
92
+
93
+ /** Emitente (grupo C). Produtor rural pessoa física emite com CPF, nas séries 920 a 969. */
94
+ export type Emitente = DocumentoPessoa & {
95
+ readonly xNome: string;
96
+ readonly xFant?: string;
97
+ /** No emitente o CEP é obrigatório (`TEnderEmi`). */
98
+ readonly endereco: Endereco & { readonly CEP: string };
99
+ /** Inscrição estadual; `ISENTO` só na NF-e avulsa (RV C17-30). Opcional a partir do PL_010f (NT 2026.007). */
100
+ readonly IE?: string;
101
+ /** IE do substituto tributário na UF de destino. */
102
+ readonly IEST?: string;
103
+ readonly IM?: string;
104
+ readonly CNAE?: string;
105
+ readonly CRT: Crt;
106
+ readonly ISUFEmit?: string;
107
+ };
108
+
109
+ /**
110
+ * Indicador da IE do destinatário (E16a): 1 contribuinte do ICMS; 2 contribuinte isento de inscrição (não informar a
111
+ * IE); 9 não contribuinte.
112
+ */
113
+ export type IndIEDest = '1' | '2' | '9';
114
+
115
+ /** Destinatário (grupo E). No exterior, `idEstrangeiro` no lugar do CNPJ/CPF. */
116
+ export type Destinatario = (
117
+ | DocumentoPessoa
118
+ | { readonly idEstrangeiro: string; readonly CNPJ?: never; readonly CPF?: never }
119
+ ) & {
120
+ readonly xNome?: string;
121
+ readonly endereco?: Endereco | EnderecoExterior;
122
+ readonly indIEDest: IndIEDest;
123
+ readonly IE?: string;
124
+ readonly ISUF?: string;
125
+ readonly IM?: string;
126
+ readonly email?: string;
127
+ };
128
+
129
+ /** Local de retirada ou de entrega (grupos F e G), quando diferente do endereço do emitente ou destinatário. */
130
+ export type Local = DocumentoPessoa &
131
+ Endereco & {
132
+ readonly xNome?: string;
133
+ readonly email?: string;
134
+ readonly IE?: string;
135
+ };
136
+
137
+ // ---------------------------------------------------------------------------------------------------------------
138
+ // Documentos referenciados
139
+ // ---------------------------------------------------------------------------------------------------------------
140
+
141
+ /**
142
+ * NF de produtor em papel (modelo 04) ou avulsa (01) referenciada (BA10). O modelo 04 foi extinto pelo Ajuste
143
+ * SINIEF 10/2022; o builder só aceita a referência a notas emitidas antes do fim da vigência (`data/produtor-rural.json`).
144
+ */
145
+ export type RefNfp = DocumentoPessoa & {
146
+ readonly cUF: string;
147
+ /** Ano e mês da emissão da nota referenciada, `AAMM`. */
148
+ readonly AAMM: string;
149
+ /** IE do produtor ou `ISENTO`. */
150
+ readonly IE: string;
151
+ readonly mod: '01' | '04';
152
+ readonly serie: string | number;
153
+ readonly nNF: string | number;
154
+ };
155
+
156
+ /** Documento referenciado no nível da nota (grupo BA). */
157
+ export type Referenciada =
158
+ | { readonly refNFe: string }
159
+ | { readonly refNFeSig: string }
160
+ | { readonly refNF: TNFe_infNFe_ide_NFref_refNF }
161
+ | { readonly refNFP: RefNfp }
162
+ | { readonly refCTe: string }
163
+ | { readonly refECF: TNFe_infNFe_ide_NFref_refECF };
164
+
165
+ // ---------------------------------------------------------------------------------------------------------------
166
+ // Produto
167
+ // ---------------------------------------------------------------------------------------------------------------
168
+
169
+ /** Grupo específico do produto (choice do grupo I): no máximo um. Repassado como veio. */
170
+ export type ProdutoEspecifico =
171
+ | { readonly veicProd: TNFe_infNFe_det_prod_veicProd }
172
+ | { readonly med: TNFe_infNFe_det_prod_med }
173
+ | { readonly arma: readonly TNFe_infNFe_det_prod_arma[] }
174
+ | { readonly comb: TNFe_infNFe_det_prod_comb }
175
+ | { readonly nRECOPI: string };
176
+
177
+ /** Produto ou serviço do item (grupo I). */
178
+ export interface Produto {
179
+ readonly cProd: string;
180
+ /** GTIN; padrão `SEM GTIN`. */
181
+ readonly cEAN?: string;
182
+ readonly cBarra?: string;
183
+ readonly xProd: string;
184
+ /** NCM de 8 dígitos (ou só o capítulo, 2 dígitos, fora do comércio exterior). */
185
+ readonly NCM: string;
186
+ readonly NVE?: readonly string[];
187
+ readonly CEST?: string;
188
+ readonly indEscala?: 'S' | 'N';
189
+ readonly CNPJFab?: string;
190
+ readonly cBenef?: string;
191
+ readonly gCred?: readonly TNFe_infNFe_det_prod_gCred[];
192
+ readonly tpCredPresIBSZFM?: '0' | '1' | '2' | '3' | '4';
193
+ readonly EXTIPI?: string;
194
+ /** CFOP de 4 dígitos. */
195
+ readonly CFOP: string;
196
+ /** Unidade comercial (até 6 caracteres). */
197
+ readonly uCom: string;
198
+ /** Quantidade comercial, até 4 casas. */
199
+ readonly qCom: DecimalInput;
200
+ /** Valor unitário comercial, até 10 casas. */
201
+ readonly vUnCom: DecimalInput;
202
+ /** Valor bruto; padrão `qCom × vUnCom` arredondado em 2 casas. */
203
+ readonly vProd?: DecimalInput;
204
+ /** GTIN da unidade tributável; padrão igual a `cEAN`. */
205
+ readonly cEANTrib?: string;
206
+ readonly cBarraTrib?: string;
207
+ /** Unidade tributável; padrão igual a `uCom`. */
208
+ readonly uTrib?: string;
209
+ /** Quantidade tributável; padrão igual a `qCom`. */
210
+ readonly qTrib?: DecimalInput;
211
+ /** Valor unitário tributável; padrão `vUnCom` quando unidade e quantidade coincidem, senão `vProd / qTrib`. */
212
+ readonly vUnTrib?: DecimalInput;
213
+ readonly vFrete?: DecimalInput;
214
+ readonly vSeg?: DecimalInput;
215
+ /** Desconto incondicional do item. */
216
+ readonly vDesc?: DecimalInput;
217
+ readonly vOutro?: DecimalInput;
218
+ /** 1 (padrão): o valor do item compõe o total da nota; 0: não compõe. */
219
+ readonly indTot?: '0' | '1';
220
+ readonly indBemMovelUsado?: '1';
221
+ readonly DI?: readonly TNFe_infNFe_det_prod_DI[];
222
+ readonly detExport?: readonly TNFe_infNFe_det_prod_detExport[];
223
+ readonly xPed?: string;
224
+ readonly nItemPed?: string;
225
+ readonly nFCI?: string;
226
+ readonly rastro?: readonly TNFe_infNFe_det_prod_rastro[];
227
+ readonly infProdNFF?: TNFe_infNFe_det_prod_infProdNFF;
228
+ readonly infProdEmb?: TNFe_infNFe_det_prod_infProdEmb;
229
+ readonly especifico?: ProdutoEspecifico;
230
+ }
231
+
232
+ // ---------------------------------------------------------------------------------------------------------------
233
+ // ICMS
234
+ // ---------------------------------------------------------------------------------------------------------------
235
+
236
+ /** Origem da mercadoria (N11, `Torig`): 0 nacional; 1 e 2 estrangeira; 3 a 8 conforme conteúdo de importação. */
237
+ export type Origem = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8';
238
+
239
+ /** Modalidade da BC do ICMS (N13): 0 MVA; 1 pauta; 2 preço tabelado máximo; 3 valor da operação. */
240
+ export type ModBC = '0' | '1' | '2' | '3';
241
+
242
+ /** Modalidade da BC do ICMS ST (N18): 0 preço tabelado; 1 lista negativa; 2 positiva; 3 neutra; 4 MVA; 5 pauta; 6 valor da operação. */
243
+ export type ModBCST = '0' | '1' | '2' | '3' | '4' | '5' | '6';
244
+
245
+ /**
246
+ * Motivo da desoneração do ICMS (N28), com os nomes das tabelas do leiaute. Cada CST aceita um subconjunto (o tipo de
247
+ * cada grupo restringe): CST 20 e 70 e 90: 3, 9, 10, 11, 12 (20) ou 3, 9, 12; CST 30: 6, 7, 9; CST 40/41/50: 1, 3, 4, 5,
248
+ * 6, 7, 8, 9, 10, 11, 16, 90; partilha: 9, 10, 11.
249
+ */
250
+ export const MotivoDesoneracaoIcms: {
251
+ readonly TAXI: '1';
252
+ readonly AGROPECUARIA: '3';
253
+ readonly FROTISTA_LOCADORA: '4';
254
+ readonly DIPLOMATICO_CONSULAR: '5';
255
+ readonly UTILITARIOS_MOTOCICLETAS_AMAZONIA_ALC: '6';
256
+ readonly SUFRAMA: '7';
257
+ readonly VENDA_ORGAO_PUBLICO: '8';
258
+ readonly OUTROS: '9';
259
+ readonly DEFICIENTE_CONDUTOR: '10';
260
+ readonly DEFICIENTE_NAO_CONDUTOR: '11';
261
+ readonly FOMENTO_AGROPECUARIO: '12';
262
+ readonly OLIMPIADAS_RIO_2016: '16';
263
+ readonly SOLICITADO_PELO_FISCO: '90';
264
+ } = {
265
+ TAXI: '1',
266
+ AGROPECUARIA: '3',
267
+ FROTISTA_LOCADORA: '4',
268
+ DIPLOMATICO_CONSULAR: '5',
269
+ UTILITARIOS_MOTOCICLETAS_AMAZONIA_ALC: '6',
270
+ SUFRAMA: '7',
271
+ VENDA_ORGAO_PUBLICO: '8',
272
+ OUTROS: '9',
273
+ DEFICIENTE_CONDUTOR: '10',
274
+ DEFICIENTE_NAO_CONDUTOR: '11',
275
+ FOMENTO_AGROPECUARIO: '12',
276
+ OLIMPIADAS_RIO_2016: '16',
277
+ SOLICITADO_PELO_FISCO: '90',
278
+ };
279
+
280
+ export type MotivoDesoneracaoIcms = (typeof MotivoDesoneracaoIcms)[keyof typeof MotivoDesoneracaoIcms];
281
+
282
+ /** Desoneração do ICMS: valor e motivo andam juntos (RV N27a/N28). */
283
+ export interface Desoneracao<M extends MotivoDesoneracaoIcms> {
284
+ readonly vICMSDeson: DecimalInput;
285
+ readonly motDesICMS: M;
286
+ /** 1: o desonerado deduz do valor do item e do total (NT 2023.004); 0 ou ausente: não deduz. */
287
+ readonly indDeduzDeson?: '0' | '1';
288
+ }
289
+
290
+ /** Desoneração do ICMS-ST (N33a/N33b): 3 uso na agropecuária; 9 outros; 12 fomento agropecuário. */
291
+ export interface DesoneracaoSt {
292
+ readonly vICMSSTDeson: DecimalInput;
293
+ readonly motDesICMSST: '3' | '9' | '12';
294
+ }
295
+
296
+ /** Parte própria do ICMS. `vBC` padrão: valor da operação (vProd + vFrete + vSeg + vOutro - vDesc) já reduzido por `pRedBC`. */
297
+ export interface IcmsProprio {
298
+ /** Padrão `'3'` (valor da operação). */
299
+ readonly modBC?: ModBC;
300
+ readonly vBC?: DecimalInput;
301
+ readonly pICMS: DecimalInput;
302
+ /** Padrão `vBC × pICMS / 100`. */
303
+ readonly vICMS?: DecimalInput;
304
+ }
305
+
306
+ /** FCP da operação própria. `vBCFCP` padrão `vBC`; `vFCP` padrão `vBCFCP × pFCP / 100`. */
307
+ export interface IcmsFcp {
308
+ readonly vBCFCP?: DecimalInput;
309
+ readonly pFCP?: DecimalInput;
310
+ readonly vFCP?: DecimalInput;
311
+ }
312
+
313
+ /**
314
+ * ICMS retido por substituição tributária. Com `modBCST` 4 (MVA) e sem `vBCST`, a base é
315
+ * (vProd + vFrete + vSeg + vOutro - vDesc + vIPI) × (1 + pMVAST/100) × (1 - pRedBCST/100). `vICMSST` padrão
316
+ * `vBCST × pICMSST / 100 - ICMS próprio` (MOC N23); `vFCPST` padrão `vBCFCPST × pFCPST / 100 - vFCP` (RV N23d-10).
317
+ */
318
+ export interface IcmsSt {
319
+ readonly modBCST: ModBCST;
320
+ readonly pMVAST?: DecimalInput;
321
+ readonly pRedBCST?: DecimalInput;
322
+ readonly vBCST?: DecimalInput;
323
+ readonly pICMSST: DecimalInput;
324
+ readonly vICMSST?: DecimalInput;
325
+ readonly vBCFCPST?: DecimalInput;
326
+ readonly pFCPST?: DecimalInput;
327
+ readonly vFCPST?: DecimalInput;
328
+ /**
329
+ * ICMS próprio a abater do ST quando o grupo não tem ICMS próprio destacado (CST 30, CSOSN 201, 202, 203, 900).
330
+ * Ausente, nada é abatido. Não vai para o XML.
331
+ */
332
+ readonly vICMSDeducaoST?: DecimalInput;
333
+ }
334
+
335
+ /** ICMS-ST retido anteriormente (CST 60, CSOSN 500). Todos informativos. */
336
+ export interface IcmsStRetido {
337
+ readonly vBCSTRet?: DecimalInput;
338
+ readonly pST?: DecimalInput;
339
+ readonly vICMSSubstituto?: DecimalInput;
340
+ readonly vICMSSTRet?: DecimalInput;
341
+ readonly vBCFCPSTRet?: DecimalInput;
342
+ readonly pFCPSTRet?: DecimalInput;
343
+ readonly vFCPSTRet?: DecimalInput;
344
+ readonly pRedBCEfet?: DecimalInput;
345
+ readonly vBCEfet?: DecimalInput;
346
+ readonly pICMSEfet?: DecimalInput;
347
+ readonly vICMSEfet?: DecimalInput;
348
+ }
349
+
350
+ interface IcmsBase {
351
+ readonly orig: Origem;
352
+ /** Discrimina os grupos de partilha (`Part`) e de repasse de ST (`ST`); ausente nos demais. */
353
+ readonly grupo?: undefined;
354
+ }
355
+
356
+ export interface Icms00 extends IcmsBase, IcmsProprio {
357
+ readonly CST: '00';
358
+ readonly pFCP?: DecimalInput;
359
+ readonly vFCP?: DecimalInput;
360
+ }
361
+
362
+ /** Monofásico próprio sobre combustíveis. `vICMSMono` padrão `qBCMono × adRemICMS`. */
363
+ export interface Icms02 extends IcmsBase {
364
+ readonly CST: '02';
365
+ readonly qBCMono?: DecimalInput;
366
+ readonly adRemICMS: DecimalInput;
367
+ readonly vICMSMono?: DecimalInput;
368
+ }
369
+
370
+ export interface Icms10 extends IcmsBase, IcmsProprio, IcmsFcp {
371
+ readonly CST: '10';
372
+ readonly st: IcmsSt;
373
+ readonly desoneracaoSt?: DesoneracaoSt;
374
+ }
375
+
376
+ /** Monofásico próprio e com retenção sobre combustíveis. */
377
+ export interface Icms15 extends IcmsBase {
378
+ readonly CST: '15';
379
+ readonly qBCMono?: DecimalInput;
380
+ readonly adRemICMS: DecimalInput;
381
+ readonly vICMSMono?: DecimalInput;
382
+ readonly qBCMonoReten?: DecimalInput;
383
+ readonly adRemICMSReten: DecimalInput;
384
+ readonly vICMSMonoReten?: DecimalInput;
385
+ readonly pRedAdRem?: DecimalInput;
386
+ readonly motRedAdRem?: '1' | '9';
387
+ }
388
+
389
+ /** Com redução de base de cálculo. `vBC` padrão: valor da operação × (1 - pRedBC/100). */
390
+ export interface Icms20 extends IcmsBase, IcmsProprio, IcmsFcp {
391
+ readonly CST: '20';
392
+ readonly pRedBC: DecimalInput;
393
+ readonly desoneracao?: Desoneracao<'3' | '9' | '10' | '11' | '12'>;
394
+ }
395
+
396
+ /** Isenta ou não tributada, com ST. */
397
+ export interface Icms30 extends IcmsBase {
398
+ readonly CST: '30';
399
+ readonly st: IcmsSt;
400
+ readonly desoneracao?: Desoneracao<'6' | '7' | '9'>;
401
+ }
402
+
403
+ /** 40 isenta, 41 não tributada, 50 suspensão. */
404
+ export interface Icms40 extends IcmsBase {
405
+ readonly CST: '40' | '41' | '50';
406
+ readonly desoneracao?: Desoneracao<'1' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '16' | '90'>;
407
+ }
408
+
409
+ /**
410
+ * Diferimento (CST 51). Com `pICMS` e sem valores: `vICMSOp = vBC × pICMS`, `vICMSDif = vICMSOp × pDif`,
411
+ * `vICMS = vICMSOp - vICMSDif` (RV N16a e N16c); o FCP segue a mesma conta com `pFCPDif`.
412
+ */
413
+ export interface Icms51 extends IcmsBase, IcmsFcp {
414
+ readonly CST: '51';
415
+ readonly modBC?: ModBC;
416
+ readonly pRedBC?: DecimalInput;
417
+ readonly cBenefRBC?: string;
418
+ readonly vBC?: DecimalInput;
419
+ readonly pICMS?: DecimalInput;
420
+ readonly vICMSOp?: DecimalInput;
421
+ /** Percentual do diferimento; 100 difere tudo. */
422
+ readonly pDif?: DecimalInput;
423
+ readonly vICMSDif?: DecimalInput;
424
+ readonly vICMS?: DecimalInput;
425
+ readonly pFCPDif?: DecimalInput;
426
+ readonly vFCPDif?: DecimalInput;
427
+ readonly vFCPEfet?: DecimalInput;
428
+ }
429
+
430
+ /** Monofásico com recolhimento diferido. */
431
+ export interface Icms53 extends IcmsBase {
432
+ readonly CST: '53';
433
+ readonly qBCMono?: DecimalInput;
434
+ readonly adRemICMS?: DecimalInput;
435
+ readonly vICMSMonoOp?: DecimalInput;
436
+ readonly pDif?: DecimalInput;
437
+ readonly vICMSMonoDif?: DecimalInput;
438
+ readonly vICMSMono?: DecimalInput;
439
+ readonly qBCMonoDif?: DecimalInput;
440
+ readonly adRemICMSDif?: DecimalInput;
441
+ }
442
+
443
+ /** ICMS cobrado anteriormente por ST. */
444
+ export interface Icms60 extends IcmsBase, IcmsStRetido {
445
+ readonly CST: '60';
446
+ }
447
+
448
+ /** Monofásico cobrado anteriormente. */
449
+ export interface Icms61 extends IcmsBase {
450
+ readonly CST: '61';
451
+ readonly qBCMonoRet?: DecimalInput;
452
+ readonly adRemICMSRet: DecimalInput;
453
+ readonly vICMSMonoRet?: DecimalInput;
454
+ }
455
+
456
+ /** Com redução de base e ST. */
457
+ export interface Icms70 extends IcmsBase, IcmsProprio, IcmsFcp {
458
+ readonly CST: '70';
459
+ readonly pRedBC: DecimalInput;
460
+ readonly st: IcmsSt;
461
+ readonly desoneracao?: Desoneracao<'3' | '9' | '12'>;
462
+ readonly desoneracaoSt?: DesoneracaoSt;
463
+ }
464
+
465
+ /** Outras. Tudo opcional; cada parte informada é calculada como nos grupos equivalentes. */
466
+ export interface Icms90 extends IcmsBase, IcmsFcp {
467
+ readonly CST: '90';
468
+ readonly modBC?: ModBC;
469
+ readonly vBC?: DecimalInput;
470
+ readonly pRedBC?: DecimalInput;
471
+ readonly cBenefRBC?: string;
472
+ readonly pICMS?: DecimalInput;
473
+ readonly vICMSOp?: DecimalInput;
474
+ readonly pDif?: DecimalInput;
475
+ readonly vICMSDif?: DecimalInput;
476
+ readonly vICMS?: DecimalInput;
477
+ readonly pFCPDif?: DecimalInput;
478
+ readonly vFCPDif?: DecimalInput;
479
+ readonly vFCPEfet?: DecimalInput;
480
+ readonly st?: IcmsSt;
481
+ readonly desoneracao?: Desoneracao<'3' | '9' | '12'>;
482
+ readonly desoneracaoSt?: DesoneracaoSt;
483
+ }
484
+
485
+ /** Partilha do ICMS entre UF de origem e destino (ICMSPart), CST 10 ou 90 (ou 20). */
486
+ export interface IcmsPartilha extends Omit<IcmsProprio, 'modBC'> {
487
+ readonly grupo: 'Part';
488
+ readonly orig: Origem;
489
+ readonly CST: '10' | '20' | '90';
490
+ readonly modBC: ModBC;
491
+ readonly pRedBC?: DecimalInput;
492
+ readonly st: IcmsSt;
493
+ /** Percentual da base da operação própria. */
494
+ readonly pBCOp: DecimalInput;
495
+ /** UF para a qual o ICMS-ST é devido. */
496
+ readonly UFST: Uf | 'EX';
497
+ readonly desoneracao?: Desoneracao<'9' | '10' | '11'>;
498
+ }
499
+
500
+ /** Repasse de ICMS-ST retido anteriormente para a UF de destino (ICMSST), CST 41 ou 60. */
501
+ export interface IcmsRepasseSt extends IcmsStRetido {
502
+ readonly grupo: 'ST';
503
+ readonly orig: Origem;
504
+ readonly CST: '41' | '60';
505
+ readonly vBCSTRet: DecimalInput;
506
+ readonly vICMSSTRet: DecimalInput;
507
+ readonly vBCSTDest: DecimalInput;
508
+ readonly vICMSSTDest: DecimalInput;
509
+ }
510
+
511
+ /** Simples Nacional 101: com permissão de crédito. `vCredICMSSN` padrão: valor da operação × pCredSN / 100. */
512
+ export interface IcmsSn101 extends IcmsBase {
513
+ readonly CSOSN: '101';
514
+ readonly pCredSN: DecimalInput;
515
+ readonly vCredICMSSN?: DecimalInput;
516
+ }
517
+
518
+ /** Simples Nacional 102, 103, 300, 400. */
519
+ export interface IcmsSn102 {
520
+ readonly CSOSN: '102' | '103' | '300' | '400';
521
+ readonly orig?: Origem;
522
+ readonly grupo?: undefined;
523
+ }
524
+
525
+ /** Simples Nacional 201: crédito e ST. */
526
+ export interface IcmsSn201 extends IcmsBase {
527
+ readonly CSOSN: '201';
528
+ readonly st: IcmsSt;
529
+ readonly pCredSN: DecimalInput;
530
+ readonly vCredICMSSN?: DecimalInput;
531
+ }
532
+
533
+ /** Simples Nacional 202 e 203: ST sem crédito. */
534
+ export interface IcmsSn202 extends IcmsBase {
535
+ readonly CSOSN: '202' | '203';
536
+ readonly st: IcmsSt;
537
+ }
538
+
539
+ /** Simples Nacional 500: cobrado anteriormente. */
540
+ export interface IcmsSn500 extends IcmsBase, IcmsStRetido {
541
+ readonly CSOSN: '500';
542
+ }
543
+
544
+ /** Simples Nacional 900: outros. */
545
+ export interface IcmsSn900 {
546
+ readonly CSOSN: '900';
547
+ readonly orig?: Origem;
548
+ readonly grupo?: undefined;
549
+ readonly modBC?: ModBC;
550
+ readonly vBC?: DecimalInput;
551
+ readonly pRedBC?: DecimalInput;
552
+ readonly pICMS?: DecimalInput;
553
+ readonly vICMS?: DecimalInput;
554
+ readonly st?: IcmsSt;
555
+ readonly pCredSN?: DecimalInput;
556
+ readonly vCredICMSSN?: DecimalInput;
557
+ }
558
+
559
+ /** Tributação do ICMS do item: um grupo por CST (regime normal) ou CSOSN (Simples Nacional). */
560
+ export type Icms =
561
+ | Icms00
562
+ | Icms02
563
+ | Icms10
564
+ | Icms15
565
+ | Icms20
566
+ | Icms30
567
+ | Icms40
568
+ | Icms51
569
+ | Icms53
570
+ | Icms60
571
+ | Icms61
572
+ | Icms70
573
+ | Icms90
574
+ | IcmsPartilha
575
+ | IcmsRepasseSt
576
+ | IcmsSn101
577
+ | IcmsSn102
578
+ | IcmsSn201
579
+ | IcmsSn202
580
+ | IcmsSn500
581
+ | IcmsSn900;
582
+
583
+ /**
584
+ * ICMS de partilha para a UF de destino (NA, EC 87/2015), venda interestadual a não contribuinte. Os valores
585
+ * `vICMSUFDest` e `vFCPUFDest` são obrigatórios: a conta muda entre base única e base dupla conforme a UF de destino, e
586
+ * esse dado não está aqui.
587
+ */
588
+ export interface IcmsUfDest {
589
+ readonly vBCUFDest: DecimalInput;
590
+ readonly vBCFCPUFDest?: DecimalInput;
591
+ readonly pFCPUFDest?: DecimalInput;
592
+ readonly pICMSUFDest: DecimalInput;
593
+ readonly pICMSInter: '4.00' | '7.00' | '12.00';
594
+ /** Padrão 100 (desde 2019). */
595
+ readonly pICMSInterPart?: DecimalInput;
596
+ readonly vFCPUFDest?: DecimalInput;
597
+ readonly vICMSUFDest: DecimalInput;
598
+ /** Padrão 0 (desde 2019). */
599
+ readonly vICMSUFRemet?: DecimalInput;
600
+ }
601
+
602
+ // ---------------------------------------------------------------------------------------------------------------
603
+ // IPI, II, ISSQN, PIS, COFINS
604
+ // ---------------------------------------------------------------------------------------------------------------
605
+
606
+ /** IPI tributado (O07): por alíquota (`vBC` padrão valor da operação) ou por unidade (`qUnid × vUnid`). */
607
+ export type IpiTributado = {
608
+ readonly CST: '00' | '49' | '50' | '99';
609
+ readonly vIPI?: DecimalInput;
610
+ } & (
611
+ | { readonly vBC?: DecimalInput; readonly pIPI: DecimalInput; readonly qUnid?: never; readonly vUnid?: never }
612
+ | { readonly qUnid: DecimalInput; readonly vUnid: DecimalInput; readonly vBC?: never; readonly pIPI?: never }
613
+ );
614
+
615
+ /** IPI não tributado (O08). */
616
+ export interface IpiNaoTributado {
617
+ readonly CST: '01' | '02' | '03' | '04' | '05' | '51' | '52' | '53' | '54' | '55';
618
+ }
619
+
620
+ export type Ipi = (IpiTributado | IpiNaoTributado) & {
621
+ /** Código de enquadramento legal; `999` quando não há. */
622
+ readonly cEnq: string;
623
+ readonly CNPJProd?: string;
624
+ readonly cSelo?: string;
625
+ readonly qSelo?: string;
626
+ };
627
+
628
+ /** Imposto de importação (grupo P). */
629
+ export interface ImpostoImportacao {
630
+ readonly vBC: DecimalInput;
631
+ readonly vDespAdu: DecimalInput;
632
+ readonly vII: DecimalInput;
633
+ readonly vIOF: DecimalInput;
634
+ }
635
+
636
+ /** ISSQN (grupo U), NF-e conjugada. `vISSQN` padrão `vBC × vAliq / 100`. */
637
+ export interface Issqn {
638
+ readonly vBC: DecimalInput;
639
+ readonly vAliq: DecimalInput;
640
+ readonly vISSQN?: DecimalInput;
641
+ readonly cMunFG: string;
642
+ readonly cListServ: string;
643
+ readonly vDeducao?: DecimalInput;
644
+ readonly vOutro?: DecimalInput;
645
+ readonly vDescIncond?: DecimalInput;
646
+ readonly vDescCond?: DecimalInput;
647
+ readonly vISSRet?: DecimalInput;
648
+ readonly indISS: '1' | '2' | '3' | '4' | '5' | '6' | '7';
649
+ readonly cServico?: string;
650
+ readonly cMun?: string;
651
+ readonly cPais?: string;
652
+ readonly nProcesso?: string;
653
+ readonly indIncentivo: '1' | '2';
654
+ }
655
+
656
+ /** CSTs de PIS/COFINS do grupo "outras operações" (Q05, S05). */
657
+ export type CstPisCofinsOutras =
658
+ | '49'
659
+ | '50'
660
+ | '51'
661
+ | '52'
662
+ | '53'
663
+ | '54'
664
+ | '55'
665
+ | '56'
666
+ | '60'
667
+ | '61'
668
+ | '62'
669
+ | '63'
670
+ | '64'
671
+ | '65'
672
+ | '66'
673
+ | '67'
674
+ | '70'
675
+ | '71'
676
+ | '72'
677
+ | '73'
678
+ | '74'
679
+ | '75'
680
+ | '98'
681
+ | '99';
682
+
683
+ /**
684
+ * PIS ou COFINS (grupos Q e S), com a mesma forma. `vBC` é obrigatório: a base legal varia (exclusão do ICMS, receita
685
+ * bruta, regime) e não há padrão seguro. O valor (`valor`) padrão é `vBC × aliquota / 100` ou `qBCProd × vAliqProd`.
686
+ */
687
+ export type PisCofins =
688
+ | {
689
+ readonly CST: '01' | '02';
690
+ readonly vBC: DecimalInput;
691
+ readonly aliquota: DecimalInput;
692
+ readonly valor?: DecimalInput;
693
+ }
694
+ | {
695
+ readonly CST: '03';
696
+ readonly qBCProd: DecimalInput;
697
+ readonly vAliqProd: DecimalInput;
698
+ readonly valor?: DecimalInput;
699
+ }
700
+ | { readonly CST: '04' | '05' | '06' | '07' | '08' | '09' }
701
+ | {
702
+ readonly CST: CstPisCofinsOutras;
703
+ readonly vBC: DecimalInput;
704
+ readonly aliquota: DecimalInput;
705
+ readonly valor?: DecimalInput;
706
+ readonly qBCProd?: never;
707
+ }
708
+ | {
709
+ readonly CST: CstPisCofinsOutras;
710
+ readonly qBCProd: DecimalInput;
711
+ readonly vAliqProd: DecimalInput;
712
+ readonly valor?: DecimalInput;
713
+ readonly vBC?: never;
714
+ };
715
+
716
+ /** PIS ou COFINS ST (grupos R e T). `indSoma` 1: o valor compõe o total da nota. */
717
+ export type PisCofinsSt = {
718
+ readonly valor?: DecimalInput;
719
+ readonly indSoma?: '0' | '1';
720
+ } & (
721
+ | { readonly vBC: DecimalInput; readonly aliquota: DecimalInput; readonly qBCProd?: never }
722
+ | { readonly qBCProd: DecimalInput; readonly vAliqProd: DecimalInput; readonly vBC?: never }
723
+ );
724
+
725
+ // ---------------------------------------------------------------------------------------------------------------
726
+ // IBS / CBS
727
+ // ---------------------------------------------------------------------------------------------------------------
728
+
729
+ /**
730
+ * Classificação do item para IBS/CBS (NT 2025.002): o que o `CalculadoraIbsCbs` recebe. `CST` e `cClassTrib` vêm do
731
+ * cadastro do item (tabela de classificação tributária); o cálculo, as alíquotas e as reduções são da calculadora.
732
+ */
733
+ export interface ClassificacaoIbsCbs {
734
+ /** CST do IBS/CBS, 3 dígitos. */
735
+ readonly CST: string;
736
+ /** Código de classificação tributária, 6 dígitos. */
737
+ readonly cClassTrib: string;
738
+ /** Base de cálculo; padrão: o valor que a calculadora devolver. */
739
+ readonly vBC?: DecimalInput;
740
+ readonly indDoacao?: '1';
741
+ /** Código do crédito presumido (`cCredPres`), quando o `cClassTrib` indica. */
742
+ readonly cCredPres?: string;
743
+ /**
744
+ * Tributação regular (`gTribRegular`, UB68): CST e cClassTrib que valeriam sem o tratamento do `cClassTrib`
745
+ * principal. Obrigatória nos que a exigem (suspensão, exportação: 550001 e afins); a calculadora devolve o grupo com
746
+ * as alíquotas e os valores da tributação regular.
747
+ */
748
+ readonly gTribRegular?: { readonly CSTReg: string; readonly cClassTribReg: string };
749
+ }
750
+
751
+ /**
752
+ * IBS/CBS do item: pela classificação (a calculadora injetada devolve o grupo) ou já calculado (grupo do schema
753
+ * pronto, por exemplo vindo de outro sistema).
754
+ */
755
+ export type IbsCbsItem =
756
+ | { readonly classificacao: ClassificacaoIbsCbs; readonly grupo?: never }
757
+ | { readonly grupo: TTribNFe; readonly classificacao?: never };
758
+
759
+ /** Tributos do item (grupo M). ICMS ou ISSQN, exclusivos; o resto conforme a operação. */
760
+ export interface ImpostosItem {
761
+ /** Lei 12.741/2012: valor aproximado dos tributos. */
762
+ readonly vTotTrib?: DecimalInput;
763
+ readonly icms?: Icms;
764
+ readonly ipi?: Ipi;
765
+ readonly ii?: ImpostoImportacao;
766
+ readonly issqn?: Issqn;
767
+ readonly pis?: PisCofins;
768
+ readonly pisSt?: PisCofinsSt;
769
+ readonly cofins?: PisCofins;
770
+ readonly cofinsSt?: PisCofinsSt;
771
+ readonly icmsUfDest?: IcmsUfDest;
772
+ /** Imposto Seletivo, repassado como veio (sem cálculo nesta versão). */
773
+ readonly is?: TIS;
774
+ readonly ibsCbs?: IbsCbsItem;
775
+ }
776
+
777
+ /** Item da nota (grupo H). */
778
+ export interface Item {
779
+ readonly produto: Produto;
780
+ readonly impostos: ImpostosItem;
781
+ /** Devolução: percentual devolvido e IPI devolvido (grupo UA). */
782
+ readonly impostoDevol?: { readonly pDevol: DecimalInput; readonly vIPIDevol: DecimalInput };
783
+ readonly infAdProd?: string;
784
+ readonly obsItem?: TNFe_infNFe_det_obsItem;
785
+ /** Referência a item de outro DF-e (grupo VC, NT 2025.002). */
786
+ readonly DFeReferenciado?: { readonly chaveAcesso: string; readonly nItem?: string | number };
787
+ }
788
+
789
+ // ---------------------------------------------------------------------------------------------------------------
790
+ // Transporte, cobrança, pagamento, informações adicionais
791
+ // ---------------------------------------------------------------------------------------------------------------
792
+
793
+ /** Modalidade do frete (X02): 0 CIF; 1 FOB; 2 terceiros; 3 próprio do remetente; 4 próprio do destinatário; 9 sem frete. */
794
+ export type ModFrete = '0' | '1' | '2' | '3' | '4' | '9';
795
+
796
+ export interface Transportador {
797
+ readonly CNPJ?: string;
798
+ readonly CPF?: string;
799
+ readonly xNome?: string;
800
+ /** IE ou `ISENTO` (RV X07-20). */
801
+ readonly IE?: string;
802
+ readonly xEnder?: string;
803
+ readonly xMun?: string;
804
+ readonly UF?: Uf | 'EX';
805
+ }
806
+
807
+ export interface Volume {
808
+ readonly qVol?: string | number;
809
+ readonly esp?: string;
810
+ readonly marca?: string;
811
+ readonly nVol?: string;
812
+ /** Peso líquido em kg, 3 casas. */
813
+ readonly pesoL?: DecimalInput;
814
+ readonly pesoB?: DecimalInput;
815
+ readonly lacres?: readonly string[];
816
+ }
817
+
818
+ /** Transporte (grupo X). */
819
+ export interface Transporte {
820
+ readonly modFrete: ModFrete;
821
+ readonly transportador?: Transportador;
822
+ /** Retenção do ICMS do transporte; `vICMSRet` padrão `vBCRet × pICMSRet / 100`. */
823
+ readonly retTransp?: {
824
+ readonly vServ: DecimalInput;
825
+ readonly vBCRet: DecimalInput;
826
+ readonly pICMSRet: DecimalInput;
827
+ readonly vICMSRet?: DecimalInput;
828
+ readonly CFOP: string;
829
+ readonly cMunFG: string;
830
+ };
831
+ readonly veicTransp?: TVeiculo;
832
+ readonly reboque?: readonly TVeiculo[];
833
+ readonly vagao?: string;
834
+ readonly balsa?: string;
835
+ readonly volumes?: readonly Volume[];
836
+ }
837
+
838
+ /** Cobrança (grupo Y). `fat.vLiq` padrão `vOrig - vDesc`. */
839
+ export interface Cobranca {
840
+ readonly fatura?: {
841
+ readonly nFat?: string;
842
+ readonly vOrig?: DecimalInput;
843
+ readonly vDesc?: DecimalInput;
844
+ readonly vLiq?: DecimalInput;
845
+ };
846
+ readonly duplicatas?: readonly {
847
+ /** Padrão: sequência com 3 dígitos (`001`, `002`), como pede a NT 2016.002. */
848
+ readonly nDup?: string;
849
+ /** `AAAA-MM-DD`. */
850
+ readonly dVenc?: string;
851
+ readonly vDup: DecimalInput;
852
+ }[];
853
+ }
854
+
855
+ /** Meio de pagamento (YA02, NT 2020.006 e seguintes). */
856
+ export const TipoPagamento: {
857
+ readonly DINHEIRO: '01';
858
+ readonly CHEQUE: '02';
859
+ readonly CARTAO_CREDITO: '03';
860
+ readonly CARTAO_DEBITO: '04';
861
+ readonly CREDITO_LOJA: '05';
862
+ readonly VALE_ALIMENTACAO: '10';
863
+ readonly VALE_REFEICAO: '11';
864
+ readonly VALE_PRESENTE: '12';
865
+ readonly VALE_COMBUSTIVEL: '13';
866
+ readonly BOLETO: '15';
867
+ readonly DEPOSITO: '16';
868
+ readonly PIX_DINAMICO: '17';
869
+ readonly TRANSFERENCIA_CARTEIRA_DIGITAL: '18';
870
+ readonly FIDELIDADE_CASHBACK: '19';
871
+ readonly PIX_ESTATICO: '20';
872
+ readonly CREDITO_EM_LOJA: '21';
873
+ readonly FALHA_HARDWARE: '22';
874
+ readonly SEM_PAGAMENTO: '90';
875
+ /** Pagamento posterior, com `vPag` zero (NT 2025.001 v1.03, YA02 e YA03-30). */
876
+ readonly PAGAMENTO_POSTERIOR: '91';
877
+ readonly OUTROS: '99';
878
+ } = {
879
+ DINHEIRO: '01',
880
+ CHEQUE: '02',
881
+ CARTAO_CREDITO: '03',
882
+ CARTAO_DEBITO: '04',
883
+ CREDITO_LOJA: '05',
884
+ VALE_ALIMENTACAO: '10',
885
+ VALE_REFEICAO: '11',
886
+ VALE_PRESENTE: '12',
887
+ VALE_COMBUSTIVEL: '13',
888
+ BOLETO: '15',
889
+ DEPOSITO: '16',
890
+ PIX_DINAMICO: '17',
891
+ TRANSFERENCIA_CARTEIRA_DIGITAL: '18',
892
+ FIDELIDADE_CASHBACK: '19',
893
+ PIX_ESTATICO: '20',
894
+ CREDITO_EM_LOJA: '21',
895
+ FALHA_HARDWARE: '22',
896
+ SEM_PAGAMENTO: '90',
897
+ PAGAMENTO_POSTERIOR: '91',
898
+ OUTROS: '99',
899
+ };
900
+
901
+ export type TipoPagamento = (typeof TipoPagamento)[keyof typeof TipoPagamento];
902
+
903
+ export interface DetalhePagamento {
904
+ readonly indPag?: '0' | '1';
905
+ readonly tPag: TipoPagamento;
906
+ /** Descrição do meio de pagamento; recomendada com `tPag` 99. */
907
+ readonly xPag?: string;
908
+ readonly vPag: DecimalInput;
909
+ /** `AAAA-MM-DD`. */
910
+ readonly dPag?: string;
911
+ readonly CNPJPag?: string;
912
+ readonly UFPag?: Uf;
913
+ readonly card?: TNFe_infNFe_pag_detPag_card;
914
+ }
915
+
916
+ /** Pagamento (grupo YA). Ausente, o builder informa `tPag` 90 (sem pagamento) com valor zero. */
917
+ export interface Pagamento {
918
+ readonly detPag: readonly DetalhePagamento[];
919
+ readonly vTroco?: DecimalInput;
920
+ }
921
+
922
+ /** Informações adicionais (grupo Z). */
923
+ export interface InformacoesAdicionais {
924
+ readonly infAdFisco?: string;
925
+ readonly infCpl?: string;
926
+ readonly obsCont?: readonly TNFe_infNFe_infAdic_obsCont[];
927
+ readonly obsFisco?: readonly TNFe_infNFe_infAdic_obsFisco[];
928
+ readonly procRef?: readonly TNFe_infNFe_infAdic_procRef[];
929
+ }
930
+
931
+ /**
932
+ * Responsável técnico (grupo ZD, NT 2018.005). O `hashCSRT` é calculado pelo builder a partir do CSRT (nunca vai para o
933
+ * XML): Base64(SHA-1(CSRT + chave de acesso)).
934
+ */
935
+ export interface ResponsavelTecnico {
936
+ readonly CNPJ: string;
937
+ readonly xContato: string;
938
+ readonly email: string;
939
+ readonly fone: string;
940
+ /** CSRT fornecido pela SEFAZ da UF e seu identificador (`idCSRT`, 2 dígitos). */
941
+ readonly csrt?: { readonly idCSRT: string; readonly CSRT: string };
942
+ }
943
+
944
+ // ---------------------------------------------------------------------------------------------------------------
945
+ // Identificação e contingência
946
+ // ---------------------------------------------------------------------------------------------------------------
947
+
948
+ /** Finalidade (B25): 1 normal; 2 complementar; 3 ajuste; 4 devolução; 5 nota de crédito; 6 nota de débito. */
949
+ export type FinNFe = '1' | '2' | '3' | '4' | '5' | '6';
950
+
951
+ /**
952
+ * Forma de emissão (B22) fora do normal. A contingência SVC usa o autorizador SVC-AN ou SVC-RS da UF (dado do
953
+ * `@sinete/transport`); FS-DA e EPEC (4 e 5) ficam para outra versão, mas o modelo já os comporta. A NFC-e não tem SVC:
954
+ * a contingência dela é a off-line (9), emitida sem a SEFAZ e transmitida depois.
955
+ */
956
+ export interface Contingencia {
957
+ /**
958
+ * 6 SVC-AN, 7 SVC-RS; 2 FS-IA; 4 EPEC; 5 FS-DA; 9 off-line, só NFC-e. Para SVC, `tpEmisSvc` do `ClienteNfe` escolhe pelo
959
+ * dado da UF.
960
+ */
961
+ readonly tpEmis: '2' | '4' | '5' | '6' | '7' | '9';
962
+ /** Entrada em contingência (`dhCont`). Instante com fuso. */
963
+ readonly dhCont: Instante;
964
+ /** Justificativa, 15 a 256 caracteres. */
965
+ readonly xJust: string;
966
+ }
967
+
968
+ /** Entrada completa de uma NF-e. */
969
+ export interface DadosNfe {
970
+ /**
971
+ * 55 (NF-e, padrão) ou 65 (NFC-e). Na NFC-e mudam os padrões (`indPres` 1, `indFinal` 1, `tpImp` 4), o destinatário
972
+ * fica opcional, o pagamento passa a ser obrigatório e a montagem acrescenta o `infNFeSupl` (QR Code).
973
+ */
974
+ readonly modelo?: '55' | '65';
975
+ /** 0 a 999; produtor rural pessoa física: 920 a 969. */
976
+ readonly serie: number | string;
977
+ readonly nNF: number | string;
978
+ readonly natOp: string;
979
+ /** 0 entrada; 1 saída. */
980
+ readonly tpNF: '0' | '1';
981
+ /** Padrão `'1'`. */
982
+ readonly finNFe?: FinNFe;
983
+ readonly tpNFDebito?: '01' | '02' | '03' | '04' | '05' | '06' | '07' | '08';
984
+ readonly tpNFCredito?: '01' | '02' | '03' | '04' | '05' | '06';
985
+ /** Padrão: 3 com destinatário estrangeiro, 2 com UF de destino diferente da do emitente, 1 nos demais casos. */
986
+ readonly idDest?: '1' | '2' | '3';
987
+ /** Padrão: 1 na NFC-e e quando o destinatário é não contribuinte (`indIEDest` 9), 0 nos demais. */
988
+ readonly indFinal?: '0' | '1';
989
+ /** Padrão `'9'` (não presencial, outros) na NF-e e `'1'` (presencial) na NFC-e. */
990
+ readonly indPres?: '0' | '1' | '2' | '3' | '4' | '5' | '9';
991
+ readonly indIntermed?: '0' | '1';
992
+ /** Município do fato gerador; padrão o do emitente. */
993
+ readonly cMunFG?: string;
994
+ readonly cMunFGIBS?: string;
995
+ /** Padrão `'1'` (DANFE retrato) na NF-e e `'4'` (DANFC-e impresso) na NFC-e. */
996
+ readonly tpImp?: '0' | '1' | '2' | '3' | '4' | '5' | '6';
997
+ /** Saída ou entrada da mercadoria. */
998
+ readonly dhSaiEnt?: Instante;
999
+ /** `AAAA-MM-DD`. */
1000
+ readonly dPrevEntrega?: string;
1001
+ /** Código numérico da chave; padrão aleatório (8 dígitos, fora das sequências proibidas). */
1002
+ readonly cNF?: string;
1003
+ readonly contingencia?: Contingencia;
1004
+ readonly referenciadas?: readonly Referenciada[];
1005
+ readonly gCompraGov?: {
1006
+ readonly tpEnteGov: '1' | '2' | '3' | '4' | '5' | '6';
1007
+ readonly pRedutor: DecimalInput;
1008
+ readonly tpOperGov: '1' | '2' | '3' | '4';
1009
+ readonly refDFeAnt?: readonly string[];
1010
+ };
1011
+ readonly gPagAntecipado?: readonly string[];
1012
+ readonly emitente: Emitente;
1013
+ readonly destinatario?: Destinatario;
1014
+ readonly retirada?: Local;
1015
+ readonly entrega?: Local;
1016
+ /** Até 10 CNPJ/CPF autorizados a baixar o XML. */
1017
+ readonly autXML?: readonly DocumentoPessoa[];
1018
+ readonly itens: readonly Item[];
1019
+ readonly transporte?: Transporte;
1020
+ readonly cobranca?: Cobranca;
1021
+ readonly pagamento?: Pagamento;
1022
+ readonly infIntermed?: TNFe_infNFe_infIntermed;
1023
+ readonly informacoesAdicionais?: InformacoesAdicionais;
1024
+ readonly exporta?: TNFe_infNFe_exporta;
1025
+ readonly compra?: TNFe_infNFe_compra;
1026
+ readonly cana?: TNFe_infNFe_cana;
1027
+ readonly respTec?: ResponsavelTecnico;
1028
+ /** Produtor rural: receituário de agrotóxico ou guia de trânsito (GTA e afins), grupo ZF (NT 2024.003). */
1029
+ readonly agropecuario?: TNFe_infNFe_agropecuario;
1030
+ }
1031
+
1032
+ /** Os tipos do schema reexportados para quem passa grupos repassados. */
1033
+ export type { TCIBS_NFe, TMonofasia, TTribNFe };