import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newGoodsLocation, switchGoodsTreatment, goodsLocationBook, goodsLocationConditions, ownGoodsConditions, goodsLocationCurrent, goodsLocationReportRows, goodsLocationSource, goodsLocationTreatments, recordGoodsLocations, saveGoodsLocationBook, type GoodsLocationBook, type GoodsLocationRow, } from '@/lib/iva-goods-location'; export function SimulationGoodsLocation({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: GoodsLocationBook; try { book = goodsLocationBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: GoodsLocationBook) => { try { onChange('modelo_a_snapshot', saveGoodsLocationBook(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 (
Localização — transmissões de bens e antes da importação

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Identifique os bens e os factos da transmissão. Com transporte,indique onde se encontram ao iniciá-lo;sem transporte,onde são postos à disposição. O endereço ou nacionalidade do cliente não substituem estes factos.

Na transmissão pelo importador ou subsequente antes da importação nacional de bens vindos do estrangeiro,confira a regra própria6(2). A localização física anterior no estrangeiro não a afasta por si. Fora do âmbito territorial não equivale a isenção ou IVA zero;esta classificação não calcula imposto.

{goodsLocationSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ [ 'description', 'Bens e transmissão identificados', ], [ 'operationRef', 'Referência da operação / pressuposto', ], [ 'operationDate', 'Data da transmissão / prevista', ], ['period', 'Mês da transmissão'], [ 'documentRef', 'Documento da operação / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], [ 'scope', 'Âmbito: bens, operação, período e condições', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {row.treatment && row.treatment !== 'goods_before_import' && ( <> )} {[ 'goods_with_transport', 'goods_before_import', ].includes(row.treatment) && ( )} {row.treatment === 'goods_before_import' && ( <> )}

Mudar percurso conserva os locais e referências,mas exige rever os factos próprios. Campos sem aplicação ficam ocultos e conservados.

Factos próprios deste percurso {[ ...goodsLocationConditions, ...ownGoodsConditions(row.treatment), ].map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{goodsLocationCurrent(draft, book) ? 'Localizações correspondentes às entradas guardadas.' : 'Entradas alteradas;localizações históricas conservadas. Reveja e classifique novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. Classificação não determina isenção,IVA ou campo11.

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