Test Cases: Dues Settings Configuration
/admin/settings/finance?tab=dues, page "Finance & Billing") = a single global Annual Dues Amount + Fiscal Year Start month + proration toggle + grace-period days. There is NO per-membership-type dues table here, NO "Dues Period: Annual/Semi-Annual/Quarterly" field, NO exemption config, and NO auto-generate setting. Per-type amounts live separately on Member Settings → Membership Types. Seeded types are only Regular ₱15k / Associate ₱10k / Student ₱5k (no Founding/Corporate). Treat the specific steps below as outdated; follow the index.
Module: Dues Management - Settings
Backend Endpoints:
GET /api/billing/admin/settings/duesPUT /api/billing/admin/settings/dues
Frontend Page: frontend/pwa-app/src/pages/AdminDuesSettingsPage.tsx
Prerequisites
- User logged in with ADMIN role.
- Membership types configured.
- Test data from
00_MASTER_TEST_DATA.mdis seeded.
Test Data - Membership Types & Dues
| Type | Name | Annual Dues |
|---|---|---|
| TYPE_001 | Founding Member | PHP 0 (Exempt) |
| TYPE_002 | Regular Member | PHP 15,000 |
| TYPE_003 | Associate Member | PHP 10,000 |
| TYPE_004 | Student Member | PHP 5,000 |
| TYPE_005 | Corporate Member | PHP 25,000 |
Test Cases
TC-DUES-001: View Current Dues Settings
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as Admin User (ADMIN). | Dashboard displayed. |
| 2 | Navigate to Admin > Finance > Dues Settings. | Dues settings page displayed. |
| 3 | Verify global settings visible. | Dues period, due date, grace period shown. |
| 4 | Verify membership type dues. | All types listed with their dues amounts. |
| 5 | Verify exemptions configured. | Founding Member shows as exempt. |
TC-DUES-002: Update Dues Period Settings
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Dues Settings page. | Settings displayed. |
| 2 | Locate "Dues Period" setting. | Current value: Annual (default). |
| 3 | Verify options available. | Annual, Semi-Annual, Quarterly. |
| 4 | Change to "Semi-Annual". | Selection changed. |
| 5 | Save changes. | API PUT /api/billing/admin/settings/dues called. |
| 6 | Verify success message. | "Settings updated" displayed. |
| 7 | Reload page. | Setting persists as "Semi-Annual". |
TC-DUES-003: Update Due Date Setting
| Step | Action | Expected Result |
|---|---|---|
| 1 | Access Dues Settings. | - |
| 2 | Locate "Due Date" setting. | - |
| 3 | Set due date: January 31st. | Date selected. |
| 4 | Save changes. | Settings saved. |
| 5 | Verify. | New invoices will have January 31 due date. |
TC-DUES-004: Configure Grace Period
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate "Grace Period" setting. | - |
| 2 | Set grace period: 30 days. | Value entered. |
| 3 | Save changes. | Settings saved. |
| 4 | Verify behavior. | Invoices marked OVERDUE 30 days after due date. |
TC-DUES-005: Update Membership Type Dues Amount
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate "Regular Member" dues. | Current: PHP 15,000. |
| 2 | Update amount to PHP 16,500. | New amount entered. |
| 3 | Save changes. | Settings saved. |
| 4 | Verify update. | Regular Member dues now PHP 16,500. |
| 5 | Verify existing invoices unchanged. | Already created invoices keep PHP 15,000. |
| 6 | Create new dues invoice. | New invoice uses PHP 16,500. |
TC-DUES-006: Configure Dues Exemption
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate Founding Member type. | Exempt checkbox checked. |
| 2 | Uncheck exemption (test). | Exemption removed. |
| 3 | Save changes. | Settings saved. |
| 4 | Verify calculation. | Founding Members now have dues calculated. |
| 5 | Re-check exemption. | Exemption restored. |
| 6 | Save. | Founding Members exempt again. |
TC-DUES-007: Add New Membership Type with Dues
| Step | Action | Expected Result |
|---|---|---|
| 1 | Click "Add Membership Type" (if in settings). | Form opens. |
| 2 | Enter name: "Lifetime Member". | Name entered. |
| 3 | Set dues: PHP 0 (exempt). | Exempt selected. |
| 4 | Save. | New type created with exemption. |
| 5 | Verify in list. | "Lifetime Member" appears with exempt status. |
TC-DUES-008: Configure Pro-Rata Setting
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate "Pro-Rata Dues" toggle. | Setting displayed. |
| 2 | Enable pro-rata calculation. | Toggle on. |
| 3 | Set pro-rata method: Monthly. | Method selected. |
| 4 | Save. | Settings saved. |
| 5 | Test calculation for mid-year join. | Member joining July pays 6/12 of annual dues. |
TC-DUES-009: Disable Pro-Rata
| Step | Action | Expected Result |
|---|---|---|
| 1 | Disable pro-rata toggle. | Toggle off. |
| 2 | Save. | Settings saved. |
| 3 | Test calculation for mid-year join. | Full annual dues charged regardless of join date. |
TC-DUES-010: Validation - Negative Dues Amount
| Step | Action | Expected Result |
|---|---|---|
| 1 | Edit a membership type dues. | - |
| 2 | Enter negative amount: -1000. | Amount entered. |
| 3 | Attempt to save. | Validation error: "Dues amount cannot be negative". |
TC-DUES-011: Validation - Invalid Grace Period
| Step | Action | Expected Result |
|---|---|---|
| 1 | Enter grace period: -5 days. | Value entered. |
| 2 | Attempt to save. | Validation error: "Grace period must be 0 or greater". |
TC-DUES-012: Permission - Finance Manager View
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as Ana Reyes (FINANCE_MANAGER). | Dashboard displayed. |
| 2 | Access Dues Settings. | Settings displayed (read-only or limited edit). |
| 3 | Verify view capability. | Can see all settings. |
| 4 | Verify edit restrictions. | May or may not be able to edit (role-dependent). |
TC-DUES-013: Permission - Member Cannot Access
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as Maria Cruz (MEMBER). | Member dashboard. |
| 2 | Attempt to access Dues Settings. | Access denied or menu not visible. |
| 3 | Attempt direct API call. | Status 403 Forbidden. |
TC-DUES-014: Configure Auto-Generate Dues Invoices
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate "Auto-Generate Invoices" setting. | Toggle displayed. |
| 2 | Enable auto-generation. | Toggle on. |
| 3 | Set generation date: December 1st. | Date selected. |
| 4 | Save. | Settings saved. |
| 5 | Verify. | System will auto-generate dues invoices on Dec 1. |
TC-DUES-015: Configure Dues Reminder Schedule
| Step | Action | Expected Result |
|---|---|---|
| 1 | Locate reminder settings. | Reminder config displayed. |
| 2 | Enable reminders. | Toggle on. |
| 3 | Set reminder schedule: 7 days before due, on due date, 7 days after. | Schedule configured. |
| 4 | Save. | Settings saved. |
| 5 | Verify. | Reminders will be sent per schedule. |
API Test Cases
TC-DUES-API-001: GET /api/billing/admin/settings/dues
Expected Response: 200 OK
{
"duesPeriod": "ANNUAL",
"dueDate": {
"month": 1,
"day": 31
},
"gracePeriodDays": 30,
"proRataEnabled": true,
"proRataMethod": "MONTHLY",
"autoGenerateInvoices": true,
"autoGenerateDate": {
"month": 12,
"day": 1
},
"membershipTypeDues": [
{
"typeId": "TYPE_001",
"name": "Founding Member",
"amount": 0,
"isExempt": true
},
{
"typeId": "TYPE_002",
"name": "Regular Member",
"amount": 15000,
"isExempt": false
}
],
"reminders": {
"enabled": true,
"schedule": [-7, 0, 7, 14]
}
}
TC-DUES-API-002: PUT /api/billing/admin/settings/dues
Request:
{
"duesPeriod": "SEMI_ANNUAL",
"gracePeriodDays": 15,
"membershipTypeDues": [
{ "typeId": "TYPE_002", "amount": 16500, "isExempt": false }
]
}
Expected Response: 200 OK
{
"success": true,
"message": "Dues settings updated",
"updatedAt": "timestamp"
}
TC-DUES-API-003: PUT /api/billing/admin/settings/dues - Invalid Amount
Request:
{
"membershipTypeDues": [
{ "typeId": "TYPE_002", "amount": -100, "isExempt": false }
]
}
Expected Response: 400 Bad Request
{
"error": "VALIDATION_ERROR",
"message": "Dues amount cannot be negative"
}