Objective
Implement basic billing with invoices and manual payment tracking, including
invoice lifecycle management via soft delete and administrative purge with strict
financial integrity safeguards, and paginated list navigation with filtering and
search.
MVP Metadata
- MVP Phase: Billing
- Module: billing
- Priority: Medium
- Type: Feature
- FR: FR-11, FR-12, FR-16
- Branch Target: features
Problem
Invoices can accumulate in pending or void states without associated payments,
particularly during testing or abandoned billing flows. Administrators need a
controlled mechanism to archive and purge these stale records.
However, financial data integrity is non-negotiable: any invoice with a registered
payment — even partial — must be permanently protected from deletion at the service
layer, regardless of role. Soft delete is limited to void or zero-payment invoices,
and hard delete is blocked the moment any payment record exists.
Acceptance Criteria
Soft Delete & Lifecycle
Hard Delete (Purge — Administrator Only)
Filtering, Search & Pagination
Evidence Expected
- Link related commits and PRs.
- Include screenshots for UI changes when applicable.
- Include test/build evidence when implementation touches app/runtime code.
Objective
Implement basic billing with invoices and manual payment tracking, including
invoice lifecycle management via soft delete and administrative purge with strict
financial integrity safeguards, and paginated list navigation with filtering and
search.
MVP Metadata
Problem
Invoices can accumulate in pending or void states without associated payments,
particularly during testing or abandoned billing flows. Administrators need a
controlled mechanism to archive and purge these stale records.
However, financial data integrity is non-negotiable: any invoice with a registered
payment — even partial — must be permanently protected from deletion at the service
layer, regardless of role. Soft delete is limited to void or zero-payment invoices,
and hard delete is blocked the moment any payment record exists.
Acceptance Criteria
Soft Delete & Lifecycle
deleted_at) to archive them. Active list only shows records wheredeleted_at IS NULL.manageroradministratorrole.Hard Delete (Purge — Administrator Only)
Filtering, Search & Pagination
status(pending, partial, paid, void).Evidence Expected