import { useState } from 'react'; import { foreignOperationBook, foreignOperationCurrent, foreignOperationReportRows, foreignOperationSource, foreignSources, foreignEvents, newForeignOperation, recordForeignOperations, saveForeignOperationBook, switchForeignSource, type ForeignOperationBook, type ForeignOperationRow, } from '@/lib/iva-foreign-operations'; export function SimulationForeignOperations({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: ForeignOperationBook; try { book = foreignOperationBook(draft); } catch (e) { return

{String(e)}

; } const save = (next: ForeignOperationBook) => { try { onChange( 'modelo_a_snapshot', saveForeignOperationBook(draft, next), ); setError(''); } catch (e) { setError(String(e)); } }; const change = (id: string, patch: Partial) => save({ ...book, rows: book.rows.map((r) => (r.id === id ? { ...r, ...patch } : r)), }); return (
Operações no estrangeiro — localização e enquadramento

Reutilize uma localização já guardada nesta oportunidade. Fora do território não significa isenção,IVA zero ou dedução concedida. Não é necessário repetir os factos/documentos da localização.

{foreignOperationSource}

{error &&

{error}

} {book.rows.map((row) => { let sources: ReturnType = [], events: ReturnType = []; try { sources = foreignSources(draft, row.sourceKind); events = foreignEvents(draft); } catch { /* Existing readers retain corrupt originals. */ } const source = sources.find((s) => s.id === row.sourceRowId); return (
{source?.description || 'Operação por associar'} —{' '} {source?.period || 'período da origem'} {row.sourceKind && !sources.length && (

Prepare a localização nas secções de bens/serviços existentes desta oportunidade. Nenhuma localização é presumida ou copiada de outro projecto.

)} {source && (

Operação: {source.operationRef}. Âmbito:{' '} {source.scope}. {source.reason}

)} {source?.territory === 'partial' && ( )} {source && source.territory !== 'national' && ( <> {row.hypotheticalTaxable === 'yes' && ( )} )}

Trocar origem conserva fundamentos ocultos;reveja as confirmações. Nenhuma dedução é lançada por esta análise.

); })} {!!book.rows.length && ( )} {book.result && ( <>

{foreignOperationCurrent(draft, book) ? 'Análise corresponde às entradas e origens guardadas.' : 'Entradas ou origens alteradas;resultado histórico conservado. Reveja apenas o delta afectado.'}{' '} {book.history?.length ?? 0} versões anteriores.Sem dedução/IVA calculados.

{foreignOperationReportRows(draft).map( ([, label, value, origin], i) => (
{label}
{value} {origin}
), )}
)}
); }