Finance & HR
UI Mockup — KPI Dashboard & Input
bengkelpintar.app/hcm/kpi
HCM
Karyawan
Absensi
KPI
Komisi
KPI Bulan April 2026
Recalculated 2j lalu
AD
82.4
Avg Score
🏆
Rudi H.
Top Performer
⚠️
3
Needs Attention
12
Excellent (≥85)
+ Input Harian
↻ Recalculate
KaryawanRoleSPK DoneOn-TimeQC RatingScore
Rudi HartonoMekanik42/4095%4.792.5
Anton SusiloMekanik38/4088%4.586.2
Sari DewiKasir100%78.0
Joko PriyantoMekanik22/4072%3.858.4
bengkelpintar.app/hcm/kpi/input
Input Harian KPI
Input KPI — Rudi Hartono (Mekanik)
21 April 2026
PRESENSI
Kehadiran✓ Hadir
Keterlambatan0 menit
KINERJA (auto dari WO)
SPK Selesai Hari Ini3 / target 2
On-Time %100%
QC Rating4.8 ★
Rework / Return0
Akurasi Parts Request100%
SKOR HARI INI
94.5
EXCELLENT — di atas target harian
Lihat Detail
Simpan & Approve
Sequence Diagram — Lifecycle KPI Input → Skor

KPI Calculation Sequence

Dari input harian (manual + auto) → agregasi bulanan → skor final → digunakan di komisi

sequenceDiagram participant K as Karyawan participant KM as Kepala Mekanik participant WO as WO Module participant INV as Inventory participant CRM as Customer Feedback participant KPI as KPI Engine participant HCM as HCM (Komisi) participant A as Admin rect rgb(239,246,255) Note over K,KPI: Input Harian (per-shift) K->>WO: Selesaikan job + QC WO-->>KPI: Push event "spk_done" (auto) INV-->>KPI: Push akurasi parts request (auto) CRM-->>KPI: Push rating customer (auto) KM->>KPI: Input manual (kehadiran, keterlambatan, deviasi) KPI->>KPI: Simpan KpiInputDaily per indikator end rect rgb(240,253,244) Note over KPI,A: Agregasi & Skoring KPI->>KPI: Cron harian 23:55 — agregasi per karyawan KPI->>KPI: Apply formula per scoreType (ratio / binary_low / ratio_low) KPI->>KPI: Hitung weighted total per kategori KPI->>KPI: Hitung totalScore = Σ(category × bobot) KPI->>KPI: Update KpiRecord (overwrite untuk hari itu) end rect rgb(255,247,237) Note over KPI,HCM: Akhir Bulan — Output ke Komisi A->>KPI: Trigger "Recalculate Bulan Ini" KPI->>KPI: Aggregate semua KpiRecord bulan berjalan KPI-->>A: Tampilkan dashboard ranking + tren HCM->>KPI: Query skor bulan ini per mekanik KPI-->>HCM: Return totalScore + breakdown indikator HCM->>HCM: Hitung komisi pakai skor (bonus rating dst) end
Flow Diagram — Siklus Input KPI Harian

Alur KPI — Multi-source Input ke Skor Final

Sumber input: aktivitas WO (auto), Inventory (auto), CRM rating (auto), input manual (kepala mekanik)

