# Blueprint Sistem Kodifikasi Sempoa & Arsitektur Data Produk

Dokumen ini berisi cetak biru desain database, aturan kodifikasi sempoa (*positional coding*), dan struktur relasi tabel untuk hierarki produk 3 tingkat: **Department**, **Kategori**, dan **Sub-Kategori**.

---

## 1. Aturan & Format Kodifikasi Sempoa

Kodifikasi menggunakan metode panjang tetap (*fixed-length*) sepanjang **6 digit angka** untuk hierarki data, dan ditambahkan **3 digit nomor urut** untuk kode produk akhir.

Gunakan kode dengan hati-hati.Format Hierarki : DD - KK - SSFormat Produk   : DD - KK - SS - NNNKeterangan:DD  (2 Digit) : Produk Department (Maksimal 99)KK  (2 Digit) : Produk Kategori   (Maksimal 99 per Department)SS  (2 Digit) : Produk Sub-Kategori (Maksimal 99 per Kategori)NNN (3 Digit) : Nomor Urut Produk (Maksimal 999 per Sub-Kategori)
---

## 2. Struktur Schema Database (3 Tabel Master + 1 Tabel Produk)

### A. Tabel Master Department (`m_department`)
Tabel utama untuk mendefinisikan divisi atau departemen produk terbesar.

* **Skema Kolom:**

  | Nama Kolom | Tipe Data | Atribut | Keterangan |
  | :--- | :--- | :--- | :--- |
  | `kode_dept` | CHAR(2) | PRIMARY KEY | Kode Sempoa Dept (ex: '01', '02') |
  | `nama_dept` | VARCHAR(100) | NOT NULL | Nama Department |

* **Contoh Data:**

  | `kode_dept` (PK) | `nama_dept` |
  | :--- | :--- |
  | `01` | Makanan & Minuman |
  | `02` | Pakaian & Mode |

---

### B. Tabel Master Kategori (`m_kategori`)
Tabel yang memecah Department menjadi kelompok yang lebih spesifik.

* **Skema Kolom:**

  | Nama Kolom | Tipe Data | Atribut | Keterangan |
  | :--- | :--- | :--- | :--- |
  | `kode_kategori` | CHAR(4) | PRIMARY KEY | Kode Sempoa Gabungan DD+KK (ex: '0101') |
  | `kode_dept` | CHAR(2) | FOREIGN KEY | Relasi ke `m_department.kode_dept` |
  | `nama_kategori` | VARCHAR(100) | NOT NULL | Nama Kategori |

* **Contoh Data:**

  | `kode_kategori` (PK) | `kode_dept` (FK) | `nama_kategori` |
  | :--- | :--- | :--- |
  | `0101` | `01` | Camilan |
  | `0102` | `01` | Minuman Dingin |
  | `0201` | `02` | Pakaian Pria |

---

### C. Tabel Master Sub-Kategori (`m_sub_kategori`)
Tabel ujung tombak hierarki yang memegang kode sempoa penuh (6 digit).

* **Skema Kolom:**

  | Nama Kolom | Tipe Data | Atribut | Keterangan |
  | :--- | :--- | :--- | :--- |
  | `kode_sub_kategori` | CHAR(6) | PRIMARY KEY | Kode Sempoa Lengkap DD+KK+SS (ex: '010101') |
  | `kode_kategori` | CHAR(4) | FOREIGN KEY | Relasi ke `m_kategori.kode_kategori` |
  | `nama_sub_kategori` | VARCHAR(100) | NOT NULL | Nama Sub-Kategori |

* **Contoh Data:**

  | `kode_sub_kategori` (PK) | `kode_kategori` (FK) | `nama_sub_kategori` |
  | :--- | :--- | :--- |
  | `010101` | `0101` | Keripik |
  | `010102` | `0101` | Biskuit |
  | `020101` | `0201` | Kemeja |

---

### D. Tabel Master Produk (`m_produk`)
Tabel operasional yang menyimpan data barang spesifik yang dijual.

* **Skema Kolom:**

  | Nama Kolom | Tipe Data | Atribut | Keterangan |
  | :--- | :--- | :--- | :--- |
  | `kode_produk` | CHAR(9) | PRIMARY KEY | Kode Sempoa + Running Number (ex: '010101001') |
  | `kode_sub_kategori`| CHAR(6) | FOREIGN KEY | Relasi ke `m_sub_kategori.kode_sub_kategori` |
  | `nama_produk` | VARCHAR(150) | NOT NULL | Nama Spesifik Produk |
  | `harga_jual` | DECIMAL(12,2)| NOT NULL | Harga Jual Produk |
  | `stok` | INT | DEFAULT 0 | Jumlah Stok Fisik |

* **Contoh Data:**

  | `kode_produk` (PK) | `kode_sub_kategori` (FK) | `nama_produk` | `harga_jual` |
  | :--- | :--- | :--- | :--- |
  | `010101001` | `010101` | Keripik Singkong Balado 150g | 15000.00 |
  | `010101002` | `010101` | Keripik Pisang Cokelat Melte | 18000.00 |
  | `020101001` | `020101` | Kemeja Flanel Pria Slimfit M | 150000.00 |

---

## 3. Struktur Relasi Tabel (Entity Relationship Diagram - Logika)

[m_department] 1 -------- ∞ [m_kategori](01)                       (0101)|1|[m_produk]     ∞ -------- 1 [m_sub_kategori](010101001)                    (010101)
---

## 4. Panduan Implementasi Query (SQL)

Untuk menarik data produk lengkap beserta nama hierarkinya, gunakan teknik `INNER JOIN` dari bawah ke atas dari tabel produk:

```sql
SELECT 
    p.kode_produk,
    p.nama_produk,
    d.nama_dept AS department,
    k.nama_kategori AS kategori,
    s.nama_sub_kategori AS sub_kategori,
    p.harga_jual
FROM m_produk p
INNER JOIN m_sub_kategori s ON p.kode_sub_kategori = s.kode_sub_kategori
INNER JOIN m_kategori k ON s.kode_kategori = k.kode_kategori
INNER JOIN m_department d ON k.kode_dept = d.kode_dept;
```

---

## 5. Keunggulan Desain Ini
1. **Integritas Data Terjamin:** Tidak ada duplikasi teks nama kategori di tabel produk.
2. **Kecepatan Indexing:** Proses pencarian/filter di aplikasi atau POS berdasarkan kode `0101%` (Camilan) berjalan instan karena tipe data berupa `CHAR`.
3. **Fleksibilitas Pelaporan:** Sangat mudah melakukan pengelompokan omset penjualan per tingkat hierarki hanya dengan memotong digit kode produk (`LEFT(kode_produk, 2)` untuk report per department).