@sinete/nfe 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -48
- package/dist/build/build.d.ts +23 -23
- package/dist/build/build.d.ts.map +1 -1
- package/dist/build/destinatario.d.ts +2 -2
- package/dist/build/ibscbs.d.ts.map +1 -1
- package/dist/build/nfce.d.ts +5 -5
- package/dist/build/nfce.d.ts.map +1 -1
- package/dist/build/pl.d.ts +4 -4
- package/dist/build/pl.d.ts.map +1 -1
- package/dist/build/rejeicoes.d.ts +7 -7
- package/dist/build/rejeicoes.d.ts.map +1 -1
- package/dist/build/values.d.ts +8 -8
- package/dist/build/values.d.ts.map +1 -1
- package/dist/decimal.d.ts +2 -2
- package/dist/decimal.d.ts.map +1 -1
- package/dist/format.d.ts +19 -19
- package/dist/format.d.ts.map +1 -1
- package/dist/ibs-cbs.d.ts +5 -5
- package/dist/ibs-cbs.d.ts.map +1 -1
- package/dist/ibs-cbs.js +35 -35
- package/dist/ibs-cbs.js.map +2 -2
- package/dist/index.d.ts +18 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +602 -573
- package/dist/index.js.map +25 -25
- package/dist/issues.d.ts +10 -10
- package/dist/issues.d.ts.map +1 -1
- package/dist/model.d.ts +4 -4
- package/dist/ports.d.ts +15 -15
- package/dist/ports.d.ts.map +1 -1
- package/dist/rotulo.d.ts +2 -2
- package/dist/rotulo.d.ts.map +1 -1
- package/dist/rtc.d.ts +23 -23
- package/dist/rtc.d.ts.map +1 -1
- package/dist/services/client.d.ts +44 -40
- package/dist/services/client.d.ts.map +1 -1
- package/dist/services/gzip.d.ts +1 -1
- package/dist/services/gzip.d.ts.map +1 -1
- package/dist/services/index.d.ts +4 -4
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/outcome.d.ts +3 -3
- package/dist/services/outcome.d.ts.map +1 -1
- package/dist/services/proc.d.ts +6 -6
- package/dist/services/proc.d.ts.map +1 -1
- package/dist/services/recuperar.d.ts +7 -7
- package/dist/services/recuperar.d.ts.map +1 -1
- package/dist/services/resolver.d.ts +10 -10
- package/dist/services/resolver.d.ts.map +1 -1
- package/dist/services/soap.d.ts +8 -8
- package/dist/services/soap.d.ts.map +1 -1
- package/dist/time.d.ts +4 -4
- package/dist/time.d.ts.map +1 -1
- package/dist/versao-gerada.d.ts +1 -1
- package/package.json +9 -9
- package/src/build/build.ts +202 -185
- package/src/build/destinatario.ts +8 -8
- package/src/build/ibscbs.ts +10 -6
- package/src/build/icms.ts +6 -6
- package/src/build/nfce.ts +19 -19
- package/src/build/pl.ts +12 -12
- package/src/build/rejeicoes.ts +13 -13
- package/src/build/values.ts +14 -14
- package/src/data/arredondamento.json +1 -1
- package/src/data/cstat.json +6 -6
- package/src/data/fusos.json +1 -1
- package/src/data/nfce-urls.json +2 -2
- package/src/data/produtor-rural.json +1 -1
- package/src/data/resp-tec.json +1 -1
- package/src/decimal.ts +10 -9
- package/src/format.ts +29 -28
- package/src/ibs-cbs.ts +74 -74
- package/src/index.ts +29 -27
- package/src/issues.ts +11 -11
- package/src/model.ts +4 -4
- package/src/ports.ts +15 -15
- package/src/rotulo.ts +4 -4
- package/src/rtc.ts +91 -91
- package/src/services/client.ts +248 -217
- package/src/services/gzip.ts +7 -7
- package/src/services/index.ts +12 -10
- package/src/services/outcome.ts +9 -9
- package/src/services/proc.ts +50 -49
- package/src/services/recuperar.ts +27 -25
- package/src/services/resolver.ts +22 -22
- package/src/services/soap.ts +35 -35
- package/src/time.ts +6 -6
- package/src/versao-gerada.ts +1 -1
package/src/format.ts
CHANGED
|
@@ -5,60 +5,61 @@
|
|
|
5
5
|
|
|
6
6
|
import type { Decimal, RoundingMode } from './decimal.ts';
|
|
7
7
|
|
|
8
|
-
export interface
|
|
8
|
+
export interface FormatoDecimal {
|
|
9
9
|
/** Nome curto, para mensagens. */
|
|
10
|
-
readonly
|
|
10
|
+
readonly nome: string;
|
|
11
11
|
/** Casas mínimas (completa com zeros até aqui). */
|
|
12
12
|
readonly min: number;
|
|
13
13
|
/** Casas máximas aceitas pelo pattern. */
|
|
14
14
|
readonly max: number;
|
|
15
15
|
/** Casas exigidas quando a parte inteira é zero e o valor não é zero (`TDec_0803v`: `0\.[0-9]{3}`). */
|
|
16
|
-
readonly
|
|
16
|
+
readonly minimoAbaixoDeUm?: number;
|
|
17
17
|
/** O pattern recusa zero (`TDec_1302Opc`, `TDec_0302a04Opc`): o campo zerado deve ser omitido. */
|
|
18
|
-
readonly
|
|
18
|
+
readonly naoNulo?: boolean;
|
|
19
19
|
/** Maior quantidade de dígitos inteiros aceita. */
|
|
20
|
-
readonly
|
|
20
|
+
readonly digitosInteiros: number;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/** `TDec_1302`, `TDec1302RTC`: 13 inteiros e exatamente 2 casas. */
|
|
24
|
-
export const D1302:
|
|
24
|
+
export const D1302: FormatoDecimal = { nome: 'TDec_1302', min: 2, max: 2, digitosInteiros: 13 };
|
|
25
25
|
/** `TDec_1302Opc`: como `TDec_1302`, sem zero. */
|
|
26
|
-
export const D1302_OPC:
|
|
26
|
+
export const D1302_OPC: FormatoDecimal = { nome: 'TDec_1302Opc', min: 2, max: 2, digitosInteiros: 13, naoNulo: true };
|
|
27
27
|
/** `TDec_0302a04`, `TDec_0302_04RTC`, `TDec_0302a04Max100`: 3 inteiros e 2 a 4 casas. */
|
|
28
|
-
export const D0302A04:
|
|
28
|
+
export const D0302A04: FormatoDecimal = { nome: 'TDec_0302a04', min: 2, max: 4, digitosInteiros: 3 };
|
|
29
29
|
/** `TDec_0302a04Opc`: o pattern (`0\.[0-9]{2,4}|...`) aceita zero, ao contrário de `TDec_1302Opc`. */
|
|
30
|
-
export const D0302A04_OPC:
|
|
30
|
+
export const D0302A04_OPC: FormatoDecimal = { nome: 'TDec_0302a04Opc', min: 2, max: 4, digitosInteiros: 3 };
|
|
31
31
|
/** `TDec_0302Max100`: 2 casas exatas. */
|
|
32
|
-
export const D0302:
|
|
32
|
+
export const D0302: FormatoDecimal = { nome: 'TDec_0302Max100', min: 2, max: 2, digitosInteiros: 3 };
|
|
33
33
|
/** `TDec_1104v`: 11 inteiros e 0 a 4 casas. */
|
|
34
|
-
export const D1104V:
|
|
34
|
+
export const D1104V: FormatoDecimal = { nome: 'TDec_1104v', min: 0, max: 4, digitosInteiros: 11 };
|
|
35
35
|
/** `TDec_1104`, `TDec1104RTC`: 11 inteiros e 4 casas. */
|
|
36
|
-
export const D1104:
|
|
36
|
+
export const D1104: FormatoDecimal = { nome: 'TDec_1104', min: 4, max: 4, digitosInteiros: 11 };
|
|
37
37
|
/** `TDec_1110v`: 11 inteiros e 0 a 10 casas. */
|
|
38
|
-
export const D1110V:
|
|
38
|
+
export const D1110V: FormatoDecimal = { nome: 'TDec_1110v', min: 0, max: 10, digitosInteiros: 11 };
|
|
39
39
|
/** `TDec_1204v`: 12 inteiros e 0 a 4 casas. */
|
|
40
|
-
export const D1204V:
|
|
40
|
+
export const D1204V: FormatoDecimal = { nome: 'TDec_1204v', min: 0, max: 4, digitosInteiros: 12 };
|
|
41
41
|
/** `TDec_1204`: 12 inteiros e 4 casas quando há fração (4 fixas aqui, que o pattern aceita sempre). */
|
|
42
|
-
export const D1204:
|
|
42
|
+
export const D1204: FormatoDecimal = { nome: 'TDec_1204', min: 4, max: 4, digitosInteiros: 12 };
|
|
43
43
|
/** `TDec_1203`: 12 inteiros e 3 casas. */
|
|
44
|
-
export const D1203:
|
|
44
|
+
export const D1203: FormatoDecimal = { nome: 'TDec_1203', min: 3, max: 3, digitosInteiros: 12 };
|
|
45
45
|
/** `TDec_0803v`: 8 inteiros e até 3 casas; abaixo de 1, exatamente 3. */
|
|
46
|
-
export const D0803V:
|
|
46
|
+
export const D0803V: FormatoDecimal = { nome: 'TDec_0803v', min: 0, max: 3, digitosInteiros: 8, minimoAbaixoDeUm: 3 };
|
|
47
47
|
|
|
48
48
|
/** Texto do valor já arredondado no formato (arredonda em `max` casas pelo modo dado). */
|
|
49
|
-
export function
|
|
50
|
-
const r =
|
|
51
|
-
let places = Math.max(
|
|
52
|
-
if (
|
|
53
|
-
|
|
49
|
+
export function formatarDecimal(valor: Decimal, formato: FormatoDecimal, modo: RoundingMode = 'HALF_UP'): string {
|
|
50
|
+
const r = valor.round(formato.max, modo);
|
|
51
|
+
let places = Math.max(formato.min, Math.min(formato.max, r.significantScale()));
|
|
52
|
+
if (formato.minimoAbaixoDeUm !== undefined && !r.isZero() && r.abs().lt(1))
|
|
53
|
+
places = Math.max(places, formato.minimoAbaixoDeUm);
|
|
54
|
+
return r.toFixed(places, modo);
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
/** Por que o valor não cabe no formato, ou `undefined` se cabe sem perder dígitos. */
|
|
57
|
-
export function
|
|
58
|
-
if (
|
|
59
|
-
if (
|
|
60
|
-
if (
|
|
61
|
-
const intDigits =
|
|
62
|
-
if (intDigits >
|
|
58
|
+
export function problemaDeFormato(valor: Decimal, formato: FormatoDecimal): string | undefined {
|
|
59
|
+
if (valor.isNegative()) return 'valor negativo';
|
|
60
|
+
if (formato.naoNulo && valor.isZero()) return 'valor zero não é aceito neste campo';
|
|
61
|
+
if (valor.significantScale() > formato.max) return `mais de ${formato.max} casas decimais`;
|
|
62
|
+
const intDigits = valor.round(0, 'DOWN').abs().toString().replace(/^0$/, '').length;
|
|
63
|
+
if (intDigits > formato.digitosInteiros) return `mais de ${formato.digitosInteiros} dígitos inteiros`;
|
|
63
64
|
return undefined;
|
|
64
65
|
}
|
package/src/ibs-cbs.ts
CHANGED
|
@@ -3,87 +3,87 @@
|
|
|
3
3
|
* `@sinete/ibs-cbs-dados` diretamente.
|
|
4
4
|
*
|
|
5
5
|
* Reexporta o motor inteiro (`@sinete/ibs-cbs`: alíquotas, cálculo, regras da NT 2025.002 e determinação de CST e
|
|
6
|
-
* cClassTrib) e o leitor do dataset (`@sinete/ibs-cbs-dados`: `
|
|
6
|
+
* cClassTrib) e o leitor do dataset (`@sinete/ibs-cbs-dados`: `carregarDataset`, `conferirDataset`, diff, tipos). O dataset
|
|
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
|
-
* `@sinete/nfe`, o importa sob demanda. `Dec`, `
|
|
9
|
-
* mesmos; a `
|
|
8
|
+
* `@sinete/nfe`, o importa sob demanda. `Dec`, `DataIso` e `Vigencia` vêm do motor (os de `Dec` e `DataIso` são os
|
|
9
|
+
* mesmos; a `Vigencia` dos dados, com os campos do dataset, fica acessível pelos tipos que a usam).
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
// biome-ignore lint/performance/noReExportAll: o subpath existe para reexportar o motor inteiro, e as duas pontas são do mesmo repo.
|
|
13
13
|
export * from '@sinete/ibs-cbs';
|
|
14
14
|
export type {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
TreatmentLink,
|
|
68
|
-
TreatmentRecord,
|
|
15
|
+
AliquotasCredPres,
|
|
16
|
+
Aplicabilidade,
|
|
17
|
+
BaseLegal,
|
|
18
|
+
BaseLegalClassTrib,
|
|
19
|
+
BundleDoDataset,
|
|
20
|
+
CalculoCredPres,
|
|
21
|
+
CodigoErroDadosIbsCbs,
|
|
22
|
+
ConteudoTributario,
|
|
23
|
+
CreditoClassTrib,
|
|
24
|
+
CredPresVigente,
|
|
25
|
+
DatasetIbsCbs,
|
|
26
|
+
DiferencaDeDatasets,
|
|
27
|
+
DiferencaDeTabela,
|
|
28
|
+
ExcecaoDePrefixo,
|
|
29
|
+
ExpressoesDoTratamento,
|
|
30
|
+
Familia,
|
|
31
|
+
FiltroClassTrib,
|
|
32
|
+
FiltroDeAtores,
|
|
33
|
+
FonteDoDataset,
|
|
34
|
+
GruposClassTrib,
|
|
35
|
+
GruposCredPres,
|
|
36
|
+
GruposCst,
|
|
37
|
+
IdDaFonte,
|
|
38
|
+
Indicador,
|
|
39
|
+
IndicadoresDoTratamento,
|
|
40
|
+
ManifestoDaTabela,
|
|
41
|
+
ManifestoDoDataset,
|
|
42
|
+
MudancaDeCampo,
|
|
43
|
+
MudancaDeRegistro,
|
|
44
|
+
NomeDaTabela,
|
|
45
|
+
Nomenclatura,
|
|
46
|
+
PapelDoAtor,
|
|
47
|
+
PorTributo,
|
|
48
|
+
RegistroAliquotaFixa,
|
|
49
|
+
RegistroAnexo,
|
|
50
|
+
RegistroAplicabilidade,
|
|
51
|
+
RegistroAtor,
|
|
52
|
+
RegistroAtorClassTrib,
|
|
53
|
+
RegistroClassTrib,
|
|
54
|
+
RegistroCredPres,
|
|
55
|
+
RegistroCst,
|
|
56
|
+
RegistroGrupoDeAtores,
|
|
57
|
+
RegistroNfseNbs,
|
|
58
|
+
RegistroReducao,
|
|
59
|
+
RegistroRedutorCompraGov,
|
|
60
|
+
RegistroTipoDfe,
|
|
61
|
+
RegistroTransferenciaCbs,
|
|
62
|
+
RegistroTratamento,
|
|
63
|
+
ResultadoAplicabilidade,
|
|
64
|
+
TabelasDoDataset,
|
|
65
|
+
TipoDeAliquota,
|
|
66
|
+
TipoDeMudanca,
|
|
69
67
|
Tributo,
|
|
68
|
+
VinculoDfe,
|
|
69
|
+
VinculoTratamento,
|
|
70
70
|
} from '@sinete/ibs-cbs-dados';
|
|
71
71
|
export {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
72
|
+
aplicabilidade,
|
|
73
|
+
carregarDataset,
|
|
74
|
+
compararDatasets,
|
|
75
|
+
conferirDataset,
|
|
76
|
+
DESLOCAMENTO_BRASILIA_MIN,
|
|
77
|
+
dataCivil,
|
|
78
|
+
ErroDadosIbsCbs,
|
|
79
|
+
ehDataIso,
|
|
80
|
+
exigirDataIso,
|
|
81
|
+
formatarDiferenca,
|
|
82
|
+
jsonCanonico,
|
|
83
|
+
NOMES_DAS_TABELAS,
|
|
84
|
+
tabelaCanonica,
|
|
85
|
+
tipoDeMudanca,
|
|
86
|
+
VERSAO_DO_FORMATO_DOS_DADOS,
|
|
87
|
+
versaoDoConteudo,
|
|
88
|
+
vigente,
|
|
89
89
|
} from '@sinete/ibs-cbs-dados';
|
package/src/index.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `@sinete/nfe`: NF-e modelo 55 e NFC-e modelo 65. Entrada do domínio (`
|
|
3
|
-
* estrita (`
|
|
4
|
-
* (`
|
|
2
|
+
* `@sinete/nfe`: NF-e modelo 55 e NFC-e modelo 65. Entrada do domínio (`DadosNfe`), montagem com totais em decimal exato e validação
|
|
3
|
+
* estrita (`montarNfe`), assinatura por splice (`assinarNfe`) e os serviços da SEFAZ sobre `@sinete/transport`
|
|
4
|
+
* (`criarClienteNfe`). IBS/CBS pelo motor do sinete por padrão (`calculadoraIbsCbs`), com o dataset carregado sob
|
|
5
5
|
* demanda. O emissor (bytes gravados antes do envio, trava, retomada, cancelamento com recuperação) está em
|
|
6
6
|
* `@sinete/emissor/nfe` (ADR 0010).
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
export type {
|
|
10
|
-
BuildNfeOptions,
|
|
11
|
-
BuildNfeResult,
|
|
12
|
-
BuiltNfe,
|
|
13
10
|
ExigenciaRespTec,
|
|
11
|
+
MontarNfeOpcoes,
|
|
12
|
+
NfeMontada,
|
|
13
|
+
ResultadoMontagemNfe,
|
|
14
14
|
} from './build/build.ts';
|
|
15
15
|
export {
|
|
16
|
+
assinarNfe,
|
|
16
17
|
assinaturaQrCode,
|
|
17
|
-
buildNfe,
|
|
18
18
|
comQrCode,
|
|
19
19
|
exigenciaRespTec,
|
|
20
20
|
hashCsrt,
|
|
21
|
+
montarNfe,
|
|
21
22
|
NFE_NS,
|
|
22
|
-
signNfe,
|
|
23
23
|
XNOME_HOMOLOGACAO,
|
|
24
24
|
XPROD_HOMOLOGACAO_NFCE,
|
|
25
25
|
} from './build/build.ts';
|
|
@@ -29,16 +29,17 @@ export { conferirEmitenteDoCertificado } from './build/rejeicoes.ts';
|
|
|
29
29
|
export type { Familia } from './build/values.ts';
|
|
30
30
|
export type { DecimalInput, RoundingMode } from './decimal.ts';
|
|
31
31
|
export { Decimal, dec, sum } from './decimal.ts';
|
|
32
|
-
export type {
|
|
33
|
-
export {
|
|
34
|
-
export type {
|
|
35
|
-
export {
|
|
32
|
+
export type { FormatoDecimal } from './format.ts';
|
|
33
|
+
export { formatarDecimal, problemaDeFormato } from './format.ts';
|
|
34
|
+
export type { CodigoOcorrenciaNfe } from './issues.ts';
|
|
35
|
+
export { CODIGOS_OCORRENCIA_NFE } from './issues.ts';
|
|
36
36
|
export type {
|
|
37
37
|
ClassificacaoIbsCbs,
|
|
38
38
|
Cobranca,
|
|
39
39
|
Contingencia,
|
|
40
40
|
Crt,
|
|
41
41
|
CstPisCofinsOutras,
|
|
42
|
+
DadosNfe,
|
|
42
43
|
Desoneracao,
|
|
43
44
|
DesoneracaoSt,
|
|
44
45
|
Destinatario,
|
|
@@ -89,7 +90,6 @@ export type {
|
|
|
89
90
|
ModBC,
|
|
90
91
|
ModBCST,
|
|
91
92
|
ModFrete,
|
|
92
|
-
NfeInput,
|
|
93
93
|
Origem,
|
|
94
94
|
Pagamento,
|
|
95
95
|
PisCofins,
|
|
@@ -107,47 +107,49 @@ export type {
|
|
|
107
107
|
Volume,
|
|
108
108
|
} from './model.ts';
|
|
109
109
|
export { MotivoDesoneracaoIcms, TipoPagamento } from './model.ts';
|
|
110
|
-
export type {
|
|
110
|
+
export type { CalculadoraIbsCbs, PedidoIbsCbsItem, PedidoIbsCbsNota, RespostaIbsCbs } from './ports.ts';
|
|
111
111
|
export { rotuloDoCaminho } from './rotulo.ts';
|
|
112
|
-
export type {
|
|
113
|
-
export {
|
|
112
|
+
export type { CalculadoraIbsCbsOpcoes, GrupoIbsCbs } from './rtc.ts';
|
|
113
|
+
export { calculadoraIbsCbs, carregarDatasetEmbarcado, localDaOperacao } from './rtc.ts';
|
|
114
114
|
export type {
|
|
115
115
|
AutorDocumento,
|
|
116
|
-
AutorizacaoOutcome,
|
|
117
116
|
AutorizarOpcoes,
|
|
118
117
|
Cadastro,
|
|
119
118
|
CadastroPedido,
|
|
120
119
|
CancelamentoPedido,
|
|
121
120
|
CancelamentoSubstituicaoPedido,
|
|
122
121
|
CartaCorrecaoPedido,
|
|
122
|
+
ClienteNfe,
|
|
123
|
+
ClienteNfeOpcoes,
|
|
123
124
|
ConsultaNfe,
|
|
124
|
-
ConsultaOutcome,
|
|
125
125
|
ConsultaReciboOpcoes,
|
|
126
126
|
Distribuicao,
|
|
127
127
|
DistribuicaoConsulta,
|
|
128
128
|
DistribuicaoOpcoes,
|
|
129
129
|
DocumentoDistribuido,
|
|
130
|
-
|
|
130
|
+
EnvioOpcoes,
|
|
131
|
+
Espera,
|
|
131
132
|
EventoRegistrado,
|
|
132
133
|
Inutilizacao,
|
|
133
|
-
InutilizacaoOutcome,
|
|
134
134
|
InutilizacaoPedido,
|
|
135
135
|
ManifestacaoPedido,
|
|
136
136
|
ManifestacaoTipo,
|
|
137
|
-
NfeClient,
|
|
138
|
-
NfeClientOptions,
|
|
139
137
|
PoliticaRecibo,
|
|
140
138
|
ProtocoloNfe,
|
|
141
|
-
|
|
139
|
+
ResultadoAutorizacao,
|
|
140
|
+
ResultadoConsulta,
|
|
141
|
+
ResultadoEvento,
|
|
142
|
+
ResultadoInutilizacao,
|
|
142
143
|
StatusServico,
|
|
144
|
+
StatusServicoOpcoes,
|
|
143
145
|
} from './services/client.ts';
|
|
144
|
-
export { autorizadorContingencia,
|
|
145
|
-
export {
|
|
146
|
+
export { autorizadorContingencia, criarClienteNfe } from './services/client.ts';
|
|
147
|
+
export { descomprimirGzipBase64 } from './services/gzip.ts';
|
|
146
148
|
export type { DocumentoAssinado } from './services/proc.ts';
|
|
147
|
-
export { documentoAssinado, nfeAssinadaDoProc,
|
|
149
|
+
export { documentoAssinado, nfeAssinadaDoProc, recortarElemento } from './services/proc.ts';
|
|
148
150
|
export type { RecuperacaoEvento } from './services/recuperar.ts';
|
|
149
151
|
export { recuperarEventoRegistrado } from './services/recuperar.ts';
|
|
150
152
|
export type { ConteudoDoProtocolo, ResolucaoEnvio } from './services/resolver.ts';
|
|
151
153
|
export { chaveDaDuplicidade, resolverEnvioSemResposta } from './services/resolver.ts';
|
|
152
154
|
export type { Instante } from './time.ts';
|
|
153
|
-
export {
|
|
155
|
+
export { deslocamentoDaUf, formatarDh } from './time.ts';
|
package/src/issues.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Coletor de ocorrências de validação (`
|
|
2
|
+
* Coletor de ocorrências de validação (`Ocorrencia` do core). O builder junta todas as ocorrências antes de
|
|
3
3
|
* decidir, em vez de parar na primeira. Os códigos são API pública (snake_case, português, sem acento) e estão listados
|
|
4
|
-
* em `
|
|
4
|
+
* em `CODIGOS_OCORRENCIA_NFE`.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type {
|
|
7
|
+
import type { Ocorrencia, OrigemOcorrencia } from '@sinete/core';
|
|
8
8
|
|
|
9
|
-
export const
|
|
9
|
+
export const CODIGOS_OCORRENCIA_NFE = [
|
|
10
10
|
'campo_obrigatorio',
|
|
11
11
|
'campo_invalido',
|
|
12
12
|
'campo_fora_do_pl',
|
|
@@ -37,32 +37,32 @@ export const NFE_ISSUE_CODES = [
|
|
|
37
37
|
'schema',
|
|
38
38
|
] as const;
|
|
39
39
|
|
|
40
|
-
export type
|
|
40
|
+
export type CodigoOcorrenciaNfe = (typeof CODIGOS_OCORRENCIA_NFE)[number];
|
|
41
41
|
|
|
42
42
|
export class Issues {
|
|
43
|
-
readonly list:
|
|
43
|
+
readonly list: Ocorrencia[];
|
|
44
44
|
|
|
45
45
|
constructor() {
|
|
46
46
|
this.list = [];
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/** Ocorrência sobre a entrada, a não ser que `origem` diga outra coisa (ADR 0011). */
|
|
50
|
-
add(path: string, code:
|
|
51
|
-
this.list.push({ path, code, message, origem });
|
|
50
|
+
add(path: string, code: CodigoOcorrenciaNfe | string, message: string, origem: OrigemOcorrencia = 'entrada'): void {
|
|
51
|
+
this.list.push({ caminho: path, code, mensagem: message, origem });
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/** Ocorrência sobre o que o sinete montou a partir da entrada (XML, schema, PL, chave gerada, calculadora). */
|
|
55
|
-
montagem(path: string, code:
|
|
55
|
+
montagem(path: string, code: CodigoOcorrenciaNfe | string, message: string): void {
|
|
56
56
|
this.add(path, code, message, 'montagem');
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/** As ocorrências com a `origem` preenchida: a que veio sem (a de um validador avulso) é da entrada. */
|
|
60
|
-
get classificadas(): readonly
|
|
60
|
+
get classificadas(): readonly Ocorrencia[] {
|
|
61
61
|
return this.list.map((i) => (i.origem === undefined ? { ...i, origem: 'entrada' } : i));
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/** Junta ocorrências de outra fonte; a que vier sem `origem` recebe a informada. */
|
|
65
|
-
addAll(issues: readonly
|
|
65
|
+
addAll(issues: readonly Ocorrencia[], origem: OrigemOcorrencia = 'entrada'): void {
|
|
66
66
|
this.list.push(...issues.map((i) => (i.origem === undefined ? { ...i, origem } : i)));
|
|
67
67
|
}
|
|
68
68
|
|
package/src/model.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Modelo de entrada da NF-e: o que quem emite descreve. O builder (`
|
|
2
|
+
* Modelo de entrada da NF-e: o que quem emite descreve. O builder (`montarNfe`) transforma isto no objeto tipado do
|
|
3
3
|
* `@sinete/schemas` do pacote de liberação vigente, calcula os valores derivados e os totais em decimal exato e
|
|
4
4
|
* confere as regras antes de qualquer serialização.
|
|
5
5
|
*
|
|
@@ -727,7 +727,7 @@ export type PisCofinsSt = {
|
|
|
727
727
|
// ---------------------------------------------------------------------------------------------------------------
|
|
728
728
|
|
|
729
729
|
/**
|
|
730
|
-
* Classificação do item para IBS/CBS (NT 2025.002): o que o `
|
|
730
|
+
* Classificação do item para IBS/CBS (NT 2025.002): o que o `CalculadoraIbsCbs` recebe. `CST` e `cClassTrib` vêm do
|
|
731
731
|
* cadastro do item (tabela de classificação tributária); o cálculo, as alíquotas e as reduções são da calculadora.
|
|
732
732
|
*/
|
|
733
733
|
export interface ClassificacaoIbsCbs {
|
|
@@ -955,7 +955,7 @@ export type FinNFe = '1' | '2' | '3' | '4' | '5' | '6';
|
|
|
955
955
|
*/
|
|
956
956
|
export interface Contingencia {
|
|
957
957
|
/**
|
|
958
|
-
* 6 SVC-AN, 7 SVC-RS; 2 FS-IA; 4 EPEC; 5 FS-DA; 9 off-line, só NFC-e. Para SVC, `tpEmisSvc` do `
|
|
958
|
+
* 6 SVC-AN, 7 SVC-RS; 2 FS-IA; 4 EPEC; 5 FS-DA; 9 off-line, só NFC-e. Para SVC, `tpEmisSvc` do `ClienteNfe` escolhe pelo
|
|
959
959
|
* dado da UF.
|
|
960
960
|
*/
|
|
961
961
|
readonly tpEmis: '2' | '4' | '5' | '6' | '7' | '9';
|
|
@@ -966,7 +966,7 @@ export interface Contingencia {
|
|
|
966
966
|
}
|
|
967
967
|
|
|
968
968
|
/** Entrada completa de uma NF-e. */
|
|
969
|
-
export interface
|
|
969
|
+
export interface DadosNfe {
|
|
970
970
|
/**
|
|
971
971
|
* 55 (NF-e, padrão) ou 65 (NFC-e). Na NFC-e mudam os padrões (`indPres` 1, `indFinal` 1, `tpImp` 4), o destinatário
|
|
972
972
|
* fica opcional, o pagamento passa a ser obrigatório e a montagem acrescenta o `infNFeSupl` (QR Code).
|
package/src/ports.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Portas do `@sinete/nfe` para o que pode vir de fora. A montagem só conhece o contrato estreito declarado aqui; a
|
|
3
|
-
* implementação padrão do IBS/CBS é o `
|
|
4
|
-
* lugar (ou testa com alíquotas fixas) injeta a sua em `
|
|
3
|
+
* implementação padrão do IBS/CBS é o `calculadoraIbsCbs` (`rtc.ts`, sobre o `@sinete/ibs-cbs`), e quem calcula em outro
|
|
4
|
+
* lugar (ou testa com alíquotas fixas) injeta a sua em `MontarNfeOpcoes.ibsCbs`.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type { Ambiente,
|
|
7
|
+
import type { Ambiente, Ocorrencia, Uf } from '@sinete/core';
|
|
8
8
|
import type { TTribNFe } from '@sinete/schemas/nfe/PL_010f';
|
|
9
9
|
import type { Decimal } from './decimal.ts';
|
|
10
10
|
import type { Instante } from './time.ts';
|
|
11
11
|
|
|
12
12
|
/** Um item classificado, com os valores que a calculadora pode precisar para a base do IBS/CBS. */
|
|
13
|
-
export interface
|
|
13
|
+
export interface PedidoIbsCbsItem {
|
|
14
14
|
/** Número do item na nota (1 a 990). */
|
|
15
15
|
readonly nItem: number;
|
|
16
16
|
/** CST do IBS/CBS (3 dígitos). */
|
|
@@ -54,8 +54,8 @@ export interface IbsCbsItemRequest {
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/** Dados da nota que decidem a regra aplicável (local da operação, vigência, compra governamental). */
|
|
57
|
-
export interface
|
|
58
|
-
/** Instante do fato gerador (relógio `fatoGerador` do `
|
|
57
|
+
export interface PedidoIbsCbsNota {
|
|
58
|
+
/** Instante do fato gerador (relógio `fatoGerador` do `ContextoDeTempo`): decide a vigência das alíquotas. */
|
|
59
59
|
readonly fatoGerador: Instante;
|
|
60
60
|
/** Instante da emissão (o do `dhEmi`): decide quais regras de validação da NT já estão implantadas no ambiente. */
|
|
61
61
|
readonly emissao: Instante;
|
|
@@ -75,22 +75,22 @@ export interface IbsCbsNotaRequest {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
/** Resultado da calculadora: o grupo `IBSCBS` de cada item pedido, já na forma lexical do leiaute. */
|
|
78
|
-
export interface
|
|
78
|
+
export interface RespostaIbsCbs {
|
|
79
79
|
readonly itens: readonly { readonly nItem: number; readonly IBSCBS: TTribNFe }[];
|
|
80
80
|
/**
|
|
81
|
-
* Problemas de classificação ou de dado (`
|
|
81
|
+
* Problemas de classificação ou de dado (`caminho` relativo ao item, como `itens[2].impostos.ibsCbs`). A ocorrência sem
|
|
82
82
|
* `origem` entra como `montagem` (ADR 0011); marque `entrada` a que aponta um valor da nota.
|
|
83
83
|
*/
|
|
84
|
-
readonly
|
|
84
|
+
readonly ocorrencias?: readonly Ocorrencia[];
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
|
-
* Calcula o IBS e a CBS dos itens classificados. O padrão é o `
|
|
88
|
+
* Calcula o IBS e a CBS dos itens classificados. O padrão é o `calculadoraIbsCbs`, sobre o `@sinete/ibs-cbs/calcular`; nos
|
|
89
89
|
* testes, um dublê com alíquotas fixas. A calculadora não vê o XML nem o resto da nota além do que está no pedido.
|
|
90
90
|
*/
|
|
91
|
-
export interface
|
|
92
|
-
calcular(
|
|
93
|
-
readonly nota:
|
|
94
|
-
readonly itens: readonly
|
|
95
|
-
}):
|
|
91
|
+
export interface CalculadoraIbsCbs {
|
|
92
|
+
calcular(pedido: {
|
|
93
|
+
readonly nota: PedidoIbsCbsNota;
|
|
94
|
+
readonly itens: readonly PedidoIbsCbsItem[];
|
|
95
|
+
}): RespostaIbsCbs | Promise<RespostaIbsCbs>;
|
|
96
96
|
}
|
package/src/rotulo.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rótulo em português do caminho de uma ocorrência da NF-e (ADR 0011), para mostrar a quem preencheu a nota: `Item 2,
|
|
3
|
-
* Descrição do produto` em vez de `itens[1].produto.xProd`. Aceita os caminhos da entrada (`
|
|
3
|
+
* Descrição do produto` em vez de `itens[1].produto.xProd`. Aceita os caminhos da entrada (`DadosNfe`) e os do
|
|
4
4
|
* documento montado, tanto os das conferências do montador (`infNFe.det[1].prod.xProd`) quanto os do validador de XSD
|
|
5
5
|
* (`/infNFe/det[2]/prod/xProd`).
|
|
6
6
|
*/
|
|
@@ -15,7 +15,7 @@ const item =
|
|
|
15
15
|
|
|
16
16
|
/** Do mais específico ao mais geral. Os índices chegam somados de um. */
|
|
17
17
|
const GRUPOS: readonly GrupoDeCaminho[] = [
|
|
18
|
-
// Entrada (
|
|
18
|
+
// Entrada (DadosNfe)
|
|
19
19
|
{ padrao: /^emitente\b/, rotulo: 'Emitente' },
|
|
20
20
|
{ padrao: /^destinatario\b/, rotulo: 'Destinatário' },
|
|
21
21
|
{ padrao: /^retirada\b/, rotulo: 'Local de retirada' },
|
|
@@ -132,6 +132,6 @@ const rotular = criarRotuloDoCaminho({ grupos: GRUPOS, campos: CAMPOS, padrao: '
|
|
|
132
132
|
* Rótulo em português do caminho de uma ocorrência da NF-e: `Grupo, Campo` quando os dois são conhecidos (`Emitente,
|
|
133
133
|
* Inscrição estadual`), só um deles quando falta o outro, e `Dados da NF-e` quando nenhum é.
|
|
134
134
|
*/
|
|
135
|
-
export function rotuloDoCaminho(
|
|
136
|
-
return rotular(
|
|
135
|
+
export function rotuloDoCaminho(caminho: string): string {
|
|
136
|
+
return rotular(caminho);
|
|
137
137
|
}
|