import {irpcBook} from '@/lib/irpc-withholdings'; import {newNormalBaseInput,newNormalLoss,type NormalBaseInput,type NormalLoss} from '@/lib/irpc-normal-base'; import type {NormalBook} from '@/lib/irpc-normal'; export function SimulationIrpcTaxableBase({draft,book,save}:{draft:Record;book:NormalBook;save:(b:NormalBook)=>void}){ if(!book.profit)return null; const b=book.base;const change=(p:Partial)=>save({...book,base:{...(b??newNormalBaseInput()),...p}}); let identity:{nuit:string;name:string}|null=null;try{const m=irpcBook(draft).mrfta;if(m&&/^\d{9}$/.test(m.nuit))identity={nuit:m.nuit,name:m.name};}catch{/* A missing withholding book does not block this independent path. */} if(!b)return; const loss=(id:string,p:Partial)=>change({losses:b.losses.map(l=>l.id===id?{...l,...p}:l)}); const choices:Array<[string,string]>=[['','Por esclarecer'],['yes','Sim, documentado'],['no','Não, documentado']]; return
Lucro tributável → matéria colectável simulada

Reutiliza o lucro tributável do cálculo actual, sem introduzir novamente os montantes. Esse lucro e a matéria colectável não são imposto a pagar. Recorte: regime geral, método declarativo, perdas fiscais próprias em exercícios anuais ordinários, com saldo e utilização propostos expressos. Não aplica benefícios positivos sem regra específica nem créditos de retenção.

{identity&&(!b.subjectNuit||b.subjectNuit===identity.nuit)&&} {(b.lossesState==='known'||b.losses.length>0)&&<> {b.losses.map((l,n)=>
Perda {n+1} — {l.year||'exercício por identificar'}{(['year','subjectNuit','assessed','previouslyUsed','requested','reference']as const).map(k=>)} {(['annualPeriods','generalActivity','balanceConfirmed']as const).map(k=>)}
)}

A utilização é escolhida explicitamente. O portal não presume ordem FIFO, não ultrapassa saldo ou lucro e não consome o saldo oficial ao simular ou guardar.

} {(b.benefits.state==='known'||b.benefits.amount!=='')&&}

Um benefício positivo conhecido permanece por corresponder; a referência não autoriza subtracção livre. Créditos à colecta, retenções sofridas e imposto a pagar seguem etapa própria.

; }