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: {String(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}
)}
}
; }