nfe-lib-node 1.0.0 → 1.3.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.
- package/README.md +113 -87
- package/dist/Assinador.d.ts +11 -0
- package/dist/Assinador.d.ts.map +1 -0
- package/dist/Assinador.js +51 -0
- package/dist/Assinador.js.map +1 -0
- package/dist/Certificado.d.ts +39 -0
- package/dist/Certificado.d.ts.map +1 -0
- package/dist/Certificado.js +100 -0
- package/dist/Certificado.js.map +1 -0
- package/dist/Danfe.d.ts +16 -0
- package/dist/Danfe.d.ts.map +1 -0
- package/dist/Danfe.js +371 -0
- package/dist/Danfe.js.map +1 -0
- package/dist/NFe.d.ts +25 -0
- package/dist/NFe.d.ts.map +1 -0
- package/dist/NFe.js +90 -0
- package/dist/NFe.js.map +1 -0
- package/dist/chaveAcesso.d.ts +40 -0
- package/dist/chaveAcesso.d.ts.map +1 -0
- package/dist/chaveAcesso.js +83 -0
- package/dist/chaveAcesso.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +2403 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/webservices.d.ts +14 -0
- package/dist/webservices.d.ts.map +1 -0
- package/dist/webservices.js +365 -0
- package/dist/webservices.js.map +1 -0
- package/package.json +13 -3
package/dist/Danfe.js
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
2
|
+
const CODE128_PATTERNS = [
|
|
3
|
+
'212222', '222122', '222221', '121223', '121322', '131222', '122213', '122312', '132212', '221213',
|
|
4
|
+
'221312', '231212', '112232', '122132', '122231', '113222', '123122', '123221', '223211', '221132',
|
|
5
|
+
'221231', '213212', '223112', '312131', '311222', '321122', '321221', '312212', '322112', '322211',
|
|
6
|
+
'212123', '212321', '232121', '111323', '131123', '131321', '112313', '132113', '132311', '211313',
|
|
7
|
+
'231113', '231311', '112133', '112331', '132131', '113123', '113321', '133121', '313121', '211331',
|
|
8
|
+
'231131', '213113', '213311', '213131', '311123', '311321', '331121', '312113', '312311', '332111',
|
|
9
|
+
'314111', '221411', '431111', '111224', '111422', '121124', '121421', '141122', '141221', '112214',
|
|
10
|
+
'112412', '122114', '122411', '142112', '142211', '241211', '221114', '413111', '241112', '134111',
|
|
11
|
+
'111242', '121142', '121241', '114212', '124112', '124211', '411212', '421112', '421211', '212141',
|
|
12
|
+
'214121', '412121', '111143', '111341', '131141', '114113', '114311', '411113', '411311', '113141',
|
|
13
|
+
'114131', '311141', '411131', '211412', '211214', '211232', '2331112',
|
|
14
|
+
];
|
|
15
|
+
const COLUNAS_ITENS = [
|
|
16
|
+
{ x: 20, w: 42, label: 'COD. PROD' },
|
|
17
|
+
{ x: 62, w: 155, label: 'DESCRICAO DO PRODUTO / SERVICO' },
|
|
18
|
+
{ x: 217, w: 36, label: 'NCM/SH' },
|
|
19
|
+
{ x: 253, w: 28, label: 'O/CSOSN' },
|
|
20
|
+
{ x: 281, w: 24, label: 'CFOP' },
|
|
21
|
+
{ x: 305, w: 18, label: 'UN' },
|
|
22
|
+
{ x: 323, w: 34, label: 'QUANT.' },
|
|
23
|
+
{ x: 357, w: 36, label: 'V. UNIT.' },
|
|
24
|
+
{ x: 393, w: 36, label: 'V. TOTAL' },
|
|
25
|
+
{ x: 429, w: 34, label: 'B.C. ICMS' },
|
|
26
|
+
{ x: 463, w: 32, label: 'V. ICMS' },
|
|
27
|
+
{ x: 495, w: 28, label: 'V. IPI' },
|
|
28
|
+
{ x: 523, w: 26, label: 'AL. ICMS' },
|
|
29
|
+
{ x: 549, w: 26, label: 'AL. IPI' },
|
|
30
|
+
];
|
|
31
|
+
export class Danfe {
|
|
32
|
+
static fromXml(xmlNFe, xmlRetornoSefaz) {
|
|
33
|
+
const doc = new DOMParser().parseFromString(xmlNFe, 'text/xml');
|
|
34
|
+
const docRetorno = xmlRetornoSefaz
|
|
35
|
+
? new DOMParser().parseFromString(xmlRetornoSefaz, 'text/xml')
|
|
36
|
+
: doc;
|
|
37
|
+
const infNFe = doc.getElementsByTagName('infNFe')[0];
|
|
38
|
+
const ide = doc.getElementsByTagName('ide')[0];
|
|
39
|
+
const emit = doc.getElementsByTagName('emit')[0];
|
|
40
|
+
const enderEmit = emit?.getElementsByTagName('enderEmit')[0];
|
|
41
|
+
const dest = doc.getElementsByTagName('dest')[0];
|
|
42
|
+
const enderDest = dest?.getElementsByTagName('enderDest')[0];
|
|
43
|
+
const icmsTot = doc.getElementsByTagName('ICMSTot')[0];
|
|
44
|
+
const transp = doc.getElementsByTagName('transp')[0];
|
|
45
|
+
const transporta = transp?.getElementsByTagName('transporta')[0];
|
|
46
|
+
const vol = transp?.getElementsByTagName('vol')[0];
|
|
47
|
+
const detPag = doc.getElementsByTagName('detPag')[0];
|
|
48
|
+
const infAdic = doc.getElementsByTagName('infAdic')[0];
|
|
49
|
+
const infProt = docRetorno.getElementsByTagName('infProt')[0] ??
|
|
50
|
+
doc.getElementsByTagName('infProt')[0];
|
|
51
|
+
const rawId = infNFe?.getAttribute('Id') ?? '';
|
|
52
|
+
const chave = rawId.replace(/^NFe/, '').padStart(44, '0');
|
|
53
|
+
const chaveFormatada = chave.replace(/(\d{4})(?=\d)/g, '$1 ');
|
|
54
|
+
const tpAmb = this.getTag(ide, 'tpAmb', '2');
|
|
55
|
+
const natOp = this.getTag(ide, 'natOp', '');
|
|
56
|
+
const nNF = this.getTag(ide, 'nNF', '1');
|
|
57
|
+
const serie = this.getTag(ide, 'serie', '1');
|
|
58
|
+
const tpNF = this.getTag(ide, 'tpNF', '1');
|
|
59
|
+
const dhEmi = this.formatDateTime(this.getTag(ide, 'dhEmi', ''));
|
|
60
|
+
const dhSaiEnt = this.formatDateTime(this.getTag(ide, 'dhSaiEnt', this.getTag(ide, 'dhEmi', '')));
|
|
61
|
+
const emitNome = this.getTag(emit, 'xNome', '');
|
|
62
|
+
const emitCnpj = this.formatDoc(this.getTag(emit, 'CNPJ', this.getTag(emit, 'CPF', '')));
|
|
63
|
+
const emitIe = this.getTag(emit, 'IE', '');
|
|
64
|
+
const emitIeSt = this.getTag(emit, 'IEST', '');
|
|
65
|
+
const emitEnd = `${this.getTag(enderEmit, 'xLgr', '')}, ${this.getTag(enderEmit, 'nro', '')} - ${this.getTag(enderEmit, 'xBairro', '')}`;
|
|
66
|
+
const emitMunUfCep = `${this.getTag(enderEmit, 'xMun', '')}/${this.getTag(enderEmit, 'UF', '')} - CEP ${this.getTag(enderEmit, 'CEP', '')} - Fone ${this.getTag(enderEmit, 'fone', '')}`;
|
|
67
|
+
const destNome = this.getTag(dest, 'xNome', '');
|
|
68
|
+
const destDoc = this.formatDoc(this.getTag(dest, 'CNPJ', this.getTag(dest, 'CPF', '')));
|
|
69
|
+
const destEnd = `${this.getTag(enderDest, 'xLgr', '')}, ${this.getTag(enderDest, 'nro', '')}`;
|
|
70
|
+
const destBairro = this.getTag(enderDest, 'xBairro', '');
|
|
71
|
+
const destCep = this.getTag(enderDest, 'CEP', '');
|
|
72
|
+
const destMun = this.getTag(enderDest, 'xMun', '');
|
|
73
|
+
const destUf = this.getTag(enderDest, 'UF', '');
|
|
74
|
+
const destFone = this.getTag(enderDest, 'fone', '');
|
|
75
|
+
const destIe = this.getTag(dest, 'IE', '');
|
|
76
|
+
const cStat = this.getTag(infProt, 'cStat', this.getTag(docRetorno, 'cStat', ''));
|
|
77
|
+
const xMotivo = this.getTag(infProt, 'xMotivo', this.getTag(docRetorno, 'xMotivo', ''));
|
|
78
|
+
const nProt = this.getTag(infProt, 'nProt', '');
|
|
79
|
+
const dhRecbto = this.formatDateTime(this.getTag(infProt, 'dhRecbto', this.getTag(docRetorno, 'dhRecbto', '')));
|
|
80
|
+
const protocoloTexto = nProt
|
|
81
|
+
? `${nProt} - ${dhRecbto}`
|
|
82
|
+
: `cStat ${cStat} - ${xMotivo.slice(0, 38)} (${dhRecbto})`;
|
|
83
|
+
const detNodes = doc.getElementsByTagName('det');
|
|
84
|
+
const itens = [];
|
|
85
|
+
for (let i = 0; i < detNodes.length; i++) {
|
|
86
|
+
const det = detNodes[i];
|
|
87
|
+
if (!det)
|
|
88
|
+
continue;
|
|
89
|
+
const prod = det.getElementsByTagName('prod')[0];
|
|
90
|
+
const icms = det.getElementsByTagName('ICMS')[0];
|
|
91
|
+
const ipi = det.getElementsByTagName('IPI')[0];
|
|
92
|
+
const orig = this.getTag(icms, 'orig', '0');
|
|
93
|
+
const csosnOrCst = this.getTag(icms, 'CSOSN', this.getTag(icms, 'CST', '00'));
|
|
94
|
+
itens.push({
|
|
95
|
+
cProd: this.getTag(prod, 'cProd', ''),
|
|
96
|
+
xProd: this.getTag(prod, 'xProd', ''),
|
|
97
|
+
ncm: this.getTag(prod, 'NCM', ''),
|
|
98
|
+
origCsosnCst: `${orig}/${csosnOrCst}`,
|
|
99
|
+
cfop: this.getTag(prod, 'CFOP', ''),
|
|
100
|
+
uCom: this.getTag(prod, 'uCom', ''),
|
|
101
|
+
qCom: this.formatDecimal(this.getTag(prod, 'qCom', '0.00')),
|
|
102
|
+
vUnCom: this.formatDecimal(this.getTag(prod, 'vUnCom', '0.00')),
|
|
103
|
+
vProd: this.formatDecimal(this.getTag(prod, 'vProd', '0.00')),
|
|
104
|
+
vBC: this.formatDecimal(this.getTag(icms, 'vBC', '0.00')),
|
|
105
|
+
vICMS: this.formatDecimal(this.getTag(icms, 'vICMS', '0.00')),
|
|
106
|
+
vIPI: this.formatDecimal(this.getTag(ipi, 'vIPI', '0.00')),
|
|
107
|
+
pICMS: this.formatDecimal(this.getTag(icms, 'pICMS', '0.00')),
|
|
108
|
+
pIPI: this.formatDecimal(this.getTag(ipi, 'pIPI', '0.00')),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const cmds = [];
|
|
112
|
+
cmds.push('0.5 w');
|
|
113
|
+
this.drawBox(cmds, 20, 782, 450, 38, 'RECEBEMOS DE ' + emitNome.slice(0, 65) + ' OS PRODUTOS CONSTANTES DA NOTA FISCAL INDICADA AO LADO');
|
|
114
|
+
this.drawBox(cmds, 20, 782, 110, 20, 'DATA DE RECEBIMENTO');
|
|
115
|
+
this.drawBox(cmds, 130, 782, 340, 20, 'IDENTIFICACAO E ASSINATURA DO RECEBEDOR');
|
|
116
|
+
this.drawBox(cmds, 470, 782, 105, 38, 'NF-e', `No. ${nNF.padStart(9, '0')} / Serie ${serie}`, 7.5, true);
|
|
117
|
+
cmds.push('[2 2] 0 d 0.4 w 20 776 m 575 776 l S [] 0 d 0.5 w');
|
|
118
|
+
this.drawBox(cmds, 20, 688, 220, 82, 'IDENTIFICACAO DO EMITENTE');
|
|
119
|
+
this.drawText(cmds, 24, 752, emitNome.slice(0, 38), 7.5, true);
|
|
120
|
+
this.drawText(cmds, 24, 739, emitEnd.slice(0, 45), 6.5, false);
|
|
121
|
+
this.drawText(cmds, 24, 728, emitMunUfCep.slice(0, 47), 6.5, false);
|
|
122
|
+
if (tpAmb === '2') {
|
|
123
|
+
this.drawText(cmds, 24, 695, 'AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL', 6.5, true);
|
|
124
|
+
}
|
|
125
|
+
this.drawBox(cmds, 240, 688, 95, 82, '');
|
|
126
|
+
this.drawText(cmds, 268, 756, 'DANFE', 11, true);
|
|
127
|
+
this.drawText(cmds, 246, 746, 'Documento Auxiliar da', 6, false);
|
|
128
|
+
this.drawText(cmds, 245, 738, 'Nota Fiscal Eletronica', 6, false);
|
|
129
|
+
this.drawText(cmds, 246, 725, '0 - ENTRADA', 6, false);
|
|
130
|
+
this.drawText(cmds, 246, 717, '1 - SAIDA', 6, false);
|
|
131
|
+
this.drawBox(cmds, 312, 716, 15, 15, '');
|
|
132
|
+
this.drawText(cmds, 317, 720, tpNF, 8.5, true);
|
|
133
|
+
this.drawText(cmds, 246, 703, `No. ${nNF.padStart(9, '0')}`, 7.5, true);
|
|
134
|
+
this.drawText(cmds, 246, 693, `SERIE: ${serie.padStart(3, '0')} FL 1/1`, 6.5, true);
|
|
135
|
+
this.drawBox(cmds, 335, 729, 240, 41, 'CONTROLE DO FISCO');
|
|
136
|
+
this.drawCode128C(cmds, chave, 348, 733, 214, 26);
|
|
137
|
+
this.drawBox(cmds, 335, 688, 240, 41, 'CHAVE DE ACESSO', chaveFormatada, 7, true);
|
|
138
|
+
this.drawBox(cmds, 20, 666, 315, 22, 'NATUREZA DA OPERACAO', natOp, 7.5, false);
|
|
139
|
+
this.drawBox(cmds, 335, 666, 240, 22, 'PROTOCOLO DE AUTORIZACAO DE USO', protocoloTexto, 6.5, true);
|
|
140
|
+
this.drawBox(cmds, 20, 644, 185, 22, 'INSCRICAO ESTADUAL', emitIe, 7.5, false);
|
|
141
|
+
this.drawBox(cmds, 205, 644, 185, 22, 'INSC. ESTADUAL DO SUBST. TRIBUTARIO', emitIeSt, 7.5, false);
|
|
142
|
+
this.drawBox(cmds, 390, 644, 185, 22, 'CNPJ / CPF', emitCnpj, 7.5, true);
|
|
143
|
+
this.drawSectionHeader(cmds, 20, 633, 'DESTINATARIO / REMETENTE');
|
|
144
|
+
this.drawBox(cmds, 20, 609, 340, 22, 'NOME / RAZAO SOCIAL', destNome.slice(0, 64), 7.5, false);
|
|
145
|
+
this.drawBox(cmds, 360, 609, 130, 22, 'CNPJ / CPF', destDoc, 7.5, true);
|
|
146
|
+
this.drawBox(cmds, 490, 609, 85, 22, 'DATA DA EMISSAO', dhEmi.slice(0, 10), 7.5, false);
|
|
147
|
+
this.drawBox(cmds, 20, 587, 270, 22, 'ENDERECO', destEnd.slice(0, 48), 7.5, false);
|
|
148
|
+
this.drawBox(cmds, 290, 587, 120, 22, 'BAIRRO / DISTRITO', destBairro.slice(0, 24), 7.5, false);
|
|
149
|
+
this.drawBox(cmds, 410, 587, 80, 22, 'CEP', destCep, 7.5, false);
|
|
150
|
+
this.drawBox(cmds, 490, 587, 85, 22, 'DATA SAIDA/ENTRADA', dhSaiEnt.slice(0, 10), 7.5, false);
|
|
151
|
+
this.drawBox(cmds, 20, 565, 220, 22, 'MUNICIPIO', destMun, 7.5, false);
|
|
152
|
+
this.drawBox(cmds, 240, 565, 95, 22, 'FONE / FAX', destFone, 7.5, false);
|
|
153
|
+
this.drawBox(cmds, 335, 565, 30, 22, 'UF', destUf, 7.5, false);
|
|
154
|
+
this.drawBox(cmds, 365, 565, 125, 22, 'INSCRICAO ESTADUAL', destIe, 7.5, false);
|
|
155
|
+
this.drawBox(cmds, 490, 565, 85, 22, 'HORA DA SAIDA', dhSaiEnt.slice(11, 19), 7.5, false);
|
|
156
|
+
this.drawSectionHeader(cmds, 20, 554, 'FATURA / PAGAMENTO');
|
|
157
|
+
const tPag = this.getTag(detPag, 'tPag', '01');
|
|
158
|
+
const vPag = this.formatDecimal(this.getTag(detPag, 'vPag', '0.00'));
|
|
159
|
+
this.drawBox(cmds, 20, 530, 185, 22, 'FORMA DE PAGAMENTO', this.getDescricaoPagamento(tPag), 7.5, false);
|
|
160
|
+
this.drawBox(cmds, 205, 530, 185, 22, 'VALOR DO PAGAMENTO (R$)', vPag, 7.5, true);
|
|
161
|
+
this.drawBox(cmds, 390, 530, 185, 22, 'TROCO (R$)', this.formatDecimal(this.getTag(doc.getElementsByTagName('pag')[0], 'vTroco', '0.00')), 7.5, false);
|
|
162
|
+
this.drawSectionHeader(cmds, 20, 519, 'CALCULO DO IMPOSTO');
|
|
163
|
+
this.drawBox(cmds, 20, 495, 70, 22, 'BASE CALC. ICMS', this.formatDecimal(this.getTag(icmsTot, 'vBC', '0.00')), 7.5, false);
|
|
164
|
+
this.drawBox(cmds, 90, 495, 68, 22, 'VALOR DO ICMS', this.formatDecimal(this.getTag(icmsTot, 'vICMS', '0.00')), 7.5, false);
|
|
165
|
+
this.drawBox(cmds, 158, 495, 68, 22, 'BASE CALC. ICMS ST', this.formatDecimal(this.getTag(icmsTot, 'vBCST', '0.00')), 7.5, false);
|
|
166
|
+
this.drawBox(cmds, 226, 495, 68, 22, 'VALOR ICMS SUBST.', this.formatDecimal(this.getTag(icmsTot, 'vST', '0.00')), 7.5, false);
|
|
167
|
+
this.drawBox(cmds, 294, 495, 65, 22, 'V. IMP. IMPORTACAO', this.formatDecimal(this.getTag(icmsTot, 'vII', '0.00')), 7.5, false);
|
|
168
|
+
this.drawBox(cmds, 359, 495, 65, 22, 'VALOR DO FCP', this.formatDecimal(this.getTag(icmsTot, 'vFCP', '0.00')), 7.5, false);
|
|
169
|
+
this.drawBox(cmds, 424, 495, 65, 22, 'VALOR DO PIS', this.formatDecimal(this.getTag(icmsTot, 'vPIS', '0.00')), 7.5, false);
|
|
170
|
+
this.drawBox(cmds, 489, 495, 86, 22, 'V. TOTAL PRODUTOS', this.formatDecimal(this.getTag(icmsTot, 'vProd', '0.00')), 7.5, true);
|
|
171
|
+
this.drawBox(cmds, 20, 473, 70, 22, 'VALOR DO FRETE', this.formatDecimal(this.getTag(icmsTot, 'vFrete', '0.00')), 7.5, false);
|
|
172
|
+
this.drawBox(cmds, 90, 473, 68, 22, 'VALOR DO SEGURO', this.formatDecimal(this.getTag(icmsTot, 'vSeg', '0.00')), 7.5, false);
|
|
173
|
+
this.drawBox(cmds, 158, 473, 68, 22, 'DESCONTO', this.formatDecimal(this.getTag(icmsTot, 'vDesc', '0.00')), 7.5, false);
|
|
174
|
+
this.drawBox(cmds, 226, 473, 68, 22, 'OUTRAS DESPESAS', this.formatDecimal(this.getTag(icmsTot, 'vOutro', '0.00')), 7.5, false);
|
|
175
|
+
this.drawBox(cmds, 294, 473, 65, 22, 'VALOR TOTAL IPI', this.formatDecimal(this.getTag(icmsTot, 'vIPI', '0.00')), 7.5, false);
|
|
176
|
+
this.drawBox(cmds, 359, 473, 65, 22, 'V. APROX. TRIBUTOS', this.formatDecimal(this.getTag(icmsTot, 'vTotTrib', '0.00')), 7.5, false);
|
|
177
|
+
this.drawBox(cmds, 424, 473, 65, 22, 'VALOR DA COFINS', this.formatDecimal(this.getTag(icmsTot, 'vCOFINS', '0.00')), 7.5, false);
|
|
178
|
+
this.drawBox(cmds, 489, 473, 86, 22, 'V. TOTAL DA NOTA', this.formatDecimal(this.getTag(icmsTot, 'vNF', '0.00')), 8.5, true);
|
|
179
|
+
this.drawSectionHeader(cmds, 20, 462, 'TRANSPORTADOR / VOLUMES TRANSPORTADOS');
|
|
180
|
+
const modFrete = this.getTag(transp, 'modFrete', '9');
|
|
181
|
+
this.drawBox(cmds, 20, 438, 210, 22, 'NOME / RAZAO SOCIAL', this.getTag(transporta, 'xNome', ''), 7.5, false);
|
|
182
|
+
this.drawBox(cmds, 230, 438, 95, 22, 'FRETE POR CONTA', this.getDescricaoFrete(modFrete), 7, false);
|
|
183
|
+
this.drawBox(cmds, 325, 438, 65, 22, 'CODIGO ANTT', '', 7.5, false);
|
|
184
|
+
this.drawBox(cmds, 390, 438, 65, 22, 'PLACA DO VEICULO', '', 7.5, false);
|
|
185
|
+
this.drawBox(cmds, 455, 438, 25, 22, 'UF', '', 7.5, false);
|
|
186
|
+
this.drawBox(cmds, 480, 438, 95, 22, 'CNPJ / CPF', this.formatDoc(this.getTag(transporta, 'CNPJ', '')), 7.5, false);
|
|
187
|
+
this.drawBox(cmds, 20, 416, 85, 22, 'QUANTIDADE', this.getTag(vol, 'qVol', ''), 7.5, false);
|
|
188
|
+
this.drawBox(cmds, 105, 416, 110, 22, 'ESPECIE', this.getTag(vol, 'esp', ''), 7.5, false);
|
|
189
|
+
this.drawBox(cmds, 215, 416, 100, 22, 'MARCA', this.getTag(vol, 'marca', ''), 7.5, false);
|
|
190
|
+
this.drawBox(cmds, 315, 416, 90, 22, 'NUMERACAO', this.getTag(vol, 'nVol', ''), 7.5, false);
|
|
191
|
+
this.drawBox(cmds, 405, 416, 85, 22, 'PESO BRUTO', this.getTag(vol, 'pesoB', ''), 7.5, false);
|
|
192
|
+
this.drawBox(cmds, 490, 416, 85, 22, 'PESO LIQUIDO', this.getTag(vol, 'pesoL', ''), 7.5, false);
|
|
193
|
+
this.drawSectionHeader(cmds, 20, 405, 'DADOS DOS PRODUTOS / SERVICOS');
|
|
194
|
+
const headerY = 388;
|
|
195
|
+
const headerH = 14;
|
|
196
|
+
const tableBottomY = 112;
|
|
197
|
+
const tableBodyH = headerY - tableBottomY;
|
|
198
|
+
for (const col of COLUNAS_ITENS) {
|
|
199
|
+
cmds.push(`${col.x} ${headerY} ${col.w} ${headerH} re S`);
|
|
200
|
+
this.drawText(cmds, col.x + 2, headerY + 4, col.label, 5, true);
|
|
201
|
+
cmds.push(`${col.x} ${tableBottomY} ${col.w} ${tableBodyH} re S`);
|
|
202
|
+
}
|
|
203
|
+
let rowY = headerY - 11;
|
|
204
|
+
for (const item of itens) {
|
|
205
|
+
if (rowY < tableBottomY + 8)
|
|
206
|
+
break;
|
|
207
|
+
this.drawText(cmds, 22, rowY, item.cProd.slice(0, 9), 6, false);
|
|
208
|
+
this.drawText(cmds, 64, rowY, item.xProd.slice(0, 36), 6, false);
|
|
209
|
+
this.drawText(cmds, 219, rowY, item.ncm, 6, false);
|
|
210
|
+
this.drawText(cmds, 255, rowY, item.origCsosnCst, 6, false);
|
|
211
|
+
this.drawText(cmds, 283, rowY, item.cfop, 6, false);
|
|
212
|
+
this.drawText(cmds, 307, rowY, item.uCom.slice(0, 4), 6, false);
|
|
213
|
+
this.drawText(cmds, 325, rowY, item.qCom, 6, false);
|
|
214
|
+
this.drawText(cmds, 359, rowY, item.vUnCom, 6, false);
|
|
215
|
+
this.drawText(cmds, 395, rowY, item.vProd, 6, false);
|
|
216
|
+
this.drawText(cmds, 431, rowY, item.vBC, 6, false);
|
|
217
|
+
this.drawText(cmds, 465, rowY, item.vICMS, 6, false);
|
|
218
|
+
this.drawText(cmds, 497, rowY, item.vIPI, 6, false);
|
|
219
|
+
this.drawText(cmds, 525, rowY, item.pICMS, 6, false);
|
|
220
|
+
this.drawText(cmds, 551, rowY, item.pIPI, 6, false);
|
|
221
|
+
cmds.push(`[1 2] 0 d 0.25 w 20 ${rowY - 4} m 575 ${rowY - 4} l S [] 0 d 0.5 w`);
|
|
222
|
+
rowY -= 13;
|
|
223
|
+
}
|
|
224
|
+
if (tpAmb === '2') {
|
|
225
|
+
cmds.push('0.78 g');
|
|
226
|
+
this.drawText(cmds, 115, 245, 'SEM VALOR FISCAL - HOMOLOGACAO', 18, true);
|
|
227
|
+
cmds.push('0 g');
|
|
228
|
+
}
|
|
229
|
+
this.drawSectionHeader(cmds, 20, 100, 'DADOS ADICIONAIS');
|
|
230
|
+
const infCpl = this.getTag(infAdic, 'infCpl', '');
|
|
231
|
+
const textoAdicional = infCpl
|
|
232
|
+
? `${infCpl} | Status SEFAZ: ${cStat} - ${xMotivo}`
|
|
233
|
+
: `Ambiente: ${tpAmb === '2' ? '2 - Homologacao (Sem Valor Fiscal)' : '1 - Producao'} | Status SEFAZ: ${cStat} - ${xMotivo}`;
|
|
234
|
+
this.drawBox(cmds, 20, 40, 370, 57, 'INFORMACOES COMPLEMENTARES', textoAdicional.slice(0, 82), 6.5, false);
|
|
235
|
+
this.drawBox(cmds, 390, 40, 185, 57, 'RESERVADO AO FISCO', '', 6.5, false);
|
|
236
|
+
this.drawText(cmds, 543, 33, 'nfe-lib-node', 5.5, false);
|
|
237
|
+
return this.buildPdfBuffer(cmds.join('\n'));
|
|
238
|
+
}
|
|
239
|
+
static getDescricaoFrete(modFrete) {
|
|
240
|
+
const mapa = {
|
|
241
|
+
'0': '0-Remetente (CIF)',
|
|
242
|
+
'1': '1-Destinatario (FOB)',
|
|
243
|
+
'2': '2-Terceiros',
|
|
244
|
+
'3': '3-Proprio Remet.',
|
|
245
|
+
'4': '4-Proprio Dest.',
|
|
246
|
+
'9': '9-Sem Transporte',
|
|
247
|
+
};
|
|
248
|
+
return mapa[modFrete] ?? modFrete;
|
|
249
|
+
}
|
|
250
|
+
static getDescricaoPagamento(tPag) {
|
|
251
|
+
const mapa = {
|
|
252
|
+
'01': '01 - Dinheiro',
|
|
253
|
+
'02': '02 - Cheque',
|
|
254
|
+
'03': '03 - Cartao de Credito',
|
|
255
|
+
'04': '04 - Cartao de Debito',
|
|
256
|
+
'15': '15 - Boleto Bancario',
|
|
257
|
+
'17': '17 - PIX',
|
|
258
|
+
'90': '90 - Sem Pagamento',
|
|
259
|
+
'99': '99 - Outros',
|
|
260
|
+
};
|
|
261
|
+
return mapa[tPag] ?? `Codigo ${tPag}`;
|
|
262
|
+
}
|
|
263
|
+
static formatDecimal(val) {
|
|
264
|
+
const num = Number(val.replace(',', '.'));
|
|
265
|
+
if (Number.isNaN(num))
|
|
266
|
+
return val;
|
|
267
|
+
return num.toFixed(2).replace('.', ',');
|
|
268
|
+
}
|
|
269
|
+
static getTag(parent, tagName, fallback) {
|
|
270
|
+
if (!parent || typeof parent.getElementsByTagName !== 'function') {
|
|
271
|
+
return fallback;
|
|
272
|
+
}
|
|
273
|
+
const node = parent.getElementsByTagName(tagName)[0];
|
|
274
|
+
return node?.textContent?.trim() || fallback;
|
|
275
|
+
}
|
|
276
|
+
static formatDoc(doc) {
|
|
277
|
+
const digits = doc.replace(/\D/g, '');
|
|
278
|
+
if (digits.length === 14) {
|
|
279
|
+
return digits.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
|
|
280
|
+
}
|
|
281
|
+
if (digits.length === 11) {
|
|
282
|
+
return digits.replace(/^(\d{3})(\d{3})(\d{3})(\d{2})$/, '$1.$2.$3-$4');
|
|
283
|
+
}
|
|
284
|
+
return doc;
|
|
285
|
+
}
|
|
286
|
+
static formatDateTime(iso) {
|
|
287
|
+
if (!iso || iso.length < 19)
|
|
288
|
+
return iso;
|
|
289
|
+
const datePart = `${iso.slice(8, 10)}/${iso.slice(5, 7)}/${iso.slice(0, 4)}`;
|
|
290
|
+
const timePart = iso.slice(11, 19);
|
|
291
|
+
return `${datePart} ${timePart}`;
|
|
292
|
+
}
|
|
293
|
+
static drawSectionHeader(cmds, x, y, title) {
|
|
294
|
+
this.drawText(cmds, x, y, title, 6, true);
|
|
295
|
+
}
|
|
296
|
+
static drawBox(cmds, x, y, w, h, label, value = '', valueSize = 7.5, boldValue = false) {
|
|
297
|
+
cmds.push(`${x} ${y} ${w} ${h} re S`);
|
|
298
|
+
if (label) {
|
|
299
|
+
this.drawText(cmds, x + 2.5, y + h - 6.5, label, 5, false);
|
|
300
|
+
}
|
|
301
|
+
if (value) {
|
|
302
|
+
this.drawText(cmds, x + 2.5, y + 4.5, value, valueSize, boldValue);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
static drawText(cmds, x, y, text, size, bold) {
|
|
306
|
+
const font = bold ? '/F2' : '/F1';
|
|
307
|
+
const escaped = this.escapePdfText(text);
|
|
308
|
+
cmds.push(`BT ${font} ${size} Tf ${x} ${y} Td (${escaped}) Tj ET`);
|
|
309
|
+
}
|
|
310
|
+
static escapePdfText(text) {
|
|
311
|
+
return text
|
|
312
|
+
.normalize('NFD')
|
|
313
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
314
|
+
.replace(/\\/g, '\\\\')
|
|
315
|
+
.replace(/\(/g, '\\(')
|
|
316
|
+
.replace(/\)/g, '\\)');
|
|
317
|
+
}
|
|
318
|
+
static drawCode128C(cmds, digits, x, y, width, height) {
|
|
319
|
+
const clean = digits.replace(/\D/g, '').padStart(44, '0').slice(0, 44);
|
|
320
|
+
const codes = [105];
|
|
321
|
+
let checksum = 105;
|
|
322
|
+
for (let i = 0; i < clean.length; i += 2) {
|
|
323
|
+
const pairVal = parseInt(clean.slice(i, i + 2), 10);
|
|
324
|
+
codes.push(pairVal);
|
|
325
|
+
checksum += pairVal * (i / 2 + 1);
|
|
326
|
+
}
|
|
327
|
+
codes.push(checksum % 103);
|
|
328
|
+
codes.push(106);
|
|
329
|
+
const patterns = codes.map((c) => CODE128_PATTERNS[c] ?? '212222');
|
|
330
|
+
const totalModules = patterns.reduce((acc, p) => acc + p.split('').reduce((s, d) => s + Number(d), 0), 0);
|
|
331
|
+
const moduleWidth = width / totalModules;
|
|
332
|
+
let cursorX = x;
|
|
333
|
+
for (const pattern of patterns) {
|
|
334
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
335
|
+
const modCount = Number(pattern[i] ?? '1');
|
|
336
|
+
const barW = modCount * moduleWidth;
|
|
337
|
+
if (i % 2 === 0) {
|
|
338
|
+
cmds.push(`${cursorX.toFixed(2)} ${y.toFixed(2)} ${barW.toFixed(2)} ${height.toFixed(2)} re f`);
|
|
339
|
+
}
|
|
340
|
+
cursorX += barW;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
static buildPdfBuffer(contentStream) {
|
|
345
|
+
const streamBytes = Buffer.byteLength(contentStream, 'latin1');
|
|
346
|
+
const objects = [
|
|
347
|
+
'1 0 obj\n<< /Type /Catalog /Pages 2 0 R >>\nendobj\n',
|
|
348
|
+
'2 0 obj\n<< /Type /Pages /Kids [3 0 R] /Count 1 >>\nendobj\n',
|
|
349
|
+
'3 0 obj\n<< /Type /Page /Parent 2 0 R /MediaBox [0 0 595.28 841.89] /Resources << /Font << /F1 4 0 R /F2 5 0 R >> >> /Contents 6 0 R >>\nendobj\n',
|
|
350
|
+
'4 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >>\nendobj\n',
|
|
351
|
+
'5 0 obj\n<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >>\nendobj\n',
|
|
352
|
+
`6 0 obj\n<< /Length ${streamBytes} >>\nstream\n${contentStream}\nendstream\nendobj\n`,
|
|
353
|
+
];
|
|
354
|
+
let pdf = '%PDF-1.4\n';
|
|
355
|
+
const offsets = [0];
|
|
356
|
+
for (const obj of objects) {
|
|
357
|
+
offsets.push(Buffer.byteLength(pdf, 'latin1'));
|
|
358
|
+
pdf += obj;
|
|
359
|
+
}
|
|
360
|
+
const xrefStart = Buffer.byteLength(pdf, 'latin1');
|
|
361
|
+
pdf += `xref\n0 ${objects.length + 1}\n`;
|
|
362
|
+
pdf += '0000000000 65535 f \n';
|
|
363
|
+
for (let i = 1; i <= objects.length; i++) {
|
|
364
|
+
const offset = offsets[i] ?? 0;
|
|
365
|
+
pdf += `${String(offset).padStart(10, '0')} 00000 n \n`;
|
|
366
|
+
}
|
|
367
|
+
pdf += `trailer\n<< /Size ${objects.length + 1} /Root 1 0 R >>\nstartxref\n${xrefStart}\n%%EOF\n`;
|
|
368
|
+
return Buffer.from(pdf, 'latin1');
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=Danfe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Danfe.js","sourceRoot":"","sources":["../src/Danfe.ts"],"names":[],"mappings":"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"}
|
package/dist/NFe.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Certificado } from './Certificado.js';
|
|
2
|
+
import type { DadosNFe, RetornoSefaz } from './types.js';
|
|
3
|
+
import { type AmbienteSefaz, type AutorizadorSefaz, type ServicoSefaz, type SiglaUF } from './webservices.js';
|
|
4
|
+
export type { AmbienteSefaz } from './webservices.js';
|
|
5
|
+
export interface ConfiguracaoNFe {
|
|
6
|
+
uf: SiglaUF | (string & {});
|
|
7
|
+
ambiente: AmbienteSefaz;
|
|
8
|
+
certificado: Certificado;
|
|
9
|
+
contingencia?: boolean | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare class NFe {
|
|
12
|
+
private config;
|
|
13
|
+
private assinador;
|
|
14
|
+
constructor(config: ConfiguracaoNFe);
|
|
15
|
+
getAutorizador(): AutorizadorSefaz;
|
|
16
|
+
getUrl(servico: ServicoSefaz): string;
|
|
17
|
+
getCodigoUF(): string;
|
|
18
|
+
consultarStatus(): Promise<RetornoSefaz>;
|
|
19
|
+
/**
|
|
20
|
+
* Recebe os dados da NFe em formato JS/JSON, converte para XML, assina e envia.
|
|
21
|
+
*/
|
|
22
|
+
emitir(dadosNFe: DadosNFe): Promise<RetornoSefaz>;
|
|
23
|
+
private enviarSoap;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=NFe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NFe.d.ts","sourceRoot":"","sources":["../src/NFe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAY;IAE7B,YAAY,MAAM,EAAE,eAAe,EAGlC;IAEM,cAAc,IAAI,gBAAgB,CAExC;IAEM,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAO3C;IAEM,WAAW,IAAI,MAAM,CAE3B;IAEY,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAOpD;IAED;;OAEG;IACU,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA8B7D;YAEa,UAAU;CAmCzB"}
|
package/dist/NFe.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { Assinador } from './Assinador.js';
|
|
3
|
+
import { create } from 'xmlbuilder2';
|
|
4
|
+
import { DOMParser } from '@xmldom/xmldom';
|
|
5
|
+
import { obterAutorizadorPorUF, obterCodigoUF, obterUrlSefaz, } from './webservices.js';
|
|
6
|
+
export class NFe {
|
|
7
|
+
config;
|
|
8
|
+
assinador;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.assinador = new Assinador(config.certificado);
|
|
12
|
+
}
|
|
13
|
+
getAutorizador() {
|
|
14
|
+
return obterAutorizadorPorUF(this.config.uf, this.config.contingencia ?? false);
|
|
15
|
+
}
|
|
16
|
+
getUrl(servico) {
|
|
17
|
+
return obterUrlSefaz(this.config.uf, this.config.ambiente, servico, this.config.contingencia ?? false);
|
|
18
|
+
}
|
|
19
|
+
getCodigoUF() {
|
|
20
|
+
return obterCodigoUF(this.config.uf);
|
|
21
|
+
}
|
|
22
|
+
async consultarStatus() {
|
|
23
|
+
const url = this.getUrl('status');
|
|
24
|
+
const tpAmb = this.config.ambiente === 'producao' ? '1' : '2';
|
|
25
|
+
const xmlBody = `<?xml version="1.0" encoding="UTF-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4"><consStatServ versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>${tpAmb}</tpAmb><cUF>${this.getCodigoUF()}</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg></soap12:Body></soap12:Envelope>`;
|
|
26
|
+
return this.enviarSoap(url, xmlBody);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Recebe os dados da NFe em formato JS/JSON, converte para XML, assina e envia.
|
|
30
|
+
*/
|
|
31
|
+
async emitir(dadosNFe) {
|
|
32
|
+
const idLote = Math.floor(Math.random() * 1000000).toString();
|
|
33
|
+
// 1. Gera o XML da nota a partir do objeto passado pelo usuário
|
|
34
|
+
const xmlNFeStr = create({ NFe: { '@xmlns': 'http://www.portalfiscal.inf.br/nfe', ...dadosNFe } }).end({ prettyPrint: false });
|
|
35
|
+
// 2. Assina o XML
|
|
36
|
+
console.log('Assinando o XML...');
|
|
37
|
+
const xmlAssinado = xmlCruFormatado(this.assinador.assinarXmlNFe(xmlCruFormatado(xmlNFeStr)));
|
|
38
|
+
// 3. Monta o Lote (SOAP)
|
|
39
|
+
// A SEFAZ rejeita espaços em branco, quebras de linha ou comentários dentro da tag enviNFe (Erro 588)
|
|
40
|
+
const xmlBody = `<?xml version="1.0" encoding="UTF-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4"><enviNFe versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"><idLote>${idLote}</idLote><indSinc>1</indSinc>${xmlAssinado}</enviNFe></nfeDadosMsg></soap12:Body></soap12:Envelope>`;
|
|
41
|
+
// 4. Envia
|
|
42
|
+
console.log('Enviando para a SEFAZ...');
|
|
43
|
+
const retorno = await this.enviarSoap(this.getUrl('autorizacao'), xmlBody);
|
|
44
|
+
const docRetorno = new DOMParser().parseFromString(retorno.xml, 'text/xml');
|
|
45
|
+
const protNFeNode = docRetorno.getElementsByTagName('protNFe')[0];
|
|
46
|
+
const xmlNfeProc = protNFeNode
|
|
47
|
+
? `<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">${xmlAssinado}${protNFeNode.toString()}</nfeProc>`
|
|
48
|
+
: undefined;
|
|
49
|
+
return {
|
|
50
|
+
...retorno,
|
|
51
|
+
xmlAssinado,
|
|
52
|
+
xmlNfeProc,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async enviarSoap(url, xmlBody) {
|
|
56
|
+
const agent = this.config.certificado.getHttpsAgent();
|
|
57
|
+
try {
|
|
58
|
+
const response = await axios.post(url, xmlBody, {
|
|
59
|
+
httpsAgent: agent,
|
|
60
|
+
headers: { 'Content-Type': 'application/soap+xml; charset=utf-8' },
|
|
61
|
+
});
|
|
62
|
+
const xmlStr = response.data;
|
|
63
|
+
const doc = new DOMParser().parseFromString(xmlStr, 'text/xml');
|
|
64
|
+
// Tenta pegar o cStat do protocolo primeiro (resultado da nota individual)
|
|
65
|
+
let cStatNode = doc.getElementsByTagName('infProt')[0]?.getElementsByTagName('cStat')[0];
|
|
66
|
+
let xMotivoNode = doc.getElementsByTagName('infProt')[0]?.getElementsByTagName('xMotivo')[0];
|
|
67
|
+
// Se não tiver protocolo, pega o cStat geral do lote ou do status de serviço
|
|
68
|
+
if (!cStatNode) {
|
|
69
|
+
cStatNode = doc.getElementsByTagName('cStat')[0];
|
|
70
|
+
xMotivoNode = doc.getElementsByTagName('xMotivo')[0];
|
|
71
|
+
}
|
|
72
|
+
const status = cStatNode && cStatNode.textContent ? parseInt(cStatNode.textContent, 10) : 0;
|
|
73
|
+
const motivo = xMotivoNode && xMotivoNode.textContent ? xMotivoNode.textContent : 'Retorno não identificado';
|
|
74
|
+
// 100 = Autorizado, 104 = Lote Processado, 107 = Serviço em Operação
|
|
75
|
+
const sucesso = status === 100 || status === 104 || status === 107;
|
|
76
|
+
return { sucesso, status, motivo, xml: xmlStr };
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.response) {
|
|
80
|
+
throw new Error(`Erro na SEFAZ: HTTP ${error.response.status} - ${error.response.data}`);
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function xmlCruFormatado(xml) {
|
|
87
|
+
// Evita declarações duplicadas do xmlbuilder2 se houver
|
|
88
|
+
return xml.replace(/^<\?xml[^?]*\?>\s*/i, '').trim();
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=NFe.js.map
|
package/dist/NFe.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NFe.js","sourceRoot":"","sources":["../src/NFe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type SiglaUF } from './webservices.js';
|
|
2
|
+
export interface ParametrosChaveAcesso {
|
|
3
|
+
/** Sigla da UF (ex: 'SP', 'DF') ou código IBGE de 2 dígitos (ex: '35', '53') */
|
|
4
|
+
uf: SiglaUF | (string & {});
|
|
5
|
+
/** Data de emissão (Date, string ISO 'YYYY-MM-DD...' ou 'AAMM') */
|
|
6
|
+
dataEmissao: Date | string;
|
|
7
|
+
/** CNPJ (14 dígitos) ou CPF (11 dígitos) do emitente */
|
|
8
|
+
cnpjOuCpf: string;
|
|
9
|
+
/** Modelo do documento fiscal ('55' para NF-e, '65' para NFC-e). Padrão: '55' */
|
|
10
|
+
modelo?: '55' | '65' | number | string | undefined;
|
|
11
|
+
/** Série do documento fiscal (1 a 3 dígitos) */
|
|
12
|
+
serie: number | string;
|
|
13
|
+
/** Número da NF-e (1 a 9 dígitos) */
|
|
14
|
+
numero: number | string;
|
|
15
|
+
/** Tipo de emissão (1 = Normal, 6 = SVC-AN, 7 = SVC-RS, 9 = Offline, etc.) */
|
|
16
|
+
tpEmis: number | string;
|
|
17
|
+
/** Código numérico aleatório de 8 dígitos que compõe a chave (cNF) */
|
|
18
|
+
cNF: number | string;
|
|
19
|
+
}
|
|
20
|
+
export interface ResultadoChaveAcesso {
|
|
21
|
+
/** Chave de acesso completa com 44 dígitos numéricos */
|
|
22
|
+
chave: string;
|
|
23
|
+
/** Dígito verificador calculado em Módulo 11 (1 dígito) */
|
|
24
|
+
cDV: string;
|
|
25
|
+
/** Identificador para a tag `<infNFe Id="NFe...">` */
|
|
26
|
+
id: `NFe${string}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Calcula o dígito verificador (cDV) em Módulo 11 a partir dos 43 primeiros dígitos da chave.
|
|
30
|
+
*/
|
|
31
|
+
export declare function calcularDigitoVerificador(chave43: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* Gera a chave de acesso de 44 dígitos da NF-e/NFC-e e seu dígito verificador (cDV).
|
|
34
|
+
*/
|
|
35
|
+
export declare function gerarChaveAcesso(params: ParametrosChaveAcesso): ResultadoChaveAcesso;
|
|
36
|
+
/**
|
|
37
|
+
* Valida se uma chave de acesso (com ou sem o prefixo 'NFe') possui 44 dígitos e cDV válido.
|
|
38
|
+
*/
|
|
39
|
+
export declare function validarChaveAcesso(chaveOuId: string): boolean;
|
|
40
|
+
//# sourceMappingURL=chaveAcesso.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chaveAcesso.d.ts","sourceRoot":"","sources":["../src/chaveAcesso.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,EAAE,EAAE,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5B,mEAAmE;IACnE,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC;IAC3B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,gDAAgD;IAChD,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,qCAAqC;IACrC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,sEAAsE;IACtE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,EAAE,EAAE,MAAM,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CA8BpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO7D"}
|