Files
api-wipay/BUSINESS_LOGIC.md

14 KiB

Logika Bisnis TIMO WIPAY API

Dokumen ini menjelaskan alur bisnis dan logika aplikasi TIMO WIPAY secara lengkap.

1. User Management (Manajemen Pengguna)

1.1 Registrasi User (/timo/daftar)

Flow:

  1. User input: nama, username, email, no_hp, password
  2. Validasi: username dan email harus unik
  3. Set default biaya_admin = 2500
  4. Password di-hash dengan MD5
  5. Insert ke tabel pengguna_timo
  6. Response: status 200 jika berhasil

Business Rules:

  • Username tidak boleh duplikat
  • Email tidak boleh duplikat
  • Biaya admin default: Rp 2.500

1.2 Login (/timo/login atau /timo/login_token)

Flow:

  1. User input: username, password, fcm_token (opsional)
  2. Validasi username & password (MD5)
  3. Update FCM token jika ada
  4. Ambil daftar SL user
  5. Response: user object + data_sl array

Business Rules:

  • Password di-hash MD5 untuk validasi
  • FCM token untuk push notification
  • Return semua SL yang terdaftar di akun user

1.3 Update Akun (/timo/update_akun)

Flow:

  1. Update data user: nama_lengkap, email, no_hp
  2. Validasi token user
  3. Update database
  4. Response: data user terbaru

1.4 Update Password (/timo/update_password)

Flow:

  1. Validasi password lama (MD5)
  2. Update password baru (MD5)
  3. Response: status sukses/gagal

2. Service Line (SL) Management

2.1 Cek SL (/timo/cek_sl)

Flow:

  1. Input: token, no_sl
  2. Validasi:
    • SL tidak boleh sudah terdaftar oleh user lain (status 300)
  3. Cek ke API TIMO: enquiry-dil/{no_sl}
  4. Response: data pelanggan dari TIMO API

Business Rules:

  • Satu akun bisa multiple SL
  • Harus valid di sistem TIMO PDAM

2.2 Confirm SL (/timo/confirm_sl)

Flow:

  1. Input: token, no_sl
  2. Cek apakah sudah terdaftar (jika ya, return status 300)
  3. Cek ke API TIMO: enquiry-dil/{no_sl}
  4. Simpan ke daftar_sl dengan data dari TIMO:
    • pel_namanama
    • pel_alamatalamat
    • dkd_kdcabang
    • rek_golgolongan
  5. Response: data SL yang baru terdaftar

Business Rules:

  • Data SL diambil dari sistem TIMO PDAM
  • SL terikat dengan token user

2.3 Hapus SL (/timo/hapus_sl)

Flow:

  1. Input: token, no_sl
  2. Validasi: SL harus terdaftar di akun user ini
  3. Delete dari daftar_sl
  4. Response: status sukses

3. Tagihan Management

3.1 History Tagihan (/timo/history/{sl}/{periode})

Flow:

  1. Input: sl, periode (dari URL path)
  2. Call TIMO API: enquiry-his/{sl}/{periode}
  3. Response: data history tagihan

3.2 Tagihan Saat Ini (/timo/tagihan/{sl})

Flow:

  1. Input: sl (dari URL path)
  2. Call TIMO API: enquiry/{sl}
  3. Response: data tagihan aktif

Business Rules:

  • Data tagihan real-time dari TIMO PDAM
  • Bisa multiple tagihan per SL

4. Payment Flow (Alur Pembayaran)

4.1 Request Pembayaran (/timo/request_pembayaran)

Flow:

  1. Input: token, no_sl, nama_bank, no_rek
  2. Validasi token user
  3. Cek pembayaran aktif:
    • Jika ada pembayaran dengan status DIBUAT dan belum expired → return pembayaran tersebut
    • Jika ada pembayaran expired → update status ke EXPIRED
  4. Buat pembayaran baru:
    • Call TIMO API: enquiry/{no_sl} untuk ambil tagihan
    • Hitung total tagihan + biaya admin
    • Generate kode unik prioritas
    • Set expired: +1 hari dari sekarang
    • Status: DIBUAT
  5. Response: data pembayaran dengan no_trx, total, expired time

