# Codex Handoff - 2026-05-10 Dokumen ini menyimpan konteks kerja terakhir agar pengerjaan bisa langsung dilanjutkan saat project dibuka lagi. ## Status Umum - App aktif dikembangkan di `Next.js + Prisma`. - Banyak flow bisnis inti sudah tersambung end-to-end. - Project belum dianggap production-ready; fokus saat ini masih penyelesaian fitur dan perapihan UX. ## Perubahan Domain dan Terminologi - `Customer` sudah dirapikan menjadi `Buyer`. - `Seller` sudah dirapikan menjadi `Sales`. - `sellerCurrencyCode` sudah dirapikan menjadi `companyCurrencyCode`. - `item type` dan `item grade` sudah dibersihkan dari kontrak aktif UI/API; flow aktif sekarang pakai `grade`. - Struktur Prisma dan mapping database sudah disesuaikan ke arah penamaan yang lebih jelas. ## Fitur yang Sudah Aktif ### 1. Penjualan Reguler - Flow create dan close sudah aktif. - Create: - buyer - mata uang buyer - mata uang perusahaan - rate buyer ke perusahaan bila beda currency - kurir - biaya kirim - resi opsional - multiple lot - Line item: - pilih lot - berat jual - harga jual - info grade, kode lot, berat sekarang, harga MAL, bagi hasil agent - Close: - berat jual aktual - berat retur - harga jual aktual - selisih otomatis masuk penyusutan - Komisi agent: - dihitung ulang saat close - menambah saldo agent ### 2. Titip Jual / Consignment - Flow create dan close sudah aktif. - Close support: - berat terjual - berat kembali - berat susut - harga jual - komisi sales manual - Rumus komisi agent: - `((berat terjual * (harga jual - harga MAL)) - komisi sales) * persentase share` - Komisi agent: - menambah saldo bagi hasil agent - Komisi sales: - punya histori sendiri di master `Sales` ### 3. Penjualan Just In Time - Placeholder sudah diganti menjadi flow aktif. - Header input sama arah umumnya dengan penjualan reguler. - Barang dijual tanpa masuk gudang dan tanpa retur. - Line item JIT: - grade - quantity - harga MAL - harga jual - agent opsional - skema bagi hasil opsional - catatan - Status create: - `OPEN` - Close: - update `harga jual aktual` saja - Komisi agent: - dihitung saat close - menambah saldo bagi hasil agent - Banyak pass UI sudah dilakukan agar gaya JIT mendekati penjualan reguler. ### 4. Purchases - Menu `Purchases` sudah dipecah: - `Pembelian Reguler` - `Pembelian Kantor / Buyout Agent` - `Purchase Detail` sekarang dibuka sebagai popup/modal agar tidak merusak layout utama. - Tombol `Cetak receipt` dipindah ke detail purchase, bukan lagi di halaman receipt. ### 5. Pembelian Kantor / Buyout Agent - Sudah aktif sebagai submenu terpisah. - Sumber hanya dari lot aktif yang sudah ada. - Buyout bisa parsial atau full. - Setiap buyout selalu membuat lot baru milik kantor. - Lot lama dikurangi; jika habis bisa closed. - Komisi agent saat buyout: - `max(0, qty * (harga buyout - harga MAL)) * persen share` - Jika harga buyout di bawah harga MAL, komisi agent default `0`. - Komisi buyout menambah saldo bagi hasil agent dan masuk histori. - Detail lot sudah menampilkan jejak buyout. ### 6. Fund Request - Menu baru `/fund-requests` sudah aktif. - Ada 2 tipe: - `Dana modal` - `Bagi hasil` - Input: - code generated - no reff - agent - rekening agent - rekening kantor - nominal - waktu transfer - bukti transfer opsional - Dampak saldo: - `Dana modal`: kantor transfer ke agent, jadi menambah saldo modal agent - `Bagi hasil`: pembayaran bagi hasil ke agent, jadi mengurangi saldo bagi hasil agent - Histori mutasi agent ikut tercatat. ### 7. Master Agent - Agent punya dua saldo: - `saldo bagi hasil` - `saldo modal` - Histori mutasi saldo sudah aktif. - Sumber histori mencakup: - opening balance - manual adjustment - consignment commission - regular sale commission - JIT sale commission - office buyout commission - fund request profit share - fund request capital - Detail agent sudah bisa melihat histori. ### 8. Master Sales - `Sales` punya `commission_balance`. - Histori komisi sales sudah aktif. - Detail sales sudah bisa menampilkan histori komisi. ### 9. Settings / Profil Perusahaan - Profil perusahaan sekarang mendukung multiple rekening kantor. - Bank kantor dipilih dari master bank. - Fund Request memakai pilihan rekening kantor yang dipilih user. - Bug sesudah save yang membuat list rekening kantor terlihat kosong tanpa refresh sudah diperbaiki. ## Perapihan UI/UX yang Sudah Dilakukan - Banyak halaman master 2 kolom sekarang sudah punya: - pagination - search - Picker grade besar sudah diganti ke searchable combobox di beberapa flow aktif. - Sidebar bug auto-expand karena prefix path sudah diperbaiki. - Icon bell di topbar di-hide. - Tombol `?` diarahkan ke halaman bantuan `/help`. - Beberapa halaman transaksi besar sudah dipadatkan dan disamakan skalanya. ## Catatan Teknis Penting - Untuk banyak perubahan schema terakhir, `npm run prisma:generate`, `npm run db:push`, dan `npm run typecheck` sudah pernah lolos. - Alur kerja saat ini masih banyak mengandalkan `db push`, belum migrasi Prisma versioned. - Belum ada test suite otomatis yang matang. - Project sebelumnya juga sudah dinilai belum production-ready, terutama pada aspek auth/bootstrap dev account, secret fallback, migration discipline, dan testing. ## Isu yang Baru Saja Diperbaiki - `Settings`: - setelah simpan, list rekening kantor sempat terlihat reset - akar masalah: response `PUT /api/v1/settings` tidak mengembalikan relasi `companyBankAccounts` - sudah diperbaiki dengan fetch ulang record lengkap sebelum serialize - `Pembelian Reguler`: - warning `lengkapi master data` sempat muncul terus saat buka halaman - sudah diperbaiki agar hanya muncul setelah loading selesai dan hanya jika master wajib benar-benar kosong - `Purchase Analysis`: - chip jumlah purchase sudah dipaksa satu baris ## Kandidat Lanjutan Paling Masuk Akal 1. Lanjut desain dan implementasi flow `Pembelian Just In Time` jika memang masih ada versi purchase-side yang terpisah dari `Sales JIT`. 2. Sweep UI consistency lagi untuk: - `Sales JIT` - `Fund Request` - `Office Buyout` 3. Tambah dokumentasi user flow untuk transaksi baru: - regular sale - JIT sale - office buyout - fund request 4. Hardening project sebelum production: - hapus bootstrap user dev dari runtime login - wajibkan `AUTH_SECRET` - pindah ke Prisma migrations - tambah test smoke/integration - rate limiting auth endpoint ## File Ini - Update file ini setiap kali ada keputusan bisnis besar atau modul baru selesai. - Kalau mau lebih formal, file ini bisa diganti nanti menjadi `docs/project-status.md` permanen.