import {useState} from 'react'; import {goodsPresumptionBook,goodsPresumptionCurrent,goodsPresumptionReportRows,goodsPresumptionSource,goodsPresumptionTreatments,newGoodsPresumption,presumptionConditions,recordGoodsPresumptions,saveGoodsPresumptionBook,switchPresumptionTreatment,type GoodsPresumptionBook,type GoodsPresumptionRow} from '@/lib/iva-goods-presumptions'; export function SimulationGoodsPresumptions({draft,onChange}:{draft:Record;onChange:(field:string,value:string)=>void}){ const[error,setError]=useState('');let book:GoodsPresumptionBook; try{book=goodsPresumptionBook(draft);}catch(cause){return

{String(cause)}

;} const save=(next:GoodsPresumptionBook)=>{try{onChange('modelo_a_snapshot',saveGoodsPresumptionBook(draft,next));setError('');}catch(cause){setError(String(cause));}}; const change=(id:string,patch:Partial)=>save({...book,rows:book.rows.map(r=>r.id===id?{...r,...patch}:r)}); return
Consignação e presunções de bens

Uma linha por conjunto identificado. Na consignação,180dias contam da entrega ao destinatário. As presunções admitem prova em contrário. Classificação não concede isenção,dedução ou elegibilidade para margem.

Oportunidade: {String(draft.context_opportunity??'projecto')}. A data de conferência situa o cenário; este percurso não determina a exigibilidade,base ou IVA.

{goodsPresumptionSource}

{error&&

{error}

} {book.rows.map(row=>
{row.description||'Conjunto por identificar'} — {row.period||'mês por indicar'}
{([['description','Conjunto/operação identificados'],['operationRef','Referência da operação / pressuposto'],['operationDate','Data de conferência / prevista'],['period','Mês da conferência'],['documentRef','Documento / referência da previsão'],['documentDate','Data do documento / prevista'],['goodsRef','Bens e elementos identificados'],['scope','Âmbito:conjunto,estabelecimentos,operação e período'],['evidence','Fundamento factual / pressupostos']] as const).map(([field,label])=>)} {row.treatment==='consignment_180'?<>

Identifique apenas o conjunto não devolvido. Separe devoluções parciais por conjunto; uma devolução posterior não apaga o cenário anteriormente guardado.

:row.treatment&&<> {row.treatment==='excess_consumption'&&<>{([['quantity','Quantidade consumida'],['quantityUnit','Unidade da quantidade'],['productionRef','Volume de produção e comparação que fundamenta o excesso']] as const).map(([field,label])=>)}

Sem percentagem ou limiar de consumo por defeito.

} {row.contraryProof==='yes'&&} }
Factos próprios do percurso{presumptionConditions(row.treatment).map(([key,label])=>)}

Trocar percurso conserva dados/referências ocultos; reveja as confirmações aplicáveis. Prova em contrário afasta a presunção no seu âmbito,sem transformar o resultado em isenção.

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

{goodsPresumptionCurrent(draft,book)?'Classificações correspondentes às entradas guardadas.':'Entradas alteradas;resultado histórico conservado.Reveja e confira novamente.'} {book.history?.length??0} versões anteriores.Sem IVA,base,dedução ou margem calculados.

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