Lewati ke konten

Scan, foto, dan lookup

Tab Scan (apps/retail/src/app/(tabs)/scan.tsx) memakai expo-camera.

flowchart TD
  A["Buka kamera atau ketik manual"] --> B["Barcode terbaca / pencarian"]
  A --> P["Ambil foto produk"]
  B --> C{"Ada di produk toko?"}
  C -- "ya" --> D["Langsung masuk keranjang"]
  C -- "tidak" --> E["POST /v1/lookup"]
  P --> Q["POST /v1/lookup/photo<br/>foto disimpan, analisis belum ada"]
  Q --> E2{"Ada barcode/teks sebagai petunjuk?"}
  E2 -- "ya" --> E
  E2 -- "tidak" --> N
  E --> F{"Ditemukan di dataset?"}
  F -- "ya" --> G["Kandidat katalog<br/>tombol Jual produk ini"]
  F -- "tidak (404)" --> N["Produk tidak ditemukan"]
  G --> H["Isi harga jual"]
  N --> I["Tambah sebagai produk toko"]
  H --> J["PUT /v1/store-products/:id"]
  I --> J
  J --> K["Masuk keranjang"]

POST /v1/lookup dengan { barcode?, query? }:

Kasus Respons
GTIN valid ada di katalog 200 { status: "found", matchedBy: "gtin", products: [...] }
Nama/merek/varian/alias cocok 200 { matchedBy: "name", products: [...] } (maks 10)
Tidak ada 404 NO_PRODUCT_FOUND, pesan no product found, details.reasons

POST /v1/lookup/photo (multipart image, opsional barcode/query):

  • Hanya JPEG, PNG, WebP (dicek dari magic bytes), maks 5 MB.
  • Foto disimpan privat di R2 per tenant untuk tim dataset.
  • Analisis gambar belum ada. Tanpa petunjuk barcode/teks, jawabannya selalu NO_PRODUCT_FOUND dengan analysis: "not_available".
  • Di web, kamera dan scan barcode bergantung pada browser; pencarian manual selalu tersedia sebagai cadangan.
  • Barcode yang diabaikan: pembacaan yang sama dalam 3 detik (anti-ganda).
  • Jenis barcode: EAN-13/8, UPC-A/E, Code 128.

Katalog bersama hanya bisa ditulis tim dataset. Perangkat POS hanya membaca (POST ke /v1/catalog/products mengembalikan 403).