# 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.
