import { inputText } from '../lib/input-text.ts'; 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:{' '} {inputText(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}
), )}
)}
); }