4.8 KiB
4.8 KiB
Setrip — Admin Verification Roadmap (ARCHIVED — DELIVERED 2026-05-18)
Enhancement KYC organizer verification: reopen REJECTED, request re-upload, history, manual override.
Status delivery
| Phase | Status | Catatan |
|---|---|---|
| Phase 1 — Reopen Rejected | ✅ Delivered | Tombol "Buka kembali ke PENDING" di REJECTED card dengan note wajib. |
| Phase 2 — Re-upload Request | ✅ Delivered | Admin pilih checkbox field (KTP/liveness/NIK/bank/alamat) + note. Organizer dapat banner kuning di /verify dengan highlight field yang diminta. Auto-clear saat submit ulang. |
| Phase 3 — Submission History | ✅ Delivered | Field submissionCount di-bump tiap submit ulang. previousRejections JSON array menyimpan rejection lama (waktu + reason + submission ke-N) sebelum overwrite. |
| Phase 4 — Manual Override | ✅ Delivered | Admin verify user tanpa upload KYC (partner trusted). Flag isManualOverride = true untuk audit transparansi. UI di /admin/users/[id]. |
Phase 1 — Reopen Rejected ✅
| # | Item | Status | File |
|---|---|---|---|
| 1.1 | organizerService.reopenVerification |
✅ | server/services/organizer.service.ts |
| 1.2 | organizerRepo.reopen |
✅ | server/repositories/organizer.repo.ts |
| 1.3 | reopenVerificationAction (guard isAdmin + audit log) |
✅ | features/organizer/actions.ts |
| 1.4 | UI tombol di REJECTED card | ✅ | features/organizer/components/review-card.tsx |
Phase 2 — Re-upload Request ✅
| # | Item | Status | File |
|---|---|---|---|
| 2.1 | Migration: reuploadRequested, reuploadFields String[], reuploadNote |
✅ | prisma/migrations/20260518190000_verification_enhancements/ |
| 2.2 | organizerService.requestReupload(verifId, adminId, fields, note) + REUPLOAD_FIELDS enum-like const |
✅ | server/services/organizer.service.ts |
| 2.3 | organizerRepo.requestReupload (set status PENDING + flag + clear review) |
✅ | server/repositories/organizer.repo.ts |
| 2.4 | requestReuploadAction (guard isAdmin + audit log) |
✅ | features/organizer/actions.ts |
| 2.5 | UI admin di PENDING card: tombol "🔄 Minta re-upload" + multi-checkbox field + note | ✅ | features/organizer/components/review-card.tsx |
| 2.6 | Banner kuning di /verify saat reuploadRequested = true + list field yang diminta |
✅ | app/(public)/verify/page.tsx |
| 2.7 | Auto-clear flag saat organizer submit ulang (logic di submitVerification) |
✅ | server/services/organizer.service.ts |
Phase 3 — Submission History ✅
| # | Item | Status | File |
|---|---|---|---|
| 3.1 | Migration: submissionCount Int @default(1), previousRejections Json? |
✅ | prisma/migrations/20260518190000_verification_enhancements/ |
| 3.2 | Bump submissionCount + archive rejection lama saat submit ulang (helper buildArchivedRejections) |
✅ | server/services/organizer.service.ts |
Catatan: snapshot full data (Phase 3.1 di roadmap awal) di-skip —
submissionCount+previousRejections(array waktu/reason) cukup untuk audit "berapa kali verify, apa reason ditolak sebelumnya". UI history detail bisa ditambah saat ada permintaan konkret.
Phase 4 — Manual Override ✅
| # | Item | Status | File |
|---|---|---|---|
| 4.1 | Migration: isManualOverride Boolean @default(false), manualOverrideById, manualOverrideNote |
✅ | prisma/migrations/20260518190000_verification_enhancements/ |
| 4.2 | organizerService.manualOverrideVerification(input) — bikin row APPROVED dengan placeholder KYC |
✅ | server/services/organizer.service.ts |
| 4.3 | organizerRepo.createManualOverride |
✅ | server/repositories/organizer.repo.ts |
| 4.4 | manualOverrideVerificationAction (guard isAdmin + audit log) |
✅ | features/organizer/actions.ts |
| 4.5 | UI: ManualVerifyButton di /admin/users/[id] (hanya tampil kalau user belum punya verification) |
✅ | features/admin/components/manual-verify-button.tsx |
Tindakan manual ops:
- Apply migration:
npx prisma migrate deploy. - Brief admin: re-upload request lebih lembut dari reject (organizer tidak perlu ulang dari nol). Manual override hanya untuk partner trusted dengan ref konkret di note (mis. nomor kontrak).