@sinete/nfe 0.3.0 → 0.5.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 +5 -1
- package/dist/build/build.d.ts +16 -7
- package/dist/build/build.d.ts.map +1 -1
- package/dist/build/rejeicoes.d.ts +48 -0
- package/dist/build/rejeicoes.d.ts.map +1 -1
- package/dist/build/textos.d.ts +1 -2
- package/dist/build/textos.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -175
- package/dist/index.js.map +9 -9
- 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/client.d.ts +27 -2
- package/dist/services/client.d.ts.map +1 -1
- package/dist/services/outcome.d.ts +1 -1
- package/dist/services/outcome.d.ts.map +1 -1
- package/dist/versao-gerada.d.ts +1 -1
- package/package.json +7 -7
- package/src/build/build.ts +62 -24
- package/src/build/rejeicoes.ts +182 -0
- package/src/build/textos.ts +6 -148
- package/src/data/cstat.json +2 -1
- package/src/index.ts +9 -1
- package/src/ports.ts +19 -0
- package/src/rtc.ts +50 -9
- package/src/services/client.ts +66 -8
- package/src/services/outcome.ts +1 -0
- package/src/versao-gerada.ts +1 -1
package/dist/ports.d.ts
CHANGED
|
@@ -84,12 +84,30 @@ export interface PedidoIbsCbsNota {
|
|
|
84
84
|
readonly tpOperGov: string;
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Alíquota do IBS/CBS que entrou no cálculo de um item vinda de quem integra (`comAliquotasInformadas`), e não da tabela
|
|
89
|
+
* oficial do pacote.
|
|
90
|
+
*/
|
|
91
|
+
export interface AliquotaIbsCbsInformada {
|
|
92
|
+
/** Número do item na nota (1 a 990). */
|
|
93
|
+
readonly nItem: number;
|
|
94
|
+
readonly tributo: 'CBS' | 'IBSUF' | 'IBSMun';
|
|
95
|
+
/** Percentual nominal informado (`'8.7'` = 8,7%). */
|
|
96
|
+
readonly valor: string;
|
|
97
|
+
/** O motivo declarado em `comAliquotasInformadas`. */
|
|
98
|
+
readonly motivo: string;
|
|
99
|
+
}
|
|
87
100
|
/** Resultado da calculadora: o grupo `IBSCBS` de cada item pedido, já na forma lexical do leiaute. */
|
|
88
101
|
export interface RespostaIbsCbs {
|
|
89
102
|
readonly itens: readonly {
|
|
90
103
|
readonly nItem: number;
|
|
91
104
|
readonly IBSCBS: TTribNFe;
|
|
92
105
|
}[];
|
|
106
|
+
/**
|
|
107
|
+
* As alíquotas que não vieram da tabela oficial: a montagem as repassa em `NfeMontada.aliquotasInformadas`. Ausente
|
|
108
|
+
* ou vazio quando todas foram oficiais; a calculadora de fora do sinete que não sabe dizer pode omitir.
|
|
109
|
+
*/
|
|
110
|
+
readonly aliquotasInformadas?: readonly AliquotaIbsCbsInformada[];
|
|
93
111
|
/**
|
|
94
112
|
* Problemas de classificação ou de dado (`caminho` relativo ao item, como `itens[2].impostos.ibsCbs`). A ocorrência sem
|
|
95
113
|
* `origem` entra como `montagem` (ADR 0011); marque `entrada` a que aponta um valor da nota.
|
package/dist/ports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../src/ports.ts"],"names":[],"mappings":"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"}
|
package/dist/rtc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtc.d.ts","sourceRoot":"","sources":["../src/rtc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAGV,eAAe,EAIhB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"rtc.d.ts","sourceRoot":"","sources":["../src/rtc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAGV,eAAe,EAIhB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAEV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,gIAAgI;IAChI,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC3E;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAC;QAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACrG,wGAAwG;IACxG,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAmBD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,eAAe,CAQvE;AA+DD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAAC,aAAa,CAAC,CASjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,uBAA4B,GAAG,iBAAiB,CAYzF"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* enviar; se o envio ficar sem resposta (timeout, conexão caída), nunca gere outro `cNF` nem outro `dhEmi` para o mesmo
|
|
13
13
|
* número. Consulte a chave (`resolverEnvioSemResposta`) e, se ela não constar, reenvie exatamente os mesmos bytes.
|
|
14
14
|
*/
|
|
15
|
-
import type { Ambiente, Assinador, Logger, Relogio, ResultadoSefaz, Uf } from '@sinete/core';
|
|
15
|
+
import type { Ambiente, Assinador, Logger, Recusado, Relogio, ResultadoSefaz, Uf } from '@sinete/core';
|
|
16
16
|
import type { TRetConsCad_infCons_infCad } from '@sinete/schemas/nfe/consulta-cadastro/PL_010d';
|
|
17
17
|
import type { resEvento, resNFe } from '@sinete/schemas/nfe/dist-dfe/PL_NFeDistDFe_104';
|
|
18
18
|
import type { EndpointResolvido, NfeServico, Transporte } from '@sinete/transport';
|
|
@@ -62,6 +62,16 @@ export interface ClienteNfeOpcoes {
|
|
|
62
62
|
readonly endpointNfce?: (servico: NfeServico, uf: Uf) => EndpointResolvido;
|
|
63
63
|
/** Gerador de `idLote` (até 15 dígitos); padrão: os milissegundos do relógio. */
|
|
64
64
|
readonly idLote?: () => string;
|
|
65
|
+
/**
|
|
66
|
+
* O titular emite NF-e sem inscrição estadual, como contribuinte exclusivo do IBS/CBS (NT 2026.007 v1.10). A
|
|
67
|
+
* autorização dessa NF-e é só na SVRS (RV C17-11, rejeição 166), e os eventos de autoria do emitente dela também
|
|
68
|
+
* (RV 1P10-40, rejeição 188), menos na série 890 a 919. Com a NF-e assinada na mão (`autorizar`, `consultar` e
|
|
69
|
+
* `consultarRecibo` com ela) o cliente vê a falta de `emit/IE` sozinho; esta opção é para o que parte só da chave:
|
|
70
|
+
* cancelamento, carta de correção, consulta e recibo sem a nota (o recibo sem a nota vai à SVRS no modelo 55). A série 890 a
|
|
71
|
+
* 919 é exceção só dos eventos. Não vale para a NFC-e, que não admite emitente sem
|
|
72
|
+
* IE (RV C17-42, rejeição 156).
|
|
73
|
+
*/
|
|
74
|
+
readonly contribuinteExclusivoIbsCbs?: boolean;
|
|
65
75
|
}
|
|
66
76
|
/** Opções de toda chamada que vai à rede. */
|
|
67
77
|
export interface EnvioOpcoes {
|
|
@@ -147,7 +157,22 @@ export interface Inutilizacao {
|
|
|
147
157
|
readonly retInutNFe: string;
|
|
148
158
|
readonly procInutNFe: string;
|
|
149
159
|
}
|
|
150
|
-
|
|
160
|
+
/**
|
|
161
|
+
* Protocolo da inutilização que já valia para a mesma faixa, trazido pelo 563 (MOC 7.0 Visão Geral, tabela 5-12,
|
|
162
|
+
* regra I07). Não existe consulta de inutilização na NF-e 4.00: depois de um pedido sem resposta, reenviar a mesma
|
|
163
|
+
* faixa e ler este campo é o único caminho para guardar o `nProt` que valeu. O `procInutNFe` não se monta com ele,
|
|
164
|
+
* porque a resposta 563 não é a homologação.
|
|
165
|
+
*/
|
|
166
|
+
export interface InutilizacaoAnterior {
|
|
167
|
+
readonly nProt: string;
|
|
168
|
+
/** `retInutNFe` do 563 como veio na resposta. */
|
|
169
|
+
readonly retInutNFe: string;
|
|
170
|
+
}
|
|
171
|
+
/** Recusa da inutilização; no 563 com protocolo, `anterior` traz o protocolo da faixa já inutilizada. */
|
|
172
|
+
export interface RecusadoInutilizacao extends Recusado {
|
|
173
|
+
readonly anterior?: InutilizacaoAnterior;
|
|
174
|
+
}
|
|
175
|
+
export type ResultadoInutilizacao = Exclude<ResultadoSefaz<Inutilizacao, never>, Recusado> | RecusadoInutilizacao;
|
|
151
176
|
export interface Cadastro {
|
|
152
177
|
readonly UF: string;
|
|
153
178
|
readonly dhCons: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/services/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAO,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/services/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Recusado, StatusSefaz } from '@sinete/core';
|
|
6
6
|
/** Classes de `cStat` que a tabela descreve. */
|
|
7
|
-
export type CStatClasse = 'autorizada' | 'denegada' | 'cancelada' | 'loteRecebido' | 'loteProcessado' | 'loteEmProcessamento' | 'loteNaoLocalizado' | 'servicoEmOperacao' | 'inutilizacaoHomologada' | 'eventoRegistrado' | 'loteEventoProcessado' | 'cadastroEncontrado' | 'distribuicaoNenhumDocumento' | 'distribuicaoDocumentos' | 'duplicidade' | 'duplicidadeChaveDiferente' | 'naoConsta' | 'outraNfeNoNumero' | 'consumoIndevido';
|
|
7
|
+
export type CStatClasse = 'autorizada' | 'denegada' | 'cancelada' | 'loteRecebido' | 'loteProcessado' | 'loteEmProcessamento' | 'loteNaoLocalizado' | 'servicoEmOperacao' | 'inutilizacaoHomologada' | 'inutilizacaoJaHomologada' | 'eventoRegistrado' | 'loteEventoProcessado' | 'cadastroEncontrado' | 'distribuicaoNenhumDocumento' | 'distribuicaoDocumentos' | 'duplicidade' | 'duplicidadeChaveDiferente' | 'naoConsta' | 'outraNfeNoNumero' | 'consumoIndevido';
|
|
8
8
|
/** O `cStat` pertence à classe da tabela. */
|
|
9
9
|
export declare function cstatEm(cStat: string, classe: CStatClasse): boolean;
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/services/outcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAgB,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKxE,gDAAgD;AAChD,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,UAAU,GACV,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,kBAAkB,GAClB,sBAAsB,GACtB,oBAAoB,GACpB,6BAA6B,GAC7B,wBAAwB,GACxB,aAAa,GACb,2BAA2B,GAC3B,WAAW,GACX,kBAAkB,GAClB,iBAAiB,CAAC;AAKtB,6CAA6C;AAC7C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAKvD"}
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/services/outcome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAgB,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKxE,gDAAgD;AAChD,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,UAAU,GACV,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,0BAA0B,GAC1B,kBAAkB,GAClB,sBAAsB,GACtB,oBAAoB,GACpB,6BAA6B,GAC7B,wBAAwB,GACxB,aAAa,GACb,2BAA2B,GAC3B,WAAW,GACX,kBAAkB,GAClB,iBAAiB,CAAC;AAKtB,6CAA6C;AAC7C,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAEnE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,CAKvD"}
|
package/dist/versao-gerada.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sinete/nfe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "NF-e modelo 55: modelo de entrada tipado, montagem com totais em decimal exato, validação antes de assinar, autorização, consultas, eventos, inutilização, contingência SVC e Distribuição DF-e",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nfe",
|
|
@@ -45,15 +45,15 @@
|
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
47
|
"@sinete/core": "^0.3.0",
|
|
48
|
-
"@sinete/ibs-cbs": "^0.2.
|
|
48
|
+
"@sinete/ibs-cbs": "^0.2.2",
|
|
49
49
|
"@sinete/ibs-cbs-dados": ">=2026.9.3",
|
|
50
|
-
"@sinete/rejeicoes": "^0.
|
|
51
|
-
"@sinete/schemas": "^0.
|
|
52
|
-
"@sinete/transport": "^0.
|
|
53
|
-
"@sinete/validators": "^0.
|
|
50
|
+
"@sinete/rejeicoes": "^0.4.0",
|
|
51
|
+
"@sinete/schemas": "^0.3.0",
|
|
52
|
+
"@sinete/transport": "^0.3.0",
|
|
53
|
+
"@sinete/validators": "^0.3.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@sinete/sefaz-sim": "^0.
|
|
56
|
+
"@sinete/sefaz-sim": "^0.3.0"
|
|
57
57
|
},
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
package/src/build/build.ts
CHANGED
|
@@ -50,7 +50,7 @@ import type {
|
|
|
50
50
|
Referenciada,
|
|
51
51
|
ResponsavelTecnico,
|
|
52
52
|
} from '../model.ts';
|
|
53
|
-
import type { CalculadoraIbsCbs, PedidoIbsCbsItem } from '../ports.ts';
|
|
53
|
+
import type { AliquotaIbsCbsInformada, CalculadoraIbsCbs, PedidoIbsCbsItem } from '../ports.ts';
|
|
54
54
|
import { calculadoraIbsCbs } from '../rtc.ts';
|
|
55
55
|
import type { Instante } from '../time.ts';
|
|
56
56
|
import { deslocamentoDaUf, formatarDh } from '../time.ts';
|
|
@@ -69,7 +69,7 @@ import {
|
|
|
69
69
|
urlsNfce,
|
|
70
70
|
} from './nfce.ts';
|
|
71
71
|
import { camposForaDoPl, escolherPl } from './pl.ts';
|
|
72
|
-
import { cstComIsento, vencimentos } from './rejeicoes.ts';
|
|
72
|
+
import { cfopDeDevolucao, cstComIsento, cstComNaoContribuinte, exclusivoIbsCbs, vencimentos } from './rejeicoes.ts';
|
|
73
73
|
import { conferirTextosDaEntrada, textoXmlValido } from './textos.ts';
|
|
74
74
|
import { buildIcmsUfDest, buildIi, buildIpi, buildIssqn, buildPisCofins, buildPisCofinsSt } from './tributos.ts';
|
|
75
75
|
import type { Familia } from './values.ts';
|
|
@@ -149,8 +149,9 @@ export interface NfeMontada {
|
|
|
149
149
|
readonly tpEmis: string;
|
|
150
150
|
readonly dhEmi: string;
|
|
151
151
|
/**
|
|
152
|
-
*
|
|
153
|
-
* assinatura dos parâmetros, que só o certificado faz
|
|
152
|
+
* NFC-e e NF-e com DANFE Simplificado Tipo 2 (tpImp 6, NT 2026.002): o `infNFeSupl` a acrescentar (`comQrCode`,
|
|
153
|
+
* `assinarNfe`). Na versão 3 em contingência off-line, falta a assinatura dos parâmetros, que só o certificado faz
|
|
154
|
+
* (`assinaturaQrCode`).
|
|
154
155
|
*/
|
|
155
156
|
readonly nfce?: NfceSupl;
|
|
156
157
|
/** Pacote de liberação usado (escolhido pela vigência). */
|
|
@@ -159,6 +160,13 @@ export interface NfeMontada {
|
|
|
159
160
|
readonly infNFe: TNFe_infNFe;
|
|
160
161
|
/** `<NFe xmlns="...">` com o `infNFe` canônico, sem assinatura, já validado contra o schema. */
|
|
161
162
|
readonly xml: string;
|
|
163
|
+
/**
|
|
164
|
+
* Alíquotas do IBS/CBS que a calculadora usou vindas de quem integra (`comAliquotasInformadas`), e não da tabela
|
|
165
|
+
* oficial do pacote, por item. Ausente quando todas foram oficiais. A montagem não recusa por isso: é o caminho para
|
|
166
|
+
* emitir com uma alíquota já publicada antes de o pacote trazê-la. Guarde junto com a nota e alerte quem opera; em
|
|
167
|
+
* produção, a alíquota informada é responsabilidade de quem a informou.
|
|
168
|
+
*/
|
|
169
|
+
readonly aliquotasInformadas?: readonly AliquotaIbsCbsInformada[];
|
|
162
170
|
}
|
|
163
171
|
|
|
164
172
|
export type ResultadoMontagemNfe =
|
|
@@ -392,7 +400,7 @@ interface ItemMontado {
|
|
|
392
400
|
readonly issqnOpcionais: Record<string, Decimal>;
|
|
393
401
|
}
|
|
394
402
|
|
|
395
|
-
function montarItem(ctx: Ctx, item: Item, n: number, normal: boolean): ItemMontado {
|
|
403
|
+
function montarItem(ctx: Ctx, item: Item, n: number, normal: boolean, semIe: boolean): ItemMontado {
|
|
396
404
|
const path = `itens[${n}]`;
|
|
397
405
|
const p = item.produto;
|
|
398
406
|
const pp = `${path}.produto`;
|
|
@@ -511,7 +519,9 @@ function montarItem(ctx: Ctx, item: Item, n: number, normal: boolean): ItemMonta
|
|
|
511
519
|
const r = buildIcms(ctx, imp.icms, { vOp, vIPI: v.vIPI }, `${ip}.icms`);
|
|
512
520
|
imposto.ICMS = r.grupo;
|
|
513
521
|
icms = r.totais;
|
|
514
|
-
} else if (imp.issqn === undefined && imp.ibsCbs === undefined) {
|
|
522
|
+
} else if (imp.issqn === undefined && imp.ibsCbs === undefined && !semIe) {
|
|
523
|
+
// Na NF-e sem IE do emitente a falta de ICMS e ISSQN é a exceção 2 da RV B25-90 (NT 2026.007); a falta do grupo
|
|
524
|
+
// IBS/CBS sai como a 162, no caminho dele.
|
|
515
525
|
ctx.issues.add(`${ip}.icms`, 'campo_obrigatorio', 'o item precisa de ICMS (ou ISSQN, na NF-e conjugada)');
|
|
516
526
|
}
|
|
517
527
|
if (imp.ii !== undefined) {
|
|
@@ -741,11 +751,11 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
741
751
|
if (cont.dhCont.getTime() > agora.getTime()) {
|
|
742
752
|
issues.add('contingencia.dhCont', 'contingencia_invalida', 'entrada em contingência posterior à emissão');
|
|
743
753
|
}
|
|
744
|
-
if (!nfce && tpEmis === '9') {
|
|
754
|
+
if (!nfce && tpEmis === '9' && (entrada.tpImp ?? '1') !== '6') {
|
|
745
755
|
issues.add(
|
|
746
756
|
'contingencia.tpEmis',
|
|
747
757
|
'contingencia_invalida',
|
|
748
|
-
'contingência off-line (tpEmis 9) é
|
|
758
|
+
'contingência off-line (tpEmis 9) é da NFC-e e da NF-e com DANFE Simplificado Tipo 2, tpImp 6 (B22-10, rejeição 711)',
|
|
749
759
|
);
|
|
750
760
|
}
|
|
751
761
|
if (nfce && (tpEmis === '6' || tpEmis === '7')) {
|
|
@@ -790,7 +800,17 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
790
800
|
} else if (tpImp === '4' || tpImp === '5') {
|
|
791
801
|
issues.add('tpImp', 'campo_invalido', 'tpImp 4 e 5 (DANFC-e) são da NFC-e (B21-20, rejeição 710)');
|
|
792
802
|
}
|
|
803
|
+
// QR Code no infNFeSupl: NFC-e e NF-e com DANFE Simplificado Tipo 2 (NT 2026.002 v1.11, ZX02-10), esta só na versão 3
|
|
804
|
+
// (ZX02-220, rejeição 672) e com a URL da NFC-e da UF (ZX02-20, observação 3).
|
|
805
|
+
const comQr = nfce || tpImp === '6';
|
|
793
806
|
const qr: QrCodeNfceOpcoes = opcoes.qrCode ?? { versao: '3' };
|
|
807
|
+
if (!nfce && comQr && qr.versao === '2') {
|
|
808
|
+
issues.montagem(
|
|
809
|
+
'qrCode.versao',
|
|
810
|
+
'qrcode_invalido',
|
|
811
|
+
'a NF-e com DANFE Simplificado Tipo 2 usa só o QR Code versão 3 (ZX02-220, rejeição 672)',
|
|
812
|
+
);
|
|
813
|
+
}
|
|
794
814
|
if (nfce && qr.versao === '2') {
|
|
795
815
|
// O CSC e o idCSC são opções do montador, não da nota: as ocorrências são da montagem (ADR 0011).
|
|
796
816
|
if (!/^\d{1,6}$/.test(qr.idCSC) || Number(qr.idCSC) === 0) {
|
|
@@ -837,7 +857,8 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
837
857
|
if (entrada.itens.length === 0 || entrada.itens.length > 990) {
|
|
838
858
|
issues.add('itens', 'itens_limite', 'a NF-e tem de 1 a 990 itens');
|
|
839
859
|
}
|
|
840
|
-
const
|
|
860
|
+
const semIe = !nfce && entrada.emitente.IE === undefined;
|
|
861
|
+
const itens = entrada.itens.map((it, n) => montarItem(ctx, it, n, finNFeIn === '1', semIe));
|
|
841
862
|
// Na NFC-e em homologação, a descrição do primeiro item é a literal da RV I04-10, como o nome do destinatário da
|
|
842
863
|
// E04-20: o builder a põe, e a descrição informada fica fora do XML de teste.
|
|
843
864
|
const primeiro = itens[0];
|
|
@@ -849,6 +870,7 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
849
870
|
const classificados = entrada.itens
|
|
850
871
|
.map((it, n) => ({ it, n }))
|
|
851
872
|
.filter(({ it }) => it.impostos.ibsCbs?.classificacao !== undefined);
|
|
873
|
+
let aliquotasInformadas: readonly AliquotaIbsCbsInformada[] = [];
|
|
852
874
|
if (classificados.length > 0) {
|
|
853
875
|
const calculadora = opcoes.ibsCbs ?? calculadoraPadrao();
|
|
854
876
|
const reqs: PedidoIbsCbsItem[] = classificados.map(({ it, n }) => {
|
|
@@ -925,14 +947,19 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
925
947
|
itens: reqs,
|
|
926
948
|
});
|
|
927
949
|
issues.addAll(resp.ocorrencias ?? [], 'montagem');
|
|
950
|
+
aliquotasInformadas = resp.aliquotasInformadas ?? [];
|
|
951
|
+
// A calculadora que recusou já disse por quê: o grupo que faltar é consequência da ocorrência dela, e uma segunda
|
|
952
|
+
// ocorrência por item repetiria a causa. `ibscbs_calculo` fica para a calculadora que omite um item sem explicar.
|
|
953
|
+
const explicou = (resp.ocorrencias?.length ?? 0) > 0;
|
|
928
954
|
for (const { n } of classificados) {
|
|
929
955
|
const g = resp.itens.find((x) => x.nItem === n + 1);
|
|
930
956
|
if (g === undefined) {
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
957
|
+
if (!explicou)
|
|
958
|
+
issues.montagem(
|
|
959
|
+
`itens[${n}].impostos.ibsCbs`,
|
|
960
|
+
'ibscbs_calculo',
|
|
961
|
+
'a calculadora não devolveu o grupo IBSCBS do item',
|
|
962
|
+
);
|
|
936
963
|
continue;
|
|
937
964
|
}
|
|
938
965
|
((itens[n] as ItemMontado).det.imposto as Record<string, unknown>).IBSCBS = g.IBSCBS;
|
|
@@ -964,6 +991,9 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
964
991
|
const substituidos =
|
|
965
992
|
opcoes.ambiente === 'homologacao' ? ['destinatario.xNome', ...(nfce ? ['itens[0].produto.xProd'] : [])] : [];
|
|
966
993
|
conferirTextosDaEntrada(entrada, pl.infNFe as ComplexType, issues, new Set(substituidos));
|
|
994
|
+
// Nota sem IE do emitente (NT 2026.007, ADR 0012): conferida antes de parar nas ocorrências dos itens, para todas as
|
|
995
|
+
// violações voltarem juntas.
|
|
996
|
+
exclusivoIbsCbs(entrada, { nfce, dhEmi, instantes: [agora, fatoGerador] }, issues);
|
|
967
997
|
if (!issues.empty) return { ok: false, ocorrencias: issues.classificadas };
|
|
968
998
|
|
|
969
999
|
// Totais (grupo W)
|
|
@@ -1328,6 +1358,10 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
1328
1358
|
|
|
1329
1359
|
// Regras da SEFAZ que só dependem do documento (ADR 0012).
|
|
1330
1360
|
cstComIsento(entrada, idDest, issues);
|
|
1361
|
+
if (!nfce) {
|
|
1362
|
+
cfopDeDevolucao(entrada, issues);
|
|
1363
|
+
cstComNaoContribuinte(entrada, { idDest, uf: emitUf }, issues);
|
|
1364
|
+
}
|
|
1331
1365
|
vencimentos(entrada, { dhEmi, instante: agora }, issues);
|
|
1332
1366
|
|
|
1333
1367
|
camposForaDoPl(pl.infNFe, inf, 'infNFe', pl.vigencia.pl, issues);
|
|
@@ -1362,8 +1396,9 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
1362
1396
|
};
|
|
1363
1397
|
}
|
|
1364
1398
|
let supl: NfceSupl | undefined;
|
|
1365
|
-
if (
|
|
1366
|
-
// infNFeSupl (grupo ZX, NT 2025.001 item 04): endereços da UF no dia da emissão, pelo horário
|
|
1399
|
+
if (comQr) {
|
|
1400
|
+
// infNFeSupl (grupo ZX, NT 2025.001 item 04 e NT 2026.002): endereços da NFC-e da UF no dia da emissão, pelo horário
|
|
1401
|
+
// de Brasília, também na NF-e Tipo 2.
|
|
1367
1402
|
const tabela = urlsNfce(emitUf, opcoes.ambiente, diaBrasilia(agora));
|
|
1368
1403
|
const urlQr = opcoes.urlQrCode ?? tabela.qrCode;
|
|
1369
1404
|
const urlChave = opcoes.urlChave ?? tabela.urlChave;
|
|
@@ -1418,6 +1453,7 @@ export async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Pro
|
|
|
1418
1453
|
pl: pl.vigencia,
|
|
1419
1454
|
infNFe: inf,
|
|
1420
1455
|
xml,
|
|
1456
|
+
...(aliquotasInformadas.length === 0 ? {} : { aliquotasInformadas }),
|
|
1421
1457
|
},
|
|
1422
1458
|
};
|
|
1423
1459
|
}
|
|
@@ -1442,25 +1478,26 @@ const escapeXml = (s: string): string => s.replace(/&/g, '&').replace(/</g,
|
|
|
1442
1478
|
/**
|
|
1443
1479
|
* Assinatura dos parâmetros do QR Code da NFC-e em contingência off-line com a versão 3 (RSA-SHA1 em Base64, com o
|
|
1444
1480
|
* certificado que assina a nota; Manual do DANFE NFC-e 6.0, 4.4.2). `undefined` quando o QR Code não leva assinatura
|
|
1445
|
-
* (NF-e, emissão normal, versão 2).
|
|
1481
|
+
* (NF-e sem QR Code, emissão normal, versão 2). Vale também para a NF-e com DANFE Simplificado Tipo 2 em contingência
|
|
1482
|
+
* off-line (NT 2026.002).
|
|
1446
1483
|
*/
|
|
1447
1484
|
export async function assinaturaQrCode(nota: NfeMontada, assinador: Assinador): Promise<string | undefined> {
|
|
1448
1485
|
return nota.nfce?.assinar === true ? assinarParametros(nota.nfce.parametros, assinador) : undefined;
|
|
1449
1486
|
}
|
|
1450
1487
|
|
|
1451
1488
|
/**
|
|
1452
|
-
* A NFC-e montada com o `infNFeSupl` (QR Code e `urlChave`) inserido por splice antes do fechamento de `NFe`, pronta
|
|
1489
|
+
* A NFC-e, ou a NF-e com DANFE Simplificado Tipo 2 (tpImp 6, NT 2026.002), montada com o `infNFeSupl` (QR Code e `urlChave`) inserido por splice antes do fechamento de `NFe`, pronta
|
|
1453
1490
|
* para a assinatura. Na versão 3 em contingência off-line, informe a `assinatura` (`assinaturaQrCode`); nos demais
|
|
1454
1491
|
* casos ela não existe (ZX02-330, rejeição 445; ZX02-334, rejeição 474). Para assinar em três fases (A3, HSM), passe
|
|
1455
|
-
* este texto ao `prepararAssinatura` do `@sinete/core/xml` com o `id` da nota. Na NF-e
|
|
1456
|
-
* veio: ela não tem `infNFeSupl
|
|
1492
|
+
* este texto ao `prepararAssinatura` do `@sinete/core/xml` com o `id` da nota. Na NF-e com outro tpImp, devolve o XML como
|
|
1493
|
+
* veio: ela não tem `infNFeSupl`.
|
|
1457
1494
|
*/
|
|
1458
1495
|
export function comQrCode(nota: NfeMontada, assinatura?: string): string {
|
|
1459
1496
|
const xml = inserirSupl(nota, assinatura);
|
|
1460
1497
|
// Com a assinatura verdadeira, o qrCode pode passar do tamanho que a montagem conferiu (chave maior que 2048 bits).
|
|
1461
1498
|
if (assinatura !== undefined) {
|
|
1462
1499
|
const issues = conferirSupl(xml);
|
|
1463
|
-
if (issues.length > 0) throw new ErroDeValidacao('o QR Code
|
|
1500
|
+
if (issues.length > 0) throw new ErroDeValidacao('o QR Code não passou no schema', issues);
|
|
1464
1501
|
}
|
|
1465
1502
|
return xml;
|
|
1466
1503
|
}
|
|
@@ -1468,19 +1505,20 @@ export function comQrCode(nota: NfeMontada, assinatura?: string): string {
|
|
|
1468
1505
|
function inserirSupl(built: NfeMontada, assinatura: string | undefined): string {
|
|
1469
1506
|
const s = built.nfce;
|
|
1470
1507
|
if (s === undefined) {
|
|
1471
|
-
if (assinatura !== undefined)
|
|
1508
|
+
if (assinatura !== undefined)
|
|
1509
|
+
throw new ErroDeConfiguracao('esta NF-e não tem QR Code: só a NF-e com DANFE Simplificado Tipo 2 (tpImp 6) leva');
|
|
1472
1510
|
return built.xml;
|
|
1473
1511
|
}
|
|
1474
1512
|
if (s.assinar && assinatura === undefined) {
|
|
1475
1513
|
throw new ErroDeConfiguracao(
|
|
1476
|
-
'
|
|
1514
|
+
'contingência off-line com QR Code versão 3 precisa da assinatura (ZX02-334, rejeição 474)',
|
|
1477
1515
|
);
|
|
1478
1516
|
}
|
|
1479
1517
|
if (!s.assinar && assinatura !== undefined) {
|
|
1480
1518
|
throw new ErroDeConfiguracao('este QR Code não leva assinatura (ZX02-330, rejeição 445)');
|
|
1481
1519
|
}
|
|
1482
1520
|
const fim = '</NFe>';
|
|
1483
|
-
if (!built.xml.endsWith(fim)) throw new ErroDeConfiguracao('
|
|
1521
|
+
if (!built.xml.endsWith(fim)) throw new ErroDeConfiguracao('nota montada fora da forma esperada');
|
|
1484
1522
|
const qrCode = `${s.base}${s.parametros}${assinatura === undefined ? '' : `|${assinatura}`}`;
|
|
1485
1523
|
const supl = `<infNFeSupl><qrCode>${escapeXml(qrCode)}</qrCode><urlChave>${escapeXml(s.urlChave)}</urlChave></infNFeSupl>`;
|
|
1486
1524
|
return built.xml.slice(0, -fim.length) + supl + fim;
|
package/src/build/rejeicoes.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type { Ocorrencia } from '@sinete/core';
|
|
11
|
+
import { indicadoresCfop } from '@sinete/validators';
|
|
11
12
|
import type { Issues } from '../issues.ts';
|
|
12
13
|
import type { DadosNfe } from '../model.ts';
|
|
13
14
|
import type { Instante } from '../time.ts';
|
|
@@ -140,3 +141,184 @@ export function conferirEmitenteDoCertificado(
|
|
|
140
141
|
}
|
|
141
142
|
return [];
|
|
142
143
|
}
|
|
144
|
+
|
|
145
|
+
/** A RV C17-42 (NFC-e sem IE) "não se aplica a partir de 2033". */
|
|
146
|
+
const NFCE_SEM_IE_ATE = '2033-01-01';
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Contribuinte exclusivo do IBS/CBS: a nota sem `emitente.IE` (NT 2026.007 v1.10). Sai daqui o que a NT decide só com o
|
|
150
|
+
* documento:
|
|
151
|
+
*
|
|
152
|
+
* - NFC-e sem IE, rejeição 156 (RV C17-42), até o fim de 2032; a data é a da emissão e a do fato gerador, e a conferência
|
|
153
|
+
* só recusa quando todas as leituras (local, Brasília e UTC) caem antes de 2033;
|
|
154
|
+
* - NF-e sem IE e sem CNPJ do emitente (emitente CPF), 157 (C17-43);
|
|
155
|
+
* - NF-e sem IE com a IE do substituto tributário, 158 (C18-50);
|
|
156
|
+
* - item com ICMS ou ICMS interestadual (`icmsUfDest`) na NF-e sem IE, 161 (N01-10), menos na devolução (finNFe 4) e na
|
|
157
|
+
* nota de crédito de retorno por recusa ou não localização (tpNFCredito 03), as duas exceções da regra;
|
|
158
|
+
* - item sem `impostos.ibsCbs` (nem o grupo pronto nem a classificação para a calculadora) na NF-e sem IE, 162
|
|
159
|
+
* (UB12-11). O item classificado cujo cálculo falhou já tem a ocorrência da calculadora, de montagem.
|
|
160
|
+
*
|
|
161
|
+
* Ficam para a SEFAZ as regras da mesma NT que dependem de tabela ou cadastro: a 159 (tabela de CFOP do Portal), a 163 e
|
|
162
|
+
* a 164 (CCC), as de local de retirada e entrega (CCC) e as da LCC-RFB (178 a 187). A 166 e a 188 são do roteamento.
|
|
163
|
+
*/
|
|
164
|
+
export function exclusivoIbsCbs(
|
|
165
|
+
input: DadosNfe,
|
|
166
|
+
contexto: { readonly nfce: boolean; readonly dhEmi: string; readonly instantes: readonly Instante[] },
|
|
167
|
+
issues: Issues,
|
|
168
|
+
): void {
|
|
169
|
+
const e = input.emitente;
|
|
170
|
+
if (e.IE !== undefined) return;
|
|
171
|
+
if (contexto.nfce) {
|
|
172
|
+
const datas = [
|
|
173
|
+
contexto.dhEmi.slice(0, 10),
|
|
174
|
+
...contexto.instantes.flatMap((i) => [dataNoFuso(i, OFFSET_BRASILIA), dataNoFuso(i, 0)]),
|
|
175
|
+
];
|
|
176
|
+
if (datas.every((d) => d < NFCE_SEM_IE_ATE)) {
|
|
177
|
+
issues.add(
|
|
178
|
+
'emitente.IE',
|
|
179
|
+
'campo_obrigatorio',
|
|
180
|
+
'a NFC-e exige a IE do emitente: contribuinte exclusivo do IBS/CBS, sem IE, emite só NF-e (C17-42, rejeição 156)',
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (e.CNPJ === undefined) {
|
|
186
|
+
issues.add(
|
|
187
|
+
'emitente.CNPJ',
|
|
188
|
+
'campo_obrigatorio',
|
|
189
|
+
'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) exige o CNPJ do emitente (C17-43, rejeição 157)',
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
if (e.IEST !== undefined) {
|
|
193
|
+
issues.add(
|
|
194
|
+
'emitente.IEST',
|
|
195
|
+
'combinacao_invalida',
|
|
196
|
+
'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) não leva a IE do substituto tributário (C18-50, rejeição 158)',
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
const icmsLiberado = (input.finNFe ?? '1') === '4' || input.tpNFCredito === '03';
|
|
200
|
+
input.itens.forEach((it, n) => {
|
|
201
|
+
if (!icmsLiberado) {
|
|
202
|
+
for (const [campo, grupo] of [
|
|
203
|
+
['icms', it.impostos.icms],
|
|
204
|
+
['icmsUfDest', it.impostos.icmsUfDest],
|
|
205
|
+
] as const) {
|
|
206
|
+
if (grupo === undefined) continue;
|
|
207
|
+
issues.add(
|
|
208
|
+
`itens[${n}].impostos.${campo}`,
|
|
209
|
+
'grupo_vedado',
|
|
210
|
+
'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) não leva ICMS no item (N01-10, rejeição 161)',
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (it.impostos.ibsCbs === undefined) {
|
|
215
|
+
issues.add(
|
|
216
|
+
`itens[${n}].impostos.ibsCbs`,
|
|
217
|
+
'campo_obrigatorio',
|
|
218
|
+
'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) exige o grupo IBS/CBS em todo item (UB12-11, rejeição 162)',
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Nota de crédito que aceita CFOP de devolução (NT 2025.002 v1.52, RV I08-144, exceção): 03, 04 e 06. */
|
|
225
|
+
const CREDITO_COM_DEVOLUCAO: ReadonlySet<string> = new Set(['03', '04', '06']);
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* CFOP de devolução (Tabela CFOP, `indDevol`) em NF-e que não é de devolução nem complementar: rejeição 328 (MOC 7.0
|
|
229
|
+
* Anexo I, RV I08-144, obrigatória no modelo 55; NT 2025.002 v1.52, que exclui a nota de crédito 03, 04 e 06). CFOP
|
|
230
|
+
* fora da tabela versionada não é recusado.
|
|
231
|
+
*/
|
|
232
|
+
export function cfopDeDevolucao(input: DadosNfe, issues: Issues): void {
|
|
233
|
+
const fin = input.finNFe ?? '1';
|
|
234
|
+
if (fin === '2' || fin === '4') return;
|
|
235
|
+
if (fin === '5' && input.tpNFCredito !== undefined && CREDITO_COM_DEVOLUCAO.has(input.tpNFCredito)) return;
|
|
236
|
+
input.itens.forEach((it, n) => {
|
|
237
|
+
if (indicadoresCfop(it.produto.CFOP.replace(/\D/g, ''))?.indDevol !== true) return;
|
|
238
|
+
issues.add(
|
|
239
|
+
`itens[${n}].produto.CFOP`,
|
|
240
|
+
'combinacao_invalida',
|
|
241
|
+
`CFOP ${it.produto.CFOP} é de devolução e a nota não é de devolução (finNFe ${fin}) (I08-144, rejeição 328)`,
|
|
242
|
+
);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** CST aceitos com destinatário não contribuinte (RV N12-70; o 61 entrou pela NT 2023.001). */
|
|
247
|
+
const CST_NAO_CONTRIBUINTE: ReadonlySet<string> = new Set(['00', '20', '40', '41', '60', '61']);
|
|
248
|
+
|
|
249
|
+
/** Códigos ANP que a exceção 5 da N12-70 deixa de fora (não derivados de petróleo). */
|
|
250
|
+
const ANP_FORA_DA_EXCECAO_5: ReadonlySet<string> = new Set([
|
|
251
|
+
'820101001',
|
|
252
|
+
'820101010',
|
|
253
|
+
'810102001',
|
|
254
|
+
'810102004',
|
|
255
|
+
'810102002',
|
|
256
|
+
'810102003',
|
|
257
|
+
'810101002',
|
|
258
|
+
'810101001',
|
|
259
|
+
'810101003',
|
|
260
|
+
'220101003',
|
|
261
|
+
'220101004',
|
|
262
|
+
'220101002',
|
|
263
|
+
'220101001',
|
|
264
|
+
'220101005',
|
|
265
|
+
'220101006',
|
|
266
|
+
'560101001',
|
|
267
|
+
]);
|
|
268
|
+
|
|
269
|
+
/** CFOP da exceção 7 da N12-70 (CST 51 em qualquer operação). */
|
|
270
|
+
const CFOP_CST51: ReadonlySet<string> = new Set(['5123', '5922', '6123', '6922']);
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* CST fora de 00, 20, 40, 41, 60 e 61 com destinatário não contribuinte (indIEDest 9): rejeição 508 (MOC 7.0 Anexo I,
|
|
274
|
+
* RV N12-70, obrigatória no modelo 55, no texto da NT 2023.001 v1.60 e da NT 2023.003 v1.40). Só o CST: a regra não
|
|
275
|
+
* fala do CSOSN. Ficam de fora todas as exceções:
|
|
276
|
+
*
|
|
277
|
+
* 1. NF-e de entrada; 3. nota com veículo novo (`veicProd`) em algum item; 6. CST 50 e 51 na devolução;
|
|
278
|
+
* 2. CST 50 com CFOP de retorno ou remessa (Tabela CFOP, `indRetor`, `indRemes`) ou 5949 e 6949, e com CFOP fora da
|
|
279
|
+
* tabela versionada, que a conferência não sabe classificar;
|
|
280
|
+
* 5. CST 30 interestadual com combustível derivado de petróleo; 9. CST 30 interestadual com energia elétrica (NCM
|
|
281
|
+
* 27160000);
|
|
282
|
+
* 7. CST 51 com CFOP 5123, 5922, 6123 e 6922, e em qualquer operação interna: a NT 2023.001 diz "operações internas" e
|
|
283
|
+
* a NT 2023.003 restringe ao retorno de depósito (5906 e 5907), e a conferência recusa só o que as duas recusam;
|
|
284
|
+
* 8. CST 10 e 02 em operação interna, a critério da UF; e o CST 90 com CFOP 5403 ou 5405 no CE (observação da NT
|
|
285
|
+
* 2023.003), também a critério da UF.
|
|
286
|
+
*
|
|
287
|
+
* A exceção 4 (emissão antes de 01/07/2016) não alcança nota montada agora.
|
|
288
|
+
*/
|
|
289
|
+
export function cstComNaoContribuinte(
|
|
290
|
+
input: DadosNfe,
|
|
291
|
+
contexto: { readonly idDest: string; readonly uf: string },
|
|
292
|
+
issues: Issues,
|
|
293
|
+
): void {
|
|
294
|
+
if (input.destinatario?.indIEDest !== '9' || input.tpNF === '0') return;
|
|
295
|
+
if (input.itens.some((it) => it.produto.especifico !== undefined && 'veicProd' in it.produto.especifico)) return;
|
|
296
|
+
const fin = input.finNFe ?? '1';
|
|
297
|
+
const interna = contexto.idDest === '1';
|
|
298
|
+
const interestadual = contexto.idDest === '2';
|
|
299
|
+
input.itens.forEach((it, n) => {
|
|
300
|
+
const icms = it.impostos.icms;
|
|
301
|
+
if (icms === undefined || !('CST' in icms)) return;
|
|
302
|
+
const cst = icms.CST;
|
|
303
|
+
if (CST_NAO_CONTRIBUINTE.has(cst)) return;
|
|
304
|
+
const cfop = it.produto.CFOP.replace(/\D/g, '');
|
|
305
|
+
const esp = it.produto.especifico;
|
|
306
|
+
if ((cst === '50' || cst === '51') && fin === '4') return;
|
|
307
|
+
if (cst === '50') {
|
|
308
|
+
const ind = indicadoresCfop(cfop);
|
|
309
|
+
if (ind === undefined || ind.indRetor || ind.indRemes || cfop === '5949' || cfop === '6949') return;
|
|
310
|
+
}
|
|
311
|
+
if (cst === '51' && (CFOP_CST51.has(cfop) || interna)) return;
|
|
312
|
+
if ((cst === '10' || cst === '02') && interna) return;
|
|
313
|
+
if (cst === '30' && interestadual) {
|
|
314
|
+
if (esp !== undefined && 'comb' in esp && !ANP_FORA_DA_EXCECAO_5.has(esp.comb.cProdANP)) return;
|
|
315
|
+
if (it.produto.NCM.replace(/\D/g, '') === '27160000') return;
|
|
316
|
+
}
|
|
317
|
+
if (cst === '90' && contexto.uf === 'CE' && (cfop === '5403' || cfop === '5405')) return;
|
|
318
|
+
issues.add(
|
|
319
|
+
`itens[${n}].impostos.icms.CST`,
|
|
320
|
+
'combinacao_invalida',
|
|
321
|
+
`CST ${cst} não se usa com destinatário não contribuinte (indIEDest 9) (N12-70, rejeição 508)`,
|
|
322
|
+
);
|
|
323
|
+
});
|
|
324
|
+
}
|