Test Plan: Reporting & Analytics

♻️ Reconciled against current code — 2026-07-01. Fixed a broken "Test Deliverables" link that pointed at a non-existent TC_RPT_001_REPORTS.md — it now links the real pages on disk (TC-RPT-001, TC-RPT-002, TC-RPT-003, plus the new TC-RPT-004). Export format is SCOPED, not uniform CSV-only: the old "everything is CSV, no XLSX anywhere" note is partially wrong — real .xlsx (?format=xlsx, via streamXlsxToResponse / exceljs) now exists on exactly 4 exports: invoices (GET /api/billing/admin/invoices/export), payments (GET /api/billing/admin/payments/export), treasury (GET /api/treasury/export), and event registrations (GET /api/admin/events/:eventId/registrations/export). Everything else stays as before: the attendance report/audit exports are CSV-only (no xlsx), the members report is JSON-only with no export at all (GET /api/reporting/reports/members — the old TC-RPT-002/010 "Export CSV" steps below describe a button that does not exist in code), and the donations report is also JSON-only. Do not claim xlsx for reporting/attendance, and do not claim CSV/xlsx for the members or donations reports. See TC-RPT-004 for full export-integrity coverage.
🆕 New on stage — 2026-06-19 → 2026-07-01.
Tenant-local timezone dates (#450) apply ONLY to the invoice export. billingHandlers.ts' exportInvoicesCSVHandler has a local toTenantLocalDate helper that renders issuedDate/dueDate/paidDate using orgProfile.timezone (fallback Asia/Manila). Reporting and attendance exports emit raw UTC (.toISOString()) for every date column, including CSV. There is no shared formatInTenantTimezone util reused across modules — do not assume attendance/members/donations dates are tenant-local; assert them as UTC.

1. Introduction

This document outlines the test strategy for the Reporting & Analytics module, which provides dashboards, reports, and data exports across all system areas.

2. Scope

  1. Executive Dashboard: High-level organization metrics.
  2. Member Reports: Membership statistics and trends — GET /api/reporting/reports/members, JSON-only, no export.
  3. Financial Reports: Revenue, collections, outstanding — GET /api/billing/admin/finance/summary.
  4. Event Attendance Reports: Registrations, check-ins, no-shows, reconciliation — CSV export only.
  5. Export Functionality: scoped — real .xlsx on invoices/payments/treasury/event-registrations; CSV-only on attendance/audit/guest exports; no export on members/donations reports.

3. Test Strategy

4. Environment

5. Roles & Permissions

RolePermissions
ADMINFull report access
FINANCE_MANAGERFinance reports (FINANCE:VIEW:*)
EVENT_MANAGEREvent reports (EVENTS:VIEW:registrations)
MEMBERLimited/no report access

6. Test Deliverables

TCTopicDetailed
TC-RPT-001Financial Reportsdetailed
TC-RPT-002Membership Reportsdetailed
TC-RPT-003Event Attendance Reportsdetailed
TC-RPT-004🆕 Export Integrity & Total Paritydetailed

7. Risk Areas