erDiagram
TENANTS ||--o{ OUTLETS : punya
TENANTS ||--o{ ACTORS : punya
OUTLETS ||--o{ DEVICES : punya
OUTLETS ||--o{ DINING_TABLES : punya
OUTLETS ||--o{ SHIFTS : punya
TENANTS ||--o{ STORE_PRODUCTS : punya
TENANTS ||--o{ MENUS : punya
MENUS ||--o{ MENU_ITEMS : berisi
TENANTS ||--o{ SALES : punya
SALES ||--o{ SALE_ITEMS : berisi
TENANTS ||--o{ ORDERS : punya
ORDERS ||--o{ ORDER_LINES : berisi
SALES ||--o{ PAYMENTS : dibayar
ORDERS ||--o{ PAYMENTS : dibayar
STORE_PRODUCTS ||--o{ STOCK_MOVEMENTS : mencatat
TENANTS ||--o{ CUSTOMERS : punya
ACTORS ||--o{ ACTOR_SESSIONS : punya
| Tabel |
Isi penting |
outlets |
tax_rate_bp, service_rate_bp, tax_inclusive, receipt_header/footer, require_staff, slug |
sales / orders |
subtotal, discount, service, tax, total_minor, status, shift_id, actor_id, voided_by |
orders |
order_type, table_id, kitchen_status, payment_status, source (pos atau self_order) |
payments |
method, amount_minor, received_minor, change_minor, reference, shift_id |
store_products |
stock, track_stock, low_stock_threshold, category, parent_id, variant_label |
menu_items |
status (active/paused/sold_out), aliases_json, modifier_groups_json |
operation_receipts |
kunci idempotensi operationId |
- Pajak dan service dalam basis points (1100 = 11%).
- Urutan hitung:
subtotal - diskon → service → pajak. Mode inklusif: pajak sudah di dalam harga dan hanya dilaporkan.
- Pembulatan: setengah ke atas per komponen. Fixture bersama
fixtures/totals.json menjaga server dan klien identik.
stateDiagram-v2
[*] --> pending_accept: self-order masuk
[*] --> new: order dari kasir
pending_accept --> new: kasir menerima
pending_accept --> cancelled: kasir menolak
new --> preparing
new --> cancelled
preparing --> ready
preparing --> cancelled
ready --> served
served --> [*]
cancelled --> [*]