import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newGoodsAllocation, switchAllocationTreatment, switchAllocationValuation, goodsAllocationBook, goodsAllocationConditions, allocationSpecificConditions, goodsAllocationCurrent, goodsAllocationReportRows, goodsAllocationSource, goodsAllocationTreatments, recordGoodsAllocations, saveGoodsAllocationBook, type GoodsAllocationBook, type GoodsAllocationRow, } from '@/lib/iva-goods-allocation'; export function SimulationGoodsAllocation({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: GoodsAllocationBook; try { book = goodsAllocationBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: GoodsAllocationBook) => { try { onChange('modelo_a_snapshot', saveGoodsAllocationBook(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 (
Afectação de bens — classificação ebase de aquisição/custo

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. P124identifica a transmissão assimilada;P088determina a base. Uma operação conserva a sua identidade nos dois requisitos,não se soma duas vezes. Uso temporário de bens como serviçoP089segue o seu percurso.

A dedução anterior total/parcial é um facto histórico dos bens ou elementos;não é calculada nem concedida aqui. A base usa preço de aquisição reportado ao momento da operação ou,na sua falta demonstrada,preço de custo.Não substituir um preço desconhecido por zero ou por custo automaticamente.

{goodsAllocationSource}

{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', ], ['currency', 'Moeda da base'], [ 'operationDate', 'Data da operação / prevista', ], ['period', 'Mês da operação'], [ 'documentRef', 'Documento / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], [ 'goodsRef', 'Bens/elementos e identificação do conjunto afectado', ], [ 'deductionRef', 'Referência da dedução anterior total ou parcial', ], [ 'destinationRef', 'Destino,finalidade ou sector eâmbito', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {[ 'permanent_private_goods', 'free_goods_transfer', ].includes(row.treatment) && ( )} {row.treatment === 'fixed_asset_20a' && ( )} {row.valuationMode === 'acquisition' && ( <> )} {row.valuationMode === 'cost' && ( <> )}

Mudar percurso/modo conserva referências e valores ocultos,mas exige rever confirmações próprias. Não se presume limiar de oferta,custo histórico actualizado ou nova dedução.

Factos próprios da operação {[ ...goodsAllocationConditions, ...allocationSpecificConditions(row.treatment), ].map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{goodsAllocationCurrent(draft, book) ? 'Classificações/bases correspondentes às entradas guardadas.' : 'Entradas alteradas;resultados históricos conservados. Reveja e determine novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. Dedução histórica não é nova dedução/campo11;sem IVA ou regularização calculados.

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