Skip to main content

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

POS Dashboard Sistem Point of Sale (POS) SNISHOP ERP adalah pusat transaksi penjualan yang mengelola seluruh alur dari kasir hingga laporan. Dirancang untuk bisnis F&B multi-channel, sistem ini mendukung 8 channel penjualan, 6 metode pembayaran, multi-lokasi, dan arsitektur offline-first dengan Write-Ahead Log untuk crash recovery. Modul POS terdiri dari 10 entitas, 14 server functions, 8 BroadcastChannels untuk real-time sync, dan 2 terminal kasir (personal + company) yang totalnya mencakup lebih dari 10.000 baris kode komponen React.

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

  1. Selalu mulai shift dengan cek koneksi internet dan status printer
  2. Gunakan shortcut keyboard untuk mempercepat transaksi saat antrian panjang
  3. Cek channel yang aktif sebelum memproses transaksi untuk menghindari salah input
  4. Lakukan close shift di akhir shift untuk rekonsiliasi uang kas
  5. Monitor order queue secara berkala untuk memastikan tidak ada order yang terlewat
  6. Backup data secara berkala melalui export laporan
  7. Review discount threshold (20%) secara periodik — naikkan jika terlalu banyak approval bottleneck
  8. 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[]

8. POSMember — 21 Fields

Database member dengan loyalty data. RLS: owner-scoped.

9. POSInventory — 10 Fields

Stok produk personal. RLS: owner-scoped.

10. POSCategory — 5 Fields

Kategori produk personal. RLS: owner-scoped.

State Machines — Transaction Lifecycle

CompanyPOSTransaction: order_status Lifecycle

CompanyPOSTransaction: status Lifecycle

CompanyPOSTransaction: payment_status Lifecycle

POSTransaction: status Lifecycle (Personal)

CompanyPOSProduct: Active/Deactivated Lifecycle


Enum Reference Tables

payment_method — CompanyPOSTransaction

payment_method — POSTransaction (Personal)

source — CompanyPOSTransaction

sales_channel — CompanyPOSTransaction

order_status — CompanyPOSTransaction

status — CompanyPOSTransaction

payment_status — CompanyPOSTransaction

status — POSTransaction (Personal)

product_type — CompanyPOSProduct

packaging_type — CompanyPOSProduct

storage_condition — CompanyPOSProduct

type — CompanyPOSInventory & POSInventory

membership_tier — POSMember

receipt_width — CompanyPOSSettings.receipt_settings

font_size — CompanyPOSSettings.receipt_settings