نظرة عامة
يتبع كل تقرير خاص بميزة شكل المُسلسِل V3 المعرَّف فيservice-didit-verification. يظهر الكائن نفسه في ثلاثة مواضع، لذلك فإن المخطط الموجود هنا هو المصدر المرجعي الوحيد لجميع هذه المواضع:
GET /v3/session/{sessionId}/decision/: تُعاد كل ميزة في مصفوفة بصيغة الجمع (id_verifications[]،nfc_verifications[]،liveness_checks[]،face_matches[]،poa_verifications[]،phone_verifications[]،email_verifications[]،aml_screenings[]،ip_analyses[]،database_validations[]،questionnaire_responses[]،signatures[]،bank_verifications[](راجع طرق التحقق البنكي)، والمكافئات الخاصة بـ KYB وهيregistry_checks[]وdocument_verifications[]وkey_people_checks[]).- حمولات webhook (
status.updatedوdata.updated): الشكل نفسه داخل الغلافdecision. - واجهات برمجة التطبيقات المستقلة: تعيد الاستجابات ككائن واحد (البحث بالوجه وتقدير العمر والمصادقة البيومترية) وتستخدم مجموعة الحقول نفسها.
قدّم V3 سير العمل متعدد المثيلات: يحمل كل كائن ميزة الحقل
node_id الذي يربط التقرير بعقدة الرسم البياني لسير العمل التي أنتجته. أما endpoints V2 (بصيغة المفرد، مثل kyc وface وaml)، فما زالت متوافقة مع الإصدارات السابقة، لكنها تعيد أول مثيل فقط.الحقول المشتركة
يعرض كل كائن تقرير الحقول التالية:| الحقل | النوع | الوصف |
|---|---|---|
status | نص | حالة دورة الحياة على مستوى الميزة، وهي إحدى القيم الواردة في تعداد الحالة. المصدر: common/config/choices.py:FeatureStatusChoices (الأسطر 343-348). يستخدم الحقل status على المستوى الأعلى للجلسة الأم تعداد الجلسة الأوسع StatusChoices (الأسطر 106-117). |
node_id | نص | null | معرّف عقدة الرسم البياني لسير العمل. يُملأ في سير العمل متعدد المثيلات في V3، ويكون null في الجلسات القديمة ذات الميزة الواحدة. |
warnings | مصفوفة من كائنات التحذير | إشارات المخاطر المصفّاة حسب هذه الميزة وnode_id. تُعاد بواسطة Session.get_logs(...) (sessions/models/session.py:1611). |
portrait_image وfront_image وdocument_file و…) روابط موقعة مسبقاً بنافذة صلاحية محدودة، لذا نزّلها فوراً بدلاً من تخزين الرابط. تُعرض الأمثلة بالصيغة https://<media-host>/....
كائن التحذير
يُعاد في كل مصفوفةwarnings[]. المخطط من logs/serializers/log.py:8-65 (LogV3Serializer).
| الحقل | النوع | يقبل null | الوصف | مثال |
|---|---|---|---|---|
feature | نص (تعداد) | لا | الميزة التي أصدرت التحذير. القيم من LogWarningChoices (common/config/choices.py:190-204): ID_VERIFICATION، NFC، LIVENESS، FACEMATCH، PROOF_OF_ADDRESS، PHONE، EMAIL، AML، LOCATION، DATABASE_VALIDATION، QUESTIONNAIRE، KYB_REGISTRY، KYB_DOCUMENTS، KYB_KEY_PEOPLE. | "ID_VERIFICATION" |
risk | نص | لا | رمز مخاطرة ثابت (مثل DOCUMENT_EXPIRED وLOW_LIVENESS_SCORE). القيم من logs/choices.py:RiskChoices. يُستخدم مفتاحاً للوصول إلى جداول الأوصاف. | "DOCUMENT_EXPIRED" |
additional_data | كائن | null | نعم | سياق خاص بالمخاطرة (مثل عتبات الدرجات والحقول المطابَقة). يختلف شكله باختلاف رمز المخاطرة. | { "score": 42.1, "threshold": 70 } |
log_type | نص (تعداد) | لا | إحدى القيم error أو warning أو information. من LogTypeChoices (common/config/choices.py:207-210). | "error" |
short_description | نص | لا | تسمية مقروءة للمخاطرة. من logs/choices.py:RISK_SHORT_DESCRIPTIONS. | "Document expired" |
long_description | نص | لا | شرح مقروء أطول، مناسب للعرض على المستخدم النهائي. من logs/choices.py:RISK_LONG_DESCRIPTIONS. | "The document's expiration date has passed, rendering it no longer valid for use." |
node_id | نص | null | نعم | عقدة الرسم البياني لسير العمل التي رُفع عليها التحذير. تكون null في سجلات V2 القديمة التي لا تحمل node_id. | "first_id_verification" |
{
"feature": "ID_VERIFICATION",
"risk": "DOCUMENT_EXPIRED",
"additional_data": null,
"log_type": "error",
"short_description": "Document expired",
"long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
"node_id": "first_id_verification"
}
كائنات التقارير
تغطي الأقسام المتبقية كل كائن تقرير خاص بكل ميزة. نص عنوان H3 ثابت عمداً حتى تتمكن الوثائق الأخرى من الربط المباشر به.التحقق من الهوية
يتم إرجاعه لكل مستند KYC/هوية يقدمه المستخدم. يظهر كـid_verifications[] في GET /v3/session/{sessionId}/decision/ وداخل الحقل kyc في استجابات V2. المصدر: kyc/serializers/kyc.py:383-414 (IDVerificationV3Serializer، يرث من IDVerificationV2Serializer في kyc/serializers/kyc.py:320-380).
| الحقل | النوع | يقبل null | الوصف | مثال |
|---|---|---|---|---|
status | string | لا | انظر تعداد الحالات. | "Approved" |
document_type | string | نعم | فئة المستند المفهومة للإنسان (Passport، Identity Card، Driver's License، Residence Permit، Health Insurance Card، Tax Card، Social Security Card، Work Permit، Visa، Public Service Card، Birth Certificate، Firearm License، Other). المصدر: DOC_TYPE_MAPPING (common/config/choices.py:1275-1289). | "Passport" |
document_subtype | string | نعم | رمز النوع الفرعي للمستند من سجل المستندات في Didit، مُصفّى حسب ما تقبله إعدادات المستندات في سير العمل. تتضمن المستندات الخاصة بمنطقة معينة اسم المنطقة. قائمة الرموز الكاملة: أنواع المستندات الفرعية. | "QUEENSLAND_DRIVER_LICENSE_GENERIC" |
document_number | string | نعم | رقم المستند المستخرج عبر OCR. | "AB1234567" |
personal_number | string | نعم | المعرّف الشخصي أو الوطني المستخرج عبر OCR. | "99999999R" |
portrait_image | string (URL) | نعم | عنوان URL موقّع مسبقاً لقصاصة الوجه. | "https://<media-host>/.../portrait.jpg?..." |
front_image | string (URL) | نعم | عنوان URL موقّع مسبقاً للوجه الأمامي المنظّف من المستند. | "https://<media-host>/.../front.jpg?..." |
front_video | string (URL) | نعم | عنوان URL موقّع مسبقاً لفيديو التقاط الوجه الأمامي (عند توفره). | "https://<media-host>/.../front.mp4?..." |
back_image | string (URL) | نعم | عنوان URL موقّع مسبقاً للوجه الخلفي المنظّف من المستند. | "https://<media-host>/.../back.jpg?..." |
back_video | string (URL) | نعم | عنوان URL موقّع مسبقاً لفيديو التقاط الوجه الخلفي. | null |
full_front_image | string (URL) | نعم | التقاط الوجه الأمامي كاملاً وغير مقصوص (بالإطار الكامل). | "https://<media-host>/.../full_front.jpg?..." |
full_back_image | string (URL) | نعم | التقاط الوجه الخلفي كاملاً وغير مقصوص (بالإطار الكامل). | null |
front_image_camera_front | string (URL) | نعم | صورة من الكاميرا الأمامية التُقطت في الوقت نفسه مع الوجه الأمامي للمستند. | null |
back_image_camera_front | string (URL) | نعم | صورة من الكاميرا الأمامية التُقطت في الوقت نفسه مع الوجه الخلفي للمستند. | null |
front_image_camera_front_face_match_score | float (0-100) | نعم | التشابه بين صورة الوجه في المستند والتقاط الكاميرا الأمامية. | null |
back_image_camera_front_face_match_score | float (0-100) | نعم | نفس ما سبق ولكن للالتقاط الخلفي. | null |
document_selfie_face_matches | array | نعم | الجلسات السابقة أو إدخالات قائمة الحظر للوجه التي تطابق السيلفي الملتقط أثناء التقاط المستند. الصيغة نفسها لإدخالات liveness_checks[].matches. القيمة null عندما لا يُنفّذ البحث، و[] عندما لا تتطابق أي نتيجة. | null |
front_image_quality_score | object | نعم | مقاييس الجودة للصورة الأمامية: درجات من 0 إلى 100 (focus_score، brightness_score، resolution_score، overall_score)، بالإضافة إلى brightness_issue (ok، too_dark، too_bright) وis_document_fully_visible (قيمة منطقية). | { "focus_score": 91.0, "overall_score": 88.5 } |
back_image_quality_score | object | نعم | بالشكل نفسه مثل front_image_quality_score. | null |
date_of_birth | string (YYYY-MM-DD) | نعم | تاريخ الميلاد المستخرج عبر OCR. | "1990-05-12" |
age | integer | نعم | العمر المحسوب بالسنوات وقت الاستخلاص. | 35 |
expiration_date | string (YYYY-MM-DD) | نعم | تاريخ انتهاء صلاحية المستند. | "2032-05-11" |
date_of_issue | string (YYYY-MM-DD) | نعم | تاريخ إصدار المستند. | "2022-05-11" |
issuing_state | string (ISO 3166-1 alpha-3) | نعم | رمز دولة الإصدار. | "ESP" |
issuing_state_name | string | نعم | اسم دولة الإصدار المترجم وفق الإعدادات المحلية. | "Spain" |
first_name | string | نعم | الاسم أو الأسماء الشخصية المستخرجة عبر OCR. | "María" |
last_name | string | نعم | اسم العائلة أو أسماء العائلة المستخرجة عبر OCR. | "García López" |
full_name | string | نعم | الاسم الكامل بعد التطبيع (يوفره المزوّد). | "María García López" |
gender | string | نعم | M أو F أو قيمة أخرى يوفرها المزوّد. | "F" |
address | string | نعم | سطر العنوان الخام المستخرج عبر OCR. | "Calle Mayor 1, 28001 Madrid" |
formatted_address | string | نعم | العنوان بعد الترميز الجغرافي والتنسيق (عند إمكانية تحليله). | "Calle Mayor 1, 28001 Madrid, Spain" |
parsed_address | object | نعم | العنوان المنظّم والمرمّز جغرافياً: street_1، street_2، city، region، country، postal_code، address_type، formatted_address، document_location ({latitude, longitude})، raw_results، is_best_match. المصدر: kyc/utils/address.py:147-197. | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" } |
place_of_birth | string | نعم | مكان الميلاد المستخرج عبر OCR. | "Madrid" |
marital_status | string | نعم | عند إمكانية استخراجه. | null |
nationality | string (ISO 3166-1 alpha-3) | نعم | الجنسية المستخرجة عبر OCR. | "ESP" |
extra_fields | object | نعم | حقول خاصة بنوع المستند غير مشمولة في المخطط الأساسي (على سبيل المثال فئات رخصة القيادة). | { "DL Class": "B" } |
mrz | object | نعم | حقول MRZ المحلّلة عند وجودها (document_number، birth_date، expiry_date، surname، given_names، …). | { "document_number": "AB1234567", "surname": "GARCIA", "given_names": "MARIA" } |
extra_files | array of strings (URL) | لا | عناوين URL موقّعة مسبقاً لأي ملفات إضافية مرفوعة. | [] |
matches | array of objects | لا | تطابقات المستندات عبر الجلسات. كل عنصر: { session_id, session_number, vendor_data, verification_date, user_details: { name, document_type, document_number }, status, is_blocklisted, api_service, front_image_url }. front_image_url موقّع مسبقاً. | [] |
verification_method | نص | لا | طريقة التحقق من الهوية التي أنتجت هذا الصف: document أو id_lookup أو wallet. تكون دائماً document لمستند تم تصويره، بما في ذلك كل جلسة أُنشئت قبل توفر الطرق الأخرى. | "id_lookup" |
assurance | نص | لا | مستوى الضمان المشتق من verification_method: documentary أو data_match أو cryptographic. | "data_match" |
wallet_provider | نص | null | نعم | معرّف المحفظة في الكتالوج عندما أنتجت محفظة هذا الصف (mitid, bankid_se, itsme, …). يكون null في غير ذلك. | "mitid" |
fallback_from | كائن | null | نعم | سبب انتهاء خطوة الهوية بطريقة لا تعتمد على المستند: { method, reason, action }. يُعيَّن عند فشل بحث أو تسجيل دخول بالمحفظة: في الصف المرفوض عندما كان مفتاح التبديل الخاص بالدولة decline (action: "decline")، وفي مستند التحقق الذي يكمل به المستخدم عندما كان fallback_to_document (action: "fallback_to_document"). يكون null عندما لا يُسجَّل أي فشل سابق لطريقة غير المستند. | { "method": "id_lookup", "reason": "no_match", "action": "decline" } |
id_lookup | كائن | null | نعم | دليل المصدر، ويظهر فقط عندما تكون verification_method هي id_lookup: source (المصدر الدقيق الذي تم الاستعلام عنه: سجل حكومي في معظم الدول، وملف مكتب ائتمان أو سجلات سكنية في بعضها)، checked_at، attempts، max_attempts، outcome (match، partial_match، no_match، provider_error، format_rejected)، comparison[] ({ field, label, provided, record, result }؛ إذ إن field واحد من identification_number وfull_name وdate_of_birth وaddress، وresult هو match أو partial أو no_match؛ وقد تتضمن الإصدارات السابقة صف provider يحتوي على error)، source_errors[] (في بيئة التجهيز الحالية: تشخيصات منفصلة لكل مصدر؛ تأكد من طرحها في الإنتاج)، registry_portrait (عنوان URL موقّع مسبقاً، فقط للمصادر التي تُرجعه)، وface_match_score. | انظر أدناه |
wallet_verification | كائن | null | نعم | دليل الاعتماد، ويظهر فقط عندما تكون verification_method هي wallet: provider، provider_name، issuing_authority، issuing_country، credential_type، level_of_assurance (low، substantial، high)، verified_at، signature_valid، attributes (ما شاركته المحفظة)، portrait (عنوان URL موقّع مسبقاً عندما تشارك المحفظة صورة)، وface_match_score. | انظر أدناه |
document_liveness | كائن | null | نعم | درجات حيوية المستند لكل نوع احتيال (portrait_replace، printed_copy، screen_replay)، وتُعرض سواء أُطلق تحذير أم لم يُطلق. لكل نوع: score (من 0 إلى 100، وكلما ارتفعت القيمة كان المستند أرجح أن يكون أصلياً؛ وهي الأدنى بين الوجهين، وهي القيمة التي اعتمد عليها القرار)، وfront، وback، وdecline_threshold، وreview_threshold، وbucket (approve أو review أو decline أو null). تُحفظ الحدود والفئة وقت التقييم، وتكون الثلاثة كلها null عندما لا تتوفر أدلة التقييم السابقة، مع بقاء الدرجات المخزّنة مرئية. يكون null عندما لم يُنفَّذ الفحص. انظر درجات حيوية المستند. للإصدار V3 فقط. | { "portrait_replace": { "score": 96.46, "bucket": "approve" } } |
node_id | نص | null | نعم | معرّف عقدة سير العمل (V3). | "first_id_verification" |
warnings | مصفوفة | لا | انظر كائن التحذير. | [] |
region | نص | نعم | المنطقة أو الولاية في الدولة المُصدِرة، عندما يحدّدها المستند. | "CA" |
extracted_data | كائن | نعم | لقطة من البيانات المستخرجة من المستند التي عُرضت على الشخص لمراجعتها، وتُحفظ بجانب القيم المؤكدة حتى تتمكن من مقارنتها. يكون null عندما لم يُطلب من الشخص المراجعة. | |
barcodes | مصفوفة من الكائنات | لا | البيانات المقروءة من باركودات المستند، إدخال واحد لكل باركود، يحتوي على type وposition وdata وdata_raw وside. يكون [] عندما لا توجد باركودات. | [] |
{
"status": "Approved",
"document_type": "Passport",
"document_subtype": "PASSPORT_GENERIC",
"document_number": "AB1234567",
"personal_number": "99999999R",
"portrait_image": "https://<media-host>/.../portrait.jpg?signature=...",
"front_image": "https://<media-host>/.../front.jpg?signature=...",
"front_video": null,
"back_image": "https://<media-host>/.../back.jpg?signature=...",
"back_video": null,
"full_front_image": "https://<media-host>/.../full_front.jpg?signature=...",
"full_back_image": null,
"front_image_camera_front": null,
"back_image_camera_front": null,
"front_image_camera_front_face_match_score": null,
"back_image_camera_front_face_match_score": null,
"front_image_quality_score": {
"focus_score": 91.0,
"brightness_score": 88.0,
"brightness_issue": "ok",
"is_document_fully_visible": true,
"resolution_score": 95.0,
"overall_score": 88.5
},
"back_image_quality_score": null,
"date_of_birth": "1990-05-12",
"age": 35,
"expiration_date": "2032-05-11",
"date_of_issue": "2022-05-11",
"issuing_state": "ESP",
"issuing_state_name": "Spain",
"first_name": "María",
"last_name": "García López",
"full_name": "María García López",
"gender": "F",
"address": "Calle Mayor 1, 28001 Madrid",
"formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"parsed_address": { "street_1": "Calle Mayor 1", "street_2": null, "city": "Madrid", "region": "Madrid", "postal_code": "28001", "country": "ES", "address_type": "Calle" },
"place_of_birth": "Madrid",
"marital_status": null,
"nationality": "ESP",
"extra_fields": {},
"mrz": {
"document_number": "AB1234567",
"surname": "GARCIA",
"given_names": "MARIA",
"birth_date": "900512",
"expiry_date": "320511"
},
"extra_files": [],
"matches": [],
"node_id": "first_id_verification",
"verification_method": "document",
"assurance": "documentary",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": null,
"wallet_verification": null,
"document_liveness": {
"portrait_replace": {
"score": 96.46,
"front": 96.46,
"back": 98.2,
"decline_threshold": 35,
"review_threshold": 70,
"bucket": "approve"
},
"printed_copy": {
"score": 91.2,
"front": 91.2,
"back": 93.7,
"decline_threshold": 35,
"review_threshold": 77,
"bucket": "approve"
},
"screen_replay": {
"score": 99.9,
"front": 99.9,
"back": 99.5,
"decline_threshold": 30,
"review_threshold": 70,
"bucket": "approve"
}
},
"warnings": []
}
null.
{
"status": "Approved",
"issuing_state": "ZAF",
"first_name": "Thabo",
"last_name": "Mokoena",
"full_name": "Thabo Mokoena",
"date_of_birth": "1991-06-15",
"personal_number": "9106155043088",
"node_id": "first_id_verification",
"verification_method": "id_lookup",
"assurance": "data_match",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": {
"source": "Department of Home Affairs",
"checked_at": "2026-09-04T09:12:44Z",
"attempts": 1,
"max_attempts": 2,
"outcome": "match",
"comparison": [
{ "field": "identification_number", "label": "ID number", "provided": "9106155043088", "record": "9106155043088", "result": "match" },
{ "field": "full_name", "label": "Full name", "provided": "Thabo Mokoena", "record": "Thabo Mokoena", "result": "match" },
{ "field": "date_of_birth", "label": "Date of birth", "provided": "1991-06-15", "record": "1991-06-15", "result": "match" }
],
"registry_portrait": "https://<media-host>/.../registry_portrait.jpg?signature=...",
"face_match_score": 96.4
},
"wallet_verification": null,
"warnings": []
}
{
"status": "Approved",
"issuing_state": "DNK",
"first_name": "Freja",
"last_name": "Nielsen",
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"node_id": "first_id_verification",
"verification_method": "wallet",
"assurance": "cryptographic",
"wallet_provider": "mitid",
"fallback_from": null,
"id_lookup": null,
"wallet_verification": {
"provider": "mitid",
"provider_name": "MitID",
"issuing_authority": "Danish Agency for Digital Government",
"issuing_country": "DNK",
"credential_type": "person_identification",
"level_of_assurance": "substantial",
"verified_at": "2026-09-04T09:12:44Z",
"signature_valid": true,
"attributes": {
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"cpr_alias": "b0f1c2d3-e4f5-4678-9abc-def012345678"
},
"portrait": null,
"face_match_score": null
},
"warnings": []
}
التحقق عبر NFC
يُرجَع لكل قراءة لشريحة في مستند هوية: شريحة ePassport أو eID وفق ICAO 9303، أو قراءة بطاقة My Number اليابانية عبر JPKI (chip_protocol: "jpki"). يظهر كـ nfc_verifications[] في GET /v3/session/{sessionId}/decision/ (واحد لكل سجل KYC رئيسي). المصدر: kyc/serializers/epassport.py:121-139 (NFCV3Serializer، ويمتد من NFCV2Serializer في kyc/serializers/epassport.py:83-118).
| الحقل | النوع | يسمح بالقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | انظر تعداد الحالة. | "Approved" |
portrait_image | نص (URL) | نعم | عنوان URL موقّع مسبقاً لصورة الوجه المستخرجة من الشريحة. | "https://<media-host>/.../nfc_portrait.jpg?..." |
signature_image | نص (URL) | نعم | عنوان URL موقّع مسبقاً لصورة التوقيع المستخرجة من الشريحة (عندما تكون مخزنة عليها). | null |
chip_data | كائن | نعم | البيانات الشخصية المحللة من مجموعات البيانات (Data Groups) في الشريحة، مسطّحة (kyc/utils/epassport.py:165-212): dgs (مجموعات البيانات التي قُرئت)، وsurname، وname، وcountry، وnationality، وbirth_date (YYYY-MM-DD)، وexpiry_date (YYYY-MM-DD)، وsex (M/F)، وdocument_type (رمز وثيقة MRZ)، وdocument_number، وoptional_data، وأرقام التحقق من MRZ (birth_date_hash، expiry_date_hash، document_number_hash، optional_data_hash، final_hash)، وmrz_string، وmrz_type (TD1/TD2/TD3)؛ إضافة إلى place_of_birth وaddress (وfull_name / full_name_non_latin للأسماء غير اللاتينية) عندما تحمل الشريحة DG11، وتكون هذه المفاتيح غائبة في غير ذلك. يكون null عندما تُتخطى خطوة NFC. | { "document_number": "AB1234567", "name": "MARIA" } |
authenticity | كائن | نعم | { sod_integrity, dg_integrity }؛ ويكون null لقراءة JPKI. يتحقق sod_integrity من أن توقيع Document Security Object (SOD) يتسلسل إلى CSCA صالحة تابعة للدولة المُصدِرة (وأن DSC غير ملغاة ولا منتهية الصلاحية)؛ ويتحقق dg_integrity من أن تجزئة كل مجموعة بيانات تطابق SOD. عندما تكون القيمتان true معاً فهذا يعني أن الشريحة أصلية ولم يُعبث بها. | { "sod_integrity": true, "dg_integrity": true } |
certificate_summary | object | نعم | ملخص شهادة موقّع المستند (kyc/utils/epassport.py:338-348): issuer وsubject وserial_number (عدد صحيح)، وnot_valid_before وnot_valid_after (YYYY-MM-DD HH:MM:SS)، إضافةً إلى كائن validation بالشكل { csca_verified, dsc_revoked, dsc_expired, csca_expired } (kyc/views/epassport.py:86). | { "issuer": "Common Name: CSCA SPAIN, Country: ES", "not_valid_after": "2031-02-18 10:21:11" } |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_nfc" |
is_nfc_skipped | boolean | لا | true عندما تُتخطى خطوة NFC هذه بشكل صريح بدلاً من قراءتها، ويوضح skip_reason السبب. | false |
skip_reason | string | نعم | سبب تخطي الخطوة، ولا يُضبط إلا عندما تكون is_nfc_skipped بقيمة true. إحدى القيم التالية: USER_SKIPPED، DOCUMENT_WITHOUT_CHIP، CHIP_CERTIFICATE_UNAVAILABLE، DEVICE_WITHOUT_NFC، INTEGRATION_WITHOUT_NFC_ACCESS، MRZ_KEY_UNAVAILABLE، JPKI_UNAVAILABLE؛ راجع أسباب التخطي. تحمل payload الخاص بالقرار أيضاً حقل nfc_skip_reason على مستوى الجلسة بالتصنيف نفسه، ويغطي خطوات NFC التي تم تجاوزها قبل إنشاء أي تقرير. | null |
chip_protocol | string | لا | طريقة قراءة الشريحة: icao (شريحة ICAO 9303 لجواز السفر الإلكتروني أو لبطاقة الهوية الإلكترونية) أو jpki (بطاقة Japan My Number). في حالة jpki، تكون القيم portrait_image وsignature_image وchip_data وauthenticity وcertificate_summary بقيمة null. وتُضبط هذه القيمة أيضاً في الخطوات المتخطاة. | "icao" |
jpki | object | نعم | ما أثبتته قراءة بطاقة My Number: certificate_types وchain_valid وsignature_valid وrevocation_status (good أو revoked أو unchecked) وca_generation وcertificate_expires_at وcertificates[] وattributes (الاسم وتاريخ الميلاد والجنس والعنوان من شهادة التوقيع) وattributes_match_ocr وmismatched_attributes. لا تُرجَع أبداً الشهادات أو أرقامها التسلسلية أو التواقيع. تكون القيمة null بالنسبة لشرائح ICAO، وللخطوات المتخطاة، وعندما تنتهي الخطوة دون أي قراءة للبطاقة. راجع حقول JPKI. | null |
warnings | array | لا | راجع كائن التحذير. | [] |
{
"status": "Approved",
"portrait_image": "https://<media-host>/.../nfc_portrait.jpg?signature=...",
"signature_image": null,
"chip_data": {
"dgs": ["DG1", "DG2", "DG11"],
"surname": "GARCIA LOPEZ",
"name": "MARIA",
"country": "ESP",
"nationality": "ESP",
"birth_date": "1990-05-12",
"expiry_date": "2032-05-11",
"sex": "F",
"document_type": "P",
"document_number": "AB1234567",
"optional_data": "",
"birth_date_hash": "4",
"expiry_date_hash": "7",
"document_number_hash": "3",
"optional_data_hash": "",
"final_hash": "8",
"mrz_string": "P<ESPGARCIA<LOPEZ<<MARIA<<<<<<<<<<<<<<<<<<<<AB1234567ESP9005124F3205117<<<<<<<<<<<<<<08",
"mrz_type": "TD3",
"place_of_birth": "MADRID",
"address": "CALLE MAYOR 1, MADRID"
},
"authenticity": { "sod_integrity": true, "dg_integrity": true },
"certificate_summary": {
"issuer": "Common Name: CSCA SPAIN, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"subject": "Common Name: DS n-eID SPAIN 2, Organizational Unit: PASSPORT, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"serial_number": 118120836164494130086420187336801405660,
"not_valid_before": "2020-11-18 10:21:11",
"not_valid_after": "2031-02-18 10:21:11",
"validation": {
"csca_verified": true,
"dsc_revoked": false,
"dsc_expired": false,
"csca_expired": false
}
},
"node_id": "first_nfc",
"is_nfc_skipped": false,
"skip_reason": null,
"chip_protocol": "icao",
"jpki": null,
"warnings": []
}
كشف الحيوية
تُعاد لكل جلسة حيوية. تظهر كـliveness_checks[] في GET /v3/session/{sessionId}/decision/. المصدر: face/serializers/face.py:301-320 (LivenessV3Serializer، ويمتد من LivenessV2Serializer في face/serializers/face.py:216-298).
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | string | لا | راجع تعداد الحالة. | "Approved" |
method | string (enum) | نعم | ACTIVE_3D أو FLASHING أو PASSIVE (LivenessMethodChoices، common/config/choices.py:514-517). يُجرى الفحص السلبي عندما تكون جلسات سطح المكتب مسموحة والمستخدم على سطح المكتب. | "PASSIVE" |
score | float (0-100) | نعم | درجة ثقة الحيوية، مقرّبة إلى منزلتين عشريتين. | 92.41 |
reference_image | string (URL) | نعم | عنوان URL موقّع مسبقاً لقصاصة وجه المستخدم المرجعية. | "https://<media-host>/.../reference.jpg?..." |
video_url | string (URL) | نعم | عنوان URL موقّع مسبقاً لتسجيل الحيوية عندما تحفظ عملية الالتقاط تسجيلاً، سواء للحيوية النشطة أو السلبية. تكون القيمة null عندما لا تحتفظ الجلسة بأي تسجيل. | "https://<media-host>/.../liveness.webm?..." |
age_estimation | float | نعم | العمر التقديري (بالسنوات) لأكبر وجه في الصورة المرجعية. | 34.2 |
matches | array of objects | لا | مطابقات الوجه عبر الجلسات. يحتوي كل عنصر على: { session_id, session_number, similarity_percentage, vendor_data, vendor_user_id, biometric_template_id, verification_date, user_details: { full_name, document_type, document_number }, match_image_url, status, is_blocklisted, is_allowlisted, api_service, source }. تكون قيمة source إحدى القيم session أو imported أو list_entry أو retained_template. تحمل المطابقة من نوع القالب المحفوظ الحقول vendor_user_id وvendor_data وbiometric_template_id، أما حقول الجلسة والصورة وتفاصيل الهوية والحالة وخدمة API فتكون null. | [] |
face_quality | float (0-100) | نعم | درجة جودة الوجه في كشف الحيوية السلبي (مُحوَّلة إلى نسبة مئوية). | 87.50 |
face_luminance | float (0-100) | نعم | درجة إضاءة الوجه في كشف الحيوية السلبي (مُحوَّلة من 0-255 إلى نسبة مئوية). | 54.12 |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_liveness" |
warnings | array | لا | راجع كائن التحذير. | [] |
{
"status": "Approved",
"method": "PASSIVE",
"score": 92.41,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": 34.2,
"matches": [],
"face_quality": 87.50,
"face_luminance": 54.12,
"node_id": "first_liveness",
"warnings": []
}
null عندما لا تحتفظ الجلسة بأي تسجيل. والمثال أعلاه لجلسة لم تحتفظ بأي تسجيل.
مطابقة الوجه
تُعاد لكل مقارنة مطابقة وجه (عادةً بين وجه المستخدم في فحص الحيوية وصورة الوجه في المستند). تظهر كـface_matches[] في GET /v3/session/{sessionId}/decision/. المصدر: face/serializers/face.py:367-389 (FaceMatchV3Serializer، ويمتد من FaceMatchV2Serializer في face/serializers/face.py:323-364).
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | string | لا | راجع تعداد الحالة. | "Approved" |
score | float (0-100) | نعم | درجة التشابه، مقرّبة إلى منزلتين عشريتين. عندما يعيد المزوّد فقط unmatched_faces[].Confidence، تُحوَّل القيمة إلى 100 - confidence. | 97.83 |
source_image_session_id | string (UUID) | نعم | الجلسة التي وفّرت صورة الوجه المخزّنة كصورة المصدر (المرجعية)، ويُضبط في التدفقات القائمة على الصورة، مثل المصادقة البيومترية أو صورة وجه تُقدَّم عند إنشاء الجلسة. تكون القيمة null عندما تكون الصورة المرجعية هي صورة المستند من الجلسة نفسها. | null |
source_image | string (URL) | نعم | عنوان URL موقّع مسبقاً لصورة المصدر (المرجعية)، وهي عادةً صورة الوجه في المستند، أو الصورة المخزّنة في تدفقات المصادقة البيومترية. | "https://<media-host>/.../source.jpg?..." |
target_image | string (URL) | نعم | عنوان URL موقّع مسبقاً لصورة الهدف (الوجه الحي) الملتقطة أثناء فحص الحيوية. | "https://<media-host>/.../target.jpg?..." |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_face_match" |
warnings | array | لا | راجع كائن التحذير. | [] |
face_coverage | object | نعم | يحدد ما إذا كانت eyes وmouth وface مغطاة في الصورة الملتقطة. لكل منطقة الحقول covered وcalibrated وvisibility_score؛ والقيمة calibrated: false تعني دليلًا على وجود ظل لا يتخذ أي تحذير إجراءً حياله. يُعاد فقط من GET /v3/session/{sessionId}/decision/، ولا يظهر أبداً في حمولات webhook. | { "eyes": { "covered": false, "calibrated": true, "visibility_score": 0.98 } } |
{
"status": "Approved",
"score": 97.83,
"source_image_session_id": null,
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "first_face_match",
"warnings": []
}
البحث بالوجه
تُرجَع من واجهة API البحث بالوجه المستقلة (POST /v3/face-search/). لا يظهر البحث بالوجه أبدًا كمصفوفة في /v3/session/{sessionId}/decision/. وعند حفظه باستخدام save_api_request=true، تظهر الجلسة هناك كعنصر FACE_SEARCH ضمن features[]، مع عنصر liveness_checks[] يحمل matches المحفوظة. المصادر: apis/serializers/face_search.py:8-79 (FaceSearchResponseSerializer الذي يغلّف FaceSearchDetailsSerializer)، وتُبنى قواميس التطابق في face/utils/utils.py:869-884.
الاستجابة على المستوى الأعلى:
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
request_id | نص (UUID) | لا | معرّف الجلسة المحفوظ عند save_api_request=true (ويمكن استخدامه مع GET /v3/session/{sessionId}/decision/)، وإلا فهو UUID مؤقت للربط. | "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f" |
face_search | كائن | لا | بيانات تفاصيل البحث، أي payload البحث، انظر الحقول أدناه. | - |
vendor_data | نص | نعم | قيمة vendor_data المرسلة في الطلب ومُعادة هنا. | null |
metadata | كائن | نعم | قيمة metadata المرسلة في الطلب ومُعادة هنا. | null |
created_at | نص (ISO 8601) | لا | الطابع الزمني لطلب الخادم. | "2026-06-12T01:04:42.763237+00:00" |
face_search:
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | تكون القيمة Declined فقط عند تفعيل تحذير FACE_IN_BLOCKLIST أو POSSIBLE_FACE_IN_BLOCKLIST، وتكون Approved في غير ذلك. التطابقات المكررة وحدها لا تؤدي أبدًا إلى الرفض (apis/views/face_search.py:242-248). | "Approved" |
total_matches | عدد صحيح | لا | عدد التطابقات المُعادة في matches[] (من 0 إلى 5). | 1 |
matches | مصفوفة من كائنات تطابق البحث بالوجه | لا | حتى 5 تطابقات فوق حد التشابه الأدنى، مرتبة تنازليًا حسب التشابه (تأتي العناصر المدرجة في قائمة الحظر أولًا مع search_type=blocklisted_or_approved). | […] |
user_image | كائن | لا | نتيجة الكشف عن الصورة المرسلة: { entities: [{ bbox, confidence }], best_angle }، بعنصر واحد لكل وجه مكتشَف. | { "entities": [{ "bbox": [40, 40, 120, 120], "confidence": 0.73 }], "best_angle": 0 } |
warnings | مصفوفة من كائنات | لا | بنية تحذير مختصرة لهذه الواجهة المستقلة، دون node_id. يُعلن عقد المُسلسِل عن { risk, additional_data, log_type, short_description, long_description } (apis/serializers/face_search.py:49-54)، بينما تحمل الحمولة الفعلية أيضًا الحقل feature، وقيمته دائمًا "LIVENESS" (apis/views/face_search.py:332-341). | [] |
كائن تطابق البحث بالوجه
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
session_id | نص (UUID) | نعم | معرّف جلسة التحقق المطابقة. تكون القيمة null عندما يكون source هو imported أو list_entry أو retained_template. | "a3f2a6f1-…" |
session_number | عدد صحيح | نعم | رقم الجلسة المطابقة بصيغة مناسبة للوحة التحكم، وتكون null للتطابقات غير المرتبطة بجلسة. | 1024 |
similarity_percentage | عدد عشري (0-100) | لا | درجة التشابه بين الوجه المرسل والوجه المطابق. | 96.42 |
source | نص (تعداد) | لا | مصدر تسجيل الوجه المطابق: session (جلسة تحقق أو استدعاء مستقل محفوظ)، وimported (رفع الوجه مباشرة إلى ملف المستخدم)، وlist_entry (وجه مرتبط بقائمة)، وretained_template (القالب البيومتري بلا صورة محتفَظ به بعد حذف الجلسة المصدر). | "session" |
vendor_data | نص | نعم | قيمة vendor_data الخاصة بالجلسة المطابقة، أو الخاصة بالمستخدم المرتبط في تطابقات imported وretained_template. | "user-12345" |
vendor_user_id | نص (UUID) | نعم | المستخدم المرتبط. تكون القيمة null في تطابقات list_entry وللجلسات التي لا يرتبط بها مستخدم. | "2f7c1a9e-…" |
biometric_template_id | نص (UUID) | نعم | القالب المحفوظ الذي تطابق. يُعيَّن فقط في تطابقات retained_template، ويُستخدم مع GET/DELETE /v3/biometric-templates/{id}/. | null |
verification_date | نص (ISO 8601) | نعم | وقت التقاط الوجه المطابق، أو وقت الاحتفاظ بقالب retained_template، وتكون null في تطابقات list_entry. | "2024-11-04T09:14:02Z" |
user_details | كائن | نعم | { full_name, document_type, document_number } من التحقق من المستند في الجلسة المطابقة. في تطابقات imported يُعيَّن full_name فقط. تكون القيمة null عندما لا توجد بيانات هوية، ودائمًا null في تطابقات retained_template. | { "full_name": "María García López", "document_type": "Passport", "document_number": "AB1234567" } |
match_image_url | نص (URL) | نعم | الوجه المرجعي للمستخدم المطابق: رابط موقّع مسبقًا عند save_api_request=true، ومسار التخزين الخام في غير ذلك. تكون القيمة دائمًا null في تطابقات retained_template لأنها لا تحتوي على صورة. | "https://<media-host>/.../matched.jpg?..." |
status | نص | نعم | حالة التحقق للجلسة المطابقة (انظر تعداد الحالات)، وتكون null للتطابقات غير المرتبطة بجلسة. | "Approved" |
is_blocklisted | قيمة منطقية | لا | يحدد ما إذا كان الوجه المطابق موجودًا في قائمة الحظر الخاصة بالوجوه لديك. تكون القيمة دائمًا false في تطابقات retained_template، ويُبلَّغ عن الوجه المدرج في قائمة الحظر منفصلًا كتطابق من نوع list_entry. | false |
is_allowlisted | قيمة منطقية | لا | يحدد ما إذا كان الوجه المطابق موجودًا في إحدى قوائم السماح لديك. | false |
api_service | نص (تعداد) | نعم | نوع الواجهة المستقلة للجلسة المطابقة بحروف كبيرة (مثل PASSIVE_LIVENESS وFACE_MATCH)، وتكون null لجلسات سير العمل وللتطابقات غير المرتبطة بجلسة. | null |
{
"request_id": "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f",
"face_search": {
"status": "Approved",
"total_matches": 1,
"matches": [
{
"session_id": "a3f2a6f1-1c1c-4eec-8b69-1c1c2f3a2c7f",
"session_number": 1024,
"similarity_percentage": 96.42,
"source": "session",
"vendor_data": "user-12345",
"verification_date": "2024-11-04T09:14:02Z",
"user_details": {
"full_name": "María García López",
"document_type": "Passport",
"document_number": "AB1234567"
},
"match_image_url": "https://<media-host>/.../matched.jpg?signature=...",
"status": "Approved",
"is_blocklisted": false,
"is_allowlisted": false,
"api_service": null
}
],
"user_image": {
"entities": [
{
"bbox": [40, 40, 120, 120],
"confidence": 0.732973
}
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-06-12T01:04:42.763237+00:00"
}
فحص AML
يُعاد لكل كيان يخضع للفحص. يظهر كمصفوفةaml_screenings[] في GET /v3/session/{sessionId}/decision/ لكل من جلسات KYC وKYB. المصدر: aml/serializers/aml.py:63-85 (AMLV3Serializer، الذي يمتد من AMLV2Serializer في aml/serializers/aml.py:28-60).
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | انظر تعداد الحالات. | "Approved" |
total_hits | عدد صحيح | لا | عدد نتائج الفحص (يكون موجودًا دائمًا، والقيمة الافتراضية 0). | 2 |
entity_type | نص (تعداد) | نعم | person أو company (EntityTypeChoices، common/config/choices.py:675-677). | "person" |
hits | مصفوفة من كائنات | لا | عنصر واحد لكل نتيجة. أهم الحقول: id وcaption وmatch (قيمة منطقية) وtarget (قيمة منطقية | null، ويحدد ما إذا كان الكيان الهدف المباشر في القائمة) وmatch_score (درجة التطابق، وهي عدد عشري من 0 إلى 100 يمثل درجة الثقة في الهوية) وrisk_score (درجة المخاطر، وهي عدد عشري من 0 إلى 100 يمثل مخاطر الكيان) وscore (عدد عشري من 0 إلى 1، وهو مهجور) وdatasets[] (مثل PEP وPEP Level 1 إلى 4 وSanctions وAdverse Media وWarnings and Regulatory Enforcement وFitness and Probity) وproperties (الأسماء والأسماء المستعارة وتواريخ الميلاد وغيرها) وfeatures وurl وfirst_seen وlast_seen وrca_name وrisk_view وscore_breakdown وpep_matches وsanction_matches وwarning_matches وadverse_media_matches وadverse_media_details وlinked_entities وadditional_information، وreview_status (Unreviewed وConfirmed Match وFalse Positive وInconclusive، ويمكن تعديله عبر نقطة نهاية update-AML-hit-status، وتُحدَّد قيمه بواسطة AMLHitStatusChoices). | […] |
score | float (0-100) | نعم | الدرجة الإجمالية للفحص: أعلى risk_score بين النتائج المطابقة غير المُعلَّمة بـ False Positive (aml/services/aml.py:832-842)، وتكون 0 عندما تكون كل النتائج إيجابية كاذبة. تكون null إلى أن تُحسب. | 42.7 |
screened_data | object | نعم | لقطة من البيانات المرسلة إلى الفحص: full_name، nationality، date_of_birth، document_number. | { "full_name": "María García López", "date_of_birth": "1990-05-12" } |
is_ongoing_monitoring_enabled | boolean | لا | ما إذا كان الكيان مشتركاً في عمليات إعادة الفحص ضمن المراقبة المستمرة. | false |
next_ongoing_monitoring_bill_date | string (YYYY-MM-DD) | نعم | يُحسب كـ last_aml_bill_date + 365 days عندما تكون المراقبة المستمرة مفعّلة. وهو تاريخ الفوترة، وليس تاريخ فحص. | null |
last_ongoing_screening_at | string (ISO 8601) | نعم | وقت إتمام آخر إعادة فحص لهذا السجل من خلال المراقبة المستمرة، سواء تغيّرت النتيجة أم لا. تكون null إذا لم يُعَد فحص السجل قط، ولا يُعبأ الحقل بأثر رجعي أبداً. | "2026-09-12T04:03:11Z" |
last_ongoing_screening_datasets_updated_at | string (ISO 8601) | نعم | أحدث تحديث لمجموعة بيانات AML أبلغ عنه المزوّد لهذا الفحص. تكون null عند عدم الإبلاغ عن تاريخ لمجموعة البيانات، ولا تُقدَّر هذه القيمة أبداً. | null |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_aml" |
warnings | array | لا | راجع كائن التحذير. | [] |
{
"status": "In Review",
"total_hits": 1,
"entity_type": "person",
"hits": [
{
"id": "Q7XW3-aml-hit-1",
"caption": "Maria Garcia Lopez",
"match": true,
"target": true,
"match_score": 86.4,
"risk_score": 42.7,
"datasets": ["PEP Level 2"],
"properties": {
"name": ["María García López", "M. García"],
"alias": ["Maria Garcia"],
"birthDate": ["1990-05-12"]
},
"url": "https://example.org/registry/entities/Q7XW3",
"first_seen": "2023-11-02T00:00:00Z",
"last_seen": "2026-05-01T00:00:00Z",
"review_status": "Unreviewed"
}
],
"score": 42.7,
"screened_data": {
"full_name": "María García López",
"date_of_birth": "1990-05-12",
"nationality": "ES",
"document_number": "AB1234567"
},
"is_ongoing_monitoring_enabled": false,
"next_ongoing_monitoring_bill_date": null,
"last_ongoing_screening_at": null,
"last_ongoing_screening_datasets_updated_at": null,
"node_id": "first_aml",
"warnings": []
}
تحليل عنوان
يُرجَع لكل موقع شبكة يتم التقاطه. يظهر كـip_analyses[] في GET /v3/session/{sessionId}/decision/ لجلسات KYC وKYB على حد سواء. المصدر: kyc/serializers/location.py:196-243 (IPAnalysisSerializerV3).
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | string | لا | راجع تعداد الحالة. | "Approved" |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_ip_analysis" |
device_brand | string | نعم | العلامة التجارية للجهاز، مستخلصة من وكيل المستخدم. | "Apple" |
device_model | string | نعم | طراز الجهاز. | "iPhone" |
browser_family | string | نعم | عائلة المتصفح. | "Mobile Safari" |
os_family | string | نعم | عائلة نظام التشغيل. | "iOS" |
platform | string | نعم | المنصة العامة (mobile، desktop، tablet). | "mobile" |
device_fingerprint | string | نعم | تجزئة ثابتة لبصمة الجهاز. | "f2a3…" |
ip_country | string | نعم | اسم الدولة المستنبط من عنوان. | "Spain" |
ip_country_code | string (ISO 3166-1 alpha-2) | نعم | رمز الدولة المستنبط من عنوان. | "ES" |
ip_state | string | نعم | المنطقة أو الولاية المستنبطة من عنوان. | "Comunidad de Madrid" |
ip_city | string | نعم | المدينة المستنبطة من عنوان. | "Madrid" |
latitude | float | نعم | خط العرض المستنبط من عنوان. | 40.4168 |
longitude | float | نعم | خط الطول المستنبط من عنوان. | -3.7038 |
ip_address | string | نعم | العنوان الذي تم التقاطه. | "203.0.113.42" |
isp | string | نعم | اسم مزوّد خدمة الإنترنت. | "Telefonica de Espana" |
organization | string | نعم | اسم المؤسسة (غالباً ما يساوي اسم مزوّد خدمة الإنترنت). | "Telefonica de Espana" |
is_vpn_or_tor | boolean | نعم | true عندما ينتمي عنوان IP إلى VPN أو وكيل أو عقدة خروج Tor. | false |
is_data_center | boolean | نعم | true عندما ينتمي عنوان IP إلى ASN معروف للاستضافة أو مركز البيانات. | false |
time_zone | string | نعم | اسم المنطقة الزمنية وفق IANA. | "Europe/Madrid" |
time_zone_offset | string | نعم | الفرق عن التوقيت العالمي المنسّق (UTC). | "+02:00" |
ip | object | لا | { location, distance_from_id_document, distance_from_poa_document }. location = { latitude, longitude }. المسافات بالكيلومتر، وتكون null عندما يكون أحد الطرفين مفقوداً. | { "location": { "latitude": 40.4168, "longitude": -3.7038 }, "distance_from_id_document": 3.4, "distance_from_poa_document": 1.1 } |
id_document | object | لا | { location, distance_from_ip, distance_from_poa_document }. موقع مستند الهوية مستنبط من issuing_state والعنوان المحلَّل. | { "location": { "latitude": 40.4165, "longitude": -3.7026 }, "distance_from_ip": 3.4, "distance_from_poa_document": 4.0 } |
poa_document | object | لا | { location, distance_from_ip, distance_from_id_document }. موقع عنوان مستند إثبات العنوان بعد ترميزه جغرافياً. | { "location": { "latitude": 40.4170, "longitude": -3.7040 }, "distance_from_ip": 1.1, "distance_from_id_document": 4.0 } |
matches | array of objects | لا | مطابقات IP والجهاز عبر الجلسات. كل عنصر: { session_id, session_number, vendor_data, verification_date, match_type, match_source, matched_value, status, is_blocklisted, api_service, source, device_info, location_info, confidence, match_mode }. match_type هو ip_address أو device_fingerprint، وmatch_source هو ip_address أو persistent_id أو legacy_fp أو recovered_high (المطابقات المستعادة تحمل أيضاً recovery_similarity وtls_ja4_corroborated وrecovery_gate_reason). الحد الأقصى 5 مطابقات IP و5 مطابقات جهاز. | [] |
warnings | array | لا | راجع كائن التحذير. | [] |
browser_version، os_version | string | نعم | إصدارا المتصفح ونظام التشغيل، مستخلصان من وكيل المستخدم. | "17.4" |
user_agent، accept_language | string | نعم | سلسلة وكيل المستخدم ورأس Accept-Language الذي أرسله المتصفح. | "en-US,en;q=0.9" |
session_identifier، session_age_ms | string، integer | نعم | جلسة التصفح التي نُفذت فيها الخطوة، وعمرها بالمللي ثانية. | 48210 |
coords_accuracy | float | نعم | نصف قطر الدقة، بالمتر، للإحداثيات التي أبلغ عنها الجهاز. | 35.0 |
raw_device_data | object | نعم | إشارات الجهاز الخام التي جُمعت للخطوة. | {} |
{
"status": "Approved",
"node_id": "first_ip_analysis",
"device_brand": "Apple",
"device_model": "iPhone",
"browser_family": "Mobile Safari",
"os_family": "iOS",
"platform": "mobile",
"device_fingerprint": "f2a3c1de8b994a3f9e4cdf3a02b1a7c9",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_state": "Comunidad de Madrid",
"ip_city": "Madrid",
"latitude": 40.4168,
"longitude": -3.7038,
"ip_address": "203.0.113.42",
"isp": "Telefonica de Espana",
"organization": "Telefonica de Espana",
"is_vpn_or_tor": false,
"is_data_center": false,
"time_zone": "Europe/Madrid",
"time_zone_offset": "+02:00",
"ip": {
"location": { "latitude": 40.4168, "longitude": -3.7038 },
"distance_from_id_document": 3.4,
"distance_from_poa_document": 1.1
},
"id_document": {
"location": { "latitude": 40.4165, "longitude": -3.7026 },
"distance_from_ip": 3.4,
"distance_from_poa_document": 4.0
},
"poa_document": {
"location": { "latitude": 40.4170, "longitude": -3.7040 },
"distance_from_ip": 1.1,
"distance_from_id_document": 4.0
},
"matches": [],
"warnings": []
}
التحقق من الموقع
يُرجَع لكل خطوة تحقق من الموقع. يظهر كـgeolocation_checks[] في GET /v3/session/{sessionId}/decision/: عنصر واحد لكل خطوة، وهو محاولتها المقبولة. يسرد geolocation_attempts[] كل محاولة لكل خطوة، من الأقدم إلى الأحدث. وتكون كلتاهما null لسير العمل الذي لا يتضمن الخطوة. المصدر: GeolocationDecisionSerializer.
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
node_id | string | نعم | عقدة سير العمل التي أنتجت النتيجة. | "geolocation_1" |
status | string | لا | راجع تعداد الحالات. | "Declined" |
outcome | string | نعم | ما الذي حدث في المحاولة: verified، low_accuracy، accuracy_undetermined، stale، approximate، denied، restricted، unavailable، timeout، mock_detected، outside_geofence، in_blocked_area، anonymizer_detected، skipped، replay_rejected أو unsupported_client. | "outside_geofence" |
permission | string | نعم | ما الذي منحه النظام: granted_precise، granted_approximate، denied، restricted، unavailable، timeout، dismissed أو not_requested. | "granted_precise" |
latitude, longitude | float | نعم | الموقع وفق WGS84. تكون القيمة null عند عدم توفر الموقع. | 48.8566 |
accuracy_m | float | نعم | نصف قطر عدم اليقين بالأمتار. | 35.0 |
accuracy_confidence | string | نعم | p95 أو p68 أو unspecified. | "p95" |
measured_at, age_seconds | datetime, integer | نعم | وقت التقاط الجهاز للموقع، وعدد الثواني حتى استلمته Didit. | 2 |
source, platform, sdk_version | string | نعم | مصدر الموقع، والعميل الذي أنتجه، وإصدار SDK الخاص به. | "browser" |
is_mock, produced_by_accessory | boolean | نعم | أدلة الانتحال التي تُبلغ عنها المنصة. تعني القيمة null أن المنصة لا تُبلغ عنها. | null |
integrity | string | لا | attested، not_attested، failed، unsupported (ويب) أو not_determined. | "unsupported" |
country_code, region_code, city | string | نعم | المكان الذي يشير إليه الموقع. | "FR" |
geofence, inside_geofence, geofence_basis, inside_areas, blocked_areas | object, boolean, string, arrays | نعم | نتيجة الدولة والمنطقة. | { "enabled": true, "result": "outside" } |
position_source, anonymizers | string, object | نعم | مصدر الموقع الذي تستخدمه الخطوة، وإشارات VPN والوكيل (proxy) وTor والانتحال والمحاكي. | "device_and_ip" |
ip_distance_km, ip_distance_uncertainty_km, ip_consistent, document_distance_km, travel_excused, consecutive_mismatches | number, boolean, integer | نعم | المقارنات مع موقع عنوان IP والعنوان المسجَّل في الملف. | 12.4 |
attempts | integer | لا | رقم المحاولة ضمن الخطوة. | 3 |
consent | object | نعم | القيم accepted_at وversion وlocale الخاصة بالإشعار الذي وافق عليه الشخص. | |
warnings | مصفوفة من كائنات التحذير | لا | تحذيرات LOCATION_* الخاصة بالخطوة. غير موجودة في geolocation_attempts[]، التي تضيف received_at وcreated_at. | [] |
إثبات العنوان
يُعاد لكل مستند عنوان مقدَّم. يظهر كـpoa_verifications[] في GET /v3/session/{sessionId}/decision/. المصدر: poa/serializers/poa.py:212-227 (POAV3Serializer، يمتد من POAV2Serializer في poa/serializers/poa.py:173-209).
| الحقل | النوع | قابل للقيم الفارغة | الوصف | مثال |
|---|---|---|---|---|
status | string | لا | راجع تعداد الحالات. | "Approved" |
issuing_state | string (ISO 3166-1 alpha-3) | نعم | رمز دولة جهة إصدار المستند. | "ESP" |
document_type | string | لا | النوع العام من PoaDocumentTypeChoices (common/config/choices.py:868-873): UTILITY_BILL، BANK_STATEMENT، GOVERNMENT_ISSUED_DOCUMENT، OTHER_POA_DOCUMENT. يُستخدم UNKNOWN كقيمة احتياطية، ولا يكون null أبدًا. | "UTILITY_BILL" |
document_subtype | string | لا | رمز النوع الفرعي من PoaDocumentSubtypeChoices (مثل ELECTRICITY_BILL وWATER_BILL وACCOUNT_STATEMENT). يُستخدم UNKNOWN كقيمة احتياطية، ولا يكون null أبدًا. | "ELECTRICITY_BILL" |
issuer | string | نعم | اسم الجهة المصدِرة. | "Iberdrola" |
issue_date | string (YYYY-MM-DD) | نعم | تاريخ إصدار المستند. | "2026-04-15" |
expiration_date | string (YYYY-MM-DD) | نعم | تاريخ انتهاء الصلاحية المطبوع على المستند، عند وجوده. | null |
poa_address | string | نعم | العنوان الخام المستخرج عبر OCR. | "Calle Mayor 1, 28001 Madrid" |
poa_formatted_address | string | نعم | العنوان بعد الترميز الجغرافي والتنسيق. | "Calle Mayor 1, 28001 Madrid, Spain" |
poa_parsed_address | object | نعم | عنوان منظَّم (street_1 وstreet_2 وcity وregion وpostal_code وcountry (alpha-2) وaddress_type وdocument_location و…). | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001" } |
document_file | string (URL) | نعم | رابط موقّع مسبقًا إلى المستند المرفوع. | "https://<media-host>/.../poa.pdf?..." |
document_language | string | نعم | لغة المستند المكتشفة (ISO 639-1). | "es" |
document_metadata | object | نعم | بيانات وصفية مُصفّاة: file_size وcontent_type وcreation_date وmodified_date وcreator وproducer وsoftware وencryption وis_signed وis_tampered وsignature_info وexif_original_date وexif_digitized_date وprocessed_by_known_editor وhas_different_creation_mod_date وoverlay_manipulation. | { "file_size": 184221, "content_type": "application/pdf", "is_tampered": false } |
extra_fields | object | لا | حقول الحساب البنكي (bank_account_number وbank_iban وbank_sort_code وbank_routing_number وbank_swift_bic وbank_branch_name وbank_branch_address)، وdocument_phone_number، وadditional_names، إضافةً إلى أي مفاتيح مخصصة محفوظة في السجل. | { "bank_iban": null, "additional_names": [] } |
name_on_document | string | نعم | الاسم كما يظهر في إثبات العنوان. | "María García López" |
expected_details_address | string | نعم | العنوان الذي أدخله العميل أثناء التسجيل، نصًا حرفيًا. | "Calle Mayor 1, Madrid" |
expected_details_formatted_address | string | نعم | العنوان المتوقع بعد الترميز الجغرافي. | "Calle Mayor 1, 28001 Madrid, Spain" |
expected_details_parsed_address | object | نعم | عنوان متوقع منظَّم. | { "city": "Madrid", "postal_code": "28001" } |
name_match_score_expected_details | float (0-100) | نعم | مطابقة تقريبية بين name_on_document والاسم المُدخَل عند إنشاء الجلسة. | 94.0 |
name_match_score_id_verification | float (0-100) | نعم | مطابقة تقريبية بين name_on_document وقيمة full_name في الهوية المُتحقَّق منها. | 100.0 |
extra_files | مصفوفة من النصوص (URL) | لا | عناوين URL موقّعة مسبقاً للملفات الإضافية المرفوعة. | [] |
detected_codes | مصفوفة من الكائنات | لا | رموز QR والباركود المكتشفة في كل صفحة معالجة من المستند: type، وpage_number (تبدأ من 1)، وposition (مضلّع)، وx/y/width/height (المربع المحيط)، وpage_width/page_height، وraw_payload (base64)، وparsed_payload (القيمة بعد فك الترميز، وتكون null عندما يُعثر على الرمز ولا يمكن فك ترميزه). تكون المصفوفة فارغة عندما لا يعثر الاكتشاف على أي رمز. | [{ "type": "QR_CODE", "page_number": 1, "parsed_payload": "https://issuer.example/inv/9981" }] |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_poa" |
warnings | مصفوفة | لا | راجع كائن التحذير. | [] |
{
"status": "Approved",
"issuing_state": "ESP",
"document_type": "UTILITY_BILL",
"document_subtype": "ELECTRICITY_BILL",
"issuer": "Iberdrola",
"issue_date": "2026-04-15",
"expiration_date": null,
"poa_address": "Calle Mayor 1, 28001 Madrid",
"poa_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"poa_parsed_address": { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" },
"document_file": "https://<media-host>/.../poa.pdf?signature=...",
"document_language": "es",
"document_metadata": {
"file_size": 184221,
"content_type": "application/pdf",
"creation_date": "2026-04-15T08:11:32Z",
"modified_date": "2026-04-15T08:11:32Z",
"creator": "Iberdrola Billing",
"producer": "Adobe PDF Library 15.0",
"software": null,
"encryption": null,
"is_signed": true,
"is_tampered": false,
"signature_info": { "signer_name": "Iberdrola Clientes", "date": "2026-04-15T08:11:32Z" },
"exif_original_date": null,
"exif_digitized_date": null,
"processed_by_known_editor": false,
"has_different_creation_mod_date": false,
"overlay_manipulation": null
},
"extra_fields": {
"bank_account_number": null,
"bank_iban": null,
"bank_sort_code": null,
"bank_routing_number": null,
"bank_swift_bic": null,
"bank_branch_name": null,
"bank_branch_address": null,
"document_phone_number": null,
"additional_names": []
},
"name_on_document": "María García López",
"expected_details_address": "Calle Mayor 1, Madrid",
"expected_details_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"expected_details_parsed_address": { "city": "Madrid", "postal_code": "28001", "country": "ES" },
"name_match_score_expected_details": 94.0,
"name_match_score_id_verification": 100.0,
"extra_files": [],
"detected_codes": [
{
"type": "QR_CODE",
"page_number": 1,
"position": [[820, 1120], [1002, 1120], [1002, 1302], [820, 1302]],
"x": 820,
"y": 1120,
"width": 182,
"height": 182,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "aHR0cHM6Ly9pYmVyZHJvbGEuZXMvZmFjdHVyYS85OTgx",
"parsed_payload": "https://iberdrola.es/factura/9981"
},
{
"type": "CODE_128",
"page_number": 1,
"position": [[112, 1480], [560, 1480], [560, 1540], [112, 1540]],
"x": 112,
"y": 1480,
"width": 448,
"height": 60,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "MDA5OTgxMDAwNDI=",
"parsed_payload": "0099810042"
}
],
"node_id": "first_poa",
"warnings": []
}
التحقق من رقم الهاتف
يُعاد لكل محاولة تحقق من رقم الهاتف. يظهر بوصفهphone_verifications[] في GET /v3/session/{sessionId}/decision/ لجلسات KYC وKYB على حد سواء. المصدر: phone/serializers/phone.py:251-266 (PhoneV3Serializer، ويمتد من PhoneV2Serializer في phone/serializers/phone.py:103-248).
| الحقل | النوع | قابل للقيمة null | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | راجع تعداد الحالة. | "Approved" |
phone_number_prefix | نص | لا | رمز الدولة بصيغة E.164 (مع +). | "+34" |
phone_number | نص | لا | رقم المشترك دون الرمز. | "612345678" |
full_number | نص | لا | رقم E.164 الكامل (phone_number_prefix + phone_number). | "+34612345678" |
country_code | نص (ISO 3166-1 alpha-2) | نعم | دولة الرقم. | "ES" |
country_name | نص | نعم | اسم الدولة المترجم محلياً. | "Spain" |
carrier | كائن | لا | { name, type } حيث يكون type قيمة من LineTypeChoices (common/config/choices.py:648-667): mobile وfixed_line وvoip وisp وvpn وtoll_free وpremium_rate وsatellite وpager وpayphone وvoice_mail وunknown، وفئات خطوط أخرى. | { "name": "Movistar", "type": "mobile" } |
is_disposable | قيمة منطقية | لا | تكون true عندما يصنّف المشغّل الرقم بوصفه مؤقتاً أو قابلاً للتخلص منه. | false |
is_virtual | قيمة منطقية | لا | تكون true عندما يكون carrier.type واحداً من voip أو isp أو vpn. | false |
verification_method | نص | لا | القناة المستخدمة لإرسال رمز OTP (whatsapp أو sms أو …). تُقرأ من actual_channel في آخر محاولة إرسال (وإذا لم تكن موجودة، تُستخدم channel المطلوبة، ثم sms). | "whatsapp" |
verification_attempts | عدد صحيح | لا | إجمالي محاولات إرسال رمز OTP (الإرسال الأول بالإضافة إلى إعادة الإرسال). | 1 |
verified_at | نص (ISO 8601) | نعم | الطابع الزمني لإدخال رمز OTP بنجاح. | "2026-05-17T10:14:02Z" |
lifecycle | مصفوفة من الكائنات | لا | الأحداث مرتبة زمنياً: محاولات الإرسال، وعمليات الاستدعاء الخاصة بالتسليم، وفحوصات الرمز، وحدث الحالة النهائي. كل حدث هو { type, timestamp, details, fee }. تأتي أنواع الأحداث من PhoneEventChoices. | […] |
matches | مصفوفة من الكائنات | لا | تطابقات أرقام الهاتف عبر الجلسات. كل عنصر: { session_id, session_number, vendor_data, verification_date, phone_number, status, is_blocklisted, api_service, source }. تكون قيمة source إما session أو list_entry. | [] |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_phone" |
warnings | مصفوفة | لا | راجع كائن التحذير. | [] |
phone_intelligence | كائن | نعم | إشارات التحليل الذكي للرقم. تظهر فقط عند تشغيل الإضافة الخاصة بالتحليل الذكي للرقم. | |
phone_social | كائن | نعم | البصمة الاجتماعية للرقم. تظهر فقط عند تشغيل إضافة البصمة الاجتماعية. |
{
"status": "Approved",
"phone_number_prefix": "+34",
"phone_number": "612345678",
"full_number": "+34612345678",
"country_code": "ES",
"country_name": "Spain",
"carrier": { "name": "Movistar", "type": "mobile" },
"is_disposable": false,
"is_virtual": false,
"verification_method": "whatsapp",
"verification_attempts": 1,
"verified_at": "2026-05-17T10:14:02Z",
"lifecycle": [
{
"type": "PHONE_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:13:51Z",
"details": { "status": "Success", "reason": null, "channel": "whatsapp", "actual_channel": "whatsapp" },
"fee": 0.02
},
{
"type": "PHONE_DELIVERY_DELIVERED",
"timestamp": "2026-05-17T10:13:52Z",
"details": { "channel": "whatsapp", "status": "delivered" },
"fee": 0
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:14:02Z",
"details": { "code_tried": "482917", "status": "Approved" },
"fee": 0
},
{
"type": "PHONE_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:14:02Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_phone",
"warnings": []
}
التحقق من البريد الإلكتروني
يُعاد لكل محاولة تحقق من البريد الإلكتروني. يظهر بوصفهemail_verifications[] في GET /v3/session/{sessionId}/decision/ لجلسات KYC وKYB على حد سواء. المصدر: email_verification/serializers/email.py:149-164 (EmailV3Serializer، ويمتد من EmailV2Serializer في email_verification/serializers/email.py:38-146).
| الحقل | النوع | قابل للقيمة null | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | راجع تعداد الحالة. | "Approved" |
email | نص | لا | عنوان البريد الإلكتروني المُقدَّم. | "maria.garcia@example.com" |
is_breached | قيمة منطقية | لا | تكون true عندما يظهر البريد الإلكتروني في تسريب بيانات معروف. | false |
breaches | مصفوفة من الكائنات | لا | تفاصيل كل تسريب عندما تكون is_breached قيمتها true: { name, domain, logo_path, breach_date, description, is_verified, data_classes, breach_emails_count }. | [] |
is_disposable | قيمة منطقية | لا | تكون true عندما ينتمي البريد الإلكتروني إلى مزوّد بريد مؤقت. | false |
is_undeliverable | قيمة منطقية | لا | تكون true عندما يُظهر فحص التسليم عبر SMTP أن صندوق الوارد لا يقبل الرسائل. | false |
verification_attempts | عدد صحيح | لا | إجمالي محاولات فحص رمز OTP. | 1 |
verified_at | نص (ISO 8601) | نعم | الطابع الزمني لإدخال رمز OTP بنجاح. | "2026-05-17T10:15:22Z" |
lifecycle | مصفوفة من الكائنات | لا | الأحداث مرتبة زمنياً: محاولات الإرسال، وفحوصات الرمز، وحدث الحالة النهائي. كل حدث هو { type, timestamp, details, fee }. تأتي أنواع الأحداث من EmailEventChoices. | […] |
matches | مصفوفة من الكائنات | لا | تطابقات البريد الإلكتروني عبر الجلسات. كل عنصر: { session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source }. تكون قيمة source إما session أو list_entry. | [] |
node_id | string | null | نعم | معرّف عقدة سير العمل (V3). | "first_email" |
warnings | مصفوفة | لا | راجع كائن التحذير. | [] |
email_intelligence | كائن | نعم | إشارات التحليل الذكي للبريد الإلكتروني. تظهر فقط عند تشغيل الإضافة الخاصة بالتحليل الذكي للعنوان. | |
email_social | كائن | نعم | البصمة الاجتماعية للعنوان. تظهر فقط عند تشغيل إضافة البصمة الاجتماعية. |
{
"status": "Approved",
"email": "maria.garcia@example.com",
"is_breached": false,
"breaches": [],
"is_disposable": false,
"is_undeliverable": false,
"verification_attempts": 1,
"verified_at": "2026-05-17T10:15:22Z",
"lifecycle": [
{
"type": "EMAIL_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:15:11Z",
"details": { "status": "Success", "reason": null },
"fee": 0.02
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:15:22Z",
"details": { "code_tried": "739204", "status": "Approved" },
"fee": 0
},
{
"type": "EMAIL_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:15:22Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_email",
"warnings": []
}
التحقق من قواعد البيانات
يُعاد لكل عملية بحث في قاعدة بيانات تُجرى على البيانات التي أرسلها المستخدم. يظهر بوصفهdatabase_validations[] في GET /v3/session/{sessionId}/decision/. المصدر: database_validation/serializers/database_validation.py:21-142 (DatabaseValidationV3Serializer، ويمتد من DatabaseValidationV2Serializer).
| الحقل | النوع | يقبل null | الوصف | المثال |
|---|---|---|---|---|
issuing_state | سلسلة نصية (ISO 3166-1 alpha-3) | نعم | الدولة التي استُعلم سجلّها. | "ESP" |
validation_type | سلسلة نصية (تعداد) | لا | كيفية تأكيد النتيجة: one_by_one (نتيجة خدمة واحدة)، أو two_by_two (خدمتان مختلفتان أو أكثر طابقتا رقم التعريف مطابقة كاملة، كلٌّ بشكل مستقل)، أو not_enabled (تم تخطي المدقِّق أو لم يستجب أي مزوّد، وعندما تكون نتيجة no_match نهائية فإنها تُرجع one_by_one). لا تكون null أبداً. المصدر: DatabaseValidationChoices (common/config/choices.py:1097-1100). | "one_by_one" |
screened_data | كائن | لا | البيانات المُرسلة إلى السجل. حقول الملفات (selfie، cnh_qr_code_image، document_image) تُوقَّع مسبقاً وقت القراءة. | { "document_number": "99999999R", "date_of_birth": "1990-05-12" } |
validations | مصفوفة من الكائنات | لا | عنصر واحد لكل خدمة في الكتالوج أنتجت تطابقاً. يمكن أن يتضمن كل عنصر service_id وservice_name وvalidation (كائن حكم المزوّد) وoutcome_code وoutcome_detail وsource_data (الملف الشخصي المنقّى للمواطن: full_name وgender وdate_of_birth وphoto (عنوان URL موقّع مسبقاً) وsignature (عنوان URL موقّع مسبقاً) و…). | […] |
errors | مصفوفة من الكائنات | نعم | أخطاء لكل خدمة عند فشل استعلام. يُحذف المفتاح بالكامل عندما يكون فارغاً. كل عنصر هو كائن الخطأ الصادر عن الخدمة الأصلية، مضافاً إليه service_id الخاص بالخدمة التي أنتجته. | [] |
match_type | سلسلة نصية (تعداد) | نعم | حكم التطابق الإجمالي عبر الخدمات المستعلَم عنها: full_match أو partial_match أو no_match (DatabaseValidationMatchTypeChoices، common/config/choices.py:1103-1106). تكون null حتى يتم التقييم. | "full_match" |
status | سلسلة نصية | لا | انظر تعداد الحالة. | "Approved" |
node_id | سلسلة نصية | null | نعم | معرّف عقدة سير العمل (V3). | "first_db_validation" |
warnings | مصفوفة | لا | انظر كائن التحذير. | [] |
{
"issuing_state": "ESP",
"validation_type": "one_by_one",
"screened_data": {
"document_number": "99999999R",
"date_of_birth": "1990-05-12",
"first_name": "María",
"last_name": "García López"
},
"validations": [
{
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"validation": { "is_valid": true, "match_score": 100 },
"outcome_code": "MATCH",
"outcome_detail": "All identifiers match the registry record.",
"source_data": {
"full_name": "María García López",
"gender": "F",
"date_of_birth": "1990-05-12",
"photo": "https://<media-host>/.../registry_photo.jpg?signature=...",
"signature": null
}
}
],
"match_type": "full_match",
"status": "Approved",
"node_id": "first_db_validation",
"warnings": []
}
استجابة الاستبيان
تُعاد لكل إرسال استبيان. تظهر كعنصرquestionnaire_responses[] في GET /v3/session/{sessionId}/decision/ لجلسات KYC وKYB على حد سواء. المصدر: questionnaires/serializers/questionnaire.py:591-597 (QuestionnaireResponseV3Serializer، ويمتد من QuestionnaireResponseSerializer في questionnaires/serializers/questionnaire.py:520-588).
| الحقل | النوع | يقبل null | الوصف | المثال |
|---|---|---|---|---|
questionnaire_id | سلسلة نصية (UUID) | لا | معرّف إصدار الاستبيان الذي تمت الإجابة عليه. | "6a0f1c2c-…" |
title | سلسلة نصية | لا | اسم الاستبيان كما هو مُعيّن في Console. | "Customer risk profile" |
description | سلسلة نصية | نعم | وصف الاستبيان. | "Short risk-profile questions." |
languages | مصفوفة من السلاسل النصية | لا | رموز اللغات التي يُنشر بها الاستبيان. | ["en", "es"] |
default_language | سلسلة نصية | لا | رمز اللغة الاحتياطية. | "en" |
is_active | قيمة منطقية | لا | هل إصدار الاستبيان هذا هو الإصدار النشط. | true |
is_simple_questionnaire | قيمة منطقية | لا | تكون true عندما لا يحتوي الاستبيان على تفرّع (قائمة مسطّحة). | true |
questionnaire_group_id | سلسلة نصية (UUID) | لا | معرّف مشترك بين إصدارات الاستبيان نفسه. | "a7c2c2c2-…" |
version | عدد صحيح | لا | رقم إصدار القالب النشط. | 3 |
status | سلسلة نصية | لا | إحدى القيم Approved أو In Review أو Not Finished (يُقابَل الرفض على مستوى الاستبيان بالقيمة In Review). | "Approved" |
published_at | سلسلة نصية (ISO 8601) | نعم | وقت نشر القالب. | "2026-01-12T11:00:00Z" |
sections | مصفوفة من الكائنات | لا | الأقسام مرتبةً بعد تطبيق اجتياز الرسم البياني وتصفية الظهور. كل قسم هو { title, description, items[] } (يأتي العنوان والوصف من SECTION_HEADER الافتتاحي، وهما مترجمان مسبقاً). كل عنصر هو عنصر نموذج (uuid وvalue (معرّف العقدة) وelement_type وis_required وtitle وdescription وplaceholder وchoices وmax_files وrequired_if وrepeatable_config، إضافة إلى حقل answer، وهو null عندما لا تتم الإجابة، ويُحذف في عناصر التخطيط HEADING وPARAGRAPH وSEPARATOR). تحتوي إجابات الملفات على { files: [<presigned URL>, …] }. | […] |
node_id | سلسلة نصية | null | نعم | معرّف عقدة سير العمل (V3). | "first_questionnaire" |
{
"questionnaire_id": "6a0f1c2c-3b7d-4d2c-9eb6-fdc6c7c92ef9",
"title": "Customer risk profile",
"description": "Short risk-profile questions.",
"languages": ["en", "es"],
"default_language": "en",
"is_active": true,
"is_simple_questionnaire": true,
"questionnaire_group_id": "a7c2c2c2-1111-4d2c-9eb6-fdc6c7c92ef9",
"version": 3,
"status": "Approved",
"published_at": "2026-01-12T11:00:00Z",
"sections": [
{
"title": "Source of funds",
"description": null,
"items": [
{
"uuid": "4f1d5e2c-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"value": "q_source_of_funds",
"element_type": "SINGLE_CHOICE",
"is_required": true,
"title": "What is your main source of funds?",
"description": null,
"placeholder": null,
"choices": [
{ "label": "Salary", "value": "salary" },
{ "label": "Business income", "value": "business" },
{ "label": "Investments", "value": "investments" }
],
"max_files": 1,
"required_if": null,
"repeatable_config": null,
"answer": { "value": "salary" }
}
]
}
],
"node_id": "first_questionnaire"
}
التوقيع الإلكتروني
تُعاد لكل موقّع في خطوة التوقيع الإلكتروني. تظهر كعنصرsignatures[] في GET /v3/session/{sessionId}/decision/ لجلسات KYC وKYB على حد سواء، وذلك فقط عندما يتضمن سير العمل هذه الخطوة. على خلاف كائنات التقارير الأخرى، فإن status فيه هو مرحلة التوقيع، ونتيجته في verdict، وعناصر warnings[] فيه هي { code, node_id } وليست كائنات التحذير.
| الحقل | النوع | يقبل null | الوصف | المثال |
|---|---|---|---|---|
id | سلسلة نصية (UUID) | لا | توقيع الموقّع. استخدمه بوصفه signature_id في مسارَي الأدلة والتحقق. | "0e6c2a8e-…" |
node_id | سلسلة نصية | لا | معرّف عقدة سير العمل. | "feature_signature" |
status | سلسلة نصية | لا | مرحلة التوقيع: intro أو review أو code أو signing أو signed أو declined. تعني signed وحدها أن المستندات قد وُقّعت. | "signed" |
verdict | سلسلة نصية | لا | Not Finished أو Approved أو In Review أو Declined. | "Approved" |
level | سلسلة نصية | لا | simple (افتراضي) أو aes أو qes (المؤهَّل، وهو إضافة اختيارية). | "aes" |
format | سلسلة نصية | لا | pdf للتوقيع البسيط، وpades للتوقيع المتقدم (AES) والتوقيع المؤهَّل (QES). | "pades" |
profile | سلسلة نصية | نعم | PAdES-B-LT بمجرد إتمام توقيع متقدم (AES) أو مؤهَّل (QES)، وإلا فهي null. | "PAdES-B-LT" |
signer | كائن | لا | { name, capacity, company, role, roles, identity_session_id }. تكون capacity القيمة self (KYC) أو company (KYB). | { "name": "Jane Doe", "capacity": "self", … } |
identity_used | كائن | لا | { session_id, kyc_id, verified, expected_name }: الهوية المتحقَّق منها التي يعتمد عليها التوقيع. تكون فارغة في التوقيع البسيط الذي لا توجد له هوية متحقَّق منها. | { "verified": true, … } |
certificate | كائن | نعم | { issuer, issued_to, serial, valid_from, valid_until }. تكون null إلى أن يتم التوقيع، ودائماً null في التوقيع البسيط. | { "serial": "5A3F9C21", … } |
confirmation | كائن | لا | { channel, destination, confirmed_at, attempts }. الحقل destination مُقنَّع، وattempts يحسب عدد الرموز المُدخَلة، بما فيها الرمز الصحيح. لا يحتوي التوقيع البسيط على رمز، لذلك تكون قيمتا channel وdestination هي null. | { "channel": "email", … } |
timestamp | كائن | نعم | { time, qualified, valid }. تكون قيمة qualified دائماً false في توقيع AES، حيث يُصدر Didit الطابع الزمني. أما في توقيع QES فيُصدره مقدم خدمات الثقة المؤهَّل. تكون null حتى يتم التوقيع، وتكون دائماً null في التوقيع البسيط. | { "qualified": false, … } |
documents | مصفوفة من الكائنات | لا | { id, uuid, title, language, source_revision, translation_id, file_name, pages, size_bytes, sha256_original, sha256_signed, status, opened_at, read_at, read_to_end, consented_at, consent, signed_file, mode, source_format, conversion, fields }. القيمة status هي signed أو declined أو not_signed أو not_reached. القيمة mode هي fields أو read_and_agree. القيمة source_format هي pdf أو docx، ويصف conversion ملف Word الأصلي، وتكون null لملف PDF. | […] |
documents[].language | نص | نعم | لغة النسخة المحددة عند بدء المحاولة، أو null إذا لم تُحدَّد. تُستخدم ترجمة مطابقة وكاملة، وإلا تُستخدم النسخة الأصلية. بعد التوقيع، تمثل هذه القيمة اللغة التي وُقِّعت فعلياً. | "en" |
documents[].source_revision | نص (UUID) | لا | المراجعة المصدرية المنسوخة إلى المحاولة، بما في ذلك الحالة التي تُحدَّد فيها ترجمة. وهي مختلفة عن id الخاص بمستند الموقِّع. | "22222222-2222-4222-8222-222222222222" |
documents[].translation_id | نص (UUID) | نعم | الترجمة المحددة، أو null للنسخة الأصلية. تبقى نسخة المستند واختيار اللغة ثابتين بعد بدء المحاولة. | null |
documents[].fields | مصفوفة من الكائنات | لا | { key, type, role, label, page, x, y, width, height, required, value, display_value, value_source, filled_at, image_url, value_unavailable_reason } لكل حقل في المستند. القيمة value تكون نصاً، أو قيمة منطقية لمربع الاختيار، أو true للتوقيع أو الأحرف الأولى المطبّقة. تكون فارغة للمستند الذي لا يحتوي على حقول. | […] |
adopted_signature | كائن | نعم | { method, font, adopted_at }: التوقيع والأحرف الأولى التي اعتمدها الموقِّع. القيمة method هي typed أو drawn، وتمثل font أسلوب الخط اليدوي للتوقيع المكتوب. تكون null حتى يتم الاعتماد. | { "method": "drawn", … } |
electronic_signature_consent_at | نص (ISO 8601) | نعم | وقت موافقة الموقِّع على توقيع المستندات إلكترونياً. تُضبط عند وجود حقول في أي مستند. | "2026-11-03T10:41:40Z" |
evidence_file | نص | نعم | مسار ملف PDF الخاص بالأدلة، بعد التوقيع. | "/v3/session/…/evidence/?signature_id=…" |
warnings | مصفوفة من الكائنات | لا | { code, node_id }، حيث تكون قيمة code واحدة من: SIGNATURE_DECLINED وSIGNATURE_OTP_FAILED وSIGNATURE_NAME_MISMATCH وSIGNATURE_IDENTITY_NOT_VERIFIED وSIGNATURE_DOCUMENT_CHANGED. | [] |
validation | كائن | نعم | { valid, checked_at, documents[] }: آخر فحص تشفيري للمستندات الموقَّعة. تكون null حتى يتم التوقيع. تكون { valid: null, reason: "signature_provider_outcome_unknown", checked_at } عندما يتعذّر تأكيد نتيجة التوقيع. | { "valid": true, … } |
declined_at | نص (ISO 8601) | نعم | وقت رفض الموقِّع. | null |
declined_action | نص | لا | القيمة signature_declined_action الخاصة بالخطوة. | "REVIEW" |
signed_at | نص (ISO 8601) | نعم | وقت توقيع المستندات. | "2026-11-03T10:42:24Z" |
expires_at | نص (ISO 8601) | لا | وقت توقف رابط التوقيع عن العمل. | "2026-11-10T10:30:00Z" |
email_sent_at | نص (ISO 8601) | نعم | وقت إرسال نسخة موقَّعة إلى البريد الإلكتروني للموقِّع. | "2026-11-03T10:42:30Z" |
email_unavailable_reason | نص | نعم | سبب عدم إرسال النسخة بالبريد الإلكتروني، عند طلب إرسالها. | null |
ip_address | نص | نعم | عنوان الموقِّع وقت طلب رمزه. | "203.0.113.10" |
place | نص | نعم | غير مُجمَّع: تكون دائماً null. | null |
place_unavailable_reason | نص | نعم | not_collected. | "not_collected" |
تقدير العمر
تُعيدها واجهة API المستقلة لتقدير العمر (POST /v3/age-estimation/). تتضمّن الاستجابة مجموعة فرعية من بنية Liveness check ضمن غلاف age_estimation: وهي status وmethod وscore وage_estimation وwarnings، بالإضافة إلى كتلة user_image الخاصة بكشف الوجه والمتاحة في الواجهة المستقلة فقط؛ وهي لا تتضمّن reference_image أو video_url أو matches أو face_quality أو face_luminance. وفي جلسات سير العمل لا توجد مصفوفة منفصلة، بل يظهر العمر المقدَّر ضمن liveness_checks[].age_estimation في GET /v3/session/{sessionId}/decision/. المصدر: apis/serializers/age_estimation.py:50-55 (AgeEstimationResponseSerializer)، ويُجمَّع الغلاف في apis/views/age_estimation.py:138-174.
| الحقل | النوع | قابل للقيمة الفارغة | الوصف | مثال |
|---|---|---|---|---|
request_id | نص (UUID) | لا | معرّف الجلسة المحفوظ عندما تكون save_api_request=true (القيمة الافتراضية)؛ وإلا فهو معرّف UUID مؤقت للربط. | "3b1f1e2c-…" |
age_estimation | كائن | لا | الغلاف الذي يحتوي النتيجة: status (Approved / Declined)، وmethod (دائماً PASSIVE)، وscore (درجة الحيوية من 0 إلى 100، وقد تكون null)، وage_estimation (العمر المقدَّر بالسنوات لأكبر وجه، وقد تكون null)، وuser_image (entities[] تتضمن لكل وجه age وbbox بالصيغة [x_min, y_min, x_max, y_max] وconfidence وgender؛ بالإضافة إلى best_angle)، وwarnings[]. | { … } |
vendor_data | نص | نعم | القيمة vendor_data المُعادة من الطلب. | null |
metadata | كائن | نعم | القيمة metadata المُعادة من الطلب. | null |
created_at | نص (ISO 8601) | لا | طابع زمني لطلب على الخادم. | "2026-05-17T10:22:13.512941+00:00" |
{
"request_id": "3b1f1e2c-7777-4d2c-9eb6-fdc6c7c92ef9",
"age_estimation": {
"status": "Approved",
"method": "PASSIVE",
"score": 94.10,
"age_estimation": 28.7,
"user_image": {
"entities": [
{ "age": 28.7, "bbox": [40, 40, 100, 100], "confidence": 0.72, "gender": "male" }
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-05-17T10:22:13.512941+00:00"
}
المصادقة البيومترية
تُشغّل المصادقة البيومترية مسار كشف الحيوية + مطابقة الوجه نفسه المستخدم في KYC القياسي، لكنها مُعدّة لمقارنة الوجه الملتقَط بصورة المرجع الموجودة لدى المستخدم، بدلاً من صورة الوجه في مستند استُخرجت حديثاً عبر OCR. لا يوجد مُسلسِل مخصص لها، إذ تُعيدGET /v3/session/{sessionId}/decision/ الكائنين القياسيين فحص الحيوية ومطابقة الوجه ضمن liveness_checks[] وface_matches[]. يُضبط سير عمل الجلسة بالقيمة workflow_type = "biometric_authentication" (WorkflowTypeChoices، common/config/choices.py:636).
| الحقل | النوع | يقبل القيمة null | الوصف | مثال |
|---|---|---|---|---|
liveness_checks | مصفوفة من فحص كشف الحيوية | لا | نتيجة كشف الحيوية لمحاولة المصادقة. | [ { "status": "Approved", … } ] |
face_matches | مصفوفة من مطابقة الوجه | لا | نتيجة المطابقة مع المرجع المسجّل. يُضبط source_image_session_id على session_id الخاص بالجلسة نفسها، إذ تُسجَّل صورة المرجع (وهي portrait_image المرسلة، أو الوجه المخزّن الذي يُعاد استخدامه عبر vendor_data عند عدم تضمين portrait_image) ضمن جلسة المصادقة نفسها (face/views/face.py:656-659). | [ { "status": "Approved", "source_image_session_id": "…", … } ] |
status | نص | لا | حالة الجلسة الإجمالية على المستوى الأعلى (انظر تعداد الحالات). | "Approved" |
{
"session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"status": "Approved",
"liveness_checks": [
{
"status": "Approved",
"method": "PASSIVE",
"score": 95.10,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": null,
"matches": [],
"face_quality": 91.20,
"face_luminance": 53.10,
"node_id": "biometric_auth_liveness",
"warnings": []
}
],
"face_matches": [
{
"status": "Approved",
"score": 98.42,
"source_image_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "biometric_auth_face_match",
"warnings": []
}
]
}
سجل KYB
يُعاد لكل شركة مؤكّدة من السجل في سير عمل KYB. يظهر كعنصرregistry_checks[] في GET /v3/session/{sessionId}/decision/ لجلسات الشركات. المصدر: kyb/serializers/kyb.py:939-964 (RegistryCheckV3Serializer).
| الحقل | النوع | يقبل القيمة null | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | انظر تعداد الحالات. | "Approved" |
node_id | نص | null | نعم | معرّف عقدة سير العمل (الإصدار V3). | "first_registry" |
data_resolved | قيمة منطقية | لا | القيمة true عند اكتمال جلب بيانات السجل (أو عندما تكون is_from_registry بقيمة false، أي أن البيانات أُدخلت يدويًا). | true |
company | كائن | لا | payload الشركة الكامل، انظر كائن الشركة أدناه. | { … } |
ownership_structure | كائن | نعم | جدول الملكية الذي أثبته السجل: shareholders[] وbeneficial_owners[]، ولكل مالك هويته في السجل ونسبة حصته وshareholding المعتمدة. | { "shareholders": [...], "beneficial_owners": [] } |
warnings | مصفوفة | لا | انظر كائن التحذير. | [] |
كائن الشركة
المصدر:kyb/serializers/kyb.py:220-321 (KYBCompanyResponseSerializer).
| الحقل | النوع | يقبل القيمة null | الوصف |
|---|---|---|---|
uuid | نص (UUID) | لا | معرّف الشركة الداخلي. |
node_id | نص | null | نعم | معرّف عقدة سير العمل. |
status | نص | لا | حالة الميزة (FeatureStatusChoices). |
registry_status | نص | نعم | حالة الشركة في السجل (active أو dissolved أو غيرهما). |
data_resolved | قيمة منطقية | لا | المعنى نفسه المذكور في الكائن الأب. |
company_name | نص | نعم | اسم الشركة المسجّل. |
registration_number | نص | نعم | معرّف السجل. |
country_code | نص (ISO 3166-1 alpha-2) | نعم | بلد التأسيس. |
region | نص | نعم | تقسيم المنطقة وفق ISO 3166-2 عند الانطباق (مثل US-CA). |
company_type | نص | نعم | الشكل القانوني (مثل LLC أو SL). |
incorporation_date | نص (YYYY-MM-DD) | نعم | تاريخ التأسيس. |
registered_address | نص | نعم | العنوان القانوني المسجّل. |
tax_number | نص | نعم | المعرّف الضريبي أو رقم ضريبة القيمة المضافة. |
risk_level | نص | نعم | مستوى المخاطر الذي يوفّره المزوّد. |
verification_status | نص | نعم | تعداد حالات التحقق الداخلي. |
is_from_registry | قيمة منطقية | لا | القيمة true عندما تكون البيانات مأخوذة من السجل (في مقابل الإدخال اليدوي). |
fetch_status | نص | نعم | pending أو resolved أو failed. |
alternative_names | نص | نعم | أسماء تجارية بديلة مفصولة بفواصل. |
nature_of_business | نص | نعم | وصف نصي حر للنشاط التجاري. |
registered_capital | نص | نعم | رأس المال المسجّل كنص مقروء للإنسان. |
registered_capital_amount | نص (decimal) | نعم | مبلغ رأس المال المسجّل بعد تحليله. |
registered_capital_currency | نص (ISO 4217) | نعم | رمز العملة. |
website | نص (URL) | نعم | الموقع الإلكتروني للشركة. |
email | نص | نعم | البريد الإلكتروني العام للتواصل. |
phone | نص | نعم | رقم الهاتف العام للتواصل. |
legal_entity_identifier | نص | نعم | رمز LEI عند توفره. |
location_of_registration | نص | نعم | مكتب السجل أو المنطقة التي تم فيها التسجيل. |
vat_number | نص | نعم | رقم ضريبة القيمة المضافة المقدَّم عن الشركة. |
vat_validation_status | نص | لا | نتيجة التحقق من رقم ضريبة القيمة المضافة، أو من tax_number عند غيابه: valid أو invalid أو format_valid أو invalid_format أو could_not_validate أو not_applicable. انظر التحقق من ضريبة القيمة المضافة والرقم الضريبي. |
vat_validated_number | نص | نعم | الرقم الذي جرى التحقق منه كما يعرفه المصدر. |
vat_validation_source | نص | نعم | المصدر الذي حدّد الحالة: eu_vies أو pl_vat_white_list أو no_brreg أو ch_uid_register أو br_receita_federal أو co_rues أو cr_hacienda أو ec_sri أو py_dnit أو format_rules. |
vat_validated_name | نص | نعم | الاسم المسجّل لدى المصدر (يكون فارغًا إذا لم يكشف المصدر عنه). |
vat_validated_address | نص | نعم | العنوان المسجّل لدى المصدر (يكون فارغًا إذا لم يُكشف عنه). |
vat_checked_at | نص (ISO 8601) | نعم | الطابع الزمني للتحقق، وتكون القيمة null عندما لا يُجرى أي تحقق. |
financial_summary | كائن | نعم | لقطة لأبرز المؤشرات المالية الأخيرة عندما يوفّرها السجل. |
officers | مصفوفة من كائنات | لا | قائمة المسؤولين الآمنة لتطبيقات B2C: { uuid, name, designation, role, nationality, is_active, kyc_status, kyc_session_url }. |
beneficial_owners | مصفوفة من كائنات | لا | قائمة المستفيدين الحقيقيين (UBO) الآمنة لتطبيقات B2C: { uuid, name, first_name, last_name, entity_type, roles, ownership_min_shares, ownership_max_shares, is_active, kyc_status, kyc_session_url, effective_ownership_percent }. |
addresses | مصفوفة من كائنات | نعم | تفاصيل كل عنوان من السجل. |
industries | مصفوفة من كائنات | نعم | تصنيفات على غرار SIC وNAICS. |
accounts | مصفوفة من كائنات | نعم | بيانات وصفية عن الحسابات المالية المودعة. |
registry_data | كائن | نعم | التفاصيل الموحَّدة للسجل لدى Didit (نتيجة الملكية، والتصحيحات من وحدة التحكم، ووقائع السجل التي لا يملك لها حقلًا خاصًا). ليست عقدًا ثابتًا. |
user_provided_data | كائن | نعم | لقطة من الحقول التي عدّلها المستخدم. |
confirmed_by_user_at | نص (ISO 8601) | نعم | الطابع الزمني لتأكيد المستخدم للبيانات المستخرجة. |
last_console_edit_at | نص (ISO 8601) | نعم | الطابع الزمني لآخر تعديل في لوحة التحكم. |
is_editable | قيمة منطقية | لا | true طالما أن البيانات المستمدة من السجل ما زالت قابلة للتعديل من قبل المستخدم النهائي. |
{
"status": "Approved",
"node_id": "first_registry",
"data_resolved": true,
"company": {
"uuid": "b1f1e2c2-9999-4d2c-9eb6-fdc6c7c92ef9",
"node_id": "first_registry",
"status": "Approved",
"registry_status": "active",
"data_resolved": true,
"company_name": "Sante Clinics SL",
"registration_number": "B12345678",
"country_code": "ES",
"region": null,
"company_type": "SL",
"incorporation_date": "2018-03-22",
"registered_address": "Calle Mayor 1, 28001 Madrid, Spain",
"tax_number": "B12345678",
"risk_level": "low",
"verification_status": "verified",
"is_from_registry": true,
"fetch_status": "resolved",
"alternative_names": "Sante Clinics",
"nature_of_business": "Medical clinic operations",
"registered_capital": "EUR 50,000",
"registered_capital_amount": "50000.00",
"registered_capital_currency": "EUR",
"website": "https://santeclinics.com",
"email": "info@santeclinics.com",
"phone": "+34911223344",
"legal_entity_identifier": null,
"location_of_registration": "Registro Mercantil de Madrid",
"vat_number": "ESB12345678",
"vat_validation_status": "valid",
"vat_validated_name": "SANTE CLINICS SL",
"vat_validated_address": "CALLE MAYOR 1, 28001 MADRID",
"vat_checked_at": "2026-05-17T10:11:05Z",
"financial_summary": null,
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…"
}
],
"beneficial_owners": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"entity_type": "person",
"roles": ["UBO"],
"ownership_min_shares": "75.00",
"ownership_max_shares": "75.00",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"effective_ownership_percent": 75.0
}
],
"addresses": [],
"industries": [],
"accounts": [],
"registry_data": {},
"user_provided_data": {},
"confirmed_by_user_at": "2026-05-17T10:11:02Z",
"last_console_edit_at": null,
"is_editable": false
},
"ownership_structure": null,
"warnings": []
}
مستند KYB
يُرجَع لكل عقدة تجمع مستندات KYB الداعمة. يظهر بوصفهdocument_verifications[] في GET /v3/session/{sessionId}/decision/ لجلسات الشركات، بمدخل واحد لكل node_id، مع قائمة items[] تعرض كل مستند تم رفعه. المصدر: kyb/serializers/kyb.py:1053-1068 (DocumentVerificationV3Serializer)؛ ويتبع كل عنصر kyb/serializers/kyb.py:811-851 (KYBDocumentResponseSerializer).
| الحقل | النوع | يقبل null | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | الحالة الإجمالية لمستندات هذه العقدة: Approved فقط عندما تكون كل مستندات مسار المعالجة مقبولة؛ وDeclined إذا رُفض أي منها؛ وIn Review في غير ذلك؛ وNot Finished طالما كانت المستندات معلقة. انظر تعداد الحالة. | "Approved" |
node_id | نص | null | نعم | معرّف عقدة سير العمل (V3). | "first_kyb_documents" |
items | مصفوفة من كائنات عناصر مستند KYB | لا | مدخل واحد لكل مستند تم رفعه أو طلبه. | […] |
groups | كائن | لا | عدد المستندات لكل مجموعة مستندات: { <group_name>: { total, approved, pending, declined, in_review, other, missing } }. | { "incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 } } |
required_groups | مصفوفة من النصوص | لا | مجموعات المستندات التي يتطلبها إعداد سير العمل. | ["incorporation_certificate", "shareholder_register"] |
warnings | مصفوفة | لا | انظر كائن التحذير. | [] |
كائن عنصر مستند KYB
| الحقل | النوع | يقبل null | الوصف |
|---|---|---|---|
uuid | نص (UUID) | لا | معرّف المستند الداخلي. |
document_type | نص | نعم | المجموعة عالية المستوى (incorporation_certificate، shareholder_register، …). |
document_subtype | نص | نعم | النوع الفرعي الخاص بالمزوّد. |
document_group | نص | نعم | نسخة مطابقة لـ document_type (اسم بديل يُحتفظ به للوضوح). |
file_url | نص (URL) | نعم | رابط موقّع مسبقاً للملف المنقّح. |
original_filename | نص | نعم | اسم الملف كما تم رفعه. |
file_size | عدد صحيح | نعم | حجم الملف بالبايت. |
status | نص | لا | الحالة الفردية للمستند (FeatureStatusChoices). |
created_at | نص (ISO 8601) | لا | الطابع الزمني للرفع. |
cross_check_result | كائن | نعم | حكم التحقق المتقاطع مقابل السجل أو المستندات الأخرى. |
document_metadata | كائن | نعم | نفس شكل البيانات الوصفية المصفّاة الموجود في document_metadata الخاص بإثبات العنوان. |
description | نص | نعم | وصف يقدمه المراجِع أو النظام. |
is_requested | قيمة منطقية | لا | true عندما يتوقع سير العمل هذا المستند. |
ocr_data | كائن | نعم | الحقول المستخرجة عبر OCR عند توفرها. |
is_console_upload | قيمة منطقية | لا | true عندما يرفع المستندَ مُراجِعٌ من لوحة التحكم، ويُستبعد هذا المستند من الحكم الإجمالي. |
is_confirmed | قيمة منطقية | لا | true عندما يؤكد المراجِع المستند صراحةً. |
{
"status": "Approved",
"node_id": "first_kyb_documents",
"items": [
{
"uuid": "e1f1e2c2-cccc-4d2c-9eb6-fdc6c7c92ef9",
"document_type": "incorporation_certificate",
"document_subtype": "registro_mercantil_extract",
"document_group": "incorporation_certificate",
"file_url": "https://<media-host>/.../incorporation.pdf?signature=...",
"original_filename": "incorporation_certificate.pdf",
"file_size": 256412,
"status": "Approved",
"created_at": "2026-05-17T10:08:00Z",
"cross_check_result": { "matches_registry_name": true, "matches_registration_number": true },
"document_metadata": {
"file_size": 256412,
"content_type": "application/pdf",
"is_signed": true,
"is_tampered": false
},
"description": null,
"is_requested": true,
"ocr_data": { "company_name": "Sante Clinics SL", "registration_number": "B12345678" },
"is_console_upload": false,
"is_confirmed": true
}
],
"groups": {
"incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
},
"required_groups": ["incorporation_certificate", "shareholder_register"],
"warnings": []
}
الشخص الرئيسي في KYB
يُرجَع لكل عقدة للأشخاص الرئيسيين في سير عمل KYB. يظهر بوصفهkey_people_checks[] في GET /v3/session/{sessionId}/decision/ لجلسات الشركات. المصدر: kyb/serializers/kyb.py:967-1050 (KeyPeopleCheckV3Serializer).
| الحقل | النوع | يقبل null | الوصف | مثال |
|---|---|---|---|---|
status | نص | لا | انظر تعداد الحالة. | "Approved" |
node_id | نص | null | نعم | معرّف عقدة سير العمل (V3). | "first_key_people" |
registry | كائن | لا | { officers[], beneficial_owners[] } مستخرج من السجل. يتبع المسؤولون KYBPersonResponseSerializer (kyb/serializers/kyb.py:533-645)، ويتبع المستفيدون الحقيقيون KYBBeneficialOwnerResponseSerializer (kyb/serializers/kyb.py:648-788)، ويضيف الأخير الحقول date_of_birth وcountry_of_birth وemail وcompany_name وregistration_number وentity_type وroles وownership_min_shares وownership_max_shares وchild_beneficial_owners وeffective_ownership_percent. ويتضمنان إثراء AML وKYC لكل طرف (aml_status، kyc_status، kyc_session_url، kyc_session_id، verification_workflow_type، verification_workflow_id، verification_workflow_label، verification_workflow_features، didit_internal_id، kyc_document_type، kyc_nationality، kyc_liveness_passed، kyc_verified_at، kyc_aml_categories، kyc_notification_sent_at). | { "officers": [...], "beneficial_owners": [...] } |
submitted | كائن | لا | { parties[] }: المدخلات التي أكدتها الشركة أو أرسلتها عبر مسار الأشخاص الرئيسيين (صفوف BusinessParty التي تحمل source=USER). يتبع كل طرف BusinessPartySubmissionResponseSerializer (kyb/serializers/party.py:146-194): uuid، entity_type، source، name، first_name، last_name، company_name، registration_number، email، nationality، phone_number، date_of_birth، position، custom_fields، is_active، is_skipped، requires_verification، roles[] ({ role, ownership_percent, voting_percent })، kyc_session_id، kyc_session_status، kyc_session_url، kyc_session_deleted، kyb_sub_session_id، kyb_sub_session_status، kyb_sub_session_url، kyb_sub_session_deleted، verification_workflow_type، verification_workflow_id، verification_workflow_label، verification_workflow_features، didit_internal_id. يشير kyc_session_deleted وkyb_sub_session_deleted إلى أن الجلسة الفرعية قد حُذفت: تبقى حالتها مجمّدة عند آخر قيمة لها، ويعود *_session_url المقابل بقيمة null لأن الرابط لم يعد يعمل، ويتوقف الطرف عن منع الجلسة الأم (وينخفض الفحص إلى In Review بدلاً من ذلك). امسح ذلك باستخدام PATCH /v3/session/{id}/kyb/parties/{party_uuid}/. | { "parties": [...] } |
ubo_kyc_summary | كائن | نعم | أعداد المستفيدين الحقيقيين النشطين الذين لديهم KYC مرتبط: { total, approved, flagged, pending }. تكون القيمة null عندما لا يكون لأي مستفيد حقيقي نشط KYC مرتبط. | { "total": 2, "approved": 2, "flagged": 0, "pending": 0 } |
warnings | مصفوفة | لا | راجع كائن التحذير. | [] |
{
"status": "Approved",
"node_id": "first_key_people",
"registry": {
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"appointment_date": "2018-03-22",
"termination_date": null,
"is_active": true,
"address": "Calle Mayor 1, 28001 Madrid",
"aml_status": "Approved",
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" },
{ "feature": "FACE_MATCH", "status": "Approved" }
],
"didit_internal_id": "user-12345",
"kyc_document_type": "Passport",
"kyc_nationality": "ESP",
"kyc_liveness_passed": true,
"kyc_verified_at": "2026-05-17T10:10:11Z",
"kyc_aml_categories": [],
"kyc_notification_sent_at": "2026-05-15T08:00:00Z"
}
],
"beneficial_owners": []
},
"submitted": {
"parties": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"entity_type": "person",
"source": "USER",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"company_name": null,
"registration_number": null,
"email": "maria.garcia@example.com",
"nationality": "ESP",
"phone_number": null,
"date_of_birth": "1990-05-12",
"position": "Administrador único",
"custom_fields": {},
"is_active": true,
"is_skipped": false,
"requires_verification": true,
"roles": [
{ "role": "UBO", "ownership_percent": 75.0, "voting_percent": null }
],
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"kyc_session_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyb_sub_session_id": null,
"kyb_sub_session_status": null,
"kyb_sub_session_url": null,
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" }
],
"didit_internal_id": "user-12345"
}
]
},
"ubo_kyc_summary": { "total": 1, "approved": 1, "flagged": 0, "pending": 0 },
"warnings": []
}
الحقول على مستوى القرار
تقع هذه المفاتيح بجوار مصفوفات الميزات فيGET /v3/session/{sessionId}/decision/ وداخل حقل decision في webhook.
| الحقل | النوع | قابل لأن يكون null | الوصف |
|---|---|---|---|
status_override | كائن | نعم | { overridden_at, automatic_status } بعد أن يحدّد المراجِع قيمة status يدوياً؛ وتكون القيمة null عندما تكون الحالة هي الحالة التلقائية. |
decision_trace | كائن | لا | طريقة الوصول إلى الحالة: status، وdecided_by (manual أو automatic أو investigator)، وdecided_at، وautomatic_status، وterminal_node_id، وactor، وwarning_counts وstatus_warnings. |
linked_records | كائن | نعم | ملخصات same_face وearlier_verifications وnetworks؛ وتكون القيمة null عندما لا يوجد ما يُعرض. |
biometric_retention | كائن | لا | { jurisdictions, deletes_at }. يمثل deletes_at التاريخ الذي تُحذف فيه البيانات البيومترية الحية للجلسة، وتكون القيمة null عندما لا يوجد تاريخ منطبق بعد. |
database_validation_not_performed_reason | كائن | نعم | { code, message } يوضح سبب عدم إنتاج التحقق من قواعد البيانات المُكوَّن أي نتيجة. |
assignee، waiting_since، sla_due_at | كائن، تاريخ ووقت | نعم | مراجِع Console الذي يتولى الجلسة، وعدّاد مراجعتها؛ ويكون العدّاد null إلا إذا كانت الجلسة في حالة In Review. |
shared_from_session، shared_from_session_number | UUID، عدد صحيح | نعم | الجلسة المصدر للجلسة المستوردة. |
sandbox_scenario | نص | نعم | السيناريو الذي أُنشئت به جلسة البيئة التجريبية. |
fraud_check | كائن | نعم | نتيجة واجهة Fraud Check API؛ وتكون القيمة null لكل جلسة أخرى. |
full_session_video، full_session_video_recorded_at | URL، تاريخ ووقت | نعم | تسجيل فيديو الجلسة الكامل ووقت تسجيله. يُعاد هذان الحقلان فقط إذا كانت مؤسستك تسجّل فيديو الجلسة الكامل. |
الموافقة البيومترية
يحمل كل قرار تحقق من المستخدمين وكل webhook للجلسة كائنbiometric_consent واحدًا (وليس مصفوفة): ما إذا كانت الجلسة تتطلب موافقة بيومترية صريحة، والسبب، وأدلة الإجابة. يكون null عندما لم تُقيَّم الجلسة قط، مثل سير عمل بلا التقاط للوجه. المصدر: BiometricConsentDecisionSerializer (sessions/serializers/biometric_consent.py). تُشرح الخطوة ومتى تظهر وما تعنيه كل حالة في الموافقة البيومترية.
الحقول التي لا توجد لها قيمة مسجلة تكون null، وليس نصًا فارغًا أبدًا.
| الحقل | النوع | الوصف |
|---|---|---|
required | boolean | ما إذا كان يجب على الجلسة جمع موافقة بيومترية صريحة. لا تعود أبدًا إلى false. |
trigger | string (تعداد) | null | سبب اشتراط الموافقة، أو كيفية تلبيتها: declared_state، ip_state، ip_unknown، document_issuer، forced (وضع التطبيق «دائمًا»)، customer_collected (أرسلتَ biometric_consent عند إنشاء الجلسة). تكون null ما دامت الموافقة غير مطلوبة. |
status | string (تعداد) | not_required، وpending (مطلوبة ولم تُمنح)، وgiven، وdeclined (سُجّل رفض؛ لا تعرض أي شاشة من Didit خيار الرفض حاليًا). |
given_at | string (ISO 8601) | null | وقت منح الموافقة. بالنسبة إلى customer_collected، هو القيمة given_at التي أرسلتها. |
declined_at | string (ISO 8601) | null | وقت تسجيل الرفض. |
text_version | string | null | معرّف إصدار نص الموافقة الذي أجاب عنه الشخص، أو الذي أرسلته. |
text_hash | string | null | قيمة SHA-256 (بالنظام السادس عشر) للنص الدقيق المعروض، باللغة التي عُرض بها. |
locale | string | null | اللغة التي عُرض بها النص. |
policy_url | string | null | سياسة البيانات البيومترية التي ربطتها الخطوة. |
step | string | null | خطوة سير العمل التي كانت عليها الجلسة عندما أجاب الشخص (مثلًا LIVENESS). |
node_id | string | null | عقدة مخطط سير العمل التي كانت عليها الجلسة عندما أجاب الشخص. |
ip_address | string | null | عنوان IP الذي صدرت منه الإجابة. |
ip_country_code | string | null | رمز الدولة وفق ISO 3166-1 alpha-2 لعنوان IP الذي صدرت منه الإجابة. |
ip_state | string | null | رمز التقسيم الإداري وفق ISO 3166-2 لعنوان IP الذي صدرت منه الإجابة (مثلًا US-IL). |
ip_city | string | null | مدينة عنوان IP الذي صدرت منه الإجابة. |
user_agent | string | null | وكيل المستخدم لطلب الإجابة. |
detected_ip_address | string | null | عنوان IP للشخص الذي قُيّم الشرط انطلاقًا منه آخر مرة. قد يختلف عن ip_address إذا أجاب الشخص من جهاز آخر. |
detected_country_code | string | null | رمز الدولة وفق ISO 3166-1 alpha-2 لعنوان IP المكتشف. |
detected_state | string | null | رمز التقسيم الإداري وفق ISO 3166-2 لعنوان IP المكتشف. |
detected_city | string | null | مدينة عنوان IP المكتشف. |
declared_state | string | null | رمز التقسيم الإداري وفق ISO 3166-2 الذي صرّحتَ به: user_state، أو ولاية عنوان أمريكي في expected_details. |
document_state | string | null | رمز التقسيم الإداري وفق ISO 3166-2 الذي أصدر وثيقة الهوية، ويُقرأ عند التقاط الهوية. |
jurisdictions | array of string | الولايات الأمريكية (رموز USPS، مثلًا IL) التي ينطبق قانونها البيومتري على الشخص. تُعاد US عندما تضع الأدلة الشخص في الولايات المتحدة دون معرفة الولاية. تكون فارغة عندما لا ينطبق أي منها. |
retention_months | integer | null | أقصر حد للاحتفاظ بالبيانات البيومترية، بالأشهر، من بين عناصر jurisdictions. تكون null عندما لا ينطبق أي منها. |
reason | string (تعداد) | null | BIOMETRIC_CONSENT_UNSUPPORTED_SDK: كانت الموافقة مطلوبة، وقام SDK أصلي أقل من 4.10.0، أو SDK لم يُبلغ عن إصداره، بالتقاط وجه دون الخطوة؛ تبقى status بقيمة pending، أو تصبح given إذا وافق الشخص لاحقًا في صفحة التحقق المستضافة. BIOMETRIC_CONSENT_DECLINED: سُجّل رفض (ويحل محل سبب SDK). تكون null في غير ذلك، وتكون دائمًا null عندما لم تكن الجلسة تتطلب الموافقة. |
decline_reason | string | null | تكون BIOMETRIC_CONSENT_DECLINED عندما أنهى رفضٌ مسجَّل الجلسة، وإلا فتكون null. |
face_data_deleted_at | string (ISO 8601) | null | وقت حذف صور الوجه ومقاطع الفيديو وقوالب الوجه الخاصة بالجلسة نتيجة الرفض. تكون null ما لم يُسجَّل رفض. |
{
"required": true,
"trigger": "ip_state",
"status": "pending",
"given_at": null,
"declined_at": null,
"text_version": null,
"text_hash": null,
"locale": null,
"policy_url": null,
"step": null,
"node_id": null,
"ip_address": null,
"ip_country_code": null,
"ip_state": null,
"ip_city": null,
"user_agent": null,
"detected_ip_address": "203.0.113.42",
"detected_country_code": "US",
"detected_state": "US-IL",
"detected_city": "Chicago",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK",
"decline_reason": null,
"face_data_deleted_at": null
}
{
"required": true,
"trigger": "declared_state",
"status": "given",
"given_at": "2026-10-13T18:31:07.412000Z",
"declined_at": null,
"text_version": "bio-consent-2026-10-12",
"text_hash": "9b2f0c5e4d8a7f61c3e2b4a5d6f7081923a4b5c6d7e8f90a1b2c3d4e5f6a7b8c",
"locale": "en",
"policy_url": "https://didit.me/legal/biometric-data-policy",
"step": "LIVENESS",
"node_id": "feature_liveness_1",
"ip_address": "198.51.100.23",
"ip_country_code": "ES",
"ip_state": "ES-M",
"ip_city": "Madrid",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",
"detected_ip_address": "198.51.100.23",
"detected_country_code": "ES",
"detected_state": "ES-M",
"detected_city": "Madrid",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": null,
"decline_reason": null,
"face_data_deleted_at": null
}
مرجع قيم الحالة
تشترك مجموعتا قيم مترابطتان في اسم الحقلstatus. تستخدم كل كائنات التقارير الخاصة بالميزات على هذه الصفحة تعداد مستوى الميزة، بينما يستخدم status ذو المستوى الأعلى للجلسة الأم تعداد الجلسة الأوسع.
حالات مستوى الميزة
تُستخدم في حقلstatus لكل كائن تقرير. المصدر: common/config/choices.py:343-348 (FeatureStatusChoices).
| القيمة | المعنى |
|---|---|
Not Finished | تم توفير الميزة لكن المستخدم لم يُكملها بعد. |
Approved | اجتازت الميزة جميع الفحوصات. |
Declined | أخفقت الميزة في فحص حاسم واحد على الأقل (راجع warnings[] مع log_type: "error"). |
In Review | أطلقت الميزة إشارات فشل ناعم وهي بانتظار المراجعة اليدوية (راجع warnings[] مع log_type: "warning"). |
Resub Requested | طلب مراجِع من المستخدم إعادة تقديم هذه الميزة. |
Expired أيضًا في التحقق من رقم الهاتف والبريد الإلكتروني والهوية عندما تنتهي مهلة خطوتها (PhoneStatusChoices في common/config/choices.py:377-382، وEmailStatusChoices في common/config/choices.py:434-439).
حالات مستوى الجلسة
تُستخدم في حقلstatus ذي المستوى الأعلى للجلسة الأم. المصدر: common/config/choices.py:106-117 (StatusChoices).
| القيمة | المعنى |
|---|---|
Not Started | أُنشئت الجلسة لكن المستخدم لم يبدأها بعد. |
In Progress | بدأ المستخدم المسار، والنتيجة لم تُحسم بعد. |
Approved | اجتازت الجلسة جميع الفحوصات. |
Declined | أخفقت الجلسة في فحص حاسم واحد على الأقل. |
In Review | الجلسة بانتظار المراجعة اليدوية. |
Expired | انتهت صلاحية الجلسة قبل اكتمالها. |
Abandoned | غادر المستخدم المسار دون إكماله. |
Kyc Expired | انقضت فترة صلاحية KYC (وتُستخدم في مسارات إعادة التحقق). |
Resubmitted | أعاد المستخدم التقديم بعد رفض سابق، وحلّت محلّها جلسة أحدث. |
Awaiting User | ينتظر النظام إجراءً من جهة المستخدم (مثل إدخال رمز OTP). |
القيم النهائية للجلسة هي
Approved وDeclined وIn Review وExpired وKyc Expired وAbandoned. يمكن أن تصل الجلسة إلى قرارها الإجمالي بينما تبقى ميزة فردية في حالة In Review.