admin-mvp-1-ia-handover.html · Stack: React 19 + TanStack Start (SPA) · shadcn amber b1MJ9vRwY6 · light-mode iter-1
2 financial flow · cancel wizard adaptif per initiator (klik initiator buat liat flow beda) · period-close stepper dengan blocker · light mode · Indonesian · WIB
Bracket charge: <1h 100% / <2h 50% / <4h 25% / ≥4h 0. Charge siswa + honor tutor proporsional. Transport Rp 0 (tutor gak berangkat).
2 cabang: α self-sub (tutor cari pengganti komunitas → CLEAN, no penalty/strike) atau β escalate (zero pay + denda graduated 100/50/25% + 1 strike, denda = revenue XPrivate). Sheet kasih pilih cabang.
Ops reason (mis. tutor sakit confirmed, jadwal bentrok). Default no-penalty, ADMIN discretion. Alasan wajib.
Zero penalty pending. Masuk FM workflow L1 review → L2 banding 14d. Kategori (Sakit/Duka/Darurat/Bencana/Lainnya) + evidence upload.
Toggle → nominal custom + alasan wajib → audit. OPS gak bisa override (auto-calc only).
Sheet, RadioGroup (initiator), InfoBox computed, Switch (override), Textarea (alasan), AlertDialog (confirm — type-to-confirm kalo denda besar).
Tiap step cek prasyarat. Step 3 "Sesi Berjalan": kalo ada sesi IN_PROGRESS → BLOCK lanjut sampai finalized. Step 4 FM: kalo ada PENDING_L1/L2 → block. Cegah close periode dengan transaksi gantung (gap legacy).
Step 6 final: ketik "TUTUP PERIODE MEI 2026" buat konfirmasi. Setelah lock: no backdated booking, no late mark-paid retroaktif. Audit (who/when).
Periode tertutup bisa di-reopen tapi senior approval (ADMIN) + alasan + audit. FINANCE gak bisa reopen sendiri.
1 Sesi Berjalan (ops blocker) → 2 FM review (admin blocker) → 3 Rekonsiliasi (finance) → 4 Adjustment (finance) → 5 Generate Tagihan & Honor (setelah semua settled) → 6 Lock. Generate di akhir biar angka final — kalo generate sebelum FM/adjustment kelar, bill salah.
Stepper (composed Tabs+Progress), checklist items (status icon), Alert (blocker), AlertDialog (lock type-to-confirm), Button nav.
<2 min/step. Blocker resolve = link langsung ke item (e.g., "3 sesi IN_PROGRESS" → klik → list sesi).