ghinfe 0.6.0 → 0.6.2

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 (110) hide show
  1. package/.env.example +24 -15
  2. package/LICENSE +21 -21
  3. package/README.md +491 -413
  4. package/docs/developer-guide.html +421 -421
  5. package/docs/openapi.yaml +428 -428
  6. package/examples/dce-homologacao.js +141 -0
  7. package/examples/emitir-nfce.js +51 -51
  8. package/examples/emitir-nfe.js +83 -83
  9. package/examples/emitir-nfse.js +46 -46
  10. package/examples/endpoints-sefaz.js +14 -14
  11. package/examples/eventos-nfe.js +49 -49
  12. package/examples/gerar-chave.js +25 -25
  13. package/examples/gerar-dace.js +59 -0
  14. package/examples/gerar-danfe.js +75 -75
  15. package/examples/gerar-dce.js +58 -0
  16. package/examples/layouts-nfse.js +51 -51
  17. package/examples/mock-sefaz.js +52 -52
  18. package/examples/nfse-eventos.js +57 -57
  19. package/examples/reforma-ibscbs.js +27 -27
  20. package/examples/reforma-nfe-xml.js +52 -52
  21. package/examples/status-sefaz.js +12 -12
  22. package/examples/validar-xsd.js +48 -48
  23. package/package.json +59 -68
  24. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/consSitDCeTiposBasico_v1.00.xsd +123 -0
  25. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/consSitDCe_v1.00.xsd +10 -0
  26. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/consStatServDCeTiposBasico_v1.00.xsd +110 -0
  27. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/consStatServDCe_v1.00.xsd +10 -0
  28. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/dceTiposBasico_v1.00.xsd +1388 -0
  29. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/retConsSitDCe_v1.00.xsd +10 -0
  30. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/retConsStatServDCe_v1.00.xsd +10 -0
  31. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/tiposGeralDCe_v1.00.xsd +712 -0
  32. package/schemas/dce/PL_DCe_100a_NT2024.001/consulta/xmldsig-core-schema_v1.01.xsd +98 -0
  33. package/schemas/dce/PL_DCe_100a_NT2024.001/dceTiposBasico_v1.00.xsd +1410 -0
  34. package/schemas/dce/PL_DCe_100a_NT2024.001/dce_v1.00.xsd +10 -0
  35. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/evCancDCe_v1.00.xsd +36 -0
  36. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/eventoDCeTiposBasico_v1.00.xsd +283 -0
  37. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/eventoDCe_v1.00.xsd +9 -0
  38. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/procEventoDCe_v1.00.xsd +10 -0
  39. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/retEventoDCe_v1.00.xsd +9 -0
  40. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/tiposGeralDCe_v1.00.xsd +712 -0
  41. package/schemas/dce/PL_DCe_100a_NT2024.001/evento/xmldsig-core-schema_v1.01.xsd +98 -0
  42. package/schemas/dce/PL_DCe_100a_NT2024.001/procDCe_v1.00.xsd +37 -0
  43. package/schemas/dce/PL_DCe_100a_NT2024.001/retDCe_v1.00.xsd +9 -0
  44. package/schemas/dce/PL_DCe_100a_NT2024.001/tiposGeralDCe_v1.00.xsd +712 -0
  45. package/schemas/dce/PL_DCe_100a_NT2024.001/xmldsig-core-schema_v1.01.xsd +98 -0
  46. package/schemas/nfe/PL_009_V4/enviNFe_v3.10.xsd +8 -8
  47. package/schemas/nfe/PL_009_V4/xmldsig-core-schema_v1.01.xsd +97 -97
  48. package/scripts/download-schemas.js +39 -39
  49. package/scripts/test-xsd.js +34 -34
  50. package/src/api/server.js +316 -316
  51. package/src/constants/sefaz.js +69 -69
  52. package/src/danfe/DanfeService.js +205 -205
  53. package/src/danfe/xml-extract.js +69 -69
  54. package/src/dce/builders/DCeEventoXmlBuilder.js +86 -0
  55. package/src/dce/builders/DCeXmlBuilder.js +345 -0
  56. package/src/dce/constants/dce.js +87 -0
  57. package/src/dce/dace/DaceService.js +356 -0
  58. package/src/dce/dace/dace-extract.js +114 -0
  59. package/src/dce/services/DCeService.js +263 -0
  60. package/src/dce/services/DCeSoapService.js +235 -0
  61. package/src/dce/services/DCeXmlService.js +67 -0
  62. package/src/dce/types/DCeDocument.js +106 -0
  63. package/src/dce/utils/qrcode.utils.js +59 -0
  64. package/src/errors/GhinfeError.js +13 -13
  65. package/src/errors/SefazError.js +25 -25
  66. package/src/errors/XsdValidationError.js +15 -15
  67. package/src/index.js +84 -60
  68. package/src/nfce/builders/NFCeXmlBuilder.js +178 -178
  69. package/src/nfce/constants/qrcode.js +26 -26
  70. package/src/nfce/services/NFCeService.js +188 -188
  71. package/src/nfce/services/NFCeXmlService.js +38 -38
  72. package/src/nfce/types/NFCeDocument.js +42 -42
  73. package/src/nfce/utils/qrcode.utils.js +92 -92
  74. package/src/nfe/builders/NFeEventoXmlBuilder.js +110 -110
  75. package/src/nfe/builders/NFeXmlBuilder.js +215 -215
  76. package/src/nfe/mocks/sefaz-responses.js +195 -195
  77. package/src/nfe/services/NFeEventoService.js +95 -95
  78. package/src/nfe/services/NFeService.js +196 -196
  79. package/src/nfe/services/NFeSignService.js +127 -111
  80. package/src/nfe/services/NFeSoapService.js +437 -437
  81. package/src/nfe/services/NFeXmlService.js +41 -41
  82. package/src/nfe/services/NFeXsdService.js +56 -56
  83. package/src/nfe/types/NFeDocument.js +92 -92
  84. package/src/nfe/types/NFeEvento.js +44 -44
  85. package/src/nfse/NFSeMunicipioResolver.js +42 -42
  86. package/src/nfse/builders/NFSeEventoXmlBuilder.js +92 -92
  87. package/src/nfse/builders/NFSeXmlBuilder.js +16 -16
  88. package/src/nfse/constants/municipios.js +82 -82
  89. package/src/nfse/layouts/adapters.js +202 -202
  90. package/src/nfse/mocks/nfse-responses.js +142 -142
  91. package/src/nfse/services/NFSeService.js +191 -191
  92. package/src/nfse/services/NFSeSoapService.js +232 -232
  93. package/src/nfse/services/NFSeXmlService.js +12 -12
  94. package/src/nfse/types/NFSeDocument.js +54 -54
  95. package/src/queue/NFCeQueue.js +63 -63
  96. package/src/queue/NFSeQueue.js +59 -59
  97. package/src/queue/NFeQueue.js +76 -76
  98. package/src/reforma/ibscbs.js +175 -175
  99. package/src/sefaz/SefazEndpointResolver.js +95 -95
  100. package/src/sefaz/ca/icp-brasil-raiz-v10.pem +38 -0
  101. package/src/sefaz/endpoints.registry.js +205 -205
  102. package/src/sefaz/httpsAgent.js +33 -0
  103. package/src/shared/fiscal.helpers.js +53 -53
  104. package/src/utils/certificate.utils.js +69 -47
  105. package/src/utils/chave.utils.js +205 -117
  106. package/src/utils/code128.utils.js +67 -0
  107. package/src/utils/date.utils.js +26 -26
  108. package/src/utils/xml.utils.js +44 -44
  109. package/src/validation/XsdValidator.js +133 -114
  110. package/src/validation/schemas.js +18 -14
