# الإصدارات والإيقاف

> كيف تتغير واجهات FHIR R4 و REST v1، وحمولات الويب هوك، وحزم SDK، وكيف يتم الإعلان عن التغييرات المسببة للانقطاع.

Source: https://developers.anpheros.com/ar/guides/versioning

- واجهات **FHIR R4** عند `/fhir/R4` و **REST v1** عند `/v1` هي واجهات مستقرة. يتم شحن التغييرات الإضافية (حقول جديدة، أنواع موارد جديدة، نقاط نهاية جديدة، أنواع أحداث جديدة) دون إشعار؛ يتم إعادة إنشاء حزم SDK و `docs/openapi.json` في نفس الالتزام وإلا يفشل الاختبار.
- **التغييرات المسببة للانقطاع** تحصل على بادئة جديدة (`/v2`) وتشغيل متوازي لمدة **6 أشهر** على الأقل؛ تستجيب البادئة القديمة بـ `Deprecation` ورأس `Sunset` خلال تلك الفترة.
- تحمل **حمولات الويب هوك** `type`؛ الأنواع الجديدة إضافية. يجب على المشترك في `*` تجاهل الأنواع غير المعروفة.
- تتبع **حزم SDK** semver؛ قد تسقط إصدارات SDK الرئيسية بادئة API متوقفة.
- قد تؤدي **إصلاحات الأمان** إلى تشديد التحقق (على سبيل المثال، مجموعات القيم) دون زيادة في الإصدار؛ يتم الإعلان عن هذا التشديد في سجل التغييرات مع إشعار لمدة 30 يومًا ما لم يغلق ثغرة أمنية نشطة.

## سجل التغييرات

### 14 أكتوبر 2026 (إضافي: تخصيص صفحة الموافقة، تسجيل دخول موحد للفريق)

