Skip to main content

title: “HR Overview” description: “Modul HR SNISHOP ERP: absensi, cuti, rekrmen, payroll, dan manajemen karyawan lengkap dengan GPS tracking dan foto selfie.”

HR Overview

HR Overview Modul Human Resource (HR) SNISHOP ERP mengelola seluruh siklus hidup karyawan — dari rekrmen, onboarding, absensi harian, cuti dan izin, hingga payroll. Sistem ini dibangun untuk bisnis F&B yang membutuhkan kontrol kehadiran ketat dengan verifikasi GPS dan foto selfie, serta integrasi langsung ke perhitungan gaji.

Arsitektur Modul HR

7 Halaman HR

Entity & Data Model

Employee

AttendanceRecord

LeaveRequest

JobPosting

JobApplication

13 Peran & Hak Akses

Fitur Utama

1. Absensi dengan GPS & Foto Selfie

Sistem absensi menggunakan verifikasi ganda untuk memastikan karyawan benar-benar hadir di lokasi kerja: Verifikasi Kehadiran:

2. Leave Management dengan Approval Workflow

Jenis Cuti:

3. Recruitment Pipeline

Pipeline Stages:

4. Payroll Integration

Modul HR terintegrasi langsung dengan Finance untuk perhitungan gaji otomatis: Komponen Payroll:

Arsitektur Patterns

Server-Function-First

Semua operasi CRUD menggunakan base44 entity functions untuk konsistensi dan auditability:

Idempotency Keys

Operasi kritis menggunakan idempotency key untuk mencegah duplikasi:

Global Caching

Data karyawan dan attendance di-cache di context untuk performa:

BroadcastChannel Sync

Multi-tab sync untuk real-time update:

12 Shared Components

Integrasi Cross-Module

Cara Akses

Dari sidebar, klik menu HR untuk melihat dashboard overview, atau pilih sub-menu spesifik (Attendance, Leave, Recruitment, Employees, Payroll, Reports).

Tips

  • Pastikan GPS aktif saat check-in absensi — sistem menolak check-in jika lokasi tidak terdeteksi
  • Upload foto selfie dengan pencahayaan baik — foto gelap atau blur menyulitkan verifikasi
  • Submit cuti jauh-jauh hari — minimal H-3 untuk cuti tahunan, agar manager punya waktu approve
  • Lengkapi dokumen pendukung untuk sick leave > 3 hari — surat dokter wajib di-upload
  • Monitor attendance report setiap bulan untuk identifikasi pola keterlambatan atau absensi tidak wajar
  • Gunakan recruitment pipeline untuk track semua lamaran secara terstruktur — jangan lewatkan kandidat potensial

Entity Relationship Diagram

Berikut adalah diagram relasi seluruh entitas HR dalam sistem SNISHOP ERP. Setiap entitas terhubung melalui foreign key dan relasi multi-tenant berdasarkan company_id.

Keterangan Relasi

Tabel di atas membedakan relasi hard foreign key (field eksplisit pada JSONC schema) dengan relasi logis/embedded yang dijaga oleh server-function. Seluruh entitas di atas juga ter-scoping secara multi-tenant lewat company_id, kecuali AttendanceRecord yang masih memakai workspace_id sebagai kunci scope.

Entity Schema Reference (Referensi Skema Entitas)

Bagian ini mendokumentasikan seluruh field untuk setiap entitas HR. Semua deskripsi dalam Bahasa Indonesia. Field name mengikuti definisi JSONC entity secara persis.

Employee — Data Karyawan

AttendanceRecord — Log Absensi (User-Level)

CompanyAttendance — Log Kehadiran Perusahaan

CompanyLeave — Pengajuan Cuti Perusahaan

Leave — Pengajuan Cuti (Legacy)

CompanyPayroll — Slip Gaji Perusahaan

Payroll — Slip Gaji (Legacy)

JobPosting — Lowongan Kerja

Applicant — Pelamar Kerja (Pipeline Rekrutmen)

Kondisi RLS — Create/Read/Update/Delete: data.company_id = user.data.active_company_id (dan company_id tidak kosong) ATAU created_by_id = user saat ini ATAU user_condition.role = admin.

JobApplication — Lamaran Kerja

InterviewSchedule — Jadwal Interview

OfferLetter — Surat Penawaran Kerja

Kondisi RLS — Create/Read/Update/Delete: data.company_id = user.data.active_company_id (dan company_id tidak kosong) ATAU created_by_id = user saat ini ATAU user_condition.role = admin.

Training — Program Pelatihan

KPI — Penilaian Key Performance Indicator

CompanyKPI — KPI Perusahaan

KPITemplate — Template KPI

PerformanceReview — Penilaian Performa Karyawan

Kondisi RLS — Create/Read/Update/Delete: data.company_id = user.data.active_company_id (dan company_id tidak kosong) ATAU created_by_id = user saat ini ATAU user_condition.role = admin.

TimeEntry — Pencatatan Waktu Kerja

PayrollConfiguration — Konfigurasi Penggajian

PayslipTemplate — Template Slip Gaji

CompanyAttendanceSettings — Pengaturan Absensi Perusahaan

ApprovalWorkflow — Definisi Alur Persetujuan

Kondisi RLS — Aturan create/read/update/delete didefinisikan kosong ({}) pada entitas ini; kontrol akses ditegakkan di lapisan server-function, bukan di level entitas.

ApprovalRequest — Instance Pengajuan Persetujuan

Kondisi RLS — Sama seperti ApprovalWorkflow, aturan RLS kosong ({}); validasi approver dilakukan oleh server-function sebelum status berubah.

State Diagrams — Siklus Hidup Data HR

Siklus Hidup Status Karyawan

Siklus Hidup Kehadiran Harian

Siklus Hidup Pengajuan Cuti

