import { useState } from 'react'; import { emptyProductionTaxOption, type ProductionTaxOption } from '@/lib/iva-production-option'; 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(''); const [reuseOption,setReuseOption]=useState<{rowId:string;sourceId:string}|null>(null); 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.

{row.treatment.startsWith('production_')&&row.treatment.endsWith('_opted')&&
Opção de tributação da produção — artigo11

Complete apenas as datas em falta. A opção não cessa automaticamente ao fim de cinco anos. Uma declaração de regresso deve respeitar o prazo mínimo e produz efeitos no ano seguinte.

{book.rows.some(source=>source.id!==row.id&&source.taxOption)&&} {reuseOption?.rowId===row.id&&

Ao confirmar, substituirá o enquadramento e as datas da opção desta linha pelos da origem escolhida, conservando a data desta operação. Confirme que se aplicam ao mesmo sujeito passivo; o resultado anterior permanece no histórico.

} {([['declarationDate','Data da declaração de opção'],...(row.taxOption?.mode==='startup'?[['startupDate','Data de início da actividade']]:[]),['operationDate','Data da operação nesta linha'],...(row.taxOption?.returnStatus==='declared'||row.taxOption?.returnDeclarationDate?[['returnDeclarationDate','Data da declaração de regresso à isenção']]:[])] as Array<['declarationDate'|'startupDate'|'operationDate'|'returnDeclarationDate',string]>).map(([field,label])=>)}
}

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

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