Lewati ke isi

Sentra Rental — Deposit & Fine Module

Deposit adalah jaminan finansial utama untuk mengurangi risiko gagal bayar dan kerusakan aset. Modul ini mengelola seluruh siklus hidup deposit dari penahanan hingga pelepasan atau penyitaan.

13.1 Deposit Lifecycle

graph TD
    A[Booking Dibuat] --> B[Customer Bayar Biaya Rental + Deposit]
    B --> C[Pre-Auth Hold di Payment Gateway — Xendit/Midtrans]
    C --> D[Masa Rental Berjalan]
    D --> E[Unit Kembali ke Cabang]
    E --> F{Inspeksi Return Clear?}
    F -- Ya --> G[Release Pre-Auth — Refund 100% dalam 10 Menit]
    F -- Tidak --> H[Hitung Biaya Denda / Kerusakan]
    H --> I{Denda <= Amount Held?}
    I -- Ya --> J[Capture Partial — Sisa Deposit Direfund ke Customer]
    I -- Tidak --> K[Capture 100% Deposit + Tagih Kekurangan ke Customer]

13.2 Mekanisme Pre-Authorization

Hold (saat booking dibayar)

POST Xendit /credit_cards/charges
{
  "amount": 500000,
  "capture": false,          ← pre-auth, tidak langsung debet
  "description": "Deposit SR/20260521/00042"
}
→ Response: { "id": "charge_xyz", "status": "AUTHORIZED" }

ID charge disimpan di tabel deposits.payment_gateway_ref.

Capture (saat kerusakan/keterlambatan dikonfirmasi)

POST Xendit /credit_cards/charges/charge_xyz/capture
{
  "capture_amount": 350000   ← hanya capture sebesar denda
}

Release (saat rental selesai tanpa insiden)

POST Xendit /credit_cards/charges/charge_xyz/void

Release otomatis juga terjadi jika dalam 24 jam setelah status COMPLETED admin belum melakukan capture manual.

13.3 Perhitungan Denda Keterlambatan

Formula denda berdasarkan total jam keterlambatan ($h$) dihitung dari menit aktual ($t$):

$$\text{Denda Keterlambatan} = \begin{cases} 0, & \text{jika } t < 60 \text{ menit (grace period)} \ h \times 0.1 \times \text{Daily Rate}, & \text{jika } 1 \le h \le 5 \ \text{Daily Rate} \times 1.5, & \text{jika } h > 5 \end{cases}$$

Contoh: Avanza (Daily Rate Rp 350.000), terlambat 6 jam:

$$\text{Denda} = \text{Rp } 350.000 \times 1.5 = \text{Rp } 525.000$$

13.4 Damage Tariff Matrix (Katalog Denda Kerusakan)

Komponen Tingkat Kerusakan Tarif Ganti Rugi
Cat / Body mobil per panel Baret halus Rp 350.000
Bumper mobil Penyok minor Rp 750.000
Kaca depan Retak/pecah Rp 1.500.000
Lensa kamera Berjamur Rp 500.000
Filter UV kamera Retak Rp 150.000
Drone propeller Patah 1 baling-baling Rp 200.000
Konsol PS5 Goresan casing Rp 300.000
Barang hilang Apapun Harga pasar current × 1.2

Katalog disimpan di tabel damage_tariffs dan dapat diupdate admin tanpa deploy ulang.

13.5 Dispute Resolution Flow

Pelanggan yang tidak setuju dengan penilaian kerusakan dapat mengajukan banding:

1. Customer → Ajukan dispute via app
2. Admin → Tarik arsip foto check-out dari S3 (SHA-256 verified)
3. System → Bandingkan hash foto check-out vs check-in
4. Admin + Customer → Review foto side-by-side di console

Jika kerusakan terbukti baru:
  → Deposit capture dipertahankan, pelanggan tanda tangan persetujuan digital

Jika kerusakan terbukti sudah ada sebelumnya (false positive):
  → Admin batalkan denda, release deposit penuh, catat insiden ke log audit

Seluruh bukti foto di S3 bersifat immutable — hash SHA-256 dicocokkan saat dispute untuk membuktikan integritas data.

13.6 Escrow & Rekonsiliasi

  • Uang deposit tidak masuk ke rekening operasional cabang. Dana dihold di virtual account escrow payment gateway hingga ada instruksi release/capture eksplisit dari sistem.
  • Laporan rekonsiliasi deposit digenerate otomatis setiap hari pukul 23:59 WIB — membandingkan status di database (deposits table) vs status di dashboard payment gateway API.
  • Selisih yang ditemukan memicu alert notifikasi ke owner dan tim keuangan.