node-sped-nfe 1.2.2 → 1.2.31

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.
@@ -14,7 +14,7 @@ class Make {
14
14
  _Make_NFe.set(this, {
15
15
  "@xmlns": "http://www.portalfiscal.inf.br/nfe",
16
16
  infNFe: {
17
- "@xmlns": "http://www.portalfiscal.inf.br/nfe",
17
+ //"@xmlns": "http://www.portalfiscal.inf.br/nfe",
18
18
  }
19
19
  });
20
20
  _Make_ICMSTot.set(this, {
@@ -442,17 +442,15 @@ class Make {
442
442
  __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total = {
443
443
  ICMSTot: {}
444
444
  };
445
- if (obj != null) {
445
+ Object.keys(__classPrivateFieldGet(this, _Make_ICMSTot, "f")).forEach(key => {
446
+ __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot[key] = (__classPrivateFieldGet(this, _Make_ICMSTot, "f")[key] * 1).toFixed(2);
447
+ });
448
+ __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vNF = (__classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vProd - __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vDesc).toFixed(2);
449
+ if (obj != null) { // Substituir campos que deseja
446
450
  Object.keys(obj).forEach(key => {
447
451
  __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot[key] = obj[key];
448
452
  });
449
453
  }
450
- else {
451
- Object.keys(__classPrivateFieldGet(this, _Make_ICMSTot, "f")).forEach(key => {
452
- __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot[key] = (__classPrivateFieldGet(this, _Make_ICMSTot, "f")[key] * 1).toFixed(2);
453
- });
454
- __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vNF = (__classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vProd - __classPrivateFieldGet(this, _Make_NFe, "f").infNFe.total.ICMSTot.vDesc).toFixed(2);
455
- }
456
454
  }
457
455
  tagISSQNTot(obj) {
458
456
  throw "Não implementado!";
@@ -556,7 +554,7 @@ class Make {
556
554
  if (__classPrivateFieldGet(this, _Make_NFe, "f").infNFe[`@Id`] == null)
557
555
  __classPrivateFieldGet(this, _Make_NFe, "f").infNFe[`@Id`] = `NFe${__classPrivateFieldGet(this, _Make_instances, "m", _Make_gerarChaveNFe).call(this)}`;
558
556
  //Adicionar QrCode
559
- if (__classPrivateFieldGet(this, _Make_NFe, "f").infNFe.ide.mod == 65) {
557
+ if (__classPrivateFieldGet(this, _Make_NFe, "f").infNFe.ide.mod * 1 == 65) {
560
558
  //Como ja temos cUF, vamos usar o extras.cUF2UF
561
559
  let tempUF = urlEventos(cUF2UF[__classPrivateFieldGet(this, _Make_NFe, "f").infNFe.ide.cUF], __classPrivateFieldGet(this, _Make_NFe, "f").infNFe['@versao']);
562
560
  __classPrivateFieldGet(this, _Make_NFe, "f").infNFeSupl = {
@@ -22,13 +22,13 @@ declare class Tools {
22
22
  json2xml(obj: object): Promise<string>;
23
23
  getCertificado(): Promise<object>;
24
24
  consultarNFe(chNFe: string): Promise<string>;
25
- sefazEvento({ chNFe, tpEvento, nProt, justificativa, textoCorrecao, sequencial }: {
25
+ sefazEvento({ chNFe, tpEvento, nProt, xJust, nSeqEvento, dhEvento }: {
26
26
  chNFe?: string | undefined;
27
27
  tpEvento?: string | undefined;
28
28
  nProt?: string | undefined;
29
- justificativa?: string | undefined;
30
- textoCorrecao?: string | undefined;
31
- sequencial?: number | undefined;
29
+ xJust?: string | undefined;
30
+ nSeqEvento?: number | undefined;
31
+ dhEvento?: string | undefined;
32
32
  }): Promise<string>;
33
33
  sefazDistDFe({ ultNSU, chNFe }: {
34
34
  ultNSU?: string;
@@ -20,7 +20,7 @@ import fs from "fs";
20
20
  import path from 'path';
21
21
  import { fileURLToPath } from 'url';
22
22
  import pem from 'pem';
23
- import { cUF2UF, json2xml, xml2json, UF2cUF } from "./extras.js";
23
+ import { cUF2UF, json2xml, xml2json, formatData, UF2cUF } from "./extras.js";
24
24
  import { SignedXml } from 'xml-crypto';
25
25
  const __filename = fileURLToPath(import.meta.url);
26
26
  const __dirname = path.dirname(__filename);
@@ -103,7 +103,7 @@ class Tools {
103
103
  });
104
104
  res.on('end', () => {
105
105
  xml2json(data).then((jRes) => {
106
- json2xml(jRes['soapenv:Envelope']['soapenv:Body']).then(resolve).catch(reject);
106
+ json2xml(jRes['soapenv:Envelope']?.['soapenv:Body']?.['nfeResultMsg'] || jRes['soap:Envelope']?.['soap:Body']?.['nfeResultMsg']).then(resolve).catch(reject);
107
107
  });
108
108
  });
109
109
  });
@@ -131,8 +131,9 @@ class Tools {
131
131
  data.tag = "infNFe";
132
132
  var xml = await this.xml2json(xmlJSON);
133
133
  if (data.tag == "infNFe") {
134
- if (xml.NFe.infNFe.ide.mod == 65) {
134
+ if (xml.NFe.infNFe.ide.mod * 1 == 65) {
135
135
  xml.NFe.infNFeSupl.qrCode = __classPrivateFieldGet(this, _Tools_instances, "m", _Tools_gerarQRCodeNFCe).call(this, xml.NFe, "2", __classPrivateFieldGet(this, _Tools_config, "f").CSCid, __classPrivateFieldGet(this, _Tools_config, "f").CSC);
136
+ xmlJSON = await json2xml(xml);
136
137
  }
137
138
  xml.NFe = {
138
139
  ...xml.NFe,
@@ -217,7 +218,7 @@ class Tools {
217
218
  res.on('data', (chunk) => data += chunk);
218
219
  res.on('end', () => {
219
220
  xml2json(data).then((jRes) => {
220
- json2xml(jRes['soap:Envelope']['soap:Body']).then(resolve).catch(reject);
221
+ json2xml(jRes['soapenv:Envelope']?.['soapenv:Body']?.['nfeResultMsg'] || jRes['soap:Envelope']?.['soap:Body']?.['nfeResultMsg']).then(resolve).catch(reject);
221
222
  });
222
223
  });
223
224
  });
@@ -237,7 +238,7 @@ class Tools {
237
238
  }
238
239
  });
239
240
  }
240
- async sefazEvento({ chNFe = "", tpEvento = "", nProt = "", justificativa = "", textoCorrecao = "", sequencial = 1 }) {
241
+ async sefazEvento({ chNFe = "", tpEvento = "", nProt = "", xJust = "", nSeqEvento = 1, dhEvento = formatData() }) {
241
242
  return new Promise(async (resolve, reject) => {
242
243
  try {
243
244
  if (!chNFe)
@@ -262,32 +263,33 @@ class Tools {
262
263
  }
263
264
  return idLote;
264
265
  };
265
- const tempUF = urlEventos(`AN`, __classPrivateFieldGet(this, _Tools_config, "f").versao);
266
266
  let detEvento = {
267
267
  "@versao": "1.00",
268
268
  "descEvento": __classPrivateFieldGet(this, _Tools_instances, "m", _Tools_descEvento).call(this, `${tpEvento}`)
269
269
  };
270
+ const cOrgao = !['210200', '210210', '210220', '210240'].includes(tpEvento) ? chNFe.substring(0, 2) : '91';
270
271
  // Adicionar campos específicos por tipo de evento
271
272
  if (tpEvento === "110111") { // Cancelamento
272
273
  if (!nProt)
273
274
  throw "sefazEvento({nProt}) obrigatório para Cancelamento!";
274
- if (!justificativa)
275
- throw "sefazEvento({justificativa}) obrigatório para Cancelamento!";
275
+ if (!xJust)
276
+ throw "sefazEvento({xJust}) obrigatório para Cancelamento!";
276
277
  detEvento["nProt"] = nProt;
277
- detEvento["xJust"] = justificativa;
278
+ detEvento["xJust"] = xJust;
278
279
  }
279
280
  else if (tpEvento === "110110") { // Carta de Correção
280
- if (!textoCorrecao)
281
- throw "sefazEvento({textoCorrecao}) obrigatório para Carta de Correção!";
282
- detEvento["xCorrecao"] = textoCorrecao;
283
- detEvento["xCondUso"] = "A carta de correção é disciplinada pelo § 1º-A do art. do Convênio S/N, de 15 de dezembro de 1970...";
281
+ if (!xJust)
282
+ throw "sefazEvento({xJust}) obrigatório para Carta de Correção!";
283
+ detEvento["xCorrecao"] = xJust;
284
+ detEvento["xCondUso"] = "A Carta de Correcao e disciplinada pelo paragrafo 1o-A do art. 7o do Convenio S/N, de 15 de dezembro de 1970 e pode ser utilizada para regularizacao de erro ocorrido na emissao de documento fiscal, desde que o erro nao esteja relacionado com: I - as variaveis que determinam o valor do imposto tais como: base de calculo, aliquota, diferenca de preco, quantidade, valor da operacao ou da prestacao; II - a correcao de dados cadastrais que implique mudanca do remetente ou do destinatario; III - a data de emissao ou de saida.";
284
285
  }
285
286
  else if (tpEvento === "210240") { // Operação não realizada
286
- if (!justificativa)
287
- throw "sefazEvento({justificativa}) obrigatório para Operação não realizada!";
288
- detEvento["xJust"] = justificativa;
287
+ if (!xJust)
288
+ throw "sefazEvento({xJust}) obrigatório para Operação não realizada!";
289
+ detEvento["xJust"] = xJust;
289
290
  }
290
291
  // Ciência (210210), Confirmação (210200), Desconhecimento (210220) não precisam de campos extras
292
+ const tempUF = urlEventos(cUF2UF[cOrgao], __classPrivateFieldGet(this, _Tools_config, "f").versao);
291
293
  const evento = {
292
294
  "envEvento": {
293
295
  "@xmlns": "http://www.portalfiscal.inf.br/nfe",
@@ -297,14 +299,14 @@ class Tools {
297
299
  "@xmlns": "http://www.portalfiscal.inf.br/nfe",
298
300
  "@versao": "1.00",
299
301
  "infEvento": {
300
- "@Id": `ID${tpEvento}${chNFe}${sequencial.toString().padStart(2, '0')}`,
301
- "cOrgao": "91",
302
+ "@Id": `ID${tpEvento}${chNFe}${nSeqEvento.toString().padStart(2, '0')}`,
303
+ cOrgao,
302
304
  "tpAmb": __classPrivateFieldGet(this, _Tools_config, "f").tpAmb,
303
305
  "CNPJ": __classPrivateFieldGet(this, _Tools_config, "f").CNPJ,
304
306
  "chNFe": chNFe,
305
- "dhEvento": "2025-04-29T14:16:21-03:00",
307
+ dhEvento,
306
308
  "tpEvento": tpEvento,
307
- "nSeqEvento": sequencial,
309
+ "nSeqEvento": nSeqEvento,
308
310
  "verEvento": "1.00",
309
311
  "detEvento": detEvento
310
312
  }
@@ -319,7 +321,10 @@ class Tools {
319
321
  "@xmlns:soap": "http://www.w3.org/2003/05/soap-envelope",
320
322
  "@xmlns:nfe": "http://www.portalfiscal.inf.br/nfe/wsdl/NFeRecepcaoEvento4",
321
323
  "soap:Body": {
322
- "nfe:nfeDadosMsg": await xml2json(xmlSing)
324
+ "nfe:nfeDadosMsg": {
325
+ ...await xml2json(xmlSing),
326
+ "@xmlns": "http://www.portalfiscal.inf.br/nfe/wsdl/NFeRecepcaoEvento4"
327
+ }
323
328
  }
324
329
  }
325
330
  });
@@ -341,7 +346,7 @@ class Tools {
341
346
  });
342
347
  res.on('end', () => {
343
348
  xml2json(data).then((jRes) => {
344
- json2xml(jRes['soap:Envelope']['soap:Body']).then(resolve).catch(reject);
349
+ json2xml(jRes['soapenv:Envelope']?.['soapenv:Body']?.['nfeResultMsg'] || jRes['soap:Envelope']?.['soap:Body']?.['nfeResultMsg']).then(resolve).catch(reject);
345
350
  });
346
351
  });
347
352
  });
@@ -429,7 +434,7 @@ class Tools {
429
434
  });
430
435
  res.on('end', () => {
431
436
  xml2json(data).then((jRes) => {
432
- json2xml(jRes['soap:Envelope']['soap:Body']).then(resolve).catch(reject);
437
+ json2xml(jRes['soapenv:Envelope']?.['soapenv:Body']?.['nfeResultMsg'] || jRes['soap:Envelope']?.['soap:Body']?.['nfeResultMsg']).then(resolve).catch(reject);
433
438
  });
434
439
  });
435
440
  });
@@ -505,9 +510,8 @@ class Tools {
505
510
  data += chunk;
506
511
  });
507
512
  res.on('end', () => {
508
- console.log(data);
509
513
  xml2json(data).then((jRes) => {
510
- json2xml(jRes['soapenv:Envelope']['soapenv:Body']).then(resolve).catch(reject);
514
+ json2xml(jRes['soapenv:Envelope']?.['soapenv:Body']?.['nfeResultMsg'] || jRes['soap:Envelope']?.['soap:Body']?.['nfeResultMsg']).then(resolve).catch(reject);
511
515
  });
512
516
  });
513
517
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-sped-nfe",
3
- "version": "1.2.2",
3
+ "version": "1.2.31",
4
4
  "author": "Kalmon V. Tavares",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/xmlSing.xml ADDED
@@ -0,0 +1 @@
1
+ <NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe Id="NFe43250508512944000150650000000002511000020233" versao="4.00"><ide><cUF>43</cUF><cNF>00002023</cNF><natOp>VENDA</natOp><mod>65</mod><serie>0</serie><nNF>251</nNF><dhEmi>2025-05-14T13:21:01-03:00</dhEmi><tpNF>1</tpNF><idDest>1</idDest><cMunFG>5106257</cMunFG><tpImp>4</tpImp><tpEmis>1</tpEmis><cDV>3</cDV><tpAmb>2</tpAmb><finNFe>1</finNFe><indFinal>1</indFinal><indPres>1</indPres><indIntermed>0</indIntermed><procEmi>0</procEmi><verProc>4.13</verProc></ide><emit><CNPJ>08512944000150</CNPJ><xNome>S CANDIDA DA SILVA </xNome><xFant>S CANDIDA DA SILVA </xFant><enderEmit><xLgr>Av. Nodejs</xLgr><nro>22</nro><xBairro>Githubsom</xBairro><cMun>4313466</cMun><xMun>Novo Xingu</xMun><UF>SP</UF><CEP>99687000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais><fone>1140028922</fone></enderEmit><IE>133299414</IE><CRT>1</CRT></emit><det nItem="1"><prod><cProd>126</cProd><cEAN>SEM GTIN</cEAN><xProd>NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xProd><NCM>85044010</NCM><CFOP>5102</CFOP><uCom>UNID</uCom><qCom>3.0000</qCom><vUnCom>132.0000000000</vUnCom><vProd>396.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UNID</uTrib><qTrib>3.0000</qTrib><vUnTrib>132.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>400</CSOSN></ICMSSN102></ICMS><PIS><PISOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vPIS>0.00</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vCOFINS>0.00</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem="2"><prod><cProd>129</cProd><cEAN>SEM GTIN</cEAN><xProd>CABO P2 PARA P10 CELULAR MESA DE SOM CAIXA DE SOM 25 METRO</xProd><NCM>85044010</NCM><CFOP>5102</CFOP><uCom>UNID</uCom><qCom>2.0000</qCom><vUnCom>218.0000000000</vUnCom><vProd>436.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UNID</uTrib><qTrib>2.0000</qTrib><vUnTrib>218.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>400</CSOSN></ICMSSN102></ICMS><PIS><PISOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vPIS>0.00</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vCOFINS>0.00</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem="3"><prod><cProd>127</cProd><cEAN>SEM GTIN</cEAN><xProd>CABO DE MICROFONE XLR FEMEA PARA P10 MONO 20 METROS CIRILO CABOS</xProd><NCM>85044010</NCM><CFOP>5102</CFOP><uCom>UNID</uCom><qCom>2.0000</qCom><vUnCom>185.0000000000</vUnCom><vProd>370.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UNID</uTrib><qTrib>2.0000</qTrib><vUnTrib>185.0000000000</vUnTrib><vDesc>38.00</vDesc><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>400</CSOSN></ICMSSN102></ICMS><PIS><PISOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vPIS>0.00</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vCOFINS>0.00</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem="4"><prod><cProd>128</cProd><cEAN>SEM GTIN</cEAN><xProd>CABO DE AUDIO P10 X P10 MONO BLINDADO 5 METROS</xProd><NCM>85044010</NCM><CFOP>5102</CFOP><uCom>UNID</uCom><qCom>2.0000</qCom><vUnCom>18.0000000000</vUnCom><vProd>36.00</vProd><cEANTrib>SEM GTIN</cEANTrib><uTrib>UNID</uTrib><qTrib>2.0000</qTrib><vUnTrib>18.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><ICMS><ICMSSN102><orig>0</orig><CSOSN>400</CSOSN></ICMSSN102></ICMS><PIS><PISOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vPIS>0.00</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>49</CST><qBCProd>0.0000</qBCProd><vAliqProd>0.0000</vAliqProd><vCOFINS>0.00</vCOFINS></COFINSOutr></COFINS></imposto></det><total><ICMSTot><vBC>0.00</vBC><vICMS>0.00</vICMS><vICMSDeson>0.00</vICMSDeson><vFCP>0.00</vFCP><vBCST>0.00</vBCST><vST>0.00</vST><vFCPST>0.00</vFCPST><vFCPSTRet>0.00</vFCPSTRet><vProd>1238.00</vProd><vFrete>0.00</vFrete><vSeg>0.00</vSeg><vDesc>38.00</vDesc><vII>0.00</vII><vIPI>0.00</vIPI><vIPIDevol>0.00</vIPIDevol><vPIS>0.00</vPIS><vCOFINS>0.00</vCOFINS><vOutro>0.00</vOutro><vNF>1200.00</vNF></ICMSTot></total><transp><modFrete>9</modFrete></transp><pag><detPag><indPag>0</indPag><tPag>17</tPag><vPag>1200.00</vPag></detPag><vTroco>0.00</vTroco></pag><infRespTec><CNPJ>47506306000188</CNPJ><xContato>PP Programador Perfeito</xContato><email>pp@email.com</email><fone>551140028922</fone></infRespTec></infNFe><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#NFe43250508512944000150650000000002511000020233"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>Rvp1yuwdqJSZcEqgFFNX+yD74PI=</DigestValue></Reference></SignedInfo><SignatureValue>iwJ35xNS4HPfMmucz6zki7H92JbPt5BAAwxhhQer3VGCw/2xzFw/ZIU9RIi5dUGmeSH3s23wl0n/MB590YDpB6ysUHTFpcrlywi76x/uEc9zc7sdLKk9ECe4y4BsBI5lxANlY0sDpMMm1KyseuQPgnOAE3HPeDMGW3S6lMInNxDx+3jhcLKtKokHEovEZEgeQnsSCjXHxNxpEdXFnSdnz0rAzpt6onErDQI/fTpTvF/BHtB3WmsO7ApXYV2FyuWaRuE2/UT2ozvVcwYphrgLiIvGQOnR6lbKH2ivoRrsDGJlLB0a0FxFN8UDCn+1xhjFcMhbAbgRqE5R/pUE5urpcw==</SignatureValue><KeyInfo><X509Data><X509Certificate>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</X509Certificate></X509Data></KeyInfo></Signature><infNFeSupl><qrCode>https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx</qrCode><urlChave>www.sefaz.rs.gov.br/nfce/consulta</urlChave></infNFeSupl></NFe>