# H11.0-P11.1-R1 — حوكمة قواعد Daily Inpatient Revenue حسب الفرع

## 1. نقطة البداية الرسمية

هذه الحزمة تبدأ من:

- **Official Functional Baseline قبل التعديل:** `11.0.11.1 / H11.0-P11-R9`
- **QA/Browser closure السابقة:** `H11.0-P11-R13`
- **Daily Inpatient Revenue historical preserved baseline:** `11.0.10.5.1 / H11.0-P10.5-R1`

هذه المرحلة تغيّر قواعد حساب مطلوبة صراحة من المستخدم، ولذلك لا يجوز الادعاء بأن hashes الملفات الحرجة القديمة `9/9` ما زالت كما هي بعد تطبيق التعديل. تظل تلك hashes دليلًا تاريخيًا على baseline السابقة، بينما يصبح هذا التعديل مرشحًا لنسخة وظيفية جديدة فقط بعد نجاح Full Test الحالي مع Browser وOracle read-only evidence على البيئة الهدف.

## 2. العقد الوظيفي الجديد

### 2.1 جهة الدفع الوطنية — جدة

- Company code: `365`
- Company name: `CENTER FOR NATIONAL HEALTH INSURANCE`
- `4746.87` تطبق فقط عندما يتحقق الشرطان معًا:
  1. `Total LOS < 30` حرفيًا.
  2. نوع وحدة التمريض واحد من:
     - `Intr ICU`
     - `ICU`
     - `NICU`
     - `PICU`
- في أي حالة أخرى تطبق `2373.00`.
- اليوم رقم `30` نفسه يأخذ `2373.00`، لأنه ليس أقل من 30.
- `Total LOS` لهذه الجهة يحسب من أول دخول فقط.

### 2.2 جهة الدفع الوطنية — المدينة المنورة

نفس القاعدة السابقة، لكن mapping الشركة هو:

- Company code: `9002`
- Company name: `MOH Ministry of Health`

### 2.3 TCS وGOSI — جدول شرائح مشترك

القاعدتان تستخدمان جدولًا واحدًا مشتركًا:

- LOS 1–3: `2250.00`
- LOS 4–8: `1950.00`
- LOS 9+: `1750.00`

Mapping جدة:

- TCS = `170`
- GOSI = `406` — `GENERAL ORGANIZATION FOR SOCIAL INSURANCE`

Mapping المدينة:

- TCS = `2009`
- GOSI = `3005` — `G.O.S.I`

مدة الإقامة لهاتين الجهتين تعتمد على `RCP_VISIT.VISIT_START_DATE`.

### 2.4 القواعد العامة المحفوظة

- CASH = patient share / LOS.
- Other insurance = company share / LOS.
- باقي الشركات تعتمد على `RCP_VISIT.VISIT_START_DATE`.
- لا يوجد استدعاء مباشر لـ `sp_ipd_opd_vat_revenue` أو `SP_INPATIENT_REVENUE_DATA` في مسار التنفيذ.
- Residence package flag يبقى من `PACC_PAT_RES_TRAN` alias `r` عبر `r.in_out_pkg`.
- Oracle Writes = `NONE`.

## 3. تحديد ICU من Oracle

تم ربط نوع الوحدة من:

`STP_NURSINGUNIT_TYPE.DESC_EN`

عبر `STP_HRC.NURS_CAT = STP_NURSINGUNIT_TYPE.CODE`، مع تمرير `nursing_unit_type` إلى محرك الحساب. المطابقة منطقية case-insensitive، والقيم الافتراضية الأربع هي القيم التي حددها المستخدم حرفيًا.

## 4. شاشة إعدادات مستقلة

تم إنشاء شاشة مستقلة:

`inpatient-daily-revenue-settings`

وتحتوي على:

- جهة الدفع الوطنية وكودها واسمها.
- قيمة ICU للإقامة القصيرة.
- القيمة الأساسية.
- حد الإقامة القصيرة.
- أنواع ICU.
- شرائح TCS/GOSI المشتركة.
- Mapping أكواد TCS وGOSI لكل فرع.
- كود/أكواد CASH.
- سجل سياسات الحساب العامة للرجوع المنظم.

التعديل يتطلب `dashboard_role_fin` ويستخدم CSRF protection. التخزين محلي بصيغة JSON فقط، مع backup قبل الحفظ، audit trail، Windows-safe same-directory swap، واسترجاع تلقائي عند فشل التفعيل أو تسجيل التدقيق. لا توجد أي كتابة في Oracle.

## 5. فصل شاشة الإدارة العليا عن القواعد الفنية

من شاشة Daily Inpatient Revenue التنفيذية تم حذف:

- لوحة `Approved calculation rules`.
- عمود `Calculation / طريقة الحساب`.
- أي قيم ثابتة للقواعد مثل `4746.87` أو `2373` أو شرائح TCS/GOSI.

الشاشة التنفيذية تعرض النتائج فقط. وفي حالة فشل التحميل تعرض `N/A` بدل إظهار `0` مضلل.

## 6. Excel

يبقى التصدير بورقتين فقط:

1. `Summary`
2. `Daily Revenue`

ولا توجد أوراق:

- `Detailed Audit`
- `Needs Review`

إجمالي Daily Revenue لكل وحدة يبقى تحت عمود Daily Revenue. ملخص Excel يقرأ القواعد الفعلية للفرع بدل نصوص hard-coded قديمة.

## 7. شرط الإغلاق

لا تصبح `11.0.11.2 / H11.0-P11.1-R1` baseline رسمية بمجرد نجاح الاختبارات المحلية أو static QA.

الإغلاق الصحيح يتطلب على Windows/XAMPP الهدف:

- Apply ناجح من baseline الصحيح بلا version/hash contradiction.
- PHP syntax/parser compatibility.
- Current rule QA PASS.
- Oracle schema/read-only contract PASS.
- Live Oracle proof PASS عند توفر الفرع المطلوب.
- Browser gate حالي للشاشة التنفيذية وشاشة الإعدادات.
- Evidence ZIP حالي ومكتمل.
- Missing evidence ليس PASS.

## 8. نقطة خاصة بالمدينة المنورة

تم تجهيز mapping القواعد للمدينة المنورة (`9002 / 2009 / 3005`). لكن لا يجوز افتراض جاهزية Oracle runtime للمدينة إذا لم يكن `oracle_branch_id` مضبوطًا في بيئة التشغيل. هذا patch لا يخمن branch ID ولا يغيّر إعداد اتصال Oracle دون دليل.
