ghinfe 0.6.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.
Files changed (80) hide show
  1. package/.env.example +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +413 -0
  4. package/docs/developer-guide.html +421 -0
  5. package/docs/openapi.yaml +428 -0
  6. package/examples/emitir-nfce.js +51 -0
  7. package/examples/emitir-nfe.js +83 -0
  8. package/examples/emitir-nfse.js +46 -0
  9. package/examples/endpoints-sefaz.js +14 -0
  10. package/examples/eventos-nfe.js +49 -0
  11. package/examples/gerar-chave.js +25 -0
  12. package/examples/gerar-danfe.js +75 -0
  13. package/examples/layouts-nfse.js +51 -0
  14. package/examples/mock-sefaz.js +52 -0
  15. package/examples/nfse-eventos.js +57 -0
  16. package/examples/reforma-ibscbs.js +27 -0
  17. package/examples/reforma-nfe-xml.js +52 -0
  18. package/examples/status-sefaz.js +12 -0
  19. package/examples/validar-xsd.js +48 -0
  20. package/package.json +68 -0
  21. package/schemas/nfe/PL_009_V4/consReciNFe_v4.00.xsd +9 -0
  22. package/schemas/nfe/PL_009_V4/consSitNFe_v4.00.xsd +9 -0
  23. package/schemas/nfe/PL_009_V4/consStatServ_v4.00.xsd +9 -0
  24. package/schemas/nfe/PL_009_V4/enviNFe_v3.10.xsd +9 -0
  25. package/schemas/nfe/PL_009_V4/enviNFe_v4.00.xsd +9 -0
  26. package/schemas/nfe/PL_009_V4/inutNFe_v4.00.xsd +9 -0
  27. package/schemas/nfe/PL_009_V4/leiauteNFe_v4.00.xsd +7339 -0
  28. package/schemas/nfe/PL_009_V4/nfe_v4.00.xsd +9 -0
  29. package/schemas/nfe/PL_009_V4/tiposBasico_v4.00.xsd +598 -0
  30. package/schemas/nfe/PL_009_V4/xmldsig-core-schema_v1.01.xsd +98 -0
  31. package/scripts/download-schemas.js +39 -0
  32. package/scripts/test-xsd.js +34 -0
  33. package/src/api/server.js +316 -0
  34. package/src/constants/sefaz.js +69 -0
  35. package/src/danfe/DanfeService.js +205 -0
  36. package/src/danfe/xml-extract.js +69 -0
  37. package/src/errors/GhinfeError.js +13 -0
  38. package/src/errors/SefazError.js +25 -0
  39. package/src/errors/XsdValidationError.js +15 -0
  40. package/src/index.js +60 -0
  41. package/src/nfce/builders/NFCeXmlBuilder.js +178 -0
  42. package/src/nfce/constants/qrcode.js +26 -0
  43. package/src/nfce/services/NFCeService.js +188 -0
  44. package/src/nfce/services/NFCeXmlService.js +38 -0
  45. package/src/nfce/types/NFCeDocument.js +42 -0
  46. package/src/nfce/utils/qrcode.utils.js +92 -0
  47. package/src/nfe/builders/NFeEventoXmlBuilder.js +110 -0
  48. package/src/nfe/builders/NFeXmlBuilder.js +215 -0
  49. package/src/nfe/mocks/sefaz-responses.js +195 -0
  50. package/src/nfe/services/NFeEventoService.js +95 -0
  51. package/src/nfe/services/NFeService.js +196 -0
  52. package/src/nfe/services/NFeSignService.js +111 -0
  53. package/src/nfe/services/NFeSoapService.js +437 -0
  54. package/src/nfe/services/NFeXmlService.js +41 -0
  55. package/src/nfe/services/NFeXsdService.js +56 -0
  56. package/src/nfe/types/NFeDocument.js +92 -0
  57. package/src/nfe/types/NFeEvento.js +44 -0
  58. package/src/nfse/NFSeMunicipioResolver.js +42 -0
  59. package/src/nfse/builders/NFSeEventoXmlBuilder.js +92 -0
  60. package/src/nfse/builders/NFSeXmlBuilder.js +16 -0
  61. package/src/nfse/constants/municipios.js +82 -0
  62. package/src/nfse/layouts/adapters.js +202 -0
  63. package/src/nfse/mocks/nfse-responses.js +142 -0
  64. package/src/nfse/services/NFSeService.js +191 -0
  65. package/src/nfse/services/NFSeSoapService.js +232 -0
  66. package/src/nfse/services/NFSeXmlService.js +12 -0
  67. package/src/nfse/types/NFSeDocument.js +54 -0
  68. package/src/queue/NFCeQueue.js +63 -0
  69. package/src/queue/NFSeQueue.js +59 -0
  70. package/src/queue/NFeQueue.js +76 -0
  71. package/src/reforma/ibscbs.js +175 -0
  72. package/src/sefaz/SefazEndpointResolver.js +95 -0
  73. package/src/sefaz/endpoints.registry.js +205 -0
  74. package/src/shared/fiscal.helpers.js +53 -0
  75. package/src/utils/certificate.utils.js +47 -0
  76. package/src/utils/chave.utils.js +117 -0
  77. package/src/utils/date.utils.js +26 -0
  78. package/src/utils/xml.utils.js +44 -0
  79. package/src/validation/XsdValidator.js +114 -0
  80. package/src/validation/schemas.js +14 -0
