Update mobile purchase flow and locale formatting
This commit is contained in:
243
docs/codex-handoff-2026-05-19.md
Normal file
243
docs/codex-handoff-2026-05-19.md
Normal file
@ -0,0 +1,243 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user