feat(OPS-2280): Foundation — schema fix, PLANNED_MOD status, history award text#5899
Conversation
There was a problem hiding this comment.
Pull request overview
This PR lays the groundwork for OPS-2280’s award/approval workflow by fixing procurement tracker step schema serialization, introducing a new PLANNED_MOD budget line status across backend + frontend rollups, and correcting award-step agreement history text.
Changes:
- Backend: ensure AWARD-step fields (vendor/contract/award details) are included in step API responses; add
obligated_dateto the PATCH schema. - Backend + DB: add
PLANNED_MODto the BLI status enum (Alembic) and treat it as “planned” in key funding/spending aggregations. - Frontend: add “Planned Mod” label + styling and add unit tests for tag rendering.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/src/helpers/utils.js | Adds display text + class mapping support for PLANNED_MOD. |
| frontend/src/helpers/budgetLines.helpers.js | Extends BLI_STATUS with PLANNED_MOD. |
| frontend/src/components/UI/Tag/StatusTagList.test.jsx | Adds tests ensuring PLANNED_MOD displays in the status tag list. |
| frontend/src/components/UI/Tag/StatusTagList.jsx | Adds class mapping for PLANNED_MOD tags. |
| frontend/src/components/UI/TableTag/TableTag.test.jsx | Adds tests for PLANNED_MOD rendering in table tags. |
| frontend/src/components/UI/TableTag/TableTag.jsx | Adds styling branch for “Planned Mod” table tag display. |
| backend/ops_api/tests/ops/test_planned_mod_status.py | Unit tests for enum presence + grouping behavior + helper mapping. |
| backend/ops_api/tests/ops/schemas/test_procurement_tracker_steps_schema.py | Regression tests for AWARD-step schema serialization + PATCH acceptance of obligated_date. |
| backend/ops_api/tests/ops/agreement/test_award_history.py | Unit tests for award-step-specific agreement history titles/messages. |
| backend/ops_api/ops/utils/reporting_summary.py | Includes PLANNED_MOD in spending statuses. |
| backend/ops_api/ops/utils/portfolios.py | Treats PLANNED_MOD funding as planned funding in portfolio totals. |
| backend/ops_api/ops/utils/cans.py | Treats PLANNED_MOD funding as planned funding in CAN totals. |
| backend/ops_api/ops/utils/budget_line_items_helpers.py | Adds PLANNED_MOD to status name conversion helper. |
| backend/ops_api/ops/services/notification_constants.py | Introduces award notification title constants and broadens module docstring. |
| backend/ops_api/ops/services/budget_line_items.py | Includes PLANNED_MOD in BLI filter ordering and planned totals. |
| backend/ops_api/ops/schemas/procurement_tracker_steps.py | Declares AWARD vendor/contract/award fields + adds obligated_date to patch schema. |
| backend/models/budget_line_items.py | Adds PLANNED_MOD to BudgetLineItemStatus. |
| backend/models/agreement_history.py | Makes procurement-step history generation step-type aware for AWARD vs PRE_AWARD. |
| backend/alembic/versions/2026_07_03_1200-a8b9c1d2e3f4_add_planned_mod_bli_status.py | Adds PLANNED_MOD to the DB enum via raw SQL migration. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…leTag, remove duplicate test
weimiao67
left a comment
There was a problem hiding this comment.
Automated review — 8 inline findings. Several relate to sites that consume BudgetLineItemStatus but weren't updated for PLANNED_MOD; because those files aren't in this diff, the comments are anchored to the closest related line here and name the exact file:line to fix in the body.
…current same-CLIN assignments
|
🎉 This PR is included in version 1.424.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
What changed
Lays the groundwork for the OPS-2280 award approval reviewer flow (PR 1 of 3).
PLANNED_MODBLI status: adds enum value + alembic migration, groups it with PLANNED in all spending/funding aggregations (reporting, CANs, portfolios, BLI service) using a singleIN (...)queryutils.js,TableTag,StatusTagList, andBLI_STATUSIssue
#2280
How to test
Unit tests only for this PR (no new UI):
cd backend/ops_api pipenv run pytest tests/ops/schemas/test_procurement_tracker_steps_schema.py pipenv run pytest tests/ops/agreement/test_award_history.py pipenv run pytest tests/ops/test_planned_mod_status.py pipenv run pytest tests/ops/funding_summary/test_portfolio_funding_summary.py::test_get_total_funding_all_values tests/ops/funding_summary/test_portfolio_funding_summary.py::test_get_total_funding_zero_values tests/ops/funding_summary/test_portfolio_funding_summary.py::test_get_total_funding_percentageA11y impact
Storybook
Screenshots
N/A
Definition of Done Checklist
Links