@useinvio/nfse-sdk 3.1.0 → 3.2.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 (95) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.en.md +146 -0
  3. package/README.md +76 -576
  4. package/dist/agent.d.ts +46 -1
  5. package/dist/agent.js +320 -4
  6. package/dist/agent.js.map +1 -1
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +520 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/cliBin.d.ts +2 -0
  11. package/dist/cliBin.js +6 -0
  12. package/dist/cliBin.js.map +1 -0
  13. package/dist/cliExample.d.ts +6 -0
  14. package/dist/cliExample.js +29 -0
  15. package/dist/cliExample.js.map +1 -0
  16. package/dist/client.d.ts +47 -2
  17. package/dist/client.js +36 -6
  18. package/dist/client.js.map +1 -1
  19. package/dist/config.d.ts +3 -0
  20. package/dist/config.js +8 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/consultas.d.ts +34 -0
  23. package/dist/consultas.js +61 -0
  24. package/dist/consultas.js.map +1 -0
  25. package/dist/dpsJson.js +1 -41
  26. package/dist/dpsJson.js.map +1 -1
  27. package/dist/emissaoNota.d.ts +8 -3
  28. package/dist/emissaoNota.js +6 -3
  29. package/dist/emissaoNota.js.map +1 -1
  30. package/dist/eventoJson.d.ts +76 -0
  31. package/dist/eventoJson.js +128 -0
  32. package/dist/eventoJson.js.map +1 -0
  33. package/dist/eventosNfse.d.ts +38 -0
  34. package/dist/eventosNfse.js +73 -0
  35. package/dist/eventosNfse.js.map +1 -0
  36. package/dist/gzipB64.d.ts +5 -0
  37. package/dist/gzipB64.js +12 -0
  38. package/dist/gzipB64.js.map +1 -1
  39. package/dist/index.d.ts +17 -7
  40. package/dist/index.js +9 -4
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcpCli.d.ts +2 -0
  43. package/dist/mcpCli.js +7 -0
  44. package/dist/mcpCli.js.map +1 -0
  45. package/dist/mcpServer.d.ts +49 -0
  46. package/dist/mcpServer.js +159 -0
  47. package/dist/mcpServer.js.map +1 -0
  48. package/dist/nfseXml.d.ts +48 -0
  49. package/dist/nfseXml.js +86 -0
  50. package/dist/nfseXml.js.map +1 -0
  51. package/dist/rejeicoes.d.ts +50 -0
  52. package/dist/rejeicoes.js +62 -0
  53. package/dist/rejeicoes.js.map +1 -0
  54. package/dist/rejeicoesCatalog.d.ts +10 -0
  55. package/dist/rejeicoesCatalog.js +4449 -0
  56. package/dist/rejeicoesCatalog.js.map +1 -0
  57. package/dist/sefinClient.d.ts +100 -6
  58. package/dist/sefinClient.js +211 -19
  59. package/dist/sefinClient.js.map +1 -1
  60. package/dist/signXml.js +9 -1
  61. package/dist/signXml.js.map +1 -1
  62. package/dist/testing.d.ts +80 -0
  63. package/dist/testing.js +285 -0
  64. package/dist/testing.js.map +1 -0
  65. package/dist/xmlBuild.d.ts +11 -0
  66. package/dist/xmlBuild.js +44 -0
  67. package/dist/xmlBuild.js.map +1 -0
  68. package/dist/xmlInspection.d.ts +1 -1
  69. package/dist/xmlInspection.js.map +1 -1
  70. package/dist/xsdValidation.d.ts +7 -0
  71. package/dist/xsdValidation.js +37 -15
  72. package/dist/xsdValidation.js.map +1 -1
  73. package/docs/README.md +47 -0
  74. package/docs/REGRAS_NEGOCIO_EMISSAO.md +8 -8
  75. package/docs/conceitos/como-funciona.md +87 -0
  76. package/docs/guias/adn.md +51 -0
  77. package/docs/guias/agentes-ia.md +111 -0
  78. package/docs/guias/cancelar.md +70 -0
  79. package/docs/guias/certificado.md +88 -0
  80. package/docs/guias/cli.md +68 -0
  81. package/docs/guias/consultar.md +54 -0
  82. package/docs/guias/emitir.md +172 -0
  83. package/docs/guias/recuperar-emissao.md +33 -0
  84. package/docs/guias/rejeicoes.md +70 -0
  85. package/docs/guias/testes.md +79 -0
  86. package/docs/guias/timeouts.md +33 -0
  87. package/docs/referencia/ambientes.md +35 -0
  88. package/docs/referencia/api.md +137 -0
  89. package/docs/referencia/erros.md +55 -0
  90. package/docs/tutoriais/primeira-nfse.md +130 -0
  91. package/examples/README.md +2 -0
  92. package/examples/cancel-nfse.ts +29 -0
  93. package/examples/recover-emission.ts +29 -0
  94. package/llms.txt +97 -92
  95. package/package.json +23 -3
