Data & Screen Reference
The developer-facing map of what the suite ships: 14 web controllers and 2 REST APIs with their routes, 19 tables grouped by area, the 12 menu items and their permission keys, the migration table, the demo seeder, and the cron job.
Web controllers & routes
| Controller | Area | Route(s) |
|---|---|---|
Compliance_dashboard | Overview | compliance/dashboard |
Discipline_entries | Disciplinary | hrs/compliance · legacy hrs/disciplinary |
Discipline_categories | Disciplinary | hrs/compliance_categories · legacy hrs/discipline_categories |
Compliance_settings | Disciplinary | compliance/settings |
Compliance_investigations | Investigations | compliance/investigations |
Compliance_corrective_actions | Corrective Actions | compliance/corrective_actions |
Compliance_disclosures | Disclosures | compliance/disclosures |
Compliance_reports | Speak-up & Grievances | compliance/reports |
Compliance_training | Training & Certifications | compliance/training |
Compliance_policies | Policies & Attestations | compliance/policies |
Compliance_calendar | Compliance Calendar | compliance/calendar |
Compliance_analytics | Reports & Analytics | compliance/analytics |
Compliance_audit | Audit Log | compliance/audit |
Compliance_config | Configuration | compliance/config |
Two REST API controllers sit alongside the web controllers:
Compliance_api— integration API,api/v1/disciplinary/*(scopeusers:read).Compliance_euapi— employee self-service API,v1/api/me/disciplinary/*(caller-scoped, 404 on mismatch).
Tables by area
The suite owns 19 tables. Module migrations create the ten newer areas' tables; the disciplinary tables predate the module and ship in the base install schema.
| Area | Tables |
|---|---|
| Overview | — (read-only; aggregates the other areas) |
| Disciplinary | discipline_entries, discipline_categories, discipline_entry_comments |
| Investigations | compliance_investigations |
| Corrective Actions | compliance_corrective_actions |
| Disclosures | compliance_disclosures |
| Speak-up & Grievances | compliance_reports |
| Training & Certifications | compliance_training_courses, compliance_training_assignments |
| Policies & Attestations | compliance_policies, compliance_attestation_campaigns, compliance_policy_exceptions |
| Compliance Calendar | compliance_obligations |
| Reports & Analytics | compliance_saved_reports |
| Audit Log | compliance_audit_events |
| Configuration | compliance_jurisdictions, compliance_templates, compliance_retention_rules, compliance_integrations |
Menu items & permissions
| # | Menu item | Base permission | Access |
|---|---|---|---|
| 1 | Overview | compliance_overview | View |
| 2 | Disciplinary | deciplinary | CRUD (+ related keys) |
| 3 | Investigations | compliance_investigation | CRUD |
| 4 | Corrective Actions | compliance_corrective_action | CRUD |
| 5 | Disclosures | compliance_disclosure | CRUD |
| 6 | Speak-up & Grievances | compliance_report | CRUD (restricted) |
| 7 | Training & Certifications | compliance_training | CRUD |
| 8 | Policies & Attestations | compliance_policy | CRUD |
| 9 | Compliance Calendar | compliance_calendar | CRUD |
| 10 | Reports & Analytics | compliance_analytics | CRUD |
| 11 | Audit Log | compliance_audit | View |
| 12 | Configuration | compliance_config | CRUD (admin) |
Disciplinary retains its original keys (spelling preserved for backward-compatible grants): deciplinary (+ _create/_update/_delete), deciplinary_category (+ CRUD), manage_disciplinary, disciplinary_manage_labels, add_disciplinary_label, corrective_select_compliance_officers, disciplinary_can_do_comment, disciplinary_can_use_prefab_comments.
Migrations, seeder & cron
- Migration table:
migrations_compliance— the per-module version table; run withphp erpat migrate:modulesagainst the main DB and every tenant. - Seeder:
ComplianceDemo(ComplianceDemoSeeder) — idempotent demo data for every area; reversible via--remove(soft delete), previewable via--dry-run, tenant-scoped via--tenant=/--all. - Cron:
auto_close_disciplinary_logs— closes aged open disciplinary cases; per-tenant; self-skips when the module is disabled.
API surfaces
Integration API — Compliance_api
GET /api/v1/disciplinary/user/{user_id}GET /api/v1/disciplinary/{id}- Scope:
users:read
Self-service API — Compliance_euapi
GET /v1/api/me/disciplinaryGET /v1/api/me/disciplinary/{id}- Caller-scoped; 404 on any other id