# Skill Contract

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

---

## Intent
Untuk mengeluarkan barang dari keranjang belanja berdasarkan nama produk. Skill ini akan mencari produk yang cocok atau mirip di keranjang, dan jika ditemukan, akan menghapusnya. Jika tidak ditemukan, akan memberikan pesan bahwa produk tidak ada di keranjang.

---

## Inputs
- `nama_produk`: (string, required) Nama produk yang ingin dikeluarkan dari keranjang belanja.

---

## Outputs
Pesan konfirmasi jika produk berhasil dikeluarkan dari keranjang, atau pesan kesalahan jika produk tidak ditemukan di keranjang.

---

## Output Message
{nama barang} telah dikeluarkan dari keranjang

---

## Logic
1.  **Validasi Input**: Pastikan input `nama_produk` tidak kosong.
2.  **Lihat Keranjang**: Panggil alat `view_cart` untuk mendapatkan daftar semua produk yang saat ini ada di keranjang belanja pengguna.
3.  **Cari Produk**: Iterasi melalui daftar produk yang didapatkan dari `view_cart`.
    *   Lakukan pencarian (case-insensitive dan/atau parsial) untuk menemukan produk yang `nama_produk`nya cocok atau mirip dengan input yang diberikan.
4.  **Hapus Produk (Jika Ditemukan)**:
    *   Jika produk yang cocok ditemukan: Ambil `procode` dari produk tersebut.
    *   Panggil alat `remove_from_cart` dengan `procode` yang ditemukan.
    *   Jika `remove_from_cart` berhasil, kembalikan pesan output sukses: "{nama barang} telah dikeluarkan dari keranjang".
5.  **Produk Tidak Ditemukan**: Jika tidak ada produk yang cocok ditemukan di keranjang setelah pencarian:
    *   Kembalikan pesan kesalahan: "produk {nama produk} tidak ditemukan dalam keranjang".

---

## Additional Logic
Alat 'remove_from_cart' membutuhkan parameter untuk mengidentifikasi barang yang akan dihapus.
- Ubah input dari 'kode produk' menjadi 'nama produk'. Gunakan alat 'view_cart' untuk mencari barang yang cocok atau mirip berdasarkan 'nama produk' di keranjang. Jika ditemukan, panggil alat 'remove_from_cart' dengan kode produk yang ditemukan. Jika tidak ditemukan, kembalikan pesan 'produk {nama produk} tidak ditemukan dalam keranjang'.

---

## Side Effects
-   Memodifikasi status keranjang belanja pengguna dengan menghapus satu produk.
-   Melakukan panggilan API ke `view_cart` (membaca data).
-   Melakukan panggilan API ke `remove_from_cart` (menulis data).

---

## Capability Summary
Memungkinkan pengguna untuk menghapus barang dari keranjang belanja berdasarkan nama produk yang diberikan, dengan validasi keberadaan produk di keranjang.

---

## Allowed Roles
- SUPERUSER

---

## Assumptions
-   Alat `view_cart` akan mengembalikan daftar produk dengan atribut seperti `name` (untuk pencarian) dan `procode` (untuk penghapusan).
-   Pencarian produk berdasarkan nama dapat menangani variasi penulisan atau nama parsial.
-   Pengguna sudah terautentikasi dan memiliki sesi keranjang belanja aktif.

---

## Non-Goals
-   Menghapus beberapa item sekaligus dengan satu permintaan.
-   Memperbarui kuantitas produk yang ada di keranjang.
-   Menambahkan produk baru ke keranjang belanja.

---

## Failure Modes
-   Produk yang dicari tidak ditemukan dalam keranjang belanja.
-   Gagal saat memanggil alat `view_cart` (misalnya, masalah koneksi atau API).
-   Gagal saat memanggil alat `remove_from_cart` (misalnya, kesalahan internal API atau produk tidak valid).
-   Input `nama_produk` kosong atau tidak valid.

---

## Data & System Access
-   Akses baca/tulis ke data keranjang belanja pengguna.
-   Akses ke alat `view_cart`.
-   Akses ke alat `remove_from_cart`.

---

## Safety & Risk
Risk Level: MEDIUM

---

## Input Mode
form

---

## Approval

    Approved by: USER  
    Approved on: 2026-05-12T12:56:48.476956Z