# نموذج الموافقة والوصول

> من يرى ماذا: عزل المشروع، المعرفات المزدوجة، المنح، ملكية الكتابة، المصدر، وما يراه المريض حول كل تطبيق لديه وصول.

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

**القاعدة:** بموافقة المريض، ترى المؤسسة السجل بأكمله — بما في ذلك ما كتبته العيادات الأخرى — ولكن يمكنها تغيير أو حذف ما كتبته هي فقط. يسجل كل إصدار من كل مورد المشروع الذي كتبه والمؤسسة التي كتبت باسمها.

## من يرى ماذا
- **مشروع** (مفتاح API) يرى المرضى الذين أنشأهم. ضمن **منحة** (رمز OAuth)، ترى التطبيقات مريضًا واحدًا بالضبط، عبر جميع الكتاب، ومقتصرة على النطاقات الممنوحة وفلاتر الفئات. كل شيء آخر يُرجع 404، وليس 403 أبدًا، لذلك لا يمكن استجواب المعرفات.
- **معرفات مزدوجة:** يتلقى كل مشروع معرفه الخاص لنفس الشخص؛ المعرفات الداخلية لا تغادر المنصة أبدًا. تتم إخفاء المراجع للمرضى خارج نطاقك برمز مميز غير شفاف، لكل مشروع.
- **الدليل** (المنظمة، الممارس، دور الممارس): قابل للقراءة حسب المعرف عبر المستوى بحيث يتم حل المراجع؛ قابل للبحث فقط ضمن مشروعك؛ قابل للاستخدام كـ `X-Anpheros-Acting-As` / `X-Anpheros-On-Behalf-Of` فقط عندما يكون خاصًا بك.
- **بيئة الاختبار والإنتاج** هي قواعد بيانات مختلفة. مفتاح بيئة الاختبار لا يمكنه فعليًا الوصول إلى المرضى الحقيقيين.

## الكتابة والملكية
- `project_id` على كل إصدار مورد = الكاتب. التحديث/الحذف بواسطة مشروع آخر → 403 مع شرح؛ اكتب موردك الخاص بدلاً من ذلك.
- `Provenance.agent.onBehalfOf` = العيادة/المؤسسة وقت الكتابة: `X-Anpheros-On-Behalf-Of`، وإلا مؤسسة PractitionerRole النشط، وإلا مؤسسة المشروع.
- كل عملية كتابة تنتج مورد Provenance وصفًا لسجل تدقيق (من، ماذا، متى، تحت أي منحة، أي تطبيق، من بصمة المصدر).

## ما يراه المريض
`/me/patients/{id}/grants` يسرد كل تطبيق لديه صلاحية وصول، ونطاقاته (scopes) وتاريخ انتهاء صلاحيته؛ `…/access-log` يسرد ما قرأه أو كتبه كل تطبيق — تحت الموافقة **و** بمفتاح المشروع الخاص. يبدأ سحب الصلاحية في سريان المفعول عند الطلب التالي؛ لا يمكن للتطبيق التحديث والعودة.
مع `format=fhir`، يعود سجل الوصول كحزمة (Bundle) من موارد FHIR R4 `AuditEvent`، مصممة بعد أنماط سجل التدقيق الأساسي لـ IHE (النوع `rest`، التفاعل كنوع فرعي، التطبيق والشخص الذي يعمل من خلاله كوكلاء (agents)، المريض والمورد ككيانات (entities)، لا توجد بيانات سريرية)، بحيث يمكن لنظام آخر دمجه في رؤية الشخص لمن وصل إلى سجله.

ما يسجله كل مورد Provenance وكيفية إعداده: [شرح مصدر البيانات الطبية (Medical data provenance explained)](https://developers.anpheros.com/ar/guides/medical-data-provenance).

## روابط SMART الصحية (المشاركة عبر QR أو رابط)

يمكن للشخص مشاركة سجله دون الحاجة لتطبيق وسيط: `POST /me/patients/{id}/shl` ينشئ
[رابط SMART الصحي](https://hl7.org/fhir/uv/smart-health-cards-and-links/) لمجموعة **الطوارئ** الفرعية (الحساسية،
الأدوية، المشاكل، التطعيمات — لا توجد نتائج أو تاريخ) أو ملخص المريض الدولي **الكامل**، مع
رمز مرور اختياري وتاريخ انتهاء صلاحية. يحمل الرد عنوان URI `shlink:/…` (لرمز QR) وعنوان عارض على `/shl/view`، والذي يفتحه في أي متصفح. أي شخص يقوم بمسحه يرسل طلبًا إلى عنوان URL للبيان ويتلقى الملخص بتنسيق JWE (`dir` + `A256GCM`) مشفرًا بالمفتاح الموجود داخل الرابط؛ أي قارئ لرابط SMART الصحي سيعمل.

- يتم إنشاء المحتوى عند كل فتح (العلامة `L`، الحالة `can-change`)، لذلك تظل البطاقة المحفوظة في الهاتف محدثة.
- يتم التحقق من رمز المرور (العلامة `P`) على الخادم؛ بعد 10 محاولات خاطئة، يتوقف الرابط عن العمل.
- `GET /me/patients/{id}/shl` يسرد الروابط مع عدد مرات فتح كل رابط ومتى تم فتحه؛ `…/shl/{link}/revoke` يقوم بإيقاف
  رابط واحد دفعة واحدة. كل فتح يتم تسجيله في سجل الوصول.
- المعرف الداخلي للشخص لا يغادر المنصة أبدًا: الوثيقة تسميه باسم مستعار للرابط.

## الوكلاء الذكاء الاصطناعي يقترحون، والشخص يقرر

بموافقة الشخص، لا يتم تطبيق الكتابة بواسطة وكيل ذكاء اصطناعي (تطبيق مسجل كوكيل، على سبيل المثال مساعد متصل عبر MCP) أو أي كتابة باستخدام `author_type` `ai` على الفور. تقوم المنصة بالتحقق منها وترد بـ `202 Accepted` بمعرف الاقتراح (الرأس `Anpheros-Proposal`)؛ لا يتغير شيء في السجل. يرى الشخص ذلك في `GET /me/patients/{id}/proposals` — ما هو، والتطبيق الذي أرسله — ويقبل أو يرفض (`…/proposals/{proposal}/accept` أو `…/reject`). يتم كتابة الاقتراح المقبول تمامًا كما تم إرساله، مع وضع علامة "مكتوب بواسطة الذكاء الاصطناعي" (شفافية الذكاء الاصطناعي HL7). المشاريع التي يمكنها رؤية السجل تحصل على خطاف `proposal.created` رفيع. الكتابات التي تتم باستخدام مفتاح المشروع الخاص، على السجلات التي أنشأها المشروع، لا يتم تعليقها.
