import { useState } from 'react'; import { modeloA06Correspondence, newSalesOperation, operationTreatments, recordSales, reuseSales, salesBook, salesCurrent, salesReportRows, saveSalesBook, splitSales, type SalesBook, type SalesOperation } from '@/lib/iva-operations'; export function SimulationOperations({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}) { const [error,setError]=useState(''); let book:SalesBook; try{book=salesBook(draft);}catch(cause){return

{String(cause)}

;} const run=(action:()=>void)=>{try{action();setError('');}catch(cause){setError(cause instanceof Error?cause.message:String(cause));}}; const save=(next:SalesBook)=>onChange('modelo_a_snapshot',saveSalesBook(draft,next)); const change=(id:string,patch:Partial)=>run(()=>save({...book,rows:book.rows.map(r=>r.id===id?{...r,...patch}:r)})); return

Operações de IVA — enquadramento das vendas

Oportunidade {String(draft.context_opportunity||'entrada geral')}; moeda original {book.currency||'por indicar'}. Cobertura2026/MZN. Reutilize as vendas e complete apenas o enquadramento. Este bloco classifica as operações; não substitui nem soma novamente a execução mensal geral acima.

Uma empresa pode ter operações com tratamentos diferentes. Os valores são projecções sob pressupostos declarados, sem certificar facturas, reconhecer créditos ou submeter uma declaração à AT.

Correspondência do campo06 e limites do formulário

{modeloA06Correspondence}

{error&&

{error}

} {book.rows.map(row=>{const rule=operationTreatments.find(r=>r.id===row.treatment);return
{row.description||'Operação adicional'} — {row.period}

Origem: {row.source}; {row.sourceAmount??'sem valor de origem'} {row.sourceCurrency}; {row.sourcePeriod}. O estabelecimento não é inferido da localização do projecto.

{rule?.article}; {rule?.source}. Aplicação nesta versão: Janeiro–Dezembro2026, sujeita às condições seguintes.

{rule?.conditions.map((condition,index)=>)}