Siklus Hidup Payroll Bulanan

Siklus Hidup Rekrutmen

Siklus Hidup Penilaian KPI

Siklus Hidup Performance Review (PerformanceReview.status)

Review performa memiliki siklus 4 tahap dengan satu gerbang wajib: acknowledge dari karyawan sebelum hasil bisa difinalisasi.

Siklus Hidup Surat Penawaran Kerja (OfferLetter.status)

Siklus Hidup Pengajuan Persetujuan (ApprovalRequest.overall_status)


Sequence Diagrams — Alur Data Utama

1. Alur Check-in Absensi dengan Verifikasi GPS & Foto

2. Alur Pengajuan Cuti dengan Approval Workflow

3. Alur Pemrosesan Payroll Bulanan

4. Alur Rekrutmen dari Lamaran hingga Interview

5. Alur Onboarding Karyawan Baru (Offer Accepted → Aktif)

Diagram berikut menggambarkan transisi kandidat yang menerima penawaran menjadi karyawan aktif beserta provisioning akses, pengaturan absensi, dan KPI awal. Catatan implementasi
  • Pembuatan Employee dan provisioning akun berjalan dalam satu transaksi logis; jika salah satu gagal, status Applicant.current_status tetap offer_extended agar dapat diulang.
  • hire_date menjadi dasar perhitungan masa percobaan (review_type = probation) dan prorasi gaji bulan pertama pada CompanyPayroll.
  • Penugasan location_id pada CompanyAttendanceSettings.locations[].assigned_employee_ids menentukan geofence mana yang valid untuk karyawan tersebut.

6. Alur Performance Review & KPI (Self-assessment → Finalized)

Catatan implementasi
  • overall_score dihitung dari gabungan competencies[].score dan kpi_achievement[].achievement_percentage memakai weight masing-masing; hasilnya menentukan rating.
  • Status finalized mengunci dokumen. Koreksi setelah finalisasi hanya dapat dilakukan Super Admin/HR Manager dan tercatat sebagai review baru.
  • development_plan[] yang disetujui berubah menjadi entri Training agar progres pelatihan dapat dipantau.

Enum Reference Tables — Tabel Referensi Enum

Berikut adalah seluruh nilai enum yang digunakan pada field-field entitas HR.

Employee Status (Employee.status)

Employment Type (Employee.employment_type, JobPosting.employment_type)

Department (Employee.department)

Attendance Status (AttendanceRecord.status, CompanyAttendance.status)

Leave Type (Leave.leave_type, CompanyLeave.leave_type)

Leave Status (Leave.status, CompanyLeave.status)

Payroll Status (Payroll.status, CompanyPayroll.status)

Payment Method (Payroll.payment_method, CompanyPayroll.payment_method)

Basic Salary Formula (PayrollConfiguration.basic_salary_formula)

Job Posting Status (JobPosting.status)

Job Application Status (JobApplication.status)

Interview Type (InterviewSchedule.interview_type)

Interview Status (InterviewSchedule.status)

Interview Recommendation (InterviewSchedule.recommendation)

Training Type (Training.training_type)

Training Status (Training.status)

Training Participant Attendance (Training.participants[].attendance_status)

KPI Rating (KPI.rating, CompanyKPI.rating)

KPI Status (KPI.status, CompanyKPI.status)

KPI Calculation Method (KPITemplate.default_metrics[].calculation_method)

KPI Aggregation Method (KPITemplate.default_metrics[].auto_source.aggregation)

KPI Calculation Frequency (KPITemplate.calculation_frequency)

Time Entry Status (TimeEntry.status)

Applicant Pipeline Status (Applicant.current_status)

Offer Letter Status (OfferLetter.status)

Offer Acceptance Status (OfferLetter.acceptance_status)

Offer Employment Type (OfferLetter.employment_type)

Himpitan dari enum Employee.employment_type — tawaran kerja belum mendukung status magang.

Performance Review Type (PerformanceReview.review_type)

Performance Review Rating (PerformanceReview.rating)

Performance Review Status (PerformanceReview.status)

Approval Workflow Document Type (ApprovalWorkflow.document_type)

Approval Request Status (ApprovalRequest.overall_status)

Approval History Level Status (ApprovalRequest.approval_history[].status)

Kode Hari Kerja (CompanyAttendanceSettings.working_days[])

Default working_days adalah [1,2,3,4,5] (Senin–Jumat). Nilai di luar array dianggap hari libur sehingga tidak dihitung sebagai working_days pada perhitungan prorasi CompanyPayroll.

Hak Akses RBAC — Modul HR

Tabel berikut merinci hak akses setiap peran terhadap entitas dan fitur dalam modul HR.

Keterangan Hak Akses RBAC

Row-Level Security (RLS) Summary

Seluruh entitas HR menggunakan Row-Level Security (RLS) dari base44 untuk memastikan isolasi data multi-tenant:
Pola OR created_by_id = current user pada entitas rekrutmen & penilaian berarti pembuat data selalu dapat membaca barisnya sendiri meskipun ia tidak memegang role HR. Entri bertanda aturan RLS kosong ({}) tidak memfilter baris berdasarkan field. Artinya: setiap user yang sudah login secara teknis memenuhi syarat RLS, sehingga validasi company_id dan role WAJIB tetap dilakukan di dalam server-function. Jangan pernah membaca entitas-entitas ini langsung dari client tanpa fungsi backend.

Matriks RBAC Detail (Role × Entitas × Operasi)

Tabel berikut memecah matriks di atas menjadi level operasi CRUD per entitas. Simbol: ✅ = boleh, ❌ = tidak boleh, 🔃 = boleh dengan batasan scope (own/tim), ⭐ = hanya lewat server-function dengan validasi tambahan.

Aturan Override & Eskalasi