Test Cases: Dues Calculation

⚠️ SUPERSEDED — read the Dues index first. Per-member dues preview is real (GET /api/billing/admin/members/:memberId/dues/calculate), but this page assumes Founding / Corporate members and INV-2024-000X invoice numbers that don't exist (seeded: Regular ₱15k / Associate ₱10k / Student ₱5k; invoices RCME-DUES-000X). Bulk dues generation is the "Create dues run" form at /admin/reports/dues-summary (API POST /api/billing/internal/dues/run) — not a per-type wizard, and not /admin/dues/generate-bulk (which never existed). The amount used is the global TenantDuesSettings.annualAmountCents. Follow the index.

Module: Dues Management - Calculation

Backend Endpoints:

Frontend Page: frontend/pwa-app/src/pages/AdminDuesSummaryPage.tsx

Prerequisites

Test Data

MemberTypeJoin DateExpected Annual Dues
Maria CruzRegular MemberJan 2023PHP 15,000
Miguel FernandezAssociate MemberJul 2024PHP 10,000 (or pro-rata)
Admin UserFounding MemberJan 2020PHP 0 (Exempt)
New MemberStudent MemberOct 2024PHP 5,000 (or pro-rata)

Test Cases

TC-DUES-016: Calculate Full Year Dues - Regular Member

StepActionExpected Result
1Login as FINANCE_MANAGER.Dashboard displayed.
2Navigate to member: Maria Cruz.Member details displayed.
3Click "Calculate Dues" or access dues preview.Calculation preview displayed.
4Verify membership type.Regular Member identified.
5Verify dues period.Annual (full year).
6Verify calculated amount.PHP 15,000 displayed.
7Verify no pro-rata applied.Full amount (joined before period start).

TC-DUES-017: Calculate Pro-Rated Dues - Mid-Year Join

StepActionExpected Result
1Ensure pro-rata is enabled.Setting is on.
2Create/use member who joined July 2024.Member: Miguel Fernandez.
3Calculate dues for 2024.Calculation preview displayed.
4Verify pro-rata calculation.6 months remaining: PHP 10,000 × (6/12) = PHP 5,000.
5Verify calculation breakdown.Shows: Full amount, months remaining, pro-rated amount.

TC-DUES-018: Calculate Dues - Exempt Member

StepActionExpected Result
1Navigate to Admin User (Founding Member).Member displayed.
2Attempt dues calculation.Calculation shown.
3Verify exemption."Exempt" status displayed.
4Verify amount.PHP 0 or "No dues applicable".
5Verify no invoice option.Cannot create dues invoice for exempt member.

TC-DUES-019: Calculate Dues - Student Member

StepActionExpected Result
1Navigate to a Student Member.Member displayed.
2Calculate dues.Calculation displayed.
3Verify amount.PHP 5,000 (student rate).

TC-DUES-020: Calculate Dues - Corporate Member

StepActionExpected Result
1Navigate to a Corporate Member.Member displayed.
2Calculate dues.Calculation displayed.
3Verify amount.PHP 25,000 (corporate rate).

TC-DUES-021: Calculate Pro-Rata - October Join (3 Months)

StepActionExpected Result
1Use member who joined October.Member selected.
2Calculate dues for current year.Calculation displayed.
3Verify pro-rata.3 months: Amount × (3/12).
4For Regular Member.PHP 15,000 × (3/12) = PHP 3,750.

TC-DUES-022: Calculate Pro-Rata Disabled

StepActionExpected Result
1Disable pro-rata in settings.Setting saved.
2Calculate dues for mid-year joiner.Calculation displayed.
3Verify full amount charged.Full PHP 15,000 (no pro-rata).

TC-DUES-023: View Dues History for Member

StepActionExpected Result
1Navigate to Maria Cruz.Member displayed.
2Click "Dues History" tab or link.Dues history displayed.
3Verify past dues records.2023: PHP 15,000 (Paid), 2024: PHP 15,000 (Pending).
4Verify payment status.Each year shows paid/pending/overdue status.

TC-DUES-024: Calculate Dues After Membership Type Change

StepActionExpected Result
1Member was Student, upgraded to Regular mid-year.-
2Calculate dues.-
3Verify calculation logic.Should use new membership type rate (or pro-rata adjustment based on business rules).

