import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newValueReview, switchValueReview, switchPriceContext, switchValueOrigin, valueReviewBook, valueReviewConditions, valueReviewCurrent, valueReviewReportRows, valueReviewSource, valueReviewTreatments, priceContexts, recordValueReviews, saveValueReviewBook, type ValueReviewBook, type ValueReviewRow, } from '@/lib/iva-value-review'; export function SimulationValueReview({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: ValueReviewBook; try { book = valueReviewBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: ValueReviewBook) => { try { onChange('modelo_a_snapshot', saveValueReviewBook(draft, next)); setError(''); } catch (cause) { setError(String(cause)); } }; const change = (id: string, patch: Partial) => save({ ...book, rows: book.rows.map((row) => row.id === id ? { ...row, ...patch } : row, ), }); return (
Base tributável — comparação de preços e correcção referenciada

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Compare a contraprestação com o preço corrente ou normal correspondente à natureza da operação. Um preço inferior permite à AT proceder à correcção;esta comparação não exerce esse poder nem substitui automaticamente a contraprestação.

Para registar uma correcção,identifique o montante,referência,data e âmbito aplicáveis à operação e período. Na projecção,um cenário condicionado permanece identificado como pressuposto,não decisão AT concedida. Base e IVA são resultados distintos.

{valueReviewSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ ['description', 'Operação identificada'], [ 'operationRef', 'Referência da operação / pressuposto', ], [ 'documentRef', 'Documento da operação / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], ['period', 'Mês da operação'], ['currency', 'Moeda de origem'], [ 'declaredAmount', 'Contraprestação declarada sem IVA (moeda indicada)', ], [ 'referenceAmount', 'Preço corrente ou normal comparável sem IVA (moeda indicada)', ], [ 'referenceRef', 'Referência do preço corrente ou normal / pressuposto', ], [ 'referenceScope', 'Âmbito do preço: bens/serviços, estádio, período, local e condições', ], [ 'compositionRef', 'Referência da composição equivalente sem próprio IVA', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {row.treatment === 'referenced_correction' && ( <> {( [ [ 'correctedAmount', 'Montante da base corrigida / pressuposto condicionado', ], [ 'correctionRef', 'Referência da correcção AT / pressuposto condicionado', ], [ 'correctionScope', 'Âmbito da correcção: bens/serviços, operação, período e condições', ], [ 'correctionDate', 'Data da correcção / prevista', ], ] as const ).map(([field, label]) => ( ))} )}

Mudar percurso/contexto conserva montantes e documentos,mas exige rever as correspondências afectadas. Campos sem aplicação ficam ocultos e conservados;uma comparação não concede nem determina uma correcção.

Condições próprias da comparação {valueReviewConditions.map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{valueReviewCurrent(draft, book) ? 'Comparações correspondentes às entradas guardadas.' : 'Entradas alteradas;comparações históricas conservadas. Reveja e determine novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.

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