You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(dashboard): respect each SPP program's report deadline - #2167
The service providers page treated every quarterly report as due on the last day of the quarter. SPP3's Program Terms §6.3 give providers 30 days after the quarter ends, so from Oct 1 all SPP3 providers would have shown as overdue for Q3.
Each program now sets its own deadline through an optional reportDueDays field in ensdao/spp (SPP3: 30). Programs without it (SPP1, SPP2) keep today's behavior.
Due dates and statuses are computed per program, since the same quarter can belong to two programs with different deadlines (e.g. 2026/Q3 in SPP2 and SPP3).
Column headers show the real deadline (SPP3 Q3: "Due by Oct 30").
Unit tests cover the deadline math and the per-program statuses.
Note
Low Risk
Dashboard-only deadline display and status logic with defaults and new unit tests; no auth, payments, or data persistence changes.
Overview
The service providers page no longer treats every quarterly report as due on the last day of the quarter. Programs can define reportDueDays (from ensdao/spp config; SPP3 uses 30 days after quarter end), and due dates, column headers, and overdue / due-soon / upcoming statuses follow that window.
Per-program deadlines: fetched report status is now keyed by program, so the same calendar quarter can show different statuses when SPP2 and SPP3 disagree. The table passes each program's reportDueDays into the due-date label (e.g. SPP3 Q3 → "Due by Oct 30").
Defaults: missing reportDueDays stays 0 (deadline at quarter end), preserving SPP1/SPP2 behavior. Unit tests cover deadline math, labels, and per-program status building.
Automated review · Figma: not found · Spec · Preview: dashboard build skipped ("Ignored") — Storybook preview only
ℹ️ Reviewed without a Figma reference — grounded in code/layout inspection and UX-expert evaluation. The anticapture (dashboard) Vercel deployment for this PR is marked Ignored, so live visual validation wasn't possible; the Storybook preview doesn't exercise this data-driven table with real API data.
Service Providers table — quarter column headers
No visual issues found. The due-date sub-label (text-secondary text-xs, ServiceProvidersTable.tsx:106) renders inside an unconstrained-width header cell that already handled variable-length strings before this change (e.g. "Due by Dec 31"). The new per-program dates ("Due by Oct 30", "Due by Jan 30") follow the same Due by <Mon> <D> format and won't overflow or wrap differently than the existing quarter-end labels. [Code-only]
Validated — no change needed
Header label format is unchanged; only the computed date input differs per program. No new UI element, state, or interaction is introduced by this PR. [Code-only]
No diff lines remove any rendered element — this layers a corrected date value onto the existing cell structure. [Code-only]
Note for the author
Worth double-checking that the anticapture project's Ignored Vercel build on this PR is expected (e.g. a turbo-ignore build-step skip) rather than a pipeline gap — as-is, reviewers can't visually spot-check the Service Providers page from this PR's preview alone.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The service providers page treated every quarterly report as due on the last day of the quarter. SPP3's Program Terms §6.3 give providers 30 days after the quarter ends, so from Oct 1 all SPP3 providers would have shown as overdue for Q3.
Each program now sets its own deadline through an optional
reportDueDaysfield inensdao/spp(SPP3:30). Programs without it (SPP1, SPP2) keep today's behavior.Note
Low Risk
Dashboard-only deadline display and status logic with defaults and new unit tests; no auth, payments, or data persistence changes.
Overview
The service providers page no longer treats every quarterly report as due on the last day of the quarter. Programs can define
reportDueDays(fromensdao/sppconfig; SPP3 uses 30 days after quarter end), and due dates, column headers, and overdue / due-soon / upcoming statuses follow that window.Per-program deadlines: fetched report status is now keyed by program, so the same calendar quarter can show different statuses when SPP2 and SPP3 disagree. The table passes each program's
reportDueDaysinto the due-date label (e.g. SPP3 Q3 → "Due by Oct 30").Defaults: missing
reportDueDaysstays 0 (deadline at quarter end), preserving SPP1/SPP2 behavior. Unit tests cover deadline math, labels, and per-program status building.Reviewed by Cursor Bugbot for commit f705ff8. Configure here.