> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# تحذيرات وأكواد أخطاء كشف الحيوية

> شرح لكل تحذير تصدره وحدة كشف الحيوية في Didit، ويشمل هجمات الوجه والدرجات المنخفضة ومشاكل الجودة وتطابقات قائمة الحظر والوجوه المكررة، مع السبب والحل.

## نظرة عامة

تُشير التحذيرات في تقرير كشف الحيوية إلى كل حالة رصدتها Didit أثناء تشغيل فحص الحيوية. تظهر هذه التحذيرات في مصفوفة `warnings[]` الخاصة بكل عنصر داخل `liveness_checks[]` (راجع [تقرير كشف الحيوية](https://docs.didit.me/ar/core-technology/liveness/report-liveness.md))، مع تعيين قيمة `feature` إلى `"LIVENESS"`. يتبع كل إدخال هيكل [كائن التحذير](https://docs.didit.me/ar/reference/data-models.md#كائن-التحذير) المشترك: `feature` و`risk` و`additional_data` و`log_type` و`short_description` و`long_description` و`node_id`.

يتكون كل تحذير من ثلاث طبقات:

1. **رمز `risk`** — معرّف ثابت يمكنك مطابقته برمجياً في الكود الخاص بك (الرموز الموضحة أدناه).
2. **نوع السجل `log_type`** — إما `information` أو `warning` أو `error`. تحمل مخاطر الرفض التلقائي دائماً القيمة `error`. أما بالنسبة للمخاطر القابلة للتكوين، فتُشتق القيمة من الإجراء المضبوط: **لا يوجد إجراء** ← `information`، **المراجعة** ← `warning`، **رفض** ← `error`. وبالنسبة للمخاطر المرتبطة بالحدود (`LOW_LIVENESS_SCORE` و`LOW_FACE_QUALITY`)، تكون القيمة `error` عندما تنخفض القيمة إلى حد الرفض أو دونه، وتكون `warning` عندما تنخفض إلى حد المراجعة أو دونه فقط.
3. **التأثير على القرار** — يوجّه منطق التوجيه نفسه حالة تقرير كشف الحيوية `status`: ينقله إجراء المراجعة إلى `In Review` (قيد المراجعة)، وينقله إجراء الرفض (أو أي خطر رفض تلقائي) إلى `Declined` (مرفوضة)، بينما يتركه خيار "لا يوجد إجراء" دون تغيير.

تُصدَر بعض المخاطر فقط عندما تكون طريقة كشف الحيوية هي `PASSIVE` (فحوصات الوجوه المتعددة والجودة والإضاءة). توضح الجداول أدناه المجموعة الكاملة لرموز مخاطر كشف الحيوية ومستويات خطورتها — ولا توجد أي رموز مخاطر أخرى لكشف الحيوية.

## شروط الرفض التلقائي

تؤدي المخاطر التالية دائماً إلى فرض حالة `Declined` على تقرير كشف الحيوية (وكذلك على الجلسة)، مع `log_type: "error"`:

| الخطر | المُشغِّل |
| - | - |
| `NO_FACE_DETECTED` | لم يتم العثور على أي وجه أثناء التقاط بيانات كشف الحيوية، أو استنفد المستخدم محاولات الإعادة. |
| `LIVENESS_FACE_ATTACK` | اكتشف النموذج هجوم العرض (قناع، أو إعادة تشغيل عبر شاشة، أو انتحال من فئة التزييف العميق). |
| `FACE_IN_BLOCKLIST` | تطابق الوجه مع إدخال في قائمة الحظر للوجوه الخاصة بتطبيقك. |
| `AGE_BELOW_MINIMUM` | العمر التقديري أقل من الحد الأدنى المضبوط. يُصدَر فقط في سياقات سير العمل التكيفية للتحقق من العمر وعُقد `AGE_ESTIMATION`. |
| `AGE_NOT_DETECTED` | تعذر تقدير العمر. يُصدَر فقط في مسارات تقدير العمر مع تعطيل خيار الرجوع الاحتياطي إلى التحقق من الهوية. |

عند إطلاق `NO_FACE_DETECTED`، يتم حجب `LOW_LIVENESS_SCORE` (لعدم وجود وجه لاحتساب درجته).

## إعدادات التحقق القابلة للتكوين

في لوحة تحكم Didit، يتم تجميع مخاطر كشف الحيوية تحت إعدادات سير العمل التالية:

| المجموعة | المخاطر | التكوين |
| - | - | - |
| **حدود درجة كشف الحيوية** | `LOW_LIVENESS_SCORE` | حد المراجعة + حد الرفض على `score`. عند حد المراجعة أو أدنى منه ← `In Review`؛ وعند حد الرفض أو أدنى منه ← `Declined`. |
| **إجراء الوجه المكرر** | `DUPLICATED_FACE`، `POSSIBLE_DUPLICATED_FACE` | إعداد مشترك واحد: لا يوجد إجراء (افتراضي) / المراجعة / رفض. يتم تخطيه بالكامل عندما يكون الوجه المطابق مدرجاً في قائمة السماح للوجوه لديك. |
| **عدم تطابق هوية الوجه المكرر** | `DUPLICATED_FACE_NAME_MISMATCH` | إعداد خاص به (`face_liveness_duplicated_face_name_mismatch_action`): لا يوجد إجراء / المراجعة (افتراضي) / رفض. لا يتم تقييمه إلا عند إطلاق `DUPLICATED_FACE` أيضاً — راجع أدناه. |
| **مطابقة الوجه لهجوم كشف الحيوية** | `FACE_MATCHES_LIVENESS_ATTACK` | إعداد خاص به (`face_liveness_attack_face_match_action`): لا يوجد إجراء (افتراضي) / المراجعة. يتم قبول تعيين "رفض" هنا ولكن يُطبَّق كـ "المراجعة". متاح أيضاً في عقدة تقدير العمر. |
| **وجه محتمل في قائمة الحظر** | `POSSIBLE_FACE_IN_BLOCKLIST` | غير قابل للتكوين في مسارات سير العمل — يتم توجيهه دائماً إلى المراجعة (`log_type: "warning"`). |
| **إجراء الوجوه المتعددة** *(السلبي فقط)* | `MULTIPLE_FACES_DETECTED` | لا يوجد إجراء (افتراضي) / المراجعة / رفض. |
| **حدود جودة الوجه** *(السلبي فقط)* | `LOW_FACE_QUALITY` | حد المراجعة (الافتراضي 15) + حد الرفض (الافتراضي 0، أي أن الرفض معطّل). |
| **إضاءة الوجه** *(السلبي فقط)* | `LOW_FACE_LUMINANCE`، `HIGH_FACE_LUMINANCE` | الحد الأدنى / الحد الأقصى (الافتراضيان 20 / 80 على مقياس مُطبَّع من 0 إلى 100) + إجراء لكل اتجاه (الإجراء الافتراضي هو المراجعة). |
| **حدود العمر** *(مسارات سير العمل التكيفية / عقدة `AGE_ESTIMATION`)* | `AGE_BELOW_MINIMUM`، `AGE_NOT_DETECTED` | حد العمر الأدنى والحد العمري الفاصل؛ كِلا الخطرين يرفضان خطوة كشف الحيوية تلقائياً. مع تمكين خيار الرجوع الاحتياطي إلى التحقق من الهوية، يوجّه سير العمل المستخدم إلى فحص المستند بدلاً من إنهاء الجلسة. |

## التحذيرات الناتجة

### كشف الحيوية الأساسي

| الخطر | السبب | مستوى الخطورة | هل يؤثر على الحالة؟ | المعالجة |
| - | - | - | - | - |
| `NO_FACE_DETECTED` | لم يتم تحديد موقع أي وجه أثناء الالتقاط، أو استنفد المستخدم محاولات إعادة التجربة (`MAX_ATTEMPTS_REACHED`). | `error` | **رفض تلقائي** | أعد الالتقاط في إضاءة أفضل؛ وتأكد من توسيط الوجه. |
| `LIVENESS_FACE_ATTACK` | اكتشف النموذج هجوم العرض. | `error` | **رفض تلقائي** | اعتبره احتيالاً. يتم رفض الجلسة تلقائياً. |
| `LOW_LIVENESS_SCORE` | قيمة `score` عند حد المراجعة لسير العمل أو أقل منه. يتم كتمها عند وجود `NO_FACE_DETECTED` أيضاً. | `warning`؛ يتم التصعيد إلى `error` عندما تكون الدرجة عند حد الرفض أو أقل منه | قابل للتكوين (حدا المراجعة / الرفض) | أعد الالتقاط؛ واضبط الحدود إذا لاحظت نتائج إيجابية كاذبة. |

### سلامة قناة الالتقاط

إشارات هجوم الحقن التي يُبلغ عنها العميل وقت الالتقاط. على عكس هجمات العرض (عرض عنصر مصطنع أمام كاميرا حقيقية)، تصف هذه الإشارات استبدال بث الكاميرا نفسه أو اعتراضه.

كل منها قابل للتكوين لكل سير عمل ويكون افتراضياً **بلا إجراء**، لذا فإن تفعيل الميزة لا يغير أي قرارات حتى تختار ذلك.

| الخطر | السبب | مفتاح التكوين | الافتراضي |
| - | - | - | - |
| `VIRTUAL_CAMERA_DETECTED` | تم تحديد جهاز الالتقاط ككاميرا افتراضية برمجية (مثل OBS وManyCam وSnap Camera وDroidCam وغيرها) بدلاً من كاميرا فعلية. | `virtual_camera_action` | `NO_ACTION` |
| `EXTERNAL_CAPTURE_DEVICE_DETECTED` | كان جهاز الالتقاط كاميرا خارجية أو بطاقة التقاط بدلاً من كاميرا مدمجة. | `external_capture_device_action` | `NO_ACTION` |
| `FRAME_INJECTION_SUSPECTED` | تُظهر الإطارات الملتقطة مؤشرات على تركيب برمجي أو حقن في مسار معالجة الكاميرا بدلاً من التقاط حي حقيقي، **أو** أُجري الالتقاط على أجهزة محاكاة أو افتراضية (محاكي Android، أو جهاز افتراضي على سطح المكتب)، حيث لا يوجد مستشعر كاميرا فعلي ويتم توفير كل إطار من قِبل المضيف. | `frame_injection_action` | `NO_ACTION` |
| `INJECTION_ATTACK_DETECTED` | تم حقن الالتقاط بدلاً من التقاطه بواسطة كاميرا الجهاز نفسه: كاميرا افتراضية برمجية، أو بث كاميرا تم إنشاؤه بواسطة الصفحة أو عبر أتمتة المتصفح، أو كاميرا تم اعتراضها، أو أداة قياس واختبار متصلة بالتطبيق. يسرد `additional_data.reasons` فقط الأسباب التي تثبت ذلك. الإشارات التي يمكن لشخص حقيقي إنتاجها لا تثير هذا الخطر أبداً. في كشف الحيوية ومطابقة الوجه، يتبع هذا الخيار `frame_injection_action`، لذلك لا تتغير قرارات صور السيلفي. | `frame_injection_action` | `NO_ACTION` |
| `SCREEN_CAPTURE_DURING_CAPTURE` | كان تسجيل الشاشة أو مشاركة الشاشة نشطاً على الجهاز أثناء الالتقاط البيومتري. | `screen_capture_action` | `NO_ACTION` |

> [!NOTE]
>
> لا توفر المتصفحات أي إقرار لمصدر الكاميرا على مستوى نظام التشغيل لأي مزوّد، لذا فإن هذه الإشارات على الويب تُعد أدلة مؤيدة وليست إثباتاً قاطعاً. على الويب، تعني النتيجة `null` **غير محددة** (تسميات الأجهزة غير متوفرة حتى يتم منح إذن الكاميرا) ولا تُطلق خطراً أبداً.

يتم التعرف على الكاميرا الافتراضية من خلال اسم جهازها، لذلك لا يتم التعرف على الكاميرا التي يعرضها نظام التشغيل تحت اسم عادي بهذه الطريقة. داخل محاكي Android، تتم تسمية الكاميرا المعاد تعيينها مثل أي كاميرا مدمجة، ولهذا السبب يتم الإبلاغ عن حالة الأجهزة المحاكاة عبر `FRAME_INJECTION_SUSPECTED` بدلاً من ذلك: حيث يتم اكتشافها من بيئة الجهاز - مكدس العرض وطراز الجهاز المُبلغ عنه في وكيل المستخدم - بدلاً من اسم الكاميرا. تحمل النتائج الصادرة من بيئة الجهاز `additional_data.reason: "emulated_capture_device"`، مما يميزها عن تحليل الإطارات الخاص بنموذج كشف الحيوية نفسه.

> [!NOTE]
>
> إن اكتشاف الجهاز من المتصفح هو دليل وليس إقراراً، ويمكن لمهاجم متمرس التدخل فيه. تُبلغ حزم SDK الأصلية للهاتف المحمول عن إشارات سلامة أقوى على مستوى نظام التشغيل لا يمكن للمتصفح رؤيتها (المحاكي، أو الأجهزة التي تتمتع بصلاحيات الجذر أو الأجهزة مكسورة الحماية، أو الربط وقت التشغيل، أو أداة تصحيح أخطاء متصلة)، ولكل منها إجراء خاص بها قابل للتكوين ضمن [سلامة الجهاز وبيئة التشغيل](https://docs.didit.me/ar/core-technology/ip-analysis/warnings-ip-analysis.md#سلامة-الجهاز-وبيئة-التشغيل). ترفع هذه الإشارات تكلفة المهاجم بشكل كبير، ولكنها بمفردها لا تثبت أن الالتقاط جاء من جهاز حقيقي. إشارات سلامة الجهاز مستقلة عن طريقة كشف الحيوية، لذا يمكن دمجها مع أي من التقنيات: Passive أو 3D Flash أو 3D Action & Flash.

### التحليل الجنائي لسلامة التسجيل

يتم احتساب `LIVENESS_VIDEO_ANOMALY` **على جانب الخادم على تسجيل كشف الحيوية المخزن**، بشكل مستقل عن نموذج كشف الحيوية. ويكتشف تسلسلاً متحركاً يتكرر عبر دورات متعددة، بما يتوافق مع بث متكرر.

| الخطر | السبب | مفتاح التكوين | الافتراضي |
| - | - | - | - |
| `LIVENESS_VIDEO_ANOMALY` | يحتوي التسجيل على تسلسل متحرك متكرر. توقفات الكاميرا، والإطارات الثابتة المتكررة، والمقدمات المظلمة، وبطء تسليم الإطارات بمفردها لا تثير هذه الإشارة. | `face_liveness_video_anomaly_action` | `NO_ACTION` |

حدد الإجراء في عقدة كشف الحيوية أو تقدير العمر الخاصة بك: يسجل `NO_ACTION` نتيجة معلوماتية، ويمكن لـ `REVIEW` تصعيد عملية تحقق تم البت فيها إلى قيد المراجعة، ويمكن لـ `DECLINE` تصعيدها إلى مرفوضة. يعمل الفحص بشكل غير متزامن، لذا قد يصل التصعيد بعد النتيجة الأولية. لا يتم خفض رتبة أي قرار حالي أكثر صرامة، ويتم الحفاظ على قرارات المراجعة اليدوية.

تتضمن نتائج الإصدار 2 `forensics_version: 2`، وأدلة `repeated_sequence` و`repeated_moving_sequence` في `anomaly_reasons`. تظل قياسات التسليم مثل `unique_frame_ratio` و`static_pair_ratio` و`decoded_fps_ratio` و`max_frame_gap_seconds` تشخيصية؛ ولا يمكنها إثبات إعادة التشغيل بمفردها. تصف النتائج الأقدم إصدار أداة الكشف المستخدمة في ذلك الوقت ولا يُعاد تصنيفها بأثر رجعي.

> [!NOTE]
>
> هذه إشارة إضافية متحفظة، وليست كشفاً شاملاً للوسائط الاصطناعية أو الفيديو المحقون. التسجيل الخالي من الحالات الشاذة ليس إثباتاً للحيوية. تظل عمليات الالتقاط القصيرة أو الغامضة وعمليات الالتقاط الخالية من أدلة إعادة تشغيل قابلة للاستخدام دون وضع علامة عليها بواسطة هذا الفحص. لا ينتج عن التسجيلات المفقودة أو غير القابلة للقراءة أي نتيجة من هذا الفحص؛ وتظل فحوصات التحقق الأخرى سارية.

### مطابقة الوجه عبر الجلسات

| الخطر | السبب | البيانات الإضافية | مستوى الخطورة |
| - | - | - | - |
| `FACE_IN_BLOCKLIST` | تطابق الوجه مع وجه مدرج في قائمة الحظر. | `blocklisted_session_id`، و`blocklisted_session_number`، و`api_service` | `error` — **رفض تلقائي** |
| `POSSIBLE_FACE_IN_BLOCKLIST` | تطابق الوجه مع وجه مدرج في قائمة الحظر ضمن نطاق ثقة أقل. | `blocklisted_session_id`، و`blocklisted_session_number`، و`api_service` | `warning` — يتم توجيهه دائمًا إلى المراجعة في مسارات سير العمل |
| `FACE_IN_ALLOWLIST` | تطابق الوجه مع وجه مدرج في قائمة السماح. | `allowlisted_session_id`، و`allowlisted_session_number`، و`api_service` | `information` — تم تخطي إجراء الوجه المكرر |
| `POSSIBLE_FACE_IN_ALLOWLIST` | تطابق الوجه مع وجه مدرج في قائمة السماح ضمن نطاق ثقة أقل. | `allowlisted_session_id`، و`allowlisted_session_number`، و`api_service` | `information` — تم تخطي إجراء الوجه المكرر المحتمل |
| `DUPLICATED_FACE` | تطابق الوجه مع وجه معتمد مسبقًا لمستخدم آخر (جلسة `Approved` مع `vendor_data` مختلف، أو وجه مستورد لأحد مستخدمي المورّد التابعين لك). | `duplicated_session_id`، و`duplicated_session_number`، و`api_service` | قابل للتكوين — `information` افتراضيًا |
| `POSSIBLE_DUPLICATED_FACE` | تطابق الوجه مع وجه معتمد أو مستورد آخر ضمن نطاق ثقة أقل. | `duplicated_session_id`، و`duplicated_session_number`، و`api_service` | قابل للتكوين — `information` افتراضيًا |
| `DUPLICATED_FACE_NAME_MISMATCH` | يُصدر بالتزامن مع `DUPLICATED_FACE` عندما لا تتطابق هوية المستخدم في الجلسة المتطابقة مع الاسم المحسوم لهذه الجلسة (مستند الهوية، أو `expected_details`، أو مستخدم المورّد المرتبط)، باستخدام نفس طريقة احتساب درجات مطابقة الأسماء والحد المعتمد في التحقق من الهوية. يمثل الوجه المعاد استخدامه تحت اسم مختلف إشارة احتيال أقوى من مجرد وجه مكرر، لذا يخضع لإجراء قابل للتكوين خاص به. | `duplicated_session_id`، و`duplicated_session_number`، و`api_service`، و`name_match_score` | قابل للتكوين — `warning` افتراضيًا. لا يخفف أبدًا من النتيجة المكونة لـ `DUPLICATED_FACE`، بل يصعّدها فقط. |
| `DUPLICATED_FACE_DOCUMENT_MISMATCH` | يُصدر بالتزامن مع `DUPLICATED_FACE` عندما يُظهر مستند هوية المستخدم المتطابق تاريخ ميلاد مختلفًا عن مستند هذه الجلسة. لا يتم الإبلاغ عن الشخص نفسه عند تقديمه مستندًا مختلفًا (على سبيل المثال جواز سفر بعد بطاقة هوية) أو مستندًا مجددًا، ولا يتم أبدًا الإبلاغ عن جلستين تشتركان في نفس رقم المستند من نفس الدولة. | `duplicated_session_id`، و`duplicated_session_number`، و`api_service`، و`mismatch_dimensions` | قابل للتكوين (`face_liveness_duplicated_face_document_mismatch_action`) - `Review` افتراضيًا. لا يخفف أبدًا من النتيجة المكونة لـ `DUPLICATED_FACE`، بل يصعّدها فقط. |
| `FACE_MATCHES_LIVENESS_ATTACK` | يتطابق الوجه مع وجه من جلسة سابقة لهذا التطبيق، لمستخدم آخر، اعتُبر التقاط كشف الحيوية الخاص به هجومًا بدرجة ثقة عالية. يُعد قرينة للمراجعة، وليس إثباتًا قاطعًا على حدوث هجوم. | `liveness_attack_session_id`، و`liveness_attack_session_number`، و`similarity_percentage`، و`liveness_attack_sessions_count` | قابل للتكوين - `information` افتراضيًا (لا يوجد إجراء) |

بالنسبة لحالات التطابق مع الوجوه المستوردة أو الوجوه المدرجة في القوائم (التي ليس لها جلسة)، تكون قيم `*_session_id` و`*_session_number` و`api_service` في `additional_data` هي `null`.

تُستثنى الوجوه العائدة لنفس المستخدم (نفس `vendor_data`، أو نفس مستخدم المورّد عند توفره) من بحث الفهرس **بأكمله** — سواء كشف التكرار أو فحص قائمة الحظر. تكون أولوية التطابق: التطابق التام مع قائمة الحظر → التطابق التام مع قائمة السماح → التطابق التام المكرر → التطابق المحتمل مع قائمة الحظر → التطابق المحتمل مع قائمة السماح → التطابق المحتمل المكرر — يظهر رمز واحد فقط من هذه الرموز الستة المتنافية في كل تقرير. لا يُعد `DUPLICATED_FACE_NAME_MISMATCH` جزءًا من مجموعة الأولوية تلك: فهو رمز إضافي يُصدر **بالإضافة إلى** `DUPLICATED_FACE` عند فشل التحقق من الهوية أيضًا، ولا يحل محله أبدًا. لا يحتوي `additional_data.name_match_score` إطلاقًا على الأسماء التي تتم مقارنتها — بل المعرّفات والدرجة فقط، حتى لا تصل أي معلومات تعريف شخصية إلى payload التحذير.

قد يحصل الاسم المكتوب بنظام كتابة مختلف في كل مستند (على سبيل المثال العبرية في أحدهما واللاتينية في الآخر) على درجة أقل من الحد حتى لو كانت كلتا الجلستين تعودان لنفس الشخص. في تلك الحالة تحديدًا، لا يُصدر `DUPLICATED_FACE_NAME_MISMATCH` عندما يثبت مستندا الهوية للجلستين صحة بعضهما البعض في كل ما يلي:

* يحمل كلا المستندين نفس دولة الإصدار.
* يتطابق معرّف تطابقًا تامًا بين المستندين. يُعامل `document_number` و`personal_number` بالتبادل، لأن الرقم الوطني نفسه قد يوضع في أيٍّ من الحقلين وفقًا لنوع المستند.
* إذا كان كلا المستندين يتضمنان تاريخ ميلاد، فيجب أن يكون التاريخ نفسه.

إذا كانت الأسماء مكتوبة بنفس نظام الكتابة، أو إذا اختلف المعرّف أو دولة الإصدار أو كان أحدهما مفقودًا، أو إذا تعارضت تواريخ الميلاد، فسيظل التحذير يُصدر كما هو موضح أعلاه.

### جودة كشف الحيوية السلبي (فقط عندما يكون `method = "PASSIVE"`)

| الخطر | السبب | مستوى الخطورة | المعالجة |
| - | - | - | - |
| `MULTIPLE_FACES_DETECTED` | ظهر أكثر من وجه أثناء عملية الالتقاط. يُستخدم الوجه الأكبر دائمًا لاحتساب الدرجات والمطابقة. | قابل للتكوين — `information` افتراضيًا | أعد الالتقاط دون وجود أشخاص آخرين. |
| `LOW_FACE_QUALITY` | جودة الوجه أقل من حد المراجعة (الافتراضي 15). | `warning`؛ و`error` عندما تكون أقل من حد الرفض (الافتراضي 0 — الرفض معطّل) | تركيز أفضل / حجب أقل / وجه في المنتصف. |
| `LOW_FACE_LUMINANCE` | السطوع المطبّع أقل من الحد الأدنى (الافتراضي 20). | قابل للتكوين — `warning` افتراضيًا (يكون الإجراء افتراضيًا هو المراجعة) | إضاءة أفضل. |
| `HIGH_FACE_LUMINANCE` | السطوع المطبّع أعلى من الحد الأقصى (الافتراضي 80). | قابل للتكوين — `warning` افتراضيًا (يكون الإجراء افتراضيًا هو المراجعة) | تقليل الإضاءة وتجنب الإضاءة الخلفية. |

`LOW_FACE_LUMINANCE` و`HIGH_FACE_LUMINANCE` متنافيان — فالسطوع إما أن يكون أقل من الحد الأدنى أو أعلى من الحد الأقصى، ولا يمكن أن يكون كلاهما معًا أبدًا.

### تقدير العمر (مسارات سير العمل التكيفية وعُقد `AGE_ESTIMATION`)

| الخطر | السبب | مستوى الخطورة | المعالجة |
| - | - | - | - |
| `AGE_BELOW_MINIMUM` | العمر المقدَّر أقل من الحد الأدنى المُهيّأ (أو الحد الهامشي عند تفعيل خيار التحقق من الهوية الاحتياطي). | `error` | ينتقل سير العمل إلى التحقق من الهوية الاحتياطي عند تهيئته لذلك. |
| `AGE_NOT_DETECTED` | تعذر تقدير العمر وخيار التحقق من الهوية الاحتياطي معطّل. | `error` | فعّل الخيار الاحتياطي أو أعد الالتقاط. |

## نصوص الوصف الدقيقة

تعيد واجهة برمجة التطبيقات (API) سلاسل `short_description` و`long_description` الدقيقة هذه لكل خطر:

| `risk` | `short_description` | `long_description` |
| - | - | - |
| `NO_FACE_DETECTED` | لم يتم اكتشاف وجه أثناء كشف الحيوية | لم يتمكن النظام من تحديد وجه أثناء فحص الحيوية، وقد يرجع ذلك إلى رداءة جودة الصورة، أو الوضعية غير المناسبة، أو مشكلات تقنية. |
| `LIVENESS_FACE_ATTACK` | هجوم على كشف الحيوية | اكتشف النظام محاولة محتملة لتجاوز فحص الحيوية. |
| `LOW_LIVENESS_SCORE` | درجة حيوية منخفضة | أسفر فحص الحيوية عن درجة منخفضة، مما يشير إلى احتمال استخدام تمثيلات وجهية غير حية أو بيانات بيومترية منخفضة الجودة. |
| `LIVENESS_VIDEO_ANOMALY` | شذوذ في بث فيديو كشف الحيوية | يحتوي فيديو كشف الحيوية المسجل على تسلسل متحرك متكرر يتوافق مع بث متكرر في حلقة مغلقة. لا يؤدي توقف الكاميرا المؤقت أو الإطارات الثابتة المتكررة أو بطء تسليم الإطارات بمفردها إلى إطلاق هذه الإشارة. هذا فحص مستقل للتسجيل، وليس تقييماً شاملاً لما إذا كان الالتقاط حياً. |
| `FACE_IN_BLOCKLIST` | الوجه موجود في قائمة الحظر | حدد النظام وجهاً في قائمة الحظر، مما يعني أنه لا يُسمح بالتحقق من هذا الوجه. |
| `POSSIBLE_FACE_IN_BLOCKLIST` | وجه محتمل في قائمة الحظر | حدد النظام وجهاً محتملاً في قائمة الحظر، مما يعني أنه لا يُسمح بالتحقق من هذا الوجه. |
| `FACE_IN_ALLOWLIST` | الوجه موجود في قائمة السماح | تطابق الوجه مع قائمة السماح بالوجوه في التطبيق، لذا تم تخطي إجراءات الوجه المكرر لهذه الإشارة. |
| `POSSIBLE_FACE_IN_ALLOWLIST` | وجه محتمل في قائمة السماح | يُحتمل تطابق الوجه مع قائمة السماح بالوجوه في التطبيق، لذا تم تخطي إجراءات الوجه المكرر المحتمل لهذه الإشارة. |
| `DUPLICATED_FACE` | وجه مكرر من جلسة مقبولة أخرى | حدد النظام وجهاً مكرراً من جلسة مقبولة أخرى، مما يتطلب مزيداً من التحقيق. |
| `POSSIBLE_DUPLICATED_FACE` | وجه مكرر محتمل من جلسة مقبولة أخرى | حدد النظام وجهاً مكرراً محتملاً من جلسة مقبولة أخرى، مما يتطلب مزيداً من التحقيق. |
| `DUPLICATED_FACE_NAME_MISMATCH` | وجه مكرر باسم مختلف | تم قبول الوجه نفسه بالفعل في جلسة أخرى، ولكن باسم مختلف. لا تتطابق الهوية المرتبطة بالوجه المكرر مع الهوية المعلنة في هذه الجلسة، وهو مؤشر قوي على الاحتيال في الهوية. |
| `FACE_MATCHES_LIVENESS_ATTACK` | الوجه يطابق هجوماً على كشف الحيوية | يطابق الوجه الموجود في التقاط الحيوية هذا وجهاً من جلسة سابقة لهذا التطبيق اعتبر محرك كشف الحيوية عملية التقاطه هجوماً بدرجة ثقة عالية، في جلسة لمستخدم آخر. قد يتم رفض مستخدم حقيقي عن طريق الخطأ، لذا تعد هذه إشارة للمراجعة وليست دليلاً على حدوث هجوم. |
| `MULTIPLE_FACES_DETECTED` | تم اكتشاف وجوه متعددة | تم اكتشاف وجوه متعددة في صورة كشف الحيوية. يستخدم النظام أكبر وجه للتحقق من الحيوية ومقارنة الوجه، إلا أن وجود وجوه متعددة قد يتطلب مراجعة إضافية. |
| `LOW_FACE_QUALITY` | جودة وجه منخفضة | جودة صورة الوجه أقل من الحد المقبول، مما قد يؤثر على موثوقية كشف الحيوية. قد يرجع ذلك إلى دقة الكاميرا أو التركيز أو تشوهات الضغط. |
| `LOW_FACE_LUMINANCE` | إضاءة وجه منخفضة | صورة الوجه مظلمة للغاية، مما قد يؤثر على دقة كشف الحيوية. يُوصى بتوفير ظروف إضاءة أفضل. |
| `HIGH_FACE_LUMINANCE` | إضاءة وجه ساطعة | صورة الوجه ساطعة للغاية أو ذات تعريض ضوئي مفرط، مما قد يؤثر على دقة كشف الحيوية. يُوصى بتقليل الإضاءة أو تجنب الضوء المباشر. |
| `AGE_BELOW_MINIMUM` | العمر أقل من الحد الأدنى | عمر صاحب الوجه أقل من الحد الأدنى للعمر المحدد للتطبيق. |
| `AGE_NOT_DETECTED` | لم يتم اكتشاف العمر | لم يتمكن النظام من تحديد عمر صاحب الوجه، وهو أمر ضروري للتحقق من المستند. |

## واجهة API المستقلة لكشف الحيوية السلبي

تعيد [Liveness API](https://docs.didit.me/ar/standalone-apis/passive-liveness.md) المستقلة استخدام رموز المخاطر نفسها مع بعض الاختلافات في السلوك:

* الرمزان `NO_FACE_DETECTED` و`LOW_LIVENESS_SCORE` متنافيان — لا يُجرى فحص الدرجة إلا عند العثور على وجه. ينطلق الرمز `LOW_LIVENESS_SCORE` بناءً على `face_liveness_score_decline_threshold` الخاص بالطلب (القيمة الافتراضية 30) ويحمل دائماً `log_type: "error"`.
* يُعامل `POSSIBLE_FACE_IN_BLOCKLIST` كحالة رفض (`log_type: "error"`) بدلاً من المراجعة.
* يحمل `MULTIPLE_FACES_DETECTED` القيمة `log_type: "warning"`، بينما تظل مخاطر تكرار الوجه معلوماتية فقط. تؤدي التحذيرات بمستوى `error` فقط إلى تحويل `status` للاستجابة المستقلة إلى `Declined`.
* تتضمن مدخلات التحذيرات المستقلة الحقل `feature` ولكن بدون `node_id`.

## أمثلة

### الرفض التلقائي عند اكتشاف هجوم

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LIVENESS_FACE_ATTACK",
    "additional_data": null,
    "log_type": "error",
    "short_description": "Liveness Face Attack",
    "long_description": "The system detected a potential attempt to bypass the liveness check.",
    "node_id": "liveness_primary"
  }
]
```

### تحذيرات قابلة للتكوين في الالتقاط السلبي

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LOW_FACE_QUALITY",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "Low face quality",
    "long_description": "The facial image quality is below the acceptable threshold, which may affect the reliability of liveness detection. This could be due to camera resolution, focus, or compression artifacts.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "LOW_FACE_LUMINANCE",
    "additional_data": null,
    "log_type": "warning",
    "short_description": "Low face luminance",
    "long_description": "The facial image is too dark, which may affect the accuracy of liveness detection. Better lighting conditions are recommended.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "MULTIPLE_FACES_DETECTED",
    "additional_data": null,
    "log_type": "information",
    "short_description": "Multiple faces detected",
    "long_description": "Multiple faces were detected in the liveness image. The system uses the largest face for liveness verification and face comparison, but the presence of multiple faces may require additional review.",
    "node_id": "liveness_primary"
  }
]
```

### وجه مكرر مع payload

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null
    },
    "log_type": "warning",
    "short_description": "Duplicated face from other approved session",
    "long_description": "The system identified a duplicated face from another approved session, requiring further investigation.",
    "node_id": "liveness_primary"
  }
]
```

هنا تم ضبط إجراء الوجه المكرر على مراجعة (Review)، لذا يحمل التحذير `log_type: "warning"` وتكون حالة تقرير كشف الحيوية `In Review`. مع الإجراء الافتراضي (بدون إجراء)، كان سيحمل `log_type: "information"` بدلاً من ذلك. تكون قيمة `api_service` هي `null` لأن الوجه المطابق جاء من جلسة سير عمل، وليس من استدعاء API مستقل.

### وجه مكرر باسم مختلف

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null
    },
    "log_type": "information",
    "short_description": "Duplicated face from other approved session",
    "long_description": "The system identified a duplicated face from another approved session, requiring further investigation.",
    "node_id": "liveness_primary"
  },
  {
    "feature": "LIVENESS",
    "risk": "DUPLICATED_FACE_NAME_MISMATCH",
    "additional_data": {
      "duplicated_session_id": "8d2f1c4e-6b7a-4c8d-9e0f-1a2b3c4d5e6f",
      "duplicated_session_number": 123,
      "api_service": null,
      "name_match_score": 42.5
    },
    "log_type": "warning",
    "short_description": "Duplicated face under a different name",
    "long_description": "The same face was already approved on another session, but under a different name. The identity behind the duplicate does not match the identity declared on this session, which is a strong indicator of identity fraud.",
    "node_id": "liveness_primary"
  }
]
```

