import {useState} from 'react'; import {closureBook,closureSources,newClosure,newClosureCredit,saveClosureBook,recordClosure,adoptPreviousCredit,closureReportRows,type ClosureInput,type ClosureCredit,type ClosureBook} from '@/lib/iva-closure'; export function AcquisitionClosure({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}){ const[error,setError]=useState('');let b:ClosureBook;try{b=closureBook(draft);}catch(e){return

{String(e)}

;} const save=(next:ClosureBook)=>{try{onChange('modelo_a_snapshot',saveClosureBook(draft,next));setError('');}catch(e){setError(String(e));}}; const change=(id:string,p:Partial)=>save({...b,rows:b.rows.map(r=>r.id===id?{...r,...p}:r)}); const sources=closureSources(draft); const entities=[...new Set(b.rows.map(r=>r.entityRef.trim()).filter(Boolean))]; const creditChange=(r:ClosureInput,id:string,p:Partial)=>change(r.id,{credits:r.credits.map(c=>c.id===id?{...c,...p}:c)}); const choice=(r:ClosureInput,key:'firstDeclaration'|'creditsComplete',label:string)=>; return
L3-A/B — crédito,fecho e pagamentos por período

Reutiliza resultados congelados de L2. Crédito anterior,saldo calculado,pagamento registado e transporte são distintos. Identifique o âmbito fiscal da entidade,sem consolidar oportunidades implicitamente.

Primeira declaração em prazo,2026/MZN e reporte integral ou afectação de parcela ao pedidoD. SubstituiçõesC,acompanhamento de reembolsoD e restituição de bebidasE continuam próprios. A parcela preparada para pedido é separada do reporte,sem concessão automática. Prazo/data são declarados,não calculados pelo portal. Uma simulação não submete declarações nem efectua pagamentos.

{error&&

{error}

} {b.rows.map(r=>
Fecho — {r.period||'período por escolher'} {choice(r,'firstDeclaration','É a primeira declaração deste período (ou pressuposto explícito)')}
Créditos de origem identificada
{r.credits.map(c=>
{c.kind==='opening'?'19 — saldo de abertura':c.kind==='previous'?'19 — transporte anterior':'20 — crédito comunicado'} {c.kind==='previous'?:<> {c.kind==='communication'&&}} {c.kind==='previous'&&<>

Origem:{c.reference};{c.period};apresentação{c.amount}. Cálculo pela fracção exacta;origem alterada exige adopção expressa.

}
)} {(['opening','communication','previous'] as const).map(kind=>)} {choice(r,'creditsComplete','Reconciliei todos os créditos;lista vazia confirma expressamente ausência')} {r.interest==='documented'&&} {r.interest&&} {r.destination==='refund'&&}
Pagamentos registados,distintos do saldo calculado
{r.destination==='refund'&&} {r.payments.map(p=>
{(['reference','date','amount'] as const).map((k,i)=>)}
)}
)} {closureReportRows(draft).map(([,label,value,source],i)=>

{label}: {value}{source}

)}
; }