@@ -1,188 +1,188 @@
1
- import { NFCeXmlService } from './NFCeXmlService.js';
2
- import { NFeSignService } from '../../nfe/services/NFeSignService.js';
3
- import { NFeSoapService } from '../../nfe/services/NFeSoapService.js';
4
- import { GhinfeError } from '../../errors/GhinfeError.js';
5
- import { gerarChaveAcesso, validarChaveAcesso } from '../../utils/chave.utils.js';
6
- import { SefazEndpointResolver } from '../../sefaz/SefazEndpointResolver.js';
7
- import {
8
- extrairDigestValor,
9
- gerarUrlQrCodeV3,
10
- obterUrlChave,
11
- inserirInfNFeSupl,
12
- } from '../utils/qrcode.utils.js';
13
-
14
- /**
15
- * Orquestrador da NFC-e (modelo 65).
16
- */
17
- export class NFCeService {
18
- /**
19
- * @param {{
20
- * mock?: boolean,
21
- * uf?: string,
22
- * ambiente?: number,
23
- * sefazEndpoint?: string,
24
- * mockScenario?: string,
25
- * validarXsd?: boolean,
26
- * }} [options]
27
- */
28
- constructor(options = {}) {
29
- this.options = options;
30
- this.xmlService = new NFCeXmlService({ validarXsd: options.validarXsd });
31
- this.signService = new NFeSignService();
32
-
33
- let endpoint = options.sefazEndpoint;
34
- if (!endpoint && options.uf && !options.mock) {
35
- endpoint = SefazEndpointResolver.paraNFCe(options.uf, options.ambiente ?? 2).endpoint;
36
- }
37
-
38
- this.soapService = new NFeSoapService({
39
- mock: options.mock ?? true,
40
- endpoint,
41
- mockScenario: options.mockScenario,
42
- });
43
- }
44
-
45
- /** @param {string} uf @param {number} [ambiente] */
46
- configurarUf(uf, ambiente = 2) {
47
- const urls = SefazEndpointResolver.paraNFCe(uf, ambiente);
48
- this.soapService.endpoint = urls.endpoint;
49
- this.soapService.mock = false;
50
- return urls;
51
- }
52
-
53
- /** @param {import('../types/NFCeDocument.js').NFCeDocumento} documento */
54
- resolverDocumento(documento) {
55
- if (documento.chaveAcesso) {
56
- if (!validarChaveAcesso(documento.chaveAcesso)) {
57
- throw new GhinfeError('chaveAcesso com dígito verificador inválido', 'CHAVE_DV_INVALIDO');
58
- }
59
- return documento;
60
- }
61
-
62
- const chaveAcesso = gerarChaveAcesso({
63
- uf: documento.ide.uf,
64
- cnpj: documento.emitente.cnpj,
65
- modelo: '65',
66
- serie: documento.ide.serie ?? 1,
67
- numero: documento.ide.numero,
68
- });
69
-
70
- return { ...documento, chaveAcesso };
71
- }
72
-
73
- /** @param {import('../types/NFCeDocument.js').NFCeDocumento} documento */
74
- #calcularTotais(documento) {
75
- const valorProdutos = documento.itens.reduce((s, i) => s + i.valorTotal, 0);
76
- const valorIcms = documento.itens.reduce((s, i) => s + (i.valorIcms ?? 0), 0);
77
- const valorDesc = documento.itens.reduce((s, i) => s + (i.valorDesconto ?? 0), 0);
78
- return { valorNF: valorProdutos - valorDesc, valorIcms };
79
- }
80
-
81
- /**
82
- * Gera XML base (infNFe) sem QR Code — QR é adicionado após assinatura.
83
- * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
84
- * @param {{ validarXsd?: boolean }} [options]
85
- */
86
- gerarXml(documento, options = {}) {
87
- const doc = this.resolverDocumento(documento);
88
- return this.xmlService.gerarXml(doc, { ...options, validarXsd: false });
89
- }
90
-
91
- /**
92
- * Adiciona infNFeSupl com QR Code v3 ao XML já assinado.
93
- * @param {string} xmlAssinado
94
- * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
95
- */
96
- adicionarQrCode(xmlAssinado, documento) {
97
- const doc = this.resolverDocumento(documento);
98
- const { valorNF, valorIcms } = this.#calcularTotais(doc);
99
- const digVal = extrairDigestValor(xmlAssinado);
100
- const cDest = (doc.destinatario?.cnpj ?? doc.destinatario?.cpf ?? '').replace(/\D/g, '');
101
-
102
- const qrCode = gerarUrlQrCodeV3({
103
- chaveAcesso: doc.chaveAcesso,
104
- uf: doc.ide.uf,
105
- ambiente: doc.ambiente ?? 2,
106
- cDest,
107
- valorNF,
108
- valorICMS: valorIcms,
109
- digVal,
110
- idCSC: doc.csc.idCSC,
111
- csc: doc.csc.codigo,
112
- });
113
-
114
- const urlChave = obterUrlChave(doc.ide.uf, doc.ambiente ?? 2);
115
- const xmlCompleto = inserirInfNFeSupl(xmlAssinado, qrCode, urlChave);
116
-
117
- return { xmlCompleto, qrCode, urlChave };
118
- }
119
-
120
- /**
121
- * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
122
- * @param {{ pfx: Buffer|string, senha: string }} certificado
123
- * @param {{ validarXsd?: boolean }} [options]
124
- */
125
- gerarXmlAssinado(documento, certificado, options = {}) {
126
- const doc = this.resolverDocumento(documento);
127
- const xml = this.xmlService.gerarXml(doc, { validarXsd: false });
128
- const xmlAssinado = this.signService.assinar(xml, certificado.pfx, certificado.senha);
129
- const { xmlCompleto, qrCode } = this.adicionarQrCode(xmlAssinado, doc);
130
-
131
- if (options.validarXsd) {
132
- this.xmlService.validarXml(xmlCompleto);
133
- }
134
-
135
- return { xml: xmlCompleto, qrCode };
136
- }
137
-
138
- /**
139
- * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
140
- * @param {{ pfx: Buffer|string, senha: string }} certificado
141
- */
142
- async emitir(documento, certificado) {
143
- const doc = this.resolverDocumento(documento);
144
-
145
- if (!this.soapService.mock && this.options.uf === undefined && !this.options.sefazEndpoint) {
146
- this.configurarUf(doc.ide.uf, doc.ambiente ?? 2);
147
- }
148
-
149
- const { xml, qrCode } = this.gerarXmlAssinado(doc, certificado);
150
- const retorno = await this.soapService.autorizar(xml, doc.chaveAcesso);
151
-
152
- return {
153
- chaveAcesso: doc.chaveAcesso,
154
- qrCode,
155
- xmlGerado: this.gerarXml(doc),
156
- xmlAssinado: xml,
157
- retorno,
158
- };
159
- }
160
-
161
- /** @param {string} xml */
162
- validarXsd(xml) {
163
- return this.xmlService.validarXml(xml);
164
- }
165
-
166
- async enviar(xmlAssinado, chaveAcesso) {
167
- return this.soapService.autorizar(xmlAssinado, chaveAcesso);
168
- }
169
-
170
- /** @param {Awaited<ReturnType<NFCeService['emitir']>>} resultado */
171
- toPersistencePayload(resultado) {
172
- if (!resultado.retorno.autorizado) {
173
- throw new GhinfeError('NFC-e não autorizada', 'NFCE_NOT_AUTHORIZED', resultado.retorno);
174
- }
175
-
176
- return {
177
- chave_acesso: resultado.chaveAcesso,
178
- modelo: '65',
179
- xml_nfce: resultado.xmlAssinado,
180
- xml_protocolo: resultado.retorno.xmlProtocolo,
181
- protocolo: resultado.retorno.protocolo,
182
- qrcode_url: resultado.qrCode,
183
- status: resultado.retorno.cStat,
184
- motivo: resultado.retorno.xMotivo,
185
- autorizado_em: new Date(),
186
- };
187
- }
188
- }
1
+ import { NFCeXmlService } from './NFCeXmlService.js';
2
+ import { NFeSignService } from '../../nfe/services/NFeSignService.js';
3
+ import { NFeSoapService } from '../../nfe/services/NFeSoapService.js';
4
+ import { GhinfeError } from '../../errors/GhinfeError.js';
5
+ import { gerarChaveAcesso, validarChaveAcesso } from '../../utils/chave.utils.js';
6
+ import { SefazEndpointResolver } from '../../sefaz/SefazEndpointResolver.js';
7
+ import {
8
+ extrairDigestValor,
9
+ gerarUrlQrCodeV3,
10
+ obterUrlChave,
11
+ inserirInfNFeSupl,
12
+ } from '../utils/qrcode.utils.js';
13
+
14
+ /**
15
+ * Orquestrador da NFC-e (modelo 65).
16
+ */
17
+ export class NFCeService {
18
+ /**
19
+ * @param {{
20
+ * mock?: boolean,
21
+ * uf?: string,
22
+ * ambiente?: number,
23
+ * sefazEndpoint?: string,
24
+ * mockScenario?: string,
25
+ * validarXsd?: boolean,
26
+ * }} [options]
27
+ */
28
+ constructor(options = {}) {
29
+ this.options = options;
30
+ this.xmlService = new NFCeXmlService({ validarXsd: options.validarXsd });
31
+ this.signService = new NFeSignService();
32
+
33
+ let endpoint = options.sefazEndpoint;
34
+ if (!endpoint && options.uf && !options.mock) {
35
+ endpoint = SefazEndpointResolver.paraNFCe(options.uf, options.ambiente ?? 2).endpoint;
36
+ }
37
+
38
+ this.soapService = new NFeSoapService({
39
+ mock: options.mock ?? true,
40
+ endpoint,
41
+ mockScenario: options.mockScenario,
42
+ });
43
+ }
44
+
45
+ /** @param {string} uf @param {number} [ambiente] */
46
+ configurarUf(uf, ambiente = 2) {
47
+ const urls = SefazEndpointResolver.paraNFCe(uf, ambiente);
48
+ this.soapService.endpoint = urls.endpoint;
49
+ this.soapService.mock = false;
50
+ return urls;
51
+ }
52
+
53
+ /** @param {import('../types/NFCeDocument.js').NFCeDocumento} documento */
54
+ resolverDocumento(documento) {
55
+ if (documento.chaveAcesso) {
56
+ if (!validarChaveAcesso(documento.chaveAcesso)) {
57
+ throw new GhinfeError('chaveAcesso com dígito verificador inválido', 'CHAVE_DV_INVALIDO');
58
+ }
59
+ return documento;
60
+ }
61
+
62
+ const chaveAcesso = gerarChaveAcesso({
63
+ uf: documento.ide.uf,
64
+ cnpj: documento.emitente.cnpj,
65
+ modelo: '65',
66
+ serie: documento.ide.serie ?? 1,
67
+ numero: documento.ide.numero,
68
+ });
69
+
70
+ return { ...documento, chaveAcesso };
71
+ }
72
+
73
+ /** @param {import('../types/NFCeDocument.js').NFCeDocumento} documento */
74
+ #calcularTotais(documento) {
75
+ const valorProdutos = documento.itens.reduce((s, i) => s + i.valorTotal, 0);
76
+ const valorIcms = documento.itens.reduce((s, i) => s + (i.valorIcms ?? 0), 0);
77
+ const valorDesc = documento.itens.reduce((s, i) => s + (i.valorDesconto ?? 0), 0);
78
+ return { valorNF: valorProdutos - valorDesc, valorIcms };
79
+ }
80
+
81
+ /**
82
+ * Gera XML base (infNFe) sem QR Code — QR é adicionado após assinatura.
83
+ * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
84
+ * @param {{ validarXsd?: boolean }} [options]
85
+ */
86
+ gerarXml(documento, options = {}) {
87
+ const doc = this.resolverDocumento(documento);
88
+ return this.xmlService.gerarXml(doc, { ...options, validarXsd: false });
89
+ }
90
+
91
+ /**
92
+ * Adiciona infNFeSupl com QR Code v3 ao XML já assinado.
93
+ * @param {string} xmlAssinado
94
+ * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
95
+ */
96
+ adicionarQrCode(xmlAssinado, documento) {
97
+ const doc = this.resolverDocumento(documento);
98
+ const { valorNF, valorIcms } = this.#calcularTotais(doc);
99
+ const digVal = extrairDigestValor(xmlAssinado);
100
+ const cDest = (doc.destinatario?.cnpj ?? doc.destinatario?.cpf ?? '').replace(/\D/g, '');
101
+
102
+ const qrCode = gerarUrlQrCodeV3({
103
+ chaveAcesso: doc.chaveAcesso,
104
+ uf: doc.ide.uf,
105
+ ambiente: doc.ambiente ?? 2,
106
+ cDest,
107
+ valorNF,
108
+ valorICMS: valorIcms,
109
+ digVal,
110
+ idCSC: doc.csc.idCSC,
111
+ csc: doc.csc.codigo,
112
+ });
113
+
114
+ const urlChave = obterUrlChave(doc.ide.uf, doc.ambiente ?? 2);
115
+ const xmlCompleto = inserirInfNFeSupl(xmlAssinado, qrCode, urlChave);
116
+
117
+ return { xmlCompleto, qrCode, urlChave };
118
+ }
119
+
120
+ /**
121
+ * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
122
+ * @param {{ pfx: Buffer|string, senha: string }} certificado
123
+ * @param {{ validarXsd?: boolean }} [options]
124
+ */
125
+ gerarXmlAssinado(documento, certificado, options = {}) {
126
+ const doc = this.resolverDocumento(documento);
127
+ const xml = this.xmlService.gerarXml(doc, { validarXsd: false });
128
+ const xmlAssinado = this.signService.assinar(xml, certificado.pfx, certificado.senha);
129
+ const { xmlCompleto, qrCode } = this.adicionarQrCode(xmlAssinado, doc);
130
+
131
+ if (options.validarXsd) {
132
+ this.xmlService.validarXml(xmlCompleto);
133
+ }
134
+
135
+ return { xml: xmlCompleto, qrCode };
136
+ }
137
+
138
+ /**
139
+ * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
140
+ * @param {{ pfx: Buffer|string, senha: string }} certificado
141
+ */
142
+ async emitir(documento, certificado) {
143
+ const doc = this.resolverDocumento(documento);
144
+
145
+ if (!this.soapService.mock && this.options.uf === undefined && !this.options.sefazEndpoint) {
146
+ this.configurarUf(doc.ide.uf, doc.ambiente ?? 2);
147
+ }
148
+
149
+ const { xml, qrCode } = this.gerarXmlAssinado(doc, certificado);
150
+ const retorno = await this.soapService.autorizar(xml, doc.chaveAcesso);
151
+
152
+ return {
153
+ chaveAcesso: doc.chaveAcesso,
154
+ qrCode,
155
+ xmlGerado: this.gerarXml(doc),
156
+ xmlAssinado: xml,
157
+ retorno,
158
+ };
159
+ }
160
+
161
+ /** @param {string} xml */
162
+ validarXsd(xml) {
163
+ return this.xmlService.validarXml(xml);
164
+ }
165
+
166
+ async enviar(xmlAssinado, chaveAcesso) {
167
+ return this.soapService.autorizar(xmlAssinado, chaveAcesso);
168
+ }
169
+
170
+ /** @param {Awaited<ReturnType<NFCeService['emitir']>>} resultado */
171
+ toPersistencePayload(resultado) {
172
+ if (!resultado.retorno.autorizado) {
173
+ throw new GhinfeError('NFC-e não autorizada', 'NFCE_NOT_AUTHORIZED', resultado.retorno);
174
+ }
175
+
176
+ return {
177
+ chave_acesso: resultado.chaveAcesso,
178
+ modelo: '65',
179
+ xml_nfce: resultado.xmlAssinado,
180
+ xml_protocolo: resultado.retorno.xmlProtocolo,
181
+ protocolo: resultado.retorno.protocolo,
182
+ qrcode_url: resultado.qrCode,
183
+ status: resultado.retorno.cStat,
184
+ motivo: resultado.retorno.xMotivo,
185
+ autorizado_em: new Date(),
186
+ };
187
+ }
188
+ }
@@ -1,38 +1,38 @@
1
- import { NFCeXmlBuilder } from '../builders/NFCeXmlBuilder.js';
2
- import { NFeXsdService } from '../../nfe/services/NFeXsdService.js';
3
-
4
- /**
5
- * Serviço de geração e validação XSD da NFC-e.
6
- */
7
- export class NFCeXmlService {
8
- /**
9
- * @param {{ validarXsd?: boolean }} [options]
10
- */
11
- constructor(options = {}) {
12
- this.builder = new NFCeXmlBuilder();
13
- this.xsdService = new NFeXsdService();
14
- this.validarXsd = options.validarXsd ?? false;
15
- }
16
-
17
- /**
18
- * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
19
- * @param {{ validarXsd?: boolean }} [options]
20
- */
21
- gerarXml(documento, options = {}) {
22
- const xml = this.builder.build(documento);
23
- const deveValidar = options.validarXsd ?? this.validarXsd;
24
-
25
- if (deveValidar) {
26
- this.xsdService.validarNFCe(xml, { preAssinatura: true });
27
- }
28
-
29
- return xml;
30
- }
31
-
32
- /**
33
- * @param {string} xml
34
- */
35
- validarXml(xml) {
36
- return this.xsdService.validarNFCe(xml);
37
- }
38
- }
1
+ import { NFCeXmlBuilder } from '../builders/NFCeXmlBuilder.js';
2
+ import { NFeXsdService } from '../../nfe/services/NFeXsdService.js';
3
+
4
+ /**
5
+ * Serviço de geração e validação XSD da NFC-e.
6
+ */
7
+ export class NFCeXmlService {
8
+ /**
9
+ * @param {{ validarXsd?: boolean }} [options]
10
+ */
11
+ constructor(options = {}) {
12
+ this.builder = new NFCeXmlBuilder();
13
+ this.xsdService = new NFeXsdService();
14
+ this.validarXsd = options.validarXsd ?? false;
15
+ }
16
+
17
+ /**
18
+ * @param {import('../types/NFCeDocument.js').NFCeDocumento} documento
19
+ * @param {{ validarXsd?: boolean }} [options]
20
+ */
21
+ gerarXml(documento, options = {}) {
22
+ const xml = this.builder.build(documento);
23
+ const deveValidar = options.validarXsd ?? this.validarXsd;
24
+
25
+ if (deveValidar) {
26
+ this.xsdService.validarNFCe(xml, { preAssinatura: true });
27
+ }
28
+
29
+ return xml;
30
+ }
31
+
32
+ /**
33
+ * @param {string} xml
34
+ */
35
+ validarXml(xml) {
36
+ return this.xsdService.validarNFCe(xml);
37
+ }
38
+ }
@@ -1,42 +1,42 @@
1
- /**
2
- * @typedef {import('../../nfe/types/NFeDocument.js').NFeEndereco} NFCeEndereco
3
- * @typedef {import('../../nfe/types/NFeDocument.js').NFeEmitente} NFCeEmitente
4
- * @typedef {import('../../nfe/types/NFeDocument.js').NFeItem} NFCeItem
5
- * @typedef {import('../../nfe/types/NFeDocument.js').NFePagamento} NFCePagamento
6
- */
7
-
8
- /**
9
- * @typedef {Object} NFCeDestinatario
10
- * @property {string} [cpf]
11
- * @property {string} [cnpj]
12
- * @property {string} [razaoSocial]
13
- * @property {NFCeEndereco} [endereco]
14
- */
15
-
16
- /**
17
- * @typedef {Object} NFCeCsc
18
- * @property {string} idCSC Identificador do CSC (ex "000001")
19
- * @property {string} codigo Código CSC fornecido pela SEFAZ
20
- */
21
-
22
- /**
23
- * @typedef {Object} NFCeDocumento
24
- * @property {string} [chaveAcesso]
25
- * @property {number} [ambiente] 1=Produção, 2=Homologação
26
- * @property {Object} ide
27
- * @property {string} ide.uf
28
- * @property {string} ide.codigoMunicipio
29
- * @property {number} [ide.serie]
30
- * @property {number} ide.numero
31
- * @property {string} [ide.naturezaOperacao]
32
- * @property {number} [ide.presenca] 1=Presencial, 4=Entrega domicílio
33
- * @property {NFCeEmitente} emitente
34
- * @property {NFCeDestinatario} [destinatario]
35
- * @property {NFCeItem[]} itens
36
- * @property {NFCePagamento[]} [pagamentos]
37
- * @property {NFCeCsc} csc Dados do CSC para QR Code
38
- * @property {string} [informacoesComplementares]
39
- * @property {string} [informacoesFisco]
40
- */
41
-
42
- export {};
1
+ /**
2
+ * @typedef {import('../../nfe/types/NFeDocument.js').NFeEndereco} NFCeEndereco
3
+ * @typedef {import('../../nfe/types/NFeDocument.js').NFeEmitente} NFCeEmitente
4
+ * @typedef {import('../../nfe/types/NFeDocument.js').NFeItem} NFCeItem
5
+ * @typedef {import('../../nfe/types/NFeDocument.js').NFePagamento} NFCePagamento
6
+ */
7
+
8
+ /**
9
+ * @typedef {Object} NFCeDestinatario
10
+ * @property {string} [cpf]
11
+ * @property {string} [cnpj]
12
+ * @property {string} [razaoSocial]
13
+ * @property {NFCeEndereco} [endereco]
14
+ */
15
+
16
+ /**
17
+ * @typedef {Object} NFCeCsc
18
+ * @property {string} idCSC Identificador do CSC (ex "000001")
19
+ * @property {string} codigo Código CSC fornecido pela SEFAZ
20
+ */
21
+
22
+ /**
23
+ * @typedef {Object} NFCeDocumento
24
+ * @property {string} [chaveAcesso]
25
+ * @property {number} [ambiente] 1=Produção, 2=Homologação
26
+ * @property {Object} ide
27
+ * @property {string} ide.uf
28
+ * @property {string} ide.codigoMunicipio
29
+ * @property {number} [ide.serie]
30
+ * @property {number} ide.numero
31
+ * @property {string} [ide.naturezaOperacao]
32
+ * @property {number} [ide.presenca] 1=Presencial, 4=Entrega domicílio
33
+ * @property {NFCeEmitente} emitente
34
+ * @property {NFCeDestinatario} [destinatario]
35
+ * @property {NFCeItem[]} itens
36
+ * @property {NFCePagamento[]} [pagamentos]
37
+ * @property {NFCeCsc} csc Dados do CSC para QR Code
38
+ * @property {string} [informacoesComplementares]
39
+ * @property {string} [informacoesFisco]
40
+ */
41
+
42
+ export {};