import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newReducedBase, switchReducedTreatment, reducedBaseBook, reducedBaseConditions, ownReducedConditions, reducedBaseCurrent, reducedBaseReportRows, reducedBaseSource, reducedBaseTreatments, publicWorkCategories, recordReducedBases, saveReducedBaseBook, type ReducedBaseBook, type ReducedBaseRow, } from '@/lib/iva-reduced-bases'; export function SimulationReducedBases({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: ReducedBaseBook; try { book = reducedBaseBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: ReducedBaseBook) => { try { onChange('modelo_a_snapshot', saveReducedBaseBook(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 (
Bases reduzidas — energia,taxas aeronáuticas,obras públicas eágua

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Indique a contraprestação total antes da redução,sem o próprioIVA ecom a composição conferida. Se o montante já está reduzido,reutilize o valor original antes de calcular;se só existe total comIVA,esclareça a composição antes de usar este campo.

Energia62%,taxas aeronáuticas85%,obras públicas40%(redução60%)eágua75%. Percentagem da base não é taxaIVA. A dedução relativa a estas operações fica sujeita à mesma proporção18(6),mas este percurso não calcula nem concede dedução ou preenche campo11.

{reducedBaseSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ ['description', 'Operação identificada'], ['currency', 'Moeda do montante'], [ 'operationDate', 'Data da operação / prevista', ], ['period', 'Mês da operação'], [ 'documentRef', 'Documento / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], [ 'priceScope', 'Âmbito:objecto,operação,local eperíodo', ], [ 'consideration', 'Contraprestação total antes da redução,sem próprioIVA', ], [ 'compositionRef', 'Referência da composição15(1)/(5)/(6)', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {row.treatment === 'public_works' ? ( <> ) : ( row.treatment && ( <> ) )}

Mudar tratamento conserva dados e referências ocultos,mas exige rever os factos próprios. Não se exige referência de preço fixado para obras públicas;estas dependem do projecto/categoria/âmbito aplicáveis.

Condições deste tratamento {[ ...reducedBaseConditions, ...ownReducedConditions(row.treatment), ].map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{reducedBaseCurrent(draft, book) ? 'Bases correspondentes às entradas guardadas.' : 'Entradas alteradas;bases históricas conservadas. Reveja e calcule novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. Base eproporção18(6)não são imposto ou dedução concedida.

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