Sentra Rental — Ops (Security + Deployment + Testing)¶
Security — Rental Delta¶
Baseline security patterns:
_shared/security-patterns.md
Overrides¶
- (no overrides — Rental uses baseline JWT + RBAC patterns)
Tambahan Sistem-Spesifik¶
- KTP OCR + Face Match Anti-Fraud: Integrasi Verihubs / PrivyID API untuk validasi NIK langsung ke Dukcapil dan face match liveness test ≥ 95%. Mencegah kasus pelarian aset oleh sindikat sewa palsu.
- Blacklist Rental Nasional: Integrasi API blacklist antar pengusaha rental se-Indonesia. Customer dengan KTP yang pernah menjadi pelaku fraud di platform rental lain akan ditolak otomatis saat booking.
- SHA-256 Tamper-Proof Inspection Hash: Setiap payload inspeksi handover (JSON checklist + URL foto S3 + tanda tangan + timestamp) di-hash SHA-256 dan ditandatangani private key server. Disimpan di
handover_inspections.tamper_proof_hash. Jika record database diubah secara internal, hash tidak cocok dan memicu security alert ke Owner dashboard. - S3 Photo Immutability: Foto inspeksi di-upload ke S3 bucket dengan Object Lock (WORM — Write Once Read Many) policy. File tidak dapat dihapus atau di-overwrite sebelum periode retensi 5 tahun.
- Deposit Pre-Auth Audit Log: Setiap aksi pada deposit (hold, capture, void, release) dicatat di tabel
deposit_audit_logsdengan timestamp, actor_id, dan gateway response body. Tidak dapat dihapus (append-only).
Deployment — Rental Delta¶
Baseline deployment:
_shared/deployment-baseline.md
Overrides¶
- (no overrides — Rental uses standard AWS EKS multi-AZ baseline)
Tambahan Sistem-Spesifik¶
- Inspector Mobile App Distribution: React Native + Expo build didistribusikan via Expo EAS (OTA update) dan Google Play Store internal track. Update OTA untuk bug fix minor tidak memerlukan Play Store review cycle.
- Offline Queue Resilience: Inspector mobile menyimpan foto ke device local storage (Expo FileSystem) saat offline. Upload queue diproses saat koneksi pulih menggunakan
expo-background-fetch. Jika upload gagal 3× berturut-turut, alert dikirim ke admin cabang. - Backup S3 Foto Inspeksi: Foto inspeksi di-replicate ke region AWS kedua (disaster recovery) secara asinkron. Recovery Point Objective (RPO) = 1 jam.
- Cadangan Database: Backup PostgreSQL otomatis per jam ke S3 Cold Storage dengan retensi 365 hari (kepatuhan audit perpajakan).
Testing Checklist (QA)¶
QA Skenario Fungsional Rental¶
| ID | Modul | Skenario | Hasil yang Diharapkan | Status |
|---|---|---|---|---|
| QA-TC-001 | Booking Concurrency | 100 user memesan kamera yang sama tanggal yang sama secara serentak | 1 user berhasil, 99 lainnya terima 409 "Aset telah dibooking" dengan anggun | READY |
| QA-TC-002 | Payment Timeout | User buat draf booking, Redis lock aktif, lalu tutup app tanpa bayar | Setelah 15 menit, status → CANCELLED, Redis lock dilepas, bitmask direset, aset kembali tersedia | READY |
| QA-TC-003 | Offline Mobile Sync | Inspector check-out di basement tanpa koneksi internet | App simpan data + foto lokal di SQLite/FileSystem; saat sinyal kembali, upload otomatis ke S3 tanpa kehilangan data | READY |
| QA-TC-004 | Late Return Surcharge | Mengembalikan mobil terlambat 6 jam | Sistem kenakan denda Daily Rate × 1.5 (formula h > 5 jam) secara akurat | READY |
| QA-TC-005 | Deposit Pre-Auth | Booking dengan kartu kredit, return bersih | Pre-auth void dalam 24 jam setelah COMPLETED, tidak ada debet ke kartu pelanggan | READY |
| QA-TC-006 | Tamper Detection | Admin mengubah damage_fee_applied langsung di DB |
System mendeteksi hash mismatch, trigger security alert ke Owner | READY |
QA Skenario Beban & Keandalan¶
- Redlock Stress Test: 500 concurrent booking request untuk 50 unit berbeda — verifikasi tidak ada double booking.
- Bitmask Consistency Test: Setelah 1000 booking dan 500 cancellation acak, verifikasi bitmask Redis konsisten dengan data tabel
booking_detailsdi PostgreSQL. - S3 Upload Resilience: Simulasi jaringan putus-nyambung saat upload 20 foto — verifikasi semua foto berhasil terupload tanpa duplikasi.