# WP5 — واجهة: «وسم شغلانة» في شاشة أذون الصرف

**التذكرة:** ISS-2026-9296 · **الريبو:** FE (`/home/moonui2/public_html/moon-erp`, فرع `hazemdev2`)

## الهدف
في شاشة **أذون الصرف**، أمين المخزن يختار نوع المرجع **«وسم شغلانة»**، يدوّر ويختار وسمًا موجودًا، **أو يضيف وسمًا جديدًا من نفس الشاشة** من غير ما يسيبها — مع **تحذير لو الاسم قريب من وسم موجود**.

## ⭐ النمط موجود في نفس الملف — اقيس عليه، ماتخترعش
الشاشة نفسها (`src/app/features/stock-issues/stock-issues.component.{ts,html,scss}`) فيها **بالفعل** النمط ده كامل من ISS-2026-9260 لنوع «أمر إنتاج»: منتقي `p-select` ببحث من السيرفر + حوار «إنشاء جديد» + التبويب على الصلاحية + رسائل حالة فاضية بتفرّق بين (بلا صلاحية / فشل الطلب / فاضي فعلًا) + `[showClear]` + مسح القيمة والـvalidator عند تبديل النوع + تصفير الحالة عند إعادة فتح الحوار.
⇒ **كرّر نفس النمط للوسم.** ولو لقيت الكود ينفع **يتشارك** بين الاتنين من غير ما تعقّده، شاركه؛ ولو المشاركة هتعمل تجريدًا متكلّفًا، كرّره واشرح ليه.

## عقد الـAPI (متنفّذ ومختبَر في الباك إند — التزم بيه حرفيًا)
- `GET  /api/inventory/issue-tags?status=active&search=<q>` — قائمة مصفّحة company-scoped. صلاحية `inventory.issue-tags.view`. الافتراضي `status=active` من الباك إند (النشط بس).
- `POST /api/inventory/issue-tags` — `{name, name_ar?, description?}` → الوسم. صلاحية **`inventory.issue-tags.create`**.
- `GET  /api/inventory/issue-tags/similar?name=<q>` — ⭐ بيرجّع لحد **5** وسوم قريبة (بيمسك «صيانة / صيانه / الصيانة / الصِّيانةِ / صيــانة» كلهم كتطابق تام). صلاحية `…view`. **تحذير مش منع.**
- على إذن الصرف: `reference_type = 'job_tag'` و`reference_id = <tag id>`. **`reference_id` مطلوب** مع النوع ده، ووسم **مقفول** أو شركة تانية ⇒ **422**.
- الريسورس بيرجّع اسم الوسم في **`reference_number`** (زي رقم أمر الإنتاج بالظبط) ⇒ العرض في القائمة والتفاصيل والطباعة شغّال أصلًا من غير تعديل — **اتأكّد بالتجربة، ماتخترعش حقلًا جديدًا**.

## المطلوب
1. **«وسم شغلانة»** في قائمة نوع المرجع (الباك إند حاطط الـcase بعد «أمر إنتاج» وقبل «أخرى» — التسمية جاية من الـAPI).
2. **منتقي وسوم** ببحث من السيرفر (debounce) + `[showClear]`.
3. **زرار «وسم جديد»** بيفتح حوارًا صغيرًا (اسم + وصف اختياري) — **متبوّب على `inventory.issue-tags.create`**، واللي مامعهوش الصلاحية يختار من الموجود بس ويتقاله كده بوضوح.
4. ⭐ **تحذير التقارب:** لما يكتب الاسم في حوار الإضافة (بعد debounce)، نادِ `similar` واعرض «فيه وسم قريب: … — تقصد ده؟» مع إمكانية **يختاره بضغطة** بدل ما يعمل جديد. **مايمنعش الإنشاء** — التقارب تحذير والقرار للمستخدم.
5. بعد الإنشاء: الوسم الجديد **يتختار تلقائيًا** في المنتقي (زي ما الأمر المؤقت كان بيعمل).
6. i18n: كل نص جديد بمفتاح في **`ar.json` و`en.json`** الاتنين. RTL أولًا.
7. **بمّت `I18N_VERSION`** في `src/app/app.config.ts` (القيمة الحالية `'20260725b'` — زوّد اللاحقة).

## قيود عدم الانحدار (الأهم)
- ⛔ **الأنواع الموجودة كلها (بيع/استهلاك/تالف/تسوية/أخرى/أمر إنتاج) وسلوك الشاشة معاها لازم يفضلوا مطابقين بايت-ببايت** — نفس الحمولة ونفس الترتيب ونفس السلوك.
- ⛔ **ماتلمسش** الصرف على أمر إنتاج (المفتاح/المنتقي/حوار الأمر المؤقت). ⚠️ فيه WP تاني هيشيل **الأمر المؤقت** — لو لقيت كوده، **سيبه زي ما هو**، مش شغلك.
- **درس متعلَّم من 9260 لازم تطبّقه:** المنتقي **ماينفعش** يتعمله `[disabled]` لما مفيش صلاحية — الكنترول المعطّل بيتشال من `form.value` ومن التحقّق ⇒ بيسحب `reference_id` من الحمولة بصمت ⇒ 422 مافيش حقل يقدر يرضيه. اعرض رسالة بدل التعطيل.
- **ودرس تاني:** أي تبويب على صلاحية أو إعداد يبقى على **الواجهة** مش على **البيانات** — استعادة `reference_id` عند تعديل إذن قديم لازم تحصل **دايمًا**، والمتبوّب هو المنتقي بس. وإلا إذن قديم على وسم مقفول يبقى غير قابل للحفظ.
- تبديل النوع بعيد عن `job_tag` **يمسح** القيمة والـvalidator.

## معايير القبول
1. إذن صرف بنوع «وسم شغلانة» + وسم مختار ⇒ يتحفظ ويتعتمد.
2. مستخدم بلا `…create` **مايشوفش** زرار الإضافة، وبيختار من الموجود عادي.
3. كتابة «صيانه» في حوار الإضافة والموجود «صيانة» ⇒ **تحذير** + إمكانية اختيار الموجود بضغطة، والإنشاء **لسه ممكن** لو أصرّ.
4. اسم الوسم بيبان في قائمة الأذون وفي التفاصيل (عبر `reference_number` الموجود).
5. الأنواع الحالية ما اتأثرتش، والبناء أخضر.

## التحقّق
```bash
cd /home/moonui2/public_html/moon-erp && npx ng build --base-href /app/
```
لازم يطلع أخضر بلا تحذير **جديد** (التحذيرات الموجودة: CommonJS bailouts لـcanvg/jsbarcode/qrcode/file-saver/html2canvas + تجاوزَي ميزانية SCSS في شاشتَي LIS — دي سابقة). **ماتنشرش على `/app`** — النشر شغلي.

## خارج النطاق
- ⛔ شاشة إدارة الوسوم وشاشة التقرير (WP6) · ⛔ إزالة الأمر المؤقت (WP4) · ⛔ أي ملف باك إند.

## بعد الانتهاء
`chown -R moonui2:moonui2` على أي ملف عدّلته (و`dist/` لو البناء عمله بـroot). **بلا commit وبلا git.**
