import { inputText } from '../lib/input-text.ts'; import { useState } from 'react'; import { newPublicBase, publicBaseBook, publicBaseConditions, publicBaseCurrent, publicBaseReportRows, publicBaseSource, publicBaseTreatments, recordPublicBases, savePublicBaseBook, type PublicBaseBook, type PublicBaseRow, } from '@/lib/iva-public-authority-base'; export function SimulationPublicAuthorityBase({ draft, onChange, }: { draft: Record; onChange: (field: string, value: string) => void; }) { const [error, setError] = useState(''); let book: PublicBaseBook; try { book = publicBaseBook(draft); } catch (cause) { return

{String(cause)}

; } const save = (next: PublicBaseBook) => { try { onChange('modelo_a_snapshot', savePublicBaseBook(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 — actos de autoridades públicas

Oportunidade:{' '} {inputText(draft.context_opportunity || 'entrada geral')}. Prepare apenas as operações relevantes. A base do artigo15(2)(d) é a indemnização ou outra compensação ligada à transmissão de bens ou prestação de serviços resultante do acto público. Um pagamento ou a natureza pública da entidade não determinam incidência nem taxa de IVA.

A indemnização judicial por incumprimento de contrato tem exclusão própria no artigo15(6)(a); não é incluída por analogia. Indique as componentes sem IVA e o fundamento da composição. Na compensação em espécie ou mista, identifique o valor normal conforme15(3)/(4). Valores em falta permanecem indeterminados; não se convertem em zero.

{publicBaseSource}

{error &&

{error}

} {book.rows.map((row) => (
{row.description || 'Operação por identificar'} —{' '} {row.period || 'mês por indicar'}
{( [ ['description', 'Operação identificada'], ['authority', 'Autoridade pública'], [ 'actRef', 'Acto da autoridade / referência da previsão', ], [ 'documentRef', 'Documento da compensação / referência da previsão', ], [ 'documentDate', 'Data do documento / prevista', ], ['period', 'Mês da operação'], ['currency', 'Moeda de origem'], [ 'compositionRef', 'Referência da composição sem IVA — inclusões e exclusões aplicáveis', ], [ 'evidence', 'Fundamento factual / pressupostos', ], ] as const ).map(([field, label]) => ( ))} {['money', 'mixed'].includes(row.compensationForm) && ( )} {['non_money', 'mixed'].includes( row.compensationForm, ) && ( <> )}

Ao mudar de tratamento ou forma, os valores e referências anteriores conservam-se; só entram no cálculo as componentes aplicáveis à forma escolhida.

Condições próprias desta base {publicBaseConditions.map(([key, label]) => ( ))}
))} {!!book.rows.length && ( )} {book.result && ( <>

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

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