================================================================================ CATATAN RILIS & PEMBARUAN SISTEM KELUARGAMART (VERSI 1.4.0) ================================================================================ Tanggal rilis dokumentasi: 29 Oktober 2026 Status: Catatan perubahan source; pembaruan fitur, kontrol akses & stabilitas. Pembaruan Versi 1.4.0 berfokus pada implementasi menyeluruh Background Push Notification (Full-Stack PWA Web Push & Service Worker) di ERP dan B2B, pengetatan kontrol akses otorisasi gudang tujuan pada penerimaan transfer stok, perbaikan hak akses pengajuan retur B2B, pemisahan tegas hak akses operasional gudang dari halaman Sales Order ERP, pembenahan logika pembayaran Cash/COD tanpa popup payment gateway, serta pemulihan keandalan login kasir (fail-open rate limiter) dan pencegahan kebocoran port Nginx pada unduhan APK. -------------------------------------------------------------------------------- 1. FULL-STACK BACKGROUND PUSH NOTIFICATION (PWA & BACKEND GO) -------------------------------------------------------------------------------- • Notifikasi Latar Belakang (Background Push) Aktif: Pengguna ERP (admin, owner, staf gudang, sales) dan pembeli di B2B E-Commerce kini tetap menerima notifikasi audio lonceng pesanan secara langsung meskipun aplikasi diminimalkan, layar terkunci, atau browser berada di background. • Integrasi Service Worker & Web Push API: sw.js di ERP dan B2B mengimplementasikan push listener dengan visual badge, icon aplikasi, vibration pattern, serta event notificationclick yang membuka atau memfokuskan tab aplikasi secara otomatis ke halaman target. • Audio Chime Notifikasi Pesanan: File audio resmi (/sounds/notification.mp3 dan /sounds/notification.wav) ditanam pada public directory kedua aplikasi client untuk memberikan peringatan auditori yang jelas saat pesanan baru masuk atau status pesanan berubah. • Layanan Backend & PostgreSQL Push Subscriptions: - Database migration 000139_push_subscriptions.sql menyediakan tabel penyimpan endpoint, auth key, dan p256dh token per perangkat user. - Endpoints /api/v1/notifications/push-subscriptions, /vapid-key, dan /push-test. - Trigger otomatis: Order B2B baru -> push instan ke grup staf toko & gudang; perubahan status fulfillment order -> push instan ke customer pembeli. Referensi commit: d6907b7. -------------------------------------------------------------------------------- 2. KONTROL AKSES & OTORISASI GUDANG TUJUAN PADA TRANSFER STOK -------------------------------------------------------------------------------- • Pembatasan Aksi Penerimaan Hanya untuk Gudang Tujuan: Pada halaman Transfer Stok ERP (/inventory/transfers), tombol aksi "Terima" kini dikunci secara ketat dan hanya muncul jika user yang login terafiliasi dengan gudang tujuan transfer (currentUser.warehouse_id === destination_warehouse_id). • Proteksi Fail-Closed di Backend Go: Endpoint POST /api/v1/inventory/transfers/:id/receive memvalidasi relasi gudang. Jika gudang asal (pengirim) mencoba mengeksekusi penerimaan, sistem menolak dengan status HTTP 403 Forbidden dan pesan error: "Hanya gudang tujuan yang berhak menyelesaikan penerimaan barang". Referensi commit: 569d475. -------------------------------------------------------------------------------- 3. PERBAIKAN FORMULIR PENGAJUAN RETUR B2B (BEBAS ERROR FORBIDDEN 403) -------------------------------------------------------------------------------- • Pengecekan Kepemilikan Multi-Tenant Akurat: Memperbaiki error "Forbidden" (403) pada endpoint pengajuan retur barang (POST /api/v1/returns) saat pelanggan toko mengajukan retur untuk Sales Order yang sah (contoh: SO-202610-000024). • Sinkronisasi Klaim Customer ID: Sistem kini mencocokkan user session token B2B dengan Customer ID pemilik pesanan secara tepat, memastikan mitra toko dapat melampirkan alasan retur dan bukti foto fisik tanpa terganjal kesalahan otorisasi. Referensi commit: 569d475. -------------------------------------------------------------------------------- 4. PEMISAHAN WEWENANG OPERASIONAL GUDANG DI DETAIL SALES ORDER ERP -------------------------------------------------------------------------------- • Tampilan Sales Order Read-Only untuk Distribusi: Tombol eksekusi operasional gudang ("Proses — Mulai Packing" dan "Selesaikan Pesanan (Diterima)") telah dihapus dari halaman Detail Sales Order (/sales/orders/:id). • Kartu Status Pelacakan Distribusi Terpadu: Menggantikan tombol aksi dengan kartu "Status Pengiriman & Distribusi" yang menampilkan badge status, deskripsi alur pemrosesan pesanan, serta tautan cepat ke modul khusus gudang (Distribusi & Pengiriman -> Packing Order). • Otorisasi Role di Backend: Endpoint transisi status pengiriman dibatasi hanya untuk role staf gudang (warehouse officer) atau superadmin (admin, owner). Referensi commit: d6907b7. -------------------------------------------------------------------------------- 5. PERBAIKAN LOGIKA PEMBAYARAN TUNAI (CASH / COD) B2B -------------------------------------------------------------------------------- • Penyembunyian Tombol & Modal "Bayar Sekarang": Tombol "Bayar Sekarang" disembunyikan secara menyeluruh dari kartu pesanan dan halaman detail jika: 1. Metode pembayaran adalah Tunai / COD (isCashMethod). 2. Status pesanan sudah Selesai (Delivered/Completed) atau Dibatalkan. 3. Status pembayaran sudah Lunas (Paid/Settled). • Validasi Keamanan Backend: Endpoint inisiasi token Snap Midtrans dan checkout memvalidasi pesanan dan menolak (400 Bad Request) jika pesanan bertipe COD atau sudah tidak berstatus payable. Referensi commit: d6907b7. -------------------------------------------------------------------------------- 6. STABILITAS INFRASTRUKTUR & PERBAIKAN LOGIN KASIR POS -------------------------------------------------------------------------------- • Fail-Open Rate Limiter Login Kasir: Mencegah kendala kasir POS tidak bisa login dengan pesan "rate limiter unavailable" saat Redis mengalami restart atau pemutusan jaringan sementara. Logika rate limiter otomatis fallback fail-open dengan pencatatan peringatan pada log backend. • Pencegahan Kebocoran Port 8080 pada Pengalihan URL APK: Menambahkan konfigurasi "port_in_redirect off;" pada reverse proxy Nginx agar pengalihan URL unduhan aplikasi Android (/apk -> /apk/) tidak menyertakan port internal container :8080 ke peramban pengguna. Referensi commit: 3efede2. ================================================================================ RINGKASAN COMMIT RILIS 1.4.0 ================================================================================ - d6907b7: fix(b2b,erp,push): hide COD pay now button, separate warehouse fulfillment actions in ERP, and implement background push notifications - 569d475: fix(inventory,sales): enforce destination warehouse transfer receiving and B2B return authorization - 3efede2: fix(auth,infra): fail-open login rate limiter on redis outage and disable nginx port in redirect ================================================================================