@sinete/nfe 0.2.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.
- package/README.md +6 -2
- package/dist/build/build.d.ts.map +1 -1
- package/dist/build/textos.d.ts +26 -0
- package/dist/build/textos.d.ts.map +1 -0
- package/dist/ibs-cbs.d.ts +5 -0
- package/dist/ibs-cbs.d.ts.map +1 -1
- package/dist/ibs-cbs.js.map +2 -2
- package/dist/index.js +200 -21
- package/dist/index.js.map +8 -7
- package/dist/services/recuperar.d.ts +3 -2
- package/dist/services/recuperar.d.ts.map +1 -1
- package/dist/services/resolver.d.ts +4 -3
- package/dist/services/resolver.d.ts.map +1 -1
- package/dist/versao-gerada.d.ts +1 -1
- package/package.json +9 -9
- package/src/build/build.ts +11 -18
- package/src/build/textos.ts +228 -0
- package/src/ibs-cbs.ts +5 -0
- package/src/services/recuperar.ts +4 -2
- package/src/services/resolver.ts +5 -3
- package/src/versao-gerada.ts +1 -1
package/README.md
CHANGED
|
@@ -115,6 +115,10 @@ interface CalculadoraIbsCbs {
|
|
|
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
|
+
### Experimental: `@sinete/nfe/ibs-cbs`
|
|
119
|
+
|
|
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
|
+
|
|
118
122
|
## Serviços (`criarClienteNfe`)
|
|
119
123
|
|
|
120
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`).
|
|
@@ -129,9 +133,9 @@ interface CalculadoraIbsCbs {
|
|
|
129
133
|
|
|
130
134
|
### Envio sem resposta
|
|
131
135
|
|
|
132
|
-
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.
|
|
133
137
|
|
|
134
|
-
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.
|
|
135
139
|
|
|
136
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.
|
|
137
141
|
|
|
@@ -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,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWzF,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,OAAO,KAAK,EACV,QAAQ,EASR,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,KAAK,EAAE,QAAQ,EAAc,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/build/build.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWzF,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,6BAA6B,CAAC;AAOrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,OAAO,KAAK,EACV,QAAQ,EASR,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,aAAa,CAAC;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,OAAO,KAAK,EAAE,QAAQ,EAAc,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAaxE,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,KAAK,EAAE,eAAe,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,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,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;IACvD;;;;;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,UAAU;IACzB,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,iBAAiB,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,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;AAuZD,yFAAyF;AACzF,wBAAsB,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0yBzG;AAmBD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE1G;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQvE;AAuBD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAExF"}
|
|
@@ -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"}
|
package/dist/ibs-cbs.d.ts
CHANGED
|
@@ -7,6 +7,11 @@
|
|
|
7
7
|
* embarcado não entra aqui, para não ir para o bundle de quem não o usa: `carregarDatasetEmbarcado()`, na raiz do
|
|
8
8
|
* `@sinete/nfe`, o importa sob demanda. `Dec`, `DataIso` e `Vigencia` vêm do motor (os de `Dec` e `DataIso` são os
|
|
9
9
|
* mesmos; a `Vigencia` dos dados, com os campos do dataset, fica acessível pelos tipos que a usam).
|
|
10
|
+
*
|
|
11
|
+
* Experimental (ADR 0016, seção 5) até o `@sinete/ibs-cbs` sair 1.0: a calculadora espera a norma da base de cálculo
|
|
12
|
+
* (NT 2025.002, UB16-10), e este subpath pode mudar em minor, sempre com changeset.
|
|
13
|
+
*
|
|
14
|
+
* @experimental
|
|
10
15
|
*/
|
|
11
16
|
export * from '@sinete/ibs-cbs';
|
|
12
17
|
export type { AliquotasCredPres, Aplicabilidade, BaseLegal, BaseLegalClassTrib, BundleDoDataset, CalculoCredPres, CodigoErroDadosIbsCbs, ConteudoTributario, CreditoClassTrib, CredPresVigente, DatasetIbsCbs, DiferencaDeDatasets, DiferencaDeTabela, ExcecaoDePrefixo, ExpressoesDoTratamento, Familia, FiltroClassTrib, FiltroDeAtores, FonteDoDataset, GruposClassTrib, GruposCredPres, GruposCst, IdDaFonte, Indicador, IndicadoresDoTratamento, ManifestoDaTabela, ManifestoDoDataset, MudancaDeCampo, MudancaDeRegistro, NomeDaTabela, Nomenclatura, PapelDoAtor, PorTributo, RegistroAliquotaFixa, RegistroAnexo, RegistroAplicabilidade, RegistroAtor, RegistroAtorClassTrib, RegistroClassTrib, RegistroCredPres, RegistroCst, RegistroGrupoDeAtores, RegistroNfseNbs, RegistroReducao, RegistroRedutorCompraGov, RegistroTipoDfe, RegistroTransferenciaCbs, RegistroTratamento, ResultadoAplicabilidade, TabelasDoDataset, TipoDeAliquota, TipoDeMudanca, Tributo, VinculoDfe, VinculoTratamento, } from '@sinete/ibs-cbs-dados';
|
package/dist/ibs-cbs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ibs-cbs.d.ts","sourceRoot":"","sources":["../src/ibs-cbs.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ibs-cbs.d.ts","sourceRoot":"","sources":["../src/ibs-cbs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,cAAc,iBAAiB,CAAC;AAChC,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,OAAO,EACP,eAAe,EACf,cAAc,EACd,cAAc,EACd,eAAe,EACf,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,OAAO,EACP,UAAU,EACV,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,yBAAyB,EACzB,SAAS,EACT,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,2BAA2B,EAC3B,gBAAgB,EAChB,OAAO,GACR,MAAM,uBAAuB,CAAC"}
|
package/dist/ibs-cbs.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ibs-cbs.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * `@sinete/nfe/ibs-cbs`: tudo o que quem emite NF-e precisa do IBS/CBS, sem importar `@sinete/ibs-cbs` nem\n * `@sinete/ibs-cbs-dados` diretamente.\n *\n * Reexporta o motor inteiro (`@sinete/ibs-cbs`: alíquotas, cálculo, regras da NT 2025.002 e determinação de CST e\n * cClassTrib) e o leitor do dataset (`@sinete/ibs-cbs-dados`: `carregarDataset`, `conferirDataset`, diff, tipos). O dataset\n * embarcado não entra aqui, para não ir para o bundle de quem não o usa: `carregarDatasetEmbarcado()`, na raiz do\n * `@sinete/nfe`, o importa sob demanda. `Dec`, `DataIso` e `Vigencia` vêm do motor (os de `Dec` e `DataIso` são os\n * mesmos; a `Vigencia` dos dados, com os campos do dataset, fica acessível pelos tipos que a usam).\n */\n\n// biome-ignore lint/performance/noReExportAll: o subpath existe para reexportar o motor inteiro, e as duas pontas são do mesmo repo.\nexport * from '@sinete/ibs-cbs';\nexport type {\n AliquotasCredPres,\n Aplicabilidade,\n BaseLegal,\n BaseLegalClassTrib,\n BundleDoDataset,\n CalculoCredPres,\n CodigoErroDadosIbsCbs,\n ConteudoTributario,\n CreditoClassTrib,\n CredPresVigente,\n DatasetIbsCbs,\n DiferencaDeDatasets,\n DiferencaDeTabela,\n ExcecaoDePrefixo,\n ExpressoesDoTratamento,\n Familia,\n FiltroClassTrib,\n FiltroDeAtores,\n FonteDoDataset,\n GruposClassTrib,\n GruposCredPres,\n GruposCst,\n IdDaFonte,\n Indicador,\n IndicadoresDoTratamento,\n ManifestoDaTabela,\n ManifestoDoDataset,\n MudancaDeCampo,\n MudancaDeRegistro,\n NomeDaTabela,\n Nomenclatura,\n PapelDoAtor,\n PorTributo,\n RegistroAliquotaFixa,\n RegistroAnexo,\n RegistroAplicabilidade,\n RegistroAtor,\n RegistroAtorClassTrib,\n RegistroClassTrib,\n RegistroCredPres,\n RegistroCst,\n RegistroGrupoDeAtores,\n RegistroNfseNbs,\n RegistroReducao,\n RegistroRedutorCompraGov,\n RegistroTipoDfe,\n RegistroTransferenciaCbs,\n RegistroTratamento,\n ResultadoAplicabilidade,\n TabelasDoDataset,\n TipoDeAliquota,\n TipoDeMudanca,\n Tributo,\n VinculoDfe,\n VinculoTratamento,\n} from '@sinete/ibs-cbs-dados';\nexport {\n aplicabilidade,\n carregarDataset,\n compararDatasets,\n conferirDataset,\n DESLOCAMENTO_BRASILIA_MIN,\n dataCivil,\n ErroDadosIbsCbs,\n ehDataIso,\n exigirDataIso,\n formatarDiferenca,\n jsonCanonico,\n NOMES_DAS_TABELAS,\n tabelaCanonica,\n tipoDeMudanca,\n VERSAO_DO_FORMATO_DOS_DADOS,\n versaoDoConteudo,\n vigente,\n} from '@sinete/ibs-cbs-dados';\n"
|
|
5
|
+
"/**\n * `@sinete/nfe/ibs-cbs`: tudo o que quem emite NF-e precisa do IBS/CBS, sem importar `@sinete/ibs-cbs` nem\n * `@sinete/ibs-cbs-dados` diretamente.\n *\n * Reexporta o motor inteiro (`@sinete/ibs-cbs`: alíquotas, cálculo, regras da NT 2025.002 e determinação de CST e\n * cClassTrib) e o leitor do dataset (`@sinete/ibs-cbs-dados`: `carregarDataset`, `conferirDataset`, diff, tipos). O dataset\n * embarcado não entra aqui, para não ir para o bundle de quem não o usa: `carregarDatasetEmbarcado()`, na raiz do\n * `@sinete/nfe`, o importa sob demanda. `Dec`, `DataIso` e `Vigencia` vêm do motor (os de `Dec` e `DataIso` são os\n * mesmos; a `Vigencia` dos dados, com os campos do dataset, fica acessível pelos tipos que a usam).\n *\n * Experimental (ADR 0016, seção 5) até o `@sinete/ibs-cbs` sair 1.0: a calculadora espera a norma da base de cálculo\n * (NT 2025.002, UB16-10), e este subpath pode mudar em minor, sempre com changeset.\n *\n * @experimental\n */\n\n// biome-ignore lint/performance/noReExportAll: o subpath existe para reexportar o motor inteiro, e as duas pontas são do mesmo repo.\nexport * from '@sinete/ibs-cbs';\nexport type {\n AliquotasCredPres,\n Aplicabilidade,\n BaseLegal,\n BaseLegalClassTrib,\n BundleDoDataset,\n CalculoCredPres,\n CodigoErroDadosIbsCbs,\n ConteudoTributario,\n CreditoClassTrib,\n CredPresVigente,\n DatasetIbsCbs,\n DiferencaDeDatasets,\n DiferencaDeTabela,\n ExcecaoDePrefixo,\n ExpressoesDoTratamento,\n Familia,\n FiltroClassTrib,\n FiltroDeAtores,\n FonteDoDataset,\n GruposClassTrib,\n GruposCredPres,\n GruposCst,\n IdDaFonte,\n Indicador,\n IndicadoresDoTratamento,\n ManifestoDaTabela,\n ManifestoDoDataset,\n MudancaDeCampo,\n MudancaDeRegistro,\n NomeDaTabela,\n Nomenclatura,\n PapelDoAtor,\n PorTributo,\n RegistroAliquotaFixa,\n RegistroAnexo,\n RegistroAplicabilidade,\n RegistroAtor,\n RegistroAtorClassTrib,\n RegistroClassTrib,\n RegistroCredPres,\n RegistroCst,\n RegistroGrupoDeAtores,\n RegistroNfseNbs,\n RegistroReducao,\n RegistroRedutorCompraGov,\n RegistroTipoDfe,\n RegistroTransferenciaCbs,\n RegistroTratamento,\n ResultadoAplicabilidade,\n TabelasDoDataset,\n TipoDeAliquota,\n TipoDeMudanca,\n Tributo,\n VinculoDfe,\n VinculoTratamento,\n} from '@sinete/ibs-cbs-dados';\nexport {\n aplicabilidade,\n carregarDataset,\n compararDatasets,\n conferirDataset,\n DESLOCAMENTO_BRASILIA_MIN,\n dataCivil,\n ErroDadosIbsCbs,\n ehDataIso,\n exigirDataIso,\n formatarDiferenca,\n jsonCanonico,\n NOMES_DAS_TABELAS,\n tabelaCanonica,\n tipoDeMudanca,\n VERSAO_DO_FORMATO_DOS_DADOS,\n versaoDoConteudo,\n vigente,\n} from '@sinete/ibs-cbs-dados';\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";
|
|
7
|
+
"mappings": ";AAiBA;AA0DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
8
8
|
"debugId": "ACA6AB89328A3AB064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.js
CHANGED
|
@@ -578,7 +578,7 @@ function formatarDh(data, deslocamentoMin) {
|
|
|
578
578
|
}
|
|
579
579
|
|
|
580
580
|
// packages/nfe/src/versao-gerada.ts
|
|
581
|
-
var VERSAO_PACOTE = "0.
|
|
581
|
+
var VERSAO_PACOTE = "0.3.0";
|
|
582
582
|
|
|
583
583
|
// packages/nfe/src/build/destinatario.ts
|
|
584
584
|
import { ufPorSigla } from "@sinete/core";
|
|
@@ -1919,6 +1919,192 @@ function conferirEmitenteDoCertificado(nfe, titular) {
|
|
|
1919
1919
|
return [];
|
|
1920
1920
|
}
|
|
1921
1921
|
|
|
1922
|
+
// packages/nfe/src/build/textos.ts
|
|
1923
|
+
import { conferirTipoSimples, ehComplexType as ehComplexType2, ehElementParticle as ehElementParticle2, ehWildcard as ehWildcard2 } from "@sinete/schemas";
|
|
1924
|
+
function textoXmlValido(texto) {
|
|
1925
|
+
for (const ch of texto) {
|
|
1926
|
+
const c = ch.codePointAt(0) ?? 0;
|
|
1927
|
+
const ok = c === 9 || c === 10 || c === 13 || c >= 32 && c <= 55295 || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111;
|
|
1928
|
+
if (!ok)
|
|
1929
|
+
return false;
|
|
1930
|
+
}
|
|
1931
|
+
return true;
|
|
1932
|
+
}
|
|
1933
|
+
var CAMPOS = [
|
|
1934
|
+
["natOp", "ide.natOp"],
|
|
1935
|
+
["emitente.xNome", "emit.xNome"],
|
|
1936
|
+
["emitente.xFant", "emit.xFant"],
|
|
1937
|
+
["emitente.endereco.xLgr", "emit.enderEmit.xLgr"],
|
|
1938
|
+
["emitente.endereco.nro", "emit.enderEmit.nro"],
|
|
1939
|
+
["emitente.endereco.xCpl", "emit.enderEmit.xCpl"],
|
|
1940
|
+
["emitente.endereco.xBairro", "emit.enderEmit.xBairro"],
|
|
1941
|
+
["emitente.endereco.xMun", "emit.enderEmit.xMun"],
|
|
1942
|
+
["destinatario.xNome", "dest.xNome"],
|
|
1943
|
+
["destinatario.email", "dest.email"],
|
|
1944
|
+
["destinatario.endereco.xLgr", "dest.enderDest.xLgr"],
|
|
1945
|
+
["destinatario.endereco.nro", "dest.enderDest.nro"],
|
|
1946
|
+
["destinatario.endereco.xCpl", "dest.enderDest.xCpl"],
|
|
1947
|
+
["destinatario.endereco.xBairro", "dest.enderDest.xBairro"],
|
|
1948
|
+
["destinatario.endereco.xMun", "dest.enderDest.xMun"],
|
|
1949
|
+
["destinatario.endereco.xPais", "dest.enderDest.xPais"],
|
|
1950
|
+
...["retirada", "entrega"].flatMap((g) => ["xNome", "xLgr", "nro", "xCpl", "xBairro", "xMun", "email"].map((c) => [`${g}.${c}`, `${g}.${c}`])),
|
|
1951
|
+
["itens[].produto.cProd", "det.prod.cProd"],
|
|
1952
|
+
["itens[].produto.xProd", "det.prod.xProd"],
|
|
1953
|
+
["itens[].produto.uCom", "det.prod.uCom"],
|
|
1954
|
+
["itens[].produto.uTrib", "det.prod.uTrib"],
|
|
1955
|
+
["itens[].produto.xPed", "det.prod.xPed"],
|
|
1956
|
+
["itens[].infAdProd", "det.infAdProd"],
|
|
1957
|
+
["transporte.transportador.xNome", "transp.transporta.xNome"],
|
|
1958
|
+
["transporte.transportador.xEnder", "transp.transporta.xEnder"],
|
|
1959
|
+
["transporte.transportador.xMun", "transp.transporta.xMun"],
|
|
1960
|
+
["transporte.volumes[].esp", "transp.vol.esp"],
|
|
1961
|
+
["transporte.volumes[].marca", "transp.vol.marca"],
|
|
1962
|
+
["transporte.volumes[].nVol", "transp.vol.nVol"],
|
|
1963
|
+
["cobranca.fatura.nFat", "cobr.fat.nFat"],
|
|
1964
|
+
["cobranca.duplicatas[].nDup", "cobr.dup.nDup"],
|
|
1965
|
+
["pagamento.detPag[].xPag", "pag.detPag.xPag"],
|
|
1966
|
+
["informacoesAdicionais.infAdFisco", "infAdic.infAdFisco"],
|
|
1967
|
+
["informacoesAdicionais.infCpl", "infAdic.infCpl"],
|
|
1968
|
+
["informacoesAdicionais.obsCont[].xTexto", "infAdic.obsCont.xTexto"],
|
|
1969
|
+
["informacoesAdicionais.obsFisco[].xTexto", "infAdic.obsFisco.xTexto"],
|
|
1970
|
+
["compra.xNEmp", "compra.xNEmp"],
|
|
1971
|
+
["compra.xPed", "compra.xPed"],
|
|
1972
|
+
["compra.xCont", "compra.xCont"]
|
|
1973
|
+
];
|
|
1974
|
+
function elemento(p, nome) {
|
|
1975
|
+
if (p === undefined || ehWildcard2(p))
|
|
1976
|
+
return;
|
|
1977
|
+
if (ehElementParticle2(p))
|
|
1978
|
+
return p.e === nome ? p.t : undefined;
|
|
1979
|
+
for (const i of p.i) {
|
|
1980
|
+
const t = elemento(i, nome);
|
|
1981
|
+
if (t !== undefined)
|
|
1982
|
+
return t;
|
|
1983
|
+
}
|
|
1984
|
+
return;
|
|
1985
|
+
}
|
|
1986
|
+
function tipoEm(infNFe, caminho) {
|
|
1987
|
+
let t = infNFe;
|
|
1988
|
+
for (const nome of caminho.split(".")) {
|
|
1989
|
+
if (t === undefined || !ehComplexType2(t))
|
|
1990
|
+
return;
|
|
1991
|
+
t = elemento(t.c, nome);
|
|
1992
|
+
}
|
|
1993
|
+
return t === undefined || ehComplexType2(t) ? undefined : t;
|
|
1994
|
+
}
|
|
1995
|
+
var tiposPorPl = new WeakMap;
|
|
1996
|
+
function tiposDoPl(infNFe) {
|
|
1997
|
+
let m = tiposPorPl.get(infNFe);
|
|
1998
|
+
if (m === undefined) {
|
|
1999
|
+
const novo = new Map;
|
|
2000
|
+
for (const [entrada, xml] of CAMPOS) {
|
|
2001
|
+
const t = tipoEm(infNFe, xml);
|
|
2002
|
+
if (t !== undefined)
|
|
2003
|
+
novo.set(entrada, t);
|
|
2004
|
+
}
|
|
2005
|
+
m = novo;
|
|
2006
|
+
tiposPorPl.set(infNFe, m);
|
|
2007
|
+
}
|
|
2008
|
+
return m;
|
|
2009
|
+
}
|
|
2010
|
+
function valoresEm(raiz, caminho) {
|
|
2011
|
+
let atuais = [["", raiz]];
|
|
2012
|
+
for (const parte of caminho.split(".")) {
|
|
2013
|
+
const lista = parte.endsWith("[]");
|
|
2014
|
+
const chave = lista ? parte.slice(0, -2) : parte;
|
|
2015
|
+
const proximos = [];
|
|
2016
|
+
for (const [c, v] of atuais) {
|
|
2017
|
+
if (typeof v !== "object" || v === null)
|
|
2018
|
+
continue;
|
|
2019
|
+
const filho = v[chave];
|
|
2020
|
+
const base = c === "" ? chave : `${c}.${chave}`;
|
|
2021
|
+
if (!lista)
|
|
2022
|
+
proximos.push([base, filho]);
|
|
2023
|
+
else if (Array.isArray(filho))
|
|
2024
|
+
for (const [n, f] of filho.entries())
|
|
2025
|
+
proximos.push([`${base}[${n}]`, f]);
|
|
2026
|
+
}
|
|
2027
|
+
atuais = proximos;
|
|
2028
|
+
}
|
|
2029
|
+
return atuais;
|
|
2030
|
+
}
|
|
2031
|
+
function textosForaDoXml(valor, caminho, saida) {
|
|
2032
|
+
if (typeof valor === "string") {
|
|
2033
|
+
if (!textoXmlValido(valor))
|
|
2034
|
+
saida.push(caminho);
|
|
2035
|
+
} else if (Array.isArray(valor)) {
|
|
2036
|
+
for (const [n, v] of valor.entries())
|
|
2037
|
+
textosForaDoXml(v, `${caminho}[${n}]`, saida);
|
|
2038
|
+
} else if (typeof valor === "object" && valor !== null) {
|
|
2039
|
+
for (const [k, v] of Object.entries(valor))
|
|
2040
|
+
textosForaDoXml(v, caminho === "" ? k : `${caminho}.${k}`, saida);
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
var CARACTERE_INVISIVEL = "caractere não aceito (símbolo ou caractere de controle)";
|
|
2044
|
+
var VISIVEL = /^[\p{L}\p{M}\p{N}\p{P}\p{S}]$/u;
|
|
2045
|
+
function caractereRecusado(tipo, valor) {
|
|
2046
|
+
for (const ch of new Set(valor)) {
|
|
2047
|
+
const saida = [];
|
|
2048
|
+
conferirTipoSimples(tipo, `A${ch}A`, "", saida);
|
|
2049
|
+
if (saida.some((o) => o.code === "padrao"))
|
|
2050
|
+
return ch;
|
|
2051
|
+
}
|
|
2052
|
+
return;
|
|
2053
|
+
}
|
|
2054
|
+
function mensagensDoTexto(tipo, valor, violadas) {
|
|
2055
|
+
if (violadas.length === 0)
|
|
2056
|
+
return [];
|
|
2057
|
+
if (valor.trim() === "")
|
|
2058
|
+
return ["não pode ficar em branco"];
|
|
2059
|
+
const tamanho = [...valor].length;
|
|
2060
|
+
const mensagens = new Set;
|
|
2061
|
+
for (const o of violadas) {
|
|
2062
|
+
if (o.code === "tamanho_maximo" && tipo.mx !== undefined)
|
|
2063
|
+
mensagens.add(`no máximo ${tipo.mx} caracteres (tem ${tamanho})`);
|
|
2064
|
+
else if (o.code === "tamanho_minimo" && tipo.mn !== undefined)
|
|
2065
|
+
mensagens.add(`no mínimo ${tipo.mn} caracteres (tem ${tamanho})`);
|
|
2066
|
+
else if (o.code === "tamanho" && tipo.l !== undefined)
|
|
2067
|
+
mensagens.add(`exatamente ${tipo.l} caracteres (tem ${tamanho})`);
|
|
2068
|
+
else if (o.code === "padrao") {
|
|
2069
|
+
const espaco = valor !== valor.trim();
|
|
2070
|
+
const ch = caractereRecusado(tipo, valor);
|
|
2071
|
+
if (espaco)
|
|
2072
|
+
mensagens.add("sem espaço no começo nem no fim");
|
|
2073
|
+
if (ch !== undefined)
|
|
2074
|
+
mensagens.add(VISIVEL.test(ch) ? `caractere não aceito: “${ch}”` : CARACTERE_INVISIVEL);
|
|
2075
|
+
if (!espaco && ch === undefined)
|
|
2076
|
+
mensagens.add("formato não aceito");
|
|
2077
|
+
} else
|
|
2078
|
+
mensagens.add("valor não aceito neste campo");
|
|
2079
|
+
}
|
|
2080
|
+
return [...mensagens];
|
|
2081
|
+
}
|
|
2082
|
+
function conferirTextosDaEntrada(entrada, infNFe, issues, substituidos = new Set) {
|
|
2083
|
+
const jaRecusados = new Set(issues.list.map((i) => i.caminho));
|
|
2084
|
+
const foraDoXml = [];
|
|
2085
|
+
textosForaDoXml(entrada, "", foraDoXml);
|
|
2086
|
+
for (const c of foraDoXml) {
|
|
2087
|
+
if (jaRecusados.has(c) || substituidos.has(c))
|
|
2088
|
+
continue;
|
|
2089
|
+
issues.add(c, "campo_invalido", CARACTERE_INVISIVEL);
|
|
2090
|
+
jaRecusados.add(c);
|
|
2091
|
+
}
|
|
2092
|
+
const tipos = tiposDoPl(infNFe);
|
|
2093
|
+
for (const [campo] of CAMPOS) {
|
|
2094
|
+
const tipo = tipos.get(campo);
|
|
2095
|
+
if (tipo === undefined)
|
|
2096
|
+
continue;
|
|
2097
|
+
for (const [caminho, valor] of valoresEm(entrada, campo)) {
|
|
2098
|
+
if (typeof valor !== "string" || jaRecusados.has(caminho) || substituidos.has(caminho))
|
|
2099
|
+
continue;
|
|
2100
|
+
const saida = [];
|
|
2101
|
+
conferirTipoSimples(tipo, valor, caminho, saida);
|
|
2102
|
+
for (const m of mensagensDoTexto(tipo, valor, saida))
|
|
2103
|
+
issues.add(caminho, "campo_invalido", m);
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
|
|
1922
2108
|
// packages/nfe/src/build/tributos.ts
|
|
1923
2109
|
function buildIpi(ctx, input, vOp, path) {
|
|
1924
2110
|
const head = {
|
|
@@ -2223,25 +2409,16 @@ function referencia(ref, path, issues) {
|
|
|
2223
2409
|
}
|
|
2224
2410
|
};
|
|
2225
2411
|
}
|
|
2226
|
-
function
|
|
2227
|
-
for (const ch of texto) {
|
|
2228
|
-
const c = ch.codePointAt(0) ?? 0;
|
|
2229
|
-
const ok = c === 9 || c === 10 || c === 13 || c >= 32 && c <= 55295 || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111;
|
|
2230
|
-
if (!ok)
|
|
2231
|
-
return false;
|
|
2232
|
-
}
|
|
2233
|
-
return true;
|
|
2234
|
-
}
|
|
2235
|
-
function textosForaDoXml(value, path, issues) {
|
|
2412
|
+
function textosForaDoXml2(value, path, issues) {
|
|
2236
2413
|
if (typeof value === "string") {
|
|
2237
2414
|
if (!textoXmlValido(value))
|
|
2238
2415
|
issues.montagem(path, "campo_invalido", "texto com caractere não permitido em XML");
|
|
2239
2416
|
} else if (Array.isArray(value)) {
|
|
2240
2417
|
for (const [n, v] of value.entries())
|
|
2241
|
-
|
|
2418
|
+
textosForaDoXml2(v, `${path}[${n}]`, issues);
|
|
2242
2419
|
} else if (typeof value === "object" && value !== null) {
|
|
2243
2420
|
for (const [k, v] of Object.entries(value))
|
|
2244
|
-
|
|
2421
|
+
textosForaDoXml2(v, `${path}.${k}`, issues);
|
|
2245
2422
|
}
|
|
2246
2423
|
}
|
|
2247
2424
|
function montarItem(ctx, item, n, normal) {
|
|
@@ -2699,6 +2876,8 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2699
2876
|
grupoInvalido(TISCt, "IS", imp.IS, is, issues);
|
|
2700
2877
|
}
|
|
2701
2878
|
});
|
|
2879
|
+
const substituidos = opcoes.ambiente === "homologacao" ? ["destinatario.xNome", ...nfce ? ["itens[0].produto.xProd"] : []] : [];
|
|
2880
|
+
conferirTextosDaEntrada(entrada, pl.infNFe, issues, new Set(substituidos));
|
|
2702
2881
|
if (!issues.empty)
|
|
2703
2882
|
return { ok: false, ocorrencias: issues.classificadas };
|
|
2704
2883
|
const gruposIbsCbs = itens.map((m) => m.det.imposto.IBSCBS).filter((g) => g !== undefined);
|
|
@@ -2995,7 +3174,7 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2995
3174
|
cstComIsento(entrada, idDest, issues);
|
|
2996
3175
|
vencimentos(entrada, { dhEmi, instante: agora }, issues);
|
|
2997
3176
|
camposForaDoPl(pl.infNFe, inf, "infNFe", pl.vigencia.pl, issues);
|
|
2998
|
-
|
|
3177
|
+
textosForaDoXml2(inf, "infNFe", issues);
|
|
2999
3178
|
if (!issues.empty)
|
|
3000
3179
|
return { ok: false, ocorrencias: issues.classificadas };
|
|
3001
3180
|
let xml;
|
|
@@ -3198,7 +3377,7 @@ var GRUPOS = [
|
|
|
3198
3377
|
{ padrao: /^infNFe\.infRespTec\b/, rotulo: "Responsável técnico" },
|
|
3199
3378
|
{ padrao: /^infNFe\.exporta\b/, rotulo: "Exportação" }
|
|
3200
3379
|
];
|
|
3201
|
-
var
|
|
3380
|
+
var CAMPOS2 = {
|
|
3202
3381
|
IE: "Inscrição estadual",
|
|
3203
3382
|
IEST: "Inscrição estadual do substituto tributário",
|
|
3204
3383
|
IM: "Inscrição municipal",
|
|
@@ -3261,7 +3440,7 @@ var CAMPOS = {
|
|
|
3261
3440
|
infCpl: "Informações complementares",
|
|
3262
3441
|
infAdFisco: "Informações de interesse do fisco"
|
|
3263
3442
|
};
|
|
3264
|
-
var rotular = criarRotuloDoCaminho({ grupos: GRUPOS, campos:
|
|
3443
|
+
var rotular = criarRotuloDoCaminho({ grupos: GRUPOS, campos: CAMPOS2, padrao: "Dados da NF-e" });
|
|
3265
3444
|
function rotuloDoCaminho(caminho) {
|
|
3266
3445
|
return rotular(caminho);
|
|
3267
3446
|
}
|
|
@@ -4300,8 +4479,8 @@ function lerProcEvento(xml) {
|
|
|
4300
4479
|
...nProt === undefined ? {} : { nProt }
|
|
4301
4480
|
};
|
|
4302
4481
|
}
|
|
4303
|
-
async function recuperarEventoRegistrado(cliente, chave, tpEvento, nSeqEvento) {
|
|
4304
|
-
const consulta = await cliente.consultar(chave);
|
|
4482
|
+
async function recuperarEventoRegistrado(cliente, chave, tpEvento, nSeqEvento, opcoes) {
|
|
4483
|
+
const consulta = await cliente.consultar(chave, undefined, opcoes);
|
|
4305
4484
|
if (consulta.tipo !== "autorizado" && consulta.tipo !== "denegado")
|
|
4306
4485
|
return { registrado: false, consulta };
|
|
4307
4486
|
let achado;
|
|
@@ -4322,14 +4501,14 @@ var CHAVE_NO_MOTIVO = /\[\s*chNFe\s*:\s*([0-9]{6}[0-9A-Z]{12}[0-9]{26})\s*\]/i;
|
|
|
4322
4501
|
function chaveDaDuplicidade(xMotivo) {
|
|
4323
4502
|
return CHAVE_NO_MOTIVO.exec(xMotivo)?.[1]?.toUpperCase();
|
|
4324
4503
|
}
|
|
4325
|
-
async function resolverEnvioSemResposta(cliente, nfeAssinada, anterior) {
|
|
4504
|
+
async function resolverEnvioSemResposta(cliente, nfeAssinada, anterior, opcoes) {
|
|
4326
4505
|
const a = documentoAssinado(nfeAssinada, "NFe", "infNFe");
|
|
4327
4506
|
const chave = a.id.slice(3);
|
|
4328
4507
|
if (anterior && anterior.tipo === "recusado" && cstatEm(anterior.cStat, "duplicidadeChaveDiferente")) {
|
|
4329
4508
|
const outra = chaveDaDuplicidade(anterior.xMotivo);
|
|
4330
4509
|
return { acao: "divergente", motivo: anterior, ...outra === undefined ? {} : { chNFe: outra } };
|
|
4331
4510
|
}
|
|
4332
|
-
const consulta = await cliente.consultar(chave, nfeAssinada);
|
|
4511
|
+
const consulta = await cliente.consultar(chave, nfeAssinada, opcoes);
|
|
4333
4512
|
if (consulta.tipo === "recusado") {
|
|
4334
4513
|
if (cstatEm(consulta.cStat, "naoConsta"))
|
|
4335
4514
|
return { acao: "reenviar", nfeAssinada: a.xml };
|
|
@@ -4395,5 +4574,5 @@ export {
|
|
|
4395
4574
|
urlsNfce
|
|
4396
4575
|
};
|
|
4397
4576
|
|
|
4398
|
-
//# debugId=
|
|
4577
|
+
//# debugId=9351F0AE81B9EE1064756E2164756E21
|
|
4399
4578
|
//# sourceMappingURL=index.js.map
|