import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newServiceNormal, switchServiceTreatment, serviceNormalBook, serviceNormalConditions, ownServiceConditions, serviceNormalCurrent, serviceNormalReportRows, serviceNormalSource, serviceNormalTreatments, recordServiceNormals, saveServiceNormalBook, type ServiceNormalBook, type ServiceNormalRow, } from '@/lib/iva-service-normal'; export function SimulationServiceNormal({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: ServiceNormalBook; try { book = serviceNormalBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: ServiceNormalBook) => { try { onChange('modelo_a_snapshot', saveServiceNormalBook(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 (
Base tributável — serviços gratuitos e utilização de bens da empresa

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Identifique o serviço e a finalidade abrangida pelo artigo4(2). A base é o valor normal do serviço,com fundamento e âmbito identificados;nenhum custo ou preço de aquisição dos bens é usado como substituto automático.

O serviço gratuito da alínea a)não exige a dedução anterior prevista na alínea b). A utilização de bens exige identificar os bens/elementos e a dedução total/parcial anterior,sem a calcular ou conceder aqui. Utilização não é transmissão permanente de bens. Base e IVA são resultados distintos.

{serviceNormalSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ [ 'description', 'Serviço e operação identificados', ], [ 'operationRef', 'Referência da operação / pressuposto', ], [ 'purposeRef', 'Finalidade e destinatário / sector isento', ], [ 'documentRef', 'Documento da operação / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], ['period', 'Mês da operação'], ['currency', 'Moeda de origem'], [ 'normalValue', 'Valor normal do serviço sem IVA (moeda indicada)', ], [ 'valuationRef', 'Fundamento do valor normal / pressuposto', ], [ 'valuationScope', 'Âmbito do valor normal: serviço, estádio, tempo, lugar e condições', ], [ 'compositionRef', 'Referência da composição sem próprio IVA', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {row.treatment && row.treatment !== 'free_company_service' && ( <> )}

Mudar o tratamento conserva os valores e documentos,mas exige rever as condições próprias. Os campos sem aplicação ficam ocultos e conservados.

Condições próprias deste percurso {[ ...serviceNormalConditions, ...ownServiceConditions(row.treatment), ].map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

{serviceNormalCurrent(draft, book) ? 'Valores normais correspondentes às entradas guardadas.' : 'Entradas alteradas;valores normais históricos conservados. Reveja e determine novamente.'}{' '} {book.history?.length ?? 0} versões anteriores. IVA e campo11 não são preenchidos por estas bases.

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