Modules
The system is one Spring Boot application with a layered package structure, so "module" is not a package — it is a URL group. These are the same groups the published API reference is split into, read from the same source, so the two can never disagree about where an endpoint belongs.
| Module | Prefixes | Controllers | Endpoints | Tables | Screens |
|---|---|---|---|---|---|
| Auth & Identity | /api/auth/**, /api/users/**, +3 | 5 | 22 | 5 | 4 |
| HR | /api/employees/**, /api/departments/**, +11 | 13 | 81 | 19 | 19 |
| Payroll | /api/payroll/**, /api/payroll-changes/**, +13 | 15 | 65 | 30 | 17 |
| PH Statutory | /api/sss-contribution-rates/**, /api/philhealth-contribution-rates/**, +7 | 9 | 61 | 14 | 9 |
| Recruitment | /api/job-requisitions/**, /api/job-openings/**, +7 | 8 | 51 | 15 | 7 |
| CRM | /api/crm/** | 7 | 41 | 10 | 8 |
| Inventory & Portal | /api/inventory/**, /api/portal/** | 14 | 86 | 22 | 17 |
| Billing & Platform | /api/billing/**, /api/webhooks/**, +6 | 8 | 18 | 35 | 2 |
| Platform Misc | /api/notifications/**, /api/conversations/**, +4 | 6 | 32 | 17 | 18 |
Outside the groups
WebSocket controllers handle STOMP destinations rather than HTTP routes, so they belong to no URL group and appear in no OpenAPI document. That is correct, not a gap.
| Controller | Destinations |
|---|---|
| TypingController | 1 |
Generated page
This page is rebuilt from the source on every docs build by docs-site/scripts/gen-code-wiki.mjs. Editing it has no effect — change the code, or, if what you want to say is prose, write it in docs/.