يبقى `DUPLICATED_FACE` عند الإجراء المُكوَّن له (هنا، بدون إجراء — `log_type: "information"`) بينما يحمل `DUPLICATED_FACE_NAME_MISMATCH` الإجراء الخاص به، والذي يكون افتراضياً مراجعة (`log_type: "warning"`). تتبع حالة تقرير كشف الحيوية الإجراء الأكثر شدة بين الاثنين: `In Review` هنا، حتى لو لم يكن إعداد الوجه المكرر العادي وحده سيُفعِّله.

### شذوذ في سلامة التسجيل مع قياساته

```json theme={null}
"warnings": [
  {
    "feature": "LIVENESS",
    "risk": "LIVENESS_VIDEO_ANOMALY",
    "additional_data": {
      "forensics_version": 2,
      "duration_seconds": 6.0,
      "repeated_sequence": {
        "period_frames": 6,
        "cycles": 3,
        "matched_pairs": 12
      },
      "anomaly_reasons": ["repeated_moving_sequence"]
    },
    "log_type": "information",
    "short_description": "Liveness video stream anomaly",
    "long_description": "The recorded liveness video contains a repeated moving sequence consistent with a looped feed. Camera stalls, repeated still frames and slow frame delivery alone do not raise this signal. This is an independent recording check, not a complete assessment of whether the capture is live.",
    "node_id": "liveness_primary"
  }
]
```