@@ -0,0 +1,75 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { NFeService, NFCeService, DanfeService } from '../src/index.js';
5
+
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ const outDir = path.join(__dirname, '../tmp');
8
+ fs.mkdirSync(outDir, { recursive: true });
9
+
10
+ const danfe = new DanfeService();
11
+
12
+ const nfeDoc = {
13
+ ambiente: 2,
14
+ ide: { uf: 'SP', codigoMunicipio: '3550308', serie: 1, numero: 50 },
15
+ emitente: {
16
+ cnpj: '12345678000199',
17
+ razaoSocial: 'EMPRESA EXEMPLO LTDA',
18
+ ie: '123456789012',
19
+ crt: '3',
20
+ endereco: {
21
+ logradouro: 'Rua Exemplo', numero: '100', bairro: 'Centro',
22
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01001000',
23
+ },
24
+ },
25
+ destinatario: {
26
+ cpf: '12345678909',
27
+ razaoSocial: 'CONSUMIDOR FINAL',
28
+ indIEDest: 9,
29
+ endereco: {
30
+ logradouro: 'Rua B', numero: '2', bairro: 'Centro',
31
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01001000',
32
+ },
33
+ },
34
+ itens: [{
35
+ codigo: '001', descricao: 'PRODUTO DANFE', ncm: '84713012', cfop: '5102',
36
+ unidade: 'UN', quantidade: 2, valorUnitario: 50, valorTotal: 100,
37
+ }],
38
+ frete: { modalidade: 9 },
39
+ pagamentos: [{ forma: '01', valor: 100 }],
40
+ };
41
+
42
+ const nfeService = new NFeService({ mock: true });
43
+ const nfeResolved = nfeService.resolverDocumento(nfeDoc);
44
+ const xmlNfe = nfeService.gerarXml(nfeResolved);
45
+ const { html: htmlDanfe } = await danfe.gerarDanfe(xmlNfe, { protocolo: '135260000000001' });
46
+ const danfePath = path.join(outDir, 'danfe.html');
47
+ fs.writeFileSync(danfePath, htmlDanfe);
48
+
49
+ const nfceDoc = {
50
+ ambiente: 2,
51
+ ide: { uf: 'SP', codigoMunicipio: '3550308', serie: 1, numero: 7 },
52
+ emitente: nfeDoc.emitente,
53
+ destinatario: { cpf: '12345678909', razaoSocial: 'CONSUMIDOR' },
54
+ itens: [{
55
+ codigo: '001', descricao: 'PRODUTO NFC-E', ncm: '22021000', cfop: '5102',
56
+ unidade: 'UN', quantidade: 1, valorUnitario: 15, valorTotal: 15,
57
+ }],
58
+ pagamentos: [{ forma: '01', valor: 15 }],
59
+ csc: { idCSC: '000001', codigo: 'CSC-EXEMPLO' },
60
+ };
61
+
62
+ const nfceService = new NFCeService({ mock: true });
63
+ const nfceResolved = nfceService.resolverDocumento(nfceDoc);
64
+ const xmlNfce = nfceService.gerarXml(nfceResolved);
65
+ const { html: htmlDanfce } = await danfe.gerarDanfce(xmlNfce, {
66
+ protocolo: '135260000000099',
67
+ qrCodeUrl: 'https://www.homologacao.nfce.fazenda.sp.gov.br/consulta?p=EXEMPLO',
68
+ });
69
+ const danfcePath = path.join(outDir, 'danfce.html');
70
+ fs.writeFileSync(danfcePath, htmlDanfce);
71
+
72
+ console.log('=== GHINFE — DANFE / DANFCE ===\n');
73
+ console.log('DANFE →', danfePath);
74
+ console.log('DANFCE →', danfcePath);
75
+ console.log('\nAbra os HTML no navegador e use Imprimir / Salvar PDF.');
@@ -0,0 +1,51 @@
1
+ import { NFSeService, NFSE_LAYOUTS, NFSeMunicipioResolver } from '../src/index.js';
2
+
3
+ const documento = {
4
+ numero: 10,
5
+ serie: 'NF',
6
+ ambiente: 2,
7
+ codigoMunicipio: '3550308',
8
+ cnpjPrestador: '12345678000199',
9
+ inscricaoMunicipal: '12345678',
10
+ optanteSimplesNacional: 1,
11
+ servico: {
12
+ itemListaServico: '01.01',
13
+ discriminacao: 'Consultoria em software',
14
+ codigoMunicipio: '3550308',
15
+ valorServicos: 500,
16
+ aliquotaIss: 5,
17
+ valorIss: 25,
18
+ },
19
+ tomador: {
20
+ cnpj: '98765432000100',
21
+ razaoSocial: 'CLIENTE EXEMPLO LTDA',
22
+ endereco: {
23
+ logradouro: 'Rua A',
24
+ numero: '10',
25
+ bairro: 'Centro',
26
+ codigoMunicipio: '3550308',
27
+ uf: 'SP',
28
+ cep: '01001000',
29
+ },
30
+ },
31
+ };
32
+
33
+ console.log('=== GHINFE — Layouts NFS-e municipais ===\n');
34
+
35
+ for (const layout of Object.values(NFSE_LAYOUTS)) {
36
+ const service = new NFSeService({ mock: true, layout });
37
+ const xml = service.gerarXml(documento, layout);
38
+ const root = xml.match(/<([A-Za-z]+)[\s>]/)?.[1];
39
+ console.log(`${layout.padEnd(8)} → raiz <${root}> (${xml.length} bytes)`);
40
+ }
41
+
42
+ console.log('\nMunicípios pré-cadastrados:');
43
+ for (const ibge of NFSeMunicipioResolver.listarMunicipios()) {
44
+ if (ibge === 'mock') continue;
45
+ const info = NFSeMunicipioResolver.resolver(ibge, 2);
46
+ console.log(` ${ibge} ${info.nome} [${info.layout}]`);
47
+ }
48
+
49
+ console.log('\nEmissão mock (ABRASF):');
50
+ const resultado = await new NFSeService({ mock: true }).emitir(documento);
51
+ console.log(` NFS-e ${resultado.retorno.numeroNfse} — verificação ${resultado.retorno.codigoVerificacao}`);
@@ -0,0 +1,52 @@
1
+ import { NFeService } from '../src/index.js';
2
+ import { SefazError } from '../src/errors/SefazError.js';
3
+
4
+ const documentoBase = {
5
+ chaveAcesso: '35260712345678000199550010000000021000000021',
6
+ ambiente: 2,
7
+ ide: { uf: 'SP', codigoMunicipio: '3550308', serie: 1, numero: 2 },
8
+ emitente: {
9
+ cnpj: '12345678000199',
10
+ razaoSocial: 'EMPRESA EXEMPLO LTDA',
11
+ ie: '123456789012',
12
+ crt: '3',
13
+ endereco: {
14
+ logradouro: 'Rua Exemplo', numero: '1', bairro: 'Centro',
15
+ codigoMunicipio: '3550308', municipio: 'São Paulo', uf: 'SP', cep: '01001000',
16
+ },
17
+ },
18
+ destinatario: {
19
+ cpf: '12345678909',
20
+ razaoSocial: 'CONSUMIDOR FINAL',
21
+ indIEDest: 9,
22
+ endereco: {
23
+ logradouro: 'Rua B', numero: '2', bairro: 'Centro',
24
+ codigoMunicipio: '3550308', municipio: 'São Paulo', uf: 'SP', cep: '01001000',
25
+ },
26
+ },
27
+ itens: [{
28
+ codigo: '001', descricao: 'PRODUTO TESTE', ncm: '84713012', cfop: '5102',
29
+ unidade: 'UN', quantidade: 1, valorUnitario: 50, valorTotal: 50,
30
+ }],
31
+ };
32
+
33
+ const cenarios = ['autorizado', 'duplicidade', 'schema', 'certificado', 'paralisado'];
34
+
35
+ console.log('=== GHINFE — Mock SEFAZ — Cenários de retorno ===\n');
36
+
37
+ for (const cenario of cenarios) {
38
+ const service = new NFeService({ mock: true, mockScenario: cenario });
39
+ const xml = service.gerarXml(documentoBase);
40
+
41
+ try {
42
+ const retorno = await service.enviar(xml, documentoBase.chaveAcesso);
43
+ console.log(`[${cenario}] cStat=${retorno.cStat} — ${retorno.xMotivo}`);
44
+ if (retorno.protocolo) console.log(` Protocolo: ${retorno.protocolo}`);
45
+ } catch (error) {
46
+ if (error instanceof SefazError) {
47
+ console.log(`[${cenario}] REJEIÇÃO cStat=${error.cStat} — ${error.xMotivo}`);
48
+ } else {
49
+ throw error;
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,57 @@
1
+ import { NFSeService } from '../src/index.js';
2
+
3
+ const basePrestador = {
4
+ cnpjPrestador: '12345678000199',
5
+ inscricaoMunicipal: '12345678',
6
+ codigoMunicipio: '3550308',
7
+ };
8
+
9
+ const documento = {
10
+ numero: 20,
11
+ serie: 'NF',
12
+ ambiente: 2,
13
+ ...basePrestador,
14
+ optanteSimplesNacional: 1,
15
+ servico: {
16
+ itemListaServico: '01.01',
17
+ discriminacao: 'Servico de consultoria',
18
+ codigoMunicipio: '3550308',
19
+ valorServicos: 800,
20
+ aliquotaIss: 5,
21
+ valorIss: 40,
22
+ },
23
+ tomador: {
24
+ cnpj: '98765432000100',
25
+ razaoSocial: 'CLIENTE LTDA',
26
+ endereco: {
27
+ logradouro: 'Rua X', numero: '1', bairro: 'Centro',
28
+ codigoMunicipio: '3550308', uf: 'SP', cep: '01001000',
29
+ },
30
+ },
31
+ };
32
+
33
+ const service = new NFSeService({ mock: true });
34
+
35
+ console.log('=== GHINFE — Cancelamento e Substituição NFS-e ===\n');
36
+
37
+ const emitido = await service.emitir(documento);
38
+ console.log('Emitida:', emitido.retorno.numeroNfse, emitido.retorno.codigoVerificacao);
39
+
40
+ const cancelado = await service.cancelar({
41
+ ...basePrestador,
42
+ numeroNfse: emitido.retorno.numeroNfse,
43
+ });
44
+ console.log('Cancelamento:', cancelado.retorno.cancelado, '— NFS-e', cancelado.retorno.numeroNfse);
45
+
46
+ const substituto = { ...documento, numero: 21, servico: { ...documento.servico, valorServicos: 900, valorIss: 45 } };
47
+ const subst = await service.substituir({
48
+ ...basePrestador,
49
+ numeroNfseSubstituida: emitido.retorno.numeroNfse,
50
+ documentoSubstituto: substituto,
51
+ });
52
+ console.log(
53
+ 'Substituição: nova',
54
+ subst.retorno.numeroNfse,
55
+ 'substituiu',
56
+ subst.retorno.numeroNfseSubstituida
57
+ );
@@ -0,0 +1,27 @@
1
+ import { calcularIBSCBS, buildFragmentoIBSCBS, somarTotaisReforma, REFORMA_LAYOUT } from '../src/index.js';
2
+
3
+ console.log(`=== GHINFE — Reforma Tributária (${REFORMA_LAYOUT}) ===\n`);
4
+
5
+ const itens = [
6
+ { descricao: 'Produto A', valorTotal: 100 },
7
+ { descricao: 'Produto B', valorTotal: 250 },
8
+ ].map((item) => ({
9
+ ...item,
10
+ reforma: calcularIBSCBS(item.valorTotal, {
11
+ pIBSUF: 0.1,
12
+ pIBSMun: 0.05,
13
+ pCBS: 0.9,
14
+ cClassTrib: '000001',
15
+ }),
16
+ }));
17
+
18
+ for (const item of itens) {
19
+ console.log(`${item.descricao}: BC=${item.reforma.vBC}`);
20
+ console.log(` IBS-UF=${item.reforma.vIBSUF} IBS-Mun=${item.reforma.vIBSMun} CBS=${item.reforma.vCBS}`);
21
+ }
22
+
23
+ const totais = somarTotaisReforma(itens);
24
+ console.log('\nTotais:', totais);
25
+ console.log('\nFragmento XML experimental (item 1):\n');
26
+ console.log(buildFragmentoIBSCBS(itens[0].reforma));
27
+ console.log('\nNota: fragmento não é injetado no XML NF-e até schemas PL_010 estáveis.');
@@ -0,0 +1,52 @@
1
+ import { NFeService, calcularIBSCBS } from '../src/index.js';
2
+
3
+ const documento = {
4
+ ambiente: 2,
5
+ reformaTributaria: true,
6
+ ide: { uf: 'SP', codigoMunicipio: '3550308', serie: 1, numero: 99 },
7
+ emitente: {
8
+ cnpj: '12345678000199',
9
+ razaoSocial: 'EMPRESA EXEMPLO LTDA',
10
+ ie: '123456789012',
11
+ crt: '3',
12
+ endereco: {
13
+ logradouro: 'Rua A', numero: '1', bairro: 'Centro',
14
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01001000',
15
+ },
16
+ },
17
+ destinatario: {
18
+ cpf: '12345678909',
19
+ razaoSocial: 'CONSUMIDOR',
20
+ indIEDest: 9,
21
+ endereco: {
22
+ logradouro: 'Rua B', numero: '2', bairro: 'Centro',
23
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01001000',
24
+ },
25
+ },
26
+ itens: [{
27
+ codigo: '001',
28
+ descricao: 'PRODUTO COM IBS/CBS',
29
+ ncm: '84713012',
30
+ cfop: '5102',
31
+ unidade: 'UN',
32
+ quantidade: 1,
33
+ valorUnitario: 100,
34
+ valorTotal: 100,
35
+ cst: '00',
36
+ aliquotaIcms: 18,
37
+ valorIcms: 18,
38
+ reforma: calcularIBSCBS(100, { pIBSUF: 0.1, pIBSMun: 0.05, pCBS: 0.9, cClassTrib: '000001' }),
39
+ }],
40
+ frete: { modalidade: 9 },
41
+ pagamentos: [{ forma: '01', valor: 100 }],
42
+ };
43
+
44
+ const service = new NFeService();
45
+ const doc = service.resolverDocumento(documento);
46
+ const xml = service.gerarXml(doc);
47
+
48
+ console.log('=== GHINFE — NF-e com IBS/CBS injetado ===\n');
49
+ console.log('Chave:', doc.chaveAcesso);
50
+ console.log('Contém IBSCBS:', xml.includes('<IBSCBS>'));
51
+ console.log('Contém IBSCBSTot:', xml.includes('<IBSCBSTot>'));
52
+ console.log('\nTrecho imposto:\n', xml.match(/<IBSCBS>[\s\S]*?<\/IBSCBS>/)?.[0]?.substring(0, 400));
@@ -0,0 +1,12 @@
1
+ import { NFeService } from '../src/index.js';
2
+
3
+ console.log('=== GHINFE — Status SEFAZ (mock) ===\n');
4
+
5
+ const service = new NFeService({ mock: true });
6
+
7
+ for (const cenario of ['ok', 'paralisado']) {
8
+ service.soapService.setMockStatusScenario(cenario);
9
+ const status = await service.consultarStatus('SP', 2);
10
+ console.log(`[${cenario}] cStat=${status.cStat} — ${status.xMotivo}`);
11
+ console.log(` emOperacao=${status.emOperacao} tMed=${status.tMed}\n`);
12
+ }
@@ -0,0 +1,48 @@
1
+ import { NFeService } from '../src/index.js';
2
+
3
+ const service = new NFeService({ validarXsd: true });
4
+
5
+ const documento = {
6
+ ambiente: 2,
7
+ ide: { uf: 'SP', codigoMunicipio: '3550308', serie: 1, numero: 1 },
8
+ emitente: {
9
+ cnpj: '12345678000199',
10
+ razaoSocial: 'EMPRESA EXEMPLO LTDA',
11
+ ie: '123456789012',
12
+ crt: '3',
13
+ endereco: {
14
+ logradouro: 'Rua Exemplo', numero: '100', bairro: 'Centro',
15
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01001000',
16
+ },
17
+ },
18
+ destinatario: {
19
+ cpf: '12345678909',
20
+ razaoSocial: 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL',
21
+ indIEDest: 9,
22
+ endereco: {
23
+ logradouro: 'Rua Cliente', numero: '200', bairro: 'Jardim',
24
+ codigoMunicipio: '3550308', municipio: 'Sao Paulo', uf: 'SP', cep: '01020000',
25
+ },
26
+ },
27
+ itens: [{
28
+ codigo: '001',
29
+ descricao: 'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL',
30
+ ncm: '84713012', cfop: '5102', unidade: 'UN',
31
+ quantidade: 1, valorUnitario: 100, valorTotal: 100,
32
+ cst: '00', aliquotaIcms: 18, valorIcms: 18,
33
+ }],
34
+ frete: { modalidade: 9 },
35
+ pagamentos: [{ forma: '01', valor: 100 }],
36
+ };
37
+
38
+ console.log('=== GHINFE — Validação XSD NF-e ===\n');
39
+
40
+ try {
41
+ const xml = service.gerarXml(documento);
42
+ console.log('XML gerado e validado contra XSD oficial (PL_009_V4)');
43
+ console.log('Chave:', service.resolverDocumento(documento).chaveAcesso);
44
+ console.log('Tamanho XML:', xml.length, 'bytes');
45
+ } catch (error) {
46
+ console.error('Falha:', error.message);
47
+ if (error.erros) error.erros.forEach((e) => console.error(' -', e));
48
+ }
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "ghinfe",
3
+ "version": "0.6.0",
4
+ "description": "Biblioteca Node.js para emissão de NF-e, NFC-e e NFS-e — geração de XML, assinatura A1, envio SEFAZ e filas Bull/Redis",
5
+ "main": "src/index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "start": "node src/api/server.js",
9
+ "example:nfe": "node examples/emitir-nfe.js",
10
+ "example:mock": "node examples/mock-sefaz.js",
11
+ "example:chave": "node examples/gerar-chave.js",
12
+ "example:eventos": "node examples/eventos-nfe.js",
13
+ "example:xsd": "node examples/validar-xsd.js",
14
+ "example:nfce": "node examples/emitir-nfce.js",
15
+ "example:nfse": "node examples/emitir-nfse.js",
16
+ "example:endpoints": "node examples/endpoints-sefaz.js",
17
+ "example:status": "node examples/status-sefaz.js",
18
+ "example:layouts": "node examples/layouts-nfse.js",
19
+ "example:reforma": "node examples/reforma-ibscbs.js",
20
+ "example:reforma-xml": "node examples/reforma-nfe-xml.js",
21
+ "example:nfse-eventos": "node examples/nfse-eventos.js",
22
+ "example:danfe": "node examples/gerar-danfe.js",
23
+ "schemas:download": "node scripts/download-schemas.js"
24
+ },
25
+ "keywords": [
26
+ "nfe",
27
+ "nfce",
28
+ "nfse",
29
+ "sefaz",
30
+ "nota-fiscal",
31
+ "fiscal",
32
+ "brasil",
33
+ "acbr"
34
+ ],
35
+ "author": "Victor Henrique Ghilardi",
36
+ "license": "MIT",
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "dependencies": {
41
+ "@xmldom/xmldom": "^0.9.8",
42
+ "axios": "^1.7.9",
43
+ "bull": "^4.16.5",
44
+ "dotenv": "^16.4.7",
45
+ "express": "^4.21.2",
46
+ "ioredis": "^5.4.2",
47
+ "libxmljs2": "^0.37.0",
48
+ "node-forge": "^1.3.1",
49
+ "qrcode": "^1.5.4",
50
+ "swagger-ui-express": "^5.0.1",
51
+ "xml-crypto": "^6.0.0",
52
+ "xmlbuilder2": "^3.1.1",
53
+ "yamljs": "^0.3.0"
54
+ },
55
+ "directories": {
56
+ "doc": "docs",
57
+ "example": "examples"
58
+ },
59
+ "devDependencies": {},
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "git+https://github.com/vhghilardi/ghinfe.git"
63
+ },
64
+ "bugs": {
65
+ "url": "https://github.com/vhghilardi/ghinfe/issues"
66
+ },
67
+ "homepage": "https://github.com/vhghilardi/ghinfe#readme"
68
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteNFe_v4.00.xsd"/>
4
+ <xs:element name="consReciNFe" type="TConsReciNFe">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema XML de validação do Pedido de Consulta do Recido do Lote de Notas Fiscais Eletrônicas</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.portalfiscal.inf.br/nfe" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteConsSitNFe_v4.00.xsd"/>
4
+ <xs:element name="consSitNFe" type="TConsSitNFe">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema de validação XML dp Pedido de Consulta da Situação Atual da Nota Fiscal Eletrônica</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteConsStatServ_v4.00.xsd"/>
4
+ <xs:element name="consStatServ" type="TConsStatServ">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema XML de validação do Pedido de Consulta do Status do Serviço</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteNFe_v3.10.xsd"/>
4
+ <xs:element name="enviNFe" type="TEnviNFe">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteNFe_v4.00.xsd"/>
4
+ <xs:element name="enviNFe" type="TEnviNFe">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema XML de validação do Pedido de Concessão de Autorização da Nota Fiscal Eletrônica</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.portalfiscal.inf.br/nfe" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:include schemaLocation="leiauteInutNFe_v4.00.xsd"/>
4
+ <xs:element name="inutNFe" type="TInutNFe">
5
+ <xs:annotation>
6
+ <xs:documentation>Schema XML de validação do Pedido de Inutilização de Numeração da Nota Fiscal Eletrônica</xs:documentation>
7
+ </xs:annotation>
8
+ </xs:element>
9
+ </xs:schema>