@sinete/nfe 0.1.0 → 0.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.
- package/README.md +49 -48
- package/dist/build/build.d.ts +23 -23
- package/dist/build/build.d.ts.map +1 -1
- package/dist/build/destinatario.d.ts +2 -2
- package/dist/build/ibscbs.d.ts.map +1 -1
- package/dist/build/nfce.d.ts +5 -5
- package/dist/build/nfce.d.ts.map +1 -1
- package/dist/build/pl.d.ts +4 -4
- package/dist/build/pl.d.ts.map +1 -1
- package/dist/build/rejeicoes.d.ts +7 -7
- package/dist/build/rejeicoes.d.ts.map +1 -1
- package/dist/build/values.d.ts +8 -8
- package/dist/build/values.d.ts.map +1 -1
- package/dist/decimal.d.ts +2 -2
- package/dist/decimal.d.ts.map +1 -1
- package/dist/format.d.ts +19 -19
- package/dist/format.d.ts.map +1 -1
- package/dist/ibs-cbs.d.ts +5 -5
- package/dist/ibs-cbs.d.ts.map +1 -1
- package/dist/ibs-cbs.js +35 -35
- package/dist/ibs-cbs.js.map +2 -2
- package/dist/index.d.ts +18 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +602 -573
- package/dist/index.js.map +25 -25
- package/dist/issues.d.ts +10 -10
- package/dist/issues.d.ts.map +1 -1
- package/dist/model.d.ts +4 -4
- package/dist/ports.d.ts +15 -15
- package/dist/ports.d.ts.map +1 -1
- package/dist/rotulo.d.ts +2 -2
- package/dist/rotulo.d.ts.map +1 -1
- package/dist/rtc.d.ts +23 -23
- package/dist/rtc.d.ts.map +1 -1
- package/dist/services/client.d.ts +44 -40
- package/dist/services/client.d.ts.map +1 -1
- package/dist/services/gzip.d.ts +1 -1
- package/dist/services/gzip.d.ts.map +1 -1
- package/dist/services/index.d.ts +4 -4
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/outcome.d.ts +3 -3
- package/dist/services/outcome.d.ts.map +1 -1
- package/dist/services/proc.d.ts +6 -6
- package/dist/services/proc.d.ts.map +1 -1
- package/dist/services/recuperar.d.ts +7 -7
- package/dist/services/recuperar.d.ts.map +1 -1
- package/dist/services/resolver.d.ts +10 -10
- package/dist/services/resolver.d.ts.map +1 -1
- package/dist/services/soap.d.ts +8 -8
- package/dist/services/soap.d.ts.map +1 -1
- package/dist/time.d.ts +4 -4
- package/dist/time.d.ts.map +1 -1
- package/dist/versao-gerada.d.ts +1 -1
- package/package.json +9 -9
- package/src/build/build.ts +202 -185
- package/src/build/destinatario.ts +8 -8
- package/src/build/ibscbs.ts +10 -6
- package/src/build/icms.ts +6 -6
- package/src/build/nfce.ts +19 -19
- package/src/build/pl.ts +12 -12
- package/src/build/rejeicoes.ts +13 -13
- package/src/build/values.ts +14 -14
- package/src/data/arredondamento.json +1 -1
- package/src/data/cstat.json +6 -6
- package/src/data/fusos.json +1 -1
- package/src/data/nfce-urls.json +2 -2
- package/src/data/produtor-rural.json +1 -1
- package/src/data/resp-tec.json +1 -1
- package/src/decimal.ts +10 -9
- package/src/format.ts +29 -28
- package/src/ibs-cbs.ts +74 -74
- package/src/index.ts +29 -27
- package/src/issues.ts +11 -11
- package/src/model.ts +4 -4
- package/src/ports.ts +15 -15
- package/src/rotulo.ts +4 -4
- package/src/rtc.ts +91 -91
- package/src/services/client.ts +248 -217
- package/src/services/gzip.ts +7 -7
- package/src/services/index.ts +12 -10
- package/src/services/outcome.ts +9 -9
- package/src/services/proc.ts +50 -49
- package/src/services/recuperar.ts +27 -25
- package/src/services/resolver.ts +22 -22
- package/src/services/soap.ts +35 -35
- package/src/time.ts +6 -6
- 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 {
|
|
8
|
+
import { criarEmissorNfe } from '@sinete/emissor/nfe';
|
|
9
9
|
|
|
10
|
-
const nfe = await
|
|
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 {
|
|
20
|
-
import {
|
|
19
|
+
import { relogioDoSistema, contextoDeTempo } from '@sinete/core';
|
|
20
|
+
import { montarNfe, criarClienteNfe, assinarNfe } from '@sinete/nfe';
|
|
21
21
|
|
|
22
|
-
const r = await
|
|
23
|
-
if (!r.ok) throw new Error(r.
|
|
24
|
-
const assinada = await
|
|
25
|
-
const client =
|
|
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.
|
|
27
|
+
if (desfecho.tipo === 'autorizado') guardar(desfecho.valor.nfeProc);
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
## Montagem (`
|
|
30
|
+
## Montagem (`montarNfe`)
|
|
31
31
|
|
|
32
|
-
A entrada (`
|
|
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). `
|
|
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 `
|
|
40
|
-
- **Chave e cNF.** cNF aleatório (WebCrypto, injetável em `
|
|
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 `
|
|
44
|
-
- **`verProc`.** Padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc` do `@sinete/core`, cortado com segurança em 20 caracteres); `
|
|
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
|
-
`
|
|
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,78 +52,79 @@ 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 `
|
|
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
|
-
`
|
|
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 `
|
|
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 {
|
|
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
|
|
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 =
|
|
73
|
-
const r2 = await
|
|
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; `
|
|
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`, `
|
|
83
|
-
| Serviços (`
|
|
84
|
-
| Emissão (`
|
|
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 `
|
|
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 `
|
|
88
|
+
### A porta `CalculadoraIbsCbs`
|
|
89
89
|
|
|
90
|
-
`
|
|
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
|
|
94
|
-
calcular(
|
|
93
|
+
interface CalculadoraIbsCbs {
|
|
94
|
+
calcular(pedido: { nota: PedidoIbsCbsNota; itens: readonly PedidoIbsCbsItem[] }): RespostaIbsCbs | Promise<RespostaIbsCbs>;
|
|
95
95
|
}
|
|
96
96
|
```
|
|
97
97
|
|
|
98
|
-
`
|
|
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 (`
|
|
105
|
-
- **Erros como ocorrências.** `
|
|
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 `
|
|
108
|
+
| Opção do `calculadoraIbsCbs` | Padrão | |
|
|
109
109
|
|---|---|---|
|
|
110
|
-
| `dataset` | o embarcado, importado sob demanda | um bundle verificado em runtime (`
|
|
111
|
-
| `
|
|
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; `{
|
|
114
|
-
| `
|
|
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 (`
|
|
118
|
+
## Serviços (`criarClienteNfe`)
|
|
119
119
|
|
|
120
|
-
`
|
|
120
|
+
`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`).
|
|
121
121
|
|
|
122
|
-
- `statusServico`, `autorizar` (síncrona por padrão; assíncrona devolve `
|
|
122
|
+
- `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
123
|
- 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
124
|
- `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 `
|
|
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; `
|
|
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 `ErroDeConfiguracao`. `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; `ClienteNfeOpcoes.endpointNfce` sobrepõe. A NFC-e não tem SVC: com o cliente em contingência, ela continua indo ao autorizador normal.
|
|
127
|
+
- 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
128
|
- `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
129
|
|
|
129
130
|
### Envio sem resposta
|
|
@@ -136,13 +137,13 @@ Quem guardou só o `nfeProc` tira dele a NF-e assinada com `nfeAssinadaDoProc(xm
|
|
|
136
137
|
|
|
137
138
|
## Lacunas conhecidas
|
|
138
139
|
|
|
139
|
-
- Exigência de infRespTec e CSRT por UF só tem PR com fonte; as demais UFs estão no padrão opcional (`
|
|
140
|
+
- 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
141
|
- EPEC e FS-DA ficam para outra versão; o modelo já tem os campos.
|
|
141
142
|
- 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
143
|
|
|
143
144
|
## Ponta a ponta contra a SEFAZ simulada
|
|
144
145
|
|
|
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 `
|
|
146
|
+
`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
147
|
|
|
147
148
|
## Checagem local contra o corpus
|
|
148
149
|
|
package/dist/build/build.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Montagem da NF-e: entrada do domínio (`
|
|
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; `
|
|
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,
|
|
8
|
-
import type {
|
|
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 {
|
|
12
|
-
import type {
|
|
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
|
|
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
|
|
25
|
+
readonly tempo: ContextoDeTempo;
|
|
26
26
|
/**
|
|
27
|
-
* Calculadora de IBS/CBS dos itens com `ibsCbs.classificacao`. Padrã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?:
|
|
31
|
+
readonly ibsCbs?: CalculadoraIbsCbs;
|
|
32
32
|
/** Fuso do emitente em minutos; padrão pela UF (`data/fusos.json`). */
|
|
33
|
-
readonly
|
|
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
|
|
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
|
|
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`, `
|
|
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:
|
|
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
|
|
91
|
+
export type ResultadoMontagemNfe = {
|
|
92
92
|
readonly ok: true;
|
|
93
|
-
readonly
|
|
93
|
+
readonly valor: NfeMontada;
|
|
94
94
|
} | {
|
|
95
95
|
readonly ok: false;
|
|
96
|
-
readonly
|
|
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
|
|
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(
|
|
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 `
|
|
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(
|
|
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
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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"}
|
package/dist/build/nfce.d.ts
CHANGED
|
@@ -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,
|
|
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 {
|
|
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
|
-
* `
|
|
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:
|
|
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:
|
|
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 {
|
package/dist/build/nfce.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nfce.d.ts","sourceRoot":"","sources":["../../src/build/nfce.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"nfce.d.ts","sourceRoot":"","sources":["../../src/build/nfce.ts"],"names":[],"mappings":"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"}
|
package/dist/build/pl.d.ts
CHANGED
|
@@ -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,
|
|
9
|
-
import type { ComplexType,
|
|
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:
|
|
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:
|
|
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
|
package/dist/build/pl.d.ts.map
CHANGED
|
@@ -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,
|
|
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 {
|
|
9
|
+
import type { Ocorrencia } from '@sinete/core';
|
|
10
10
|
import type { Issues } from '../issues.js';
|
|
11
|
-
import type {
|
|
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:
|
|
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:
|
|
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 `
|
|
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:
|
|
48
|
+
export declare function conferirEmitenteDoCertificado(nfe: DadosNfe, titular: {
|
|
49
49
|
readonly cnpj?: string | undefined;
|
|
50
50
|
readonly cpf?: string | undefined;
|
|
51
|
-
}): readonly
|
|
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,
|
|
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"}
|
package/dist/build/values.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { DecimalInput, RoundingMode } from '../decimal.js';
|
|
7
7
|
import { Decimal } from '../decimal.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { FormatoDecimal } from '../format.js';
|
|
9
9
|
import type { Issues } from '../issues.js';
|
|
10
10
|
/** Famílias de campo com modo de arredondamento próprio (`data/arredondamento.json`). */
|
|
11
11
|
export type Familia = 'produto' | 'icms' | 'ipi' | 'pisCofins' | 'issqn' | 'ibsCbs';
|
|
@@ -21,11 +21,11 @@ export declare class Ctx {
|
|
|
21
21
|
readonly conferir: boolean;
|
|
22
22
|
constructor(issues: Issues, modes: Readonly<Record<Familia, RoundingMode>>, conferir?: boolean);
|
|
23
23
|
/** Entrada opcional; inválida vira ocorrência e `undefined`. */
|
|
24
|
-
opt(value: DecimalInput | undefined, path: string, format:
|
|
24
|
+
opt(value: DecimalInput | undefined, path: string, format: FormatoDecimal): Decimal | undefined;
|
|
25
25
|
/** Entrada obrigatória; ausente ou inválida vira ocorrência e zero, para que a montagem siga e junte tudo. */
|
|
26
|
-
req(value: DecimalInput | undefined, path: string, format:
|
|
26
|
+
req(value: DecimalInput | undefined, path: string, format: FormatoDecimal): Decimal;
|
|
27
27
|
/** Arredonda um valor calculado no formato do campo pelo modo da família. */
|
|
28
|
-
round(value: Decimal, format:
|
|
28
|
+
round(value: Decimal, format: FormatoDecimal, familia: Familia): Decimal;
|
|
29
29
|
/**
|
|
30
30
|
* Valor derivado: sem valor informado, o calculado (arredondado); com valor informado, o informado, conferido
|
|
31
31
|
* contra o calculado com a tolerância das regras de validação.
|
|
@@ -34,12 +34,12 @@ export declare class Ctx {
|
|
|
34
34
|
* Base de cálculo: a informada prevalece sem conferência (a base legal varia por operação, UF e regime); o padrão
|
|
35
35
|
* só vale quando nada veio.
|
|
36
36
|
*/
|
|
37
|
-
base(given: DecimalInput | undefined, padrao: Decimal, path: string, format:
|
|
38
|
-
calc(given: DecimalInput | undefined, computed: Decimal, path: string, format:
|
|
37
|
+
base(given: DecimalInput | undefined, padrao: Decimal, path: string, format: FormatoDecimal, familia: Familia): Decimal;
|
|
38
|
+
calc(given: DecimalInput | undefined, computed: Decimal, path: string, format: FormatoDecimal, familia: Familia): Decimal;
|
|
39
39
|
/** Texto no formato do campo. */
|
|
40
|
-
s(value: Decimal, format:
|
|
40
|
+
s(value: Decimal, format: FormatoDecimal): string;
|
|
41
41
|
/** Texto opcional: ausente fica ausente, e zero some nos formatos que não aceitam zero. */
|
|
42
|
-
so(value: Decimal | undefined, format:
|
|
42
|
+
so(value: Decimal | undefined, format: FormatoDecimal): string | undefined;
|
|
43
43
|
}
|
|
44
44
|
/** Remove as chaves com `undefined` (o serializer ignora, mas o objeto devolvido fica limpo e comparável). */
|
|
45
45
|
export declare function clean<T extends object>(o: T): T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/build/values.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/build/values.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,yFAAyF;AACzF,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEpF,oHAAoH;AACpH,eAAO,MAAM,UAAU,EAAE,OAA4B,CAAC;AAEtD,qBAAa,GAAG;IACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACxD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,YAAY,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,UAAO,EAI1F;IAED,gEAAgE;IAChE,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,CAa9F;IAED,8GAA8G;IAC9G,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAMlF;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAEvE;IAED;;;OAGG;IACH;;;OAGG;IACH,IAAI,CACF,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAET;IAED,IAAI,CACF,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAaT;IAED,iCAAiC;IACjC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAEhD;IAED,2FAA2F;IAC3F,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAIzE;CACF;AAED,8GAA8G;AAC9G,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAI/C;AAED,iEAAiE;AACjE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC"}
|
package/dist/decimal.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ export declare class Decimal {
|
|
|
60
60
|
toJSON(): string;
|
|
61
61
|
}
|
|
62
62
|
/** Atalho para `Decimal.of`. */
|
|
63
|
-
export declare function dec(
|
|
63
|
+
export declare function dec(valor: DecimalInput): Decimal;
|
|
64
64
|
/** Soma uma lista (vazia = zero). */
|
|
65
|
-
export declare function sum(
|
|
65
|
+
export declare function sum(valores: Iterable<Decimal>): Decimal;
|
|
66
66
|
//# sourceMappingURL=decimal.d.ts.map
|
package/dist/decimal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../src/decimal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D,iIAAiI;AACjI,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS9D,kDAAkD;AAClD,qBAAa,OAAO;IAClB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,eAGN;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAsB;IACnD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAsB;IAClD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAwB;IAExD,oFAAoF;IACpF,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"decimal.d.ts","sourceRoot":"","sources":["../src/decimal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D,iIAAiI;AACjI,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAS9D,kDAAkD;AAClD,qBAAa,OAAO;IAClB,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,eAGN;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAsB;IACnD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAsB;IAClD,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAwB;IAExD,oFAAoF;IACpF,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIrD;IAED;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAItC;IAED,2DAA2D;IAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,GAAG,SAAS,CAwBrD;IAED,OAAO,CAAC,OAAO;IAMf,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAGjC;IAED,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAGlC;IAED,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAQlC;IAED,2EAA2E;IAC3E,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAUzE;IAED,uDAAuD;IACvD,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAGnC;IAED,MAAM,IAAI,OAAO,CAEhB;IAED,GAAG,IAAI,OAAO,CAEb;IAED,0FAA0F;IAC1F,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAIhD;IAED,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAGvC;IAED,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAE/B;IAED,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAE/B;IAED,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAE/B;IAED,MAAM,IAAI,OAAO,CAEhB;IAED,UAAU,IAAI,OAAO,CAEpB;IAED,uEAAuE;IACvE,gBAAgB,IAAI,MAAM,CASzB;IAED,oFAAoF;IACpF,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,YAAwB,GAAG,MAAM,CAO7D;IAED,2DAA2D;IAC3D,QAAQ,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,MAAM,CAEf;CACF;AAkBD,gCAAgC;AAChC,wBAAgB,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAEhD;AAED,qCAAqC;AACrC,wBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,CAIvD"}
|