@sinete/nfe 0.5.0 → 0.6.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 +1 -1
- package/dist/build/build.d.ts.map +1 -1
- package/dist/build/nfce.d.ts +8 -0
- package/dist/build/nfce.d.ts.map +1 -1
- package/dist/index.js +41 -28
- package/dist/index.js.map +5 -5
- package/dist/versao-gerada.d.ts +1 -1
- package/package.json +3 -3
- package/src/build/build.ts +19 -10
- package/src/build/nfce.ts +41 -20
- package/src/versao-gerada.ts +1 -1
package/dist/index.js.map
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/build/build.ts", "../src/decimal.ts", "../src/format.ts", "../src/issues.ts", "../src/rtc.ts", "../src/time.ts", "../src/versao-gerada.ts", "../src/build/destinatario.ts", "../src/build/ibscbs.ts", "../src/build/values.ts", "../src/build/icms.ts", "../src/build/nfce.ts", "../src/build/pl.ts", "../src/build/rejeicoes.ts", "../src/build/textos.ts", "../src/build/tributos.ts", "../src/model.ts", "../src/rotulo.ts", "../src/services/client.ts", "../src/services/gzip.ts", "../src/services/outcome.ts", "../src/services/proc.ts", "../src/services/soap.ts", "../src/services/recuperar.ts", "../src/services/resolver.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * Montagem da NF-e: entrada do domínio (`DadosNfe`) para o objeto tipado do `@sinete/schemas` no PL vigente, com os\n * derivados e os totais em decimal exato, a chave de acesso e as regras conferidas antes de qualquer serialização. A\n * saída é a string canônica de `<NFe>` ainda sem assinatura, já validada contra o schema; `assinarNfe` insere a\n * `Signature` por splice (ADR 0003) e nada mais toca nela.\n */\n\nimport type { Ambiente, Assinador, ContextoDeTempo, Ocorrencia, Uf } from '@sinete/core';\nimport {\n ErroDeConfiguracao,\n ErroDeValidacao,\n ehUf,\n formatarVerProc,\n relogioFixo,\n tpAmbDoAmbiente,\n ufPorSigla,\n} from '@sinete/core';\nimport { assinarXml, codificarBase64, lerXml, primeiroFilho } from '@sinete/core/xml';\nimport type { ComplexType, EntradaDeVigencia } from '@sinete/schemas';\nimport { ErroSerializacao, serializar, validar } from '@sinete/schemas';\nimport type {\n TNFe_infNFe,\n TNFe_infNFe_det,\n TNFe_infNFe_det_imposto,\n TNFe_infNFe_det_prod,\n TNFe_infNFe_ide_NFref,\n TNFe_infNFe_total_ICMSTot,\n TNFe_infNFe_total_ISSQNtot,\n TTribNFe,\n} from '@sinete/schemas/nfe/PL_010f';\nimport { TIS as TISCt, TNFe_infNFeSupl, TTribNFe as TTribNFeCt } from '@sinete/schemas/nfe/PL_010f';\nimport { lerChaveAcesso, lerCnpj, lerCpf, lerIe, montarChaveAcesso } from '@sinete/validators';\nimport arredondamento from '../data/arredondamento.json' with { type: 'json' };\nimport produtorRural from '../data/produtor-rural.json' with { type: 'json' };\nimport reforma from '../data/reforma.json' with { type: 'json' };\nimport respTecData from '../data/resp-tec.json' with { type: 'json' };\nimport type { RoundingMode } from '../decimal.ts';\nimport { Decimal } from '../decimal.ts';\nimport { D0302, D0302A04, D1104V, D1110V, D1203, D1302, D1302_OPC } from '../format.ts';\nimport { Issues } from '../issues.ts';\nimport type {\n DadosNfe,\n Destinatario,\n DocumentoPessoa,\n Emitente,\n Endereco,\n EnderecoExterior,\n Item,\n Local,\n Referenciada,\n ResponsavelTecnico,\n} from '../model.ts';\nimport type { AliquotaIbsCbsInformada, CalculadoraIbsCbs, PedidoIbsCbsItem } from '../ports.ts';\nimport { calculadoraIbsCbs } from '../rtc.ts';\nimport type { Instante } from '../time.ts';\nimport { deslocamentoDaUf, formatarDh } from '../time.ts';\nimport { VERSAO_PACOTE } from '../versao-gerada.ts';\nimport { conferirDestinatario } from './destinatario.ts';\nimport { decimaisInvalidos, grupoInvalido, ibsCbsDoItem, totalIbsCbs } from './ibscbs.ts';\nimport type { IcmsTotais } from './icms.ts';\nimport { buildIcms, zeroIcmsTotais } from './icms.ts';\nimport type { NfceSupl, PagMontado, QrCodeNfceOpcoes } from './nfce.ts';\nimport {\n assinarParametros,\n conferirNfce,\n NFCE_LIMITE_SEM_DESTINATARIO,\n pagamentoNfce,\n parametrosQrCode,\n urlsNfce,\n} from './nfce.ts';\nimport { camposForaDoPl, escolherPl } from './pl.ts';\nimport { cfopDeDevolucao, cstComIsento, cstComNaoContribuinte, exclusivoIbsCbs, vencimentos } from './rejeicoes.ts';\nimport { conferirTextosDaEntrada, textoXmlValido } from './textos.ts';\nimport { buildIcmsUfDest, buildIi, buildIpi, buildIssqn, buildPisCofins, buildPisCofinsSt } from './tributos.ts';\nimport type { Familia } from './values.ts';\nimport { Ctx, clean, digits, TOLERANCIA } from './values.ts';\n\nlet padrao: CalculadoraIbsCbs | undefined;\n\n/** A calculadora de IBS/CBS usada quando `opcoes.ibsCbs` não vem: o motor do sinete, criada uma vez por processo. */\nfunction calculadoraPadrao(): CalculadoraIbsCbs {\n padrao ??= calculadoraIbsCbs();\n return padrao;\n}\n\nexport const NFE_NS = 'http://www.portalfiscal.inf.br/nfe';\n\n/** Literal do nome do destinatário em homologação (MOC 7.0 Anexo I, RV E04-20, rejeição 598). */\nexport const XNOME_HOMOLOGACAO = 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL';\n\n/** Literal da descrição do primeiro item da NFC-e em homologação (MOC 7.0 Anexo I, RV I04-10, rejeição 373). */\nexport const XPROD_HOMOLOGACAO_NFCE = 'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL';\n\nexport type ExigenciaRespTec = 'obrigatorio' | 'opcional';\n\nexport interface MontarNfeOpcoes {\n readonly ambiente: Ambiente;\n /** Relógio de emissão (dhEmi, PL vigente, CSRT) e de fato gerador (IBS/CBS). */\n readonly tempo: ContextoDeTempo;\n /**\n * Calculadora de IBS/CBS dos itens com `ibsCbs.classificacao`. Padrão: `calculadoraIbsCbs()`, o motor do sinete com o\n * dataset embarcado (importado na primeira nota que precisar dele) e as alíquotas oficiais. Informe outra para trocar\n * dataset, alíquotas, base ou regras, ou para calcular fora do sinete.\n */\n readonly ibsCbs?: CalculadoraIbsCbs;\n /** Fuso do emitente em minutos; padrão pela UF (`data/fusos.json`). */\n readonly deslocamentoMin?: number;\n /** Versão do aplicativo emissor (`verProc`); padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc`). */\n readonly verProc?: string;\n /** Sobrepõe o modo de arredondamento de uma família (`data/arredondamento.json`). */\n readonly arredondamento?: Partial<Record<Familia, RoundingMode>>;\n /** Responsável técnico padrão (a software house), usado quando a nota não traz `respTec`. */\n readonly respTec?: ResponsavelTecnico;\n /** Sobrepõe a exigência de infRespTec e CSRT da tabela por UF (`data/resp-tec.json`). */\n readonly exigencias?: { readonly infRespTec?: ExigenciaRespTec; readonly csrt?: ExigenciaRespTec };\n /** Fonte de aleatoriedade para o cNF; padrão `crypto.getRandomValues`. */\n readonly aleatorio?: (bytes: Uint8Array) => Uint8Array;\n /**\n * O `vPag` do único `detPag` passa a ser o `vNF` calculado na mesma montagem, e o valor informado nele é ignorado.\n * Serve a quem recebe à vista o total da nota e não quer calcular o `vNF` antes de montar. Mais de um `detPag`,\n * nenhum, ou `tPag` 90 (sem pagamento) dão ocorrência `pagamento_igual_total`: não há como saber como repartir o\n * total, e a nota sem pagamento tem `vPag` zero.\n */\n readonly pagamentoIgualTotal?: boolean;\n /**\n * Só NFC-e (modelo 65): versão do QR Code. Padrão `{ versao: '3' }`, que dispensa o CSC (NT 2025.001). Com\n * `{ versao: '2', idCSC, CSC }`, o hash leva o CSC fornecido pela SEFAZ da UF, que nunca vai para o XML.\n */\n readonly qrCode?: QrCodeNfceOpcoes;\n /**\n * Só NFC-e: endereço da consulta via QR Code (sem o `?p=`). Padrão: o da UF do emitente no ambiente e na data de\n * emissão (`data/nfce-urls.json`, do Portal Nacional da NFC-e). AM e MA publicam o endereço sem o protocolo: lá, é\n * obrigatório.\n */\n readonly urlQrCode?: string;\n /** Só NFC-e: URL da consulta por chave de acesso (`urlChave`). Padrão: a da UF (`data/nfce-urls.json`). */\n readonly urlChave?: string;\n}\n\nexport interface NfeMontada {\n /** Chave de acesso (44 posições). */\n readonly chave: string;\n /** `Id` do `infNFe` (`NFe` + chave): é o que a assinatura referencia. */\n readonly id: string;\n readonly cNF: string;\n readonly cDV: string;\n /** 55 (NF-e) ou 65 (NFC-e). */\n readonly mod: '55' | '65';\n readonly tpEmis: string;\n readonly dhEmi: string;\n /**\n * NFC-e e NF-e com DANFE Simplificado Tipo 2 (tpImp 6, NT 2026.002): o `infNFeSupl` a acrescentar (`comQrCode`,\n * `assinarNfe`). Na versão 3 em contingência off-line, falta a assinatura dos parâmetros, que só o certificado faz\n * (`assinaturaQrCode`).\n */\n readonly nfce?: NfceSupl;\n /** Pacote de liberação usado (escolhido pela vigência). */\n readonly pl: EntradaDeVigencia;\n /** O objeto tipado, na forma do PL_010f (o mais novo que o pacote conhece). */\n readonly infNFe: TNFe_infNFe;\n /** `<NFe xmlns=\"...\">` com o `infNFe` canônico, sem assinatura, já validado contra o schema. */\n readonly xml: string;\n /**\n * Alíquotas do IBS/CBS que a calculadora usou vindas de quem integra (`comAliquotasInformadas`), e não da tabela\n * oficial do pacote, por item. Ausente quando todas foram oficiais. A montagem não recusa por isso: é o caminho para\n * emitir com uma alíquota já publicada antes de o pacote trazê-la. Guarde junto com a nota e alerte quem opera; em\n * produção, a alíquota informada é responsabilidade de quem a informou.\n */\n readonly aliquotasInformadas?: readonly AliquotaIbsCbsInformada[];\n}\n\nexport type ResultadoMontagemNfe =\n | { readonly ok: true; readonly valor: NfeMontada }\n | { readonly ok: false; readonly ocorrencias: readonly Ocorrencia[] };\n\nconst MODES: Record<Familia, RoundingMode> = Object.fromEntries(\n Object.entries(arredondamento.familias).map(([k, v]) => [k, v.modo as RoundingMode]),\n) as Record<Familia, RoundingMode>;\n\nconst SEM_GTIN = 'SEM GTIN';\nconst BRASILIA = -180;\n\nfunction diaBrasilia(d: Instante): string {\n return formatarDh(d, BRASILIA).slice(0, 10);\n}\n\n/** Exigência de infRespTec ou CSRT para a UF no ambiente e na data (tabela `data/resp-tec.json`). */\nexport function exigenciaRespTec(\n uf: Uf,\n ambiente: Ambiente,\n data: Instante,\n): { readonly infRespTec: ExigenciaRespTec; readonly csrt: ExigenciaRespTec } {\n const dia = diaBrasilia(data);\n const ufs = respTecData.ufs as Readonly<\n Record<string, { readonly csrt?: Record<string, string>; readonly infRespTec?: Record<string, string> }>\n >;\n const regra = Object.hasOwn(ufs, uf) ? ufs[uf] : undefined;\n const vale = (r: Record<string, string> | undefined, padrao: string): ExigenciaRespTec => {\n const desde = r?.[ambiente];\n if (desde !== undefined) return dia >= desde ? 'obrigatorio' : (padrao as ExigenciaRespTec);\n return padrao as ExigenciaRespTec;\n };\n return {\n infRespTec: vale(regra?.infRespTec, respTecData.padrao.infRespTec),\n csrt: vale(regra?.csrt, respTecData.padrao.csrt),\n };\n}\n\n/** `hashCSRT`: Base64(SHA-1(CSRT + chave de acesso)) (NT 2018.005, campo ZD09). */\nexport async function hashCsrt(csrt: string, chave: string): Promise<string> {\n const d = await globalThis.crypto.subtle.digest('SHA-1', new TextEncoder().encode(csrt + chave));\n return codificarBase64(new Uint8Array(d));\n}\n\n/** Normaliza CNPJ ou CPF, apontando a ocorrência do validador. */\nfunction documento(doc: DocumentoPessoa, path: string, issues: Issues): { CNPJ: string } | { CPF: string } {\n if (doc.CNPJ !== undefined) {\n const r = lerCnpj(doc.CNPJ, { caminho: `${path}.CNPJ` });\n if (!r.ok) issues.list.push(r.erro);\n return { CNPJ: r.ok ? r.valor : doc.CNPJ };\n }\n const r = lerCpf(doc.CPF ?? '', { caminho: `${path}.CPF` });\n if (!r.ok) issues.list.push(r.erro);\n return { CPF: r.ok ? r.valor : (doc.CPF ?? '') };\n}\n\nfunction ie(value: string | undefined, uf: Uf, path: string, issues: Issues, allowIsento: boolean): string | undefined {\n if (value === undefined) return undefined;\n const r = lerIe(value, uf, { caminho: path, aceitarIsento: allowIsento });\n if (!r.ok) {\n issues.list.push(r.erro);\n return value;\n }\n return r.valor.valor;\n}\n\nfunction endereco(e: Endereco): Record<string, string | undefined> {\n return {\n xLgr: e.xLgr,\n nro: e.nro,\n xCpl: e.xCpl,\n xBairro: e.xBairro,\n cMun: e.cMun,\n xMun: e.xMun,\n UF: e.UF,\n CEP: e.CEP === undefined ? undefined : digits(e.CEP),\n fone: e.fone === undefined ? undefined : digits(e.fone),\n };\n}\n\nfunction isExterior(e: Endereco | EnderecoExterior | undefined): e is EnderecoExterior {\n return e !== undefined && 'exterior' in e && e.exterior === true;\n}\n\n/** Gera um cNF de 8 dígitos que passa nas regras de emissão da chave (RV B03-10: fora das sequências e diferente do nNF). */\nfunction gerarChave(\n parts: { cUF: string; aamm: string; emitente: string; mod: string; serie: string; nNF: string; tpEmis: string },\n cNFInformado: string | undefined,\n random: (b: Uint8Array) => Uint8Array,\n issues: Issues,\n): { chave: string; cNF: string } | undefined {\n const tentar = (cNF: string): { chave: string; ok: boolean; issue?: Ocorrencia } => {\n const chave = montarChaveAcesso({ ...parts, cNF });\n const r = lerChaveAcesso(chave, { emissao: true, caminho: 'chave' });\n return r.ok ? { chave, ok: true } : { chave, ok: false, issue: r.erro };\n };\n if (cNFInformado !== undefined) {\n if (!/^\\d{8}$/.test(cNFInformado)) {\n issues.add('cNF', 'campo_invalido', 'cNF tem 8 algarismos');\n return undefined;\n }\n const r = tentar(cNFInformado);\n if (!r.ok && r.issue) {\n // O cNF informado recusado pela regra da chave é da entrada, no campo dela; outra parte da chave recusada aponta\n // a chave montada (a causa, se for da entrada, já apareceu no campo dela).\n const doCnf = r.issue.code === 'chave_cnf_invalido';\n issues.list.push({\n ...r.issue,\n caminho: doCnf ? 'cNF' : r.issue.caminho,\n code: 'chave_invalida',\n mensagem: `${r.issue.mensagem} (${r.issue.code})`,\n origem: doCnf ? 'entrada' : 'montagem',\n });\n }\n return r.ok ? { chave: r.chave, cNF: cNFInformado } : undefined;\n }\n for (let n = 0; n < 32; n++) {\n const b = random(new Uint8Array(4));\n const v = ((b[0] ?? 0) * 2 ** 24 + (b[1] ?? 0) * 2 ** 16 + (b[2] ?? 0) * 2 ** 8 + (b[3] ?? 0)) % 100_000_000;\n const cNF = String(v).padStart(8, '0');\n const r = tentar(cNF);\n if (r.ok) return { chave: r.chave, cNF };\n if (r.issue && r.issue.code !== 'chave_cnf_invalido') {\n // A chave com o cNF gerado aqui foi recusada por outra parte (UF, emitente, série): a ocorrência aponta a chave\n // montada; a causa, se for da entrada, já apareceu no campo dela.\n issues.list.push({\n ...r.issue,\n code: 'chave_invalida',\n mensagem: `${r.issue.mensagem} (${r.issue.code})`,\n origem: 'montagem',\n });\n return undefined;\n }\n }\n issues.montagem('cNF', 'chave_invalida', 'não foi possível gerar um cNF válido');\n return undefined;\n}\n\nfunction referencia(ref: Referenciada, path: string, issues: Issues): TNFe_infNFe_ide_NFref {\n const chave = (c: string, p: string): string => {\n const r = lerChaveAcesso(c, { caminho: p });\n if (!r.ok) issues.list.push(r.erro);\n return r.ok ? r.valor.chave : c;\n };\n if ('refNFe' in ref) return { refNFe: chave(ref.refNFe, `${path}.refNFe`) };\n if ('refNFeSig' in ref) {\n // Chave com o código numérico zerado para sigilo (NT 2022.003, BA02a): o DV é o da chave original, então a\n // conferência do DV não se aplica; confere-se a forma, o modelo 55 e o cNF zerado.\n const c = ref.refNFeSig.replace(/\\s/g, '').toUpperCase();\n if (!/^[0-9]{6}[0-9A-Z]{12}[0-9]{2}55[0-9]{22}$/.test(c) || c.slice(35, 43) !== '00000000') {\n issues.add(`${path}.refNFeSig`, 'chave_invalida', 'chave de NF-e (modelo 55) com o código numérico (cNF) zerado');\n }\n return { refNFeSig: c };\n }\n if ('refCTe' in ref) return { refCTe: chave(ref.refCTe, `${path}.refCTe`) };\n if ('refNF' in ref) return { refNF: ref.refNF };\n if ('refECF' in ref) return { refECF: ref.refECF };\n const nfp = ref.refNFP;\n // Nota de produtor em papel (modelo 04) extinta: só referência a nota emitida antes do fim na UF dela.\n if (nfp.mod === '04') {\n const porUf = produtorRural.refNFP.ufs as Readonly<Record<string, { readonly vedadaDesde: string }>>;\n const cUfSigla = Object.keys(porUf).find((k) => ufPorSigla(k)?.cUF === nfp.cUF);\n const vedadaDesde = cUfSigla ? (porUf[cUfSigla]?.vedadaDesde ?? '') : produtorRural.refNFP.modelo04.vedadaDesde;\n if (nfp.AAMM >= vedadaDesde) {\n issues.add(\n `${path}.refNFP.AAMM`,\n 'referencia_vedada',\n `nota de produtor modelo 04 emitida em ${nfp.AAMM}, depois do fim do modelo (${vedadaDesde}; ${produtorRural.refNFP.modelo04.fonte})`,\n );\n }\n }\n const doc = documento(nfp as DocumentoPessoa, `${path}.refNFP`, issues);\n return {\n refNFP: {\n cUF: nfp.cUF,\n AAMM: nfp.AAMM,\n ...doc,\n IE: nfp.IE,\n mod: nfp.mod,\n serie: String(Number(nfp.serie)),\n nNF: String(Number(nfp.nNF)),\n },\n } as TNFe_infNFe_ide_NFref;\n}\n\n/**\n * Texto com caractere que o XML não representa vira ocorrência com o caminho do campo, em vez de falhar no parse do\n * documento montado. Os textos da entrada já foram conferidos com o caminho dela (`conferirTextosDaEntrada`): aqui só\n * sobra o que veio das opções da montagem.\n */\nfunction textosForaDoXml(value: unknown, path: string, issues: Issues): void {\n if (typeof value === 'string') {\n if (!textoXmlValido(value)) issues.montagem(path, 'campo_invalido', 'texto com caractere não permitido em XML');\n } else if (Array.isArray(value)) {\n for (const [n, v] of value.entries()) textosForaDoXml(v, `${path}[${n}]`, issues);\n } else if (typeof value === 'object' && value !== null) {\n for (const [k, v] of Object.entries(value)) textosForaDoXml(v, `${path}.${k}`, issues);\n }\n}\n\ninterface ItemMontado {\n readonly det: TNFe_infNFe_det;\n readonly icms: IcmsTotais;\n readonly indTot: boolean;\n readonly issqn: boolean;\n readonly faturamentoDireto: boolean;\n readonly v: Record<\n | 'vProd'\n | 'vFrete'\n | 'vSeg'\n | 'vDesc'\n | 'vOutro'\n | 'vII'\n | 'vIPI'\n | 'vIPIDevol'\n | 'vPIS'\n | 'vCOFINS'\n | 'vPISST'\n | 'vCOFINSST'\n | 'vFCPUFDest'\n | 'vICMSUFDest'\n | 'vICMSUFRemet'\n | 'vTotTrib'\n | 'vISSQN'\n | 'vBCISS',\n Decimal\n >;\n readonly temUfDest: boolean;\n readonly temTotTrib: boolean;\n readonly issqnOpcionais: Record<string, Decimal>;\n}\n\nfunction montarItem(ctx: Ctx, item: Item, n: number, normal: boolean, semIe: boolean): ItemMontado {\n const path = `itens[${n}]`;\n const p = item.produto;\n const pp = `${path}.produto`;\n const qCom = ctx.req(p.qCom, `${pp}.qCom`, D1104V);\n const vUnCom = ctx.req(p.vUnCom, `${pp}.vUnCom`, D1110V);\n // RV I11 (rejeição 629) só vale para a NF-e normal (finNFe 1); nas demais o vProd informado prevalece.\n const vProd = (normal ? ctx.calc : ctx.base).call(ctx, p.vProd, qCom.times(vUnCom), `${pp}.vProd`, D1302, 'produto');\n const uTrib = p.uTrib ?? p.uCom;\n const qTrib = p.qTrib === undefined ? qCom : ctx.req(p.qTrib, `${pp}.qTrib`, D1104V);\n let vUnTrib: Decimal;\n if (p.vUnTrib !== undefined) vUnTrib = ctx.req(p.vUnTrib, `${pp}.vUnTrib`, D1110V);\n else if (uTrib === p.uCom && qTrib.eq(qCom)) vUnTrib = vUnCom;\n else if (qTrib.isZero()) vUnTrib = Decimal.ZERO;\n else vUnTrib = vProd.dividedBy(qTrib, 10, ctx.modes.produto);\n // RV I11 (rejeição 630), só na NF-e normal: vProd confere também com qTrib × vUnTrib, com a tolerância da nota (*4).\n if (normal) {\n const trib = ctx.round(qTrib.times(vUnTrib), D1302, 'produto');\n if (trib.minus(vProd).abs().gt(TOLERANCIA)) {\n ctx.issues.add(\n `${pp}.vUnTrib`,\n 'valor_divergente',\n `qTrib × vUnTrib (${trib.toFixed(2)}) difere de vProd (${vProd.toFixed(2)}) em mais de ${TOLERANCIA.toString()}`,\n );\n }\n }\n // Campos TDec_1302Opc: zero informado é aceito e omitido do XML (o pattern não aceita zero).\n const opt = (v: typeof p.vFrete, k: string): Decimal => ctx.opt(v, `${pp}.${k}`, D1302) ?? Decimal.ZERO;\n const vFrete = opt(p.vFrete, 'vFrete');\n const vSeg = opt(p.vSeg, 'vSeg');\n const vDesc = opt(p.vDesc, 'vDesc');\n const vOutro = opt(p.vOutro, 'vOutro');\n const vOp = vProd.plus(vFrete).plus(vSeg).plus(vOutro).minus(vDesc);\n const cEAN = p.cEAN ?? SEM_GTIN;\n const especifico = p.especifico ?? {};\n const prod = clean({\n cProd: p.cProd,\n cEAN,\n cBarra: p.cBarra,\n xProd: p.xProd,\n NCM: digits(p.NCM),\n NVE: p.NVE as string[] | undefined,\n CEST: p.CEST === undefined ? undefined : digits(p.CEST),\n indEscala: p.indEscala,\n CNPJFab: p.CNPJFab,\n cBenef: p.cBenef,\n gCred: p.gCred,\n tpCredPresIBSZFM: p.tpCredPresIBSZFM,\n EXTIPI: p.EXTIPI,\n CFOP: digits(p.CFOP),\n uCom: p.uCom,\n qCom: ctx.s(qCom, D1104V),\n vUnCom: ctx.s(vUnCom, D1110V),\n vProd: ctx.s(vProd, D1302),\n cEANTrib: p.cEANTrib ?? cEAN,\n cBarraTrib: p.cBarraTrib,\n uTrib,\n qTrib: ctx.s(qTrib, D1104V),\n vUnTrib: ctx.s(vUnTrib, D1110V),\n vFrete: ctx.so(vFrete, D1302_OPC),\n vSeg: ctx.so(vSeg, D1302_OPC),\n vDesc: ctx.so(vDesc, D1302_OPC),\n vOutro: ctx.so(vOutro, D1302_OPC),\n indTot: p.indTot ?? '1',\n indBemMovelUsado: p.indBemMovelUsado,\n DI: p.DI,\n detExport: p.detExport,\n xPed: p.xPed,\n nItemPed: p.nItemPed,\n nFCI: p.nFCI,\n rastro: p.rastro,\n infProdNFF: p.infProdNFF,\n infProdEmb: p.infProdEmb,\n ...especifico,\n }) as unknown as TNFe_infNFe_det_prod;\n\n const imp = item.impostos;\n const ip = `${path}.impostos`;\n const imposto: Record<string, unknown> = {};\n const z = Decimal.ZERO;\n const v: ItemMontado['v'] = {\n vProd,\n vFrete,\n vSeg,\n vDesc,\n vOutro,\n vII: z,\n vIPI: z,\n vIPIDevol: z,\n vPIS: z,\n vCOFINS: z,\n vPISST: z,\n vCOFINSST: z,\n vFCPUFDest: z,\n vICMSUFDest: z,\n vICMSUFRemet: z,\n vTotTrib: z,\n vISSQN: z,\n vBCISS: z,\n };\n let issqnOpcionais: Record<string, Decimal> = {};\n const vTotTrib = ctx.opt(imp.vTotTrib, `${ip}.vTotTrib`, D1302);\n if (vTotTrib !== undefined) {\n imposto.vTotTrib = ctx.s(vTotTrib, D1302);\n v.vTotTrib = vTotTrib;\n }\n if (imp.icms !== undefined && imp.issqn !== undefined) {\n ctx.issues.add(ip, 'combinacao_invalida', 'o item tem ICMS ou ISSQN, nunca os dois');\n }\n if (imp.ipi !== undefined) {\n const r = buildIpi(ctx, imp.ipi, vOp, `${ip}.ipi`);\n imposto.IPI = r.grupo;\n v.vIPI = r.vIPI;\n }\n let icms = zeroIcmsTotais();\n if (imp.icms !== undefined) {\n const r = buildIcms(ctx, imp.icms, { vOp, vIPI: v.vIPI }, `${ip}.icms`);\n imposto.ICMS = r.grupo;\n icms = r.totais;\n } else if (imp.issqn === undefined && imp.ibsCbs === undefined && !semIe) {\n // 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\n // IBS/CBS sai como a 162, no caminho dele.\n ctx.issues.add(`${ip}.icms`, 'campo_obrigatorio', 'o item precisa de ICMS (ou ISSQN, na NF-e conjugada)');\n }\n if (imp.ii !== undefined) {\n const r = buildIi(ctx, imp.ii, `${ip}.ii`);\n imposto.II = r.grupo;\n v.vII = r.vII;\n }\n if (imp.issqn !== undefined) {\n const r = buildIssqn(ctx, imp.issqn, `${ip}.issqn`);\n imposto.ISSQN = r.grupo;\n v.vISSQN = r.vISSQN;\n v.vBCISS = r.vBC;\n issqnOpcionais = r.opcionais;\n }\n if (imp.pis !== undefined) {\n const r = buildPisCofins(ctx, imp.pis, 'PIS', `${ip}.pis`);\n imposto.PIS = r.grupo;\n v.vPIS = r.valor;\n }\n if (imp.pisSt !== undefined) {\n const r = buildPisCofinsSt(ctx, imp.pisSt, 'PIS', `${ip}.pisSt`);\n imposto.PISST = r.grupo;\n if (r.soma) v.vPISST = r.valor;\n }\n if (imp.cofins !== undefined) {\n const r = buildPisCofins(ctx, imp.cofins, 'COFINS', `${ip}.cofins`);\n imposto.COFINS = r.grupo;\n v.vCOFINS = r.valor;\n }\n if (imp.cofinsSt !== undefined) {\n const r = buildPisCofinsSt(ctx, imp.cofinsSt, 'COFINS', `${ip}.cofinsSt`);\n imposto.COFINSST = r.grupo;\n if (r.soma) v.vCOFINSST = r.valor;\n }\n if (imp.icmsUfDest !== undefined) {\n const r = buildIcmsUfDest(ctx, imp.icmsUfDest, `${ip}.icmsUfDest`);\n imposto.ICMSUFDest = r.grupo;\n v.vFCPUFDest = r.vFCPUFDest;\n v.vICMSUFDest = r.vICMSUFDest;\n v.vICMSUFRemet = r.vICMSUFRemet;\n }\n if (imp.is !== undefined) imposto.IS = imp.is;\n if (imp.ibsCbs?.grupo !== undefined) imposto.IBSCBS = imp.ibsCbs.grupo;\n\n const det: Record<string, unknown> = {\n nItem: String(n + 1),\n prod,\n imposto: imposto as unknown as TNFe_infNFe_det_imposto,\n };\n if (item.impostoDevol !== undefined) {\n const pDevol = ctx.req(item.impostoDevol.pDevol, `${path}.impostoDevol.pDevol`, D0302);\n const vIPIDevol = ctx.req(item.impostoDevol.vIPIDevol, `${path}.impostoDevol.vIPIDevol`, D1302);\n det.impostoDevol = { pDevol: ctx.s(pDevol, D0302), IPI: { vIPIDevol: ctx.s(vIPIDevol, D1302) } };\n v.vIPIDevol = vIPIDevol;\n }\n if (item.infAdProd !== undefined) det.infAdProd = item.infAdProd;\n if (item.obsItem !== undefined) det.obsItem = item.obsItem;\n if (item.DFeReferenciado !== undefined) {\n const r = lerChaveAcesso(item.DFeReferenciado.chaveAcesso, { caminho: `${path}.DFeReferenciado.chaveAcesso` });\n if (!r.ok) ctx.issues.list.push(r.erro);\n det.DFeReferenciado = clean({\n chaveAcesso: r.ok ? r.valor.chave : item.DFeReferenciado.chaveAcesso,\n nItem: item.DFeReferenciado.nItem === undefined ? undefined : String(item.DFeReferenciado.nItem),\n });\n }\n return {\n det: det as unknown as TNFe_infNFe_det,\n icms,\n indTot: (p.indTot ?? '1') === '1',\n issqn: imp.issqn !== undefined,\n faturamentoDireto: (especifico as { veicProd?: { tpOp?: string } }).veicProd?.tpOp === '2',\n v,\n temUfDest: imp.icmsUfDest !== undefined,\n temTotTrib: vTotTrib !== undefined,\n issqnOpcionais,\n };\n}\n\n/** Parte do vItem/vNF comum aos dois (MOC W16-10 com NT 2020.005 e NT 2023.004; NT 2025.002 VB01-10 e VB01-20). */\nfunction composicao(m: ItemMontado, incluirProd: boolean): Decimal {\n const v = m.v;\n let total = (incluirProd ? v.vProd : Decimal.ZERO)\n .minus(v.vDesc)\n .minus(m.icms.vICMSDesonDeduz)\n .plus(v.vFrete)\n .plus(v.vSeg)\n .plus(v.vOutro)\n .plus(v.vII)\n .plus(v.vIPI)\n .plus(v.vPISST)\n .plus(v.vCOFINSST);\n if (!m.faturamentoDireto) {\n total = total.plus(m.icms.vST).plus(m.icms.vICMSMonoReten).plus(m.icms.vFCPST).plus(v.vIPIDevol);\n }\n return total;\n}\n\n/** Monta, calcula e valida. Nunca lança por dado do chamador: devolve as ocorrências. */\nexport async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Promise<ResultadoMontagemNfe> {\n const issues = new Issues();\n const finNFeIn = entrada.finNFe ?? '1';\n const mod = entrada.modelo ?? '55';\n if (mod !== '55' && mod !== '65') {\n issues.add('modelo', 'modelo_nao_suportado', `modelo ${String(mod)}: o builder monta NF-e (55) e NFC-e (65)`);\n return { ok: false, ocorrencias: issues.classificadas };\n }\n const nfce = mod === '65';\n // Padrões da identificação resolvidos uma vez: o mesmo valor vai para o ide e para a calculadora de IBS/CBS. A NFC-e\n // é presencial e para consumidor final (MOC 7.0 Anexo I, B25a-10 e B25b-20).\n const indPres = entrada.indPres ?? (nfce ? '1' : finNFeIn === '2' || finNFeIn === '3' ? '0' : '9');\n const indFinal = entrada.indFinal ?? (nfce || entrada.destinatario?.indIEDest === '9' ? '1' : '0');\n const ctx = new Ctx(issues, { ...MODES, ...opcoes.arredondamento }, finNFeIn !== '2' && finNFeIn !== '3');\n const pRedutorGov = entrada.gCompraGov && ctx.req(entrada.gCompraGov.pRedutor, 'gCompraGov.pRedutor', D0302A04);\n const emitUf = entrada.emitente.endereco.UF;\n if (!ehUf(emitUf)) {\n issues.add('emitente.endereco.UF', 'campo_invalido', 'UF do emitente inválida');\n return { ok: false, ocorrencias: issues.classificadas };\n }\n const cUF = ufPorSigla(emitUf)?.cUF ?? '';\n const offset = opcoes.deslocamentoMin ?? deslocamentoDaUf(emitUf);\n const agora = opcoes.tempo.emissao.agora();\n // Um instante de fato gerador por montagem: o mesmo vai para a calculadora e para a regra de composição do vItem.\n const fatoGerador = opcoes.tempo.fatoGerador.agora();\n const dhEmi = formatarDh(agora, offset);\n const aamm = dhEmi.slice(2, 4) + dhEmi.slice(5, 7);\n const tpAmb = tpAmbDoAmbiente(opcoes.ambiente);\n\n // PL vigente (ErroVigencia do schemas propaga: data fora de toda vigência é erro de configuração, não de dado).\n // O PL sai do mesmo instante do dhEmi: reler o relógio numa virada de vigência escolheria outro PL.\n const pl = escolherPl(opcoes.ambiente, relogioFixo(agora));\n\n // Emitente (grupo C)\n const e: Emitente = entrada.emitente;\n const emitDoc = documento(e, 'emitente', issues);\n const serie = Number(entrada.serie);\n const nNF = Number(entrada.nNF);\n if (!Number.isInteger(serie) || serie < 0 || serie > 999) issues.add('serie', 'serie_invalida', 'série de 0 a 999');\n if (!Number.isInteger(nNF) || nNF < 1 || nNF > 999_999_999)\n issues.add('nNF', 'campo_invalido', 'nNF de 1 a 999999999');\n const [cpfIni, cpfFim] = produtorRural.series.cpf as [number, number];\n const [cnpjIni, cnpjFim] = produtorRural.series.cnpj as [number, number];\n if ('CPF' in emitDoc && (serie < cpfIni || serie > cpfFim)) {\n issues.add(\n 'serie',\n 'serie_invalida',\n `emitente pessoa física usa as séries ${cpfIni} a ${cpfFim} (${produtorRural.series.fonte})`,\n );\n } else if ('CNPJ' in emitDoc && Number.isInteger(serie) && serie >= 0 && (serie < cnpjIni || serie > cnpjFim)) {\n issues.add(\n 'serie',\n 'serie_invalida',\n `emitente CNPJ usa as séries ${cnpjIni} a ${cnpjFim} (${produtorRural.series.fonteCnpj})`,\n );\n }\n const emit = clean({\n ...emitDoc,\n xNome: e.xNome,\n xFant: e.xFant,\n enderEmit: clean({ ...endereco(e.endereco), cPais: '1058', xPais: 'BRASIL' }),\n IE: ie(e.IE, emitUf, 'emitente.IE', issues, true),\n IEST: e.IEST,\n IM: e.IM,\n CNAE: e.CNAE,\n CRT: e.CRT,\n ISUFEmit: e.ISUFEmit,\n });\n\n // Destinatário (grupo E): obrigatório na NF-e (RV E01-10); na NFC-e, só na entrega a domicílio (E01-20, conferida\n // com as demais regras da NFC-e).\n const d: Destinatario | undefined = entrada.destinatario;\n let dest: Record<string, unknown> | undefined;\n let destUf: Uf | 'EX' | undefined;\n if (d === undefined) {\n if (!nfce) issues.add('destinatario', 'campo_obrigatorio', 'a NF-e exige o destinatário (E01-10, rejeição 719)');\n } else {\n const docDest =\n 'idEstrangeiro' in d && d.idEstrangeiro !== undefined\n ? { idEstrangeiro: d.idEstrangeiro }\n : documento(d as DocumentoPessoa, 'destinatario', issues);\n let enderDest: Record<string, string | undefined> | undefined;\n if (isExterior(d.endereco)) {\n destUf = 'EX';\n enderDest = clean({\n xLgr: d.endereco.xLgr,\n nro: d.endereco.nro,\n xCpl: d.endereco.xCpl,\n xBairro: d.endereco.xBairro,\n cMun: '9999999',\n xMun: 'EXTERIOR',\n UF: 'EX',\n cPais: d.endereco.cPais,\n xPais: d.endereco.xPais,\n fone: d.endereco.fone === undefined ? undefined : digits(d.endereco.fone),\n });\n } else if (d.endereco !== undefined) {\n destUf = d.endereco.UF;\n enderDest = clean({ ...endereco(d.endereco), cPais: '1058', xPais: 'BRASIL' });\n }\n // IE sem UF (endereço ausente) ou no exterior não é conferida aqui: a E05-10 e a E17-40 recusam a combinação.\n const destIe =\n d.IE !== undefined && destUf !== undefined && destUf !== 'EX'\n ? ie(d.IE, destUf, 'destinatario.IE', issues, false)\n : d.IE;\n dest = clean({\n ...docDest,\n xNome: opcoes.ambiente === 'homologacao' ? XNOME_HOMOLOGACAO : d.xNome,\n enderDest,\n indIEDest: d.indIEDest,\n IE: destIe,\n ISUF: d.ISUF,\n IM: d.IM,\n email: d.email,\n });\n }\n\n // Identificação: contingência e forma de emissão\n const cont = entrada.contingencia;\n const tpEmis = cont?.tpEmis ?? '1';\n if (cont !== undefined) {\n if (cont.xJust.length < 15 || cont.xJust.length > 256) {\n issues.add(\n 'contingencia.xJust',\n 'contingencia_invalida',\n 'justificativa da contingência com 15 a 256 caracteres',\n );\n }\n if (cont.dhCont.getTime() > agora.getTime()) {\n issues.add('contingencia.dhCont', 'contingencia_invalida', 'entrada em contingência posterior à emissão');\n }\n if (!nfce && tpEmis === '9' && (entrada.tpImp ?? '1') !== '6') {\n issues.add(\n 'contingencia.tpEmis',\n 'contingencia_invalida',\n '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)',\n );\n }\n if (nfce && (tpEmis === '6' || tpEmis === '7')) {\n issues.add(\n 'contingencia.tpEmis',\n 'contingencia_invalida',\n 'a NFC-e não é autorizada pela SVC; a contingência dela é off-line, tpEmis 9 (B22-70, rejeição 783)',\n );\n }\n }\n\n // Identificação que as regras do modelo conferem antes de montar.\n // Na NFC-e a operação é sempre interna (B11a-10, rejeição 707): o endereço do consumidor não a torna interestadual.\n const idDest =\n entrada.idDest ?? (nfce ? '1' : destUf === 'EX' ? '3' : destUf !== undefined && destUf !== emitUf ? '2' : '1');\n const tpImp = entrada.tpImp ?? (nfce ? '4' : '1');\n conferirDestinatario(\n entrada,\n {\n mod,\n tpNF: entrada.tpNF,\n idDest,\n idDestInformado: entrada.idDest !== undefined,\n indFinal,\n producao: opcoes.ambiente === 'producao',\n },\n issues,\n );\n if (nfce) {\n conferirNfce(\n entrada,\n {\n tpNF: entrada.tpNF,\n idDest,\n tpImp,\n finNFe: finNFeIn,\n indFinal,\n indPres,\n },\n issues,\n );\n } else if (tpImp === '4' || tpImp === '5') {\n issues.add('tpImp', 'campo_invalido', 'tpImp 4 e 5 (DANFC-e) são da NFC-e (B21-20, rejeição 710)');\n }\n // 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\n // (ZX02-220, rejeição 672) e com a URL da NFC-e da UF (ZX02-20, observação 3).\n const comQr = nfce || tpImp === '6';\n const qr: QrCodeNfceOpcoes = opcoes.qrCode ?? { versao: '3' };\n if (!nfce && comQr && qr.versao === '2') {\n issues.montagem(\n 'qrCode.versao',\n 'qrcode_invalido',\n 'a NF-e com DANFE Simplificado Tipo 2 usa só o QR Code versão 3 (ZX02-220, rejeição 672)',\n );\n }\n if (nfce && qr.versao === '2') {\n // O CSC e o idCSC são opções do montador, não da nota: as ocorrências são da montagem (ADR 0011).\n if (!/^\\d{1,6}$/.test(qr.idCSC) || Number(qr.idCSC) === 0) {\n issues.montagem(\n 'qrCode.idCSC',\n 'qrcode_invalido',\n 'idCSC tem de 1 a 6 algarismos, diferente de zero (Manual do DANFE NFC-e 6.0, 4.6)',\n );\n }\n if (qr.CSC.length < 16 || qr.CSC.length > 36) {\n issues.montagem(\n 'qrCode.CSC',\n 'qrcode_invalido',\n 'o CSC tem de 16 a 36 caracteres (Manual do DANFE NFC-e 6.0, 4.6)',\n );\n }\n if ('CPF' in emitDoc) {\n issues.montagem(\n 'qrCode.versao',\n 'qrcode_invalido',\n 'emitente pessoa física usa o QR Code versão 3 (NT 2025.001, ZX02-222, rejeição 444)',\n );\n }\n }\n\n // Chave de acesso e cNF\n const random =\n opcoes.aleatorio ??\n ((b: Uint8Array): Uint8Array => globalThis.crypto.getRandomValues(b as Uint8Array<ArrayBuffer>));\n const emitente14 = 'CNPJ' in emitDoc ? emitDoc.CNPJ : emitDoc.CPF;\n const gerada = issues.empty\n ? gerarChave(\n { cUF, aamm, emitente: emitente14, mod, serie: String(serie), nNF: String(nNF), tpEmis },\n entrada.cNF,\n random,\n issues,\n )\n : undefined;\n const chave = gerada?.chave ?? '0'.repeat(44);\n const cNF = gerada?.cNF ?? '00000000';\n const cDV = chave.slice(43);\n\n // Itens\n if (entrada.itens.length === 0 || entrada.itens.length > 990) {\n issues.add('itens', 'itens_limite', 'a NF-e tem de 1 a 990 itens');\n }\n const semIe = !nfce && entrada.emitente.IE === undefined;\n const itens = entrada.itens.map((it, n) => montarItem(ctx, it, n, finNFeIn === '1', semIe));\n // 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\n // E04-20: o builder a põe, e a descrição informada fica fora do XML de teste.\n const primeiro = itens[0];\n if (nfce && opcoes.ambiente === 'homologacao' && primeiro !== undefined) {\n (primeiro.det.prod as unknown as Record<string, unknown>).xProd = XPROD_HOMOLOGACAO_NFCE;\n }\n\n // IBS/CBS pela calculadora das opções, ou pelo motor do sinete\n const classificados = entrada.itens\n .map((it, n) => ({ it, n }))\n .filter(({ it }) => it.impostos.ibsCbs?.classificacao !== undefined);\n let aliquotasInformadas: readonly AliquotaIbsCbsInformada[] = [];\n if (classificados.length > 0) {\n const calculadora = opcoes.ibsCbs ?? calculadoraPadrao();\n const reqs: PedidoIbsCbsItem[] = classificados.map(({ it, n }) => {\n const c = it.impostos.ibsCbs?.classificacao as NonNullable<\n NonNullable<typeof it.impostos.ibsCbs>['classificacao']\n >;\n const m = itens[n] as ItemMontado;\n const vBC = ctx.opt(c.vBC, `itens[${n}].impostos.ibsCbs.classificacao.vBC`, D1302);\n const qTrib = Decimal.of((m.det.prod as { qTrib: string }).qTrib);\n return {\n nItem: n + 1,\n CST: c.CST,\n cClassTrib: c.cClassTrib,\n ...(c.indDoacao ? { indDoacao: c.indDoacao } : {}),\n ...(c.cCredPres ? { cCredPres: c.cCredPres } : {}),\n ...(c.gTribRegular ? { gTribRegular: c.gTribRegular } : {}),\n ...(vBC ? { vBC } : {}),\n NCM: (m.det.prod as { NCM: string }).NCM,\n CFOP: (m.det.prod as { CFOP: string }).CFOP,\n uTrib: (m.det.prod as { uTrib: string }).uTrib,\n qTrib,\n vProd: m.v.vProd,\n vDesc: m.v.vDesc,\n vFrete: m.v.vFrete,\n vSeg: m.v.vSeg,\n vOutro: m.v.vOutro,\n vICMS: m.icms.vICMS,\n vICMSST: m.icms.vST,\n vFCP: m.icms.vFCP,\n vFCPST: m.icms.vFCPST,\n vIPI: m.v.vIPI,\n vPIS: m.v.vPIS,\n vCOFINS: m.v.vCOFINS,\n vII: m.v.vII,\n vISSQN: m.v.vISSQN,\n vICMSUFDest: m.v.vICMSUFDest,\n vFCPUFDest: m.v.vFCPUFDest,\n };\n });\n const destino =\n entrada.entrega !== undefined\n ? { UF: entrada.entrega.UF, cMun: entrada.entrega.cMun }\n : d?.endereco !== undefined\n ? isExterior(d.endereco)\n ? { UF: 'EX' as const, cMun: '9999999' }\n : { UF: d.endereco.UF, cMun: d.endereco.cMun }\n : undefined;\n const compra = entrada.gCompraGov;\n const resp = await calculadora.calcular({\n nota: {\n fatoGerador,\n emissao: agora,\n ambiente: opcoes.ambiente,\n mod,\n tpNF: entrada.tpNF,\n finNFe: finNFeIn,\n ...(entrada.tpNFDebito ? { tpNFDebito: entrada.tpNFDebito } : {}),\n ...(entrada.tpNFCredito ? { tpNFCredito: entrada.tpNFCredito } : {}),\n indFinal,\n indPres,\n emitente: { UF: emitUf, cMun: e.endereco.cMun, CRT: e.CRT },\n ...(destino ? { destino } : {}),\n ...(entrada.cMunFGIBS ? { cMunFGIBS: entrada.cMunFGIBS } : {}),\n ...(compra && pRedutorGov\n ? {\n compraGov: {\n tpEnteGov: compra.tpEnteGov,\n pRedutor: pRedutorGov,\n tpOperGov: compra.tpOperGov,\n },\n }\n : {}),\n },\n itens: reqs,\n });\n issues.addAll(resp.ocorrencias ?? [], 'montagem');\n aliquotasInformadas = resp.aliquotasInformadas ?? [];\n // A calculadora que recusou já disse por quê: o grupo que faltar é consequência da ocorrência dela, e uma segunda\n // ocorrência por item repetiria a causa. `ibscbs_calculo` fica para a calculadora que omite um item sem explicar.\n const explicou = (resp.ocorrencias?.length ?? 0) > 0;\n for (const { n } of classificados) {\n const g = resp.itens.find((x) => x.nItem === n + 1);\n if (g === undefined) {\n if (!explicou)\n issues.montagem(\n `itens[${n}].impostos.ibsCbs`,\n 'ibscbs_calculo',\n 'a calculadora não devolveu o grupo IBSCBS do item',\n );\n continue;\n }\n ((itens[n] as ItemMontado).det.imposto as Record<string, unknown>).IBSCBS = g.IBSCBS;\n }\n }\n\n // Grupos repassados (IBSCBS pronto ou da calculadora, IS) chegam como texto: número malformado vira ocorrência antes\n // de qualquer soma, nunca exceção.\n itens.forEach((m, n) => {\n const imp = m.det.imposto as { IBSCBS?: unknown; IS?: unknown };\n const ib = `itens[${n}].impostos.ibsCbs`;\n const is = `itens[${n}].impostos.is`;\n // O IBSCBS pronto (ibsCbs.grupo) é da entrada; o que a calculadora devolveu é da montagem (ADR 0011).\n const ibsDaCalculadora = entrada.itens[n]?.impostos.ibsCbs?.grupo === undefined;\n const antes = issues.list.length;\n decimaisInvalidos(imp.IBSCBS, ib, issues);\n if (ibsDaCalculadora) issues.reclassificarDesde(antes, 'montagem');\n decimaisInvalidos(imp.IS, is, issues);\n if (issues.list.length === antes) {\n grupoInvalido(TTribNFeCt as ComplexType, 'IBSCBS', imp.IBSCBS, ib, issues);\n if (ibsDaCalculadora) issues.reclassificarDesde(antes, 'montagem');\n grupoInvalido(TISCt as ComplexType, 'IS', imp.IS, is, issues);\n }\n });\n // Texto e tamanho dos campos de texto pelo tipo do PL, com o caminho da entrada (ADR 0011); o campo que outra\n // conferência já recusou fica só com a ocorrência dela.\n // Em homologação, o nome do destinatário e, na NFC-e, a descrição do primeiro item são as literais da E04-20 e da I04-10:\n // o texto informado não vai ao XML.\n const substituidos =\n opcoes.ambiente === 'homologacao' ? ['destinatario.xNome', ...(nfce ? ['itens[0].produto.xProd'] : [])] : [];\n conferirTextosDaEntrada(entrada, pl.infNFe as ComplexType, issues, new Set(substituidos));\n // Nota sem IE do emitente (NT 2026.007, ADR 0012): conferida antes de parar nas ocorrências dos itens, para todas as\n // violações voltarem juntas.\n exclusivoIbsCbs(entrada, { nfce, dhEmi, instantes: [agora, fatoGerador] }, issues);\n if (!issues.empty) return { ok: false, ocorrencias: issues.classificadas };\n\n // Totais (grupo W)\n const gruposIbsCbs = itens\n .map((m) => (m.det.imposto as { IBSCBS?: TTribNFe }).IBSCBS)\n .filter((g): g is TTribNFe => g !== undefined);\n const somaTributosNoItem = diaBrasilia(fatoGerador) >= reforma.vItemSomaTributosDesde;\n let vNFTot = Decimal.ZERO;\n // vItem e vNFTot existem quando a nota tem tributo da reforma: IBS/CBS ou IS (NT 2025.002, VB01 e W60).\n const temReforma = gruposIbsCbs.length > 0 || itens.some((m) => (m.det.imposto as { IS?: unknown }).IS !== undefined);\n if (temReforma) {\n for (const m of itens) {\n let vItem = composicao(m, m.indTot);\n const g = (m.det.imposto as { IBSCBS?: TTribNFe }).IBSCBS;\n if (somaTributosNoItem) {\n // VB01-10: o vIS soma no item por si, com ou sem grupo IBSCBS no mesmo item.\n const is = (m.det.imposto as { IS?: { vIS?: string } }).IS?.vIS;\n if (is !== undefined) vItem = vItem.plus(Decimal.of(is));\n }\n if (g !== undefined && somaTributosNoItem) {\n const t = ibsCbsDoItem(g);\n vItem = vItem.plus(t.vIBS).plus(t.vCBS);\n if (!m.faturamentoDireto) vItem = vItem.plus(t.vTotIBSMonoItem).plus(t.vTotCBSMonoItem);\n }\n (m.det as Record<string, unknown>).vItem = ctx.s(vItem, D1302);\n vNFTot = vNFTot.plus(vItem);\n }\n }\n const soma = (f: (m: ItemMontado) => Decimal, filtro: (m: ItemMontado) => boolean = () => true): Decimal =>\n itens.filter(filtro).reduce((acc, m) => acc.plus(f(m)), Decimal.ZERO);\n const icmsItens = (m: ItemMontado): boolean => !m.issqn;\n const icmsSoma = (k: keyof IcmsTotais): Decimal => soma((m) => m.icms[k] as Decimal);\n const vProdTot = soma(\n (m) => m.v.vProd,\n (m) => m.indTot && !m.issqn,\n );\n const vServ = soma(\n (m) => m.v.vProd,\n (m) => m.indTot && m.issqn,\n );\n const vNF = itens.reduce((acc, m) => acc.plus(composicao(m, m.indTot && !m.issqn)), Decimal.ZERO).plus(vServ);\n const S = (x: Decimal): string => ctx.s(x, D1302);\n const mono = itens.some((m) => m.icms.mono);\n const ufDest = itens.some((m) => m.temUfDest);\n const ICMSTot = clean({\n vBC: S(icmsSoma('vBC')),\n vICMS: S(icmsSoma('vICMS')),\n vICMSDeson: S(icmsSoma('vICMSDeson')),\n vFCPUFDest: ufDest ? S(soma((m) => m.v.vFCPUFDest)) : undefined,\n vICMSUFDest: ufDest ? S(soma((m) => m.v.vICMSUFDest)) : undefined,\n vICMSUFRemet: ufDest ? S(soma((m) => m.v.vICMSUFRemet)) : undefined,\n vFCP: S(icmsSoma('vFCP')),\n vBCST: S(icmsSoma('vBCST')),\n vST: S(icmsSoma('vST')),\n vFCPST: S(icmsSoma('vFCPST')),\n vFCPSTRet: S(icmsSoma('vFCPSTRet')),\n qBCMono: mono ? S(ctx.round(icmsSoma('qBCMono'), D1302, 'icms')) : undefined,\n vICMSMono: mono ? S(icmsSoma('vICMSMono')) : undefined,\n qBCMonoReten: mono ? S(ctx.round(icmsSoma('qBCMonoReten'), D1302, 'icms')) : undefined,\n vICMSMonoReten: mono ? S(icmsSoma('vICMSMonoReten')) : undefined,\n qBCMonoRet: mono ? S(ctx.round(icmsSoma('qBCMonoRet'), D1302, 'icms')) : undefined,\n vICMSMonoRet: mono ? S(icmsSoma('vICMSMonoRet')) : undefined,\n vProd: S(vProdTot),\n vFrete: S(soma((m) => m.v.vFrete)),\n vSeg: S(soma((m) => m.v.vSeg)),\n vDesc: S(soma((m) => m.v.vDesc)),\n vII: S(soma((m) => m.v.vII)),\n vIPI: S(soma((m) => m.v.vIPI)),\n vIPIDevol: S(soma((m) => m.v.vIPIDevol)),\n vPIS: S(soma((m) => m.v.vPIS, icmsItens)),\n vCOFINS: S(soma((m) => m.v.vCOFINS, icmsItens)),\n vOutro: S(soma((m) => m.v.vOutro)),\n vNF: S(vNF),\n vTotTrib: itens.some((m) => m.temTotTrib) ? S(soma((m) => m.v.vTotTrib)) : undefined,\n }) as TNFe_infNFe_total_ICMSTot;\n const total: Record<string, unknown> = { ICMSTot };\n if (itens.some((m) => m.issqn)) {\n const iss = itens.filter((m) => m.issqn);\n const so = (x: Decimal): string | undefined => ctx.so(x, D1302_OPC);\n const opc = (k: string): string | undefined =>\n so(iss.reduce((a, m) => a.plus(m.issqnOpcionais[k] ?? Decimal.ZERO), Decimal.ZERO));\n total.ISSQNtot = clean({\n vServ: so(vServ),\n vBC: so(\n soma(\n (m) => m.v.vBCISS,\n (m) => m.issqn,\n ),\n ),\n vISS: so(\n soma(\n (m) => m.v.vISSQN,\n (m) => m.issqn,\n ),\n ),\n vPIS: so(\n soma(\n (m) => m.v.vPIS,\n (m) => m.issqn,\n ),\n ),\n vCOFINS: so(\n soma(\n (m) => m.v.vCOFINS,\n (m) => m.issqn,\n ),\n ),\n dCompet: dhEmi.slice(0, 10),\n vDeducao: opc('vDeducao'),\n vOutro: opc('vOutro'),\n vDescIncond: opc('vDescIncond'),\n vDescCond: opc('vDescCond'),\n vISSRet: opc('vISSRet'),\n }) as TNFe_infNFe_total_ISSQNtot;\n }\n const comIs = itens.filter((m) => (m.det.imposto as { IS?: unknown }).IS !== undefined);\n if (comIs.length > 0) {\n total.ISTot = {\n vIS: S(\n comIs.reduce(\n (a, m) => a.plus(Decimal.of((m.det.imposto as { IS: { vIS?: string } }).IS.vIS ?? '0')),\n Decimal.ZERO,\n ),\n ),\n };\n }\n if (gruposIbsCbs.length > 0) total.IBSCBSTot = totalIbsCbs(gruposIbsCbs);\n if (temReforma) total.vNFTot = S(vNFTot);\n\n // Identificação (grupo B)\n const finNFe = finNFeIn;\n const ide = clean({\n cUF,\n cNF,\n natOp: entrada.natOp,\n mod,\n serie: String(serie),\n nNF: String(nNF),\n dhEmi,\n dhSaiEnt: entrada.dhSaiEnt === undefined ? undefined : formatarDh(entrada.dhSaiEnt, offset),\n dPrevEntrega: entrada.dPrevEntrega,\n tpNF: entrada.tpNF,\n idDest,\n cMunFG: entrada.cMunFG ?? e.endereco.cMun,\n cMunFGIBS: entrada.cMunFGIBS,\n tpImp,\n tpEmis,\n cDV,\n tpAmb,\n finNFe,\n tpNFDebito: entrada.tpNFDebito,\n tpNFCredito: entrada.tpNFCredito,\n indFinal,\n indPres,\n // NT 2020.006: indIntermed obrigatório com indPres 2, 3, 4 e 9.\n indIntermed: entrada.indIntermed ?? (['2', '3', '4', '9'].includes(indPres) ? '0' : undefined),\n procEmi: '0',\n verProc: opcoes.verProc ?? formatarVerProc('sinete', VERSAO_PACOTE),\n dhCont: cont === undefined ? undefined : formatarDh(cont.dhCont, offset),\n xJust: cont?.xJust,\n NFref: entrada.referenciadas?.map((r, n) => referencia(r, `referenciadas[${n}]`, issues)),\n gCompraGov:\n entrada.gCompraGov === undefined\n ? undefined\n : clean({\n tpEnteGov: entrada.gCompraGov.tpEnteGov,\n pRedutor: ctx.s(pRedutorGov ?? Decimal.ZERO, D0302A04),\n tpOperGov: entrada.gCompraGov.tpOperGov,\n refDFeAnt: entrada.gCompraGov.refDFeAnt as string[] | undefined,\n }),\n gPagAntecipado: entrada.gPagAntecipado === undefined ? undefined : { refNFe: [...entrada.gPagAntecipado] },\n });\n\n // Locais, autorizados, transporte, cobrança, pagamento, informações adicionais\n const local = (l: Local | undefined, path: string): Record<string, unknown> | undefined =>\n l === undefined\n ? undefined\n : clean({\n ...documento(l, path, issues),\n xNome: l.xNome,\n ...endereco(l),\n cPais: '1058',\n xPais: 'BRASIL',\n email: l.email,\n IE: l.IE,\n });\n if ((entrada.autXML?.length ?? 0) > 10) issues.add('autXML', 'campo_invalido', 'no máximo 10 autorizados');\n const autXML = entrada.autXML?.map((a, n) => documento(a, `autXML[${n}]`, issues));\n\n const tr = entrada.transporte;\n const transp: Record<string, unknown> = { modFrete: tr?.modFrete ?? '9' };\n if (tr?.transportador !== undefined) {\n const t = tr.transportador;\n const docT =\n t.CNPJ !== undefined || t.CPF !== undefined\n ? documento(t as DocumentoPessoa, 'transporte.transportador', issues)\n : {};\n transp.transporta = clean({ ...docT, xNome: t.xNome, IE: t.IE, xEnder: t.xEnder, xMun: t.xMun, UF: t.UF });\n }\n if (tr?.retTransp !== undefined) {\n const r = tr.retTransp;\n const vBCRet = ctx.req(r.vBCRet, 'transporte.retTransp.vBCRet', D1302);\n const pICMSRet = ctx.req(r.pICMSRet, 'transporte.retTransp.pICMSRet', D0302A04);\n const vICMSRet = ctx.calc(r.vICMSRet, vBCRet.percent(pICMSRet), 'transporte.retTransp.vICMSRet', D1302, 'icms');\n transp.retTransp = {\n vServ: S(ctx.req(r.vServ, 'transporte.retTransp.vServ', D1302)),\n vBCRet: S(vBCRet),\n pICMSRet: ctx.s(pICMSRet, D0302A04),\n vICMSRet: S(vICMSRet),\n CFOP: r.CFOP,\n cMunFG: r.cMunFG,\n };\n }\n if (tr?.veicTransp !== undefined) transp.veicTransp = tr.veicTransp;\n if (tr?.reboque !== undefined) transp.reboque = tr.reboque;\n if (tr?.vagao !== undefined) transp.vagao = tr.vagao;\n if (tr?.balsa !== undefined) transp.balsa = tr.balsa;\n if (tr?.volumes !== undefined) {\n transp.vol = tr.volumes.map((vol, n) =>\n clean({\n qVol: vol.qVol === undefined ? undefined : String(vol.qVol),\n esp: vol.esp,\n marca: vol.marca,\n nVol: vol.nVol,\n pesoL: ctx.so(ctx.opt(vol.pesoL, `transporte.volumes[${n}].pesoL`, D1203), D1203),\n pesoB: ctx.so(ctx.opt(vol.pesoB, `transporte.volumes[${n}].pesoB`, D1203), D1203),\n lacres: vol.lacres?.map((nLacre) => ({ nLacre })),\n }),\n );\n }\n\n let cobr: Record<string, unknown> | undefined;\n if (entrada.cobranca !== undefined) {\n const c = entrada.cobranca;\n cobr = {};\n if (c.fatura !== undefined) {\n const f = c.fatura;\n const vOrig = ctx.opt(f.vOrig, 'cobranca.fatura.vOrig', D1302);\n const vDescF = ctx.opt(f.vDesc, 'cobranca.fatura.vDesc', D1302);\n const vLiq =\n vOrig === undefined\n ? ctx.opt(f.vLiq, 'cobranca.fatura.vLiq', D1302)\n : ctx.calc(f.vLiq, vOrig.minus(vDescF ?? Decimal.ZERO), 'cobranca.fatura.vLiq', D1302, 'produto');\n cobr.fat = clean({\n nFat: f.nFat,\n vOrig: ctx.so(vOrig, D1302),\n vDesc: ctx.so(vDescF, D1302),\n vLiq: ctx.so(vLiq, D1302),\n });\n }\n if (c.duplicatas !== undefined) {\n if (c.duplicatas.length > 120) issues.add('cobranca.duplicatas', 'campo_invalido', 'no máximo 120 duplicatas');\n cobr.dup = c.duplicatas.map((dup, n) =>\n clean({\n // NT 2016.002: nDup sequencial com 3 dígitos.\n nDup: dup.nDup ?? String(n + 1).padStart(3, '0'),\n dVenc: dup.dVenc,\n vDup: ctx.s(ctx.req(dup.vDup, `cobranca.duplicatas[${n}].vDup`, D1302_OPC), D1302_OPC),\n }),\n );\n }\n }\n\n const pagIn = entrada.pagamento ?? { detPag: [{ tPag: '90' as const, vPag: '0' }] };\n const igualTotal = opcoes.pagamentoIgualTotal === true;\n if (igualTotal) {\n const unico = entrada.pagamento?.detPag.length === 1 ? entrada.pagamento.detPag[0] : undefined;\n if (unico === undefined) {\n issues.add('pagamento.detPag', 'pagamento_igual_total', 'pagamentoIgualTotal pede exatamente um detPag');\n } else if (unico.tPag === '90') {\n issues.add('pagamento.detPag[0].tPag', 'pagamento_igual_total', 'tPag 90 (sem pagamento) não recebe o total');\n }\n }\n const pag = clean({\n detPag: pagIn.detPag.map((p, n) =>\n clean({\n indPag: p.indPag,\n tPag: p.tPag,\n xPag: p.xPag,\n // Com pagamentoIgualTotal, o único pagamento é o total da nota, já calculado acima.\n vPag: igualTotal ? S(vNF) : S(ctx.req(p.vPag, `pagamento.detPag[${n}].vPag`, D1302)),\n dPag: p.dPag,\n CNPJPag: p.CNPJPag,\n UFPag: p.UFPag,\n card: p.card,\n }),\n ),\n vTroco: ctx.so(ctx.opt(pagIn.vTroco, 'pagamento.vTroco', D1302), D1302),\n }) as unknown as PagMontado;\n // Pagamentos e troco contra o vNF (W16), não o vNFTot: é o total que a YA03-10 (NT 2025.001 v1.03) e a YA09-10 (MOC 7.0\n // Anexo I) citam, e a NT 2025.002 (até a v1.51) não mudou essas regras nem o W16.\n if (nfce && entrada.pagamento !== undefined && entrada.pagamento.detPag.length > 0 && issues.empty) {\n pagamentoNfce(pag, vNF, issues);\n }\n // W16-40 (rejeição 750): acima do limite, a NFC-e identifica o destinatário por CNPJ, CPF ou idEstrangeiro.\n if (nfce && vNF.gt(Decimal.of(NFCE_LIMITE_SEM_DESTINATARIO)) && dest === undefined) {\n issues.add(\n 'destinatario',\n 'campo_obrigatorio',\n `NFC-e acima de R$ ${NFCE_LIMITE_SEM_DESTINATARIO} identifica o destinatário (W16-40, rejeição 750)`,\n );\n }\n const ia = entrada.informacoesAdicionais;\n const infAdic =\n ia === undefined || Object.values(ia).every((x) => x === undefined)\n ? undefined\n : clean({\n infAdFisco: ia.infAdFisco,\n infCpl: ia.infCpl,\n obsCont: ia.obsCont,\n obsFisco: ia.obsFisco,\n procRef: ia.procRef,\n });\n\n // Responsável técnico e CSRT (NT 2018.005), com a exigência por UF como dado\n const exig = { ...exigenciaRespTec(emitUf, opcoes.ambiente, agora), ...opcoes.exigencias };\n const rt = entrada.respTec ?? opcoes.respTec;\n let infRespTec: Record<string, unknown> | undefined;\n if (rt === undefined) {\n if (exig.infRespTec === 'obrigatorio') {\n issues.add('respTec', 'resp_tec_obrigatorio', `a UF ${emitUf} exige o responsável técnico (rejeição 972)`);\n }\n } else {\n const cnpjRt = lerCnpj(rt.CNPJ, { caminho: 'respTec.CNPJ' });\n if (!cnpjRt.ok) issues.list.push(cnpjRt.erro);\n infRespTec = {\n CNPJ: cnpjRt.ok ? cnpjRt.valor : rt.CNPJ,\n xContato: rt.xContato,\n email: rt.email,\n fone: digits(rt.fone),\n };\n if (rt.csrt !== undefined) {\n infRespTec.idCSRT = rt.csrt.idCSRT;\n infRespTec.hashCSRT = await hashCsrt(rt.csrt.CSRT, chave);\n } else if (exig.csrt === 'obrigatorio') {\n issues.add('respTec.csrt', 'csrt_obrigatorio', `a UF ${emitUf} exige idCSRT e hashCSRT (rejeição 975)`);\n }\n }\n\n const inf = clean({\n versao: '4.00',\n Id: `NFe${chave}`,\n ide,\n emit,\n dest,\n retirada: local(entrada.retirada, 'retirada'),\n entrega: local(entrada.entrega, 'entrega'),\n autXML,\n det: itens.map((m) => m.det),\n total,\n transp,\n cobr,\n pag,\n infIntermed: entrada.infIntermed,\n infAdic,\n exporta: entrada.exporta,\n compra: entrada.compra,\n cana: entrada.cana,\n infRespTec,\n agropecuario: entrada.agropecuario,\n }) as unknown as TNFe_infNFe;\n\n // Regras da SEFAZ que só dependem do documento (ADR 0012).\n cstComIsento(entrada, idDest, issues);\n if (!nfce) {\n cfopDeDevolucao(entrada, issues);\n cstComNaoContribuinte(entrada, { idDest, uf: emitUf }, issues);\n }\n vencimentos(entrada, { dhEmi, instante: agora }, issues);\n\n camposForaDoPl(pl.infNFe, inf, 'infNFe', pl.vigencia.pl, issues);\n textosForaDoXml(inf, 'infNFe', issues);\n if (!issues.empty) return { ok: false, ocorrencias: issues.classificadas };\n\n // Serialização canônica e validação estrita contra o schema do PL vigente, antes de qualquer assinatura.\n // O serializer recusa com ErroSerializacao o que não cabe no modelo (escolhas exclusivas informadas juntas, por\n // exemplo vagao e balsa): vira ocorrência com o caminho do XML, nunca exceção.\n let xml: string;\n try {\n xml = `<NFe xmlns=\"${NFE_NS}\">${serializar(pl.infNFe, 'infNFe', inf, NFE_NS)}</NFe>`;\n } catch (e) {\n if (!(e instanceof ErroSerializacao)) throw e;\n return {\n ok: false,\n ocorrencias: [{ caminho: e.caminho, code: 'schema', mensagem: e.message, origem: 'montagem' }],\n };\n }\n const doc = lerXml(xml);\n const infEl = primeiroFilho(doc.raiz, 'infNFe', NFE_NS);\n const schemaIssues = infEl === undefined ? [] : validar(pl.infNFe, infEl);\n if (schemaIssues.length > 0) {\n return {\n ok: false,\n ocorrencias: schemaIssues.map((i) => ({\n caminho: i.caminho,\n code: 'schema',\n mensagem: `${i.code}: ${i.mensagem}`,\n origem: 'montagem',\n })),\n };\n }\n let supl: NfceSupl | undefined;\n if (comQr) {\n // 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\n // de Brasília, também na NF-e Tipo 2.\n const tabela = urlsNfce(emitUf, opcoes.ambiente, diaBrasilia(agora));\n const urlQr = opcoes.urlQrCode ?? tabela.qrCode;\n const urlChave = opcoes.urlChave ?? tabela.urlChave;\n if (urlQr === undefined || !/^https?:\\/\\//i.test(urlQr)) {\n issues.montagem(\n 'urlQrCode',\n 'qrcode_invalido',\n `sem endereço completo do QR Code da NFC-e para ${emitUf} em ${opcoes.ambiente}: informe urlQrCode (data/nfce-urls.json)`,\n );\n }\n if (urlChave === undefined) {\n issues.montagem(\n 'urlChave',\n 'qrcode_invalido',\n `sem URL de consulta por chave da NFC-e para ${emitUf}: informe urlChave`,\n );\n }\n if (urlQr === undefined || urlChave === undefined || !issues.empty)\n return { ok: false, ocorrencias: issues.classificadas };\n const p = await parametrosQrCode(\n {\n chave,\n ambiente: opcoes.ambiente,\n tpEmis,\n dhEmi,\n vNF: (inf.total as { ICMSTot: { vNF: string } }).ICMSTot.vNF,\n ...(dest === undefined ? {} : { dest: dest as { CNPJ?: string; CPF?: string; idEstrangeiro?: string } }),\n xml,\n },\n qr,\n );\n supl = { versao: qr.versao, urlChave, base: `${urlQr.replace(/\\?+$/, '')}?p=`, ...p };\n // O infNFeSupl contra o schema antes de assinar (padrões do qrCode por versão, tamanho do urlChave). Na versão 3\n // off-line, com uma assinatura do tamanho da de uma chave RSA de 2048 bits no lugar da que o certificado ainda vai\n // fazer; o `comQrCode` confere de novo com a assinatura verdadeira.\n const suplIssues = conferirSupl(\n inserirSupl({ xml, nfce: supl } as NfeMontada, supl.assinar ? ASSINATURA_2048 : undefined),\n );\n if (suplIssues.length > 0) return { ok: false, ocorrencias: suplIssues };\n }\n return {\n ok: true,\n valor: {\n chave,\n id: `NFe${chave}`,\n cNF,\n cDV,\n mod,\n tpEmis,\n dhEmi,\n ...(supl === undefined ? {} : { nfce: supl }),\n pl: pl.vigencia,\n infNFe: inf,\n xml,\n ...(aliquotasInformadas.length === 0 ? {} : { aliquotasInformadas }),\n },\n };\n}\n\n/** Base64 de uma assinatura RSA de 2048 bits (256 bytes): a forma da assinatura do QR Code off-line na montagem. */\nconst ASSINATURA_2048 = codificarBase64(new Uint8Array(256));\n\n/** Ocorrências do `infNFeSupl` do XML contra o schema (`TNFe_infNFeSupl`), como de montagem. */\nfunction conferirSupl(xml: string): Ocorrencia[] {\n const el = primeiroFilho(lerXml(xml).raiz, 'infNFeSupl', NFE_NS);\n const erros = el === undefined ? [] : validar(TNFe_infNFeSupl as ComplexType, el);\n return erros.map((i) => ({\n caminho: i.caminho,\n code: 'schema',\n mensagem: `${i.code}: ${i.mensagem}`,\n origem: 'montagem',\n }));\n}\n\nconst escapeXml = (s: string): string => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n/**\n * 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\n * certificado que assina a nota; Manual do DANFE NFC-e 6.0, 4.4.2). `undefined` quando o QR Code não leva assinatura\n * (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\n * off-line (NT 2026.002).\n */\nexport async function assinaturaQrCode(nota: NfeMontada, assinador: Assinador): Promise<string | undefined> {\n return nota.nfce?.assinar === true ? assinarParametros(nota.nfce.parametros, assinador) : undefined;\n}\n\n/**\n * 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\n * para a assinatura. Na versão 3 em contingência off-line, informe a `assinatura` (`assinaturaQrCode`); nos demais\n * casos ela não existe (ZX02-330, rejeição 445; ZX02-334, rejeição 474). Para assinar em três fases (A3, HSM), passe\n * este texto ao `prepararAssinatura` do `@sinete/core/xml` com o `id` da nota. Na NF-e com outro tpImp, devolve o XML como\n * veio: ela não tem `infNFeSupl`.\n */\nexport function comQrCode(nota: NfeMontada, assinatura?: string): string {\n const xml = inserirSupl(nota, assinatura);\n // Com a assinatura verdadeira, o qrCode pode passar do tamanho que a montagem conferiu (chave maior que 2048 bits).\n if (assinatura !== undefined) {\n const issues = conferirSupl(xml);\n if (issues.length > 0) throw new ErroDeValidacao('o QR Code não passou no schema', issues);\n }\n return xml;\n}\n\nfunction inserirSupl(built: NfeMontada, assinatura: string | undefined): string {\n const s = built.nfce;\n if (s === undefined) {\n if (assinatura !== undefined)\n throw new ErroDeConfiguracao('esta NF-e não tem QR Code: só a NF-e com DANFE Simplificado Tipo 2 (tpImp 6) leva');\n return built.xml;\n }\n if (s.assinar && assinatura === undefined) {\n throw new ErroDeConfiguracao(\n 'contingência off-line com QR Code versão 3 precisa da assinatura (ZX02-334, rejeição 474)',\n );\n }\n if (!s.assinar && assinatura !== undefined) {\n throw new ErroDeConfiguracao('este QR Code não leva assinatura (ZX02-330, rejeição 445)');\n }\n const fim = '</NFe>';\n if (!built.xml.endsWith(fim)) throw new ErroDeConfiguracao('nota montada fora da forma esperada');\n const qrCode = `${s.base}${s.parametros}${assinatura === undefined ? '' : `|${assinatura}`}`;\n const supl = `<infNFeSupl><qrCode>${escapeXml(qrCode)}</qrCode><urlChave>${escapeXml(s.urlChave)}</urlChave></infNFeSupl>`;\n return built.xml.slice(0, -fim.length) + supl + fim;\n}\n\n/**\n * Assina a NF-e montada: na NFC-e, insere antes o `infNFeSupl` (`comQrCode`, com a assinatura do QR Code quando a\n * contingência off-line pede); depois, a `Signature` como último filho de `NFe`, tudo por splice, e devolve a string\n * final. É essa string que vai para a SEFAZ e para o banco; nada depois deve reparseá-la para reescrever.\n */\nexport async function assinarNfe(nota: NfeMontada, assinador: Assinador): Promise<string> {\n return assinarXml(comQrCode(nota, await assinaturaQrCode(nota, assinador)), { id: nota.id }, assinador);\n}\n",
|
|
5
|
+
"/**\n * Montagem da NF-e: entrada do domínio (`DadosNfe`) para o objeto tipado do `@sinete/schemas` no PL vigente, com os\n * derivados e os totais em decimal exato, a chave de acesso e as regras conferidas antes de qualquer serialização. A\n * saída é a string canônica de `<NFe>` ainda sem assinatura, já validada contra o schema; `assinarNfe` insere a\n * `Signature` por splice (ADR 0003) e nada mais toca nela.\n */\n\nimport type { Ambiente, Assinador, ContextoDeTempo, Ocorrencia, Uf } from '@sinete/core';\nimport {\n ErroDeConfiguracao,\n ErroDeValidacao,\n ehUf,\n formatarVerProc,\n relogioFixo,\n tpAmbDoAmbiente,\n ufPorSigla,\n} from '@sinete/core';\nimport { assinarXml, codificarBase64, lerXml, primeiroFilho } from '@sinete/core/xml';\nimport type { ComplexType, EntradaDeVigencia } from '@sinete/schemas';\nimport { ErroSerializacao, serializar, validar } from '@sinete/schemas';\nimport type {\n TNFe_infNFe,\n TNFe_infNFe_det,\n TNFe_infNFe_det_imposto,\n TNFe_infNFe_det_prod,\n TNFe_infNFe_ide_NFref,\n TNFe_infNFe_total_ICMSTot,\n TNFe_infNFe_total_ISSQNtot,\n TTribNFe,\n} from '@sinete/schemas/nfe/PL_010f';\nimport { TIS as TISCt, TNFe_infNFeSupl, TTribNFe as TTribNFeCt } from '@sinete/schemas/nfe/PL_010f';\nimport { lerChaveAcesso, lerCnpj, lerCpf, lerIe, montarChaveAcesso } from '@sinete/validators';\nimport arredondamento from '../data/arredondamento.json' with { type: 'json' };\nimport produtorRural from '../data/produtor-rural.json' with { type: 'json' };\nimport reforma from '../data/reforma.json' with { type: 'json' };\nimport respTecData from '../data/resp-tec.json' with { type: 'json' };\nimport type { RoundingMode } from '../decimal.ts';\nimport { Decimal } from '../decimal.ts';\nimport { D0302, D0302A04, D1104V, D1110V, D1203, D1302, D1302_OPC } from '../format.ts';\nimport { Issues } from '../issues.ts';\nimport type {\n DadosNfe,\n Destinatario,\n DocumentoPessoa,\n Emitente,\n Endereco,\n EnderecoExterior,\n Item,\n Local,\n Referenciada,\n ResponsavelTecnico,\n} from '../model.ts';\nimport type { AliquotaIbsCbsInformada, CalculadoraIbsCbs, PedidoIbsCbsItem } from '../ports.ts';\nimport { calculadoraIbsCbs } from '../rtc.ts';\nimport type { Instante } from '../time.ts';\nimport { deslocamentoDaUf, formatarDh } from '../time.ts';\nimport { VERSAO_PACOTE } from '../versao-gerada.ts';\nimport { conferirDestinatario } from './destinatario.ts';\nimport { decimaisInvalidos, grupoInvalido, ibsCbsDoItem, totalIbsCbs } from './ibscbs.ts';\nimport type { IcmsTotais } from './icms.ts';\nimport { buildIcms, zeroIcmsTotais } from './icms.ts';\nimport type { NfceSupl, PagMontado, QrCodeNfceOpcoes } from './nfce.ts';\nimport {\n assinarParametros,\n conferirNfce,\n NFCE_LIMITE_SEM_DESTINATARIO,\n pagamentoNfce,\n parametrosQrCode,\n urlsNfce,\n} from './nfce.ts';\nimport { camposForaDoPl, escolherPl } from './pl.ts';\nimport { cfopDeDevolucao, cstComIsento, cstComNaoContribuinte, exclusivoIbsCbs, vencimentos } from './rejeicoes.ts';\nimport { conferirTextosDaEntrada, textoXmlValido } from './textos.ts';\nimport { buildIcmsUfDest, buildIi, buildIpi, buildIssqn, buildPisCofins, buildPisCofinsSt } from './tributos.ts';\nimport type { Familia } from './values.ts';\nimport { Ctx, clean, digits, TOLERANCIA } from './values.ts';\n\nlet padrao: CalculadoraIbsCbs | undefined;\n\n/** A calculadora de IBS/CBS usada quando `opcoes.ibsCbs` não vem: o motor do sinete, criada uma vez por processo. */\nfunction calculadoraPadrao(): CalculadoraIbsCbs {\n padrao ??= calculadoraIbsCbs();\n return padrao;\n}\n\nexport const NFE_NS = 'http://www.portalfiscal.inf.br/nfe';\n\n/** Literal do nome do destinatário em homologação (MOC 7.0 Anexo I, RV E04-20, rejeição 598). */\nexport const XNOME_HOMOLOGACAO = 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL';\n\n/** Literal da descrição do primeiro item da NFC-e em homologação (MOC 7.0 Anexo I, RV I04-10, rejeição 373). */\nexport const XPROD_HOMOLOGACAO_NFCE = 'NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL';\n\nexport type ExigenciaRespTec = 'obrigatorio' | 'opcional';\n\nexport interface MontarNfeOpcoes {\n readonly ambiente: Ambiente;\n /** Relógio de emissão (dhEmi, PL vigente, CSRT) e de fato gerador (IBS/CBS). */\n readonly tempo: ContextoDeTempo;\n /**\n * Calculadora de IBS/CBS dos itens com `ibsCbs.classificacao`. Padrão: `calculadoraIbsCbs()`, o motor do sinete com o\n * dataset embarcado (importado na primeira nota que precisar dele) e as alíquotas oficiais. Informe outra para trocar\n * dataset, alíquotas, base ou regras, ou para calcular fora do sinete.\n */\n readonly ibsCbs?: CalculadoraIbsCbs;\n /** Fuso do emitente em minutos; padrão pela UF (`data/fusos.json`). */\n readonly deslocamentoMin?: number;\n /** Versão do aplicativo emissor (`verProc`); padrão `sinete <versão do @sinete/nfe>` (`formatarVerProc`). */\n readonly verProc?: string;\n /** Sobrepõe o modo de arredondamento de uma família (`data/arredondamento.json`). */\n readonly arredondamento?: Partial<Record<Familia, RoundingMode>>;\n /** Responsável técnico padrão (a software house), usado quando a nota não traz `respTec`. */\n readonly respTec?: ResponsavelTecnico;\n /** Sobrepõe a exigência de infRespTec e CSRT da tabela por UF (`data/resp-tec.json`). */\n readonly exigencias?: { readonly infRespTec?: ExigenciaRespTec; readonly csrt?: ExigenciaRespTec };\n /** Fonte de aleatoriedade para o cNF; padrão `crypto.getRandomValues`. */\n readonly aleatorio?: (bytes: Uint8Array) => Uint8Array;\n /**\n * O `vPag` do único `detPag` passa a ser o `vNF` calculado na mesma montagem, e o valor informado nele é ignorado.\n * Serve a quem recebe à vista o total da nota e não quer calcular o `vNF` antes de montar. Mais de um `detPag`,\n * nenhum, ou `tPag` 90 (sem pagamento) dão ocorrência `pagamento_igual_total`: não há como saber como repartir o\n * total, e a nota sem pagamento tem `vPag` zero.\n */\n readonly pagamentoIgualTotal?: boolean;\n /**\n * Só NFC-e (modelo 65): versão do QR Code. Padrão `{ versao: '3' }`, que dispensa o CSC (NT 2025.001). Com\n * `{ versao: '2', idCSC, CSC }`, o hash leva o CSC fornecido pela SEFAZ da UF, que nunca vai para o XML.\n */\n readonly qrCode?: QrCodeNfceOpcoes;\n /**\n * Só NFC-e: endereço da consulta via QR Code (sem o `?p=`). Padrão: o da UF do emitente no ambiente e na data de\n * emissão (`data/nfce-urls.json`, do Portal Nacional da NFC-e). AM e MA publicam o endereço sem o protocolo: lá, é\n * obrigatório.\n */\n readonly urlQrCode?: string;\n /** Só NFC-e: URL da consulta por chave de acesso (`urlChave`). Padrão: a da UF (`data/nfce-urls.json`). */\n readonly urlChave?: string;\n}\n\nexport interface NfeMontada {\n /** Chave de acesso (44 posições). */\n readonly chave: string;\n /** `Id` do `infNFe` (`NFe` + chave): é o que a assinatura referencia. */\n readonly id: string;\n readonly cNF: string;\n readonly cDV: string;\n /** 55 (NF-e) ou 65 (NFC-e). */\n readonly mod: '55' | '65';\n readonly tpEmis: string;\n readonly dhEmi: string;\n /**\n * NFC-e e NF-e com DANFE Simplificado Tipo 2 (tpImp 6, NT 2026.002): o `infNFeSupl` a acrescentar (`comQrCode`,\n * `assinarNfe`). Na versão 3 em contingência off-line, falta a assinatura dos parâmetros, que só o certificado faz\n * (`assinaturaQrCode`).\n */\n readonly nfce?: NfceSupl;\n /** Pacote de liberação usado (escolhido pela vigência). */\n readonly pl: EntradaDeVigencia;\n /** O objeto tipado, na forma do PL_010f (o mais novo que o pacote conhece). */\n readonly infNFe: TNFe_infNFe;\n /** `<NFe xmlns=\"...\">` com o `infNFe` canônico, sem assinatura, já validado contra o schema. */\n readonly xml: string;\n /**\n * Alíquotas do IBS/CBS que a calculadora usou vindas de quem integra (`comAliquotasInformadas`), e não da tabela\n * oficial do pacote, por item. Ausente quando todas foram oficiais. A montagem não recusa por isso: é o caminho para\n * emitir com uma alíquota já publicada antes de o pacote trazê-la. Guarde junto com a nota e alerte quem opera; em\n * produção, a alíquota informada é responsabilidade de quem a informou.\n */\n readonly aliquotasInformadas?: readonly AliquotaIbsCbsInformada[];\n}\n\nexport type ResultadoMontagemNfe =\n | { readonly ok: true; readonly valor: NfeMontada }\n | { readonly ok: false; readonly ocorrencias: readonly Ocorrencia[] };\n\nconst MODES: Record<Familia, RoundingMode> = Object.fromEntries(\n Object.entries(arredondamento.familias).map(([k, v]) => [k, v.modo as RoundingMode]),\n) as Record<Familia, RoundingMode>;\n\nconst SEM_GTIN = 'SEM GTIN';\nconst BRASILIA = -180;\n\nfunction diaBrasilia(d: Instante): string {\n return formatarDh(d, BRASILIA).slice(0, 10);\n}\n\n/** Exigência de infRespTec ou CSRT para a UF no ambiente e na data (tabela `data/resp-tec.json`). */\nexport function exigenciaRespTec(\n uf: Uf,\n ambiente: Ambiente,\n data: Instante,\n): { readonly infRespTec: ExigenciaRespTec; readonly csrt: ExigenciaRespTec } {\n const dia = diaBrasilia(data);\n const ufs = respTecData.ufs as Readonly<\n Record<string, { readonly csrt?: Record<string, string>; readonly infRespTec?: Record<string, string> }>\n >;\n const regra = Object.hasOwn(ufs, uf) ? ufs[uf] : undefined;\n const vale = (r: Record<string, string> | undefined, padrao: string): ExigenciaRespTec => {\n const desde = r?.[ambiente];\n if (desde !== undefined) return dia >= desde ? 'obrigatorio' : (padrao as ExigenciaRespTec);\n return padrao as ExigenciaRespTec;\n };\n return {\n infRespTec: vale(regra?.infRespTec, respTecData.padrao.infRespTec),\n csrt: vale(regra?.csrt, respTecData.padrao.csrt),\n };\n}\n\n/** `hashCSRT`: Base64(SHA-1(CSRT + chave de acesso)) (NT 2018.005, campo ZD09). */\nexport async function hashCsrt(csrt: string, chave: string): Promise<string> {\n const d = await globalThis.crypto.subtle.digest('SHA-1', new TextEncoder().encode(csrt + chave));\n return codificarBase64(new Uint8Array(d));\n}\n\n/** Normaliza CNPJ ou CPF, apontando a ocorrência do validador. */\nfunction documento(doc: DocumentoPessoa, path: string, issues: Issues): { CNPJ: string } | { CPF: string } {\n if (doc.CNPJ !== undefined) {\n const r = lerCnpj(doc.CNPJ, { caminho: `${path}.CNPJ` });\n if (!r.ok) issues.list.push(r.erro);\n return { CNPJ: r.ok ? r.valor : doc.CNPJ };\n }\n const r = lerCpf(doc.CPF ?? '', { caminho: `${path}.CPF` });\n if (!r.ok) issues.list.push(r.erro);\n return { CPF: r.ok ? r.valor : (doc.CPF ?? '') };\n}\n\nfunction ie(value: string | undefined, uf: Uf, path: string, issues: Issues, allowIsento: boolean): string | undefined {\n if (value === undefined) return undefined;\n const r = lerIe(value, uf, { caminho: path, aceitarIsento: allowIsento });\n if (!r.ok) {\n issues.list.push(r.erro);\n return value;\n }\n return r.valor.valor;\n}\n\nfunction endereco(e: Endereco): Record<string, string | undefined> {\n return {\n xLgr: e.xLgr,\n nro: e.nro,\n xCpl: e.xCpl,\n xBairro: e.xBairro,\n cMun: e.cMun,\n xMun: e.xMun,\n UF: e.UF,\n CEP: e.CEP === undefined ? undefined : digits(e.CEP),\n fone: e.fone === undefined ? undefined : digits(e.fone),\n };\n}\n\nfunction isExterior(e: Endereco | EnderecoExterior | undefined): e is EnderecoExterior {\n return e !== undefined && 'exterior' in e && e.exterior === true;\n}\n\n/** Gera um cNF de 8 dígitos que passa nas regras de emissão da chave (RV B03-10: fora das sequências e diferente do nNF). */\nfunction gerarChave(\n parts: { cUF: string; aamm: string; emitente: string; mod: string; serie: string; nNF: string; tpEmis: string },\n cNFInformado: string | undefined,\n random: (b: Uint8Array) => Uint8Array,\n issues: Issues,\n): { chave: string; cNF: string } | undefined {\n const tentar = (cNF: string): { chave: string; ok: boolean; issue?: Ocorrencia } => {\n const chave = montarChaveAcesso({ ...parts, cNF });\n const r = lerChaveAcesso(chave, { emissao: true, caminho: 'chave' });\n return r.ok ? { chave, ok: true } : { chave, ok: false, issue: r.erro };\n };\n if (cNFInformado !== undefined) {\n if (!/^\\d{8}$/.test(cNFInformado)) {\n issues.add('cNF', 'campo_invalido', 'cNF tem 8 algarismos');\n return undefined;\n }\n const r = tentar(cNFInformado);\n if (!r.ok && r.issue) {\n // O cNF informado recusado pela regra da chave é da entrada, no campo dela; outra parte da chave recusada aponta\n // a chave montada (a causa, se for da entrada, já apareceu no campo dela).\n const doCnf = r.issue.code === 'chave_cnf_invalido';\n issues.list.push({\n ...r.issue,\n caminho: doCnf ? 'cNF' : r.issue.caminho,\n code: 'chave_invalida',\n mensagem: `${r.issue.mensagem} (${r.issue.code})`,\n origem: doCnf ? 'entrada' : 'montagem',\n });\n }\n return r.ok ? { chave: r.chave, cNF: cNFInformado } : undefined;\n }\n for (let n = 0; n < 32; n++) {\n const b = random(new Uint8Array(4));\n const v = ((b[0] ?? 0) * 2 ** 24 + (b[1] ?? 0) * 2 ** 16 + (b[2] ?? 0) * 2 ** 8 + (b[3] ?? 0)) % 100_000_000;\n const cNF = String(v).padStart(8, '0');\n const r = tentar(cNF);\n if (r.ok) return { chave: r.chave, cNF };\n if (r.issue && r.issue.code !== 'chave_cnf_invalido') {\n // A chave com o cNF gerado aqui foi recusada por outra parte (UF, emitente, série): a ocorrência aponta a chave\n // montada; a causa, se for da entrada, já apareceu no campo dela.\n issues.list.push({\n ...r.issue,\n code: 'chave_invalida',\n mensagem: `${r.issue.mensagem} (${r.issue.code})`,\n origem: 'montagem',\n });\n return undefined;\n }\n }\n issues.montagem('cNF', 'chave_invalida', 'não foi possível gerar um cNF válido');\n return undefined;\n}\n\nfunction referencia(ref: Referenciada, path: string, issues: Issues): TNFe_infNFe_ide_NFref {\n const chave = (c: string, p: string): string => {\n const r = lerChaveAcesso(c, { caminho: p });\n if (!r.ok) issues.list.push(r.erro);\n return r.ok ? r.valor.chave : c;\n };\n if ('refNFe' in ref) return { refNFe: chave(ref.refNFe, `${path}.refNFe`) };\n if ('refNFeSig' in ref) {\n // Chave com o código numérico zerado para sigilo (NT 2022.003, BA02a): o DV é o da chave original, então a\n // conferência do DV não se aplica; confere-se a forma, o modelo 55 e o cNF zerado.\n const c = ref.refNFeSig.replace(/\\s/g, '').toUpperCase();\n if (!/^[0-9]{6}[0-9A-Z]{12}[0-9]{2}55[0-9]{22}$/.test(c) || c.slice(35, 43) !== '00000000') {\n issues.add(`${path}.refNFeSig`, 'chave_invalida', 'chave de NF-e (modelo 55) com o código numérico (cNF) zerado');\n }\n return { refNFeSig: c };\n }\n if ('refCTe' in ref) return { refCTe: chave(ref.refCTe, `${path}.refCTe`) };\n if ('refNF' in ref) return { refNF: ref.refNF };\n if ('refECF' in ref) return { refECF: ref.refECF };\n const nfp = ref.refNFP;\n // Nota de produtor em papel (modelo 04) extinta: só referência a nota emitida antes do fim na UF dela.\n if (nfp.mod === '04') {\n const porUf = produtorRural.refNFP.ufs as Readonly<Record<string, { readonly vedadaDesde: string }>>;\n const cUfSigla = Object.keys(porUf).find((k) => ufPorSigla(k)?.cUF === nfp.cUF);\n const vedadaDesde = cUfSigla ? (porUf[cUfSigla]?.vedadaDesde ?? '') : produtorRural.refNFP.modelo04.vedadaDesde;\n if (nfp.AAMM >= vedadaDesde) {\n issues.add(\n `${path}.refNFP.AAMM`,\n 'referencia_vedada',\n `nota de produtor modelo 04 emitida em ${nfp.AAMM}, depois do fim do modelo (${vedadaDesde}; ${produtorRural.refNFP.modelo04.fonte})`,\n );\n }\n }\n const doc = documento(nfp as DocumentoPessoa, `${path}.refNFP`, issues);\n return {\n refNFP: {\n cUF: nfp.cUF,\n AAMM: nfp.AAMM,\n ...doc,\n IE: nfp.IE,\n mod: nfp.mod,\n serie: String(Number(nfp.serie)),\n nNF: String(Number(nfp.nNF)),\n },\n } as TNFe_infNFe_ide_NFref;\n}\n\n/**\n * Texto com caractere que o XML não representa vira ocorrência com o caminho do campo, em vez de falhar no parse do\n * documento montado. Os textos da entrada já foram conferidos com o caminho dela (`conferirTextosDaEntrada`): aqui só\n * sobra o que veio das opções da montagem.\n */\nfunction textosForaDoXml(value: unknown, path: string, issues: Issues): void {\n if (typeof value === 'string') {\n if (!textoXmlValido(value)) issues.montagem(path, 'campo_invalido', 'texto com caractere não permitido em XML');\n } else if (Array.isArray(value)) {\n for (const [n, v] of value.entries()) textosForaDoXml(v, `${path}[${n}]`, issues);\n } else if (typeof value === 'object' && value !== null) {\n for (const [k, v] of Object.entries(value)) textosForaDoXml(v, `${path}.${k}`, issues);\n }\n}\n\ninterface ItemMontado {\n readonly det: TNFe_infNFe_det;\n readonly icms: IcmsTotais;\n readonly indTot: boolean;\n readonly issqn: boolean;\n readonly faturamentoDireto: boolean;\n readonly v: Record<\n | 'vProd'\n | 'vFrete'\n | 'vSeg'\n | 'vDesc'\n | 'vOutro'\n | 'vII'\n | 'vIPI'\n | 'vIPIDevol'\n | 'vPIS'\n | 'vCOFINS'\n | 'vPISST'\n | 'vCOFINSST'\n | 'vFCPUFDest'\n | 'vICMSUFDest'\n | 'vICMSUFRemet'\n | 'vTotTrib'\n | 'vISSQN'\n | 'vBCISS',\n Decimal\n >;\n readonly temUfDest: boolean;\n readonly temTotTrib: boolean;\n readonly issqnOpcionais: Record<string, Decimal>;\n}\n\nfunction montarItem(ctx: Ctx, item: Item, n: number, normal: boolean, semIe: boolean): ItemMontado {\n const path = `itens[${n}]`;\n const p = item.produto;\n const pp = `${path}.produto`;\n const qCom = ctx.req(p.qCom, `${pp}.qCom`, D1104V);\n const vUnCom = ctx.req(p.vUnCom, `${pp}.vUnCom`, D1110V);\n // RV I11 (rejeição 629) só vale para a NF-e normal (finNFe 1); nas demais o vProd informado prevalece.\n const vProd = (normal ? ctx.calc : ctx.base).call(ctx, p.vProd, qCom.times(vUnCom), `${pp}.vProd`, D1302, 'produto');\n const uTrib = p.uTrib ?? p.uCom;\n const qTrib = p.qTrib === undefined ? qCom : ctx.req(p.qTrib, `${pp}.qTrib`, D1104V);\n let vUnTrib: Decimal;\n if (p.vUnTrib !== undefined) vUnTrib = ctx.req(p.vUnTrib, `${pp}.vUnTrib`, D1110V);\n else if (uTrib === p.uCom && qTrib.eq(qCom)) vUnTrib = vUnCom;\n else if (qTrib.isZero()) vUnTrib = Decimal.ZERO;\n else vUnTrib = vProd.dividedBy(qTrib, 10, ctx.modes.produto);\n // RV I11 (rejeição 630), só na NF-e normal: vProd confere também com qTrib × vUnTrib, com a tolerância da nota (*4).\n if (normal) {\n const trib = ctx.round(qTrib.times(vUnTrib), D1302, 'produto');\n if (trib.minus(vProd).abs().gt(TOLERANCIA)) {\n ctx.issues.add(\n `${pp}.vUnTrib`,\n 'valor_divergente',\n `qTrib × vUnTrib (${trib.toFixed(2)}) difere de vProd (${vProd.toFixed(2)}) em mais de ${TOLERANCIA.toString()}`,\n );\n }\n }\n // Campos TDec_1302Opc: zero informado é aceito e omitido do XML (o pattern não aceita zero).\n const opt = (v: typeof p.vFrete, k: string): Decimal => ctx.opt(v, `${pp}.${k}`, D1302) ?? Decimal.ZERO;\n const vFrete = opt(p.vFrete, 'vFrete');\n const vSeg = opt(p.vSeg, 'vSeg');\n const vDesc = opt(p.vDesc, 'vDesc');\n const vOutro = opt(p.vOutro, 'vOutro');\n const vOp = vProd.plus(vFrete).plus(vSeg).plus(vOutro).minus(vDesc);\n const cEAN = p.cEAN ?? SEM_GTIN;\n const especifico = p.especifico ?? {};\n const prod = clean({\n cProd: p.cProd,\n cEAN,\n cBarra: p.cBarra,\n xProd: p.xProd,\n NCM: digits(p.NCM),\n NVE: p.NVE as string[] | undefined,\n CEST: p.CEST === undefined ? undefined : digits(p.CEST),\n indEscala: p.indEscala,\n CNPJFab: p.CNPJFab,\n cBenef: p.cBenef,\n gCred: p.gCred,\n tpCredPresIBSZFM: p.tpCredPresIBSZFM,\n EXTIPI: p.EXTIPI,\n CFOP: digits(p.CFOP),\n uCom: p.uCom,\n qCom: ctx.s(qCom, D1104V),\n vUnCom: ctx.s(vUnCom, D1110V),\n vProd: ctx.s(vProd, D1302),\n cEANTrib: p.cEANTrib ?? cEAN,\n cBarraTrib: p.cBarraTrib,\n uTrib,\n qTrib: ctx.s(qTrib, D1104V),\n vUnTrib: ctx.s(vUnTrib, D1110V),\n vFrete: ctx.so(vFrete, D1302_OPC),\n vSeg: ctx.so(vSeg, D1302_OPC),\n vDesc: ctx.so(vDesc, D1302_OPC),\n vOutro: ctx.so(vOutro, D1302_OPC),\n indTot: p.indTot ?? '1',\n indBemMovelUsado: p.indBemMovelUsado,\n DI: p.DI,\n detExport: p.detExport,\n xPed: p.xPed,\n nItemPed: p.nItemPed,\n nFCI: p.nFCI,\n rastro: p.rastro,\n infProdNFF: p.infProdNFF,\n infProdEmb: p.infProdEmb,\n ...especifico,\n }) as unknown as TNFe_infNFe_det_prod;\n\n const imp = item.impostos;\n const ip = `${path}.impostos`;\n const imposto: Record<string, unknown> = {};\n const z = Decimal.ZERO;\n const v: ItemMontado['v'] = {\n vProd,\n vFrete,\n vSeg,\n vDesc,\n vOutro,\n vII: z,\n vIPI: z,\n vIPIDevol: z,\n vPIS: z,\n vCOFINS: z,\n vPISST: z,\n vCOFINSST: z,\n vFCPUFDest: z,\n vICMSUFDest: z,\n vICMSUFRemet: z,\n vTotTrib: z,\n vISSQN: z,\n vBCISS: z,\n };\n let issqnOpcionais: Record<string, Decimal> = {};\n const vTotTrib = ctx.opt(imp.vTotTrib, `${ip}.vTotTrib`, D1302);\n if (vTotTrib !== undefined) {\n imposto.vTotTrib = ctx.s(vTotTrib, D1302);\n v.vTotTrib = vTotTrib;\n }\n if (imp.icms !== undefined && imp.issqn !== undefined) {\n ctx.issues.add(ip, 'combinacao_invalida', 'o item tem ICMS ou ISSQN, nunca os dois');\n }\n if (imp.ipi !== undefined) {\n const r = buildIpi(ctx, imp.ipi, vOp, `${ip}.ipi`);\n imposto.IPI = r.grupo;\n v.vIPI = r.vIPI;\n }\n let icms = zeroIcmsTotais();\n if (imp.icms !== undefined) {\n const r = buildIcms(ctx, imp.icms, { vOp, vIPI: v.vIPI }, `${ip}.icms`);\n imposto.ICMS = r.grupo;\n icms = r.totais;\n } else if (imp.issqn === undefined && imp.ibsCbs === undefined && !semIe) {\n // 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\n // IBS/CBS sai como a 162, no caminho dele.\n ctx.issues.add(`${ip}.icms`, 'campo_obrigatorio', 'o item precisa de ICMS (ou ISSQN, na NF-e conjugada)');\n }\n if (imp.ii !== undefined) {\n const r = buildIi(ctx, imp.ii, `${ip}.ii`);\n imposto.II = r.grupo;\n v.vII = r.vII;\n }\n if (imp.issqn !== undefined) {\n const r = buildIssqn(ctx, imp.issqn, `${ip}.issqn`);\n imposto.ISSQN = r.grupo;\n v.vISSQN = r.vISSQN;\n v.vBCISS = r.vBC;\n issqnOpcionais = r.opcionais;\n }\n if (imp.pis !== undefined) {\n const r = buildPisCofins(ctx, imp.pis, 'PIS', `${ip}.pis`);\n imposto.PIS = r.grupo;\n v.vPIS = r.valor;\n }\n if (imp.pisSt !== undefined) {\n const r = buildPisCofinsSt(ctx, imp.pisSt, 'PIS', `${ip}.pisSt`);\n imposto.PISST = r.grupo;\n if (r.soma) v.vPISST = r.valor;\n }\n if (imp.cofins !== undefined) {\n const r = buildPisCofins(ctx, imp.cofins, 'COFINS', `${ip}.cofins`);\n imposto.COFINS = r.grupo;\n v.vCOFINS = r.valor;\n }\n if (imp.cofinsSt !== undefined) {\n const r = buildPisCofinsSt(ctx, imp.cofinsSt, 'COFINS', `${ip}.cofinsSt`);\n imposto.COFINSST = r.grupo;\n if (r.soma) v.vCOFINSST = r.valor;\n }\n if (imp.icmsUfDest !== undefined) {\n const r = buildIcmsUfDest(ctx, imp.icmsUfDest, `${ip}.icmsUfDest`);\n imposto.ICMSUFDest = r.grupo;\n v.vFCPUFDest = r.vFCPUFDest;\n v.vICMSUFDest = r.vICMSUFDest;\n v.vICMSUFRemet = r.vICMSUFRemet;\n }\n if (imp.is !== undefined) imposto.IS = imp.is;\n if (imp.ibsCbs?.grupo !== undefined) imposto.IBSCBS = imp.ibsCbs.grupo;\n\n const det: Record<string, unknown> = {\n nItem: String(n + 1),\n prod,\n imposto: imposto as unknown as TNFe_infNFe_det_imposto,\n };\n if (item.impostoDevol !== undefined) {\n const pDevol = ctx.req(item.impostoDevol.pDevol, `${path}.impostoDevol.pDevol`, D0302);\n const vIPIDevol = ctx.req(item.impostoDevol.vIPIDevol, `${path}.impostoDevol.vIPIDevol`, D1302);\n det.impostoDevol = { pDevol: ctx.s(pDevol, D0302), IPI: { vIPIDevol: ctx.s(vIPIDevol, D1302) } };\n v.vIPIDevol = vIPIDevol;\n }\n if (item.infAdProd !== undefined) det.infAdProd = item.infAdProd;\n if (item.obsItem !== undefined) det.obsItem = item.obsItem;\n if (item.DFeReferenciado !== undefined) {\n const r = lerChaveAcesso(item.DFeReferenciado.chaveAcesso, { caminho: `${path}.DFeReferenciado.chaveAcesso` });\n if (!r.ok) ctx.issues.list.push(r.erro);\n det.DFeReferenciado = clean({\n chaveAcesso: r.ok ? r.valor.chave : item.DFeReferenciado.chaveAcesso,\n nItem: item.DFeReferenciado.nItem === undefined ? undefined : String(item.DFeReferenciado.nItem),\n });\n }\n return {\n det: det as unknown as TNFe_infNFe_det,\n icms,\n indTot: (p.indTot ?? '1') === '1',\n issqn: imp.issqn !== undefined,\n faturamentoDireto: (especifico as { veicProd?: { tpOp?: string } }).veicProd?.tpOp === '2',\n v,\n temUfDest: imp.icmsUfDest !== undefined,\n temTotTrib: vTotTrib !== undefined,\n issqnOpcionais,\n };\n}\n\n/** Parte do vItem/vNF comum aos dois (MOC W16-10 com NT 2020.005 e NT 2023.004; NT 2025.002 VB01-10 e VB01-20). */\nfunction composicao(m: ItemMontado, incluirProd: boolean): Decimal {\n const v = m.v;\n let total = (incluirProd ? v.vProd : Decimal.ZERO)\n .minus(v.vDesc)\n .minus(m.icms.vICMSDesonDeduz)\n .plus(v.vFrete)\n .plus(v.vSeg)\n .plus(v.vOutro)\n .plus(v.vII)\n .plus(v.vIPI)\n .plus(v.vPISST)\n .plus(v.vCOFINSST);\n if (!m.faturamentoDireto) {\n total = total.plus(m.icms.vST).plus(m.icms.vICMSMonoReten).plus(m.icms.vFCPST).plus(v.vIPIDevol);\n }\n return total;\n}\n\n/** Monta, calcula e valida. Nunca lança por dado do chamador: devolve as ocorrências. */\nexport async function montarNfe(entrada: DadosNfe, opcoes: MontarNfeOpcoes): Promise<ResultadoMontagemNfe> {\n const issues = new Issues();\n const finNFeIn = entrada.finNFe ?? '1';\n const mod = entrada.modelo ?? '55';\n if (mod !== '55' && mod !== '65') {\n issues.add('modelo', 'modelo_nao_suportado', `modelo ${String(mod)}: o builder monta NF-e (55) e NFC-e (65)`);\n return { ok: false, ocorrencias: issues.classificadas };\n }\n const nfce = mod === '65';\n // Padrões da identificação resolvidos uma vez: o mesmo valor vai para o ide e para a calculadora de IBS/CBS. A NFC-e\n // é presencial e para consumidor final (MOC 7.0 Anexo I, B25a-10 e B25b-20).\n // NF-e com DANFE Simplificado Tipo 2 (tpImp 6): parte das regras da NFC-e vale para ela (NT 2026.002 v1.11).\n const tipo2 = !nfce && entrada.tpImp === '6';\n // Na NFC-e e na Tipo 2 a operação é presencial ou entrega a domicílio (B25b-20, rejeição 717): o padrão é 1.\n const indPres = entrada.indPres ?? (nfce || tipo2 ? '1' : finNFeIn === '2' || finNFeIn === '3' ? '0' : '9');\n const indFinal = entrada.indFinal ?? (nfce || entrada.destinatario?.indIEDest === '9' ? '1' : '0');\n const ctx = new Ctx(issues, { ...MODES, ...opcoes.arredondamento }, finNFeIn !== '2' && finNFeIn !== '3');\n const pRedutorGov = entrada.gCompraGov && ctx.req(entrada.gCompraGov.pRedutor, 'gCompraGov.pRedutor', D0302A04);\n const emitUf = entrada.emitente.endereco.UF;\n if (!ehUf(emitUf)) {\n issues.add('emitente.endereco.UF', 'campo_invalido', 'UF do emitente inválida');\n return { ok: false, ocorrencias: issues.classificadas };\n }\n const cUF = ufPorSigla(emitUf)?.cUF ?? '';\n const offset = opcoes.deslocamentoMin ?? deslocamentoDaUf(emitUf);\n const agora = opcoes.tempo.emissao.agora();\n // Um instante de fato gerador por montagem: o mesmo vai para a calculadora e para a regra de composição do vItem.\n const fatoGerador = opcoes.tempo.fatoGerador.agora();\n const dhEmi = formatarDh(agora, offset);\n const aamm = dhEmi.slice(2, 4) + dhEmi.slice(5, 7);\n const tpAmb = tpAmbDoAmbiente(opcoes.ambiente);\n\n // PL vigente (ErroVigencia do schemas propaga: data fora de toda vigência é erro de configuração, não de dado).\n // O PL sai do mesmo instante do dhEmi: reler o relógio numa virada de vigência escolheria outro PL.\n const pl = escolherPl(opcoes.ambiente, relogioFixo(agora));\n\n // Emitente (grupo C)\n const e: Emitente = entrada.emitente;\n const emitDoc = documento(e, 'emitente', issues);\n const serie = Number(entrada.serie);\n const nNF = Number(entrada.nNF);\n if (!Number.isInteger(serie) || serie < 0 || serie > 999) issues.add('serie', 'serie_invalida', 'série de 0 a 999');\n if (!Number.isInteger(nNF) || nNF < 1 || nNF > 999_999_999)\n issues.add('nNF', 'campo_invalido', 'nNF de 1 a 999999999');\n const [cpfIni, cpfFim] = produtorRural.series.cpf as [number, number];\n const [cnpjIni, cnpjFim] = produtorRural.series.cnpj as [number, number];\n if ('CPF' in emitDoc && (serie < cpfIni || serie > cpfFim)) {\n issues.add(\n 'serie',\n 'serie_invalida',\n `emitente pessoa física usa as séries ${cpfIni} a ${cpfFim} (${produtorRural.series.fonte})`,\n );\n } else if ('CNPJ' in emitDoc && Number.isInteger(serie) && serie >= 0 && (serie < cnpjIni || serie > cnpjFim)) {\n issues.add(\n 'serie',\n 'serie_invalida',\n `emitente CNPJ usa as séries ${cnpjIni} a ${cnpjFim} (${produtorRural.series.fonteCnpj})`,\n );\n }\n const emit = clean({\n ...emitDoc,\n xNome: e.xNome,\n xFant: e.xFant,\n enderEmit: clean({ ...endereco(e.endereco), cPais: '1058', xPais: 'BRASIL' }),\n IE: ie(e.IE, emitUf, 'emitente.IE', issues, true),\n IEST: e.IEST,\n IM: e.IM,\n CNAE: e.CNAE,\n CRT: e.CRT,\n ISUFEmit: e.ISUFEmit,\n });\n\n // Destinatário (grupo E): obrigatório na NF-e (RV E01-10); na NFC-e, só na entrega a domicílio (E01-20, conferida\n // com as demais regras da NFC-e).\n const d: Destinatario | undefined = entrada.destinatario;\n let dest: Record<string, unknown> | undefined;\n let destUf: Uf | 'EX' | undefined;\n if (d === undefined) {\n if (!nfce) issues.add('destinatario', 'campo_obrigatorio', 'a NF-e exige o destinatário (E01-10, rejeição 719)');\n } else {\n const docDest =\n 'idEstrangeiro' in d && d.idEstrangeiro !== undefined\n ? { idEstrangeiro: d.idEstrangeiro }\n : documento(d as DocumentoPessoa, 'destinatario', issues);\n let enderDest: Record<string, string | undefined> | undefined;\n if (isExterior(d.endereco)) {\n destUf = 'EX';\n enderDest = clean({\n xLgr: d.endereco.xLgr,\n nro: d.endereco.nro,\n xCpl: d.endereco.xCpl,\n xBairro: d.endereco.xBairro,\n cMun: '9999999',\n xMun: 'EXTERIOR',\n UF: 'EX',\n cPais: d.endereco.cPais,\n xPais: d.endereco.xPais,\n fone: d.endereco.fone === undefined ? undefined : digits(d.endereco.fone),\n });\n } else if (d.endereco !== undefined) {\n destUf = d.endereco.UF;\n enderDest = clean({ ...endereco(d.endereco), cPais: '1058', xPais: 'BRASIL' });\n }\n // IE sem UF (endereço ausente) ou no exterior não é conferida aqui: a E05-10 e a E17-40 recusam a combinação.\n const destIe =\n d.IE !== undefined && destUf !== undefined && destUf !== 'EX'\n ? ie(d.IE, destUf, 'destinatario.IE', issues, false)\n : d.IE;\n dest = clean({\n ...docDest,\n xNome: opcoes.ambiente === 'homologacao' ? XNOME_HOMOLOGACAO : d.xNome,\n enderDest,\n indIEDest: d.indIEDest,\n IE: destIe,\n ISUF: d.ISUF,\n IM: d.IM,\n email: d.email,\n });\n }\n\n // Identificação: contingência e forma de emissão\n const cont = entrada.contingencia;\n const tpEmis = cont?.tpEmis ?? '1';\n if (cont !== undefined) {\n if (cont.xJust.length < 15 || cont.xJust.length > 256) {\n issues.add(\n 'contingencia.xJust',\n 'contingencia_invalida',\n 'justificativa da contingência com 15 a 256 caracteres',\n );\n }\n if (cont.dhCont.getTime() > agora.getTime()) {\n issues.add('contingencia.dhCont', 'contingencia_invalida', 'entrada em contingência posterior à emissão');\n }\n if (!nfce && tpEmis === '9' && (entrada.tpImp ?? '1') !== '6') {\n issues.add(\n 'contingencia.tpEmis',\n 'contingencia_invalida',\n '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)',\n );\n }\n if (nfce && (tpEmis === '6' || tpEmis === '7')) {\n issues.add(\n 'contingencia.tpEmis',\n 'contingencia_invalida',\n 'a NFC-e não é autorizada pela SVC; a contingência dela é off-line, tpEmis 9 (B22-70, rejeição 783)',\n );\n }\n }\n\n // Identificação que as regras do modelo conferem antes de montar.\n // Na NFC-e e na Tipo 2 a operação é sempre interna (B11a-10, rejeição 707): o endereço do consumidor não a torna\n // interestadual.\n const idDest =\n entrada.idDest ??\n (nfce || tipo2 ? '1' : destUf === 'EX' ? '3' : destUf !== undefined && destUf !== emitUf ? '2' : '1');\n const tpImp = entrada.tpImp ?? (nfce ? '4' : '1');\n conferirDestinatario(\n entrada,\n {\n mod,\n tpNF: entrada.tpNF,\n idDest,\n idDestInformado: entrada.idDest !== undefined,\n indFinal,\n producao: opcoes.ambiente === 'producao',\n },\n issues,\n );\n if (nfce || tipo2) {\n conferirNfce(\n entrada,\n {\n mod: nfce ? '65' : '55',\n tpNF: entrada.tpNF,\n idDest,\n tpImp,\n finNFe: finNFeIn,\n indFinal,\n indPres,\n },\n issues,\n );\n } else if (tpImp === '4' || tpImp === '5') {\n issues.add('tpImp', 'campo_invalido', 'tpImp 4 e 5 (DANFC-e) são da NFC-e (B21-20, rejeição 710)');\n }\n // 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\n // (ZX02-220, rejeição 672) e com a URL da NFC-e da UF (ZX02-20, observação 3).\n const comQr = nfce || tpImp === '6';\n const qr: QrCodeNfceOpcoes = opcoes.qrCode ?? { versao: '3' };\n if (!nfce && comQr && qr.versao === '2') {\n issues.montagem(\n 'qrCode.versao',\n 'qrcode_invalido',\n 'a NF-e com DANFE Simplificado Tipo 2 usa só o QR Code versão 3 (ZX02-220, rejeição 672)',\n );\n }\n if (nfce && qr.versao === '2') {\n // O CSC e o idCSC são opções do montador, não da nota: as ocorrências são da montagem (ADR 0011).\n if (!/^\\d{1,6}$/.test(qr.idCSC) || Number(qr.idCSC) === 0) {\n issues.montagem(\n 'qrCode.idCSC',\n 'qrcode_invalido',\n 'idCSC tem de 1 a 6 algarismos, diferente de zero (Manual do DANFE NFC-e 6.0, 4.6)',\n );\n }\n if (qr.CSC.length < 16 || qr.CSC.length > 36) {\n issues.montagem(\n 'qrCode.CSC',\n 'qrcode_invalido',\n 'o CSC tem de 16 a 36 caracteres (Manual do DANFE NFC-e 6.0, 4.6)',\n );\n }\n if ('CPF' in emitDoc) {\n issues.montagem(\n 'qrCode.versao',\n 'qrcode_invalido',\n 'emitente pessoa física usa o QR Code versão 3 (NT 2025.001, ZX02-222, rejeição 444)',\n );\n }\n }\n\n // Chave de acesso e cNF\n const random =\n opcoes.aleatorio ??\n ((b: Uint8Array): Uint8Array => globalThis.crypto.getRandomValues(b as Uint8Array<ArrayBuffer>));\n const emitente14 = 'CNPJ' in emitDoc ? emitDoc.CNPJ : emitDoc.CPF;\n const gerada = issues.empty\n ? gerarChave(\n { cUF, aamm, emitente: emitente14, mod, serie: String(serie), nNF: String(nNF), tpEmis },\n entrada.cNF,\n random,\n issues,\n )\n : undefined;\n const chave = gerada?.chave ?? '0'.repeat(44);\n const cNF = gerada?.cNF ?? '00000000';\n const cDV = chave.slice(43);\n\n // Itens\n if (entrada.itens.length === 0 || entrada.itens.length > 990) {\n issues.add('itens', 'itens_limite', 'a NF-e tem de 1 a 990 itens');\n }\n const semIe = !nfce && entrada.emitente.IE === undefined;\n const itens = entrada.itens.map((it, n) => montarItem(ctx, it, n, finNFeIn === '1', semIe));\n // Na NFC-e e na Tipo 2 (NT 2026.002) em homologação, a descrição do primeiro item é a literal da RV I04-10, como o\n // nome do destinatário da E04-20: o builder a põe, e a descrição informada fica fora do XML de teste.\n const primeiro = itens[0];\n if ((nfce || tipo2) && opcoes.ambiente === 'homologacao' && primeiro !== undefined) {\n (primeiro.det.prod as unknown as Record<string, unknown>).xProd = XPROD_HOMOLOGACAO_NFCE;\n }\n\n // IBS/CBS pela calculadora das opções, ou pelo motor do sinete\n const classificados = entrada.itens\n .map((it, n) => ({ it, n }))\n .filter(({ it }) => it.impostos.ibsCbs?.classificacao !== undefined);\n let aliquotasInformadas: readonly AliquotaIbsCbsInformada[] = [];\n if (classificados.length > 0) {\n const calculadora = opcoes.ibsCbs ?? calculadoraPadrao();\n const reqs: PedidoIbsCbsItem[] = classificados.map(({ it, n }) => {\n const c = it.impostos.ibsCbs?.classificacao as NonNullable<\n NonNullable<typeof it.impostos.ibsCbs>['classificacao']\n >;\n const m = itens[n] as ItemMontado;\n const vBC = ctx.opt(c.vBC, `itens[${n}].impostos.ibsCbs.classificacao.vBC`, D1302);\n const qTrib = Decimal.of((m.det.prod as { qTrib: string }).qTrib);\n return {\n nItem: n + 1,\n CST: c.CST,\n cClassTrib: c.cClassTrib,\n ...(c.indDoacao ? { indDoacao: c.indDoacao } : {}),\n ...(c.cCredPres ? { cCredPres: c.cCredPres } : {}),\n ...(c.gTribRegular ? { gTribRegular: c.gTribRegular } : {}),\n ...(vBC ? { vBC } : {}),\n NCM: (m.det.prod as { NCM: string }).NCM,\n CFOP: (m.det.prod as { CFOP: string }).CFOP,\n uTrib: (m.det.prod as { uTrib: string }).uTrib,\n qTrib,\n vProd: m.v.vProd,\n vDesc: m.v.vDesc,\n vFrete: m.v.vFrete,\n vSeg: m.v.vSeg,\n vOutro: m.v.vOutro,\n vICMS: m.icms.vICMS,\n vICMSST: m.icms.vST,\n vFCP: m.icms.vFCP,\n vFCPST: m.icms.vFCPST,\n vIPI: m.v.vIPI,\n vPIS: m.v.vPIS,\n vCOFINS: m.v.vCOFINS,\n vII: m.v.vII,\n vISSQN: m.v.vISSQN,\n vICMSUFDest: m.v.vICMSUFDest,\n vFCPUFDest: m.v.vFCPUFDest,\n };\n });\n const destino =\n entrada.entrega !== undefined\n ? { UF: entrada.entrega.UF, cMun: entrada.entrega.cMun }\n : d?.endereco !== undefined\n ? isExterior(d.endereco)\n ? { UF: 'EX' as const, cMun: '9999999' }\n : { UF: d.endereco.UF, cMun: d.endereco.cMun }\n : undefined;\n const compra = entrada.gCompraGov;\n const resp = await calculadora.calcular({\n nota: {\n fatoGerador,\n emissao: agora,\n ambiente: opcoes.ambiente,\n mod,\n tpNF: entrada.tpNF,\n finNFe: finNFeIn,\n ...(entrada.tpNFDebito ? { tpNFDebito: entrada.tpNFDebito } : {}),\n ...(entrada.tpNFCredito ? { tpNFCredito: entrada.tpNFCredito } : {}),\n indFinal,\n indPres,\n emitente: { UF: emitUf, cMun: e.endereco.cMun, CRT: e.CRT },\n ...(destino ? { destino } : {}),\n ...(entrada.cMunFGIBS ? { cMunFGIBS: entrada.cMunFGIBS } : {}),\n ...(compra && pRedutorGov\n ? {\n compraGov: {\n tpEnteGov: compra.tpEnteGov,\n pRedutor: pRedutorGov,\n tpOperGov: compra.tpOperGov,\n },\n }\n : {}),\n },\n itens: reqs,\n });\n issues.addAll(resp.ocorrencias ?? [], 'montagem');\n aliquotasInformadas = resp.aliquotasInformadas ?? [];\n // A calculadora que recusou já disse por quê: o grupo que faltar é consequência da ocorrência dela, e uma segunda\n // ocorrência por item repetiria a causa. `ibscbs_calculo` fica para a calculadora que omite um item sem explicar.\n const explicou = (resp.ocorrencias?.length ?? 0) > 0;\n for (const { n } of classificados) {\n const g = resp.itens.find((x) => x.nItem === n + 1);\n if (g === undefined) {\n if (!explicou)\n issues.montagem(\n `itens[${n}].impostos.ibsCbs`,\n 'ibscbs_calculo',\n 'a calculadora não devolveu o grupo IBSCBS do item',\n );\n continue;\n }\n ((itens[n] as ItemMontado).det.imposto as Record<string, unknown>).IBSCBS = g.IBSCBS;\n }\n }\n\n // Grupos repassados (IBSCBS pronto ou da calculadora, IS) chegam como texto: número malformado vira ocorrência antes\n // de qualquer soma, nunca exceção.\n itens.forEach((m, n) => {\n const imp = m.det.imposto as { IBSCBS?: unknown; IS?: unknown };\n const ib = `itens[${n}].impostos.ibsCbs`;\n const is = `itens[${n}].impostos.is`;\n // O IBSCBS pronto (ibsCbs.grupo) é da entrada; o que a calculadora devolveu é da montagem (ADR 0011).\n const ibsDaCalculadora = entrada.itens[n]?.impostos.ibsCbs?.grupo === undefined;\n const antes = issues.list.length;\n decimaisInvalidos(imp.IBSCBS, ib, issues);\n if (ibsDaCalculadora) issues.reclassificarDesde(antes, 'montagem');\n decimaisInvalidos(imp.IS, is, issues);\n if (issues.list.length === antes) {\n grupoInvalido(TTribNFeCt as ComplexType, 'IBSCBS', imp.IBSCBS, ib, issues);\n if (ibsDaCalculadora) issues.reclassificarDesde(antes, 'montagem');\n grupoInvalido(TISCt as ComplexType, 'IS', imp.IS, is, issues);\n }\n });\n // Texto e tamanho dos campos de texto pelo tipo do PL, com o caminho da entrada (ADR 0011); o campo que outra\n // conferência já recusou fica só com a ocorrência dela.\n // Em homologação, o nome do destinatário e, na NFC-e e na Tipo 2, a descrição do primeiro item são as literais da E04-20\n // e da I04-10: o texto informado não vai ao XML.\n const substituidos =\n opcoes.ambiente === 'homologacao'\n ? ['destinatario.xNome', ...(nfce || tipo2 ? ['itens[0].produto.xProd'] : [])]\n : [];\n conferirTextosDaEntrada(entrada, pl.infNFe as ComplexType, issues, new Set(substituidos));\n // Nota sem IE do emitente (NT 2026.007, ADR 0012): conferida antes de parar nas ocorrências dos itens, para todas as\n // violações voltarem juntas.\n exclusivoIbsCbs(entrada, { nfce, dhEmi, instantes: [agora, fatoGerador] }, issues);\n if (!issues.empty) return { ok: false, ocorrencias: issues.classificadas };\n\n // Totais (grupo W)\n const gruposIbsCbs = itens\n .map((m) => (m.det.imposto as { IBSCBS?: TTribNFe }).IBSCBS)\n .filter((g): g is TTribNFe => g !== undefined);\n const somaTributosNoItem = diaBrasilia(fatoGerador) >= reforma.vItemSomaTributosDesde;\n let vNFTot = Decimal.ZERO;\n // vItem e vNFTot existem quando a nota tem tributo da reforma: IBS/CBS ou IS (NT 2025.002, VB01 e W60).\n const temReforma = gruposIbsCbs.length > 0 || itens.some((m) => (m.det.imposto as { IS?: unknown }).IS !== undefined);\n if (temReforma) {\n for (const m of itens) {\n let vItem = composicao(m, m.indTot);\n const g = (m.det.imposto as { IBSCBS?: TTribNFe }).IBSCBS;\n if (somaTributosNoItem) {\n // VB01-10: o vIS soma no item por si, com ou sem grupo IBSCBS no mesmo item.\n const is = (m.det.imposto as { IS?: { vIS?: string } }).IS?.vIS;\n if (is !== undefined) vItem = vItem.plus(Decimal.of(is));\n }\n if (g !== undefined && somaTributosNoItem) {\n const t = ibsCbsDoItem(g);\n vItem = vItem.plus(t.vIBS).plus(t.vCBS);\n if (!m.faturamentoDireto) vItem = vItem.plus(t.vTotIBSMonoItem).plus(t.vTotCBSMonoItem);\n }\n (m.det as Record<string, unknown>).vItem = ctx.s(vItem, D1302);\n vNFTot = vNFTot.plus(vItem);\n }\n }\n const soma = (f: (m: ItemMontado) => Decimal, filtro: (m: ItemMontado) => boolean = () => true): Decimal =>\n itens.filter(filtro).reduce((acc, m) => acc.plus(f(m)), Decimal.ZERO);\n const icmsItens = (m: ItemMontado): boolean => !m.issqn;\n const icmsSoma = (k: keyof IcmsTotais): Decimal => soma((m) => m.icms[k] as Decimal);\n const vProdTot = soma(\n (m) => m.v.vProd,\n (m) => m.indTot && !m.issqn,\n );\n const vServ = soma(\n (m) => m.v.vProd,\n (m) => m.indTot && m.issqn,\n );\n const vNF = itens.reduce((acc, m) => acc.plus(composicao(m, m.indTot && !m.issqn)), Decimal.ZERO).plus(vServ);\n const S = (x: Decimal): string => ctx.s(x, D1302);\n const mono = itens.some((m) => m.icms.mono);\n const ufDest = itens.some((m) => m.temUfDest);\n const ICMSTot = clean({\n vBC: S(icmsSoma('vBC')),\n vICMS: S(icmsSoma('vICMS')),\n vICMSDeson: S(icmsSoma('vICMSDeson')),\n vFCPUFDest: ufDest ? S(soma((m) => m.v.vFCPUFDest)) : undefined,\n vICMSUFDest: ufDest ? S(soma((m) => m.v.vICMSUFDest)) : undefined,\n vICMSUFRemet: ufDest ? S(soma((m) => m.v.vICMSUFRemet)) : undefined,\n vFCP: S(icmsSoma('vFCP')),\n vBCST: S(icmsSoma('vBCST')),\n vST: S(icmsSoma('vST')),\n vFCPST: S(icmsSoma('vFCPST')),\n vFCPSTRet: S(icmsSoma('vFCPSTRet')),\n qBCMono: mono ? S(ctx.round(icmsSoma('qBCMono'), D1302, 'icms')) : undefined,\n vICMSMono: mono ? S(icmsSoma('vICMSMono')) : undefined,\n qBCMonoReten: mono ? S(ctx.round(icmsSoma('qBCMonoReten'), D1302, 'icms')) : undefined,\n vICMSMonoReten: mono ? S(icmsSoma('vICMSMonoReten')) : undefined,\n qBCMonoRet: mono ? S(ctx.round(icmsSoma('qBCMonoRet'), D1302, 'icms')) : undefined,\n vICMSMonoRet: mono ? S(icmsSoma('vICMSMonoRet')) : undefined,\n vProd: S(vProdTot),\n vFrete: S(soma((m) => m.v.vFrete)),\n vSeg: S(soma((m) => m.v.vSeg)),\n vDesc: S(soma((m) => m.v.vDesc)),\n vII: S(soma((m) => m.v.vII)),\n vIPI: S(soma((m) => m.v.vIPI)),\n vIPIDevol: S(soma((m) => m.v.vIPIDevol)),\n vPIS: S(soma((m) => m.v.vPIS, icmsItens)),\n vCOFINS: S(soma((m) => m.v.vCOFINS, icmsItens)),\n vOutro: S(soma((m) => m.v.vOutro)),\n vNF: S(vNF),\n vTotTrib: itens.some((m) => m.temTotTrib) ? S(soma((m) => m.v.vTotTrib)) : undefined,\n }) as TNFe_infNFe_total_ICMSTot;\n const total: Record<string, unknown> = { ICMSTot };\n if (itens.some((m) => m.issqn)) {\n const iss = itens.filter((m) => m.issqn);\n const so = (x: Decimal): string | undefined => ctx.so(x, D1302_OPC);\n const opc = (k: string): string | undefined =>\n so(iss.reduce((a, m) => a.plus(m.issqnOpcionais[k] ?? Decimal.ZERO), Decimal.ZERO));\n total.ISSQNtot = clean({\n vServ: so(vServ),\n vBC: so(\n soma(\n (m) => m.v.vBCISS,\n (m) => m.issqn,\n ),\n ),\n vISS: so(\n soma(\n (m) => m.v.vISSQN,\n (m) => m.issqn,\n ),\n ),\n vPIS: so(\n soma(\n (m) => m.v.vPIS,\n (m) => m.issqn,\n ),\n ),\n vCOFINS: so(\n soma(\n (m) => m.v.vCOFINS,\n (m) => m.issqn,\n ),\n ),\n dCompet: dhEmi.slice(0, 10),\n vDeducao: opc('vDeducao'),\n vOutro: opc('vOutro'),\n vDescIncond: opc('vDescIncond'),\n vDescCond: opc('vDescCond'),\n vISSRet: opc('vISSRet'),\n }) as TNFe_infNFe_total_ISSQNtot;\n }\n const comIs = itens.filter((m) => (m.det.imposto as { IS?: unknown }).IS !== undefined);\n if (comIs.length > 0) {\n total.ISTot = {\n vIS: S(\n comIs.reduce(\n (a, m) => a.plus(Decimal.of((m.det.imposto as { IS: { vIS?: string } }).IS.vIS ?? '0')),\n Decimal.ZERO,\n ),\n ),\n };\n }\n if (gruposIbsCbs.length > 0) total.IBSCBSTot = totalIbsCbs(gruposIbsCbs);\n if (temReforma) total.vNFTot = S(vNFTot);\n\n // Identificação (grupo B)\n const finNFe = finNFeIn;\n const ide = clean({\n cUF,\n cNF,\n natOp: entrada.natOp,\n mod,\n serie: String(serie),\n nNF: String(nNF),\n dhEmi,\n dhSaiEnt: entrada.dhSaiEnt === undefined ? undefined : formatarDh(entrada.dhSaiEnt, offset),\n dPrevEntrega: entrada.dPrevEntrega,\n tpNF: entrada.tpNF,\n idDest,\n cMunFG: entrada.cMunFG ?? e.endereco.cMun,\n cMunFGIBS: entrada.cMunFGIBS,\n tpImp,\n tpEmis,\n cDV,\n tpAmb,\n finNFe,\n tpNFDebito: entrada.tpNFDebito,\n tpNFCredito: entrada.tpNFCredito,\n indFinal,\n indPres,\n // NT 2020.006: indIntermed obrigatório com indPres 2, 3, 4 e 9.\n indIntermed: entrada.indIntermed ?? (['2', '3', '4', '9'].includes(indPres) ? '0' : undefined),\n procEmi: '0',\n verProc: opcoes.verProc ?? formatarVerProc('sinete', VERSAO_PACOTE),\n dhCont: cont === undefined ? undefined : formatarDh(cont.dhCont, offset),\n xJust: cont?.xJust,\n NFref: entrada.referenciadas?.map((r, n) => referencia(r, `referenciadas[${n}]`, issues)),\n gCompraGov:\n entrada.gCompraGov === undefined\n ? undefined\n : clean({\n tpEnteGov: entrada.gCompraGov.tpEnteGov,\n pRedutor: ctx.s(pRedutorGov ?? Decimal.ZERO, D0302A04),\n tpOperGov: entrada.gCompraGov.tpOperGov,\n refDFeAnt: entrada.gCompraGov.refDFeAnt as string[] | undefined,\n }),\n gPagAntecipado: entrada.gPagAntecipado === undefined ? undefined : { refNFe: [...entrada.gPagAntecipado] },\n });\n\n // Locais, autorizados, transporte, cobrança, pagamento, informações adicionais\n const local = (l: Local | undefined, path: string): Record<string, unknown> | undefined =>\n l === undefined\n ? undefined\n : clean({\n ...documento(l, path, issues),\n xNome: l.xNome,\n ...endereco(l),\n cPais: '1058',\n xPais: 'BRASIL',\n email: l.email,\n IE: l.IE,\n });\n if ((entrada.autXML?.length ?? 0) > 10) issues.add('autXML', 'campo_invalido', 'no máximo 10 autorizados');\n const autXML = entrada.autXML?.map((a, n) => documento(a, `autXML[${n}]`, issues));\n\n const tr = entrada.transporte;\n const transp: Record<string, unknown> = { modFrete: tr?.modFrete ?? '9' };\n if (tr?.transportador !== undefined) {\n const t = tr.transportador;\n const docT =\n t.CNPJ !== undefined || t.CPF !== undefined\n ? documento(t as DocumentoPessoa, 'transporte.transportador', issues)\n : {};\n transp.transporta = clean({ ...docT, xNome: t.xNome, IE: t.IE, xEnder: t.xEnder, xMun: t.xMun, UF: t.UF });\n }\n if (tr?.retTransp !== undefined) {\n const r = tr.retTransp;\n const vBCRet = ctx.req(r.vBCRet, 'transporte.retTransp.vBCRet', D1302);\n const pICMSRet = ctx.req(r.pICMSRet, 'transporte.retTransp.pICMSRet', D0302A04);\n const vICMSRet = ctx.calc(r.vICMSRet, vBCRet.percent(pICMSRet), 'transporte.retTransp.vICMSRet', D1302, 'icms');\n transp.retTransp = {\n vServ: S(ctx.req(r.vServ, 'transporte.retTransp.vServ', D1302)),\n vBCRet: S(vBCRet),\n pICMSRet: ctx.s(pICMSRet, D0302A04),\n vICMSRet: S(vICMSRet),\n CFOP: r.CFOP,\n cMunFG: r.cMunFG,\n };\n }\n if (tr?.veicTransp !== undefined) transp.veicTransp = tr.veicTransp;\n if (tr?.reboque !== undefined) transp.reboque = tr.reboque;\n if (tr?.vagao !== undefined) transp.vagao = tr.vagao;\n if (tr?.balsa !== undefined) transp.balsa = tr.balsa;\n if (tr?.volumes !== undefined) {\n transp.vol = tr.volumes.map((vol, n) =>\n clean({\n qVol: vol.qVol === undefined ? undefined : String(vol.qVol),\n esp: vol.esp,\n marca: vol.marca,\n nVol: vol.nVol,\n pesoL: ctx.so(ctx.opt(vol.pesoL, `transporte.volumes[${n}].pesoL`, D1203), D1203),\n pesoB: ctx.so(ctx.opt(vol.pesoB, `transporte.volumes[${n}].pesoB`, D1203), D1203),\n lacres: vol.lacres?.map((nLacre) => ({ nLacre })),\n }),\n );\n }\n\n let cobr: Record<string, unknown> | undefined;\n if (entrada.cobranca !== undefined) {\n const c = entrada.cobranca;\n cobr = {};\n if (c.fatura !== undefined) {\n const f = c.fatura;\n const vOrig = ctx.opt(f.vOrig, 'cobranca.fatura.vOrig', D1302);\n const vDescF = ctx.opt(f.vDesc, 'cobranca.fatura.vDesc', D1302);\n const vLiq =\n vOrig === undefined\n ? ctx.opt(f.vLiq, 'cobranca.fatura.vLiq', D1302)\n : ctx.calc(f.vLiq, vOrig.minus(vDescF ?? Decimal.ZERO), 'cobranca.fatura.vLiq', D1302, 'produto');\n cobr.fat = clean({\n nFat: f.nFat,\n vOrig: ctx.so(vOrig, D1302),\n vDesc: ctx.so(vDescF, D1302),\n vLiq: ctx.so(vLiq, D1302),\n });\n }\n if (c.duplicatas !== undefined) {\n if (c.duplicatas.length > 120) issues.add('cobranca.duplicatas', 'campo_invalido', 'no máximo 120 duplicatas');\n cobr.dup = c.duplicatas.map((dup, n) =>\n clean({\n // NT 2016.002: nDup sequencial com 3 dígitos.\n nDup: dup.nDup ?? String(n + 1).padStart(3, '0'),\n dVenc: dup.dVenc,\n vDup: ctx.s(ctx.req(dup.vDup, `cobranca.duplicatas[${n}].vDup`, D1302_OPC), D1302_OPC),\n }),\n );\n }\n }\n\n const pagIn = entrada.pagamento ?? { detPag: [{ tPag: '90' as const, vPag: '0' }] };\n const igualTotal = opcoes.pagamentoIgualTotal === true;\n if (igualTotal) {\n const unico = entrada.pagamento?.detPag.length === 1 ? entrada.pagamento.detPag[0] : undefined;\n if (unico === undefined) {\n issues.add('pagamento.detPag', 'pagamento_igual_total', 'pagamentoIgualTotal pede exatamente um detPag');\n } else if (unico.tPag === '90') {\n issues.add('pagamento.detPag[0].tPag', 'pagamento_igual_total', 'tPag 90 (sem pagamento) não recebe o total');\n }\n }\n const pag = clean({\n detPag: pagIn.detPag.map((p, n) =>\n clean({\n indPag: p.indPag,\n tPag: p.tPag,\n xPag: p.xPag,\n // Com pagamentoIgualTotal, o único pagamento é o total da nota, já calculado acima.\n vPag: igualTotal ? S(vNF) : S(ctx.req(p.vPag, `pagamento.detPag[${n}].vPag`, D1302)),\n dPag: p.dPag,\n CNPJPag: p.CNPJPag,\n UFPag: p.UFPag,\n card: p.card,\n }),\n ),\n vTroco: ctx.so(ctx.opt(pagIn.vTroco, 'pagamento.vTroco', D1302), D1302),\n }) as unknown as PagMontado;\n // Pagamentos e troco contra o vNF (W16), não o vNFTot: é o total que a YA03-10 (NT 2025.001 v1.03) e a YA09-10 (MOC 7.0\n // Anexo I) citam, e a NT 2025.002 (até a v1.51) não mudou essas regras nem o W16.\n if (nfce && entrada.pagamento !== undefined && entrada.pagamento.detPag.length > 0 && issues.empty) {\n pagamentoNfce(pag, vNF, issues);\n }\n // W16-40 (rejeição 750): acima do limite, a NFC-e identifica o destinatário por CNPJ, CPF ou idEstrangeiro.\n // Na Tipo 2 a W16-40 não tem o que conferir: a NF-e sempre identifica o destinatário (E01-10, rejeição 719).\n if (nfce && vNF.gt(Decimal.of(NFCE_LIMITE_SEM_DESTINATARIO)) && dest === undefined) {\n issues.add(\n 'destinatario',\n 'campo_obrigatorio',\n `NFC-e acima de R$ ${NFCE_LIMITE_SEM_DESTINATARIO} identifica o destinatário (W16-40, rejeição 750)`,\n );\n }\n const ia = entrada.informacoesAdicionais;\n const infAdic =\n ia === undefined || Object.values(ia).every((x) => x === undefined)\n ? undefined\n : clean({\n infAdFisco: ia.infAdFisco,\n infCpl: ia.infCpl,\n obsCont: ia.obsCont,\n obsFisco: ia.obsFisco,\n procRef: ia.procRef,\n });\n\n // Responsável técnico e CSRT (NT 2018.005), com a exigência por UF como dado\n const exig = { ...exigenciaRespTec(emitUf, opcoes.ambiente, agora), ...opcoes.exigencias };\n const rt = entrada.respTec ?? opcoes.respTec;\n let infRespTec: Record<string, unknown> | undefined;\n if (rt === undefined) {\n if (exig.infRespTec === 'obrigatorio') {\n issues.add('respTec', 'resp_tec_obrigatorio', `a UF ${emitUf} exige o responsável técnico (rejeição 972)`);\n }\n } else {\n const cnpjRt = lerCnpj(rt.CNPJ, { caminho: 'respTec.CNPJ' });\n if (!cnpjRt.ok) issues.list.push(cnpjRt.erro);\n infRespTec = {\n CNPJ: cnpjRt.ok ? cnpjRt.valor : rt.CNPJ,\n xContato: rt.xContato,\n email: rt.email,\n fone: digits(rt.fone),\n };\n if (rt.csrt !== undefined) {\n infRespTec.idCSRT = rt.csrt.idCSRT;\n infRespTec.hashCSRT = await hashCsrt(rt.csrt.CSRT, chave);\n } else if (exig.csrt === 'obrigatorio') {\n issues.add('respTec.csrt', 'csrt_obrigatorio', `a UF ${emitUf} exige idCSRT e hashCSRT (rejeição 975)`);\n }\n }\n\n const inf = clean({\n versao: '4.00',\n Id: `NFe${chave}`,\n ide,\n emit,\n dest,\n retirada: local(entrada.retirada, 'retirada'),\n entrega: local(entrada.entrega, 'entrega'),\n autXML,\n det: itens.map((m) => m.det),\n total,\n transp,\n cobr,\n pag,\n infIntermed: entrada.infIntermed,\n infAdic,\n exporta: entrada.exporta,\n compra: entrada.compra,\n cana: entrada.cana,\n infRespTec,\n agropecuario: entrada.agropecuario,\n }) as unknown as TNFe_infNFe;\n\n // Regras da SEFAZ que só dependem do documento (ADR 0012).\n cstComIsento(entrada, idDest, issues);\n if (!nfce) {\n cfopDeDevolucao(entrada, issues);\n cstComNaoContribuinte(entrada, { idDest, uf: emitUf }, issues);\n }\n vencimentos(entrada, { dhEmi, instante: agora }, issues);\n\n camposForaDoPl(pl.infNFe, inf, 'infNFe', pl.vigencia.pl, issues);\n textosForaDoXml(inf, 'infNFe', issues);\n if (!issues.empty) return { ok: false, ocorrencias: issues.classificadas };\n\n // Serialização canônica e validação estrita contra o schema do PL vigente, antes de qualquer assinatura.\n // O serializer recusa com ErroSerializacao o que não cabe no modelo (escolhas exclusivas informadas juntas, por\n // exemplo vagao e balsa): vira ocorrência com o caminho do XML, nunca exceção.\n let xml: string;\n try {\n xml = `<NFe xmlns=\"${NFE_NS}\">${serializar(pl.infNFe, 'infNFe', inf, NFE_NS)}</NFe>`;\n } catch (e) {\n if (!(e instanceof ErroSerializacao)) throw e;\n return {\n ok: false,\n ocorrencias: [{ caminho: e.caminho, code: 'schema', mensagem: e.message, origem: 'montagem' }],\n };\n }\n const doc = lerXml(xml);\n const infEl = primeiroFilho(doc.raiz, 'infNFe', NFE_NS);\n const schemaIssues = infEl === undefined ? [] : validar(pl.infNFe, infEl);\n if (schemaIssues.length > 0) {\n return {\n ok: false,\n ocorrencias: schemaIssues.map((i) => ({\n caminho: i.caminho,\n code: 'schema',\n mensagem: `${i.code}: ${i.mensagem}`,\n origem: 'montagem',\n })),\n };\n }\n let supl: NfceSupl | undefined;\n if (comQr) {\n // 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\n // de Brasília, também na NF-e Tipo 2.\n const tabela = urlsNfce(emitUf, opcoes.ambiente, diaBrasilia(agora));\n const urlQr = opcoes.urlQrCode ?? tabela.qrCode;\n const urlChave = opcoes.urlChave ?? tabela.urlChave;\n if (urlQr === undefined || !/^https?:\\/\\//i.test(urlQr)) {\n issues.montagem(\n 'urlQrCode',\n 'qrcode_invalido',\n `sem endereço completo do QR Code da NFC-e para ${emitUf} em ${opcoes.ambiente}: informe urlQrCode (data/nfce-urls.json)`,\n );\n }\n if (urlChave === undefined) {\n issues.montagem(\n 'urlChave',\n 'qrcode_invalido',\n `sem URL de consulta por chave da NFC-e para ${emitUf}: informe urlChave`,\n );\n }\n if (urlQr === undefined || urlChave === undefined || !issues.empty)\n return { ok: false, ocorrencias: issues.classificadas };\n const p = await parametrosQrCode(\n {\n chave,\n ambiente: opcoes.ambiente,\n tpEmis,\n dhEmi,\n vNF: (inf.total as { ICMSTot: { vNF: string } }).ICMSTot.vNF,\n ...(dest === undefined ? {} : { dest: dest as { CNPJ?: string; CPF?: string; idEstrangeiro?: string } }),\n xml,\n },\n qr,\n );\n supl = { versao: qr.versao, urlChave, base: `${urlQr.replace(/\\?+$/, '')}?p=`, ...p };\n // O infNFeSupl contra o schema antes de assinar (padrões do qrCode por versão, tamanho do urlChave). Na versão 3\n // off-line, com uma assinatura do tamanho da de uma chave RSA de 2048 bits no lugar da que o certificado ainda vai\n // fazer; o `comQrCode` confere de novo com a assinatura verdadeira.\n const suplIssues = conferirSupl(\n inserirSupl({ xml, nfce: supl } as NfeMontada, supl.assinar ? ASSINATURA_2048 : undefined),\n );\n if (suplIssues.length > 0) return { ok: false, ocorrencias: suplIssues };\n }\n return {\n ok: true,\n valor: {\n chave,\n id: `NFe${chave}`,\n cNF,\n cDV,\n mod,\n tpEmis,\n dhEmi,\n ...(supl === undefined ? {} : { nfce: supl }),\n pl: pl.vigencia,\n infNFe: inf,\n xml,\n ...(aliquotasInformadas.length === 0 ? {} : { aliquotasInformadas }),\n },\n };\n}\n\n/** Base64 de uma assinatura RSA de 2048 bits (256 bytes): a forma da assinatura do QR Code off-line na montagem. */\nconst ASSINATURA_2048 = codificarBase64(new Uint8Array(256));\n\n/** Ocorrências do `infNFeSupl` do XML contra o schema (`TNFe_infNFeSupl`), como de montagem. */\nfunction conferirSupl(xml: string): Ocorrencia[] {\n const el = primeiroFilho(lerXml(xml).raiz, 'infNFeSupl', NFE_NS);\n const erros = el === undefined ? [] : validar(TNFe_infNFeSupl as ComplexType, el);\n return erros.map((i) => ({\n caminho: i.caminho,\n code: 'schema',\n mensagem: `${i.code}: ${i.mensagem}`,\n origem: 'montagem',\n }));\n}\n\nconst escapeXml = (s: string): string => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\n/**\n * 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\n * certificado que assina a nota; Manual do DANFE NFC-e 6.0, 4.4.2). `undefined` quando o QR Code não leva assinatura\n * (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\n * off-line (NT 2026.002).\n */\nexport async function assinaturaQrCode(nota: NfeMontada, assinador: Assinador): Promise<string | undefined> {\n return nota.nfce?.assinar === true ? assinarParametros(nota.nfce.parametros, assinador) : undefined;\n}\n\n/**\n * 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\n * para a assinatura. Na versão 3 em contingência off-line, informe a `assinatura` (`assinaturaQrCode`); nos demais\n * casos ela não existe (ZX02-330, rejeição 445; ZX02-334, rejeição 474). Para assinar em três fases (A3, HSM), passe\n * este texto ao `prepararAssinatura` do `@sinete/core/xml` com o `id` da nota. Na NF-e com outro tpImp, devolve o XML como\n * veio: ela não tem `infNFeSupl`.\n */\nexport function comQrCode(nota: NfeMontada, assinatura?: string): string {\n const xml = inserirSupl(nota, assinatura);\n // Com a assinatura verdadeira, o qrCode pode passar do tamanho que a montagem conferiu (chave maior que 2048 bits).\n if (assinatura !== undefined) {\n const issues = conferirSupl(xml);\n if (issues.length > 0) throw new ErroDeValidacao('o QR Code não passou no schema', issues);\n }\n return xml;\n}\n\nfunction inserirSupl(built: NfeMontada, assinatura: string | undefined): string {\n const s = built.nfce;\n if (s === undefined) {\n if (assinatura !== undefined)\n throw new ErroDeConfiguracao('esta NF-e não tem QR Code: só a NF-e com DANFE Simplificado Tipo 2 (tpImp 6) leva');\n return built.xml;\n }\n if (s.assinar && assinatura === undefined) {\n throw new ErroDeConfiguracao(\n 'contingência off-line com QR Code versão 3 precisa da assinatura (ZX02-334, rejeição 474)',\n );\n }\n if (!s.assinar && assinatura !== undefined) {\n throw new ErroDeConfiguracao('este QR Code não leva assinatura (ZX02-330, rejeição 445)');\n }\n const fim = '</NFe>';\n if (!built.xml.endsWith(fim)) throw new ErroDeConfiguracao('nota montada fora da forma esperada');\n const qrCode = `${s.base}${s.parametros}${assinatura === undefined ? '' : `|${assinatura}`}`;\n const supl = `<infNFeSupl><qrCode>${escapeXml(qrCode)}</qrCode><urlChave>${escapeXml(s.urlChave)}</urlChave></infNFeSupl>`;\n return built.xml.slice(0, -fim.length) + supl + fim;\n}\n\n/**\n * Assina a NF-e montada: na NFC-e, insere antes o `infNFeSupl` (`comQrCode`, com a assinatura do QR Code quando a\n * contingência off-line pede); depois, a `Signature` como último filho de `NFe`, tudo por splice, e devolve a string\n * final. É essa string que vai para a SEFAZ e para o banco; nada depois deve reparseá-la para reescrever.\n */\nexport async function assinarNfe(nota: NfeMontada, assinador: Assinador): Promise<string> {\n return assinarXml(comQrCode(nota, await assinaturaQrCode(nota, assinador)), { id: nota.id }, assinador);\n}\n",
|
|
6
6
|
"/**\n * Decimal exato para os valores da NF-e. Nada de `number` nas contas: um valor é `coef × 10^-scale` com `coef` em\n * `bigint`, então soma, subtração e multiplicação são exatas e só o arredondamento, feito de propósito e com o modo\n * escolhido, descarta dígitos.\n *\n * Os modos são os que os leiautes usam:\n * - `HALF_EVEN` (arredondamento bancário, NBR 5891): o que a Calculadora da RFB aplica ao IBS e à CBS (ADR 0007).\n * - `HALF_UP` (metade para longe do zero): o arredondamento comercial usual nos demais tributos. O MOC 7.0 Anexo I,\n * nota (*4) das regras de valor, só exige duas casas e aceita tolerância de R$ 0,01, sem fixar o modo.\n * - `DOWN` (trunca em direção ao zero), para quem precisa reproduzir um sistema legado.\n *\n * Qual modo vale para qual campo é dado (`data/arredondamento.json`), não regra espalhada no código.\n */\n\nimport { ErroDeConfiguracao } from '@sinete/core';\n\nexport type RoundingMode = 'HALF_EVEN' | 'HALF_UP' | 'DOWN';\n\n/** O que as APIs de entrada aceitam como número. Prefira `string` (`'12.34'`): `number` perde dígitos acima de 15 algarismos. */\nexport type DecimalInput = string | number | bigint | Decimal;\n\nconst DECIMAL_TEXT = /^([+-])?(\\d+)(?:\\.(\\d*))?(?:[eE]([+-]?\\d+))?$|^([+-])?\\.(\\d+)(?:[eE]([+-]?\\d+))?$/;\nconst MAX_SCALE = 64;\n\nfunction pow10(n: number): bigint {\n return 10n ** BigInt(n);\n}\n\n/** Valor decimal imutável: `coef × 10^-scale`. */\nexport class Decimal {\n /** Coeficiente inteiro (com sinal). */\n readonly coef: bigint;\n /** Casas decimais do coeficiente (0 ou mais). */\n readonly scale: number;\n\n private constructor(coef: bigint, scale: number) {\n this.coef = coef;\n this.scale = scale;\n }\n\n static readonly ZERO: Decimal = new Decimal(0n, 0);\n static readonly ONE: Decimal = new Decimal(1n, 0);\n static readonly HUNDRED: Decimal = new Decimal(100n, 0);\n\n /** Constrói a partir do coeficiente e da escala (`fromParts(1234n, 2)` = 12.34). */\n static fromParts(coef: bigint, scale: number): Decimal {\n if (!Number.isInteger(scale) || scale < 0 || scale > MAX_SCALE)\n throw new ErroDeConfiguracao(`escala inválida: ${scale}`);\n return new Decimal(coef, scale);\n }\n\n /**\n * Converte a entrada. Aceita texto com ponto decimal e expoente opcional (`'12.34'`, `'1e-3'`), `number` finito e\n * `bigint`. Vírgula, separador de milhar e espaço são recusados: o texto é a forma do XML, não a da tela.\n */\n static of(input: DecimalInput): Decimal {\n const d = Decimal.tryOf(input);\n if (d === undefined) throw new ErroDeConfiguracao(`número decimal inválido: ${JSON.stringify(String(input))}`);\n return d;\n }\n\n /** Como `of`, mas devolve `undefined` em vez de lançar. */\n static tryOf(input: DecimalInput): Decimal | undefined {\n if (input instanceof Decimal) return input;\n if (typeof input === 'bigint') return new Decimal(input, 0);\n if (typeof input === 'number') {\n if (!Number.isFinite(input)) return undefined;\n // String(n) é a representação mais curta que volta ao mesmo double (ECMA-262 Number::toString).\n return Decimal.tryOf(String(input));\n }\n if (typeof input !== 'string') return undefined;\n const m = DECIMAL_TEXT.exec(input);\n if (!m) return undefined;\n const sign = (m[1] ?? m[5]) === '-' ? -1n : 1n;\n const intPart = m[2] ?? '';\n const frac = m[3] ?? m[6] ?? '';\n const exp = Number(m[4] ?? m[7] ?? '0');\n if (!Number.isSafeInteger(exp) || Math.abs(exp) > MAX_SCALE) return undefined;\n let coef = BigInt(`${intPart}${frac}` || '0') * sign;\n let scale = frac.length - exp;\n if (scale < 0) {\n coef *= pow10(-scale);\n scale = 0;\n }\n if (scale > MAX_SCALE) return undefined;\n return new Decimal(coef, scale);\n }\n\n private aligned(other: Decimal): [bigint, bigint, number] {\n if (this.scale === other.scale) return [this.coef, other.coef, this.scale];\n if (this.scale > other.scale) return [this.coef, other.coef * pow10(this.scale - other.scale), this.scale];\n return [this.coef * pow10(other.scale - this.scale), other.coef, other.scale];\n }\n\n plus(other: DecimalInput): Decimal {\n const [a, b, s] = this.aligned(Decimal.of(other));\n return new Decimal(a + b, s);\n }\n\n minus(other: DecimalInput): Decimal {\n const [a, b, s] = this.aligned(Decimal.of(other));\n return new Decimal(a - b, s);\n }\n\n times(other: DecimalInput): Decimal {\n const o = Decimal.of(other);\n const scale = this.scale + o.scale;\n if (scale > MAX_SCALE) {\n // Produto de muitas casas: arredonda (HALF_EVEN) para caber, com folga muito acima de qualquer campo do leiaute.\n return new Decimal(this.coef * o.coef, scale).round(MAX_SCALE, 'HALF_EVEN');\n }\n return new Decimal(this.coef * o.coef, scale);\n }\n\n /** Divisão com o resultado arredondado em `scale` casas pelo modo dado. */\n dividedBy(other: DecimalInput, scale: number, mode: RoundingMode): Decimal {\n const o = Decimal.of(other);\n if (o.coef === 0n) throw new ErroDeConfiguracao('divisão por zero');\n // (a / 10^sa) / (b / 10^sb) = a * 10^(sb + scale + 1 - sa) / b, com uma casa de guarda para o arredondamento.\n const shift = o.scale + scale + 1 - this.scale;\n const num = shift >= 0 ? this.coef * pow10(shift) : this.coef;\n const den = shift >= 0 ? o.coef : o.coef * pow10(-shift);\n const q = num / den;\n const exact = q * den === num;\n return roundCoef(q, scale + 1, scale, mode, !exact);\n }\n\n /** Percentual: `this × rate / 100`, sem arredondar. */\n percent(rate: DecimalInput): Decimal {\n const product = this.times(rate);\n return new Decimal(product.coef, product.scale + 2);\n }\n\n negate(): Decimal {\n return new Decimal(-this.coef, this.scale);\n }\n\n abs(): Decimal {\n return this.coef < 0n ? this.negate() : this;\n }\n\n /** Arredonda para `scale` casas. Com `scale` maior que a atual, só completa com zeros. */\n round(scale: number, mode: RoundingMode): Decimal {\n if (!Number.isInteger(scale) || scale < 0) throw new ErroDeConfiguracao(`casas decimais inválidas: ${scale}`);\n if (scale >= this.scale) return new Decimal(this.coef * pow10(scale - this.scale), scale);\n return roundCoef(this.coef, this.scale, scale, mode, false);\n }\n\n compare(other: DecimalInput): -1 | 0 | 1 {\n const [a, b] = this.aligned(Decimal.of(other));\n return a < b ? -1 : a > b ? 1 : 0;\n }\n\n eq(other: DecimalInput): boolean {\n return this.compare(other) === 0;\n }\n\n lt(other: DecimalInput): boolean {\n return this.compare(other) < 0;\n }\n\n gt(other: DecimalInput): boolean {\n return this.compare(other) > 0;\n }\n\n isZero(): boolean {\n return this.coef === 0n;\n }\n\n isNegative(): boolean {\n return this.coef < 0n;\n }\n\n /** Quantas casas decimais o valor precisa (sem os zeros à direita). */\n significantScale(): number {\n if (this.coef === 0n) return 0;\n let c = this.coef;\n let s = this.scale;\n while (s > 0 && c % 10n === 0n) {\n c /= 10n;\n s--;\n }\n return s;\n }\n\n /** Texto com exatamente `scale` casas (arredonda pelo modo dado quando precisa). */\n toFixed(scale: number, mode: RoundingMode = 'HALF_UP'): string {\n const r = this.round(scale, mode);\n const neg = r.coef < 0n;\n const digits = (neg ? -r.coef : r.coef).toString().padStart(scale + 1, '0');\n const int = digits.slice(0, digits.length - scale);\n const frac = digits.slice(digits.length - scale);\n return `${neg ? '-' : ''}${int}${scale > 0 ? `.${frac}` : ''}`;\n }\n\n /** Forma mínima, sem zeros à direita (`'12.3'`, `'0'`). */\n toString(): string {\n return this.toFixed(this.significantScale());\n }\n\n toJSON(): string {\n return this.toString();\n }\n}\n\n/** Reduz `coef × 10^-from` para `to` casas (`to < from`). `sticky` diz se há resto não nulo além dos dígitos dados. */\nfunction roundCoef(coef: bigint, from: number, to: number, mode: RoundingMode, sticky: boolean): Decimal {\n const div = pow10(from - to);\n const neg = coef < 0n;\n const abs = neg ? -coef : coef;\n let q = abs / div;\n const r = abs % div;\n if (mode !== 'DOWN' && (r !== 0n || sticky)) {\n const twice = r * 2n;\n const above = twice > div || (twice === div && sticky);\n const tie = twice === div && !sticky;\n if (above || (tie && (mode === 'HALF_UP' || (mode === 'HALF_EVEN' && q % 2n === 1n)))) q += 1n;\n }\n return Decimal.fromParts(neg ? -q : q, to);\n}\n\n/** Atalho para `Decimal.of`. */\nexport function dec(valor: DecimalInput): Decimal {\n return Decimal.of(valor);\n}\n\n/** Soma uma lista (vazia = zero). */\nexport function sum(valores: Iterable<Decimal>): Decimal {\n let acc = Decimal.ZERO;\n for (const v of valores) acc = acc.plus(v);\n return acc;\n}\n",
|
|
7
7
|
"/**\n * Formatação dos decimais na forma lexical que cada tipo do leiaute aceita (ADR 0002: o número de casas vem do\n * pattern do XSD, nunca do serializer). Cada formato abaixo cita os tipos `TDec_*` que ele cobre.\n */\n\nimport type { Decimal, RoundingMode } from './decimal.ts';\n\nexport interface FormatoDecimal {\n /** Nome curto, para mensagens. */\n readonly nome: string;\n /** Casas mínimas (completa com zeros até aqui). */\n readonly min: number;\n /** Casas máximas aceitas pelo pattern. */\n readonly max: number;\n /** Casas exigidas quando a parte inteira é zero e o valor não é zero (`TDec_0803v`: `0\\.[0-9]{3}`). */\n readonly minimoAbaixoDeUm?: number;\n /** O pattern recusa zero (`TDec_1302Opc`, `TDec_0302a04Opc`): o campo zerado deve ser omitido. */\n readonly naoNulo?: boolean;\n /** Maior quantidade de dígitos inteiros aceita. */\n readonly digitosInteiros: number;\n}\n\n/** `TDec_1302`, `TDec1302RTC`: 13 inteiros e exatamente 2 casas. */\nexport const D1302: FormatoDecimal = { nome: 'TDec_1302', min: 2, max: 2, digitosInteiros: 13 };\n/** `TDec_1302Opc`: como `TDec_1302`, sem zero. */\nexport const D1302_OPC: FormatoDecimal = { nome: 'TDec_1302Opc', min: 2, max: 2, digitosInteiros: 13, naoNulo: true };\n/** `TDec_0302a04`, `TDec_0302_04RTC`, `TDec_0302a04Max100`: 3 inteiros e 2 a 4 casas. */\nexport const D0302A04: FormatoDecimal = { nome: 'TDec_0302a04', min: 2, max: 4, digitosInteiros: 3 };\n/** `TDec_0302a04Opc`: o pattern (`0\\.[0-9]{2,4}|...`) aceita zero, ao contrário de `TDec_1302Opc`. */\nexport const D0302A04_OPC: FormatoDecimal = { nome: 'TDec_0302a04Opc', min: 2, max: 4, digitosInteiros: 3 };\n/** `TDec_0302Max100`: 2 casas exatas. */\nexport const D0302: FormatoDecimal = { nome: 'TDec_0302Max100', min: 2, max: 2, digitosInteiros: 3 };\n/** `TDec_1104v`: 11 inteiros e 0 a 4 casas. */\nexport const D1104V: FormatoDecimal = { nome: 'TDec_1104v', min: 0, max: 4, digitosInteiros: 11 };\n/** `TDec_1104`, `TDec1104RTC`: 11 inteiros e 4 casas. */\nexport const D1104: FormatoDecimal = { nome: 'TDec_1104', min: 4, max: 4, digitosInteiros: 11 };\n/** `TDec_1110v`: 11 inteiros e 0 a 10 casas. */\nexport const D1110V: FormatoDecimal = { nome: 'TDec_1110v', min: 0, max: 10, digitosInteiros: 11 };\n/** `TDec_1204v`: 12 inteiros e 0 a 4 casas. */\nexport const D1204V: FormatoDecimal = { nome: 'TDec_1204v', min: 0, max: 4, digitosInteiros: 12 };\n/** `TDec_1204`: 12 inteiros e 4 casas quando há fração (4 fixas aqui, que o pattern aceita sempre). */\nexport const D1204: FormatoDecimal = { nome: 'TDec_1204', min: 4, max: 4, digitosInteiros: 12 };\n/** `TDec_1203`: 12 inteiros e 3 casas. */\nexport const D1203: FormatoDecimal = { nome: 'TDec_1203', min: 3, max: 3, digitosInteiros: 12 };\n/** `TDec_0803v`: 8 inteiros e até 3 casas; abaixo de 1, exatamente 3. */\nexport const D0803V: FormatoDecimal = { nome: 'TDec_0803v', min: 0, max: 3, digitosInteiros: 8, minimoAbaixoDeUm: 3 };\n\n/** Texto do valor já arredondado no formato (arredonda em `max` casas pelo modo dado). */\nexport function formatarDecimal(valor: Decimal, formato: FormatoDecimal, modo: RoundingMode = 'HALF_UP'): string {\n const r = valor.round(formato.max, modo);\n let places = Math.max(formato.min, Math.min(formato.max, r.significantScale()));\n if (formato.minimoAbaixoDeUm !== undefined && !r.isZero() && r.abs().lt(1))\n places = Math.max(places, formato.minimoAbaixoDeUm);\n return r.toFixed(places, modo);\n}\n\n/** Por que o valor não cabe no formato, ou `undefined` se cabe sem perder dígitos. */\nexport function problemaDeFormato(valor: Decimal, formato: FormatoDecimal): string | undefined {\n if (valor.isNegative()) return 'valor negativo';\n if (formato.naoNulo && valor.isZero()) return 'valor zero não é aceito neste campo';\n if (valor.significantScale() > formato.max) return `mais de ${formato.max} casas decimais`;\n const intDigits = valor.round(0, 'DOWN').abs().toString().replace(/^0$/, '').length;\n if (intDigits > formato.digitosInteiros) return `mais de ${formato.digitosInteiros} dígitos inteiros`;\n return undefined;\n}\n",
|
|
8
8
|
"/**\n * Coletor de ocorrências de validação (`Ocorrencia` do core). O builder junta todas as ocorrências antes de\n * 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\n * em `CODIGOS_OCORRENCIA_NFE`.\n */\n\nimport type { Ocorrencia, OrigemOcorrencia } from '@sinete/core';\n\nexport const CODIGOS_OCORRENCIA_NFE = [\n 'campo_obrigatorio',\n 'campo_invalido',\n 'campo_fora_do_pl',\n 'decimal_invalido',\n 'valor_divergente',\n 'combinacao_invalida',\n 'modelo_nao_suportado',\n 'serie_invalida',\n 'documento_invalido',\n 'ie_invalida',\n 'chave_invalida',\n 'referencia_vedada',\n 'resp_tec_obrigatorio',\n 'csrt_obrigatorio',\n 'ibscbs_calculo',\n 'ibscbs_base_ausente',\n 'ibscbs_nao_suportado',\n 'ibscbs_redutor_divergente',\n 'ibscbs_regra_nt',\n 'totais_divergentes',\n 'itens_limite',\n 'contingencia_invalida',\n 'pagamento_igual_total',\n 'emitente_difere_do_certificado',\n 'grupo_vedado',\n 'pagamento_invalido',\n 'qrcode_invalido',\n 'schema',\n] as const;\n\nexport type CodigoOcorrenciaNfe = (typeof CODIGOS_OCORRENCIA_NFE)[number];\n\nexport class Issues {\n readonly list: Ocorrencia[];\n\n constructor() {\n this.list = [];\n }\n\n /** Ocorrência sobre a entrada, a não ser que `origem` diga outra coisa (ADR 0011). */\n add(path: string, code: CodigoOcorrenciaNfe | string, message: string, origem: OrigemOcorrencia = 'entrada'): void {\n this.list.push({ caminho: path, code, mensagem: message, origem });\n }\n\n /** Ocorrência sobre o que o sinete montou a partir da entrada (XML, schema, PL, chave gerada, calculadora). */\n montagem(path: string, code: CodigoOcorrenciaNfe | string, message: string): void {\n this.add(path, code, message, 'montagem');\n }\n\n /** As ocorrências com a `origem` preenchida: a que veio sem (a de um validador avulso) é da entrada. */\n get classificadas(): readonly Ocorrencia[] {\n return this.list.map((i) => (i.origem === undefined ? { ...i, origem: 'entrada' } : i));\n }\n\n /** Junta ocorrências de outra fonte; a que vier sem `origem` recebe a informada. */\n addAll(issues: readonly Ocorrencia[], origem: OrigemOcorrencia = 'entrada'): void {\n this.list.push(...issues.map((i) => (i.origem === undefined ? { ...i, origem } : i)));\n }\n\n /** Troca a `origem` das ocorrências a partir da posição `inicio` (as que uma conferência acabou de acrescentar). */\n reclassificarDesde(inicio: number, origem: OrigemOcorrencia): void {\n for (let k = inicio; k < this.list.length; k++) {\n const i = this.list[k];\n if (i !== undefined) this.list[k] = { ...i, origem };\n }\n }\n\n get empty(): boolean {\n return this.list.length === 0;\n }\n}\n",
|
|
9
9
|
"/**\n * A calculadora padrão de IBS/CBS do `montarNfe`: a porta `CalculadoraIbsCbs` implementada sobre o motor do sinete.\n *\n * Para cada item classificado, monta a operação do `@sinete/ibs-cbs/calcular` (CST, cClassTrib, base, local da operação,\n * compra governamental), calcula com o dataset do `@sinete/ibs-cbs-dados` e as alíquotas do `@sinete/ibs-cbs/aliquotas`, confere o\n * resultado pelas regras da NT 2025.002 do `@sinete/ibs-cbs/validar` e devolve o grupo `IBSCBS` de cada item na forma\n * lexical do leiaute. Erro de classificação, regime não suportado, alíquota desconhecida e violação de regra voltam\n * como ocorrências (`Ocorrencia`) no caminho do item: a nota não é montada, e nunca sai valor zerado no lugar.\n *\n * O dataset embarcado (~2 MB de JSON) só é importado na primeira nota com item classificado, por `import()` dinâmico:\n * quem usa o pacote para ler XML, eventos ou Distribuição DF-e não o carrega, e um bundler com code splitting o põe num\n * chunk à parte.\n */\n\nimport type { Ocorrencia } from '@sinete/core';\nimport { contextoDeTempo, ehUf, relogioFixo, ufPorCUf } from '@sinete/core';\nimport type { ProvedorDeAliquotas } from '@sinete/ibs-cbs/aliquotas';\nimport { aliquotasOficiais, ErroAliquotaDesconhecida } from '@sinete/ibs-cbs/aliquotas';\nimport type {\n IBSCBS,\n ItemClassificado,\n LocalDaOperacao,\n OperacaoClassificada,\n Roc,\n TpEnteGov,\n} from '@sinete/ibs-cbs/calcular';\nimport { calcular, ErroClassificacao, ErroRegimeNaoSuportado } from '@sinete/ibs-cbs/calcular';\nimport type { Regra } from '@sinete/ibs-cbs/validar';\nimport { documentoDoRoc, validar } from '@sinete/ibs-cbs/validar';\nimport type { DatasetIbsCbs } from '@sinete/ibs-cbs-dados';\nimport type {\n AliquotaIbsCbsInformada,\n CalculadoraIbsCbs,\n PedidoIbsCbsItem,\n PedidoIbsCbsNota,\n RespostaIbsCbs,\n} from './ports.ts';\n\n/** Grupo `IBSCBS` do item, como o `@sinete/nfe` o recebe. */\nexport type GrupoIbsCbs = RespostaIbsCbs['itens'][number]['IBSCBS'];\n\nexport interface CalculadoraIbsCbsOpcoes {\n /**\n * Dataset do IBS/CBS. Padrão: o embarcado no `@sinete/ibs-cbs-dados`, importado sob demanda na primeira nota\n * (`carregarDatasetEmbarcado`). Informe um bundle verificado em runtime (`conferirDataset`) para usar dados de outra\n * origem, ou o `datasetEmbarcado()` já carregado para o cálculo ser síncrono.\n */\n readonly dataset?: DatasetIbsCbs;\n /** Alíquotas. Padrão: `aliquotasOficiais()` do `@sinete/ibs-cbs/aliquotas`; troque por um provedor com alíquotas informadas. */\n readonly aliquotas?: ProvedorDeAliquotas;\n /**\n * Base do IBS/CBS do item que não trouxe `vBC`, em texto com até 2 casas. A composição da base (NT 2025.002, UB16-10)\n * ainda é \"implementação futura, aguardando orientação normativa\": sem esta função, item sem `vBC` vira ocorrência\n * `ibscbs_base_ausente` em vez de uma base presumida.\n */\n readonly base?: (item: PedidoIbsCbsItem, nota: PedidoIbsCbsNota) => string;\n /**\n * Regras da NT 2025.002 conferidas sobre os grupos produzidos (`@sinete/ibs-cbs/validar`). Padrão: as implantadas na data\n * de emissão e no ambiente. `false` desliga; `{ rules }` troca a lista.\n */\n readonly regras?: false | { readonly regras?: readonly Regra[]; readonly ignorarAtivacao?: boolean };\n /** Fuso do local da operação para a data civil do fato gerador, em minutos. Padrão: Brasília (-180). */\n readonly deslocamentoMin?: number;\n}\n\nconst BASE = /^\\d{1,13}(\\.\\d{1,2})?$/;\n\n/** Texto decimal sem zeros à direita, para comparar valores com escalas diferentes (`'0.00'` e `'0'`). */\nfunction normalizado(v: string): string {\n const [int = '0', frac = ''] = v.split('.');\n const f = frac.replace(/0+$/, '');\n const i = int.replace(/^0+(?=\\d)/, '');\n return f === '' ? i : `${i}.${f}`;\n}\n\nconst caminho = (nItem: number): string => `itens[${nItem - 1}].impostos.ibsCbs`;\n\n/** UF do município pelo código IBGE (os dois primeiros dígitos são o cUF). */\nfunction ufDoMunicipio(cMun: string): string | undefined {\n return ufPorCUf(cMun.slice(0, 2))?.sigla;\n}\n\n/**\n * Local da operação para as alíquotas próprias de UF e município: o `cMunFGIBS` informado (campo B12a da NT\n * 2025.002, município de ocorrência do fato gerador do IBS/CBS), senão o destino da mercadoria (entrega ou\n * destinatário, pela LC 214/2025, art. 11, o local da entrega), senão o emitente. Destino no exterior cai no emitente.\n */\nexport function localDaOperacao(nota: PedidoIbsCbsNota): LocalDaOperacao {\n if (nota.cMunFGIBS !== undefined) {\n const uf = ufDoMunicipio(nota.cMunFGIBS);\n if (uf !== undefined) return { uf, cMun: nota.cMunFGIBS };\n }\n const d = nota.destino;\n if (d !== undefined && d.UF !== 'EX' && ehUf(d.UF)) return { uf: d.UF, cMun: d.cMun };\n return { uf: nota.emitente.UF, cMun: nota.emitente.cMun };\n}\n\n/** Converte o grupo do motor para o do leiaute: os códigos numéricos do motor viram texto. */\nfunction grupoDoLeiaute(g: IBSCBS, indDoacao: '1' | undefined): GrupoIbsCbs {\n const { gCredPresOper, gCredPresIBSZFM, ...resto } = g;\n return {\n ...resto,\n ...(indDoacao === undefined ? {} : { indDoacao }),\n ...(gCredPresOper === undefined\n ? {}\n : { gCredPresOper: { ...gCredPresOper, cCredPres: String(gCredPresOper.cCredPres).padStart(2, '0') } }),\n ...(gCredPresIBSZFM === undefined\n ? {}\n : {\n gCredPresIBSZFM: {\n ...gCredPresIBSZFM,\n tpCredPresIBSZFM: String(gCredPresIBSZFM.tpCredPresIBSZFM),\n },\n }),\n } as GrupoIbsCbs;\n}\n\n/**\n * Erro do motor ou das alíquotas como uma ocorrência no caminho do item (o primeiro, quando o erro não diz o item).\n * `semAliquota` acha o item que pediu a alíquota desconhecida: o erro do provedor diz o tributo e a data, não o item.\n */\nfunction ocorrenciaDoMotor(\n e: unknown,\n itens: readonly PedidoIbsCbsItem[],\n semAliquota: () => number | undefined,\n): Ocorrencia | undefined {\n if (e instanceof ErroClassificacao || e instanceof ErroRegimeNaoSuportado) {\n const path = e.item !== undefined ? caminho(e.item) : caminho(itens[0]?.nItem ?? 1);\n return { caminho: path, code: e.code, mensagem: e.message, origem: 'entrada' };\n }\n // Alíquota que o sinete não conhece para a data: falta de dado do pacote, não da nota.\n if (e instanceof ErroAliquotaDesconhecida) {\n const n = semAliquota() ?? itens[0]?.nItem ?? 1;\n return { caminho: caminho(n), code: e.code, mensagem: e.message, origem: 'montagem' };\n }\n return undefined;\n}\n\n/**\n * O primeiro item (pela ordem de `nItem`, a do motor) cujo cálculo sozinho pede uma alíquota desconhecida. Só roda na\n * recusa, para pôr a ocorrência no item em vez de na nota.\n */\nfunction primeiroItemSemAliquota(\n op: OperacaoClassificada,\n calc: (op: OperacaoClassificada) => unknown,\n): number | undefined {\n for (const it of [...op.itens].sort((a, b) => a.n - b.n)) {\n try {\n calc({ ...op, itens: [it] });\n } catch (e) {\n if (e instanceof ErroAliquotaDesconhecida) return it.n;\n }\n }\n return undefined;\n}\n\nlet embarcado: Promise<DatasetIbsCbs> | undefined;\n\n/**\n * O dataset embarcado no `@sinete/ibs-cbs-dados`, importado sob demanda (`import()` dinâmico) e carregado uma vez por\n * processo. É o que a calculadora padrão usa quando `dataset` não é informado; chamar antes só adianta a carga. Se o\n * import falhar, a próxima chamada tenta de novo.\n */\nexport function carregarDatasetEmbarcado(): Promise<DatasetIbsCbs> {\n embarcado ??= import('@sinete/ibs-cbs-dados/embarcado').then(\n (m) => m.datasetEmbarcado(),\n (e: unknown) => {\n embarcado = undefined;\n throw e;\n },\n );\n return embarcado;\n}\n\n/**\n * Cria a calculadora de IBS/CBS sobre o motor do sinete. O `montarNfe` usa uma com as opções padrão quando\n * `opcoes.ibsCbs` não é informado; crie a sua para trocar dataset, alíquotas, base ou regras. Com `dataset` informado\n * o cálculo é síncrono; sem ele, a primeira chamada espera o import do dataset embarcado.\n */\nexport function calculadoraIbsCbs(opcoes: CalculadoraIbsCbsOpcoes = {}): CalculadoraIbsCbs {\n const rates = opcoes.aliquotas ?? aliquotasOficiais();\n const dataset = opcoes.dataset;\n return {\n calcular(request: {\n readonly nota: PedidoIbsCbsNota;\n readonly itens: readonly PedidoIbsCbsItem[];\n }): RespostaIbsCbs | Promise<RespostaIbsCbs> {\n if (dataset !== undefined) return calcularCom(dataset, rates, opcoes, request);\n return carregarDatasetEmbarcado().then((ds) => calcularCom(ds, rates, opcoes, request));\n },\n };\n}\n\nfunction calcularCom(\n dataset: DatasetIbsCbs,\n rates: ProvedorDeAliquotas,\n options: CalculadoraIbsCbsOpcoes,\n {\n nota,\n itens,\n }: {\n readonly nota: PedidoIbsCbsNota;\n readonly itens: readonly PedidoIbsCbsItem[];\n },\n): RespostaIbsCbs {\n const issues: Ocorrencia[] = [];\n const classificados: ItemClassificado[] = [];\n for (const it of itens) {\n if (it.cCredPres !== undefined) {\n // O crédito presumido pede os percentuais por tributo (pCredPres), que a porta não traz.\n issues.push({\n caminho: caminho(it.nItem),\n code: 'ibscbs_nao_suportado',\n mensagem: 'crédito presumido (cCredPres) precisa do grupo gCredPresOper pronto (ibsCbs.grupo)',\n origem: 'entrada',\n });\n continue;\n }\n const base = it.vBC !== undefined ? it.vBC.toFixed(2) : options.base?.(it, nota);\n if (base === undefined) {\n issues.push({\n caminho: `${caminho(it.nItem)}.classificacao.vBC`,\n code: 'ibscbs_base_ausente',\n mensagem:\n 'informe vBC do IBS/CBS ou CalculadoraIbsCbsOpcoes.base: a composição da base (UB16-10) ainda não tem regra publicada',\n origem: 'entrada',\n });\n continue;\n }\n if (!BASE.test(base)) {\n // Da entrada quando é o vBC do item; da montagem quando veio da função `base` das opções.\n issues.push({\n caminho: `${caminho(it.nItem)}.classificacao.vBC`,\n code: 'decimal_invalido',\n mensagem: base,\n origem: it.vBC !== undefined ? 'entrada' : 'montagem',\n });\n continue;\n }\n classificados.push({\n n: it.nItem,\n cst: it.CST,\n cClassTrib: it.cClassTrib,\n base,\n quantidade: it.qTrib.toString(),\n unidade: it.uTrib,\n ...(it.gTribRegular === undefined\n ? {}\n : { regular: { cst: it.gTribRegular.CSTReg, cClassTrib: it.gTribRegular.cClassTribReg } }),\n });\n }\n if (issues.length > 0) return { itens: [], ocorrencias: issues };\n\n const op: OperacaoClassificada = {\n modelo: Number(nota.mod),\n local: localDaOperacao(nota),\n ...(nota.compraGov === undefined\n ? {}\n : {\n compraGovernamental: {\n tpEnteGov: Number(nota.compraGov.tpEnteGov) as TpEnteGov,\n ...(nota.compraGov.tpOperGov === '1' || nota.compraGov.tpOperGov === '2'\n ? { tpOperGov: Number(nota.compraGov.tpOperGov) as 1 | 2 }\n : {}),\n },\n }),\n itens: classificados,\n };\n const time = contextoDeTempo({ emissao: relogioFixo(nota.emissao), fatoGerador: relogioFixo(nota.fatoGerador) });\n const calc = (o: OperacaoClassificada): Roc =>\n calcular(o, {\n dataset,\n aliquotas: rates,\n tempo: time,\n ...(options.deslocamentoMin === undefined ? {} : { deslocamentoMin: options.deslocamentoMin }),\n });\n let roc: Roc;\n try {\n roc = calc(op);\n } catch (e) {\n const issue = ocorrenciaDoMotor(e, itens, () => primeiroItemSemAliquota(op, calc));\n if (issue === undefined) throw e;\n return { itens: [], ocorrencias: [issue] };\n }\n\n // O redutor da compra governamental vai no ide.gCompraGov como a nota informou, mas o motor calcula com o do\n // dataset: se diferirem, os valores do item não fechariam com o cabeçalho emitido.\n const redutor = roc.oper?.gCompraGov.pRedutor;\n if (\n nota.compraGov !== undefined &&\n redutor !== undefined &&\n normalizado(nota.compraGov.pRedutor.toString()) !== normalizado(redutor)\n ) {\n issues.push({\n caminho: 'gCompraGov.pRedutor',\n code: 'ibscbs_redutor_divergente',\n mensagem: `pRedutor informado (${nota.compraGov.pRedutor.toString()}) difere do vigente no fato gerador (${redutor})`,\n origem: 'entrada',\n });\n }\n\n if (options.regras !== false) {\n const doc = documentoDoRoc(roc, {\n modelo: op.modelo as 55 | 65,\n crt: Number(nota.emitente.CRT) as 1 | 2 | 3 | 4,\n finNFe: Number(nota.finNFe) as 1 | 2 | 3 | 4 | 5 | 6,\n ...(nota.tpNFDebito === undefined ? {} : { tpNFDebito: nota.tpNFDebito }),\n ...(nota.tpNFCredito === undefined ? {} : { tpNFCredito: nota.tpNFCredito }),\n munEmitente: nota.emitente.cMun,\n ...(nota.destino === undefined ? {} : { munDestinatario: nota.destino.cMun }),\n itens: itens.map((it) => ({ nItem: it.nItem, ncm: it.NCM, vProd: it.vProd.toFixed(2) })),\n });\n const report = validar(doc, {\n dataset,\n tempo: time,\n ambiente: nota.ambiente,\n aliquotas: rates,\n ...(options.deslocamentoMin === undefined ? {} : { deslocamentoMin: options.deslocamentoMin }),\n ...(options.regras?.regras === undefined ? {} : { regras: options.regras.regras }),\n ...(options.regras?.ignorarAtivacao === undefined ? {} : { ignorarAtivacao: options.regras.ignorarAtivacao }),\n });\n for (const v of report.violacoes) {\n issues.push({\n caminho: v.item === undefined ? 'total.IBSCBSTot' : caminho(v.item),\n code: 'ibscbs_regra_nt',\n mensagem: `${v.regra} (rejeição ${v.cStat}): ${v.message} [${v.fonte}]`,\n origem: 'montagem',\n });\n }\n }\n\n const porItem = new Map(itens.map((it) => [it.nItem, it]));\n const informadas: AliquotaIbsCbsInformada[] = roc.itens.flatMap((r) =>\n r.aliquotas\n .filter((a) => a.situacao === 'informada')\n .map((a) => ({ nItem: r.nItem, tributo: a.tributo, valor: a.valor, motivo: a.motivo ?? '' })),\n );\n return {\n itens: roc.itens.map((r) => ({\n nItem: r.nItem,\n IBSCBS: grupoDoLeiaute(r.IBSCBS, porItem.get(r.nItem)?.indDoacao),\n })),\n ...(informadas.length === 0 ? {} : { aliquotasInformadas: informadas }),\n ...(issues.length === 0 ? {} : { ocorrencias: issues }),\n };\n}\n",
|
|
10
10
|
"/**\n * Fuso do emitente e formatação dos instantes do leiaute (`TDateTimeUTC`, `AAAA-MM-DDThh:mm:ss±hh:mm`). O fuso vem da\n * tabela `data/fusos.json` pela UF, ou do chamador; nunca do fuso da máquina.\n */\n\nimport type { Relogio, Uf } from '@sinete/core';\nimport { formatarDataHoraComFuso } from '@sinete/core';\nimport fusos from './data/fusos.json' with { type: 'json' };\n\n/** Instante no tempo, como os relógios do `@sinete/core` o devolvem (o tipo `Date`, sem tocar no global). */\nexport type Instante = ReturnType<Relogio['agora']>;\n\nconst UF_OFFSETS: Readonly<Record<string, number>> = fusos.ufs;\n\n/** Deslocamento do horário legal da UF em minutos (`-180` para Brasília). */\nexport function deslocamentoDaUf(uf: Uf): number {\n return Object.hasOwn(UF_OFFSETS, uf) ? (UF_OFFSETS[uf] as number) : fusos.padrao;\n}\n\n/** `TDateTimeUTC` do instante no deslocamento dado. */\nexport function formatarDh(data: Instante, deslocamentoMin: number): string {\n return formatarDataHoraComFuso(data, deslocamentoMin);\n}\n",
|
|
11
|
-
"// GERADO por scripts/versao-gerada.ts a partir do package.json. Não edite: rode `bun scripts/versao-gerada.ts`.\n/** Versão de `@sinete/nfe`, para o padrão de `verProc`/`verAplic` (`formatarVerProc` do @sinete/core). */\nexport const VERSAO_PACOTE = '0.
|
|
11
|
+
"// GERADO por scripts/versao-gerada.ts a partir do package.json. Não edite: rode `bun scripts/versao-gerada.ts`.\n/** Versão de `@sinete/nfe`, para o padrão de `verProc`/`verAplic` (`formatarVerProc` do @sinete/core). */\nexport const VERSAO_PACOTE = '0.6.0';\n",
|
|
12
12
|
"/**\n * Regras do grupo E (destinatário) do MOC 7.0 Anexo I que dependem só do documento e são obrigatórias no modelo 55 ou\n * 65, conferidas antes de assinar com o caminho da entrada (ADR 0012, seção \"Destinatário\"). Ficam de fora as que\n * dependem de tabela externa (municípios do IBGE, E10-10; países do BACEN, E14-04), do cadastro da SEFAZ (5E17) ou do\n * critério da UF (E16a-30 e E16a-35, E14-10 e E14-20, facultativas). As regras só da NFC-e estão em `nfce.ts`.\n */\n\nimport { ufPorSigla } from '@sinete/core';\nimport { lerCnpj } from '@sinete/validators';\nimport suframa from '../data/suframa.json' with { type: 'json' };\nimport type { Issues } from '../issues.ts';\nimport type { DadosNfe } from '../model.ts';\n\n/** Identificação já resolvida pelo montador (com os padrões aplicados). */\nexport interface IdeDestinatario {\n readonly mod: '55' | '65';\n readonly tpNF: string;\n readonly idDest: string;\n readonly idDestInformado: boolean;\n readonly indFinal: string;\n readonly producao: boolean;\n}\n\n/** Caracteres do idEstrangeiro (E03a-60): algarismos, letras e `:.+-/()`. */\nconst ID_ESTRANGEIRO = /^[0-9A-Za-z:.+\\-/()]*$/;\n\nconst digitos = (s: string): string => s.replace(/\\D/g, '');\n\nexport function conferirDestinatario(input: DadosNfe, ide: IdeDestinatario, issues: Issues): void {\n const d = input.destinatario;\n if (d === undefined) return;\n const nfe = ide.mod === '55';\n const emitUf = input.emitente.endereco.UF;\n const end = d.endereco;\n const exterior = end !== undefined && 'exterior' in end && end.exterior === true;\n const destUf = end === undefined ? undefined : exterior ? 'EX' : (end as { UF: string }).UF;\n const idEstrangeiro = 'idEstrangeiro' in d ? d.idEstrangeiro : undefined;\n\n // E03a: destinatário estrangeiro.\n if (nfe && ide.idDest === '3' && idEstrangeiro === undefined) {\n issues.add(\n 'destinatario',\n 'campo_obrigatorio',\n 'na operação com o exterior (idDest 3) o destinatário é identificado por idEstrangeiro, mesmo vazio (E03a-10, rejeição 720)',\n );\n }\n if (nfe && idEstrangeiro !== undefined && ide.idDest !== '3' && ide.indFinal !== '1') {\n issues.add(\n 'destinatario.idEstrangeiro',\n 'combinacao_invalida',\n 'idEstrangeiro fora da operação com o exterior só com consumidor final, indFinal 1 (E03a-20, rejeição 721)',\n );\n }\n if (idEstrangeiro !== undefined && d.IE !== undefined) {\n issues.add(\n 'destinatario.IE',\n 'combinacao_invalida',\n 'destinatário estrangeiro (idEstrangeiro) não informa IE (E03a-30, rejeição 925)',\n );\n }\n if (idEstrangeiro !== undefined && !ID_ESTRANGEIRO.test(idEstrangeiro)) {\n issues.add(\n 'destinatario.idEstrangeiro',\n 'campo_invalido',\n 'idEstrangeiro só com algarismos, letras e os caracteres : . + - / ( ) (E03a-60, rejeição 372)',\n );\n }\n\n // E04 e E05: nome e endereço na NF-e. Em homologação o nome é o literal da E04-20, posto pelo montador.\n if (nfe && ide.producao && (d.xNome === undefined || d.xNome.trim() === '')) {\n issues.add(\n 'destinatario.xNome',\n 'campo_obrigatorio',\n 'a NF-e informa o nome do destinatário (E04-10, rejeição 724)',\n );\n }\n if (nfe && end === undefined) {\n issues.add(\n 'destinatario.endereco',\n 'campo_obrigatorio',\n 'a NF-e informa o endereço do destinatário (E05-10, rejeição 726)',\n );\n }\n\n // E10-20: o município do destinatário é da UF dele (as duas primeiras posições do código são o código da UF).\n if (end !== undefined && !exterior) {\n const e = end as { UF: string; cMun: string };\n const cUF = ufPorSigla(e.UF)?.cUF;\n if (cUF !== undefined && digitos(e.cMun).slice(0, 2) !== cUF) {\n issues.add(\n 'destinatario.endereco.cMun',\n 'combinacao_invalida',\n `município ${e.cMun} não é da UF ${e.UF} do destinatário (E10-20, rejeição 275)`,\n );\n }\n }\n\n // E12-30 a E12-60: idDest contra as UFs do emitente e do destinatário, com as exceções da própria regra.\n if (nfe && destUf !== undefined && destUf !== 'EX') {\n const caminho = ide.idDestInformado ? 'idDest' : 'destinatario.endereco.UF';\n const ufsCons = input.itens.flatMap((it) => {\n const esp = it.produto.especifico;\n return esp !== undefined && 'comb' in esp ? [String(esp.comb.UFCons)] : [];\n });\n const entrega = input.entrega?.UF;\n const retirada = input.retirada?.UF;\n const saida = ide.tpNF === '1';\n // Na saída a entrega vale contra o emitente e a retirada contra o destinatário; na entrada, ao contrário.\n const [ufEntrega, ufRetirada] = saida ? [emitUf, destUf] : [destUf, emitUf];\n if (ide.idDest === '2' && destUf === emitUf) {\n // CNPJ alfanumérico: as letras contam; só a máscara sai (a mesma normalização do lerCnpj).\n const cnpj = (v: string | undefined): string | undefined => {\n if (v === undefined) return undefined;\n const r = lerCnpj(v);\n return r.ok ? r.valor : undefined;\n };\n const cnpjDest = 'CNPJ' in d ? cnpj(d.CNPJ) : undefined;\n const mesmoCnpj = cnpjDest !== undefined && cnpjDest === cnpj(input.emitente.CNPJ);\n const excecao =\n ufsCons.some((u) => u !== emitUf) ||\n (entrega !== undefined && retirada === undefined && entrega !== ufEntrega) ||\n (retirada !== undefined && entrega === undefined && retirada !== ufRetirada) ||\n (entrega !== undefined && retirada !== undefined && entrega !== retirada);\n if (!mesmoCnpj && !excecao) {\n issues.add(\n caminho,\n 'combinacao_invalida',\n `operação interestadual (idDest 2) com o destinatário na UF do emitente (${emitUf}) (${saida ? 'E12-30' : 'E12-50'}, rejeição 772)`,\n );\n }\n }\n if (ide.idDest === '1' && destUf !== emitUf && ide.indFinal !== '1') {\n const excecao =\n ufsCons.some((u) => u === emitUf) ||\n (entrega !== undefined && retirada === undefined && entrega === ufEntrega) ||\n (retirada !== undefined && entrega === undefined && retirada === ufRetirada) ||\n (entrega !== undefined && retirada !== undefined && entrega === retirada);\n if (!excecao) {\n issues.add(\n caminho,\n 'combinacao_invalida',\n `operação interna (idDest 1) com o destinatário em ${destUf}, fora da UF do emitente (${emitUf}) (${saida ? 'E12-40' : 'E12-60'}, rejeição 773)`,\n );\n }\n }\n }\n\n // E14-30: no exterior, o país não é o Brasil (o código pode vir com zeros à esquerda).\n if (exterior && Number(digitos((end as { cPais: string }).cPais)) === 1058) {\n issues.add(\n 'destinatario.endereco.cPais',\n 'campo_invalido',\n 'destinatário no exterior com o país Brasil, 1058 (E14-30, rejeição 926)',\n );\n }\n\n if (!nfe) return;\n\n // E16a: indicador da IE.\n if (ide.idDest === '3' && d.indIEDest !== '9') {\n issues.add(\n 'destinatario.indIEDest',\n 'combinacao_invalida',\n 'na operação com o exterior o destinatário é não contribuinte, indIEDest 9 (E16a-20, rejeição 790)',\n );\n }\n if (d.indIEDest === '9' && ide.indFinal !== '1' && ide.tpNF === '1' && ide.idDest !== '3') {\n issues.add(\n 'indFinal',\n 'combinacao_invalida',\n 'saída para não contribuinte (indIEDest 9) é operação com consumidor final, indFinal 1 (E16a-40, rejeição 696)',\n );\n }\n\n // E17: a IE do destinatário.\n if (d.indIEDest === '1' && d.IE === undefined) {\n issues.add(\n 'destinatario.IE',\n 'campo_obrigatorio',\n 'destinatário contribuinte (indIEDest 1) informa a IE (E17-20, rejeição 728)',\n );\n }\n if (d.indIEDest === '2' && d.IE !== undefined) {\n issues.add(\n 'destinatario.IE',\n 'combinacao_invalida',\n 'destinatário contribuinte isento (indIEDest 2) não informa a IE (E17-30, rejeição 791)',\n );\n }\n if (exterior && d.IE !== undefined) {\n issues.add(\n 'destinatario.IE',\n 'combinacao_invalida',\n 'destinatário no exterior não informa a IE (E17-40, rejeição 792)',\n );\n }\n\n // E18-30: a inscrição na Suframa só vale nas UFs e municípios da área incentivada; no exterior (UF EX), nunca.\n if (d.ISUF !== undefined && destUf !== undefined) {\n const cMun = exterior ? '' : digitos((end as { cMun: string }).cMun);\n const municipios = (suframa.municipios as Record<string, readonly string[]>)[destUf];\n const aceita = suframa.ufs.includes(destUf) || (municipios?.includes(cMun) ?? false);\n if (!aceita) {\n const onde = exterior ? 'no exterior' : `${destUf}, município ${(end as { cMun: string }).cMun}`;\n issues.add(\n 'destinatario.ISUF',\n 'combinacao_invalida',\n `inscrição na Suframa com o destinatário fora da área incentivada (${onde}) (E18-30, rejeição 251)`,\n );\n }\n }\n}\n",
|
|
13
13
|
"/**\n * IBS/CBS (grupo UB, NT 2025.002): chama a calculadora injetada para os itens classificados e totaliza o grupo\n * `IBSCBSTot` (W34 a W59g) somando exatamente os valores dos itens.\n */\n\nimport { lerXml, primeiroFilho } from '@sinete/core/xml';\nimport type { ComplexType } from '@sinete/schemas';\nimport { serializar, validar } from '@sinete/schemas';\nimport type { TIBSCBSMonoTot, TTribNFe } from '@sinete/schemas/nfe/PL_010f';\nimport { Decimal } from '../decimal.ts';\nimport type { Issues } from '../issues.ts';\n\nconst NFE_NS = 'http://www.portalfiscal.inf.br/nfe';\n\n/**\n * Valida contra o schema um grupo repassado (IBSCBS pronto ou da calculadora, IS) antes de qualquer soma: grupo\n * incompleto vira ocorrência `schema` com o caminho do item, nunca exceção no meio dos totais.\n */\nexport function grupoInvalido(ct: ComplexType, nome: string, value: unknown, path: string, issues: Issues): boolean {\n if (value === undefined) return false;\n try {\n const doc = lerXml(`<w xmlns=\"${NFE_NS}\">${serializar(ct, nome, value as never, NFE_NS)}</w>`);\n const el = primeiroFilho(doc.raiz, nome, NFE_NS);\n const erros =\n el === undefined ? [{ caminho: '', code: 'modelo_de_conteudo', mensagem: 'grupo vazio' }] : validar(ct, el);\n for (const e of erros)\n issues.add(\n `${path}${e.caminho.replace(/^\\/[^/]+/, '').replace(/\\//g, '.')}`,\n 'schema',\n `${e.code}: ${e.mensagem}`,\n );\n return erros.length > 0;\n } catch (e) {\n issues.add(path, 'schema', `grupo malformado: ${(e as Error).message}`);\n return true;\n }\n}\n\n/** Campos numéricos dos grupos do leiaute: valores, percentuais, quantidades e ad rem (`vBC`, `pIBSUF`, `qBCMono`...). */\nconst NUMERICO = /^(v|p|q|adRem)[A-Z]/;\n\n/** Aponta cada campo numérico que não é um decimal válido, em qualquer profundidade de um grupo repassado. */\nexport function decimaisInvalidos(value: unknown, path: string, issues: Issues): void {\n if (typeof value !== 'object' || value === null) return;\n for (const [k, v] of Object.entries(value)) {\n const p = `${path}.${k}`;\n if (typeof v === 'string' && NUMERICO.test(k) && Decimal.tryOf(v) === undefined) {\n issues.add(p, 'decimal_invalido', 'número decimal inválido');\n } else if (typeof v === 'object') decimaisInvalidos(v, p, issues);\n }\n}\n\n/** Soma todos os campos `name` em qualquer profundidade do objeto (valores lexicais do leiaute). */\nexport function somaCampo(value: unknown, name: string): Decimal {\n if (typeof value !== 'object' || value === null) return Decimal.ZERO;\n let acc = Decimal.ZERO;\n for (const [k, v] of Object.entries(value)) {\n if (k === name && typeof v === 'string') acc = acc.plus(Decimal.of(v));\n else if (typeof v === 'object') acc = acc.plus(somaCampo(v, name));\n }\n return acc;\n}\n\n/** Valores do grupo do item que entram no vItem (VB01-10): vIBS, vCBS e os totais monofásicos. */\nexport function ibsCbsDoItem(g: TTribNFe): {\n vIBS: Decimal;\n vCBS: Decimal;\n vTotIBSMonoItem: Decimal;\n vTotCBSMonoItem: Decimal;\n} {\n const s = (x: string | undefined): Decimal => (x === undefined ? Decimal.ZERO : Decimal.of(x));\n return {\n vIBS: s(g.gIBSCBS?.vIBS),\n vCBS: s(g.gIBSCBS?.gCBS.vCBS),\n vTotIBSMonoItem: s(g.gIBSCBSMono?.vTotIBSMonoItem),\n vTotCBSMonoItem: s(g.gIBSCBSMono?.vTotCBSMonoItem),\n };\n}\n\n/** `IBSCBSTot` a partir dos grupos dos itens (NT 2025.002, W35-10 a W59g-10). */\nexport function totalIbsCbs(grupos: readonly TTribNFe[]): TIBSCBSMonoTot {\n const f = (d: Decimal): string => d.toFixed(2);\n const sum = (pick: (g: TTribNFe) => unknown, name: string): Decimal =>\n grupos.reduce((acc, g) => acc.plus(somaCampo(pick(g), name)), Decimal.ZERO);\n // gIBS e gCBS entram quando há tributação regular ou crédito presumido em algum item: o crédito pode vir sem o\n // gIBSCBS e não pode sumir do total.\n const regulares = grupos.filter((g) => g.gIBSCBS !== undefined || g.gCredPresOper !== undefined);\n const total: Record<string, unknown> = {\n vBCIBSCBS: f(sum((g) => g.gIBSCBS && { vBC: g.gIBSCBS.vBC }, 'vBC')),\n };\n if (regulares.length > 0) {\n const credIbs = (g: TTribNFe): unknown => g.gCredPresOper?.gIBSCredPres;\n const credCbs = (g: TTribNFe): unknown => g.gCredPresOper?.gCBSCredPres;\n total.gIBS = {\n gIBSUF: {\n vDif: f(sum((g) => g.gIBSCBS?.gIBSUF.gDif, 'vDif')),\n vDevTrib: f(sum((g) => g.gIBSCBS?.gIBSUF.gDevTrib, 'vDevTrib')),\n vIBSUF: f(sum((g) => g.gIBSCBS && { v: g.gIBSCBS.gIBSUF.vIBSUF }, 'v')),\n },\n gIBSMun: {\n vDif: f(sum((g) => g.gIBSCBS?.gIBSMun.gDif, 'vDif')),\n vDevTrib: f(sum((g) => g.gIBSCBS?.gIBSMun.gDevTrib, 'vDevTrib')),\n vIBSMun: f(sum((g) => g.gIBSCBS && { v: g.gIBSCBS.gIBSMun.vIBSMun }, 'v')),\n },\n vIBS: f(sum((g) => g.gIBSCBS && { v: g.gIBSCBS.vIBS }, 'v')),\n vCredPres: f(sum(credIbs, 'vCredPres')),\n vCredPresCondSus: f(sum(credIbs, 'vCredPresCondSus')),\n };\n total.gCBS = {\n vDif: f(sum((g) => g.gIBSCBS?.gCBS.gDif, 'vDif')),\n vDevTrib: f(sum((g) => g.gIBSCBS?.gCBS.gDevTrib, 'vDevTrib')),\n vCBS: f(sum((g) => g.gIBSCBS && { v: g.gIBSCBS.gCBS.vCBS }, 'v')),\n vCredPres: f(sum(credCbs, 'vCredPres')),\n vCredPresCondSus: f(sum(credCbs, 'vCredPresCondSus')),\n };\n }\n if (grupos.some((g) => g.gIBSCBSMono !== undefined)) {\n const mono = (n: string): string => f(sum((g) => g.gIBSCBSMono, n));\n total.gMono = {\n vIBSMono: mono('vIBSMono'),\n vCBSMono: mono('vCBSMono'),\n vIBSMonoReten: mono('vIBSMonoReten'),\n vCBSMonoReten: mono('vCBSMonoReten'),\n vIBSMonoRet: mono('vIBSMonoRet'),\n vCBSMonoRet: mono('vCBSMonoRet'),\n };\n }\n if (grupos.some((g) => g.gEstornoCred !== undefined)) {\n total.gEstornoCred = {\n vIBSEstCred: f(sum((g) => g.gEstornoCred, 'vIBSEstCred')),\n vCBSEstCred: f(sum((g) => g.gEstornoCred, 'vCBSEstCred')),\n };\n }\n return total as TIBSCBSMonoTot;\n}\n",
|
|
14
14
|
"/**\n * Contexto de uma montagem: coleta ocorrências e converte as entradas numéricas conferindo cada uma contra o formato do\n * campo no leiaute. As contas usam o valor já na precisão do XML (uma alíquota com 5 casas é recusada, não\n * arredondada em silêncio), para que o que vai no XML seja exatamente o que entrou na conta.\n */\n\nimport type { DecimalInput, RoundingMode } from '../decimal.ts';\nimport { Decimal } from '../decimal.ts';\nimport type { FormatoDecimal } from '../format.ts';\nimport { formatarDecimal, problemaDeFormato } from '../format.ts';\nimport type { Issues } from '../issues.ts';\n\n/** Famílias de campo com modo de arredondamento próprio (`data/arredondamento.json`). */\nexport type Familia = 'produto' | 'icms' | 'ipi' | 'pisCofins' | 'issqn' | 'ibsCbs';\n\n/** Tolerância das regras de validação de valor (MOC 7.0 Anexo I, nota (*4); NT 2025.002, observações das RV UB). */\nexport const TOLERANCIA: Decimal = Decimal.of('0.01');\n\nexport class Ctx {\n readonly issues: Issues;\n readonly modes: Readonly<Record<Familia, RoundingMode>>;\n /**\n * Confere o valor informado contra o calculado. Desligado na NF-e complementar e na de ajuste (finNFe 2 e 3), cujos\n * valores complementam outra nota e não seguem a conta do item (MOC 7.0 Anexo I, RV I11: \"Se NF-e Normal\").\n */\n readonly conferir: boolean;\n\n constructor(issues: Issues, modes: Readonly<Record<Familia, RoundingMode>>, conferir = true) {\n this.issues = issues;\n this.modes = modes;\n this.conferir = conferir;\n }\n\n /** Entrada opcional; inválida vira ocorrência e `undefined`. */\n opt(value: DecimalInput | undefined, path: string, format: FormatoDecimal): Decimal | undefined {\n if (value === undefined) return undefined;\n const d = Decimal.tryOf(value);\n if (d === undefined) {\n this.issues.add(path, 'decimal_invalido', 'número decimal inválido (use ponto como separador, sem milhar)');\n return undefined;\n }\n const problem = problemaDeFormato(d, format);\n if (problem !== undefined) {\n this.issues.add(path, 'decimal_invalido', `${problem} (${format.nome})`);\n return undefined;\n }\n return d;\n }\n\n /** Entrada obrigatória; ausente ou inválida vira ocorrência e zero, para que a montagem siga e junte tudo. */\n req(value: DecimalInput | undefined, path: string, format: FormatoDecimal): Decimal {\n if (value === undefined) {\n this.issues.add(path, 'campo_obrigatorio', 'campo obrigatório');\n return Decimal.ZERO;\n }\n return this.opt(value, path, format) ?? Decimal.ZERO;\n }\n\n /** Arredonda um valor calculado no formato do campo pelo modo da família. */\n round(value: Decimal, format: FormatoDecimal, familia: Familia): Decimal {\n return value.round(format.max, this.modes[familia]);\n }\n\n /**\n * Valor derivado: sem valor informado, o calculado (arredondado); com valor informado, o informado, conferido\n * contra o calculado com a tolerância das regras de validação.\n */\n /**\n * Base de cálculo: a informada prevalece sem conferência (a base legal varia por operação, UF e regime); o padrão\n * só vale quando nada veio.\n */\n base(\n given: DecimalInput | undefined,\n padrao: Decimal,\n path: string,\n format: FormatoDecimal,\n familia: Familia,\n ): Decimal {\n return this.opt(given, path, format) ?? this.round(padrao, format, familia);\n }\n\n calc(\n given: DecimalInput | undefined,\n computed: Decimal,\n path: string,\n format: FormatoDecimal,\n familia: Familia,\n ): Decimal {\n const r = this.round(computed, format, familia);\n if (given === undefined) return r;\n const g = this.opt(given, path, format);\n if (g === undefined) return r;\n if (this.conferir && g.minus(r).abs().gt(TOLERANCIA)) {\n this.issues.add(\n path,\n 'valor_divergente',\n `valor informado difere do calculado (${r.toFixed(format.max)}) em mais de ${TOLERANCIA.toString()}`,\n );\n }\n return g;\n }\n\n /** Texto no formato do campo. */\n s(value: Decimal, format: FormatoDecimal): string {\n return formatarDecimal(value, format);\n }\n\n /** Texto opcional: ausente fica ausente, e zero some nos formatos que não aceitam zero. */\n so(value: Decimal | undefined, format: FormatoDecimal): string | undefined {\n if (value === undefined) return undefined;\n if (format.naoNulo && value.isZero()) return undefined;\n return formatarDecimal(value, format);\n }\n}\n\n/** Remove as chaves com `undefined` (o serializer ignora, mas o objeto devolvido fica limpo e comparável). */\nexport function clean<T extends object>(o: T): T {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(o)) if (v !== undefined) out[k] = v;\n return out as T;\n}\n\n/** Só dígitos (tira máscara de CEP, CNPJ numérico, telefone). */\nexport function digits(s: string): string {\n return s.replace(/\\D/g, '');\n}\n",
|
|
15
15
|
"/**\n * Grupo ICMS do item (N01 a N10h). Cada CST/CSOSN do modelo vira o grupo do leiaute correspondente; os valores\n * derivados são calculados com as fórmulas das regras de validação do MOC 7.0 Anexo I, citadas em cada conta.\n */\n\nimport type { TNFe_infNFe_det_imposto_ICMS } from '@sinete/schemas/nfe/PL_010f';\nimport type { DecimalInput } from '../decimal.ts';\nimport { Decimal } from '../decimal.ts';\nimport type { FormatoDecimal } from '../format.ts';\nimport { D0302A04, D0302A04_OPC, D1104V, D1302 } from '../format.ts';\nimport type {\n Desoneracao,\n DesoneracaoSt,\n Icms,\n IcmsFcp,\n IcmsSt,\n IcmsStRetido,\n MotivoDesoneracaoIcms,\n} from '../model.ts';\nimport type { Ctx } from './values.ts';\nimport { clean } from './values.ts';\n\n/** O que o grupo ICMS do item soma nos totais (W02 a W06a e os monofásicos). */\nexport interface IcmsTotais {\n vBC: Decimal;\n vICMS: Decimal;\n vICMSDeson: Decimal;\n /** Parte do desonerado que deduz do valor do item e do total (indDeduzDeson=1). */\n vICMSDesonDeduz: Decimal;\n vFCP: Decimal;\n vBCST: Decimal;\n vST: Decimal;\n vFCPST: Decimal;\n vFCPSTRet: Decimal;\n qBCMono: Decimal;\n vICMSMono: Decimal;\n qBCMonoReten: Decimal;\n vICMSMonoReten: Decimal;\n qBCMonoRet: Decimal;\n vICMSMonoRet: Decimal;\n /** O item tem algum grupo monofásico (os totais monofásicos só vão para o XML nesse caso). */\n mono: boolean;\n}\n\nexport function zeroIcmsTotais(): IcmsTotais {\n const z = Decimal.ZERO;\n return {\n vBC: z,\n vICMS: z,\n vICMSDeson: z,\n vICMSDesonDeduz: z,\n vFCP: z,\n vBCST: z,\n vST: z,\n vFCPST: z,\n vFCPSTRet: z,\n qBCMono: z,\n vICMSMono: z,\n qBCMonoReten: z,\n vICMSMonoReten: z,\n qBCMonoRet: z,\n vICMSMonoRet: z,\n mono: false,\n };\n}\n\n/** Dados do item que as contas do ICMS usam. */\nexport interface IcmsItemBase {\n /** Valor da operação: vProd + vFrete + vSeg + vOutro - vDesc. */\n readonly vOp: Decimal;\n /** IPI do item (entra na base do ST por MVA). */\n readonly vIPI: Decimal;\n}\n\ntype Out = Record<string, string | undefined>;\n\nconst M: FormatoDecimal = D1302;\nconst P: FormatoDecimal = D0302A04;\nconst PO: FormatoDecimal = D0302A04_OPC;\n\nfunction nonNeg(d: Decimal): Decimal {\n return d.isNegative() ? Decimal.ZERO : d;\n}\n\nexport function buildIcms(\n ctx: Ctx,\n input: Icms,\n base: IcmsItemBase,\n path: string,\n): { grupo: TNFe_infNFe_det_imposto_ICMS; totais: IcmsTotais } {\n const t = zeroIcmsTotais();\n const S = (d: Decimal): string => ctx.s(d, M);\n\n /** Parte própria: modBC, vBC (reduzida por pRedBC quando houver), pICMS, vICMS. MOC N15, N16, N17 (RV N17, nota *4). */\n const proprio = (\n i: { modBC?: string; vBC?: DecimalInput; pICMS?: DecimalInput; vICMS?: DecimalInput },\n pRedBC: Decimal | undefined,\n required: boolean,\n ): { out: Out; vBC: Decimal; vICMS: Decimal } | undefined => {\n const pICMS = required ? ctx.req(i.pICMS, `${path}.pICMS`, P) : ctx.opt(i.pICMS, `${path}.pICMS`, P);\n if (pICMS === undefined && i.vBC === undefined && i.vICMS === undefined) return undefined;\n const reduzida =\n pRedBC === undefined ? base.vOp : base.vOp.times(Decimal.HUNDRED.minus(pRedBC)).dividedBy(100, 10, 'HALF_EVEN');\n const vBC = ctx.base(i.vBC, reduzida, `${path}.vBC`, M, 'icms');\n const aliq = pICMS ?? Decimal.ZERO;\n const vICMS = ctx.calc(i.vICMS, vBC.percent(aliq), `${path}.vICMS`, M, 'icms');\n t.vBC = t.vBC.plus(vBC);\n t.vICMS = t.vICMS.plus(vICMS);\n return {\n out: { modBC: i.modBC ?? '3', vBC: S(vBC), pICMS: ctx.s(aliq, P), vICMS: S(vICMS) },\n vBC,\n vICMS,\n };\n };\n\n /**\n * Valor informado cujo grupo depende de outro campo ausente: vira ocorrência no campo que falta, nunca some do XML\n * em silêncio.\n */\n const orfao = (\n valor: DecimalInput | undefined,\n presente: boolean,\n campo: string,\n exige: string,\n base = path,\n ): void => {\n if (valor !== undefined && !presente) {\n ctx.issues.add(`${base}.${exige}`, 'campo_obrigatorio', `${campo} informado exige ${exige}`);\n }\n };\n\n /** FCP próprio (N17a a N17c). `vBCFCP` só vai para o XML nos grupos que o têm. */\n const fcp = (i: IcmsFcp & { pFCP?: DecimalInput; vFCP?: DecimalInput }, vBC: Decimal, withBase: boolean): Out => {\n const pFCP = ctx.opt(i.pFCP, `${path}.pFCP`, PO);\n orfao(i.vBCFCP, i.pFCP !== undefined || i.vFCP !== undefined, 'vBCFCP', 'pFCP');\n if (pFCP === undefined && i.vFCP === undefined) return {};\n const vBCFCP = ctx.base(i.vBCFCP, vBC, `${path}.vBCFCP`, M, 'icms');\n const vFCP = ctx.calc(i.vFCP, vBCFCP.percent(pFCP ?? Decimal.ZERO), `${path}.vFCP`, M, 'icms');\n t.vFCP = t.vFCP.plus(vFCP);\n return { ...(withBase ? { vBCFCP: S(vBCFCP) } : {}), pFCP: ctx.so(pFCP, PO), vFCP: S(vFCP) };\n };\n\n /**\n * ICMS-ST (N18 a N23d). Base por MVA (modBCST 4) quando `vBCST` não vem: (vOp + vIPI) × (1 + pMVAST) × (1 - pRedBCST).\n * `vICMSST = vBCST × pICMSST - ICMS próprio` (MOC N23); `vFCPST = vBCFCPST × pFCPST - vFCP` (RV N23d-10).\n */\n const st = (i: IcmsSt, vICMSProprio: Decimal, vFCPProprio: Decimal): Out => {\n const sp = `${path}.st`;\n const pMVAST = ctx.opt(i.pMVAST, `${sp}.pMVAST`, PO);\n const pRedBCST = ctx.opt(i.pRedBCST, `${sp}.pRedBCST`, PO);\n const pICMSST = ctx.req(i.pICMSST, `${sp}.pICMSST`, P);\n if (i.modBCST === '4' && pMVAST === undefined) {\n // RV N19-10 (rejeição 932): MVA como modalidade exige pMVAST.\n ctx.issues.add(`${sp}.pMVAST`, 'campo_obrigatorio', 'modBCST 4 (MVA) exige pMVAST');\n }\n if (i.modBCST !== '4' && pMVAST !== undefined) {\n // RV N19-20 (rejeição 933): pMVAST só com modalidade MVA.\n ctx.issues.add(`${sp}.pMVAST`, 'combinacao_invalida', 'pMVAST só pode ser informado com modBCST 4 (MVA)');\n }\n let vBCST: Decimal;\n if (i.vBCST === undefined && i.modBCST === '4') {\n const bruta = base.vOp\n .plus(base.vIPI)\n .times(Decimal.HUNDRED.plus(pMVAST ?? Decimal.ZERO))\n .dividedBy(100, 12, 'HALF_EVEN');\n const reduzida =\n pRedBCST === undefined ? bruta : bruta.times(Decimal.HUNDRED.minus(pRedBCST)).dividedBy(100, 12, 'HALF_EVEN');\n vBCST = ctx.round(reduzida, M, 'icms');\n } else {\n vBCST = ctx.req(i.vBCST, `${sp}.vBCST`, M);\n }\n const deducao = ctx.opt(i.vICMSDeducaoST, `${sp}.vICMSDeducaoST`, M) ?? vICMSProprio;\n const vICMSST = ctx.calc(\n i.vICMSST,\n nonNeg(ctx.round(vBCST.percent(pICMSST), M, 'icms').minus(deducao)),\n `${sp}.vICMSST`,\n M,\n 'icms',\n );\n t.vBCST = t.vBCST.plus(vBCST);\n t.vST = t.vST.plus(vICMSST);\n const out: Out = {\n modBCST: i.modBCST,\n pMVAST: ctx.so(pMVAST, PO),\n pRedBCST: ctx.so(pRedBCST, PO),\n vBCST: S(vBCST),\n pICMSST: ctx.s(pICMSST, P),\n vICMSST: S(vICMSST),\n };\n const pFCPST = ctx.opt(i.pFCPST, `${sp}.pFCPST`, PO);\n orfao(i.vBCFCPST, i.pFCPST !== undefined || i.vFCPST !== undefined, 'vBCFCPST', 'pFCPST', sp);\n if (pFCPST !== undefined || i.vFCPST !== undefined) {\n const vBCFCPST = ctx.base(i.vBCFCPST, vBCST, `${sp}.vBCFCPST`, M, 'icms');\n const vFCPST = ctx.calc(\n i.vFCPST,\n nonNeg(ctx.round(vBCFCPST.percent(pFCPST ?? Decimal.ZERO), M, 'icms').minus(vFCPProprio)),\n `${sp}.vFCPST`,\n M,\n 'icms',\n );\n t.vFCPST = t.vFCPST.plus(vFCPST);\n Object.assign(out, { vBCFCPST: S(vBCFCPST), pFCPST: ctx.so(pFCPST, PO), vFCPST: S(vFCPST) });\n }\n return out;\n };\n\n /** Desoneração (N27a, N28, N28b): valor e motivo juntos. */\n const deson = <K extends MotivoDesoneracaoIcms>(d: Desoneracao<K> | undefined): Out => {\n if (d === undefined) return {};\n const v = ctx.req(d.vICMSDeson, `${path}.desoneracao.vICMSDeson`, M);\n t.vICMSDeson = t.vICMSDeson.plus(v);\n if (d.indDeduzDeson === '1') t.vICMSDesonDeduz = t.vICMSDesonDeduz.plus(v);\n return { vICMSDeson: S(v), motDesICMS: d.motDesICMS, indDeduzDeson: d.indDeduzDeson };\n };\n\n const desonSt = (d: DesoneracaoSt | undefined): Out => {\n if (d === undefined) return {};\n const v = ctx.req(d.vICMSSTDeson, `${path}.desoneracaoSt.vICMSSTDeson`, M);\n return { vICMSSTDeson: S(v), motDesICMSST: d.motDesICMSST };\n };\n\n /** Retido anteriormente (N26 a N26b, N27a a N27c, N34 a N37): informativo, só o FCP retido entra no total. */\n const retido = (i: IcmsStRetido): Out => {\n const o = (k: keyof IcmsStRetido, f: FormatoDecimal): string | undefined =>\n ctx.so(ctx.opt(i[k], `${path}.${k}`, f), f);\n const vFCPSTRet = ctx.opt(i.vFCPSTRet, `${path}.vFCPSTRet`, M);\n if (vFCPSTRet !== undefined) t.vFCPSTRet = t.vFCPSTRet.plus(vFCPSTRet);\n return {\n vBCSTRet: o('vBCSTRet', M),\n pST: o('pST', PO),\n vICMSSubstituto: o('vICMSSubstituto', M),\n vICMSSTRet: o('vICMSSTRet', M),\n vBCFCPSTRet: o('vBCFCPSTRet', M),\n pFCPSTRet: o('pFCPSTRet', PO),\n vFCPSTRet: ctx.so(vFCPSTRet, M),\n pRedBCEfet: o('pRedBCEfet', PO),\n vBCEfet: o('vBCEfet', M),\n pICMSEfet: o('pICMSEfet', PO),\n vICMSEfet: o('vICMSEfet', M),\n };\n };\n\n /** Diferimento (CST 51 e 90): vICMSOp = vBC × pICMS; vICMSDif = vICMSOp × pDif; vICMS = vICMSOp - vICMSDif (RV N16a, N16c). */\n const diferimento = (\n i: {\n modBC?: string;\n vBC?: DecimalInput;\n pRedBC?: DecimalInput;\n cBenefRBC?: string;\n pICMS?: DecimalInput;\n vICMSOp?: DecimalInput;\n pDif?: DecimalInput;\n vICMSDif?: DecimalInput;\n vICMS?: DecimalInput;\n pFCP?: DecimalInput;\n vBCFCP?: DecimalInput;\n vFCP?: DecimalInput;\n pFCPDif?: DecimalInput;\n vFCPDif?: DecimalInput;\n vFCPEfet?: DecimalInput;\n },\n redFormat: FormatoDecimal,\n triade: boolean,\n ): Out => {\n const pRedBC = ctx.opt(i.pRedBC, `${path}.pRedBC`, redFormat);\n const pICMS = ctx.opt(i.pICMS, `${path}.pICMS`, P);\n const out: Out = {};\n let vBC: Decimal | undefined;\n if (pICMS !== undefined || i.vBC !== undefined) {\n const reduzida =\n pRedBC === undefined ? base.vOp : base.vOp.times(Decimal.HUNDRED.minus(pRedBC)).dividedBy(100, 10, 'HALF_EVEN');\n vBC = ctx.base(i.vBC, reduzida, `${path}.vBC`, M, 'icms');\n out.modBC = i.modBC ?? '3';\n out.vBC = S(vBC);\n }\n out.pRedBC = ctx.so(pRedBC, redFormat);\n out.cBenefRBC = i.cBenefRBC;\n if (pICMS !== undefined && vBC !== undefined) {\n out.pICMS = ctx.s(pICMS, P);\n const vICMSOp = ctx.calc(i.vICMSOp, vBC.percent(pICMS), `${path}.vICMSOp`, M, 'icms');\n const pDif = ctx.opt(i.pDif, `${path}.pDif`, P);\n const vICMSDif = ctx.calc(i.vICMSDif, vICMSOp.percent(pDif ?? Decimal.ZERO), `${path}.vICMSDif`, M, 'icms');\n const vICMS = ctx.calc(i.vICMS, vICMSOp.minus(vICMSDif), `${path}.vICMS`, M, 'icms');\n const temDif = pDif !== undefined || i.vICMSDif !== undefined || i.vICMSOp !== undefined;\n if (triade) {\n // No CST 90, vICMSOp, pDif e vICMSDif são uma sequência opcional do XSD: vão os três ou nenhum.\n if (temDif)\n Object.assign(out, { vICMSOp: S(vICMSOp), pDif: ctx.s(pDif ?? Decimal.ZERO, P), vICMSDif: S(vICMSDif) });\n } else {\n Object.assign(out, {\n vICMSOp: S(vICMSOp),\n pDif: ctx.so(pDif, P),\n vICMSDif: pDif === undefined && i.vICMSDif === undefined ? undefined : S(vICMSDif),\n });\n }\n Object.assign(out, {\n vICMS: S(vICMS),\n });\n t.vBC = t.vBC.plus(vBC);\n t.vICMS = t.vICMS.plus(vICMS);\n } else {\n const informados = [i.vBC, i.vICMS, i.vICMSOp, i.pDif, i.vICMSDif, i.pRedBC].some((x) => x !== undefined);\n if (triade && informados) {\n // No CST 90 o ICMS próprio é uma sequência do XSD (modBC, vBC, pICMS, vICMS e a tríade do diferimento): sem\n // pICMS nada dela pode ir, e o que veio não pode sumir em silêncio.\n ctx.issues.add(\n `${path}.pICMS`,\n 'campo_obrigatorio',\n 'o ICMS próprio do CST 90 (vBC, vICMS, diferimento) exige pICMS',\n );\n }\n if (!triade) {\n // CST 51 sem alíquota: cada campo do XSD é opcional e vai como veio (há diferimento informado só com pDif).\n Object.assign(out, {\n modBC: out.modBC ?? i.modBC,\n vICMSOp: ctx.so(ctx.opt(i.vICMSOp, `${path}.vICMSOp`, M), M),\n pDif: ctx.so(ctx.opt(i.pDif, `${path}.pDif`, P), P),\n vICMSDif: ctx.so(ctx.opt(i.vICMSDif, `${path}.vICMSDif`, M), M),\n });\n }\n const vICMS = ctx.opt(i.vICMS, `${path}.vICMS`, M);\n if (vICMS !== undefined) {\n out.vICMS = S(vICMS);\n t.vICMS = t.vICMS.plus(vICMS);\n }\n if (vBC !== undefined) t.vBC = t.vBC.plus(vBC);\n }\n const pFCP = ctx.opt(i.pFCP, `${path}.pFCP`, PO);\n const temFcp = i.pFCP !== undefined || i.vFCP !== undefined;\n for (const k of ['vBCFCP', 'pFCPDif', 'vFCPDif', 'vFCPEfet'] as const) orfao(i[k], temFcp, k, 'pFCP');\n orfao(i.vFCPEfet, !temFcp || i.pFCPDif !== undefined || i.vFCPDif !== undefined, 'vFCPEfet', 'pFCPDif');\n if (pFCP !== undefined || i.vFCP !== undefined) {\n const vBCFCP = ctx.base(i.vBCFCP, vBC ?? Decimal.ZERO, `${path}.vBCFCP`, M, 'icms');\n const vFCP = ctx.calc(i.vFCP, vBCFCP.percent(pFCP ?? Decimal.ZERO), `${path}.vFCP`, M, 'icms');\n const pFCPDif = ctx.opt(i.pFCPDif, `${path}.pFCPDif`, PO);\n const vFCPDif = ctx.calc(i.vFCPDif, vFCP.percent(pFCPDif ?? Decimal.ZERO), `${path}.vFCPDif`, M, 'icms');\n const vFCPEfet = ctx.calc(i.vFCPEfet, vFCP.minus(vFCPDif), `${path}.vFCPEfet`, M, 'icms');\n // W04b-10 (rejeição 861): o total soma o vFCP declarado no item (N17c), não o efetivo depois do diferimento.\n t.vFCP = t.vFCP.plus(vFCP);\n const temDif = pFCPDif !== undefined || i.vFCPDif !== undefined;\n Object.assign(out, {\n vBCFCP: S(vBCFCP),\n pFCP: ctx.so(pFCP, PO),\n vFCP: S(vFCP),\n pFCPDif: ctx.so(pFCPDif, PO),\n vFCPDif: temDif ? S(vFCPDif) : undefined,\n vFCPEfet: temDif ? S(vFCPEfet) : undefined,\n });\n }\n return out;\n };\n\n const q = (v: DecimalInput | undefined, k: string): Decimal | undefined => ctx.opt(v, `${path}.${k}`, D1104V);\n /**\n * Valor monofásico (NT 2023.001): padrão quantidade × ad rem em 2 casas. O informado prevalece sem conferência: há\n * notas autorizadas cujo valor não é o produto exato (corpus local, `test/golden/golden.ts`).\n */\n const mono = (\n qtd: Decimal | undefined,\n adRem: Decimal | undefined,\n given: DecimalInput | undefined,\n k: string,\n ): Decimal => ctx.base(given, (qtd ?? Decimal.ZERO).times(adRem ?? Decimal.ZERO), `${path}.${k}`, M, 'icms');\n\n let grupo: Record<string, Out>;\n if ('CSOSN' in input) {\n const orig = input.orig;\n switch (input.CSOSN) {\n case '101': {\n const pCredSN = ctx.req(input.pCredSN, `${path}.pCredSN`, P);\n const v = ctx.calc(input.vCredICMSSN, base.vOp.percent(pCredSN), `${path}.vCredICMSSN`, M, 'icms');\n grupo = { ICMSSN101: { orig, CSOSN: '101', pCredSN: ctx.s(pCredSN, P), vCredICMSSN: S(v) } };\n break;\n }\n case '102':\n case '103':\n case '300':\n case '400':\n grupo = { ICMSSN102: { orig, CSOSN: input.CSOSN } };\n break;\n case '201': {\n const stOut = st(input.st, Decimal.ZERO, Decimal.ZERO);\n const pCredSN = ctx.req(input.pCredSN, `${path}.pCredSN`, P);\n const v = ctx.calc(input.vCredICMSSN, base.vOp.percent(pCredSN), `${path}.vCredICMSSN`, M, 'icms');\n grupo = { ICMSSN201: { orig, CSOSN: '201', ...stOut, pCredSN: ctx.s(pCredSN, P), vCredICMSSN: S(v) } };\n break;\n }\n case '202':\n case '203':\n grupo = { ICMSSN202: { orig, CSOSN: input.CSOSN, ...st(input.st, Decimal.ZERO, Decimal.ZERO) } };\n break;\n case '500':\n grupo = { ICMSSN500: { orig, CSOSN: '500', ...retido(input) } };\n break;\n case '900': {\n const pRedBC = ctx.opt(input.pRedBC, `${path}.pRedBC`, PO);\n const p = proprio(input, pRedBC, false);\n const out: Out = { orig, CSOSN: '900' };\n if (p)\n Object.assign(out, {\n modBC: p.out.modBC,\n vBC: p.out.vBC,\n pRedBC: ctx.so(pRedBC, PO),\n pICMS: p.out.pICMS,\n vICMS: p.out.vICMS,\n });\n // Com ICMS próprio destacado, o ST abate o próprio, como nos grupos do regime normal (MOC N23).\n if (input.st) Object.assign(out, st(input.st, p?.vICMS ?? Decimal.ZERO, Decimal.ZERO));\n const pCredSN = ctx.opt(input.pCredSN, `${path}.pCredSN`, P);\n orfao(input.vCredICMSSN, input.pCredSN !== undefined, 'vCredICMSSN', 'pCredSN');\n if (pCredSN !== undefined) {\n const v = ctx.calc(input.vCredICMSSN, base.vOp.percent(pCredSN), `${path}.vCredICMSSN`, M, 'icms');\n Object.assign(out, { pCredSN: ctx.s(pCredSN, P), vCredICMSSN: S(v) });\n }\n grupo = { ICMSSN900: out };\n break;\n }\n }\n } else if (input.grupo === 'Part') {\n const pRedBC = ctx.opt(input.pRedBC, `${path}.pRedBC`, PO);\n const p = proprio(input, pRedBC, true) as { out: Out; vICMS: Decimal };\n const pBCOp = ctx.req(input.pBCOp, `${path}.pBCOp`, PO);\n grupo = {\n ICMSPart: {\n orig: input.orig,\n CST: input.CST,\n modBC: input.modBC,\n vBC: p.out.vBC,\n pRedBC: ctx.so(pRedBC, PO),\n pICMS: p.out.pICMS,\n vICMS: p.out.vICMS,\n ...st(input.st, p.vICMS, Decimal.ZERO),\n pBCOp: ctx.s(pBCOp, PO),\n UFST: input.UFST,\n ...deson(input.desoneracao),\n },\n };\n } else if (input.grupo === 'ST') {\n grupo = {\n ICMSST: {\n orig: input.orig,\n CST: input.CST,\n ...retido(input),\n vBCSTRet: S(ctx.req(input.vBCSTRet, `${path}.vBCSTRet`, M)),\n vICMSSTRet: S(ctx.req(input.vICMSSTRet, `${path}.vICMSSTRet`, M)),\n vBCSTDest: S(ctx.req(input.vBCSTDest, `${path}.vBCSTDest`, M)),\n vICMSSTDest: S(ctx.req(input.vICMSSTDest, `${path}.vICMSSTDest`, M)),\n },\n };\n } else {\n const orig = input.orig;\n switch (input.CST) {\n case '00': {\n const p = proprio(input, undefined, true) as { out: Out; vBC: Decimal };\n grupo = { ICMS00: { orig, CST: '00', ...p.out, ...fcp(input, p.vBC, false) } };\n break;\n }\n case '02': {\n const qBCMono = q(input.qBCMono, 'qBCMono');\n const adRem = ctx.req(input.adRemICMS, `${path}.adRemICMS`, P);\n const v = mono(qBCMono, adRem, input.vICMSMono, 'vICMSMono');\n t.mono = true;\n t.qBCMono = t.qBCMono.plus(qBCMono ?? Decimal.ZERO);\n t.vICMSMono = t.vICMSMono.plus(v);\n grupo = {\n ICMS02: {\n orig,\n CST: '02',\n qBCMono: ctx.so(qBCMono, D1104V),\n adRemICMS: ctx.s(adRem, P),\n vICMSMono: S(v),\n },\n };\n break;\n }\n case '10': {\n const p = proprio(input, undefined, true) as { out: Out; vBC: Decimal; vICMS: Decimal };\n const f = fcp(input, p.vBC, true);\n const vFCP = f.vFCP === undefined ? Decimal.ZERO : Decimal.of(f.vFCP);\n grupo = {\n ICMS10: { orig, CST: '10', ...p.out, ...f, ...st(input.st, p.vICMS, vFCP), ...desonSt(input.desoneracaoSt) },\n };\n break;\n }\n case '15': {\n const qBCMono = q(input.qBCMono, 'qBCMono');\n const adRem = ctx.req(input.adRemICMS, `${path}.adRemICMS`, P);\n const v = mono(qBCMono, adRem, input.vICMSMono, 'vICMSMono');\n const qReten = q(input.qBCMonoReten, 'qBCMonoReten');\n const adRemReten = ctx.req(input.adRemICMSReten, `${path}.adRemICMSReten`, P);\n if (input.pRedAdRem !== undefined) {\n // Com redução da ad rem (pRedAdRem, motRedAdRem) a conta de cada valor não está nas fontes que este pacote\n // cita (NT 2023.001 não versionada aqui): os valores vêm informados em vez de derivados sem a redução.\n if (input.vICMSMono === undefined)\n ctx.issues.add(`${path}.vICMSMono`, 'campo_obrigatorio', 'com pRedAdRem, informe vICMSMono');\n if (input.vICMSMonoReten === undefined) {\n ctx.issues.add(`${path}.vICMSMonoReten`, 'campo_obrigatorio', 'com pRedAdRem, informe vICMSMonoReten');\n }\n }\n const vReten = mono(qReten, adRemReten, input.vICMSMonoReten, 'vICMSMonoReten');\n t.mono = true;\n t.qBCMono = t.qBCMono.plus(qBCMono ?? Decimal.ZERO);\n t.vICMSMono = t.vICMSMono.plus(v);\n t.qBCMonoReten = t.qBCMonoReten.plus(qReten ?? Decimal.ZERO);\n t.vICMSMonoReten = t.vICMSMonoReten.plus(vReten);\n grupo = {\n ICMS15: {\n orig,\n CST: '15',\n qBCMono: ctx.so(qBCMono, D1104V),\n adRemICMS: ctx.s(adRem, P),\n vICMSMono: S(v),\n qBCMonoReten: ctx.so(qReten, D1104V),\n adRemICMSReten: ctx.s(adRemReten, P),\n vICMSMonoReten: S(vReten),\n pRedAdRem: ctx.so(ctx.opt(input.pRedAdRem, `${path}.pRedAdRem`, D0302A04), D0302A04),\n motRedAdRem: input.motRedAdRem,\n },\n };\n break;\n }\n case '20': {\n const pRedBC = ctx.req(input.pRedBC, `${path}.pRedBC`, P);\n const p = proprio(input, pRedBC, true) as { out: Out; vBC: Decimal };\n grupo = {\n ICMS20: {\n orig,\n CST: '20',\n modBC: p.out.modBC,\n pRedBC: ctx.s(pRedBC, P),\n vBC: p.out.vBC,\n pICMS: p.out.pICMS,\n vICMS: p.out.vICMS,\n ...fcp(input, p.vBC, true),\n ...deson(input.desoneracao),\n },\n };\n break;\n }\n case '30':\n grupo = {\n ICMS30: { orig, CST: '30', ...st(input.st, Decimal.ZERO, Decimal.ZERO), ...deson(input.desoneracao) },\n };\n break;\n case '40':\n case '41':\n case '50':\n grupo = { ICMS40: { orig, CST: input.CST, ...deson(input.desoneracao) } };\n break;\n case '51':\n grupo = { ICMS51: { orig, CST: '51', ...diferimento(input, P, false) } };\n break;\n case '53': {\n const qBCMono = q(input.qBCMono, 'qBCMono');\n const adRem = ctx.opt(input.adRemICMS, `${path}.adRemICMS`, P);\n const vOp = mono(qBCMono, adRem, input.vICMSMonoOp, 'vICMSMonoOp');\n const pDif = ctx.opt(input.pDif, `${path}.pDif`, P);\n const vDif = ctx.calc(input.vICMSMonoDif, vOp.percent(pDif ?? Decimal.ZERO), `${path}.vICMSMonoDif`, M, 'icms');\n const v = ctx.calc(input.vICMSMono, vOp.minus(vDif), `${path}.vICMSMono`, M, 'icms');\n const qDif = q(input.qBCMonoDif, 'qBCMonoDif');\n const adRemDif = ctx.opt(input.adRemICMSDif, `${path}.adRemICMSDif`, P);\n t.mono = true;\n t.qBCMono = t.qBCMono.plus(qBCMono ?? Decimal.ZERO);\n t.vICMSMono = t.vICMSMono.plus(v);\n grupo = {\n ICMS53: {\n orig,\n CST: '53',\n qBCMono: ctx.so(qBCMono, D1104V),\n adRemICMS: ctx.so(adRem, P),\n vICMSMonoOp: adRem === undefined && input.vICMSMonoOp === undefined ? undefined : S(vOp),\n pDif: ctx.so(pDif, P),\n vICMSMonoDif: pDif === undefined && input.vICMSMonoDif === undefined ? undefined : S(vDif),\n vICMSMono: adRem === undefined && input.vICMSMono === undefined ? undefined : S(v),\n qBCMonoDif: ctx.so(qDif, D1104V),\n adRemICMSDif: ctx.so(adRemDif, P),\n },\n };\n break;\n }\n case '60':\n grupo = { ICMS60: { orig, CST: '60', ...retido(input) } };\n break;\n case '61': {\n const qRet = q(input.qBCMonoRet, 'qBCMonoRet');\n const adRem = ctx.req(input.adRemICMSRet, `${path}.adRemICMSRet`, P);\n const v = mono(qRet, adRem, input.vICMSMonoRet, 'vICMSMonoRet');\n t.mono = true;\n t.qBCMonoRet = t.qBCMonoRet.plus(qRet ?? Decimal.ZERO);\n t.vICMSMonoRet = t.vICMSMonoRet.plus(v);\n grupo = {\n ICMS61: {\n orig,\n CST: '61',\n qBCMonoRet: ctx.so(qRet, D1104V),\n adRemICMSRet: ctx.s(adRem, P),\n vICMSMonoRet: S(v),\n },\n };\n break;\n }\n case '70': {\n const pRedBC = ctx.req(input.pRedBC, `${path}.pRedBC`, P);\n const p = proprio(input, pRedBC, true) as { out: Out; vBC: Decimal; vICMS: Decimal };\n const f = fcp(input, p.vBC, true);\n const vFCP = f.vFCP === undefined ? Decimal.ZERO : Decimal.of(f.vFCP);\n grupo = {\n ICMS70: {\n orig,\n CST: '70',\n modBC: p.out.modBC,\n pRedBC: ctx.s(pRedBC, P),\n vBC: p.out.vBC,\n pICMS: p.out.pICMS,\n vICMS: p.out.vICMS,\n ...f,\n ...st(input.st, p.vICMS, vFCP),\n ...deson(input.desoneracao),\n ...desonSt(input.desoneracaoSt),\n },\n };\n break;\n }\n case '90': {\n const d = diferimento(input, PO, true);\n const vICMS = d.vICMS === undefined ? Decimal.ZERO : Decimal.of(d.vICMS);\n // RV N23d-10: vFCPST = vBCFCPST × pFCPST - vFCP (o vFCP declarado, N17c).\n const vFCP = d.vFCP;\n grupo = {\n ICMS90: {\n orig,\n CST: '90',\n ...d,\n ...(input.st ? st(input.st, vICMS, vFCP === undefined ? Decimal.ZERO : Decimal.of(vFCP)) : {}),\n ...deson(input.desoneracao),\n ...desonSt(input.desoneracaoSt),\n },\n };\n break;\n }\n }\n }\n const [name, body] = Object.entries(grupo)[0] as [string, Out];\n return { grupo: { [name]: clean(body) } as unknown as TNFe_infNFe_det_imposto_ICMS, totais: t };\n}\n",
|
|
16
|
-
"/**\n * NFC-e (modelo 65): as regras de montagem que valem só para ela e o `infNFeSupl` (QR Code e URL de consulta por\n * chave). As regras vêm do MOC 7.0 Anexo I (regras de validação com modelo 65 e aplicação obrigatória), da NT 2023.002\n * (emitente pessoa física, v1.01), da NT 2025.001 v1.03 (QR Code versão 3 e pagamentos) e da NT 2025.002 v1.51 (reforma\n * tributária); o leiaute do QR Code, do Manual de Padrões Técnicos do DANFE NFC-e e QR Code, versão 6.0 (março de\n * 2025), itens 4.3 e 4.4. Regra opcional por UF (aplicação \"Facult.\" sem mudança posterior) não entra aqui: a SEFAZ da\n * UF decide, e recusar localmente bloquearia a venda onde a regra não vale.\n */\n\nimport type { Ambiente, Assinador, Uf } from '@sinete/core';\nimport { tpAmbDoAmbiente } from '@sinete/core';\nimport { c14n, codificarBase64, lerXml, PREFIXO_DIGEST_INFO_SHA1, primeiroFilho } from '@sinete/core/xml';\nimport { lerCnpj } from '@sinete/validators';\nimport urls from '../data/nfce-urls.json' with { type: 'json' };\nimport { Decimal } from '../decimal.ts';\nimport type { Issues } from '../issues.ts';\nimport type { DadosNfe } from '../model.ts';\n\n/**\n * Versão do QR Code da NFC-e. A 3 (padrão) dispensa o CSC: na emissão normal leva só chave, versão e ambiente, e na\n * contingência off-line leva a assinatura dos parâmetros com o certificado da nota (NT 2025.001, item 02.1). A 2 usa\n * o CSC e o identificador dele (`idCSC`), fornecidos pela SEFAZ da UF; o emitente pessoa física não pode usá-la\n * (ZX02-222, rejeição 444).\n */\nexport type QrCodeNfceOpcoes =\n | { readonly versao: '3' }\n | {\n readonly versao: '2';\n /** Identificador do CSC na SEFAZ (até 6 dígitos); os zeros à esquerda saem do QR Code (Manual 6.0, 4.3.1). */\n readonly idCSC: string;\n /** O CSC (16 a 36 caracteres, Manual 6.0, 4.6). Nunca vai para o XML: só entra no hash. */\n readonly CSC: string;\n };\n\n/** O que a montagem deixa pronto para o `infNFeSupl` da NFC-e. */\nexport interface NfceSupl {\n readonly versao: '2' | '3';\n /** URL de consulta por chave de acesso (`urlChave`), impressa no DANFC-e. */\n readonly urlChave: string;\n /** Endereço do QR Code até o `?p=`, inclusive. */\n readonly base: string;\n /** Parâmetros já separados por `|`: completos, ou de 1 a 7 quando falta a assinatura (versão 3 off-line). */\n readonly parametros: string;\n /** Versão 3 em contingência off-line: os parâmetros são assinados com o certificado da nota (Manual 6.0, 4.4.2). */\n readonly assinar: boolean;\n}\n\ntype Entrada = { readonly url: string | null; readonly desde?: string; readonly nota?: string };\ntype TabelaUrls = Readonly<Record<Ambiente, Readonly<Record<string, readonly Entrada[]>>>>;\n\n/** O endereço vigente no dia (`AAAA-MM-DD`, horário de Brasília): o de início mais recente que não passou do dia. */\nfunction vigente(lista: readonly Entrada[] | undefined, dia: string): Entrada | undefined {\n let achado: Entrada | undefined;\n for (const e of lista ?? []) {\n if ((e.desde ?? '') <= dia && (achado === undefined || (e.desde ?? '') >= (achado.desde ?? ''))) achado = e;\n }\n return achado;\n}\n\n/**\n * Endereços da NFC-e da UF no ambiente e no dia (`data/nfce-urls.json`, das tabelas do Portal Nacional da NFC-e). O\n * `qrCode` é `undefined` onde a tabela não traz o endereço completo (AM e MA publicam sem o protocolo): informe\n * `MontarNfeOpcoes.urlQrCode`.\n */\nexport function urlsNfce(\n uf: Uf,\n ambiente: Ambiente,\n dia: string,\n): { readonly qrCode: string | undefined; readonly urlChave: string | undefined } {\n const q = vigente((urls.qrCode as TabelaUrls)[ambiente][uf], dia);\n const c = vigente((urls.urlChave as TabelaUrls)[ambiente][uf], dia);\n return { qrCode: q?.url ?? undefined, urlChave: c?.url ?? undefined };\n}\n\nconst te = new TextEncoder();\nconst NFE_NS = 'http://www.portalfiscal.inf.br/nfe';\n\nasync function sha1(bytes: Uint8Array): Promise<Uint8Array> {\n return new Uint8Array(await globalThis.crypto.subtle.digest('SHA-1', bytes as Uint8Array<ArrayBuffer>));\n}\n\nconst hex = (b: Uint8Array): string => Array.from(b, (x) => x.toString(16).padStart(2, '0')).join('');\n\n/**\n * `digVal` do QR Code versão 2 off-line: o DigestValue do `infNFe` (SHA-1 do C14N, em Base64, o mesmo da assinatura)\n * convertido para hexadecimal caractere a caractere (Manual 6.0, 4.3.2 e o exemplo de 4.3.6.2: `yzGY...` vira\n * `797a4759...`).\n */\nasync function digValHex(xml: string): Promise<string> {\n const doc = lerXml(xml);\n const inf = primeiroFilho(doc.raiz, 'infNFe', NFE_NS);\n if (inf === undefined) throw new Error('NF-e montada sem infNFe');\n return hexDoDigestValue(codificarBase64(await sha1(te.encode(c14n(inf)))));\n}\n\n/** O DigestValue em Base64 convertido para hexadecimal, caractere a caractere (Manual 6.0, 4.3.5, passo 1). */\nexport function hexDoDigestValue(digestValue: string): string {\n return hex(te.encode(digestValue));\n}\n\n/** Hash do QR Code versão 2: SHA-1 dos parâmetros concatenados ao CSC, em hexadecimal (Manual 6.0, 4.3.4 e 4.3.5). */\nexport async function hashQrCodeV2(parametros: string, csc: string): Promise<string> {\n return hex(await sha1(te.encode(parametros + csc))).toUpperCase();\n}\n\nexport interface DadosQrCode {\n readonly chave: string;\n readonly ambiente: Ambiente;\n readonly tpEmis: string;\n /** `dhEmi` do documento. */\n readonly dhEmi: string;\n /** `vNF` como vai no XML (ponto decimal, sem milhar). */\n readonly vNF: string;\n readonly dest?: { readonly CNPJ?: string; readonly CPF?: string; readonly idEstrangeiro?: string };\n /** O XML montado (`<NFe>` sem assinatura): o `digVal` da versão 2 off-line sai dele. */\n readonly xml: string;\n}\n\n/**\n * Parâmetros do QR Code (Manual 6.0): versão 2 on-line `chave|2|tpAmb|idCSC|hash` e off-line\n * `chave|2|tpAmb|dia|vNF|digVal|idCSC|hash`, com o hash SHA-1 em hexadecimal dos parâmetros concatenados ao CSC\n * (4.3.4 e 4.3.5); versão 3 on-line `chave|3|tpAmb` e off-line `chave|3|tpAmb|dia|vNF|tpIdDest|idDest`, que o\n * certificado assina (4.4.1 e 4.4.2). Destinatário não identificado deixa os campos 6 e 7 vazios; o estrangeiro, só o\n * 7. Na contingência off-line (tpEmis 9) entram o dia da emissão e o valor da nota, que o consumidor confere sem a\n * nota ter chegado à SEFAZ.\n */\nexport async function parametrosQrCode(\n d: DadosQrCode,\n qr: QrCodeNfceOpcoes,\n): Promise<{ readonly parametros: string; readonly assinar: boolean }> {\n const tpAmb = tpAmbDoAmbiente(d.ambiente);\n const offline = d.tpEmis === '9';\n const dia = d.dhEmi.slice(8, 10);\n if (qr.versao === '3') {\n if (!offline) return { parametros: `${d.chave}|3|${tpAmb}`, assinar: false };\n const dest = d.dest;\n const [tp, id] =\n dest?.CNPJ !== undefined\n ? ['1', dest.CNPJ]\n : dest?.CPF !== undefined\n ? ['2', dest.CPF]\n : dest?.idEstrangeiro !== undefined\n ? ['3', '']\n : ['', ''];\n return { parametros: `${d.chave}|3|${tpAmb}|${dia}|${d.vNF}|${tp}|${id}`, assinar: true };\n }\n const idCSC = String(Number(qr.idCSC));\n const antes = offline\n ? `${d.chave}|2|${tpAmb}|${dia}|${d.vNF}|${await digValHex(d.xml)}|${idCSC}`\n : `${d.chave}|2|${tpAmb}|${idCSC}`;\n return { parametros: `${antes}|${await hashQrCodeV2(antes, qr.CSC)}`, assinar: false };\n}\n\n/**\n * Assinatura dos parâmetros 1 a 7 do QR Code versão 3 off-line: RSA com SHA-1 (PKCS#1 v1.5), em Base64, com o mesmo\n * certificado que assina a NFC-e (Manual 6.0, 4.4.2, parâmetro 8).\n */\nexport async function assinarParametros(parametros: string, signer: Assinador): Promise<string> {\n const bytes = te.encode(parametros);\n if (signer.tipo === 'dados') return codificarBase64(await signer.assinar(bytes, 'SHA-1'));\n const h = await sha1(bytes);\n const di = new Uint8Array(PREFIXO_DIGEST_INFO_SHA1.length + h.length);\n di.set(PREFIXO_DIGEST_INFO_SHA1);\n di.set(h, PREFIXO_DIGEST_INFO_SHA1.length);\n return codificarBase64(await signer.assinarDigestInfo(di));\n}\n\n/** CFOP da prestação de serviço tributada pelo ISSQN na NFC-e (MOC 7.0 Anexo I, RV I08-150 a I08-170). */\nconst CFOP_ISSQN = '5933';\n\n/** Valor da NFC-e acima do qual o destinatário tem de ser identificado (MOC 7.0 Anexo I, RV W16-40, rejeição 750). */\nexport const NFCE_LIMITE_SEM_DESTINATARIO = '10000.00';\n\n/** Meios de pagamento que a NFC-e não aceita: 14 duplicata mercantil (YA02-10), 90 sem pagamento (YA02-40), 99 outros (YA02-50). */\nconst TPAG_VEDADOS: Readonly<Record<string, string>> = {\n '14': 'duplicata mercantil não é meio de pagamento da NFC-e (YA02-10, rejeição 857)',\n '90': 'a NFC-e sempre tem pagamento: tPag 90 (sem pagamento) é recusado (YA02-40, rejeição 899)',\n '99': 'tPag 99 (outros) não é aceito na NFC-e (YA02-50, rejeição 436, NT 2020.006)',\n};\n\n/** Identificação já resolvida pelo montador (com os padrões aplicados). */\nexport interface IdeNfce {\n readonly tpNF: string;\n readonly idDest: string;\n readonly tpImp: string;\n readonly finNFe: string;\n readonly indFinal: string;\n readonly indPres: string;\n}\n\n/**\n * Regras da NFC-e sobre a entrada (origem `entrada`, ADR 0011), todas de aplicação obrigatória. Grupos que a NFC-e\n * não tem saem como `grupo_vedado` no caminho da entrada.\n */\nexport function conferirNfce(input: DadosNfe, ide: IdeNfce, issues: Issues): void {\n const vedado = (path: string, msg: string): void => issues.add(path, 'grupo_vedado', `NFC-e ${msg}`);\n const invalido = (path: string, msg: string): void => issues.add(path, 'campo_invalido', `NFC-e ${msg}`);\n\n // B. Identificação\n if (input.dhSaiEnt !== undefined) vedado('dhSaiEnt', 'sem data de entrada ou saída (B10-10, rejeição 705)');\n if (input.dPrevEntrega !== undefined) {\n vedado('dPrevEntrega', 'sem data de previsão de entrega (NT 2025.002, B10a-10, rejeição 1153)');\n }\n if (ide.tpNF !== '1') invalido('tpNF', 'só de saída, tpNF 1 (B11-10, rejeição 706)');\n if (ide.idDest !== '1') {\n invalido('idDest', 'só em operação interna, idDest 1 (B11a-10, rejeição 707)');\n }\n if (ide.tpImp !== '4' && ide.tpImp !== '5') {\n invalido('tpImp', 'com DANFC-e: tpImp 4 (impresso) ou 5 (mensagem eletrônica) (B21-10, rejeição 709)');\n }\n if (ide.finNFe !== '1') invalido('finNFe', 'só com finalidade normal, finNFe 1 (B25-20, rejeição 715)');\n if (ide.indFinal !== '1') invalido('indFinal', 'só com consumidor final, indFinal 1 (B25a-10, rejeição 716)');\n if (!['1', '4', '5'].includes(ide.indPres)) {\n invalido('indPres', 'só presencial: indPres 1, 4 (entrega a domicílio) ou 5 (NT 2025.002, B25b-20, rejeição 717)');\n }\n if (input.cMunFGIBS !== undefined && ide.indPres !== '5') {\n invalido(\n 'cMunFGIBS',\n 'com cMunFGIBS só em operação presencial fora do estabelecimento, indPres 5 (NT 2025.002, B25b-60, rejeição 1000)',\n );\n }\n if (input.cMunFGIBS === undefined && ide.indPres === '5') {\n issues.add(\n 'cMunFGIBS',\n 'campo_obrigatorio',\n 'NFC-e presencial fora do estabelecimento (indPres 5) informa cMunFGIBS (NT 2025.002, B25b-70, rejeição 1005)',\n );\n }\n if (input.referenciadas !== undefined && input.referenciadas.length > 0) {\n vedado('referenciadas', 'não referencia documento fiscal (BA01-10, rejeição 708)');\n }\n if (input.gCompraGov !== undefined)\n vedado('gCompraGov', 'sem compra governamental (NT 2025.002, BB01-10, rejeição 1006)');\n\n // C. Emitente\n if (input.emitente.IEST !== undefined)\n vedado('emitente.IEST', 'sem IE de substituto tributário (C18-10, rejeição 718)');\n\n // E. Destinatário: opcional, obrigatório na entrega a domicílio\n const d = input.destinatario;\n if (ide.indPres === '4' && d === undefined) {\n issues.add(\n 'destinatario',\n 'campo_obrigatorio',\n 'NFC-e com entrega a domicílio identifica o destinatário (E01-20, rejeição 787)',\n );\n }\n if (ide.indPres === '4' && d !== undefined && d.endereco === undefined) {\n issues.add(\n 'destinatario.endereco',\n 'campo_obrigatorio',\n 'NFC-e com entrega a domicílio informa o endereço do destinatário (E05-20, rejeição 788)',\n );\n }\n if (d !== undefined) {\n if (d.CNPJ !== undefined && input.emitente.CNPJ !== undefined && digitos(d.CNPJ) === digitos(input.emitente.CNPJ)) {\n invalido('destinatario.CNPJ', 'com destinatário igual ao emitente (E02-20, rejeição 220)');\n }\n if (d.indIEDest !== '9') {\n invalido('destinatario.indIEDest', 'só para não contribuinte, indIEDest 9 (E16a-10, rejeição 789)');\n }\n if (d.ISUF !== undefined) vedado('destinatario.ISUF', 'sem inscrição na Suframa (E18-10, rejeição 730)');\n }\n\n // I a UA. Itens\n input.itens.forEach((it, n) => {\n const p = `itens[${n}]`;\n const esp = (it.produto.especifico ?? {}) as Record<string, unknown>;\n if (esp.veicProd !== undefined)\n vedado(`${p}.produto.especifico.veicProd`, 'sem veículo novo (J01-10, rejeição 736)');\n if (esp.arma !== undefined) vedado(`${p}.produto.especifico.arma`, 'sem armamento (L01-10, rejeição 738)');\n if (esp.nRECOPI !== undefined)\n vedado(`${p}.produto.especifico.nRECOPI`, 'sem papel imune RECOPI (LB01-10, rejeição 348)');\n if (it.produto.tpCredPresIBSZFM !== undefined) {\n vedado(\n `${p}.produto.tpCredPresIBSZFM`,\n 'sem classificação para subapuração do IBS na ZFM (NT 2025.002, I05k-10, rejeição 1165)',\n );\n }\n const cfop = it.produto.CFOP.replace(/\\D/g, '');\n const imp = it.impostos;\n if (cfop === CFOP_ISSQN && imp.issqn === undefined) {\n issues.add(\n `${p}.impostos.issqn`,\n 'combinacao_invalida',\n 'NFC-e com CFOP 5.933 tem o grupo do ISSQN (I08-160, rejeição 374)',\n );\n }\n if (cfop !== CFOP_ISSQN && imp.issqn !== undefined) {\n issues.add(\n `${p}.produto.CFOP`,\n 'combinacao_invalida',\n 'NFC-e com ISSQN usa o CFOP 5.933 (I08-170, rejeição 374)',\n );\n }\n const icms = imp.icms as { grupo?: string; CST?: string; st?: unknown } | undefined;\n if (icms?.grupo === 'Part') vedado(`${p}.impostos.icms`, 'sem partilha do ICMS entre UF (N12-50, rejeição 741)');\n if (icms?.grupo === 'ST') vedado(`${p}.impostos.icms`, 'sem repasse do ICMS-ST retido (N12-60, rejeição 740)');\n if (icms?.grupo === undefined && icms?.CST === '90' && icms.st !== undefined) {\n vedado(`${p}.impostos.icms.st`, 'com CST 90 sem os dados do ICMS-ST (N12-34, rejeição 381)');\n }\n if (imp.icmsUfDest !== undefined)\n vedado(`${p}.impostos.icmsUfDest`, 'sem ICMS da UF de destino (NA01-10, rejeição 807)');\n if (imp.ipi !== undefined) vedado(`${p}.impostos.ipi`, 'sem IPI (O01-10, rejeição 742)');\n if (imp.ii !== undefined) vedado(`${p}.impostos.ii`, 'sem imposto de importação (P01-10, rejeição 743)');\n if (imp.pisSt !== undefined) vedado(`${p}.impostos.pisSt`, 'sem PIS-ST (R01-10, rejeição 746)');\n if (imp.cofinsSt !== undefined) vedado(`${p}.impostos.cofinsSt`, 'sem COFINS-ST (T01-10, rejeição 749)');\n if (it.impostoDevol !== undefined) vedado(`${p}.impostoDevol`, 'sem devolução de tributos (UA01-20, rejeição 390)');\n });\n\n // X. Transporte: só na entrega a domicílio\n const tr = input.transporte;\n const entrega = ide.indPres === '4';\n if (tr !== undefined && tr.modFrete !== '9' && !entrega) {\n invalido('transporte.modFrete', 'sem frete fora da entrega a domicílio: modFrete 9 (X02-10, rejeição 753)');\n }\n if (tr?.transportador !== undefined && !entrega) {\n vedado('transporte.transportador', 'só tem transportador na entrega a domicílio (X03-10, rejeição 754)');\n }\n if (entrega && tr?.transportador === undefined) {\n issues.add(\n 'transporte.transportador',\n 'campo_obrigatorio',\n 'NFC-e com entrega a domicílio identifica o transportador (X03-20, rejeição 786)',\n );\n }\n if (tr?.retTransp !== undefined)\n vedado('transporte.retTransp', 'sem retenção do ICMS no transporte (X11-10, rejeição 755)');\n if (tr?.veicTransp !== undefined) vedado('transporte.veicTransp', 'sem veículo de transporte (X18-10, rejeição 756)');\n if (tr?.reboque !== undefined) vedado('transporte.reboque', 'sem reboque (X22-10, rejeição 757)');\n\n // Y e YA. Cobrança e pagamento\n if (input.cobranca !== undefined) vedado('cobranca', 'sem fatura nem duplicata (Y01-10, rejeição 760)');\n if (input.pagamento === undefined || input.pagamento.detPag.length === 0) {\n issues.add(\n 'pagamento',\n 'campo_obrigatorio',\n 'a NFC-e informa o pagamento: tPag 90 (sem pagamento) é recusado (YA02-40, rejeição 899)',\n );\n } else {\n input.pagamento.detPag.forEach((p, n) => {\n const motivo = TPAG_VEDADOS[p.tPag];\n if (motivo !== undefined) issues.add(`pagamento.detPag[${n}].tPag`, 'pagamento_invalido', motivo);\n // Cartão e PIX pedem o grupo do cartão (NT 2025.001, YA04-10, rejeição 391; obrigatória no modelo 65).\n if (['03', '04', '17'].includes(p.tPag) && p.card === undefined) {\n issues.add(\n `pagamento.detPag[${n}].card`,\n 'campo_obrigatorio',\n 'pagamento com cartão (tPag 03 ou 04) ou PIX (17) informa o grupo card (NT 2025.001, YA04-10, rejeição 391)',\n );\n }\n });\n }\n\n // Z. Grupos que a NFC-e não tem\n if (input.exporta !== undefined) vedado('exporta', 'sem comércio exterior (ZA01-30, rejeição 814)');\n if (input.compra !== undefined) vedado('compra', 'sem dados de compra (ZB01-10, rejeição 762)');\n if (input.cana !== undefined) vedado('cana', 'sem aquisição de cana (ZC01-10, rejeição 763)');\n}\n\n/** O `pag` montado, na forma que as regras de pagamento leem e completam. */\nexport interface PagMontado {\n readonly detPag: readonly {\n readonly tPag: string;\n readonly vPag: string;\n readonly card?: { readonly tpIntegra?: string; readonly CNPJ?: string; readonly cAut?: string };\n }[];\n vTroco?: string;\n}\n\n/**\n * Regras de pagamento da NFC-e sobre o grupo montado, com o `vNF` já calculado (NT 2025.001, item 02.7: YA03-10 a\n * YA06-10 passam a ser obrigatórias; MOC 7.0 Anexo I, YA09-10). Sem `vTroco` e com pagamento acima do total, o builder\n * calcula o troco (YA03-20, rejeição 866); informado, ele tem de ser a diferença (YA09-10, rejeição 869). O pagamento\n * posterior (tPag 91) tem valor zero e dispensa a soma igual ao total (NT 2025.001 v1.03, YA03-10 e YA03-30).\n */\nexport function pagamentoNfce(pag: PagMontado, vNF: Decimal, issues: Issues): void {\n const total = pag.detPag.reduce((a, p) => a.plus(Decimal.of(p.vPag)), Decimal.ZERO);\n const troco = total.minus(vNF);\n const posterior = pag.detPag.some((p) => p.tPag === '91');\n pag.detPag.forEach((p, n) => {\n if (p.tPag === '91' && !Decimal.of(p.vPag).isZero()) {\n issues.add(\n `pagamento.detPag[${n}].vPag`,\n 'pagamento_invalido',\n 'pagamento posterior (tPag 91) tem vPag zero (NT 2025.001 v1.03, YA03-30, rejeição 904)',\n );\n }\n });\n if (troco.isNegative() && !posterior) {\n issues.add(\n 'pagamento.detPag',\n 'pagamento_invalido',\n `pagamentos (${total.toFixed(2)}) abaixo do total da NFC-e (${vNF.toFixed(2)}) (NT 2025.001 v1.03, YA03-10, rejeição 865)`,\n );\n }\n // O troco informado é sempre pagamentos menos o total, também com o pagamento posterior (YA09-10 não tem exceção).\n if (pag.vTroco === undefined) {\n if (!troco.isNegative() && !troco.isZero()) pag.vTroco = troco.toFixed(2);\n } else if (!Decimal.of(pag.vTroco).eq(troco)) {\n issues.add(\n 'pagamento.vTroco',\n 'valor_divergente',\n `troco ${pag.vTroco} difere de pagamentos menos o total (${troco.toFixed(2)}) (YA09-10, rejeição 869)`,\n );\n }\n pag.detPag.forEach((p, n) => {\n const c = p.card;\n if (c === undefined) return;\n const path = `pagamento.detPag[${n}].card`;\n if (c.tpIntegra === '1' && (c.CNPJ === undefined || c.cAut === undefined)) {\n issues.add(\n path,\n 'campo_obrigatorio',\n 'cartão integrado à automação (tpIntegra 1) informa o CNPJ da credenciadora e o cAut (NT 2025.001, YA05-10, rejeição 392)',\n );\n }\n if (c.CNPJ !== undefined) {\n const r = lerCnpj(c.CNPJ, { caminho: `${path}.CNPJ` });\n if (!r.ok) issues.list.push(r.erro);\n }\n });\n}\n\nconst digitos = (s: string): string => s.replace(/[^0-9A-Za-z]/g, '').toUpperCase();\n",
|
|
16
|
+
"/**\n * NFC-e (modelo 65): as regras de montagem que valem só para ela e o `infNFeSupl` (QR Code e URL de consulta por\n * chave). As regras vêm do MOC 7.0 Anexo I (regras de validação com modelo 65 e aplicação obrigatória), da NT 2023.002\n * (emitente pessoa física, v1.01), da NT 2025.001 v1.03 (QR Code versão 3 e pagamentos) e da NT 2025.002 v1.51 (reforma\n * tributária); o leiaute do QR Code, do Manual de Padrões Técnicos do DANFE NFC-e e QR Code, versão 6.0 (março de\n * 2025), itens 4.3 e 4.4. Regra opcional por UF (aplicação \"Facult.\" sem mudança posterior) não entra aqui: a SEFAZ da\n * UF decide, e recusar localmente bloquearia a venda onde a regra não vale.\n */\n\nimport type { Ambiente, Assinador, Uf } from '@sinete/core';\nimport { tpAmbDoAmbiente } from '@sinete/core';\nimport { c14n, codificarBase64, lerXml, PREFIXO_DIGEST_INFO_SHA1, primeiroFilho } from '@sinete/core/xml';\nimport { lerCnpj } from '@sinete/validators';\nimport urls from '../data/nfce-urls.json' with { type: 'json' };\nimport { Decimal } from '../decimal.ts';\nimport type { Issues } from '../issues.ts';\nimport type { DadosNfe } from '../model.ts';\n\n/**\n * Versão do QR Code da NFC-e. A 3 (padrão) dispensa o CSC: na emissão normal leva só chave, versão e ambiente, e na\n * contingência off-line leva a assinatura dos parâmetros com o certificado da nota (NT 2025.001, item 02.1). A 2 usa\n * o CSC e o identificador dele (`idCSC`), fornecidos pela SEFAZ da UF; o emitente pessoa física não pode usá-la\n * (ZX02-222, rejeição 444).\n */\nexport type QrCodeNfceOpcoes =\n | { readonly versao: '3' }\n | {\n readonly versao: '2';\n /** Identificador do CSC na SEFAZ (até 6 dígitos); os zeros à esquerda saem do QR Code (Manual 6.0, 4.3.1). */\n readonly idCSC: string;\n /** O CSC (16 a 36 caracteres, Manual 6.0, 4.6). Nunca vai para o XML: só entra no hash. */\n readonly CSC: string;\n };\n\n/** O que a montagem deixa pronto para o `infNFeSupl` da NFC-e. */\nexport interface NfceSupl {\n readonly versao: '2' | '3';\n /** URL de consulta por chave de acesso (`urlChave`), impressa no DANFC-e. */\n readonly urlChave: string;\n /** Endereço do QR Code até o `?p=`, inclusive. */\n readonly base: string;\n /** Parâmetros já separados por `|`: completos, ou de 1 a 7 quando falta a assinatura (versão 3 off-line). */\n readonly parametros: string;\n /** Versão 3 em contingência off-line: os parâmetros são assinados com o certificado da nota (Manual 6.0, 4.4.2). */\n readonly assinar: boolean;\n}\n\ntype Entrada = { readonly url: string | null; readonly desde?: string; readonly nota?: string };\ntype TabelaUrls = Readonly<Record<Ambiente, Readonly<Record<string, readonly Entrada[]>>>>;\n\n/** O endereço vigente no dia (`AAAA-MM-DD`, horário de Brasília): o de início mais recente que não passou do dia. */\nfunction vigente(lista: readonly Entrada[] | undefined, dia: string): Entrada | undefined {\n let achado: Entrada | undefined;\n for (const e of lista ?? []) {\n if ((e.desde ?? '') <= dia && (achado === undefined || (e.desde ?? '') >= (achado.desde ?? ''))) achado = e;\n }\n return achado;\n}\n\n/**\n * Endereços da NFC-e da UF no ambiente e no dia (`data/nfce-urls.json`, das tabelas do Portal Nacional da NFC-e). O\n * `qrCode` é `undefined` onde a tabela não traz o endereço completo (AM e MA publicam sem o protocolo): informe\n * `MontarNfeOpcoes.urlQrCode`.\n */\nexport function urlsNfce(\n uf: Uf,\n ambiente: Ambiente,\n dia: string,\n): { readonly qrCode: string | undefined; readonly urlChave: string | undefined } {\n const q = vigente((urls.qrCode as TabelaUrls)[ambiente][uf], dia);\n const c = vigente((urls.urlChave as TabelaUrls)[ambiente][uf], dia);\n return { qrCode: q?.url ?? undefined, urlChave: c?.url ?? undefined };\n}\n\nconst te = new TextEncoder();\nconst NFE_NS = 'http://www.portalfiscal.inf.br/nfe';\n\nasync function sha1(bytes: Uint8Array): Promise<Uint8Array> {\n return new Uint8Array(await globalThis.crypto.subtle.digest('SHA-1', bytes as Uint8Array<ArrayBuffer>));\n}\n\nconst hex = (b: Uint8Array): string => Array.from(b, (x) => x.toString(16).padStart(2, '0')).join('');\n\n/**\n * `digVal` do QR Code versão 2 off-line: o DigestValue do `infNFe` (SHA-1 do C14N, em Base64, o mesmo da assinatura)\n * convertido para hexadecimal caractere a caractere (Manual 6.0, 4.3.2 e o exemplo de 4.3.6.2: `yzGY...` vira\n * `797a4759...`).\n */\nasync function digValHex(xml: string): Promise<string> {\n const doc = lerXml(xml);\n const inf = primeiroFilho(doc.raiz, 'infNFe', NFE_NS);\n if (inf === undefined) throw new Error('NF-e montada sem infNFe');\n return hexDoDigestValue(codificarBase64(await sha1(te.encode(c14n(inf)))));\n}\n\n/** O DigestValue em Base64 convertido para hexadecimal, caractere a caractere (Manual 6.0, 4.3.5, passo 1). */\nexport function hexDoDigestValue(digestValue: string): string {\n return hex(te.encode(digestValue));\n}\n\n/** Hash do QR Code versão 2: SHA-1 dos parâmetros concatenados ao CSC, em hexadecimal (Manual 6.0, 4.3.4 e 4.3.5). */\nexport async function hashQrCodeV2(parametros: string, csc: string): Promise<string> {\n return hex(await sha1(te.encode(parametros + csc))).toUpperCase();\n}\n\nexport interface DadosQrCode {\n readonly chave: string;\n readonly ambiente: Ambiente;\n readonly tpEmis: string;\n /** `dhEmi` do documento. */\n readonly dhEmi: string;\n /** `vNF` como vai no XML (ponto decimal, sem milhar). */\n readonly vNF: string;\n readonly dest?: { readonly CNPJ?: string; readonly CPF?: string; readonly idEstrangeiro?: string };\n /** O XML montado (`<NFe>` sem assinatura): o `digVal` da versão 2 off-line sai dele. */\n readonly xml: string;\n}\n\n/**\n * Parâmetros do QR Code (Manual 6.0): versão 2 on-line `chave|2|tpAmb|idCSC|hash` e off-line\n * `chave|2|tpAmb|dia|vNF|digVal|idCSC|hash`, com o hash SHA-1 em hexadecimal dos parâmetros concatenados ao CSC\n * (4.3.4 e 4.3.5); versão 3 on-line `chave|3|tpAmb` e off-line `chave|3|tpAmb|dia|vNF|tpIdDest|idDest`, que o\n * certificado assina (4.4.1 e 4.4.2). Destinatário não identificado deixa os campos 6 e 7 vazios; o estrangeiro, só o\n * 7. Na contingência off-line (tpEmis 9) entram o dia da emissão e o valor da nota, que o consumidor confere sem a\n * nota ter chegado à SEFAZ.\n */\nexport async function parametrosQrCode(\n d: DadosQrCode,\n qr: QrCodeNfceOpcoes,\n): Promise<{ readonly parametros: string; readonly assinar: boolean }> {\n const tpAmb = tpAmbDoAmbiente(d.ambiente);\n const offline = d.tpEmis === '9';\n const dia = d.dhEmi.slice(8, 10);\n if (qr.versao === '3') {\n if (!offline) return { parametros: `${d.chave}|3|${tpAmb}`, assinar: false };\n const dest = d.dest;\n const [tp, id] =\n dest?.CNPJ !== undefined\n ? ['1', dest.CNPJ]\n : dest?.CPF !== undefined\n ? ['2', dest.CPF]\n : dest?.idEstrangeiro !== undefined\n ? ['3', '']\n : ['', ''];\n return { parametros: `${d.chave}|3|${tpAmb}|${dia}|${d.vNF}|${tp}|${id}`, assinar: true };\n }\n const idCSC = String(Number(qr.idCSC));\n const antes = offline\n ? `${d.chave}|2|${tpAmb}|${dia}|${d.vNF}|${await digValHex(d.xml)}|${idCSC}`\n : `${d.chave}|2|${tpAmb}|${idCSC}`;\n return { parametros: `${antes}|${await hashQrCodeV2(antes, qr.CSC)}`, assinar: false };\n}\n\n/**\n * Assinatura dos parâmetros 1 a 7 do QR Code versão 3 off-line: RSA com SHA-1 (PKCS#1 v1.5), em Base64, com o mesmo\n * certificado que assina a NFC-e (Manual 6.0, 4.4.2, parâmetro 8).\n */\nexport async function assinarParametros(parametros: string, signer: Assinador): Promise<string> {\n const bytes = te.encode(parametros);\n if (signer.tipo === 'dados') return codificarBase64(await signer.assinar(bytes, 'SHA-1'));\n const h = await sha1(bytes);\n const di = new Uint8Array(PREFIXO_DIGEST_INFO_SHA1.length + h.length);\n di.set(PREFIXO_DIGEST_INFO_SHA1);\n di.set(h, PREFIXO_DIGEST_INFO_SHA1.length);\n return codificarBase64(await signer.assinarDigestInfo(di));\n}\n\n/** CFOP da prestação de serviço tributada pelo ISSQN na NFC-e (MOC 7.0 Anexo I, RV I08-150 a I08-170). */\nconst CFOP_ISSQN = '5933';\n\n/** Valor da NFC-e acima do qual o destinatário tem de ser identificado (MOC 7.0 Anexo I, RV W16-40, rejeição 750). */\nexport const NFCE_LIMITE_SEM_DESTINATARIO = '10000.00';\n\n/** Meios de pagamento que a NFC-e não aceita: 14 duplicata mercantil (YA02-10), 90 sem pagamento (YA02-40), 99 outros (YA02-50). */\nconst TPAG_VEDADOS: Readonly<Record<string, string>> = {\n '14': 'duplicata mercantil não é meio de pagamento da NFC-e (YA02-10, rejeição 857)',\n '90': 'a NFC-e sempre tem pagamento: tPag 90 (sem pagamento) é recusado (YA02-40, rejeição 899)',\n '99': 'tPag 99 (outros) não é aceito na NFC-e (YA02-50, rejeição 436, NT 2020.006)',\n};\n\n/** Identificação já resolvida pelo montador (com os padrões aplicados). */\nexport interface IdeNfce {\n /** 65 é a NFC-e; 55, a NF-e com DANFE Simplificado Tipo 2 (tpImp 6), que a NT 2026.002 põe sob parte destas regras. */\n readonly mod: '55' | '65';\n readonly tpNF: string;\n readonly idDest: string;\n readonly tpImp: string;\n readonly finNFe: string;\n readonly indFinal: string;\n readonly indPres: string;\n}\n\n/**\n * Regras da NFC-e sobre a entrada (origem `entrada`, ADR 0011), todas de aplicação obrigatória. Grupos que a NFC-e\n * não tem saem como `grupo_vedado` no caminho da entrada.\n *\n * A NT 2026.002 v1.11 (homologação em 01/07/2026, produção em 03/08/2026) estende parte delas à NF-e com DANFE\n * Simplificado Tipo 2 (`mod` 55, `tpImp` 6): as que a NT escreve \"Se NFC-e ou NF-e com DANFE Simplificado Tipo 2\". As\n * que ela não cita (data de previsão de entrega, tpImp 4 e 5, cMunFGIBS, compra governamental, o destinatário fora da\n * E01-20, ISSQN, transportador, pagamento e exportação) seguem só da NFC-e (`soNfce`). A G01-10 (local de entrega,\n * 670) fica de fora: a NT a marca como implementação futura.\n */\nexport function conferirNfce(input: DadosNfe, ide: IdeNfce, issues: Issues): void {\n const soNfce = ide.mod === '65';\n const doc = soNfce ? 'NFC-e' : 'NF-e com DANFE Simplificado Tipo 2';\n const vedado = (path: string, msg: string): void => issues.add(path, 'grupo_vedado', `${doc} ${msg}`);\n const invalido = (path: string, msg: string): void => issues.add(path, 'campo_invalido', `${doc} ${msg}`);\n\n // B. Identificação\n if (input.dhSaiEnt !== undefined) vedado('dhSaiEnt', 'sem data de entrada ou saída (B10-10, rejeição 705)');\n if (soNfce && input.dPrevEntrega !== undefined) {\n vedado('dPrevEntrega', 'sem data de previsão de entrega (NT 2025.002, B10a-10, rejeição 1153)');\n }\n if (ide.tpNF !== '1') invalido('tpNF', 'só de saída, tpNF 1 (B11-10, rejeição 706)');\n if (ide.idDest !== '1') {\n invalido('idDest', 'só em operação interna, idDest 1 (B11a-10, rejeição 707)');\n }\n if (soNfce && ide.tpImp !== '4' && ide.tpImp !== '5') {\n invalido('tpImp', 'com DANFC-e: tpImp 4 (impresso) ou 5 (mensagem eletrônica) (B21-10, rejeição 709)');\n }\n if (ide.finNFe !== '1') invalido('finNFe', 'só com finalidade normal, finNFe 1 (B25-20, rejeição 715)');\n if (ide.indFinal !== '1') invalido('indFinal', 'só com consumidor final, indFinal 1 (B25a-10, rejeição 716)');\n if (!['1', '4', '5'].includes(ide.indPres)) {\n invalido('indPres', 'só presencial: indPres 1, 4 (entrega a domicílio) ou 5 (NT 2025.002, B25b-20, rejeição 717)');\n }\n if (soNfce && input.cMunFGIBS !== undefined && ide.indPres !== '5') {\n invalido(\n 'cMunFGIBS',\n 'com cMunFGIBS só em operação presencial fora do estabelecimento, indPres 5 (NT 2025.002, B25b-60, rejeição 1000)',\n );\n }\n if (soNfce && input.cMunFGIBS === undefined && ide.indPres === '5') {\n issues.add(\n 'cMunFGIBS',\n 'campo_obrigatorio',\n 'NFC-e presencial fora do estabelecimento (indPres 5) informa cMunFGIBS (NT 2025.002, B25b-70, rejeição 1005)',\n );\n }\n if (input.referenciadas !== undefined && input.referenciadas.length > 0) {\n vedado('referenciadas', 'não referencia documento fiscal (BA01-10, rejeição 708)');\n }\n if (soNfce && input.gCompraGov !== undefined)\n vedado('gCompraGov', 'sem compra governamental (NT 2025.002, BB01-10, rejeição 1006)');\n\n // C. Emitente\n if (input.emitente.IEST !== undefined)\n vedado('emitente.IEST', 'sem IE de substituto tributário (C18-10, rejeição 718)');\n\n // E. Destinatário: opcional, obrigatório na entrega a domicílio\n const d = input.destinatario;\n if (ide.indPres === '4' && d === undefined) {\n issues.add(\n 'destinatario',\n 'campo_obrigatorio',\n `${doc} com entrega a domicílio identifica o destinatário (E01-20, rejeição 787)`,\n );\n }\n // F01-10 (669): sem local de retirada.\n if (input.retirada !== undefined) vedado('retirada', 'sem local de retirada (F01-10, rejeição 669)');\n if (soNfce && ide.indPres === '4' && d !== undefined && d.endereco === undefined) {\n issues.add(\n 'destinatario.endereco',\n 'campo_obrigatorio',\n 'NFC-e com entrega a domicílio informa o endereço do destinatário (E05-20, rejeição 788)',\n );\n }\n if (soNfce && d !== undefined) {\n if (d.CNPJ !== undefined && input.emitente.CNPJ !== undefined && digitos(d.CNPJ) === digitos(input.emitente.CNPJ)) {\n invalido('destinatario.CNPJ', 'com destinatário igual ao emitente (E02-20, rejeição 220)');\n }\n if (d.indIEDest !== '9') {\n invalido('destinatario.indIEDest', 'só para não contribuinte, indIEDest 9 (E16a-10, rejeição 789)');\n }\n if (d.ISUF !== undefined) vedado('destinatario.ISUF', 'sem inscrição na Suframa (E18-10, rejeição 730)');\n }\n\n // I a UA. Itens\n input.itens.forEach((it, n) => {\n const p = `itens[${n}]`;\n const esp = (it.produto.especifico ?? {}) as Record<string, unknown>;\n if (esp.veicProd !== undefined)\n vedado(`${p}.produto.especifico.veicProd`, 'sem veículo novo (J01-10, rejeição 736)');\n if (esp.arma !== undefined) vedado(`${p}.produto.especifico.arma`, 'sem armamento (L01-10, rejeição 738)');\n if (esp.nRECOPI !== undefined)\n vedado(`${p}.produto.especifico.nRECOPI`, 'sem papel imune RECOPI (LB01-10, rejeição 348)');\n if (it.produto.indTot === '0') {\n invalido(`${p}.produto.indTot`, 'sem item fora do total, indTot 1 (I17b-10, rejeição 774)');\n }\n if (soNfce && it.produto.tpCredPresIBSZFM !== undefined) {\n vedado(\n `${p}.produto.tpCredPresIBSZFM`,\n 'sem classificação para subapuração do IBS na ZFM (NT 2025.002, I05k-10, rejeição 1165)',\n );\n }\n const cfop = it.produto.CFOP.replace(/\\D/g, '');\n const imp = it.impostos;\n if (soNfce && cfop === CFOP_ISSQN && imp.issqn === undefined) {\n issues.add(\n `${p}.impostos.issqn`,\n 'combinacao_invalida',\n 'NFC-e com CFOP 5.933 tem o grupo do ISSQN (I08-160, rejeição 374)',\n );\n }\n if (soNfce && cfop !== CFOP_ISSQN && imp.issqn !== undefined) {\n issues.add(\n `${p}.produto.CFOP`,\n 'combinacao_invalida',\n 'NFC-e com ISSQN usa o CFOP 5.933 (I08-170, rejeição 374)',\n );\n }\n const icms = imp.icms as { grupo?: string; CST?: string; st?: unknown } | undefined;\n if (icms?.grupo === 'Part') vedado(`${p}.impostos.icms`, 'sem partilha do ICMS entre UF (N12-50, rejeição 741)');\n if (icms?.grupo === 'ST') vedado(`${p}.impostos.icms`, 'sem repasse do ICMS-ST retido (N12-60, rejeição 740)');\n if (icms?.grupo === undefined && icms?.CST === '90' && icms.st !== undefined) {\n vedado(`${p}.impostos.icms.st`, 'com CST 90 sem os dados do ICMS-ST (N12-34, rejeição 381)');\n }\n if (imp.icmsUfDest !== undefined)\n vedado(`${p}.impostos.icmsUfDest`, 'sem ICMS da UF de destino (NA01-10, rejeição 807)');\n if (imp.ipi !== undefined) vedado(`${p}.impostos.ipi`, 'sem IPI (O01-10, rejeição 742)');\n if (imp.ii !== undefined) vedado(`${p}.impostos.ii`, 'sem imposto de importação (P01-10, rejeição 743)');\n if (imp.pisSt !== undefined) vedado(`${p}.impostos.pisSt`, 'sem PIS-ST (R01-10, rejeição 746)');\n if (imp.cofinsSt !== undefined) vedado(`${p}.impostos.cofinsSt`, 'sem COFINS-ST (T01-10, rejeição 749)');\n if (it.impostoDevol !== undefined) vedado(`${p}.impostoDevol`, 'sem devolução de tributos (UA01-20, rejeição 390)');\n });\n\n // X. Transporte: só na entrega a domicílio\n const tr = input.transporte;\n const entrega = ide.indPres === '4';\n if (tr !== undefined && tr.modFrete !== '9' && !entrega) {\n invalido('transporte.modFrete', 'sem frete fora da entrega a domicílio: modFrete 9 (X02-10, rejeição 753)');\n }\n if (soNfce && tr?.transportador !== undefined && !entrega) {\n vedado('transporte.transportador', 'só tem transportador na entrega a domicílio (X03-10, rejeição 754)');\n }\n if (soNfce && entrega && tr?.transportador === undefined) {\n issues.add(\n 'transporte.transportador',\n 'campo_obrigatorio',\n 'NFC-e com entrega a domicílio identifica o transportador (X03-20, rejeição 786)',\n );\n }\n if (tr?.retTransp !== undefined)\n vedado('transporte.retTransp', 'sem retenção do ICMS no transporte (X11-10, rejeição 755)');\n if (tr?.veicTransp !== undefined) vedado('transporte.veicTransp', 'sem veículo de transporte (X18-10, rejeição 756)');\n if (tr?.reboque !== undefined) vedado('transporte.reboque', 'sem reboque (X22-10, rejeição 757)');\n\n // Y e YA. Cobrança e pagamento\n if (input.cobranca !== undefined) vedado('cobranca', 'sem fatura nem duplicata (Y01-10, rejeição 760)');\n // O pagamento é só da NFC-e: a NT 2026.002 não estende as regras do grupo YA à Tipo 2.\n if (soNfce) conferirPagamentoNfce(input, issues);\n\n // Z. Grupos que a NFC-e não tem\n if (soNfce && input.exporta !== undefined) vedado('exporta', 'sem comércio exterior (ZA01-30, rejeição 814)');\n if (input.compra !== undefined) vedado('compra', 'sem dados de compra (ZB01-10, rejeição 762)');\n if (input.cana !== undefined) vedado('cana', 'sem aquisição de cana (ZC01-10, rejeição 763)');\n}\n\n/** Pagamento informado na NFC-e: obrigatório, sem os meios vedados e com o grupo do cartão quando pede. */\nfunction conferirPagamentoNfce(input: DadosNfe, issues: Issues): void {\n if (input.pagamento === undefined || input.pagamento.detPag.length === 0) {\n issues.add(\n 'pagamento',\n 'campo_obrigatorio',\n 'a NFC-e informa o pagamento: tPag 90 (sem pagamento) é recusado (YA02-40, rejeição 899)',\n );\n } else {\n input.pagamento.detPag.forEach((p, n) => {\n const motivo = TPAG_VEDADOS[p.tPag];\n if (motivo !== undefined) issues.add(`pagamento.detPag[${n}].tPag`, 'pagamento_invalido', motivo);\n // Cartão e PIX pedem o grupo do cartão (NT 2025.001, YA04-10, rejeição 391; obrigatória no modelo 65).\n if (['03', '04', '17'].includes(p.tPag) && p.card === undefined) {\n issues.add(\n `pagamento.detPag[${n}].card`,\n 'campo_obrigatorio',\n 'pagamento com cartão (tPag 03 ou 04) ou PIX (17) informa o grupo card (NT 2025.001, YA04-10, rejeição 391)',\n );\n }\n });\n }\n}\n\n/** O `pag` montado, na forma que as regras de pagamento leem e completam. */\nexport interface PagMontado {\n readonly detPag: readonly {\n readonly tPag: string;\n readonly vPag: string;\n readonly card?: { readonly tpIntegra?: string; readonly CNPJ?: string; readonly cAut?: string };\n }[];\n vTroco?: string;\n}\n\n/**\n * Regras de pagamento da NFC-e sobre o grupo montado, com o `vNF` já calculado (NT 2025.001, item 02.7: YA03-10 a\n * YA06-10 passam a ser obrigatórias; MOC 7.0 Anexo I, YA09-10). Sem `vTroco` e com pagamento acima do total, o builder\n * calcula o troco (YA03-20, rejeição 866); informado, ele tem de ser a diferença (YA09-10, rejeição 869). O pagamento\n * posterior (tPag 91) tem valor zero e dispensa a soma igual ao total (NT 2025.001 v1.03, YA03-10 e YA03-30).\n */\nexport function pagamentoNfce(pag: PagMontado, vNF: Decimal, issues: Issues): void {\n const total = pag.detPag.reduce((a, p) => a.plus(Decimal.of(p.vPag)), Decimal.ZERO);\n const troco = total.minus(vNF);\n const posterior = pag.detPag.some((p) => p.tPag === '91');\n pag.detPag.forEach((p, n) => {\n if (p.tPag === '91' && !Decimal.of(p.vPag).isZero()) {\n issues.add(\n `pagamento.detPag[${n}].vPag`,\n 'pagamento_invalido',\n 'pagamento posterior (tPag 91) tem vPag zero (NT 2025.001 v1.03, YA03-30, rejeição 904)',\n );\n }\n });\n if (troco.isNegative() && !posterior) {\n issues.add(\n 'pagamento.detPag',\n 'pagamento_invalido',\n `pagamentos (${total.toFixed(2)}) abaixo do total da NFC-e (${vNF.toFixed(2)}) (NT 2025.001 v1.03, YA03-10, rejeição 865)`,\n );\n }\n // O troco informado é sempre pagamentos menos o total, também com o pagamento posterior (YA09-10 não tem exceção).\n if (pag.vTroco === undefined) {\n if (!troco.isNegative() && !troco.isZero()) pag.vTroco = troco.toFixed(2);\n } else if (!Decimal.of(pag.vTroco).eq(troco)) {\n issues.add(\n 'pagamento.vTroco',\n 'valor_divergente',\n `troco ${pag.vTroco} difere de pagamentos menos o total (${troco.toFixed(2)}) (YA09-10, rejeição 869)`,\n );\n }\n pag.detPag.forEach((p, n) => {\n const c = p.card;\n if (c === undefined) return;\n const path = `pagamento.detPag[${n}].card`;\n if (c.tpIntegra === '1' && (c.CNPJ === undefined || c.cAut === undefined)) {\n issues.add(\n path,\n 'campo_obrigatorio',\n 'cartão integrado à automação (tpIntegra 1) informa o CNPJ da credenciadora e o cAut (NT 2025.001, YA05-10, rejeição 392)',\n );\n }\n if (c.CNPJ !== undefined) {\n const r = lerCnpj(c.CNPJ, { caminho: `${path}.CNPJ` });\n if (!r.ok) issues.list.push(r.erro);\n }\n });\n}\n\nconst digitos = (s: string): string => s.replace(/[^0-9A-Za-z]/g, '').toUpperCase();\n",
|
|
17
17
|
"/**\n * Escolha do pacote de liberação por vigência e conferência do objeto contra o descritor do PL escolhido.\n *\n * O builder monta sempre na forma do PL mais novo (`PL_010f`). Quando a vigência escolhe um PL mais antigo, o objeto é\n * serializado com o descritor dele; o serializer ignora campos que o descritor não conhece, então antes de serializar\n * `camposForaDoPl` aponta cada campo que sumiria em silêncio.\n */\n\nimport type { Ambiente, Relogio } from '@sinete/core';\nimport { ErroNaoSuportado } from '@sinete/core';\nimport type { ComplexType, EntradaDeVigencia, Particle } from '@sinete/schemas';\nimport { ehComplexType, ehElementParticle, ehWildcard, selecionarPl } from '@sinete/schemas';\nimport { TNFe_infNFe as Inf010e } from '@sinete/schemas/nfe/PL_010e';\nimport { TNFe_infNFe as Inf010f } from '@sinete/schemas/nfe/PL_010f';\nimport type { Issues } from '../issues.ts';\n\n/** Descritor de `infNFe` de cada módulo da família `nfe` da tabela de vigências. */\nconst INF_NFE: Readonly<Record<string, ComplexType>> = {\n 'nfe/PL_010e': Inf010e as ComplexType,\n 'nfe/PL_010f': Inf010f as ComplexType,\n};\n\nexport interface PlEscolhido {\n readonly vigencia: EntradaDeVigencia;\n readonly infNFe: ComplexType;\n}\n\n/** PL da NF-e vigente para o ambiente no relógio de emissão (ADR 0002, decisão 6). */\nexport function escolherPl(ambiente: Ambiente, emissao: Relogio): PlEscolhido {\n const vigencia = selecionarPl('nfe', ambiente, emissao);\n const infNFe = INF_NFE[vigencia.modulo];\n if (infNFe === undefined) {\n // A tabela de vigências ganhou um PL que este pacote ainda não conhece: falha explícita, nunca tentativa.\n throw new ErroNaoSuportado(`@sinete/nfe não conhece o módulo ${vigencia.modulo}; atualize o pacote`);\n }\n return { vigencia, infNFe };\n}\n\nfunction memberNames(p: Particle, acc: Set<string>): Set<string> {\n if (ehWildcard(p)) acc.add('$any');\n else if (ehElementParticle(p)) acc.add(p.e);\n else for (const i of p.i) memberNames(i, acc);\n return acc;\n}\n\nfunction elementTypes(p: Particle, acc: Map<string, ComplexType>): Map<string, ComplexType> {\n if (ehWildcard(p)) return acc;\n if (ehElementParticle(p)) {\n if (ehComplexType(p.t)) acc.set(p.e, p.t);\n } else for (const i of p.i) elementTypes(i, acc);\n return acc;\n}\n\n/** Aponta cada chave do objeto que o descritor não declara (o serializer a descartaria sem aviso). */\nexport function camposForaDoPl(ct: ComplexType, value: unknown, path: string, pl: string, issues: Issues): void {\n if (typeof value !== 'object' || value === null) return;\n const allowed = new Set<string>(['$attrs', '$text']);\n for (const a of ct.a ?? []) allowed.add(a.a);\n if (ct.c) memberNames(ct.c, allowed);\n const children = ct.c ? elementTypes(ct.c, new Map()) : new Map<string, ComplexType>();\n for (const [k, v] of Object.entries(value)) {\n if (v === undefined) continue;\n if (!allowed.has(k)) {\n issues.montagem(`${path}.${k}`, 'campo_fora_do_pl', `o campo não existe no ${pl} vigente para esta emissão`);\n continue;\n }\n const child = children.get(k);\n if (!child) continue;\n if (Array.isArray(v)) {\n for (const [n, x] of v.entries()) camposForaDoPl(child, x, `${path}.${k}[${n}]`, pl, issues);\n } else camposForaDoPl(child, v, `${path}.${k}`, pl, issues);\n }\n}\n",
|
|
18
18
|
"/**\n * Regras de validação da SEFAZ que dependem só do documento e que rejeições reais de um integrador em produção mostraram\n * chegando à SEFAZ: conferidas antes de assinar, com o caminho da entrada (ADR 0012).\n *\n * Só entra aqui regra obrigatória (`Obrig.` no MOC) cujo resultado sai do próprio documento, sem cadastro nem\n * configuração da UF. Exceção que depende de tabela externa ou do critério da UF faz a conferência não recusar: na\n * dúvida, a nota vai e a SEFAZ decide, porque recusar localmente uma nota que a SEFAZ aceitaria é pior que a rejeição.\n */\n\nimport type { Ocorrencia } from '@sinete/core';\nimport { indicadoresCfop } from '@sinete/validators';\nimport type { Issues } from '../issues.ts';\nimport type { DadosNfe } from '../model.ts';\nimport type { Instante } from '../time.ts';\nimport { formatarDh } from '../time.ts';\n\n/**\n * CFOP em que o CST 50 (suspensão) é aceito com destinatário contribuinte isento: conserto ou reparo e remessa para\n * demonstração dentro do estado (MOC 7.0 Anexo I, RV N12-80, exceção 1).\n */\nconst CFOP_CST50_ISENTO: ReadonlySet<string> = new Set([\n '1915',\n '1916',\n '2915',\n '2916',\n '5915',\n '5916',\n '6915',\n '6916',\n '1912',\n '1913',\n '5912',\n '5913',\n]);\n\n/**\n * CST 50 ou 51 com destinatário contribuinte isento de IE (indIEDest 2): rejeição 529 (MOC 7.0 Anexo I, RV N12-80,\n * obrigatória no modelo 55). Fica de fora o que as exceções liberam: o CST 50 nos CFOP da exceção 1 e o CST 51 em\n * qualquer operação interna, que a exceção 3 deixa a critério da UF. A exceção 3 fala em destinatário CNPJ, mas uma UF\n * autorizou em produção CST 51 interno com destinatário CPF isento; como o critério é da UF, o CST 51 interno não é\n * recusado aqui, seja qual for o documento do destinatário. A exceção 2 (emissão antes de 01/07/2016) não alcança nota\n * montada agora.\n */\nexport function cstComIsento(input: DadosNfe, idDest: string, issues: Issues): void {\n const d = input.destinatario;\n if (d?.indIEDest !== '2') return;\n input.itens.forEach((it, n) => {\n const icms = it.impostos.icms;\n if (icms === undefined || !('CST' in icms)) return;\n const cst = icms.CST;\n if (cst === '50' && CFOP_CST50_ISENTO.has(it.produto.CFOP.replace(/\\D/g, ''))) return;\n if (cst === '51' && idDest === '1') return;\n if (cst !== '50' && cst !== '51') return;\n issues.add(\n `itens[${n}].impostos.icms.CST`,\n 'combinacao_invalida',\n `CST ${cst} não se usa com destinatário contribuinte isento de IE (indIEDest 2) (N12-80, rejeição 529)`,\n );\n });\n}\n\n/** Data (`AAAA-MM-DD`) do instante no deslocamento dado, em minutos. */\nconst dataNoFuso = (instante: Instante, offsetMinutes: number): string =>\n formatarDh(instante, offsetMinutes).slice(0, 10);\n\n/** Brasília (UTC-3), o fuso das SEFAZ, para a comparação de datas que o MOC faz \"desconsiderando a hora\". */\nconst OFFSET_BRASILIA = -180;\n\n/**\n * Vencimento das duplicatas (grupo Y, modelo 55): uma parcela só, vencendo na data de emissão, cai na rejeição 853,\n * \"dados de cobrança não devem ser informados para pagamento à vista\" (NT 2025.001 v1.03, RV Y09-40, em produção desde\n * 01/09/2025).\n *\n * As RV Y09-20 (sem `dVenc` ou vencendo antes da emissão, rejeição 900) e Y09-30 (antes da parcela anterior, 850) não\n * são conferidas aqui: uma UF autorizou em produção, em 2026, parcela única vencendo dois meses antes da emissão, o que\n * mostra que a aplicação delas depende da UF. Na dúvida, a nota vai e a SEFAZ decide (ADR 0012).\n *\n * A data de emissão é a do `dhEmi`. O MOC não diz em que fuso a SEFAZ a compara; para não recusar nota que ela aceitaria,\n * \"na data da emissão\" só vale quando a data local do `dhEmi`, a de Brasília e a de UTC coincidem.\n */\nexport function vencimentos(\n input: DadosNfe,\n emissao: { readonly dhEmi: string; readonly instante: Instante },\n issues: Issues,\n): void {\n const dups = input.cobranca?.duplicatas;\n if (dups === undefined || dups.length !== 1) return;\n const unica = dups[0]?.dVenc;\n if (unica === undefined) return;\n const local = emissao.dhEmi.slice(0, 10);\n const datas = new Set([local, dataNoFuso(emissao.instante, OFFSET_BRASILIA), dataNoFuso(emissao.instante, 0)]);\n if (datas.size === 1 && datas.has(unica)) {\n issues.add(\n 'cobranca.duplicatas',\n 'combinacao_invalida',\n 'uma parcela só, vencendo na data de emissão, é pagamento à vista: não informe a cobrança (Y09-40, rejeição 853)',\n );\n }\n}\n\n/** Documento sem pontuação e em maiúsculas (o CNPJ alfanumérico mantém as letras). */\nconst soDocumento = (s: string): string => s.replace(/[^0-9A-Za-z]/g, '').toUpperCase();\n\n/**\n * Confere o emitente com o titular do certificado que assina a NF-e (MOC 7.0 Anexo I, grupo F):\n *\n * - e-CNPJ: o CNPJ-base (8 primeiros caracteres) do emitente é o do certificado, senão rejeição 213 (RV F03);\n * - e-CPF: o CPF do emitente é o do certificado, senão rejeição 227 (RV F03A).\n *\n * Só compara documento com documento do mesmo tipo: e-CNPJ assinando nota de emitente CPF (ou o contrário) fica para a\n * SEFAZ. O certificado da SEFAZ que a F03 dispensa só assina a nota avulsa, que o `montarNfe` não monta (procEmi 0).\n * Devolve as ocorrências (vazio quando confere), com o caminho da entrada.\n */\nexport function conferirEmitenteDoCertificado(\n nfe: DadosNfe,\n titular: { readonly cnpj?: string | undefined; readonly cpf?: string | undefined },\n): readonly Ocorrencia[] {\n const e = nfe.emitente;\n if (e.CNPJ !== undefined && titular.cnpj !== undefined) {\n const base = soDocumento(e.CNPJ).slice(0, 8);\n if (base !== soDocumento(titular.cnpj).slice(0, 8)) {\n return [\n {\n caminho: 'emitente.CNPJ',\n code: 'emitente_difere_do_certificado',\n mensagem: `CNPJ-base ${base} do emitente difere do CNPJ-base do certificado (F03, rejeição 213)`,\n origem: 'entrada',\n },\n ];\n }\n }\n if (e.CPF !== undefined && titular.cpf !== undefined && soDocumento(e.CPF) !== soDocumento(titular.cpf)) {\n return [\n {\n caminho: 'emitente.CPF',\n code: 'emitente_difere_do_certificado',\n mensagem: 'CPF do emitente difere do CPF do certificado (F03A, rejeição 227)',\n origem: 'entrada',\n },\n ];\n }\n return [];\n}\n\n/** A RV C17-42 (NFC-e sem IE) \"não se aplica a partir de 2033\". */\nconst NFCE_SEM_IE_ATE = '2033-01-01';\n\n/**\n * 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\n * documento:\n *\n * - 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\n * só recusa quando todas as leituras (local, Brasília e UTC) caem antes de 2033;\n * - NF-e sem IE e sem CNPJ do emitente (emitente CPF), 157 (C17-43);\n * - NF-e sem IE com a IE do substituto tributário, 158 (C18-50);\n * - item com ICMS ou ICMS interestadual (`icmsUfDest`) na NF-e sem IE, 161 (N01-10), menos na devolução (finNFe 4) e na\n * nota de crédito de retorno por recusa ou não localização (tpNFCredito 03), as duas exceções da regra;\n * - item sem `impostos.ibsCbs` (nem o grupo pronto nem a classificação para a calculadora) na NF-e sem IE, 162\n * (UB12-11). O item classificado cujo cálculo falhou já tem a ocorrência da calculadora, de montagem.\n *\n * 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\n * 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.\n */\nexport function exclusivoIbsCbs(\n input: DadosNfe,\n contexto: { readonly nfce: boolean; readonly dhEmi: string; readonly instantes: readonly Instante[] },\n issues: Issues,\n): void {\n const e = input.emitente;\n if (e.IE !== undefined) return;\n if (contexto.nfce) {\n const datas = [\n contexto.dhEmi.slice(0, 10),\n ...contexto.instantes.flatMap((i) => [dataNoFuso(i, OFFSET_BRASILIA), dataNoFuso(i, 0)]),\n ];\n if (datas.every((d) => d < NFCE_SEM_IE_ATE)) {\n issues.add(\n 'emitente.IE',\n 'campo_obrigatorio',\n 'a NFC-e exige a IE do emitente: contribuinte exclusivo do IBS/CBS, sem IE, emite só NF-e (C17-42, rejeição 156)',\n );\n }\n return;\n }\n if (e.CNPJ === undefined) {\n issues.add(\n 'emitente.CNPJ',\n 'campo_obrigatorio',\n 'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) exige o CNPJ do emitente (C17-43, rejeição 157)',\n );\n }\n if (e.IEST !== undefined) {\n issues.add(\n 'emitente.IEST',\n 'combinacao_invalida',\n '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)',\n );\n }\n const icmsLiberado = (input.finNFe ?? '1') === '4' || input.tpNFCredito === '03';\n input.itens.forEach((it, n) => {\n if (!icmsLiberado) {\n for (const [campo, grupo] of [\n ['icms', it.impostos.icms],\n ['icmsUfDest', it.impostos.icmsUfDest],\n ] as const) {\n if (grupo === undefined) continue;\n issues.add(\n `itens[${n}].impostos.${campo}`,\n 'grupo_vedado',\n 'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) não leva ICMS no item (N01-10, rejeição 161)',\n );\n }\n }\n if (it.impostos.ibsCbs === undefined) {\n issues.add(\n `itens[${n}].impostos.ibsCbs`,\n 'campo_obrigatorio',\n 'NF-e sem IE do emitente (contribuinte exclusivo do IBS/CBS) exige o grupo IBS/CBS em todo item (UB12-11, rejeição 162)',\n );\n }\n });\n}\n\n/** Nota de crédito que aceita CFOP de devolução (NT 2025.002 v1.52, RV I08-144, exceção): 03, 04 e 06. */\nconst CREDITO_COM_DEVOLUCAO: ReadonlySet<string> = new Set(['03', '04', '06']);\n\n/**\n * CFOP de devolução (Tabela CFOP, `indDevol`) em NF-e que não é de devolução nem complementar: rejeição 328 (MOC 7.0\n * 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\n * fora da tabela versionada não é recusado.\n */\nexport function cfopDeDevolucao(input: DadosNfe, issues: Issues): void {\n const fin = input.finNFe ?? '1';\n if (fin === '2' || fin === '4') return;\n if (fin === '5' && input.tpNFCredito !== undefined && CREDITO_COM_DEVOLUCAO.has(input.tpNFCredito)) return;\n input.itens.forEach((it, n) => {\n if (indicadoresCfop(it.produto.CFOP.replace(/\\D/g, ''))?.indDevol !== true) return;\n issues.add(\n `itens[${n}].produto.CFOP`,\n 'combinacao_invalida',\n `CFOP ${it.produto.CFOP} é de devolução e a nota não é de devolução (finNFe ${fin}) (I08-144, rejeição 328)`,\n );\n });\n}\n\n/** CST aceitos com destinatário não contribuinte (RV N12-70; o 61 entrou pela NT 2023.001). */\nconst CST_NAO_CONTRIBUINTE: ReadonlySet<string> = new Set(['00', '20', '40', '41', '60', '61']);\n\n/** Códigos ANP que a exceção 5 da N12-70 deixa de fora (não derivados de petróleo). */\nconst ANP_FORA_DA_EXCECAO_5: ReadonlySet<string> = new Set([\n '820101001',\n '820101010',\n '810102001',\n '810102004',\n '810102002',\n '810102003',\n '810101002',\n '810101001',\n '810101003',\n '220101003',\n '220101004',\n '220101002',\n '220101001',\n '220101005',\n '220101006',\n '560101001',\n]);\n\n/** CFOP da exceção 7 da N12-70 (CST 51 em qualquer operação). */\nconst CFOP_CST51: ReadonlySet<string> = new Set(['5123', '5922', '6123', '6922']);\n\n/**\n * 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,\n * 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\n * fala do CSOSN. Ficam de fora todas as exceções:\n *\n * 1. NF-e de entrada; 3. nota com veículo novo (`veicProd`) em algum item; 6. CST 50 e 51 na devolução;\n * 2. CST 50 com CFOP de retorno ou remessa (Tabela CFOP, `indRetor`, `indRemes`) ou 5949 e 6949, e com CFOP fora da\n * tabela versionada, que a conferência não sabe classificar;\n * 5. CST 30 interestadual com combustível derivado de petróleo; 9. CST 30 interestadual com energia elétrica (NCM\n * 27160000);\n * 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\n * a NT 2023.003 restringe ao retorno de depósito (5906 e 5907), e a conferência recusa só o que as duas recusam;\n * 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\n * 2023.003), também a critério da UF.\n *\n * A exceção 4 (emissão antes de 01/07/2016) não alcança nota montada agora.\n */\nexport function cstComNaoContribuinte(\n input: DadosNfe,\n contexto: { readonly idDest: string; readonly uf: string },\n issues: Issues,\n): void {\n if (input.destinatario?.indIEDest !== '9' || input.tpNF === '0') return;\n if (input.itens.some((it) => it.produto.especifico !== undefined && 'veicProd' in it.produto.especifico)) return;\n const fin = input.finNFe ?? '1';\n const interna = contexto.idDest === '1';\n const interestadual = contexto.idDest === '2';\n input.itens.forEach((it, n) => {\n const icms = it.impostos.icms;\n if (icms === undefined || !('CST' in icms)) return;\n const cst = icms.CST;\n if (CST_NAO_CONTRIBUINTE.has(cst)) return;\n const cfop = it.produto.CFOP.replace(/\\D/g, '');\n const esp = it.produto.especifico;\n if ((cst === '50' || cst === '51') && fin === '4') return;\n if (cst === '50') {\n const ind = indicadoresCfop(cfop);\n if (ind === undefined || ind.indRetor || ind.indRemes || cfop === '5949' || cfop === '6949') return;\n }\n if (cst === '51' && (CFOP_CST51.has(cfop) || interna)) return;\n if ((cst === '10' || cst === '02') && interna) return;\n if (cst === '30' && interestadual) {\n if (esp !== undefined && 'comb' in esp && !ANP_FORA_DA_EXCECAO_5.has(esp.comb.cProdANP)) return;\n if (it.produto.NCM.replace(/\\D/g, '') === '27160000') return;\n }\n if (cst === '90' && contexto.uf === 'CE' && (cfop === '5403' || cfop === '5405')) return;\n issues.add(\n `itens[${n}].impostos.icms.CST`,\n 'combinacao_invalida',\n `CST ${cst} não se usa com destinatário não contribuinte (indIEDest 9) (N12-70, rejeição 508)`,\n );\n });\n}\n",
|
|
19
19
|
"/**\n * Texto e tamanho dos campos de texto da NF-e conferidos na entrada (ADR 0011, revisão de 01/10/2026).\n *\n * Antes, o caractere que o XML não representa e o texto fora do tipo do leiaute (tamanho, espaço nas pontas,\n * caractere fora do `TString`) só apareciam na montagem, com o caminho do XML (`infNFe.det[0].prod.xProd` ou\n * `/infNFe/det[1]/prod/xProd`). Conferidos aqui, saem como `campo_invalido`, com `origem: 'entrada'`, o caminho da\n * entrada (`itens[0].produto.xProd`) e uma mensagem para quem preenche o campo (`no máximo 60 caracteres`), sem nome\n * de validador nem de tipo do XSD.\n *\n * O tipo de cada campo vem do schema do PL da montagem (o `TString` com o `maxLength` do elemento), nunca de um número\n * escrito aqui: a tabela abaixo só diz qual elemento do `infNFe` recebe cada campo da entrada.\n */\n\nimport type { CampoDeTexto, ComplexType } from '@sinete/schemas';\nimport { conferirTextos } from '@sinete/schemas';\nimport type { Issues } from '../issues.ts';\nimport type { DadosNfe } from '../model.ts';\n\nexport { textoXmlValido } from '@sinete/schemas';\n\n/**\n * Campo de texto da entrada (com `[]` onde a entrada é uma lista) e o elemento do `infNFe` que o recebe como veio. Só\n * os campos copiados sem transformação: o que a montagem calcula ou formata é conferido por ela.\n */\nconst CAMPOS: readonly CampoDeTexto[] = [\n ['natOp', 'ide.natOp'],\n ['emitente.xNome', 'emit.xNome'],\n ['emitente.xFant', 'emit.xFant'],\n ['emitente.endereco.xLgr', 'emit.enderEmit.xLgr'],\n ['emitente.endereco.nro', 'emit.enderEmit.nro'],\n ['emitente.endereco.xCpl', 'emit.enderEmit.xCpl'],\n ['emitente.endereco.xBairro', 'emit.enderEmit.xBairro'],\n ['emitente.endereco.xMun', 'emit.enderEmit.xMun'],\n ['destinatario.xNome', 'dest.xNome'],\n ['destinatario.email', 'dest.email'],\n ['destinatario.endereco.xLgr', 'dest.enderDest.xLgr'],\n ['destinatario.endereco.nro', 'dest.enderDest.nro'],\n ['destinatario.endereco.xCpl', 'dest.enderDest.xCpl'],\n ['destinatario.endereco.xBairro', 'dest.enderDest.xBairro'],\n ['destinatario.endereco.xMun', 'dest.enderDest.xMun'],\n ['destinatario.endereco.xPais', 'dest.enderDest.xPais'],\n ...(['retirada', 'entrega'] as const).flatMap((g) =>\n (['xNome', 'xLgr', 'nro', 'xCpl', 'xBairro', 'xMun', 'email'] as const).map(\n (c) => [`${g}.${c}`, `${g}.${c}`] as const,\n ),\n ),\n ['itens[].produto.cProd', 'det.prod.cProd'],\n ['itens[].produto.xProd', 'det.prod.xProd'],\n ['itens[].produto.uCom', 'det.prod.uCom'],\n ['itens[].produto.uTrib', 'det.prod.uTrib'],\n ['itens[].produto.xPed', 'det.prod.xPed'],\n ['itens[].infAdProd', 'det.infAdProd'],\n ['transporte.transportador.xNome', 'transp.transporta.xNome'],\n ['transporte.transportador.xEnder', 'transp.transporta.xEnder'],\n ['transporte.transportador.xMun', 'transp.transporta.xMun'],\n ['transporte.volumes[].esp', 'transp.vol.esp'],\n ['transporte.volumes[].marca', 'transp.vol.marca'],\n ['transporte.volumes[].nVol', 'transp.vol.nVol'],\n ['cobranca.fatura.nFat', 'cobr.fat.nFat'],\n ['cobranca.duplicatas[].nDup', 'cobr.dup.nDup'],\n ['pagamento.detPag[].xPag', 'pag.detPag.xPag'],\n ['informacoesAdicionais.infAdFisco', 'infAdic.infAdFisco'],\n ['informacoesAdicionais.infCpl', 'infAdic.infCpl'],\n ['informacoesAdicionais.obsCont[].xTexto', 'infAdic.obsCont.xTexto'],\n ['informacoesAdicionais.obsFisco[].xTexto', 'infAdic.obsFisco.xTexto'],\n ['compra.xNEmp', 'compra.xNEmp'],\n ['compra.xPed', 'compra.xPed'],\n ['compra.xCont', 'compra.xCont'],\n];\n\n/**\n * Confere os textos da entrada: em qualquer campo, o caractere que o XML não representa; nos campos da tabela, o tipo\n * do elemento no PL (tamanho, espaço nas pontas, caractere fora do conjunto aceito). Tudo sai como `campo_invalido`,\n * com o caminho da entrada, `origem: 'entrada'` e uma ocorrência por regra violada. O campo que já tem ocorrência (de\n * outra conferência da entrada) não ganha outra. `substituidos` são os campos que a montagem troca por um texto fixo\n * (o nome do destinatário em homologação): o tipo deles não é conferido, porque o texto informado não vai ao XML.\n */\nexport function conferirTextosDaEntrada(\n entrada: DadosNfe,\n infNFe: ComplexType,\n issues: Issues,\n substituidos: ReadonlySet<string> = new Set(),\n): void {\n const pular = new Set([...issues.list.map((i) => i.caminho), ...substituidos]);\n for (const t of conferirTextos(entrada, infNFe, CAMPOS, pular)) issues.add(t.caminho, 'campo_invalido', t.mensagem);\n}\n",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"/**\n * Recuperação de um evento que a SEFAZ registrou e cuja resposta se perdeu.\n *\n * Um pedido de evento sem resposta (timeout, conexão caída), ou respondido com 573 (duplicidade de evento) ou 580\n * (evento já registrado no contexto do cancelamento), pode ter sido registrado. O `cStat` sozinho não prova: 573 e\n * 580 dizem que algo foi registrado antes, não que foi este evento, com este conteúdo e para esta chave. A prova é a\n * consulta da chave, que devolve os `procEventoNFe` que a SEFAZ tem (MOC 7.0, Visão Geral, consulta protocolo). Esta\n * função lê o evento de lá e só o dá como registrado quando o retorno dele diz 135, 136 ou 155 para a mesma chave e o\n * mesmo tipo.\n */\n\nimport type { DocumentoXml, ElementoXml } from '@sinete/core/xml';\nimport { lerXml, primeiroFilho, textoDe } from '@sinete/core/xml';\nimport type { ClienteNfe, EnvioOpcoes, EventoRegistrado, ResultadoConsulta } from './client.ts';\nimport { cstatEm } from './outcome.ts';\nimport { NFE_NS, recortarElemento } from './proc.ts';\n\n/** Resultado da recuperação: o evento registrado, com a consulta que o prova, ou só a consulta. */\nexport type RecuperacaoEvento =\n | { readonly registrado: true; readonly evento: EventoRegistrado; readonly consulta: ResultadoConsulta }\n | { readonly registrado: false; readonly consulta: ResultadoConsulta };\n\n/** Texto do filho `local` no namespace da NF-e, se houver. */\nfunction campo(el: ElementoXml, local: string): string | undefined {\n const c = primeiroFilho(el, local, NFE_NS);\n return c === undefined ? undefined : textoDe(c).trim();\n}\n\n/** Lê um `procEventoNFe` da consulta; `undefined` para o que não é um evento com retorno legível. */\nfunction lerProcEvento(xml: string): EventoRegistrado | undefined {\n let doc: DocumentoXml;\n try {\n doc = lerXml(xml);\n } catch {\n return undefined;\n }\n const evento = primeiroFilho(doc.raiz, 'evento', NFE_NS);\n const pedido = evento === undefined ? undefined : primeiroFilho(evento, 'infEvento', NFE_NS);\n const retEl = primeiroFilho(doc.raiz, 'retEvento', NFE_NS);\n const ret = retEl === undefined ? undefined : primeiroFilho(retEl, 'infEvento', NFE_NS);\n if (doc.raiz.local !== 'procEventoNFe' || pedido === undefined || retEl === undefined || ret === undefined) {\n return undefined;\n }\n const cStat = campo(ret, 'cStat');\n const chNFe = campo(ret, 'chNFe');\n const tpEvento = campo(ret, 'tpEvento');\n const nSeq = campo(ret, 'nSeqEvento');\n const dhRegEvento = campo(ret, 'dhRegEvento');\n if (cStat === undefined || !cstatEm(cStat, 'eventoRegistrado')) return undefined;\n // O pedido e o retorno têm de falar do mesmo evento.\n // Chave, tipo e sequência têm de vir no retorno e ser iguais aos do pedido: um retorno registrado de outro evento, ou\n // sem dizer de qual, não prova nada.\n if (chNFe === undefined || tpEvento === undefined || nSeq === undefined) return undefined;\n const nSeqPedido = campo(pedido, 'nSeqEvento');\n if (campo(pedido, 'chNFe') !== chNFe || campo(pedido, 'tpEvento') !== tpEvento) return undefined;\n if (nSeqPedido === undefined || Number(nSeqPedido) !== Number(nSeq)) return undefined;\n if (chNFe === undefined || tpEvento === undefined || nSeq === undefined || dhRegEvento === undefined)\n return undefined;\n const nProt = campo(ret, 'nProt');\n return {\n chNFe,\n tpEvento,\n nSeqEvento: String(Number(nSeq)),\n dhRegEvento,\n retEvento: recortarElemento(doc, retEl, ''),\n procEventoNFe: xml,\n ...(nProt === undefined ? {} : { nProt }),\n };\n}\n\n/**\n * Consulta a chave e devolve o evento `tpEvento` que a SEFAZ registrou para ela (o de maior `nSeqEvento`, quando há\n * vários, como na CC-e; com `nSeqEvento`, só o dessa sequência). Serve depois de um pedido de evento sem resposta ou\n * respondido com 573 ou 580: nunca conclua que o evento existe só pelo `cStat` do pedido. `registrado: false` quer\n * dizer que a consulta não mostrou o evento (ou não decidiu: veja `consulta`); não quer dizer que o evento não existe.\n * `opcoes.signal` cancela a consulta.\n */\nexport async function recuperarEventoRegistrado(\n cliente: ClienteNfe,\n chave: string,\n tpEvento: string,\n nSeqEvento?: number,\n opcoes?: EnvioOpcoes,\n): Promise<RecuperacaoEvento> {\n const consulta = await cliente.consultar(chave, undefined, opcoes);\n if (consulta.tipo !== 'autorizado' && consulta.tipo !== 'denegado') return { registrado: false, consulta };\n let achado: EventoRegistrado | undefined;\n for (const xml of consulta.valor.eventos) {\n const e = lerProcEvento(xml);\n if (e === undefined || e.chNFe !== consulta.valor.chNFe || e.tpEvento !== tpEvento) continue;\n if (nSeqEvento !== undefined && Number(e.nSeqEvento) !== nSeqEvento) continue;\n if (achado === undefined || Number(e.nSeqEvento) > Number(achado.nSeqEvento)) achado = e;\n }\n return achado === undefined ? { registrado: false, consulta } : { registrado: true, evento: achado, consulta };\n}\n",
|
|
29
29
|
"/**\n * Envio sem resposta e duplicidade na autorização.\n *\n * Idempotência: a chave de acesso contém o `cNF` e o número da nota, e o `digVal` do protocolo é o DigestValue do\n * conteúdo autorizado. Enquanto o mesmo XML assinado (os mesmos bytes) for reenviado, a SEFAZ ou autoriza, ou devolve\n * duplicidade (204) com o protocolo existente. Gerar outro `cNF`, outro `dhEmi` ou reassinar depois de um envio sem\n * resposta cria uma segunda nota para o mesmo número: a primeira pode ter sido autorizada, e a segunda cai em 539\n * (duplicidade com diferença na chave) ou, pior, é autorizada com outra chave se o número mudar. Por isso:\n *\n * 1. grave o XML assinado antes de enviar;\n * 2. envio sem resposta (timeout, conexão caída) ou 204: consulte a chave (`resolverEnvioSemResposta`);\n * 3. `reenviar` (cStat 217, a NF-e não consta): reenvie exatamente os bytes gravados;\n * 4. `concluida`: o `nfeProc` vem montado com o XML gravado, sem novo envio.\n *\n * O `digVal` é opcional no protocolo (`TProtNFe/infProt/digVal`, minOccurs 0 no `leiauteNFe_v4.00.xsd` do PL_010), e\n * há autorizador que o omite. Sem ele, nada prova que o conteúdo registrado é o destes bytes, e as duas decisões se\n * separam:\n *\n * - denegação (110, 301, 302, 303; MOC 7.0 Anexo I, tabela 4.4.3 e regras 1C17-40, 5E17-40 e 5E17-60) é decisão\n * sobre a chave: a NF-e fica registrada como denegada e o número não pode ser reaproveitado nem inutilizado, qualquer\n * que seja o conteúdo. A resolução é `concluida` com o protocolo, e `conteudo` diz se o `digVal` confere, falta ou\n * difere; o `nfeProc` só vem quando confere;\n * - autorização sem `digVal` não prova que a NF-e autorizada é esta: `sem-prova`, e quem chama decide com um humano.\n *\n * Fontes: MOC 7.0 Anexo I (RV 204 \"Duplicidade de NF-e\", RV 539 \"Duplicidade de NF-e com diferença na Chave de\n * Acesso [chNFe: ...]\") e serviço de consulta protocolo (cStat 217; 561, 562 e 613 quando a numeração tem outra NF-e).\n */\n\nimport type { Recusado } from '@sinete/core';\nimport { criarAutorizado, criarDenegado } from '@sinete/core';\nimport type { ClienteNfe, EnvioOpcoes, ProtocoloNfe, ResultadoAutorizacao, ResultadoConsulta } from './client.ts';\nimport { cstatEm } from './outcome.ts';\nimport { documentoAssinado } from './proc.ts';\n\n/**\n * O que o `digVal` do protocolo diz dos bytes assinados: `confere` (é o DigestValue deles), `sem-digval` (o protocolo\n * não o traz) ou `difere` (a SEFAZ registrou outro conteúdo com a mesma chave).\n */\nexport type ConteudoDoProtocolo = 'confere' | 'sem-digval' | 'difere';\n\n/** O que fazer com uma NF-e cujo envio ficou sem resposta ou voltou como duplicidade. */\nexport type ResolucaoEnvio =\n /**\n * A chave está decidida: autorizada (ou cancelada) com o mesmo conteúdo, e `resultado` traz o protocolo e o `nfeProc`;\n * ou denegada, com qualquer conteúdo (a denegação é da chave), e `resultado` traz o protocolo, com o `nfeProc` só\n * quando `conteudo` é `confere`.\n */\n | {\n readonly acao: 'concluida';\n readonly situacao: 'autorizada' | 'cancelada' | 'denegada';\n readonly conteudo: ConteudoDoProtocolo;\n readonly resultado: ResultadoAutorizacao;\n }\n /** A NF-e não consta na SEFAZ (217): reenvie `nfeAssinada`, os mesmos bytes. */\n | { readonly acao: 'reenviar'; readonly nfeAssinada: string }\n /**\n * Existe outra NF-e para o mesmo número: a mesma chave com outro conteúdo (`digVal` diferente) ou outra chave (539 no\n * envio, ou 561, 562 e 613 na consulta; `chNFe` extraída do `xMotivo` quando vier). Não reenvie: recupere a nota registrada e descarte a local.\n */\n | {\n readonly acao: 'divergente';\n readonly chNFe?: string;\n readonly consulta?: ResultadoConsulta;\n readonly motivo: Recusado | ResultadoConsulta;\n }\n /**\n * A chave está autorizada (ou cancelada), mas o protocolo não traz `digVal`: nada prova que o conteúdo autorizado é o\n * destes bytes. Não reenvie nem descarte a nota local, e não a guarde como autorizada sem conferir o XML registrado\n * na SEFAZ (a Distribuição DF-e ou o portal devolvem a NF-e autorizada).\n */\n | { readonly acao: 'sem-prova'; readonly situacao: 'autorizada' | 'cancelada'; readonly consulta: ResultadoConsulta }\n /**\n * A consulta não decidiu (serviço paralisado, consumo indevido, rejeição de schema, situação sem protocolo): tente de\n * novo mais tarde, sem descartar a nota local.\n */\n | { readonly acao: 'indefinida'; readonly resultado: ResultadoConsulta };\n\n/** Chave com CNPJ alfanumérico (NT 2025.001): 6 dígitos, 12 alfanuméricos, 26 dígitos. */\nconst CHAVE_NO_MOTIVO = /\\[\\s*chNFe\\s*:\\s*([0-9]{6}[0-9A-Z]{12}[0-9]{26})\\s*\\]/i;\n\n/** Chave de acesso que a SEFAZ informa no `xMotivo` da rejeição 539 (`[chNFe:...]`), se houver. */\nexport function chaveDaDuplicidade(xMotivo: string): string | undefined {\n return CHAVE_NO_MOTIVO.exec(xMotivo)?.[1]?.toUpperCase();\n}\n\n/**\n * Resolve um envio de autorização sem resposta, ou cuja resposta foi 204 ou 539, consultando a chave da NF-e\n * assinada. `anterior` é o desfecho do envio, quando houve um. `opcoes.signal` cancela a consulta (lança o\n * `ErroTransporte` com `code: 'cancelado'`).\n */\nexport async function resolverEnvioSemResposta(\n cliente: ClienteNfe,\n nfeAssinada: string,\n anterior?: ResultadoAutorizacao,\n opcoes?: EnvioOpcoes,\n): Promise<ResolucaoEnvio> {\n const a = documentoAssinado(nfeAssinada, 'NFe', 'infNFe');\n const chave = a.id.slice(3);\n if (anterior && anterior.tipo === 'recusado' && cstatEm(anterior.cStat, 'duplicidadeChaveDiferente')) {\n const outra = chaveDaDuplicidade(anterior.xMotivo);\n return { acao: 'divergente', motivo: anterior, ...(outra === undefined ? {} : { chNFe: outra }) };\n }\n const consulta = await cliente.consultar(chave, nfeAssinada, opcoes);\n if (consulta.tipo === 'recusado') {\n if (cstatEm(consulta.cStat, 'naoConsta')) return { acao: 'reenviar', nfeAssinada: a.xml };\n // 561, 562 e 613 na consulta: a chave local não consta, mas a numeração dela tem outra NF-e (outro mês, outro cNF\n // ou outra chave). É a mesma situação da 539 no envio; o 562 traz a chave registrada no xMotivo.\n if (cstatEm(consulta.cStat, 'outraNfeNoNumero')) {\n const outra = chaveDaDuplicidade(consulta.xMotivo);\n return { acao: 'divergente', motivo: consulta, ...(outra === undefined ? {} : { chNFe: outra }) };\n }\n return { acao: 'indefinida', resultado: consulta };\n }\n if (consulta.tipo === 'pendente') return { acao: 'indefinida', resultado: consulta };\n const v = consulta.valor;\n const p: ProtocoloNfe | undefined = v.protocolo;\n if (!p) return { acao: 'indefinida', resultado: consulta };\n const conteudo: ConteudoDoProtocolo =\n p.digVal === undefined ? 'sem-digval' : v.digValConfere === true ? 'confere' : 'difere';\n const protStatus = { cStat: p.cStat, xMotivo: p.xMotivo };\n // A denegação é da chave: o número está denegado com qualquer conteúdo, e o `conteudo` diz se é o destes bytes.\n if (v.situacao === 'denegada')\n return { acao: 'concluida', situacao: 'denegada', conteudo, resultado: criarDenegado(protStatus, p) };\n // Só um digVal presente e diferente prova outro conteúdo para a chave.\n if (conteudo === 'difere') return { acao: 'divergente', chNFe: chave, consulta, motivo: consulta };\n if (conteudo === 'sem-digval') return { acao: 'sem-prova', situacao: v.situacao, consulta };\n if (p.nfeProc === undefined) return { acao: 'indefinida', resultado: consulta };\n return { acao: 'concluida', situacao: v.situacao, conteudo, resultado: criarAutorizado(protStatus, p) };\n}\n"
|
|
30
30
|
],
|
|
31
|
-
"mappings": "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",
|
|
32
|
-
"debugId": "
|
|
31
|
+
"mappings": "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",
|
|
32
|
+
"debugId": "870986C8C708F67A64756E2164756E21",
|
|
33
33
|
"names": []
|
|
34
34
|
}
|