@@ -0,0 +1,48 @@
1
+ import type { Ambiente } from './config.js';
2
+ export interface NfsePessoaResumo {
3
+ CNPJ?: string;
4
+ CPF?: string;
5
+ NIF?: string;
6
+ IM?: string;
7
+ xNome?: string;
8
+ }
9
+ /** Typed view of the authorized NFS-e fields most integrations need. Values are kept as XML strings. */
10
+ export interface NfseResumo {
11
+ chaveAcesso: string;
12
+ /** Numero da NFS-e. */
13
+ nNFSe: string;
14
+ /** Numero do documento fiscal no ADN. */
15
+ nDFSe: string;
16
+ /** Situacao (TStat), ex.: "100" = NFS-e gerada. */
17
+ cStat: string;
18
+ /** Data/hora de processamento (UTC). */
19
+ dhProc: string;
20
+ ambiente: Ambiente;
21
+ xLocEmi: string;
22
+ xLocPrestacao: string;
23
+ cLocIncid?: string;
24
+ xLocIncid?: string;
25
+ xTribNac: string;
26
+ emitente: NfsePessoaResumo;
27
+ tomador?: NfsePessoaResumo;
28
+ dps: {
29
+ id: string;
30
+ serie: string;
31
+ nDPS: string;
32
+ dhEmi: string;
33
+ dCompet: string;
34
+ };
35
+ valores: {
36
+ vServ?: string;
37
+ vBC?: string;
38
+ pAliqAplic?: string;
39
+ vISSQN?: string;
40
+ vTotalRet?: string;
41
+ vLiq: string;
42
+ };
43
+ }
44
+ /**
45
+ * Reads an authorized NFS-e XML (layout v1.01) into a typed summary.
46
+ * The XML is parsed without DTDs, external entities or network access.
47
+ */
48
+ export declare function lerNfse(nfseXml: string): NfseResumo;
@@ -0,0 +1,86 @@
1
+ import { directChildren, parseNfseXml } from './xmlInspection.js';
2
+ function child(element, ...path) {
3
+ let current = element;
4
+ for (const name of path) {
5
+ if (!current)
6
+ return undefined;
7
+ current = directChildren(current, name)[0];
8
+ }
9
+ return current;
10
+ }
11
+ function text(element, ...path) {
12
+ const value = child(element, ...path)?.textContent ?? undefined;
13
+ return value === '' ? undefined : value;
14
+ }
15
+ function required(element, ...path) {
16
+ const value = text(element, ...path);
17
+ if (value === undefined)
18
+ throw new Error(`XML da NFS-e sem o campo obrigatorio ${path.join('/')}.`);
19
+ return value;
20
+ }
21
+ function pessoa(element) {
22
+ if (!element)
23
+ return undefined;
24
+ const result = {};
25
+ for (const field of ['CNPJ', 'CPF', 'NIF', 'IM', 'xNome']) {
26
+ const value = text(element, field);
27
+ if (value !== undefined)
28
+ result[field] = value;
29
+ }
30
+ return result;
31
+ }
32
+ /**
33
+ * Reads an authorized NFS-e XML (layout v1.01) into a typed summary.
34
+ * The XML is parsed without DTDs, external entities or network access.
35
+ */
36
+ export function lerNfse(nfseXml) {
37
+ const root = parseNfseXml(nfseXml, 'NFSe');
38
+ const inf = child(root, 'infNFSe');
39
+ const id = inf?.getAttribute('Id') ?? '';
40
+ if (!/^NFS\d{50}$/.test(id))
41
+ throw new Error('XML da NFS-e sem Id valido em <infNFSe>.');
42
+ const infDps = child(inf, 'DPS', 'infDPS');
43
+ const tpAmb = required(infDps, 'tpAmb');
44
+ const resumo = {
45
+ chaveAcesso: id.slice(3),
46
+ nNFSe: required(inf, 'nNFSe'),
47
+ nDFSe: required(inf, 'nDFSe'),
48
+ cStat: required(inf, 'cStat'),
49
+ dhProc: required(inf, 'dhProc'),
50
+ ambiente: tpAmb === '1' ? 'producao' : 'restrita',
51
+ xLocEmi: required(inf, 'xLocEmi'),
52
+ xLocPrestacao: required(inf, 'xLocPrestacao'),
53
+ xTribNac: required(inf, 'xTribNac'),
54
+ emitente: pessoa(child(inf, 'emit')),
55
+ dps: {
56
+ id: infDps?.getAttribute('Id') ?? '',
57
+ serie: required(infDps, 'serie'),
58
+ nDPS: required(infDps, 'nDPS'),
59
+ dhEmi: required(infDps, 'dhEmi'),
60
+ dCompet: required(infDps, 'dCompet'),
61
+ },
62
+ valores: {
63
+ vServ: text(infDps, 'valores', 'vServPrest', 'vServ'),
64
+ vBC: text(inf, 'valores', 'vBC'),
65
+ pAliqAplic: text(inf, 'valores', 'pAliqAplic'),
66
+ vISSQN: text(inf, 'valores', 'vISSQN'),
67
+ vTotalRet: text(inf, 'valores', 'vTotalRet'),
68
+ vLiq: required(inf, 'valores', 'vLiq'),
69
+ },
70
+ };
71
+ const cLocIncid = text(inf, 'cLocIncid');
72
+ const xLocIncid = text(inf, 'xLocIncid');
73
+ const tomador = pessoa(child(infDps, 'toma'));
74
+ if (cLocIncid)
75
+ resumo.cLocIncid = cLocIncid;
76
+ if (xLocIncid)
77
+ resumo.xLocIncid = xLocIncid;
78
+ if (tomador)
79
+ resumo.tomador = tomador;
80
+ for (const key of Object.keys(resumo.valores)) {
81
+ if (resumo.valores[key] === undefined)
82
+ delete resumo.valores[key];
83
+ }
84
+ return resumo;
85
+ }
86
+ //# sourceMappingURL=nfseXml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nfseXml.js","sourceRoot":"","sources":["../nfseXml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { SefinErro } from './sefinClient.js';
2
+ export { REJEICOES_FONTES } from './rejeicoesCatalog.js';
3
+ /** One business rule from the official SEFIN/ADN annexes. Text is kept verbatim. */
4
+ export interface RejeicaoOficial {
5
+ /** Error code, e.g. "E0014". */
6
+ codigo: string;
7
+ /** Official error message returned by SEFIN. */
8
+ mensagem: string;
9
+ /** Business rule that triggers the rejection. */
10
+ regra: string;
11
+ /** XML path of the field the rule checks, when the annex names one. */
12
+ campo?: string;
13
+ /** 1 = layout consistency, 2 = national rules, 3 = municipal rules. */
14
+ nivel?: number;
15
+ /** Index into {@link REJEICOES_FONTES}. */
16
+ fonte: number;
17
+ /** Annex sheet the rule comes from. */
18
+ planilha: string;
19
+ }
20
+ export interface ExplicacaoRejeicao {
21
+ codigo: string;
22
+ /** False when the code is not in the bundled catalog (e.g. a newer rule or an SDK-side code). */
23
+ conhecida: boolean;
24
+ /** What SEFIN said, when explaining a received error. */
25
+ descricaoRecebida?: string;
26
+ complemento?: string;
27
+ mensagemOficial?: string;
28
+ regra?: string;
29
+ campo?: string;
30
+ nivel?: number;
31
+ /** Where to look: official annex and, when known, the SDK documentation. */
32
+ fonte?: {
33
+ documento: string;
34
+ url: string;
35
+ };
36
+ /** Short, code-independent hint about what usually fixes this class of rule. */
37
+ dica?: string;
38
+ }
39
+ /** Looks up an official rule by code ("E0014", "e0014" or "0014"). */
40
+ export declare function buscarRejeicao(codigo: string): RejeicaoOficial | undefined;
41
+ /**
42
+ * Explains a SEFIN error code or a received `SefinErro` with the official
43
+ * message, rule and field from the published annexes. Never invents a cause:
44
+ * unknown codes come back with `conhecida: false`.
45
+ */
46
+ export declare function explicarRejeicao(erro: string | SefinErro): ExplicacaoRejeicao;
47
+ /** Explains every error of a rejection (`EmitirNotaError.erros`, `RegistrarEventoError.erros`). */
48
+ export declare function explicarErros(erros: readonly SefinErro[]): ExplicacaoRejeicao[];
49
+ /** All bundled official rules, sorted by code. */
50
+ export declare function listarRejeicoes(): readonly RejeicaoOficial[];
@@ -0,0 +1,62 @@
1
+ import { REJEICOES_FONTES, REJEICOES_OFICIAIS } from './rejeicoesCatalog.js';
2
+ export { REJEICOES_FONTES } from './rejeicoesCatalog.js';
3
+ const BY_CODE = new Map(REJEICOES_OFICIAIS.map((entry) => [entry.codigo, entry]));
4
+ const NIVEL_DICA = {
5
+ 1: 'Regra de leiaute: corrija o formato ou a consistência do campo indicado na DPS ou no evento.',
6
+ 2: 'Regra nacional: confira o dado com o cadastro e a situação do contribuinte no Sistema Nacional NFS-e.',
7
+ 3: 'Regra municipal: confira os parâmetros do município (convênio, alíquota, regimes) com consultarConvenio/consultarAliquota.',
8
+ };
9
+ const SDK_CODES = {
10
+ INVALID_AUTHORIZATION_RESPONSE: 'A SEFIN respondeu 2xx sem XML autorizado válido. O resultado é incerto: use recuperarNfsePorDps antes de reenviar.',
11
+ INVALID_QUERY_RESPONSE: 'A consulta respondeu sem o XML esperado. Tente novamente; se persistir, registre o corpo da resposta.',
12
+ DESCONHECIDO: 'A SEFIN respondeu sem um código de erro reconhecível. Veja o corpo bruto da resposta.',
13
+ };
14
+ function normalizeCode(codigo) {
15
+ const trimmed = codigo.trim().toUpperCase();
16
+ return /^\d{4}$/.test(trimmed) ? `E${trimmed}` : trimmed;
17
+ }
18
+ /** Looks up an official rule by code ("E0014", "e0014" or "0014"). */
19
+ export function buscarRejeicao(codigo) {
20
+ return BY_CODE.get(normalizeCode(codigo));
21
+ }
22
+ /**
23
+ * Explains a SEFIN error code or a received `SefinErro` with the official
24
+ * message, rule and field from the published annexes. Never invents a cause:
25
+ * unknown codes come back with `conhecida: false`.
26
+ */
27
+ export function explicarRejeicao(erro) {
28
+ const received = typeof erro === 'string' ? undefined : erro;
29
+ const codigo = normalizeCode(typeof erro === 'string' ? erro : erro.Codigo);
30
+ const entry = BY_CODE.get(codigo);
31
+ const result = { codigo, conhecida: Boolean(entry) };
32
+ if (received?.Descricao)
33
+ result.descricaoRecebida = received.Descricao;
34
+ if (received?.Complemento)
35
+ result.complemento = received.Complemento;
36
+ if (entry) {
37
+ result.mensagemOficial = entry.mensagem;
38
+ if (entry.regra)
39
+ result.regra = entry.regra;
40
+ if (entry.campo)
41
+ result.campo = entry.campo;
42
+ if (entry.nivel)
43
+ result.nivel = entry.nivel;
44
+ result.fonte = { ...REJEICOES_FONTES[entry.fonte] };
45
+ const dica = entry.nivel ? NIVEL_DICA[entry.nivel] : undefined;
46
+ if (dica)
47
+ result.dica = dica;
48
+ }
49
+ else if (SDK_CODES[codigo]) {
50
+ result.dica = SDK_CODES[codigo];
51
+ }
52
+ return result;
53
+ }
54
+ /** Explains every error of a rejection (`EmitirNotaError.erros`, `RegistrarEventoError.erros`). */
55
+ export function explicarErros(erros) {
56
+ return erros.map((erro) => explicarRejeicao(erro));
57
+ }
58
+ /** All bundled official rules, sorted by code. */
59
+ export function listarRejeicoes() {
60
+ return REJEICOES_OFICIAIS;
61
+ }
62
+ //# sourceMappingURL=rejeicoes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejeicoes.js","sourceRoot":"","sources":["../rejeicoes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { RejeicaoOficial } from './rejeicoes.js';
2
+ /** Official spreadsheets this catalog was generated from (gov.br/nfse, documentacao atual). */
3
+ export declare const REJEICOES_FONTES: readonly [{
4
+ readonly documento: "Anexo I - Leiaute e Regras de Negocio DPS/NFS-e v1.01 (09/02/2026)";
5
+ readonly url: "https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/documentacao-atual/anexo_i-sefin_adn-dps_nfse-snnfse-v1-01-20260209.xlsx";
6
+ }, {
7
+ readonly documento: "Anexo II - Leiaute e Regras de Negocio de Eventos v1.01 (22/01/2026)";
8
+ readonly url: "https://www.gov.br/nfse/pt-br/biblioteca/documentacao-tecnica/documentacao-atual/anexo_ii-sefin_adn-pedregevt_evt-snnfse-v1-01-20260122.xlsx";
9
+ }];
10
+ export declare const REJEICOES_OFICIAIS: readonly RejeicaoOficial[];