@useinvio/nfse-sdk 3.0.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 (120) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.en.md +146 -0
  3. package/README.md +77 -518
  4. package/dist/agent.d.ts +131 -0
  5. package/dist/agent.js +551 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/certificate.d.ts +96 -0
  8. package/dist/certificate.js +218 -0
  9. package/dist/certificate.js.map +1 -0
  10. package/dist/certificateValidation.d.ts +11 -6
  11. package/dist/certificateValidation.js +23 -12
  12. package/dist/certificateValidation.js.map +1 -1
  13. package/dist/cli.d.ts +2 -0
  14. package/dist/cli.js +520 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/cliBin.d.ts +2 -0
  17. package/dist/cliBin.js +6 -0
  18. package/dist/cliBin.js.map +1 -0
  19. package/dist/cliExample.d.ts +6 -0
  20. package/dist/cliExample.js +29 -0
  21. package/dist/cliExample.js.map +1 -0
  22. package/dist/client.d.ts +51 -4
  23. package/dist/client.js +41 -10
  24. package/dist/client.js.map +1 -1
  25. package/dist/config.d.ts +3 -0
  26. package/dist/config.js +8 -0
  27. package/dist/config.js.map +1 -1
  28. package/dist/consultas.d.ts +34 -0
  29. package/dist/consultas.js +61 -0
  30. package/dist/consultas.js.map +1 -0
  31. package/dist/dpsJson.js +1 -41
  32. package/dist/dpsJson.js.map +1 -1
  33. package/dist/dpsJsonSchema.d.ts +17 -0
  34. package/dist/dpsJsonSchema.js +184 -0
  35. package/dist/dpsJsonSchema.js.map +1 -0
  36. package/dist/emissaoNota.d.ts +11 -6
  37. package/dist/emissaoNota.js +10 -6
  38. package/dist/emissaoNota.js.map +1 -1
  39. package/dist/eventoJson.d.ts +76 -0
  40. package/dist/eventoJson.js +128 -0
  41. package/dist/eventoJson.js.map +1 -0
  42. package/dist/eventosNfse.d.ts +38 -0
  43. package/dist/eventosNfse.js +73 -0
  44. package/dist/eventosNfse.js.map +1 -0
  45. package/dist/fiscalDomains.d.ts +22 -0
  46. package/dist/fiscalDomains.js +99 -0
  47. package/dist/fiscalDomains.js.map +1 -0
  48. package/dist/fiscalValidation.js +21 -53
  49. package/dist/fiscalValidation.js.map +1 -1
  50. package/dist/gzipB64.d.ts +5 -0
  51. package/dist/gzipB64.js +12 -0
  52. package/dist/gzipB64.js.map +1 -1
  53. package/dist/index.d.ts +22 -7
  54. package/dist/index.js +11 -4
  55. package/dist/index.js.map +1 -1
  56. package/dist/jsonSchemaCheck.d.ts +12 -0
  57. package/dist/jsonSchemaCheck.js +70 -0
  58. package/dist/jsonSchemaCheck.js.map +1 -0
  59. package/dist/loadPfx.d.ts +2 -0
  60. package/dist/loadPfx.js +2 -1
  61. package/dist/loadPfx.js.map +1 -1
  62. package/dist/mcpCli.d.ts +2 -0
  63. package/dist/mcpCli.js +7 -0
  64. package/dist/mcpCli.js.map +1 -0
  65. package/dist/mcpServer.d.ts +49 -0
  66. package/dist/mcpServer.js +159 -0
  67. package/dist/mcpServer.js.map +1 -0
  68. package/dist/nfseXml.d.ts +48 -0
  69. package/dist/nfseXml.js +86 -0
  70. package/dist/nfseXml.js.map +1 -0
  71. package/dist/rejeicoes.d.ts +50 -0
  72. package/dist/rejeicoes.js +62 -0
  73. package/dist/rejeicoes.js.map +1 -0
  74. package/dist/rejeicoesCatalog.d.ts +10 -0
  75. package/dist/rejeicoesCatalog.js +4449 -0
  76. package/dist/rejeicoesCatalog.js.map +1 -0
  77. package/dist/sefinClient.d.ts +107 -7
  78. package/dist/sefinClient.js +232 -22
  79. package/dist/sefinClient.js.map +1 -1
  80. package/dist/signXml.d.ts +3 -3
  81. package/dist/signXml.js +17 -7
  82. package/dist/signXml.js.map +1 -1
  83. package/dist/testing.d.ts +80 -0
  84. package/dist/testing.js +285 -0
  85. package/dist/testing.js.map +1 -0
  86. package/dist/xmlBuild.d.ts +11 -0
  87. package/dist/xmlBuild.js +44 -0
  88. package/dist/xmlBuild.js.map +1 -0
  89. package/dist/xmlInspection.d.ts +1 -1
  90. package/dist/xmlInspection.js +10 -9
  91. package/dist/xmlInspection.js.map +1 -1
  92. package/dist/xsdValidation.d.ts +24 -5
  93. package/dist/xsdValidation.js +97 -67
  94. package/dist/xsdValidation.js.map +1 -1
  95. package/docs/README.md +47 -0
  96. package/docs/REGRAS_NEGOCIO_EMISSAO.md +8 -8
  97. package/docs/conceitos/como-funciona.md +87 -0
  98. package/docs/guias/adn.md +51 -0
  99. package/docs/guias/agentes-ia.md +111 -0
  100. package/docs/guias/cancelar.md +70 -0
  101. package/docs/guias/certificado.md +88 -0
  102. package/docs/guias/cli.md +68 -0
  103. package/docs/guias/consultar.md +54 -0
  104. package/docs/guias/emitir.md +172 -0
  105. package/docs/guias/recuperar-emissao.md +33 -0
  106. package/docs/guias/rejeicoes.md +70 -0
  107. package/docs/guias/testes.md +79 -0
  108. package/docs/guias/timeouts.md +33 -0
  109. package/docs/referencia/ambientes.md +35 -0
  110. package/docs/referencia/api.md +137 -0
  111. package/docs/referencia/erros.md +55 -0
  112. package/docs/tutoriais/primeira-nfse.md +130 -0
  113. package/examples/README.md +3 -1
  114. package/examples/cancel-nfse.ts +29 -0
  115. package/examples/client-resource.ts +3 -5
  116. package/examples/emit-homologation.ts +3 -4
  117. package/examples/handle-errors.ts +3 -3
  118. package/examples/recover-emission.ts +29 -0
  119. package/llms.txt +97 -82
  120. package/package.json +31 -6
