# munovrizall/quanta-hris-laravel architecture

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

- Interactive diagram: https://gitdiagram.com/munovrizall/quanta-hris-laravel
- Repository: https://github.com/munovrizall/quanta-hris-laravel

## Overview

Quanta HRIS is a Laravel backend API and Filament web admin for employee administration, attendance, leave/permits, overtime, payroll and reporting. The principal employee workflow is submitting attendance or time-related requests through the API, which validates and records operational data; payroll and reports then derive compensation and workforce summaries for administrators and payslips. The graph reflects README capabilities and sampled controller/service behavior; several resource and API implementations were not sampled, so their internal wiring is left general.

Main entry points: [`app/Models/Absensi.php`](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Absensi.php) (Attendance records), [`app/Services/HitungGajiService.php`](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/HitungGajiService.php) (Payroll calculations), [`app/Services/LaporanKinerjaService.php`](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LaporanKinerjaService.php) (Performance reports), [`routes/api.php`](https://github.com/munovrizall/quanta-hris-laravel/blob/main/routes/api.php) (Backend API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access surfaces"]
  node_api["Backend API<br/>[api.php]"]
  node_panel["Filament admin"]
end

subgraph group_workforce["Workforce operations"]
  node_attendance_api["Attendance API"]
  node_attendance_service["Attendance service<br/>[AbsensiService.php]"]
  node_attendance_records["Attendance records<br/>[Absensi.php]"]
  node_leave_api["Leave and permits<br/>[CutiController.php]"]
  node_leave_records["Leave and permit records<br/>[Cuti.php]"]
  node_overtime_api["Overtime API"]
  node_overtime_service["Overtime calculation<br/>[LemburService.php]"]
  node_overtime_records["Overtime records<br/>[Lembur.php]"]
  node_employees["Employee and company data<br/>[Karyawan.php]"]
end

subgraph group_payroll["Payroll"]
  node_payroll_resource["Payroll management"]
  node_payroll_calc["Payroll calculations"]
  node_tax["PPh 21 TER<br/>[Pph21Service.php]"]
  node_bpjs["BPJS deductions<br/>[BpjsService.php]"]
  node_deductions["Pay and allowances"]
  node_payroll_records["Payroll records<br/>[Penggajian.php]"]
  node_payslips["Payslip PDFs"]
end

subgraph group_insights["Reports and insights"]
  node_performance["Performance reports"]
  node_finance["Financial reports"]
  node_attendance_summary["Attendance summaries"]
  node_report_views["Report and PDF views"]
end

node_employee(("Employee"))
node_mobile(("Mobile app"))
node_admin(("HR/admin"))

node_employee -.->|"submits work data"| node_mobile
node_mobile -->|"sends requests"| node_api
node_admin -->|"manages HR"| node_panel
node_panel -->|"views attendance"| node_attendance_records
node_panel -->|"manages payroll"| node_payroll_resource
node_api -->|"dispatches"| node_attendance_api
node_attendance_api -->|"reads and writes"| node_attendance_records
node_attendance_api -->|"checks employee"| node_employees
node_attendance_api -->|"gets attendance data"| node_attendance_service
node_api -->|"dispatches"| node_leave_api
node_leave_api -->|"reads and writes"| node_leave_records
node_api -->|"dispatches"| node_overtime_api
node_overtime_api -->|"reads attendance"| node_attendance_records
node_overtime_api -->|"reads and writes"| node_overtime_records
node_overtime_api -->|"calculates incentive"| node_overtime_service
node_payroll_resource -->|"manages records"| node_payroll_records
node_payslips -->|"reads approved payroll"| node_payroll_records
node_payslips -->|"gets attendance totals"| node_attendance_service
node_payslips -->|"renders payslip"| node_report_views
node_payroll_calc -->|"calculates tax"| node_tax
node_payroll_calc -->|"calculates BPJS"| node_bpjs
node_payroll_calc -->|"calculates deductions"| node_deductions
node_payroll_calc -->|"uses attendance"| node_attendance_records
node_payroll_calc -->|"uses overtime"| node_overtime_records
node_performance -->|"aggregates attendance"| node_attendance_records
node_performance -->|"aggregates leave"| node_leave_records
node_performance -->|"aggregates overtime"| node_overtime_records
node_finance -->|"summarizes payroll"| node_payroll_records
node_attendance_summary -->|"summarizes attendance"| node_attendance_records
node_attendance_summary -->|"provides PDF data"| node_report_views
node_performance -->|"provides report data"| node_report_views
node_finance -->|"provides report data"| node_report_views

click node_api "https://github.com/munovrizall/quanta-hris-laravel/blob/main/routes/api.php"
click node_panel "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Providers/Filament/AdminPanelProvider.php"
click node_attendance_api "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/AttendanceController.php"
click node_attendance_service "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/AbsensiService.php"
click node_attendance_records "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Absensi.php"
click node_leave_api "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/CutiController.php"
click node_leave_records "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Cuti.php"
click node_overtime_api "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/LemburController.php"
click node_overtime_service "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LemburService.php"
click node_overtime_records "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Lembur.php"
click node_employees "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Karyawan.php"
click node_payroll_resource "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Filament/Resources/PenggajianResource.php"
click node_payroll_calc "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/HitungGajiService.php"
click node_tax "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/Pph21Service.php"
click node_bpjs "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/BpjsService.php"
click node_deductions "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/PotonganService.php"
click node_payroll_records "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Penggajian.php"
click node_payslips "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/SlipGajiController.php"
click node_performance "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LaporanKinerjaService.php"
click node_finance "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LaporanKeuanganService.php"
click node_attendance_summary "https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/RekapitulasiAbsensiService.php"
click node_report_views "https://github.com/munovrizall/quanta-hris-laravel/blob/main/resources/views/pdf/laporan-kinerja.blade.php"

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_api,node_panel toneBlue
class node_attendance_api,node_attendance_service,node_attendance_records,node_leave_api,node_leave_records,node_overtime_api,node_overtime_service,node_overtime_records,node_employees toneAmber
class node_payroll_resource,node_payroll_calc,node_tax,node_bpjs,node_deductions,node_payroll_records,node_payslips toneMint
class node_performance,node_finance,node_attendance_summary,node_report_views toneRose
class node_employee,node_mobile,node_admin toneIndigo
```

## Components

### Access surfaces

- [Backend API](https://github.com/munovrizall/quanta-hris-laravel/blob/main/routes/api.php): `routes/api.php`
- [Filament admin](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Providers/Filament/AdminPanelProvider.php): `app/Providers/Filament/AdminPanelProvider.php`

### Workforce operations

- [Attendance API](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/AttendanceController.php): `app/Http/Controllers/Api/AttendanceController.php`
- [Attendance service](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/AbsensiService.php): `app/Services/AbsensiService.php`
- [Attendance records](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Absensi.php): `app/Models/Absensi.php`
- [Leave and permits](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/CutiController.php): `app/Http/Controllers/Api/CutiController.php`
- [Leave and permit records](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Cuti.php): `app/Models/Cuti.php`
- [Overtime API](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/Api/LemburController.php): `app/Http/Controllers/Api/LemburController.php`
- [Overtime calculation](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LemburService.php): `app/Services/LemburService.php`
- [Overtime records](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Lembur.php): `app/Models/Lembur.php`
- [Employee and company data](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Karyawan.php): `app/Models/Karyawan.php`

### Payroll

- [Payroll management](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Filament/Resources/PenggajianResource.php): `app/Filament/Resources/PenggajianResource.php`
- [Payroll calculations](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/HitungGajiService.php): `app/Services/HitungGajiService.php`
- [PPh 21 TER](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/Pph21Service.php): `app/Services/Pph21Service.php`
- [BPJS deductions](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/BpjsService.php): `app/Services/BpjsService.php`
- [Pay and allowances](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/PotonganService.php): `app/Services/PotonganService.php`
- [Payroll records](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Models/Penggajian.php): `app/Models/Penggajian.php`
- [Payslip PDFs](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Http/Controllers/SlipGajiController.php): `app/Http/Controllers/SlipGajiController.php`

### Reports and insights

- [Performance reports](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LaporanKinerjaService.php): `app/Services/LaporanKinerjaService.php`
- [Financial reports](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/LaporanKeuanganService.php): `app/Services/LaporanKeuanganService.php`
- [Attendance summaries](https://github.com/munovrizall/quanta-hris-laravel/blob/main/app/Services/RekapitulasiAbsensiService.php): `app/Services/RekapitulasiAbsensiService.php`
- [Report and PDF views](https://github.com/munovrizall/quanta-hris-laravel/blob/main/resources/views/pdf/laporan-kinerja.blade.php): `resources/views/pdf/laporan-kinerja.blade.php`

### Other components

- **Employee**
- **Mobile app**
- **HR/admin**

## Connections

- Employee → Mobile app: submits work data
- Mobile app → Backend API: sends requests
- HR/admin → Filament admin: manages HR
- Filament admin → Attendance records: views attendance
- Filament admin → Payroll management: manages payroll
- Backend API → Attendance API: dispatches
- Attendance API → Attendance records: reads and writes
- Attendance API → Employee and company data: checks employee
- Attendance API → Attendance service: gets attendance data
- Backend API → Leave and permits: dispatches
- Leave and permits → Leave and permit records: reads and writes
- Backend API → Overtime API: dispatches
- Overtime API → Attendance records: reads attendance
- Overtime API → Overtime records: reads and writes
- Overtime API → Overtime calculation: calculates incentive
- Payroll management → Payroll records: manages records
- Payslip PDFs → Payroll records: reads approved payroll
- Payslip PDFs → Attendance service: gets attendance totals
- Payslip PDFs → Report and PDF views: renders payslip
- Payroll calculations → PPh 21 TER: calculates tax
- Payroll calculations → BPJS deductions: calculates BPJS
- Payroll calculations → Pay and allowances: calculates deductions
- Payroll calculations → Attendance records: uses attendance
- Payroll calculations → Overtime records: uses overtime
- Performance reports → Attendance records: aggregates attendance
- Performance reports → Leave and permit records: aggregates leave
- Performance reports → Overtime records: aggregates overtime
- Financial reports → Payroll records: summarizes payroll
- Attendance summaries → Attendance records: summarizes attendance
- Attendance summaries → Report and PDF views: provides PDF data
- Performance reports → Report and PDF views: provides report data
- Financial reports → Report and PDF views: provides report data
