Pensions: compute current age from birthdate instead of hardcoded 30

FCL projection target defaults to the next 5-year withdrawal window
(CURRENT_AGE + 5) rather than a fixed 35.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Carlos Escalante
2026-07-03 20:38:44 -06:00
parent 5296230416
commit f832138b41

View File

@@ -84,7 +84,17 @@ interface TooltipEntry {
// ─── Constants ────────────────────────────────────────────────────────────────
const CURRENT_AGE = 30;
const BIRTH_DATE = new Date(1988, 7, 29); // 29 de agosto de 1988
function computeCurrentAge(): number {
const now = new Date();
const hadBirthdayThisYear =
now.getMonth() > BIRTH_DATE.getMonth() ||
(now.getMonth() === BIRTH_DATE.getMonth() && now.getDate() >= BIRTH_DATE.getDate());
return now.getFullYear() - BIRTH_DATE.getFullYear() - (hadBirthdayThisYear ? 0 : 1);
}
const CURRENT_AGE = computeCurrentAge();
const FUND_KEYS: FundKey[] = ['FCL', 'ROP', 'VOL'];
@@ -99,7 +109,7 @@ const FUNDS_DEFAULT: Record<FundKey, FundDef> = {
annualRate: 7.5,
isDividend: false,
withdrawalRule: 'Retirable cada 5 años o al cambio de empleo',
defaultTargetAge: 35,
defaultTargetAge: CURRENT_AGE + 5,
},
ROP: {
key: 'ROP',
@@ -255,7 +265,7 @@ const EMPTY_SNAPSHOTS: PensionSnapshot[] = [];
export default function Pensions() {
const [visibleFunds, setVisibleFunds] = useState<Set<FundKey>>(new Set(FUND_KEYS));
const [projections, setProjections] = useState<Record<FundKey, ProjectionState>>({
FCL: { contribution: 150_000, rate: 7.5, targetAge: 35 },
FCL: { contribution: 150_000, rate: 7.5, targetAge: CURRENT_AGE + 5 },
ROP: { contribution: 120_000, rate: 6.0, targetAge: 65 },
VOL: { contribution: 400_000, rate: 8.0, targetAge: 57 },
});