Fix timezone hazard in financing start_date guard

Replace new Date(date_string) + getFullYear/getMonth with direct string
parsing (split('-').map(Number)) so month comparisons are never shifted
by UTC offset. Affects both buildVirtualPaychecks and generatePaychecks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 20:39:47 -04:00
parent 119d53c33a
commit 5aaa5cfed8

View File

@@ -97,9 +97,7 @@ async function buildVirtualPaychecks(year, month) {
try { try {
for (const plan of activePlans.rows) { for (const plan of activePlans.rows) {
// Skip plans that haven't started yet for this period // Skip plans that haven't started yet for this period
const start = new Date(plan.start_date); const [planStartYear, planStartMonth] = plan.start_date.split('-').map(Number);
const planStartYear = start.getFullYear();
const planStartMonth = start.getMonth() + 1;
if (year * 12 + month < planStartYear * 12 + planStartMonth) continue; if (year * 12 + month < planStartYear * 12 + planStartMonth) continue;
const amount = await calcPaymentAmount(client, plan, year, month); const amount = await calcPaymentAmount(client, plan, year, month);
@@ -202,9 +200,7 @@ async function generatePaychecks(year, month) {
); );
for (const plan of activePlans.rows) { for (const plan of activePlans.rows) {
// Skip plans that haven't started yet for this period // Skip plans that haven't started yet for this period
const start = new Date(plan.start_date); const [planStartYear, planStartMonth] = plan.start_date.split('-').map(Number);
const planStartYear = start.getFullYear();
const planStartMonth = start.getMonth() + 1;
if (year * 12 + month < planStartYear * 12 + planStartMonth) continue; if (year * 12 + month < planStartYear * 12 + planStartMonth) continue;
// Determine which paycheck(s) this plan applies to // Determine which paycheck(s) this plan applies to