Lewati ke konten

Model data

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 --> [*]