Secure Payroll & HR System built with Java Spring Boot for Rwanda Government. Handles employee data, automated payroll, deductions, JWT security, payslips, and notification messages.
# ERP Payroll & Employee Management System
Spring Boot 3 backend for employee management, JWT authentication, payroll processing, payslip generation, and payroll messaging for the Government of Rwanda.
## Features
- Employee management with validation and unique email/employee ID rules
- JWT authentication with 8-hour expiry
- Role-based authorization for manager, admin, and employee flows
- Payroll processing with configurable deductions and allowances
- Payslip approval, PDF download, payroll messages, and audit logging
- Swagger UI at `/swagger-ui.html`
- Pagination and sorting on employee listing
## Tech Stack
- Java 17
- Spring Boot 3
- Spring Security + JWT
- Spring Data JPA
- PostgreSQL/MySQL-ready persistence
- OpenAPI / Swagger
- iText PDF
- JUnit 5 + Mockito
- Docker Compose
## ERD
```mermaid
erDiagram
EMPLOYEE ||--|| USERS : has
USERS }o--o{ ROLES : assigned
EMPLOYEE ||--o{ PAYSLIP : receives
EMPLOYEE ||--o{ PAYROLL_MESSAGE : receives
PAYROLL_AUDIT_LOG {
bigint id
string action
string details
datetime created_at
}
EMPLOYEE {
bigint id
string employee_id
string email
decimal base_salary
string status
}
USERS {
bigint id
bigint employee_id
string password
string status
}
ROLES {
bigint id
string name
}
DEDUCTIONS {
bigint id
string name
decimal percentage
string type
}
PAYSLIP {
bigint id
bigint employee_id
string month_year
decimal gross_salary
decimal net_salary
string status
}
PAYROLL_MESSAGE {
bigint id
bigint employee_id
string message_text
string month_year
}
```
## Spring Boot Flow
```mermaid
flowchart LR
Client --> Controller
Controller --> Service
Service --> Repository
Repository --> Database
Database --> Repository
Repository --> Service
Service --> Controller
Controller --> Client
```
## Setup
1. Configure environment variables or edit application.yml.
2. Create the database and optionally run schema-postgresql.sql, data.sql, and routines-postgresql.sql.
3. Run `mvn spring-boot:run`.
4. Open `
localhost`.
# …