# تحليل نظام عمرو القديم (amrtechogate/obgy) — إزاي بيعرض الخيارات

> المصدر: دخول فعلي بـ `manager/123456` على `amr.technoogate.com/obgy` + قراءة الكود والجداول. تاريخ: 2026-10-21.
> الهدف: نفهم آلية «الخيارات/pick-lists» عندهم عشان نلمّ ونوحّد فورم المنصة.

## 1. 6 أنماط لعرض الخيارات (باللي شُفته بعيني + الكود)

| # | النمط | فين ظهر | الآلية في الكود |
|---|---|---|---|
| 1 | **Select من lookup** | شاشة الفحص: Head&Neck / Chest&Heart / Abdomen / Neck US / Extremities — كلها «Choose» dropdown | كل حقل له **جدول lookup مستقل** `(id, title/name, del)`: `examinationhead`, `examinationchest`, `examinationabdomen`, `examinationpelvis`, `examinationextremitis` |
| 2 | **Inline add (إضافة قيمة أثناء الشغل)** | زرار «+ Add» جوه الـselect | `editmodel.html` → `#addnewRow data-tableName={$table}` + `updateElementSelect` يعمل INSERT في جدول الحقل مباشرة. الدكتور بيضيف خيار جديد من غير ما يسيب الشاشة |
| 3 | **Favourite (تعليم المتكرر)** | أسئلة التاريخ (present history) | `answers.html`: checkbox `addFavorite` لكل عنصر؛ `addtofavorite()` بيسِت `favorite=1` → المتكرر بيطفو لفوق |
| 4 | **كتالوج مُدار بفئات** | شاشة Investigation Category: 18 فئة (Chemistry, Hematology, Hormonal, Tumor Markers, Genetics, ICSI, Semen, Radiological, ANC Booking/27W, Aneuploidy, Bacteriology…) كل واحدة SHOW/EDIT/DELETE + ADD NEW | جدولين: `investcats` (الفئة + `displayorder`) و `invests` (الفحص داخل الفئة). الدكتور بيدير الكتالوج بنفسه |
| 5 | **كتالوج أدوية بجملة افتراضية** | شاشة Drugs: **1,989 دواء**، أعمدة Group / Drug Name / Form / **Use** (جملة تعليمات عربية جاهزة) + Edit/**Duplicate**/Delete + بحث + pagination | كل دواء شايل «Use» = جملة الجرعة الافتراضية اللي بتتحط تلقائي في الروشتة. Duplicate = نسخة بجملة مختلفة لنفس الدواء |
| 6 | **Multi-select + تخزين CSV** | التشخيص والشكوى (select2 multi) | الاختيارات المتعددة بتتخزن **CSV** في عمود واحد: `diagnosisid="3,7,12"` و `complaintid` → `explode(',', …)`. فيه جداول تشخيص منفصلة لكل سياق: `diagnosis`, `husbndiagnosis1/2/3`, `infertilitydiagnosis`, `followupdiagnosis` |

### شاشات مفتاحية شُفتها
- **الهيدر الثابت**: اسم/سن/متجوزة‑من + ملخص Obstetric (G/P/SVD/CS/AB/Ectopic/V.Mole) + فصيلة دم الزوجين + Risks + Notes + BMI. ثابت فوق كل شاشة.
- **Gyna Sheet / Infertility Sheet**: hub فيه أزرار HISTORY / EXAMINATION / INVESTIGATIONS / TTT (كل زرار يفتح الـpick-lists بتاعته)، + جداول مُهيكلة مؤرَّخة (COS/IUI/ICSI/FOLLICULOM/Operations) + صف «New Visit» بيتكرر بتاريخ.
- **Records**: صف مؤرَّخ Diagnosis + TTT (نص حر) مع dropdown قوالب علاج جاهزة.

## 2. ⭐ أهم اكتشاف — شاشة Program Setting (التحكم في الشكل موجود عندهم فعلاً)

ده بالظبط اللي العميل عايزه عندنا (تحكّم لكل عميل في الشكل والحقول)، وهم عاملينه على مستوى **install واحد**:

