@sinete/nfe 0.2.0 → 0.4.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 +8 -1
- 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.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +233 -33
- package/dist/index.js.map +9 -8
- package/dist/ports.d.ts +18 -0
- package/dist/ports.d.ts.map +1 -1
- package/dist/rtc.d.ts.map +1 -1
- 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 +31 -24
- package/src/build/textos.ts +228 -0
- package/src/ibs-cbs.ts +5 -0
- package/src/index.ts +7 -1
- package/src/ports.ts +19 -0
- package/src/rtc.ts +50 -9
- 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
|
|
package/dist/build/build.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ 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
11
|
import type { DadosNfe, ResponsavelTecnico } from '../model.js';
|
|
12
|
-
import type { CalculadoraIbsCbs } from '../ports.js';
|
|
12
|
+
import type { AliquotaIbsCbsInformada, 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';
|
|
@@ -87,6 +87,13 @@ export interface NfeMontada {
|
|
|
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
|
+
/**
|
|
91
|
+
* Alíquotas do IBS/CBS que a calculadora usou vindas de quem integra (`comAliquotasInformadas`), e não da tabela
|
|
92
|
+
* oficial do pacote, por item. Ausente quando todas foram oficiais. A montagem não recusa por isso: é o caminho para
|
|
93
|
+
* emitir com uma alíquota já publicada antes de o pacote trazê-la. Guarde junto com a nota e alerte quem opera; em
|
|
94
|
+
* produção, a alíquota informada é responsabilidade de quem a informou.
|
|
95
|
+
*/
|
|
96
|
+
readonly aliquotasInformadas?: readonly AliquotaIbsCbsInformada[];
|
|
90
97
|
}
|
|
91
98
|
export type ResultadoMontagemNfe = {
|
|
92
99
|
readonly ok: true;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/build/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export type { CodigoOcorrenciaNfe } from './issues.js';
|
|
|
19
19
|
export { CODIGOS_OCORRENCIA_NFE } from './issues.js';
|
|
20
20
|
export type { ClassificacaoIbsCbs, Cobranca, Contingencia, Crt, CstPisCofinsOutras, DadosNfe, Desoneracao, DesoneracaoSt, Destinatario, DetalhePagamento, DocumentoPessoa, Emitente, Endereco, EnderecoExterior, FinNFe, IbsCbsItem, Icms, Icms00, Icms02, Icms10, Icms15, Icms20, Icms30, Icms40, Icms51, Icms53, Icms60, Icms61, Icms70, Icms90, IcmsFcp, IcmsPartilha, IcmsProprio, IcmsRepasseSt, IcmsSn101, IcmsSn102, IcmsSn201, IcmsSn202, IcmsSn500, IcmsSn900, IcmsSt, IcmsStRetido, IcmsUfDest, ImpostoImportacao, ImpostosItem, IndIEDest, InformacoesAdicionais, Ipi, IpiNaoTributado, IpiTributado, Issqn, Item, Local, ModBC, ModBCST, ModFrete, Origem, Pagamento, PisCofins, PisCofinsSt, Produto, ProdutoEspecifico, Referenciada, RefNfp, ResponsavelTecnico, TCIBS_NFe, TMonofasia, Transportador, Transporte, TTribNFe, Volume, } from './model.js';
|
|
21
21
|
export { MotivoDesoneracaoIcms, TipoPagamento } from './model.js';
|
|
22
|
-
export type { CalculadoraIbsCbs, PedidoIbsCbsItem, PedidoIbsCbsNota, RespostaIbsCbs } from './ports.js';
|
|
22
|
+
export type { AliquotaIbsCbsInformada, CalculadoraIbsCbs, PedidoIbsCbsItem, PedidoIbsCbsNota, RespostaIbsCbs, } from './ports.js';
|
|
23
23
|
export { rotuloDoCaminho } from './rotulo.js';
|
|
24
24
|
export type { CalculadoraIbsCbsOpcoes, GrupoIbsCbs } from './rtc.js';
|
|
25
25
|
export { calculadoraIbsCbs, carregarDatasetEmbarcado, localDaOperacao } from './rtc.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,IAAI,EACJ,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,MAAM,EACN,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,GAAG,EACH,eAAe,EACf,YAAY,EACZ,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,GACP,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -398,13 +398,26 @@ function grupoDoLeiaute(g, indDoacao) {
|
|
|
398
398
|
}
|
|
399
399
|
};
|
|
400
400
|
}
|
|
401
|
-
function ocorrenciaDoMotor(e, itens) {
|
|
401
|
+
function ocorrenciaDoMotor(e, itens, semAliquota) {
|
|
402
402
|
if (e instanceof ErroClassificacao || e instanceof ErroRegimeNaoSuportado) {
|
|
403
403
|
const path = e.item !== undefined ? caminho(e.item) : caminho(itens[0]?.nItem ?? 1);
|
|
404
404
|
return { caminho: path, code: e.code, mensagem: e.message, origem: "entrada" };
|
|
405
405
|
}
|
|
406
|
-
if (e instanceof ErroAliquotaDesconhecida)
|
|
407
|
-
|
|
406
|
+
if (e instanceof ErroAliquotaDesconhecida) {
|
|
407
|
+
const n = semAliquota() ?? itens[0]?.nItem ?? 1;
|
|
408
|
+
return { caminho: caminho(n), code: e.code, mensagem: e.message, origem: "montagem" };
|
|
409
|
+
}
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
function primeiroItemSemAliquota(op, calc) {
|
|
413
|
+
for (const it of [...op.itens].sort((a, b) => a.n - b.n)) {
|
|
414
|
+
try {
|
|
415
|
+
calc({ ...op, itens: [it] });
|
|
416
|
+
} catch (e) {
|
|
417
|
+
if (e instanceof ErroAliquotaDesconhecida)
|
|
418
|
+
return it.n;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
408
421
|
return;
|
|
409
422
|
}
|
|
410
423
|
var embarcado;
|
|
@@ -485,16 +498,17 @@ function calcularCom(dataset, rates, options, {
|
|
|
485
498
|
itens: classificados
|
|
486
499
|
};
|
|
487
500
|
const time = contextoDeTempo({ emissao: relogioFixo(nota.emissao), fatoGerador: relogioFixo(nota.fatoGerador) });
|
|
501
|
+
const calc = (o) => calcular(o, {
|
|
502
|
+
dataset,
|
|
503
|
+
aliquotas: rates,
|
|
504
|
+
tempo: time,
|
|
505
|
+
...options.deslocamentoMin === undefined ? {} : { deslocamentoMin: options.deslocamentoMin }
|
|
506
|
+
});
|
|
488
507
|
let roc;
|
|
489
508
|
try {
|
|
490
|
-
roc =
|
|
491
|
-
dataset,
|
|
492
|
-
aliquotas: rates,
|
|
493
|
-
tempo: time,
|
|
494
|
-
...options.deslocamentoMin === undefined ? {} : { deslocamentoMin: options.deslocamentoMin }
|
|
495
|
-
});
|
|
509
|
+
roc = calc(op);
|
|
496
510
|
} catch (e) {
|
|
497
|
-
const issue = ocorrenciaDoMotor(e, itens);
|
|
511
|
+
const issue = ocorrenciaDoMotor(e, itens, () => primeiroItemSemAliquota(op, calc));
|
|
498
512
|
if (issue === undefined)
|
|
499
513
|
throw e;
|
|
500
514
|
return { itens: [], ocorrencias: [issue] };
|
|
@@ -538,11 +552,13 @@ function calcularCom(dataset, rates, options, {
|
|
|
538
552
|
}
|
|
539
553
|
}
|
|
540
554
|
const porItem = new Map(itens.map((it) => [it.nItem, it]));
|
|
555
|
+
const informadas = roc.itens.flatMap((r) => r.aliquotas.filter((a) => a.situacao === "informada").map((a) => ({ nItem: r.nItem, tributo: a.tributo, valor: a.valor, motivo: a.motivo ?? "" })));
|
|
541
556
|
return {
|
|
542
557
|
itens: roc.itens.map((r) => ({
|
|
543
558
|
nItem: r.nItem,
|
|
544
559
|
IBSCBS: grupoDoLeiaute(r.IBSCBS, porItem.get(r.nItem)?.indDoacao)
|
|
545
560
|
})),
|
|
561
|
+
...informadas.length === 0 ? {} : { aliquotasInformadas: informadas },
|
|
546
562
|
...issues.length === 0 ? {} : { ocorrencias: issues }
|
|
547
563
|
};
|
|
548
564
|
}
|
|
@@ -578,7 +594,7 @@ function formatarDh(data, deslocamentoMin) {
|
|
|
578
594
|
}
|
|
579
595
|
|
|
580
596
|
// packages/nfe/src/versao-gerada.ts
|
|
581
|
-
var VERSAO_PACOTE = "0.
|
|
597
|
+
var VERSAO_PACOTE = "0.4.0";
|
|
582
598
|
|
|
583
599
|
// packages/nfe/src/build/destinatario.ts
|
|
584
600
|
import { ufPorSigla } from "@sinete/core";
|
|
@@ -1919,6 +1935,192 @@ function conferirEmitenteDoCertificado(nfe, titular) {
|
|
|
1919
1935
|
return [];
|
|
1920
1936
|
}
|
|
1921
1937
|
|
|
1938
|
+
// packages/nfe/src/build/textos.ts
|
|
1939
|
+
import { conferirTipoSimples, ehComplexType as ehComplexType2, ehElementParticle as ehElementParticle2, ehWildcard as ehWildcard2 } from "@sinete/schemas";
|
|
1940
|
+
function textoXmlValido(texto) {
|
|
1941
|
+
for (const ch of texto) {
|
|
1942
|
+
const c = ch.codePointAt(0) ?? 0;
|
|
1943
|
+
const ok = c === 9 || c === 10 || c === 13 || c >= 32 && c <= 55295 || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111;
|
|
1944
|
+
if (!ok)
|
|
1945
|
+
return false;
|
|
1946
|
+
}
|
|
1947
|
+
return true;
|
|
1948
|
+
}
|
|
1949
|
+
var CAMPOS = [
|
|
1950
|
+
["natOp", "ide.natOp"],
|
|
1951
|
+
["emitente.xNome", "emit.xNome"],
|
|
1952
|
+
["emitente.xFant", "emit.xFant"],
|
|
1953
|
+
["emitente.endereco.xLgr", "emit.enderEmit.xLgr"],
|
|
1954
|
+
["emitente.endereco.nro", "emit.enderEmit.nro"],
|
|
1955
|
+
["emitente.endereco.xCpl", "emit.enderEmit.xCpl"],
|
|
1956
|
+
["emitente.endereco.xBairro", "emit.enderEmit.xBairro"],
|
|
1957
|
+
["emitente.endereco.xMun", "emit.enderEmit.xMun"],
|
|
1958
|
+
["destinatario.xNome", "dest.xNome"],
|
|
1959
|
+
["destinatario.email", "dest.email"],
|
|
1960
|
+
["destinatario.endereco.xLgr", "dest.enderDest.xLgr"],
|
|
1961
|
+
["destinatario.endereco.nro", "dest.enderDest.nro"],
|
|
1962
|
+
["destinatario.endereco.xCpl", "dest.enderDest.xCpl"],
|
|
1963
|
+
["destinatario.endereco.xBairro", "dest.enderDest.xBairro"],
|
|
1964
|
+
["destinatario.endereco.xMun", "dest.enderDest.xMun"],
|
|
1965
|
+
["destinatario.endereco.xPais", "dest.enderDest.xPais"],
|
|
1966
|
+
...["retirada", "entrega"].flatMap((g) => ["xNome", "xLgr", "nro", "xCpl", "xBairro", "xMun", "email"].map((c) => [`${g}.${c}`, `${g}.${c}`])),
|
|
1967
|
+
["itens[].produto.cProd", "det.prod.cProd"],
|
|
1968
|
+
["itens[].produto.xProd", "det.prod.xProd"],
|
|
1969
|
+
["itens[].produto.uCom", "det.prod.uCom"],
|
|
1970
|
+
["itens[].produto.uTrib", "det.prod.uTrib"],
|
|
1971
|
+
["itens[].produto.xPed", "det.prod.xPed"],
|
|
1972
|
+
["itens[].infAdProd", "det.infAdProd"],
|
|
1973
|
+
["transporte.transportador.xNome", "transp.transporta.xNome"],
|
|
1974
|
+
["transporte.transportador.xEnder", "transp.transporta.xEnder"],
|
|
1975
|
+
["transporte.transportador.xMun", "transp.transporta.xMun"],
|
|
1976
|
+
["transporte.volumes[].esp", "transp.vol.esp"],
|
|
1977
|
+
["transporte.volumes[].marca", "transp.vol.marca"],
|
|
1978
|
+
["transporte.volumes[].nVol", "transp.vol.nVol"],
|
|
1979
|
+
["cobranca.fatura.nFat", "cobr.fat.nFat"],
|
|
1980
|
+
["cobranca.duplicatas[].nDup", "cobr.dup.nDup"],
|
|
1981
|
+
["pagamento.detPag[].xPag", "pag.detPag.xPag"],
|
|
1982
|
+
["informacoesAdicionais.infAdFisco", "infAdic.infAdFisco"],
|
|
1983
|
+
["informacoesAdicionais.infCpl", "infAdic.infCpl"],
|
|
1984
|
+
["informacoesAdicionais.obsCont[].xTexto", "infAdic.obsCont.xTexto"],
|
|
1985
|
+
["informacoesAdicionais.obsFisco[].xTexto", "infAdic.obsFisco.xTexto"],
|
|
1986
|
+
["compra.xNEmp", "compra.xNEmp"],
|
|
1987
|
+
["compra.xPed", "compra.xPed"],
|
|
1988
|
+
["compra.xCont", "compra.xCont"]
|
|
1989
|
+
];
|
|
1990
|
+
function elemento(p, nome) {
|
|
1991
|
+
if (p === undefined || ehWildcard2(p))
|
|
1992
|
+
return;
|
|
1993
|
+
if (ehElementParticle2(p))
|
|
1994
|
+
return p.e === nome ? p.t : undefined;
|
|
1995
|
+
for (const i of p.i) {
|
|
1996
|
+
const t = elemento(i, nome);
|
|
1997
|
+
if (t !== undefined)
|
|
1998
|
+
return t;
|
|
1999
|
+
}
|
|
2000
|
+
return;
|
|
2001
|
+
}
|
|
2002
|
+
function tipoEm(infNFe, caminho) {
|
|
2003
|
+
let t = infNFe;
|
|
2004
|
+
for (const nome of caminho.split(".")) {
|
|
2005
|
+
if (t === undefined || !ehComplexType2(t))
|
|
2006
|
+
return;
|
|
2007
|
+
t = elemento(t.c, nome);
|
|
2008
|
+
}
|
|
2009
|
+
return t === undefined || ehComplexType2(t) ? undefined : t;
|
|
2010
|
+
}
|
|
2011
|
+
var tiposPorPl = new WeakMap;
|
|
2012
|
+
function tiposDoPl(infNFe) {
|
|
2013
|
+
let m = tiposPorPl.get(infNFe);
|
|
2014
|
+
if (m === undefined) {
|
|
2015
|
+
const novo = new Map;
|
|
2016
|
+
for (const [entrada, xml] of CAMPOS) {
|
|
2017
|
+
const t = tipoEm(infNFe, xml);
|
|
2018
|
+
if (t !== undefined)
|
|
2019
|
+
novo.set(entrada, t);
|
|
2020
|
+
}
|
|
2021
|
+
m = novo;
|
|
2022
|
+
tiposPorPl.set(infNFe, m);
|
|
2023
|
+
}
|
|
2024
|
+
return m;
|
|
2025
|
+
}
|
|
2026
|
+
function valoresEm(raiz, caminho) {
|
|
2027
|
+
let atuais = [["", raiz]];
|
|
2028
|
+
for (const parte of caminho.split(".")) {
|
|
2029
|
+
const lista = parte.endsWith("[]");
|
|
2030
|
+
const chave = lista ? parte.slice(0, -2) : parte;
|
|
2031
|
+
const proximos = [];
|
|
2032
|
+
for (const [c, v] of atuais) {
|
|
2033
|
+
if (typeof v !== "object" || v === null)
|
|
2034
|
+
continue;
|
|
2035
|
+
const filho = v[chave];
|
|
2036
|
+
const base = c === "" ? chave : `${c}.${chave}`;
|
|
2037
|
+
if (!lista)
|
|
2038
|
+
proximos.push([base, filho]);
|
|
2039
|
+
else if (Array.isArray(filho))
|
|
2040
|
+
for (const [n, f] of filho.entries())
|
|
2041
|
+
proximos.push([`${base}[${n}]`, f]);
|
|
2042
|
+
}
|
|
2043
|
+
atuais = proximos;
|
|
2044
|
+
}
|
|
2045
|
+
return atuais;
|
|
2046
|
+
}
|
|
2047
|
+
function textosForaDoXml(valor, caminho, saida) {
|
|
2048
|
+
if (typeof valor === "string") {
|
|
2049
|
+
if (!textoXmlValido(valor))
|
|
2050
|
+
saida.push(caminho);
|
|
2051
|
+
} else if (Array.isArray(valor)) {
|
|
2052
|
+
for (const [n, v] of valor.entries())
|
|
2053
|
+
textosForaDoXml(v, `${caminho}[${n}]`, saida);
|
|
2054
|
+
} else if (typeof valor === "object" && valor !== null) {
|
|
2055
|
+
for (const [k, v] of Object.entries(valor))
|
|
2056
|
+
textosForaDoXml(v, caminho === "" ? k : `${caminho}.${k}`, saida);
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
var CARACTERE_INVISIVEL = "caractere não aceito (símbolo ou caractere de controle)";
|
|
2060
|
+
var VISIVEL = /^[\p{L}\p{M}\p{N}\p{P}\p{S}]$/u;
|
|
2061
|
+
function caractereRecusado(tipo, valor) {
|
|
2062
|
+
for (const ch of new Set(valor)) {
|
|
2063
|
+
const saida = [];
|
|
2064
|
+
conferirTipoSimples(tipo, `A${ch}A`, "", saida);
|
|
2065
|
+
if (saida.some((o) => o.code === "padrao"))
|
|
2066
|
+
return ch;
|
|
2067
|
+
}
|
|
2068
|
+
return;
|
|
2069
|
+
}
|
|
2070
|
+
function mensagensDoTexto(tipo, valor, violadas) {
|
|
2071
|
+
if (violadas.length === 0)
|
|
2072
|
+
return [];
|
|
2073
|
+
if (valor.trim() === "")
|
|
2074
|
+
return ["não pode ficar em branco"];
|
|
2075
|
+
const tamanho = [...valor].length;
|
|
2076
|
+
const mensagens = new Set;
|
|
2077
|
+
for (const o of violadas) {
|
|
2078
|
+
if (o.code === "tamanho_maximo" && tipo.mx !== undefined)
|
|
2079
|
+
mensagens.add(`no máximo ${tipo.mx} caracteres (tem ${tamanho})`);
|
|
2080
|
+
else if (o.code === "tamanho_minimo" && tipo.mn !== undefined)
|
|
2081
|
+
mensagens.add(`no mínimo ${tipo.mn} caracteres (tem ${tamanho})`);
|
|
2082
|
+
else if (o.code === "tamanho" && tipo.l !== undefined)
|
|
2083
|
+
mensagens.add(`exatamente ${tipo.l} caracteres (tem ${tamanho})`);
|
|
2084
|
+
else if (o.code === "padrao") {
|
|
2085
|
+
const espaco = valor !== valor.trim();
|
|
2086
|
+
const ch = caractereRecusado(tipo, valor);
|
|
2087
|
+
if (espaco)
|
|
2088
|
+
mensagens.add("sem espaço no começo nem no fim");
|
|
2089
|
+
if (ch !== undefined)
|
|
2090
|
+
mensagens.add(VISIVEL.test(ch) ? `caractere não aceito: “${ch}”` : CARACTERE_INVISIVEL);
|
|
2091
|
+
if (!espaco && ch === undefined)
|
|
2092
|
+
mensagens.add("formato não aceito");
|
|
2093
|
+
} else
|
|
2094
|
+
mensagens.add("valor não aceito neste campo");
|
|
2095
|
+
}
|
|
2096
|
+
return [...mensagens];
|
|
2097
|
+
}
|
|
2098
|
+
function conferirTextosDaEntrada(entrada, infNFe, issues, substituidos = new Set) {
|
|
2099
|
+
const jaRecusados = new Set(issues.list.map((i) => i.caminho));
|
|
2100
|
+
const foraDoXml = [];
|
|
2101
|
+
textosForaDoXml(entrada, "", foraDoXml);
|
|
2102
|
+
for (const c of foraDoXml) {
|
|
2103
|
+
if (jaRecusados.has(c) || substituidos.has(c))
|
|
2104
|
+
continue;
|
|
2105
|
+
issues.add(c, "campo_invalido", CARACTERE_INVISIVEL);
|
|
2106
|
+
jaRecusados.add(c);
|
|
2107
|
+
}
|
|
2108
|
+
const tipos = tiposDoPl(infNFe);
|
|
2109
|
+
for (const [campo] of CAMPOS) {
|
|
2110
|
+
const tipo = tipos.get(campo);
|
|
2111
|
+
if (tipo === undefined)
|
|
2112
|
+
continue;
|
|
2113
|
+
for (const [caminho, valor] of valoresEm(entrada, campo)) {
|
|
2114
|
+
if (typeof valor !== "string" || jaRecusados.has(caminho) || substituidos.has(caminho))
|
|
2115
|
+
continue;
|
|
2116
|
+
const saida = [];
|
|
2117
|
+
conferirTipoSimples(tipo, valor, caminho, saida);
|
|
2118
|
+
for (const m of mensagensDoTexto(tipo, valor, saida))
|
|
2119
|
+
issues.add(caminho, "campo_invalido", m);
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
}
|
|
2123
|
+
|
|
1922
2124
|
// packages/nfe/src/build/tributos.ts
|
|
1923
2125
|
function buildIpi(ctx, input, vOp, path) {
|
|
1924
2126
|
const head = {
|
|
@@ -2223,25 +2425,16 @@ function referencia(ref, path, issues) {
|
|
|
2223
2425
|
}
|
|
2224
2426
|
};
|
|
2225
2427
|
}
|
|
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) {
|
|
2428
|
+
function textosForaDoXml2(value, path, issues) {
|
|
2236
2429
|
if (typeof value === "string") {
|
|
2237
2430
|
if (!textoXmlValido(value))
|
|
2238
2431
|
issues.montagem(path, "campo_invalido", "texto com caractere não permitido em XML");
|
|
2239
2432
|
} else if (Array.isArray(value)) {
|
|
2240
2433
|
for (const [n, v] of value.entries())
|
|
2241
|
-
|
|
2434
|
+
textosForaDoXml2(v, `${path}[${n}]`, issues);
|
|
2242
2435
|
} else if (typeof value === "object" && value !== null) {
|
|
2243
2436
|
for (const [k, v] of Object.entries(value))
|
|
2244
|
-
|
|
2437
|
+
textosForaDoXml2(v, `${path}.${k}`, issues);
|
|
2245
2438
|
}
|
|
2246
2439
|
}
|
|
2247
2440
|
function montarItem(ctx, item, n, normal) {
|
|
@@ -2608,6 +2801,7 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2608
2801
|
primeiro.det.prod.xProd = XPROD_HOMOLOGACAO_NFCE;
|
|
2609
2802
|
}
|
|
2610
2803
|
const classificados = entrada.itens.map((it, n) => ({ it, n })).filter(({ it }) => it.impostos.ibsCbs?.classificacao !== undefined);
|
|
2804
|
+
let aliquotasInformadas = [];
|
|
2611
2805
|
if (classificados.length > 0) {
|
|
2612
2806
|
const calculadora = opcoes.ibsCbs ?? calculadoraPadrao();
|
|
2613
2807
|
const reqs = classificados.map(({ it, n }) => {
|
|
@@ -2673,10 +2867,13 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2673
2867
|
itens: reqs
|
|
2674
2868
|
});
|
|
2675
2869
|
issues.addAll(resp.ocorrencias ?? [], "montagem");
|
|
2870
|
+
aliquotasInformadas = resp.aliquotasInformadas ?? [];
|
|
2871
|
+
const explicou = (resp.ocorrencias?.length ?? 0) > 0;
|
|
2676
2872
|
for (const { n } of classificados) {
|
|
2677
2873
|
const g = resp.itens.find((x) => x.nItem === n + 1);
|
|
2678
2874
|
if (g === undefined) {
|
|
2679
|
-
|
|
2875
|
+
if (!explicou)
|
|
2876
|
+
issues.montagem(`itens[${n}].impostos.ibsCbs`, "ibscbs_calculo", "a calculadora não devolveu o grupo IBSCBS do item");
|
|
2680
2877
|
continue;
|
|
2681
2878
|
}
|
|
2682
2879
|
itens[n].det.imposto.IBSCBS = g.IBSCBS;
|
|
@@ -2699,6 +2896,8 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2699
2896
|
grupoInvalido(TISCt, "IS", imp.IS, is, issues);
|
|
2700
2897
|
}
|
|
2701
2898
|
});
|
|
2899
|
+
const substituidos = opcoes.ambiente === "homologacao" ? ["destinatario.xNome", ...nfce ? ["itens[0].produto.xProd"] : []] : [];
|
|
2900
|
+
conferirTextosDaEntrada(entrada, pl.infNFe, issues, new Set(substituidos));
|
|
2702
2901
|
if (!issues.empty)
|
|
2703
2902
|
return { ok: false, ocorrencias: issues.classificadas };
|
|
2704
2903
|
const gruposIbsCbs = itens.map((m) => m.det.imposto.IBSCBS).filter((g) => g !== undefined);
|
|
@@ -2995,7 +3194,7 @@ async function montarNfe(entrada, opcoes) {
|
|
|
2995
3194
|
cstComIsento(entrada, idDest, issues);
|
|
2996
3195
|
vencimentos(entrada, { dhEmi, instante: agora }, issues);
|
|
2997
3196
|
camposForaDoPl(pl.infNFe, inf, "infNFe", pl.vigencia.pl, issues);
|
|
2998
|
-
|
|
3197
|
+
textosForaDoXml2(inf, "infNFe", issues);
|
|
2999
3198
|
if (!issues.empty)
|
|
3000
3199
|
return { ok: false, ocorrencias: issues.classificadas };
|
|
3001
3200
|
let xml;
|
|
@@ -3063,7 +3262,8 @@ async function montarNfe(entrada, opcoes) {
|
|
|
3063
3262
|
...supl === undefined ? {} : { nfce: supl },
|
|
3064
3263
|
pl: pl.vigencia,
|
|
3065
3264
|
infNFe: inf,
|
|
3066
|
-
xml
|
|
3265
|
+
xml,
|
|
3266
|
+
...aliquotasInformadas.length === 0 ? {} : { aliquotasInformadas }
|
|
3067
3267
|
}
|
|
3068
3268
|
};
|
|
3069
3269
|
}
|
|
@@ -3198,7 +3398,7 @@ var GRUPOS = [
|
|
|
3198
3398
|
{ padrao: /^infNFe\.infRespTec\b/, rotulo: "Responsável técnico" },
|
|
3199
3399
|
{ padrao: /^infNFe\.exporta\b/, rotulo: "Exportação" }
|
|
3200
3400
|
];
|
|
3201
|
-
var
|
|
3401
|
+
var CAMPOS2 = {
|
|
3202
3402
|
IE: "Inscrição estadual",
|
|
3203
3403
|
IEST: "Inscrição estadual do substituto tributário",
|
|
3204
3404
|
IM: "Inscrição municipal",
|
|
@@ -3261,7 +3461,7 @@ var CAMPOS = {
|
|
|
3261
3461
|
infCpl: "Informações complementares",
|
|
3262
3462
|
infAdFisco: "Informações de interesse do fisco"
|
|
3263
3463
|
};
|
|
3264
|
-
var rotular = criarRotuloDoCaminho({ grupos: GRUPOS, campos:
|
|
3464
|
+
var rotular = criarRotuloDoCaminho({ grupos: GRUPOS, campos: CAMPOS2, padrao: "Dados da NF-e" });
|
|
3265
3465
|
function rotuloDoCaminho(caminho) {
|
|
3266
3466
|
return rotular(caminho);
|
|
3267
3467
|
}
|
|
@@ -4300,8 +4500,8 @@ function lerProcEvento(xml) {
|
|
|
4300
4500
|
...nProt === undefined ? {} : { nProt }
|
|
4301
4501
|
};
|
|
4302
4502
|
}
|
|
4303
|
-
async function recuperarEventoRegistrado(cliente, chave, tpEvento, nSeqEvento) {
|
|
4304
|
-
const consulta = await cliente.consultar(chave);
|
|
4503
|
+
async function recuperarEventoRegistrado(cliente, chave, tpEvento, nSeqEvento, opcoes) {
|
|
4504
|
+
const consulta = await cliente.consultar(chave, undefined, opcoes);
|
|
4305
4505
|
if (consulta.tipo !== "autorizado" && consulta.tipo !== "denegado")
|
|
4306
4506
|
return { registrado: false, consulta };
|
|
4307
4507
|
let achado;
|
|
@@ -4322,14 +4522,14 @@ var CHAVE_NO_MOTIVO = /\[\s*chNFe\s*:\s*([0-9]{6}[0-9A-Z]{12}[0-9]{26})\s*\]/i;
|
|
|
4322
4522
|
function chaveDaDuplicidade(xMotivo) {
|
|
4323
4523
|
return CHAVE_NO_MOTIVO.exec(xMotivo)?.[1]?.toUpperCase();
|
|
4324
4524
|
}
|
|
4325
|
-
async function resolverEnvioSemResposta(cliente, nfeAssinada, anterior) {
|
|
4525
|
+
async function resolverEnvioSemResposta(cliente, nfeAssinada, anterior, opcoes) {
|
|
4326
4526
|
const a = documentoAssinado(nfeAssinada, "NFe", "infNFe");
|
|
4327
4527
|
const chave = a.id.slice(3);
|
|
4328
4528
|
if (anterior && anterior.tipo === "recusado" && cstatEm(anterior.cStat, "duplicidadeChaveDiferente")) {
|
|
4329
4529
|
const outra = chaveDaDuplicidade(anterior.xMotivo);
|
|
4330
4530
|
return { acao: "divergente", motivo: anterior, ...outra === undefined ? {} : { chNFe: outra } };
|
|
4331
4531
|
}
|
|
4332
|
-
const consulta = await cliente.consultar(chave, nfeAssinada);
|
|
4532
|
+
const consulta = await cliente.consultar(chave, nfeAssinada, opcoes);
|
|
4333
4533
|
if (consulta.tipo === "recusado") {
|
|
4334
4534
|
if (cstatEm(consulta.cStat, "naoConsta"))
|
|
4335
4535
|
return { acao: "reenviar", nfeAssinada: a.xml };
|
|
@@ -4395,5 +4595,5 @@ export {
|
|
|
4395
4595
|
urlsNfce
|
|
4396
4596
|
};
|
|
4397
4597
|
|
|
4398
|
-
//# debugId=
|
|
4598
|
+
//# debugId=74A78D3EACEECD4D64756E2164756E21
|
|
4399
4599
|
//# sourceMappingURL=index.js.map
|