244 lines
8.6 KiB
Markdown
244 lines
8.6 KiB
Markdown
# 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.
|