- **Check Elements To Show**: إظهار/إخفاء عناصر منفردة (Display Patient Data, Doctor Name, Entry Details, LMP, Infertility Btn, Time Periods, Print Diagnosis, Previous Marriage).
- **Patient History Controller Tabs**: تشغيل/إطفاء تابات التاريخ (Menstrual / Contraception / Obstetric / Family / Past / Medical / Surgical / Gynecological / ART / ART External / ART Internal).
- **Blood Bar**: toggles (Wife/Husband Blood Type / Risks / Notes).
- **Examination Controller**: لكل حقل فحص اختار **Select ولا Text** (يعني يتعرض dropdown من lookup ولا نص حر) — مفتاح نوع الإدخال لكل حقل.
- **Program Type: General Clinic ⟷ Gynecology Clinic** — نفس الكود يتحوّل بين عام وتخصص.
- **Context توجّلز**: Today Visits = Clinic/**Hospital**، Program Show = Complete/Simple، Diagnosis = Select/Text، Investigation = Tabs/No Tabs، Prescription Cashing/Print/Total Balance… + Background/Logo.

**الخلاصة:** هم أثبتوا عملياً إن كود OBGY واحد ممكن يتقاد بجدول إعدادات فيه إظهار/إخفاء العناصر، تبديل نوع الإدخال (select/text)، تشغيل التابات، وسويتش clinic/hospital. **ده بالظبط فلسفة منصّتنا — بس إحنا بنعمّمها متعدّد‑تخصص + per-client + per-doctor.**

## 3. مشاكل طريقتهم (اللي لازم نتجنّبها)
1. **جدول lookup مستقل لكل حقل** (عشرات الجداول: examinationhead/chest/abdomen/pelvis، diagnosis، husbndiagnosis1/2/3…). صعب الصيانة والتقارير، وبيتكرر نفس المصطلح في أماكن كتير.
2. **تخزين CSV للاختيارات المتعددة** (`diagnosisid="3,7,12"`) → بيكسر الـjoins والتقارير والإحصاء (مثلاً «كام مريضة تشخيصها X»).
3. **الإعدادات على مستوى install واحد بس** — مفيش per-client/per-doctor حقيقي، وخانة Doctor/Password جوه نفس شاشة الإعدادات.
4. **Diagnosis/TTT نص حر** غالباً → مفيش ترميز/إحصاء.

## 4. توصيات لـلمّ وتوحيد فورم المنصة (ماب على الخطة)

1. **كتالوج lookup واحد مُدار** بدل عشرات الجداول: جدول `clinical_lookups (lookup_key, value, parent_id, display_order, specialty, is_active)` + `lookup_key` على تعريف الحقل (موجود في تصميم طبقات البيانات). يغطّي الفحص والتشخيص والشكوى والعمليات كلها بمفتاح.
2. **inline-add + favourite** نعتمدهم كـ feature أساسي: زرار «+ إضافة» على أي picker (يكتب في الكتالوج بصلاحية)، و**favourite لكل دكتور** (مش install) عشان المتكرر يطفو. ده بيدّي سرعة «pick-don't-type» اللي العميل عايزها.
3. **picker بفئات (full-grid)** زي investcats: كتالوج الفحوصات/الباقات بفئات و`display_order` قابلة للإدارة، مع شبكة اختيار بالكاتيجوري.
4. **الروشتة = دواء + جملة افتراضية** (يطابق Rx v2 عندنا: `sentence` + `dosage_form_id`/`clinic_drug_id`): كل دواء في الكتالوج شايل جملة جرعة افتراضية بتتحط تلقائي وتتعدّل، + Duplicate لنسخة بديلة.
5. **تطبيع التشخيص** (مش CSV): صفوف ربط `encounter_diagnoses` مع ربط اختياري بـ ICD، عشان التقارير والإحصاء.
6. **التحكم في الشكل = تعميم Program Setting عندهم**: نفس فكرة Check-Elements/Tabs/Select-vs-Text، بس:
   - قواعد الحقول per-client `{visible, required}` + feature flags (`gyn.feature.*`)،
   - layout افتراضي لكل تخصص ← client ← doctor (الدكتور اختياري بإعداد العميل)،
   - Hospital = **context** مش تخصص (زي toggle الـClinic/Hospital عندهم بالظبط).
7. **سويتش نوع الإدخال للحقل** (select ⟷ text) زي Examination Controller بتاعهم — نضيفه كخاصية `storage/input_type` على تعريف الحقل.

> كل ده بيتغذّى في مرحلة **E1 (محرك الحقول + الكتالوج)** و **D1/D2 (الطبقات + التخصيص)** في الخطة الرئيسية.
