title: “POS Overview” description: “Gambaran lengkap sistem Point of Sale (POS) SNISHOP ERP — 10 entitas, 14 server functions, 8 BroadcastChannels, dual POS (personal + company), arsitektur offline-first dengan WAL crash recovery, dan integrasi lintas 7 modul.”
POS Overview

Arsitektur Sistem POS
Dual POS System
10 Entitas POS
Halaman-Halaman POS
Multi-Channel Sales — 8 Channels
Channel Pricing Gate (A3)
Payment Methods — 6 Methods + Split Payment
Split Payment (Multi-Tender)
14 Server Functions
8 BroadcastChannels — Real-Time Sync
3-Tier Sync Strategy
Transaction Integrity
Write-Ahead Log Lifecycle
Discount Approval (A1)
Void Management (PRD-07)
Multi-Location
Peran & Akses
Keyboard Shortcuts
Integrasi POS dengan Modul Lain
Best Practices
- Selalu mulai shift dengan cek koneksi internet dan status printer
- Gunakan shortcut keyboard untuk mempercepat transaksi saat antrian panjang
- Cek channel yang aktif sebelum memproses transaksi untuk menghindari salah input
- Lakukan close shift di akhir shift untuk rekonsiliasi uang kas
- Monitor order queue secara berkala untuk memastikan tidak ada order yang terlewat
- Backup data secara berkala melalui export laporan
- Review discount threshold (20%) secara periodik — naikkan jika terlalu banyak approval bottleneck
- Monitor WAL queue — jika ada transaksi stuck di “DeadLetter”, segera investigasi dan resolve manual
Entity Relationship Diagram
Entity Schema Tables
Company POS Entities (5 Entitas)
1. CompanyPOSTransaction — 48 Fields
Transaksi kasir company-scoped dengan full audit trail. RLS:company_id = current_company.id.
Sub-skema:
items[]
Sub-skema:
payments[] (Split Payment)
2. CompanyPOSProduct — 40 Fields
Produk POS company-scoped dengan channel pricing, bundle support, dan data quality lock. RLS:company_id = current_company.id.
Sub-skema:
variants[]
Sub-skema:
bundle_components[]
Sub-skema:
channel_pricing
3. CompanyPOSInventory — 11 Fields
Stok dan pergerakan inventory per lokasi. RLS:company_id = current_company.id.
4. CompanyPOSCategory — 6 Fields
Kategori produk company-scoped. RLS:company_id = current_company.id.
5. CompanyPOSSettings — 2 Fields (+ 15 nested receipt_settings)
Pengaturan POS global per company. RLS:company_id = current_company.id.
Sub-skema:
receipt_settings
Personal POS Entities (5 Entitas)
6. POSTransaction — 17 Fields
Transaksi kasir personal (owner-scoped). RLS:created_by_id = current_user.id.
Sub-skema:
items[]
7. POSProduct — 16 Fields
Produk POS personal. RLS: owner-scoped.
Sub-skema:
variants[]
