@sinete/nfe 0.1.0 → 0.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.
Files changed (90) hide show
  1. package/README.md +55 -50
  2. package/dist/build/build.d.ts +23 -23
  3. package/dist/build/build.d.ts.map +1 -1
  4. package/dist/build/destinatario.d.ts +2 -2
  5. package/dist/build/ibscbs.d.ts.map +1 -1
  6. package/dist/build/nfce.d.ts +5 -5
  7. package/dist/build/nfce.d.ts.map +1 -1
  8. package/dist/build/pl.d.ts +4 -4
  9. package/dist/build/pl.d.ts.map +1 -1
  10. package/dist/build/rejeicoes.d.ts +7 -7
  11. package/dist/build/rejeicoes.d.ts.map +1 -1
  12. package/dist/build/textos.d.ts +26 -0
  13. package/dist/build/textos.d.ts.map +1 -0
  14. package/dist/build/values.d.ts +8 -8
  15. package/dist/build/values.d.ts.map +1 -1
  16. package/dist/decimal.d.ts +2 -2
  17. package/dist/decimal.d.ts.map +1 -1
  18. package/dist/format.d.ts +19 -19
  19. package/dist/format.d.ts.map +1 -1
  20. package/dist/ibs-cbs.d.ts +10 -5
  21. package/dist/ibs-cbs.d.ts.map +1 -1
  22. package/dist/ibs-cbs.js +35 -35
  23. package/dist/ibs-cbs.js.map +3 -3
  24. package/dist/index.d.ts +18 -18
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +796 -588
  27. package/dist/index.js.map +27 -26
  28. package/dist/issues.d.ts +10 -10
  29. package/dist/issues.d.ts.map +1 -1
  30. package/dist/model.d.ts +4 -4
  31. package/dist/ports.d.ts +15 -15
  32. package/dist/ports.d.ts.map +1 -1
  33. package/dist/rotulo.d.ts +2 -2
  34. package/dist/rotulo.d.ts.map +1 -1
  35. package/dist/rtc.d.ts +23 -23
  36. package/dist/rtc.d.ts.map +1 -1
  37. package/dist/services/client.d.ts +44 -40
  38. package/dist/services/client.d.ts.map +1 -1
  39. package/dist/services/gzip.d.ts +1 -1
  40. package/dist/services/gzip.d.ts.map +1 -1
  41. package/dist/services/index.d.ts +4 -4
  42. package/dist/services/index.d.ts.map +1 -1
  43. package/dist/services/outcome.d.ts +3 -3
  44. package/dist/services/outcome.d.ts.map +1 -1
  45. package/dist/services/proc.d.ts +6 -6
  46. package/dist/services/proc.d.ts.map +1 -1
  47. package/dist/services/recuperar.d.ts +8 -7
  48. package/dist/services/recuperar.d.ts.map +1 -1
  49. package/dist/services/resolver.d.ts +12 -11
  50. package/dist/services/resolver.d.ts.map +1 -1
  51. package/dist/services/soap.d.ts +8 -8
  52. package/dist/services/soap.d.ts.map +1 -1
  53. package/dist/time.d.ts +4 -4
  54. package/dist/time.d.ts.map +1 -1
  55. package/dist/versao-gerada.d.ts +1 -1
  56. package/package.json +9 -9
  57. package/src/build/build.ts +213 -203
  58. package/src/build/destinatario.ts +8 -8
  59. package/src/build/ibscbs.ts +10 -6
  60. package/src/build/icms.ts +6 -6
  61. package/src/build/nfce.ts +19 -19
  62. package/src/build/pl.ts +12 -12
  63. package/src/build/rejeicoes.ts +13 -13
  64. package/src/build/textos.ts +228 -0
  65. package/src/build/values.ts +14 -14
  66. package/src/data/arredondamento.json +1 -1
  67. package/src/data/cstat.json +6 -6
  68. package/src/data/fusos.json +1 -1
  69. package/src/data/nfce-urls.json +2 -2
  70. package/src/data/produtor-rural.json +1 -1
  71. package/src/data/resp-tec.json +1 -1
  72. package/src/decimal.ts +10 -9
  73. package/src/format.ts +29 -28
  74. package/src/ibs-cbs.ts +79 -74
  75. package/src/index.ts +29 -27
  76. package/src/issues.ts +11 -11
  77. package/src/model.ts +4 -4
  78. package/src/ports.ts +15 -15
  79. package/src/rotulo.ts +4 -4
  80. package/src/rtc.ts +91 -91
  81. package/src/services/client.ts +248 -217
  82. package/src/services/gzip.ts +7 -7
  83. package/src/services/index.ts +12 -10
  84. package/src/services/outcome.ts +9 -9
  85. package/src/services/proc.ts +50 -49
  86. package/src/services/recuperar.ts +29 -25
  87. package/src/services/resolver.ts +25 -23
  88. package/src/services/soap.ts +35 -35
  89. package/src/time.ts +6 -6
  90. package/src/versao-gerada.ts +1 -1
package/README.md CHANGED
@@ -5,9 +5,9 @@ NF-e modelo 55 e NFC-e modelo 65: modelo de entrada tipado, montagem com totais
5
5
  Para emitir, retomar e cancelar com estado entre chamadas (bytes assinados gravados antes do envio, trava entre processos, retomada automática, cancelamento com recuperação, pool por certificado), use o emissor de NF-e do [`@sinete/emissor`](../emissor) (`@sinete/emissor/nfe`, ou `sinete/emissor/nfe` pelo guarda-chuva). Este pacote é o protocolo e as primitivas sem estado que ele usa (ADR 0010):
6
6
 
7
7
  ```ts
8
- import { createNfeEmissor } from '@sinete/emissor/nfe';
8
+ import { criarEmissorNfe } from '@sinete/emissor/nfe';
9
9
 
10
- const nfe = await createNfeEmissor({ pfx, senha, ambiente: 'homologacao', store, aoDecidir });
10
+ const nfe = await criarEmissorNfe({ pfx, senha, ambiente: 'homologacao', store, aoDecidir });
11
11
  const desfecho = await nfe.emitir('pedido-42', nota);
12
12
  ```
13
13
 
@@ -16,34 +16,34 @@ Status: pré-alfa, API instável até a 1.0. Contra a SEFAZ real, só em homolog
16
16
  ## API completa
17
17
 
18
18
  ```ts
19
- import { systemClock, timeContext } from '@sinete/core';
20
- import { buildNfe, createNfeClient, signNfe } from '@sinete/nfe';
19
+ import { relogioDoSistema, contextoDeTempo } from '@sinete/core';
20
+ import { montarNfe, criarClienteNfe, assinarNfe } from '@sinete/nfe';
21
21
 
22
- const r = await buildNfe(nota, { ambiente: 'homologacao', time: timeContext({ emissao: systemClock }) });
23
- if (!r.ok) throw new Error(r.issues.map((i) => `${i.path}: ${i.message}`).join('\n'));
24
- const assinada = await signNfe(r.value, signer); // grave esta string antes de enviar
25
- const client = createNfeClient({ transport, signer, ambiente: 'homologacao', uf: 'SP', clock: systemClock });
22
+ const r = await montarNfe(nota, { ambiente: 'homologacao', tempo: contextoDeTempo({ emissao: relogioDoSistema }) });
23
+ if (!r.ok) throw new Error(r.ocorrencias.map((i) => `${i.caminho}: ${i.mensagem}`).join('\n'));
24
+ const assinada = await assinarNfe(r.valor, signer); // grave esta string antes de enviar
25
+ const client = criarClienteNfe({ transporte: transport, assinador: signer, ambiente: 'homologacao', uf: 'SP', relogio: relogioDoSistema });
26
26
  const desfecho = await client.autorizar(assinada);
27
- if (desfecho.status === 'authorized') guardar(desfecho.value.nfeProc);
27
+ if (desfecho.tipo === 'autorizado') guardar(desfecho.valor.nfeProc);
28
28
  ```
29
29
 
30
- ## Montagem (`buildNfe`)
30
+ ## Montagem (`montarNfe`)
31
31
 