Business Rules:

  • Satu SL hanya boleh punya 1 pembayaran aktif (DIBUAT)
  • Pembayaran expired otomatis setelah 1 hari
  • Kode unik untuk identifikasi transfer
  • Biaya admin per tagihan

4.2 Cek Pembayaran (/timo/cek_pembayaran)

Flow:

  1. Input: token, no_sl
  2. Cari pembayaran dengan status DIBUAT atau MENUNGGU VERIFIKASI
  3. Response: data pembayaran jika ada

Business Rules:

  • User bisa cek status pembayaran kapan saja
  • Status yang bisa dicek: DIBUAT, MENUNGGU VERIFIKASI

4.3 Cek Transfer (/timo/cek_transfer)

Flow:

  1. Input: token, no_sl
  2. Cari pembayaran dengan status MENUNGGU VERIFIKASI
  3. Update:
    • tanggal_cek_bayar = sekarang
    • banyak_cek = increment
  4. Response: data pembayaran

Business Rules:

  • User bisa cek transfer berkali-kali
  • Tracking berapa kali user cek pembayaran

4.4 Upload Bukti Transfer (/timo/upload_bukti_transfer)

Flow:

  1. Input: token, no_sl, pembayaran (no_trx), photo (base64)
  2. Upload foto bukti transfer
  3. Update bukti_transfer di tabel pembayaran
  4. Response: status sukses

Business Rules:

  • Bukti transfer diperlukan untuk verifikasi manual
  • Foto disimpan di assets/uploads/bukti_transfer/

4.5 Batal Pembayaran (/timo/batal_pembayaran)

Flow:

  1. Input: token, no_sl
  2. Cari pembayaran dengan status DIBUAT
  3. Update status ke DIBATALKAN
  4. Response: status 200 (tapi pesan tetap default error message - sesuai API lama)

Business Rules:

  • Hanya pembayaran dengan status DIBUAT yang bisa dibatalkan
  • Setelah dibatalkan, user bisa buat pembayaran baru

4.6 Confirm Pembayaran (/timo/confirm_pembayaran)

Flow:

  1. Input: token, no_sl
  2. Cari pembayaran dengan status MENUNGGU VERIFIKASI
  3. Update status ke DIBAYAR
  4. Response: status 200 (tapi pesan tetap default error message - sesuai API lama)

Business Rules:

  • Hanya admin yang bisa confirm (via /site/approve)
  • Endpoint ini untuk tracking saja

4.7 History Bayar (/timo/history_bayar)

Flow:

  1. Input: token
  2. Ambil semua pembayaran user dengan status DIBAYAR
  3. Response: array history pembayaran

5. Payment Processing (Admin)

5.1 Approve Pembayaran (/site/approve/{id_trx})

Flow:

  1. Input: id_trx (dari URL path)
  2. Cari pembayaran dengan status MENUNGGU VERIFIKASI
  3. Prepare data payment:
    • Ambil raw_data (rincian tagihan)
    • Format: rek_nomor, rek_total, serial, byr_tgl, loket
  4. Call TIMO API: payment/{token}
  5. Jika sukses:
    • Update status ke DIBAYAR
    • Set tanggal_bayar = sekarang
    • Set jumlah_bayar = total
  6. Response: status sukses/gagal

Business Rules:

  • Hanya admin yang bisa approve
  • Payment langsung ke PDAM via TIMO API
  • Setelah approve, pembayaran tidak bisa dibatalkan

5.2 Verify BRI (/site/verify_bri)

Flow:

  1. Ambil token BRI
  2. Cari pembayaran BRI dengan status MENUNGGU VERIFIKASI dan banyak_cek < 2
  3. Call BRI API untuk ambil mutasi rekening
  4. Bandingkan jumlah transfer dengan total pembayaran
  5. Jika cocok:
    • Update status ke DIBAYAR
    • Auto approve pembayaran
  6. Response: HTML message (sesuai API lama)

Business Rules:

  • Verifikasi otomatis via BRI API
  • Maksimal 2x cek per pembayaran
  • Auto approve jika jumlah cocok

6. WIPAY Integration

6.1 Cek WIPAY (/timo/cek_wipay)

