Test Cases: Dues Calculation
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:
GET /api/billing/admin/members/:memberId/dues/calculateGET /api/billing/admin/members/:memberId/dues
Frontend Page: frontend/pwa-app/src/pages/AdminDuesSummaryPage.tsx
Prerequisites
- Dues settings configured (period, amounts, pro-rata).
- Members with various membership types exist.
- Test data from
00_MASTER_TEST_DATA.mdis seeded.
Test Data
| Member | Type | Join Date | Expected Annual Dues |
|---|---|---|---|
| Maria Cruz | Regular Member | Jan 2023 | PHP 15,000 |
| Miguel Fernandez | Associate Member | Jul 2024 | PHP 10,000 (or pro-rata) |
| Admin User | Founding Member | Jan 2020 | PHP 0 (Exempt) |
| New Member | Student Member | Oct 2024 | PHP 5,000 (or pro-rata) |
Test Cases
TC-DUES-016: Calculate Full Year Dues - Regular Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as FINANCE_MANAGER. | Dashboard displayed. |
| 2 | Navigate to member: Maria Cruz. | Member details displayed. |
| 3 | Click "Calculate Dues" or access dues preview. | Calculation preview displayed. |
| 4 | Verify membership type. | Regular Member identified. |
| 5 | Verify dues period. | Annual (full year). |
| 6 | Verify calculated amount. | PHP 15,000 displayed. |
| 7 | Verify no pro-rata applied. | Full amount (joined before period start). |
TC-DUES-017: Calculate Pro-Rated Dues - Mid-Year Join
| Step | Action | Expected Result |
|---|---|---|
| 1 | Ensure pro-rata is enabled. | Setting is on. |
| 2 | Create/use member who joined July 2024. | Member: Miguel Fernandez. |
| 3 | Calculate dues for 2024. | Calculation preview displayed. |
| 4 | Verify pro-rata calculation. | 6 months remaining: PHP 10,000 × (6/12) = PHP 5,000. |
| 5 | Verify calculation breakdown. | Shows: Full amount, months remaining, pro-rated amount. |
TC-DUES-018: Calculate Dues - Exempt Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to Admin User (Founding Member). | Member displayed. |
| 2 | Attempt dues calculation. | Calculation shown. |
| 3 | Verify exemption. | "Exempt" status displayed. |
| 4 | Verify amount. | PHP 0 or "No dues applicable". |
| 5 | Verify no invoice option. | Cannot create dues invoice for exempt member. |
TC-DUES-019: Calculate Dues - Student Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to a Student Member. | Member displayed. |
| 2 | Calculate dues. | Calculation displayed. |
| 3 | Verify amount. | PHP 5,000 (student rate). |
TC-DUES-020: Calculate Dues - Corporate Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to a Corporate Member. | Member displayed. |
| 2 | Calculate dues. | Calculation displayed. |
| 3 | Verify amount. | PHP 25,000 (corporate rate). |
TC-DUES-021: Calculate Pro-Rata - October Join (3 Months)
| Step | Action | Expected Result |
|---|---|---|
| 1 | Use member who joined October. | Member selected. |
| 2 | Calculate dues for current year. | Calculation displayed. |
| 3 | Verify pro-rata. | 3 months: Amount × (3/12). |
| 4 | For Regular Member. | PHP 15,000 × (3/12) = PHP 3,750. |
TC-DUES-022: Calculate Pro-Rata Disabled
| Step | Action | Expected Result |
|---|---|---|
| 1 | Disable pro-rata in settings. | Setting saved. |
| 2 | Calculate dues for mid-year joiner. | Calculation displayed. |
| 3 | Verify full amount charged. | Full PHP 15,000 (no pro-rata). |
TC-DUES-023: View Dues History for Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to Maria Cruz. | Member displayed. |
| 2 | Click "Dues History" tab or link. | Dues history displayed. |
| 3 | Verify past dues records. | 2023: PHP 15,000 (Paid), 2024: PHP 15,000 (Pending). |
| 4 | Verify payment status. | Each year shows paid/pending/overdue status. |
TC-DUES-024: Calculate Dues After Membership Type Change
| Step | Action | Expected Result |
|---|---|---|
| 1 | Member was Student, upgraded to Regular mid-year. | - |
| 2 | Calculate dues. | - |
| 3 | Verify calculation logic. | Should use new membership type rate (or pro-rata adjustment based on business rules). |
TC-DUES-025: Dues Summary Dashboard
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to Admin > Dues Summary. | Dashboard displayed. |
| 2 | Verify summary cards. | Total Expected, Total Collected, Outstanding. |
| 3 | Verify member breakdown. | Paid: X members, Pending: Y members, Overdue: Z members. |
| 4 | Verify amounts. | Total outstanding amount displayed. |
TC-DUES-026: Filter Dues Summary by Status
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Dues Summary. | Dashboard displayed. |
| 2 | Filter by "Unpaid". | Only members with unpaid dues shown. |
| 3 | Filter by "Paid". | Only members with paid dues shown. |
| 4 | Filter by "Overdue". | Only members with overdue dues shown. |
TC-DUES-027: Filter Dues Summary by Membership Type
| Step | Action | Expected Result |
|---|---|---|
| 1 | Filter by "Regular Member". | Only Regular Members shown. |
| 2 | Verify totals update. | Summary reflects filtered data only. |
TC-DUES-028: Export Dues Report
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Dues Summary. | Dashboard displayed. |
| 2 | Click "Export". | Export options shown. |
| 3 | Select CSV format. | CSV downloads. |
| 4 | Verify content. | Member, Type, Amount Due, Status, Paid Date. |
TC-DUES-029: Calculate Dues - Suspended Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to Antonio Dela Cruz (SUSPENDED). | Member displayed. |
| 2 | Calculate/view dues. | Dues calculated normally or special handling. |
| 3 | Verify business rule. | May show outstanding dues as reason for suspension. |
TC-DUES-030: Calculate Dues - Deactivated Member
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to Isabella Ramos (DEACTIVATED). | Member displayed. |
| 2 | Calculate dues. | Dues calculation may be blocked or show N/A. |
| 3 | Verify 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"
}
}