# punitkumar756/payroll architecture

> Architecture diagram of the GitHub repository punitkumar756/payroll, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/punitkumar756/payroll
- Repository: https://github.com/punitkumar756/payroll

## Overview

This is a full-stack HRMS and payroll product: HR/admins manage employees, attendance, leave, tasks, calendars, and payroll through the web portal, while employees use web or Android self-service. Requests pass through frontend routing/auth and API clients to Express routes, controllers, and MySQL-backed procedure or query layers. The README documents major capabilities not fully represented in sampled source; those appear as subsystem nodes. Some connections are documented rather than source-verified, and are marked accordingly.

Main entry points: [`backend/src/server.js`](https://github.com/punitkumar756/payroll/blob/main/backend/src/server.js) (Express server), [`frontend/src/App.jsx`](https://github.com/punitkumar756/payroll/blob/main/frontend/src/App.jsx) (Web router), [`app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt`](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt) (Mobile API client), [`frontend/src/api/index.js`](https://github.com/punitkumar756/payroll/blob/main/frontend/src/api/index.js) (Web API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web portals"]
  node_webapp["Web router<br/>[App.jsx]"]
  node_webauth["Web auth<br/>[AuthContext.jsx]"]
  node_admin["Admin portal"]
  node_selfservice["Self-service portal"]
  node_webapi["Web API client<br/>[index.js]"]
end

subgraph group_api["Backend API"]
  node_backend["Express server<br/>[server.js]"]
  node_authroutes["Auth routes<br/>[auth.js]"]
  node_emproutes["Employee routes<br/>[employees.js]"]
  node_attendroutes["Attendance routes<br/>[attendance.js]"]
  node_leaveroutes["Leave routes<br/>[leave.js]"]
  node_mastersroutes["Master routes<br/>[masters.js]"]
  node_taskroutes["Task routes<br/>[tasks.js]"]
  node_payrollroutes["Payroll routes"]
  node_attendance["Attendance logic"]
  node_masters["HR masters"]
  node_payroll["Payroll logic"]
  node_tasks["Task logic<br/>[tasksController.js]"]
end

subgraph group_mobile["Android self-service"]
  node_mobileapp["Android app<br/>[MainActivity.kt]"]
  node_loginvm["Login workflow<br/>[LoginViewModel.kt]"]
  node_tasksview["Task workflow<br/>[TasksViewModel.kt]"]
  node_mobileapi["Mobile API client<br/>[ApiClient.kt]"]
  node_apiservice["API contracts<br/>[ApiService.kt]"]
  node_tokens[("Secure token store<br/>[TokenManager.kt]")]
end

subgraph group_storage["Persistence"]
  node_procedure["Procedure caller<br/>[callProcedure.js]"]
  node_pool["SQL connection<br/>[pool.js]"]
  node_mysql[("MySQL database")]
end

node_hr(("HR / Admin"))
node_employee(("Employee"))

node_hr -.->|"uses portal"| node_webapp
node_employee -.->|"uses portal"| node_webapp
node_employee -.->|"uses app"| node_mobileapp
node_webapp -->|"provides auth"| node_webauth
node_webapp -->|"routes admin"| node_admin
node_webapp -->|"routes self-service"| node_selfservice
node_webauth -->|"calls auth API"| node_webapi
node_admin -.->|"requests data"| node_webapi
node_selfservice -.->|"requests data"| node_webapi
node_webapi -.->|"calls REST API"| node_backend
node_backend -->|"mounts routes"| node_authroutes
node_backend -->|"mounts routes"| node_emproutes
node_backend -->|"mounts routes"| node_attendroutes
node_backend -->|"mounts routes"| node_leaveroutes
node_backend -->|"mounts routes"| node_mastersroutes
node_backend -->|"mounts routes"| node_taskroutes
node_backend -->|"mounts routes"| node_payrollroutes
node_attendroutes -->|"dispatches handlers"| node_attendance
node_mastersroutes -.->|"dispatches handlers"| node_masters
node_taskroutes -->|"dispatches handlers"| node_tasks
node_payrollroutes -.->|"dispatches handlers"| node_payroll
node_attendance -->|"calls procedures"| node_procedure
node_masters -->|"calls procedures"| node_procedure
node_payroll -.->|"queries database"| node_pool
node_procedure -->|"uses connection"| node_pool
node_pool -.->|"queries MySQL"| node_mysql
node_mobileapp -->|"shows login"| node_loginvm
node_mobileapp -.->|"opens tasks"| node_tasksview
node_loginvm -->|"calls API"| node_mobileapi
node_tasksview -->|"calls API"| node_mobileapi
node_mobileapi -->|"configures service"| node_apiservice
node_mobileapi -->|"reads tokens"| node_tokens
node_loginvm -->|"stores session"| node_tokens
node_tasksview -->|"uses session"| node_tokens
node_mobileapi -.->|"calls REST API"| node_backend

click node_webapp "https://github.com/punitkumar756/payroll/blob/main/frontend/src/App.jsx"
click node_webauth "https://github.com/punitkumar756/payroll/blob/main/frontend/src/auth/AuthContext.jsx"
click node_admin "https://github.com/punitkumar756/payroll/tree/main/frontend/src/pages/admin"
click node_selfservice "https://github.com/punitkumar756/payroll/tree/main/frontend/src/pages/self-service"
click node_webapi "https://github.com/punitkumar756/payroll/blob/main/frontend/src/api/index.js"
click node_backend "https://github.com/punitkumar756/payroll/blob/main/backend/src/server.js"
click node_authroutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/auth.js"
click node_emproutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/employees.js"
click node_attendroutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/attendance.js"
click node_leaveroutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/leave.js"
click node_mastersroutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/masters.js"
click node_taskroutes "https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/tasks.js"
click node_payrollroutes "https://github.com/punitkumar756/payroll/tree/main/backend/src/routes/payroll"
click node_attendance "https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/attendanceController.js"
click node_masters "https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/mastersController.js"
click node_payroll "https://github.com/punitkumar756/payroll/tree/main/backend/src/controllers/payroll"
click node_tasks "https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/tasksController.js"
click node_procedure "https://github.com/punitkumar756/payroll/blob/main/backend/src/db/callProcedure.js"
click node_pool "https://github.com/punitkumar756/payroll/blob/main/backend/src/db/pool.js"
click node_mobileapp "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/MainActivity.kt"
click node_loginvm "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/auth/LoginViewModel.kt"
click node_tasksview "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/main/TasksViewModel.kt"
click node_mobileapi "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt"
click node_apiservice "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiService.kt"
click node_tokens "https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/data/TokenManager.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webapp,node_webauth,node_admin,node_selfservice,node_webapi toneBlue
class node_backend,node_authroutes,node_emproutes,node_attendroutes,node_leaveroutes,node_mastersroutes,node_taskroutes,node_payrollroutes,node_attendance,node_masters,node_payroll,node_tasks toneAmber
class node_mobileapp,node_loginvm,node_tasksview,node_mobileapi,node_apiservice,node_tokens toneMint
class node_procedure,node_pool,node_mysql toneRose
class node_hr,node_employee toneIndigo
```

## Components

### Web portals

- [Web router](https://github.com/punitkumar756/payroll/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Web auth](https://github.com/punitkumar756/payroll/blob/main/frontend/src/auth/AuthContext.jsx): `frontend/src/auth/AuthContext.jsx`
- [Admin portal](https://github.com/punitkumar756/payroll/tree/main/frontend/src/pages/admin): `frontend/src/pages/admin`
- [Self-service portal](https://github.com/punitkumar756/payroll/tree/main/frontend/src/pages/self-service): `frontend/src/pages/self-service`
- [Web API client](https://github.com/punitkumar756/payroll/blob/main/frontend/src/api/index.js): `frontend/src/api/index.js`

### Backend API

- [Express server](https://github.com/punitkumar756/payroll/blob/main/backend/src/server.js): `backend/src/server.js`
- [Auth routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/auth.js): `backend/src/routes/auth.js`
- [Employee routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/employees.js): `backend/src/routes/employees.js`
- [Attendance routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/attendance.js): `backend/src/routes/attendance.js`
- [Leave routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/leave.js): `backend/src/routes/leave.js`
- [Master routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/masters.js): `backend/src/routes/masters.js`
- [Task routes](https://github.com/punitkumar756/payroll/blob/main/backend/src/routes/tasks.js): `backend/src/routes/tasks.js`
- [Payroll routes](https://github.com/punitkumar756/payroll/tree/main/backend/src/routes/payroll): `backend/src/routes/payroll`
- [Attendance logic](https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/attendanceController.js): `backend/src/controllers/attendanceController.js`
- [HR masters](https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/mastersController.js): `backend/src/controllers/mastersController.js`
- [Payroll logic](https://github.com/punitkumar756/payroll/tree/main/backend/src/controllers/payroll): `backend/src/controllers/payroll`
- [Task logic](https://github.com/punitkumar756/payroll/blob/main/backend/src/controllers/tasksController.js): `backend/src/controllers/tasksController.js`

### Android self-service

- [Android app](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/MainActivity.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/MainActivity.kt`
- [Login workflow](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/auth/LoginViewModel.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/auth/LoginViewModel.kt`
- [Task workflow](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/main/TasksViewModel.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/main/TasksViewModel.kt`
- [Mobile API client](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt`
- [API contracts](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiService.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiService.kt`
- [Secure token store](https://github.com/punitkumar756/payroll/blob/main/app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/data/TokenManager.kt): `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/data/TokenManager.kt`

### Persistence

- [Procedure caller](https://github.com/punitkumar756/payroll/blob/main/backend/src/db/callProcedure.js): `backend/src/db/callProcedure.js`
- [SQL connection](https://github.com/punitkumar756/payroll/blob/main/backend/src/db/pool.js): `backend/src/db/pool.js`
- **MySQL database**

### Other components

- **HR / Admin**
- **Employee**

## Connections

- HR / Admin → Web router: uses portal (evidence: `README.md`)
- Employee → Web router: uses portal (evidence: `README.md`)
- Employee → Android app: uses app (evidence: `README.md`)
- Web router → Web auth: provides auth (evidence: `frontend/src/App.jsx`)
- Web router → Admin portal: routes admin (evidence: `frontend/src/App.jsx`)
- Web router → Self-service portal: routes self-service (evidence: `frontend/src/App.jsx`)
- Web auth → Web API client: calls auth API (evidence: `frontend/src/auth/AuthContext.jsx`)
- Admin portal → Web API client: requests data (evidence: `frontend/src/pages/admin/MasterPages.jsx`)
- Self-service portal → Web API client: requests data
- Web API client → Express server: calls REST API (evidence: `README.md`)
- Express server → Auth routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Employee routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Attendance routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Leave routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Master routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Task routes: mounts routes (evidence: `backend/src/server.js`)
- Express server → Payroll routes: mounts routes (evidence: `backend/src/server.js`)
- Attendance routes → Attendance logic: dispatches handlers (evidence: `backend/src/routes/attendance.js`)
- Master routes → HR masters: dispatches handlers
- Task routes → Task logic: dispatches handlers (evidence: `backend/src/routes/tasks.js`)
- Payroll routes → Payroll logic: dispatches handlers (evidence: `backend/src/routes/payroll/salaryHeadRoutes.js`)
- Attendance logic → Procedure caller: calls procedures (evidence: `backend/src/controllers/attendanceController.js`)
- HR masters → Procedure caller: calls procedures (evidence: `backend/src/controllers/mastersController.js`)
- Payroll logic → SQL connection: queries database (evidence: `backend/src/controllers/payroll/payslipController.js`)
- Procedure caller → SQL connection: uses connection (evidence: `backend/src/db/callProcedure.js`)
- SQL connection → MySQL database: queries MySQL (evidence: `README.md`)
- Android app → Login workflow: shows login (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/MainActivity.kt`)
- Android app → Task workflow: opens tasks
- Login workflow → Mobile API client: calls API (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/auth/LoginViewModel.kt`)
- Task workflow → Mobile API client: calls API (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/main/TasksViewModel.kt`)
- Mobile API client → API contracts: configures service (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt`)
- Mobile API client → Secure token store: reads tokens (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/api/ApiClient.kt`)
- Login workflow → Secure token store: stores session (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/auth/LoginViewModel.kt`)
- Task workflow → Secure token store: uses session (evidence: `app/mobile/src/main/java/com/daytonnaturalresource/employeeApp/ui/main/TasksViewModel.kt`)
- Mobile API client → Express server: calls REST API (evidence: `README.md`)