يوضح هذا المثال أدلة إعادة التشغيل من تسجيل يحتوي على ثلاث نسخ من تسلسل متحرك. قيمة `log_type` هي `information` لأن الإجراء المُكوَّن هو `NO_ACTION`. لا تؤدي تشخيصات تسليم الإطارات، التي حُذفت من هذا المثال للاختصار، إلى تفعيل هذه النتيجة.

## أنواع التحذيرات

يتم تعيين مستوى شدة لكل خطر بناءً على تكوين تطبيقك. مستويات الشدة الثلاثة هي:

## مواضيع ذات صلة

* [تقرير كشف الحيوية](https://docs.didit.me/ar/core-technology/liveness/report-liveness.md) — مخطط التقرير الكامل وحالاته.
* [تحذيرات مطابقة الوجه](https://docs.didit.me/ar/core-technology/face-match/warnings-face-match.md) — تحذيرات مطابقة الوجه 1:1 المصاحبة.
* [webhook](https://docs.didit.me/ar/integration/webhooks.md) — يحمل `session.status.updated` التحذيرات بمجرد انتهاء خطوة كشف الحيوية.
* [نماذج البيانات — فحص كشف الحيوية](https://docs.didit.me/ar/reference/data-models.md#فحص-الحيوية) — المخطط المرجعي مع كل حقل.
* [نماذج البيانات — كائن التحذير](https://docs.didit.me/ar/reference/data-models.md#كائن-التحذير) — شكل كل مدخل في `warnings[]`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.