# Codex Handoff - 2026-05-19 Dokumen ini menyimpan konteks kerja terbaru agar pengerjaan bisa langsung dilanjutkan tanpa menggali ulang repo. ## Status Umum - App aktif dikembangkan di `Next.js + Prisma + PostgreSQL`. - Fitur operasional inti sudah cukup lengkap: pembelian, penerimaan, lot, aktivitas stok, penjualan, analisis pembelian, dan realisasi pembelian. - Scope mobile API untuk fase operasional utama juga sudah disiapkan. - Repo sudah dipush ke: `https://git.iptek.co/wirabasalamah/AbelBirdNest-Stock.git` - Branch aktif: `main` ## Commit Penting Terakhir - `14bb9bf` `Initial import of AbelBirdNest Stock` - `9141f99` `Fix grade seed path for production deploy` - `1274f2b` `Harden login and refresh production deploy guide` - `8e8912e` `Allow negative purchase moisture percentages` ## Perubahan Besar yang Sudah Selesai ### 1. Purchase Analysis - Snapshot analisis pembelian sudah dipersist agar saat edit nilainya kembali sama persis. - Field seperti: - `modal_barang` - `modal_beli` - `modal_masuk` - `modal_jual` - `total_modal_beli` - `total_modal_mal` - `average_price` - `kadar akhir` sudah tersimpan dan bisa dipakai ulang. - Banyak rumus dashboard/analisis sudah disesuaikan: - `kadar akhir` - `laba total / kg` - `laba/rugi agen` - basis berat gram vs kg ### 2. Purchase Realization - Modul realization sudah didesain dan diimplementasikan bertahap. - Prisma model baru sudah ada: - `LotPurchaseAllocation` - `PurchaseRealizationEntry` - `PurchaseRealizationSummary` - Event yang sudah tersambung ke realization: - purchase submit - office buyout - washing complete - lot transformation / regrade / mix - regular sale close - consignment close - Endpoint list/detail dan halaman UI `Purchase Realization` sudah ada. - Filter/search dan drill-down dasar ke dokumen asal juga sudah ditambahkan. ### 3. Mobile API - Namespace `/api/v1/mobile/**` sudah disiapkan untuk role: - `WAREHOUSE` - `QC` - `SALES` - `PURCHASING` - `OWNER` - Endpoint mobile yang sudah ada mencakup: - bootstrap - dashboard - lots - receipts - stock adjustments - washing - lot transformations - regular sales - JIT sales - consignments - purchases - fund requests - purchase analyses - purchase realizations - Dokumen pendukung: - [mobile-api-blueprint.md](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/mobile-api-blueprint.md) - [abelbirdnest-mobile-api.postman_collection.json](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/postman/abelbirdnest-mobile-api.postman_collection.json) ### 4. Bilingual UI dan Terminologi - Banyak area UI sudah dibersihkan dari campuran istilah Indonesia/Inggris. - Sidebar, mobile nav, halaman transaksi utama, master data, dan modul analitis sudah jauh lebih konsisten. - Banyak label dropdown dan placeholder sudah dibuat locale-aware. - Istilah bisnis Indonesia sudah dirapikan, misalnya: - `Agent` → `Agen` - `Courier` → `Jasa Pengiriman` - `Warehouse` → `Gudang` - `Warehouse Location` → `Lokasi Gudang` - `Contact Person` → `Kontak PIC` ### 5. Dashboard - Dashboard atas sudah diubah: - `Nilai Inventory` menjadi basis `Nilai Pembelian Bulan Ini` - `Receipt Bulan Ini` menjadi `Pembelian Bulan Ini` - grafik menjadi `Tren Pembelian vs Penjualan` - kartu kanan menjadi `Tingkat Serap Penjualan` - Widget lot kritis diperjelas menjadi `Lot Perlu Perhatian` dengan alasan: - `Stok Rendah` - `Usia Tinggi` - `Ditahan` ### 6. Users - User sekarang sudah bisa diedit dari UI. - Jika email diubah: - `email_verified_at` di-reset - token verifikasi lama dibuang - email verifikasi dikirim ulang ### 7. Regular Purchase Moisture Validation - Validasi pembelian reguler sekarang mengizinkan: - `kadar beli` - `kadar masuk` - `kadar akhir` bernilai negatif sampai `-100`. - Alasan bisnis: nilai minus dipakai untuk kasus penyusutan / penurunan berat pada alur pembelian dan analisis. - Patch ini ada di commit: - `8e8912e` `Allow negative purchase moisture percentages` - File yang berubah: - [src/features/purchases/schemas/purchase.schema.ts](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/src/features/purchases/schemas/purchase.schema.ts) - Tidak perlu migration database untuk patch ini. - Update server cukup: - `git pull origin main` - `npm run build` - restart service `abelbirdnest-web` ## Hardening Production yang Sudah Dilakukan - Bootstrap akun default sekarang dimatikan di production lewat: - `AUTH_BOOTSTRAP=false` - `AUTH_SECRET` dan `APP_URL` dipaksa aman via helper runtime. - Health endpoint tersedia di: - `/api/v1/health` - Security header dasar ditambahkan di `next.config.ts`. - Workflow Prisma production-ready sudah disiapkan: - `npm run prisma:migrate:deploy` - File deploy yang sudah ada: - [deploy/nginx/abelbirdnest.id.conf](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/deploy/nginx/abelbirdnest.id.conf) - [deploy/nginx/abelbirdnest.id.http.conf](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/deploy/nginx/abelbirdnest.id.http.conf) - [deploy/systemd/abelbirdnest-web.service](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/deploy/systemd/abelbirdnest-web.service) - [deploy-production.md](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/deploy-production.md) ## Kondisi Deploy Server yang Perlu Diingat - Domain target production: - `abelbirdnest.id` - App dijalankan di: - `127.0.0.1:3007` - Reverse proxy: - `nginx` - Struktur repo aktual di server diasumsikan: - `/var/www/abelbirdnest-web/AbelBirdNest-Stock` - `systemd` service file repo sudah diarahkan ke struktur subfolder ini. - Nginx sekarang disiapkan 2 tahap: 1. HTTP-only dulu dengan `abelbirdnest.id.http.conf` 2. setelah sertifikat ada, ganti ke `abelbirdnest.id.conf` ## Catatan Produksi Penting yang Masih Relevan - `roles` tidak dibuat otomatis jika `AUTH_BOOTSTRAP=false`. Jadi sebelum membuat user pertama di production, tabel `roles` harus diisi dulu secara manual. - User pertama production sebaiknya dibuat langsung di PostgreSQL sebagai `SYSTEM_ADMIN`. - Seed: - `banks` dan `currencies` bisa langsung - `grades` butuh file `Grade.xls` - Script `seed:grades` sudah tidak lagi hardcoded ke path Mac lokal. Default path sekarang: - `scripts/data/Grade.xls` ## Perubahan Login dan Footer - Halaman login sudah dibersihkan: - tidak ada lagi autofill email/password default - panel daftar akun dev dihapus - Footer copyright sudah dipasang: - `© 2026 AbelBirdnest` - Copyright sudah muncul di: - halaman login - seluruh halaman app utama via `AppShell` ## Dokumentasi User yang Sudah Dibuat Sudah ada dokumen manual Word di folder `docs/`: - [manual-dashboard-abelbirdnest.docx](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/manual-dashboard-abelbirdnest.docx) - [manual-operasional-abelbirdnest-lengkap.docx](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/manual-operasional-abelbirdnest-lengkap.docx) - [manual-operasional-abelbirdnest-formal-screenshot.docx](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/manual-operasional-abelbirdnest-formal-screenshot.docx) Dan asset screenshot pendukung: - [docs/manual-assets](/Users/wirabasalamah/Documents/Codex/abelbirdnest-web/docs/manual-assets) Catatan: - file manual dan asset screenshot saat ini masih `untracked` di git - belum dipush ke remote ## Status Git Saat Handoff Ini Dibuat Untracked: - `docs/manual-assets/` - `docs/manual-dashboard-abelbirdnest.docx` - `docs/manual-operasional-abelbirdnest-lengkap.docx` - `docs/manual-operasional-abelbirdnest-formal-screenshot.docx` ## Hal yang Masih Belum Ideal - Belum ada rate limiting auth/API sensitif. - `SMTP_PASSWORD` masih bisa tersimpan di DB settings. - `npm run lint` belum dijadikan gate CI non-interaktif yang rapi. - Belum ada test suite otomatis yang matang. - Sebagian validasi/error backend mungkin masih belum sepenuhnya locale-aware walaupun UI utama sudah jauh lebih bersih. ## Langkah Lanjutan Paling Masuk Akal 1. Putuskan apakah dokumen manual Word + screenshot perlu masuk repo dan dipush. 2. Jika iya, `git add` file manual dan asset screenshot lalu commit terpisah. 3. Tambahkan script/helper resmi untuk membuat `roles` dan user production pertama agar tidak lagi manual SQL. 4. Lanjut hardening production: - rate limit - cleanup SMTP secret strategy - CI/lint/test 5. Jika mobile app mulai dikerjakan, pakai: - `docs/mobile-api-blueprint.md` - Postman collection mobile ## Catatan Penutup - File handoff lama `docs/codex-handoff-2026-05-10.md` sudah tidak relevan lagi karena banyak perubahan besar setelah tanggal itu. - Handoff terbaru ini menjadi sumber konteks utama sampai ada update berikutnya.