32
- A entrada (`NfeInput`) usa os nomes do MOC nos campos e nomes em português nos grupos (`emitente`, `destinatario`, `itens`, `impostos.icms`, `transporte`, `cobranca`, `pagamento`). Valores aceitam `string`, `number`, `bigint` ou `Decimal`; prefira texto (`'12.34'`). Grupos raros (DI, rastro, veículo, medicamento, combustível, exportação, cana, agropecuário) vão como o tipo do `@sinete/schemas`, repassados.
32
+ A entrada (`DadosNfe`) usa os nomes do MOC nos campos e nomes em português nos grupos (`emitente`, `destinatario`, `itens`, `impostos.icms`, `transporte`, `cobranca`, `pagamento`). Valores aceitam `string`, `number`, `bigint` ou `Decimal`; prefira texto (`'12.34'`). Grupos raros (DI, rastro, veículo, medicamento, combustível, exportação, cana, agropecuário) vão como o tipo do `@sinete/schemas`, repassados.
33
33
 
34
34
  - **PL por vigência.** O relógio de emissão e o ambiente escolhem o PL (`selecionarPl` do schemas). O objeto é montado na forma do PL mais novo e serializado com o descritor do vigente; campo que o PL vigente não conhece vira `campo_fora_do_pl` em vez de sumir.
35
35
  - **Derivados.** Cada valor que tem conta no MOC é calculado quando falta (vProd, vICMS, FCP, ST por MVA com IPI na base, diferimento, crédito do Simples, IPI, PIS, COFINS, ISSQN, retenção do transporte, vLiq) e, quando vem, conferido contra a conta com a tolerância de R$ 0,01 da nota (*4) do Anexo I (`valor_divergente`). Na complementar e na de ajuste (finNFe 2 e 3) nada é conferido, e o vProd só é conferido na normal (RV I11).
36
36
  - **Bases.** Base de cálculo informada prevalece sem conferência; o padrão (valor da operação, reduzido por pRedBC) só vale quando ela falta. A base legal varia por UF e operação: na checagem do corpus, 4.474 bases de IPI e 157 de ICMS autorizadas eram diferentes do valor da operação.
37
- - **Arredondamento.** Por família de campo, como dado (`src/data/arredondamento.json`): HALF_UP nos tributos atuais, HALF_EVEN no IBS/CBS (Calculadora da RFB). `options.arredondamento` troca o modo de uma família.
37
+ - **Arredondamento.** Por família de campo, como dado (`src/data/arredondamento.json`): HALF_UP nos tributos atuais, HALF_EVEN no IBS/CBS (Calculadora da RFB). `opcoes.arredondamento` troca o modo de uma família.
38
38
  - **Totais.** ICMSTot (W16-10 com as exceções do faturamento direto de veículos), ISSQNtot, IBSCBSTot (W35 a W59g, somando os grupos dos itens), vItem e vNFTot (VB01-10; IBS/CBS no vItem só com fato gerador a partir de 2027, `src/data/reforma.json`). O vICMSDeson só sai do vNF com `indDeduzDeson` 1; a exceção 3 da W16-10 aceita as duas formas, e notas antigas costumam deduzir sem o indicador.
39
- - **Pagamento igual ao total.** Com `options.pagamentoIgualTotal`, o `vPag` do único `detPag` é o `vNF` calculado na mesma montagem, e o valor informado nele é ignorado; nenhum, mais de um `detPag` ou `tPag` 90 dão `pagamento_igual_total`.
40
- - **Chave e cNF.** cNF aleatório (WebCrypto, injetável em `options.random`) sorteado de novo até passar nas regras de emissão da chave (RV B03-10); cNF informado é conferido. Emitente CPF usa as séries 920 a 969.
39
+ - **Pagamento igual ao total.** Com `opcoes.pagamentoIgualTotal`, o `vPag` do único `detPag` é o `vNF` calculado na mesma montagem, e o valor informado nele é ignorado; nenhum, mais de um `detPag` ou `tPag` 90 dão `pagamento_igual_total`.
40
+ - **Chave e cNF.** cNF aleatório (WebCrypto, injetável em `opcoes.aleatorio`) sorteado de novo até passar nas regras de emissão da chave (RV B03-10); cNF informado é conferido. Emitente CPF usa as séries 920 a 969.
41
41
  - **Regras por UF como dado.** Fuso (`fusos.json`), exigência de responsável técnico e CSRT (`resp-tec.json`, hoje só PR com fonte), vedação da NF de produtor modelo 04 (`produtor-rural.json`). O hashCSRT é Base64(SHA-1(CSRT + chave)) (NT 2018.005); o CSRT nunca vai para o XML.
42
42
  - **Homologação.** O nome do destinatário vira o literal da RV E04-20.
43
- - **Validação estrita.** O XML canônico é validado contra o schema do PL vigente antes de devolver; qualquer problema volta como lista de `ValidationIssue` (`path`, `code`, `message`, `origem`), nunca como exceção. Os códigos estão em `NFE_ISSUE_CODES`. `origem` é `entrada` quando a conferência foi sobre a `NfeInput` (o caminho é dela) e `montagem` quando foi sobre o que o pacote produziu (schema e PL do XML, chave gerada, grupo IBS/CBS da calculadora); `rotuloDoCaminho(path)` dá o caminho em português para a tela (`Item 2, Descrição do produto`), nos dois formatos de caminho. Veja o [ADR 0011](../../docs/adr/0011-origem-e-rotulo-das-ocorrencias.md).
44
- - **`verProc`.** Padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc` do `@sinete/core`, cortado com segurança em 20 caracteres); `options.verProc` sobrepõe.
43
+ - **Validação estrita.** O XML canônico é validado contra o schema do PL vigente antes de devolver; qualquer problema volta como lista de `Ocorrencia` (`caminho`, `code`, `mensagem`, `origem`), nunca como exceção. Os códigos estão em `CODIGOS_OCORRENCIA_NFE`. `origem` é `entrada` quando a conferência foi sobre a `DadosNfe` (o caminho é dela) e `montagem` quando foi sobre o que o pacote produziu (schema e PL do XML, chave gerada, grupo IBS/CBS da calculadora); `rotuloDoCaminho(path)` dá o caminho em português para a tela (`Item 2, Descrição do produto`), nos dois formatos de caminho. Veja o [ADR 0011](../../docs/adr/0011-origem-e-rotulo-das-ocorrencias.md).
44
+ - **`verProc`.** Padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc` do `@sinete/core`, cortado com segurança em 20 caracteres); `opcoes.verProc` sobrepõe.
45
45
 
46
- `signNfe` insere a `Signature` como último filho de `NFe` por splice. A string que ele devolve é a que vai para a SEFAZ e para o banco.
46
+ `assinarNfe` insere a `Signature` como último filho de `NFe` por splice. A string que ele devolve é a que vai para a SEFAZ e para o banco.
47
47
 
48
48
  ## NFC-e (modelo 65)
49
49
 
@@ -52,97 +52,102 @@ A entrada (`NfeInput`) usa os nomes do MOC nos campos e nomes em português nos
52
52
  - **Padrões.** `indPres` 1, `indFinal` 1, `tpImp` 4 e `idDest` 1. Destinatário opcional, obrigatório na entrega a domicílio (`indPres` 4, com endereço e transportador) e acima de R$ 10.000,00 (W16-40). Em homologação, a descrição do primeiro item vira o literal da RV I04-10 (`XPROD_HOMOLOGACAO_NFCE`).
53
53
  - **Pagamento obrigatório.** Sem `tPag` 14, 90 e 99; soma dos pagamentos não abaixo do total (salvo `tPag` 91, pagamento posterior, com valor zero); troco calculado quando falta (`vTroco`, YA03-20) e conferido quando vem (YA09-10); cartão e PIX com o grupo `card` (YA04-10).
54
54
  - **Grupos vedados** (`grupo_vedado`): data de saída, previsão de entrega, notas referenciadas, compra governamental, IE-ST, Suframa, veículo, armamento, RECOPI, IPI, II, PIS-ST, COFINS-ST, ICMS da UF de destino, partilha e repasse do ICMS, devolução de tributos, cobrança, exportação, compra, cana e transporte fora da entrega a domicílio.
