engineering docs

Catalog database

catalog menyimpan definisi barang/jasa dan aturan presentasi atau harga. Ownership tetap ditentukan oleh organizationId dari runner.

Product dan category

Product memiliki name, description, sellingPrice, tax, media, categoryId, status draft/archive, dan organizationId. Category mendukung hierarchy melalui parentId.

Pola CRUD yang benar:

  1. Validasi session dan membership di runner.
  2. Validasi category berada pada scope organisasi yang sama.
  3. Tulis product di catalog.
  4. Kembalikan id catalog sebagai reference untuk commerce/inventory.
{
  "name": "Product name",
  "description": "Description",
  "sellingPrice": 125000,
  "categoryId": "<catalog category id>",
  "organizationId": "<runner organization id>"
}

Service dan service item

Service menyimpan nomor layanan, status transaksi, detail item, biaya tenaga kerja, customer reference, dan cashier reference. ServiceItem menghubungkan spare part product, quantity, dan harga snapshot. Harga historis jangan dihitung ulang dari product setelah transaksi dibuat.

Promotion dan discount

Promotion memiliki periode, status aktif, limit penggunaan, dan organizationId. DiscountRule menentukan target product/service serta tipe discount: percentage, fixed amount, fixed price, atau buy-x-get-y. Validasi kombinasi field sesuai discountType, quota, periode, dan concurrency sebelum increment usage.

Commerce menyimpan product/service snapshot pada cart/order agar perubahan catalog tidak mengubah transaksi historis.