Files
setrip/docs/archive/ADMIN_PAYMENT_OPS_ROADMAP.md
T

3.8 KiB

Setrip — Admin Payment Operations Roadmap (ARCHIVED — DELIVERED 2026-05-18)

Admin perlu visibilitas + kontrol penuh atas alur uang: payment Midtrans, refund, payout. Saat webhook gagal atau status mismatch, admin harus bisa reconcile tanpa edit DB.

Skenario nyata: webhook Midtrans drop di production. Booking.status = AWAITING_PAY padahal user sudah bayar (confirm email dari Midtrans). User komplain via WhatsApp. Saat ini admin harus query DB manual lalu update via Prisma Studio.


Status delivery

Phase Status Catatan
Phase 1 — Booking + Payment Detail View Delivered Timeline lintas Payment + Refund + Payout dengan raw callback viewer.
Phase 2 — Admin Midtrans Reconcile UI Delivered Tombol reconcile per Payment Midtrans, panggil Core API + apply state-machine. Bulk reconcile deferred.
Phase 3 — Dispute & Chargeback Tracking Deferred Enum DISPUTE_RESOLVED sudah ada — admin bisa pakai existing flow refund. UI filter khusus bisa ditambah nanti.

Phase 1 — Booking + Payment Detail View

# Item Status File
1.1 bookingRepo.findByIdForAdmin(id) — include payments (with raw), refunds, payout, trip, user server/repositories/booking.repo.ts
1.2 Page /admin/bookings/[id] — header booking + timeline events app/admin/bookings/[id]/page.tsx
1.3 Inline timeline (Payment + Refund + Payout) sorted by createdAt — implemented inline di page app/admin/bookings/[id]/page.tsx
1.4 Component RawCallbackViewer — collapsible JSON pretty-printed features/booking/components/raw-callback-viewer.tsx
1.5 Link "Lihat timeline" dari /admin/refunds ke /admin/bookings/[id] features/refund/components/refund-review-card.tsx
1.6 Link "Lihat timeline" dari /admin/payouts ke /admin/bookings/[id] features/payout/components/payout-review-card.tsx

Phase 2 — Admin Midtrans Reconciliation UI

# Item Status File
2.1 paymentService.adminReconcile(orderId) — variant tanpa ownership check, reuse applyGatewayStatus helper server/services/payment.service.ts
2.2 Server action adminReconcileMidtransAction(orderId) (guard isAdmin) features/booking/actions.ts
2.3 Component AdminReconcileButton per Payment Midtrans di timeline features/booking/components/admin-reconcile-button.tsx
2.4 Tampilkan Payment.rejectionReason (amount mismatch log) di card payment app/admin/bookings/[id]/page.tsx
2.5 Bulk reconcile: /admin/payments/stale — list Payment AWAITING > 6 jam Deferred — admin bisa filter manual via list saat itu butuh, tidak ada incident concrete yang minta bulk.

Tindakan manual yang masih perlu dilakukan ops:

  1. Brief admin: kapan pakai tombol "Reconcile Midtrans" — saat peserta lapor "sudah bayar tapi status belum update".
  2. Tombol idempotent — aman ditekan berkali-kali. Tidak menggandakan payment.
  3. Pakai RawCallbackViewer untuk inspeksi error gateway / metadata transaksi saat investigasi dispute.

Phase 3 — Dispute & Chargeback Tracking (deferred)

Lihat versi awal di ADMIN_ROADMAP.md. Akan diangkat kembali kalau volume chargeback membesar.