Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
البدء
من مفتاح API إلى قراءة وكتابة سجل FHIR R4 لمريض في بيئة الاختبار: المفاتيح، الاستدعاءات الأولى، الكتابة مع الأصل، المستندات، سياق الذكاء الاصطناعي، IPS، الموافقة، خطافات الويب، وتقارير المختبرات.
منصة Anpheros هي الواجهة الخلفية لبيانات الصحة: سجل FHIR R4 لكل مريض، عزل المشاريع، المصدر على كل عملية كتابة، وواجهة برمجة تطبيقات REST بسيطة فوق نفس البيانات. يأخذك هذا الدليل من لا شيء إلى قراءة وكتابة سجل مريض في بيئة الاختبار.
عنوان URL الأساسي (تتشاركه بيئة الاختبار والإنتاج؛ المفتاح يحدد مستوى البيانات):
https://platform.anpheros.com
مرجع تفاعلي: /docs (OpenAPI) و /fhir/R4/metadata (CapabilityStatement).
1. الحصول على مفتاح (دقيقة واحدة)
بيئة الاختبار المعزولة (sandbox) ذاتية الخدمة. قم بتسجيل الدخول إلى لوحة التحكم (https://platform.anpheros.com/dashboard/)
باستخدام Google واضغط على الحصول على مفتاح بيئة اختبار معزولة: ستحصل على مؤسسة، ومشروع بيئة اختبار معزولة مع مرضاه الاصطناعيين الخاصين به، ومفتاح - يظهر مرة واحدة. نفس الشيء عبر واجهة برمجة تطبيقات المسؤول (Admin API)، باستخدام رمز مستخدم Firebase الخاص بك:
curl -X POST $BASE/admin/sandbox/quickstart -H "Authorization: Bearer $FIREBASE_ID_TOKEN"
# {"organization": {…}, "project": {"id": "proj_…", "environment": "sandbox", …}, "key": {"key": "sk_test_…", …}, "sandbox": {…}}
أو خطوة بخطوة:
# 1. an organization (you become its owner)
curl -X POST $BASE/admin/organizations -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
-H 'content-type: application/json' -d '{"name":"CardioAI SRL","kind":"developer","country":"RO"}'
# 2. a sandbox project (it comes with its own synthetic patients)
curl -X POST $BASE/admin/organizations/org_…/projects -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
-H 'content-type: application/json' -d '{"name":"CardioAI dev","environment":"sandbox"}'
# 3. a key — the plain key is returned exactly once
curl -X POST $BASE/admin/projects/proj_…/keys -H "Authorization: Bearer $FIREBASE_ID_TOKEN" \
-H 'content-type: application/json' -d '{"name":"local dev","scopes":["read","write"]}'
ستحصل على sk_test_…. مفاتيح بيئة الاختبار المعزولة ترى دائمًا بيانات بيئة الاختبار المعزولة فقط. مفاتيح الإنتاج (sk_live_…)
تُصدر للمؤسسات المعتمدة مع اتفاقية حماية البيانات (DPA) موقعة - راسل [email protected]. بيئة الاختبار المعزولة مجانية؛
يبدأ الإنتاج بسعر 99 يورو شهريًا والشهر الأول مجاني (انظر التسعير).
2. أول استدعاء (دقيقة واحدة)
يحتوي مشروع sandbox الخاص بك بالفعل على نسخته الخاصة من 30 مريضًا اصطناعيًا، مع ستة أشهر من السجل التاريخي
حتى يوم إنشاء المشروع: بالغين وأطفال وكبار السن من جميع أنحاء الاتحاد الأوروبي، مع
حالات (ICD-10) وأدوية (ATC) وحساسيات ونتائج مختبر وعلامات حيوية (LOINC). النسخة
ملكية لمشروعك: قم بتغيير أو حذف أي شيء - لن يراها أي مشروع آخر. إعادة تعيين المرضى التجريبيين في لوحة التحكم (أو POST /admin/projects/{id}/sandbox/reset) يعيدهم كما كانوا،
بمعرفات جديدة؛ المرضى الذين أنشأتهم بنفسك لا يتأثرون. يحتفظ كل مريض اصطناعي بمعرف ثابت عبر عمليات إعادة التعيين: Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02
هو دائمًا Elena Ionescu.
export KEY=sk_test_…
curl $BASE/v1/patients -H "Authorization: Bearer $KEY"
{"data":[{"id":"…","given":"Elena","family":"Ionescu","birth_date":"1985-09-03","gender":"female",…,"fhir":"Patient/…"}, …],"total":30,"next_cursor":null}
حدود Sandbox سخية ولكنها محدودة: 10000 عملية كتابة للموارد يوميًا لكل مشروع، 50 مريضًا خاصًا بك بالإضافة إلى المرضى الاصطناعيين، 250 ميجابايت من المستندات (انظر الحدود).
3. قراءة سجل
# lab results, newest first
curl "$BASE/v1/patients/$PID/observations?category=laboratory&limit=10" -H "Authorization: Bearer $KEY"
# active medications
curl "$BASE/v1/patients/$PID/medications?status=active" -H "Authorization: Bearer $KEY"
# everything on one timeline
curl "$BASE/v1/patients/$PID/timeline?from=2026-06-01" -H "Authorization: Bearer $KEY"
# the same data, strict FHIR
curl "$BASE/fhir/R4/Observation?patient=$PID&code=http://loinc.org|4548-4&_sort=-date" -H "Authorization: Bearer $KEY"
المعرفات متطابقة في /v1 و /fhir/R4؛ كل كائن v1 يحمل مرجع fhir الخاص به.
_summary=count تُرجع الإجمالي فقط؛ _elements=code,effectiveDateTime تُرجع موارد نحيفة مُعلمة بـ SUBSETTED.
4. الكتابة
اذكر هوية المؤلف. author_type هو patient، practitioner، device، import أو ai؛
إذا حذفته، تسجل المنصة import، ولا تسجل patient أبدًا بالافتراض.
الكتابات باستخدام author_type ai تتبع شفافية الذكاء الاصطناعي لـ HL7 على FHIR:
المورد يحمل التصنيف الأمني AIAST (تم تأكيده بواسطة الذكاء الاصطناعي) وله سبب المصدر (Provenance)
AIAST، ودور الوكيل Artificial-Intelligence، وملف التعريف AI-Provenance. لتسمية النموذج، قم بتسجيله كـ
Device (النوع Artificial-Intelligence، الاسم، الإصدار، الشركة المصنعة) وأرسل X-Anpheros-Author-Ref: Device/<id>.
curl -X POST "$BASE/v1/patients/$PID/observations" -H "Authorization: Bearer $KEY" \
-H 'content-type: application/json' -H "Idempotency-Key: $(uuidgen)" -d '{
"code": "2339-0", "display": "Glucose", "category": "laboratory",
"value": 112, "unit": "mg/dL", "effective_at": "2026-09-19T08:10:00Z",
"author_type": "device"
}'
الاستجابة هي الملاحظة المخزنة مع id، fhir و updated_at. تكرار نفس الطلب بالضبط
بنفس Idempotency-Key يعيد نفس الاستجابة ولا ينشئ شيئًا.
5. المستندات
# 1. create the document → upload target
curl -X POST "$BASE/v1/patients/$PID/documents" -H "Authorization: Bearer $KEY" -H 'content-type: application/json' \
-d '{"title":"Analize 2026-09-14","kind":"lab_report","content_type":"application/pdf","date":"2026-09-14"}'
# 2. upload the bytes to the returned url (direct to storage, or through the platform)
curl -X PUT "$BASE/v1/documents/$DOC/content" -H "Authorization: Bearer $KEY" -H 'content-type: application/pdf' --data-binary @analize.pdf
لا يتم تعديل الأصل أبدًا بعد ذلك؛ يتم تسجيل sha256 و size، وتشير أي قيم تستخرجها لاحقًا إلى المستند عبر derived_from.
6. المصدر (Provenance)
curl "$BASE/v1/patients/$PID/provenance/Observation/$OBS" -H "Authorization: Bearer $KEY"
إدخال واحد لكل إصدار: من (نوع المؤلف والمشروع)، متى، ومن أي نظام مصدر.
قواعد جديرة بالمعرفة
- العزل: يرى المشروع المرضى الذين أنشأهم (بالإضافة إلى مرضى صندوق الرمل المشترك). مريض أي شخص آخر غير موجود بالنسبة لك:
404، أبداً403. - معرفات مزدوجة: معرف المريض الذي تراه هو معرفك. يرى مشروع آخر نفس الشخص بمعرف مختلف. قم بتخزين معرفاتنا بحرية؛ لا تحاول أبداً ربطها.
- المصدر: كل عملية كتابة تترك مورد Provenance. لا شيء يُعاد الكتابة بصمت؛ التاريخ متاح على
/fhir/R4/{Type}/{id}/_history. - الأخطاء: نقاط نهاية FHIR تُرجع
OperationOutcome؛/v1و/adminتُرجع{"error": {"type", "message", "field"}}. كل استجابة تحملAnpheros-Request-Id؛ اقتبسها عند مراسلتنا. - الحدود: 600 طلب/دقيقة لكل مفتاح افتراضياً، 200 عنصر لكل صفحة، 25 ميجابايت لكل مستند.
7. السياق لنموذج الذكاء الاصطناعي
بدلاً من سحب السجلات الأولية وتحديد ما يناسب استعلامًا، اطلب من المنصة توفير سياق:
curl -X POST "$BASE/v1/context" -H "Authorization: Bearer $KEY" -H 'content-type: application/json' -d '{
"patient": "'$PID'",
"task": "medication review before a cardiology visit",
"question": "How did blood pressure evolve over the last 3 months?",
"budget_tokens": 1500,
"format": "text"
}'
ستحصل على أقسام (بطاقة الملخص، الحالات، الأدوية، الحساسيات، المختبرات، العلامات الحيوية مع اتجاهات أسبوعية وعلامات قبل/بعد العلاج، الأعراض، الجدول الزمني، المستندات)، كل عنصر مُصنّف بـ author_type و source، وقائمة بما تم حذفه لتناسب الميزانية، وتحذيرات، و manifest_id يربط الاستدعاء بسجل التدقيق. القيم التي ينتجها الذكاء الاصطناعي لا تُخلط أبدًا بالحقائق: فهي تظهر فقط تحت ai_notes. يتم أيضًا قبول الاحتياجات الصريحة: "needs": ["labs:4548-4", "vitals:trend:85354-9", "timeline:180d"].
8. المعايير
GET /fhir/R4/Patient/{id}/$summaryيُرجع مستند ملخص المريض الدولي (International Patient Summary) من نوع Bundle.POST /fhir/R4/Observation/$validate?profile=eu-labيُبلغ عن كيفية قياس نتيجة معملية مقارنةً بملف تعريف نتيجة تقرير المختبر 2.1.0 من HL7 Europe (الأخطاء، التحذيرات، المعلومات): الفئة، الرمز (يفضل LOINC)، الموضوع، وقت السريان، المؤدي، والقيمة ما لم تكن النتيجة مسجلة فقط أو ملغاة.GET /v1/terminology/loinc?q=hba1cيبحث في مجموعة LOINC المجمعة وGET /v1/search?q=metforminفي فهرس الأعراض والحالات والأدوية؛ تحصل الملاحظات التي تم إنشاؤها بدون اسم عرض تلقائيًا على اسم LOINC.
9. موافقة المريض (OAuth 2.1 + SMART on FHIR)
مفاتيح واجهة برمجة التطبيقات (API) ترى المرضى الذين أنشأهم مشروعك. للوصول إلى سجل شخص موجود، اطلب منهم:
- تسجيل تطبيق:
POST /admin/projects/{id}/applicationsمع عنوان URI لإعادة التوجيه الخاص بك (publicللتطبيقات المتنقلة/الويب مع PKCE،confidentialللخوادم؛ يتم عرض السر مرة واحدة). - إرسال الشخص إلى صفحة الموافقة:
GET /oauth/authorize?response_type=code&client_id=…&redirect_uri=…&state=…&code_challenge=…&code_challenge_method=S256&scope=patient/Observation.rs?category=laboratory patient/MedicationStatement.r offline_access&purpose=treatment&lang=roيسجلون الدخول إلى Anpheros، ويرون ما تطلبه بلغة واضحة، ويختارون السجل (سجلهم الخاص، سجل تابع، أو السجل الذي أنشأه تطبيقك لهم) ومدة استمرار الوصول. - تبادل الرمز:
POST /oauth/token(authorization_code+code_verifier). تتلقى رمز وصول (30 دقيقة)، ورمز تحديث (30 يومًا، يتم تدويره عند الاستخدام) ومعرف المريض. - استدعاء واجهة برمجة التطبيقات (API) باستخدام
Authorization: Bearer at_…. ترى فقط هذا المريض، فقط أنواع الموارد والإجراءات في النطاقات (scopes)؛ القراءات خارج النطاق تجيب بـ403، ويتم تصفية عمليات البحث.
يمكن للشخص الإلغاء في أي وقت من Anpheros؛ الاستدعاء التالي يجيب بـ 401. كل منحة
تنعكس كمورد FHIR Consent، ويتم تسجيل كل وصول تحتها ويكون مرئيًا للشخص. الاكتشاف: /.well-known/smart-configuration.
10. خطافات الويب (Webhooks)
دع المنصة تتصل بك بدلاً من الاستقصاء:
curl -X POST $BASE/v1/webhooks -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"url": "https://your.app/anpheros/hook", "events": ["*"]}'
احتفظ بـ secret من الاستجابة وتحقق من Anpheros-Signature عند كل تسليم
(verifyWebhookSignature في كلا الـ SDKs). تحمل الأحداث معرفات وإصدارات، وليس بيانات سريرية.
التفاصيل، وإعادة المحاولة، والأمثلة: webhooks.md.
11. المنظمات والممارسون
العيادات والمختبرات والأشخاص الذين يعملون فيها هي موارد من الدرجة الأولى: Organization،
Practitioner، PractitionerRole. إنها موارد دليل: لا يوجد مريض، يمكن قراءتها بواسطة
كل مشروع في نفس البيئة، ولا يمكن تغييرها إلا بواسطة المشروع الذي أنشأها.
curl -X POST $BASE/fhir/R4/Practitioner -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
-d '{"resourceType":"Practitioner","active":true,"name":[{"family":"Popescu","given":["Ana"],"prefix":["Dr."]}]}'
قم بتسمية الممارس وراء عملية كتابة باستخدام X-Anpheros-Author-Ref: Practitioner/<id> (أو
PractitionerRole، Organization، Device): سيحمل سجل الإثبات (Provenance) الذي تم إنشاؤه بواسطة الخادم بعد ذلك
agent.who.reference، و GET /fhir/R4/Provenance?agent=Practitioner/<id> يسرد كل شيء
قام هذا الشخص بتسجيله. البحث: Organization?name=، ?identifier=، ?type=، Practitioner?name=،
?family=، ?given=، PractitionerRole?practitioner=، ?organization=، ?role=، ?specialty=، ?active=.
من يعمل وراء تطبيقك؟ أرسل X-Anpheros-Acting-As: PractitionerRole/<id> (أو
Practitioner/<id>) على أي طلب /v1 أو /fhir/R4 تم إجراؤه باستخدام مفتاح مشروع. يجب أن
يكون الشخص موجودًا في الدليل ونشطًا. يتم كتابة المرجع إلى سجل الوصول، ويصبح
المؤلف لعمليات الكتابة الخاصة بهذا الطلب (ما لم تقم بتعيين X-Anpheros-Author-Ref) ويتم عرضه
للمريض بالاسم في اتصالاته ("د. آنا بوبيسكو · عيادة دينتي قرأت نتائج مختبرك").
12. تقارير المختبر في استدعاء واحد
أرسل تقرير مختبر كامل (CSV، HL7 v2 ORU^R01 أو JSON) واحصل على ملاحظات المختبر مع LOINC ونطاقات مرجعية؛ إعادة الإرسال آمنة. التفاصيل: lab-connector.md.
curl -X POST "$BASE/v1/patients/$PATIENT/labs/import" -H "Authorization: Bearer $KEY" -H "Content-Type: text/csv" --data-binary @report.csv
ملاحظات المطابقة على عمليات الكتابة
يتم التحقق من كل POST/PUT لمورد سريري مقابل ملف تعريف IPS الخاص بقسمه، وبالنسبة لملاحظات المختبر، قواعد تقرير المختبر الخاصة بـ HL7 Europe. لا يتم رفض عملية الكتابة أبدًا لأسباب تتعلق بالملف الشخصي (لا تزال أخطاء FHIR الهيكلية تُرفض)؛ عندما يكون هناك شيء مفقود، يحمل الرد
Anpheros-Conformance: warnings=2; IPS Condition: Condition without code | ...
قم بإصلاح ما يسميه وسيتم تضمين المورد في $summary للمريض. أنواع الموارد المضافة في 22 سبتمبر 2026: Immunization، MedicationAdministration (بحث statement=MedicationStatement/{id})، RelatedPerson، QuestionnaireResponse، Basic. عمليات الكتابة التي تجريها مشاريع أخرى في سجل يمكنك رؤيتها تصل كأحداث webhook مع data.external = true — انظر docs/webhooks.md.
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card