Autentikasi dan peran
| Peran | Cara masuk | Boleh |
|---|---|---|
| Owner | Email + password (backoffice) | Semua urusan bisnisnya |
| Manajer | Email + password (backoffice) dan PIN (POS) | Kelola kasir, void, pengaturan, stok |
| Kasir | PIN di POS | Jual, bayar, buka/tutup shift |
| Operator/Reviewer | Konsol tim dataset | Hanya katalog bersama; tidak punya akses ke data bisnis |
Owner dan manajer tenant tidak bisa memakai /v1/tenants dan /v1/internal/* (konsol dataset).
Pairing perangkat
Section titled “Pairing perangkat”sequenceDiagram participant O as Owner (backoffice) participant A as API participant P as POS O->>A: POST /v1/owner/pairings (kind, label, outletId) A-->>O: token perangkat (tampil sekali) O->>P: tempel kode di layar "Hubungkan perangkat" P->>A: GET /v1/devices/me (Bearer token) A-->>P: tenant, outlet, kind P->>P: simpan sesi (SecureStore / localStorage)
Token perangkat dicabut dari backoffice → Perangkat → Putuskan. POS menghapus sesi bila server menjawab 401.
Login PIN kasir
Section titled “Login PIN kasir”stateDiagram-v2 [*] --> BelumLogin BelumLogin --> Login: pilih staf dan isi PIN Login --> Aktif: PIN benar (sesi 12 jam) Login --> BelumLogin: PIN salah Login --> Terkunci: 5 kali salah Terkunci --> BelumLogin: setelah 5 menit Aktif --> BelumLogin: keluar atau kedaluwarsa
GET /v1/staff/rostermemberi daftar staf aktif untuk layar login.POST /v1/staff/loginmengembalikanstaffToken;pos-coremengirimnya sebagaiX-Staff-Token.- Bila roster kosong, POS berjalan tanpa login (mode tanpa staf) dan transaksi tidak mencatat kasir.
- Pengaturan outlet Wajib login kasir membuat server menolak transaksi tanpa sesi staf (
STAFF_REQUIRED).
Aksi manajer di POS
Section titled “Aksi manajer di POS”Void dan penyesuaian stok butuh owner/manajer. Dari POS: Authorization = token perangkat ditambah X-Staff-Token milik manajer/owner. Dari backoffice: token sesi owner/manajer.