55
- - **QR Code** (`infNFeSupl`). Padrão versão 3 (NT 2025.001, Manual de Padrões Técnicos do DANFE NFC-e e QR Code 6.0, item 4.4), sem CSC: `chave|3|tpAmb`. Com `options.qrCode = { versao: '2', idCSC, CSC }`, o hash SHA-1 com o CSC da versão 2 (item 4.3); o CSC nunca vai para o XML, e o emitente pessoa física não usa a versão 2 (ZX02-222). O endereço do QR Code e o `urlChave` saem da UF, do ambiente e da data de emissão (`src/data/nfce-urls.json`, das tabelas do Portal Nacional da NFC-e); `options.urlQrCode` e `options.urlChave` sobrepõem (AM e MA publicam o endereço sem protocolo e pedem a opção).
55
+ - **QR Code** (`infNFeSupl`). Padrão versão 3 (NT 2025.001, Manual de Padrões Técnicos do DANFE NFC-e e QR Code 6.0, item 4.4), sem CSC: `chave|3|tpAmb`. Com `opcoes.qrCode = { versao: '2', idCSC, CSC }`, o hash SHA-1 com o CSC da versão 2 (item 4.3); o CSC nunca vai para o XML, e o emitente pessoa física não usa a versão 2 (ZX02-222). O endereço do QR Code e o `urlChave` saem da UF, do ambiente e da data de emissão (`src/data/nfce-urls.json`, das tabelas do Portal Nacional da NFC-e); `opcoes.urlQrCode` e `opcoes.urlChave` sobrepõem (AM e MA publicam o endereço sem protocolo e pedem a opção).
56
56
  - **Contingência off-line.** `contingencia: { tpEmis: '9', dhCont, xJust }`. O QR Code leva o dia da emissão, o `vNF` e, na versão 3, a identificação do destinatário e a assinatura RSA-SHA1 dos parâmetros com o certificado da nota; na versão 2, o `digVal` (o DigestValue da assinatura em hexadecimal). A nota é impressa com esse XML e transmitida depois, com os mesmos bytes.
57
57
 
58
- `signNfe` acrescenta o `infNFeSupl` antes da `Signature`. Para assinar em três fases (A3, HSM), `assinaturaQrCode(built, signer)` e `comQrCode(built, assinatura)` dão o texto que vai para o `prepareSignature` do `@sinete/core/xml`.
58
+ `assinarNfe` acrescenta o `infNFeSupl` antes da `Signature`. Para assinar em três fases (A3, HSM), `assinaturaQrCode(nota, assinador)` e `comQrCode(nota, assinatura)` dão o texto que vai para o `prepararAssinatura` do `@sinete/core/xml`.
59
59
 
60
60
  ## IBS e CBS
61
61
 
62
- O IBS/CBS é obrigatório na NF-e (CRT 3 rejeitado sem o grupo desde 03/08/2026; Simples e MEI a partir de 04/01/2027), então o cálculo vem no pacote. O item traz a classificação (`ibsCbs.classificacao`: CST, cClassTrib, vBC opcional e, nos cClassTrib que exigem ou permitem, a tributação regular em `gTribRegular: { CSTReg, cClassTribReg }`) e, sem `options.ibsCbs`, o `buildNfe` calcula com o `ibsCbsCalculator()`: o `@sinete/ibs-cbs/calcular` calcula, o `@sinete/ibs-cbs-dados` e o `@sinete/ibs-cbs/aliquotas` dão dados e alíquotas, e o `@sinete/ibs-cbs/validar` confere os grupos produzidos pelas regras da NT 2025.002 antes de a nota ser montada. Item com grupo pronto (`ibsCbs.grupo`) dispensa o cálculo.
62
+ O IBS/CBS é obrigatório na NF-e (CRT 3 rejeitado sem o grupo desde 03/08/2026; Simples e MEI a partir de 04/01/2027), então o cálculo vem no pacote. O item traz a classificação (`ibsCbs.classificacao`: CST, cClassTrib, vBC opcional e, nos cClassTrib que exigem ou permitem, a tributação regular em `gTribRegular: { CSTReg, cClassTribReg }`) e, sem `opcoes.ibsCbs`, o `montarNfe` calcula com o `calculadoraIbsCbs()`: o `@sinete/ibs-cbs/calcular` calcula, o `@sinete/ibs-cbs-dados` e o `@sinete/ibs-cbs/aliquotas` dão dados e alíquotas, e o `@sinete/ibs-cbs/validar` confere os grupos produzidos pelas regras da NT 2025.002 antes de a nota ser montada. Item com grupo pronto (`ibsCbs.grupo`) dispensa o cálculo.
63
63
 
64
64
  ```ts
65
- import { buildNfe, ibsCbsCalculator } from '@sinete/nfe';
65
+ import { montarNfe, calculadoraIbsCbs } from '@sinete/nfe';
66
66
 
67
67
  // Padrão: dataset embarcado, alíquotas oficiais, regras implantadas na data de emissão.
68
- const r = await buildNfe(nota, { ambiente: 'homologacao', time });
68
+ const r = await montarNfe(nota, { ambiente: 'homologacao', tempo: time });
69
69
  // item com impostos.ibsCbs.classificacao = { CST: '000', cClassTrib: '000001', vBC: '1000.00' }
70
70
 
71
71
  // Com opções: base para item sem vBC, alíquotas informadas, dataset verificado em runtime.
72
- const ibsCbs = ibsCbsCalculator({ base: (item) => item.vProd.minus(item.vDesc).toFixed(2), rates: minhasAliquotas });
73
- const r2 = await buildNfe(nota, { ambiente: 'homologacao', time, ibsCbs });
72
+ const ibsCbs = calculadoraIbsCbs({ base: (item) => item.vProd.minus(item.vDesc).toFixed(2), aliquotas: minhasAliquotas });
73
+ const r2 = await montarNfe(nota, { ambiente: 'homologacao', tempo: time, ibsCbs });
74
74
  ```
75
75
 
76
76
  ### Custo no bundle
77
77
 
78
- O dataset embarcado tem ~2 MB de JSON e é importado por `import()` dinâmico só na primeira nota com item classificado (`carregarDatasetEmbarcado()` adianta a carga; `ibsCbsCalculator({ dataset })` com um dataset já carregado faz o cálculo síncrono). Bundle de browser minificado (`bun build --target=browser --minify`), medido ao juntar o antigo `@sinete/nfe-rtc` a este pacote:
78
+ O dataset embarcado tem ~2 MB de JSON e é importado por `import()` dinâmico só na primeira nota com item classificado (`carregarDatasetEmbarcado()` adianta a carga; `calculadoraIbsCbs({ dataset })` com um dataset já carregado faz o cálculo síncrono). Bundle de browser minificado (`bun build --target=browser --minify`), medido ao juntar o antigo `@sinete/nfe-rtc` a este pacote:
79
79
 
80
80
  | Uso | Antes | Depois |
81
81
  |---|---|---|
82
- | Só leitura de XML (`documentoAssinado`, `sliceElement`, `gunzipBase64`) | 20,0 KiB | 20,0 KiB (20,2 sem code splitting) |
83
- | Serviços (`createNfeClient`: eventos, Distribuição DF-e) | 375,9 KiB | 375,9 KiB (376,1 sem code splitting) |
84
- | Emissão (`buildNfe`, `signNfe`) com IBS/CBS | 2.033,9 KiB num arquivo | com code splitting, 264,3 KiB na carga inicial (75,3 KiB gzip) e 1.770,3 KiB (109,1 KiB gzip) num chunk carregado na primeira nota classificada; sem code splitting, 2.034,3 KiB num arquivo |
82
+ | Só leitura de XML (`documentoAssinado`, `recortarElemento`, `descomprimirGzipBase64`) | 20,0 KiB | 20,0 KiB (20,2 sem code splitting) |
83
+ | Serviços (`criarClienteNfe`: eventos, Distribuição DF-e) | 375,9 KiB | 375,9 KiB (376,1 sem code splitting) |
84
+ | Emissão (`montarNfe`, `assinarNfe`) com IBS/CBS | 2.033,9 KiB num arquivo | com code splitting, 264,3 KiB na carga inicial (75,3 KiB gzip) e 1.770,3 KiB (109,1 KiB gzip) num chunk carregado na primeira nota classificada; sem code splitting, 2.034,3 KiB num arquivo |
85
85
 
86
- O motor, as alíquotas e as regras (~63 KiB minificados) entram estaticamente em quem usa o `buildNfe`; quem não emite não os carrega.
86
+ O motor, as alíquotas e as regras (~63 KiB minificados) entram estaticamente em quem usa o `montarNfe`; quem não emite não os carrega.
87
87
 
88
- ### A porta `IbsCbsCalculator`
88
+ ### A porta `CalculadoraIbsCbs`
89
89
 
90
- `options.ibsCbs` troca a calculadora padrão, para testes com alíquotas fixas ou para quem calcula em outro lugar:
90
+ `opcoes.ibsCbs` troca a calculadora padrão, para testes com alíquotas fixas ou para quem calcula em outro lugar:
91
91
 
