import {SimulationFxSelection} from '@/components/simulation-fx-selection'; import {rawNormalFinancialSource,type NormalBook} from '@/lib/irpc-normal'; import {newNormalPeriodFx,mapNormalPeriodFx,type NormalPeriodFxInput} from '@/lib/irpc-normal-period-fx'; import {irpcFxSources,irpcFxRow,updateIrpcFx} from '@/lib/irpc-fx'; export function SimulationIrpcPeriodFx({draft,book,save}:{draft:Record;book:NormalBook;save:(b:NormalBook)=>void}){ const raw=rawNormalFinancialSource(draft),i=book.periodsFx; if(!i)return; const patch=(p:Partial)=>save({...book,periodsFx:{...i,...p}}),model=mapNormalPeriodFx(draft,i,raw),sources=irpcFxSources(draft); const text=(k:'from'|'to'|'planStart'|'reference'|'conversionReference'|'mznMapsReference',label:string)=>; return
Período fiscal e conversão do plano — simulação L6

Reutiliza os meses e valores originais do plano. Seleccione apenas os meses do período documentado;sem anualizar o resultado. Os mapas,activos e saldos fiscais permanecem emMZN e exigem reconciliação explícita. A conversão cambial para simulação usa o mecanismo existente; não confirma automaticamente a regra fiscal de conversão anual.

{text('from','Início do período fiscal (AAAA-MM-DD)')}{text('to','Fim do período fiscal (AAAA-MM-DD)')}{text('planStart','Primeiro mês civil do plano (AAAA-MM-01)')}{text('reference','Suporte do evento,período e correspondência dos meses')} {book.schedules&&} {text('mznMapsReference','Reconciliação dos mapas,parcelas,activos e saldos existentes em MZN para este período')} {raw?.currency!=='MZN'&&<>{text('conversionReference','Pressuposto documentado da conversão mensal para simulação')} {[...new Set(model.rows.map(r=>r.period))].map(period=>{const date=model.rows.find(r=>r.period===period)?.date,entry=i.months.find(m=>m.period===period)??{period,currency:raw?.currency??''};const change=(p:Partial)=>patch({months:[...i.months.filter(m=>m.period!==period),{...entry,...p}]});return
Mês{period} — {date} — {raw?.currency}{if(p.fxSelection)change({...updateIrpcFx(entry,p.fxSelection),currency:raw?.currency??''});}}/>
;})} } {i.months.filter(m=>!model.rows.some(r=>r.period===m.period)).map(m=>

Selecção conservada do mês{m.period},fora do período actual.

)}

{model.months}meses;resultado convertido:{model.source?.accountingProfitBeforeTax??'Indeterminado'} MZN. {model.pending.join(' | ')}

Meses parciais,limites anuais por corresponder e contagem de perdas41(5) afectam apenas os respectivos casos. Colecta não equivale ao saldo final a pagar.

; }