Files
Investidor-V2/resources/js/components/simulation-irpc-assessment.tsx
T

77 lines
2.8 KiB
TypeScript

import {
newNormalAssessmentInput,
type NormalAssessmentInput,
} from '@/lib/irpc-normal-assessment';
import type { NormalBook } from '@/lib/irpc-normal';
export function SimulationIrpcAssessment({
book,
save,
}: {
book: NormalBook;
save: (b: NormalBook) => void;
}) {
if (!book.base) return null;
const a = book.assessment,
change = (p: Partial<NormalAssessmentInput>) =>
save({
...book,
assessment: { ...(a ?? newNormalAssessmentInput()), ...p },
});
if (!a)
return (
<button type="button" onClick={() => change({})}>
Iniciar cálculo da colecta normal
</button>
);
return (
<fieldset
aria-label="Colecta — regime normal"
className="space-y-3 rounded border p-3"
>
<legend>Matéria colectável → colecta</legend>
<p>
Reutiliza a matéria colectável actual. Exercício:
{book.year || 'por identificar'};período anual correspondente à
conferência financeira. A taxa geral identificada para2026
é32%,artigo61(1). Benefícios,taxas reduzidas,tributações
autónomas e outros casos especiais permanecem separados.
</p>
<label className="block">
Enquadramento da colecta
<select
aria-label="Enquadramento da colecta"
value={a.treatment}
onChange={(e) =>
change({
treatment: e.target
.value as NormalAssessmentInput['treatment'],
})
}
>
<option value="">Informação em falta</option>
<option value="general_61_1">
Regime normal — taxa geral32%,artigo61(1)
</option>
<option value="other">
Benefício ou caso especial — correspondência própria
</option>
</select>
</label>
<label className="block">
Suporte ou pressuposto da taxa geral neste caso
<input
value={a.reference}
onChange={(e) => change({ reference: e.target.value })}
/>
</label>
<p>
Lucro tributável → matéria colectável → colecta → saldo final a
pagar ou recuperar. O saldo final pertence
aL8:retenções,pagamentos e créditos anuais não são abatidos
aqui. Uma colecta conhecida não significa saldo final conhecido.
</p>
</fieldset>
);
}