REF / SOFTWARE

HRMS - Human Resource Management System for Mid-Size Enterprise

A full HRMS for a 600-employee company - employee records, leave management, payroll processing, performance reviews, and a self-service employee portal.

RoleLead Full-Stack Engineer
Year2022-2023
Outcome600 employees on one system
DomainSoftware
00
STACK

Tech used.

Next.jsSpring BootPostgreSQLRedisApache POIJasperReports

The Problem

A 600-employee professional services firm was managing HR across three separate tools: a legacy HR system for employee records, a separate payroll tool, and leave requests via email to managers. None of the systems talked to each other. When HR needed a headcount report, it took a day of reconciliation between systems. Payroll processing took an entire week each month.

The firm wanted a single HRMS that replaced all three systems and gave employees self-service access to their own data.

What I Built

A full-featured HRMS built around four functional areas: employee records, leave management, payroll, and performance.

Employee records: the single source of truth for all employee data: personal details, employment history, compensation history, qualifications, documents, and organisational hierarchy. Documents (contracts, offer letters, certificates) are stored in S3 with role-based access. Org chart is rendered from the manager hierarchy data.

Leave management: employees submit leave requests via the self-service portal (annual leave, sick leave, maternity/paternity, unpaid). The request routes to their direct manager for approval, then to HR for processing. Leave balances are computed from the accrual rules defined per employment type and grade. The calendar view shows team leave alongside the employee's own requests to help managers make approval decisions.

Payroll processing: the payroll module processes monthly payroll in 4 steps: import attendance data (from biometric system via CSV), apply adjustments (bonuses, deductions, overtime), compute tax and deductions (configurable tax brackets and contribution rules), and generate payslips. Payslips are generated as PDFs (JasperReports templates) and available to employees via the portal. Bank transfer file (NACHA format) generated for the finance team.

Performance reviews: structured review cycles (annual + mid-year). Managers complete a rating form with weighted KPIs defined per department. Employees complete a self-assessment. HR views aggregated calibration data across departments to identify rating inflation and forced distribution compliance. Review history is stored per employee for promotion and compensation decision support.

Self-service portal: employees view their payslips, apply for leave, check balances, update personal details (with HR approval for sensitive fields), and see their performance review history.

Technical Highlights

The backend is Spring Boot with PostgreSQL. Payroll calculations use a workflow engine (internal, not a framework). each payroll component (basic pay, deductions, benefits) is a separate processor in a chain, making the system easy to extend with new pay components without touching existing logic.

JasperReports handles all PDF generation (payslips, employment letters, audit reports). Apache POI generates Excel exports for finance and management reports.

Role-based access control uses a custom permission model: roles (HR Admin, Manager, Employee) plus data-scope rules (managers see only their direct reports' data; HR Admins see all). The scope rules are applied at the repository layer. every query filters by the requesting user's scope.

Outcome

The system replaced three legacy tools in a 16-week implementation. Payroll processing time dropped from one week to one day (batch run + validation + sign-off). HR self-reported a 70% reduction in manual data reconciliation. Leave request resolution time improved from an average of 3 days to same-day.

Employee self-service reduced HR administrative load significantly. the most impactful change was payslip access. Employees had previously needed to email HR to request their own payslips; now they accessed them directly.