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.
- package/dist/utils/make.js +7 -9
- package/dist/utils/tools.d.ts +4 -4
- package/dist/utils/tools.js +29 -25
- package/package.json +1 -1
- package/xmlSing.xml +1 -0
package/dist/utils/make.js
CHANGED
@@ -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
|
-
|
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
|
-
|
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 = {
|
package/dist/utils/tools.d.ts
CHANGED
@@ -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,
|
25
|
+
sefazEvento({ chNFe, tpEvento, nProt, xJust, nSeqEvento, dhEvento }: {
|
26
26
|
chNFe?: string | undefined;
|
27
27
|
tpEvento?: string | undefined;
|
28
28
|
nProt?: string | undefined;
|
29
|
-
|
30
|
-
|
31
|
-
|
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;
|
package/dist/utils/tools.js
CHANGED
@@ -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 = "",
|
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 (!
|
275
|
-
throw "sefazEvento({
|
275
|
+
if (!xJust)
|
276
|
+
throw "sefazEvento({xJust}) obrigatório para Cancelamento!";
|
276
277
|
detEvento["nProt"] = nProt;
|
277
|
-
detEvento["xJust"] =
|
278
|
+
detEvento["xJust"] = xJust;
|
278
279
|
}
|
279
280
|
else if (tpEvento === "110110") { // Carta de Correção
|
280
|
-
if (!
|
281
|
-
throw "sefazEvento({
|
282
|
-
detEvento["xCorrecao"] =
|
283
|
-
detEvento["xCondUso"] = "A
|
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 (!
|
287
|
-
throw "sefazEvento({
|
288
|
-
detEvento["xJust"] =
|
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}${
|
301
|
-
|
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
|
-
|
307
|
+
dhEvento,
|
306
308
|
"tpEvento": tpEvento,
|
307
|
-
"nSeqEvento":
|
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":
|
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
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>
|