92
92
  ```ts
93
- interface IbsCbsCalculator {
94
- calcular(request: { nota: IbsCbsNotaRequest; itens: readonly IbsCbsItemRequest[] }): IbsCbsResponse | Promise<IbsCbsResponse>;
93
+ interface CalculadoraIbsCbs {
94
+ calcular(pedido: { nota: PedidoIbsCbsNota; itens: readonly PedidoIbsCbsItem[] }): RespostaIbsCbs | Promise<RespostaIbsCbs>;
95
95
  }
96
96
  ```
97
97
 
98
- `IbsCbsNotaRequest` leva o instante do fato gerador e o da emissão, ambiente, modelo, tpNF, finNFe, indFinal, indPres, UF, município e CRT do emitente, destino (entrega, depois destinatário), cMunFGIBS e compra governamental. `IbsCbsItemRequest` leva nItem, CST, cClassTrib, NCM, CFOP, unidade e quantidade tributáveis e os valores do item já calculados (vProd, vDesc, vFrete, vSeg, vOutro, vICMS, vICMSST, vFCP, vFCPST, vIPI, vPIS, vCOFINS, vII, vISSQN, e o ICMS e o FCP de partilha para a UF de destino, vICMSUFDest e vFCPUFDest, zero sem o grupo) como `Decimal`, para a função `base` deduzir o que a composição de quem emite pedir; com `gTribRegular` quando a classificação traz. `IbsCbsResponse` é `{ itens: { nItem, IBSCBS }[], issues? }`.
98
+ `PedidoIbsCbsNota` leva o instante do fato gerador e o da emissão, ambiente, modelo, tpNF, finNFe, indFinal, indPres, UF, município e CRT do emitente, destino (entrega, depois destinatário), cMunFGIBS e compra governamental. `PedidoIbsCbsItem` leva nItem, CST, cClassTrib, NCM, CFOP, unidade e quantidade tributáveis e os valores do item já calculados (vProd, vDesc, vFrete, vSeg, vOutro, vICMS, vICMSST, vFCP, vFCPST, vIPI, vPIS, vCOFINS, vII, vISSQN, e o ICMS e o FCP de partilha para a UF de destino, vICMSUFDest e vFCPUFDest, zero sem o grupo) como `Decimal`, para a função `base` deduzir o que a composição de quem emite pedir; com `gTribRegular` quando a classificação traz. `RespostaIbsCbs` é `{ itens: { nItem, IBSCBS }[], ocorrencias? }`.
99
99
 
100
100
  ### O que a calculadora padrão decide
101
101
 
102
102
  - **Base.** O motor recebe a base já apurada, e a composição dela (NT 2025.002, UB16-10) ainda é "implementação futura, aguardando orientação normativa". A calculadora usa o `vBC` da classificação do item ou a função `base` das opções; sem as duas, o item vira ocorrência `ibscbs_base_ausente`, nunca uma base presumida.
103
103
  - **Local da operação.** `cMunFGIBS` (campo B12a), senão o destino (entrega, depois destinatário; LC 214/2025, art. 11), senão o emitente. Destino no exterior cai no emitente. Exportado como `localDaOperacao`.
104
- - **Datas.** O fato gerador escolhe dados e alíquotas; a emissão escolhe as regras da NT implantadas no ambiente (`IbsCbsNotaRequest.emissao`).
105
- - **Erros como ocorrências.** `ClassificationError`, `UnsupportedRegimeError` e `RateUnknownError` viram `ValidationIssue` no caminho do item (`itens[n].impostos.ibsCbs`), e cada violação das regras do `@sinete/ibs-cbs/validar`, `ibscbs_regra_nt` com a regra, a rejeição e a fonte. O `buildNfe` devolve `{ ok: false, issues }`. Outros erros propagam.
104
+ - **Datas.** O fato gerador escolhe dados e alíquotas; a emissão escolhe as regras da NT implantadas no ambiente (`PedidoIbsCbsNota.emissao`).
105
+ - **Erros como ocorrências.** `ErroClassificacao`, `ErroRegimeNaoSuportado` e `ErroAliquotaDesconhecida` viram `Ocorrencia` no caminho do item (`itens[n].impostos.ibsCbs`), e cada violação das regras do `@sinete/ibs-cbs/validar`, `ibscbs_regra_nt` com a regra, a rejeição e a fonte. O `montarNfe` devolve `{ ok: false, ocorrencias }`. Outros erros propagam.
106
106
  - **Não suportado aqui.** Crédito presumido (`cCredPres`) pede percentuais por tributo que a porta não traz: informe o grupo pronto (`ibsCbs.grupo`). Diferimento e devolução também não têm campo na classificação da porta.
107
107
 
108
- | Opção do `ibsCbsCalculator` | Padrão | |
108
+ | Opção do `calculadoraIbsCbs` | Padrão | |
109
109
  |---|---|---|
110
- | `dataset` | o embarcado, importado sob demanda | um bundle verificado em runtime (`verifyDataset`), ou `bundledDataset()` já carregado |
111
- | `rates` | `officialRates()` | um provedor com alíquotas informadas |
110
+ | `dataset` | o embarcado, importado sob demanda | um bundle verificado em runtime (`conferirDataset`), ou `datasetEmbarcado()` já carregado |
111
+ | `aliquotas` | `aliquotasOficiais()` | um provedor com alíquotas informadas |
112
112
  | `base(item, nota)` | nenhum | base do item sem `vBC`, texto com até 2 casas |
113
- | `regras` | as implantadas | `false` desliga; `{ rules, ignoreActivation }` troca a lista ou antecipa as futuras |
114
- | `utcOffsetMinutes` | -180 | fuso para a data civil do fato gerador |
113
+ | `regras` | as implantadas | `false` desliga; `{ regras, ignorarAtivacao }` troca a lista ou antecipa as futuras |
114
+ | `deslocamentoMin` | -180 | fuso para a data civil do fato gerador |
115
115
 
116
116
  `test/rtc/e2e.test.ts` pega casos gravados da Calculadora offline da RFB (fixtures do oráculo do `@sinete/ibs-cbs/calcular`, só os sem divergência), monta a nota com a calculadora padrão, autoriza na `@sinete/sefaz-sim` por HTTPS com mTLS e confere cada campo dos grupos `IBSCBS` e do `IBSCBSTot` do `nfeProc` autorizado contra a saída gravada.
117
117
 
118
- ## Serviços (`createNfeClient`)
118
+ ### Experimental: `@sinete/nfe/ibs-cbs`
119
119
 
120
- `NfeClient` fala SOAP 1.2 sobre qualquer `Transport` do `@sinete/transport`, com endpoints por UF e ambiente vindos dele. Cada operação devolve um `SefazOutcome` do core, com a rejeição enriquecida pelo `@sinete/rejeicoes`; o mapa de cStat é dado (`src/data/cstat.json`).
120
+ O subpath `@sinete/nfe/ibs-cbs` reexporta o `@sinete/ibs-cbs` inteiro, cuja calculadora espera a norma da base de cálculo (NT 2025.002, UB16-10). Até o `@sinete/ibs-cbs` sair 1.0, o subpath é experimental ([ADR 0016](../../docs/adr/0016-politica-de-estabilidade.md), seção 5): pode mudar em minor, sempre com changeset. A raiz do `@sinete/nfe`, inclusive a calculadora padrão usada pelo `montarNfe`, segue a política de estabilidade.
121
121
 
122
- - `statusServico`, `autorizar` (síncrona por padrão; assíncrona devolve `pending` com o recibo), `consultarRecibo` e `aguardarRecibo` (política de espera com teto e `AbortSignal`), `consultar` (consulta protocolo pela chave; com a NF-e assinada, confere o `digVal` e monta o `nfeProc`).
122
+ ## Serviços (`criarClienteNfe`)
123
+
124
+ `ClienteNfe` fala SOAP 1.2 sobre qualquer `Transporte` do `@sinete/transport`, com endpoints por UF e ambiente vindos dele. Cada operação devolve um `ResultadoSefaz` do core, com a rejeição enriquecida pelo `@sinete/rejeicoes`; o mapa de cStat é dado (`src/data/cstat.json`).
125
+
126
+ - `statusServico`, `autorizar` (síncrona por padrão; assíncrona devolve `pendente` com o recibo), `consultarRecibo` e `aguardarRecibo` (política de espera com teto e `AbortSignal`), `consultar` (consulta protocolo pela chave; com a NF-e assinada, confere o `digVal` e monta o `nfeProc`).
123
127
  - Eventos: `cancelar`, `cartaCorrecao` (sequência informada), `manifestar` (sempre no Ambiente Nacional, cOrgao 91), `cancelarPorSubstituicao` (só NFC-e; `detEvento` do e110112 oficial, gerado no `@sinete/schemas`).
