Platform Misc
", "/api/public/job-openings", "/api/public/job-applications"); } @Bean public GroupedOpenApi crmApi() { return group("crm", "/api/crm"); } @Bean public GroupedOpenApi inventoryAndPortalApi() { return group("inventory-and-portal", "/api/inventory", "/api/portal"); } Commercial and multi-tenant platform surface: subscriptions, provider webhooks, tenant administration, and the unauthenticated signup and widget endpoints that support them.
| Controllers | 6 |
| Endpoints | 32 |
| Tables | 17 |
| Screens | 18 |
| API reference | /api/ — group platform-misc |
| OpenAPI spec | /openapi/platform-misc.json |
URL prefixes
Endpoints belong to this module by URL, exactly as the OpenAPI group defines it in backend/src/main/java/com/motorph/payroll/config/OpenApiConfiguration.java.
/api/notifications/**/api/conversations/**/api/reports/**/api/saved-views/**/api/user-nav-preference/**/api/company-profile/**
Controllers
| Controller | Base path | Endpoints | GET | POST | PUT | PATCH | DELETE |
|---|---|---|---|---|---|---|---|
| CompanyProfileController | /api/company-profile | 2 | 1 | — | 1 | — | — |
| ConversationController | /api/conversations | 5 | 4 | 1 | — | — | — |
| NotificationController | /api/notifications | 3 | 1 | — | — | 2 | — |
| ReportingController | /api/reports | 16 | 16 | — | — | — | — |
| SavedViewController | /api/saved-views | 3 | 1 | 1 | — | — | 1 |
| UserNavPreferenceController | /api/user-nav-preference | 3 | 1 | — | 1 | — | 1 |
Across the module: 24 GET, 2 POST, 2 PUT, 2 PATCH, 2 DELETE.
Tables
Everything this module's controllers can reach through a repository, including through a shared service — so this is the upper bound of what the module touches, not the set of tables it owns. A table appearing under two modules means two modules can read it.
| Entity | Table | Columns | Tenant-scoped |
|---|---|---|---|
| Bonus | bonus | 8 | Yes |
| ChatMessage | messages | 4 | Yes |
| CompanyProfile | company_profile | 20 | Yes |
| Conversation | conversation | 4 | Yes |
| Employee | employee | 24 | Yes |
| InterviewSchedule | interview_schedule | 6 | Yes |
| JobApplicant | job_applicant | 12 | Yes |
| JobOffer | job_offer | 24 | Yes |
| JobOpening | job_opening | 11 | Yes |
| JobRequisition | job_requisition | 7 | Yes |
| Notification | notifications | 5 | Yes |
| PayrollSettings | payroll_settings | 71 | Yes |
| Payslip | payslip | 52 | Yes |
| SavedView | saved_view | 8 | Yes |
| User | users | 11 | — |
| UserNavPreference | user_nav_preference | 3 | Yes |
| WithholdingTaxBracket | withholding_tax_brackets | 7 | — |
Screens
Frontend routes gated by a permission this module's endpoints also require — the link between a page and its API is the permission string, not the URL.
| Route | Component | Requires |
|---|---|---|
/employees | Employees | hr.employees.view |
/government-forms | GovernmentForms | hr.employees.manage or payroll.manage |
/holiday-calendar | HolidayCalendar | payroll.holidays.manage or payroll.manage |
/hr-analytics | HrAnalytics | hr.dashboard.view |
/interview-schedules | InterviewSchedules | hr.recruitment.view |
/job-applicants | JobApplicants | hr.recruitment.view |
/job-offers | JobOffers | hr.recruitment.view |
/job-openings | JobOpenings | hr.recruitment.view |
/job-requisitions | JobRequisitions | hr.recruitment.view |
/leave-requests | LeaveRequests | hr.leave.requests.view |
/messages | Messages | employee.messages.view |
/notifications | MyNotifications | employee.notifications.view |
/overtime-requests | OvertimeRequests | hr.overtime.requests.view or payroll.overtime.approve |
/payroll-analytics | PayrollAnalytics | payroll.dashboard.view or payroll.manage or payroll.approve |
/payroll-runs | PayrollRuns | payroll.dashboard.view or payroll.manage or payroll.approve |
/payroll-runs/:id | PayrollRunDetail | payroll.dashboard.view or payroll.manage or payroll.approve |
/recruitment-analytics | RecruitmentAnalytics | hr.recruitment.view |
/reimbursement-requests | ReimbursementRequests | payroll.reimbursement.manage |
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/.