import { SimulationIrpcSpecial } from '@/components/simulation-irpc-special'; import { SimulationIrpcFormPreparation } from '@/components/simulation-irpc-form-preparation'; import { SimulationIrpcPeriodFx } from '@/components/simulation-irpc-period-fx'; import { SimulationIrpcDepreciation } from '@/components/simulation-irpc-depreciation'; import { SimulationIrpcCosts } from '@/components/simulation-irpc-costs'; import { SimulationIrpcSchedules } from '@/components/simulation-irpc-schedules'; import { SimulationIrpcEconomicInclusion } from '@/components/simulation-irpc-economic-inclusion'; import { SimulationIrpcAssessment } from '@/components/simulation-irpc-assessment'; import { useState } from 'react'; import { SimulationIrpcTaxableBase } from '@/components/simulation-irpc-taxable-base'; import { newNormalProfitInput, profitTopics, type NormalProfitInput, type ProfitEvidence, } from '@/lib/irpc-normal-profit'; import { normalBook, saveNormalBook, normalFinancialSource, newNormalAdjustment, recordNormal, normalHtml, normalReportRows, type NormalBook, type NormalAdjustment, } from '@/lib/irpc-normal'; export function SimulationIrpcNormal({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); if (draft.fiscal_component !== 'irpc') return null; try { const b = normalBook(draft), source = normalFinancialSource(draft); const save = (next: NormalBook) => { try { onChange('modelo_a_snapshot', saveNormalBook(draft, next)); setError(''); } catch (e) { setError(String(e)); } }; const patch = (id: string, p: Partial) => save({ ...b, rows: b.rows.map((r) => (r.id === id ? { ...r, ...p } : r)), }); const profit = (patch: Partial) => save({ ...b, profit: { ...(b.profit ?? newNormalProfitInput()), ...patch }, }); const field = ( r: NormalAdjustment, k: 'document' | 'line' | 'amount' | 'reference', label: string, ) => ( ); return (

L6 — IRPC normal: ajustamentos ao resultado financeiro

Acréscimos de multas sem origem contratual e juros compensatórios incluídos nos custos do plano, artigo 36(1)c. A conferência anual pode determinar o lucro tributável simulado no recorte ordinário documentado. A matéria colectável exige conferência específica de deduções e perdas; a colecta tem cálculo próprio e o saldo final a pagar ou recuperar pertence aL8. Não reutiliza automaticamente juros simulados de L5.

{error &&

{error}

} {source ? (

Origem: plano financeiro desta oportunidade;{' '} {source.periods} meses; {source.currency}; resultado antes de imposto: {source.accountingProfitBeforeTax}. Cobranças, pagamentos e reembolso de capital ficam fora do resultado.

) : (

{b.periodsFx ? 'Complete a correspondência do período e moeda abaixo para reutilizar o plano existente emMZN.' : 'Prepare o plano financeiro para reutilizar o resultado e os custos reconciliados.'}

)} {b.rows.map((r) => (
{r.document || 'Ajustamento por identificar'} {field( r, 'document', 'Documento ou pressuposto identificado', )} {field(r, 'line', 'Linha distinta do documento')} {field(r, 'amount', 'Parcela do custo em MZN')} {field( r, 'reference', 'Suporte da qualificação, ocorrência e inclusão contabilística', )}

Juros bancários e penalidades contratuais não são classificados automaticamente como infracções.

))} {!b.profit ? ( ) : (
Resultado financeiro → ajustamentos → lucro tributável simulado

Conferência do sujeito passivo/exercício completo. Cada receita remanescente deve ser ordinária do exercício;cada custo remanescente deve estar documentado e ser indispensável à fonte produtora,sem outras exclusões ou limites. Outras situações conhecidas permanecem discriminadas. Ausência declarada exige suporte e não é informação em falta.

{source?.accountingLines.map((l) => { const review = b.profit!.lines.find( (r) => r.code === l.code, ) ?? { code: l.code, state: '' as const, reference: '', }; const change = (p: Partial) => profit({ lines: [ ...b.profit!.lines.filter( (r) => r.code !== l.code, ), { ...review, ...p }, ], }); return (
{l.origin} — {l.total} {source.currency}
); })}

Depreciação positiva e juros financeiros não integralmente acrescidos exigem correspondência própria;uma declaração de ausência não apaga os valores do plano.

{profitTopics.map(([k, label]) => { const t = b.profit!.topics[k]; const change = (p: Partial) => profit({ topics: { ...b.profit!.topics, [k]: { ...t, ...p }, }, }); return (
{label} {(t.state === 'known' || t.amount !== '') && ( )}
); })}
)} {normalReportRows(draft).map((r, n) => (

{r[1]} — {r[2]} — {r[3]}

))}
); } catch (e) { return (

Preparação L6 não recuperável: {String(e)}. Originais e histórico conservados.

); } }