124
128
  - `inutilizar` (Id com os zeros do leiaute; só emitente CNPJ: pela NT 2018.001 v1.10, item 6.1, a inutilização não se aplica ao emitente pessoa física, e a série 910 a 969 é recusada antes do envio, como a SEFAZ faz com 266), `consultarCadastro`, `distribuicaoDFe` (distNSU, consNSU, consChNFe; descompacta o docZip com o `DecompressionStream` da plataforma).
125
- - Autorizador: `autorizar` vai à UF do documento; `autorizar`, `consultar`, `cancelar` e o recibo consultado com a nota seguem o tpEmis da chave (6 SVC-AN, 7 SVC-RS), seja qual for a contingência de agora, porque o SVC só consulta e cancela a nota que ele autorizou (NT 2013.007); a CC-e vai sempre à UF. `uf` e `contingencia: 'svc'` nas opções valem só para o que não parte de um documento (status, inutilização, recibo sem a nota, distribuição); sem `uf`, esses serviços lançam `ConfigError`. `autorizadorContingencia(uf, ambiente)` diz qual SVC e qual tpEmis a UF usa.
126
- - NFC-e (modelo 65, pela chave ou pelo `mod`): endpoints da tabela da NFC-e do `@sinete/transport` (`nfceEndpoint`), que em várias UFs é outro host; `NfeClientOptions.nfceEndpoint` sobrepõe. A NFC-e não tem SVC: com o cliente em contingência, ela continua indo ao autorizador normal.
129
+ - Autorizador: `autorizar` vai à UF do documento; `autorizar`, `consultar`, `cancelar` e o recibo consultado com a nota seguem o tpEmis da chave (6 SVC-AN, 7 SVC-RS), seja qual for a contingência de agora, porque o SVC só consulta e cancela a nota que ele autorizou (NT 2013.007); a CC-e vai sempre à UF. `uf` e `contingencia: 'svc'` nas opções valem só para o que não parte de um documento (status, inutilização, recibo sem a nota, distribuição); sem `uf`, esses serviços lançam `ErroDeConfiguracao`. `autorizadorContingencia(uf, ambiente)` diz qual SVC e qual tpEmis a UF usa.
130
+ - NFC-e (modelo 65, pela chave ou pelo `mod`): endpoints da tabela da NFC-e do `@sinete/transport` (`nfceEndpoint`), que em várias UFs é outro host; `ClienteNfeOpcoes.endpointNfce` sobrepõe. A NFC-e não tem SVC: com o cliente em contingência, ela continua indo ao autorizador normal.
131
+ - Cancelamento: todo método que vai à rede aceita `signal` (`EnvioOpcoes`) no último parâmetro de opções. Em `statusServico`, `autorizar`, `consultarRecibo`, `aguardarRecibo` e `distribuicaoDFe`, ele fica no mesmo objeto das outras opções; nos demais, é um `opcoes?: EnvioOpcoes` a mais no fim. Abortar rejeita com `ErroTransporte` de `code: 'cancelado'` (com o transporte do `@sinete/transport`), e um pedido que já saiu pode ter sido processado: confirme por consulta antes de repetir.
127
132
  - `nfeProc`, `procEventoNFe` e `procInutNFe` são montados por splice: o documento assinado entra byte a byte, nunca reserializado. O `nfeProc` só é montado quando chave e `digVal` do protocolo conferem com a NF-e assinada.
128
133
 
129
134
  ### Envio sem resposta
130
135
 
131
- Grave a NF-e assinada antes de enviar e nunca a remonte depois de um envio: outro cNF ou outro dhEmi cria uma segunda nota para o mesmo número. Sem resposta (timeout, conexão caída), ou com 204 ou 539, chame `resolverEnvioSemResposta(client, assinada, desfecho?)`: `concluida` traz o protocolo e o `nfeProc` (na denegação, que é da chave, conclui também sem `digVal` ou com outro, e `conteudo` diz qual; o `nfeProc` só vem com `confere`), `reenviar` (217) pede para reenviar os mesmos bytes, `divergente` diz que existe outra nota para o número (539 com a chave extraída do xMotivo, ou digVal diferente), `sem-prova` diz que a chave está autorizada e o protocolo não traz o `digVal` para provar que é esta nota (não reenvie, não descarte, não guarde sem conferir) e `indefinida` pede nova tentativa mais tarde.
136
+ Grave a NF-e assinada antes de enviar e nunca a remonte depois de um envio: outro cNF ou outro dhEmi cria uma segunda nota para o mesmo número. Sem resposta (timeout, conexão caída), ou com 204 ou 539, chame `resolverEnvioSemResposta(client, assinada, desfecho?, { signal }?)`: `concluida` traz o protocolo e o `nfeProc` (na denegação, que é da chave, conclui também sem `digVal` ou com outro, e `conteudo` diz qual; o `nfeProc` só vem com `confere`), `reenviar` (217) pede para reenviar os mesmos bytes, `divergente` diz que existe outra nota para o número (539 com a chave extraída do xMotivo, ou digVal diferente), `sem-prova` diz que a chave está autorizada e o protocolo não traz o `digVal` para provar que é esta nota (não reenvie, não descarte, não guarde sem conferir) e `indefinida` pede nova tentativa mais tarde.
132
137
 
133
- Pedido de evento sem resposta, ou respondido com 573 ou 580, pode ter sido registrado; o `cStat` sozinho não prova que foi este evento. `recuperarEventoRegistrado(client, chave, tpEvento)` consulta a chave e devolve o `procEventoNFe` que a SEFAZ tem (`registrado: true`, com `nProt`, `dhRegEvento` e o `retEvento`), ou `registrado: false` com a consulta, que pode ter sido só indecisa.
138
+ Pedido de evento sem resposta, ou respondido com 573 ou 580, pode ter sido registrado; o `cStat` sozinho não prova que foi este evento. `recuperarEventoRegistrado(client, chave, tpEvento, nSeqEvento?, { signal }?)` consulta a chave e devolve o `procEventoNFe` que a SEFAZ tem (`registrado: true`, com `nProt`, `dhRegEvento` e o `retEvento`), ou `registrado: false` com a consulta, que pode ter sido só indecisa.
134
139
 
135
140
  Quem guardou só o `nfeProc` tira dele a NF-e assinada com `nfeAssinadaDoProc(xml)`: a fatia sai com os bytes assinados e, quando a `NFe` herdava o `xmlns` do envelope (proc montado por outro emissor), com o namespace declarado na própria raiz, que é o que `consultar`, `resolverEnvioSemResposta` e `retomar` exigem. O C14N do `infNFe` não muda, então a assinatura confere dentro e fora do proc.
136
141
 
137
142
  ## Lacunas conhecidas
138
143
 
139
- - Exigência de infRespTec e CSRT por UF só tem PR com fonte; as demais UFs estão no padrão opcional (`options.exigencias` sobrepõe).
144
+ - Exigência de infRespTec e CSRT por UF só tem PR com fonte; as demais UFs estão no padrão opcional (`opcoes.exigencias` sobrepõe).
140
145
  - EPEC e FS-DA ficam para outra versão; o modelo já tem os campos.
141
146
  - NFC-e: as listas de CFOP e CST aceitas (I08-150, N12-30, N12-40) têm exceções por UF que mudam a cada versão da NT 2023.003 e ficam com a SEFAZ; também ficam com ela as regras opcionais por UF (limite de valor da W16-30, endereço na W16-60, bandeira do cartão da YA06-10, tabelas de NCM e unidade). O QR Code versão 100 não é montado.
142
147
 
143
148
  ## Ponta a ponta contra a SEFAZ simulada
144
149
 