Flow:

  1. Input: token
  2. Cek apakah user punya akun WIPAY
  3. Response: data WIPAY jika ada

Business Rules:

  • WIPAY terikat dengan user via pengguna_timo.wipay

6.2 Buat Kode Unik (/timo/buat_kode)

Flow:

  1. Input: token
  2. Generate kode unik untuk pembayaran
  3. Response: kode unik

Business Rules:

  • Kode unik untuk identifikasi transfer
  • Format: angka random dengan prioritas tertentu

6.3 Cek Kode (/timo/cek_kode)

Flow:

  1. Input: token, kode
  2. Validasi kode unik
  3. Response: status valid/tidak valid

6.4 Reset Kode (/timo/reset_kode)

Flow:

  1. Input: token, kode, password_baru
  2. Validasi kode
  3. Update password user
  4. Response: status sukses

7. Fast WIPAY API (External)

7.1 Check Bill (/fast/check_bill)

Flow:

  1. Auth: API Key (X-Client-ID, X-Client-Secret)
  2. Input: no_sl
  3. Get admin user → timo user
  4. Call TIMO API: enquiry/{no_sl}
  5. Response: data tagihan

Business Rules:

  • Hanya untuk partner/merchant dengan API Key
  • Menggunakan timo user dari admin user

7.2 Process Payment (/fast/process_payment)

Flow:

  1. Auth: API Key
  2. Input: no_sl, amount
  3. Validasi saldo WIPAY admin user
  4. Cek tagihan via TIMO API
  5. Jika saldo cukup:
    • Deduct saldo WIPAY
    • Call TIMO API: payment/{token}
    • Simpan pembayaran dengan status DIBAYAR
  6. Response: data pembayaran

Business Rules:

  • Payment langsung dari saldo WIPAY
  • Tidak perlu verifikasi manual
  • Status langsung DIBAYAR

7.3 Payment Status (/fast/payment_status)

Flow:

  1. Auth: API Key
  2. Input: transaction_id atau pembayaran_id
  3. Cari pembayaran berdasarkan API Key
  4. Response: status pembayaran

7.4 Check WIPAY Saldo (/fast/check_wipay_saldo)

Flow:

  1. Auth: API Key
  2. Get admin user → timo user → wipay user
  3. Hitung saldo dari mutasi terakhir
  4. Response: saldo WIPAY

8. Complaint/Gangguan Management

8.1 Upload Gangguan (/timo/upload_gangguan)

Flow:

  1. Input: token, no_sl, gangguan (id jenis), feedback, lokasi, photo (opsional)
  2. Validasi jenis gangguan (harus ada foto jika harus_ada_foto = 'YA')
  3. Insert ke gangguan dengan status DILAPORKAN
  4. Upload foto jika diperlukan
  5. Kirim ke external API: pengaduan/{no_sl}
  6. Kirim notifikasi Telegram ke admin gangguan
  7. Response: status sukses

Business Rules:

  • Beberapa jenis gangguan wajib ada foto
  • Status awal: DILAPORKAN
  • Setelah kirim ke external API: status DIPROSES
  • Notifikasi ke admin gangguan via Telegram

8.2 History Gangguan (/timo/history_gangguan)

Flow:

  1. Input: token
  2. Ambil semua gangguan user
  3. Response: array history gangguan

9. Upload Features

9.1 Upload Catat Meter (/timo/upload_catat_meter)

Flow:

  1. Input: token, no_sl, angka, photo (base64)
  2. Upload foto catat meter
  3. Simpan ke catat_meter
  4. Kirim ke external API: upload-catat-meter/{no_sl}
  5. Response: status sukses

Business Rules:

  • User bisa upload catat meter mandiri
  • Data dikirim ke sistem Rasamala

9.2 Upload Pasang Baru (/timo/upload_pasang_baru)

Flow:

  1. Input: token, no_sl, nama, email, telepon, nik, alamat, photo
  2. Upload foto
  3. Simpan ke pasang_baru
  4. Kirim ke external API: push-registrasi
  5. Jika berhasil, dapat reg_id (no SL baru)
  6. Auto insert ke daftar_sl jika dapat no SL
  7. Response: status sukses

