# WP-B — تنبيهات إعادة الطلب لكل متغيّر

## Goal
`ReorderAlertController` بيجمع كميات **كل المتغيّرات** في رقم واحد لكل منتج ويقارنه بحدود المنتج، فلون بيخلص مايطلعش تنبيه لأن لون تاني متخزّن بكتير. المطلوب: التنبيه يتحسب ويظهر **لكل (منتج × متغيّر)** مقابل **نفس** حدود المنتج.

## Exact files
- `/home/moonui2/moon-erp-be/Modules/Inventory/app/Http/Controllers/ReorderAlertController.php`
  - التجميع الرئيسي ~76-77: `StockBalance::query()->where('company_id',…)->select('product_id', DB::raw('SUM(quantity) as total_qty'))->groupBy('product_id')` ثم `pluck('total_qty','product_id')` والاستهلاك `$stockMap[$product->id]` ~85-90.
  - **نفس النمط متكرر في ~179-187 و~300-302 و~375-376** — راجع الأربعة كلهم وعالجهم بنفس الطريقة.

## المطلوب بالضبط
- التجميع يبقى `groupBy('product_id','product_variant_id')` والمقارنة تتم لكل متغيّر على حدة.
- **الحدود تفضل من المنتج**: `products.reorder_point` / `min_stock_level` / `max_stock_level` — **قرار مثبّت من العميل: مفيش عمود حدود جديد ومفيش migration**. نفس حد المنتج بيتطبّق على كل متغيّر.
- المنتج اللي **مالوش متغيّرات** يفضل ينتج **تنبيه واحد** بنفس الشكل والقيم بالظبط زي دلوقتي (variant=null).
- كل تنبيه يحمل `product_variant_id` + **اسم المتغيّر**.
- حافظ على فلتر `warehouse_id` الاختياري وأي فلاتر/ترتيب/pagination موجودة، وعلى شكل الرد العام (مضاف له حقلي المتغيّر بس).
- ⚠️ المفتاح لازم يكون **NULL-safe**: خريطة مفاتيحها `product_id` لوحده مش كفاية — استخدم مفتاح مركّب (مثلاً `"{$productId}-{$variantId}"` مع تمييز واضح للـnull) عشان صفوف الأساس ما تختلطش بصفوف المتغيّرات.

## Interfaces (يستهلكها WP-D)
كل عنصر تنبيه يحتوي إضافةً للموجود على:
- `product_variant_id` : int|null
- `product_variant_name` : string|null

## Acceptance
- [ ] منتج بمتغيّرين: «أزرق S» كميته تحت حد الطلب و«أحمر L» فوقه بكتير → **يطلع تنبيه لـ«أزرق S» فقط**، ومايظهرش تنبيه للأحمر.
- [ ] قبل التعديل نفس السيناريو كان **مايطلعش أي تنبيه** — الاختبار لازم يثبت الفرق.
- [ ] منتج بلا متغيّرات → تنبيه واحد بنفس السلوك القديم بالظبط (regression).
- [ ] فلتر `warehouse_id` شغّال زي ما هو.
- [ ] المواضع الأربعة كلها متعالجة (مش الرئيسي بس).

## Tests
Pest في `Modules/Inventory/tests/Feature/` (مثلاً `ReorderAlertVariantTest.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).
