# Phase 15 — Reports, CMS, and communication

Phase 15 delivers role dashboards, tenant public websites, CMS publishing, tracked
downloads, internal communication, queued email, and auditable report exports.

## Delivered

- Student, lecturer/staff, administrator, and finance-aware dashboard metrics.
- Tenant public home, pages, news, events, SEO metadata, and download centre.
- Draft/published CMS workflow with escaped public rendering.
- Private file storage, MIME/size validation, SHA-256 hashes, public/authenticated/
  role access, IP hashing, and download counters/events.
- Institution, student, and staff announcements; mandatory academic, finance,
  admission, and security categories.
- Optional notification preferences, in-app read state, private messages, queued
  email jobs, and delivery status/error logs.
- Summary, enrollment, finance, academic-performance, and operations reports.
- Programme/status/date filters and CSV, SpreadsheetML Excel, PDF, and print exports.
- Append-only report-export audit records.

## Tables

`cms_pages`, `cms_posts`, `download_resources`, `download_events`, `announcements`,
`announcement_recipients`, `private_messages`, `notification_preferences`,
`notification_deliveries`, and `report_exports`.

## PDF QA

`output/pdf/sample-institution-report.pdf` was rendered at 150 DPI and visually
inspected. It is one A4 portrait page with clear hierarchy, aligned columns, readable
footer, and no clipping or overlap.

## Local verification

- Phase suite: 5 tests, 21 assertions.
- Full suite: 115 tests, 439 assertions.
- Standalone seeding, Composer/npm audits, formatting, and production build passed.

```powershell
C:\xampp\php\php.exe artisan migrate
C:\xampp\php\php.exe artisan db:seed --class=ReportingCmsCommunicationSeeder
C:\xampp\php\php.exe artisan test --filter=ReportingCmsCommunicationTest
C:\xampp\php\php.exe artisan reports:sample
C:\xampp\php\php.exe artisan test
```

Phase 15 is complete. Phase 16 requires explicit approval.
