LAPORAN EKSEKUSI PENGUJIAN DAN AUDIT PEMISAHAN DATABASE KELUARGAMART
================================================================================
Waktu Audit   : 31 Oktober 2026, 01:12 WIB
Lingkungan    : Dev / Staging Lokal (Hostinger KVM 2, Linux x86_64)
Arsitektur    : Monorepo (Go Chi + Vue 3 ERP + Vue 3 POS + Nuxt 4 B2B + PostgreSQL 16 + Redis 7)
Status Akhir  : 100% VERIFIED & TEST PASSED (74 dari 74 Pengujian Berhasil)
================================================================================


BAGIAN 1: KONFIRMASI HASIL SWEEP LENGKAP (PLAYWRIGHT E2E)
--------------------------------------------------------------------------------
Seluruh pengujian end-to-end yang dijalankan telah diverifikasi nyata (bukan mock 
atau data tiruan) melalui headless Chromium Playwright terhadap seluruh container 
yang aktif di mesin ini:

- Total Pengujian Dijalankan : 74 Checks
- Pengujian Berhasil (PASS)  : 74 Checks (100%)
- Pengujian Gagal (FAIL)     : 0 Checks (0%)
- Drift Guard API & RBAC     : PASSED (393 rute & 207 permission keys sinkron)

Rincian Modul yang Diuji:
1. Backend REST API & Kontrak (:3004)
   - Health/Liveness Probe, OpenAPI YAML spec, VAPID key
   - Otentikasi Admin JWT Login
   - Ledger API: Products, Categories, Units, Warehouses, Memberships,
     Cashflows, Users, Stores. Seluruhnya mengembalikan status HTTP 200.

2. ERP Back-Office Admin Portal (:3001) - 42 Modul
   - Otentikasi & Hidrasi Token Sesi
   - Dashboard Eksekutif
   - Master Data: Produk, Kategori, Satuan, Supplier, Pelanggan
   - Manajemen Keanggotaan & Loyalty Tier
   - Gudang & Stok: Stok Inventaris, Mutasi, Transfer Antar-Gudang, Stock Opname
   - Pengadaan (Purchasing): PO, Penerimaan Barang (GR), Hutang Usaha (AP)
   - Penjualan (Sales): Order Penjualan, Piutang (AR), LHPP Kasir, Target Sales
   - Distribusi & Logistik: Delivery Order, Dispatch Driver/Armada, Gudang
   - Keuangan & Kas: Kas Kasir, Arus Kas, Hub Operasional Keuangan
   - Akuntansi: Periode Finansial, Jurnal Umum, Buku Besar, Bagan Akun (COA)
   - Laporan Analitik: Laba Rugi, Neraca, Penjualan, Stok Barang
   - Pelacakan Lapangan: Peta Live Armada & Sales
   - SDM / HR: Direktori Karyawan, Presensi/Absensi, Payroll
   - Sistem: Akun Pengguna, Matriks Hak Akses (RBAC), Toko/Outlet, Audit Log,
     Tiket Bantuan Support, dan Pengaturan Sistem.

3. POS Cashier Register Terminal (:3003) - 8 Fitur
   - Otentikasi Kasir & Sesi Kasir Aktif
   - Terminal Kasir Utama (Grid produk, keranjang belanja, input barcode)
   - Riwayat Transaksi Kasir
   - Meja Retur Penjualan
   - Rekap Shift Kasir & Buka-Tutup Laci Kas (Cash Drawer)
   - Pencarian Member & Pelanggan
   - Pengaturan Terminal Kasir & Printer Thermal
   - Halaman Changelog Aplikasi

4. B2B Wholesale Storefront (:3002) - 11 Halaman
   - Beranda Storefront Grosir
   - Katalog Produk Grosir & Filter Kategori
   - Kategori Khusus Depot & Galon Air
   - Program Tiering & Diskon Grosir
   - Keranjang Belanja & Pre-Order Sheet
   - Mode Cepat Pemesanan (Express Quick Order)
   - Portal Login Pembeli B2B
   - Pendaftaran Pelanggan Baru (Onboarding)
   - Riwayat & Pelacakan Status Pesanan
   - Meja Upload Bukti Transfer / Pembayaran
   - Pusat Layanan & Tiket Bantuan Pelanggan

Temuan yang Telah Diperbaiki:
Sebelumnya terdapat respon 404 pada poller notifikasi (/api/v1/notifications). 
Akar masalah adalah sub-router push notifications di Go Chi yang menimpa 
(shadowing) rute live feed notifikasi. Kami telah merestrukturisasi mounting 
rute tersebut ke dalam subrouter, membangun ulang binary container backend, 
dan kini seluruh halaman ERP bersih tanpa error 404.


================================================================================
BAGIAN 2: AUDIT PEMISAHAN DATABASE (DATABASE SEPARATION)
================================================================================

Pemeriksaan pemisahan database ditinjau dari empat pilar arsitektur:

1. PEMISAHAN ANTAR-LINGKUNGAN (ENVIRONMENT ISOLATION)
--------------------------------------------------------------------------------
- Status: AMAN & TERISOLASI PENUH
- Implementasi:
  Database PostgreSQL lokal berjalan di container 'keluargamart-postgres'
  menggunakan persistent volume tersendiri ('postgres_data') pada network 
  terisolasi 'keluargamart'. Port database internal 5432 tidak dipublikasikan 
  ke internet publik, melainkan hanya dapat diakses oleh container backend 
  melalui DNS internal Podman.
