================================================================================ CATATAN PERBAIKAN SISTEM KELUARGAMART (VERSI 1.2.0) KASIR POS, PERGERAKAN STOK, CHECKOUT B2B & TRANSFER ANTAR GUDANG ================================================================================ Tanggal catatan: 26 Oktober 2026 Status: Implementasi dan pengujian lokal selesai; bukan konfirmasi deployment. Pembaruan ini berfokus pada ketepatan pencatatan kas kasir, pengamanan penutupan shift, kelengkapan histori stok, keandalan checkout grosir B2B, serta alur transfer gudang yang mengikuti pengiriman dan penerimaan barang secara fisik. -------------------------------------------------------------------------------- 1. PENCATATAN KAS MASUK, KAS KELUAR & DETAIL SHIFT LEBIH AKURAT -------------------------------------------------------------------------------- • Kas Masuk dan Kas Keluar Terbaca dari Transaksi yang Tersimpan: Ringkasan penutupan, riwayat, dan detail shift kini menggunakan pencatatan kas yang sama dari backend, bukan hanya data sementara pada layar kasir. • Perbaikan Kas Masuk Rp8.000 yang Sebelumnya Tidak Muncul: Pencatatan kas masuk Rp8.000 kini tampil pada riwayat transaksi, detail shift, dan ringkasan penutupan. Kas yang diharapkan bertambah Rp8.000 tepat sekali. • Perhitungan Saldo Laci Lebih Konsisten: Saldo memperhitungkan modal awal, penerimaan penjualan tunai, kas masuk, dan kas keluar. Pembayaran non-tunai tidak menambah uang di laci. Order batal tidak dihitung sebagai penerimaan sah, dan refund tunai mengurangi kas tepat satu kali melalui pencatatan kas keluar. • Identitas dan Riwayat Kas Tetap Dapat Ditelusuri: Detail shift menampilkan kasir, nominal, waktu, catatan, serta rincian kas masuk dan kas keluar. Kegagalan memuat ledger tidak lagi ditampilkan seolah tidak ada transaksi. -------------------------------------------------------------------------------- 2. PENUTUPAN SHIFT DENGAN SELISIH KAS TIDAK LAGI LOLOS SEMBARANGAN -------------------------------------------------------------------------------- • Penutupan Normal Wajib Sesuai Kas Fisik: Backend menghitung kas yang seharusnya tersedia dan membandingkannya dengan uang fisik yang dimasukkan kasir. Penutupan normal ditolak apabila terdapat selisih, termasuk jika permintaan dikirim langsung ke API. • Rincian Selisih Ditampilkan dengan Jelas: Layar penutupan menampilkan modal awal, penerimaan tunai, kas masuk, kas keluar, total yang diharapkan, kas fisik, dan nilai kekurangan/kelebihan. • Override Hanya untuk Pihak Berwenang dan Wajib Alasan: Admin atau owner dapat melakukan override sesuai kewenangan yang sudah ada. Alasan tertulis wajib diisi. Sistem menyimpan kas yang diharapkan, kas fisik, selisih, pelaku tindakan, alasan, dan waktu penutupan sebagai audit trail. • Shift Tertutup Dilindungi dari Transaksi Susulan: Guard database melindungi jalur kas, pembayaran, perubahan finansial penjualan, dan retur yang terkait dengan shift tertutup. Permintaan bersamaan dengan penutupan diproses menggunakan penguncian yang konsisten. -------------------------------------------------------------------------------- 3. HISTORI PERGERAKAN STOK MASUK & KELUAR LEBIH LENGKAP -------------------------------------------------------------------------------- • Penerimaan Barang Pembelian Menghasilkan Movement Masuk: Penerimaan supplier kini mencatat perubahan saldo dan movement dalam satu transaksi database. Jika pencatatan movement gagal, perubahan saldo dan dokumen penerimaan ikut dibatalkan, bukan tersimpan sebagian. • Pengembalian Stok dari Pembatalan Penjualan Tercatat: Stok yang dikembalikan melalui pembatalan penjualan menghasilkan movement masuk dengan referensi sumber, sehingga histori tidak kehilangan jejak. • Arah Penyesuaian dan Opname Diperbaiki: Stok masuk atau keluar ditentukan dari perubahan saldo sebelum dan sesudah transaksi. Pengurangan hasil opname tidak lagi keliru terbaca sebagai stok masuk hanya karena nilai kuantitas disimpan sebagai angka positif. • Total Tidak Lagi Terbatas pada Satu Halaman: Total masuk, total keluar, dan jumlah transaksi dihitung backend atas seluruh hasil filter. Ekspor dan cetak menelusuri halaman data yang relevan, bukan hanya baris yang sedang terlihat. • Filter dan Pengulangan Request Lebih Aman: Filter produk, gudang, tanggal, dan pencarian menggunakan data kanonis. Akses gudang dibatasi sesuai cakupan pengguna. Bukti operasi yang tersimpan mencegah pengulangan request manual/penerimaan menggandakan perubahan stok. -------------------------------------------------------------------------------- 4. CHECKOUT B2B LEBIH ANDAL & PESAN KENDALA LEBIH JELAS -------------------------------------------------------------------------------- • Error Bisnis Tidak Lagi Disamarkan sebagai Error Server Umum: Kegagalan minimum pembelian, harga/unit yang tidak valid, stok tidak cukup, serta masalah akses ditangani sesuai jenisnya. Pesan memberi arahan yang relevan tanpa membocorkan SQL, token, atau detail internal server. • Checkout yang Sudah Berhasil Tidak Dilaporkan Gagal Karena Refresh: Kegagalan memuat ulang histori pesanan setelah penyimpanan tidak lagi dianggap sebagai kegagalan checkout. Jika inisialisasi pembayaran gagal setelah order terbentuk, pengguna diarahkan ke pemulihan pesanan yang sama. • Order, Stok, dan Pengosongan Keranjang Diproses Bersama: Penyimpanan pesanan, detail item, perubahan stok, pengosongan keranjang, dan bukti checkout memiliki batas transaksi yang konsisten. Kegagalan di tengah proses tidak meninggalkan pesanan atau saldo stok setengah jadi. • Retry Tidak Membuat Pesanan Ganda: Identitas request dipertahankan ketika terjadi timeout. Bukti checkout persisten memungkinkan request yang sama memperoleh pesanan semula tanpa mengurangi stok kembali, termasuk saat respons jaringan terputus. • Keranjang dan Form Tetap Aman Saat Validasi Gagal: Pilihan pengguna dan isi keranjang tetap tersedia agar dapat diperbaiki. Contoh pesan stok: kurangi kuantitas atau pilih gudang lain, disertai referensi request untuk membantu penelusuran kendala. -------------------------------------------------------------------------------- 5. TRANSFER GUDANG KINI MENGIKUTI PERPINDAHAN BARANG SECARA FISIK -------------------------------------------------------------------------------- • Tahap Draft Tidak Mengubah Stok: Pembuatan dokumen transfer hanya menyimpan rencana perpindahan. Stok asal dan tujuan tetap. Draft dapat diperbaiki atau dibatalkan sebelum dikirim. • Dispatch Mengurangi Stok Asal ke Stok Dalam Perjalanan: Saat pengiriman dikonfirmasi, sistem memeriksa ulang stok, mengunci data yang diperlukan, mengurangi stok asal, dan mencatat kuantitas transit. Gudang tujuan belum mendapat penambahan stok pada tahap ini. • Gudang Tujuan Bertambah Setelah Penerimaan Fisik: Penerima mencatat jumlah yang benar-benar datang. Hanya barang baik yang dikonfirmasi diterima yang menambah stok operasional gudang tujuan dan menghasilkan movement masuk dengan referensi transfer yang sama. • Penerimaan Parsial dan Selisih Tidak Hilang Diam-Diam: Jika dikirim 10 unit tetapi baru diterima 8 unit, tujuan hanya bertambah 8 unit. Sisa 2 unit tetap menjadi kewajiban transit/selisih yang belum selesai. Transfer tidak otomatis dianggap lengkap. • Barang Rusak dan Kehilangan Dicatat Terpisah: Barang rusak tidak otomatis menambah stok siap jual. Discrepancy memerlukan alasan. Pengesahan kehilangan hanya dapat dilakukan pihak berwenang dan menghasilkan audit trail. Penerimaan melebihi jumlah kirim ditolak. • Status dan Request Bersamaan Dikendalikan Backend: Alur mencakup draft, dalam perjalanan, penerimaan parsial/berselisih, penyelesaian, dan pembatalan draft. Pengiriman atau penerimaan berulang tidak boleh menggandakan saldo maupun movement. -------------------------------------------------------------------------------- 6. VOUCHER SERAH TERIMA DAPAT DICETAK ULANG TANPA MENGUBAH STOK -------------------------------------------------------------------------------- • Voucher Diterbitkan Saat Pengiriman Dikonfirmasi: Dokumen memiliki nomor unik, nomor transfer, waktu kirim, identitas perusahaan, gudang asal/tujuan, produk, satuan, kuantitas, catatan, dan identitas operator yang berasal dari data transfer aktual. • Snapshot Dokumen Pengiriman Dilindungi: Voucher yang diterbitkan menggunakan snapshot pengiriman agar tidak berubah diam-diam akibat perubahan data setelah barang dikirim. • Siap untuk Pemeriksaan dan Serah Terima: Dokumen mencakup total kuantitas, kolom pemeriksaan/selisih, serta ruang tanda tangan pihak yang menyerahkan, memeriksa, dan menerima. • Cetak Ulang Bersifat Baca Saja: Pencetakan bukan pemicu mutasi stok. Pengujian cetak ulang menunjukkan isi voucher tetap identik dan tidak menambah movement atau mengubah saldo. -------------------------------------------------------------------------------- 7. HASIL PENGUJIAN & VERIFIKASI -------------------------------------------------------------------------------- • Kasir POS: Kas masuk Rp8.000 tersimpan dan terlihat di browser. Penutupan berselisih ditolak HTTP 409. Override dengan alasan menyimpan audit; transaksi baru pada shift tertutup ditolak. • Inventory: Skenario pembelian +10, stok masuk manual +3 sekali, stok keluar -2, dan opname -3 menghasilkan saldo 8, total masuk 13, dan total keluar 5. • B2B: Checkout 2 unit x Rp100 berhasil membentuk pesanan Rp200 dan mengosongkan keranjang. Checkout 999 unit ditolak karena stok, mempertahankan form dan keranjang, tanpa menambah pesanan atau mengubah saldo stok. • Transfer: Skenario stok asal 20, kirim 5, transit 5, lalu terima 5 berhasil diuji. Pengujian juga mencakup penerimaan 8 dari 10, stok tidak cukup 3 untuk permintaan 5, retry, request bersamaan, dan rollback kegagalan database. • Quality Gates: - Full backend dengan PostgreSQL/Redis terisolasi: 41 package lulus; 9 package tidak memiliki test. - Frontend: ERP 361 test, B2B 180 test, dan POS 121 test lulus. - Race detector domain terkait, go vet, dan build backend lulus. - Workspace test, lint, typecheck yang tersedia, dan build lulus. - Drift guard: 389 route dan 207 permission sinkron. - Validasi migration Atlas dan pemeriksaan whitespace perubahan lulus. -------------------------------------------------------------------------------- 8. CATATAN DATABASE & PENERAPAN -------------------------------------------------------------------------------- • Migration Baru: - 000134: audit penutupan dan perlindungan integritas kas shift. - 000135: lifecycle transfer, transit, voucher, dan audit penerimaan. - 000136: bukti idempotensi operasi stok. - 000137: bukti checkout persisten. • Data Historis Tidak Dibuat-buat: Movement pembelian lama yang tidak pernah tercatat tidak direkonstruksi otomatis. Transfer legacy yang sudah dikirim memerlukan rekonsiliasi berbasis bukti; migrasi tidak mengarang kuantitas transit historis. • Prasyarat Operasional: Identitas perusahaan harus tersimpan pada konfigurasi untuk menerbitkan voucher. Barang rusak tercatat pada dokumen, bukan stok siap jual. • Batas Verifikasi: Seluruh bukti berasal dari database pengujian dan aplikasi lokal terisolasi. Tidak ada write ke production. Catatan ini tidak menyatakan bahwa perubahan sudah di-deploy ke server production. Dialog cetak native diintersep saat verifikasi browser; isi dokumen dan sifat baca-saja tetap diuji. • Peringatan Nonfatal: Lint/build masih mengeluarkan warning nonfatal. LSP diagnostics tidak tersedia karena language server proyek belum dikonfigurasi. ================================================================================ RINGKASAN STATUS: 6 TIKET PERBAIKAN SELESAI DAN TERVERIFIKASI SECARA LOKAL ================================================================================