# Checklist Pasca-Deploy R2 — POS "order hilang" + FK ERP Ditemukan 2026-09-30. Gejala: checkout POS sukses (dialog sukses muncul, stok berkurang) tapi order tidak muncul di halaman Transaksi. Juga menjelaskan error FK "A referenced record does not not exist" saat submit order dari katalog ERP. ## Akar masalah: version skew prod (frontend baru, backend lama) Bukti (diverifikasi 2026-09-30): - Bundle prod `pos-km.trl.my.id` SUDAH versi baru: chunk `orders-DRCaEw0D.js` memuat `store_id` (commit POS `6021f57`, 2026-09-20: daftar transaksi di-scope ke outlet aktif), `POSPage-DOfjk5xZ.js` memuat gate "Buka shift dahulu" + validasi "Pelanggan tidak valid" terbaru. - Backend prod BELUM memuat tenant-binding `ProcessPOS` (commit backend `1d6d129`, 2026-08-25: `ResolveStoreBinding` + INSERT kolom `store_id`), apalagi batch `d7b6580` (2026-09-29: purchasing/finance/cashier) dan `89c7028` (catalog cost gate). - Akibat: `POST /pos` dari frontend baru mengirim `store_id`, backend lama mengabaikannya dan menyimpan `sales_orders.store_id = NULL`. Halaman Transaksi (frontend baru) memfilter `store_id=` → order NULL tidak pernah tampil. Uang masuk, stok berkurang, order "hilang" dari daftar (masih ada di database). - Error FK ERP identik: `resolveWalkIn` CUS-000 (commit `e002abc`, 2026-08-21) belum ada di backend prod → `customer_id=0` menabrak FK `sales_orders.customer_id`. - GEJALA #3 — "tambah pelanggan di POS hanya jalan di akun `cashier@keluargamart.local`": matriks role cashier di DB prod kehilangan `masterdata.customers.create` + `masterdata.memberships.create` sejak wipe 000061 (13 Sep) dan belum dipulihkan (000099, 27 Sep, belum ter-apply di prod). Akun seed lolos karena punya override `users.permissions` per-user yang hanya dia miliki (dibersihkan oleh 000105, juga belum ter-apply). Setelah deploy backend, SEMUA akun ber-role cashier otomatis mendapat izin dari matriks — tidak perlu sentuh akun per akun. ## Langkah perbaikan di VPS (jalankan berurutan) 1. Deploy backend + semua frontend lewat jalur local-build (CI masih diblokir spending limit): ```bash cd /path/ke/keluargamart-backend git pull docker compose -f docker-compose.yml -f docker-compose.localbuild.yml build backend b2b erp pos docker compose -f docker-compose.yml -f docker-compose.localbuild.yml up -d ``` Panduan lengkap: `deploy/LOCAL-BUILD.md` di repo backend. Rollback: jalankan compose tanpa `-f` kedua. 2. Pulihkan data order lama yang "hilang" (order POS dengan `store_id NULL` sebelum tenant-binding aktif). Cek dulu: ```sql -- Inventaris order tertimpa masa transisi SELECT so.id, so.so_number, so.order_date, so.status, so.order_type, so.store_id, so.warehouse_id FROM sales_orders so WHERE so.order_type = 'pos' AND so.store_id IS NULL AND so.order_date >= '2026-09-20' -- sejak POS frontend kirim store_id ORDER BY so.id DESC; ``` Petakan `warehouse_id` → store, lalu backfill: ```sql -- Preview pemetaan sebelum UPDATE SELECT so.id, so.so_number, so.warehouse_id, w.store_id AS mapped_store FROM sales_orders so JOIN warehouses w ON w.id = so.warehouse_id WHERE so.order_type = 'pos' AND so.store_id IS NULL; -- Backfill (satu warehouse = satu store per skema 000045) UPDATE sales_orders so SET store_id = w.store_id, updated_at = now() FROM warehouses w WHERE w.id = so.warehouse_id AND so.order_type = 'pos' AND so.store_id IS NULL; ``` Jika ada warehouse yang melayani lebih dari satu store di data nyata, isi manual per `so.id` — jangan blanket-UPDATE. 3. Verifikasi setelah deploy (semua harus OK): - POS: buka shift → tambah item → Bayar → order muncul di halaman Transaksi dengan kolom outlet terisi. - Data lama: order yang tadinya hilang kini tampil. - ERP: submit order dari katalog (`from_catalog=1`) tidak lagi menjawab "Gagal Menyimpan Order — A referenced record does not exist." - Shift: halaman Shifts menampilkan Kas Masuk / Kas Keluar per shift. - B2B: payments menautkan order yang benar; halaman order halaman ≥ 2 konsisten. - POS pelanggan: login dengan AKUN KASIR SELAIN `cashier@keluargamart.local` → Buat Member (nama + no. HP) → sukses, row masuk DB, langsung terpilih di transaksi. ## Catatan - Frontend POS/B2B/ERP yang berjalan sekarang di prod sudah versi terbaru; hanya backend yang tertinggal. Setelah backend naik, semua skew hilang. - Order yang hilang TIDAK hilang datanya: lengkap (item, invoice, payment, cashflow). Hanya `store_id`-nya NULL. - Setelah deploy, matikan checklist ini atau pindahkan ke repo docs.