- تسجيل الدخول الموحد للفريق: يمكن ربط مؤسسة بموفر SAML أو OIDC الخاص بها ونطاقات البريد الإلكتروني الخاصة بها
  (`PUT /admin/organizations/{id}/sso`، مسؤولو النظام الأساسي)، ويمكن أن يكون تسجيل الدخول الموحد إلزاميًا
  للأعضاء. `GET /admin/sso/discover?email=` (بدون مصادقة) يعيد الموفر لبريد إلكتروني العمل. `OrganizationOut`
  يكتسب `sso_provider_id`، `sso_domains` و `sso_required`. انظر [تسجيل الدخول الموحد لفريقك](https://developers.anpheros.com/ar/guides/team-sso).

- `PUT /admin/applications/{id}/branding` يحدد شعار التطبيق (بيانات PNG/JPEG/WebP URI، حتى 64 كيلوبايت) و
  لون التمييز (تباين لا يقل عن 4.5:1 مع نص أبيض)، معروض على صفحة الموافقة المستضافة. `ApplicationOut`
  يكتسب `logo` و `brand_color`. انظر [المصادقة و OAuth](auth-and-oauth.md#your-brand-on-the-consent-page).
- صفحة الأسعار و [الأسعار](https://developers.anpheros.com/ar/guides/pricing): ملاحظة تجريبية خاصة. يفتح الإنتاج بعد التحقق و
  اتفاقية حماية البيانات الموقعة، يتم إصدار الفواتير للخطط عبر البريد الإلكتروني، ولا يتم فرض الحدود تلقائيًا بعد.

### 14 أكتوبر 2026 (إصلاحات شكل الخطأ وتعيين المختبر)
- استيراد المختبر: *Uree* / *Urea* يتم تعيينها إلى urea (`3091-6`؛ `22664-7` في mmol/L) بدلاً من urea nitrogen (`3094-0`)، والذي
  يتم الاحتفاظ به لـ *BUN* / *Urea nitrogen* (`14937-7` في mmol/L). لا يتم تحويل القيم. لم تستخدم بيانات الإنتاج التعيين القديم.
- استيراد المختبر: LDL مع طريقة في التقرير يتم تعيينها إلى LDL المحسوب (`13457-7`) أو LDL المباشر (`18262-6`)؛ بدون
  طريقة تظل `2089-1`. *Direct* هو الآن مؤهل، لذلك *Bilirubina directa* لم يعد يتم تعيينها إلى total bilirubin
  (`1975-2`)؛ تحتفظ برمز المختبر. لم تستخدم بيانات الإنتاج التعيين القديم.
- نقاط النهاية والطرق غير المعروفة ضمن `/v1` تجيب في شكل الخطأ الموثق (`404 not-found`، `405 not-supported`)
  بدلاً من `{"detail": "Not Found"}`؛ معلمات الاستعلام غير الصالحة وحدود المعدل لكل IP ضمن `/v1` تستخدم
  `{"error": …}` بدلاً من `OperationOutcome` (لم تتغير ضمن `/fhir/R4`)؛ `500` غير متوقع ضمن `/v1` يحمل
  `error.type = "exception"` (كان يحمل `error.code`).
- استيراد المختبر: نتائج HL7 v2 مع نظام ترميز محلي أو غير LOINC تحتفظ برمز المختبر ضمن `urn:anpheros:lab-code`
  (سابقًا `urn:hl7:<system>`، على سبيل المثال `urn:hl7:l`). لا يتم تغيير النتائج المخزنة بالفعل.
- استيراد المختبر: يتم التعرف على أسماء ومرادفات LOINC باللغة الإنجليزية (*Hemoglobin A1c*, *Glycated hemoglobin*, *HDL cholesterol*,
  *LDL cholesterol*, *Haemoglobin*)؛ *Glucose* العادية يتم تعيينها إلى serum or plasma (2345-7) مثل *Glicemie*. الأسماء التي تحتوي على مؤهل يفتقر إليه المفهوم (*urine*, *non-HDL*...) لم تعد تتطابق مع اختبار ذي صلة: قبل هذا التغيير
  تم تخزين *HDL cholesterol* و *LDL cholesterol* المرسلة بدون رمز LOINC على أنها total cholesterol (2093-3).
- استيراد المختبر: إعادة إرسال تقرير لم يعد يكرر النتائج عند تغيير تعيين LOINC. تحمل النتائج الجديدة معرفًا ثانيًا، `urn:anpheros:lab-import:v2`، مبنيًا من التقرير (معرف التقرير، الاسم والرمز في التقرير،
  التاريخ، القيمة، الوحدة)؛ المعرفات الموجودة لم تتغير ويتم التعرف على النتائج السابقة بالاسم، التاريخ، القيمة، الوحدة
  ومعرف التقرير. لم يعد يتم دمج نتيجتين لهما أسماء مختلفة في التقرير ولكن نفس رمز LOINC والتاريخ والقيمة (على سبيل المثال
  *Glucose* و *Glicemie*) في نتيجة واحدة.

### 13 أكتوبر 2026 (إضافي، لا تغيير في العقد)
- يتم فرض الموافقة على كل عرض مشتق (`/v1/context`، `/v1/patients/{id}/timeline`، البوابة، `$everything`) مع
  قاعدة مشتركة واحدة؛ يظهر قسم مطلوب ولكنه غير مغطى في `omitted` للسياق.
- تعلن OpenAPI الآن عن `servers`، `securitySchemes` (`bearer`، `apiKey`، `oauth2`، `firebase`)، `security` لكل عملية
  وشكل استجابة لكل عملية؛ تحصل العملاء الذين تم إنشاؤهم على استجابات محددة النوع.
- كل `401` يحمل `WWW-Authenticate: Bearer`.
- تعلن CapabilityStatement عن SMART (امتداد `oauth-uris`، خدمة `SMART-on-FHIR`) ودليل تنفيذ IPS.
- عمليات إعادة التوجيه خلف الوكيل تحتفظ بـ `https://`.
- `python-multipart` 0.0.20 → 0.0.32؛ `pip-audit` يمنع البناء عند وجود ثغرات أمنية معروفة.
- يجب أن تكون عناوين URL للخطافات (webhooks) عامة عبر HTTPS: localhost (تم قبوله سابقًا في البيئة التجريبية ولكن لم يتم تسليمه أبدًا)، والعناوين الخاصة والمحجوزة، والأسماء التي تحلها إليها يتم رفضها عند التسجيل مع 400 على `url`؛ عمليات التسليم تتصل فقط بعناوين IP التي تم فحصها للتو (إعادة ربط DNS).

## فرض المطابقة (تم الإعلان عنه في 23 سبتمبر 2026)

الكتابات التي تفوت متطلبات مختبرات IPS / HL7 Europe حاليًا تُرجع `201`/`200` مع ترويسة `Anpheros-Conformance`. بعد فترة ملاحظة (مخطط لها: 60-90 يومًا من هذا الإشعار) سيتحول النظام إلى وضع **الحظر**: مثل هذه الكتابات ستُرجع `422` مع ترويسة `OperationOutcome` تسرد كل فجوة. يمكن إعفاء المكاملين الذين يحتاجون إلى مزيد من الوقت لكل مشروع خلال فترة الانتقال. أنواع الموارد المضافة في 23 سبتمبر 2026: `Procedure`، `DiagnosticReport`، `CarePlan`، `FamilyMemberHistory`، `ServiceRequest`، `Goal` (إضافية).