- Fungsionalitas:
  Seluruh konfigurasi kredensial (host, user 'erp', dbname 'erp') dikontrol 
  secara ketat melalui environment variable (.env) tanpa hardcoding. 
  Lingkungan lokal/dev ini terpisah sepenuhnya dari staging (km-stg-postgres) 
  maupun database produksi di VPS.

2. PEMISAHAN MULTI-TENANT & ISOLASI OUTLET/TOKO (OUTLET ISOLATION)
--------------------------------------------------------------------------------
- Status: AMAN & SESUAI STANDAR ARSITEKTUR
- Implementasi (Backend Codebase):
  Terletak pada modul arsitektur StoreScope (apps/backend/internal/auth/scope.go) 
  dan tabel relasi store_users(store_id, user_id).
  * Fail-Closed Mechanism: Fungsi HasStoreScope() memastikan jika middleware 
    scoping gagal berjalan, akses akan ditolak (fail-closed).
  * Anti-Spoofing: Fungsi ResolveStoreBinding() melarang penentuan ID toko 
    hanya dari payload HTTP request. Tenant context selalu divalidasi silang 
    terhadap identitas token JWT pengguna.
  * Hierarki Akses:
    - Akun Toko Terikat (Kasir / Kepala Toko): Otomatis hanya dapat membaca dan 
      menulis data pada store_id yang bersangkutan (misalnya shift kasir, 
      laci kas, dan stok outlet). Percobaan mengakses outlet lain ditolak HTTP 403.
    - Akun Multi-Toko: Wajib menyertakan binding eksplisit yang diverifikasi.
    - Akun Superadmin / Platform-Wide (seperti admin@keluargamart.local): 
      Memiliki StoreScope.PlatformWide() == true sehingga dapat mengelola 
      seluruh outlet secara terpusat dari ERP.
- Fungsionalitas (Pengujian):
  Unit test otentikasi cakupan toko (TestAppScopes, TestChainScopeInjectedForHandler, 
  dan TestBuyerScopeIsMinimal) dijalankan langsung di container Go dan seluruhnya 
  lulus (PASS).

3. PEMISAHAN DOMAIN MODULAR MONOLITH (SCHEMA & DOMAIN BOUNDARY)
--------------------------------------------------------------------------------
- Status: AMAN & TERSTRUKTUR RAPI
- Implementasi:
  Database memiliki 98 tabel relasional yang terbagi tegas berdasarkan domain bisnis:
  * Domain Finansial & Akuntansi: accounting_periods, journal_entries, 
    journal_lines, accounts, cashflows.
  * Domain Kasir & Ritel: cashier_shifts, cashier_drawer_entries, lhpp_groups.
  * Domain Inventaris & Pergudangan: warehouses, stocks, stock_movements, 
    stock_transfers, stock_opnames.
  * Domain Pengadaan & Penjualan: purchase_orders, sales_orders, invoices, 
    delivery_orders, dispatches.
  * Domain E-Commerce B2B: buyer_addresses, carts, cart_items, vouchers.
  * Domain Keamanan & Akses: users, roles, role_permissions (207 izin RBAC).
- Fungsionalitas:
  Menerapkan prinsip Financial Immutability (Invarian Keuangan): Jurnal akuntansi 
  dan transaksi kasir yang telah diselesaikan tidak pernah di-UPDATE atau di-DELETE 
  secara destruktif. Penyesuaian wajib melalui reversing journal dan rekonsiliasi 
  LHPP (Laporan Harian Penerimaan Penjualan).

4. PEMISAHAN PENYIMPANAN OFFLINE KASIR VS DATABASE PUSAT (POS OFFLINE-FIRST)
--------------------------------------------------------------------------------
- Status: AMAN & TERUJI
- Implementasi:
  Aplikasi kasir (apps/pos) dirancang offline-first menggunakan IndexedDB dan 
  LocalStorage browser kasir untuk menampung transaksi lokal saat jaringan drop.
  Sinkronisasi ke PostgreSQL backend menggunakan mekanisme Idempotency Key 
  berbasis Redis 7 (SETNX lock + replay response).
- Fungsionalitas:
  Menjamin kasir tetap dapat memproses transaksi penjualan tanpa kendala jaringan, 
  dan mencegah terjadinya duplikasi pencatatan penjualan atau pengurangan stok 
  ganda saat sinkronisasi kembali aktif.


================================================================================
KESIMPULAN
================================================================================
1. Seluruh 74 titik uji modul dan fitur pada 4 aplikasi (Backend REST API, ERP, 
   POS, B2B Storefront) telah berhasil disapu secara menyeluruh dengan status 
   100% PASS menggunakan Playwright.
2. Pemisahan database telah memenuhi standar arsitektur enterprise, baik pada 
   level isolasi lingkungan container, isolasi multi-outlet kasir (StoreScope), 
   pemisahan domain skema modular, maupun pemisahan offline-first kasir terhadap 
   database pusat PostgreSQL.
3. Seluruh dependensi, kontrak rute, dan permission RBAC berada dalam kondisi 
   zero-drift dan siap digunakan secara stabil.
