import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newSecondhand, switchSecondhandTreatment, switchSecondhandCategory, secondhandBook, secondhandConditions, secondhandCategoryConditions, secondhandCurrent, secondhandReportRows, secondhandSource, secondhandTreatments, secondhandCategories, recordSecondhands, saveSecondhandBook, type SecondhandBook, type SecondhandRow, } from '@/lib/iva-secondhand'; export function SimulationSecondhand({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: SecondhandBook; try { book = secondhandBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: SecondhandBook) => { try { onChange('modelo_a_snapshot', saveSecondhandBook(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 (
Bens emsegunda mão — revenda pela margem eleilão

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Uma linha porbem.P125identifica categoria/estatuto;P092ouP093determina a base aplicável.Sem compensação de perdas entrebens,nova dedução ou IVAcalculado.

Revendedor:contraprestação total comIVA−preço compra,parcela positiva÷1.16 ebase arredondada à unidade48(6)b.16%é parâmetro do divisor,não IVAcalculado neste percurso.Leilão:facturado−líquidocomitente−IVApróprio identificado;líquido=adjudicação−comissão.Não substituir IVA desconhecido porzero.

{secondhandSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Bem por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ ['description', 'Bem/operação identificados'], ['operationRef', 'Referência da operação'], [ 'operationDate', 'Data da operação / prevista', ], ['period', 'Mês da operação'], ['currency', 'Moeda dos montantes'], [ 'documentRef', 'Documento / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], ['goodsRef', 'Identidade do bem individual'], [ 'operatorRef', 'Operador e estatuto revendedor/organizador', ], [ 'categoryRef', 'Características e referência da classificação', ], [ 'sourceRef', 'Fornecedor/comitente,origem e referência', ], [ 'scope', 'Âmbito:bem,partes,operação eperíodo', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {( [ [ 'domesticPurchase', 'Aquisição dos bens no território nacional', ], [ 'domesticTaxable', 'Transmissão interna tributável,não exportação isenta13', ], ] as const ).map(([field, label]) => ( ))} {row.category === 'art' && ( <> {row.artSubtype === 'print' && ( )} {row.artSubtype === 'ceramic' && ( )} )} {row.category === 'collection' && ( <> {row.collectionSubtype === 'postal' && ( )} )} {row.category === 'antique' && ( )} {row.treatment === 'reseller_margin' && ( <> {( [ [ 'grossSale', 'Contraprestação total devida pelocliente,comIVA incluído', ], [ 'purchasePrice', 'Preço compra do mesmo bem', ], [ 'purchaseRef', 'Justificação/referência do preço compra', ], ] as const ).map(([field, label]) => ( ))} )} {row.treatment === 'auction_margin' && ( [ [ 'grossInvoice', 'Montante facturado ao comprador49(4)', ], ['hammerPrice', 'Preço de adjudicação'], [ 'principalCommission', 'Comissão obtida/aobter do comitente', ], [ 'auctionRef', 'Contrato de comissão de venda emnome próprio eleilão', ], [ 'principalRef', 'Comitente e referência do líquido', ], [ 'ownVat', 'IVApróprio relativo àtransmissão,identificado', ], [ 'ownVatRef', 'Referência/composição do IVApróprio identificado', ], ] as const ).map(([field, label]) => ( ))}

Os montantes ocultos de outro percurso são conservados esó entram na fórmula escolhida.Situação antiga35/42não activa margem automaticamente em2026;sem novo certificado/aprovador.

Condições da classificação eregime {[ ...secondhandConditions, ...secondhandCategoryConditions(row.category), [ 'regimeConfirmed', 'Condições47/48(1)ou49(1),papéis/contrato equadro temporal conferidos', ], [ 'compositionConfirmed', 'Composição monetária corresponde ao percurso:revenda comIVA no total,ou leilão comfacturado,líquidocomitente eIVApróprio separados,sem dupla subtracção', ], ].map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{secondhandCurrent(draft, book) ? 'Classificações/bases correspondentes às entradas guardadas.' : 'Entradas alteradas;resultados históricos conservados.'}{' '} {book.history?.length ?? 0} versões anteriores.Sem compensar margens entrebens,calcular IVA ou dedução/campo11.

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