145
- `test/e2e/sefaz-sim.test.ts` sobe o `@sinete/sefaz-sim` em HTTPS com mTLS (AC, e-CNPJ e certificado do servidor gerados na hora) e usa o `createTransport` real. O cliente resolve os endpoints pelos dados do transporte, como em produção; o `redirectToSim` do simulador troca só a URL. Cobre status, autorização síncrona e assíncrona com recibo, envio sem resposta resolvido pelo `resolverEnvioSemResposta` (timeout, 204, 539 e 217), CC-e com sequência, cancelamento, manifestação no AN, distribuição ao destinatário, inutilização, consulta cadastro, contingência SVC-AN, transmissor terceiro e a rejeição 213 enriquecida pelo `@sinete/rejeicoes`. Roda no `bun run check`.
150
+ `test/e2e/sefaz-sim.test.ts` sobe o `@sinete/sefaz-sim` em HTTPS com mTLS (AC, e-CNPJ e certificado do servidor gerados na hora) e usa o `criarTransporte` real. O cliente resolve os endpoints pelos dados do transporte, como em produção; o `redirecionarParaSim` do simulador troca só a URL. Cobre status, autorização síncrona e assíncrona com recibo, envio sem resposta resolvido pelo `resolverEnvioSemResposta` (timeout, 204, 539 e 217), CC-e com sequência, cancelamento, manifestação no AN, distribuição ao destinatário, inutilização, consulta cadastro, contingência SVC-AN, transmissor terceiro e a rejeição 213 enriquecida pelo `@sinete/rejeicoes`. Roda no `bun run check`.
146
151
 
147
152
  ## Checagem local contra o corpus
148
153
 
@@ -1,15 +1,15 @@
1
1
  /**
2
- * Montagem da NF-e: entrada do domínio (`NfeInput`) para o objeto tipado do `@sinete/schemas` no PL vigente, com os
2
+ * Montagem da NF-e: entrada do domínio (`DadosNfe`) para o objeto tipado do `@sinete/schemas` no PL vigente, com os
3
3
  * derivados e os totais em decimal exato, a chave de acesso e as regras conferidas antes de qualquer serialização. A
4
- * saída é a string canônica de `<NFe>` ainda sem assinatura, já validada contra o schema; `signNfe` insere a
4
+ * saída é a string canônica de `<NFe>` ainda sem assinatura, já validada contra o schema; `assinarNfe` insere a
5
5
  * `Signature` por splice (ADR 0003) e nada mais toca nela.
6
6
  */
7
- import type { Ambiente, Signer, TimeContext, Uf, ValidationIssue } from '@sinete/core';
8
- import type { VigenciaEntry } from '@sinete/schemas';
7
+ import type { Ambiente, Assinador, ContextoDeTempo, Ocorrencia, Uf } from '@sinete/core';
8
+ import type { EntradaDeVigencia } from '@sinete/schemas';
9
9
  import type { TNFe_infNFe } from '@sinete/schemas/nfe/PL_010f';
10
10
  import type { RoundingMode } from '../decimal.js';
11
- import type { NfeInput, ResponsavelTecnico } from '../model.js';
12
- import type { IbsCbsCalculator } from '../ports.js';
11
+ import type { DadosNfe, ResponsavelTecnico } from '../model.js';
12
+ import type { CalculadoraIbsCbs } from '../ports.js';
13
13
  import type { Instante } from '../time.js';
14
14
  import type { NfceSupl, QrCodeNfceOpcoes } from './nfce.js';
15
15
  import type { Familia } from './values.js';
@@ -19,18 +19,18 @@ export declare const XNOME_HOMOLOGACAO = "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACA
19
19
  /** Literal da descrição do primeiro item da NFC-e em homologação (MOC 7.0 Anexo I, RV I04-10, rejeição 373). */
20
20
  export declare const XPROD_HOMOLOGACAO_NFCE = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL";
21
21
  export type ExigenciaRespTec = 'obrigatorio' | 'opcional';