flowchart TD A([Mulai Hari]) --> B[Karyawan Login &\nAbsensi Pagi] B --> C{Role?} subgraph Auto_Input C -->|Mekanik| D1[Aktivitas WO Tracking] D1 --> E1[Job Selesai → Event spk_done] D1 --> E2[QC Rating → Event qc_score] D1 --> E3[Rework Detected → Event return_rate] C -->|Kasir| D2[Aktivitas Transaksi] D2 --> E4[Closing Jurnal → Event closing_done] D2 --> E5[Deviasi Kas → Event deviasi] C -->|Gudang| D3[Aktivitas Stock] D3 --> E6[Akurasi Stok → Event stock_accuracy] end subgraph Manual_Input F[Kepala Mekanik / Admin] --> G[Form Input KPI Harian] G --> H[Indikator Manual:\nkebersihan, etika, dll] end E1 --> I[(KpiInputDaily)] E2 --> I E3 --> I E4 --> I E5 --> I E6 --> I H --> I I --> J{End of Day?} J -->|Cron 23:55| K[Aggregate per Karyawan] K --> L[Apply Formula per scoreType] L --> M[Calculate Category Score\n× Bobot] M --> N[Total Score 0-100] N --> O[(KpiRecord)] O --> P{Akhir Bulan?} P -->|Ya| Q[Cron 25 hari berikutnya\nrecalc bulanan] Q --> R[Output ke HCM Komisi] R --> S[Ranking & Tren\ndi Dashboard] style A fill:#dbeafe,stroke:#3b82f6 style N fill:#dcfce7,stroke:#16a34a style S fill:#fef3c7,stroke:#d97706
Template Indikator per Role
flowchart LR T[KPI Templates] --> M[Mekanik] T --> KS[Kasir] T --> KM[Kepala Mekanik] T --> G[Gudang] T --> O[Operator] T --> KK[Kepala Kasir] T --> ST[Sales / Telesales] M --> M1[Presensi 30%] M --> M2[Kinerja 60%\nSPK, On-Time, QC, Rework] M --> M3[Etika 10%] KS --> KS1[Presensi 30%] KS --> KS2[Kinerja 60%\nDeviasi, Closing, AR, CSI] KS --> KS3[Etika 10%] G --> G1[Presensi 30%] G --> G2[Kinerja 60%\nAkurasi Stok, Receiving, Outbound] G --> G3[Etika 10%] style T fill:#dbeafe,stroke:#3b82f6 style M fill:#fff7ed,stroke:#d97706 style KS fill:#f0fdf4,stroke:#16a34a style G fill:#fef3c7,stroke:#ca8a04
Formula Scoring

scoreType: ratio

  • Untuk indikator "lebih banyak = lebih bagus"
  • Contoh: jumlah SPK selesai, kehadiran, jumlah review
  • Formula: min(actual / target, 1) × bobot × 100
  • Cap di 100% — tidak ada bonus over-target di skor

scoreType: binary_low

  • Untuk indikator "kalau ada = penalti"
  • Contoh: keterlambatan, deviasi keuangan, AR overdue
  • Formula: actual === 0 ? bobot × 100 : 0
  • Tidak ada gradasi — full score atau zero

scoreType: ratio_low

  • Untuk indikator "lebih sedikit = lebih bagus" (proporsional)
  • Contoh: rework rate, response time, idle time
  • Formula: max(0, 1 - actual/target) × bobot × 100
  • Skor turun bertahap, sampai 0 saat actual ≥ target

Total Score

  • Sum dari semua indikator setelah weighted
  • Range 0-100 (selalu)
  • Threshold: ≥85 = Excellent, 70-84 = Good, <70 = Needs attention
  • Bobot kategori: Presensi 30% + Kinerja 60% + Etika 10%
Automation & Akses

Auto-input dari Modul Lain

  • WO Module → push spk_done, qc_score, rework
  • Inventory → push parts_accuracy, stock_match
  • Kasir → push closing_done, deviasi_kas
  • CRM → push customer_rating, review_count

Cron Jobs

  • kpi-daily-aggregate — setiap 23:55 (rekap input harian)
  • kpi-monthly-recalc — tanggal 1 bulan berikutnya 02:00
  • Konfigurabel via Settings → Cron Jobs (admin)
  • Trigger manual via tombol "Recalculate" di dashboard

RBAC

  • Admin Cabang — full akses input, edit template, recalc
  • Super Admin — semua + kelola template lintas cabang
  • Kepala Mekanik — input manual harian untuk timnya
  • Karyawan — view only KPI miliknya sendiri

Output / Konsumen

  • HCM Komisi — base & bonus dihitung dari skor bulanan
  • Dashboard Manajemen — ranking, tren, deviasi cabang
  • Laporan PDF — slip KPI individual untuk arsip
  • Notifikasi — auto alert ke karyawan saat skor <70