Last updated 2026-04-25
HR module
/hr is the HR home — per-employee documents, key dates (visa, ID, anniversary, contract end), and training certifications. The dashboard surfaces what's expiring in the next 90 days; per-employee profiles let you upload, edit, and remove records.
Permissions
HR is gated by the per-employee has_hr_access flag. It is independent of role: managers and employees (including those with Finance / Legal flags) see nothing of HR (no menu, 403 on direct URL) unless an admin grants the HR flag specifically. Admin always has it.
- Admin — full access automatically. Sees all employees and all sections, including confidential docs.
- Has HR access flag — same as admin: full HR access across the company, including confidential docs.
- Anyone else — no access. Their own profile included (HR is operational, not self-service).
To grant the flag: Manage → Employees → [person] → Edit → Module access → Grant HR access.
See Roles for the full access model.
What you can record per employee
| Section | Holds |
|---|---|
| Documents | Contracts, NDAs, ID/passport scans, visas, work permits, certifications, performance reviews, policies, offer letters, anything else. PDF/JPG/PNG/DOC up to ~10MB. Optional issued + expiry dates trigger alerts. |
| Key dates | Birthday, hire anniversary, visa expiry, ID expiry, probation end, contract end, other. The "expiry"-flavored kinds drive alerts on the dashboard. |
| Certifications | Training records — name, issuer, dates, credential ID, optional notes. |
Confidential flag
When uploading a doc, tick Confidential to mark it sensitive (salary letters, NDAs with restricted parties, performance improvement plans). In V1 the flag is informational — anyone with HR access sees confidential docs. A future release will let you scope confidential to admin-only.
Dashboard alerts (90-day horizon)
KPI strip shows: - Active employees in your scope - Documents expiring ≤ 90 days - Certifications expiring ≤ 90 days - Visa/ID/contract key-date expiries
Detail tables below the KPIs list each expiring item with employee, dates, and direct link to their HR profile. Already-expired items get a red "EXPIRED" tag.
Where this fits
- HR docs are stored under
instance/uploads/hr/on the server with disambiguated filenames (no path-traversal risk). - All actions audit-logged.
- This is HR-1 (foundation) — performance reviews, goals/OKRs, 1:1 tracker, onboarding/offboarding workflows, org chart, disciplinary log, salary history are coming next (HR-2, HR-3).
Tips
- Upload contracts at signing time — set
expiry_dateto renewal date so you get a 90-day heads-up - Tag visa/passport scans as Confidential so HR users know they're sensitive
- Birthday + anniversary key dates are useful for managers (Slack reminders later)
See something wrong or outdated in this article? Report it →