77 lines
2.8 KiB
TypeScript
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>
|
|
);
|
|
}
|