# Operasi SaaS CAP Workforce

## Membuat tenant perusahaan

1. Login ke `/platform/login` memakai akun platform.
2. Buka **Companies**, lalu isi nama perusahaan, slug portal, email, paket, dan batas karyawan.
3. Setelah tenant dibuat, buka `/{slug}` dan login memakai akun owner yang dibuat saat provisioning.
4. Owner/HRD melengkapi identitas dan logo perusahaan, lokasi kerja, shift, departemen beserta Head Department, jabatan, rekening bank, serta data karyawan.
5. Set komponen payroll, tanggal cutoff, hari kerja, batas perangkat, lalu lakukan satu simulasi periode sebelum go-live.

Data tenant ditandai `company_id` dan query model tenant memakai global scope. Middleware tenant membatasi portal berdasarkan slug perusahaan. Platform admin berada di area terpisah dan tidak memakai portal tenant untuk operasi harian.

## Siklus operasional HRD

1. Kelola kalender hari libur, shift, lokasi, proyek, crew, serta freelancer/daily worker dan fee hariannya per proyek.
2. Karyawan melakukan absensi dengan kamera langsung dan GPS dari perangkat terdaftar.
3. HRD memeriksa security center, koreksi, cuti/izin/sakit, serta lembur.
4. Setelah cutoff, HRD generate payroll dan mengirim draft ke review.
5. User Finance/Owner yang berbeda menyetujui payroll (maker-checker), lalu payroll difinalisasi.
6. Finance mengunduh Excel/CSV bank, ledger freelancer, dan export BPJS; karyawan menerima payslip PDF berlogo tenant dari portal web maupun Android.

Karyawan yang masuk pada public holiday dapat mengajukan tanggal libur pengganti paling lambat H-2. Head Department hanya dapat menyetujui anggota departemennya, sedangkan Manager HRD dapat memproses seluruh tenant. Setelah disetujui, tanggal merah menjadi hari masuk dan tanggal pengganti diblokir sebagai hari libur karyawan tersebut.

## Onboarding Android

1. Distribusikan signed APK/AAB perusahaan.
2. Isi endpoint API tenant pada layar login jika build tidak memakai endpoint tetap.
3. Login pertama mendaftarkan UUID perangkat; HRD dapat membatasi jumlah perangkat aktif dan mencabut perangkat melalui Security Center.
4. Android membuka kamera depan secara langsung. Foto dari galeri tidak disediakan pada flow resmi.

## Batas kontrol kamera

Web dan Android resmi memaksa alur pengambilan dari kamera. Token tangkapan web berumur pendek dan divalidasi server. Namun server internet tidak dapat membuktikan secara kriptografis bahwa byte gambar tidak dimanipulasi oleh client yang sudah di-root atau aplikasi palsu. Untuk kebutuhan risiko tinggi, tambahkan Play Integrity/device attestation dan liveness/face matching dari vendor terverifikasi.

## Rutinitas minimum

- Harian: pantau `/up`, error log, queue, kapasitas disk, dan aktivitas risiko tinggi.
- Mingguan: uji sampel ekspor, perangkat dicabut, user tidak aktif, serta pemulihan satu file foto.
- Bulanan: backup sebelum payroll final, rekonsiliasi bank, dan audit approval maker-checker.
- Berkala: patch PHP/Laravel/Node/Android, rotasi secret, penetration test, dan restore drill database beserta storage.
