Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

1171 lines
39 KiB
JSON

[
{
"id": "F001",
"description": "Extend ContractWizardData with renewal mode, notice period, term months, and override toggle fields.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F002",
"description": "Initialize renewal fields in ContractWizard default state for new contracts.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F003",
"description": "Hydrate renewal fields when resuming draft contracts in the wizard.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F004",
"description": "Hydrate renewal fields when editing existing contracts in the wizard.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F005",
"description": "Render Renewal Settings card in ContractBasicsStep when end date is present.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F006",
"description": "Render Evergreen Review settings card in ContractBasicsStep when end date is absent.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F007",
"description": "Show renewal mode selector with values none/manual/auto in ContractBasicsStep.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F008",
"description": "Show notice period selector/input in ContractBasicsStep for renewal-enabled modes.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F009",
"description": "Show renewal term behavior input in ContractBasicsStep for auto-renew mode.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F010",
"description": "Hide auto-renew-specific term controls when renewal mode is not auto.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F011",
"description": "Validate renewal mode is required when an end date is set.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F012",
"description": "Validate notice period is a non-negative integer within configured bounds.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F013",
"description": "Validate renewal term months is positive when explicitly provided.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F014",
"description": "Show inline validation errors for invalid renewal settings before wizard progression.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F015",
"description": "Include renewal fields in contract summary preview in ContractBasicsStep.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F016",
"description": "Include renewal fields in review step payload preview before submit.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F017",
"description": "Persist renewal fields in ClientContractWizardSubmission payload builder.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F018",
"description": "Persist renewal fields when saving draft contracts from wizard.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration"
]
},
{
"id": "F019",
"description": "Add tenant default renewal mode field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F020",
"description": "Add tenant default notice period days field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F021",
"description": "Add tenant default due-date action policy field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F022",
"description": "Add tenant default renewal ticket board field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F023",
"description": "Add tenant default renewal ticket status field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F024",
"description": "Add tenant default renewal ticket priority field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F025",
"description": "Add tenant default renewal ticket assignee field to default billing settings model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F026",
"description": "Expose renewal defaults in getDefaultBillingSettings action response.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F027",
"description": "Persist renewal defaults in updateDefaultBillingSettings action writes.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F028",
"description": "Add use-tenant-defaults toggle to contract renewal settings payload.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F029",
"description": "Apply tenant defaults to contract assignment when override toggle is enabled.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F030",
"description": "Apply explicit contract-level override values when override toggle is disabled.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F031",
"description": "Enforce deterministic fallback precedence when override fields are partially missing.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F032",
"description": "Expose effective renewal settings in contract assignment read APIs.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F033",
"description": "Compute decision_due_date for fixed-term assignments using end_date minus notice_period_days.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F034",
"description": "Compute next evergreen review anchor date from active contract anniversary rules.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F035",
"description": "Compute evergreen decision_due_date using anchor date minus notice_period_days.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F036",
"description": "Normalize decision_due_date calculations to date-only semantics used by client_contracts.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F037",
"description": "Recompute decision_due_date when contract end_date changes.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F038",
"description": "Recompute decision_due_date when notice period changes.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F039",
"description": "Recompute decision_due_date when renewal mode changes between none/manual/auto.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F040",
"description": "Recompute decision_due_date when evergreen anchor basis changes.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F041",
"description": "Skip decision_due_date generation for terminated/expired contract assignments.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F042",
"description": "Skip decision_due_date generation when renewal mode is none and no evergreen review is configured.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F043",
"description": "Create one renewal cycle key per contract assignment cycle for deduplication.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F044",
"description": "Prevent duplicate active renewal work items for same tenant/client_contract_id/cycle key.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F045",
"description": "Persist cycle_start and cycle_end boundaries for each generated renewal cycle.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F046",
"description": "Expose days_until_due as derived queue field for UI sorting and badges.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F047",
"description": "Clamp past-due decision calculations into queue visibility without negative date corruption.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F048",
"description": "Add renewals tab value and metadata to billing tab configuration.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F049",
"description": "Add Renewals Tabs.Content route to BillingDashboard tab host.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F050",
"description": "Add Renewals queue page component under billing dashboard components.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F051",
"description": "Load renewal queue rows from server action on Renewals page mount.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F052",
"description": "Render default 90-day horizon rows in Renewals queue.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F053",
"description": "Render bucket quick filters for 0-30, 31-60, and 61-90 days.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F054",
"description": "Render owner filter for assigned user in Renewals queue.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F055",
"description": "Render status filter for pending/renewing/non_renewing/snoozed/completed.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F056",
"description": "Render renewal mode filter for none/manual/auto.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F057",
"description": "Render contract type filter for fixed-term versus evergreen entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F058",
"description": "Sort queue by decision_due_date ascending by default.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F059",
"description": "Show days-remaining visual state for due-soon and overdue entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F060",
"description": "Add Upcoming Renewals summary widget to ClientContractsTab.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F061",
"description": "Show 90-day bucket counts in ClientContractsTab upcoming renewals widget.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F062",
"description": "Navigate from upcoming renewals widget to Renewals tab preserving filter context.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F063",
"description": "Refresh widget counts after queue action mutations complete.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points"
]
},
{
"id": "F064",
"description": "Define queue status enum values pending/renewing/non_renewing/snoozed/completed in renewal work-item model.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F065",
"description": "Implement mark-renewing action that transitions pending entries to renewing.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F066",
"description": "Implement mark-non-renewing action that transitions pending entries to non_renewing.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F067",
"description": "Implement create-renewal-draft action for eligible queue entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F068",
"description": "Implement snooze action that sets status to snoozed with snoozed_until date.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F069",
"description": "Implement assign-owner action to set assigned_to on renewal work item.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F070",
"description": "Implement unsnooze transition back to pending when snooze period elapses.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F071",
"description": "Persist action actor user id on each queue mutation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F072",
"description": "Persist action timestamp on each queue mutation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F073",
"description": "Persist action reason/note text on queue mutation when provided.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F074",
"description": "Prevent invalid transition from completed back to pending without explicit reopen action.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F075",
"description": "Prevent invalid transition from non_renewing to renewing without explicit override action.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F076",
"description": "Enforce snooze date must be in the future on action validation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F077",
"description": "Expose queue row action availability based on current status.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F078",
"description": "Show optimistic UI state while queue actions are in-flight.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F079",
"description": "Refresh affected queue row state after successful action response.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F080",
"description": "Include linked draft contract id in queue row once renewal draft is created.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F081",
"description": "Include linked ticket id in queue row once due-date ticket is created.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F082",
"description": "Mark work item completed when renewed contract activation is confirmed.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F083",
"description": "Mark work item completed when non-renewal finalization is confirmed.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow"
]
},
{
"id": "F084",
"description": "Create scheduled renewal processor that scans due decision windows for active contracts.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F085",
"description": "Upsert renewal work items during scheduled processing for newly eligible cycles.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F086",
"description": "Respect tenant default due-date action policy during scheduled processing.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F087",
"description": "Respect contract-level override due-date action policy during scheduled processing.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F088",
"description": "Create internal ticket at decision due date when effective policy is create_ticket.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F089",
"description": "Call workflow runtime tickets.create action for renewal ticket creation path.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F090",
"description": "Populate renewal ticket title with client and contract context.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F091",
"description": "Populate renewal ticket description with due date and renewal settings context.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F092",
"description": "Populate renewal ticket routing fields from effective renewal ticket defaults.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F093",
"description": "Persist created ticket id on renewal work item after successful ticket creation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F094",
"description": "Use idempotency key per tenant/client_contract_id/cycle key for ticket creation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F095",
"description": "Skip duplicate ticket creation when idempotent renewal cycle already has linked ticket.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F096",
"description": "Record automation_error on work item when ticket creation fails.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F097",
"description": "Allow manual retry action to re-attempt ticket creation for failed work items.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F098",
"description": "Ensure due-date automation supports queue-only policy without creating tickets.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F099",
"description": "Publish/emit renewal-upcoming domain event payloads compatible with queue creation semantics.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F100",
"description": "Generate renewal queue entries for evergreen contracts based on annual review cycle.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F101",
"description": "Display evergreen contract type badge in queue rows.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F102",
"description": "Show evergreen cycle anchor date in queue row details.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F103",
"description": "Support mark-renewing action for evergreen queue entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F104",
"description": "Support mark-non-renewing action for evergreen queue entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F105",
"description": "Support create-renewal-draft action for evergreen queue entries.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F106",
"description": "Roll evergreen cycle forward to next annual window after completion.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F107",
"description": "Prevent duplicate evergreen cycle entries for the same annual period.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F108",
"description": "Respect evergreen-specific notice period overrides on decision date computation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F109",
"description": "Include evergreen entries in upcoming renewals widget counts.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F110",
"description": "Extend contract expiration report action to expose decision_due_date alongside end_date where available.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F111",
"description": "Include renewal mode in expiration report row payload.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F112",
"description": "Include queue status in expiration report row payload when work item exists.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F113",
"description": "Keep existing expiration report rows for fixed-term contracts without renewal config.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F114",
"description": "Keep existing expiration report sort compatibility for existing report consumers.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F115",
"description": "Expose at-risk count based on decision_due_date windows for dashboard usage.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F116",
"description": "Align contract reports tab expiration copy to reference renewal decisions as well as expiration.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F117",
"description": "Ensure legacy auto_renew display derives from new renewal mode values.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR8 — Reporting and Existing Surface Alignment"
]
},
{
"id": "F118",
"description": "Register renewal scheduled processing job in pg-boss on-prem scheduling path.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F119",
"description": "Register renewal scheduled processing workflow in Temporal hosted/EE scheduling path.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F120",
"description": "Use shared renewal processing core logic callable from both pg-boss and Temporal adapters.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F121",
"description": "Keep effective behavior parity for queue creation between pg-boss and Temporal runners.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F122",
"description": "Keep effective behavior parity for ticket creation idempotency between pg-boss and Temporal runners.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F123",
"description": "Honor existing JobRunnerFactory runtime selection without forcing edition-specific code forks in business logic.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F124",
"description": "Fallback gracefully to supported runner path when temporal bootstrap is unavailable.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F125",
"description": "Preserve tenant-scoped execution semantics in both runtime paths.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR9 — Runtime Compatibility (On-prem PG Boss vs Hosted/EE Temporal)"
]
},
{
"id": "F126",
"description": "Enforce billing read permission on renewals queue list endpoints.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F127",
"description": "Enforce billing update permission on queue mutation endpoints.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F128",
"description": "Enforce billing settings update permission on renewal defaults update endpoints.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F129",
"description": "Apply tenant filter to all renewal work-item reads by default.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F130",
"description": "Apply tenant filter to all renewal work-item writes by default.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F131",
"description": "Audit renewal state transitions with actor id and transition metadata.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F132",
"description": "Audit ticket automation linkage with actor type system and timestamp metadata.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F133",
"description": "Audit renewal draft creation linkage with actor id and timestamp metadata.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F134",
"description": "Reject cross-tenant identifiers during queue mutation validation.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F135",
"description": "Sanitize user-provided action notes before persistence and render.",
"implemented": true,
"prdRefs": [
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F136",
"description": "Add migration adding renewals queue status/audit columns on client_contracts (status, snoozed_until, assigned_to, last_action, last_action_by, last_action_at, last_action_note).",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow",
"Requirements > Functional Requirements > FR10 — Permissions, Security, and Auditability"
]
},
{
"id": "F137",
"description": "Add migration adding renewal-cycle columns on client_contracts (decision_due_date, renewal_cycle_start, renewal_cycle_end, renewal_cycle_key).",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine",
"Requirements > Functional Requirements > FR7 — Evergreen Annual Review Flow"
]
},
{
"id": "F138",
"description": "Add migration adding renewal automation linkage/policy columns on client_contracts (created_ticket_id, automation_error, renewal_due_date_action_policy, renewal_ticket_board_id, renewal_ticket_status_id, renewal_ticket_priority, renewal_ticket_assignee_id, created_draft_contract_id).",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F139",
"description": "Add migration adding renewal configuration columns on client_contracts (renewal_mode, notice_period_days, renewal_term_months, use_tenant_renewal_defaults).",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR1 — Contract Setup and Renewal Configuration",
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides"
]
},
{
"id": "F140",
"description": "Add migration adding renewal default/policy columns on default_billing_settings (default_renewal_mode, default_notice_period_days, renewal_due_date_action_policy, renewal_ticket_board_id, renewal_ticket_status_id, renewal_ticket_priority, renewal_ticket_assignee_id).",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR2 — Tenant Defaults and Contract-Level Overrides",
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F141",
"description": "Add migration/backfill for existing active client_contract rows to initialize deterministic renewal state/defaults and compute first decision_due_date/cycle fields.",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F142",
"description": "Add indexes and uniqueness constraints supporting queue filtering/sorting and cycle deduplication on client_contracts renewal fields.",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Non-functional Requirements",
"Requirements > Functional Requirements > FR3 — Renewal Decision Date Engine"
]
},
{
"id": "F143",
"description": "Add server-side renewal schema readiness guard that fails fast with actionable error when required renewal columns are missing.",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR4 — Renewals Queue and Dashboard Entry Points",
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
},
{
"id": "F144",
"description": "After migrations ship, remove required-column compatibility branches in renewal queue actions/jobs and run in strict migrated-schema mode.",
"implemented": true,
"prdRefs": [
"Rollout / Migration",
"Requirements > Functional Requirements > FR5 — Queue Actions and Renewal Workflow",
"Requirements > Functional Requirements > FR6 — Automation and Ticket Creation"
]
}
]