package/dist/cli.js ADDED
@@ -0,0 +1,520 @@
1
+ /**
2
+ * `nfse` command line: diagnose the setup, inspect the certificate, validate,
3
+ * emit, query, cancel and explain rejections, from the terminal.
4
+ *
5
+ * npx -p @useinvio/nfse-sdk nfse doctor
6
+ * npx -p @useinvio/nfse-sdk nfse emit nota.json --mock
7
+ */
8
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
9
+ import { createInterface } from 'node:readline';
10
+ import { parseArgs } from 'node:util';
11
+ import { NfseCertificate } from './certificate.js';
12
+ import { CertificateValidationError } from './certificateValidation.js';
13
+ import { ConsultaNfseError, obterNfse, recuperarNfsePorDps } from './consultas.js';
14
+ import { buildDpsFromJson } from './dpsJson.js';
15
+ import { EmitirNotaError, prepararNota, transmitirNotaPreparada } from './emissaoNota.js';
16
+ import { buildCancelamentoFromJson, EventoInvalidoError } from './eventoJson.js';
17
+ import { registrarEvento, RegistrarEventoError } from './eventosNfse.js';
18
+ import { DpsFiscalValidationError, validateDpsJsonRequest } from './fiscalValidation.js';
19
+ import { explicarRejeicao } from './rejeicoes.js';
20
+ import { baixarDanfse } from './sefinClient.js';
21
+ import { DpsXsdValidationError, validateDpsXmlAgainstXsd } from './xsdValidation.js';
22
+ const VERSION = (() => {
23
+ try {
24
+ return JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
25
+ }
26
+ catch {
27
+ return 'desconhecida';
28
+ }
29
+ })();
30
+ const HELP = `nfse ${VERSION} — NFS-e Nacional pelo terminal
31
+
32
+ Uso: nfse <comando> [opções]
33
+
34
+ Comandos
35
+ init [nota.json] Cria um JSON de nota de exemplo para editar
36
+ doctor Confere Node.js, motor XSD e certificado
37
+ cert [arquivo.pfx] Mostra titular, validade e fingerprint do certificado
38
+ validate <nota.json> Valida o JSON da DPS (regras + XSD oficial), sem enviar
39
+ xml <nota.json> Gera o XML da DPS não assinado
40
+ emit <nota.json> Emite a NFS-e (mostra o resumo e pede confirmação)
41
+ get <chave> Consulta uma NFS-e pela chave de acesso
42
+ danfse <chave> Baixa o PDF do DANFSe
43
+ cancel <chave> Cancela (--motivo 1|2|9 --justificativa "...")
44
+ recover <dpsId> Diz se a SEFIN gerou NFS-e para uma DPS (após timeout)
45
+ explain <código...> Explica códigos de rejeição com o texto oficial (ex.: E0014)
46
+ mcp Inicia o servidor MCP (stdio)
47
+
48
+ Opções
49
+ --producao Usa o ambiente de produção (padrão: produção restrita)
50
+ --mock Usa uma SEFIN simulada e um certificado de teste
51
+ --cert <arquivo.pfx> Certificado A1 (padrão: NFSE_CERT_PATH / NFSE_CERT_BASE64)
52
+ --password-file <arq> Arquivo com a senha (padrão: NFSE_CERT_PASSWORD[_FILE] ou pergunta)
53
+ -o, --output <arquivo> Salva o XML, a resposta ou o PDF
54
+ -y, --yes Não pede confirmação (emit, cancel)
55
+ --json Saída em JSON
56
+ -h, --help Esta ajuda
57
+ -v, --version Versão
58
+
59
+ Exemplos
60
+ nfse init
61
+ nfse doctor
62
+ nfse validate nota.json
63
+ nfse emit nota.json --mock
64
+ nfse explain E0014 E0312
65
+ `;
66
+ const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
67
+ const paint = (code) => (text) => (useColor ? `\x1b[${code}m${text}\x1b[0m` : text);
68
+ const green = paint(32);
69
+ const red = paint(31);
70
+ const yellow = paint(33);
71
+ const bold = paint(1);
72
+ const dim = paint(2);
73
+ const ok = (text) => console.log(`${green('✔')} ${text}`);
74
+ const bad = (text) => console.log(`${red('✖')} ${text}`);
75
+ const warn = (text) => console.log(`${yellow('⚠')} ${text}`);
76
+ class CliError extends Error {
77
+ exitCode;
78
+ constructor(message, exitCode = 1) {
79
+ super(message);
80
+ this.exitCode = exitCode;
81
+ }
82
+ }
83
+ function ambienteOf(options) {
84
+ if (options.producao)
85
+ return 'producao';
86
+ const env = process.env.NFSE_AMBIENTE?.trim().toLowerCase();
87
+ return env === 'producao' ? 'producao' : 'restrita';
88
+ }
89
+ async function ask(question, hidden = false, hint = 'Use --password-file ou NFSE_CERT_PASSWORD_FILE.') {
90
+ if (!process.stdin.isTTY)
91
+ throw new CliError(`Entrada interativa indisponível. ${hint}`);
92
+ const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true });
93
+ if (hidden) {
94
+ const output = rl;
95
+ output._writeToOutput = (text) => {
96
+ if (text.includes(question))
97
+ output.output.write(text);
98
+ };
99
+ }
100
+ try {
101
+ return await new Promise((resolve) => rl.question(question, resolve));
102
+ }
103
+ finally {
104
+ rl.close();
105
+ if (hidden)
106
+ process.stdout.write('\n');
107
+ }
108
+ }
109
+ async function loadCertificate(options, required) {
110
+ if (options.mock) {
111
+ const { createTestCertificate } = await import('./testing.js');
112
+ return createTestCertificate().certificate;
113
+ }
114
+ const path = options.cert ?? process.env.NFSE_CERT_PATH;
115
+ if (!path && !process.env.NFSE_CERT_BASE64) {
116
+ if (required)
117
+ throw new CliError('Certificado não configurado. Use --cert, NFSE_CERT_PATH/NFSE_CERT_BASE64, ou --mock para testar.');
118
+ return undefined;
119
+ }
120
+ let password;
121
+ if (options['password-file'])
122
+ password = readFileSync(options['password-file'], 'utf8').replace(/\r?\n$/, '');
123
+ else if (process.env.NFSE_CERT_PASSWORD_FILE)
124
+ password = readFileSync(process.env.NFSE_CERT_PASSWORD_FILE, 'utf8').replace(/\r?\n$/, '');
125
+ else if (process.env.NFSE_CERT_PASSWORD !== undefined)
126
+ password = process.env.NFSE_CERT_PASSWORD;
127
+ else
128
+ password = await ask('Senha do certificado: ', true);
129
+ if (path)
130
+ return NfseCertificate.fromFile(path, password);
131
+ return NfseCertificate.fromBase64(process.env.NFSE_CERT_BASE64, password);
132
+ }
133
+ function readRequest(file, ambiente) {
134
+ if (!file)
135
+ throw new CliError('Informe o arquivo JSON da nota. Ex.: nfse validate nota.json');
136
+ let parsed;
137
+ try {
138
+ parsed = JSON.parse(readFileSync(file, 'utf8'));
139
+ }
140
+ catch (error) {
141
+ throw new CliError(`Não foi possível ler ${file}: ${error instanceof Error ? error.message : String(error)}`);
142
+ }
143
+ const request = parsed;
144
+ if (request && typeof request === 'object' && request.ambiente && request.ambiente !== ambiente) {
145
+ throw new CliError(`O arquivo pede ambiente "${request.ambiente}", mas o comando roda em "${ambiente}". Use --producao ou remova "ambiente" do JSON.`);
146
+ }
147
+ return { ...request, ambiente };
148
+ }
149
+ function printExplanations(explicacoes) {
150
+ for (const e of explicacoes) {
151
+ console.log(`\n${bold(e.codigo)} ${e.conhecida ? '' : dim('(fora do catálogo oficial)')}`);
152
+ if (e.descricaoRecebida)
153
+ console.log(` Recebido: ${e.descricaoRecebida}${e.complemento ? ` (${e.complemento})` : ''}`);
154
+ if (e.mensagemOficial && e.mensagemOficial !== e.descricaoRecebida)
155
+ console.log(` Mensagem oficial: ${e.mensagemOficial}`);
156
+ if (e.regra && e.regra !== e.mensagemOficial)
157
+ console.log(` Regra: ${e.regra.replace(/\n+/g, ' ')}`);
158
+ if (e.campo)
159
+ console.log(` Campo: ${e.campo}`);
160
+ if (e.dica)
161
+ console.log(` ${dim(e.dica)}`);
162
+ if (e.fonte)
163
+ console.log(` ${dim(`Fonte: ${e.fonte.documento}`)}`);
164
+ }
165
+ }
166
+ function printRejection(erros, status, options) {
167
+ if (options.json) {
168
+ console.log(JSON.stringify({ ok: false, status, erros, explicacoes: erros.map((erro) => explicarRejeicao(erro)) }, null, 2));
169
+ }
170
+ else {
171
+ bad(`A SEFIN rejeitou (HTTP ${status}).`);
172
+ printExplanations(erros.map((erro) => explicarRejeicao(erro)));
173
+ }
174
+ throw new CliError('', 2);
175
+ }
176
+ function printResumo(resumo) {
177
+ console.log(` Chave de acesso ${bold(resumo.chaveAcesso)}`);
178
+ console.log(` Número ${resumo.nNFSe} Situação ${resumo.cStat} Ambiente ${resumo.ambiente}`);
179
+ console.log(` Emitente ${resumo.emitente.CNPJ ?? resumo.emitente.CPF ?? '-'} ${resumo.emitente.xNome ?? ''}`);
180
+ if (resumo.tomador)
181
+ console.log(` Tomador ${resumo.tomador.CNPJ ?? resumo.tomador.CPF ?? resumo.tomador.NIF ?? '-'} ${resumo.tomador.xNome ?? ''}`);
182
+ console.log(` Competência ${resumo.dps.dCompet} DPS ${resumo.dps.serie}/${resumo.dps.nDPS}`);
183
+ console.log(` Valor líquido R$ ${resumo.valores.vLiq}${resumo.valores.vISSQN ? ` ISSQN R$ ${resumo.valores.vISSQN}` : ''}`);
184
+ }
185
+ async function confirm(options, ambiente, action) {
186
+ if (options.yes)
187
+ return;
188
+ const label = ambiente === 'producao' ? red('PRODUÇÃO (validade jurídica)') : 'produção restrita (teste)';
189
+ const expected = ambiente === 'producao' ? 'emitir' : 's';
190
+ const answer = await ask(`\n${action} em ${label}? ${ambiente === 'producao' ? 'Digite "emitir" para confirmar' : '[s/N]'}: `, false, 'Use --yes para confirmar sem perguntar.');
191
+ if (answer.trim().toLowerCase() !== expected)
192
+ throw new CliError('Cancelado. Nada foi enviado.', 0);
193
+ }
194
+ const commands = {
195
+ async init(args) {
196
+ const file = args[0] ?? 'nota.json';
197
+ if (existsSync(file))
198
+ throw new CliError(`${file} já existe; escolha outro nome: nfse init outra-nota.json`);
199
+ const { examplePayload } = await import('./cliExample.js');
200
+ const { ambiente: _ambiente, ...payload } = examplePayload();
201
+ writeFileSync(file, `${JSON.stringify(payload, null, 2)}\n`);
202
+ ok(`${file} criado com valores ilustrativos.`);
203
+ warn('Troque CNPJ, municípios, código de serviço e tributação pelos do seu prestador antes de emitir.');
204
+ console.log(`Próximo passo: nfse validate ${file}`);
205
+ },
206
+ async doctor(_args, options) {
207
+ let failures = 0;
208
+ const [major] = process.versions.node.split('.').map(Number);
209
+ if (major >= 20)
210
+ ok(`Node.js ${process.versions.node}`);
211
+ else {
212
+ bad(`Node.js ${process.versions.node}: o SDK exige 20 ou mais recente`);
213
+ failures++;
214
+ }
215
+ try {
216
+ const { examplePayload } = await import('./cliExample.js');
217
+ validateDpsXmlAgainstXsd(buildDpsFromJson(examplePayload()).xml);
218
+ ok('Motor XSD (libxml2 WebAssembly) e schemas oficiais v1.01 carregados');
219
+ }
220
+ catch (error) {
221
+ bad(`Motor XSD: ${error instanceof Error ? error.message : String(error)}`);
222
+ failures++;
223
+ }
224
+ const ambiente = ambienteOf(options);
225
+ ok(`Ambiente: ${ambiente === 'producao' ? red('produção') : 'produção restrita'}${options.mock ? ' (SEFIN simulada)' : ''}`);
226
+ try {
227
+ const certificate = await loadCertificate(options, false);
228
+ if (!certificate) {
229
+ warn('Certificado não configurado: defina NFSE_CERT_PATH e NFSE_CERT_PASSWORD (ou use --mock)');
230
+ }
231
+ else if (certificate instanceof NfseCertificate) {
232
+ const days = certificate.daysUntilExpiry();
233
+ const holder = certificate.cnpj ? `CNPJ ${certificate.cnpj}` : certificate.cpf ? `CPF ${certificate.cpf}` : 'sem CNPJ/CPF ICP-Brasil';
234
+ if (!certificate.isValidAt()) {
235
+ bad(`Certificado ${holder} fora da vigência (até ${certificate.notAfter.toISOString().slice(0, 10)})`);
236
+ failures++;
237
+ }
238
+ else if (days < 30)
239
+ warn(`Certificado ${holder} vence em ${days} dias (${certificate.notAfter.toISOString().slice(0, 10)})`);
240
+ else
241
+ ok(`Certificado ${holder}, válido por mais ${days} dias`);
242
+ if (!certificate.cnpj && !certificate.cpf)
243
+ warn('O certificado não traz CNPJ/CPF nos campos ICP-Brasil: informe o autor ao cancelar');
244
+ }
245
+ }
246
+ catch (error) {
247
+ bad(`Certificado: ${error instanceof CertificateValidationError ? `${error.code}: ${error.message}` : error instanceof Error ? error.message : String(error)}`);
248
+ failures++;
249
+ }
250
+ console.log(failures ? `\n${failures} problema(s) encontrado(s).` : `\n${green('Tudo pronto.')} Próximo passo: nfse validate nota.json`);
251
+ if (failures)
252
+ throw new CliError('', 1);
253
+ },
254
+ async cert(args, options) {
255
+ const certificate = await loadCertificate({ ...options, cert: args[0] ?? options.cert }, true);
256
+ if (!(certificate instanceof NfseCertificate))
257
+ throw new CliError('Certificado legado não suportado aqui.');
258
+ if (options.json) {
259
+ console.log(JSON.stringify({ ...certificate.toJSON(), diasRestantes: certificate.daysUntilExpiry() }, null, 2));
260
+ return;
261
+ }
262
+ console.log(` Titular ${certificate.subject}`);
263
+ console.log(` CNPJ / CPF ${certificate.cnpj ?? certificate.cpf ?? '—'}`);
264
+ console.log(` Emissor ${certificate.issuer}`);
265
+ console.log(` Validade ${certificate.notBefore.toISOString().slice(0, 10)} a ${certificate.notAfter.toISOString().slice(0, 10)} (${certificate.daysUntilExpiry()} dias restantes)`);
266
+ console.log(` Fingerprint ${certificate.fingerprintSha256}`);
267
+ },
268
+ async validate(args, options) {
269
+ const ambiente = ambienteOf(options);
270
+ const request = readRequest(args[0], ambiente);
271
+ const report = validateDpsJsonRequest(request);
272
+ let xmlIssue = [];
273
+ if (report.valid) {
274
+ try {
275
+ validateDpsXmlAgainstXsd(buildDpsFromJson(request).xml);
276
+ }
277
+ catch (error) {
278
+ if (!(error instanceof DpsXsdValidationError))
279
+ throw error;
280
+ xmlIssue = error.details;
281
+ }
282
+ }
283
+ const valid = report.valid && xmlIssue.length === 0;
284
+ if (options.json) {
285
+ console.log(JSON.stringify({ valid, issues: report.issues, warnings: report.warnings, xsd: xmlIssue }, null, 2));
286
+ }
287
+ else {
288
+ for (const issue of report.issues)
289
+ bad(`${issue.path}: ${issue.message}${issue.suggestion ? dim(` — ${issue.suggestion}`) : ''}`);
290
+ for (const detail of xmlIssue)
291
+ bad(`XSD: ${detail}`);
292
+ for (const warning of report.warnings)
293
+ warn(`${warning.path}: ${warning.message}`);
294
+ if (valid)
295
+ ok(`DPS válida (${ambiente}). Próximo passo: nfse emit ${args[0]}`);
296
+ }
297
+ if (!valid)
298
+ throw new CliError('', 1);
299
+ },
300
+ async xml(args, options) {
301
+ const { id, xml } = buildDpsFromJson(readRequest(args[0], ambienteOf(options)));
302
+ validateDpsXmlAgainstXsd(xml);
303
+ if (options.output) {
304
+ writeFileSync(options.output, xml);
305
+ ok(`${id} salvo em ${options.output}`);
306
+ }
307
+ else
308
+ console.log(xml);
309
+ },
310
+ async emit(args, options) {
311
+ const ambiente = ambienteOf(options);
312
+ const request = readRequest(args[0], ambiente);
313
+ if (options.mock)
314
+ (await import('./testing.js')).installMockSefin();
315
+ const certificate = (await loadCertificate(options, true));
316
+ const nota = prepararNota(request, certificate);
317
+ const emissao = request.emissao;
318
+ if (!options.json) {
319
+ console.log(bold('\nResumo da NFS-e'));
320
+ console.log(` Prestador ${request.prestador?.cnpj ?? '-'}`);
321
+ if (emissao.tomador)
322
+ console.log(` Tomador ${emissao.tomador.CNPJ ?? emissao.tomador.CPF ?? emissao.tomador.NIF ?? '-'} ${emissao.tomador.xNome ?? ''}`);
323
+ console.log(` Serviço ${request.servico?.cTribNac ?? '-'} ${request.servico?.xDescServ ?? ''}`);
324
+ console.log(` Valor R$ ${emissao.valores?.vServ ?? emissao.vServ ?? '-'}`);
325
+ console.log(` DPS ${nota.dpsId}`);
326
+ }
327
+ await confirm(options, ambiente, 'Emitir esta NFS-e');
328
+ try {
329
+ const result = await transmitirNotaPreparada(nota, certificate);
330
+ if (options.output)
331
+ writeFileSync(options.output, result.nfseXml);
332
+ if (options.json)
333
+ console.log(JSON.stringify({ ok: true, chaveAcesso: result.chaveAcesso, dpsId: result.dpsId }, null, 2));
334
+ else
335
+ ok(`NFS-e emitida. Chave de acesso: ${bold(result.chaveAcesso)}${options.output ? ` (XML em ${options.output})` : ''}`);
336
+ }
337
+ catch (error) {
338
+ if (error instanceof EmitirNotaError && !error.erros.some((e) => e.Codigo === 'INVALID_AUTHORIZATION_RESPONSE'))
339
+ printRejection(error.erros, error.status, options);
340
+ warn(`Sem resposta clara da SEFIN (${error instanceof Error ? error.message : String(error)}). Consultando a DPS antes de qualquer reenvio...`);
341
+ const existing = await recuperarNfsePorDps(nota.dpsId, certificate, ambiente, { retries: 3 });
342
+ if (existing) {
343
+ ok(`A NFS-e foi emitida. Chave de acesso: ${bold(existing.chaveAcesso)}`);
344
+ return;
345
+ }
346
+ throw new CliError(`A SEFIN não recebeu a DPS ${nota.dpsId}. É seguro rodar o mesmo comando de novo.`);
347
+ }
348
+ },
349
+ async get(args, options) {
350
+ const chave = args[0];
351
+ if (!chave)
352
+ throw new CliError('Informe a chave de acesso (50 dígitos).');
353
+ const certificate = (await loadCertificate(options, true));
354
+ try {
355
+ const nota = await obterNfse(chave, certificate, ambienteOf(options));
356
+ if (options.output)
357
+ writeFileSync(options.output, nota.nfseXml);
358
+ if (options.json)
359
+ console.log(JSON.stringify(nota.resumo, null, 2));
360
+ else
361
+ printResumo(nota.resumo);
362
+ }
363
+ catch (error) {
364
+ if (error instanceof ConsultaNfseError && error.notFound)
365
+ throw new CliError(`NFS-e não encontrada em ${ambienteOf(options)}.`);
366
+ if (error instanceof ConsultaNfseError)
367
+ printRejection(error.erros, error.status, options);
368
+ throw error;
369
+ }
370
+ },
371
+ async danfse(args, options) {
372
+ const chave = args[0];
373
+ if (!chave)
374
+ throw new CliError('Informe a chave de acesso (50 dígitos).');
375
+ const certificate = (await loadCertificate(options, true));
376
+ const result = await baixarDanfse(chave, certificate, ambienteOf(options));
377
+ if (!result.pdf)
378
+ throw new CliError(`DANFSe indisponível (HTTP ${result.status}).`);
379
+ const output = options.output ?? `danfse-${chave}.pdf`;
380
+ writeFileSync(output, result.pdf);
381
+ ok(`DANFSe salvo em ${output}`);
382
+ },
383
+ async cancel(args, options) {
384
+ const chave = args[0];
385
+ if (!chave)
386
+ throw new CliError('Informe a chave de acesso (50 dígitos).');
387
+ const ambiente = ambienteOf(options);
388
+ const certificate = (await loadCertificate(options, true));
389
+ const autor = certificate instanceof NfseCertificate && (certificate.cnpj || certificate.cpf)
390
+ ? (certificate.cnpj ? { CNPJ: certificate.cnpj } : { CPF: certificate.cpf })
391
+ : undefined;
392
+ if (!autor)
393
+ throw new CliError('O certificado não traz CNPJ/CPF ICP-Brasil; cancele pelo SDK informando o autor.');
394
+ const built = buildCancelamentoFromJson({
395
+ ambiente,
396
+ chaveAcesso: chave,
397
+ autor,
398
+ cMotivo: (options.motivo ?? ''),
399
+ xMotivo: options.justificativa ?? '',
400
+ });
401
+ const nota = await obterNfse(chave, certificate, ambiente).catch(() => undefined);
402
+ if (nota && !options.json) {
403
+ console.log(bold('\nNFS-e a cancelar'));
404
+ printResumo(nota.resumo);
405
+ }
406
+ await confirm(options, ambiente, 'Cancelar esta NFS-e');
407
+ try {
408
+ const result = await registrarEvento(built, certificate);
409
+ if (options.json)
410
+ console.log(JSON.stringify({ ok: true, pedRegEventoId: result.pedRegEventoId }, null, 2));
411
+ else
412
+ ok(`Cancelamento registrado (${result.pedRegEventoId}).`);
413
+ }
414
+ catch (error) {
415
+ if (error instanceof RegistrarEventoError)
416
+ printRejection(error.erros, error.status, options);
417
+ throw error;
418
+ }
419
+ },
420
+ async recover(args, options) {
421
+ const dpsId = args[0];
422
+ if (!dpsId)
423
+ throw new CliError('Informe o Id da DPS ("DPS" + 42 dígitos).');
424
+ const certificate = (await loadCertificate(options, true));
425
+ const nota = await recuperarNfsePorDps(dpsId, certificate, ambienteOf(options));
426
+ if (options.json) {
427
+ console.log(JSON.stringify(nota ? { encontrada: true, ...nota.resumo } : { encontrada: false }, null, 2));
428
+ return;
429
+ }
430
+ if (!nota) {
431
+ warn('A SEFIN não tem NFS-e para esta DPS: ela não chegou a ser processada. É seguro reenviar a mesma DPS.');
432
+ return;
433
+ }
434
+ ok('A SEFIN gerou a NFS-e:');
435
+ printResumo(nota.resumo);
436
+ },
437
+ async explain(args, options) {
438
+ if (!args.length)
439
+ throw new CliError('Informe um ou mais códigos. Ex.: nfse explain E0014');
440
+ const explicacoes = args.map((codigo) => explicarRejeicao(codigo));
441
+ if (options.json)
442
+ console.log(JSON.stringify(explicacoes, null, 2));
443
+ else
444
+ printExplanations(explicacoes);
445
+ },
446
+ async mcp() {
447
+ const { runNfseMcpStdio } = await import('./mcpServer.js');
448
+ await runNfseMcpStdio();
449
+ },
450
+ };
451
+ /** Entry point; exported for tests. Returns the process exit code. */
452
+ export async function runCli(argv) {
453
+ let parsed;
454
+ try {
455
+ parsed = parseArgs({
456
+ args: argv,
457
+ allowPositionals: true,
458
+ options: {
459
+ producao: { type: 'boolean', default: false },
460
+ mock: { type: 'boolean', default: false },
461
+ cert: { type: 'string' },
462
+ 'password-file': { type: 'string' },
463
+ output: { type: 'string', short: 'o' },
464
+ yes: { type: 'boolean', short: 'y', default: false },
465
+ json: { type: 'boolean', default: false },
466
+ motivo: { type: 'string' },
467
+ justificativa: { type: 'string' },
468
+ help: { type: 'boolean', short: 'h', default: false },
469
+ version: { type: 'boolean', short: 'v', default: false },
470
+ },
471
+ });
472
+ }
473
+ catch (error) {
474
+ console.error(`${red('✖')} ${error instanceof Error ? error.message : String(error)}\n\n${HELP}`);
475
+ return 1;
476
+ }
477
+ const { values, positionals } = parsed;
478
+ if (values.version) {
479
+ console.log(VERSION);
480
+ return 0;
481
+ }
482
+ const [name, ...args] = positionals;
483
+ if (values.help || !name) {
484
+ console.log(HELP);
485
+ return name || values.help ? 0 : 1;
486
+ }
487
+ const command = commands[name];
488
+ if (!command) {
489
+ console.error(`${red('✖')} Comando desconhecido: ${name}\n\n${HELP}`);
490
+ return 1;
491
+ }
492
+ const options = values;
493
+ if (options.mock && options.producao) {
494
+ console.error(`${red('✖')} --mock não pode ser usado com --producao.`);
495
+ return 1;
496
+ }
497
+ try {
498
+ await command(args, options);
499
+ return 0;
500
+ }
501
+ catch (error) {
502
+ if (error instanceof CliError) {
503
+ if (error.message)
504
+ console.error(`${error.exitCode === 0 ? '' : `${red('✖')} `}${error.message}`);
505
+ return error.exitCode;
506
+ }
507
+ if (error instanceof DpsFiscalValidationError) {
508
+ for (const issue of error.issues)
509
+ console.error(`${red('✖')} ${issue.path}: ${issue.message}`);
510
+ return 1;
511
+ }
512
+ if (error instanceof CertificateValidationError || error instanceof EventoInvalidoError || error instanceof DpsXsdValidationError) {
513
+ console.error(`${red('✖')} ${error.message}`);
514
+ return 1;
515
+ }
516
+ console.error(`${red('✖')} ${error instanceof Error ? error.message : String(error)}`);
517
+ return 1;
518
+ }
519
+ }
520
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cliBin.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from './cli.js';
3
+ runCli(process.argv.slice(2)).then((code) => {
4
+ process.exitCode = code;
5
+ });
6
+ //# sourceMappingURL=cliBin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliBin.js","sourceRoot":"","sources":["../cliBin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IAC1C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { DpsJsonRequest } from './dpsJson.js';
2
+ /**
3
+ * Illustrative payload for `nfse init` and `nfse doctor`. The values are
4
+ * fictitious; real invoices need the issuer's own codes and tax choices.
5
+ */
6
+ export declare function examplePayload(): DpsJsonRequest;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Illustrative payload for `nfse init` and `nfse doctor`. The values are
3
+ * fictitious; real invoices need the issuer's own codes and tax choices.
4
+ */
5
+ export function examplePayload() {
6
+ return {
7
+ ambiente: 'restrita',
8
+ prestador: {
9
+ cnpj: '12345678000195',
10
+ cLocEmi: '4106902',
11
+ serie: '1601',
12
+ opSimpNac: '1',
13
+ regEspTrib: '0',
14
+ },
15
+ servico: {
16
+ cTribNac: '010201',
17
+ xDescServ: 'Desenvolvimento de software',
18
+ cLocPrestacao: '4106902',
19
+ },
20
+ emissao: {
21
+ nDPS: '1',
22
+ valores: { vServ: '10.00' },
23
+ tributacaoMunicipal: { tribISSQN: '1', tpRetISSQN: '1' },
24
+ tributacaoFederal: { piscofins: { CST: '07' } },
25
+ totTrib: { pTotTribFed: '0.00', pTotTribEst: '0.00', pTotTribMun: '5.00' },
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=cliExample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliExample.js","sourceRoot":"","sources":["../cliExample.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE;YACT,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,GAAG;SAChB;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,6BAA6B;YACxC,aAAa,EAAE,SAAS;SACzB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3B,mBAAmB,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;YACxD,iBAAiB,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/C,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;SAC3E;KACF,CAAC;AACJ,CAAC"}