TC-DUES-025: Dues Summary Dashboard

StepActionExpected Result
1Navigate to Admin > Dues Summary.Dashboard displayed.
2Verify summary cards.Total Expected, Total Collected, Outstanding.
3Verify member breakdown.Paid: X members, Pending: Y members, Overdue: Z members.
4Verify amounts.Total outstanding amount displayed.

TC-DUES-026: Filter Dues Summary by Status

StepActionExpected Result
1Access Dues Summary.Dashboard displayed.
2Filter by "Unpaid".Only members with unpaid dues shown.
3Filter by "Paid".Only members with paid dues shown.
4Filter by "Overdue".Only members with overdue dues shown.

TC-DUES-027: Filter Dues Summary by Membership Type

StepActionExpected Result
1Filter by "Regular Member".Only Regular Members shown.
2Verify totals update.Summary reflects filtered data only.

TC-DUES-028: Export Dues Report

StepActionExpected Result
1Access Dues Summary.Dashboard displayed.
2Click "Export".Export options shown.
3Select CSV format.CSV downloads.
4Verify content.Member, Type, Amount Due, Status, Paid Date.

TC-DUES-029: Calculate Dues - Suspended Member

StepActionExpected Result
1Navigate to Antonio Dela Cruz (SUSPENDED).Member displayed.
2Calculate/view dues.Dues calculated normally or special handling.
3Verify business rule.May show outstanding dues as reason for suspension.

TC-DUES-030: Calculate Dues - Deactivated Member

StepActionExpected Result
1Navigate to Isabella Ramos (DEACTIVATED).Member displayed.
2Calculate dues.Dues calculation may be blocked or show N/A.
3Verify no new dues applicable.Deactivated members don't accrue new dues.

API Test Cases

TC-DUES-API-004: GET /api/billing/admin/members/:memberId/dues/calculate

Request: GET /api/billing/admin/members/MEM-2024-0004/dues/calculate?year=2024

Expected Response: 200 OK

{

"member": {

"id": "MEM-2024-0004",

"name": "Maria Cruz",

"membershipType": "Regular Member"

},

"calculation": {

"year": 2024,

"baseAmount": 15000,

"proRataApplied": false,

"monthsApplicable": 12,

"finalAmount": 15000,

"isExempt": false

},

"existingInvoice": null

}

TC-DUES-API-005: GET /api/billing/admin/members/:memberId/dues/calculate (Pro-Rata)

Request: GET /api/billing/admin/members/MEM-2024-0005/dues/calculate?year=2024

Expected Response: 200 OK

{

"member": {

"id": "MEM-2024-0005",

"name": "Miguel Fernandez",

"membershipType": "Associate Member",

"joinDate": "2024-07-01"

},

"calculation": {

"year": 2024,

"baseAmount": 10000,

"proRataApplied": true,

"monthsApplicable": 6,

"finalAmount": 5000,

"breakdown": "PHP 10,000 × (6/12) = PHP 5,000"

}

}

TC-DUES-API-006: GET /api/billing/admin/members/:memberId/dues (History)

Request: GET /api/billing/admin/members/MEM-2024-0004/dues

Expected Response: 200 OK

{

"member": {

"id": "MEM-2024-0004",

"name": "Maria Cruz"

},

"duesHistory": [

{

"year": 2024,

"amount": 15000,

"status": "PENDING",

"invoiceId": "RCME-DUES-0002",

"dueDate": "2024-01-31"

},

{

"year": 2023,

"amount": 15000,

"status": "PAID",

"invoiceId": "INV-2023-0010",

"paidDate": "2023-01-15"

}

]

}

TC-DUES-API-007: GET Dues Calculate - Exempt Member

Request: GET /api/billing/admin/members/MEM-2024-0001/dues/calculate?year=2024

Expected Response: 200 OK

{

"member": {

"id": "MEM-2024-0001",

"name": "Admin User",

"membershipType": "Founding Member"

},

"calculation": {

"year": 2024,

"baseAmount": 0,

"finalAmount": 0,

"isExempt": true,

"exemptReason": "Founding Member - Lifetime Exemption"

}

}