Test Cases: Dues Invoicing

⚠️ SUPERSEDED — read the Dues index first. Real endpoints: per-member dues = POST /api/billing/admin/members/:memberId/dues (preview GET .../dues/calculate); bulk dues = POST /api/billing/internal/dues/run. The /admin/dues/generate-bulk endpoint cited below never existed, and POST /dues/runs + GET /dues/summary are still 501 stubs (don't test them). There are no Founding / Corporate membership types and no exemption config — seeded types are only Regular ₱15k / Associate ₱10k / Student ₱5k, and the amount charged is the global TenantDuesSettings.annualAmountCents. Run bulk dues from the "Create dues run" action at /admin/reports/dues-summary (ADMIN only). Treat the steps below as outdated; follow the index.

Module: Dues Management - Invoicing

Backend Endpoints:

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

Prerequisites

Test Data

MemberTypeHas 2024 Dues InvoiceExpected Action
Maria CruzRegularNoCan create
Miguel FernandezAssociateNoCan create
Admin UserFoundingN/ACannot create (exempt)
Antonio Dela CruzRegularYes (Pending)Cannot duplicate

Test Cases

TC-DUES-031: Create Dues Invoice for Single Member

StepActionExpected Result
1Login as Ana Reyes (FINANCE_MANAGER).Dashboard displayed.
2Navigate to member: Maria Cruz.Member details displayed.
3Click "Generate Dues Invoice" or similar.Invoice creation preview displayed.
4Verify calculated amount.PHP 15,000 (Regular Member dues).
5Verify dues period.Year 2024.
6Confirm invoice creation.API POST /api/billing/admin/members/:id/dues called.
7Verify success message."Dues invoice created" displayed.
8Verify invoice created.RCME-DUES-XXXX created with PENDING status.
9Verify invoice details.Line item: "Annual Membership Dues 2024 - PHP 15,000".

TC-DUES-032: Create Dues Invoice - Pro-Rated Amount

StepActionExpected Result
1Enable pro-rata in settings.Setting saved.
2Navigate to Miguel Fernandez (joined July).Member displayed.
3Generate dues invoice.Preview displayed.
4Verify pro-rata calculation.PHP 5,000 (6 months of PHP 10,000).
5Confirm creation.Invoice created with pro-rated amount.

TC-DUES-033: Cannot Create Dues Invoice - Exempt Member

StepActionExpected Result
1Navigate to Admin User (Founding Member).Member displayed.
2Look for "Generate Dues Invoice" option.Option not visible or disabled.
3Verify message."Member is exempt from dues" or similar.
4Attempt via direct API.Status 400 Bad Request - "Member is exempt".

TC-DUES-034: Cannot Create Duplicate Dues Invoice

StepActionExpected Result
1Navigate to member with existing 2024 dues invoice.Member displayed.
2Attempt to generate dues invoice for 2024.Warning displayed.
3Verify message."Dues invoice for 2024 already exists".
4Verify existing invoice shown.Link to existing invoice RCME-DUES-XXXX.

TC-DUES-035: Bulk Generate Dues Invoices

StepActionExpected Result
1Navigate to Dues Summary page.Dashboard displayed.
2Click "Generate Bulk Invoices" or similar.Bulk generation form displayed.
3Select year: 2024.Year selected.
4Select membership types: All non-exempt.Types selected.
5Preview bulk generation.Shows: X invoices to be created, total amount.
6Confirm bulk generation.API POST /api/billing/admin/dues/generate-bulk called.
7Verify progress.Progress indicator shown (for large batches).
8Verify completion."X invoices created successfully" message.
9Verify invoices.All applicable members have dues invoices.

TC-DUES-036: Bulk Generate - Skip Existing

StepActionExpected Result
1Some members already have 2024 dues invoices.-
2Run bulk generation for 2024.Processing starts.
3Verify existing invoices skipped.Only new invoices created for members without.
4Verify summary."X created, Y skipped (already exists)".

TC-DUES-037: Bulk Generate - Skip Exempt

StepActionExpected Result
1Run bulk generation.Processing starts.
2Verify exempt members skipped.Founding Members not invoiced.
3Verify summary."Z skipped (exempt)".

TC-DUES-038: Bulk Generate - Filter by Membership Type

StepActionExpected Result
1Open bulk generation.Form displayed.
2Select only "Regular Member" type.Type selected.
3Generate invoices.Only Regular Members invoiced.
4Verify.Associate, Student, Corporate members not invoiced.

TC-DUES-039: Auto-Generate Dues on Approval

StepActionExpected Result
1Configure setting: Auto-generate dues on member approval.Setting enabled.
2Approve a pending member application.Member approved.
3Verify dues invoice auto-created.Invoice created automatically.
4Verify pro-rata if applicable.Amount calculated based on approval date.

TC-DUES-040: Send Dues Invoice via Email

StepActionExpected Result
1Create dues invoice for member.Invoice created.
2Click "Send Invoice" from dues summary.Email sent.
3Verify member receives email.Email with dues invoice details received.
4Verify email content.Amount, due date, payment instructions.

TC-DUES-041: Bulk Send Dues Invoices

StepActionExpected Result
1Select multiple members with pending dues.Members selected.
2Click "Send Invoices".Bulk send initiated.
3Verify.All selected members receive invoice emails.

TC-DUES-042: Dues Invoice Line Item Description

StepActionExpected Result
1Create dues invoice for 2024.Invoice created.
2View invoice line items.Line item displayed.
3Verify description."Annual Membership Dues 2024" or similar.
4Verify amount.Correct dues amount.

TC-DUES-043: Create Dues Invoice - Pending Member

StepActionExpected Result
1Navigate to Miguel Fernandez (PENDING_APPROVAL status).Member displayed.
2Attempt to generate dues invoice.May be blocked or allowed.
3Verify business rule."Cannot invoice pending member" or allowed with warning.

TC-DUES-044: Dues Invoice with Custom Notes

StepActionExpected Result
1Generate dues invoice.Invoice form displayed.
2Add notes: "Early bird discount if paid before Jan 15".Notes entered.
3Create invoice.Invoice created with notes.
4Verify notes on invoice.Notes appear on member view.

TC-DUES-045: Void Dues Invoice and Recreate

StepActionExpected Result
1Void an existing dues invoice.Invoice voided.
2Attempt to create new dues invoice for same period.Should be allowed (since previous voided).
3Create new invoice.New invoice created.
4Verify.Member has new active dues invoice.

API Test Cases

TC-DUES-API-008: POST /api/billing/admin/members/:memberId/dues

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

{

"year": 2024,

"notes": "Annual membership dues",

"sendEmail": true

}

Expected Response: 201 Created

{

"invoice": {

"id": "RCME-DUES-XXXX",

"invoiceNumber": "RCME-DUES-XXXX",

"memberId": "MEM-2024-0004",

"type": "DUES",

"year": 2024,

"amount": 15000,

"status": "PENDING",

"dueDate": "2024-01-31",

"lines": [

{

"description": "Annual Membership Dues 2024",

"amount": 15000

}

]

},

"emailSent": true

}

TC-DUES-API-009: POST /api/billing/admin/members/:memberId/dues - Exempt

Request: POST /api/billing/admin/members/MEM-2024-0001/dues

Expected Response: 400 Bad Request

{

"error": "MEMBER_EXEMPT",

"message": "Member is exempt from dues (Founding Member)"

}

TC-DUES-API-010: POST /api/billing/admin/members/:memberId/dues - Duplicate

Request: POST /api/billing/admin/members/MEM-2024-0006/dues (already has 2024 invoice)

Expected Response: 400 Bad Request

{

"error": "DUPLICATE_INVOICE",

"message": "Dues invoice for 2024 already exists",

"existingInvoiceId": "RCME-DUES-0002"

}

TC-DUES-API-011: POST /api/billing/admin/dues/generate-bulk

Request:

{

"year": 2024,

"membershipTypes": ["TYPE_002", "TYPE_003", "TYPE_004", "TYPE_005"],

"sendEmails": false

}

Expected Response: 200 OK

{

"summary": {

"created": 45,

"skipped": {

"existing": 10,

"exempt": 5,

"pending": 3

},

"total": 63

},

"invoices": [

{ "invoiceId": "RCME-DUES-XXXX", "memberId": "...", "amount": 15000 }

]

}

TC-DUES-API-012: POST /api/billing/admin/dues/generate-bulk - Preview

Request:

{

"year": 2024,

"membershipTypes": ["TYPE_002"],

"preview": true

}

Expected Response: 200 OK

{

"preview": true,

"willCreate": 45,

"willSkip": {

"existing": 10,

"exempt": 0

},

"totalAmount": 675000,

"members": [

{ "id": "MEM-...", "name": "...", "amount": 15000 }

]

}