@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 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;AAYxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,eAAO,MAAM,MAAM,uCAAuC,CAAC;AAE3D,iGAAiG;AACjG,eAAO,MAAM,iBAAiB,+DAA+D,CAAC;AAE9F,gHAAgH;AAChH,eAAO,MAAM,sBAAsB,sEAAsE,CAAC;AAE1G,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,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;AAsaD,yFAAyF;AACzF,wBAAsB,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmyBzG;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"}
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';
@@ -1 +1 @@
1
- {"version":3,"file":"ibs-cbs.d.ts","sourceRoot":"","sources":["../src/ibs-cbs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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"}
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"}
@@ -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": ";AAYA;AA0DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
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.2.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 textoXmlValido(texto) {
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
- textosForaDoXml(v, `${path}[${n}]`, issues);
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
- textosForaDoXml(v, `${path}.${k}`, issues);
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
- textosForaDoXml(inf, "infNFe", issues);
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 CAMPOS = {
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: CAMPOS, padrao: "Dados da NF-e" });
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=82CED6CBF6EFA38F64756E2164756E21
4577
+ //# debugId=9351F0AE81B9EE1064756E2164756E21
4399
4578
  //# sourceMappingURL=index.js.map