# Arsitektur Sistem KeluargaMart Monorepo ## 1. Visi Arsitektur KeluargaMart adalah platform enterprise retail omnichannel terpadu yang melayani berbagai channel bisnis: - **ERP (Enterprise Resource Planning)**: Manajemen master data (produk, kategori, satuan), inventory/pergudangan, multi-outlet, purchasing/procurement, HR & payroll, keuangan & akuntansi, audit logs. - **POS (Point of Sale)**: Aplikasi kasir kasir retail modern dengan dukungan barcode scanner cepat, penanganan transaksi offline-first, per-register shifts, receipt printing, dan sinkronisasi realtime. - **B2B E-Commerce**: Toko online grosir untuk pembelian tier-based, manajemen pesanan skala besar, invoice terms, dan customer tiers. - **Automated Reporting (NextReport)**: Engine penghasil laporan berkala, export PDF/Excel, dan analitik agregat. Sebelum migrasi, sistem ini tersebar di 5 repositori terpisah (`keluargamart-backend`, `keluargamart-erp-frontend`, `keluargamart-pos-frontend`, `keluargamart-b2b-frontend`, dan submodule/repo `nextreport`). Monorepo menyatukan seluruh komponen ini ke dalam satu ekosistem yang terkelola dengan kontrak data yang kuat tanpa merusak batasan runtime. ```mermaid graph TD subgraph Clients["Client Tier (Frontends & Tools)"] ERP["ERP Admin Portal
(Vue 3 + Vite)"] POS["POS Cashier
(Vue 3 + Vite)"] B2B["B2B Storefront
(Nuxt 4)"] Report["NextReport Worker
(Python)"] end subgraph Packages["Shared Workspace Packages"] Contracts["@keluargamart/contracts
(Routes & Schemas)"] Perms["@keluargamart/permissions
(198 RBAC Permissions)"] Utils["@keluargamart/utils
(Formatters & Helpers)"] Client["@keluargamart/api-client
(Axios Base Wrapper)"] end subgraph Core["Backend Core (Source of Truth)"] Backend["Go Chi REST API
(Modular Monolith)"] DB[(PostgreSQL)] Cache[(Redis)] Storage[(MinIO / S3)] end ERP --> Contracts ERP --> Perms ERP --> Utils ERP --> Client POS --> Contracts POS --> Perms POS --> Utils POS --> Client B2B --> Contracts B2B --> Perms B2B --> Utils B2B --> Client ERP -.->|HTTP REST /api/v1| Backend POS -.->|HTTP REST /api/v1| Backend B2B -.->|HTTP REST /api/v1| Backend Report -.->|HTTP REST / Internal Token| Backend Backend --> DB Backend --> Cache Backend --> Storage ``` --- ## 2. Prinsip "Single Source of Truth" Backend Go (`apps/backend`) memegang tanggung jawab mutlak sebagai **Single Source of Truth**: 1. **Aturan Bisnis (Business Rules)**: Semua kalkulasi harga, diskon, pajak, perhitungan stok inventaris, payroll, dan workflow approval divalidasi dan dieksekusi di backend. 2. **Skema Database & Migrasi**: Seluruh migrasi database (menggunakan Go migrations) dikelola di `apps/backend/internal/database/migrations`. 3. **Otorisasi & Otoritas RBAC**: Definisi permission dan role tersentralisasi di `apps/backend/internal/modules/rbac/catalog.go`. 4. **Validasi Request**: Request validation di backend menggunakan schema Go structs dan binding middleware. 5. **Kontrak API**: Definisi endpoint terpusat di `apps/backend/docs/openapi.yaml`. Frontend bertugas sebagai consumer antarmuka pengguna dan tidak boleh menggantikan atau menduplikasi logika otoritatif backend. --- ## 3. Komponen Monorepo ### `apps/backend` (Go 1.23+) - Arsitektur: **Modular Monolith** dengan Go Chi router. - Modules: Auth, Users, RBAC, Master Data, Products, Inventory, Orders, POS Sessions, Purchasing, Suppliers, HR/Payroll, Accounting, Auditing. - Entrypoint: `cmd/server/main.go`. - Output build: binary executable standalone `bin/server`. ### `apps/erp` (Vue 3 + Vite) - Arsitektur: Single Page Application (SPA). - UI Framework: Tailwind CSS, Headless UI, Heroicons, Lucide. - State Management: Pinia. - Target: Back-office management untuk pemilik bisnis, admin gudang, akuntan, dan tim HR. ### `apps/pos` (Vue 3 + Vite) - Arsitektur: High-performance SPA dioptimalkan untuk register kasir. - Features: Barcode scanning (`zxing-wasm`), split payments, receipt printing, keyboard shortcuts, offline queue. - State Management: Pinia dengan persistence ke IndexedDB / LocalStorage. ### `apps/b2b` (Nuxt 4 + Vue 3) - Arsitektur: SSR / Universal Nuxt application. - Features: Wholesale catalog, price tiering, cart session handling, order placement, customer account management. - State Management: Pinia + Nuxt useState. ### `apps/nextreport` (Python 3.10+) - Arsitektur: Report generation service / worker. - Output: PDF & XLSX export untuk laporan keuangan, inventory valuation, dan sales summary. --- ## 4. Keuntungan Monorepo untuk KeluargaMart 1. **Atomic Commits Lintas Service**: Perubahan skema API dapat dilakukan bersamaan dengan penyesuaian frontend dalam satu commit yang koheren. 2. **Eliminasi Copy-Paste Routes & Permissions**: Menghilangkan file teks duplikasi di masing-masing frontend yang rawan drift. 3. **Penyelarasan Tooling**: Satu eksekusi `pnpm test` menjalankan 625+ test di seluruh ekosistem dalam hitungan detik. 4. **Percepatan Onboarding**: Developer baru hanya perlu meng-clone 1 repositori dan menjalankan satu command `pnpm install` untuk memulai.