# WP-C — كارت الصنف مفصول بالمتغيّر

## Goal
`StockCardController::stockCard` بيفلتر بـ`product_id` (+`warehouse_id` اختياري) بس، مع إن عمود `balance_after` **لقطة رصيد لكل متغيّر**. فحركات كل الألوان بتتداخل والرصيد الجاري بيطلع متضارب وغير صالح للمراجعة. المطلوب: إمكانية حصر الكارت على متغيّر.

## Exact files
- `/home/moonui2/moon-erp-be/Modules/Inventory/app/Http/Controllers/StockCardController.php`
  - `stockCard(int $product)` ~41-60: الاستعلام `InventoryMovement::query()->where('company_id',…)->where('product_id',$product)->with(['product.baseUnit','productVariant','warehouse'])->orderBy('id','desc')` + فلتر `warehouse_id` ~57-59 + فلاتر التاريخ بعدها.
  - **قائمة الحركات ~143-144** فيها نفس النمط — عالجها كمان.
  - ملحوظة مفيدة: `productVariant` **معمولّه eager-load بالفعل** (سطر 53) فاسم المتغيّر متاح بلا استعلام زيادة.
  - ⚠️ **ماتغيّرش الترتيب** `orderBy('id','desc')` — الكومنت 42-49 بيشرح إنه مقصود عشان الرصيد الجاري (`balance_after` متسلسل بترتيب الترحيل مش التاريخ).

## المطلوب بالضبط
باراميتر اختياري `product_variant_id` بدلالة **ثلاثية NULL-safe**:
- **غياب الباراميتر تمامًا** → السلوك الحالي بالظبط (كل الحركات لكل المتغيّرات) — regression لازم يفضل.
- **قيمة رقمية** → حركات المتغيّر ده بس.
- **قيمة فاضية صريحة** (`product_variant_id=` أو `null`) → حركات **المنتج الأساسي** (`whereNull('product_variant_id')`).
- اعرض `product_variant_id` + **اسم المتغيّر** على كل حركة في الرد.

## Interfaces (يستهلكها WP-D)
- Query param: `product_variant_id` (اختياري، بالدلالة الثلاثية فوق) على endpoint كارت الصنف وقائمة الحركات.
- كل حركة في الرد تحمل `product_variant_id` + `product_variant_name`.

## Acceptance
- [ ] كارت لمتغيّر واحد → حركاته هو بس، و`balance_after` متسلسل ومنطقي.
- [ ] بلا الباراميتر → نفس النتيجة القديمة بالظبط (regression).
- [ ] `product_variant_id` فاضي صريح → حركات الأساس بس.
- [ ] فلاتر `warehouse_id` والتواريخ شغّالة مع الفلتر الجديد.
- [ ] الترتيب بالـid لسه زي ما هو.

## Tests
Pest في `Modules/Inventory/tests/Feature/` (مثلاً `StockCardVariantScopeTest.php`): حركات لمتغيّرين → الفلتر يرجّع بتاع كل واحد · بلا باراميتر = الكل (regression) · فاضي صريح = الأساس.
⚠️ `product_variants` فاضي على dev — اعمل البيانات جوّه الاختبار.
شغّل: `/opt/cpanel/ea-php82/root/usr/bin/php -d memory_limit=1G vendor/bin/pest Modules/Inventory/tests`

## Flags
NOT [FIN] · **migration: لا**.

## Out of scope
أي تقرير مخزون آخر (حركة/بطيء الحركة/أعمار التكلفة = المرحلة ٣) · الواجهة (WP-D).
