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.
@@ -0,0 +1,83 @@
1
+ import { obterCodigoUF } from './webservices.js';
2
+ /**
3
+ * Calcula o dígito verificador (cDV) em Módulo 11 a partir dos 43 primeiros dígitos da chave.
4
+ */
5
+ export function calcularDigitoVerificador(chave43) {
6
+ const limpa = chave43.replace(/\D/g, '');
7
+ if (limpa.length !== 43) {
8
+ throw new Error(`A base da chave de acesso deve conter exatamente 43 dígitos (recebido: ${limpa.length}).`);
9
+ }
10
+ let peso = 2;
11
+ let soma = 0;
12
+ for (let i = 42; i >= 0; i--) {
13
+ const digito = Number(limpa[i]);
14
+ soma += digito * peso;
15
+ peso = peso === 9 ? 2 : peso + 1;
16
+ }
17
+ const resto = soma % 11;
18
+ const dv = resto === 0 || resto === 1 ? 0 : 11 - resto;
19
+ return String(dv);
20
+ }
21
+ /**
22
+ * Gera a chave de acesso de 44 dígitos da NF-e/NFC-e e seu dígito verificador (cDV).
23
+ */
24
+ export function gerarChaveAcesso(params) {
25
+ const ufTrim = params.uf.trim();
26
+ const cUF = /^\d{2}$/.test(ufTrim) ? ufTrim : obterCodigoUF(ufTrim);
27
+ const aamm = extrairAnoMes(params.dataEmissao);
28
+ const docLimpo = params.cnpjOuCpf.replace(/\D/g, '');
29
+ if (docLimpo.length !== 11 && docLimpo.length !== 14) {
30
+ throw new Error('O CNPJ/CPF do emitente deve conter 11 (CPF) ou 14 (CNPJ) dígitos.');
31
+ }
32
+ const cnpj = docLimpo.padStart(14, '0');
33
+ const mod = String(params.modelo ?? '55').padStart(2, '0');
34
+ const serie = String(params.serie).replace(/\D/g, '').padStart(3, '0');
35
+ const nNF = String(params.numero).replace(/\D/g, '').padStart(9, '0');
36
+ const tpEmis = String(params.tpEmis).replace(/\D/g, '');
37
+ const cNF = String(params.cNF).replace(/\D/g, '').padStart(8, '0');
38
+ if (tpEmis.length !== 1) {
39
+ throw new Error('O tipo de emissão (tpEmis) deve conter exatamente 1 dígito.');
40
+ }
41
+ const base43 = `${cUF}${aamm}${cnpj}${mod}${serie}${nNF}${tpEmis}${cNF}`;
42
+ const cDV = calcularDigitoVerificador(base43);
43
+ const chave = `${base43}${cDV}`;
44
+ return {
45
+ chave,
46
+ cDV,
47
+ id: `NFe${chave}`,
48
+ };
49
+ }
50
+ /**
51
+ * Valida se uma chave de acesso (com ou sem o prefixo 'NFe') possui 44 dígitos e cDV válido.
52
+ */
53
+ export function validarChaveAcesso(chaveOuId) {
54
+ const limpa = chaveOuId.trim().replace(/^NFe/i, '');
55
+ if (!/^\d{44}$/.test(limpa)) {
56
+ return false;
57
+ }
58
+ const dvEsperado = calcularDigitoVerificador(limpa.slice(0, 43));
59
+ return limpa[43] === dvEsperado;
60
+ }
61
+ function extrairAnoMes(data) {
62
+ if (data instanceof Date) {
63
+ const ano = String(data.getFullYear()).slice(-2);
64
+ const mes = String(data.getMonth() + 1).padStart(2, '0');
65
+ return `${ano}${mes}`;
66
+ }
67
+ const str = data.trim();
68
+ if (/^\d{4}$/.test(str)) {
69
+ return str;
70
+ }
71
+ const matchIso = str.match(/^(\d{4})-(\d{2})/);
72
+ if (matchIso?.[1] && matchIso[2]) {
73
+ return `${matchIso[1].slice(-2)}${matchIso[2]}`;
74
+ }
75
+ const parsed = new Date(str);
76
+ if (!Number.isNaN(parsed.getTime())) {
77
+ const ano = String(parsed.getFullYear()).slice(-2);
78
+ const mes = String(parsed.getMonth() + 1).padStart(2, '0');
79
+ return `${ano}${mes}`;
80
+ }
81
+ throw new Error(`Formato de dataEmissao inválido: "${data}". Use Date, string ISO ou 'AAMM'.`);
82
+ }
83
+ //# sourceMappingURL=chaveAcesso.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chaveAcesso.js","sourceRoot":"","sources":["../src/chaveAcesso.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { NFe } from './NFe.js';
2
+ export type { ConfiguracaoNFe, AmbienteSefaz } from './NFe.js';
3
+ export { Certificado } from './Certificado.js';
4
+ export type { DadosCertificado } from './Certificado.js';
5
+ export { Assinador } from './Assinador.js';
6
+ export { Danfe } from './Danfe.js';
7
+ export { AUTORIZADOR_CONTINGENCIA_POR_UF, AUTORIZADOR_POR_UF, CODIGOS_UF, URLS_SEFAZ, normalizarUF, obterAutorizadorPorUF, obterCodigoUF, obterUrlSefaz, } from './webservices.js';
8
+ export type { AutorizadorSefaz, MapaServicosSefaz, ServicoSefaz, SiglaUF, } from './webservices.js';
9
+ export { calcularDigitoVerificador, gerarChaveAcesso, validarChaveAcesso, } from './chaveAcesso.js';
10
+ export type { ParametrosChaveAcesso, ResultadoChaveAcesso, } from './chaveAcesso.js';
11
+ export type * from './types.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,OAAO,GACR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export { NFe } from './NFe.js';
2
+ export { Certificado } from './Certificado.js';
3
+ export { Assinador } from './Assinador.js';
4
+ export { Danfe } from './Danfe.js';
5
+ export { AUTORIZADOR_CONTINGENCIA_POR_UF, AUTORIZADOR_POR_UF, CODIGOS_UF, URLS_SEFAZ, normalizarUF, obterAutorizadorPorUF, obterCodigoUF, obterUrlSefaz, } from './webservices.js';
6
+ export { calcularDigitoVerificador, gerarChaveAcesso, validarChaveAcesso, } from './chaveAcesso.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,+BAA+B,EAC/B,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}