# Catatan Production — Penyatuan Workflow Pembelian ## Perubahan konsep - `Barang Pending` hanya membuat master/rencana barang gudang dengan stok `0`. - Tidak ada barcode, stock log, jurnal, atau pembayaran ketika master pending dibuat. - Stok menjadi tersedia hanya setelah Goods Receipt untuk PO gudang diposting. - Pembelian aset tidak masuk stok gudang; Goods Receipt membuat data pada asset register. - Pembayaran dilakukan melalui tagihan supplier/hutang, bukan dari master barang. ## Migrasi wajib Jalankan migration sampai versi `20260902000500` setelah backup dan uji staging. Migrasi menambah tujuan pembelian (`warehouse`/`asset`), metadata kapitalisasi aset, relasi receipt ke aset, serta kolom rencana pada `items`. Kolom item dan gudang pada detail transaksi terkait dibuat nullable agar pembelian aset tidak dipaksa mempunyai master barang gudang. ```bash php index.php migrate latest php index.php migrate status ``` ## Pemeriksaan sebelum cut-over 1. Pastikan semua item berstatus `draft` mempunyai stok nol dan tidak digunakan pada penjualan. 2. Item draft legacy yang sudah mempunyai stok harus diklasifikasikan sebagai item aktif. 3. Pastikan mapping akun `inventory`, `accounts_payable`, dan `purchase_input_tax` aktif. 4. Pastikan akun aset dan lokasi aset tersedia sebelum membuat PO aset. 5. Uji satu siklus gudang dan satu siklus aset di staging: PR, approval, PO, approval, receipt, tagihan, posting hutang, lalu pembayaran. 6. Rekonsiliasi stock ledger dengan akun persediaan dan asset register dengan akun aset setelah cut-over. Rollback migration ini tidak dilakukan dengan menghapus kolom pada database aktif. Gunakan backup terverifikasi apabila deployment harus dibatalkan. ## Biaya administrasi bank pada pembayaran Migration `20260905000700` wajib dijalankan sebelum kode pembayaran terbaru digunakan. Migration ini menambahkan `bank_charge_amount`, `bank_charge_account_id`, dan `total_cash_out` pada `supplier_payments`, serta mapping `bank_charge_expense`. Sebelum Production: 1. Cocokkan mapping `bank_charge_expense` dengan akun beban administrasi bank resmi pada COA perusahaan; jangan mengandalkan kode seed Development `6298` bila COA Production berbeda. 2. Pastikan `supplier_payments.amount` tetap diperlakukan sebagai pokok pembayaran yang mengurangi PO/invoice. `total_cash_out` adalah pokok ditambah biaya admin. 3. Rekonsiliasi total `purchase_payment_sources` dengan `supplier_payments.total_cash_out` dan alokasi invoice dengan `supplier_payments.amount`. 4. Uji masing-masing satu transaksi pembayaran awal/DP, pembayaran setelah penerimaan, dan pelunasan Hutang & Pembayaran dengan admin bank sebelum cut-over.