﻿# 🤖 AI Agent Rules — Foundation Layer (Single Variant Standard)

**Agent ID:** foundation
**Workspace:** \\192.168.5.14\web\new_san_variant (atau drive mapping setempat)
**Priority:** P0 — WAJIB selesai sebelum agent lain mulai
**Estimasi:** 1-2 minggu

---

## Tugas

1. Helper `he_variant_unifier_helper.php` (di `application/helpers/`)
2. Database view `stock_unified`
3. Feature flag `"singleVariantStandard"` di config global
4. Middleware `normalizeSessionKeys()` di `Modul_Controller::__construct()`

## File Output

| File | Isi |
|------|-----|
| `application/helpers/he_variant_unifier_helper.php` | resolveVariantId(), normalizeSessionKeys(), getUnifiedStock() |
| `database/migrations/XXX_create_view_stock_unified.sql` | View stock_unified |
| `application/modules/konversi/config/coTransaksiCore.php` | Feature flag singleVariantStandard |
| `application/modules/konversi/controllers/Modul_Controller.php` | Middleware |

## Kode Wajib — Helper

```php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

define('VARIANT_DEFAULT_ID', -1);
define('VARIANT_DEFAULT_LABEL', 'Default');

function resolveVariantId($produkId, $variantId = 0)
{
    if ((int)$variantId > 0) return (int)$variantId;
    return VARIANT_DEFAULT_ID;
}

function normalizeSessionKeys(&$session, $cCode)
{
    if (!isset($session[$cCode]['items'])) return;
    $newItems = array();
    foreach ($session[$cCode]['items'] as $key => $spec) {
        if (!is_array($spec)) continue;
        $pid = isset($spec['produk_id']) ? (int)$spec['produk_id'] : (int)$key;
        $vid = resolveVariantId($pid, isset($spec['variant_id']) ? (int)$spec['variant_id'] : 0);
        $newKey = 'variant:' . $pid . ':' . $vid;
        $spec['variant_id'] = $vid;
        $spec['cart_key'] = $newKey;
        $newItems[$newKey] = $spec;
    }
    $session[$cCode]['items'] = $newItems;
}
```

## Larangan

- ❌ Jangan ubah template/view
- ❌ Jangan ubah controller selain Modul_Controller
- ❌ Jangan hapus tabel — hanya buat view

## Verifikasi

1. `resolveVariantId(1743, 0)` → -1
2. `resolveVariantId(1743, 15)` → 15
3. Session key `"1743"` → `"variant:1743:-1"` setelah normalizer

## Rollback

Set `singleVariantStandard.enabled = false` di config.
