import { inputText } from '../lib/input-text.ts'; 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}

))}
); }