# Skill Contract

**Skill ID:** lihat_keranjang
**Version:** v1
**Status:** APPROVED

---

## Intent
Menampilkan daftar produk yang ada di keranjang belanja pengguna, termasuk rincian nama produk, kuantitas, harga per unit, total harga keseluruhan, dan jumlah total item.

---

## Inputs
Tidak ada input yang diperlukan dari pengguna. Skill ini akan langsung memproses dan menampilkan isi keranjang belanja.

---

## Outputs
- daftar produk di keranjang (nama, kuantitas, harga per unit)
- total harga keseluruhan
- jumlah total item di keranjang

---

## Output Message
Jika keranjang belanja kosong, pesan 'Keranjang belanja Anda kosong. Silahkan memilih produk terlebih dahulu.' akan ditampilkan. Jika ada produk, akan ditampilkan 'Berikut adalah isi keranjang Anda:', diikuti oleh tabel dengan kolom 'Nama Produk', 'Kuantitas', dan 'Harga', lalu baris terpisah untuk 'Total Harga: [total_harga_keseluruhan]'.

---

## Logic
1. Panggil alat `view_cart` tanpa parameter untuk mengambil data keranjang belanja pengguna.
2. Periksa respons dari `view_cart`:
    a. Jika `response.error.status` adalah `true` ATAU `response.table.rows` kosong/tidak terdefinisi, maka keranjang belanja dianggap kosong. Siapkan pesan 'Keranjang belanja Anda kosong. Silahkan memilih produk terlebih dahulu.'
    b. Jika `response.table.rows` berisi data produk:
        i. Inisialisasi `total_harga_keseluruhan` menjadi 0.
        ii. Inisialisasi `jumlah_total_item_di_keranjang` menjadi 0.
        iii. Inisialisasi daftar kosong `produk_keranjang_untuk_tabel`.
        iv. Iterasi setiap `item` dalam `response.table.rows`:
            1. Ekstrak `Nama Produk` (misalnya dari `item['Product Name']`), `Kuantitas` (misalnya dari `item['Quantity']`), dan `Harga` (misalnya dari `item['Price']`).
            2. Konversi `Harga` dan `Kuantitas` ke format angka (integer atau float).
            3. Hitung `subtotal_produk` = `Kuantitas` * `Harga`.
            4. Tambahkan `subtotal_produk` ke `total_harga_keseluruhan`.
            5. Tambahkan `Kuantitas` ke `jumlah_total_item_di_keranjang`.
            6. Tambahkan objek `{'Nama Produk': product_name, 'Kuantitas': qty, 'Harga': price}` ke `produk_keranjang_untuk_tabel`.
        v. Format `produk_keranjang_untuk_tabel` menjadi representasi tabel yang rapi dengan kolom 'Nama Produk', 'Kuantitas', dan 'Harga' (kolom 'Kode Produk' tidak disertakan).
        vi. Siapkan pesan output yang dimulai dengan 'Berikut adalah isi keranjang Anda:', diikuti dengan representasi tabel produk dan baris terpisah untuk 'Total Harga: [total_harga_keseluruhan]'.

---

## Additional Logic
- Untuk mengidentifikasi keranjang pengguna yang benar, kemampuan ini akan menggunakan data pengguna yang sedang aktif (misalnya, melalui token sesi atau ID pengguna yang tersedia di konteks OmniAgent).
- Skill ini dirancang agar tidak pernah meminta input apapun dari pengguna dan akan langsung melanjutkan eksekusi dengan memanggil alat `view_cart` secara otomatis.
- Parsing respons dari alat `view_cart` akan menggunakan `response.table.rows` untuk mengekstrak item keranjang, bukan `response.data.detail` yang mungkin tertera di dokumentasi alat. Jika `response.table.rows` ditemukan kosong atau tidak terdefinisi, keranjang belanja akan dianggap kosong.
- Ketika menampilkan tabel produk, kolom 'Kode Produk' tidak akan disertakan. Tabel akan secara spesifik menampilkan 'Nama Produk', 'Kuantitas', dan 'Harga'.

---

## Side Effects
Tidak ada efek samping yang terjadi. Skill ini hanya mengambil dan menampilkan informasi keranjang belanja tanpa memodifikasinya.

---

## Capability Summary
Menampilkan isi keranjang belanja pengguna secara rinci, termasuk daftar produk (nama, kuantitas, harga per unit), total harga keseluruhan, dan jumlah total item.

---

## Allowed Roles
- SUPERUSER

---

## Assumptions
- Alat `view_cart` akan selalu tersedia dan berfungsi dengan baik.
- Respons dari alat `view_cart` untuk item keranjang diharapkan tersedia di `response.table.rows` dengan kunci yang sesuai seperti 'Product Name', 'Quantity', dan 'Price', meskipun dokumentasi alat mungkin menunjukkan `response.data.detail`. Skill ini akan memproses `response.table.rows` sesuai instruksi.
- Kuantitas dan Harga produk dapat dikonversi ke format angka (integer atau float) untuk perhitungan.
- Tidak ada otentikasi khusus atau penanganan sesi yang diperlukan untuk memanggil `view_cart` di luar kerangka kerja OmniAgent.

---

## Non-Goals
- Memodifikasi isi keranjang belanja (menambah, mengubah, atau menghapus produk).
- Menampilkan informasi produk selain Nama, Kuantitas, dan Harga.
- Menangani skenario di mana `view_cart` mengembalikan format data yang tidak sesuai dengan yang diharapkan di `response.table.rows` (misalnya, jika kunci yang diharapkan tidak ada).
- Meminta input dari pengguna untuk eksekusi skill ini.

---

## Failure Modes
- Gagal memanggil alat `view_cart` (misalnya, masalah konektivitas jaringan atau alat tidak tersedia).
- Alat `view_cart` mengembalikan respons dengan `error.status = true` yang mengindikasikan kegagalan pada sisi alat.
- Data produk di `response.table.rows` tidak memiliki kunci 'Product Name', 'Quantity', atau 'Price' yang diharapkan, menyebabkan kesalahan parsing.
- Nilai Kuantitas atau Harga tidak dapat dikonversi menjadi angka, menyebabkan kesalahan perhitungan total.

---

## Data & System Access
- Alat `view_cart` (untuk mengakses data keranjang belanja pengguna).
- Data keranjang belanja pengguna (termasuk nama produk, kuantitas, harga per unit).

---

## Safety & Risk
Risk Level: LOW

---

## Input Mode
chat

---

## Approval

    Approved by: USER  
    Approved on: 2026-05-22T06:00:55.657286Z