22
- export interface BuildNfeOptions {
22
+ export interface MontarNfeOpcoes {
23
23
  readonly ambiente: Ambiente;
24
24
  /** Relógio de emissão (dhEmi, PL vigente, CSRT) e de fato gerador (IBS/CBS). */
25
- readonly time: TimeContext;
25
+ readonly tempo: ContextoDeTempo;
26
26
  /**
27
- * Calculadora de IBS/CBS dos itens com `ibsCbs.classificacao`. Padrão: `ibsCbsCalculator()`, o motor do sinete com o
27
+ * Calculadora de IBS/CBS dos itens com `ibsCbs.classificacao`. Padrão: `calculadoraIbsCbs()`, o motor do sinete com o
28
28
  * dataset embarcado (importado na primeira nota que precisar dele) e as alíquotas oficiais. Informe outra para trocar
29
29
  * dataset, alíquotas, base ou regras, ou para calcular fora do sinete.
30
30
  */
31
- readonly ibsCbs?: IbsCbsCalculator;
31
+ readonly ibsCbs?: CalculadoraIbsCbs;
32
32
  /** Fuso do emitente em minutos; padrão pela UF (`data/fusos.json`). */
33
- readonly offsetMinutes?: number;
33
+ readonly deslocamentoMin?: number;
34
34
  /** Versão do aplicativo emissor (`verProc`); padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc`). */
35
35
  readonly verProc?: string;
36
36
  /** Sobrepõe o modo de arredondamento de uma família (`data/arredondamento.json`). */
@@ -43,7 +43,7 @@ export interface BuildNfeOptions {
43
43
  readonly csrt?: ExigenciaRespTec;
44
44
  };
45
45
  /** Fonte de aleatoriedade para o cNF; padrão `crypto.getRandomValues`. */
46
- readonly random?: (bytes: Uint8Array) => Uint8Array;
46
+ readonly aleatorio?: (bytes: Uint8Array) => Uint8Array;
47
47
  /**
48
48
  * O `vPag` do único `detPag` passa a ser o `vNF` calculado na mesma montagem, e o valor informado nele é ignorado.
49
49
  * Serve a quem recebe à vista o total da nota e não quer calcular o `vNF` antes de montar. Mais de um `detPag`,
@@ -65,7 +65,7 @@ export interface BuildNfeOptions {
65
65
  /** Só NFC-e: URL da consulta por chave de acesso (`urlChave`). Padrão: a da UF (`data/nfce-urls.json`). */
66
66
  readonly urlChave?: string;
67
67
  }
68
- export interface BuiltNfe {
68
+ export interface NfeMontada {
69
69
  /** Chave de acesso (44 posições). */
70
70
  readonly chave: string;
71
71
  /** `Id` do `infNFe` (`NFe` + chave): é o que a assinatura referencia. */
@@ -77,23 +77,23 @@ export interface BuiltNfe {
77
77
  readonly tpEmis: string;
78
78
  readonly dhEmi: string;
79
79
  /**
80
- * Só NFC-e: o `infNFeSupl` a acrescentar (`comQrCode`, `signNfe`). Na versão 3 em contingência off-line, falta a
80
+ * Só NFC-e: o `infNFeSupl` a acrescentar (`comQrCode`, `assinarNfe`). Na versão 3 em contingência off-line, falta a
81
81
  * assinatura dos parâmetros, que só o certificado faz (`assinaturaQrCode`).
82
82
  */
83
83
  readonly nfce?: NfceSupl;
84
84
  /** Pacote de liberação usado (escolhido pela vigência). */
85
- readonly pl: VigenciaEntry;
85
+ readonly pl: EntradaDeVigencia;
86
86
  /** O objeto tipado, na forma do PL_010f (o mais novo que o pacote conhece). */
87
87
  readonly infNFe: TNFe_infNFe;
88
88
  /** `<NFe xmlns="...">` com o `infNFe` canônico, sem assinatura, já validado contra o schema. */
89
89
  readonly xml: string;
90
90
  }
91
- export type BuildNfeResult = {
91
+ export type ResultadoMontagemNfe = {
92
92
  readonly ok: true;
93
- readonly value: BuiltNfe;
93
+ readonly valor: NfeMontada;
94
94
  } | {
95
95
  readonly ok: false;
96
- readonly issues: readonly ValidationIssue[];
96
+ readonly ocorrencias: readonly Ocorrencia[];
97
97
  };
98
98
  /** Exigência de infRespTec ou CSRT para a UF no ambiente e na data (tabela `data/resp-tec.json`). */
99
99
  export declare function exigenciaRespTec(uf: Uf, ambiente: Ambiente, data: Instante): {
@@ -103,25 +103,25 @@ export declare function exigenciaRespTec(uf: Uf, ambiente: Ambiente, data: Insta
103
103
  /** `hashCSRT`: Base64(SHA-1(CSRT + chave de acesso)) (NT 2018.005, campo ZD09). */
104
104
  export declare function hashCsrt(csrt: string, chave: string): Promise<string>;
105
105
  /** Monta, calcula e valida. Nunca lança por dado do chamador: devolve as ocorrências. */
106
- export declare function buildNfe(input: NfeInput, options: BuildNfeOptions): Promise<BuildNfeResult>;
106
+ export declare function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Promise<ResultadoMontagemNfe>;
107
107
  /**
108
108
  * Assinatura dos parâmetros do QR Code da NFC-e em contingência off-line com a versão 3 (RSA-SHA1 em Base64, com o
109
109
  * certificado que assina a nota; Manual do DANFE NFC-e 6.0, 4.4.2). `undefined` quando o QR Code não leva assinatura
110
110
  * (NF-e, emissão normal, versão 2).
111
111
  */
112
- export declare function assinaturaQrCode(built: BuiltNfe, signer: Signer): Promise<string | undefined>;
112
+ export declare function assinaturaQrCode(nota: NfeMontada, assinador: Assinador): Promise<string | undefined>;
113
113
  /**
114
114
  * A NFC-e montada com o `infNFeSupl` (QR Code e `urlChave`) inserido por splice antes do fechamento de `NFe`, pronta
115
115
  * para a assinatura. Na versão 3 em contingência off-line, informe a `assinatura` (`assinaturaQrCode`); nos demais
116
116
  * casos ela não existe (ZX02-330, rejeição 445; ZX02-334, rejeição 474). Para assinar em três fases (A3, HSM), passe
117
- * este texto ao `prepareSignature` do `@sinete/core/xml` com o `id` da nota. Na NF-e (modelo 55), devolve o XML como
117
+ * este texto ao `prepararAssinatura` do `@sinete/core/xml` com o `id` da nota. Na NF-e (modelo 55), devolve o XML como
118
118
  * veio: ela não tem `infNFeSupl` (ZX01-10, rejeição 393).
119
119
  */
120
- export declare function comQrCode(built: BuiltNfe, assinatura?: string): string;
120
+ export declare function comQrCode(nota: NfeMontada, assinatura?: string): string;
121
121
  /**
122
122
  * Assina a NF-e montada: na NFC-e, insere antes o `infNFeSupl` (`comQrCode`, com a assinatura do QR Code quando a
123
123
  * contingência off-line pede); depois, a `Signature` como último filho de `NFe`, tudo por splice, e devolve a string
124
124
  * final. É essa string que vai para a SEFAZ e para o banco; nada depois deve reparseá-la para reescrever.
125
125
  */
126
- export declare function signNfe(built: BuiltNfe, signer: Signer): Promise<string>;
126
+ export declare function assinarNfe(nota: NfeMontada, assinador: Assinador): Promise<string>;
127
127
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/build/build.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGvF,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,OAAO,KAAK,EAQV,QAAQ,EAER,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,KAAK,EAAE,QAAQ,EAAc,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAYxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,eAAO,MAAM,MAAM,uCAAuC,CAAC;AAE3D,iGAAiG;AACjG,eAAO,MAAM,iBAAiB,+DAA+D,CAAC;AAE9F,gHAAgH;AAChH,eAAO,MAAM,sBAAsB,sEAAsE,CAAC;AAE1G,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,6GAA6G;IAC7G,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACjE,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IACtC,yFAAyF;IACzF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACnG,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACpD;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAaxE,qGAAqG;AACrG,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,QAAQ,GACb;IAAE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAe5E;AAED,mFAAmF;AACnF,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3E;AAsaD,yFAAyF;AACzF,wBAAsB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA+xBjG;AAcD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEnG;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtE;AAuBD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9E"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/build/build.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  * critério da UF (E16a-30 e E16a-35, E14-10 e E14-20, facultativas). As regras só da NFC-e estão em `nfce.ts`.
6
6
  */
7
7
  import type { Issues } from '../issues.js';
8
- import type { NfeInput } from '../model.js';
8
+ import type { DadosNfe } from '../model.js';
9
9
  /** Identificação já resolvida pelo montador (com os padrões aplicados). */
10
10
  export interface IdeDestinatario {
11
11
  readonly mod: '55' | '65';
@@ -15,5 +15,5 @@ export interface IdeDestinatario {
15
15
  readonly indFinal: string;
16
16
  readonly producao: boolean;
17
17
  }
18
- export declare function conferirDestinatario(input: NfeInput, ide: IdeDestinatario, issues: Issues): void;
18
+ export declare function conferirDestinatario(input: DadosNfe, ide: IdeDestinatario, issues: Issues): void;
19
19
  //# sourceMappingURL=destinatario.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ibscbs.d.ts","sourceRoot":"","sources":["../../src/build/ibscbs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAclH;AAKD,8GAA8G;AAC9G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQpF;AAED,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ/D;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAQA;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,cAAc,CAsDvE"}
1
+ {"version":3,"file":"ibscbs.d.ts","sourceRoot":"","sources":["../../src/build/ibscbs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBlH;AAKD,8GAA8G;AAC9G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQpF;AAED,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ/D;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAQA;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,cAAc,CAsDvE"}
@@ -6,10 +6,10 @@
6
6
  * 2025), itens 4.3 e 4.4. Regra opcional por UF (aplicação "Facult." sem mudança posterior) não entra aqui: a SEFAZ da
7
7
  * UF decide, e recusar localmente bloquearia a venda onde a regra não vale.
8
8
  */
9
- import type { Ambiente, Signer, Uf } from '@sinete/core';
9
+ import type { Ambiente, Assinador, Uf } from '@sinete/core';
10
10
  import { Decimal } from '../decimal.js';
11
11
  import type { Issues } from '../issues.js';
12
- import type { NfeInput } from '../model.js';
12
+ import type { DadosNfe } from '../model.js';
13
13
  /**
14
14
  * Versão do QR Code da NFC-e. A 3 (padrão) dispensa o CSC: na emissão normal leva só chave, versão e ambiente, e na
15
15
  * contingência off-line leva a assinatura dos parâmetros com o certificado da nota (NT 2025.001, item 02.1). A 2 usa
@@ -40,7 +40,7 @@ export interface NfceSupl {
40
40
  /**
41
41
  * Endereços da NFC-e da UF no ambiente e no dia (`data/nfce-urls.json`, das tabelas do Portal Nacional da NFC-e). O
42
42
  * `qrCode` é `undefined` onde a tabela não traz o endereço completo (AM e MA publicam sem o protocolo): informe
43
- * `BuildNfeOptions.urlQrCode`.
43
+ * `MontarNfeOpcoes.urlQrCode`.
44
44
  */
45
45
  export declare function urlsNfce(uf: Uf, ambiente: Ambiente, dia: string): {
46
46
  readonly qrCode: string | undefined;
@@ -82,7 +82,7 @@ export declare function parametrosQrCode(d: DadosQrCode, qr: QrCodeNfceOpcoes):
82
82
  * Assinatura dos parâmetros 1 a 7 do QR Code versão 3 off-line: RSA com SHA-1 (PKCS#1 v1.5), em Base64, com o mesmo
83
83
  * certificado que assina a NFC-e (Manual 6.0, 4.4.2, parâmetro 8).
84
84
  */
85
- export declare function assinarParametros(parametros: string, signer: Signer): Promise<string>;
85
+ export declare function assinarParametros(parametros: string, signer: Assinador): Promise<string>;
86
86
  /** Valor da NFC-e acima do qual o destinatário tem de ser identificado (MOC 7.0 Anexo I, RV W16-40, rejeição 750). */
87
87
  export declare const NFCE_LIMITE_SEM_DESTINATARIO = "10000.00";
88
88
  /** Identificação já resolvida pelo montador (com os padrões aplicados). */
@@ -98,7 +98,7 @@ export interface IdeNfce {
98
98
  * Regras da NFC-e sobre a entrada (origem `entrada`, ADR 0011), todas de aplicação obrigatória. Grupos que a NFC-e
99
99
  * não tem saem como `grupo_vedado` no caminho da entrada.
100
100
  */
101
- export declare function conferirNfce(input: NfeInput, ide: IdeNfce, issues: Issues): void;
101
+ export declare function conferirNfce(input: DadosNfe, ide: IdeNfce, issues: Issues): void;
102
102
  /** O `pag` montado, na forma que as regras de pagamento leem e completam. */
103
103
  export interface PagMontado {
104
104
  readonly detPag: readonly {
@@ -1 +1 @@
1
- {"version":3,"file":"nfce.d.ts","sourceRoot":"","sources":["../../src/build/nfce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nfce.d.ts","sourceRoot":"","sources":["../../src/build/nfce.ts"],"names":[],"mappings":"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"}
@@ -5,15 +5,15 @@
5
5
  * serializado com o descritor dele; o serializer ignora campos que o descritor não conhece, então antes de serializar
6
6
  * `camposForaDoPl` aponta cada campo que sumiria em silêncio.
7
7
  */
8
- import type { Ambiente, Clock } from '@sinete/core';
9
- import type { ComplexType, VigenciaEntry } from '@sinete/schemas';
8
+ import type { Ambiente, Relogio } from '@sinete/core';
9
+ import type { ComplexType, EntradaDeVigencia } from '@sinete/schemas';
10
10
  import type { Issues } from '../issues.js';
11
11
  export interface PlEscolhido {
12
- readonly vigencia: VigenciaEntry;
12
+ readonly vigencia: EntradaDeVigencia;
13
13
  readonly infNFe: ComplexType;
14
14
  }
15
15
  /** PL da NF-e vigente para o ambiente no relógio de emissão (ADR 0002, decisão 6). */
16
- export declare function escolherPl(ambiente: Ambiente, emissao: Clock): PlEscolhido;
16
+ export declare function escolherPl(ambiente: Ambiente, emissao: Relogio): PlEscolhido;
17
17
  /** Aponta cada chave do objeto que o descritor não declara (o serializer a descartaria sem aviso). */
18
18
  export declare function camposForaDoPl(ct: ComplexType, value: unknown, path: string, pl: string, issues: Issues): void;
19
19
  //# sourceMappingURL=pl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/build/pl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAY,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAI5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ3C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAAG,WAAW,CAQ1E;AAiBD,sGAAsG;AACtG,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkB9G"}
1
+ {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/build/pl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAY,MAAM,iBAAiB,CAAC;AAIhF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQ3C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAQ5E;AAiBD,sGAAsG;AACtG,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkB9G"}
@@ -6,9 +6,9 @@
6
6
  * configuração da UF. Exceção que depende de tabela externa ou do critério da UF faz a conferência não recusar: na
7
7
  * dúvida, a nota vai e a SEFAZ decide, porque recusar localmente uma nota que a SEFAZ aceitaria é pior que a rejeição.
8
8
  */
9
- import type { ValidationIssue } from '@sinete/core';
9
+ import type { Ocorrencia } from '@sinete/core';
10
10
  import type { Issues } from '../issues.js';
11
- import type { NfeInput } from '../model.js';
11
+ import type { DadosNfe } from '../model.js';
12
12
  import type { Instante } from '../time.js';
13
13
  /**
14
14
  * CST 50 ou 51 com destinatário contribuinte isento de IE (indIEDest 2): rejeição 529 (MOC 7.0 Anexo I, RV N12-80,
@@ -18,7 +18,7 @@ import type { Instante } from '../time.js';
18
18
  * recusado aqui, seja qual for o documento do destinatário. A exceção 2 (emissão antes de 01/07/2016) não alcança nota
19
19
  * montada agora.
20
20
  */
21
- export declare function cstComIsento(input: NfeInput, idDest: string, issues: Issues): void;
21
+ export declare function cstComIsento(input: DadosNfe, idDest: string, issues: Issues): void;
22
22
  /**
23
23
  * Vencimento das duplicatas (grupo Y, modelo 55): uma parcela só, vencendo na data de emissão, cai na rejeição 853,
24
24
  * "dados de cobrança não devem ser informados para pagamento à vista" (NT 2025.001 v1.03, RV Y09-40, em produção desde
@@ -31,7 +31,7 @@ export declare function cstComIsento(input: NfeInput, idDest: string, issues: Is
31
31
  * A data de emissão é a do `dhEmi`. O MOC não diz em que fuso a SEFAZ a compara; para não recusar nota que ela aceitaria,
32
32
  * "na data da emissão" só vale quando a data local do `dhEmi`, a de Brasília e a de UTC coincidem.
33
33
  */
34
- export declare function vencimentos(input: NfeInput, emissao: {
34
+ export declare function vencimentos(input: DadosNfe, emissao: {
35
35
  readonly dhEmi: string;
36
36
  readonly instante: Instante;
37
37
  }, issues: Issues): void;
@@ -42,11 +42,11 @@ export declare function vencimentos(input: NfeInput, emissao: {
42
42
  * - e-CPF: o CPF do emitente é o do certificado, senão rejeição 227 (RV F03A).
43
43
  *
44
44
  * Só compara documento com documento do mesmo tipo: e-CNPJ assinando nota de emitente CPF (ou o contrário) fica para a
45
- * SEFAZ. O certificado da SEFAZ que a F03 dispensa só assina a nota avulsa, que o `buildNfe` não monta (procEmi 0).
45
+ * SEFAZ. O certificado da SEFAZ que a F03 dispensa só assina a nota avulsa, que o `montarNfe` não monta (procEmi 0).
46
46
  * Devolve as ocorrências (vazio quando confere), com o caminho da entrada.
47
47
  */
48
- export declare function conferirEmitenteDoCertificado(nfe: NfeInput, titular: {
48
+ export declare function conferirEmitenteDoCertificado(nfe: DadosNfe, titular: {
49
49
  readonly cnpj?: string | undefined;
50
50
  readonly cpf?: string | undefined;
51
- }): readonly ValidationIssue[];
51
+ }): readonly Ocorrencia[];
52
52
  //# sourceMappingURL=rejeicoes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rejeicoes.d.ts","sourceRoot":"","sources":["../../src/build/rejeicoes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsB3C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBlF;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,EAChE,MAAM,EAAE,MAAM,GACb,IAAI,CAcN;AAKD;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACjF,SAAS,eAAe,EAAE,CA0B5B"}
1
+ {"version":3,"file":"rejeicoes.d.ts","sourceRoot":"","sources":["../../src/build/rejeicoes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsB3C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBlF;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,EAChE,MAAM,EAAE,MAAM,GACb,IAAI,CAcN;AAKD;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACjF,SAAS,UAAU,EAAE,CA0BvB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Texto e tamanho dos campos de texto da NF-e conferidos na entrada (ADR 0011, revisão de 01/10/2026).
3
+ *
4
+ * Antes, o caractere que o XML não representa e o texto fora do tipo do leiaute (tamanho, espaço nas pontas,
5
+ * caractere fora do `TString`) só apareciam na montagem, com o caminho do XML (`infNFe.det[0].prod.xProd` ou
6
+ * `/infNFe/det[1]/prod/xProd`). Conferidos aqui, saem como `campo_invalido`, com `origem: 'entrada'`, o caminho da
7
+ * entrada (`itens[0].produto.xProd`) e uma mensagem para quem preenche o campo (`no máximo 60 caracteres`), sem nome
8
+ * de validador nem de tipo do XSD.
9
+ *
10
+ * O tipo de cada campo vem do schema do PL da montagem (o `TString` com o `maxLength` do elemento), nunca de um número
11
+ * escrito aqui: a tabela abaixo só diz qual elemento do `infNFe` recebe cada campo da entrada.
12
+ */
13
+ import type { ComplexType } from '@sinete/schemas';
14
+ import type { Issues } from '../issues.js';
15
+ import type { DadosNfe } from '../model.js';
16
+ /** Produção `Char` do XML 1.0: tab, LF, CR, U+0020 a U+D7FF, U+E000 a U+FFFD e U+10000 a U+10FFFF. */
17
+ export declare function textoXmlValido(texto: string): boolean;
18
+ /**
19
+ * Confere os textos da entrada: em qualquer campo, o caractere que o XML não representa; nos campos da tabela, o tipo
20
+ * do elemento no PL (tamanho, espaço nas pontas, caractere fora do conjunto aceito). Tudo sai como `campo_invalido`,
21
+ * com o caminho da entrada, `origem: 'entrada'` e uma ocorrência por regra violada. O campo que já tem ocorrência (de
22
+ * outra conferência da entrada) não ganha outra. `substituidos` são os campos que a montagem troca por um texto fixo
23
+ * (o nome do destinatário em homologação): o tipo deles não é conferido, porque o texto informado não vai ao XML.
24
+ */
25
+ export declare function conferirTextosDaEntrada(entrada: DadosNfe, infNFe: ComplexType, issues: Issues, substituidos?: ReadonlySet<string>): void;
26
+ //# sourceMappingURL=textos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textos.d.ts","sourceRoot":"","sources":["../../src/build/textos.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAA0C,MAAM,iBAAiB,CAAC;AAE3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,sGAAsG;AACtG,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAarD;AAmKD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,WAAW,CAAC,MAAM,CAAa,GAC5C,IAAI,CAoBN"}