Business Rules:

  • Registrasi pasang baru via aplikasi
  • Auto daftarkan SL jika registrasi berhasil

9.3 Upload Baca Mandiri (/timo/upload_baca_mandiri)

Flow:

  1. Input: token, wrute_id, stand_baca, abnorm_wm, abnorm_env, note, lonkor, latkor
  2. Validasi koordinat (GPS > Geocoding > Default)
  3. Kirim ke external API: upload-cater/{wrute_id}
  4. Simpan ke baca_mandiri_log
  5. Response: status sukses

Business Rules:

  • Untuk petugas baca meter
  • Koordinat wajib (GPS atau geocoding)
  • Data dikirim ke sistem Rasamala

10. Payment Status Flow

Status Pembayaran:

  1. DIBUAT → Pembayaran baru dibuat, menunggu transfer
  2. MENUNGGU VERIFIKASI → Bukti transfer sudah diupload, menunggu verifikasi admin
  3. DIBAYAR → Pembayaran sudah diverifikasi dan diapprove ke PDAM
  4. DIBATALKAN → User membatalkan pembayaran
  5. EXPIRED → Pembayaran sudah expired (lebih dari 1 hari)

Flow Diagram:

DIBUAT
  ↓ (upload bukti transfer)
MENUNGGU VERIFIKASI
  ↓ (admin approve / BRI auto verify)
DIBAYAR

DIBUAT
  ↓ (user batal / expired)
DIBATALKAN / EXPIRED

11. External API Integration Flow

11.1 TIMO PDAM API

  • Enquiry: Cek tagihan, history, data pelanggan
  • Payment: Proses pembayaran ke PDAM
  • Push Registrasi: Registrasi pasang baru

11.2 Rasamala API

  • Upload Catat Meter: Kirim data catat meter mandiri
  • Order Cater: Request order baca mandiri
  • Upload Cater: Upload hasil baca mandiri

11.3 BRI API

  • Token: Ambil access token
  • Mutasi: Cek mutasi rekening untuk verifikasi pembayaran

11.4 WhatsApp API

  • Send Message: Kirim notifikasi ke user (reset password, dll)

11.5 Telegram API

  • Send Message: Kirim notifikasi ke admin (transaksi baru, gangguan)

12. Business Rules Summary

User & SL

  • Satu user bisa punya multiple SL
  • Satu SL hanya bisa terdaftar ke satu user
  • SL harus valid di sistem TIMO PDAM

Pembayaran

  • Satu SL hanya boleh punya 1 pembayaran aktif (DIBUAT)
  • Pembayaran expired setelah 1 hari
  • Biaya admin per tagihan
  • Kode unik untuk identifikasi transfer

WIPAY

  • Payment langsung dari saldo WIPAY
  • Tidak perlu verifikasi manual
  • Auto approve jika saldo cukup

Gangguan

  • Beberapa jenis gangguan wajib ada foto
  • Auto kirim ke sistem pengaduan PDAM
  • Notifikasi ke admin via Telegram

Upload

  • Semua upload menggunakan base64 encoding
  • Foto disimpan di folder assets/uploads/
  • Data dikirim ke external API untuk sinkronisasi

13. Security & Authentication

Internal API (/timo/*)

  • Auth: Token user (id_pengguna_timo)
  • Validasi di setiap endpoint

External API (/fast/*)

  • Auth: API Key (X-Client-ID, X-Client-Secret)
  • Middleware: ApiKeyMiddleware
  • Logging: Semua request di-log

Admin API (/site/*)

  • No auth (bisa ditambahkan session auth jika diperlukan)
  • Untuk verifikasi dan approve pembayaran

14. Error Handling

  • Semua error return JSON dengan format konsisten
  • Status code sesuai HTTP standard
  • Error message dalam bahasa Indonesia
  • Logging untuk debugging

15. Data Flow Summary

User Registration → Login → Add SL → Request Payment →
Upload Bukti Transfer → Admin Verify → Approve → Payment to PDAM

User → Upload Gangguan → External API → Admin Notification (Telegram)

User → Upload Catat Meter → External API (Rasamala)

Fast API → Check Bill → Process Payment (WIPAY) → Payment to PDAM