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

# استرجاع الجلسة: بيانات قرارات KYC وKYB

> قرارات التحقق لجلسات KYC وKYB من Didit: الهوية والحيوية وAML والسجلات وOCR في استجابة واحدة، بزمن أقل من 2s والدفع لكل استدعاء.



موجّه استرجاع قرار الجلسة
        نسخ الموجّه إلى الحافظة



      
      

\<pre>

\``Fetch the full decision for a Didit verification session.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/decision/

Authentication:
Use the x-api-key header with your Didit API key. The key must hold the read:sessions privilege.

Path parameter:
\- session_id (UUID) — returned by POST /v3/session/. Didit resolves it as a User Verification session first, then as a Business Verification session — you do not need to know the kind in advance.

curl example:
curl https://verification.didit.me/v3/session/<SESSION_ID>/decision/ \
-H "x-api-key: <API_KEY>"

Response — top-level keys (both kinds share these):
\- session_id (UUID)
\- session_kind ("user" | "business") — discriminator, ALWAYS branch on this.
\- session_number (int)
\- session_url (string) — hosted URL.
\- status (string) — "Approved", "Declined", "In Review", "In Progress", "Not Started", "Expired", "Abandoned", "Kyc Expired", "Resubmitted", "Awaiting User".
\- workflow_id (workflow_version, workflow_type and workflow_version_id come only with ?include=events)
\- vendor_data, metadata, callback
\- features (string or array) — feature list the workflow runs.
\- expected_details — what you sent on create, if any.
\- created_at, expires_at (ISO 8601).
\- contact_details — { email, email_lang, send_notification_emails, phone }.
\- reviews — array of manual-review activity.
\- status_override ({ overridden_at, automatic_status } | null) — set when a reviewer changed the status by hand.
\- decision_trace — how the status was reached: status, decided_by (manual | automatic | investigator), decided_at, automatic_status, terminal_node_id, actor, warning_counts, status_warnings.
\- linked_records — same_face, earlier_verifications and networks summaries, or null.
\- biometric_retention ({ jurisdictions, deletes_at }) — the date the live biometric data of the session is deleted.
\- assignee, waiting_since, sla_due_at — the Console reviewer holding the session and its review clock; null unless the session is In Review.
\- database_validation_not_performed_reason — why a configured database validation produced no result, when database_validations is null.
\- geolocation_checks, geolocation_attempts — Location verification results and every attempt (see /core-technology/location-verification/report-location-verification).
\- shared_from_session, shared_from_session_number, sandbox_scenario, fraud_check — set only for imported sessions, sandbox scenarios and Fraud Check sessions.
\- full_session_video, full_session_video_recorded_at — only when your organization records full-session video.

Feature arrays — KYC only (session_kind: "user"):
\- id_verifications, liveness_checks, face_matches, nfc_verifications, poa_verifications, database_validations
\- `id_verifications[].barcodes` is always an array. Each entry preserves the reader output, including `type`, `position`, `data`, `data_raw`, and `side`; documents without barcode output return `[]`.
\- nfc_verifications[] items carry is_nfc_skipped (boolean) and skip_reason (string | null) alongside status/chip_data/authenticity — read the reason from the report when one exists. chip_protocol is "icao" or "jpki"; a Japan My Number Card read ("jpki") has its evidence under jpki (chain_valid, signature_valid, revocation_status, attributes, attributes_match_ocr) and null ICAO fields.
\- nfc_skip_reason (string | null), top level — why NFC did not run (USER_SKIPPED, DOCUMENT_WITHOUT_CHIP, CHIP_CERTIFICATE_UNAVAILABLE, DEVICE_WITHOUT_NFC, INTEGRATION_WITHOUT_NFC_ACCESS, MRZ_KEY_UNAVAILABLE, JPKI_UNAVAILABLE), including when the step was bypassed and nfc_verifications stays null.

Feature arrays — KYB only (session_kind: "business"):
\- registry_checks (includes company + officers + beneficial_owners + ownership_structure)
\- document_verifications
\- key_people_checks (officers + beneficial_owners + submitted parties + ubo_kyc_summary)

Shared by both kinds:
\- aml_screenings, phone_verifications, email_verifications, questionnaire_responses, ip_analyses, document_ai_documents
\- bank_verifications: Bank Verification results, one item per Bank Verification step. Read method: "open_banking" (bank sign-in) or "account_lookup" (account check), or a "microdeposits" or "statement" fallback; null until an account is evaluated. "none" when the person chose Continue without your bank before any attempt was evaluated. continued_without_bank: true when the person chose Continue without your bank, also after an evaluated attempt, whose verdict stands; continuation.reason says why (no_route, institution_unsupported, attempts_exhausted, person_choice). financial_data.not_collected lists the data an account check could not collect. See /core-technology/bank-verification/verification-methods and /core-technology/bank-verification/fallbacks.
\- signatures: E-signature results, one item per signer. Present only when the workflow has an E-signature step. Read status ("signed" means signed), verdict, signer, confirmation, certificate, timestamp, documents[] (sha256_original, sha256_signed, signed_file, fields[]) and evidence_file. See /core-technology/electronic-signature/report-electronic-signature.

V3 contract: feature arrays are ALWAYS plural arrays. If a feature was not run on the session, the field is absent or null — never a placeholder.

See /reference/data-models for the full schema (every nested field).

Handler pattern:
const decision = await (await fetch(url, { headers: { "x-api-key": API_KEY } })).json();
switch (decision.session_kind) {
case "user": return handleUserDecision(decision);
case "business": return handleBusinessDecision(decision);
}

Failure modes:
\- 404 — { "detail": "Not found." } when the session does not exist (both session types are checked) or belongs to a different application.
\- 403 — { "detail": "You do not have permission to perform this action." } when the key lacks read:sessions.
\- 401 — invalid API key.

When to call:
\- Eagerly after receiving a status.updated webhook (recommended pattern — see /integration/webhooks).
\- On-demand when your support agent or analyst opens the session in your dashboard.

Caching:
Decision payloads are mutable until the session reaches a terminal status. Cache only if you also subscribe to data.updated and status.updated webhooks.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.``

\</pre>



      
      

الصق في

## دعم التحقق من المستخدمين (KYC) والتحقق من الشركات (KYB)تعمل endpoint هذه مع جلسات **التحقق من المستخدمين (KYC)** وجلسات **التحقق من الشركات (KYB)**. تتضمن الاستجابة دائمًا الحقل `session_kind` على المستوى الأعلى:- `"user"`: جلسة **التحقق من المستخدمين (KYC)**. تحتوي الاستجابة على `id_verifications` و`liveness_checks` و`face_matches` و`nfc_verifications` و`poa_verifications` و`database_validations`.
- `"business"`: جلسة **التحقق من الشركات (KYB)**. تحتوي الاستجابة على `registry_checks` و`document_verifications` و`key_people_checks`.يشترك كلا النوعين في `aml_screenings` و`phone_verifications` و`email_verifications` و`questionnaire_responses` و`ip_analyses` و`document_ai_documents` و`bank_verifications` و`reviews` و`contact_details`، إضافةً إلى الحقول المشتركة على المستوى الأعلى (`session_id` و`session_number` و`session_url` و`status` و`workflow_id` و`vendor_data` و`metadata` و`callback` و`features` و`expected_details` و`created_at` و`expires_at`).تبحث Didit عن `session_id` في نوعي الجلسات (التحقق من المستخدمين أولًا، ثم التحقق من الشركات)، وتعيد النوع المطابق. معرّفات UUID فريدة لكل تطبيق، ولا يوجد أي التباس.راجع [نظرة عامة على الجلسات](https://docs.didit.me/ar/sessions-api/overview.md) للاطلاع على المصفوفة الكاملة للميزات الخاصة بكل نوع.## أمثلة> [tab] التحقق من المستخدمين (KYC)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a/decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **الاستجابة (مختصرة):**
>
> ```json theme={null}
> {
>   "session_id": "4c5c7f3a-1f82-4f3b-8d8e-1a8d2d2f9b7a",
>   "session_kind": "user",
>   "session_number": 1024,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyc_standard",
>   "vendor_data": "user-42",
>   "features": "ID_VERIFICATION,LIVENESS,FACE_MATCH,AML",
>   "id_verifications": [
>     { "node_id": "feature_ocr_1", "status": "Approved", "document_type": "Passport", "full_name": "John Doe", "barcodes": [], "...": "..." }
>   ],
>   "liveness_checks": [
>     { "node_id": "feature_liveness_1", "status": "Approved", "score": 0.98 }
>   ],
>   "face_matches": [
>     { "node_id": "feature_face_match_1", "status": "Approved", "score": 0.94 }
>   ],
>   "aml_screenings": [
>     { "node_id": "feature_aml_1", "status": "Approved", "total_hits": 0, "score": 0 }
>   ],
>   "phone_verifications": [],
>   "email_verifications": [],
>   "questionnaire_responses": [],
>   "ip_analyses": [],
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```> [tab] التحقق من الشركات (KYB)
>
> ```bash theme={null}
> curl https://verification.didit.me/v3/session/bs-01HJX1.../decision/ \
>   -H "x-api-key: YOUR_API_KEY"
> ```
>
> **الاستجابة (مختصرة):**
>
> ```json theme={null}
> {
>   "session_id": "bs-01HJX1...",
>   "session_kind": "business",
>   "session_number": 89,
>   "session_url": "https://verify.didit.me/...",
>   "status": "APPROVED",
>   "workflow_id": "wf_kyb_standard",
>   "vendor_data": "biz-acme-001",
>   "features": ["KYB_REGISTRY", "KYB_COMPANY_AML", "KYB_DOCUMENTS", "KYB_KEY_PEOPLE"],
>   "registry_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_registry",
>       "data_resolved": true,
>       "company": {
>         "uuid": "...",
>         "node_id": "feature_kyb_registry",
>         "status": "Approved",
>         "registry_status": "active",
>         "company_name": "Acme Corporation Limited",
>         "registration_number": "12345678",
>         "country_code": "GBR",
>         "company_type": "Private Limited",
>         "incorporation_date": "2010-05-14",
>         "registered_address": "1 Main Street, London EC1A 1AA, United Kingdom",
>         "tax_number": "SAMPLE-TAX-12345",
>         "risk_level": "LOW",
>         "verification_status": "verified",
>         "is_from_registry": true,
>         "fetch_status": "resolved",
>         "alternative_names": ["Acme Ltd"],
>         "nature_of_business": "Software publishing",
>         "registered_capital": "100000 GBP",
>         "website": "https://acme.example",
>         "email": "alex.sample@example.com",
>         "phone": "+15550101000",
>         "legal_entity_identifier": "529900XXXXXXXXXXXXX",
>         "financial_summary": {},
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "nationality": "USA", "is_active": true, "kyc_status": "Approved", "kyc_session_url": "https://verify.didit.me/..." }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "entity_type": "person", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending", "effective_ownership_percent": 40.0 }
>         ],
>         "addresses": [],
>         "industries": [],
>         "accounts": [],
>         "registry_data": { },
>         "user_provided_data": { },
>         "confirmed_by_user_at": "2026-04-16T10:10:00Z",
>         "is_editable": false
>       },
>       "ownership_structure": { },
>       "warnings": []
>     }
>   ],
>   "aml_screenings": [
>     {
>       "node_id": "feature_kyb_company_aml",
>       "status": "Approved",
>       "total_hits": 0,
>       "score": 0,
>       "entity_type": "COMPANY",
>       "hits": []
>     }
>   ],
>   "document_verifications": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_documents",
>       "items": [
>         { "uuid": "...", "document_type": "certificate_of_incorporation", "status": "Approved", "file_url": "https://...", "ocr_data": { } }
>       ],
>       "groups": { "legal_presence": { "approved": 1, "pending": 0, "missing": 0 } },
>       "required_groups": ["legal_presence", "ownership_structure"],
>       "warnings": []
>     }
>   ],
>   "key_people_checks": [
>     {
>       "status": "Approved",
>       "node_id": "feature_kyb_key_people",
>       "officers": [
>         { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved", "kyc_session_url": "..." }
>       ],
>       "beneficial_owners": [
>         { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "ownership_max_shares": 40, "kyc_status": "Pending" }
>       ],
>       "registry": {
>         "officers": [
>           { "uuid": "...", "name": "Jane Doe", "role": "director", "kyc_status": "Approved" }
>         ],
>         "beneficial_owners": [
>           { "uuid": "...", "name": "John Smith", "roles": ["ubo"], "ownership_min_shares": 40, "kyc_status": "Pending" }
>         ]
>       },
>       "submitted": {
>         "parties": [
>           { "uuid": "...", "entity_type": "person", "name": "Alice Chen", "role": "ubo", "ownership_percent": 35.0, "requires_verification": true, "kyc_session_status": "Not Started", "kyc_session_url": "https://verify.didit.me/..." }
>         ]
>       },
>       "ubo_kyc_summary": {
>         "total": 2,
>         "approved": 1,
>         "flagged": 0,
>         "pending": 1
>       },
>       "warnings": []
>     }
>   ],
>   "phone_verifications": null,
>   "email_verifications": null,
>   "questionnaire_responses": null,
>   "ip_analyses": null,
>   "reviews": [],
>   "contact_details": { "email": "alex.sample@example.com", "email_lang": "en", "send_notification_emails": true, "phone": null },
>   "expected_details": null,
>   "metadata": {},
>   "callback": null,
>   "created_at": "2026-04-16T10:00:00Z",
>   "expires_at": "2026-04-23T10:00:00Z"
> }
> ```## التعامل مع الاستجابة في نظامك```typescript theme={null}
const res = await fetch(`${BASE}/v3/session/${sessionId}/decision/`, {
  headers: { "x-api-key": API_KEY },
});
const decision = await res.json();

switch (decision.session_kind) {
  case "user":
    handleUserDecision(decision);
    break;
  case "business":
    handleBusinessDecision(decision);
    break;
}
```## الحالة وتتبّع القرار وحقول المراجعةيوضّح كل قرار كيفية الوصول إلى قيمة `status` الخاصة به.| الحقل | ما الذي يجب قراءته |
| - | - |
| `status_override` | `null` عندما تكون الحالة هي الحالة التلقائية. بعد أن يضبط مراجع الحالة يدويًا، تصبح القيمة `{ overridden_at, automatic_status }`، حيث يمثل `automatic_status` النتيجة التي تخلص إليها الفحوصات. استخدمه للتمييز بين الموافقة اليدوية والموافقة التلقائية. |
| `decision_trace` | `status`، و`decided_by` (`manual` أو `automatic` أو `investigator`؛ وتكون `null` ما دامت الجلسة غير محسومة)، و`decided_at`، و`automatic_status`، و`terminal_node_id`، و`actor` (المراجِع المسؤول عن القرار اليدوي)، و`warning_counts` لكل `log_type` إضافةً إلى `total`، و`status_warnings`، وهي التحذيرات التي حددت الحالة `Declined` أو `In Review`. |
| `linked_records` | ملخص لما يرتبط به التحقق من سجلات أخرى: `same_face` (أشخاص آخرون تطابقت وجوههم، وأقرب تطابق)، و`earlier_verifications` (عدد عمليات التحقق للشخص نفسه)، و`networks`. تكون `null` عندما لا يوجد ما يُعرض. |
| `assignee`، و`waiting_since`، و`sla_due_at` | المراجِع في Console المسؤول عن الجلسة، ومتى بدأت الجلسة في الانتظار، وموعد استحقاق المراجعة. تكون `waiting_since` و`sla_due_at` بقيمة `null` ما لم تكن الجلسة `In Review` وحدّد تطبيقك موعدًا نهائيًا للمراجعة. |
| `database_validation_not_performed_reason` | `{ code, message }` يشرح سبب عدم إنتاج أي نتيجة للتحقق من قواعد البيانات المُعَدّ. وهو يفرّق بين «وافق السجل» و«لم يُنفَّذ أي فحص» عندما تكون `database_validations` بقيمة `null`. |
| `shared_from_session`، و`shared_from_session_number` | الجلسة المصدر عند استيراد هذه الجلسة باستخدام `POST /v3/session/import-shared/`، وتكون `null` في غير ذلك. |
| `sandbox_scenario` | السيناريو الذي أُنشئت به جلسة البيئة التجريبية. |
| `full_session_video`، و`full_session_video_recorded_at` | رابط تنتهي صلاحيته لتسجيل الجلسة وموعد تسجيله. يُعادان فقط عندما تسجّل مؤسستك فيديو الجلسة الكامل. |## الاحتفاظ بالبيانات البيومتريةيكون `biometric_retention` موجودًا دائمًا. `deletes_at` هو التاريخ الذي تُحذف فيه البيانات البيومترية الحية للجلسة، و`jurisdictions` يسرد الولايات الأمريكية التي تضع قواعدها البيومترية حدًا للحذف يخص الشخص (`US` عندما تكون الولاية غير معروفة). تكون `deletes_at` بقيمة `null` عندما لا ينطبق أي تاريخ بعد.## التحقق من الموقععندما يتضمن سير العمل خطوة [التحقق من الموقع](https://docs.didit.me/ar/core-technology/location-verification/overview.md)، يحمل القرار مصفوفتين. يحتوي `geolocation_checks[]` على عنصر واحد لكل خطوة: محاولتها المقبولة، مع النتيجة والإحداثيات ودقتها، والفحوصات مقارنةً بموقع IP والعنوان المسجّل، والـ `warnings` الخاصة بالخطوة. يسرد `geolocation_attempts[]` كل محاولة لكل خطوة، من الأقدم إلى الأحدث، مع وقت استلام كل منها. تُعاد المصفوفتان بقيمة `null` في سير العمل الذي لا يتضمن هذه الخطوة. ترد كل الحقول والنتائج في [تقرير التحقق من الموقع](https://docs.didit.me/ar/core-technology/location-verification/report-location-verification.md).## أحداث توجيه سير العمليضيف `?include=events` الخط الزمني لأحداث الجلسة. إلى جانب تغييرات الخطوات والحالة، يترك سير العمل الذي يمر عبر عقد الفروع حدثاً واحداً لكل قرار توجيه، فيتمكن التكامل (أو الخط الزمني في Console) من تفسير سبب انتهاء الجلسة عند نتيجة معينة دون إعادة تشغيل مخطط سير العمل يدوياً:| `event_type` | متى يُكتب | `details` |
| - | - | - |
| `WORKFLOW_BRANCH_EVALUATED` | تُقيَّم عقدة تحتوي على شروط فرع أثناء تقدم الجلسة (عقد الفروع، وعقد الميزات أو webhook التي تحتوي على فروع) | `node_id`, `node_label`, `node_type`, `matched_branch_id` (الفرع المطابق، أو `null` إذا لم يطابق أي فرع), `fallback` (`true` عندما لا يطابق أي شرط وأُخذت الحافة الافتراضية للعقدة), `next_node_id`, `next_node_label` |
| `WORKFLOW_STATUS_NODE_REACHED` | تم تنفيذ عقدة حالة | `node_id`, `node_label`, `session_status` (القيمة المُعدّة، بما فيها `Determine`), `resolved_session_status` (القيمة التي حُسمت إليها), `feature_statuses` (`[{target, status}]`) |يحمل الحدثان `sent_at` بالمللي ثانية مثل أي حدث آخر، ولا يحملان `component` أو `feature_step` أو `step`، لأنهما صادران عن محرك سير العمل وليس عن جهاز المستخدم. يُحسب الفرع «else» (وهو فرع بلا شروط) فرعاً مطابقاً؛ ولا يكون `fallback` مساوياً لـ `true` إلا عندما لا يطابق أي شيء. لا تتخذ العقد ذات الحافة الصادرة الواحدة أي قرار ولا تترك أي حدث.يعرض الشكل نفسه أيضاً `workflow_terminal_node_id`: وهو `node_id` لآخر عقدة حالة في سير العمل سُجّلت وضبطت حالة الجلسة، أو `null` إذا لم يُسجَّل معرّف عقدة من هذا النوع. وهذا سجل تاريخي لمصدر النتيجة في سير العمل. لا تمسح الموافقات اليدوية والرفض وإعادة الإرسال هذا الحقل؛ بل تستبدله عقدة حالة لاحقة في سير العمل. فمثلاً، إذا أرسل سير العمل الجلسة إلى عقدة *قيد المراجعة* ثم وافق عليها مراجِع لاحقاً، تكون `status` الحالية هي `Approved` بينما يظل `workflow_terminal_node_id` يشير إلى عقدة *قيد المراجعة*. وقد يبقى هذا الحقل مملوءاً أيضاً أثناء تنفيذ إعادة الإرسال. اقرأ `status` الحالية والخطين الزمنيين للأحداث و`activity_reviews` للتمييز بين نتائج سير العمل والقرارات اليدوية اللاحقة.```json theme={null}
{
  "event_type": "WORKFLOW_BRANCH_EVALUATED",
  "sent_at": 1789336414007,
  "details": {
    "node_id": "branch-d57da8aa",
    "node_label": "Credential required?",
    "node_type": "branch",
    "matched_branch_id": null,
    "fallback": true,
    "next_node_id": "status-6ba0bd0d",
    "next_node_label": "In Review"
  }
}
```## الإرسالات السابقة (`?include=resubmissions`)تعيد إعادة الإرسال المستخدم إلى الخطوات التي تختارها، وتحتفظ بما أعادته تلك الخطوات من قبل.
يضيف `?include=resubmissions` مصفوفة `resubmissions` مرتبة من الأقدم إلى الأحدث، تحتوي على مدخل واحد لكل طلب إعادة إرسال.
يحمل كل مدخل النتائج التي استبدلها ذلك الطلب، فيمكنك دائماً قراءة ما أرسله المستخدم سابقاً.
يعمل ذلك مع جلسات المستخدمين (KYC) وجلسات الشركات (KYB)، ويمكنك دمجه مع الأحداث (`?include=events,resubmissions`).
بدون هذا المعامل تبقى الاستجابة دون تغيير.| الحقل | الوصف |
| - | - |
| `number` | 1 لأول إعادة إرسال في الجلسة، و2 للثانية، وهكذا. |
| `created_at` | وقت طلب إعادة الإرسال. |
| `previous_status` | حالة الجلسة قبل الطلب مباشرة. |
| `nodes` | خطوات سير العمل المعادة إلى المستخدم (`[{node_id, feature}]`). |
| `reasons` | السبب المذكور لكل خطوة، مفهرساً بـ `node_id`، أو `null`. |
| `requested_by` | من طلبها (`name` و`email` و`type`)، أو `null`. |
| `results` | النتائج التي أعادتها تلك الخطوات قبل الطلب، بالمفاتيح نفسها وبالبنية ذاتها الموجودة في النتائج الحالية (`id_verifications`، `nfc_verifications`، `liveness_checks`، `face_matches`، `poa_verifications`، `phone_verifications`، `email_verifications`، `aml_screenings`، `ip_analyses`، `database_validations`، `questionnaire_responses`، `document_ai_documents`، `geolocation_checks`؛ ولجلسات الشركات أيضاً `document_verifications`). لا تظهر إلا مفاتيح الخطوات التي أُعيدت إلى المستخدم. |تصف النتائج الحالية (`id_verifications` وبقية المفاتيح على المستوى الأعلى) آخر إرسال دائماً. أما الخطوات التي لم تُعَد إلى المستخدم فتحتفظ بنتيجة واحدة هناك.```json theme={null}
{
  "status": "In Review",
  "id_verifications": [{ "node_id": "feature_ocr", "status": "Approved" }],
  "resubmissions": [
    {
      "number": 1,
      "created_at": "2026-10-01T08:31:04.512Z",
      "previous_status": "In Review",
      "nodes": [{ "node_id": "feature_ocr", "feature": "OCR" }],
      "reasons": { "feature_ocr": "Passport photo too blurry" },
      "requested_by": { "name": "<reviewer name>", "email": "<reviewer email>", "type": "USER" },
      "results": {
        "id_verifications": [
          {
            "node_id": "feature_ocr",
            "status": "Declined",
            "warnings": [{ "risk": "IMAGE_TOO_BLURRY", "log_type": "error" }]
          }
        ]
      }
    }
  ]
}
```عند حذف الجلسة تُحذف نتائج كل الإرسالات المرتبطة بها.## طرق التحقق من الهويةيحدد كل عنصر في `id_verifications[]` أيٌّ من [طرق التحقق من الهوية](https://docs.didit.me/ar/core-technology/id-verification/verification-methods.md) الثلاث أنتجه، فتتمكن من التمييز بين قراءة مستند وبين البحث في السجل أو تسجيل الدخول بالمحفظة، دون التخمين من الحقول المملوءة اتفاقاً:| الحقل | القيمة |
| - | - |
| `verification_method` | `document` أو `id_lookup` أو `wallet` |
| `assurance` | `documentary` أو `data_match` أو `cryptographic` |
| `wallet_provider` | معرّف المحفظة في الكتالوج عندما تنتجه محفظة، وإلا فـ `null` |
| `id_lookup` | أدلة السجل: المصدر، والمحاولات، والمقارنة حقلاً بحقل، وصورة السجل، أو `null` |
| `wallet_verification` | أدلة بيانات الاعتماد: المزوّد، وجهة الإصدار، ومستوى الضمان، وصلاحية التوقيع، والسمات المشتركة، أو `null` |
| `fallback_from` | سبب عدم إنهاء خطوة الهوية بطريقة غير المستند: الطريقة، والسبب، وما إذا عاد المستخدم إلى التقاط المستند أو تم رفضه |تُبلغ جلسة المستند عن `document` و`documentary` وتترك الباقي `null`، فلا تحتاج التكاملات القائمة إلى أي تغيير. أنواع الحقول تفصيلاً موجودة في [نماذج البيانات](https://docs.didit.me/ar/reference/data-models.md#التحقق-من-الهوية).## الموافقة البيومتريةتتضمن قرارات التحقق من المستخدمين كائن `biometric_consent`: يبيّن هل تطلبت الجلسة موافقة بيومترية صريحة، و`trigger` الذي استوجبها، وحالة `status` الإجابة وأدلتها. وهناك قيمتان تدلانك على أن الموافقة لم تُجمع:| الحقل | القيمة | المعنى |
| - | - | - |
| `status` + `reason` | `pending` + `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` | التقط SDK أصلي إصداره أقل من 4.10.0، أو لم يُبلغ عن إصداره، وجهاً دون خطوة الموافقة. عملت الجلسة كما كانت من قبل. |
| `status` + `reason` | `declined` + `BIOMETRIC_CONSENT_DECLINED` | تم تسجيل رفض. الجلسة `Declined` وقد حُذفت بيانات الوجه الخاصة بها. لا تقدم أي شاشة من Didit خيار الرفض حالياً. |متى تظهر الخطوة وما يعنيه كل قيمة موجود في [الموافقة البيومترية](https://docs.didit.me/ar/getting-started/biometric-consent.md)؛ وكل الحقول موجودة في [نماذج البيانات](https://docs.didit.me/ar/reference/data-models.md#الموافقة-البيومترية).## التحقق المصرفيعندما يتضمن سير العمل خطوة [التحقق المصرفي](https://docs.didit.me/ar/core-technology/bank-verification/verification-methods.md)، يحمل القرار `bank_verifications[]` لنوعي الجلسة كليهما: عنصر واحد لكل خطوة، وتكون القيمة `null` حتى تُنتج الخطوة عنصرًا.| الحقل | ما الذي يُقرأ |
| - | - |
| `status` | حكم الخطوة: `Approved` أو `In Review` أو `Declined` أو `Not Finished` أو `Expired`. |
| `method` | طريقة التحقق من الحساب: `open_banking` (تسجيل الدخول إلى المصرف)، أو `account_lookup` (فحص الحساب)، أو `microdeposits` أو `statement`. تكون القيمة `null` حتى يُقيَّم حساب، وتكون `none` عندما يتابع الشخص دون مصرف قبل تقييم أي محاولة. |
| `continued_without_bank`, `continuation` | هل اختار الشخص **Continue without your bank**، وما سببه: `continuation.reason` هو `no_route` أو `institution_unsupported` أو `attempts_exhausted` أو `person_choice`. وفي حالة `institution_unsupported`، يذكر `continuation.institution_name` المصرف الذي تعذّر على الشخص استخدامه. |
| `ownership` | مقارنة صاحب الحساب بالهوية المتحقق منها: `result` هو `match` أو `partial_match` (تطابق تقريبي) أو `no_match` أو `not_verifiable` أو `unknown`. |
| `account` | الحساب المتحقق منه، مع إخفاء جزء من بياناته. |
| `financial_data` | الأرصدة والمعاملات والدخل، ولا تُقرأ إلا عبر تسجيل الدخول إلى المصرف. يسرد `not_collected` البيانات التي طلبتها الخطوة ولم تجمعها الطريقة، مثلًا بعد فحص الحساب. |
| `connection` | أحدث محاولة: حالتها، والمصرف، والمحاولات المستهلكة، و`reason_code`. |اقرأ `method` وليس `ownership.method` للتمييز بين تسجيل الدخول إلى المصرف وفحص الحساب، فـ`ownership.method` هو مقارنة الأسماء التي أنتجت الدرجة. تتوفر كل الحقول في المخطط `BankVerificationResult` ضمن استجابة هذا endpoint.## التوقيع الإلكترونيعندما يتضمن سير العمل خطوة [التوقيع الإلكتروني](https://docs.didit.me/ar/core-technology/electronic-signature/overview.md)، يحمل القرار `signatures[]` لنوعي الجلسة كليهما. يحتوي على عنصر واحد لكل موقّع: عنصر واحد للتحقق من المستخدمين، وعنصر لكل شخص رئيسي يوقّع في التحقق من الشركات (KYB). لا يعيد سير العمل الذي لا يتضمن الخطوة هذا المفتاح أبدًا.| الحقل | ما الذي يُقرأ |
| - | - |
| `status` | `signed` بعد توقيع المستندات. أي قيمة أخرى تعني أنه لا يوجد توقيع بعد. |
| `verdict` | `Approved` أو `In Review` أو `Declined` أو `Not Finished`، وتحدده قواعد الخطوة. |
| `signer`, `identity_used` | من وقّع، والهوية المتحقق منها التي يستند إليها. |
| `confirmation`, `certificate`, `timestamp` | تأكيد الرمز لمرة واحدة والأدلة التشفيرية. |
| `documents[]` | تجزئات كل مستند، وحالته، ومساره `signed_file`، و`fields[]` مع قيمها. |
| `evidence_file` | مسار ملف PDF الخاص بأدلة الموقّع. |نزّل الملفات من مساراتها باستخدام مفتاح API الخاص بك. راجع [تقرير التوقيع الإلكتروني](https://docs.didit.me/ar/core-technology/electronic-signature/report-electronic-signature.md) لمعرفة كل الحقول.## الأخطاء| الحالة | السبب |
| - | - |
| `404` | لا توجد جلسة بهذا `session_id` لهذا التطبيق (يُتحقق من نوعي الجلسة كليهما). |
| `403` | صلاحية `read:sessions` مفقودة. |
| `401` | مفتاح API غير صالح. |## ذات صلة- [نظرة عامة على الجلسات](https://docs.didit.me/ar/sessions-api/overview.md): تمييز النوع ومصفوفة الميزات.
- [مخطط استجابة KYB](https://docs.didit.me/ar/business-verification/response-schema.md): مرجع حقل بحقل لقرار الشركة.
- [حالات التحقق](https://docs.didit.me/ar/integration/verification-statuses.md): آلة الحالات المشتركة بين النوعين.
- [webhook](https://docs.didit.me/ar/integration/webhooks.md): اشترك في `status.updated` لجلسات التحقق من المستخدمين والتحقق من الشركات (KYB) كليهما (صفِّ حسب `session_kind`).
- [طرق التحقق من الهوية](https://docs.didit.me/ar/core-technology/id-verification/verification-methods.md): التقاط المستند، والبحث دون مستندات، ومحافظ الهوية الرقمية، وما يضعه كل منها في الجلسة.
- [الموافقة على القياسات الحيوية](https://docs.didit.me/ar/getting-started/biometric-consent.md): متى يطلب التدفق موافقة صريحة على القياسات الحيوية، وكائن `biometric_consent`.
- [تقرير التوقيع الإلكتروني](https://docs.didit.me/ar/core-technology/electronic-signature/report-electronic-signature.md): `signatures[]` والمستندات الموقّعة بصيغة PDF والأدلة.
- [طرق التحقق المصرفي](https://docs.didit.me/ar/core-technology/bank-verification/verification-methods.md): `bank_verifications[]` و`method` الخاص به.
- [عندما لا يستطيع الشخص التحقق من مصرفه](https://docs.didit.me/ar/core-technology/bank-verification/fallbacks.md): `continued_without_bank` و`continuation` ونتيجة كل سبب.


## OpenAPI

````yaml ar/openapi-25.json GET /v3/session/{sessionId}/decision/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API التحقق من الهوية. قم بالمصادقة باستخدام الرأس x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/decision/:
    get:
      tags:
        - Sessions
      summary: استرداد القرار الكامل لجلسة تحقق
      description: >-
        استرجع تقرير القرار الكامل لجلسة تحقق — `status` المجمّع للجلسة بالإضافة
        إلى تقرير واحد لكل ميزة تحقق نفّذها سير العمل. هذا هو endpoint القراءة
        المعتمد لكل من جلسات التحقق من المستخدمين (KYC) والتحقق من الشركات
        (KYB): يخدم المسار نفسه كليهما، ويخبرك محدّد `session_kind` ذو المستوى
        الأعلى بالشكل الذي استلمته (`"user"` أو `"business"`).


        **كل تقرير ميزة عبارة عن مصفوفة بصيغة الجمع.** مسارات عمل V3 عبارة عن
        مخططات يمكنها تشغيل الميزة نفسها أكثر من مرة، لذا فإن كل كتلة
        (`id_verifications`، `nfc_verifications`، `liveness_checks`،
        `face_matches`، `poa_verifications`، `document_ai_documents`،
        `phone_verifications`، `email_verifications`، `aml_screenings`،
        `ip_analyses`، `database_validations`، `questionnaire_responses`) هي
        مصفوفة JSON يحمل كل عنصر فيها `node_id` يحدد عقدة مخطط سير العمل التي
        أنتجته. اقرأ NFC كـ `response.nfc_verifications[0]` — ولا تقرأه أبداً
        كحقل مفرد `nfc`. تكون الكتلة `null` حتى يقوم سير العمل بتشغيل تلك الميزة
        مرة واحدة على الأقل؛ والميزات التي لا يتضمنها سير العمل لا تظهر أبداً مع
        بيانات. توجد نتائج التوقيع الإلكتروني في `signatures`، والتي لا تتواجد
        إلا عندما يتضمن سير العمل خطوة التوقيع الإلكتروني.


        **متى يتم الاستدعاء.** النمط الموصى به مدفوع بالأحداث: انتظر webhook لـ
        `status.updated` الذي يتم إطلاقه عندما تصل الجلسة إلى قرار (`Approved`،
        `Declined`، `In Review`)، ثم استدعِ هذا الـ endpoint مرة واحدة لجلب
        التقرير الكامل. يعمل الاستقصاء الدوري أيضاً — حيث يمكن استدعاء الـ
        endpoint في أي نقطة من دورة حياة الجلسة ويُرجع البيانات المنتجة حتى الآن
        — ولكن نمط انتظار الـ webhook ثم الجلب أقل تكلفة وأسرع. عناوين URL
        للوسائط في الاستجابة (صور المستندات، مقاطع الفيديو، ملفات PDF) هي روابط
        موقّعة مسبقاً قصيرة الأجل: اجلبها فوراً أو أعد طلب القرار للحصول على
        روابط جديدة، ولا تقم بتخزينها كمراجع طويلة الأجل.


        **الحالات.** الـ `status` ذو المستوى الأعلى هو حالة دورة حياة الجلسة
        (`Not Started`، `In Progress`، `Awaiting User`، `In Review`، `Approved`،
        `Declined`، `Resubmitted`، `Expired`، `Kyc Expired`، `Abandoned`).
        بالإضافة إلى ذلك، يحمل كل عنصر ميزة الـ `status` الخاص به على مستوى
        الميزة (`Not Finished`، `Approved`، `Declined`، `In Review`، ...). يمكن
        أن تكون الجلسة `Approved` بشكل عام بينما تكون ميزة فردية `In Review`،
        اعتماداً على قواعد اتخاذ القرار في سير العمل.


        **المصادقة ومجال الرؤية.** قم بالمصادقة باستخدام مفتاح API الخاص
        بالتطبيق في الرأس `x-api-key` (يعمل أيضاً token بصيغة Bearer لمستخدم
        لوحة التحكم مزود بإذن `read:sessions`). الجلسات المملوكة للتطبيق الذي
        تمّت مصادقته هي فقط المرئية. إذا كان سير العمل الخاص بك يقيّد سمات
        الاستجابة، فسيتم إرجاع الحقول غير المسموح بها داخل عناصر الميزات كـ
        `null` بينما يتم الاحتفاظ بـ `status` و `warnings` و `node_id` دائماً.


        **حدود المعدل.** تقتصر طلبات GET على 600 طلب في الدقيقة لكل مفتاح API.
        يؤدي تجاوز الحد إلى إرجاع `429` مع الرأسين `Retry-After` و
        `X-RateLimit-*`.
      operationId: get_v3_session_decision
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            معرّف UUID لجلسة التحقق التي تريد استرداد قرارها. هذا هو
            `session_id` الذي تم إرجاعه بواسطة `POST /v3/session/`. يعمل نفس
            المسار مع كل من جلسات التحقق من المستخدمين (KYC) والتحقق من الشركات
            (KYB) — يطابق الخادم المعرّف عبر كلا نوعي الجلسات.


            **يجب أن يكون UUID صالحًا.** يطابق المسار قيم UUID صالحة البنية فقط،
            لذا يتم رفض أي قيمة غير صالحة البنية بواسطة موجه URL قبل تشغيل أي
            كود برمجي للتطبيق وتكون الاستجابة صفحة **HTML** برمز `404` بدلاً من
            تنسيق JSON لـ `{"detail": ...}` الموضح أدناه. تحقق من صحة تنسيق UUID
            من جانب العميل حتى تتمكن من التمييز بين خطأ في الإدخال وبين خطأ
            `404` حقيقي ناتج عن جلسة غير موجودة.
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: include
          in: query
          required: false
          description: >-
            قائمة مفصولة بفواصل للأقسام الإضافية في payload. القيم المدعومة:
            `events` و`resubmissions`، منفردة أو معاً (`events,resubmissions`).
            عند تمرير `include=events`، تتضمن الاستجابة بشكل إضافي المخطط الزمني
            لأحداث الجلسة (`events`، بما في ذلك أحداث التوجيه
            `WORKFLOW_BRANCH_EVALUATED` / `WORKFLOW_STATUS_NODE_REACHED` الموضحة
            في صفحة استرداد الجلسة)، وسجل النشاط الكامل (`activity_reviews`)،
            وعلامات قائمة الحظر (`blocklisted`)، وتفصيل التكلفة لكل جلسة
            (`cost_breakdown`)، والبيانات الوصفية لسير العمل (`workflow_type`
            و`workflow_version` و`workflow_version_id`
            و`workflow_terminal_node_id` - آخر عقدة حالة مسجلة لسير العمل قامت
            بتعيين حالة الجلسة، أو `null` إذا لم يتم تسجيل أي منها؛ وهو سجل
            تاريخي للمصدر لا يتم مسحه بالموافقات اليدوية أو حالات الرفض أو
            عمليات إعادة الإرسال، ويُستبدل بعقدة حالة لاحقة في سير العمل)،
            والبيانات الوصفية للجلسة (`api_service` — سلسلة نصية أو `null`، يتم
            تعيينها فقط لجلسات API المستقلة؛ و`session_type` — `API` أو `HOSTED`
            أو `MIGRATED`؛ و`has_device_nfc_support` — قيمة منطقية). يتغير حقلان
            مقارنة بالشكل الأساسي: يتم **حذف** مميز `session_kind` ذي المستوى
            الأعلى (شكل الأحداث متاح فقط لجلسات المستخدمين)، وتتحول مصفوفة
            `features` من سلاسل نصية عادية إلى كائنات بتنسيق `{feature,
            node_id}` — حيث يُبلّغ عن ميزة البريد الإلكتروني كـ `EMAIL` بدلاً من
            `EMAIL_VERIFICATION`. يُستخدم هذا الشكل الموسع بشكل أساسي بواسطة
            Didit Console؛ ويجب على معظم عمليات تكامل API حذف هذا المعامل.
            **قيود KYB:** ينطبق `include=events` فقط على جلسات المستخدمين (KYC).
            ترجع جلسات الشركات (`session_kind = "business"`) دائماً شكل قرار
            الشركات القياسي — ولا يتم إرجاع `events` و`activity_reviews`
            و`blocklisted` و`cost_breakdown` والبيانات الوصفية الإضافية لـ
            `workflow_*`/الجلسة لجلسات الشركات مطلقاً، وتظل مصفوفة `features`
            الخاصة بها مصفوفة سلاسل نصية عادية. مع `include=resubmissions`
            (جلسات المستخدمين والشركات على حد سواء)، تحتوي الاستجابة أيضاً على
            `resubmissions`: إدخال واحد لكل طلب إعادة إرسال، الأقدم أولاً، يحتوي
            كل منها على `number` و`created_at` و`previous_status` و`nodes`
            و`reasons` و`requested_by` و`results` (ما أرجعته الخطوات المعاد
            إرسالها قبل الطلب، تحت نفس المفاتيح وبنفس شكل النتائج الحالية). يحمل
            كل عنصر في `cost_breakdown` الحقول `usage_type` و`price` و`details`
            و`created_at`: وتتم فوترة الخطوة المعاد إرسالها والتي يتم تشغيلها
            مرة أخرى كعنصر جديد.
          schema:
            type: string
            enum:
              - events
              - resubmissions
              - events,resubmissions
            example: events
      responses:
        '200':
          description: >-
            تقرير القرار الكامل. يميّز `session_kind` بين الشكلين: تحمل جلسات
            `user` مصفوفات ميزات KYC الموضحة أدناه؛ بينما تحمل جلسات `business`
            كلاً من `registry_checks` و`document_verifications`
            و`key_people_checks` إلى جانب المصفوفات المشتركة. تكون مصفوفات
            الميزات `null` حتى يُشغّل سير العمل تلك الميزة؛ روابط الوسائط هي
            روابط مؤقتة وموقعة مسبقاً.
          content:
            application/json:
              examples:
                Example:
                  summary: مثال كامل
                  value:
                    session_id: 11111111-2222-3333-4444-555555555555
                    session_kind: user
                    session_number: 43762
                    session_url: >-
                      https://verify.didit.me/session/11111111-2222-3333-4444-555555555555
                    status: In Review
                    environment: live
                    workflow_id: 11111111-2222-3333-4444-555555555555
                    features:
                      - ID_VERIFICATION
                      - NFC
                      - LIVENESS
                      - FACE_MATCH
                      - POA
                      - PHONE
                      - DATABASE_VALIDATION
                      - AML
                      - IP_ANALYSIS
                    vendor_data: 11111111-1111-1111-1111-111111111111
                    metadata:
                      user_type: premium
                      account_id: ABC123
                    expected_details:
                      first_name: Carmen
                      last_name: Española Española
                    contact_details:
                      email: carmen@example.com
                      email_lang: es
                      send_notification_emails: false
                      phone: null
                    callback: https://verify.didit.me/
                    id_verifications:
                      - node_id: feature_ocr_1
                        status: Approved
                        document_type: Identity Card
                        document_subtype: ID_CARD_GENERIC
                        document_number: CAA000000
                        personal_number: 99999999R
                        portrait_image: https://<media-host>/portrait.jpg
                        front_image: https://<media-host>/front.jpg
                        front_video: https://<media-host>/front.mp4
                        back_image: https://<media-host>/back.jpg
                        back_video: https://<media-host>/back.mp4
                        full_front_image: https://<media-host>/full_front.jpg
                        full_back_image: https://<media-host>/full_back.jpg
                        front_image_camera_front: https://<media-host>/front_camera_front.jpg
                        back_image_camera_front: https://<media-host>/back_camera_front.jpg
                        date_of_birth: '1980-01-01'
                        age: 45
                        expiration_date: '2031-06-02'
                        date_of_issue: '2021-06-02'
                        issuing_state: ESP
                        issuing_state_name: Spain
                        first_name: Carmen
                        last_name: Española Española
                        full_name: Carmen Española Española
                        gender: F
                        address: Avda de Madrid 34, Madrid, Madrid
                        formatted_address: Avda de Madrid 34, Madrid, Madrid 28822, Spain
                        place_of_birth: Madrid
                        marital_status: Single
                        nationality: ESP
                        extra_fields:
                          dl_categories: []
                          blood_group: null
                        mrz:
                          surname: ESPANOLA ESPANOLA
                          name: CARMEN
                          country: ESP
                          nationality: ESP
                          birth_date: '800101'
                          expiry_date: '310602'
                          sex: F
                          document_type: ID
                          document_number: CAA000000
                          optional_data: 99999999R
                          optional_data_2: ''
                          birth_date_hash: '4'
                          expiry_date_hash: '8'
                          document_number_hash: '4'
                          final_hash: '1'
                          personal_number: 99999999R
                          warnings: []
                          errors: []
                          mrz_type: TD1
                          mrz_string: |-
                            IDESPCAA000000499999999R<<<<<<
                            8001014F3106028ESP<<<<<<<<<<<1
                            ESPANOLA<ESPANOLA<<CARMEN<<<<<
                          mrz_key: CAA000000480010143106028
                        parsed_address:
                          city: Madrid
                          label: Spain ID Card Address
                          region: Madrid
                          country: ES
                          category: Residential
                          street_1: Avda de Madrid 34
                          street_2: null
                          is_verified: true
                          postal_code: '28822'
                          raw_results:
                            types:
                              - street_address
                            geometry:
                              location:
                                lat: 37.4222804
                                lng: -122.0843428
                              viewport:
                                northeast:
                                  lat: 37.4237349802915
                                  lng: -122.083183169709
                                southwest:
                                  lat: 37.4210370197085
                                  lng: -122.085881130292
                              location_type: ROOFTOP
                            place_id: ChIJN1t_tDeuEmsRUsoyG83frY4
                            formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                            navigation_points:
                              - location:
                                  latitude: 37.4222804
                                  longitude: -122.0843428
                            address_components:
                              - types:
                                  - street_number
                                long_name: '34'
                                short_name: '34'
                              - types:
                                  - route
                                long_name: Avda de Madrid
                                short_name: Avda de Madrid
                              - types:
                                  - locality
                                  - political
                                long_name: Madrid
                                short_name: Madrid
                              - types:
                                  - country
                                  - political
                                long_name: Spain
                                short_name: ES
                              - types:
                                  - postal_code
                                long_name: '28822'
                                short_name: '28822'
                          address_type: Avda
                          document_location:
                            latitude: 37.4222804
                            longitude: -122.0843428
                          formatted_address: Avda de Madrid 34, 28822 Madrid, Spain
                        front_image_camera_front_face_match_score: 95.5
                        back_image_camera_front_face_match_score: 93.2
                        document_selfie_face_matches:
                          - session_id: 3f0c9a52-7b1e-4d68-a2c4-5e9d8b7f1a20
                            session_number: 1180
                            similarity_percentage: 97.4
                            vendor_data: user_ref_001
                            vendor_user_id: null
                            biometric_template_id: null
                            verification_date: '2026-09-02T09:15:00Z'
                            user_details:
                              full_name: Jane Doe
                            match_image_url: https://<media-host>/match_face.jpg
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                        front_image_quality_score:
                          focus_score: 85.3
                          brightness_score: 92.1
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 88.7
                        back_image_quality_score:
                          focus_score: 79.1
                          brightness_score: 90.5
                          brightness_issue: ok
                          is_document_fully_visible: true
                          resolution_score: 72.4
                          overall_score: 85.2
                        extra_files:
                          - https://<media-host>/extra_id_verification.jpg
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            front_image_url: https://<media-host>/document_front.jpg
                          - session_id: b2c8e4d1-6a3f-4e7b-95c0-1d8f2a6b4c9e
                            session_number: 1235
                            vendor_data: null
                            verification_date: '2024-05-20T14:45:00Z'
                            user_details:
                              name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Declined
                            is_blocklisted: true
                            api_service: ID_VERIFICATION
                            front_image_url: https://<media-host>/document_front_2.jpg
                        warnings:
                          - feature: ID_VERIFICATION
                            risk: QR_NOT_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: QR not detected
                            long_description: >-
                              The system couldn't find or read the QR code on
                              the document, which is necessary for document
                              verification. This could be due to poor image
                              quality or an unsupported document type.
                            node_id: feature_ocr_1
                        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
                      - node_id: feature_ocr_2
                        status: Approved
                        issuing_state: ZAF
                        issuing_state_name: South Africa
                        first_name: Thabo
                        last_name: Mokoena
                        full_name: Thabo Mokoena
                        date_of_birth: '1991-06-15'
                        personal_number: '9106155043088'
                        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
                          face_match_score: 96.4
                          source_errors: []
                        wallet_verification: null
                        warnings: []
                      - node_id: feature_ocr_3
                        status: Approved
                        issuing_state: DNK
                        issuing_state_name: Denmark
                        first_name: Freja
                        last_name: Nielsen
                        full_name: Freja Nielsen
                        date_of_birth: '1988-03-02'
                        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_verifications:
                      - node_id: feature_nfc_1
                        status: In Review
                        is_nfc_skipped: false
                        skip_reason: null
                        chip_protocol: icao
                        jpki: null
                        portrait_image: https://<media-host>/portrait.jpg
                        signature_image: https://<media-host>/signature.jpg
                        chip_data:
                          document_type: ID
                          issuing_country: ESP
                          document_number: '123456789'
                          expiration_date: '2030-01-01'
                          first_name: John
                          last_name: Smith
                          birth_date: '1990-05-15'
                          gender: M
                          nationality: ESP
                          address: CALLE MAYOR 123 4B, MADRID, MADRID
                          place_of_birth: MADRID, MADRID
                        authenticity:
                          sod_integrity: true
                          dg_integrity: true
                        certificate_summary:
                          issuer: >-
                            Common Name: CSCA SPAIN, Serial Number: 3,
                            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_after: '2031-02-18 10:21:11'
                          not_valid_before: '2020-11-18 10:21:11'
                        warnings:
                          - feature: NFC
                            risk: DATA_INCONSISTENT
                            additional_data: null
                            log_type: warning
                            short_description: OCR and NFC mrz code extracted are not the same
                            long_description: >-
                              The Optical Character Recognition (OCR) data and
                              the NFC chip data don't match, indicating
                              potential document tampering or data
                              inconsistency.
                            node_id: feature_nfc_1
                    liveness_checks:
                      - node_id: feature_liveness_1
                        status: Approved
                        method: ACTIVE_3D
                        score: 89.92
                        reference_image: https://<media-host>/reference.jpg
                        video_url: https://<media-host>/video.mp4
                        age_estimation: 24.3
                        matches:
                          - session_id: 7d4f1f60-9c2e-4b8a-8f3d-2a1b5c6d7e8f
                            session_number: 1234
                            vendor_data: user_ref_001
                            verification_date: '2024-06-15T10:30:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: ID
                              document_number: CLM148418
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: null
                            source: session
                            match_image_url: https://<media-host>/face_match.jpg
                            similarity_percentage: 98.5
                          - session_id: 3e9a7c21-5b48-4f0e-9c6a-8d2f4b1e0a35
                            session_number: 1100
                            vendor_data: customer_xyz
                            verification_date: '2024-04-10T09:15:00Z'
                            user_details:
                              full_name: John Smith
                              document_type: P
                              document_number: DZ8375806
                            status: Approved
                            is_blocklisted: false
                            is_allowlisted: false
                            api_service: PASSIVE_LIVENESS
                            source: session
                            match_image_url: https://<media-host>/face_match_2.jpg
                            similarity_percentage: 95.2
                        warnings:
                          - feature: LIVENESS
                            risk: LOW_LIVENESS_SCORE
                            additional_data: null
                            log_type: information
                            short_description: Low liveness score
                            long_description: >-
                              The liveness check resulted in a low score,
                              indicating potential use of non-live facial
                              representations or poor-quality biometric data.
                            node_id: feature_liveness_1
                        face_quality: null
                        face_luminance: null
                    face_matches:
                      - node_id: feature_face_match_1
                        status: In Review
                        score: 65.43
                        source_image_session_id: null
                        source_image: https://<media-host>/source-image.jpg
                        target_image: https://<media-host>/target-image.jpg
                        warnings:
                          - feature: FACEMATCH
                            risk: LOW_FACE_MATCH_SIMILARITY
                            additional_data: null
                            log_type: warning
                            short_description: Low face match similarity
                            long_description: >-
                              The facial features of the provided image don't
                              closely match the reference image, suggesting a
                              potential identity mismatch.
                            node_id: feature_face_match_1
                    phone_verifications:
                      - node_id: feature_phone_1
                        status: Approved
                        phone_number_prefix: '+34'
                        phone_number: '600600600'
                        full_number: '+34600600600'
                        country_code: ES
                        country_name: Spain
                        carrier:
                          name: Orange
                          type: mobile
                        is_disposable: false
                        is_virtual: false
                        verification_method: sms
                        verification_attempts: 1
                        verified_at: '2024-07-28T06:47:35.654321Z'
                        lifecycle:
                          - type: PHONE_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-08-24T09:12:39.580554+00:00'
                            details:
                              status: Success
                              reason: null
                              channel: sms
                              actual_channel: sms
                            fee: 0.1
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-08-24T09:12:39.662157+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: PHONE_VERIFICATION_APPROVED
                            timestamp: '2025-08-24T09:12:39.684292+00:00'
                            details: null
                            fee: 0
                        warnings: []
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            phone_number: '+34600000000'
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    email_verifications:
                      - node_id: feature_email_1
                        status: Approved
                        email: test@example.com
                        is_breached: true
                        breaches:
                          - name: TAPAirPortugal
                            domain: flytap.com
                            logo_path: https://logos.example.com/TAPAirPortugal.png
                            breach_date: '2022-08-25'
                            description: >-
                              In August 2022, the Portuguese airline <a
                              href="https://www.bleepingcomputer.com/news/security/ragnar-locker-ransomware-claims-attack-on-portugals-flag-airline/"
                              target="_blank" rel="noopener">TAP Air Portugal
                              was the target of a ransomware attack perpetrated
                              by the Ragnar Locker gang</a> who later leaked the
                              compromised data via a public dark web site. Over
                              5M unique email addresses were exposed alongside
                              other personal data including names, genders,
                              DoBs, phone numbers and physical addresses.
                            is_verified: true
                            data_classes:
                              - dates_of_birth
                              - email_addresses
                              - genders
                              - names
                              - nationalities
                              - phone_numbers
                              - physical_addresses
                              - salutations
                              - spoken_languages
                            breach_emails_count: 6083479
                        is_disposable: false
                        is_undeliverable: false
                        verification_attempts: 1
                        verified_at: '2025-09-15T17:36:19.963451Z'
                        warnings:
                          - feature: EMAIL
                            risk: BREACHED_EMAIL_DETECTED
                            additional_data: null
                            log_type: information
                            short_description: Breached email detected
                            long_description: >-
                              This email address was found in one or more known
                              data breaches.
                            node_id: feature_email_1
                        lifecycle:
                          - type: EMAIL_VERIFICATION_MESSAGE_SENT
                            timestamp: '2025-09-15T17:36:19.792684+00:00'
                            details:
                              status: Success
                              reason: null
                            fee: 0.02
                          - type: VALID_CODE_ENTERED
                            timestamp: '2025-09-15T17:36:19.963427+00:00'
                            details:
                              code_tried: '123456'
                              status: Approved
                            fee: 0
                          - type: EMAIL_VERIFICATION_DECLINED
                            timestamp: '2025-09-15T17:36:20.081471+00:00'
                            details:
                              reason: BREACHED_EMAIL_DETECTED
                            fee: 0
                        matches:
                          - session_id: null
                            session_number: null
                            vendor_data: null
                            verification_date: null
                            email: test@example.com
                            status: null
                            is_blocklisted: true
                            api_service: null
                            source: list_entry
                    poa_verifications:
                      - node_id: feature_poa_1
                        status: Declined
                        document_file: https://<media-host>/poa_document.pdf
                        issuing_state: AR
                        document_type: UTILITY_BILL
                        document_subtype: null
                        document_language: es
                        document_metadata:
                          file_size: 1000
                          content_type: application/pdf
                          creation_date: '2021-01-01'
                          modified_date: '2021-01-01'
                          overlay_manipulation: null
                          creator: null
                          producer: PDF Generator
                          software: null
                          encryption: null
                          is_signed: false
                          is_tampered: false
                          signature_info: null
                          exif_original_date: null
                          exif_digitized_date: null
                          processed_by_known_editor: false
                          has_different_creation_mod_date: true
                        issuer: Aguas del Norte
                        issue_date: '2021-02-01'
                        expiration_date: null
                        poa_address: AVDA. MONSEÑOR TAVELLA N° 3396, SALTA
                        poa_formatted_address: Av. Monseñor Tavella 3396, A4400 Salta, Argentina
                        poa_parsed_address:
                          address_type: Avenida
                          street_1: Avenida Monseñor Tavella 3396
                          street_2: null
                          city: Salta
                          region: Salta
                          country: AR
                          postal_code: A4400
                          document_location:
                            latitude: -24.8208664
                            longitude: -65.4131
                        name_on_document: Fernando De Lima
                        name_match_score_expected_details: null
                        name_match_score_id_verification: 38.5
                        expected_details_address: null
                        expected_details_formatted_address: null
                        expected_details_parsed_address: {}
                        extra_fields:
                          bank_account_number: '1234567890'
                          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: '+5491112345678'
                          additional_names: []
                        extra_files:
                          - https://<media-host>/extra_poa.pdf
                        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: >-
                              aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==
                            parsed_payload: https://aguasdelnorte.com/factura/998811
                          - 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: MDA5OTg4MTEwMDA0Mg==
                            parsed_payload: '0099881100042'
                        warnings: []
                    document_ai_documents:
                      - status: Approved
                        node_id: feature_document_ai_1
                        items:
                          - uuid: c1a2b3c4-d5e6-7f80-9a1b-2c3d4e5f6071
                            node_id: feature_document_ai_1
                            document_key: proof_of_funds
                            original_filename: bank_statement.pdf
                            file_size: 184320
                            file_url: >-
                              https://<media-host>/document_ai/proof_of_funds.pdf
                            status: Approved
                            extracted_data:
                              account_holder: John Doe
                              balance: 15230.55
                              currency: EUR
                              statement_date: '2026-05-31'
                            detected_codes:
                              - type: QR_CODE
                                page_number: 2
                                position:
                                  - - 124
                                    - 86
                                  - - 306
                                    - 86
                                  - - 306
                                    - 268
                                  - - 124
                                    - 268
                                x: 124
                                'y': 86
                                width: 182
                                height: 182
                                page_width: 1190
                                page_height: 1684
                                raw_payload: SU5WLTIwMjYtMDA0Mg==
                                parsed_payload: INV-2026-0042
                            fields:
                              - key: account_holder
                                name: Account holder
                                instruction: Extract the full name of the account holder.
                                type: text
                                required: true
                              - key: balance
                                name: Closing balance
                                instruction: Extract the closing balance amount.
                                type: number
                                required: true
                            document_metadata:
                              is_tampered: false
                            cross_check_result: null
                            created_at: '2026-06-01T12:34:56Z'
                        warnings: []
                    questionnaire_responses:
                      - node_id: feature_questionnaire_1
                        questionnaire_id: 9f7485e0-b00b-4d56-9d3e-7859b68d1213
                        title: Source of Funds
                        description: >-
                          Reply to this questionnaire to help us understand the
                          source of funds.
                        languages:
                          - en
                        default_language: en
                        is_active: true
                        is_simple_questionnaire: true
                        questionnaire_group_id: 2b6a9d40-13a8-4b1e-9a6c-3f1d2e4b5a60
                        version: 1
                        published_at: '2025-11-02T09:14:55.000000Z'
                        sections:
                          - title: null
                            description: null
                            items:
                              - uuid: 618636d9-7d5c-41ce-b8d0-1ab2a4be20db
                                value: question_1
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your primary source of funds?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Salary
                                    value: salary
                                  - label: Business Income
                                    value: business_income
                                  - label: Savings
                                    value: savings
                                  - label: Investments
                                    value: investments
                                  - label: Sale of Asset
                                    value: sale_of_asset
                                  - label: Inheritance/Gift
                                    value: inheritance_gift
                                  - label: Pension
                                    value: pension
                                  - label: Crypto Proceeds
                                    value: crypto_proceeds
                                  - label: Other
                                    value: other
                                    requires_text_input: true
                                max_files: 1
                                answer:
                                  value: salary
                                required_if: null
                                repeatable_config: null
                              - uuid: 2d16b527-72be-42e0-8e96-b164b818386c
                                value: question_2
                                element_type: LONG_TEXT
                                is_required: true
                                title: Provide details of the primary source.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: a9239b7c-fbfb-4ea7-b7e4-c835cd4016e0
                                value: question_3
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your annual income range (pre-tax)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $25,000
                                    value: <25k
                                  - label: $25,000 - $50,000
                                    value: 25k-50k
                                  - label: $50,001 - $100,000
                                    value: 50k-100k
                                  - label: $100,001 - $250,000
                                    value: 100k-250k
                                  - label: More than $250,000
                                    value: '>250k'
                                max_files: 1
                                answer:
                                  value: <25k
                                required_if: null
                                repeatable_config: null
                              - uuid: 93dede62-6d0c-4a7f-934d-42175eb94011
                                value: question_4
                                element_type: DROPDOWN
                                is_required: true
                                title: What is your approximate net worth (range)?
                                description: null
                                placeholder: null
                                choices:
                                  - label: Less than $50,000
                                    value: <50k
                                  - label: $50,000 - $250,000
                                    value: 50k-250k
                                  - label: $250,001 - $1,000,000
                                    value: 250k-1m
                                  - label: $1,000,001 - $5,000,000
                                    value: 1m-5m
                                  - label: More than $5,000,000
                                    value: '>5m'
                                max_files: 1
                                answer:
                                  value: <50k
                                required_if: null
                                repeatable_config: null
                              - uuid: 2af60d6f-6961-4692-9ee7-24b3033610a6
                                value: question_5
                                element_type: LONG_TEXT
                                is_required: true
                                title: >-
                                  For your initial deposit/funding, indicate the
                                  exact source and amount.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 0ad9d1aa-736f-46cf-947b-9e1241b53e40
                                value: question_6
                                element_type: LONG_TEXT
                                is_required: true
                                title: Breakdown of sources by percentage.
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                              - uuid: 1bf8a2a3-14ee-48a8-bb3d-175481aae4aa
                                value: question_7
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Will any funds originate from third parties?
                                  If yes, please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: e18d4dd3-b7bf-4883-ba18-d6046adbe313
                                value: question_8
                                element_type: SINGLE_CHOICE
                                is_required: true
                                title: >-
                                  Do you hold or plan to use virtual assets
                                  (e.g., crypto) to fund this account? If yes,
                                  please provide details.
                                description: null
                                placeholder: null
                                choices:
                                  - label: 'Yes'
                                    value: 'yes'
                                    requires_text_input: true
                                  - label: 'No'
                                    value: 'no'
                                max_files: 1
                                answer:
                                  text: Additional details
                                  value: 'yes'
                                required_if: null
                                repeatable_config: null
                              - uuid: a90a073d-e098-404c-bbce-5130d8b12a13
                                value: question_9
                                element_type: FILE_UPLOAD
                                is_required: true
                                title: Upload a proof of funds document
                                description: >-
                                  You can upload your three (3) most recent bank
                                  statements, three (3) most recent payslips,
                                  your most recent tax return, proof of company
                                  ownership, trading exchange statement, sale of
                                  property, or proof of inheritance.
                                placeholder: null
                                choices: null
                                max_files: 3
                                answer:
                                  files:
                                    - /media/ocr/
                                    - /media/ocr/
                                required_if: null
                                repeatable_config: null
                              - uuid: 9503b486-7cb8-4c3b-a97d-4b64926a5a47
                                value: question_10
                                element_type: LONG_TEXT
                                is_required: false
                                title: >-
                                  Would you like to add any details to help us
                                  expedite our review of the documents you
                                  submitted?
                                description: null
                                placeholder: null
                                choices: null
                                max_files: 1
                                answer:
                                  value: Test answer
                                required_if: null
                                repeatable_config: null
                        status: Approved
                    aml_screenings:
                      - node_id: feature_aml_1
                        status: In Review
                        total_hits: 1
                        entity_type: person
                        hits:
                          - id: hit_7c1e9a40b2d35f86e0a4c912
                            url: https://news.example.org/articles/sample
                            match: false
                            score: 0.73
                            target: null
                            caption: Javier Ejemplo Modelo
                            datasets:
                              - PEP
                            features: null
                            rca_name: ''
                            last_seen: '2025-06-13T00:00:00'
                            risk_view:
                              crimes:
                                score: 0
                                weightage: 20
                                risk_level: Low
                                risk_scores: {}
                              countries:
                                score: 0
                                weightage: 30
                                risk_level: Low
                                risk_scores: {}
                              categories:
                                score: 100
                                weightage: 50
                                risk_level: High
                                risk_scores:
                                  PEP: 100
                              custom_list: {}
                            first_seen: '2025-01-18T00:00:00'
                            properties:
                              name:
                                - Javier Ejemplo Modelo
                              alias:
                                - Javier Ejemplo Modelo
                                - David Azagra
                              notes:
                                - Spanish orchestra conductor
                              title: null
                              gender:
                                - male
                              height: null
                              topics: null
                              weight: null
                              address: null
                              country: null
                              website: null
                              eyeColor: null
                              keywords: null
                              lastName:
                                - Ejemplo
                                - Modelo
                              position: null
                              religion: null
                              birthDate:
                                - '1974'
                              education:
                                - Tokyo Arts and Space (2012-2012)
                                - Saint Petersburg Conservatory (-2010)
                                - Comillas Pontifical University
                              ethnicity: null
                              firstName:
                                - David
                              hairColor: null
                              weakAlias: null
                              birthPlace:
                                - Madrid
                              modifiedAt: null
                              wikidataId: null
                              citizenship: null
                              nationality: null
                            match_score: 98
                            risk_score: 73
                            review_status: Unreviewed
                            score_breakdown:
                              name_score: 95
                              name_weight: 60
                              name_weight_normalized: 70.59
                              name_contribution: 67.06
                              dob_score: 100
                              dob_weight: 25
                              dob_weight_normalized: 29.41
                              dob_contribution: 29.41
                              country_score: 0
                              country_weight: 15
                              country_weight_normalized: 0
                              country_contribution: 0
                              document_number_match_type: NEUTRAL
                              document_number_effect: No document number provided for screening
                              total_score: 98
                            pep_matches:
                              - aliases:
                                  - Javier Ejemplo Modelo
                                  - David Azagra
                                education:
                                  - Tokyo Arts and Space (2012-2012)
                                  - Saint Petersburg Conservatory (-2010)
                                  - Comillas Pontifical University
                                list_name: Wikidata
                                publisher: Wikidata
                                source_url: https://news.example.org/articles/sample
                                description: >-
                                  Wikidata is the structured data project of the
                                  Wikipedia community, providing fact-based
                                  information edited by humans and machines
                                matched_name: Javier Ejemplo Modelo
                                pep_position: ''
                                date_of_birth: '1974'
                                other_sources: []
                                place_of_birth: Madrid
                            linked_entities:
                              - name:
                                  - Antonio Ejemplo
                                active: []
                                status: []
                                details: []
                                relation: []
                            warning_matches: []
                            sanction_matches: []
                            adverse_media_details:
                              sentiment: Moderately Negative
                              entity_type: person
                              sentiment_score: -2
                              adverse_keywords:
                                fraud: 3
                                juicio: 1
                                delitos: 2
                                imputado: 1
                                impunidad: 1
                                corruption: 2
                                favoritism: 2
                                privilegio: 1
                                corrupción: 1
                                persecution: 2
                                desconfianza: 1
                                desprestigio: 1
                                fraude de ley: 2
                                manipulación: 1
                                investigación: 3
                                prevaricación: 8
                                trato de favor: 1
                                irregularidades: 2
                                crisis de confianza: 1
                                tráfico de influencias: 8
                            adverse_media_matches:
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal
                                  violations related to favoritism and influence
                                  trafficking, leading to a negative portrayal
                                  in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - imputado
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in legal issues
                                  regarding favoritism and corruption, leading
                                  to a negative portrayal in the article.
                                headline: >-
                                  La Diputación de Villaejemplo consolida la
                                  plaza a medida para el ex asesor de Moncloa
                                  amigo del "hermanito" de Ejemplo
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - prevaricación
                                  - tráfico de influencias
                                  - irregularidades
                                  - trato de favor
                                sentiment_score: -2
                                publication_date: '2025-06-10T20:46:38'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with Carlos Ficticio's corruption
                                  case, indicating his involvement in alleged
                                  influence peddling.
                                headline: España, paraíso del aforado
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - corrupción
                                  - impunidad
                                  - privilegio
                                  - desconfianza
                                  - manipulación
                                  - fraude de ley
                                sentiment_score: -2
                                publication_date: '2025-06-10T05:05:34'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  questions about his conduct and political
                                  ethics.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - juicio
                                  - fraude de ley
                                  - desprestigio
                                  - crisis de confianza
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a legal
                                  investigation regarding irregularities in his
                                  hiring, which raises serious concerns about
                                  his conduct.
                                headline: >-
                                  La jueza del 'caso Javier Ejemplo' denuncia un
                                  «fraude de ley» en el aforamiento de Ficticio
                                  (Partido Ejemplo)
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - fraud
                                  - irregularities
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T10:19:10'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is mentioned in
                                  connection with legal allegations of
                                  corruption, contributing to a negative
                                  perception.
                                headline: >-
                                  'Caso aforamiento': la letrada mayor de la
                                  Asamblea certifica a la juez que Ficticio es
                                  diputado desde antes de prometer su cargo en
                                  el Pleno
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                sentiment_score: -2
                                publication_date: '2025-06-09T08:08:30'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, raising
                                  concerns about political corruption and
                                  influence.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:01:00'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo Modelo is implicated in the
                                  same investigation as Ficticio, which raises
                                  concerns about political misconduct.
                                headline: 'Aforamientos: esa figura incómoda'
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - prevaricación
                                  - tráfico de influencias
                                  - investigación
                                  - delitos
                                sentiment_score: -2
                                publication_date: '2025-06-08T06:00:59'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  favoritism and corruption, which casts a
                                  negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T10:08:15'
                              - country: spain
                                summary: >-
                                  Javier Ejemplo is implicated in a case of
                                  alleged favoritism and corruption, which casts
                                  a negative light on his character and actions.
                                headline: >-
                                  'Caso Javier Ejemplo': las asociaciones
                                  judiciales salen en defensa de la juez Luisa
                                  Inventada ante las "presiones externas" que
                                  sufre
                                sentiment: moderately negative
                                thumbnail: https://news.example.org/articles/sample
                                source_url: https://news.example.org/articles/sample
                                author_name: null
                                other_sources: []
                                adverse_keywords:
                                  - favoritism
                                  - corruption
                                  - persecution
                                sentiment_score: -2
                                publication_date: '2025-06-06T08:08:15'
                            additional_information: {}
                        score: 80
                        screened_data:
                          full_name: Javier Ejemplo Modelo
                          nationality: ES
                          date_of_birth: '1974-01-01'
                          document_number: null
                        is_ongoing_monitoring_enabled: true
                        next_ongoing_monitoring_bill_date: '2026-07-24'
                        last_ongoing_screening_at: '2026-09-12T04:03:11Z'
                        last_ongoing_screening_datasets_updated_at: '2026-09-11T06:00:00Z'
                        warnings:
                          - feature: AML
                            risk: POSSIBLE_MATCH_FOUND
                            additional_data: null
                            log_type: warning
                            short_description: Possible match found in AML screening
                            long_description: >-
                              The Anti-Money Laundering (AML) screening process
                              identified potential matches with watchlists or
                              high-risk databases, requiring further review.
                            node_id: feature_aml_1
                    ip_analyses:
                      - node_id: feature_ip_1
                        status: Approved
                        device_brand: Apple
                        device_model: iPhone
                        browser_family: Mobile Safari
                        os_family: iOS
                        platform: mobile
                        device_fingerprint: didit-fp-a1b2c3d4e5f6g7h8
                        ip_country: Spain
                        ip_country_code: ES
                        ip_state: Barcelona
                        ip_city: Barcelona
                        latitude: 41.4022
                        longitude: 2.1407
                        ip_address: 83.50.226.71
                        isp: null
                        organization: null
                        is_vpn_or_tor: false
                        is_data_center: false
                        time_zone: Europe/Madrid
                        time_zone_offset: '+0100'
                        ip:
                          location:
                            latitude: 40.2206327
                            longitude: 1.5770097
                          distance_from_id_document: 23.4
                          distance_from_poa_document: 12.3
                        id_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 23.4
                          distance_from_poa_document: 18.7
                        poa_document:
                          location:
                            latitude: 41.2706327
                            longitude: 1.9770097
                          distance_from_ip: 12.3
                          distance_from_id_document: 18.7
                        warnings: []
                        matches:
                          - session_id: 99999999-8888-7777-6666-555555555555
                            session_number: 41205
                            vendor_data: 22222222-2222-2222-2222-222222222222
                            verification_date: '2024-07-20T10:15:30Z'
                            match_type: ip_address
                            match_source: ip_address
                            matched_value: 83.50.226.71
                            status: Approved
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Apple
                              device_model: iPhone
                              browser_family: Mobile Safari
                              os_family: iOS
                              platform: mobile
                              device_fingerprint: didit-fp-f9e8d7c6b5a40312
                            location_info:
                              ip_address: 83.50.226.71
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Barcelona
                              ip_city: Barcelona
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 0
                            match_mode: co_occurrence
                          - session_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                            session_number: 42830
                            vendor_data: 33333333-3333-3333-3333-333333333333
                            verification_date: '2024-06-30T18:22:05Z'
                            match_type: device_fingerprint
                            match_source: recovered_high
                            matched_value: f47ac10b-58cc-4372-a567-0e02b2c3d479
                            status: Declined
                            is_blocklisted: false
                            api_service: null
                            source: session
                            device_info:
                              device_brand: Samsung
                              device_model: SM-G991B
                              browser_family: Chrome Mobile
                              os_family: Android
                              platform: mobile
                              device_fingerprint: null
                            location_info:
                              ip_address: 83.50.231.18
                              ip_country: Spain
                              ip_country_code: ES
                              ip_state: Madrid
                              ip_city: Madrid
                              is_vpn_or_tor: false
                              is_data_center: false
                            confidence: 1
                            match_mode: deterministic
                            recovery_similarity: 0.9874
                            tls_ja4_corroborated: true
                            recovery_gate_reason: hardware_root_match
                    database_validations:
                      - node_id: feature_db_validation_1
                        issuing_state: BRA
                        validation_type: one_by_one
                        screened_data:
                          last_name: De Lima
                          first_name: Fernando
                          tax_number: '01234567890'
                          date_of_birth: '1980-01-01'
                          document_type: ID
                          expiration_date: '2030-01-01'
                        validations:
                          - service_id: bra_cpf
                            service_name: Brazil - CPF status check
                            outcome_code: MATCH
                            validation:
                              full_name: full_match
                              date_of_birth: full_match
                              identification_number: full_match
                            source_data:
                              identification_number: '01234567890'
                              first_name: FERNANDO
                              last_name: DE LIMA
                              date_of_birth: '1980-01-01'
                              gender: M
                              nationality: BRA
                        match_type: full_match
                        status: Approved
                        warnings: []
                    reviews:
                      - user: compliance@example.com
                        new_status: Declined
                        comment: Possible match found in AML screening
                        created_at: '2024-07-18T13:29:00.366811Z'
                    created_at: '2024-07-24T08:54:25.443172Z'
                    expires_at: '2025-07-24T08:54:25.443172Z'
                    biometric_consent:
                      required: false
                      trigger: null
                      status: not_required
                      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: 83.50.226.71
                      detected_country_code: ES
                      detected_state: ES-B
                      detected_city: Barcelona
                      declared_state: null
                      document_state: null
                      jurisdictions: []
                      retention_months: null
                      reason: null
                      decline_reason: null
                      face_data_deleted_at: null
                BusinessExample:
                  summary: مثال على جلسة التحقق من الشركات (KYB)
                  description: >-
                    قرار `session_kind = "business"`: تستبدل جلسات KYB مصفوفات
                    ميزات KYC بـ `registry_checks` و`document_verifications`
                    و`key_people_checks`، بينما تتشارك في `aml_screenings`
                    و`phone_verifications` و`email_verifications`
                    و`questionnaire_responses` و`ip_analyses` و`reviews` وغلاف
                    الجلسة.
                  value:
                    session_id: 66666666-7777-8888-9999-000000000000
                    session_kind: business
                    session_number: 31415
                    session_url: https://verify.didit.me/session/business123
                    status: In Review
                    environment: live
                    workflow_id: abababab-cdcd-efef-0101-232323232323
                    features:
                      - KYB_REGISTRY
                      - KYB_DOCUMENTS
                      - KYB_KEY_PEOPLE
                    vendor_data: merchant-001234
                    metadata: null
                    callback: https://example.com/verification/callback
                    registry_checks:
                      - status: Approved
                        node_id: feature_kyb_registry_1
                        data_resolved: true
                        company:
                          uuid: dddd4444-eeee-5555-ffff-666677778888
                          node_id: feature_kyb_registry_1
                          status: Approved
                          registry_status: active
                          data_resolved: true
                          company_name: ACME HOLDINGS LTD
                          registration_number: '12345678'
                          country_code: GB
                          region: null
                          company_type: Private Limited Company
                          incorporation_date: '2015-03-12'
                          registered_address: 1 Example Street, London, EC1A 1AA
                          tax_number: null
                          risk_level: null
                          verification_status: verified
                          is_from_registry: true
                          fetch_status: resolved
                          alternative_names: null
                          nature_of_business: 62012 - Business and domestic software development
                          registered_capital: 100 GBP
                          registered_capital_amount: '100.00'
                          registered_capital_currency: GBP
                          website: null
                          email: null
                          phone: null
                          legal_entity_identifier: null
                          location_of_registration: England and Wales
                          financial_summary: null
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              is_active: true
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              entity_type: person
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              kyc_status: Pending
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              effective_ownership_percent: 75
                          addresses:
                            - type: registered
                              address: 1 Example Street, London, EC1A 1AA
                              country: GB
                          industries:
                            - code: '62012'
                              description: Business and domestic software development
                          accounts: null
                          registry_data: {}
                          user_provided_data:
                            company_name: ACME HOLDINGS
                            registration_number: '12345678'
                          confirmed_by_user_at: '2026-06-10T12:01:30.000000Z'
                          last_console_edit_at: null
                          is_editable: false
                        ownership_structure:
                          shareholders:
                            - name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: null
                              country_of_birth: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: null
                              designation: null
                              roles:
                                - shareholder
                              ownership_min_shares: '75'
                              ownership_max_shares: '75'
                              voting_min_shares: null
                              voting_max_shares: null
                              appointment_date: null
                              is_active: true
                              shareholding:
                                share_class: ORDINARY
                                number_of_shares: 750
                                currency: GBP
                                nominal_value: 1
                                total_value: null
                                percentage: 75
                          beneficial_owners: []
                        warnings: []
                    aml_screenings: null
                    document_verifications:
                      - status: In Review
                        node_id: feature_kyb_documents_1
                        items:
                          - uuid: eeee5555-ffff-6666-0000-777788889999
                            document_type: LEGAL_PRESENCE
                            document_subtype: CERTIFICATE_OF_INCORPORATION
                            document_group: LEGAL_PRESENCE
                            file_url: >-
                              https://<media-host>/kyb/certificate-of-incorporation.pdf
                            original_filename: certificate_of_incorporation.pdf
                            file_size: 482133
                            status: Approved
                            created_at: '2026-06-10T12:03:11.000000Z'
                            cross_check_result:
                              critical:
                                company_name:
                                  document: ACME HOLDINGS LTD
                                  registry: ACME HOLDINGS LTD
                                  score: 1
                                  match: true
                                registration_number:
                                  document: '12345678'
                                  registry: '12345678'
                                  match: true
                              non_critical: {}
                              people: {}
                            document_metadata:
                              file_size: 482133
                              content_type: application/pdf
                              creation_date: '2015-03-12T09:00:00'
                              modified_date: '2015-03-12T09:00:00'
                              creator: null
                              producer: null
                              software: null
                              encryption: null
                              is_signed: true
                              is_tampered: false
                              signature_info: null
                              exif_original_date: null
                              exif_digitized_date: null
                              processed_by_known_editor: false
                              has_different_creation_mod_date: false
                              overlay_manipulation: null
                            description: null
                            is_requested: false
                            ocr_data:
                              company_name: ACME HOLDINGS LTD
                              registration_number: '12345678'
                              incorporation_date: '2015-03-12'
                            is_console_upload: false
                            is_confirmed: true
                          - uuid: ffff6666-0000-7777-1111-888899990000
                            document_type: OWNERSHIP_STRUCTURE
                            document_subtype: null
                            document_group: OWNERSHIP_STRUCTURE
                            file_url: null
                            original_filename: null
                            file_size: null
                            status: Not Finished
                            created_at: '2026-06-10T15:40:02.000000Z'
                            cross_check_result: null
                            document_metadata: null
                            description: Please upload an up-to-date shareholder registry
                            is_requested: true
                            ocr_data: null
                            is_console_upload: false
                            is_confirmed: true
                        groups:
                          LEGAL_PRESENCE:
                            total: 1
                            approved: 1
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 0
                          OWNERSHIP_STRUCTURE:
                            total: 1
                            approved: 0
                            pending: 0
                            declined: 0
                            in_review: 0
                            other: 0
                            missing: 1
                        required_groups:
                          - LEGAL_PRESENCE
                          - OWNERSHIP_STRUCTURE
                        warnings: []
                    key_people_checks:
                      - status: In Review
                        node_id: feature_kyb_key_people_1
                        registry:
                          officers:
                            - uuid: aaaa1111-bbbb-2222-cccc-333344445555
                              name: Jane Smith
                              designation: Director
                              role: director
                              nationality: British
                              appointment_date: '2015-03-12'
                              termination_date: null
                              is_active: true
                              address: 1 Example Street, London, EC1A 1AA
                              aml_status: Approved
                              kyc_status: Approved
                              kyc_session_url: https://verify.didit.me/session/abc123def456
                              kyc_session_id: 77777777-8888-9999-aaaa-bbbbbbbbbbbb
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Approved
                                - feature: LIVENESS
                                  status: Approved
                                - feature: AML
                                  status: Approved
                              didit_internal_id: 99999999-0000-1111-2222-333333333333
                              kyc_document_type: P
                              kyc_nationality: GBR
                              kyc_liveness_passed: true
                              kyc_verified_at: '2026-06-10T14:22:31.123456Z'
                              kyc_aml_categories:
                                sanctions: clear
                                pep: clear
                                adverse_media: clear
                                warnings: clear
                              kyc_notification_sent_at: '2026-06-09T09:00:00.000000Z'
                          beneficial_owners:
                            - uuid: bbbb2222-cccc-3333-dddd-444455556666
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              date_of_birth: '1980-05-04'
                              country_of_birth: null
                              email: null
                              company_name: null
                              registration_number: null
                              entity_type: person
                              nationality: British
                              designation: null
                              roles:
                                - ubo
                                - shareholder
                              ownership_min_shares: '50'
                              ownership_max_shares: '75'
                              is_active: true
                              aml_status: null
                              kyc_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                              kyc_document_type: null
                              kyc_nationality: null
                              kyc_liveness_passed: null
                              kyc_verified_at: null
                              kyc_aml_categories: null
                              kyc_notification_sent_at: null
                              child_beneficial_owners: []
                              effective_ownership_percent: 75
                        submitted:
                          parties:
                            - uuid: cccc3333-dddd-4444-eeee-555566667777
                              entity_type: person
                              source: USER
                              name: John Doe
                              first_name: John
                              last_name: Doe
                              company_name: null
                              registration_number: null
                              email: john.doe@example.com
                              nationality: GBR
                              phone_number: '+447700900123'
                              date_of_birth: '1980-05-04'
                              position: Chief Executive Officer
                              custom_fields: {}
                              is_active: true
                              is_skipped: false
                              requires_verification: true
                              roles:
                                - role: ubo
                                  ownership_percent: 75
                                  voting_percent: 75
                                - role: director
                                  ownership_percent: null
                                  voting_percent: null
                              kyc_session_id: 88888888-9999-aaaa-bbbb-cccccccccccc
                              kyc_session_status: In Progress
                              kyc_session_url: https://verify.didit.me/session/def456ghi789
                              kyb_sub_session_id: null
                              kyb_sub_session_status: null
                              kyb_sub_session_url: null
                              verification_workflow_type: kyc
                              verification_workflow_id: 12121212-3434-5656-7878-909090909090
                              verification_workflow_label: Key People KYC
                              verification_workflow_features:
                                - feature: ID_VERIFICATION
                                  status: Not Finished
                                - feature: LIVENESS
                                  status: Not Finished
                                - feature: AML
                                  status: Not Finished
                              didit_internal_id: null
                        ubo_kyc_summary:
                          total: 1
                          approved: 0
                          flagged: 0
                          pending: 1
                        warnings: []
                    phone_verifications: null
                    email_verifications: null
                    questionnaire_responses: null
                    ip_analyses: null
                    reviews: []
                    contact_details: null
                    expected_details:
                      company_name: Tesco PLC
                      registry_country: GB
                      registration_number: '00445790'
                    created_at: '2026-06-10T11:58:04.000000Z'
                    expires_at: '2026-06-24T11:58:04.000000Z'
              schema:
                $ref: '#/components/schemas/SessionDecision'
        '403':
          description: >-
            فشلت المصادقة أو التفويض. يؤدي المفتاح المفقود إلى إرجاع `403`؛
            بينما يؤدي المفتاح الخاطئ أو الملغى أو منتهي الصلاحية إلى إرجاع
            `401`. تميز سلسلتان نصيتان من `detail` بين أوضاع الفشل:


            - `"Authentication credentials were not provided or are invalid."` —
            لا يوجد رأس `x-api-key` (ولا يوجد token لـ `Authorization: Bearer`)،
            أو فشل فحص بيانات الاعتماد المقدمة (ملغاة، أو منتهية الصلاحية، أو
            غير صحيحة البنية).

            - `"You do not have permission to perform this action."` — بيانات
            الاعتماد صالحة ولكن لا يُسمح لها بقراءة هذه الجلسة: يفتقر Bearer
            token الخاص بمستخدم لوحة التحكم إلى إذن `read:sessions` أو لا يمكنه
            الوصول إلى التطبيق المالك، أو ينتمي مفتاح API إلى مؤسسة مختلفة عن
            الجلسة.


            لاحظ أنه بالنسبة لـ `sessionId` غير معروف تماماً، يحدد endpoint
            التطبيق المالك قبل التحقق من بيانات الاعتماد، لذلك تُرجع الجلسة
            المفقودة `404` حتى عندما تكون بيانات الاعتماد مفقودة أو غير صالحة.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: >-
                      Authentication credentials were not provided or are
                      invalid.
              examples:
                Missing or invalid credentials:
                  summary: لا يوجد رأس x-api-key، أو فشل فحص المفتاح
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Insufficient permissions:
                  summary: >-
                    بيانات اعتماد صالحة تفتقر إلى read:sessions أو حق الوصول إلى
                    التطبيق المالِك
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            لم يتم العثور على الجلسة. يُرجع عندما لا تطابق أي جلسة نشطة قيمة
            `sessionId` المقدمة سواء كجلسة التحقق من المستخدمين (KYC) أو جلسة
            التحقق من الشركات (KYB) — والجلسة التي تم حذفها تنتهي هنا أيضاً. نص
            الاستجابة هو غلاف `{"detail": ...}` القياسي.


            **سلسلتا `detail` متمايزتان.** إذا كان `sessionId` غير معروف كجلسة
            KYC وجلسة KYB معاً، يفشل البحث المسبق عن المالك قبل المصادقة وتتلقى
            `{"detail": "Not found."}` — يحدث هذا قبل التحقق من بيانات الاعتماد،
            لذلك يتم إرجاعه حتى للطلبات غير المصادق عليها. إذا كانت الجلسة
            موجودة ولكن لا يمكن استردادها ضمن التطبيق المصادق عليه (على سبيل
            المثال سجل قديم أو تم حذفه للتو)، يُرجع العرض `{"detail": "Session
            not found."}`. يشير كلاهما إلى النتيجة نفسها — يتعذر الوصول إلى
            الجلسة — لذا تحقق من رمز الحالة `404` بدلاً من النص.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Not found.
              examples:
                Unknown session id:
                  summary: sessionId غير معروف لهذا التطبيق
                  value:
                    detail: Not found.
                Session not retrievable:
                  summary: الجلسة موجودة ولكن لا يمكن استردادها لهذا التطبيق
                  value:
                    detail: Session not found.
        '429':
          description: >-
            تم تجاوز حد المعدل. تقتصر طلبات GET على **600 طلب في الدقيقة لكل
            بيانات اعتماد** (مفتاح API أو Bearer token أو عنوان IP المصدر في حال
            عدم المصادقة). تحقق من `Retry-After` / `X-RateLimit-Reset` وانتظر
            قبل إعادة المحاولة. إذا واجهت هذا الحد أثناء الاستقصاء الدوري
            للقرارات، فقم بالتبديل إلى webhook لـ `status.updated` واسترجع
            القرار مرة واحدة لكل تغيير في الحالة بدلاً من ذلك.
          headers:
            Retry-After:
              description: عدد الثواني التي يجب انتظارها قبل إعادة محاولة إرسال الطلب.
              schema:
                type: integer
                minimum: 1
                example: 30
            X-RateLimit-Limit:
              description: >-
                الحد الأقصى لعدد الطلبات المسموح بها في النافذة الحالية (600
                لطلبات GET).
              schema:
                type: integer
                example: 600
            X-RateLimit-Remaining:
              description: الطلبات المتبقية في النافذة الحالية.
              schema:
                type: integer
                example: 0
            X-RateLimit-Reset:
              description: >-
                طابع Unix الزمني (بالثواني) الذي تتم عنده إعادة تعيين النافذة
                الحالية.
              schema:
                type: integer
                example: 1750000000
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: تفسير سهل القراءة لتجاوز حد المعدل.
                    example: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
              examples:
                Throttled:
                  summary: أكثر من 600 طلب GET في دقيقة واحدة من نفس بيانات الاعتماد
                  value:
                    detail: >-
                      GET request rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/decision/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Accept: application/json'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.retrieve_decision(
                "11111111-2222-3333-4444-555555555555",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.retrieveDecision("11111111-2222-3333-4444-555555555555");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RetrieveDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.SessionsRetrieveDecisionParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().retrieveDecision("11111111-2222-3333-4444-555555555555");

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->retrieveDecision('11111111-2222-3333-4444-555555555555');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.sessions.retrieve_decision("11111111-2222-3333-4444-555555555555")

            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    SessionDecision:
      type: object
      properties:
        session_id:
          type: string
          format: uuid
          description: المعرّف الفريد للجلسة.
        session_kind:
          type: string
          enum:
            - user
            - business
          description: >-
            معرّف تمييز يوضح ما إذا كانت هذه جلسة التحقق من المستخدمين (KYC) أو
            التحقق من الشركات (KYB). عندما تكون `user`، تنطبق مصفوفات ميزات KYC
            (`id_verifications`، `nfc_verifications`، `liveness_checks`،
            `face_matches`، `poa_verifications`، `document_ai_documents`،
            `database_validations`، ...) وتغيب مصفوفات الشركات. وعندما تكون
            `business`، يحتوي الـ payload بدلاً من ذلك على `registry_checks`،
            و`document_verifications`، و`key_people_checks` بالإضافة إلى
            المصفوفات المشتركة (`aml_screenings`، `phone_verifications`،
            `email_verifications`، `ip_analyses`، `questionnaire_responses`).
            **يتم حذفه عند تمرير `include=events`** — فشكل الأحداث موجود فقط
            لجلسات المستخدمين، لذلك يُستبعد معرّف التمييز من هذا الشكل.
        shared_from_session:
          type: string
          format: uuid
          nullable: true
          description: >-
            للجلسة المستنسخة باستخدام `POST /v3/session/import-shared/`: قيمة
            `session_id` للجلسة الأصلية في التطبيق المصدر. وتكون `null` لكل جلسة
            أخرى. لا يتم تضمينها عند تمرير `include=events`.
        shared_from_session_number:
          type: integer
          nullable: true
          description: >-
            `session_number` للجلسة المصدر عند استيراد هذه الجلسة من تطبيق آخر
            تابع لمؤسستك. `null` خلاف ذلك.
        session_number:
          type: integer
          description: رقم الجلسة.
          nullable: true
        session_url:
          type: string
          format: uri
          description: رابط URL الخاص بالجلسة.
          nullable: true
        status:
          type: string
          enum:
            - Not Started
            - In Progress
            - Awaiting User
            - In Review
            - Approved
            - Declined
            - Resubmitted
            - Expired
            - Kyc Expired
            - Abandoned
          description: >-
            حالة دورة الحياة الإجمالية للجلسة — النتيجة التراكمية لسير العمل.
            القيم النهائية هي `Approved` و`Declined` و`In Review` و`Expired`
            و`Kyc Expired` و`Abandoned`؛ بينما تشير `Not Started` و`In Progress`
            و`Awaiting User` و`Resubmitted` إلى أن الجلسة لا تزال تتقدم في سير
            العمل.
        status_override:
          type: object
          nullable: true
          description: >-
            موجود عندما يحدد المراجِع `status` يدوياً. يكون `null` عندما تكون
            الحالة تلقائية. استخدمه للتمييز بين الموافقة اليدوية والتلقائية.
          properties:
            overridden_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: الحالة التي تخلص إليها الفحوصات الخاصة بالمنصة.
        decision_trace:
          type: object
          description: 'كيفية الوصول إلى الحالة: من قام بتعيينها وأي التحذيرات تسببت في ذلك.'
          properties:
            status:
              type: string
              description: حالة الجلسة.
            decided_by:
              type: string
              nullable: true
              enum:
                - manual
                - automatic
                - investigator
                - null
              description: >-
                من قام بتعيين الحالة. `null` طالما لم يتم اتخاذ القرار بشأن
                الجلسة.
            decided_at:
              type: string
              format: date-time
              nullable: true
            automatic_status:
              type: string
              nullable: true
              description: >-
                ما تخلص إليه فحوصات المنصة نفسها، وهو ما يختلف عن `status` بعد
                اتخاذ قرار يدوي.
            terminal_node_id:
              type: string
              nullable: true
              description: عقدة حالة سير العمل التي أنهت الجلسة، في حال قامت إحداها بذلك.
            actor:
              type: object
              nullable: true
              description: المراجِع المسؤول عن القرار اليدوي.
              properties:
                user:
                  type: string
                  nullable: true
                actor_type:
                  type: string
                  nullable: true
            warning_counts:
              type: object
              description: >-
                التحذيرات حسب `log_type` (`error`، `warning`، `information`)
                والإجمالي `total`.
              additionalProperties:
                type: integer
            status_warnings:
              type: array
              description: التحذيرات التي تحدد حالة `Declined` أو `In Review`.
              items:
                type: object
                properties:
                  risk:
                    type: string
                  feature:
                    type: string
                    nullable: true
                  node_id:
                    type: string
                    nullable: true
                  log_type:
                    type: string
                    nullable: true
                  check_status:
                    type: string
                    nullable: true
                  source:
                    type: string
                    description: >-
                      قائمة payload التي ورد منها التحذير، على سبيل المثال
                      `id_verifications`.
                  short_description:
                    type: string
                    nullable: true
        linked_records:
          type: object
          nullable: true
          description: >-
            ملخص لسجلات أخرى مرتبطة بالجلسة. يكون `null` عندما لا يوجد شيء
            لعرضه، ولسير العمل التي تعلن عن معيار لضمان العمر.
          properties:
            same_face:
              type: object
              nullable: true
              description: >-
                أشخاص آخرون تطابق وجههم مع إحدى عمليات البحث بالوجه في هذه
                الجلسة.
              properties:
                count:
                  type: integer
                best_match:
                  type: object
                  nullable: true
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                    similarity_percentage:
                      type: number
                      nullable: true
            earlier_verifications:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                vendor_user_id:
                  type: string
                  format: uuid
                  nullable: true
            networks:
              type: object
              nullable: true
              properties:
                count:
                  type: integer
                open:
                  type: integer
                dismissed:
                  type: integer
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      network_id:
                        type: string
                        format: uuid
                      display_number:
                        type: integer
                        nullable: true
                      name:
                        type: string
                      status:
                        type: string
                      risk_score:
                        type: number
                        nullable: true
        workflow_id:
          type: string
          format: uuid
          description: >-
            معرّف ثابت لمجموعة سير العمل التي أنتجت هذه الجلسة. لمسارات العمل
            إصدارات — وتحدد هذه القيمة سير العمل نفسه، وليس إصداراً معيناً.
          nullable: true
        features:
          type: array
          items:
            type: string
            description: ميزة الجلسة.
          description: >-
            قائمة بميزات التحقق التي تم تكوينها لهذه الجلسة، كأسماء عرض:
            `ID_VERIFICATION`، و `NFC`، و `LIVENESS`، و `FACE_MATCH`، و `POA`، و
            `PHONE`، و `EMAIL_VERIFICATION`، و `AML`، و `IP_ANALYSIS`، و
            `DATABASE_VALIDATION`، و `QUESTIONNAIRE`، و `AGE_ESTIMATION`، و
            `FACE_SEARCH`، و `GEOLOCATION` (التحقق من الموقع) (تستخدم جلسات
            التحقق من الشركات (KYB) مجموعة ميزات KYB: `KYB_REGISTRY`، و
            `KYB_DOCUMENTS`، و `KYB_KEY_PEOPLE`، و `AML`، و `PHONE`، و
            `EMAIL_VERIFICATION`، و `IP_ANALYSIS`، و `QUESTIONNAIRE`). عند
            استخدام `include=events`، يصبح كل إدخال كائناً `{feature, node_id}`
            بدلاً من سلسلة نصية بسيطة، وتتم إعادة تسمية ميزة البريد الإلكتروني:
            تظهر كـ `EMAIL` في وضع الأحداث بدلاً من `EMAIL_VERIFICATION`
            المستخدمة هنا.
        vendor_data:
          type: string
          description: بيانات المزود (vendor data) الخاصة بالجلسة.
          nullable: true
        metadata:
          type: object
          description: البيانات الوصفية للجلسة.
          nullable: true
        expected_details:
          type: object
          description: >-
            التفاصيل المتوقعة المقدمة عند إنشاء الجلسة — تُستخدم للتحقق المتبادل
            مقابل البيانات المستخرجة (KYC) أو للملء المسبق لعملية البحث في سجل
            الشركات (KYB). تُعيد تماماً المفاتيح التي تم تقديمها؛ وتكون `null`
            عندما لا يتم تقديم أي منها. تحمل جلسات KYC حقول الشخص؛ بينما تحمل
            جلسات الشركات (KYB) الحقول `company_name` و`registry_country`
            و`registration_number`.
          properties:
            first_name:
              type: string
              description: الاسم الأول للمستخدم. على سبيل المثال، `John`.
            last_name:
              type: string
              description: اسم عائلة المستخدم. على سبيل المثال، `Doe`.
            date_of_birth:
              type: string
              format: date
              description: >-
                تاريخ ميلاد المستخدم بالتنسيق: YYYY-MM-DD. على سبيل المثال،
                `1990-05-15`.
            gender:
              type: string
              nullable: true
              enum:
                - M
                - F
              default: null
              description: جنس المستخدم. يجب أن يكون 'M' أو 'F' أو null.
            nationality:
              type: string
              description: >-
                رمز الدولة وفق المعيار ISO 3166-1 alpha-3 الذي يمثل بلد المنشأ
                لمقدم الطلب. على سبيل المثال، `USA`.
            country:
              type: string
              description: >-
                رمز الدولة وفق المعيار ISO 3166-1 alpha-3 الذي يمثل دولة مستند
                إثبات العنوان، أو دولة مستند هوية مقدم الطلب، والتي قد تختلف عن
                الجنسية. على سبيل المثال، `GBR`.
            address:
              type: string
              description: >-
                العنوان بتنسيق مقروء للبشر، متضمناً أكبر قدر ممكن من المعلومات.
                على سبيل المثال، `123 Main St, San Francisco, CA 94105, USA`.
            identification_number:
              type: string
              description: >-
                رقم مستند المستخدم، أو الرقم الشخصي، أو الرقم الضريبي. على سبيل
                المثال، `123456789`.
            ip_address:
              type: string
              format: ipv4
              description: >-
                عنوان IP المتوقع للجلسة. إذا اختلف عنوان IP الفعلي عن هذه
                القيمة، فسيتم تسجيل تحذير. على سبيل المثال، `192.168.1.100`.
            expected_document_types:
              type: array
              description: >-
                أنواع المستندات التي تم تقييد خطوة التحقق من الهوية بها عند
                إنشاء الجلسة. الحقل الفارغ/غير المضبوط يعني عدم وجود قيود.
                الرموز: `P` (جواز سفر)، و`ID` (بطاقة هوية وطنية)، و`DL` (رخصة
                قيادة)، و`RP` (تصريح إقامة)، و`HIC` (بطاقة تأمين صحي)، و`TC`
                (بطاقة ضريبية)، و`SSC` (بطاقة ضمان اجتماعي).
              items:
                type: string
                enum:
                  - P
                  - ID
                  - DL
                  - RP
                  - HIC
                  - TC
                  - SSC
            id_country:
              type: string
              nullable: true
              description: >-
                دولة الإصدار المتوقعة لمستند الهوية (ISO 3166-1 alpha-3)، عند
                تقييدها في وقت الإنشاء.
              example: ESP
            poa_country:
              type: string
              nullable: true
              description: >-
                دولة مستند إثبات العنوان المتوقعة (ISO 3166-1 alpha-3)، عند
                تقييدها في وقت الإنشاء.
              example: ESP
            company_name:
              type: string
              description: الاسم القانوني المتوقع للشركة. لجلسات الشركات (KYB) فقط.
            registry_country:
              type: string
              description: >-
                دولة السجل المتوقعة بصيغة `XX` أو `XX-YY` (رمز ISO 3166-1
                alpha-2، اختيارياً مع تقسيم فرعي ISO 3166-2 للسجلات على مستوى
                الولاية، مثل `US-CA`). لجلسات الشركات (KYB) فقط.
            registration_number:
              type: string
              description: رقم تسجيل الشركة المتوقع. جلسات التحقق من الشركات (KYB) فقط.
          nullable: true
        contact_details:
          type: object
          description: >-
            تفاصيل الاتصال المقدمة عند إنشاء الجلسة (تُستخدم لرسائل البريد
            الإلكتروني للإشعارات، والتحقق من الهاتف/البريد الإلكتروني المعبأ
            مسبقاً، ولغة التواصل). تكون القيمة `null` عند عدم تقديم بريد
            إلكتروني أو رقم هاتف.
          properties:
            email:
              type: string
              description: >-
                عنوان البريد الإلكتروني للمستخدم (مثل "john.doe@example.com")
                الذي سيتم استخدامه أثناء خطوة التحقق من البريد الإلكتروني. إذا
                لم يتم توفيره، يجب على المستخدم تقديمه أثناء مسار التحقق.
            email_lang:
              type: string
              description: >-
                رمز اللغة (ISO 639-1) لإشعارات البريد الإلكتروني. يتحكم في لغة
                جميع اتصالات البريد الإلكتروني (مثل "en" و"es" و"fr").
            send_notification_emails:
              type: boolean
              default: false
              description: >-
                إذا كانت القيمة true وتم توفير بريد إلكتروني، ترسل Didit رسالة
                البريد الإلكتروني الأولية "Verify your identity" بشكل غير متزامن
                عند إنشاء جلسة التحقق من المستخدمين (KYC) أو التحقق من الشركات
                (KYB). ترسل Didit أيضاً إشعارات بحالة التحقق للجلسات التي تتطلب
                مراجعة يدوية إلى عنوان البريد الإلكتروني المقدَّم.
            phone:
              type: string
              nullable: true
              description: >-
                رقم هاتف المستخدم بتنسيق E.164 إذا كان متاحاً (على سبيل المثال،
                +14155552671). يكون `null` إذا تم تقديم بريد إلكتروني فقط عند
                إنشاء الجلسة. ملاحظة: يعيد هذا الحقل رقم الهاتف الأصلي المقدم
                أثناء إنشاء الجلسة. إذا كان الرقم غير صالح، فقد لا يكون بتنسيق
                E.164.
          nullable: true
        callback:
          type: string
          format: uri
          description: رابط الاستدعاء الخاص بالجلسة.
          nullable: true
        id_verifications:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير التحقق من الهوية (OCR)** التي تم إنشاؤها بواسطة
            خطوات مستند الهوية في مخطط سير العمل. دائماً ما تكون مصفوفة JSON —
            اقرأ `id_verifications[0]` وكرّر القراءة إذا كان بإمكان سير العمل
            لديك تشغيل أكثر من فحص هوية واحد (على سبيل المثال، فحص أساسي
            بالإضافة إلى فحص إضافي). تكون `null` حتى تُنتج خطوة هوية واحدة على
            الأقل بيانات. يمثل كل عنصر التقرير الكامل، بما في ذلك `node_id`،
            و`status` على مستوى الميزة، وحقول المستند المستخرجة، وعناوين URL
            للصور، ودرجات الجودة، وMRZ، وتحليل العنوان، والتطابقات عبر الجلسات،
            و`warnings[]`.
          items:
            type: object
            description: >-
              تقرير واحد للتحقق من الهوية - التقرير الكامل لخطوة واحدة من التحقق
              من الهوية. يوضح `verification_method` أي من الطرق الثلاث أنتجته
              (التقاط المستند، أو البحث دون مستند، أو تسجيل الدخول بالمحفظة)
              ويتم ملء كتلة الأدلة الخاصة بالطريقة وفقاً لذلك.
            properties:
              node_id:
                type: string
                description: معرّف عقدة مخطط سير العمل لخطوة OCR التي أنتجت هذا التقرير.
              verification_method:
                type: string
                enum:
                  - document
                  - id_lookup
                  - wallet
                description: >-
                  أي طريقة من طرق التحقق من الهوية أنتجت هذا التقرير. `document`
                  - قام المستخدم بتصوير هوية فعلية (الافتراضية، والقيمة في كل
                  جلسة تم إنشاؤها قبل وجود الطرق الأخرى). `id_lookup` - قام
                  المستخدم بكتابة رقم هويته الوطنية وتم التحقق منه مقابل سجل
                  حكومي أو مصدر موثوق آخر لتلك الدولة (يحدد `id_lookup.source`
                  أي مصدر). `wallet` - قام المستخدم بتسجيل الدخول باستخدام هوية
                  رقمية حكومية أو مصرفية.
              assurance:
                type: string
                enum:
                  - documentary
                  - data_match
                  - cryptographic
                description: >-
                  مستوى الضمان المشتق من `verification_method`: `documentary`
                  لمستند تم التقاطه والتحقق منه، `data_match` للتفاصيل التي
                  تطابقت مع سجل يحتفظ به المصدر الذي تم الاستعلام عنه،
                  `cryptographic` للسمات التي صادق عليها موفر الهوية ووقّعها.
              wallet_provider:
                type: string
                nullable: true
                description: >-
                  معرّف المحفظة من الدليل عندما يكون `verification_method` هو
                  `wallet` (`mitid`، `bankid_se`، `itsme`، ...). يكون `null`
                  بخلاف ذلك.
              fallback_from:
                type: object
                nullable: true
                description: >-
                  سبب عدم إنهاء الطريقة غير المعتمدة على المستندات لخطوة التحقق
                  من الهوية. يتم تعيينه عند فشل البحث أو تسجيل الدخول بالمحفظة:
                  في التحقق من المستند الذي واصل المستخدم عبره عندما كان خيار
                  الرجوع الاحتياطي للدولة هو `fallback_to_document` (حيث
                  `action` هو `fallback_to_document`)، أو في التقرير المرفوض
                  عندما كان `decline`. ويكون `null` في الحالات الأخرى.
                properties:
                  method:
                    type: string
                    enum:
                      - id_lookup
                      - wallet
                    description: الطريقة التي فشلت.
                  reason:
                    type: string
                    description: >-
                      النتيجة التي أنهته، مثل `no_match` أو `provider_error` أو
                      `cancelled` أو `timeout`.
                  action:
                    type: string
                    enum:
                      - fallback_to_document
                      - decline
                    description: >-
                      الإجراء المُعَدّ الذي تم اتخاذه: `fallback_to_document` أو
                      `decline`.
              id_lookup:
                type: object
                nullable: true
                description: >-
                  دليل السجل. يتوفر فقط عندما تكون `verification_method` بقيمة
                  `id_lookup`؛ ويكون `null` فيما عدا ذلك.
                properties:
                  source:
                    type: string
                    description: >-
                      اسم المصدر الذي تم الاستعلام عنه كما يظهر للعميل، مثل
                      `Department of Home Affairs` (سجل حكومي) أو `UK credit
                      bureau and financial services records` (ليس سجلاً
                      حكومياً). هذا هو البيان الوحيد لمصدر البحث؛ لا تفترض أنه
                      مصدر حكومي.
                  checked_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: متى استجاب السجل.
                  attempts:
                    type: integer
                    description: رقم المحاولة (بدءاً من 1) التي ورد منها هذا التقرير.
                  max_attempts:
                    type: integer
                    description: >-
                      عدد المحاولات المسموح به والمُهيأ للدولة (من 1 إلى 5،
                      القيمة الافتراضية 1).
                  outcome:
                    type: string
                    enum:
                      - match
                      - partial_match
                      - no_match
                      - provider_error
                      - format_rejected
                    nullable: true
                    description: >-
                      ما أجاب به السجل. يُحسب فقط `match` و`partial_match`
                      و`no_match` ضمن ميزانية المحاولات والفاتورة.
                  comparison:
                    type: array
                    description: >-
                      صف واحد لكل حقل قابل للمقارنة أجاب عنه المصدر، بالإضافة
                      إلى صف واحد لكل خطأ في المصدر. تستخدم صفوف المقارنة أسماء
                      الحقول المعيارية أدناه بدلاً من مفاتيح حقول طلب الدولة،
                      لأن عدة حقول طلب (الاسم الأول واسم العائلة، أو أي من
                      الأسماء المستعارة للمعرّف) تندمج في مقارنة واحدة. المصدر
                      الذي فشل يلحق صفاً يحتوي على `field: "provider"` و
                      `result: "error"`، لذا اقرأ `result` قبل التعامل مع الصف
                      كقرار للحقل.
                    items:
                      type: object
                      required:
                        - field
                        - label
                        - provided
                        - record
                        - result
                      properties:
                        field:
                          type: string
                          enum:
                            - identification_number
                            - full_name
                            - date_of_birth
                            - address
                            - provider
                          description: >-
                            حقل مقارنة معياري. `provider` ليس حقلاً للمستخدم: بل
                            يشير إلى صف خطأ في المصدر.
                        label:
                          type: string
                          description: >-
                            تسمية العرض للصف، مثل `ID number`، `Full name`،
                            `Provider`.
                        provided:
                          type: string
                          nullable: true
                          description: ما كتبه المستخدم. يكون `null` في صف خطأ `provider`.
                        record:
                          type: string
                          nullable: true
                          description: >-
                            ما احتفظ به المصدر. في صف خطأ `provider`، يحمل هذا
                            الحقل رسالة الخطأ بدلاً من ذلك.
                        result:
                          type: string
                          enum:
                            - match
                            - partial
                            - no_match
                            - error
                          description: >-
                            نتيجة المقارنة لكل حقل. تظهر القيمة `error` فقط في
                            صف `provider` وتفيد بأن ذلك المصدر لم يستجب؛ تعامل
                            معها كدليل حول الاستعلام، ولا تعتبرها أبداً دليلاً
                            على عدم تطابق في الحقول.
                  registry_portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      رابط URL موقع مسبقاً قصير الأجل للصورة الشخصية التي أرجعها
                      المصدر. فقط لسجلات الحكومات الأربعة التي تُرجع صورة (جنوب
                      إفريقيا، ونيجيريا، والأرجنتين، وبنما).
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      صورة سيلفي مقابل الصورة الشخصية في السجل، 0-100. فقط عندما
                      يُرجع السجل صورة شخصية.
              wallet_verification:
                type: object
                nullable: true
                description: >-
                  دليل بيانات الاعتماد. يظهر فقط عندما تكون قيمة
                  `verification_method` هي `wallet`؛ ويكون `null` في الحالات
                  الأخرى.
                properties:
                  provider:
                    type: string
                    description: معرّف المحفظة من الدليل، مثل `mitid`.
                  provider_name:
                    type: string
                    nullable: true
                    description: >-
                      اسم المحفظة كما يعرفه المستخدم النهائي، على سبيل المثال
                      `MitID`.
                  issuing_authority:
                    type: string
                    nullable: true
                    description: >-
                      الجهة المسؤولة عن المحفظة، مثل `Danish Agency for Digital
                      Government`.
                  issuing_country:
                    type: string
                    description: >-
                      الدولة بتنسيق ISO 3166-1 alpha-3 التي تم تقديم المحفظة
                      فيها.
                  credential_type:
                    type: string
                    nullable: true
                    description: >-
                      بيانات الاعتماد التي قدمتها المحفظة، مثل
                      `person_identification`.
                  level_of_assurance:
                    type: string
                    enum:
                      - low
                      - substantial
                      - high
                    nullable: true
                    description: >-
                      مستوى التأكيد الذي أكدته المحفظة. يفشل تسجيل الدخول الذي
                      يؤكد مستوى أقل من المستوى المطلوب بدلاً من خفض المستوى.
                  verified_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: لحظة مصادقة المحفظة.
                  signature_valid:
                    type: boolean
                    nullable: true
                    description: >-
                      ما إذا كان قد تم التحقق من صحة الإقرار الموقّع الذي أرجعته
                      المحفظة.
                  attributes:
                    type: object
                    additionalProperties: true
                    description: >-
                      السمات التي شاركتها المحفظة، مفهرسة كما يسردها إدخال دليل
                      المحفظة.
                  portrait:
                    type: string
                    format: uri
                    nullable: true
                    description: >-
                      رابط URL موقع مسبقاً قصير الأجل للصورة الشخصية التي
                      شاركتها المحفظة، حيث تشارك واحدة.
                  face_match_score:
                    type: number
                    nullable: true
                    description: >-
                      صورة سيلفي مقابل الصورة الشخصية للمحفظة، 0-100، عندما
                      تشارك المحفظة واحدة.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
                description: >-
                  حالة مستوى الميزة لخطوة التحقق من الهوية هذه. مستقلة عن
                  `status` الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى
                  قرارها العام بينما تظل الميزة الفردية `In Review`.
              document_type:
                type: string
                description: نوع مستند التحقق من الهوية
              document_subtype:
                type: string
                nullable: true
                description: >-
                  رمز النوع الفرعي للمستند المقبول من إعدادات مستند سير العمل،
                  بما في ذلك منطقة المستند عند الاقتضاء. أمثلة:
                  `ID_CARD_GENERIC`، `QUEENSLAND_DRIVER_LICENSE_GENERIC`.
              document_number:
                type: string
                description: رقم تعريف المستند
              personal_number:
                type: string
                description: رقم التعريف الشخصي
              portrait_image:
                type: string
                format: uri
                description: رابط URL للصورة الشخصية
              front_image:
                type: string
                format: uri
                description: رابط URL لصورة وجه المستند
              front_video:
                type: string
                format: uri
                description: رابط URL لفيديو وجه المستند
              back_image:
                type: string
                format: uri
                description: رابط URL لصورة الوجه الخلفي للمستند
              back_video:
                type: string
                format: uri
                description: رابط URL لفيديو ظهر المستند
              full_front_image:
                type: string
                format: uri
                description: رابط URL لصورة وجه المستند الكاملة
              full_back_image:
                type: string
                format: uri
                description: رابط URL لصورة ظهر المستند الكاملة
              front_image_camera_front:
                type: string
                format: uri
                description: رابط URL لصورة وجه المستند الملتقطة من الكاميرا الأمامية
              back_image_camera_front:
                type: string
                format: uri
                description: رابط URL لصورة ظهر المستند الملتقطة من الكاميرا الأمامية
              date_of_birth:
                type: string
                format: date
                description: تاريخ الميلاد من المستند
              age:
                type: integer
                description: العمر المحسوب من تاريخ الميلاد
              expiration_date:
                type: string
                format: date
                description: تاريخ انتهاء المستند
              date_of_issue:
                type: string
                format: date
                description: تاريخ إصدار المستند
              issuing_state:
                type: string
                description: رمز ISO للولاية المُصدِرة
              issuing_state_name:
                type: string
                description: الاسم الكامل للولاية المُصدِرة
              first_name:
                type: string
                description: الاسم الأول من المستند
              last_name:
                type: string
                description: اسم العائلة من المستند
              full_name:
                type: string
                description: الاسم الكامل من المستند
              gender:
                type: string
                description: الجنس من المستند
              address:
                type: string
                description: العنوان الخام من المستند
              formatted_address:
                type: string
                description: العنوان الكامل المنسق
              place_of_birth:
                type: string
                description: مكان الميلاد من المستند
              marital_status:
                type: string
                description: الحالة الاجتماعية من المستند
              nationality:
                type: string
                description: رمز الجنسية حسب معيار ISO
              extra_fields:
                type: object
                description: >-
                  حقول المستند الإضافية. تتضمن سمات خاصة بالمستند (مثل
                  `dl_categories` و`blood_group` و`sponsor` و`employer`
                  و`dl_class_code_b_from` و`dl_class_code_b_to`). تُعاد تواريخ
                  صلاحية فئة رخصة القيادة بتنسيق `dl_class_code_<class>_from`
                  و`dl_class_code_<class>_to`، ورموز القيود/المعلومات لكل فئة
                  (مثل العمود 12 في رخص المملكة المتحدة) بتنسيق
                  `dl_class_code_<class>_notes`. عندما يحتوي المستند على أسماء
                  أو عنوان أو مكان الميلاد بأنظمة كتابة متعددة، يتضمن هذا الكائن
                  أيضاً إصدارات بنظام الكتابة البديل لتلك الحقول. يتحكم إعداد
                  سير العمل `preferred_characters` (`latin` أو `non_latin`) في
                  نظام الكتابة الذي يملأ الحقول من المستوى الأعلى (`first_name`
                  و`last_name` و`full_name` و`address` و`place_of_birth`)؛ بينما
                  يظهر نظام الكتابة المعاكس هنا باسم `first_name_non_latin` /
                  `last_name_non_latin` / `full_name_non_latin` /
                  `middle_name_non_latin` / `address_non_latin` /
                  `place_of_birth_non_latin` (عندما تكون `preferred_characters`
                  هي `latin`) أو مع لاحقة `_latin` (عندما تكون
                  `preferred_characters` هي `non_latin`). تظهر المفاتيح فقط
                  عندما يستخرج OCR بالفعل قيمة حقيقية بنظام كتابة بديل، ويتم
                  تخطي أي حقل تكون قيمته البديلة بنفس نظام كتابة المجموعة
                  المفضلة (على سبيل المثال، حقل مصنف بالسيريلية وتكون قيمة OCR
                  الخاصة به قد عادت بأحرف لاتينية متشابهة الشكل). عندما تكون
                  `preferred_characters` هي `latin` لكن المستند يحتوي فقط على نص
                  غير لاتيني، تقوم Didit بنقل الحروف صوتياً للقيم المستخرجة
                  وتوفر `first_name_latin` / `last_name_latin` / إلخ كخيار
                  احتياطي.
                additionalProperties: true
                properties:
                  dl_categories:
                    type: array
                    items:
                      type: string
                  blood_group:
                    type: string
                    nullable: true
                  first_name_non_latin:
                    type: string
                    description: >-
                      الاسم الأول بنظام كتابة غير لاتيني عندما تكون
                      `preferred_characters=latin` وتتوفر نسخة غير لاتينية في
                      المستند (مثل `Айна` لبطاقة هوية قيرغيزية).
                  last_name_non_latin:
                    type: string
                    description: >-
                      اسم العائلة بنظام الكتابة غير اللاتيني عندما تكون قيمة
                      `preferred_characters=latin` وتتوفر نسخة غير لاتينية في
                      المستند.
                  middle_name_non_latin:
                    type: string
                    description: >-
                      الاسم الأوسط / اسم الأب بنظام الكتابة غير اللاتيني عندما
                      يكون `preferred_characters=latin` وتتوفر نسخة غير لاتينية
                      في المستند.
                  full_name_non_latin:
                    type: string
                    description: >-
                      الاسم الكامل المركب بنظام الكتابة غير اللاتيني. يُعاد
                      تركيبه من المكونات الفردية عندما يتوفر كل من الاسم الأول
                      واسم العائلة.
                  address_non_latin:
                    type: string
                    description: >-
                      العنوان بنظام الكتابة غير اللاتيني عندما يكون
                      `preferred_characters=latin` ويتوفر إصدار غير لاتيني في
                      المستند.
                  place_of_birth_non_latin:
                    type: string
                    description: >-
                      مكان الميلاد بنظام الكتابة غير اللاتيني عندما تكون القيمة
                      `preferred_characters=latin` وتتوفر نسخة غير لاتينية على
                      المستند.
                  first_name_latin:
                    type: string
                    description: >-
                      الاسم الأول بالأحرف اللاتينية. يتم ملؤه عندما تكون
                      `preferred_characters=non_latin` وتتوفر نسخة لاتينية في
                      المستند، أو — كخيار احتياطي للنقل الحرفي — عندما تكون
                      `preferred_characters=latin` ولكن المستند لا يحتوي إلا على
                      نص غير لاتيني.
                  last_name_latin:
                    type: string
                    description: >-
                      اسم العائلة بنظام الكتابة اللاتيني. تنطبق نفس قواعد
                      `first_name_latin`.
                  middle_name_latin:
                    type: string
                    description: >-
                      الاسم الأوسط / اسم الأب بالحروف اللاتينية. نفس قواعد
                      `first_name_latin`.
                  full_name_latin:
                    type: string
                    description: >-
                      الاسم الكامل المركب بنظام الكتابة اللاتيني. يُعاد تركيبه
                      دائماً من المكونات الفردية عندما يتوفر كل من الاسم الأول
                      واسم العائلة.
                  address_latin:
                    type: string
                    description: >-
                      العنوان بنظام الكتابة اللاتيني. نفس قواعد
                      `first_name_latin`.
                  place_of_birth_latin:
                    type: string
                    description: >-
                      مكان الميلاد بنظام الكتابة اللاتيني. تنطبق نفس قواعد
                      `first_name_latin`.
              mrz:
                type: object
                nullable: true
                description: >-
                  حقول منطقة القراءة الآلية (MRZ) المحللة والمستخرجة من المستند.
                  القيمة `null` في حال عدم اكتشاف أي MRZ.
                properties:
                  surname:
                    type: string
                    example: MARTINEZ<SANCHEZ
                  name:
                    type: string
                    example: ELENA
                  country:
                    type: string
                    example: ESP
                  nationality:
                    type: string
                    example: ESP
                  birth_date:
                    type: string
                    example: '850315'
                  expiry_date:
                    type: string
                    example: '220821'
                  sex:
                    type: string
                    example: F
                  document_type:
                    type: string
                    example: ID
                  document_number:
                    type: string
                    example: YZA123456
                  optional_data:
                    type: string
                    example: X9876543L
                  optional_data_2:
                    type: string
                    example: ''
                  birth_date_hash:
                    type: string
                    example: '7'
                  expiry_date_hash:
                    type: string
                    example: '4'
                  document_number_hash:
                    type: string
                    example: '9'
                  final_hash:
                    type: string
                    example: '2'
                  personal_number:
                    type: string
                    example: X9876543L
                  warnings:
                    type: array
                    items:
                      type: string
                  errors:
                    type: array
                    items:
                      type: string
                  mrz_type:
                    type: string
                    example: TD1
                  mrz_string:
                    type: string
                    example: |-
                      IDESPMARTINEZ<SANCHEZ<<<<<<<<<<
                      YZA123456<9ESP8503157F3208214<X9876543L<<<<<<<2
                      MARTINEZ<SANCHEZ<<ELENA<<<<<<<<<<
                  mrz_key:
                    type: string
                    example: YZA123456985031573208214
              parsed_address:
                type: object
                description: تفاصيل العنوان المهيكل
                properties:
                  city:
                    type: string
                  label:
                    type: string
                  region:
                    type: string
                  country:
                    type: string
                    description: رمز الدولة المكون من حرفين
                  category:
                    type: string
                    description: فئة العنوان (مثل Residential، Commercial)
                  street_1:
                    type: string
                  street_2:
                    type: string
                    nullable: true
                  is_verified:
                    type: boolean
                    description: ما إذا كان قد تم التحقق من العنوان
                  postal_code:
                    type: string
                  raw_results:
                    type: object
                    properties:
                      types:
                        type: array
                        items:
                          type: string
                      geometry:
                        type: object
                        properties:
                          location:
                            type: object
                            properties:
                              lat:
                                type: number
                              lng:
                                type: number
                          viewport:
                            type: object
                            properties:
                              northeast:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                              southwest:
                                type: object
                                properties:
                                  lat:
                                    type: number
                                  lng:
                                    type: number
                          location_type:
                            type: string
                      place_id:
                        type: string
                      formatted_address:
                        type: string
                      navigation_points:
                        type: array
                        items:
                          type: object
                          properties:
                            location:
                              type: object
                              properties:
                                latitude:
                                  type: number
                                longitude:
                                  type: number
                      address_components:
                        type: array
                        items:
                          type: object
                          properties:
                            types:
                              type: array
                              items:
                                type: string
                            long_name:
                              type: string
                            short_name:
                              type: string
                  address_type:
                    type: string
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                      longitude:
                        type: number
                  formatted_address:
                    type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: ملفات إضافية للتحقق من المستند
              front_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  درجة مطابقة الوجه بين الصورة الشخصية المستخرجة من الصورة
                  الأمامية للمستند وصورة الكاميرا الأمامية
              back_image_camera_front_face_match_score:
                type: number
                nullable: true
                description: >-
                  درجة مطابقة الوجه بين الصورة الشخصية المستخرجة من الصورة
                  الخلفية للمستند وصورة الكاميرا الأمامية
              document_selfie_face_matches:
                type: array
                description: >-
                  الجلسات السابقة أو إدخالات قائمة حظر الوجوه التي تطابق وجهها
                  مع صورة السيلفي التي التقطتها الكاميرا الأمامية أثناء التقاط
                  المستند (البحث بالوجه عبر الالتقاط الصامت). نفس تنسيق الإدخال
                  مثل `liveness_checks[].matches`. تكون القيمة `null` للجلسات
                  التي تم إنشاؤها قبل وجود هذا الحقل أو عند عدم تشغيل البحث؛
                  ومصفوفة فارغة عند تشغيله وعدم العثور على أي تطابق.
                  `match_image_url` هو رابط موقع مسبقاً تنتهي صلاحيته.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف الجلسة للوجه المتطابق. يكون `null` عندما يكون
                        `source` هو `imported` أو `list_entry` أو
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: درجة تشابه الوجه بين الصورتين، محصورة بين 0 و100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` للجلسة المطابقة أو المستخدم المرتبط للوجوه
                        المستوردة والوجوه ذات القوالب المحتفظ بها.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف المستخدم المرتبط لتطابقات `imported`
                        و`retained_template` ولتطابقات الجلسات المرتبطة بمستخدم.
                        يكون `null` لمدخلات القوائم والجلسات غير المرتبطة
                        بمستخدم.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف القالب البيومتري المحتفظ به. يتم تعيينه فقط عندما
                        يكون `source` هو `retained_template`؛ و`null` بخلاف ذلك.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        متى تم التقاط الوجه المطابق، أو متى تم إنشاء قالب محتفظ
                        به. وتكون `null` لمدخلات القائمة.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        بيانات الهوية من الجلسة المتطابقة أو ملف تعريف المستخدم
                        المستورد. تكون دائماً `null` للتطابقات من نوع
                        `retained_template` و`list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        صورة مرجعية لعمليات المطابقة المستندة إلى الصور. تكون
                        دائماً `null` لمطابقات `retained_template` لأن القوالب
                        المحتفظ بها لا تحتوي على صورة.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        حالة دورة حياة الجلسة المتطابقة. تكون `null` للمصادر
                        التي ليست جلسات.
                    is_blocklisted:
                      type: boolean
                      description: ما إذا كان الوجه المطابق موجوداً في قائمة الحظر.
                    is_allowlisted:
                      type: boolean
                      description: ما إذا كان الوجه المطابق موجوداً في قائمة السماح.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        خدمة API المستقلة للجلسة المطابقة (مثل
                        `PASSIVE_LIVENESS`، و`FACE_MATCH`)؛ وتكون القيمة `null`
                        لجلسات سير العمل والمصادر غير المرتبطة بجلسة.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        أصل الوجه المطابق: `session`، أو `imported` (تحميل وجه
                        المستخدم User)، أو `list_entry` (قائمة السماح/الحظر)، أو
                        `retained_template` (قالب بيومتري خالٍ من الصور محفوظ
                        لدى User، مدرج تحت `/v3/biometric-templates/`).
                nullable: true
              front_image_quality_score:
                type: object
                nullable: true
                description: >-
                  مقاييس جودة صورة الوجه الأمامي للمستند. تتراوح كل درجة فرعية
                  بين 0 و100.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      وضوح الصورة مقاساً عبر تباين Laplacian المحلي لأعلى 10%.
                      متين في مواجهة المستندات ذات الخلفيات الموحدة الكبيرة.
                      تشير القيم الأعلى إلى صورة أكثر وضوحاً وأقل ضبابية.
                  brightness_score:
                    type: number
                    description: >-
                      مدى جودة إضاءة الصورة. تُفرَض عقوبة على الصور شديدة
                      الإعتام أو المفرطة في التعرض للضوء، وتكون درجة السطوع
                      المثالية حول النطاق المتوسط.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      يشير إلى اتجاه مشكلة السطوع عندما تكون brightness_score
                      منخفضة. تعني 'ok' أن السطوع مقبول، وتعني 'too_dark' أن
                      الصورة غير معرّضة للضوء بشكل كافٍ، وتعني 'too_bright' أن
                      الصورة معرّضة للضوء بشكل مفرط.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true إذا كانت جميع الزوايا الأربع للمستند مرئية بالكامل
                      داخل إطار الصورة، وfalse إذا كانت أي زاوية مقتطعة. وتكون
                      Null عند عدم توفر إحداثيات الزوايا.
                  resolution_score:
                    type: number
                    description: الدقة الفعلية للصورة بناءً على إجمالي عدد وحدات البكسل.
                  overall_score:
                    type: number
                    description: >-
                      مركّب موزون من الدرجات الفرعية (التركيز 45%، السطوع 30%،
                      الدقة 25%).
              back_image_quality_score:
                type: object
                nullable: true
                description: >-
                  مقاييس جودة صورة الوجه الخلفي للمستند. نفس بنية
                  front_image_quality_score.
                properties:
                  focus_score:
                    type: number
                    description: >-
                      وضوح الصورة مقاساً عبر تباين Laplacian المحلي لأعلى 10%.
                      متين في مواجهة المستندات ذات الخلفيات الموحدة الكبيرة.
                      تشير القيم الأعلى إلى صورة أكثر وضوحاً وأقل ضبابية.
                  brightness_score:
                    type: number
                    description: >-
                      مدى جودة إضاءة الصورة. تُفرَض عقوبة على الصور شديدة
                      الإعتام أو المفرطة في التعرض للضوء، وتكون درجة السطوع
                      المثالية حول النطاق المتوسط.
                  brightness_issue:
                    type: string
                    enum:
                      - ok
                      - too_dark
                      - too_bright
                    description: >-
                      يشير إلى اتجاه مشكلة السطوع عندما تكون brightness_score
                      منخفضة. تعني 'ok' أن السطوع مقبول، وتعني 'too_dark' أن
                      الصورة غير معرّضة للضوء بشكل كافٍ، وتعني 'too_bright' أن
                      الصورة معرّضة للضوء بشكل مفرط.
                  is_document_fully_visible:
                    type: boolean
                    nullable: true
                    description: >-
                      true إذا كانت جميع الزوايا الأربع للمستند مرئية بالكامل
                      داخل إطار الصورة، وfalse إذا كانت أي زاوية مقتطعة. وتكون
                      Null عند عدم توفر إحداثيات الزوايا.
                  resolution_score:
                    type: number
                    description: الدقة الفعلية للصورة بناءً على إجمالي عدد وحدات البكسل.
                  overall_score:
                    type: number
                    description: >-
                      مركّب موزون من الدرجات الفرعية (التركيز 45%، السطوع 30%،
                      الدقة 25%).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير (مثل `ID_VERIFICATION`،
                        و`NFC`، و`LIVENESS`). تحدد القيمة كتلة الميزة التي ينتمي
                        إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات كل وحدة
                        نمطية القيمة المطابقة لوحدتها، ولكن التعداد (enum) أعلاه
                        هو المرجع المعتمد عبر جميع تحذيرات الميزات في payload
                        القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                      description: بيانات سياقية إضافية حول التحذير
                    log_type:
                      type: string
                      description: 'نوع السجل: معلومات، أو تحذير، أو خطأ'
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: >-
                        معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير (لسير
                        العمل المعتمد على المخططات)
                description: تحذيرات التحقق من المستند
              matches:
                type: array
                description: >-
                  المستندات المطابقة التي تم العثور عليها أثناء كشف
                  التكرار/قائمة الحظر (ما يصل إلى 5 تطابقات)
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: معرّف الجلسة للمستند المتطابق
                    session_number:
                      type: integer
                      description: رقم الجلسة للمستند المطابق
                    vendor_data:
                      type: string
                      nullable: true
                      description: بيانات المزود المرتبطة بجلسة المطابقة
                    verification_date:
                      type: string
                      format: date-time
                      description: تاريخ التحقق من جلسة المطابقة
                    user_details:
                      type: object
                      properties:
                        name:
                          type: string
                          description: الاسم الكامل من المستند المطابق
                        document_type:
                          type: string
                          description: نوع المستند المطابق
                        document_number:
                          type: string
                          description: رقم المستند الخاص بالمستند المطابق
                    status:
                      type: string
                      description: حالة الجلسة المتطابقة
                    is_blocklisted:
                      type: boolean
                      description: ما إذا كان المستند المطابق مدرجاً في قائمة الحظر
                    api_service:
                      type: string
                      nullable: true
                      description: نوع خدمة API للجلسة المتطابقة
                    front_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: رابط URL لصورة وجه المستند من المستند المطابق
              document_liveness:
                type: object
                nullable: true
                description: >-
                  درجات كشف الحيوية الخاصة بالمستند لكل نوع من أنواع الاحتيال،
                  ويتم الإبلاغ عنها سواء أُطلق تحذير أم لا، حتى يمكن تدقيق
                  المستند المقبول. وتكون `null` عندما لا يتم تشغيل الفحص.
                properties:
                  portrait_replace:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          احتمالية أن يكون المستند أصلياً لنوع الاحتيال هذا، من
                          0 إلى 100 (كلما زادت القيمة = زاد احتمال كونه أصلياً).
                          أدنى قيمة بين الجانبين - وهي القيمة التي استند إليها
                          القرار. تكون `null` إذا لم ينتج عن أي من الجانبين درجة
                          قابلة للاستخدام.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الأمامي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الخلفي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد الرفض المحفوظ عند تقييم هذا المستند. لا تؤدي
                          تعديلات سير العمل اللاحقة إلى تغييره. القيمة Null عند
                          عدم توفر أدلة التقييم التاريخية.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد المراجعة المحفوظ عند تقييم هذا المستند. التعديلات
                          اللاحقة على سير العمل لا تغيره. يكون Null عندما لا
                          تتوفر أدلة التقييم التاريخية.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          فئة نوع الاحتيال المحفوظة وقت التقييم. تكون Null عندما
                          لا تتوفر درجة قابلة للاستخدام، أو لم يتم تطبيق الفحص،
                          أو لا تتوفر أدلة تقييم تاريخية. التعديلات اللاحقة على
                          سير العمل لا تغيّرها.
                  printed_copy:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          احتمالية أن يكون المستند أصلياً لنوع الاحتيال هذا، من
                          0 إلى 100 (كلما زادت القيمة = زاد احتمال كونه أصلياً).
                          أدنى قيمة بين الجانبين - وهي القيمة التي استند إليها
                          القرار. تكون `null` إذا لم ينتج عن أي من الجانبين درجة
                          قابلة للاستخدام.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الأمامي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الخلفي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد الرفض المحفوظ عند تقييم هذا المستند. لا تؤدي
                          تعديلات سير العمل اللاحقة إلى تغييره. القيمة Null عند
                          عدم توفر أدلة التقييم التاريخية.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد المراجعة المحفوظ عند تقييم هذا المستند. التعديلات
                          اللاحقة على سير العمل لا تغيره. يكون Null عندما لا
                          تتوفر أدلة التقييم التاريخية.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          فئة نوع الاحتيال المحفوظة وقت التقييم. تكون Null عندما
                          لا تتوفر درجة قابلة للاستخدام، أو لم يتم تطبيق الفحص،
                          أو لا تتوفر أدلة تقييم تاريخية. التعديلات اللاحقة على
                          سير العمل لا تغيّرها.
                  screen_replay:
                    type: object
                    nullable: true
                    properties:
                      score:
                        type: number
                        nullable: true
                        description: >-
                          احتمالية أن يكون المستند أصلياً لنوع الاحتيال هذا، من
                          0 إلى 100 (كلما زادت القيمة = زاد احتمال كونه أصلياً).
                          أدنى قيمة بين الجانبين - وهي القيمة التي استند إليها
                          القرار. تكون `null` إذا لم ينتج عن أي من الجانبين درجة
                          قابلة للاستخدام.
                      front:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الأمامي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      back:
                        type: number
                        nullable: true
                        description: >-
                          درجة الوجه الخلفي؛ وتكون `null` عندما لا يتم التقاطه
                          أو عند إسقاط الدرجة.
                      decline_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد الرفض المحفوظ عند تقييم هذا المستند. لا تؤدي
                          تعديلات سير العمل اللاحقة إلى تغييره. القيمة Null عند
                          عدم توفر أدلة التقييم التاريخية.
                      review_threshold:
                        type: number
                        nullable: true
                        description: >-
                          حد المراجعة المحفوظ عند تقييم هذا المستند. التعديلات
                          اللاحقة على سير العمل لا تغيره. يكون Null عندما لا
                          تتوفر أدلة التقييم التاريخية.
                      bucket:
                        type: string
                        nullable: true
                        enum:
                          - approve
                          - review
                          - decline
                          - null
                        description: >-
                          فئة نوع الاحتيال المحفوظة وقت التقييم. تكون Null عندما
                          لا تتوفر درجة قابلة للاستخدام، أو لم يتم تطبيق الفحص،
                          أو لا تتوفر أدلة تقييم تاريخية. التعديلات اللاحقة على
                          سير العمل لا تغيّرها.
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  التحقق من صحة العنوان للعنوان المطبوع على هذا المستند: ما إذا
                  كان موجوداً وصيغته الموحدة، كما قرأها المستند (أي تصحيح لاحق
                  لـ `address` لا يعيد تشغيله). يظهر عندما تُفعّل خطوة التحقق من
                  الهوية هذه الميزة الإضافية للتحقق من العنوان؛ ويكون `null`
                  بخلاف ذلك.
              region:
                type: string
                nullable: true
                description: منطقة أو ولاية دولة إصدار المستند عندما يحدد المستند ذلك.
              extracted_data:
                type: object
                nullable: true
                additionalProperties: true
                description: >-
                  لقطة للبيانات المستخرجة من المستند والتي تم عرضها على الشخص
                  لمراجعتها، محفوظة بجانب القيم المؤكدة حتى تتمكن من مقارنة ما
                  تمت قراءته بما أكده الشخص. تكون `null` عندما لا يُطلب من الشخص
                  المراجعة.
              barcodes:
                type: array
                items:
                  type: object
                  additionalProperties: true
                description: >-
                  البيانات المقروءة من الرموز الشريطية (barcodes) للمستند. تكون
                  فارغة عندما لا يحتوي المستند على أي منها أو لم تتم قراءة أي
                  منها.
        nfc_skip_reason:
          type: string
          nullable: true
          enum:
            - USER_SKIPPED
            - DOCUMENT_WITHOUT_CHIP
            - CHIP_CERTIFICATE_UNAVAILABLE
            - DEVICE_WITHOUT_NFC
            - INTEGRATION_WITHOUT_NFC_ACCESS
            - MRZ_KEY_UNAVAILABLE
            - JPKI_UNAVAILABLE
          description: >-
            سبب عدم تشغيل التحقق من شريحة NFC، ويتم ملؤه كلما تضمن سير العمل
            خطوة NFC. تكون القيمة `null` أثناء انتظار NFC أو عند قراءة الشريحة
            بالفعل. القيم: `USER_SKIPPED` - اختار المستخدم التخطي على جهاز يدعم
            NFC (مسموح به عبر `allow_nfc_skip`)؛ `DOCUMENT_WITHOUT_CHIP` - لا
            يحتوي المستند على شريحة NFC قابلة للقراءة (ليس مستنداً إلكترونياً
            متوافقاً مع ICAO 9303)؛ `CHIP_CERTIFICATE_UNAVAILABLE` - شهادة
            التوقيع الخاصة بدولة الإصدار (CSCA) التي تغطي فترة إصدار المستند غير
            متوفرة، لذا لا يمكن التحقق من توقيع الشريحة؛ `DEVICE_WITHOUT_NFC` -
            أبلغ الجهاز عن عدم وجود قارئ NFC؛ `INTEGRATION_WITHOUT_NFC_ACCESS` -
            تم تشغيل التحقق بدون SDK أصلي (على سبيل المثال في متصفح الويب)،
            والذي لا يملك صلاحية الوصول إلى قارئ NFC بالهاتف؛
            `MRZ_KEY_UNAVAILABLE` - تعذر اشتقاق مفتاح الوصول إلى الشريحة من كود
            MRZ للمستند؛ `JPKI_UNAVAILABLE` - المستند هو بطاقة My Number
            اليابانية، والتي تُقرأ شريحتها عبر JPKI، ولم يكن JPKI متوفراً لعملية
            التحقق هذه: فهو غير مُمكّن، أو أن SDK الأصلي للتطبيق لا يمكنه قراءة
            بطاقات My Number.
        nfc_verifications:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير التحقق عبر NFC / جواز السفر الإلكتروني** الناتجة
            عن خطوات NFC في مخطط سير العمل. **هذه دائماً مصفوفة JSON، وليست كائن
            `nfc` مفرداً أبداً** — اقرأ `nfc_verifications[0]` وكرّر القراءة إذا
            كان بإمكان سير العمل لديك تشغيل NFC أكثر من مرة. تكون `null` حتى
            تُنتج خطوة NFC واحدة على الأقل بيانات. يمثل كل عنصر التقرير الكامل،
            بما في ذلك `node_id`، و`status` على مستوى الميزة، و`chip_protocol`،
            و`chip_data`، و`authenticity` (سلامة SOD + DG)،
            و`certificate_summary`، و`warnings[]`. تتم قراءة بطاقة My Number
            اليابانية عبر JPKI بدلاً من ICAO 9303: يحتوي عنصرها على
            `chip_protocol: "jpki"`، ويحمل أدلته تحت `jpki`، ويترك حقول ICAO
            بقيمة `null`. عندما يتم تجاوز خطوة NFC قبل أن تُتاح للمستخدم أصلاً
            (مستند بدون شريحة، أو شهادة مفقودة، أو عدم الإبلاغ عن إمكانية NFC،
            أو مفتاح MRZ غير قابل للقراءة، أو عدم توفر JPKI لبطاقة My Number)،
            يظل هذا الحقل `null` ويوضح `nfc_skip_reason` السبب؛ أما التخطي في
            الخطوة نفسها (نقر المستخدم على تخطٍّ، أو تبيّن عدم توفر القارئ في
            وقت المسح) فيظل يُنتج تقريراً مع `is_nfc_skipped: true`.
          items:
            type: object
            description: >-
              تقرير NFC واحد: التقرير الكامل لقراءة شريحة واحدة (شريحة جواز سفر
              إلكتروني أو بطاقة هوية إلكترونية وفق معيار ICAO 9303، أو بطاقة My
              Number اليابانية المقروءة عبر JPKI).
            properties:
              node_id:
                type: string
                description: >-
                  معرّف عقدة مخطط سير العمل لخطوة NFC التي أنتجت هذا التقرير.
                  استخدمه لربط التقرير بتعريف سير العمل.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  حالة مستوى الميزة لخطوة NFC هذه. مستقلة عن `status` الجلسة من
                  المستوى الأعلى — يمكن أن تصل الجلسة إلى قرارها العام بينما تظل
                  الميزة الفردية `In Review`.
              is_nfc_skipped:
                type: boolean
                description: >-
                  تكون `true` عندما يتم تخطي خطوة NFC هذه صراحةً بدلاً من
                  قراءتها؛ ويوضح `skip_reason` السبب.
              skip_reason:
                type: string
                nullable: true
                enum:
                  - USER_SKIPPED
                  - DOCUMENT_WITHOUT_CHIP
                  - CHIP_CERTIFICATE_UNAVAILABLE
                  - DEVICE_WITHOUT_NFC
                  - INTEGRATION_WITHOUT_NFC_ACCESS
                  - MRZ_KEY_UNAVAILABLE
                  - JPKI_UNAVAILABLE
                description: >-
                  سبب تخطي خطوة NFC هذه. يُعيّن فقط عندما تكون `is_nfc_skipped`
                  بقيمة `true`. يتبع نفس تصنيف `nfc_skip_reason` على مستوى
                  الجلسة، والذي يغطي أيضاً الحالات التي لم يُنشئ فيها NFC
                  تقريراً على الإطلاق.
              chip_protocol:
                type: string
                enum:
                  - icao
                  - jpki
                description: >-
                  كيفية قراءة شريحة خطوة NFC. `icao`: شريحة جواز السفر
                  الإلكتروني أو بطاقة الهوية الإلكترونية وفق معيار ICAO 9303،
                  والتي تُفتح باستخدام مفتاح الوصول من MRZ. `jpki`: بطاقة My
                  Number اليابانية، حيث تقوم البطاقة بتوقيع تحدٍ يُستخدم لمرة
                  واحدة بعد قيام حاملها بإدخال رقم PIN للبطاقة في SDK أصلي؛
                  وتكون النتيجة ضمن `jpki`. وتُحدد أيضاً في الخطوات المتخطاة،
                  حتى تتمكن من تمييز قراءة بطاقة My Number المتخطاة.
              jpki:
                type: object
                nullable: true
                description: >-
                  ما أثبتته قراءة بطاقة My Number اليابانية عبر JPKI. يكون
                  موجوداً عندما يكون `chip_protocol` هو `jpki` وتتم قراءة
                  البطاقة. `null` لرقائق ICAO، وللخطوات التي تم تخطيها، وعند
                  إغلاق خطوة NFC دون قراءة أي بطاقة (تثير هذه الحالة
                  `JPKI_SIGNATURE_INVALID`). لا يحمل مطلقاً الشهادات أو أرقامها
                  التسلسلية أو التوقيعات أو رقم My Number المكون من 12 رقماً.
                properties:
                  certificate_types:
                    type: array
                    items:
                      type: string
                      enum:
                        - user_authentication
                        - signature
                    description: >-
                      شهادات البطاقة المقروءة. تُقرأ `user_authentication` (رمز
                      PIN المكون من 4 أرقام) دائماً؛ وتُقرأ `signature` (رمز PIN
                      الخاص بالتوقيع) عند تفعيل إعداد `jpki_request_attributes`
                      الخاص بعقدة NFC.
                  chain_valid:
                    type: boolean
                    description: >-
                      تكون القيمة `true` عندما تتسلسل كل شهادة مقروءة إلى سلطة
                      تصديق JPKI، وتكون ضمن فترة صلاحيتها، وتكون شهادة My Number
                      Card من نوعها.
                  signature_valid:
                    type: boolean
                    description: >-
                      تكون القيمة `true` عندما يتم التحقق بنجاح من كل توقيع
                      أجرته البطاقة على التحدي المخصص لمرة واحدة. لا توقّع
                      البطاقة إلا بعد إدخال رمز PIN الخاص بها، مما يثبت حيازة
                      البطاقة ومعرفة رمز PIN.
                  revocation_status:
                    type: string
                    enum:
                      - good
                      - revoked
                      - unchecked
                    description: >-
                      `good` عندما يؤكد فحص الإلغاء أن كل شهادة صالحة،
                      و`revoked` عند إلغاء أي شهادة (على سبيل المثال، بطاقة تم
                      الإبلاغ عن فقدانها)، و`unchecked` عندما لا تتوفر أي إجابة
                      بشأن الإلغاء. لا تتم معاملة `unchecked` على أنها `good`
                      أبداً: يحدد `jpki_revocation_unchecked_action` الخاص بعقدة
                      NFC النتيجة (الافتراضي هو `REVIEW`).
                  ca_generation:
                    type: string
                    nullable: true
                    description: >-
                      جيل جهة إصدار شهادات JPKI التي أصدرت الشهادات، على سبيل
                      المثال `2023`. يكون `null` عندما لا ترتبط أي شهادة بسلسلة
                      تصل إلى جهة إصدار منها.
                  certificate_expires_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: أقرب تاريخ انتهاء صلاحية بين الشهادات المقروءة.
                  certificates:
                    type: array
                    items:
                      type: object
                      description: >-
                        ما أثبتته شهادة واحدة تمت قراءتها من البطاقة. لا يعرض
                        الشهادة نفسها أو رقمها التسلسلي أبداً.
                      properties:
                        type:
                          type: string
                          enum:
                            - user_authentication
                            - signature
                          description: أي شهادة بطاقة يصفها هذا الإدخال.
                        chain_valid:
                          type: boolean
                          description: >-
                            تكون القيمة `true` عندما تتسلسل الشهادة إلى سلطة
                            تصديق JPKI الخاصة بنوعها، وتكون ضمن فترة صلاحيتها،
                            وتكون شهادة My Number Card من ذلك النوع.
                        signature_valid:
                          type: boolean
                          description: >-
                            تكون القيمة `true` عند التحقق بنجاح من توقيع البطاقة
                            على التحدي المخصص لمرة واحدة مقابل هذه الشهادة.
                        ca_generation:
                          type: string
                          nullable: true
                          description: >-
                            جيل جهة إصدار شهادات JPKI التي أصدرت الشهادة، على
                            سبيل المثال `2023`. يكون `null` عند عدم العثور على
                            جهة إصدار موثوقة.
                        not_valid_before:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            بداية فترة صلاحية الشهادة. يكون `null` عندما يتعذر
                            قراءة الشهادة.
                        not_valid_after:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            نهاية فترة صلاحية الشهادة. `null` عندما يتعذر قراءة
                            الشهادة.
                        failure:
                          type: string
                          nullable: true
                          enum:
                            - unreadable_certificate
                            - untrusted_issuer
                            - expired
                            - not_yet_valid
                            - wrong_policy
                            - key_usage
                            - null
                          description: >-
                            سبب كون `chain_valid` هو `false`: إما
                            `unreadable_certificate`، أو `untrusted_issuer` (غير
                            صادرة عن جهة اعتماد JPKI من نوعها)، أو `expired`، أو
                            `not_yet_valid`، أو `wrong_policy` (ليست شهادة بطاقة
                            My Number من ذلك النوع) أو `key_usage` (المفتاح لا
                            يجوز له التوقيع). وتكون القيمة `null` عندما تكون
                            السلسلة صالحة.
                    description: النتائج لكل شهادة، إدخال واحد لكل شهادة تمت قراءتها.
                  attributes:
                    type: object
                    nullable: true
                    description: >-
                      بيانات الحامل من شهادة التوقيع، بمجرد أن تصبح سلسلتها
                      صالحة. `null` عندما لا تُطلب شهادة التوقيع أو لم تتسلسل
                      إلى سلطة التصديق JPKI.
                    properties:
                      full_name:
                        type: string
                        nullable: true
                        description: الاسم كما هو مسجل، عادةً بنظام الكتابة الياباني.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                        description: >-
                          تاريخ الميلاد، `YYYY-MM-DD`. يكون `null` عندما يكون
                          التاريخ المسجل غير مكتمل.
                      gender:
                        type: string
                        nullable: true
                        enum:
                          - M
                          - F
                          - null
                        description: '`M` أو `F` أو `null` عند عدم التسجيل.'
                      address:
                        type: string
                        nullable: true
                        description: العنوان المسجل.
                      name_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          سلسلة مواضع تشير إلى أحرف `full_name` التي تم
                          استبدالها ببديل لأن الحرف الأصلي خارج مجموعة الأحرف
                          القياسية. تكون `null` في حال لم يتم استبدال أي حرف.
                      address_substitute_characters:
                        type: string
                        nullable: true
                        description: >-
                          سلسلة مواضع تشير إلى الأحرف البديلة في `address`، كما
                          هو الحال مع `name_substitute_characters`.
                  attributes_match_ocr:
                    type: boolean
                    nullable: true
                    description: >-
                      `true` عندما تتطابق السمات مع البيانات المقروءة من صورة
                      البطاقة نفسها، و`false` عندما تختلف أي سمة
                      (`JPKI_AND_OCR_DATA_NOT_SAME`)، و`null` عندما يتعذر مقارنة
                      أي شيء، بما في ذلك عندما تكون قيمة `attributes` هي `null`.
                  mismatched_attributes:
                    type: array
                    items:
                      type: string
                      enum:
                        - full_name
                        - date_of_birth
                        - gender
                        - address
                    description: >-
                      أسماء السمات التي تختلف عن بيانات الصورة، دون قيمها
                      إطلاقاً. تكون فارغة عندما يتطابق كل ما تمت مقارنته.
              portrait_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  رابط موقع مسبقاً للصورة الشخصية المقروءة من الشريحة (ICAO
                  DG2). تكون القيمة `null` في حالة قراءة JPKI (`chip_protocol:
                  "jpki"`) وللخطوات التي تم تخطيها.
              signature_image:
                type: string
                format: uri
                nullable: true
                description: >-
                  رابط موقع مسبقاً لصورة توقيع حامل المستند المقروءة من الشريحة
                  (ICAO DG7)، عندما تحتوي الشريحة على توقيع مخزن. تكون القيمة
                  `null` في حالة قراءة JPKI (`chip_protocol: "jpki"`) وللخطوات
                  التي تم تخطيها.
              chip_data:
                type: object
                nullable: true
                description: >-
                  البيانات الشخصية التي تم تحليلها من مجموعات البيانات (Data
                  Groups) لشريحة ICAO. تكون `null` لقراءة JPKI (`chip_protocol:
                  "jpki"`) وللخطوات التي تم تخطيها.
                properties:
                  document_type:
                    type: string
                  issuing_country:
                    type: string
                  document_number:
                    type: string
                  expiration_date:
                    type: string
                    format: date
                  first_name:
                    type: string
                  last_name:
                    type: string
                  birth_date:
                    type: string
                    format: date
                  gender:
                    type: string
                  nationality:
                    type: string
                  address:
                    type: string
                  place_of_birth:
                    type: string
              authenticity:
                type: object
                nullable: true
                description: >-
                  المصادقة السلبية لـ ICAO: توقيع SOD (`sod_integrity`) وتجزئات
                  Data Group (`dg_integrity`). تكون `null` لقراءة JPKI، والتي
                  تبلّغ عن إثباتها ضمن `jpki`.
                properties:
                  sod_integrity:
                    type: boolean
                  dg_integrity:
                    type: boolean
              certificate_summary:
                type: object
                nullable: true
                description: >-
                  ملخص لشهادة موقّع المستندات (Document Signer Certificate) وفق
                  ICAO. تكون القيمة `null` لقراءة JPKI (`chip_protocol: "jpki"`)
                  وللخطوات التي تم تخطيها.
                properties:
                  issuer:
                    type: string
                  subject:
                    type: string
                  serial_number:
                    type: string
                  not_valid_after:
                    type: string
                    format: date-time
                  not_valid_before:
                    type: string
                    format: date-time
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
        liveness_checks:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير كشف الحيوية** التي تم إنشاؤها بواسطة خطوات كشف
            الحيوية في مخطط سير العمل. دائماً ما تكون مصفوفة JSON — وليست كائن
            `liveness` مفرداً أبداً. تكون `null` حتى تنتج خطوة كشف حيوية واحدة
            على الأقل بيانات. يمثل كل عنصر التقرير الكامل، بما في ذلك `node_id`،
            و`status` على مستوى الميزة، و`method`، و`score`، و`reference_image`،
            و`video_url`، و`age_estimation` الاختياري، و`matches[]` عبر الجلسات،
            و`warnings[]`.
          items:
            type: object
            description: تقرير كشف حيوية واحد — التقرير الكامل لجولة كشف حيوية فردية.
            properties:
              node_id:
                type: string
                description: >-
                  معرّف عقدة مخطط سير العمل لخطوة كشف الحيوية التي أنتجت هذا
                  التقرير.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  حالة مستوى الميزة لخطوة كشف الحيوية هذه. مستقلة عن `status`
                  الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى قرارها العام
                  بينما تظل الميزة الفردية `In Review`.
              method:
                type: string
                description: الطريقة المستخدمة لكشف الحيوية
              score:
                type: number
                description: درجة الثقة لكشف الحيوية
              reference_image:
                type: string
                format: uri
                description: رابط URL للصورة المرجعية المستخدمة
              video_url:
                type: string
                format: uri
                description: رابط URL لفيديو فحص الحيوية
              age_estimation:
                type: number
                description: العمر التقديري للشخص
              matches:
                type: array
                description: >-
                  وجوه مشابهة عُثر عليها بواسطة البحث عن الوجوه المكررة (أعلى
                  التطابقات، وتظهر الإدخالات المدرجة في قائمة الحظر/السماح
                  أولاً). يُبيّن `source` لكل إدخال مصدر الوجه المطابق:
                  `session` (جلسة تحقق أخرى)، أو `imported` (وجه تم رفعه لمستخدم
                  مورّد)، أو `list_entry` (وجه في قائمة سماح/حظر تديرها
                  المؤسسة)، أو `retained_template` (قالب بيومتري بدون صورة مخزّن
                  لدى المستخدم، ومدرج ضمن `/v3/biometric-templates/`). تكون قيم
                  `session_id` و`session_number` و`status` و`api_service` هي
                  `null` للمصادر غير التابعة لجلسة. تظل مطابقات `imported` تملأ
                  `vendor_data` و`verification_date` و—عندما يكون لمستخدم
                  المورّد اسم مسجل—`user_details` (مع `full_name` فقط) من سجل
                  مستخدم المورّد؛ بينما تملأ مطابقات `retained_template` كلاً من
                  `vendor_user_id` و`vendor_data` و`biometric_template_id`
                  و`verification_date`، في حين تكون حقول الصور والهوية الخاصة
                  بها `null`؛ وتُرجع مطابقات `list_entry` كل هذه الحقول بقيمة
                  `null`.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف الجلسة للوجه المتطابق. يكون `null` عندما يكون
                        `source` هو `imported` أو `list_entry` أو
                        `retained_template`.
                    session_number:
                      type: integer
                      nullable: true
                    similarity_percentage:
                      type: number
                      description: درجة تشابه الوجه بين الصورتين، محصورة بين 0 و100.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` للجلسة المطابقة أو المستخدم المرتبط للوجوه
                        المستوردة والوجوه ذات القوالب المحتفظ بها.
                    vendor_user_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف المستخدم المرتبط لتطابقات `imported`
                        و`retained_template` ولتطابقات الجلسات المرتبطة بمستخدم.
                        يكون `null` لمدخلات القوائم والجلسات غير المرتبطة
                        بمستخدم.
                    biometric_template_id:
                      type: string
                      format: uuid
                      nullable: true
                      description: >-
                        معرّف القالب البيومتري المحتفظ به. يتم تعيينه فقط عندما
                        يكون `source` هو `retained_template`؛ و`null` بخلاف ذلك.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: >-
                        متى تم التقاط الوجه المطابق، أو متى تم إنشاء قالب محتفظ
                        به. وتكون `null` لمدخلات القائمة.
                    user_details:
                      type: object
                      nullable: true
                      description: >-
                        بيانات الهوية من الجلسة المتطابقة أو ملف تعريف المستخدم
                        المستورد. تكون دائماً `null` للتطابقات من نوع
                        `retained_template` و`list_entry`.
                      properties:
                        full_name:
                          type: string
                          nullable: true
                        document_type:
                          type: string
                          nullable: true
                        document_number:
                          type: string
                          nullable: true
                    match_image_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        صورة مرجعية لعمليات المطابقة المستندة إلى الصور. تكون
                        دائماً `null` لمطابقات `retained_template` لأن القوالب
                        المحتفظ بها لا تحتوي على صورة.
                    status:
                      type: string
                      nullable: true
                      description: >-
                        حالة دورة حياة الجلسة المتطابقة. تكون `null` للمصادر
                        التي ليست جلسات.
                    is_blocklisted:
                      type: boolean
                      description: ما إذا كان الوجه المطابق موجوداً في قائمة الحظر.
                    is_allowlisted:
                      type: boolean
                      description: ما إذا كان الوجه المطابق موجوداً في قائمة السماح.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        خدمة API المستقلة للجلسة المطابقة (مثل
                        `PASSIVE_LIVENESS`، و`FACE_MATCH`)؛ وتكون القيمة `null`
                        لجلسات سير العمل والمصادر غير المرتبطة بجلسة.
                    source:
                      type: string
                      enum:
                        - session
                        - imported
                        - list_entry
                        - retained_template
                      description: >-
                        أصل الوجه المطابق: `session`، أو `imported` (تحميل وجه
                        المستخدم User)، أو `list_entry` (قائمة السماح/الحظر)، أو
                        `retained_template` (قالب بيومتري خالٍ من الصور محفوظ
                        لدى User، مدرج تحت `/v3/biometric-templates/`).
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
              face_quality:
                type: number
                nullable: true
                description: درجة جودة صورة الوجه (0-100%). متاحة فقط لكشف الحيوية السلبي.
              face_luminance:
                type: number
                nullable: true
                description: درجة إضاءة/سطوع الوجه (0-100%). متاحة فقط لكشف الحيوية السلبي.
        face_matches:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير مطابقة الوجه** التي تم إنشاؤها بواسطة خطوات
            مطابقة الوجه في مخطط سير العمل. دائماً ما تكون مصفوفة JSON — وليست
            كائن `face_match` مفرداً أبداً. تكون `null` حتى تنتج خطوة مطابقة وجه
            واحدة على الأقل بيانات. يمثل كل عنصر التقرير الكامل، بما في ذلك
            `node_id`، و`status` على مستوى الميزة، و`score` التشابه،
            و`source_image`، و`target_image`، و`warnings[]`.
          items:
            type: object
            description: تقرير مطابقة وجه واحد — التقرير الكامل.
            properties:
              node_id:
                type: string
                description: >-
                  معرّف عقدة مخطط سير العمل لخطوة مطابقة الوجه التي أنتجت هذا
                  التقرير.
              status:
                type: string
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
                description: >-
                  حالة مستوى الميزة لخطوة مطابقة الوجه هذه. مستقلة عن `status`
                  الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى قرارها العام
                  بينما تظل الميزة الفردية `In Review`.
              score:
                type: number
                description: درجة الثقة لمطابقة الوجه
              source_image_session_id:
                type: string
                format: uuid
                nullable: true
                description: >-
                  معرّف الجلسة الذي تُخزّن تحته الصورة الشخصية المصدرية
                  (المرجعية). في تدفقات المصادقة البيومترية، يكون هذا هو معرّف
                  الجلسة نفسها (تُخزّن الصورة الشخصية المرسلة تحت الجلسة
                  الجديدة). يكون `null` عندما تكون الصورة المصدر هي الصورة
                  الشخصية للمستند في الجلسة نفسها.
              source_image:
                type: string
                format: uri
                description: رابط URL لصورة المصدر المستخدمة للمقارنة
              target_image:
                type: string
                format: uri
                description: رابط URL للصورة المستهدفة المستخدمة للمقارنة
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
                description: تحذيرات التحقق من مطابقة الوجه
              face_coverage:
                type: object
                nullable: true
                description: >-
                  ما إذا كانت مناطق العينين والفم والوجه مغطاة في الصورة
                  الملتقطة. يُعاد بواسطة `GET /v3/session/{sessionId}/decision/`
                  فقط؛ وهو ليس جزءاً من payload الخاصة بـ webhook. وتكون `null`
                  عند عدم وجود قراءة للتغطية.
                properties:
                  eyes:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          تعني القيمة `false` أن القراءة هي دليل ظلّي فقط ولا
                          يؤدي أي تحذير إلى اتخاذ إجراء بناءً عليها.
                      visibility_score:
                        type: number
                        nullable: true
                  mouth:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          تعني القيمة `false` أن القراءة هي دليل ظلّي فقط ولا
                          يؤدي أي تحذير إلى اتخاذ إجراء بناءً عليها.
                      visibility_score:
                        type: number
                        nullable: true
                  face:
                    type: object
                    properties:
                      covered:
                        type: boolean
                        nullable: true
                      calibrated:
                        type: boolean
                        nullable: true
                        description: >-
                          تعني القيمة `false` أن القراءة هي دليل ظلّي فقط ولا
                          يؤدي أي تحذير إلى اتخاذ إجراء بناءً عليها.
                      visibility_score:
                        type: number
                        nullable: true
        phone_verifications:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير التحقق من رقم الهاتف** — دائماً ما تكون مصفوفة
            JSON، وليست كائن `phone` مفرداً أبداً. تكون `null` حتى تنتج خطوة
            هاتف واحدة على الأقل بيانات. يمثل كل عنصر التقرير الكامل، بما في ذلك
            `node_id`، و`status` على مستوى الميزة، ورقم الهاتف والبيانات الوصفية
            للدولة، و`lifecycle[]`، و`matches[]`، و`warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: المعرّف الفريد لخطوة الهاتف هذه في مخطط سير العمل.
              status:
                type: string
                description: >-
                  حالة مستوى الميزة لخطوة التحقق من رقم الهاتف هذه. مستقلة عن
                  `status` الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى
                  قرارها العام بينما تظل الميزة الفردية `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              phone_number_prefix:
                type: string
                description: بادئة رمز الاتصال بالدولة
              phone_number:
                type: string
                description: رقم الهاتف بدون رمز الدولة
              full_number:
                type: string
                description: رقم الهاتف الكامل مع رمز الدولة
              country_code:
                type: string
                description: رمز الدولة المكون من حرفين (ISO 3166-1 alpha-2)
              country_name:
                type: string
                description: اسم الدولة الكامل
              carrier:
                type: object
                properties:
                  name:
                    type: string
                    description: اسم شركة الاتصالات
                  type:
                    type: string
                    description: نوع خط الهاتف (جوال، خط أرضي، إلخ)
              is_disposable:
                type: boolean
                description: ما إذا كان رقم الهاتف من خدمة أرقام مؤقتة
              is_virtual:
                type: boolean
                description: ما إذا كان رقم الهاتف افتراضياً
              verification_method:
                type: string
                description: الطريقة المستخدمة للتحقق من رقم الهاتف
              verification_attempts:
                type: integer
                description: عدد محاولات التحقق التي تم إجراؤها
              verified_at:
                type: string
                format: date-time
                description: الطابع الزمني للتحقق من رقم الهاتف
              lifecycle:
                type: array
                description: قائمة زمنية بالأحداث في دورة حياة التحقق من رقم الهاتف.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        الـ payload الخاص بالحدث. تحمل أحداث الإرسال `status`
                        و`reason` و`channel` و`actual_channel`؛ وتحمل أحداث
                        التسليم `channel` و`status`؛ وتحمل أحداث التحقق من الرمز
                        `code_tried` و`status`؛ وتحمل أحداث الحالة النهائية
                        `reason` — أو `null` عندما لا يكون هناك سبب للإبلاغ عنه
                        (مثل `PHONE_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        channel:
                          type: string
                          nullable: true
                        actual_channel:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              warnings:
                type: array
                description: قائمة بالتحذيرات المتعلقة بالتحقق من رقم الهاتف
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
              matches:
                type: array
                description: >-
                  التطابقات التي تم العثور عليها لرقم الهاتف هذا. كل تطابق له
                  `source`: إما `session` (جلسة تحقق أخرى في تطبيقك تطابقت مع
                  الرقم نفسه، وتُرجع مع
                  `session_id`/`session_number`/`vendor_data`/`verification_date`)
                  أو `list_entry` (الرقم موجود في قائمة سماح/حظر تديرها المؤسسة
                  — راجع `/management-api/lists/overview`). تستخدم التطابقات عبر
                  الجلسات `vendor_data` مختلفة ويبلغ الحد الأقصى لها 5.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    phone_number:
                      type: string
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        مصدر هذا التطابق. تعني `session` أن جلسة تحقق أخرى في
                        تطبيقك تطابقت مع هذه القيمة. تعني `list_entry` أن القيمة
                        طابقت قائمة تديرها المؤسسة (قائمة السماح/قائمة الحظر) —
                        راجع النظرة العامة على قوائم Management API على
                        `/management-api/lists/overview` لمعرفة كيفية إدارة هذه
                        القوائم.
              phone_intelligence:
                allOf:
                  - $ref: '#/components/schemas/PhoneIntelligence'
                description: >-
                  إشارات معلومات الهاتف. تتوفر فقط عند تشغيل الإضافة الخاصة
                  بمعلومات الهاتف لهذا الرقم.
              phone_social:
                allOf:
                  - $ref: '#/components/schemas/PhoneSocialFootprint'
                description: >-
                  البصمة الاجتماعية للرقم. تظهر فقط عند تشغيل الميزة الإضافية
                  للبصمة الاجتماعية لهذا الرقم.
        email_verifications:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير التحقق من البريد الإلكتروني** — دائماً ما تكون
            مصفوفة JSON، وليست كائن `email` مفرداً أبداً. تكون `null` حتى تنتج
            خطوة بريد إلكتروني واحدة على الأقل بيانات. يمثل كل عنصر التقرير
            الكامل، بما في ذلك `node_id`، و`status` على مستوى الميزة، وعنوان
            البريد الإلكتروني، وبيانات الاختراق، و`lifecycle[]`، و`matches[]`،
            و`warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: المعرّف الفريد لخطوة البريد الإلكتروني هذه في مخطط سير العمل.
              status:
                type: string
                description: >-
                  حالة مستوى الميزة لخطوة التحقق من البريد الإلكتروني هذه.
                  مستقلة عن `status` الجلسة من المستوى الأعلى — يمكن أن تصل
                  الجلسة إلى قرارها العام بينما تظل الميزة الفردية `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Expired
              email:
                type: string
                description: عنوان البريد الإلكتروني الجاري التحقق منه
              is_breached:
                type: boolean
                description: >-
                  يشير إلى ما إذا كان البريد الإلكتروني قد تم العثور عليه في
                  تسريبات بيانات معروفة
              breaches:
                type: array
                description: >-
                  قائمة بالخروقات المعروفة التي تم العثور على هذا البريد
                  الإلكتروني فيها
                items:
                  type: object
                  properties:
                    name:
                      type: string
                      description: اسم الاختراق
                    domain:
                      type: string
                      description: النطاق المتأثر بالاختراق
                    logo_path:
                      type: string
                      description: رابط URL لشعار الخدمة المخترقة
                    breach_date:
                      type: string
                      format: date
                      description: تاريخ حدوث الانتهاك
                    description:
                      type: string
                      description: وصف المخالفة
                    is_verified:
                      type: boolean
                      description: ما إذا كان قد تم التحقق من الاختراق
                    data_classes:
                      type: array
                      description: أنواع البيانات التي تم كشفها في عملية الاختراق
                      items:
                        type: string
                    breach_emails_count:
                      type: integer
                      description: عدد عناوين البريد الإلكتروني المتأثرة في الاختراق
              is_disposable:
                type: boolean
                description: يشير إلى ما إذا كان البريد الإلكتروني من مزود بريد مؤقت
              is_undeliverable:
                type: boolean
                description: يشير إلى ما إذا كان عنوان البريد الإلكتروني غير قابل للتسليم
              verification_attempts:
                type: integer
                description: عدد محاولات التحقق لهذا البريد الإلكتروني
              verified_at:
                type: string
                format: date-time
                description: الطابع الزمني للتحقق من البريد الإلكتروني
              warnings:
                type: array
                description: قائمة بالتحذيرات المتعلقة بالتحقق من البريد الإلكتروني
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
              lifecycle:
                type: array
                description: قائمة زمنية بالأحداث في دورة حياة التحقق من البريد الإلكتروني.
                items:
                  type: object
                  properties:
                    type:
                      type: string
                    timestamp:
                      type: string
                      format: date-time
                    details:
                      type: object
                      nullable: true
                      description: >-
                        الـ payload الخاص بالحدث. تحمل أحداث الإرسال `status`
                        و`reason`؛ وتحمل أحداث التحقق من الرمز `code_tried`
                        و`status`؛ وتحمل أحداث الحالة النهائية `reason` — أو
                        `null` عندما لا يكون هناك سبب للإبلاغ عنه (مثل
                        `EMAIL_VERIFICATION_APPROVED`).
                      properties:
                        status:
                          type: string
                        reason:
                          type: string
                          nullable: true
                        code_tried:
                          type: string
                    fee:
                      type: number
              matches:
                type: array
                description: >-
                  التطابقات التي تم العثور عليها لعنوان البريد الإلكتروني هذا.
                  كل تطابق له `source`: إما `session` (جلسة تحقق أخرى في تطبيقك
                  تطابقت مع البريد الإلكتروني نفسه، وتُرجع مع
                  `session_id`/`session_number`/`vendor_data`/`verification_date`)
                  أو `list_entry` (البريد الإلكتروني موجود في قائمة سماح/حظر
                  تديرها المؤسسة — راجع `/management-api/lists/overview`).
                  تستخدم التطابقات عبر الجلسات `vendor_data` مختلفة ويبلغ الحد
                  الأقصى لها 5.
                items:
                  type: object
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      nullable: true
                    session_number:
                      type: integer
                      nullable: true
                    vendor_data:
                      type: string
                      nullable: true
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                    email:
                      type: string
                      format: email
                    status:
                      type: string
                      nullable: true
                    is_blocklisted:
                      type: boolean
                    api_service:
                      type: string
                      nullable: true
                    source:
                      type: string
                      enum:
                        - session
                        - list_entry
                      description: >-
                        مصدر هذا التطابق. تعني `session` أن جلسة تحقق أخرى في
                        تطبيقك تطابقت مع هذه القيمة. تعني `list_entry` أن القيمة
                        طابقت قائمة تديرها المؤسسة (قائمة السماح/قائمة الحظر) —
                        راجع النظرة العامة على قوائم Management API على
                        `/management-api/lists/overview` لمعرفة كيفية إدارة هذه
                        القوائم.
              email_intelligence:
                allOf:
                  - $ref: '#/components/schemas/EmailIntelligence'
                description: >-
                  إشارات معلومات البريد الإلكتروني. متوفرة فقط عند تشغيل الميزة
                  الإضافية لمعلومات البريد الإلكتروني لهذا العنوان.
              email_social:
                allOf:
                  - $ref: '#/components/schemas/EmailSocialFootprint'
                description: >-
                  البصمة الاجتماعية للعنوان. تظهر فقط عند تشغيل الميزة الإضافية
                  للبصمة الاجتماعية لهذا العنوان.
        poa_verifications:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير إثبات العنوان (POA)** — دائماً ما تكون مصفوفة
            JSON، وليست كائن `poa` مفرداً أبداً. تكون `null` حتى تنتج خطوة إثبات
            عنوان واحدة على الأقل بيانات. يمثل كل عنصر التقرير الكامل، بما في
            ذلك `node_id`، و`status` على مستوى الميزة، وعنوان URL لملف المستند،
            والجهة المصدرة، والتواريخ، والعنوان المحلل، و`warnings[]`.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: معرّف فريد لخطوة إثبات العنوان هذه في مخطط سير العمل.
              status:
                type: string
                description: >-
                  حالة مستوى الميزة لخطوة إثبات العنوان هذه. مستقلة عن `status`
                  الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى قرارها العام
                  بينما تظل الميزة الفردية `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              document_file:
                type: string
                format: uri
                description: رابط URL لمستند إثبات العنوان
              issuing_state:
                type: string
                description: رمز الدولة المكون من حرفين لدولة الإصدار
              document_type:
                type: string
                description: نوع مستند إثبات العنوان
              document_subtype:
                type: string
                nullable: true
                description: >-
                  تصنيف أكثر دقة لمستند POA ضمن `document_type` الخاص به، عند
                  اكتشاف أحدها. ويكون `null` بخلاف ذلك.
              document_language:
                type: string
                description: رمز لغة المستند
              document_metadata:
                type: object
                properties:
                  file_size:
                    type: integer
                    description: حجم المستند
                  content_type:
                    type: string
                    description: نوع محتوى المستند
                  creation_date:
                    type: string
                    format: date
                    description: تاريخ إنشاء المستند
                  modified_date:
                    type: string
                    format: date
                    description: تاريخ تعديل المستند
                  overlay_manipulation:
                    type: object
                    nullable: true
                    description: >-
                      التحليل الجنائي لملفات PDF للتلاعب المشتبه به في النص
                      المتراكب. القيمة Null عند عدم العثور على أي دليل تلاعب
                      بالنص المتراكب أو إذا لم يكن المستند بصيغة PDF.
                    properties:
                      detected:
                        type: boolean
                        description: ما إذا تم اكتشاف دليل على التلاعب بالنص المتراكب.
                      analyzed:
                        type: boolean
                        description: ما إذا كان قد أمكن تحليل ملف PDF.
                      analysis_incomplete:
                        type: boolean
                        description: >-
                          يكون الحقل موجودًا وقيمته صحيحة فقط عندما يتعذر فحص
                          الملف بالكامل. يحتفظ الجزء الذي تم فحصه بنتائجه حيثما
                          أمكن، ويُظهر المستند تحذير استبدال النص غير المُثبت.
                      signals:
                        type: array
                        items:
                          type: string
                        description: >-
                          إشارات الفحص الجنائي التي تم إطلاقها، مثل
                          duplicate_font_subset أو glyph_fragmentation.
                      manipulated_regions:
                        type: array
                        description: المناطق المشتبه في التلاعب بها بإحداثيات صفحة PDF.
                        items:
                          type: object
                          properties:
                            page:
                              type: integer
                            x:
                              type: number
                            'y':
                              type: number
                            width:
                              type: number
                            height:
                              type: number
                            page_width:
                              type: number
                            page_height:
                              type: number
                  creator:
                    type: string
                    nullable: true
                    description: التطبيق المنشئ المسجل في بيانات المستند الوصفية.
                  producer:
                    type: string
                    nullable: true
                    description: برنامج الإنشاء المسجل في بيانات التعريف لملف PDF.
                  software:
                    type: string
                    nullable: true
                    description: برنامج التحرير/المعالجة المسجل في البيانات الوصفية للملف.
                  encryption:
                    type: string
                    nullable: true
                    description: مخطط تشفير المستند، عندما يكون مشفراً.
                  is_signed:
                    type: boolean
                    nullable: true
                    description: ما إذا كان ملف PDF يحمل توقيعاً رقمياً.
                  is_tampered:
                    type: boolean
                    nullable: true
                    description: >-
                      ما إذا كان التحقق من التوقيع يشير إلى تعديل الملف بعد
                      التوقيع.
                  signature_info:
                    type: object
                    nullable: true
                    description: تفاصيل التوقيع/التوقيعات الرقمية، إن وُجدت.
                  exif_original_date:
                    type: string
                    nullable: true
                    description: تاريخ الالتقاط الأصلي في EXIF، لعمليات تحميل الصور.
                  exif_digitized_date:
                    type: string
                    nullable: true
                    description: تاريخ الرقمنة في EXIF، لعمليات تحميل الصور.
                  processed_by_known_editor:
                    type: boolean
                    nullable: true
                    description: >-
                      ما إذا كانت البيانات الوصفية للملف تشير إلى معالجة بواسطة
                      برنامج تعديل مستندات معروف.
                  has_different_creation_mod_date:
                    type: boolean
                    nullable: true
                    description: >-
                      ما إذا كان تاريخ الإنشاء وتاريخ التعديل مختلفين — وهي
                      إشارة شائعة على التلاعب.
                description: >-
                  بيانات وصفية للتحليل الجنائي للملفات مستخرجة من مستند POA الذي
                  تم تحميله. تحتوي دائماً على المفاتيح أدناه (القيم تكون `null`
                  عندما لا تكون قابلة للتطبيق، مثل تواريخ EXIF لملفات PDF). تكون
                  `null` عندما يتعذر استخراج أي بيانات وصفية.
                nullable: true
              issuer:
                type: string
                description: اسم جهة إصدار المستند
              issue_date:
                type: string
                format: date
                description: تاريخ إصدار المستند
              expiration_date:
                type: string
                format: date
                nullable: true
                description: تاريخ انتهاء المستند، إن وجد
              poa_address:
                type: string
                description: العنوان الخام من مستند إثبات العنوان
              poa_formatted_address:
                type: string
                description: العنوان المنسق من مستند إثبات العنوان
              poa_parsed_address:
                type: object
                properties:
                  address_type:
                    type: string
                    description: نوع العنوان (شارع، جادة، إلخ)
                  street_1:
                    type: string
                    description: عنوان الشارع الأساسي
                  street_2:
                    type: string
                    nullable: true
                    description: عنوان الشارع الثانوي
                  city:
                    type: string
                    description: اسم المدينة
                  region:
                    type: string
                    description: اسم المنطقة أو الولاية
                  country:
                    type: string
                    description: رمز الدولة المكون من حرفين
                  postal_code:
                    type: string
                    description: الرمز البريدي
                  document_location:
                    type: object
                    properties:
                      latitude:
                        type: number
                        description: إحداثي خط العرض
                      longitude:
                        type: number
                        description: إحداثي خط الطول
              name_on_document:
                type: string
                nullable: true
                description: >-
                  اسم صاحب الحساب / المرسل إليه المستخرج من مستند POA، والمستخدم
                  لمطابقة الاسم. يكون `null` عندما يتعذر استخراج أي اسم.
              name_match_score_expected_details:
                type: number
                nullable: true
                description: >-
                  درجة التشابه (0-100) بين `name_on_document` والاسم المتوقع
                  المقدَّم عند إنشاء الجلسة. تكون `null` عند فقدان أي من
                  الطرفين.
              name_match_score_id_verification:
                type: number
                nullable: true
                description: >-
                  درجة التشابه (0-100) بين `name_on_document` والاسم المستخرج
                  بواسطة خطوة التحقق من الهوية. تكون `null` عند فقدان أي من
                  الطرفين.
              expected_details_address:
                type: string
                nullable: true
                description: العنوان الخام المتوقع للتحقق
              expected_details_formatted_address:
                type: string
                nullable: true
                description: العنوان المنسق المتوقع للتحقق
              expected_details_parsed_address:
                type: object
                description: تفاصيل العنوان المُحلل المتوقعة للتحقق
              extra_fields:
                type: object
                description: تفاصيل مصرفية وتفاصيل اتصال إضافية تم استخراجها من المستند.
                properties:
                  bank_account_number:
                    type: string
                    nullable: true
                  bank_iban:
                    type: string
                    nullable: true
                  bank_sort_code:
                    type: string
                    nullable: true
                  bank_routing_number:
                    type: string
                    nullable: true
                  bank_swift_bic:
                    type: string
                    nullable: true
                  bank_branch_name:
                    type: string
                    nullable: true
                  bank_branch_address:
                    type: string
                    nullable: true
                  document_phone_number:
                    type: string
                    nullable: true
                  additional_names:
                    type: array
                    items:
                      type: string
              extra_files:
                type: array
                items:
                  type: string
                  format: uri
                description: ملفات إضافية لإثبات العنوان
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
              detected_codes:
                type: array
                description: >-
                  رموز QR والرموز الشريطية المكتشفة في كل صفحة تمت معالجتها من
                  المستند. تكون فارغة عند عدم العثور على أي منها. رمز QR الذي تم
                  تحديد مكانه ولكن تعذر فك تشفيره يحتوي على `parsed_payload:
                  null`.
                items:
                  $ref: '#/components/schemas/DocumentAIDetectedCode'
              address_validation:
                allOf:
                  - $ref: '#/components/schemas/AddressValidationResult'
                nullable: true
                description: >-
                  التحقق من صحة العنوان للعنوان الوارد في إثبات العنوان هذا: ما
                  إذا كان موجوداً وصيغته الموحدة، كما قرأها المستند (أي تصحيح
                  لاحق لـ `poa_address` لا يعيد تشغيله). يظهر عندما تُفعّل خطوة
                  إثبات العنوان هذه الميزة الإضافية للتحقق من العنوان وتجتاز
                  الملفات المرفوعة فحوصات المستند؛ ويكون `null` بخلاف ذلك.
        document_ai_documents:
          type: array
          nullable: true
          description: >-
            **تقارير Document AI مجمّعة حسب عقدة سير العمل** — تكون دائماً
            مصفوفة JSON، وليست كائناً مفرداً أبداً. وتكون `null` حتى تنتج خطوة
            Document AI واحدة على الأقل بيانات. تظهر فقط عندما يكون
            `session_kind = user`. كل عنصر هو مجموعة عقدة مع `status` إجمالي،
            و`node_id`، ومصفوفة `items[]` لنتائج كل مستند (البيانات المستخرجة
            مرتبطة بمفتاح الحقل المكوّن)، و`warnings`.
          items:
            type: object
            description: نتائج Document AI مجمعة حسب عقدة سير العمل.
            properties:
              status:
                type: string
                description: >-
                  حالة Document AI المجمعة لهذه العقدة، تم جمعها من `items[]`
                  التابعة لها.
                enum:
                  - Approved
                  - Declined
                  - In Review
                  - Not Finished
              node_id:
                type: string
                nullable: true
                description: معرّف فريد لخطوة Document AI هذه في مخطط سير العمل.
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    node_id:
                      type: string
                      nullable: true
                      description: عقدة مخطط سير العمل التي أنتجت هذا المستند.
                    document_key:
                      type: string
                      description: >-
                        مفتاح مستند Document AI المُعدّ الذي يتوافق معه هذا
                        الملف.
                    original_filename:
                      type: string
                      nullable: true
                      description: اسم الملف كما رفعه المستخدم.
                    file_size:
                      type: integer
                      nullable: true
                      description: حجم الملف بالبايت.
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: رابط موقع مسبقاً قصير الأجل للملف المرفوع.
                    status:
                      type: string
                      enum:
                        - Approved
                        - Declined
                        - In Review
                        - Not Finished
                      description: حالة Document AI لكل مستند.
                    extracted_data:
                      type: object
                      additionalProperties: true
                      nullable: true
                      description: >-
                        القيم المستخرجة بواسطة Document AI، مفهرسة بمفتاح الحقل
                        المُهيّأ `key`. كل قيمة هي سلسلة نصية، أو رقم، أو
                        `null`.
                    detected_codes:
                      type: array
                      description: >-
                        رموز QR والرموز الشريطية المكتشفة في كل صفحة تمت
                        معالجتها. تكون فارغة عند عدم العثور على أي منها. رمز QR
                        الذي تم تحديد مكانه ولكن تعذر فك تشفيره يحتوي على
                        `parsed_payload: null`.
                      items:
                        $ref: '#/components/schemas/DocumentAIDetectedCode'
                    fields:
                      type: array
                      description: حقول الاستخراج المُعدّة لهذا المستند.
                      items:
                        type: object
                        properties:
                          key:
                            type: string
                            description: مفتاح حقل ثابت يُستخدم كمفتاح في `extracted_data`.
                          name:
                            type: string
                            description: اسم حقل سهل القراءة.
                          instruction:
                            type: string
                            description: تعليمات الاستخراج المعروضة على النموذج.
                          type:
                            type: string
                            enum:
                              - text
                              - number
                              - date
                            description: نوع القيمة المتوقع للحقل المستخرج.
                          required:
                            type: boolean
                            description: Whether this field is required.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        بيانات وصفية للتحليل الجنائي للملفات مستخرجة من المستند
                        الذي تم تحميله (مثل `is_tampered`). تكون `null` عندما
                        يتعذر استخراج أي شيء.
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        المطابقة المرجعية لحقول المستند المستخرجة مع بيانات
                        الجلسة الأخرى. وتكون القيمة `null` عند عدم إجراء أي
                        مطابقة مرجعية.
                    created_at:
                      type: string
                      format: date-time
              warnings:
                type: array
                nullable: true
                items:
                  type: object
                description: سجلات التحذير الصادرة لعقدة Document AI هذه.
        questionnaire_responses:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير إجابات الاستبيانات** — دائماً ما تكون مصفوفة
            JSON، وليست كائن `questionnaire` مفرداً أبداً. تكون `null` حتى تنتج
            خطوة استبيان واحدة على الأقل بيانات. يمثل كل عنصر التقرير الكامل،
            بما في ذلك `node_id`، والبيانات الوصفية للاستبيان، والأقسام التي
            تحتوي على عناصر النموذج، وإجابات المستخدم.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: المعرّف الفريد لخطوة الاستبيان هذه في مخطط سير العمل.
              questionnaire_id:
                type: string
                description: معرّف فريد للاستبيان
              title:
                type: string
                description: عنوان الاستبيان
              description:
                type: string
                description: وصف الاستبيان
              languages:
                type: array
                items:
                  type: string
                description: اللغات المدعومة
              default_language:
                type: string
                description: اللغة الافتراضية
              is_active:
                type: boolean
                description: ما إذا كان الاستبيان نشطاً
              is_simple_questionnaire:
                type: boolean
                description: ما إذا كان الاستبيان نموذجاً خطياً بسيطاً (بدون مخطط متفرع).
              questionnaire_group_id:
                type: string
                format: uuid
                nullable: true
                description: معرّف ثابت لمجموعة الاستبيانات عبر الإصدارات.
              version:
                type: integer
                nullable: true
                description: رقم إصدار الاستبيان الذي تمت الإجابة عليه.
              published_at:
                type: string
                format: date-time
                nullable: true
                description: الطابع الزمني لنشر هذا الإصدار من الاستبيان.
              sections:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      nullable: true
                      description: عنوان القسم
                    description:
                      type: string
                      nullable: true
                      description: وصف القسم
                    items:
                      type: array
                      items:
                        type: object
                        properties:
                          uuid:
                            type: string
                            description: معرّف فريد للعنصر
                          value:
                            type: string
                            nullable: true
                            description: >-
                              معرّف العقدة الثابت لعنصر النموذج هذا ضمن مخطط
                              الاستبيان.
                          element_type:
                            type: string
                            description: نوع عنصر الاستبيان
                          is_required:
                            type: boolean
                            description: ما إذا كان العنصر مطلوباً
                          title:
                            type: string
                            description: عنوان العنصر
                          description:
                            type: string
                            nullable: true
                            description: وصف العنصر
                          placeholder:
                            type: string
                            nullable: true
                            description: نص العنصر النائب
                          choices:
                            type: array
                            nullable: true
                            items:
                              type: object
                              properties:
                                label:
                                  type: string
                                value:
                                  type: string
                                requires_text_input:
                                  type: boolean
                                  description: ما إذا كان هذا الخيار يتطلب إدخال نص إضافي
                                  nullable: true
                              required:
                                - label
                                - value
                            description: خيارات القائمة المنسدلة أو عناصر الاختيار الفردي
                          max_files:
                            type: integer
                            description: الحد الأقصى لعدد الملفات المسموح بها
                            nullable: true
                          answer:
                            type: object
                            description: الإجابة المقدمة للعنصر
                            properties:
                              value:
                                type: string
                                nullable: true
                              text:
                                type: string
                                nullable: true
                              files:
                                type: array
                                items:
                                  type: string
                                nullable: true
                          required_if:
                            type: object
                            nullable: true
                            description: >-
                              قاعدة المتطلبات الشرطية، عندما يكون العنصر مطلوباً
                              فقط لإجابات معينة.
                          repeatable_config:
                            type: object
                            nullable: true
                            description: >-
                              تكوين مجموعات العناصر القابلة للتكرار، عند
                              الاقتضاء.
                        required:
                          - uuid
                          - value
                          - element_type
                          - is_required
                          - title
              status:
                type: string
                description: حالة الاستبيان
        bank_verifications:
          type: array
          nullable: true
          description: >-
            نتائج التحقق البنكي، عنصر واحد لكل خطوة تحقق بنكي، للتحقق من
            المستخدمين والتحقق من الشركات. تكون `null` حتى تُنتج خطوة نتيجة ما.
            يوضح حقل `method` لكل عنصر كيفية التحقق من الحساب: `open_banking`
            (تسجيل الدخول إلى البنك) أو `account_lookup` (فحص الحساب)، أو خيار
            بديل عبر `statement` أو `microdeposits`، و`none` عندما يتابع الشخص
            دون بنك قبل تقييم أي محاولة (`continued_without_bank`). راجع [طرق
            التحقق
            البنكي](/ar/core-technology/bank-verification/verification-methods).
          items:
            $ref: '#/components/schemas/BankVerificationResult'
        signatures:
          type: array
          description: >-
            نتائج التوقيع الإلكتروني، عنصر واحد لكل موقّع وخطوة توقيع، لكل من
            التحقق من المستخدمين والتحقق من الشركات (KYB). لا تظهر إلا عندما
            يتضمن سير العمل خطوة التوقيع الإلكتروني؛ وهي مصفوفة فارغة حتى يصل
            أحد الموقّعين إليها. راجع [تقرير التوقيع
            الإلكتروني](/ar/core-technology/electronic-signature/report-electronic-signature).
          items:
            $ref: '#/components/schemas/SignatureResult'
        aml_screenings:
          type: array
          nullable: true
          description: >-
            **مصفوفة تقارير فحص AML** — دائماً مصفوفة JSON، وليست أبداً كائن
            `aml` مفرداً. تكون `null` إلى أن تُنتج خطوة AML واحدة على الأقل
            بيانات. كل عنصر هو التقرير الكامل، بما يشمل `node_id`، و`status` على
            مستوى الميزة، و`total_hits`، و`entity_type`، و`hits[]`، و`score`،
            و`screened_data`، و`is_ongoing_monitoring_enabled`، و`warnings[]`.
          items:
            $ref: '#/components/schemas/AMLScreening'
        ip_analyses:
          type: array
          nullable: true
          description: >-
            **مصفوفة من تقارير تحليل الجهاز وعنوان IP** — دائماً ما تكون مصفوفة
            JSON، وليست كائن `ip_analysis` مفرداً أبداً. تكون `null` حتى تنتج
            خطوة واحدة على الأقل من خطوات تحليل IP بيانات. يمثل كل عنصر التقرير
            الكامل، بما في ذلك `node_id`، و`status` على مستوى الميزة، وبيانات IP
            وتحديد الموقع الجغرافي، وبصمة الجهاز، و`warnings[]`. يتم إزالة
            التكرار من المدخلات ذات `(node_id, ip_address, device_fingerprint)`
            المكررة من جانب الخادم.
          items:
            type: object
            properties:
              node_id:
                type: string
                description: معرّف فريد لخطوة تحليل الجهاز وعنوان IP هذه في مخطط سير العمل.
              status:
                type: string
                description: >-
                  حالة مستوى الميزة لمدخل تحليل الجهاز وعنوان IP هذا. مستقلة عن
                  `status` الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى
                  قرارها العام بينما تظل الميزة الفردية `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              device_brand:
                type: string
                description: علامة الجهاز المستخدم التجارية
              device_model:
                type: string
                description: طراز الجهاز المستخدم
              browser_family:
                type: string
                description: عائلة المتصفح المستخدم
              os_family:
                type: string
                description: عائلة نظام التشغيل
              platform:
                type: string
                description: نوع المنصة (mobile، desktop، وما إلى ذلك)
              device_fingerprint:
                type: string
                nullable: true
                description: المعرّف الفريد لبصمة الجهاز
              ip_country:
                type: string
                description: الدولة المكتشفة من عنوان IP
              ip_country_code:
                type: string
                description: رمز الدولة المكون من حرفين المستخرج من عنوان IP
              ip_state:
                type: string
                description: الولاية/المنطقة المكتشفة من عنوان IP
              ip_city:
                type: string
                description: المدينة المكتشفة من عنوان IP
              latitude:
                type: number
                description: إحداثي خط العرض لموقع عنوان IP
              longitude:
                type: number
                description: إحداثي خط الطول لموقع عنوان IP
              ip_address:
                type: string
                description: عنوان IP
              isp:
                type: string
                nullable: true
                description: مزود خدمة الإنترنت
              organization:
                type: string
                nullable: true
                description: المؤسسة المرتبطة بعنوان IP
              is_vpn_or_tor:
                type: boolean
                description: ما إذا كان عنوان IP صادراً من VPN أو شبكة Tor
              is_data_center:
                type: boolean
                description: ما إذا كان عنوان IP صادراً من مركز بيانات
              time_zone:
                type: string
                description: المنطقة الزمنية المكتشفة من عنوان IP
              time_zone_offset:
                type: string
                description: فارق التوقيت للمنطقة الزمنية
              ip:
                type: object
                description: >-
                  الموقع الجغرافي لعنوان IP لهذا الإدخال بالإضافة إلى مسافات
                  الدائرة العظمى (بالكيلومتر) إلى عنوان مستند التحقق من الهوية
                  وعنوان مستند إثبات العنوان (POA). تكون المسافات `null` عندما
                  يتعذر تحديد الموقع لأي من الجانبين.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: الإحداثيات، أو `null` عند عدم توفرها.
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 12.3
              id_document:
                type: object
                description: >-
                  الموقع المستخرج من عنوان مستند الهوية بالإضافة إلى المسافات
                  (كم) إلى الموقع الجغرافي لعنوان IP وعنوان مستند إثبات العنوان
                  (POA). يكون `location` بقيمة `null` عندما يتعذر تحديد الموقع
                  الجغرافي لعنوان المستند.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: الإحداثيات، أو `null` عند عدم توفرها.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 23.4
                  distance_from_poa_document:
                    type: number
                    nullable: true
                    example: 18.7
              poa_document:
                type: object
                description: >-
                  الموقع المستخرج من مستند إثبات العنوان بالإضافة إلى المسافات
                  (كم) إلى الموقع الجغرافي لعنوان IP وعنوان مستند الهوية. يكون
                  `location` بقيمة `null` عندما لا تتضمن الجلسة خطوة POA أو
                  يتعذر تحديد الموقع الجغرافي للعنوان.
                properties:
                  location:
                    type: object
                    nullable: true
                    properties:
                      latitude:
                        type: number
                        example: 41.2706327
                      longitude:
                        type: number
                        example: 1.9770097
                    description: الإحداثيات، أو `null` عند عدم توفرها.
                  distance_from_ip:
                    type: number
                    nullable: true
                    example: 12.3
                  distance_from_id_document:
                    type: number
                    nullable: true
                    example: 18.7
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
              matches:
                type: array
                description: >-
                  حالات التطابق عبر الجلسات التي تم العثور عليها لعنوان IP أو
                  هوية الجهاز الخاصة بهذه المدخلة. كل تطابق هو جلسة تحقق أخرى في
                  تطبيقك (تكون قيمة `source` دائماً `session`) تشترك في القيمة
                  نفسها، وتنتمي دائماً إلى مستخدم مورّد / `vendor_data` مختلف عن
                  الجلسة الحالية، بحد أقصى 5 لكل أداة جمع (`device_fingerprint`
                  يجمع نتيجتي أداتي جمع مستقلتين لكل منهما حد أقصى، لذا يمكن أن
                  يصل العدد إلى 10 مدخلات). يحمل كل عنصر `match_source`
                  و`confidence` و`match_mode` و`device_info` و`location_info`؛
                  وتظهر المفاتيح `recovery_similarity` و`tls_ja4_corroborated`
                  و`recovery_gate_reason` فقط عندما تكون قيمة `match_source` هي
                  `recovered_high`.
                items:
                  type: object
                  additionalProperties: false
                  properties:
                    session_id:
                      type: string
                      format: uuid
                      description: معرّف الجلسة للجلسة المتطابقة.
                    session_number:
                      type: integer
                      description: الرقم التسلسلي للجلسة المتطابقة.
                    vendor_data:
                      type: string
                      nullable: true
                      description: >-
                        `vendor_data` للجلسة المطابقة — تختلف دائماً عن مستخدم
                        المورّد للجلسة الحالية.
                    verification_date:
                      type: string
                      format: date-time
                      nullable: true
                      description: تاريخ إنشاء الجلسة المتطابقة (`YYYY-MM-DDTHH:MM:SSZ`).
                    match_type:
                      type: string
                      enum:
                        - ip_address
                        - device_fingerprint
                      description: ما إذا كان التطابق بناءً على عنوان IP أو بصمة الجهاز
                    match_source:
                      type: string
                      enum:
                        - ip_address
                        - persistent_id
                        - legacy_fp
                        - recovered_high
                      description: >-
                        كيفية الوصول إلى هذا التطابق: `ip_address` (عنوان IP
                        مشترك — وجود مشترك على الشبكة، وليس إقراراً بهوية
                        الجهاز)، أو `persistent_id` (معرّف جهاز دائم مخزّن بشكل
                        مطابق)، أو `legacy_fp` (تجزئة بصمة الجهاز القديمة
                        `didit-fp-*`)، أو `recovered_high` (تطابق استرداد بصمة
                        تقريبي عالي الثقة). تظهر العناصر المرشحة للاسترداد ذات
                        الثقة الأقل كتحذيرات مخاطر فقط، ولا تظهر مطلقاً في هذه
                        المصفوفة.
                    matched_value:
                      type: string
                      nullable: true
                      description: >-
                        القيمة المتطابقة: عنوان IP المشترك، أو معرّف الجهاز
                        الدائم أو تجزئة بصمة الجهاز القديمة، أو — بالنسبة لـ
                        `recovered_high` — معرّف UUID للجهاز المسترد.
                    status:
                      type: string
                      description: حالة دورة حياة الجلسة المتطابقة.
                    is_blocklisted:
                      type: boolean
                      description: >-
                        ما إذا كانت القيمة المتطابقة موجودة في قائمة الحظر.
                        حالياً تكون دائماً `false` لتطابقات الجهاز/عنوان IP.
                    api_service:
                      type: string
                      nullable: true
                      description: >-
                        خدمة API المستقلة للجلسة المطابقة؛ وتكون القيمة `null`
                        لجلسات سير العمل.
                    source:
                      type: string
                      enum:
                        - session
                      description: >-
                        دائماً `session` لمطابقات الجهاز/عنوان IP — كل مطابقة
                        تمثل جلسة تحقق أخرى في تطبيقك.
                    device_info:
                      type: object
                      description: تفاصيل الجهاز التي رُصدت في الجلسة المتطابقة.
                      properties:
                        device_brand:
                          type: string
                          nullable: true
                        device_model:
                          type: string
                          nullable: true
                        browser_family:
                          type: string
                          nullable: true
                        os_family:
                          type: string
                          nullable: true
                        platform:
                          type: string
                          nullable: true
                        device_fingerprint:
                          type: string
                          nullable: true
                    location_info:
                      type: object
                      description: >-
                        تفاصيل الشبكة والموقع الجغرافي التي تمت ملاحظتها في جلسة
                        المطابقة.
                      properties:
                        ip_address:
                          type: string
                          nullable: true
                        ip_country:
                          type: string
                          nullable: true
                        ip_country_code:
                          type: string
                          nullable: true
                        ip_state:
                          type: string
                          nullable: true
                        ip_city:
                          type: string
                          nullable: true
                        is_vpn_or_tor:
                          type: boolean
                        is_data_center:
                          type: boolean
                    confidence:
                      type: number
                      minimum: 0
                      maximum: 1
                      description: >-
                        درجة الثقة في تحديد الهوية من جانب الخادم، وتُحسب
                        كالتالي `1 - P(false positive)`: القيمة `1.0` لحالات
                        التطابق الحتمية (`persistent_id`، أو `recovered_high`
                        المستندة إلى العتاد)، و`0.5` لحالة `legacy_fp`، و`0.0`
                        لحالة `ip_address` (التواجد المشترك فقط)، وقيمة معدّلة
                        حسب التأييد أقل من `1.0` لحالات التطابق الاحتمالية
                        المسترجعة (تكون أعلى عندما تتطابق بصمة TLS JA4 ودولة IP
                        بشكل مستقل).
                    match_mode:
                      type: string
                      enum:
                        - deterministic
                        - probabilistic
                        - co_occurrence
                      description: >-
                        فئة أدلة التطابق: `deterministic` (معرّف دقيق مخزن أو
                        متجذر في العتاد لا يمكن أن يتصادم بين الأجهزة الفعلية)،
                        أو `probabilistic` (دليل بصمة تقريبي)، أو
                        `co_occurrence` (شبكة مشتركة فقط، دون ادعاء هوية
                        الجهاز).
                    recovery_similarity:
                      type: number
                      description: >-
                        تشابه جيب التمام لمطابقة استعادة بصمة الإصبع، مقرّباً
                        إلى 4 منازل عشرية. يتوفر فقط عندما يكون `match_source`
                        هو `recovered_high`.
                    tls_ja4_corroborated:
                      type: boolean
                      description: >-
                        ما إذا كانت بصمات TLS JA4 للملاحظتين متطابقة — وهي إشارة
                        يرصدها الخادم ولا يمكن للمتصفح انتحالها. تكون موجودة فقط
                        عندما تكون قيمة `match_source` هي `recovered_high`.
                    recovery_gate_reason:
                      type: string
                      description: >-
                        سبب اجتياز مطابقة الاسترداد لبوابة الإيجابيات الكاذبة
                        الصارمة: `hardware_root_match` (تطابق تام لمعرّف جهاز
                        متجذر في العتاد) أو، في التكوينات التي تقبل أدلة الفحص
                        فقط، `exact_composite_plus_<n>_families` /
                        `very_high_similarity_plus_<n>_families`. يظهر فقط عندما
                        يكون `match_source` هو `recovered_high`.
              browser_version:
                type: string
                nullable: true
              os_version:
                type: string
                nullable: true
              user_agent:
                type: string
                nullable: true
                description: سلسلة وكيل المستخدم الخاصة بالمتصفح.
              accept_language:
                type: string
                nullable: true
                description: رأس `Accept-Language` الذي أرسله المتصفح.
              session_identifier:
                type: string
                nullable: true
                description: معرّف جلسة التصفح التي تم تشغيل التحقق فيها.
              session_age_ms:
                type: integer
                nullable: true
                description: عمر جلسة التصفح تلك بالمللي ثانية عند تشغيل الخطوة.
              coords_accuracy:
                type: number
                nullable: true
                description: نصف قطر الدقة، بالأمتار، للإحداثيات التي أبلغ عنها الجهاز.
              raw_device_data:
                type: object
                nullable: true
                additionalProperties: true
                description: إشارات الجهاز الخام التي تم جمعها لهذه الخطوة.
        geolocation_checks:
          type: array
          nullable: true
          description: >-
            **مصفوفة من نتائج التحقق من الموقع**، نتيجة واحدة لكل خطوة تحقق من
            الموقع: المحاولة المقبولة لتلك الخطوة. تكون `null` حتى تنتج خطوة
            تحقق من الموقع بيانات. توجد المحاولات السابقة للخطوة نفسها في
            `geolocation_attempts`.
          items:
            $ref: '#/components/schemas/GeolocationCheck'
        geolocation_attempts:
          type: array
          nullable: true
          description: >-
            كل محاولة لكل خطوة تحقق من الموقع في هذه الجلسة، الأقدم أولاً. يتم
            استبعاد المحاولات التي استُبدلت بإعادة الإرسال. وسير العمل الذي يحجب
            `geolocation_checks` من خلال سمات الاستجابة الخاصة به يحجب هذه
            القائمة أيضاً.
          items:
            $ref: '#/components/schemas/GeolocationAttempt'
        database_validations:
          type: array
          nullable: true
          description: >-
            **مصفوفة تقارير التحقق من قواعد البيانات** — دائماً مصفوفة JSON،
            وليست أبداً كائن `database_validation` مفرداً. تكون `null` حتى تُنتج
            خطوة تحقق من قاعدة البيانات واحدة على الأقل بياناتٍ. كل عنصر هو
            التقرير الكامل، بما في ذلك `node_id`، و`status` على مستوى الميزة،
            و`screened_data`، ومصفوفة `validations[]` لكل خدمة (يحتوي كل منها
            على `source_data` الخاص بالسجل)، و`warnings[]`. تختلف حقول
            `screened_data` و`source_data` بحسب الدولة:


            **ARG (الأرجنتين)**: screened_data: {document_number, selfie,
            gender, first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, date_of_death,
            tax_id, tax_id_type, face_match_score, sit_1_since, banks,
            last_position, highest_position, rejected_checks}. يستخدم التحقق
            البيومتري لمطابقة الوجه من RENAPER. يُستنتج الجنس تلقائياً من تحليل
            الوجه أو الاسم الأول عندما لا يكون متوفراً في المستند (مثل رخص
            القيادة)


            **BOL (بوليفيا)**: screened_data: {document_number, date_of_birth,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, gender}


            **BRA (البرازيل)**: screened_data: {tax_number, first_name,
            last_name, date_of_birth}. يتضمن source_data دائماً
            {identification_number, first_name, last_name, date_of_birth,
            lgpd_minor, minor_under_18, minor_under_16} لعمليات تطابق CPF
            الناجحة. تُعيّن عمليات البحث الناجحة للبالغين تلك العلامات إلى
            false. قد تُرجع خدمة Receita Federal Consulta CPF الرمز HTTP 422
            (قاصر دون 18 عاماً) أو 451 (دون 16 عاماً) مع حجب البيانات بموجب
            LGPD؛ في هذه الحالات، يُعيّن source_data علامات القاصرين إلى true
            بحسب الاقتضاء، ويتضمن حالة HTTP الواردة، ويكون التحقق على مستوى
            الحقل no_match. راجع قسم البرازيل في مرجع رموز نتائج التحقق من قواعد
            البيانات للاطلاع على القائمة الكاملة للرموز.


            **CHL (تشيلي)**: screened_data: {personal_number, first_name,
            last_name, date_of_birth}. source_data: {identification_number,
            first_name, last_name, date_of_birth, gender}


            **COL (كولومبيا)**: screened_data: {document_number, document_type,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, document_type}


            **CRI (كوستاريكا)**: screened_data: {personal_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **DOM (جمهورية الدومينيكان)**: screened_data: {personal_number}.
            source_data: {identification_number} (يُرجع valid/invalid فقط)


            **ECU (الإكوادور)**: screened_data: {personal_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, street, formatted_address, gender, nationality,
            education, marital_status, spouse, mother_name, father_name,
            profession}


            **ESP (إسبانيا)**: screened_data: {personal_number, document_type,
            expiration_date, first_name, last_name}. source_data:
            {identification_number, first_name, last_name, full_name,
            document_type, expiration_date}


            **GTM (غواتيمالا)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **HND (هندوراس)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **MEX (المكسيك)**: screened_data: {personal_number (CURP),
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name, date_of_birth, gender,
            nationality, curp_status, state_of_birth, doc_probatorio,
            registration_year, registration_state, registration_municipality,
            num_acta, crip, issuing_state_code, foreign_registry_number,
            folio_carta, folio_certificado}. يستخدم السجل المدني RENAPO. تتوفر
            أيضاً خدمة منفصلة للتحقق من صلاحية INE لـ MEX كعملية تحقق فردية
            إضافية.


            **PAN (بنما)**: screened_data: {personal_number, selfie}.
            source_data: {identification_number}. يستخدم التحقق البيومتري من SIB


            **PER (بيرو)**: screened_data: {personal_number (DNI), first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, paternal_name, maternal_name, verification_number,
            verification_letter}


            **PRY (باراغواي)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name}


            **SLV (السلفادور)**: screened_data: {document_number, date_of_birth,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name}


            **URY (أوروغواي)**: screened_data: {personal_number, date_of_birth,
            first_name, last_name}. source_data: {identification_number,
            first_name, last_name, full_name}


            **VEN (فنزويلا)**: screened_data: {document_number, first_name,
            last_name}. source_data: {identification_number, first_name,
            last_name, full_name, gender, date_of_birth, document_type}
          items:
            type: object
            properties:
              node_id:
                type: string
                description: >-
                  المعرّف الفريد لخطوة التحقق من قواعد البيانات هذه في مخطط سير
                  العمل.
              issuing_state:
                type: string
                description: >-
                  رمز ISO 3166-1 alpha-3 للدولة التي تم الاستعلام عن مصادرها
                  الحكومية/سجلاتها (مثل `BRA` و`MEX` و`ESP` و`NGA` و`IDN`). يغطي
                  التحقق من قواعد البيانات 60+ دولة عبر الأمريكتين وأوروبا
                  وإفريقيا والشرق الأوسط وآسيا والمحيط الهادئ، بالإضافة إلى
                  مصادر عالمية متعددة الدول — وتتوسع التغطية بانتظام، لذا تعامل
                  مع القيمة كمجموعة مفتوحة بدلاً من تعداد ثابت.
              validation_type:
                type: string
                enum:
                  - one_by_one
                  - two_by_two
                  - not_enabled
                description: >-
                  كيفية تأكيد النتيجة: `one_by_one` (نتيجة خدمة واحدة)، أو
                  `two_by_two` (خدمتان مستقلتان أو أكثر طابقتا رقم التعريف
                  بالكامل بشكل مستقل)، أو `not_enabled` (يتم الاحتفاظ بها عندما
                  لا تُنتج أي خدمة تطابقاً قابلاً للاستخدام). لا تكون القيمة
                  `null` أبداً. تتوفر أوضاع التحقق البيومتري المخصصة 2x2 حالياً
                  لكل من `ECU` و`PER`.
              screened_data:
                type: object
                description: >-
                  بيانات الإدخال المستخدمة للتحقق. تختلف الحقول حسب الدولة —
                  راجع وثائق التحقق من قواعد البيانات
                  (`/core-technology/database-validation/overview`) للاطلاع على
                  التنسيقات الخاصة بكل دولة.
                properties:
                  last_name:
                    type: string
                  first_name:
                    type: string
                  tax_number:
                    type: string
                    description: 'البرازيل: CPF (11 رقماً)'
                  personal_number:
                    type: string
                    description: >-
                      تشيلي: RUT، جمهورية الدومينيكان: Cédula (11 رقماً)،
                      الإكوادور: Cédula (10 أرقام)، إسبانيا: DNI/NIE، المكسيك:
                      CURP (18 حرفاً)، بيرو: DNI (8 أرقام)، أوروغواي: CI
                  document_number:
                    type: string
                    description: >-
                      ARG: DNI، BOL: CI، COL: Cédula، GTM: DPI، HND: DNI، PAN:
                      Cédula، PRY: CI، SLV: DUI، VEN: Cédula
                  date_of_birth:
                    type: string
                    format: date
                  document_type:
                    type: string
                    description: 'COL: CC/CE/TI/NIT، ESP: ID/PASSPORT'
                  expiration_date:
                    type: string
                    format: date
                    description: مطلوب لـ ESP
              validations:
                type: array
                description: >-
                  إدخال واحد لكل خدمة سجل قدمت payload تحقق. يحدد كل إدخال
                  الخدمة (`service_id` و`service_name`) ويتضمن مقارنة
                  `validation` لكل حقل، والرمز `outcome_code` / التفصيل
                  `outcome_detail` الخاص بالخدمة عند الإبلاغ عنهما، وسجل الشركات
                  المُطبَّع في `source_data`.
                items:
                  type: object
                  properties:
                    service_id:
                      type: string
                      description: معرّف خدمة السجل التي أنتجت نتيجة التحقق هذه.
                      example: bra_cpf
                    service_name:
                      type: string
                      description: اسم سهل القراءة لخدمة السجل.
                      example: Brazil - CPF status check
                    validation:
                      type: object
                      description: نتائج عمليات التحقق من صحة الحقول.
                      properties:
                        full_name:
                          type: string
                          description: >-
                            نتيجة المطابقة للاسم الكامل (مثل: 'full_match'،
                            'partial_match'، 'no_match').
                        date_of_birth:
                          type: string
                          description: نتيجة المطابقة لتاريخ الميلاد.
                        identification_number:
                          type: string
                          description: نتيجة المطابقة لرقم الهوية.
                    outcome_code:
                      type: string
                      nullable: true
                      description: >-
                        النتيجة المقروءة آلياً للبحث في السجل (مثل `MATCH`،
                        `NO_MATCH`، `PARTIAL_MATCH`، `INCONCLUSIVE`، ورموز خاصة
                        بالمصدر). تكون موجودة عندما يُبلغ عنها النظام.
                    outcome_detail:
                      type: string
                      nullable: true
                      description: >-
                        تفسير سهل القراءة لـ `outcome_code`، عند تقديمه من
                        الخدمة.
                    source_data:
                      type: object
                      description: >-
                        البيانات المرجعة من قاعدة البيانات الحكومية. الحقول
                        الشائعة: identification_number، first_name، last_name،
                        full_name، date_of_birth، gender. حقول إضافية حسب
                        الدولة: تتضمن BRA دائمًا lgpd_minor وminor_under_18
                        وminor_under_16 عند تطابق CPF بنجاح؛ كما تتضمن حالة HTTP
                        المصدرية عند حجب بيانات CPF بموجب LGPD (HTTP 422/451).
                        وتضيف ECU الحقول street وformatted_address وnationality
                        وeducation وmarital_status وspouse وmother_name
                        وfather_name وprofession. وتضيف PER الحقول paternal_name
                        وmaternal_name وverification_number
                        وverification_letter. وتضيف ESP الحقلين document_type
                        وexpiration_date. وتضيف VEN/COL الحقل document_type.
                      additionalProperties: true
              errors:
                type: array
                description: >-
                  الأخطاء التي أرجعتها خدمات السجلات أثناء التحقق، وتكون كل منها
                  موسومة بـ `service_id` الذي أنتجها. **يتم حذف هذا المفتاح
                  بالكامل عند عدم وجود أخطاء.**
                items:
                  type: object
                  description: >-
                    كائن الخطأ الخاص بالخدمة المصدر مفروداً كما هو — تختلف
                    مفاتيحه حسب الخدمة (عادةً رسالة/رمز وأي تفاصيل خاصة بمزود
                    الخدمة) — بالإضافة إلى `service_id` لتحديد الخدمة التي حدث
                    بها الخطأ.
                  properties:
                    service_id:
                      type: string
                      nullable: true
                      description: معرّف خدمة السجل التي واجهت خطأ.
                  additionalProperties: true
              match_type:
                type: string
                enum:
                  - no_match
                  - partial_match
                  - full_match
                nullable: true
                description: >-
                  النتيجة الإجمالية للتطابق عبر الخدمات التي تم الاستعلام عنها.
                  تكون `null` حتى يتم تقييم التحقق.
              status:
                type: string
                description: >-
                  حالة مستوى الميزة لعملية التحقق من قواعد البيانات هذه. مستقلة
                  عن `status` الجلسة من المستوى الأعلى — يمكن أن تصل الجلسة إلى
                  قرارها العام بينما تظل الميزة الفردية `In Review`.
                enum:
                  - Not Finished
                  - Approved
                  - Declined
                  - In Review
                  - Resub Requested
              warnings:
                type: array
                items:
                  type: object
                  properties:
                    feature:
                      type: string
                      enum:
                        - ID_VERIFICATION
                        - NFC
                        - LIVENESS
                        - FACEMATCH
                        - PROOF_OF_ADDRESS
                        - PHONE
                        - EMAIL
                        - AML
                        - LOCATION
                        - DATABASE_VALIDATION
                        - QUESTIONNAIRE
                        - DOCUMENT_AI
                        - KYB_REGISTRY
                        - KYB_DOCUMENTS
                        - KYB_KEY_PEOPLE
                        - GEOLOCATION
                        - SIGNATURE
                      description: >-
                        الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة
                        التي ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات
                        كل وحدة نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                        `phone_verifications[].warnings`)، ولكن التعداد (enum)
                        أعلاه هو المرجع المعتمد عبر جميع تحذيرات الميزات في
                        payload القرار.
                    risk:
                      type: string
                    additional_data:
                      type: object
                      nullable: true
                    log_type:
                      type: string
                    short_description:
                      type: string
                    long_description:
                      type: string
                    node_id:
                      type: string
                      description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
                description: التحذيرات المتعلقة بالتحقق من قواعد البيانات.
        database_validation_not_performed_reason:
          type: object
          nullable: true
          additionalProperties: true
          description: >-
            سبب عدم إنتاج نتيجة من التحقق من قواعد البيانات المُهيأ، بتنسيق
            `{code, message}` بالإضافة إلى حقول السياق. يكون موجوداً فقط عندما
            يكون `database_validations` هو `null` لسير عمل يتضمن هذه الخطوة، حتى
            تتمكن من التمييز بين "وافق السجل" و"لم يتم تشغيل أي شيء". ويكون
            `null` في الحالات الأخرى.
          properties:
            code:
              type: string
              description: سبب ثابت قابل للقراءة آلياً.
            message:
              type: string
              description: تفسير سهل القراءة.
        reviews:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
                description: >-
                  من أجرى المراجعة. عادةً ما يكون معرّف المراجِع في لوحة التحكم
                  (بريده الإلكتروني)، ولكن القيمة تكون `"API Client"` لتحديثات
                  الحالة التي تتم باستخدام مفتاح API و`"Unknown"` عندما يتعذر
                  تحديد الفاعل — لذا لا تقم بمعالجة هذا الحقل كعنوان بريد
                  إلكتروني.
              new_status:
                type: string
              comment:
                type: string
              created_at:
                type: string
                format: date-time
        assignee:
          type: object
          nullable: true
          description: >-
            المراجِع في لوحة التحكم المعين للجلسة، أو `null` عندما لا يحتفظ بها
            أحد.
          properties:
            email:
              type: string
              format: email
            assigned_at:
              type: string
              format: date-time
              nullable: true
        waiting_since:
          type: string
          format: date-time
          nullable: true
          description: >-
            متى بدأت الجلسة بالانتظار للمراجعة. وتكون `null` ما لم تكن الجلسة في
            حالة `In Review` ويحدد تطبيقك موعداً نهائياً للمراجعة.
        sla_due_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            متى يحين موعد المراجعة. وتكون `null` ما لم تكن الجلسة في حالة `In
            Review` ويحدد تطبيقك موعداً نهائياً للمراجعة.
        created_at:
          type: string
          format: date-time
          description: الطابع الزمني لإنشاء الجلسة (ISO 8601، UTC).
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            الطابع الزمني المجدول لانتهاء صلاحية هذه الجلسة. يتم تعيينه في جلسات
            التحقق من المستخدمين (KYC) عندما تتم تهيئة انتهاء الصلاحية وقت
            الإنشاء (أو بمجرد أن تُشغّل حالة `Approved` احتساب انتهاء صلاحية
            KYC). يكون `null` للجلسات التي ليس لها انتهاء صلاحية مُهيأ، وللأنواع
            التي لا تستخدم انتهاء الصلاحية (مثل جلسات التحقق من الشركات (KYB)
            التي لم تتلقَ مطلقًا `expires_at`).
        registry_checks:
          type: array
          nullable: true
          description: >-
            عمليات التحقق من سجل الشركات. تكون موجودة فقط عندما تكون
            `session_kind = business`. يغلّف كل عنصر payload سجل الشركات
            بالكامل.
          items:
            type: object
            description: >-
              فحص سجل شركات واحد — الـ payload الكامل لسجل الشركات مُعززاً بهيكل
              الملكية والتحذيرات. يتوفر فقط عندما يكون `session_kind =
              business`.
            properties:
              status:
                type: string
                description: حالة دورة حياة الميزة.
              node_id:
                type: string
                nullable: true
              data_resolved:
                type: boolean
              company:
                type: object
                description: >-
                  payload الكامل للشركة من السجل (سجل الشركات مدمجاً مع أي
                  بيانات يقدمها المستخدم أو يتم تعديلها عبر لوحة التحكم).
                properties:
                  uuid:
                    type: string
                    format: uuid
                  node_id:
                    type: string
                    nullable: true
                  status:
                    type: string
                  registry_status:
                    type: string
                    nullable: true
                  data_resolved:
                    type: boolean
                  company_name:
                    type: string
                  registration_number:
                    type: string
                    nullable: true
                  country_code:
                    type: string
                    description: >-
                      دولة التأسيس (ISO 3166-1 alpha-2، مثل `GB` أو `DE` أو
                      `US`).
                  region:
                    type: string
                    nullable: true
                    description: >-
                      رمز التقسيم الإداري حسب معيار ISO 3166-2 عند انطباقه (على
                      سبيل المثال `CA`، و`NY` للولايات الأمريكية).
                  company_type:
                    type: string
                    nullable: true
                  incorporation_date:
                    type: string
                    format: date
                    nullable: true
                  registered_address:
                    type: string
                    nullable: true
                  tax_number:
                    type: string
                    nullable: true
                  risk_level:
                    type: string
                    enum:
                      - LOW
                      - MEDIUM
                      - HIGH
                    nullable: true
                  verification_status:
                    type: string
                    nullable: true
                  is_from_registry:
                    type: boolean
                  fetch_status:
                    type: string
                    nullable: true
                  alternative_names:
                    type: string
                    nullable: true
                    description: >-
                      أسماء الشركات البديلة، أو التجارية، أو السابقة، أو باللغة
                      الأصلية كنص، عند الإبلاغ عنها.
                  nature_of_business:
                    type: string
                    nullable: true
                  registered_capital:
                    type: string
                    nullable: true
                  registered_capital_amount:
                    type: string
                    format: decimal
                    nullable: true
                    description: >-
                      مبلغ رأس المال المسجل/الأسهم كسلسلة نصية عشرية (مثل
                      `"100.00"`)، مُستخرجة من ملف السجل. وتكون `null` عند عدم
                      توفرها.
                  registered_capital_currency:
                    type: string
                    nullable: true
                    description: >-
                      رمز العملة حسب معيار ISO 4217 لـ
                      `registered_capital_amount` (مثل `"GBP"`). تكون القيمة
                      `null` عندما لا تتوفر.
                  website:
                    type: string
                    nullable: true
                  email:
                    type: string
                    format: email
                    nullable: true
                  phone:
                    type: string
                    nullable: true
                  legal_entity_identifier:
                    type: string
                    nullable: true
                  location_of_registration:
                    type: string
                    nullable: true
                  vat_number:
                    type: string
                    nullable: true
                    description: >-
                      رقم ضريبة القيمة المضافة في الاتحاد الأوروبي (EU VAT)، عند
                      جمعه أثناء خطوة السجل المستضافة أو تعديله لاحقاً.
                  vat_validation_status:
                    type: string
                    enum:
                      - valid
                      - invalid
                      - format_valid
                      - invalid_format
                      - could_not_validate
                      - not_applicable
                    description: >-
                      نتيجة التحقق من صحة رقم ضريبة القيمة المضافة أو، عند عدم
                      وجوده، `tax_number`، عند الإرسال إلى السجل. `valid` /
                      `invalid`: يتم تحديدها بواسطة السجل الرسمي للدولة (EU
                      VIES، والنرويج، وسويسرا، والبرازيل، وكولومبيا، وكوستاريكا،
                      والإكوادور، وباراغواي؛ وبولندا أيضاً عبر سجل ضريبة القيمة
                      المضافة المحلي الخاص بها). `format_valid` /
                      `invalid_format`: يتم تحديدها بناءً على قواعد التنسيق
                      وأرقام التحقق الخاصة بالدولة عند تعذر الاستعلام من أي سجل.
                      `could_not_validate`: كان السجل غير متاح.
                      `not_applicable`: لا يوجد رقم، أو دولة بدون سجل أو قواعد،
                      أو جلسة في البيئة التجريبية.
                  vat_validated_number:
                    type: string
                    nullable: true
                    description: >-
                      الرقم الذي تم التحقق منه، كما يعرفه المصدر (على سبيل
                      المثال، رقم ضريبة القيمة المضافة المشتق من SIREN الفرنسي
                      أو RSIN الهولندي). يكون `null` عند عدم تشغيل أي فحص.
                  vat_validation_source:
                    type: string
                    nullable: true
                    enum:
                      - eu_vies
                      - pl_vat_white_list
                      - no_brreg
                      - ch_uid_register
                      - br_receita_federal
                      - co_rues
                      - cr_hacienda
                      - ec_sri
                      - py_dnit
                      - format_rules
                      - null
                    description: >-
                      المصدر الذي حدد `vat_validation_status`: إما سجل رسمي، أو
                      `format_rules`. تكون قيمته `null` عند عدم تشغيل أي فحص.
                  vat_validated_name:
                    type: string
                    nullable: true
                    description: >-
                      الاسم المسجل لدى المصدر الذي تحقق من صحة الرقم، عند إفصاحه
                      عن اسم. يُعيّن فقط عندما تكون الحالة `valid`.
                  vat_validated_address:
                    type: string
                    nullable: true
                    description: >-
                      العنوان المسجل لدى المصدر الذي تحقق من الرقم، عندما يكشف
                      عنه. يتم تعيينه فقط عندما تكون الحالة `valid`.
                  vat_checked_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: الطابع الزمني للفحص. يكون `null` في حال عدم تشغيل أي فحص.
                  financial_summary:
                    type: object
                    nullable: true
                  officers:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                        designation:
                          type: string
                          nullable: true
                        role:
                          type: string
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        first_name:
                          type: string
                          nullable: true
                          description: >-
                            الاسم الشخصي عندما يذكره سجل الشركات صراحةً؛ لا
                            يُستنتج من الاسم الكامل.
                        last_name:
                          type: string
                          nullable: true
                          description: اسم العائلة عندما يُبلّغ عنه السجل صراحةً.
                        address:
                          type: string
                          nullable: true
                          description: عنوان المسؤول الوارد من السجل.
                        appointment_date:
                          type: string
                          nullable: true
                          description: تاريخ تعيين المسؤول.
                          format: date
                        termination_date:
                          type: string
                          nullable: true
                          description: تاريخ انتهاء التعيين، عند الإبلاغ عنه.
                          format: date
                        date_of_birth:
                          type: string
                          nullable: true
                          description: >-
                            تاريخ الميلاد الكامل المبلغ عنه في السجل. يكون
                            فارغاً (Null) عندما تكون سنة أو شهر الميلاد فقط
                            معروفان.
                          format: date
                        date_of_birth_year:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 9999
                          description: >-
                            سنة الميلاد كما وردت في السجل، بما في ذلك الحالات
                            التي لا يتوفر فيها التاريخ بالكامل.
                        date_of_birth_month:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 12
                          description: >-
                            شهر الميلاد كما ورد في السجل. يكون Null عندما تكون
                            السنة فقط هي المعروفة.
                  beneficial_owners:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        roles:
                          type: array
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            الحد الأدنى لنسبة الملكية كما أبلغ عنها السجل. سلسلة
                            نصية حرة (مثل `"25.00"`، `"50"`)؛ استخدم
                            `effective_ownership_percent` للحصول على قيمة رقمية
                            محللة.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            الحد الأعلى لنسبة الملكية كما وردت في سجل الشركات.
                            سلسلة نصية حرة؛ استخدم `effective_ownership_percent`
                            للحصول على قيمة عددية معالجة.
                        is_active:
                          type: boolean
                        kyc_status:
                          type: string
                          enum:
                            - Approved
                            - Declined
                            - Pending
                          nullable: true
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        effective_ownership_percent:
                          type: number
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        country_of_birth:
                          type: string
                          nullable: true
                        email:
                          type: string
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        voting_min_shares:
                          type: string
                          nullable: true
                        voting_max_shares:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          nullable: true
                          description: تاريخ الميلاد الكامل عند الإبلاغ عنه.
                          format: date
                        appointment_date:
                          type: string
                          nullable: true
                          description: تاريخ التعيين عند الإبلاغ عنه.
                          format: date
                        shareholding:
                          $ref: '#/components/schemas/KYBRegistryShareholding'
                  addresses:
                    type: array
                    nullable: true
                    description: >-
                      كل عنوان ينص عليه السجل، بصيغة معيارية واحدة. يكون Null
                      عندما لا ينص على أي عنوان.
                    items:
                      $ref: '#/components/schemas/KYBRegistryAddress'
                  industries:
                    type: array
                    nullable: true
                    description: >-
                      الأنشطة التي يصنف السجل الشركة تحتها، بصيغة قياسية موحدة.
                      تكون null عند عدم ذكر أي نشاط.
                    items:
                      $ref: '#/components/schemas/KYBRegistryIndustry'
                  accounts:
                    type: object
                    nullable: true
                    additionalProperties: true
                    description: >-
                      تواريخ إيداعات السجل، عند توفرها. تستخدم الإقرارات السنوية
                      والاجتماعات العامة last_annual_return_date وlast_agm_date؛
                      وهي تختلف عن الحسابات المالية.
                  registry_data:
                    $ref: '#/components/schemas/KYBRegistryData'
                  user_provided_data:
                    type: object
                    description: البيانات المؤكدة أو المعدلة من قبل المستخدم النهائي.
                  confirmed_by_user_at:
                    type: string
                    format: date-time
                    nullable: true
                  last_console_edit_at:
                    type: string
                    format: date-time
                    nullable: true
                  is_editable:
                    type: boolean
                  ownership:
                    $ref: '#/components/schemas/KYBRegistryOwnership'
                  registry_tier:
                    type: string
                    nullable: true
                    description: >-
                      مستوى سجل الشركات الذي طلبه سير العمل: `basic`، أو
                      `shareholders`، أو `ubo`. موجود أيضاً في
                      `ownership.tier_requested`.
                  registry_tier_delivered:
                    type: string
                    nullable: true
                    description: >-
                      المستوى الذي سلّمه السجل ويُفوتر. يوجد أيضاً في
                      `ownership.tier_delivered`.
                  registry_ownership_status:
                    type: string
                    nullable: true
                    description: >-
                      `not_requested`، أو `pending`، أو `delivered`، أو
                      `not_held`، أو `unavailable`. وأيضاً في
                      `ownership.status`.
                  registry_monitoring:
                    type: object
                    nullable: true
                    description: >-
                      أحدث مراقبة لسجل الشركات للشركة، أو `null` في حال عدم وجود
                      أي منها.
                    properties:
                      uuid:
                        type: string
                        format: uuid
                      status:
                        type: string
                      unavailable_reason:
                        type: string
                        nullable: true
                      enrolled_at:
                        type: string
                        format: date-time
                        nullable: true
                      cancelled_at:
                        type: string
                        format: date-time
                        nullable: true
                      last_bill_date:
                        type: string
                        format: date
                        nullable: true
                      next_bill_date:
                        type: string
                        format: date
                        nullable: true
                      last_event_at:
                        type: string
                        format: date-time
                        nullable: true
                      events_count:
                        type: integer
                      watched_fields:
                        description: حقول الشركة التي تراقبها أداة المراقبة.
              ownership_structure:
                $ref: '#/components/schemas/KYBOwnershipStructure'
              warnings:
                type: array
                items:
                  type: object
        key_people_checks:
          type: array
          nullable: true
          description: >-
            فحوصات مجمعة للأشخاص الرئيسيين. تظهر فقط عندما يكون `session_kind =
            business`. يستخدم كل عنصر بنية من قسمين (`registry`، `submitted`،
            `ubo_kyc_summary`).
          items:
            type: object
            description: >-
              فحص مجمع لمسؤولي الشركة + المستفيدين الحقيقيين (UBOs). يستخدم بنية
              `registry` / `submitted`. لا يظهر إلا عندما يكون session_kind =
              business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              registry:
                type: object
                description: الأطراف المكتشفة عبر فحص سجل الشركات.
                properties:
                  officers:
                    type: array
                    description: >-
                      المسؤولون الذين تم اكتشافهم عبر فحص السجل، مع إثراء كل
                      منهم بحالة أي جلسة KYC تابعة وفحص AML تم إنشاؤهما لهم.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: الاسم الكامل للمسؤول كما هو مسجل في السجل.
                        designation:
                          type: string
                          nullable: true
                          description: >-
                            المسمى بنص حر من السجل (مثل `Director` أو `Company
                            Secretary`).
                        role:
                          type: string
                          enum:
                            - director
                            - non_executive_director
                            - secretary
                            - chairman
                            - ubo
                            - shareholder
                            - representative
                            - founder
                            - legal_advisor
                            - authorized_signatory
                            - trustee
                            - beneficiary
                            - settlor
                            - protector
                            - company_officer
                            - investor
                            - other
                          description: الدور المعياري للمسؤول.
                        nationality:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                          description: تاريخ تعيين المسؤول.
                          format: date
                        termination_date:
                          type: string
                          nullable: true
                          description: تاريخ انتهاء التعيين، عند الإبلاغ عنه.
                          format: date
                        is_active:
                          type: boolean
                        address:
                          type: string
                          nullable: true
                          description: عنوان المسؤول الوارد من السجل.
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            حالة فحص AML الذي تم إجراؤه لهذا المسؤول. تكون
                            `null` في حال لم يتم إجراء أي فحص AML.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            حالة دورة الحياة الخام لجلسة KYC التابعة التي تم
                            إنشاؤها لهذا المسؤول. هذا هو تعداد حالة الجلسة
                            الكامل (وليس مجموعة مختصرة من مقبولة/مرفوضة/قيد
                            الانتظار). تكون القيمة `null` في حال عدم وجود جلسة
                            KYC تابعة.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            رابط URL قابل للمشاركة لجلسة KYC الفرعية. يكون
                            `null` عندما لا توجد جلسة فرعية.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف الجلسة لجلسة KYC الفرعية. مرّره إلى endpoint
                            القرار نفسها لجلب تقرير KYC الكامل للشخص. يكون
                            `null` في حال عدم وجود جلسة فرعية.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            نوع سير العمل الأساسي لسير عمل الجلسة الفرعية (مثل
                            `kyc`). تكون القيمة `null` لمهام سير العمل المستندة
                            إلى المخطط أو في حال عدم وجود جلسة فرعية.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف سير العمل المستخدم بواسطة الجلسة الفرعية. يكون
                            `null` عند عدم وجود جلسة فرعية.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            تسمية سهلة القراءة لسير عمل الجلسة الفرعية. تكون
                            `null` إذا لم تكن محددة.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            التقدم لكل ميزة في جلسة التحقق الفرعية، مثل
                            `[{"feature": "ID_VERIFICATION", "status":
                            "Approved"}]`. تكون القيمة `null` عندما لا تحتوي
                            الجلسة الفرعية على قائمة ميزات قابلة للحل.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  الاسم المعروض للميزة (مثل `ID_VERIFICATION`،
                                  أو `LIVENESS`، أو `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: حالة مستوى الميزة داخل الجلسة الفرعية.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            معرّف داخلي ثابت للفرد المتحقق منه خلف الجلسة
                            الفرعية — مفيد للربط عبر الجلسات. تكون القيمة `null`
                            عند عدم وجود جلسة فرعية أو إذا لم يتم تحديد المستخدم
                            بعد.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            نوع المستند المقدّم في جلسة KYC الفرعية (مثل `P` أو
                            `ID` أو `DL`). يكون `null` حتى تتوفر نتيجة التحقق من
                            الهوية للجلسة الفرعية.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            الجنسية المستخرجة من المستند في جلسة KYC الفرعية.
                            تكون `null` حتى تصبح متاحة.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            ما إذا كان فحص الحيوية لجلسة KYC الفرعية قد اجتاز
                            بنجاح. وتكون `null` في حال لم يتم تشغيل أي فحص
                            حيوية.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            وقت وصول جلسة KYC التابعة إلى حالة `Approved`. تكون
                            القيمة `null` طالما أن الجلسة التابعة في أي حالة
                            أخرى.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            ملخص لكل فئة مشتق من تطابقات AML للشخص. `null` في
                            حال عدم وجود تطابقات.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            طابع زمني بتنسيق ISO 8601 لآخر إشعار دعوة تحقق تم
                            إرساله للجلسة الفرعية لهذا الشخص. تكون القيمة `null`
                            عند عدم إرسال أي إشعار.
                        first_name:
                          type: string
                          nullable: true
                          description: >-
                            الاسم الشخصي عندما يذكره سجل الشركات صراحةً؛ لا
                            يُستنتج من الاسم الكامل.
                        last_name:
                          type: string
                          nullable: true
                          description: اسم العائلة عندما يُبلّغ عنه السجل صراحةً.
                        date_of_birth:
                          type: string
                          nullable: true
                          description: >-
                            تاريخ الميلاد الكامل المبلغ عنه في السجل. يكون
                            فارغاً (Null) عندما تكون سنة أو شهر الميلاد فقط
                            معروفان.
                          format: date
                        date_of_birth_year:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 9999
                          description: >-
                            سنة الميلاد كما وردت في السجل، بما في ذلك الحالات
                            التي لا يتوفر فيها التاريخ بالكامل.
                        date_of_birth_month:
                          type: integer
                          nullable: true
                          minimum: 1
                          maximum: 12
                          description: >-
                            شهر الميلاد كما ورد في السجل. يكون Null عندما تكون
                            السنة فقط هي المعروفة.
                  beneficial_owners:
                    type: array
                    description: >-
                      المستفيدون الحقيقيون الذين تم اكتشافهم عبر فحص سجل
                      الشركات، مع تزويد كل منهم بحالة أي جلسة KYC فرعية وفحص AML
                      تم إنشاؤهما لهم.
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        name:
                          type: string
                          description: >-
                            الاسم الكامل للمستفيد الحقيقي (أو اسم الشركة بالنسبة
                            لكيانات UBO الاعتبارية).
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          nullable: true
                          description: تاريخ الميلاد الكامل عند الإبلاغ عنه.
                          format: date
                        country_of_birth:
                          type: string
                          nullable: true
                        email:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        nationality:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        roles:
                          type: array
                          description: >-
                            أسماء الأدوار التي يشغلها هذا المالك، على سبيل
                            المثال `["ubo", "shareholder"]`.
                          items:
                            type: string
                        ownership_min_shares:
                          type: string
                          nullable: true
                          description: >-
                            الحد الأدنى لنسبة الملكية كما أبلغ عنها السجل. سلسلة
                            نصية حرة (مثل `"25"`، `"25-50%"`)؛ استخدم
                            `effective_ownership_percent` للحصول على قيمة رقمية
                            محللة.
                        ownership_max_shares:
                          type: string
                          nullable: true
                          description: >-
                            الحد الأعلى لنسبة الملكية كما وردت في سجل الشركات.
                            سلسلة نصية حرة؛ استخدم `effective_ownership_percent`
                            للحصول على قيمة عددية معالجة.
                        is_active:
                          type: boolean
                        aml_status:
                          type: string
                          enum:
                            - Not Finished
                            - Approved
                            - Declined
                            - In Review
                            - Resub Requested
                          nullable: true
                          description: >-
                            حالة فحص AML الذي تم إجراؤه لهذا المستفيد الحقيقي.
                            تكون `null` في حال لم يتم إجراء أي فحص AML.
                        kyc_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            حالة دورة الحياة الخام لجلسة KYC التابعة التي تم
                            إنشاؤها لهذا المستفيد الحقيقي. هذا هو تعداد حالة
                            الجلسة الكامل (وليس مجموعة مختصرة من
                            مقبولة/مرفوضة/قيد الانتظار). تكون القيمة `null` في
                            حال عدم وجود جلسة KYC تابعة.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            رابط URL قابل للمشاركة لجلسة KYC الفرعية. يكون
                            `null` عندما لا توجد جلسة فرعية.
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف الجلسة لجلسة KYC الفرعية. مرّره إلى endpoint
                            القرار نفسها لجلب تقرير KYC الكامل للشخص. يكون
                            `null` في حال عدم وجود جلسة فرعية.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            نوع سير العمل الأساسي لسير عمل الجلسة الفرعية (مثل
                            `kyc`). تكون القيمة `null` لمهام سير العمل المستندة
                            إلى المخطط أو في حال عدم وجود جلسة فرعية.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف سير العمل المستخدم بواسطة الجلسة الفرعية. يكون
                            `null` عند عدم وجود جلسة فرعية.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            تسمية سهلة القراءة لسير عمل الجلسة الفرعية. تكون
                            `null` إذا لم تكن محددة.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            التقدم لكل ميزة في جلسة التحقق الفرعية، مثل
                            `[{"feature": "ID_VERIFICATION", "status":
                            "Approved"}]`. تكون القيمة `null` عندما لا تحتوي
                            الجلسة الفرعية على قائمة ميزات قابلة للحل.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  الاسم المعروض للميزة (مثل `ID_VERIFICATION`،
                                  أو `LIVENESS`، أو `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: حالة مستوى الميزة داخل الجلسة الفرعية.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            معرّف داخلي ثابت للفرد المتحقق منه خلف الجلسة
                            الفرعية — مفيد للربط عبر الجلسات. تكون القيمة `null`
                            عند عدم وجود جلسة فرعية أو إذا لم يتم تحديد المستخدم
                            بعد.
                        kyc_document_type:
                          type: string
                          nullable: true
                          description: >-
                            نوع المستند المقدّم في جلسة KYC الفرعية (مثل `P` أو
                            `ID` أو `DL`). يكون `null` حتى تتوفر نتيجة التحقق من
                            الهوية للجلسة الفرعية.
                        kyc_nationality:
                          type: string
                          nullable: true
                          description: >-
                            الجنسية المستخرجة من المستند في جلسة KYC الفرعية.
                            تكون `null` حتى تصبح متاحة.
                        kyc_liveness_passed:
                          type: boolean
                          nullable: true
                          description: >-
                            ما إذا كان فحص الحيوية لجلسة KYC الفرعية قد اجتاز
                            بنجاح. وتكون `null` في حال لم يتم تشغيل أي فحص
                            حيوية.
                        kyc_verified_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: >-
                            وقت وصول جلسة KYC التابعة إلى حالة `Approved`. تكون
                            القيمة `null` طالما أن الجلسة التابعة في أي حالة
                            أخرى.
                        kyc_aml_categories:
                          type: object
                          nullable: true
                          description: >-
                            ملخص لكل فئة مشتق من تطابقات AML للشخص. `null` في
                            حال عدم وجود تطابقات.
                          properties:
                            sanctions:
                              type: string
                              enum:
                                - match
                                - clear
                            pep:
                              type: string
                              enum:
                                - match
                                - clear
                            adverse_media:
                              type: string
                              enum:
                                - match
                                - clear
                            warnings:
                              type: string
                              enum:
                                - match
                                - clear
                        kyc_notification_sent_at:
                          type: string
                          nullable: true
                          description: >-
                            طابع زمني بتنسيق ISO 8601 لآخر إشعار دعوة تحقق تم
                            إرساله للجلسة الفرعية لهذا الشخص. تكون القيمة `null`
                            عند عدم إرسال أي إشعار.
                        child_beneficial_owners:
                          type: array
                          description: >-
                            بالنسبة للـ UBOs للشركات: المستفيدون الحقيقيون
                            الخاصون بالكيان المالك، ككائنات خام مستخرجة من
                            السجل. مصفوفة فارغة عندما لا ينطبق ذلك.
                          items:
                            type: object
                        effective_ownership_percent:
                          type: number
                          nullable: true
                          description: >-
                            نسبة الملكية الرقمية المحللة — الحد الأقصى عند
                            توفره، وإلا فالحد الأدنى. القيمة `null` عندما يتعذر
                            تحليل كلا الحدين.
                        voting_min_shares:
                          type: string
                          nullable: true
                        voting_max_shares:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                          description: تاريخ التعيين عند الإبلاغ عنه.
                          format: date
              submitted:
                type: object
                description: >-
                  الأطراف المُرسلة من قِبل مسؤول الشركة أثناء سير عمل الأشخاص
                  الرئيسيين (صفوف BusinessParty حيث source=USER).
                properties:
                  parties:
                    type: array
                    items:
                      type: object
                      description: >-
                        طرف مُرسل من قِبل مسؤول الشركة عبر سير عمل الأشخاص
                        الرئيسيين (source=USER).
                      properties:
                        uuid:
                          type: string
                          format: uuid
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        source:
                          type: string
                          enum:
                            - USER
                          description: >-
                            دائماً `USER` هنا — لا تحتوي هذه الفئة إلا على
                            الأطراف التي أدخلها أو أكّدها المستخدم النهائي في
                            مسار الأشخاص الرئيسيون (يظهر الأشخاص المكتشفون عبر
                            السجل ضمن `registry`).
                        name:
                          type: string
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        company_name:
                          type: string
                          nullable: true
                        registration_number:
                          type: string
                          nullable: true
                        email:
                          type: string
                          format: email
                          nullable: true
                        nationality:
                          type: string
                          nullable: true
                          description: الجنسية للأفراد؛ ودولة التأسيس لأطراف الشركات.
                        phone_number:
                          type: string
                          nullable: true
                        date_of_birth:
                          type: string
                          format: date
                          nullable: true
                        position:
                          type: string
                          nullable: true
                          description: المسمى الوظيفي / المنصب بنص حر (للأشخاص فقط).
                        custom_fields:
                          type: object
                          description: >-
                            حقول مخصصة محددة في سير العمل تم جمعها لهذا الطرف؛
                            يتم تحديد المفاتيح بواسطة الواصفات المحددة لحقول
                            الأشخاص الرئيسيين في سير العمل.
                        is_active:
                          type: boolean
                        is_skipped:
                          type: boolean
                          description: >-
                            تكون القيمة True عندما يتخطى المستخدم النهائي عملية
                            التحقق لهذا الطرف (ممكن فقط عندما يسمح الدور
                            بالتخطي).
                        requires_verification:
                          type: boolean
                          description: >-
                            تكون القيمة True عندما تكون هناك حاجة إلى جلسة فرعية
                            تابعة لـ KYC / KYB لهذا الطرف بناءً على إعدادات
                            الدور وحدود الملكية.
                        roles:
                          type: array
                          description: >-
                            جميع الأدوار التي يشغلها هذا الطرف، ولكل منها نسب
                            الملكية والتصويت الخاصة به. لا يوجد `role` أو
                            `ownership_percent` مفرد على الطرف نفسه.
                          items:
                            type: object
                            properties:
                              role:
                                type: string
                                enum:
                                  - director
                                  - non_executive_director
                                  - secretary
                                  - chairman
                                  - ubo
                                  - shareholder
                                  - representative
                                  - founder
                                  - legal_advisor
                                  - authorized_signatory
                                  - trustee
                                  - beneficiary
                                  - settlor
                                  - protector
                                  - company_officer
                                  - investor
                                  - other
                              ownership_percent:
                                type: number
                                nullable: true
                              voting_percent:
                                type: number
                                nullable: true
                        kyc_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف جلسة KYC الفرعية لأطراف الأفراد التي تتطلب
                            التحقق. `null` بخلاف ذلك.
                        kyc_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            حالة دورة حياة جلسة KYC الفرعية التابعة. تكون `null`
                            في حال عدم وجود جلسة KYC فرعية.
                        kyc_session_url:
                          type: string
                          format: uri
                          nullable: true
                        kyb_sub_session_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف الجلسة الفرعية لـ KYB التابعة لأطراف الشركات
                            التي تتطلب التحقق. `null` بخلاف ذلك.
                        kyb_sub_session_status:
                          type: string
                          enum:
                            - Not Started
                            - In Progress
                            - Approved
                            - Declined
                            - In Review
                            - Expired
                            - Abandoned
                            - Kyc Expired
                            - Resubmitted
                            - Awaiting User
                          nullable: true
                          description: >-
                            حالة دورة حياة جلسة KYB الفرعية التابعة. تكون `null`
                            في حال عدم وجود جلسة فرعية.
                        kyb_sub_session_url:
                          type: string
                          format: uri
                          nullable: true
                          description: >-
                            رابط URL قابل للمشاركة للجلسة الفرعية التابعة لـ
                            KYB. يكون `null` عندما لا توجد جلسة فرعية.
                        verification_workflow_type:
                          type: string
                          nullable: true
                          description: >-
                            نوع سير العمل الأساسي لسير عمل الجلسة الفرعية (تُفضل
                            جلسة KYC، مع الرجوع إلى جلسة KYB الفرعية). تكون
                            القيمة `null` لمهام سير العمل المستندة إلى المخطط أو
                            عند عدم وجود جلسة فرعية.
                        verification_workflow_id:
                          type: string
                          format: uuid
                          nullable: true
                          description: >-
                            معرّف سير العمل المستخدم بواسطة الجلسة الفرعية. يكون
                            `null` عند عدم وجود جلسة فرعية.
                        verification_workflow_label:
                          type: string
                          nullable: true
                          description: >-
                            تسمية سهلة القراءة لسير عمل الجلسة الفرعية. تكون
                            `null` إذا لم تكن محددة.
                        verification_workflow_features:
                          type: array
                          nullable: true
                          description: >-
                            التقدم لكل ميزة في جلسة التحقق الفرعية، مثل
                            `[{"feature": "ID_VERIFICATION", "status":
                            "Approved"}]`. تكون القيمة `null` عندما لا تحتوي
                            الجلسة الفرعية على قائمة ميزات قابلة للحل.
                          items:
                            type: object
                            properties:
                              feature:
                                type: string
                                description: >-
                                  الاسم المعروض للميزة (مثل `ID_VERIFICATION`،
                                  أو `LIVENESS`، أو `AML`).
                              status:
                                type: string
                                enum:
                                  - Not Finished
                                  - Approved
                                  - Declined
                                  - In Review
                                  - Resub Requested
                                description: حالة مستوى الميزة داخل الجلسة الفرعية.
                        didit_internal_id:
                          type: string
                          nullable: true
                          description: >-
                            معرّف داخلي ثابت للفرد المتحقق منه خلف الجلسة
                            الفرعية. تكون القيمة `null` عندما لا يتم تحديده.
              ubo_kyc_summary:
                type: object
                nullable: true
                description: >-
                  تقدم KYC المجمع للمستفيدين الحقيقيين (UBOs)، أو null عندما لا
                  يمتلك أي مستفيد حقيقي جلسات KYC مرتبطة.
                properties:
                  total:
                    type: integer
                  approved:
                    type: integer
                  flagged:
                    type: integer
                    description: >-
                      المستفيدون الحقيقيون (UBOs) الذين جاءت نتيجة KYC الخاصة
                      بهم مرفوضة أو قيد المراجعة.
                  pending:
                    type: integer
              warnings:
                type: array
                items:
                  type: object
        document_verifications:
          type: array
          nullable: true
          description: >-
            عمليات التحقق من المستندات مجمّعة حسب عقدة سير العمل. تظهر فقط عندما
            يكون `session_kind = business`.
          items:
            type: object
            description: >-
              المستندات مجمّعة حسب عقدة سير العمل. تظهر فقط عندما يكون
              session_kind = business.
            properties:
              status:
                type: string
              node_id:
                type: string
                nullable: true
              items:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    document_type:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: >-
                        مجموعة مستندات KYB عالية المستوى التي تم تصنيف الملف
                        ضمنها. `null` طالما لم يتم تصنيفه.
                    document_subtype:
                      type: string
                      nullable: true
                      description: >-
                        النوع الفرعي المحدد المكتشف بواسطة OCR (مثل
                        `CERTIFICATE_OF_INCORPORATION` أو
                        `SHAREHOLDER_REGISTRY`)؛ وتكون `UNKNOWN` عندما يتعذر على
                        OCR تصنيف المستند بثقة.
                    document_group:
                      type: string
                      enum:
                        - LEGAL_PRESENCE
                        - COMPANY_DETAILS
                        - OWNERSHIP_STRUCTURE
                        - REPRESENTATIVES_AUTHORIZATION
                        - OTHER
                      nullable: true
                      description: >-
                        اسم بديل لـ `document_type` — اسم المجموعة المستخدم
                        بواسطة `groups` و`required_groups`.
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: >-
                        رابط موقع مسبقاً قصير الأجل للملف المرفوع. يكون `null`
                        للعناصر النائبة لطلبات المستندات التي أنشأها المحلل
                        (`is_requested = true`) والتي لم يتم استيفاؤها بعد.
                    original_filename:
                      type: string
                      nullable: true
                      description: اسم الملف كما رفعه المستخدم أو المحلل.
                    file_size:
                      type: integer
                      nullable: true
                      description: حجم الملف بالبايت.
                    status:
                      type: string
                      enum:
                        - Not Finished
                        - Approved
                        - Declined
                        - In Review
                        - Resub Requested
                      description: حالة التحقق لكل مستند.
                    created_at:
                      type: string
                      format: date-time
                    cross_check_result:
                      type: object
                      nullable: true
                      description: >-
                        المطابقة المرجعية لحقول المستند المستخرجة عبر OCR مع
                        الملف التعريفي للشركة في السجل. كائن يحتوي على أقسام
                        `critical` و`non_critical` و`people`، حيث يربط كل منها
                        اسم حقل (مثل `company_name` و`registration_number`
                        و`incorporation_date` و`registered_address`) بسجل مقارنة
                        مثل `{"document": "...", "registry": "...", "match":
                        true, "score": 0.97}`. وتكون القيمة `null` عندما لا
                        يحتوي المستند على بيانات OCR أو لم تكن هناك شركة في
                        السجل للمقارنة معها.
                    document_metadata:
                      type: object
                      nullable: true
                      description: >-
                        البيانات الوصفية المستخرجة من مستند الشركة المرفوع. عند
                        نجاح استخراج البيانات الوصفية، تكون جميع المفاتيح الـ 16
                        موجودة دائمًا (تكون القيم الفردية `null` عندما لا تنطبق
                        على نوع الملف)؛ ويكون الكائن بالكامل `null` عندما يتعذر
                        استخراج أي شيء. بالنسبة لملفات PDF، يحمل
                        `overlay_manipulation` تحليلًا جنائيًا للنص المتراكب.
                      properties:
                        file_size:
                          type: integer
                          nullable: true
                          description: حجم المستند.
                        content_type:
                          type: string
                          nullable: true
                          description: نوع محتوى المستند.
                        creation_date:
                          type: string
                          nullable: true
                          description: تاريخ إنشاء المستند.
                        modified_date:
                          type: string
                          nullable: true
                          description: تاريخ تعديل المستند.
                        creator:
                          type: string
                          nullable: true
                          description: >-
                            أداة التأليف/المستخدم المسجل في البيانات الوصفية
                            للملف (`Creator` في ملف PDF).
                        producer:
                          type: string
                          nullable: true
                          description: البرنامج الذي أنتج الملف (`Producer` الخاص بـ PDF).
                        software:
                          type: string
                          nullable: true
                          description: برنامج التحرير المسجل في البيانات الوصفية للملف.
                        encryption:
                          type: string
                          nullable: true
                          description: مخطط تشفير الملف، عندما يكون مشفراً.
                        is_signed:
                          type: boolean
                          nullable: true
                          description: ما إذا كان المستند يحمل توقيعاً رقمياً.
                        is_tampered:
                          type: boolean
                          nullable: true
                          description: >-
                            ما إذا كان التوقيع الرقمي قد فشل في التحقق من صحته
                            (تعديل بعد التوقيع).
                        signature_info:
                          type: object
                          nullable: true
                          description: تفاصيل التوقيع/التوقيعات الرقمية، إن وُجدت.
                        exif_original_date:
                          type: string
                          nullable: true
                          description: تاريخ الالتقاط الأصلي في EXIF، لعمليات تحميل الصور.
                        exif_digitized_date:
                          type: string
                          nullable: true
                          description: تاريخ الرقمنة في EXIF، لعمليات تحميل الصور.
                        processed_by_known_editor:
                          type: boolean
                          nullable: true
                          description: >-
                            ما إذا كانت البيانات الوصفية تشير إلى أن الملف قد مر
                            عبر محرر صور/PDF معروف.
                        has_different_creation_mod_date:
                          type: boolean
                          nullable: true
                          description: >-
                            ما إذا كانت تواريخ الإنشاء والتعديل تختلف — وهي
                            إشارة تعديل محتملة (لكنها ليست حاسمة).
                        overlay_manipulation:
                          type: object
                          nullable: true
                          description: >-
                            التحليل الجنائي لملفات PDF للتلاعب المشتبه به في
                            النص المتراكب. القيمة Null عند عدم العثور على أي
                            دليل تلاعب بالنص المتراكب أو إذا لم يكن المستند
                            بصيغة PDF.
                          properties:
                            detected:
                              type: boolean
                              description: >-
                                ما إذا تم اكتشاف دليل على التلاعب بالنص
                                المتراكب.
                            analyzed:
                              type: boolean
                              description: ما إذا كان قد أمكن تحليل ملف PDF.
                            analysis_incomplete:
                              type: boolean
                              description: >-
                                يكون الحقل موجودًا وقيمته صحيحة فقط عندما يتعذر
                                فحص الملف بالكامل. يحتفظ الجزء الذي تم فحصه
                                بنتائجه حيثما أمكن، ويُظهر المستند تحذير استبدال
                                النص غير المُثبت.
                            signals:
                              type: array
                              items:
                                type: string
                              description: >-
                                إشارات الفحص الجنائي التي تم إطلاقها، مثل
                                duplicate_font_subset أو glyph_fragmentation.
                            manipulated_regions:
                              type: array
                              description: >-
                                المناطق المشتبه في التلاعب بها بإحداثيات صفحة
                                PDF.
                              items:
                                type: object
                                properties:
                                  page:
                                    type: integer
                                  x:
                                    type: number
                                  'y':
                                    type: number
                                  width:
                                    type: number
                                  height:
                                    type: number
                                  page_width:
                                    type: number
                                  page_height:
                                    type: number
                    description:
                      type: string
                      nullable: true
                      description: >-
                        تصنيف أو سبب مقدّم من المحلل لطلب المستند. `null`
                        لعمليات الرفع العادية.
                    is_requested:
                      type: boolean
                      description: >-
                        تكون القيمة True لعناصر نائبة لطلبات المستندات التي
                        أنشأها المحلل وتنتظر الرفع.
                    ocr_data:
                      type: object
                      nullable: true
                    is_console_upload:
                      type: boolean
                      description: >-
                        تكون القيمة True للمستندات المرفوعة من لوحة التحكم بدلاً
                        من مسار المستخدم النهائي. لا تؤدي عمليات الرفع من لوحة
                        التحكم أبداً إلى تغيير الحالة التراكمية على مستوى
                        الميزة.
                    is_confirmed:
                      type: boolean
                      description: >-
                        تبدأ عمليات الرفع في Console بالقيمة `false` وتتحول إلى
                        `true` بمجرد تأكيدها من قبل المسؤول؛ وتكون عمليات الرفع
                        من المستخدم النهائي دائماً `true`.
              groups:
                type: object
                description: >-
                  عدادات التقدم لكل مجموعة مفهرسة باسم المجموعة (مثل
                  legal_presence، ownership_structure).
                additionalProperties:
                  type: object
                  properties:
                    total:
                      type: integer
                    approved:
                      type: integer
                    pending:
                      type: integer
                    declined:
                      type: integer
                    in_review:
                      type: integer
                    other:
                      type: integer
                    missing:
                      type: integer
                      description: >-
                        العناصر النائبة المطلوبة التي لم يتم تحميل أي ملف لها
                        بعد.
              required_groups:
                type: array
                items:
                  type: string
              warnings:
                type: array
                items:
                  type: object
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            ما إذا كانت الجلسة قد أُنشئت بواسطة تطبيق إنتاج (`live`) أو تطبيق في
            البيئة التجريبية (`sandbox`). جلسات البيئة التجريبية مجانية ومحاكاة
            بالكامل ولا تخصم أرصدة أبداً.
        sandbox_scenario:
          type: string
          nullable: true
          description: >-
            سيناريو البيئة التجريبية الذي تم إنشاء الجلسة باستخدامه. `null`
            للجلسات المباشرة ولجلسات البيئة التجريبية التي تم إنشاؤها بدونه.
        resubmissions:
          type: array
          description: >-
            يتم إرجاعها فقط مع `include=resubmissions`، لجلسات المستخدمين
            والشركات. مدخل واحد لكل طلب إعادة تقديم، من الأقدم إلى الأحدث. يحمل
            كل مدخل النتائج التي أرجعتها الخطوات المعاد تقديمها قبل الطلب، بحيث
            تظل عمليات الإرسال السابقة قابلة للقراءة. يؤدي حذف الجلسة إلى حذف كل
            عملية إرسال.
          items:
            type: object
            properties:
              number:
                type: integer
                description: 1 لأول إعادة إرسال للجلسة، و2 للثانية، وهكذا.
              created_at:
                type: string
                format: date-time
                description: متى طُلبت إعادة التقديم.
              previous_status:
                type: string
                description: حالة الجلسة مباشرة قبل الطلب.
              nodes:
                type: array
                description: خطوات سير العمل المُعادة إلى المستخدم.
                items:
                  type: object
                  properties:
                    node_id:
                      type: string
                    feature:
                      type: string
              reasons:
                type: object
                nullable: true
                additionalProperties:
                  type: string
                description: السبب المقدم لكل خطوة، مفهرساً بواسطة `node_id`.
              requested_by:
                type: object
                nullable: true
                description: من طلب إعادة التقديم.
                properties:
                  name:
                    type: string
                  email:
                    type: string
                  type:
                    type: string
              results:
                type: object
                additionalProperties: true
                description: >-
                  ما أرجعته الخطوات المُعاد إرسالها قبل الطلب، تحت نفس المفاتيح
                  وبنفس هيئة النتائج الحالية لهذه الاستجابة (`id_verifications`،
                  و`nfc_verifications`، و`liveness_checks`، و`face_matches`،
                  و`poa_verifications`، و`phone_verifications`،
                  و`email_verifications`، و`aml_screenings`، و`ip_analyses`،
                  و`database_validations`، و`questionnaire_responses`،
                  و`document_ai_documents`، و`geolocation_checks`؛ ولجلسات
                  الشركات أيضاً `document_verifications`). تظهر فقط مفاتيح
                  الخطوات التي تم إرسالها مجدداً.
        biometric_consent:
          type: object
          nullable: true
          description: >-
            ما إذا كانت الجلسة تتطلب موافقة بيومترية صريحة قبل التقاط الوجه،
            والسبب، والدليل على الإجابة. جلسات التحقق من المستخدمين (KYC) فقط؛
            يتوفر الكائن نفسه في `decision` لـ webhook الخاصة بالجلسة. يكون
            `null` عندما لا تخضع الجلسة للتقييم على الإطلاق، على سبيل المثال في
            سير عمل بدون التقاط للوجه. الحقول التي ليس لها قيمة مسجلة تكون
            `null`. لا يمكن لـ SDK أصيل بإصدار أقدم من 4.10.0، أو الذي لا يُبلّغ
            عن إصداره، إظهار خطوة الموافقة: وتعمل عمليات التقاط الوجه كما كانت
            من قبل، وتبلغ الجلسة التي تطلبت الموافقة حينها عن `status:
            "pending"` مع `reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"`. راجع
            [الموافقة البيومترية](/ar/getting-started/biometric-consent).
          properties:
            required:
              type: boolean
              description: >-
                Whether the session must collect explicit biometric consent.
                Never goes back to `false`.
            trigger:
              type: string
              nullable: true
              enum:
                - declared_state
                - ip_state
                - ip_unknown
                - document_issuer
                - forced
                - customer_collected
              description: >-
                سبب طلب الموافقة، أو كيف تم استيفاؤها. `declared_state`: صرّحت
                بولاية مشمولة (`user_state`، أو عنوان أمريكي في
                `expected_details`). `ip_state`: عنوان IP الخاص بالشخص يقع في
                ولاية مشمولة (إلينوي، تكساس، كولورادو). `ip_unknown`: تشير
                الأدلة إلى وجود الشخص في الولايات المتحدة ولكن يتعذر تحديد
                الولاية (عنوان IP في الولايات المتحدة دون تحديد الولاية، أو
                يتعذر تحديد موقعه بينما تشير تفاصيلك أو المستند إلى وجود الشخص
                في الولايات المتحدة). `document_issuer`: تم إصدار مستند الهوية
                من قِبل ولاية مشمولة. `forced`: وضع التطبيق هو Always.
                `customer_collected`: أرسلت `biometric_consent` عند إنشاء
                الجلسة. تكون `null` عندما لا تكون مطلوبة.
            status:
              type: string
              enum:
                - not_required
                - pending
                - given
                - declined
              description: >-
                `not_required`؛ و`pending` (مطلوبة ولم تُقدَّم: لم يُجب الشخص
                بعد، أو يوضح `reason` سبب عدم جمعها)؛ و`given`؛ و`declined` (تم
                تسجيل رفض وانتهت الجلسة كـ `Declined`؛ لا توفر أي شاشة في Didit
                خيار الرفض حالياً).
            given_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                وقت تقديم الموافقة. بالنسبة إلى `customer_collected`، قيمة
                `given_at` التي أرسلتها.
            declined_at:
              type: string
              format: date-time
              nullable: true
              description: عند تسجيل الرفض.
            text_version:
              type: string
              nullable: true
              description: >-
                معرّف إصدار نص الموافقة الذي أجاب عليه الشخص، أو النص الذي
                أرسلته.
            text_hash:
              type: string
              nullable: true
              description: >-
                تشفير SHA-256 (hex) لنص الموافقة المعروض بدقة، باللغة التي عُرض
                بها.
            locale:
              type: string
              nullable: true
              description: اللغة التي عُرض بها نص الموافقة.
            policy_url:
              type: string
              format: uri
              nullable: true
              description: سياسة البيانات البيومترية التي ربطت بها خطوة الموافقة.
            step:
              type: string
              nullable: true
              description: >-
                خطوة سير العمل التي كانت الجلسة عندها عندما أجاب الشخص، على سبيل
                المثال `LIVENESS`.
            node_id:
              type: string
              nullable: true
              description: عقدة مخطط سير العمل التي كانت الجلسة عندها عندما أجاب الشخص.
            ip_address:
              type: string
              nullable: true
              description: عنوان IP الذي وردت منه الإجابة.
            ip_country_code:
              type: string
              nullable: true
              description: دولة عنوان IP للإجابة وفق المعيار ISO 3166-1 alpha-2.
            ip_state:
              type: string
              nullable: true
              description: >-
                التقسيم الإداري حسب معيار ISO 3166-2 لعنوان IP الخاص بالإجابة،
                على سبيل المثال `US-IL`.
            ip_city:
              type: string
              nullable: true
              description: مدينة عنوان IP الخاص بالإجابة.
            user_agent:
              type: string
              nullable: true
              description: وكيل المستخدم لطلب الإجابة.
            detected_ip_address:
              type: string
              nullable: true
              description: >-
                عنوان IP الخاص بالشخص الذي جرى تقييم المتطلب منه آخر مرة. قد
                يختلف عن `ip_address` إذا أجاب الشخص من جهاز آخر.
            detected_country_code:
              type: string
              nullable: true
              description: دولة عنوان IP المكتشف وفق المعيار ISO 3166-1 alpha-2.
            detected_state:
              type: string
              nullable: true
              description: التقسيم الإداري حسب معيار ISO 3166-2 لعنوان IP المكتشف.
            detected_city:
              type: string
              nullable: true
              description: مدينة عنوان IP المكتشف.
            declared_state:
              type: string
              nullable: true
              description: >-
                التقسيم الإداري حسب معيار ISO 3166-2 الذي صرحت به: `user_state`،
                أو الولاية لعنوان في الولايات المتحدة في `expected_details`.
            document_state:
              type: string
              nullable: true
              description: >-
                التقسيم الإداري حسب معيار ISO 3166-2 الذي أصدر مستند الهوية،
                وتتم قراءته عند التقاط الهوية.
            jurisdictions:
              type: array
              items:
                type: string
              description: >-
                الولايات الأمريكية (رموز USPS، على سبيل المثال `IL`) التي ينطبق
                قانونها البيومتري على الشخص. تكون القيمة `US` عندما تشير الأدلة
                إلى وجود الشخص في الولايات المتحدة دون معرفة ولاية محددة. يكون
                فارغاً عند عدم انطباق أي منها.
            retention_months:
              type: integer
              nullable: true
              description: >-
                أقصر حد للاحتفاظ بالبيانات البيومترية، بالأشهر، من بين
                `jurisdictions`. تكون قيمته `null` في حال عدم تطبيق أي منها.
            reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_UNSUPPORTED_SDK
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_UNSUPPORTED_SDK`: كانت الموافقة مطلوبة والتقط
                SDK أصلي بإصدار أقدم من 4.10.0، أو SDK لم يُبلغ عن إصداره، وجهاً
                دون خطوة الموافقة؛ تظل `status` كـ `pending`، أو تصبح `given`
                إذا وافق الشخص لاحقاً في المسار المستضاف.
                `BIOMETRIC_CONSENT_DECLINED`: تم تسجيل رفض (يحل محل سبب SDK).
                و`null` خلاف ذلك، وتكون دائماً `null` عندما لا تتطلب الجلسة
                موافقة.
            decline_reason:
              type: string
              nullable: true
              enum:
                - BIOMETRIC_CONSENT_DECLINED
              description: >-
                `BIOMETRIC_CONSENT_DECLINED` عندما يؤدي رفض مسجل إلى إنهاء
                الجلسة، وخلاف ذلك `null`.
            face_data_deleted_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                وقت حذف صور وجه الجلسة ومقاطع الفيديو وقوالب الوجه الخاصة بها
                بسبب الرفض. تكون القيمة `null` ما لم يتم تسجيل رفض.
        investigator:
          $ref: '#/components/schemas/InvestigatorBlock'
        biometric_retention:
          $ref: '#/components/schemas/BiometricRetention'
        fraud_check:
          type: object
          nullable: true
          additionalProperties: true
          description: نتيجة استدعاء Fraud Check API. تكون `null` لجميع الجلسات الأخرى.
        full_session_video:
          type: string
          format: uri
          nullable: true
          description: >-
            رابط URL قابل لانتهاء الصلاحية لتسجيل الجلسة الكاملة. يُعاد فقط
            عندما تقوم مؤسستك بتسجيل فيديو الجلسة الكاملة.
        full_session_video_recorded_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            وقت إجراء تسجيل الجلسة الكاملة. يُعاد فقط عندما تقوم مؤسستك بتسجيل
            فيديو الجلسة الكاملة.
    AddressValidationResult:
      type: object
      description: >-
        نتيجة عملية تحقق واحدة من العنوان: ما إذا كان العنوان موجوداً، وشكله
        المعياري. يؤكد العنوان فقط؛ ولا يربط العنوان بشخص على الإطلاق.
      required:
        - status
        - verification_level
        - address
        - formatted_address
        - latitude
        - longitude
      properties:
        status:
          type: string
          enum:
            - verified
            - partially_verified
            - not_verified
            - unavailable
          description: >-
            `verified`: تم تأكيد العنوان وصولاً إلى المبنى (أو الشقة أو صندوق
            البريد). `partially_verified`: تم تأكيده فقط حتى مستوى الشارع، أو
            إلى المستوى الأكثر دقة الذي تحتفظ به البيانات المرجعية البريدية لذلك
            المكان. `not_verified`: تطابقت المنطقة أو المدينة فقط، أو لم يتطابق
            أي شيء. `unavailable`: تعذر تشغيل التحقق (على سبيل المثال لم تستجب
            الخدمة المرجعية)؛ لا يتم احتساب أي رسوم عليه ولا يؤثر أبداً على
            عملية التحقق.
        verification_level:
          type: string
          nullable: true
          enum:
            - administrative_area
            - locality
            - thoroughfare
            - premise
            - delivery_point
            - null
          description: >-
            المستوى الأكثر دقة الذي طابقه العنوان. يكون `null` عندما لا يتطابق
            أي شيء أو عندما تكون `status` هي `unavailable`.
        address:
          type: object
          nullable: true
          description: العنوان الموحّد. يكون `null` عندما تكون `status` هي `unavailable`.
          properties:
            address_line_1:
              type: string
              nullable: true
              description: سطر التسليم الأول، مكتوباً بالطريقة التي تكتبها الدولة.
              example: 1600 Amphitheatre Pkwy
            address_line_2:
              type: string
              nullable: true
              description: سطر التسليم الثاني (شقة أو مبنى أو حي)، عندما يتضمن العنوان ذلك.
            city:
              type: string
              nullable: true
              example: Mountain View
            region:
              type: string
              nullable: true
              description: الولاية أو المقاطعة أو المنطقة.
              example: CA
            postal_code:
              type: string
              nullable: true
              example: 94043-1351
            country:
              type: string
              nullable: true
              description: رمز الدولة وفقاً لـ ISO 3166-1 alpha-2.
              example: US
        formatted_address:
          type: string
          nullable: true
          description: العنوان الموحّد في سطر واحد.
          example: 1600 Amphitheatre Pkwy, Mountain View CA 94043-1351
        latitude:
          type: number
          nullable: true
          example: 37.422022
        longitude:
          type: number
          nullable: true
          example: -122.08429
    PhoneIntelligence:
      type: object
      description: >-
        كتلة معلومات الهاتف المعيارية. تظهر فقط عند تشغيل الوظيفة الإضافية
        للمعلومات لعملية البحث هذه؛ وعند ظهورها يتم عرضها أيضاً تحت الاسم
        المستعار `enrichment` بنفس القيم.
      properties:
        score:
          type: number
          nullable: true
          description: درجة مخاطر معيارية من 0 إلى 100. تشير القيمة الأعلى إلى مخاطر أكبر.
        phone_type_risk:
          type: string
          nullable: true
          description: '`Low` أو `Medium` أو `High`، مشتقة من الدرجة.'
        phone_trust_index:
          type: number
          nullable: true
          description: >-
            معكوس الدرجة، للوحات التحكم التي تفضل أن تكون القيمة الأعلى هي
            الأفضل.
        network_stability_index:
          type: number
          nullable: true
          description: استقرار شبكة الخط.
        is_disposable:
          type: boolean
          nullable: true
          description: >-
            تكون `true` عندما يبدو الرقم مخصصاً للاستخدام لمرة واحدة أو
            افتراضياً.
        is_ported:
          type: boolean
          nullable: true
          description: تكون `true` عندما يكون الرقم قد غيّر مشغّل شبكة الجوال.
        is_recently_ported:
          type: boolean
          nullable: true
          description: تكون `true` عندما تكون عملية نقل الرقم قد تمت مؤخراً.
        carrier_type:
          type: string
          nullable: true
          description: تصنيف الخط الوارد من البحث (مثل `mobile`).
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  معرّف Didit الثابت للإشارة، على سبيل المثال `IR-5AC67A32`. غير
                  قابل للتفسير: قم بالتجميع والتصفية بناءً عليه، ولا تقم بتحليله
                  برمجياً.
              value:
                nullable: true
                description: >-
                  لعلامة المخاطر (على سبيل المثال `voip`، `leaked`،
                  `disposable`، `spam_trap`)، قيمتها: قيمة منطقية أو مستوى أو
                  تاريخ. Null لرمز سبب تم احتساب درجاته.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  ما إذا كانت الإشارة قد رفعت مستوى المخاطر أو زادت من درجة
                  الثقة.
              message:
                type: string
                description: تفسير سهل القراءة للإشارة، باللغة الإنجليزية.
              impact_level:
                type: string
                nullable: true
                description: >-
                  مدى تأثير الإشارة في تغيير الدرجة، على سبيل المثال `low` أو
                  `medium` أو `high`.
          description: >-
            الإشارات التي تفسر الدرجة، لكل منها رمز Didit ثابت، واتجاه، ورسالة،
            ومستوى تأثير. يمكن أن تظهر رموز جديدة بمرور الوقت، لذا لا ترفض
            الرموز غير المعروفة.
    PhoneSocialFootprint:
      type: object
      nullable: true
      description: >-
        البصمة الاجتماعية لرقم الهاتف: المنصات الإلكترونية المسجل عليها. تظهر
        فقط عند تعيين `enable_social` واكتمال الفحص. قد يكون كل عدد null عندما
        لا يتم إرجاع أي بيانات له. تعني `profiles_registered: 0` أنه تم فحص
        المنصات ولم يتم العثور على رقم الهاتف في أي منها - وهي إجابة صالحة
        وخاضعة للفوترة وإشارة شائعة للهوية الاصطناعية.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: المنصات التي تم تأكيد تسجيل رقم الهاتف فيها.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: المنصات التي تم تقييمها للتسجيل.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت اسماً مرتبطاً.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت صورة للملف الشخصي.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: منصات التواصل التي تم اكتشاف وجود المستخدم فيها.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: فئات منصات مميزة مع تواجد تم اكتشافه.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: مؤشر النضج الرقمي المركب، من 0 إلى 10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: مؤشر ثراء الملف التعريفي، من 0 إلى 10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: مزيج المنصات المجانية مقابل المدفوعة، من 0 إلى 10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المدفوعة بالكامل.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية جزئيًا.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            مدى اكتمال الملف التعريفي على WhatsApp. للهاتف فقط؛ وتكون القيمة
            فارغة (null) للبريد الإلكتروني.
          example: Partial
        registered_platforms:
          type: array
          description: المنصات التي تم تأكيد التسجيل فيها.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: المنصات التي تم فحصها وكانت النتيجة سلبية.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: عدد التسجيلات ونسبتها حسب فئة المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            تفاصيل الملف التعريفي لكل منصة، مفهرسة بحسب المنصة، عندما توفرها
            المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    EmailIntelligence:
      type: object
      description: >-
        كتلة معلومات البريد الإلكتروني المعيارية. تظهر فقط عند تشغيل الوظيفة
        الإضافية للمعلومات لهذا البريد الإلكتروني؛ وعند ظهورها يتم عرضها أيضاً
        بالاسم المستعار `enrichment` بنفس القيم.
      properties:
        score:
          type: number
          nullable: true
          description: درجة مخاطر معيارية من 0 إلى 100. تشير القيمة الأعلى إلى مخاطر أكبر.
        deliverable:
          type: string
          nullable: true
          description: نطاق قابلية التسليم (مثل `high`).
        breach_risk_level:
          type: string
          nullable: true
          description: '`Low` أو `Medium` أو `High`.'
        breach_risk_index:
          type: number
          nullable: true
          description: مؤشر رقمي لمخاطر الاختراق.
        is_recent_breach:
          type: boolean
          nullable: true
          description: تكون القيمة `true` عندما يظهر العنوان في اختراق أمني حديث.
        is_frequent_breached:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة `true` عندما يظهر العنوان في العديد من الاختراقات
            الأمنية.
        is_disposable:
          type: boolean
          nullable: true
          description: تكون `true` عندما يكون النطاق مزود بريد للاستخدام مرة واحدة.
        is_free_domain:
          type: boolean
          nullable: true
          description: تكون `true` عندما يكون النطاق مزود بريد إلكتروني مجاني.
        is_breached:
          type: boolean
          nullable: true
          description: تكون القيمة `true` عندما يظهر العنوان في اختراقات أمنية معروفة.
        no_of_breaches:
          type: number
          nullable: true
          description: عدد الاختراقات المعروفة التي تحتوي على العنوان.
        reason_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                description: >-
                  معرّف Didit الثابت للإشارة، على سبيل المثال `IR-5AC67A32`. غير
                  قابل للتفسير: قم بالتجميع والتصفية بناءً عليه، ولا تقم بتحليله
                  برمجياً.
              value:
                nullable: true
                description: >-
                  لعلامة المخاطر (على سبيل المثال `voip`، `leaked`،
                  `disposable`، `spam_trap`)، قيمتها: قيمة منطقية أو مستوى أو
                  تاريخ. Null لرمز سبب تم احتساب درجاته.
              direction:
                type: string
                enum:
                  - risk
                  - trust
                description: >-
                  ما إذا كانت الإشارة قد رفعت مستوى المخاطر أو زادت من درجة
                  الثقة.
              message:
                type: string
                description: تفسير سهل القراءة للإشارة، باللغة الإنجليزية.
              impact_level:
                type: string
                nullable: true
                description: >-
                  مدى تأثير الإشارة في تغيير الدرجة، على سبيل المثال `low` أو
                  `medium` أو `high`.
          description: >-
            الإشارات التي تفسر الدرجة، لكل منها رمز Didit ثابت، واتجاه، ورسالة،
            ومستوى تأثير. يمكن أن تظهر رموز جديدة بمرور الوقت، لذا لا ترفض
            الرموز غير المعروفة.
    EmailSocialFootprint:
      type: object
      nullable: true
      description: >-
        البصمة الاجتماعية لعنوان البريد الإلكتروني: المنصات الإلكترونية المسجل
        عليها. تظهر فقط عند تعيين `enable_social` واكتمال الفحص. قد يكون كل عدد
        null عندما لا يتم إرجاع أي بيانات له. تعني `profiles_registered: 0` أنه
        تم فحص المنصات ولم يتم العثور على عنوان البريد الإلكتروني في أي منها -
        وهي إجابة صالحة وخاضعة للفوترة وإشارة شائعة للهوية الاصطناعية.
      properties:
        profiles_registered:
          type: integer
          nullable: true
          description: المنصات التي تم تأكيد تسجيل عنوان البريد الإلكتروني فيها.
          example: 5
        profiles_checked:
          type: integer
          nullable: true
          description: المنصات التي تم تقييمها للتسجيل.
          example: 14
        names_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت اسماً مرتبطاً.
          example: 0
        photos_found:
          type: integer
          nullable: true
          description: المنصات التي أرجعت صورة للملف الشخصي.
          example: 0
        communication_breadth:
          type: integer
          nullable: true
          description: منصات التواصل التي تم اكتشاف وجود المستخدم فيها.
          example: 2
        digital_footprint_diversity:
          type: integer
          nullable: true
          description: فئات منصات مميزة مع تواجد تم اكتشافه.
          example: 5
        digital_sophistication_index:
          type: integer
          nullable: true
          description: مؤشر النضج الرقمي المركب، من 0 إلى 10.
          example: 5
        engagement_depth_index:
          type: integer
          nullable: true
          description: مؤشر ثراء الملف التعريفي، من 0 إلى 10.
          example: 3
        subscription_affordability_index:
          type: integer
          nullable: true
          description: مزيج المنصات المجانية مقابل المدفوعة، من 0 إلى 10.
          example: 2
        free_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية.
          example: 4
        full_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المدفوعة بالكامل.
          example: 0
        partial_paid_platforms:
          type: integer
          nullable: true
          description: التسجيلات على المنصات المجانية جزئيًا.
          example: 1
        whatsapp_profile_completeness:
          type: string
          nullable: true
          enum:
            - Basic
            - Partial
            - Complete
            - Not Present
            - null
          description: >-
            مدى اكتمال الملف التعريفي على WhatsApp. للهاتف فقط؛ وتكون القيمة
            فارغة (null) للبريد الإلكتروني.
          example: Partial
        registered_platforms:
          type: array
          description: المنصات التي تم تأكيد التسجيل فيها.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        not_registered_platforms:
          type: array
          description: المنصات التي تم فحصها وكانت النتيجة سلبية.
          items:
            $ref: '#/components/schemas/SocialFootprintPlatform'
        categories:
          type: object
          description: عدد التسجيلات ونسبتها حسب فئة المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintCategorySummary'
        profiles:
          type: object
          description: >-
            تفاصيل الملف التعريفي لكل منصة، مفهرسة بحسب المنصة، عندما توفرها
            المنصة.
          additionalProperties:
            $ref: '#/components/schemas/SocialFootprintProfile'
    DocumentAIDetectedCode:
      type: object
      required:
        - type
        - page_number
        - position
        - x
        - 'y'
        - width
        - height
        - page_width
        - page_height
        - raw_payload
        - parsed_payload
      properties:
        type:
          type: string
          description: >-
            الترميز المكتشف، على سبيل المثال `QR_CODE`، أو `CODE_128`، أو
            `EAN_13`، أو `DATA_MATRIX`، أو `PDF_417`.
        page_number:
          type: integer
          minimum: 1
          description: رقم الصفحة (بدءاً من 1).
        position:
          type: array
          nullable: true
          description: >-
            المضلع المكتشف بإحداثيات البكسل للصفحة المعروضة. يكون `null` عند عدم
            توفر موقع موثوق.
          items:
            type: array
            minItems: 2
            maxItems: 2
            items:
              type: integer
        x:
          type: integer
          nullable: true
          description: الحافة اليسرى للمربع المحيط بوحدات البكسل في الصفحة المعروضة.
        'y':
          type: integer
          nullable: true
          description: الحافة العلوية لمربع الإحاطة بوحدات البكسل الخاصة بالصفحة المعروضة.
        width:
          type: integer
          nullable: true
          description: عرض المربع المحيط ببكسلات الصفحة المعروضة.
        height:
          type: integer
          nullable: true
          description: ارتفاع المربع المحيط ببكسلات الصفحة المعروضة.
        page_width:
          type: integer
          description: عرض الصفحة المعروضة بالبكسل.
        page_height:
          type: integer
          description: ارتفاع الصفحة المعروضة بالبكسل.
        raw_payload:
          type: string
          description: >-
            payload الخام الخاص بأداة فك الترميز في شكل سلسلة base64 عند توفره؛
            وإلا فسيكون سلسلة فارغة.
        parsed_payload:
          nullable: true
          description: >-
            سلسلة نصية مفكوكة الترميز أو قيمة مهيكلة. `null` عندما تم تحديد موقع
            الرمز ولكن تعذر فك ترميزه.
    BankVerificationResult:
      type: object
      description: >-
        نتيجة خطوة واحدة للتحقق من الحساب البنكي، لكل من التحقق من المستخدمين
        والتحقق من الشركات (KYB). يوضح `method` كيفية التحقق من الحساب، بينما
        يشير `none` إلى أن الشخص تابع دون بنك قبل تقييم أي محاولة. يشير
        `continued_without_bank` إلى أن الشخص تابع دون بنك، أيضاً بعد محاولة تم
        تقييمها. راجع [طرق التحقق من الحساب
        البنكي](/ar/core-technology/bank-verification/verification-methods)
        و[عندما يتعذر على الشخص التحقق من حسابه
        البنكي](/ar/core-technology/bank-verification/fallbacks).
      properties:
        schema_version:
          type: integer
          description: إصدار هيكل النتيجة هذا. `1` حالياً.
        bank_verification_id:
          type: string
          format: uuid
          description: معرّف هذه النتيجة.
        node_id:
          type: string
          description: عقدة سير العمل التي تنتمي إليها هذه النتيجة.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Expired
          description: القرار النهائي للخطوة، بعد إجراءاتها وقواعد حالتها.
        original_status:
          type: string
          nullable: true
          description: >-
            الحكم الأول الذي توصلت إليه الخطوة، قبل أي تغيير لاحق مثل مراجعة
            يدوية.
        method:
          type: string
          nullable: true
          enum:
            - open_banking
            - account_lookup
            - microdeposits
            - statement
            - none
          description: >-
            كيفية التحقق من الحساب: `open_banking` (تسجيل الدخول البنكي: قام
            الشخص بتسجيل الدخول في بنكه)، أو `account_lookup` (التحقق من الحساب:
            قام الشخص بكتابة تفاصيل الحساب وأكد البنك الاسم)، أو `microdeposits`
            أو `statement` (رفع كشف الحساب). تكون `none` عندما يتابع الشخص بدون
            بنك قبل تقييم أي محاولة، وبالتالي لم يتم التحقق من أي حساب. بعد
            المحاولة الخاضعة للتقييم، تظل الطريقة المستخدمة في تلك المحاولة.
            وتكون `null` حتى يتم تقييم الحساب، وعندما يقلص سير العمل البيانات
            التي يرجعها. تقرأ قواعد سير العمل نفس القيمة كـ `bank.method`.
        provider:
          type: string
          nullable: true
          description: >-
            مفتاح المسار الذي أجرى الاتصال. اقرأ `method`، وليس هذا المفتاح،
            لمعرفة كيفية التحقق من الحساب.
        credential_source:
          type: string
          nullable: true
          enum:
            - native
            - byok
          description: >-
            `native`: المسار الخاص بـ Didit، ويتم فوترته على رصيد Didit الخاص
            بك. `byok`: مزود من السوق قمت بربطه باستخدام بيانات الاعتماد الخاصة
            بك.
        route:
          type: object
          nullable: true
          description: المسار الذي تم اختياره قبل الموافقة. لا يتغير بعد ذلك مطلقاً.
          properties:
            provider_key:
              type: string
              nullable: true
              description: مفتاح المسار.
            credential_source:
              type: string
              enum:
                - native
                - byok
            is_fallback:
              type: boolean
              description: >-
                ما إذا كان مسار Didit الخاص قد حلّ محلّ مزوّد سوق تعذّر عليه
                الاتصال.
            provider_connection_id:
              type: string
              nullable: true
              description: اتصال السوق المستخدم، لـ `byok`.
            requested_scopes:
              type: array
              items:
                type: string
              description: >-
                البيانات التي طلبها الاتصال، على سبيل المثال `ownership` أو
                `balances`.
        connection:
          type: object
          nullable: true
          description: اتصال المحاولة الأخيرة. تكون القيمة `null` قبل المحاولة الأولى.
          properties:
            status:
              type: string
              enum:
                - pending
                - connected
                - cancelled
                - timeout
                - failed
                - unsupported
                - revoked
                - expired
            institution_id:
              type: string
              nullable: true
              description: >-
                معرّف البنك. يكون `null` لفحص الحساب، عندما لا يتم اختيار أي
                بنك.
            institution_name:
              type: string
              nullable: true
              description: اسم البنك. يكون `null` لفحص الحساب.
            institution_country:
              type: string
              nullable: true
              description: دولة الحساب، بصيغة ISO 3166-1 alpha-3.
            oauth:
              type: boolean
              nullable: true
              description: >-
                ما إذا كان تسجيل الدخول المصرفي قد تم عبر OAuth أو من تطبيق إلى
                تطبيق. وتكون `null` لفحص الحساب.
            connected_at:
              type: string
              format: date-time
              nullable: true
              description: وقت نجاح الاتصال.
            consent_expires_at:
              type: string
              format: date-time
              nullable: true
              description: وقت انتهاء موافقة البنك، بالنسبة لتسجيل الدخول عبر البنك.
            last_refreshed_at:
              type: string
              format: date-time
              nullable: true
              description: وقت آخر إعادة قراءة للبيانات المالية.
            attempts:
              type: integer
              description: >-
                المحاولات التي أجراها الشخص في هذه الخطوة، مجمعةً لكافة الطرق
                معاً.
            reason_code:
              type: string
              nullable: true
              description: >-
                سبب عدم كون الاتصال في حالة `connected` ببساطة، على سبيل المثال
                `USER_CANCELLED` أو `INSTITUTION_DOWN` أو `ACCOUNT_NOT_FOUND` أو
                `REFERENCE_IDENTITY_MISSING` أو `VERIFICATION_COMPLETED`.
        account:
          type: object
          nullable: true
          description: الحساب الخاضع للتقييم. يكون `null` حتى يتم تقييم الحساب.
          properties:
            account_id_masked:
              type: string
              nullable: true
              description: رقم الحساب، محجوباً.
            iban_masked:
              type: string
              nullable: true
              description: رقم IBAN، مقنّع.
            sort_code:
              type: string
              nullable: true
              description: رمز الفرز، في المملكة المتحدة.
            routing_number_masked:
              type: string
              nullable: true
              description: رقم التوجيه، محجوب.
            type:
              type: string
              nullable: true
              enum:
                - checking
                - current
                - savings
                - business
                - other
            subtype:
              type: string
              nullable: true
              description: النوع الفرعي للحساب لدى البنك نفسه.
            currency:
              type: string
              nullable: true
              description: عملة الحساب حسب معيار ISO 4217.
            holder_type:
              type: string
              nullable: true
              enum:
                - person
                - business
                - unknown
            holders_count:
              type: integer
              nullable: true
            is_joint:
              type: boolean
              nullable: true
            is_business:
              type: boolean
              nullable: true
        ownership:
          type: object
          nullable: true
          description: >-
            كيفية مقارنة صاحب الحساب بالهوية التي تم التحقق منها. تكون `null`
            حتى يتم تقييم الحساب.
          properties:
            result:
              type: string
              enum:
                - match
                - partial_match
                - no_match
                - unknown
                - not_verifiable
              description: >-
                `partial_match` هو تطابق قريب. `not_verifiable`: ردّ البنك دون
                وجود صاحب حساب للمقارنة. `unknown`: تعذرت قراءة الإثبات، أو لم
                تكن هناك هوية للمقارنة.
            reference_identity_source:
              type: string
              nullable: true
              description: >-
                الخطوة التي تمت مقارنة هوية الحامل معها: `kyc`، أو
                `database_validation`، أو `expected_details`، أو
                `questionnaire`، أو `document_ai`، أو `kyb`.
            name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: درجة Didit لاسم حامل الحساب.
            provider_name_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: درجة اسم صاحب الحساب الخاصة بالبنك، في حال إرجاعها.
            address_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: درجة عنوان حامل الحساب، عند تشغيل مطابقة العنوان.
            email_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: >-
                درجة البريد الإلكتروني لحامل الحساب، عند تشغيل مطابقة البريد
                الإلكتروني.
            phone_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: درجة هاتف حامل الحساب، عند تشغيل مطابقة الهاتف.
            dob_score:
              type: integer
              minimum: 0
              maximum: 100
              nullable: true
              description: درجة تاريخ ميلاد حامل الحساب، عندما يشارك البنك تاريخ الميلاد.
            close_match:
              type: boolean
              nullable: true
              description: ما إذا كان الاسم يقع ضمن نطاق التطابق التقريبي.
            holder_confirmation:
              type: string
              nullable: true
              enum:
                - pending
                - confirmed
                - rejected
              description: >-
                إجابة الشخص عند مطالبته بتأكيد اسم متطابق جزئياً. تكون `null`
                إذا لم يُسأل مطلقاً.
            method:
              type: string
              nullable: true
              enum:
                - exact
                - token_set
                - nickname
                - transliteration
                - fuzzy
                - provider_only
                - microdeposits
              description: >-
                أي مقارنة للأسماء أنتجت الدرجة. هذه ليست طريقة التحقق: اقرأ
                `method` من المستوى الأعلى لمعرفة ذلك.
            matched_holder_index:
              type: integer
              nullable: true
            holders:
              type: array
              items:
                type: object
              description: كل صاحب حساب أدرجه البنك، مع درجاته.
            owner_identity_available:
              type: boolean
              nullable: true
            evidence_freshness:
              type: string
              nullable: true
              enum:
                - live
                - cached
                - refreshed
            evaluated_at:
              type: string
              format: date-time
              nullable: true
              description: وقت احتساب القرار.
        financial_data:
          type: object
          description: البيانات المالية التي قرأتها الخطوة. يقرأها تسجيل الدخول البنكي فقط.
          properties:
            balances:
              type: object
              nullable: true
              description: مع النطاق `balances`.
            transactions:
              type: object
              nullable: true
              description: مع النطاق `transactions`.
            income:
              type: object
              nullable: true
              description: مع النطاق `income`.
            categorization:
              type: object
              nullable: true
              description: تصنيف Didit للمعاملات المقروءة. `null` في حال عدم وجودها.
            not_collected:
              type: array
              items:
                type: string
                enum:
                  - balances
                  - income
                  - transactions
              description: >-
                البيانات التي طلبتها الخطوة والتي لا تجمعها الطريقة التي تحققت
                من الحساب. تأتي الأرصدة والمعاملات والدخل من تسجيل الدخول
                المصرفي فقط، لذلك يسردها هنا الحساب الذي تم التحقق منه عبر فحص
                الحساب. لا يُعد ذلك فشلًا أبدًا. ويكون فارغًا بخلاف ذلك.
        billing:
          type: object
          nullable: true
          properties:
            route:
              type: string
              enum:
                - native
                - byok
            billed:
              type: boolean
            marketplace_fee:
              type: string
              nullable: true
              description: رسوم منصة السوق المفروضة، لـ `byok`.
            usage_type:
              type: string
              nullable: true
              description: >-
                بند الاستخدام الذي تم قيد الرسوم عليه: `bank_verification`
                لتسجيل الدخول البنكي أو فحص الحساب، و`bank_statement_upload`
                لرفع كشف الحساب دون أي محاولة بنكية مدفوعة قبله،
                و`bank_byok_fee` لرسوم السوق على مزود الخدمة الخاص بك. تكون
                `null` عندما لا يتم احتساب أي رسوم.
        reference_identity:
          type: object
          nullable: true
          description: الهوية التي تمت مقارنة الحامل بها، مع مصدرها.
        signals:
          type: object
          nullable: true
          description: إشارات الحساب المقروءة من سجل المعاملات، عندما تقرأ الخطوة أحدها.
        connection_abandoned:
          type: boolean
          nullable: true
          description: ما إذا كانت الخطوة قد انتهت دون تطابق بعد أن غادر الشخص عند بنكه.
        not_covered:
          type: boolean
          nullable: true
          description: >-
            ما إذا كان تعذر الوصول إلى بنك الشخص أو دولته في هذه الخطوة. وتكون
            أيضاً `true` عندما يتابع الشخص دون بنك لعدم توفر طريقة يمكنها التحقق
            من دولته أو بنكه.
        continued_without_bank:
          type: boolean
          description: >-
            ما إذا كان الشخص قد غادر الخطوة عبر **Continue without your bank**.
            يشير `continuation` حينها إلى السبب. تكون قيمة `method` هي `none`
            عند عدم تقييم أي محاولة قبل أن يتابع. بعد إجراء محاولة خضعت للتقييم،
            مثل عدم تطابق صاحب الحساب، تظل قيمة `method` هي طريقة تلك المحاولة
            وتظل نتيجة المحاولة ورموز أسبابها قائمة. يتم إرجاعها حتى لو قلص سير
            العمل البيانات التي يعيدها.
        continuation:
          type: object
          nullable: true
          description: >-
            كيفية متابعة الشخص بدون بنك. تكون `null` عندما لا يتابع بذلك. عندما
            يقلص سير العمل البيانات التي يرجعها، يظل حقل `reason` يُرجع بينما
            تكون كافة المفاتيح الأخرى `null`.
          properties:
            reason:
              type: string
              enum:
                - no_route
                - institution_unsupported
                - attempts_exhausted
                - person_choice
              description: >-
                السبب، وفقاً لما حدده Didit عندما تابع الشخص: `no_route` (لا
                يوجد تسجيل دخول بنكي أو فحص للحساب يدعم دولته)، أو
                `institution_unsupported` (البنك الذي اختاره لا يمكن استخدامه في
                هذه الخطوة)، أو `attempts_exhausted` (استُنفدت جميع المحاولات
                ولم تكن أي منها قيد التنفيذ)، أو `person_choice` (كانت هناك
                طريقة للتحقق واختار المتابعة، وينطبق ذلك أيضاً عندما يتعذر
                الوصول إلى بنكه حالياً). يتبع `no_route`
                و`institution_unsupported` الإجراء `bank_unsupported_action`،
                ويتبع `attempts_exhausted` الإجراء
                `bank_attempts_exhausted_action`، بينما يتبع `person_choice`
                الإجراء `bank_skipped_action`، ما لم تكن هناك محاولة تم تقييمها
                قد حسمت الخطوة بالفعل.
            country:
              type: string
              nullable: true
              description: >-
                الدولة التي كان الشخص يجري التحقق فيها، وفق ISO 3166-1 alpha-3.
                تكون القيمة `null` إذا واصل قبل اختيار دولة.
            offered:
              type: array
              items:
                type: string
                enum:
                  - statement
                  - microdeposits
              nullable: true
              description: >-
                الطرق الأخرى للتحقق التي قدمتها تلك الدولة للشخص عند متابعته،
                بالترتيب الذي عُرضت به: `statement` (تحميل كشف حساب)، ثم
                `microdeposits`. تكون فارغة في حال لم تقدم أي طريقة.
            institution_id:
              type: string
              nullable: true
              description: >-
                بالنسبة لـ `institution_unsupported`، معرف البنك الذي لم يتمكن
                الشخص من استخدامه: البنك الذي اختاره، أو البنك الذي انتهت عنده
                محاولته الأخيرة. تأخذه Didit من قائمتها الخاصة بالبنوك، ولا
                تأخذه أبداً من جهاز الشخص، وبالتالي فإن البنك الذي لا تحتويه تلك
                القائمة يكون `null`. ويكون `null` لكل سبب آخر.
            institution_name:
              type: string
              nullable: true
              description: >-
                بالنسبة لـ `institution_unsupported`، اسم ذلك البنك، من نفس
                القائمة مثل `institution_id`. ويكون `null` عندما لا تحتوي تلك
                القائمة على البنك، ولكل سبب آخر.
            continued_at:
              type: string
              format: date-time
              nullable: true
              description: متى تابع الشخص.
        evidence_purged_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            وقت حذف الإثبات البنكي بموجب `bank_evidence_retention_days`. وتكون
            القيمة `null` بخلاف ذلك.
        warnings:
          type: array
          items:
            type: string
          description: >-
            رموز معلوماتية، على سبيل المثال `holder_declared`. لا يغيّر التحذير
            الحالة بمفرده أبداً.
        reason_codes:
          type: array
          items:
            type: string
          description: >-
            سبب صدور القرار بالشكل الذي ظهر به، على سبيل المثال
            `OWNER_NAME_PARTIAL`. قد ينطبق أكثر من سبب. `NOT_COVERED`: واصل
            الشخص دون بنك لعدم وجود طريقة يمكنها التحقق من دولته أو بنكه.
            `SKIPPED`: اختار الشخص المتابعة دون بنك رغم توفر طريقة للتحقق. لا
            تتم إضافة أي منهما إذا كانت هناك محاولة تم تقييمها قد حسمت الخطوة
            بالفعل.
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    SignatureResult:
      type: object
      description: >-
        نتيجة موقّع واحد لخطوة واحدة من التوقيع الإلكتروني. راجع [تقرير التوقيع
        الإلكتروني](/ar/core-technology/electronic-signature/report-electronic-signature).
      properties:
        id:
          type: string
          format: uuid
          description: مرّره كـ `signature_id` لتنزيل أدلة هذا الموقّع أو التحقق من توقيعه.
        node_id:
          type: string
          description: خطوة سير العمل التي أنتجتها.
        status:
          type: string
          enum:
            - intro
            - review
            - code
            - signing
            - signed
            - declined
          description: >-
            موضع الموقّع ضمن الخطوة. القيمة `signed` فقط هي التي تعني أن
            المستندات قد تم توقيعها.
        verdict:
          type: string
          enum:
            - Not Finished
            - Approved
            - In Review
            - Declined
          description: >-
            نتيجة الخطوة. يُعيّنها التحذير من خلال قاعدته؛ وتُطبّق قواعد الحالة
            المخصصة بعد ذلك.
        level:
          type: string
          enum:
            - simple
            - aes
            - qes
          description: >-
            `simple` (افتراضي) أو `aes`. التوقيع `qes` (التوقيع الإلكتروني
            المؤهل، QES) هو إضافة غير متوفرة بعد.
        format:
          type: string
          enum:
            - pdf
            - pades
          description: '`pdf` للتوقيع من النوع Simple، و`pades` للنوع Advanced (AES).'
        profile:
          type: string
          nullable: true
          description: '`PAdES-B-LT` بمجرد إتمام توقيع متقدم (AES)، وخلاف ذلك null.'
        signer:
          type: object
          properties:
            name:
              type: string
              nullable: true
              description: >-
                اسم الموقّع. يتم التحقق منه (من التحقق من الهوية المقبول أو
                الجلسة) باستثناء المستوى Simple دون اسم جلسة تم التحقق منه، حيث
                يكون الاسم هو ما كتبه الموقّع ولا يتم التحقق منه.
            capacity:
              type: string
              enum:
                - self
                - company
            company:
              type: string
              nullable: true
            role:
              type: string
              nullable: true
              description: المسمى الوظيفي للشخص الرئيسي، كما تم التصريح به.
            roles:
              type: array
              items:
                type: string
              description: الأدوار المنظمة للشخص الرئيسي، كما تم التصريح بها للشركة.
            identity_session_id:
              type: string
              format: uuid
              description: جلسة KYC التي تحققت من الموقّع.
        identity_used:
          type: object
          description: >-
            الهوية التي تم التحقق منها والتي يعتمد عليها التوقيع. فارغة بالنسبة
            للتوقيع البسيط (Simple) بدون هوية تم التحقق منها.
          properties:
            session_id:
              type: string
              format: uuid
            kyc_id:
              type: string
              format: uuid
              nullable: true
            verified:
              type: boolean
            expected_name:
              type: string
              nullable: true
              description: الاسم الذي كان على الموقّع مطابقته.
        certificate:
          type: object
          nullable: true
          description: >-
            الشهادة التي تم توقيع المستندات بها. تكون `null` حتى يتم التوقيع،
            وتكون دائماً `null` للتوقيع البسيط (Simple signature).
          properties:
            issuer:
              type: string
            issued_to:
              type: string
            serial:
              type: string
              description: الرقم التسلسلي، بنظام السداسي عشر.
            valid_from:
              type: string
              format: date-time
            valid_until:
              type: string
              format: date-time
        confirmation:
          type: object
          properties:
            channel:
              type: string
              nullable: true
              enum:
                - email
                - sms
              description: '`null` للتوقيع من النوع Simple، والذي لا يحتوي على رمز.'
            destination:
              type: string
              nullable: true
              description: جهة الاتصال المقنّعة التي أُرسل الرمز إليها.
            confirmed_at:
              type: string
              format: date-time
              nullable: true
            attempts:
              type: integer
              description: الرموز المُدخلة، بما في ذلك الرمز الصحيح.
        timestamp:
          type: object
          nullable: true
          description: >-
            الختم الزمني RFC 3161 في التوقيع، الصادر عن Didit. تكون القيمة
            `null` حتى يتم التوقيع، ودائماً `null` للتوقيع البسيط (Simple).
          properties:
            time:
              type: string
              format: date-time
            qualified:
              type: boolean
              description: دائماً `false` لـ AES.
            valid:
              type: boolean
        documents:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: >-
                  المستند الموجود في نسخة هذا الموقّع. استخدمه لتنزيل الملف
                  الموقّع.
              uuid:
                type: string
                format: uuid
                description: مطابق لـ `id`.
              title:
                type: string
              file_name:
                type: string
              pages:
                type: integer
                description: >-
                  صفحات المستند الموقعة. بالنسبة لـ Word، صفحات ملف PDF
                  المُحوَّل.
              size_bytes:
                type: integer
              sha256_original:
                type: string
                description: تشفير SHA-256 للمستند كما عُرض على الموقّع.
              sha256_signed:
                type: string
                nullable: true
                description: تشفير SHA-256 لملف PDF الموقّع، بمجرد توقيعه.
              status:
                type: string
                enum:
                  - signed
                  - declined
                  - not_signed
                  - not_reached
                description: >-
                  `not_signed`: تم فتحها ولكن لم يتم توقيعها. `not_reached`: لم
                  يتم فتحها أبداً.
              opened_at:
                type: string
                format: date-time
                nullable: true
              read_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  متى وصل الموقّع إلى نهاية مستند بدون حقول، عندما تتطلب الخطوة
                  ذلك.
              read_to_end:
                type: boolean
              consented_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  متى وافق الموقّع على مستند بدون حقول، أو أكمل تعبئة حقول مستند
                  يحتوي على حقول.
              consent:
                type: boolean
              signed_file:
                type: string
                nullable: true
                description: >-
                  مسار ملف PDF الموقّع بمجرد توقيعه. راجع [تنزيل مستند
                  موقّع](/ar/sessions-api/electronic-signature/download-signed-document).
              mode:
                type: string
                enum:
                  - fields
                  - read_and_agree
                description: >-
                  `fields` لمستند يحتوي على حقول، و`read_and_agree` لمستند لا
                  يحتوي عليها.
              source_format:
                type: string
                enum:
                  - pdf
                  - docx
                description: '`pdf`، أو `docx` لمستند Word قامت Didit بتحويله إلى PDF.'
              conversion:
                type: object
                nullable: true
                description: >-
                  `null` لملف PDF. بالنسبة لمستند Word، الملف الأصلي والملف
                  المحوَّل.
                properties:
                  from:
                    type: string
                    enum:
                      - docx
                  file_name:
                    type: string
                    description: اسم ملف Word الأصلي الخاص بك.
                  sha256:
                    type: string
                    description: تشفير SHA-256 لملف Word الأصلي الخاص بك.
                  size_bytes:
                    type: integer
                    description: حجم ملف Word الأصلي الخاص بك.
                  converter:
                    type: string
                    description: إصدار المحوِّل الذي أنتج ملف PDF.
              fields:
                type: array
                description: >-
                  الحقول الموجودة في المستند، مع قيمها. فارغة لأي مستند بدون
                  حقول.
                items:
                  $ref: '#/components/schemas/SignatureFieldResult'
        adopted_signature:
          type: object
          nullable: true
          description: >-
            التوقيع والأحرف الأولى التي اعتمدها الموقّع لحقول التوقيع والأحرف
            الأولى. تكون قيمتهما `null` حتى يعتمد الموقّع أحدهما.
          properties:
            method:
              type: string
              enum:
                - typed
                - drawn
              description: >-
                `typed`: الاسم المتحقق منه بأسلوب خط اليد. `drawn`: مرسوم بإصبع
                أو بفأرة.
            font:
              type: string
              nullable: true
              description: نمط خط اليد للتوقيع المكتوب. `null` عندما يكون مرسوماً.
            adopted_at:
              type: string
              format: date-time
        electronic_signature_consent_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            متى وافق الموقّع، في شاشة المراجعة، على توقيع المستندات إلكترونياً.
            يتم تعيينها عندما يحتوي أي مستند على حقول.
        evidence_file:
          type: string
          nullable: true
          description: >-
            مسار ملف PDF للأدلة، بمجرد توقيعه. راجع [تنزيل أدلة
            التوقيع](/ar/sessions-api/electronic-signature/download-evidence).
        warnings:
          type: array
          description: >-
            التحذيرات الصادرة لهذا الموقّع. راجع [تحذيرات التوقيع
            الإلكتروني](/ar/core-technology/electronic-signature/warnings-electronic-signature).
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - SIGNATURE_DECLINED
                  - SIGNATURE_OTP_FAILED
                  - SIGNATURE_NAME_MISMATCH
                  - SIGNATURE_IDENTITY_NOT_VERIFIED
                  - SIGNATURE_DOCUMENT_CHANGED
                  - SIGNATURE_FIELD_DATA_MISSING
              node_id:
                type: string
        validation:
          type: object
          nullable: true
          description: >-
            آخر فحص تشفيري للمستندات الموقعة. تكون القيمة `null` حتى يتم توقيع
            المستندات. إذا لم تتمكن Didit من تأكيد نتيجة التوقيع، فستكون القيمة
            `{"valid": null, "reason": "signature_provider_outcome_unknown",
            "checked_at": ...}` وتظل `status` بالحالة `signing`: عاملها كأنها
            غير موقعة.
          properties:
            valid:
              type: boolean
              nullable: true
              description: >-
                تكون القيمة `true` عندما تكون جميع المستندات صالحة. وتكون `null`
                عندما يتعذر تأكيد نتيجة التوقيع.
            reason:
              type: string
              description: >-
                يتم تعيينه عندما تكون قيمة `valid` هي `null`:
                `signature_provider_outcome_unknown`.
            checked_at:
              type: string
              format: date-time
            documents:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  checked_at:
                    type: string
                    format: date-time
                  valid:
                    type: boolean
                    description: >-
                      تكون `true` عندما يكون كل من التوقيع والطابع الزمني صالحين
                      وموثوقين.
                  integrity:
                    type: boolean
                    description: تكون `true` عندما يكون المستند غير معدّل منذ التوقيع.
                  trusted:
                    type: boolean
                    description: تكون `true` عندما تتسلسل شهادة التوقيع إلى جذر موثوق.
                  revoked:
                    type: boolean
                  trusted_list:
                    type: object
                    description: >-
                      فحص القائمة الموثوقة للاتحاد الأوروبي (EU Trusted List).
                      بالنسبة لـ AES: `{"status": "not_applicable", "reason":
                      "aes_not_qualified"}`.
                    properties:
                      status:
                        type: string
                      reason:
                        type: string
                  certificate:
                    type: object
                    nullable: true
                    description: >-
                      الشهادة التي تم توقيع المستندات بها. تكون `null` حتى يتم
                      التوقيع، وتكون دائماً `null` للتوقيع البسيط (Simple
                      signature).
                    properties:
                      issuer:
                        type: string
                      issued_to:
                        type: string
                      serial:
                        type: string
                        description: الرقم التسلسلي، بنظام السداسي عشر.
                      valid_from:
                        type: string
                        format: date-time
                      valid_until:
                        type: string
                        format: date-time
                  timestamp:
                    type: object
                    nullable: true
                    description: >-
                      الختم الزمني RFC 3161 في التوقيع، الصادر عن Didit. تكون
                      القيمة `null` حتى يتم التوقيع، ودائماً `null` للتوقيع
                      البسيط (Simple).
                    properties:
                      time:
                        type: string
                        format: date-time
                      qualified:
                        type: boolean
                        description: دائماً `false` لـ AES.
                      valid:
                        type: boolean
        declined_at:
          type: string
          format: date-time
          nullable: true
        declined_action:
          type: string
          enum:
            - DECLINE
            - REVIEW
            - NO_ACTION
        signed_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          description: متى يتوقف رابط التوقيع عن العمل.
        email_sent_at:
          type: string
          format: date-time
          nullable: true
        email_unavailable_reason:
          type: string
          nullable: true
        ip_address:
          type: string
          nullable: true
          description: عنوان IP الخاص بالموقّع عندما طلب رمزه.
        place:
          type: string
          nullable: true
          description: 'لم يتم جمعها: تكون دائماً `null`.'
        place_unavailable_reason:
          type: string
          nullable: true
          enum:
            - not_collected
    AMLScreening:
      type: object
      properties:
        node_id:
          type: string
          description: معرّف فريد لخطوة فحص AML هذه في مخطط سير العمل.
        status:
          type: string
          description: >-
            حالة مستوى الميزة لفحص AML هذا. مستقلة عن `status` الجلسة من المستوى
            الأعلى — يمكن أن تصل الجلسة إلى قرارها العام بينما تظل الميزة
            الفردية `In Review`.
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
        total_hits:
          type: integer
          description: العدد الإجمالي للتطابقات التي تم العثور عليها
        entity_type:
          type: string
          description: 'نوع الكيان المفحوص: شخص أو شركة'
        hits:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: >-
                  معرّف Didit الثابت لنتيجة المطابقة: `hit_` متبوعاً بـ 24 حرفاً
                  سداسياً عشرياً. يحتفظ الكيان المطابق نفسه بنفس `id` عند فحص
                  الشخص المعني مرة أخرى. مرّره كـ `hit_id` إلى endpoints مراجعة
                  نتائج مطابقة AML.
              url:
                type: string
                format: uri
                description: رابط المصدر للمطابقة
              match:
                type: boolean
                description: ما إذا كان هذا تطابقاً مؤكداً
              score:
                type: number
                format: float
                nullable: true
                minimum: 0
                maximum: 1
                description: >-
                  درجة التطابق المرجحة القديمة في النطاق 0-1 (مثل `0.73`).
                  استخدم `match_score` (0-100) بدلاً منها.
                deprecated: true
              target:
                type: boolean
                nullable: true
                description: >-
                  ما إذا كان الكيان المتطابق هو الهدف المباشر للإدراج (على عكس
                  كونه طرفاً ذا صلة). وتكون `null` عندما لا يحدد المصدر ذلك.
              caption:
                type: string
                description: تسمية توضيحية أو عنوان للتطابق
              datasets:
                type: array
                items:
                  type: string
                  enum:
                    - PEP
                    - PEP Level 1
                    - PEP Level 2
                    - PEP Level 3
                    - PEP Level 4
                    - Sanctions
                    - Adverse Media
                    - Warnings and Regulatory Enforcement
                    - Fitness and Probity
                    - SIP
                    - SIE
                    - Insolvency
                    - Other Lists
                description: >-
                  قائمة بفئات مجموعات البيانات التي تم العثور على التطابق فيها.
                  توضح ما إذا كان الكيان قد ظهر في قوائم الأشخاص المعرضين
                  سياسياً PEP (مع تحديد المستوى)، أو قواعد بيانات العقوبات، أو
                  الأخبار السلبية، أو التحذيرات/إنفاذ القوانين التنظيمية، أو
                  مجموعات بيانات الامتثال الأخرى. وتكون `Other Lists` عندما لا
                  يحدد مصدر الكيان أيًا من هذه الفئات.
              features:
                type: object
                nullable: true
                description: سمات إضافية للتطابق
              rca_name:
                type: string
                description: اسم RCA إن وُجد
              last_seen:
                type: string
                format: date-time
                description: تاريخ آخر ظهور للتطابق
              risk_view:
                type: object
                properties:
                  crimes:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  countries:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  categories:
                    type: object
                    properties:
                      score:
                        type: integer
                      weightage:
                        type: integer
                      risk_level:
                        type: string
                      risk_scores:
                        type: object
                  custom_list:
                    type: object
              first_seen:
                type: string
                format: date-time
                description: تاريخ أول ظهور للتطابق
              properties:
                type: object
                properties:
                  name:
                    type: array
                    items:
                      type: string
                  alias:
                    type: array
                    items:
                      type: string
                  notes:
                    type: array
                    items:
                      type: string
                  title:
                    type: string
                    nullable: true
                  gender:
                    type: array
                    items:
                      type: string
                  height:
                    type: string
                    nullable: true
                  topics:
                    type: string
                    nullable: true
                  weight:
                    type: string
                    nullable: true
                  address:
                    type: string
                    nullable: true
                  country:
                    type: string
                    nullable: true
                  website:
                    type: string
                    nullable: true
                  eyeColor:
                    type: string
                    nullable: true
                  keywords:
                    type: string
                    nullable: true
                  lastName:
                    type: array
                    items:
                      type: string
                  position:
                    type: string
                    nullable: true
                  religion:
                    type: string
                    nullable: true
                  birthDate:
                    type: array
                    items:
                      type: string
                  education:
                    type: array
                    items:
                      type: string
                  ethnicity:
                    type: string
                    nullable: true
                  firstName:
                    type: array
                    items:
                      type: string
                  hairColor:
                    type: string
                    nullable: true
                  weakAlias:
                    type: string
                    nullable: true
                  birthPlace:
                    type: array
                    items:
                      type: string
                  modifiedAt:
                    type: string
                    nullable: true
                  wikidataId:
                    type: string
                    nullable: true
                  citizenship:
                    type: string
                    nullable: true
                  nationality:
                    type: string
                    nullable: true
              match_score:
                type: number
                description: >-
                  درجة الثقة الموزونة بالهوية (0-100) المحسوبة من تشابه الأسماء
                  وتاريخ الميلاد وتطابق الدولة. تُستخدم لتحديد ما إذا كان
                  التطابق إيجابياً كاذباً أو تطابقاً محتملاً.
                format: float
                nullable: true
              risk_score:
                type: number
                description: >-
                  درجة مخاطر الكيان (0-100). تُستخدم لتحديد حالة AML النهائية
                  (مقبولة/قيد المراجعة/مرفوضة) بناءً على أعلى risk_score بين
                  التطابقات التي ليست إيجابية كاذبة.
              review_status:
                type: string
                description: >-
                  حالة المراجعة لهذه النتيجة. يمكن أن تكون 'Unreviewed'، أو
                  'Confirmed Match'، أو 'False Positive'، أو 'Inconclusive'.
                enum:
                  - Unreviewed
                  - Confirmed Match
                  - False Positive
                  - Inconclusive
              score_breakdown:
                type: object
                description: تفصيل دقيق لكيفية احتساب match_score.
                properties:
                  name_score:
                    type: integer
                    description: النسبة المئوية الخام لتشابه الأسماء (0-100).
                  name_weight:
                    type: integer
                    description: الوزن الأصلي للاسم من التكوين (0-100).
                  name_weight_normalized:
                    type: number
                    description: >-
                      الوزن المعياري للاسم بعد إعادة الترجيح بسبب البيانات
                      المفقودة (0-100).
                  name_contribution:
                    type: number
                    description: النقاط التي ساهم بها الاسم في النتيجة الإجمالية.
                  dob_score:
                    type: integer
                    description: درجة تطابق تاريخ الميلاد (-100 إلى 100).
                  dob_weight:
                    type: integer
                    description: الوزن الأصلي لتاريخ الميلاد من التكوين (0-100).
                  dob_weight_normalized:
                    type: number
                    description: >-
                      الوزن المعياري لتاريخ الميلاد بعد إعادة الترجيح بسبب
                      البيانات المفقودة (0-100).
                  dob_contribution:
                    type: number
                    description: النقاط التي ساهم بها تاريخ الميلاد في النتيجة الإجمالية.
                  country_score:
                    type: integer
                    description: درجة تطابق الدولة (-100 إلى 100).
                  country_weight:
                    type: integer
                    description: الوزن الأصلي للدولة من التكوين (0-100).
                  country_weight_normalized:
                    type: number
                    description: >-
                      الوزن المعياري للدولة بعد إعادة الترجيح بسبب البيانات
                      المفقودة (0-100).
                  country_contribution:
                    type: number
                    description: النقاط التي ساهمت بها الدولة في النتيجة الإجمالية.
                  document_number_match_type:
                    type: string
                    description: نتيجة تقييم "Golden Key" لرقم المستند.
                    enum:
                      - MATCH
                      - NEUTRAL
                      - HARD_MISMATCH
                  document_number_effect:
                    type: string
                    description: وصف سهل القراءة لتأثير رقم المستند على النتيجة.
                  total_score:
                    type: integer
                    description: درجة التطابق المرجحة النهائية (0-100).
              pep_matches:
                type: array
                items:
                  type: object
                  properties:
                    aliases:
                      type: array
                      items:
                        type: string
                    education:
                      type: array
                      items:
                        type: string
                    list_name:
                      type: string
                    publisher:
                      type: string
                    source_url:
                      type: string
                      format: uri
                    description:
                      type: string
                    matched_name:
                      type: string
                    pep_position:
                      type: string
                    date_of_birth:
                      type: string
                    other_sources:
                      type: array
                      items:
                        type: string
                    place_of_birth:
                      type: string
              linked_entities:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: array
                      items:
                        type: string
                    active:
                      type: array
                      items:
                        type: string
                    status:
                      type: array
                      items:
                        type: string
                    details:
                      type: array
                      items:
                        type: string
                    relation:
                      type: array
                      items:
                        type: string
              warning_matches:
                type: array
                description: >-
                  قائمة بتطابقات التحذيرات وإنفاذ القوانين التنظيمية. تتضمن
                  مدخلات من الفئات: Warning، و SIP، و Warnings and Regulatory
                  Enforcement، و Fitness and Probity، و SIE، و Insolvency.
                items:
                  type: object
                  properties:
                    list_name:
                      type: string
                      description: اسم جهة نشر قائمة التحذير
                    matched_name:
                      type: string
                      description: الاسم المتطابق في قائمة التحذير
                    description:
                      type: string
                      description: وصف قيد التحذير
                    publisher:
                      type: string
                      description: الناشر أو مصدر التحذير
                    source_url:
                      type: string
                      format: uri
                      description: رابط URL لمصدر التحذير
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: عناوين URL إضافية للمصدر
                    countries:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: الدول المرتبطة بالتحذير
                    created_at:
                      type: string
                      nullable: true
                      description: تاريخ إنشاء قيد التحذير
                    updated_at:
                      type: string
                      nullable: true
                      description: تاريخ آخر تحديث لقيد التحذير
                    additional_data:
                      type: object
                      description: >-
                        بيانات إضافية من مصدر التحذير. قد تحتوي على كائن `data`
                        مع مصفوفة `case_details`.
                      properties:
                        data:
                          type: object
                          properties:
                            case_details:
                              type: array
                              description: تفاصيل حالات التحذير المرتبطة بهذا التطابق
                              items:
                                type: object
                                properties:
                                  case_type:
                                    type: string
                                    description: نوع حالة التحذير
                                    enum:
                                      - Accusation
                                      - Arrest
                                      - Bribery
                                      - Criminal
                                      - Fraud
                                      - Illegal Fundraising
                                      - Non-conviction Terror
                                      - Proclaimed Offender
                                      - Regulatory Enforcement
                                      - Terrorism
                                      - Terrorism-related
                                      - Terrorism-related listing
              sanction_matches:
                type: array
                description: >-
                  قائمة بتطابقات قوائم العقوبات التي تم العثور عليها لهذا
                  الكيان.
                items:
                  type: object
                  properties:
                    list_name:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: اسم (أو أسماء) قائمة (أو قوائم) العقوبات
                    matched_name:
                      type: string
                      description: الاسم المتطابق في قائمة العقوبات
                    description:
                      type: string
                      description: وصف قيد العقوبات
                    reason:
                      type: string
                      nullable: true
                      description: >-
                        سبب فرض العقوبات على الكيان بنص حر. مجمّع من إدخالات
                        الأسباب في قائمة العقوبات. أمثلة: 'Executive Order 13224
                        (Terrorism)'، و'Support for actions undermining
                        Ukraine's sovereignty'، و'Listed due to national
                        security concerns.'
                    source_url:
                      type: string
                      format: uri
                      description: رابط URL لمصدر العقوبة
                    other_sources:
                      type: array
                      items:
                        type: string
                      description: عناوين URL إضافية للمصدر
                    details:
                      type: array
                      items:
                        type: string
                      description: تفاصيل إضافية حول العقوبة
                    legal_basis:
                      type: array
                      items:
                        type: string
                      description: الأساس القانوني للعقوبة
                    listed_on:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: تاريخ (تواريخ) إدراج الكيان
                    sanction_list:
                      type: array
                      items:
                        type: string
                      nullable: true
                      description: معرّف (معرّفات) قائمة العقوبات
                    sanction_program:
                      type: array
                      items:
                        type: string
                      description: برنامج (برامج) العقوبات التي أُدرج الكيان ضمنها
                    sanctioning_authority:
                      type: array
                      items:
                        type: string
                      description: الجهة/الجهات التي فرضت العقوبة
                    updated_on:
                      type: array
                      items:
                        type: string
                      description: تاريخ (أو تواريخ) آخر تحديث لبيانات قيد العقوبات
                    additional_data:
                      type: object
                      description: >-
                        بيانات إضافية من مصدر العقوبات لم يتم التقاطها في الحقول
                        الرئيسية
              adverse_media_details:
                type: object
                properties:
                  sentiment:
                    type: string
                  entity_type:
                    type: string
                  sentiment_score:
                    type: integer
                  adverse_keywords:
                    type: object
                    additionalProperties:
                      type: integer
              adverse_media_matches:
                type: array
                items:
                  type: object
                  properties:
                    country:
                      type: string
                    summary:
                      type: string
                    headline:
                      type: string
                    sentiment:
                      type: string
                    thumbnail:
                      type: string
                      format: uri
                    source_url:
                      type: string
                      format: uri
                    author_name:
                      type: string
                      nullable: true
                    other_sources:
                      type: array
                      items:
                        type: string
                    adverse_keywords:
                      type: array
                      items:
                        type: string
                    sentiment_score:
                      type: integer
                    publication_date:
                      type: string
                      format: date-time
              additional_information:
                type: object
        score:
          type: number
          format: float
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            درجة فحص AML الإجمالية — أعلى درجة مخاطر عبر جميع النتائج المتطابقة
            (عدد عشري float، 0-100). تكون `null` حتى يتم حسابها.
        screened_data:
          type: object
          properties:
            full_name:
              type: string
            nationality:
              type: string
            date_of_birth:
              type: string
              format: date
            document_number:
              type: string
              nullable: true
        is_ongoing_monitoring_enabled:
          type: boolean
          description: >-
            ما إذا كانت مراقبة AML المستمرة مُمكّنة لهذا الفحص. عندما تكون
            `true`، يُعاد فحص الكيان دورياً وتُحدّث أي نتائج مطابقة جديدة
            التقرير.
        next_ongoing_monitoring_bill_date:
          type: string
          format: date
          nullable: true
          description: >-
            التاريخ (YYYY-MM-DD) الذي ستتم فيه فوترة اشتراك المراقبة المستمرة
            هذا في المرة القادمة. يُحسب كتاريخ آخر فوترة للمراقبة المستمرة
            بالإضافة إلى 365 يوماً عندما يكون `is_ongoing_monitoring_enabled =
            true`؛ وخلاف ذلك `null`. هذا تاريخ فوترة، وليس تاريخ فحص - استخدم
            `last_ongoing_screening_at` لذلك.
        last_ongoing_screening_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            وقت آخر اكتمال لإعادة فحص هذا السجل بواسطة المراقبة المستمرة، سواء
            تغيرت النتيجة أم لا. تكون القيمة `null` إذا لم تتم إعادة فحص السجل
            مطلقاً؛ ولا يتم ملؤها بأثر رجعي من تاريخ التفعيل أو تاريخ الفوترة.
        last_ongoing_screening_datasets_updated_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            أحدث تاريخ لتحديث مجموعة بيانات AML أبلغ عنه المزود في وقت ذلك
            الفحص. تكون القيمة `null` عندما لم يُبلغ المزود عن أي تواريخ
            لمجموعات البيانات؛ ولا يتم تقديرها نهائياً.
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة التي
                  ينتمي إليها التحذير. في فحص AML يكون هذا عادةً `AML`، ولكن
                  التعداد (enum) أعلاه هو المرجع المعتمد عبر جميع تحذيرات
                  الميزات في payload القرار.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
    GeolocationCheck:
      type: object
      description: >-
        نتيجة واحدة للتحقق من الموقع الجغرافي، وهي المحاولة المقبولة لعقدة سير
        عمل واحدة. القياس وعدم اليقين والأصالة هي مفاتيح منفصلة، لذا تتم قراءة
        التحديد الدقيق غير المقترن بإقرار بشكل مختلف عن التحديد غير الدقيق
        المقترن بإقرار.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            عقدة سير العمل التي أنتجت هذه النتيجة، لكي يظل سير العمل الذي يتضمن
            خطوتين للتحقق من الموقع قابلاً للقراءة.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            حالة مستوى الميزة لخطوة التحقق من الموقع هذه، ويتم تحديدها بناءً على
            تحذيراتها. مستقلة عن `status` الجلسة.
        outcome:
          type: string
          nullable: true
          description: ما حدث في هذه المحاولة.
          enum:
            - 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
            - null
        permission:
          type: string
          nullable: true
          description: >-
            ما منحه نظام التشغيل أو المتصفح. تعني القيمة `not_requested` أن
            الخطوة تستخدم موقع IP الخاص بالاتصال فقط، وبالتالي لا يُطلب الإذن من
            الشخص مطلقاً.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            خط عرض WGS84 للموقع الجغرافي المثبّت. `null` عند عدم وجود تثبيت
            للموقع.
          format: double
        longitude:
          type: number
          nullable: true
          description: خط طول WGS84 للإحداثية المحددة. `null` عند عدم وجود إحداثية محددة.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            نصف قطر عدم اليقين بالأمتار، عند مستوى الثقة في
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            مستوى الثقة الذي تخصصه المنصة لـ `accuracy_m`: `p95` (المتصفحات)، أو
            `p68` (Android)، أو `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: وقت تطبيق الجهاز للإصلاح، وفقاً لساعته الخاصة.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: عدد الثواني بين تحديد الجهاز للموقع واستلام Didit له.
        source:
          type: string
          nullable: true
          description: >-
            مصدر تحديد الموقع، عندما توضحه المنصة. تعني `ip` أن الموقع هو موقع
            عنوان IP الخاص بالاتصال.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: العميل الذي أصدر الإصلاح.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: إصدار SDK الذي أنتج الإصلاح.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            تكون `true` عندما يشير الجهاز إلى أن الإحداثيات جاءت من مزود موقع
            زائف أو برنامج محاكاة. وتكون `null` عندما لا تُبلغ المنصة عن ذلك (لا
            يمكن للمتصفحات معرفة ذلك)؛ والقيمة `null` لا تعني `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            لنظام iOS فقط: تكون القيمة `true` عندما يتم تحديد الموقع بواسطة ملحق
            خارجي، وتكون `null` في الحالات الأخرى.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            ما إذا كان إقرار الجهاز يدعم الإصلاح. `unsupported` هو ما تبلّغ عنه
            المتصفحات، لأن الويب لا يحتوي على آلية إقرار؛ وهو ليس فشلاً.
        country_code:
          type: string
          nullable: true
          description: الدولة وفق المعيار ISO 3166-1 alpha-2 التي يقع فيها تحديد الموقع.
        region_code:
          type: string
          nullable: true
          description: التقسيم الإداري حسب معيار ISO 3166-2 الذي يقع فيه الإصلاح.
        city:
          type: string
          nullable: true
          description: أقرب مكان مأهول بالسكان، وهو اسم للمراجعين.
        geofence:
          type: object
          description: نتيجة قواعد الدولة والمنطقة للخطوة.
          properties:
            enabled:
              type: boolean
              description: ما إذا كانت الخطوة تطبق أي قاعدة دولة أو منطقة.
            result:
              type: string
              nullable: true
              description: >-
                موضع الموقع الجغرافي مقارنةً بالقواعد. تعني القيمة
                `undetermined` أن دائرة الدقة تتجاوز الحدود أو أن الموقع
                الجغرافي لم يُحدد لأي دولة؛ وهذا لا يُعد دليلاً على وجوده
                بالخارج.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة `true` عندما تكون قيمة `geofence.result` هي `inside`،
            و`false` عندما تكون `outside`، و`null` في غير ذلك.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            من أي موضع تم تقييم نتيجة المنطقة: تحديد موقع `device`، أو موقع `ip`
            الخاص بالاتصال.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: معرّفات المناطق المسموح بها التي تم إعدادها والتي يقع الموضع داخلها.
        blocked_areas:
          type: array
          items:
            type: string
          description: معرّفات المناطق المحظورة التي تم إعدادها والتي يقع الموضع فيها.
        position_source:
          type: string
          nullable: true
          description: >-
            المصدر الذي تستمد منه الخطوة الموقع الجغرافي، وفقاً للإعدادات:
            مقارنة الجهاز بموقع IP الجغرافي، أو الجهاز فقط، أو موقع IP الجغرافي
            فقط.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            حالة الاتصال والجهاز، وقيمة كل منها `true` أو `false` أو `null`
            عندما يتعذر على المصدر تحديد ذلك.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            المسافة إلى موقع عنوان IP للجلسة بعد طرح كلا قطري عدم اليقين؛ `0`
            عند تداخلهما.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            نصف القطر الإجمالي الذي تم طرحه: نصف قطر موقع عنوان IP بالإضافة إلى
            دقة هذا التحديد.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            ما إذا كانت `ip_distance_km` تقع ضمن المسافة المهيأة في الخطوة.
            `null` عندما يكون أيٌّ من الطرفين غير معروف.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            المسافة إلى العنوان المرمز جغرافياً في مستند الهوية أو إثبات
            العنوان. `null` في حال عدم وجود عنوان محفوظ في الملف.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            ما إذا كان هامش التسامح مع السفر في الخطوة قد تجاوز عن المسافة من
            العنوان. يكون `null` عندما يكون التسامح معطلاً.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            في المحاولة النهائية: هذا الفحص بالإضافة إلى حالات عدم التطابق
            السابقة لنفس الشخص على التوالي.
        attempts:
          type: integer
          description: رقم هذه المحاولة داخل العقدة، بدءاً من 1.
        consent:
          type: object
          nullable: true
          description: >-
            الموافقة التي قدمها الشخص قبل مطالبة النظام، مسجلة مع إصدار الصياغة
            واللغة التي رآها.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        warnings:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
                enum:
                  - ID_VERIFICATION
                  - NFC
                  - LIVENESS
                  - FACEMATCH
                  - PROOF_OF_ADDRESS
                  - PHONE
                  - EMAIL
                  - AML
                  - LOCATION
                  - DATABASE_VALIDATION
                  - QUESTIONNAIRE
                  - DOCUMENT_AI
                  - KYB_REGISTRY
                  - KYB_DOCUMENTS
                  - KYB_KEY_PEOPLE
                  - GEOLOCATION
                  - SIGNATURE
                description: >-
                  الميزة التي أنشأت هذا التحذير. تحدد القيمة كتلة الميزة التي
                  ينتمي إليها التحذير. عادةً ما تستخدم مصفوفة تحذيرات كل وحدة
                  نمطية القيمة المطابقة لوحدتها (مثل `PHONE` داخل
                  `phone_verifications[].warnings`)، ولكن التعداد (enum) أعلاه
                  هو المرجع المعتمد عبر جميع تحذيرات الميزات في payload القرار.
              risk:
                type: string
              additional_data:
                type: object
                nullable: true
              log_type:
                type: string
              short_description:
                type: string
              long_description:
                type: string
              node_id:
                type: string
                description: معرّف عقدة مخطط سير العمل التي أصدرت هذا التحذير
          description: >-
            التحذيرات التي أثارتها خطوة التحقق من الموقع هذه، مع تعيين `feature`
            إلى `GEOLOCATION`. تبدأ رموز التحذير بـ `LOCATION_`.
    GeolocationAttempt:
      type: object
      description: >-
        محاولة واحدة لخطوة التحقق من الموقع: نفس المفاتيح الموجودة في
        `geolocation_checks[]` باستثناء `warnings`، بالإضافة إلى وقت استلام
        Didit لها.
      properties:
        node_id:
          type: string
          nullable: true
          description: >-
            عقدة سير العمل التي أنتجت هذه النتيجة، لكي يظل سير العمل الذي يتضمن
            خطوتين للتحقق من الموقع قابلاً للقراءة.
        status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            حالة مستوى الميزة لخطوة التحقق من الموقع هذه، ويتم تحديدها بناءً على
            تحذيراتها. مستقلة عن `status` الجلسة.
        outcome:
          type: string
          nullable: true
          description: ما حدث في هذه المحاولة.
          enum:
            - 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
            - null
        permission:
          type: string
          nullable: true
          description: >-
            ما منحه نظام التشغيل أو المتصفح. تعني القيمة `not_requested` أن
            الخطوة تستخدم موقع IP الخاص بالاتصال فقط، وبالتالي لا يُطلب الإذن من
            الشخص مطلقاً.
          enum:
            - granted_precise
            - granted_approximate
            - denied
            - restricted
            - unavailable
            - timeout
            - dismissed
            - not_requested
            - null
        latitude:
          type: number
          nullable: true
          description: >-
            خط عرض WGS84 للموقع الجغرافي المثبّت. `null` عند عدم وجود تثبيت
            للموقع.
          format: double
        longitude:
          type: number
          nullable: true
          description: خط طول WGS84 للإحداثية المحددة. `null` عند عدم وجود إحداثية محددة.
          format: double
        accuracy_m:
          type: number
          nullable: true
          description: >-
            نصف قطر عدم اليقين بالأمتار، عند مستوى الثقة في
            `accuracy_confidence`.
          format: double
        accuracy_confidence:
          type: string
          nullable: true
          description: >-
            مستوى الثقة الذي تخصصه المنصة لـ `accuracy_m`: `p95` (المتصفحات)، أو
            `p68` (Android)، أو `unspecified` (iOS).
          enum:
            - p95
            - p68
            - unspecified
            - null
        measured_at:
          type: string
          nullable: true
          description: وقت تطبيق الجهاز للإصلاح، وفقاً لساعته الخاصة.
          format: date-time
        age_seconds:
          type: integer
          nullable: true
          description: عدد الثواني بين تحديد الجهاز للموقع واستلام Didit له.
        source:
          type: string
          nullable: true
          description: >-
            مصدر تحديد الموقع، عندما توضحه المنصة. تعني `ip` أن الموقع هو موقع
            عنوان IP الخاص بالاتصال.
          enum:
            - gps
            - fused
            - network
            - wifi
            - cell
            - browser
            - unknown
            - ip
            - null
        platform:
          type: string
          nullable: true
          description: العميل الذي أصدر الإصلاح.
          enum:
            - web
            - ios
            - android
            - react_native
            - flutter
            - null
        sdk_version:
          type: string
          nullable: true
          description: إصدار SDK الذي أنتج الإصلاح.
        is_mock:
          type: boolean
          nullable: true
          description: >-
            تكون `true` عندما يشير الجهاز إلى أن الإحداثيات جاءت من مزود موقع
            زائف أو برنامج محاكاة. وتكون `null` عندما لا تُبلغ المنصة عن ذلك (لا
            يمكن للمتصفحات معرفة ذلك)؛ والقيمة `null` لا تعني `false`.
        produced_by_accessory:
          type: boolean
          nullable: true
          description: >-
            لنظام iOS فقط: تكون القيمة `true` عندما يتم تحديد الموقع بواسطة ملحق
            خارجي، وتكون `null` في الحالات الأخرى.
        integrity:
          type: string
          enum:
            - attested
            - not_attested
            - failed
            - unsupported
            - not_determined
          description: >-
            ما إذا كان إقرار الجهاز يدعم الإصلاح. `unsupported` هو ما تبلّغ عنه
            المتصفحات، لأن الويب لا يحتوي على آلية إقرار؛ وهو ليس فشلاً.
        country_code:
          type: string
          nullable: true
          description: الدولة وفق المعيار ISO 3166-1 alpha-2 التي يقع فيها تحديد الموقع.
        region_code:
          type: string
          nullable: true
          description: التقسيم الإداري حسب معيار ISO 3166-2 الذي يقع فيه الإصلاح.
        city:
          type: string
          nullable: true
          description: أقرب مكان مأهول بالسكان، وهو اسم للمراجعين.
        geofence:
          type: object
          description: نتيجة قواعد الدولة والمنطقة للخطوة.
          properties:
            enabled:
              type: boolean
              description: ما إذا كانت الخطوة تطبق أي قاعدة دولة أو منطقة.
            result:
              type: string
              nullable: true
              description: >-
                موضع الموقع الجغرافي مقارنةً بالقواعد. تعني القيمة
                `undetermined` أن دائرة الدقة تتجاوز الحدود أو أن الموقع
                الجغرافي لم يُحدد لأي دولة؛ وهذا لا يُعد دليلاً على وجوده
                بالخارج.
              enum:
                - inside
                - outside
                - undetermined
                - null
        inside_geofence:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة `true` عندما تكون قيمة `geofence.result` هي `inside`،
            و`false` عندما تكون `outside`، و`null` في غير ذلك.
        geofence_basis:
          type: string
          nullable: true
          description: >-
            من أي موضع تم تقييم نتيجة المنطقة: تحديد موقع `device`، أو موقع `ip`
            الخاص بالاتصال.
          enum:
            - device
            - ip
            - null
        inside_areas:
          type: array
          items:
            type: string
          description: معرّفات المناطق المسموح بها التي تم إعدادها والتي يقع الموضع داخلها.
        blocked_areas:
          type: array
          items:
            type: string
          description: معرّفات المناطق المحظورة التي تم إعدادها والتي يقع الموضع فيها.
        position_source:
          type: string
          nullable: true
          description: >-
            المصدر الذي تستمد منه الخطوة الموقع الجغرافي، وفقاً للإعدادات:
            مقارنة الجهاز بموقع IP الجغرافي، أو الجهاز فقط، أو موقع IP الجغرافي
            فقط.
          enum:
            - device_and_ip
            - device_only
            - ip_only
            - null
        anonymizers:
          type: object
          nullable: true
          description: >-
            حالة الاتصال والجهاز، وقيمة كل منها `true` أو `false` أو `null`
            عندما يتعذر على المصدر تحديد ذلك.
          properties:
            vpn:
              type: boolean
              nullable: true
            proxy:
              type: boolean
              nullable: true
            tor:
              type: boolean
              nullable: true
            spoofing:
              type: boolean
              nullable: true
            emulator:
              type: boolean
              nullable: true
        ip_distance_km:
          type: number
          nullable: true
          description: >-
            المسافة إلى موقع عنوان IP للجلسة بعد طرح كلا قطري عدم اليقين؛ `0`
            عند تداخلهما.
          format: double
        ip_distance_uncertainty_km:
          type: number
          nullable: true
          description: >-
            نصف القطر الإجمالي الذي تم طرحه: نصف قطر موقع عنوان IP بالإضافة إلى
            دقة هذا التحديد.
          format: double
        ip_consistent:
          type: boolean
          nullable: true
          description: >-
            ما إذا كانت `ip_distance_km` تقع ضمن المسافة المهيأة في الخطوة.
            `null` عندما يكون أيٌّ من الطرفين غير معروف.
        document_distance_km:
          type: number
          nullable: true
          description: >-
            المسافة إلى العنوان المرمز جغرافياً في مستند الهوية أو إثبات
            العنوان. `null` في حال عدم وجود عنوان محفوظ في الملف.
          format: double
        travel_excused:
          type: boolean
          nullable: true
          description: >-
            ما إذا كان هامش التسامح مع السفر في الخطوة قد تجاوز عن المسافة من
            العنوان. يكون `null` عندما يكون التسامح معطلاً.
        consecutive_mismatches:
          type: integer
          nullable: true
          description: >-
            في المحاولة النهائية: هذا الفحص بالإضافة إلى حالات عدم التطابق
            السابقة لنفس الشخص على التوالي.
        attempts:
          type: integer
          description: رقم هذه المحاولة داخل العقدة، بدءاً من 1.
        consent:
          type: object
          nullable: true
          description: >-
            الموافقة التي قدمها الشخص قبل مطالبة النظام، مسجلة مع إصدار الصياغة
            واللغة التي رآها.
          properties:
            accepted_at:
              type: string
              format: date-time
            version:
              type: string
              nullable: true
            locale:
              type: string
              nullable: true
        received_at:
          type: string
          nullable: true
          description: وقت تلقي Didit للمحاولة.
          format: date-time
        created_at:
          type: string
          format: date-time
    KYBRegistryShareholding:
      type: object
      nullable: true
      description: >-
        ما يمتلكه المالك، بنفس الهيكل لكل دولة ومصدر سجل. يكون null عندما لا
        يذكر السجل أي حصة. النطاق (على سبيل المثال 25-50% لـ UK PSC) لا يُعد
        حصة: يكون `percentage` بقيمة null ويظل النطاق في `ownership_min_shares`
        / `ownership_max_shares`.
      properties:
        share_class:
          type: string
          nullable: true
          description: فئة السهم أو نوعه كما يسميه السجل.
        number_of_shares:
          type: number
          nullable: true
          description: عدد الأسهم المملوكة.
        currency:
          type: string
          nullable: true
          description: عملة القيم الموضحة أدناه حسب معيار ISO 4217.
        nominal_value:
          type: number
          nullable: true
          description: القيمة الاسمية لكل سهم.
        total_value:
          type: number
          nullable: true
          description: القيمة الإجمالية للحيازة.
        percentage:
          type: number
          nullable: true
          description: الحصة الدقيقة بالنسبة المئوية، حتى أربع منازل عشرية.
      required:
        - share_class
        - number_of_shares
        - currency
        - nominal_value
        - total_value
        - percentage
    KYBRegistryAddress:
      type: object
      description: >-
        عنوان يحدده السجل، بنفس الهيكل لكل دولة ومصدر سجل. كل مفتاح موجود
        دائماً؛ وأي جزء لا ينشره السجل يكون null.
      properties:
        type:
          type: string
          nullable: true
          description: >-
            نوع العنوان بأحرف صغيرة: `registered` للمقر المسجل؛ وأنواع أخرى كما
            يسميها السجل (على سبيل المثال `postal`، `office`). يكون `null` عندما
            لا يحدد السجل ماهية العنوان.
        address:
          type: string
          description: العنوان الكامل في سطر واحد. موجود دائماً في كل عنوان.
        street:
          type: string
          nullable: true
          description: الشارع والرقم.
        city:
          type: string
          nullable: true
          description: المدينة أو المنطقة.
        postal_code:
          type: string
          nullable: true
          description: الرمز البريدي.
        region:
          type: string
          nullable: true
          description: المنطقة أو الولاية أو المقاطعة.
        country_code:
          type: string
          nullable: true
          description: رمز الدولة وفقاً لـ ISO 3166-1 alpha-2.
        description:
          type: string
          nullable: true
          description: التسمية الخاصة بسجل الشركات للعنوان، إن وُجدت.
      required:
        - type
        - address
        - street
        - city
        - postal_code
        - region
        - country_code
        - description
    KYBRegistryIndustry:
      type: object
      description: >-
        نشاط تُصنّف الجهة المسؤولة عن السجل الشركة ضمنه، بنفس الهيكل لكل دولة
        ومصدر سجل.
      properties:
        code:
          type: string
          nullable: true
          description: رمز النشاط كما يطبعه السجل (على سبيل المثال `73110`).
        description:
          type: string
          nullable: true
          description: تسمية النشاط، عندما ينشرها السجل.
        scheme:
          type: string
          nullable: true
          description: >-
            نظام التصنيف، اسم واحد لكل نظام بغض النظر عن المصدر الذي أبلغ عنه:
            `UK SIC 2007`، و`US SIC`، و`NACE Rev. 2`، و`NACE Rev. 2.1`، و`NAF
            Rev. 2`، و`CNAE`، و`SBI`، و`NOGA 2008`، و`CAE Rev. 4`، و`Canada SIC
            1977`؛ تحتفظ الأنظمة الوطنية الأخرى باسم السجل نفسه. تكون القيمة
            فارغة Null عندما لا يحدد السجل اسم النظام.
        is_primary:
          type: boolean
          description: >-
            تكون القيمة True للنشاط الرئيسي للشركة. هناك مدخل أساسي واحد بالضبط
            عندما لا تكون القائمة فارغة.
      required:
        - code
        - description
        - scheme
        - is_primary
    KYBRegistryData:
      type: object
      nullable: true
      description: >-
        تفاصيل السجل الموحدة معيارياً من Didit للشركة: نتيجة الملكية
        (`ownership_error` و`section_errors` و`ubo_resolution`
        و`lite_enrichment`)، والتصحيحات التي أُجريت باستخدام update-data، وحقائق
        السجل التي ليس لها حقل خاص بها. لا يحمل أبداً السجل الخاص بمصدر السجل
        نفسه. كل مفتاح اختياري ولا يظهر إلا عندما يكون للشركة قيمة له؛ قد تُضاف
        مفاتيح جديدة. اقرأ الحقول القياسية (`addresses` و`industries`
        و`ownership` و`beneficial_owners[].shareholding`) لأي شيء تغطيه.
      properties:
        company_name:
          type: string
          description: اسم الشركة كما تم تصحيحه في لوحة التحكم.
        registration_number:
          type: string
          description: رقم التسجيل كما يذكره السجل أو تصحيح لوحة التحكم.
        country_code:
          type: string
          description: دولة التسجيل كما يوضحها سجل الشركات أو تصحيح من لوحة التحكم.
        region:
          type: string
          description: منطقة أو ولاية التسجيل.
        incorporation_date:
          type: string
          description: تاريخ التأسيس (ISO 8601).
        registration_date:
          type: string
          description: >-
            تاريخ التسجيل (ISO 8601) عندما يذكر السجل تاريخاً منفصلاً عن تاريخ
            التأسيس.
        dissolution_date:
          type: string
          description: تاريخ الحل (ISO 8601) عندما ينص عليه السجل.
        tax_number:
          type: string
          description: الرقم الضريبي.
        vat_number:
          type: string
          description: رقم ضريبة القيمة المضافة (VAT).
        legal_address:
          type: string
          description: العنوان القانوني كما تم تصحيحه في لوحة التحكم.
        registered_address:
          type: string
          description: العنوان المسجل كما هو مذكور في السجل.
        company_type:
          type: string
          description: الشكل القانوني.
        registry_status:
          type: string
          description: حالة الشركة في السجل.
        verification_status:
          type: string
          description: حالة التحقق.
        alternative_names:
          type: string
          description: الأسماء الأخرى التي تتداول أو تداولت الشركة تحتها.
        nature_of_business:
          type: string
          description: وصف النشاط.
        registered_capital:
          type: string
          description: رأس المال المسجل كما هو مطبوع.
        registered_capital_amount:
          type: string
          description: مبلغ رأس المال المسجل، كسلسلة عشرية.
        registered_capital_currency:
          type: string
          description: عملة رأس المال المسجل (ISO 4217).
        website:
          type: string
          description: الموقع الإلكتروني.
        email:
          type: string
          description: البريد الإلكتروني لجهة الاتصال.
        phone:
          type: string
          description: هاتف التواصل.
        legal_entity_identifier:
          type: string
          description: معرّف الكيان القانوني (LEI).
        location_of_registration:
          type: string
          description: مكان التسجيل.
        control_scheme:
          type: string
          description: نظام الحوكمة عندما يوفره سجل الشركات.
        ownership_error:
          type: string
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
          description: >-
            سبب عدم تسليم مستوى الملكية المطلوب، بنفس رموز
            `ownership.unavailable_reason`. يُعد `no_owners_on_record` (أجاب
            السجل ولم يُسمِّ أي مالك) و`ownership_section_unavailable` (لم يُرجع
            السجل قسم الملكية) نتيجتين مختلفتين.
        section_errors:
          type: object
          description: >-
            الأقسام التي لم يُرجعها السجل، مفهرسة حسب القسم (`officers`
            و`shareholders` و`group_structure`). أي قسم مدرج هنا لم يتم تسليمه
            أبداً: ولا تعني القائمة الفارغة بجانبه أي شيء عن الشركة.
          additionalProperties:
            $ref: '#/components/schemas/KYBRegistrySectionError'
        ubo_resolution:
          $ref: '#/components/schemas/KYBRegistryUboResolution'
        lite_enrichment:
          $ref: '#/components/schemas/KYBRegistryLiteEnrichment'
        registry_metadata:
          type: object
          additionalProperties:
            oneOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            حقول السجل الخاصة بالشركة، مفهرسة حسب تسميات السجل لها، كقيم بسيطة
            (سجلات قديمة). لا يتم تضمين سوى الحقول التي تمت مراجعتها كحقائق من
            السجل.
        registry_sources:
          type: array
          description: >-
            السجلات الرسمية التي تمت قراءة السجل منها (السجلات القديمة). لا يتم
            ذكر المصادر الأخرى بالاسم.
          items:
            $ref: '#/components/schemas/KYBRegistrySource'
        previous_names:
          type: array
          items:
            type: string
          description: الأسماء التي كانت الشركة مسجلة بها سابقاً (السجلات السابقة).
        parent_companies:
          type: array
          items:
            type: string
          description: الشركات الأم التي يسميها السجل (السجلات السابقة).
        documents_available:
          type: integer
          description: عدد الإيداعات التي يقدمها السجل للشركة (السجلات القديمة).
    KYBRegistryOwnership:
      type: object
      description: نتيجة مستوى الملكية (المساهمون / UBO)، بالهيكل نفسه لكل دولة ومصدر سجل.
      properties:
        status:
          type: string
          nullable: true
          enum:
            - not_requested
            - pending
            - delivered
            - not_held
            - unavailable
            - null
          description: >-
            `delivered` عندما ينشر السجل بيانات الملكية؛ و`not_held` عندما
            يستجيب سجل الملكية ولا يدرج الشركة على الإطلاق (راجع
            `unavailable_reason`)؛ و`unavailable` عندما لا يقدّم بيانات الملكية
            لأي سبب آخر (راجع `unavailable_reason`)؛ و`pending` بينما لا يزال
            السجل يجلبها؛ و`not_requested` للمستوى Basic.
        tier_requested:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: المستوى الذي طلبه سير العمل.
        tier_delivered:
          type: string
          nullable: true
          enum:
            - basic
            - shareholders
            - ubo
            - null
          description: >-
            المستوى الذي سلّمه السجل (والذي تتم فوترته). طلب UBO الذي يُجاب عنه
            بالمساهمين المباشرين فقط يكون `shareholders`.
        unavailable_reason:
          type: string
          nullable: true
          enum:
            - no_owners_on_record
            - no_natural_person_owner
            - ownership_section_unavailable
            - company_not_found
            - ambiguous_company_match
            - missing_registration_number
            - entity_type_not_covered
            - provider_unavailable
            - other
            - null
          description: >-
            سبب عدم تسليم مستوى الملكية المطلوب. يكون فارغاً ما لم تكن `status`
            هي `unavailable` أو `pending`.
        direct_ownership_complete:
          type: boolean
          nullable: true
          description: >-
            تكون القيمة True عندما يصل مجموع الحصص المعلنة للمساهمين المباشرين
            إلى 100% (مع فارق نقطة مئوية واحدة للتقريب)؛ وتكون False إذا لم يكن
            كذلك؛ وتكون null إذا لم يتم تقديم بيانات الملكية أو لم يتم تحديد
            الحصة.
        unresolved:
          type: array
          description: >-
            أجزاء سلسلة الملكية التي تعذر على سجل الشركات تسويتها، مثل عدم وجود
            هيكل مجموعة مسجل فوق المالكين المباشرين.
          items:
            type: object
            properties:
              reason:
                type: string
              section:
                type: string
                nullable: true
      required:
        - status
        - tier_requested
        - tier_delivered
        - unavailable_reason
        - direct_ownership_complete
        - unresolved
    KYBOwnershipStructure:
      type: object
      nullable: true
      description: >-
        جدول رأس المال الذي أثبته السجل، كما كان عند تسليم مستوى الملكية:
        `shareholders` و`beneficial_owners` المباشرون. يكون فارغاً عندما لا يثبت
        السجل أي ملكية. ولا يتضمن أبداً صفوف مصدر السجل نفسه؛ اقرأ
        `company.beneficial_owners` و`company.ownership` للاطلاع على السجل
        الحالي.
      properties:
        shareholders:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
        beneficial_owners:
          type: array
          items:
            $ref: '#/components/schemas/KYBOwnershipStructureOwner'
      required:
        - shareholders
        - beneficial_owners
    InvestigatorBlock:
      type: object
      nullable: true
      description: >-
        أحدث مراجعة من Investigator للعنصر، أو null في حال لم يحصل عليها من قبل.
        يتم تضمينها في قرار جلسة V3 وقرار جلسة الشركة (وبالتالي في webhook لحدث
        `status.updated`).
      properties:
        run_id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - running
            - completed
            - failed
        stage:
          type: string
          enum:
            - shadow
            - live
        queue:
          type: string
          enum:
            - kyc
            - kyb
            - aml
            - transactions
            - cases
        is_open:
          type: boolean
        recommendation:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
          nullable: true
        recommendation_detail:
          type: string
          nullable: true
        confidence:
          type: string
          enum:
            - high
            - moderate
            - low
          nullable: true
        summary:
          type: string
          nullable: true
        ready_to_accept:
          type: boolean
        prepared_at:
          type: string
          format: date-time
          nullable: true
        automated:
          type: boolean
          description: اتخذ المحقق قراره بشكل مستقل، حتى لو تم تجاوز القرار لاحقاً.
        decided_by:
          type: string
          enum:
            - investigator
            - member
          nullable: true
        decision:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/InvestigatorDecision'
          type: object
    BiometricRetention:
      type: object
      description: متى يتم حذف البيانات البيومترية الحية لهذه الجلسة.
      required:
        - jurisdictions
        - deletes_at
      properties:
        jurisdictions:
          type: array
          items:
            type: string
          description: >-
            رموز الولايات الأمريكية التي تفرض قواعدها البيومترية حداً زمنياً
            للحذف لهذا الشخص (`US` عندما تكون الولاية غير معروفة). تكون فارغة
            إذا لم ينطبق أي منها.
        deletes_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            تاريخ حذف البيانات البيومترية الحية (صور الوجه والقوالب) لهذه
            الجلسة، بناءً على إعداد الاحتفاظ بالبيانات الخاص بتطبيقك والحد
            القانوني للاختصاص القضائي للشخص، إن وجد. القيمة `null` عندما لا
            ينطبق أي تاريخ بعد.
    SocialFootprintPlatform:
      type: object
      properties:
        platform:
          type: string
          description: معرّف المنصة.
          example: whatsapp
        category:
          type: string
          description: >-
            فئة المنصة، مثل MESSAGING أو SOCIAL_MEDIA أو ECOMMERCE أو
            PROFESSIONAL أو EMAIL_PROVIDER.
          example: MESSAGING
        scope:
          type: string
          enum:
            - global
            - local
          description: '`global` للمنصات العالمية، و`local` للمنصات الخاصة بمنطقة معينة.'
          example: global
    SocialFootprintCategorySummary:
      type: object
      properties:
        registered:
          type: integer
          nullable: true
          description: المنصات في هذه الفئة التي تم تأكيد التسجيل فيها.
          example: 2
        ratio:
          type: number
          format: float
          nullable: true
          description: حصة المنصات المفحوصة في الفئة التي تحتوي على تسجيل، 0.0-1.0.
          example: 0.6667
    SocialFootprintProfile:
      type: object
      properties:
        name:
          type: string
          nullable: true
          description: اسم الملف التعريفي، إذا وفرته المنصة.
        photo:
          type: string
          nullable: true
          description: رابط الصورة الشخصية للملف التعريفي، إذا وفرته المنصة.
        about:
          type: string
          nullable: true
          description: نص النبذة التعريفية للملف التعريفي، إذا وفرته المنصة.
        privacy_status:
          type: string
          nullable: true
          enum:
            - PUBLIC
            - PRIVATE
            - null
          description: مستوى رؤية الملف التعريفي، إذا وفرته المنصة.
        business_account:
          type: boolean
          nullable: true
          description: ما إذا كان الملف الشخصي حساب شركة، عندما تكشفه المنصة.
    SignatureFieldResult:
      type: object
      description: >-
        حقل في مستند موقّع، مع قيمته في نسخة هذا الموقّع. راجع
        [الحقول](/ar/core-technology/electronic-signature/report-electronic-signature#الحقول).
      properties:
        key:
          type: string
          description: مفتاح الحقل، كما هو مستخدم في `sign.field_values`.
        type:
          type: string
          enum:
            - signature
            - initials
            - full_name
            - date_signed
            - text
            - checkbox
            - email
            - data
        role:
          type: string
          enum:
            - verified_person
            - legal_representative
            - key_people
        label:
          type: string
        page:
          type: integer
          description: >-
            رقم الصفحة، يبدأ من 1. بالنسبة لمستند Word، تكون صفحة من ملف PDF
            المُحوَّل.
        x:
          type: number
          description: الحافة اليسرى، ككسر من عرض الصفحة.
        'y':
          type: number
          description: الحافة العلوية، كنسبة من ارتفاع الصفحة.
        width:
          type: number
          description: العرض، كنسبة من عرض الصفحة.
        height:
          type: number
          description: الارتفاع، كنسبة من ارتفاع الصفحة.
        required:
          type: boolean
        value:
          nullable: true
          description: >-
            سلسلة نصية لـ `text` و `email` و `full_name` و `date_signed` و
            `data`، وقيمة منطقية لـ `checkbox`، و `true` لتوقيع أو أحرف أولى
            مُضافة. `null` عندما تكون فارغة.
        display_value:
          type: string
          nullable: true
          description: >-
            القيمة كما تم ختمها على الصفحة: التواريخ وفق `date_format` الخاص
            بالحقل، أو `Yes` أو `No` لخانات الاختيار، أو `Signed` للتوقيع أو
            الأحرف الأولى.
        value_source:
          type: string
          nullable: true
          enum:
            - signer
            - identity
            - contact
            - company
            - session
            - metadata
            - api
            - signing_time
            - null
          description: >-
            مصدر القيمة: `signer` (مكتوبة، أو محددة، أو مطبقة بواسطة الموقّع)،
            أو `identity` (الهوية التي تم التحقق منها)، أو `contact` (البريد
            الإلكتروني أو الهاتف الذي تم التحقق منه)، أو `company` (الشركة التي
            تم التحقق منها)، أو `session` (`vendor_data`)، أو `metadata`، أو
            `api` (`sign.field_values`)، أو `signing_time` (تاريخ التوقيع).
        filled_at:
          type: string
          format: date-time
          nullable: true
        image_url:
          type: string
          nullable: true
          description: >-
            التوقيع والأحرف الأولى فقط: مسار الصورة المطبقة. راجع [تنزيل صورة
            التوقيع](/ar/sessions-api/electronic-signature/download-field-image).
        value_unavailable_reason:
          type: string
          nullable: true
          enum:
            - source_empty
            - null
          description: >-
            `source_empty` عندما لا يحتوي حقل مملوء مسبقاً على أي قيمة في الجلسة
            وسمح `signature_field_data_missing_action` للموقّع بالتوقيع على أي
            حال.
    KYBRegistrySectionError:
      type: object
      description: قسم لم يُرجعه السجل.
      properties:
        status_code:
          type: integer
          nullable: true
          description: الحالة التي رد بها السجل للقسم.
      required:
        - status_code
    KYBRegistryUboResolution:
      type: object
      description: كيفية تتبع مستوى UBO لسلسلة الملكية فوق الشركة.
      properties:
        parent_chain:
          type: array
          description: >-
            الشركات الأم للشركة بدءاً من الشركة الأم النهائية ووصولاً إلى
            الشركة.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        subsidiaries:
          type: array
          description: الشركات التابعة مباشرة للشركة ضمن مجموعتها المؤسسية.
          items:
            $ref: '#/components/schemas/KYBRegistryGroupCompany'
        unresolved:
          type: array
          description: >-
            أجزاء السلسلة التي تعذر على سجل الشركات تسويتها (نفس مدخلات
            `ownership.unresolved`).
          items:
            type: object
            properties:
              reason:
                type: string
                description: >-
                  السبب، على سبيل المثال `no_group_structure_on_record` أو
                  `selected_company_not_in_group_structure` أو `section_error`.
              section:
                type: string
                nullable: true
                description: القسم المعني، على سبيل المثال `group_structure`.
            required:
              - reason
              - section
      required:
        - parent_chain
        - subsidiaries
        - unresolved
    KYBRegistryLiteEnrichment:
      type: object
      description: >-
        حقول الملف الشخصي Lite الفارغة التي ملأها مصدر آخر من مصادر سجلات
        الدولة. لا يُذكر اسم المصدر.
      properties:
        fields:
          type: array
          items:
            type: string
          description: حقول الشركة التي تمت تعبئتها.
        people_added:
          type: integer
          description: عدد المسؤولين أو المالكين الذين تمت إضافتهم.
      required:
        - fields
        - people_added
    KYBRegistrySource:
      type: object
      description: >-
        سجل رسمي قُرئت منه البيانات. لا يتم ذكر سوى السجلات الحكومية الرسمية
        والجهات التنظيمية ونظام المعرّفات الرسمي؛ ويتم استبعاد أي مصدر آخر.
      properties:
        name:
          type: string
          description: اسم السجل، على سبيل المثال `UK Companies House`.
        source_type:
          type: string
          enum:
            - official
          description: دائماً `official`.
      required:
        - name
        - source_type
    KYBOwnershipStructureOwner:
      type: object
      description: >-
        مالك واحد في لقطة الملكية: نفس هوية السجل والحصة كما في
        `company.beneficial_owners[]`، وحصته الأساسية `shareholding`.
      properties:
        name:
          type: string
          nullable: true
          description: اسم المالك كما هو مذكور في السجل.
        first_name:
          type: string
          nullable: true
          description: الاسم الشخصي، للشخص الطبيعي، عندما يذكره سجل الشركات.
        last_name:
          type: string
          nullable: true
          description: اسم العائلة للشخص الطبيعي، عندما يذكره السجل.
        date_of_birth:
          type: string
          nullable: true
          description: تاريخ الميلاد (ISO 8601) عندما ينشره السجل.
        country_of_birth:
          type: string
          nullable: true
          description: دولة الميلاد عندما ينشرها سجل الشركات.
        company_name:
          type: string
          nullable: true
          description: اسم الشركة، لمالك مؤسسي.
        registration_number:
          type: string
          nullable: true
          description: رقم التسجيل، للمالك الاعتباري (الشركة).
        entity_type:
          type: string
          nullable: true
          enum:
            - person
            - company
            - null
          description: ما إذا كان المالك شخصاً طبيعياً أو شركة.
        nationality:
          type: string
          nullable: true
          description: الجنسية عندما يذكرها سجل الشركات.
        designation:
          type: string
          nullable: true
          description: المسمى الوظيفي أو الدور الخاص بالمالك كما هو مطبوع في السجل.
        roles:
          type: array
          items:
            type: string
          description: '`shareholder` للمساهم المباشر، و`ubo` للمستفيد الحقيقي.'
        ownership_min_shares:
          type: string
          nullable: true
          description: الحد الأدنى للحصة، كنسبة مئوية (يساوي الحد الأعلى لحصة محددة بدقة).
        ownership_max_shares:
          type: string
          nullable: true
          description: الحد الأعلى للحصة، بالنسبة المئوية.
        voting_min_shares:
          type: string
          nullable: true
          description: الحد الأدنى لحقوق التصويت، كنسبة مئوية.
        voting_max_shares:
          type: string
          nullable: true
          description: الحد الأعلى لحقوق التصويت، بالنسبة المئوية.
        appointment_date:
          type: string
          nullable: true
          description: تاريخ بدء الملكية أو التعيين (ISO 8601).
        is_active:
          type: boolean
          nullable: true
          description: القيمة False لمالك سابق.
        shareholding:
          $ref: '#/components/schemas/KYBRegistryShareholding'
      required:
        - name
        - first_name
        - last_name
        - date_of_birth
        - country_of_birth
        - company_name
        - registration_number
        - entity_type
        - nationality
        - designation
        - roles
        - ownership_min_shares
        - ownership_max_shares
        - voting_min_shares
        - voting_max_shares
        - appointment_date
        - is_active
        - shareholding
    InvestigatorDecision:
      type: object
      description: >-
        كيفية خروج العنصر من قائمة انتظار Investigator. يتم إرجاع `decided_by`
        و`original_outcome` و`overrides` بواسطة endpoint الخاصة بالقبول والتجاوز
        والتقرير؛ وتحتوي كتلة `investigator` الخاصة بقرار الجلسة على الحقول
        الأخرى.
      properties:
        outcome:
          type: string
          enum:
            - accepted
            - edited
            - overridden
            - decided_elsewhere
            - automated
          description: >-
            اعتمدت `accepted` أو `edited` التوصية (`edited` مع سرد معاد كتابته)،
            واتخذت `overridden` إجراءً آخر، و`decided_elsewhere` هو قرار تم
            اتخاذه خارج Investigator أثناء فتح التقرير، و`automated` هو قرار
            اتخذه Investigator تلقائيًا بمفرده.
        action:
          type: string
          enum:
            - approve
            - decline
            - escalate
            - request
        actor_email:
          type: string
          nullable: true
        actor_name:
          type: string
          nullable: true
        override_category:
          type: string
          enum:
            - missing_context
            - needs_information
            - policy_differs
            - evidence_misread
            - other
            - ''
          nullable: true
        override_reason:
          type: string
          nullable: true
        final_status:
          type: string
          description: حالة العنصر بعد اتخاذ القرار.
        agreed:
          type: boolean
          description: ما إذا كان القرار متطابقاً مع التوصية.
          nullable: true
        decided_at:
          type: string
          format: date-time
        billed:
          type: boolean
          description: فُرضت رسوم على المراجعة.
        decided_by:
          type: string
          enum:
            - investigator
            - member
        original_outcome:
          type: object
          description: >-
            القرار الذي اتخذه المحقّق بمفرده، دون تغيير عبر التجاوزات اللاحقة.
            وتكون القيمة Null للقرار الذي اتخذه الفريق.
          properties:
            action:
              type: string
            final_status:
              type: string
            decided_at:
              type: string
              format: date-time
          nullable: true
        overrides:
          type: array
          description: كل تجاوز لقرار اتخذه Investigator من تلقاء نفسه، الأقدم أولاً.
          items:
            type: object
            properties:
              action:
                type: string
              actor_email:
                type: string
                nullable: true
              actor_name:
                type: string
                nullable: true
              override_category:
                type: string
              override_reason:
                type: string
              previous_status:
                type: string
              final_status:
                type: string
              agreed:
                type: boolean
                nullable: true
              overridden_at:
                type: string
                format: date-time
    KYBRegistryGroupCompany:
      type: object
      description: شركة ضمن مجموعة الشركات، وفقاً لهويتها في السجل.
      properties:
        name:
          type: string
          nullable: true
          description: اسم الشركة.
        country_code:
          type: string
          nullable: true
          description: دولة التسجيل.
        registration_number:
          type: string
          nullable: true
          description: رقم التسجيل.
      required:
        - name
        - country_code
        - registration_number
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        مفتاح API الخاص بتطبيقك، من Developers -> API keys في Business Console.
        يمتلك المفتاح الأساسي وصولاً كاملاً. يمكن تحديد نطاق المفتاح المسمى: لا
        شيء، أو قراءة، أو كتابة لكل مورد، ومحدوداً ببعض مسارات العمل أو بالجلسات
        المقبولة، وبقائمة من عناوين IP، وبتاريخ انتهاء الصلاحية. يشير 401 إلى أن
        المفتاح غير صحيح أو ملغى أو منتهي الصلاحية؛ ويشير 403 إلى أنه لم يتم
        إرسال أي مفتاح، أو أن المفتاح ليس لديه حق الوصول إلى هذا المورد أو
        الإجراء، أو أن الطلب جاء من عنوان خارج قائمة عناوين IP الخاصة به؛ ويشير
        404 في مسار جلسة إلى أن الجلسة خارج مسارات العمل أو الحالات الخاصة
        بالمفتاح. يتلقى المفتاح الذي لا يمتلك حق الوصول إلى الوسائط عناوين URL
        للصور ومقاطع الفيديو وملفات PDF كـ null، ويتلقى المفتاح الذي لا يمتلك
        إذن كتابة للجلسات روابط الجلسة وtoken كـ null. راجع
        https://docs.didit.me/console/api-keys.

````

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