Lewati ke konten

Komponen dan alur data

flowchart TB
  subgraph Klien
    POS["POS Retail / F&B<br/>Expo"]
    CUS["Self-order<br/>web"]
    BO["Backoffice<br/>web"]
  end
  subgraph Cloudflare
    API["navv-ci-core<br/>Hono Worker"]
    D1[("D1<br/>navv-ci-db")]
    R2[("R2<br/>foto lookup")]
    AI["Workers AI<br/>Whisper"]
  end
  POS -- "device token + X-Staff-Token" --> API
  CUS -- "publik: QR bertanda tangan" --> API
  BO -- "sesi owner/manajer" --> API
  API --> D1
  API --> R2
  API --> AI
Pemanggil Header Catatan
POS (perangkat) Authorization: Bearer <device token> + X-Staff-Token (opsional) Dipasangkan lewat kode dari backoffice
Backoffice Authorization: Bearer <sesi owner/manajer> Login email dan password
Pelanggan Tanpa token; QR meja bertanda tangan + Idempotency-Key Endpoint /v1/public/* saja

Semua respons memakai amplop:

{ "data": { }, "requestId": "..." }
{ "error": { "code": "TOTAL_MISMATCH", "message": "...", "details": {} }, "requestId": "..." }
sequenceDiagram
  participant K as Kasir
  participant P as POS (pos-core)
  participant A as API
  participant D as D1
  K->>P: Bayar
  P->>P: Hitung total (computeTotals)
  P->>P: Simpan ke outbox lokal
  P->>A: POST /v1/sales/sync (operationId)
  A->>A: Hitung ulang total, cek bayar
  A->>D: batch: receipt, sale, items, payments, stok
  A-->>P: synced + totals
  P->>P: Hapus dari outbox, tampilkan struk