import { isApiSimulationResultSnapshotV1 } from "./simulation-contract.ts"; import { modeloAComponentRows } from './iva-modelo-a.ts'; export function fiscalQaRows(value: unknown): Array<[string, string]> { if (!isApiSimulationResultSnapshotV1(value)) return []; const snapshot = value as unknown as Record; if (!["fiscal_rule_qa_preview", "fiscal_rule_published"].includes(String(snapshot.scenario_kind))) return []; const published = snapshot.scenario_kind === "fiscal_rule_published"; const provenance = snapshot.fiscal_provenance as Record | undefined; const rule = provenance?.rule as Record | undefined; const source = rule?.source as Record | undefined; const parameters = rule?.parameters as Record> | undefined; const intermediate = snapshot.intermediate as Record< string, unknown > | null; const text = (item: unknown) => typeof item === "string" || typeof item === "number" ? String(item) : "não disponível"; const monthly = snapshot.monthly_projection as {rows?: Array>; cash_treatment?: string} | undefined; return [ ...modeloAComponentRows(snapshot), ...(monthly?.rows ? [ ["Projecção mensal", "Vendas tributáveis sem IVA → taxa aplicada → IVA calculado → total com IVA; não é apuramento final"], ...monthly.rows.map((row) => [`Mês ${text(row.date)}`, `Vendas declaradas: ${text(row.sales_declared)}; base líquida: ${text(row.net_sales)}; taxa: ${row.rate == null ? 'não aplicada' : `${text(row.rate)}%`}; IVA: ${text(row.vat)}; total com IVA: ${text(row.gross_sales)}; ${row.status === 'calculated' ? 'calculado' : row.status === 'missing_sales' ? 'sem informação de vendas' : row.status === 'unsupported_basis' ? 'base líquida não determinada' : 'enquadramento ou regra indeterminados'}`]), ["Tratamento na tesouraria", monthly.cash_treatment ?? "IVA separado; não é custo nem imposto a pagar"], ] as Array<[string,string]> : []), ["Relatório", published ? "IVA pela versão publicada; ver enquadramento abaixo" : "Pré-visualização fiscal QA de rascunho — sem activação"], [ "IVA calculado (exacto; não é saldo a pagar)", value.result.value ?? "Indeterminado", ], ["Explicação", value.result.explanation], ["Base tributável declarada", text(snapshot.base)], ["Taxa cadastrada (%)", text(parameters?.IVA_GENERAL_RATE?.value)], ["Moeda explícita", text(value.context.currency)], [monthly ? "Início da projecção mensal" : "Data de exigibilidade declarada", value.context.reference_date], [ "Enquadramento", provenance?.scope_status === "undetermined" ? "Indeterminado: falta declaração do enquadramento" : "Declarado pelo utilizador; não validado juridicamente", ], [ "Regra / versão / estado", `${text(rule?.rule_code)} / ${text(rule?.rule_version)} / ${published ? "publicada no momento da admissão" : "rascunho"}`, ], [ "Vigência cadastrada", `${text(rule?.valid_from)} até ${rule?.valid_until === null ? "sem termo indicado" : text(rule?.valid_until)}`, ], [ "Fonte da taxa", `${text(source?.diploma)} — ${text(source?.article)}`, ], ["Hash do exemplar da taxa", text(rule?.source_sha256)], ["Representação racional exacta", text(intermediate?.result)], [ "Arredondamento", "Não aplicado. Valor calculado preservado sem truncar ou arredondar; apresentação monetária separada.", ], [ "Limitações", published ? "Cobertura de 2026; operação interna geral em MZN; sem excepções, deduções, declaração ou saldo a pagar." : "Regra não publicada; cobertura demonstrada em 2026; sem deduções, declaração ou saldo a pagar.", ], ]; }