> ## 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.

# مخطط استجابة مراقبة المعاملات (KYT): مرجع حمولة المعاملة

> مخطط استجابة المعاملة من Didit: الدرجة، والقواعد، والأطراف، والجهاز وعنوان IP، وفحص العملات المشفرة، وTravel Rule. 1,000 شهرياً مشمولة، ثم $0.001 لكل استدعاء.

تُوثّق هذه الصفحة الـpayload الكامل الذي تُرجعه `POST /v3/transactions/` و`GET /v3/transactions/{transaction_id}/`. يُعيد كلاهما الكائن نفسه `TransactionDetail`، أما [مرجع API](https://docs.didit.me/ar/management-api/transactions/get.md) ففيه مخطط الحقول حقلًا حقلًا، وتشرح هذه الصفحة بنيته.

## البنية على المستوى الأعلى

```json theme={null}
{
  "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
  "environment": "live",
  "transaction_number": 4123,
  "txn_id": "tx-0001",
  "txn_date": "2026-04-16T12:00:00Z",
  "zone_id": "Europe/Madrid",
  "transaction_type": "finance",
  "action_type": "withdrawal",
  "direction": "OUTBOUND",
  "status": "IN_REVIEW",
  "source": "LIVE",
  "amount": "12500",
  "currency": "EUR",
  "currency_type": "fiat",
  "amount_in_default_currency": null,
  "default_currency_code": null,
  "preferred_currency_amount": "13520.75",
  "preferred_currency_code": "USD",
  "payment_details": "Withdrawal to bank account",
  "payment_txn_id": null,
  "score": 65,
  "severity": "MEDIUM",
  "decision_reason_code": "rule_score_threshold",
  "decision_reason_label": "Score above review threshold",
  "vendor_data": "user-42",
  "metadata": { "subject": { ... }, "counterparty": { ... } },
  "props": { "order_id": "ORD-7891" },
  "tags": [ ... ],
  "parties": [ ... ],
  "payment_methods": [ ... ],
  "documents": [ ... ],
  "activities": [ ... ],
  "alerts": [],
  "rule_runs": [ ... ],
  "provider_results": [ ... ],
  "travel_rule": { ... } | null,
  "network_snapshot": { ... } | null,
  "remediation": { ... } | null,
  "action_required": { ... } | null,
  "cost_breakdown": { ... } | null
}
```

يصف معرّفان المعاملة نفسها. `uuid` هو المعرّف الثابت لدى Didit، وهو ما تتوقعه `GET /v3/transactions/{transaction_id}/` في مسارها. أما `txn_id` فهو `transaction_id` الذي أرسلته عند الإنشاء. و`transaction_number` هو الرقم التسلسلي الخاص بالتطبيق الذي تعرضه وحدة التحكم.

لا تُعاد الأطراف التي أرسلتها، أي الطرف الخاضع للفحص والطرف المقابل، كمفاتيح على المستوى الأعلى. بل هي عناصر في المصفوفة `parties`، ويُميَّز كلٌّ منها بالحقل `role`. أما `vendor_data` على المستوى الأعلى فهو نسخة للتيسير من `vendor_data` الخاص بمقدّم الطلب.

## الحقول الرئيسية

### الحقول المالية

* `amount` / `currency`: مبلغ المعاملة كما أُرسل. الحقل `amount` سلسلة عشرية تُحذف منها الأصفار الزائدة في النهاية (`"1500"`, `"0.5"`)، وتصل إلى 18 منزلة عشرية كحد أقصى.
* `currency_type`: القيمة `fiat` أو `crypto`، كما أُرسلت في `currency_kind`؛ وتكون `null` إذا لم تُرسَل.
* `amount_in_default_currency` / `default_currency_code`: المبلغ المحوّل مسبقاً الذي أرسلته في الطلب، ويُعاد إليك كما هو؛ وتكون `null` إذا لم ترسل مبلغاً.
* `preferred_currency_amount` / `preferred_currency_code`: القيمة `amount` بعد تحويلها إلى العملة المفضلة لتطبيقك. تكون `null` عندما لا يتوفر سعر صرف للعملة `currency` ولم ترسل `amount_in_default_currency`.
* `payment_details` / `payment_txn_id`: المرجع النصي الحر للدفعة، والمرجع الخارجي للدفعة (مثل هاش معاملة البلوكتشين) كما وردا في الطلب.

### حقول الحالة

* `status`: القيم `APPROVED` و`IN_REVIEW` و`DECLINED` و`AWAITING_USER`. تُنشأ المعاملات بالحالة `APPROVED`، ويمكن للقواعد أن تغيّرها فوراً وبشكل متزامن.
* `score`: درجة المخاطر الصحيحة المتراكمة من القواعد. كلما ارتفعت الدرجة زادت المخاطر.
* `severity`: القيم `UNKNOWN` و`LOW` و`MEDIUM` و`HIGH` و`CRITICAL`، أو `null` إلى أن تحدد قاعدة أو مزوّد الخدمة الشدة.
* `decision_reason_code` / `decision_reason_label`: سبب الحالة الحالية في صيغة منظمة وفي صيغة مقروءة للإنسان.
* `environment`: القيمة `live` أو `sandbox`، وهي مأخوذة من التطبيق الذي تنتمي إليه المعاملة. المعاملة `sandbox` تُخزَّن ولا تخضع للتقييم أبداً، لذلك فإن `rule_runs` الفارغة فيها تعني "لم يُقيَّم"، لا "لم تتطابق أي قاعدة". راجع [مراقبة المعاملات في البيئة التجريبية](https://docs.didit.me/ar/integration/sandbox-testing.md#مراقبة-المعاملات-في-البيئة-التجريبية).
* `source`: القيمة `LIVE` للمعاملات المُرسلة عبر API أو SDK، والقيمة `IMPORTED` للمعاملات المُحمّلة عبر استيراد CSV من وحدة التحكم.

### الأطراف

يُسجَّل كل طرف في المعاملة كعنصر ضمن `parties`. يُسجّل endpoint الإنشاء الطرف المعني بالقيمة `APPLICANT`، والطرف المقابل الاختياري بالقيمة `COUNTERPARTY`. ويتضمن التعداد `role` أيضاً القيمتين `REMITTER` و`BENEFICIARY`. وتشترك جميع العناصر في بنية واحدة.

```json theme={null}
"parties": [
  {
    "uuid": "b1111111-2222-4333-8444-555555555555",
    "role": "APPLICANT",
    "entity_type": "individual",
    "kind": "USER",
    "vendor_data": "user-42",
    "full_name": "John Doe",
    "first_name": "John",
    "last_name": "Doe",
    "country_code": "USA",
    "dob": "1990-01-01",
    "address": { "line_1": "...", "city": "...", "country": "USA" },
    "institution_info": { "name": "...", "country_code": "..." },
    "device": {
      "fingerprint": "...",
      "persistent_device_id": "...",
      "user_agent": "...",
      "browser_family": "Chrome",
      "browser_version": "131.0",
      "platform": "web",
      "os_family": "Windows",
      "os_version": "10.0",
      "accept_language": "en-US,en;q=0.9",
      "session_id": "...",
      "session_age_ms": 84000,
      "metadata": {
        "accept_language": "en-US,en;q=0.9",
        "session_id": "...",
        "session_age_ms": 84000
      },
      "network_context": {
        "ip_address": "203.0.113.5",
        "ip_country": "United States",
        "ip_country_code": "US",
        "ip_state": "California",
        "ip_city": "San Francisco",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "isp": "Example ISP",
        "organization": "Example Org",
        "is_vpn_or_tor": false,
        "is_data_center": false,
        "time_zone": "America/Los_Angeles",
        "time_zone_offset": "-0700",
        "asn_number": 64496,
        "asn_organization": "Example ISP",
        "connection_type": "isp",
        "carrier": null,
        "proxy_type": null
      }
    },
    "external_party_snapshot": null
  },
  {
    "uuid": "c2222222-3333-4444-8555-666666666666",
    "role": "COUNTERPARTY",
    "entity_type": "company",
    "kind": "EXTERNAL",
    "vendor_data": null,
    "full_name": "Acme Supplier",
    "first_name": null,
    "last_name": null,
    "country_code": "GBR",
    "dob": null,
    "address": {},
    "institution_info": {},
    "device": {},
    "external_party_snapshot": { "full_name": "Acme Supplier", "country": "GBR", "...": "..." }
  }
]
```

* `role`: القيم `APPLICANT` و`COUNTERPARTY` و`REMITTER` و`BENEFICIARY`. استخدم هذا الحقل للتصفية لإيجاد الطرف المعني.
* `entity_type`: القيم `individual` و`company` و`external` و`unhostedWallet`، كما أُرسلت.
* `kind`: القيمة `USER` أو `BUSINESS` عندما يرتبط الطرف بمستخدم أو شركة لدى Didit عبر `vendor_data`، والقيمة `EXTERNAL` في غير ذلك.
* `country_code` / `dob`: مأخوذان من `address.country` و`date_of_birth` المُرسلين.
* `address` / `institution_info`: الكائنان كما أُرسلا، ويكونان `{}` إذا لم يُرسلا.
* `external_party_snapshot`: نسخة مجمّدة من بيانات الطرف للأطراف من النوع `EXTERNAL`، وتكون `null` طالما أن الطرف مرتبط بمستخدم أو شركة لدى Didit.

#### `device`

الحقل `device` هو `device_context` الذي أرسلته لذلك الطرف، بعد تحويل مفاتيحه إلى صيغة snake\_case، مع الإثراء الذي يجريه الخادم لعنوان IP. يكون `{}` إذا لم يتضمن الطلب أي سياق للجهاز، لذلك عامِل كل مفتاح على أنه اختياري دائماً.

| المفتاح | الوصف |
| - | - |
| `fingerprint`, `persistent_device_id` | معرّفات الجهاز كما أُرسلت. |
| `user_agent`, `browser_family`, `browser_version`, `platform`, `os_family`, `os_version` | خصائص المتصفح ونظام التشغيل كما أُرسلت. لا يُشتق `browser_family` و`platform` مطلقاً من `user_agent`. |
| `accept_language`, `session_id`, `session_age_ms` | خصائص الجلسة كما أُرسلت. وتُنسخ أيضاً إلى `device.metadata` بالأسماء نفسها، وهو المكان الذي يخزّنها فيه مسار SDK. |
| `metadata` | يظهر عندما يتضمن الطلب كائن `metadata` أو أياً من خصائص الجلسة الثلاث. |
| `network_context` | سياق الشبكة، انظر أدناه. ويغيب عندما لا تُرسل بيانات عنوان IP أو الشبكة. |

لا يوجد كائن إثراء منفصل. عندما يتضمن الطرف عنوان IP عاماً في `network_context.ip_address`، يحلّ Didit العنوان مباشرةً ويكتب [الحقول المُثرّاة](https://docs.didit.me/ar/transaction-monitoring/ip-enrichment.md#الحقول-المُثراة) في الكائن `network_context` نفسه، ولا يملأ إلا المفاتيح التي لم ترسلها. وتُحذف المفاتيح التي أعادها المحلّل فارغة، لذلك يحتوي `network_context` المُثرّى بالكامل على المفاتيح الأربعة المُرسلة (`ip_address`, `ip_country_code`, `latitude`, `longitude`) مع أي من المفاتيح التالية التي جرى تحديدها: `ip_country` و`ip_state` و`ip_city` و`isp` و`organization` و`is_vpn_or_tor` و`is_data_center` و`time_zone` و`time_zone_offset` و`asn_number` و`asn_organization` و`connection_type` و`carrier` و`proxy_type`. ويكون `is_vpn_or_tor` و`is_data_center` موجودين دائماً بعد نجاح عملية الحل.

يُتخطى الإثراء، ويُعاد `network_context` كما أُرسل تماماً، عندما يكون عنوان IP مفقوداً أو غير قابل للتوجيه، أو عندما يكون التطبيق في البيئة التجريبية، أو عندما يفشل الحل. ويكون `ip_country_code` بصيغة ISO 3166-1 alpha-2 عندما يحدده Didit، وبالقيمة التي أرسلتها في الحالات الأخرى؛ وتوحّد شروط القواعد الصيغتين قبل المقارنة.

### طرق الدفع

```json theme={null}
"payment_methods": [
  {
    "uuid": "...",
    "payment_method_type": "bank_account",
    "label": null,
    "fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
    "account_id": "DE89370400440532013000",
    "issuing_country": "DE",
    "owner_kind": "USER",
    "vendor_data": "user-42",
    "owner_name": "John Doe",
    "institution_info": {},
    "details": { "method_type": "bank_account", "account_id": "DE89370400440532013000", "issuing_country": "DE" },
    "external_owner_snapshot": null,
    "role": "SOURCE"
  }
]
```

* `role`: القيم `SOURCE` و`DESTINATION` و`FUNDING` و`BENEFICIARY`. يُعيّن endpoint الإنشاء القيمتين `SOURCE` و`DESTINATION` بحسب `direction`: في المعاملة الصادرة تكون طريقة الطرف المعني هي `SOURCE` وطريقة الطرف المقابل هي `DESTINATION`، وفي المعاملة الواردة يكون العكس.
* `payment_method_type`: القيم `bank_card` و`bank_account` و`e_wallet` و`crypto_wallet` و`unhosted_wallet` و`other`.
* `fingerprint`: قيمة SHA-256 تُحسب على `type:account_id:issuing_country`، وتبقى ثابتة عبر المعاملات، لتتمكن من ربط إعادة استخدام الأداة المالية نفسها. وتكون `null` إذا لم يُرسل `account_id`.
* `owner_kind` / `vendor_data` / `owner_name`: من يملك الأداة المالية، وفق الاصطلاح نفسه `USER` / `BUSINESS` / `EXTERNAL` المستخدم للأطراف.
* `details`: كائن `payment_method` الخام كما أُرسل.

### تشغيلات القواعد

```json theme={null}
"rule_runs": [
  {
    "uuid": "...",
    "rule": "f6a7b8c9-0123-4def-b012-3456789abcde",
    "rule_title": "High-value outbound",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "MEDIUM",
    "score_delta": 30,
    "status_target": null,
    "action_summary": "score +30",
    "metadata": {
      "scope_match": true,
      "conditions": [
        {
          "field": "amount",
          "operator": "gt",
          "expected_value": "10000",
          "current_value": "12500",
          "matched": true,
          "group_index": null,
          "group_logic": "AND",
          "field_source": null
        }
      ],
      "aggregations": []
    },
    "created_at": "2026-04-16T12:00:01Z"
  },
  {
    "uuid": "...",
    "rule": "...",
    "rule_title": "High-risk jurisdiction counterparty",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "HIGH",
    "score_delta": 35,
    "status_target": "IN_REVIEW",
    "action_summary": "score +35; change_status:IN_REVIEW; add_tag:high_risk_country",
    "metadata": { "scope_match": true, "conditions": [ ... ], "aggregations": [] },
    "created_at": "2026-04-16T12:00:01Z"
  }
]
```

* `rule`: معرّف UUID للقاعدة التي تم تشغيلها، و`rule_title` و`rule_description` و`rule_category` منسوخة منها.
* `matched`: لا يُسجَّل التشغيل إلا عندما تتطابق شروط القاعدة، لذلك تحمل تقييمات الإنتاج دائماً القيمة `matched: true`. ولا تترك القواعد التي قُيّمت دون تطابق أي سجل. وقد تتضمن بيانات العرض التوضيحي صفوفاً بالقيمة `matched: false`.
* `is_test` / `mode`: القيمتان `true` و`TEST` عندما تعمل القاعدة في وضع الاختبار؛ ويُسجَّل تشغيل الاختبار لكنه لا يؤثر في `status` أو `score` أو `severity`.
* `score_delta` / `status_target` / `severity`: ما أسهم به هذا التشغيل. يُضبط `status_target` عندما يُنفَّذ إجراء `change_status`، أو عندما تتجاوز الدرجة المضافة [الحد](https://docs.didit.me/ar/transaction-monitoring/risk-scoring.md).
* `action_summary`: نص يلخّص الإجراءات التي نفّذتها القاعدة، مفصولة بـ `; ` (`score +30`, `change_status:IN_REVIEW`, `add_tag:<name>`, `add_note`, `add_to_list`, `open_case`)؛ وتكون `null` إذا لم تنفّذ القاعدة أي إجراء.
* `metadata`: تفاصيل التقييم، وتشمل `scope_match`، بالإضافة إلى `conditions[]` و`aggregations[]`. تستخدم القائمتان مفاتيح قيم مختلفة:
  * `conditions[]`: عنصر واحد لكل شرط، ويحمل `field` و`operator` و`expected_value` و`current_value` التي قُرئت من المعاملة و`matched` و`group_index` و`group_logic`. تكون `field_source` دائماً `null` في تشغيلات قواعد المعاملات، ولا تُصنَّف إلا لـ[أحداث المراقبة](https://docs.didit.me/ar/transaction-monitoring/events.md).
  * `aggregations[]`: عنصر واحد لكل تجميع من نوع معدل التكرار أو العدد أو المجموع، ويحمل `metric` و`field` و`operator` و`expected_value` و`computed_value` الذي وصل إليه التجميع و`window` و`filters` و`matched` و`sample_references`. وتحمل التجميعات التي لا يمكن حسابها إلا بشكل غير متزامن القيمة `computed_value: null` والقيمة `deferred: true`.

### التنبيهات

`alerts` مصفوفة فارغة دائمًا في الوقت الحالي.
التنبيه المفتوح يعني معاملة محجوزة، لذا اقرأ `status` بدلًا من ذلك (`IN_REVIEW` أو `AWAITING_USER`). راجع [التنبيهات](https://docs.didit.me/ar/transaction-monitoring/alerts.md).

### الأنشطة

سجل أنشطة المعاملة: الإنشاء والملاحظات والمراجعات اليدوية وتغييرات الحالة.

```json theme={null}
"activities": [
  {
    "uuid": "...",
    "activity_type": "TRANSACTION_CREATED",
    "source": "TRANSACTION",
    "status": "APPROVED",
    "title": "withdrawal",
    "description": null,
    "metadata": { "action_type": "withdrawal", "direction": "OUTBOUND", "amount": "12500", "currency": "EUR" },
    "occurred_at": "2026-04-16T12:00:00Z"
  }
]
```

تظهر ملاحظات المحلل هنا كإدخالات `TRANSACTION_NOTE_ADDED`؛ لا توجد مصفوفة `notes` منفصلة.

### المستندات

ملفات مرفقة بالمعاملة من وحدة التحكم. تكون `[]` عند عدم وجود ملفات.

```json theme={null}
"documents": [
  {
    "uuid": "...",
    "label": "Invoice",
    "note": null,
    "uploaded_by": "...",
    "created_at": "2026-04-16T12:05:00Z",
    "files": [
      { "uuid": "...", "file_url": "https://...", "original_filename": "invoice.pdf", "file_size": 48213 }
    ]
  }
]
```

`file_url` رابط موقّع قصير الأمد؛ اجلبه عند الحاجة بدلًا من تخزينه.

### نتائج المزوّدين

مخرجات مزوّدين خارجيين (فحص تجزئة المعاملة، وفحص المحافظ، ومراقبة العملات الفيات، وفحص العقوبات).

```json theme={null}
"provider_results": [
  {
    "uuid": "...",
    "result_type": "TRANSACTION_SCREENING",
    "provider": "merklescience",
    "status": "SCREENED",
    "severity": "HIGH",
    "score": 82,
    "summary": "Merkle Science risk: High (4/5). Dominant risk: stolen_funds. Driven by: 50% direct incoming exposure to Theft / Hack (Stolen Funds)",
    "payload": {
      "provider": "merklescience",
      "screening_type": "TRANSACTION_SCREENING",
      "transaction_hash": "0x...",
      "wallet_address": null,
      "blockchain": "ETH",
      "block_timestamp": "2026-04-01T00:07:11Z",
      "total_value_usd": 2942.31,
      "fee_usd": 0.09,
      "transaction_flows": [
        {
          "flow_type": "token",
          "from_address": "0x...",
          "to_address": "0x...",
          "amount": 72.83039728,
          "amount_usd": 235.97,
          "currency": "UNI",
          "token_name": "Uniswap",
          "token_address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
          "transaction_hash": "0x...",
          "block_timestamp": "2026-04-01T00:07:11Z",
          "index": 460,
          "success": true,
          "metadata": {
            "provider": "blockscout",
            "token_type": "ERC-20",
            "token_icon_url": "https://...",
            "token_reputation": "ok",
            "token_holders_count": "410093",
            "from": {
              "label": "ravaga.eth",
              "tags": [{ "name": "Beacon Depositor", "type": "generic" }]
            },
            "to": {
              "label": "AirSwap: Spender",
              "is_contract": true,
              "is_verified": true
            }
          }
        }
      ],
      "source_of_funds": [
        {
          "category": "stolen_funds",
          "entity_name": "Stolen Funds",
          "entity_type": "Theft",
          "entity_subtype": "Hack",
          "exposure_direction": "incoming",
          "exposure_type": "direct",
          "is_direct": true,
          "amount_usd": 1471.16,
          "percentage": 50,
          "country": ""
        }
      ],
      "destination_of_funds": [],
      "counterparty_connections": [],
      "sanctions_hit": false,
      "risk_factors": [
        {
          "source": "exposure",
          "category": "stolen_funds",
          "label": "Theft / Hack",
          "entity_name": "Stolen Funds",
          "direction": "incoming",
          "exposure_type": "direct",
          "amount_usd": 1471.16,
          "percentage": 50,
          "is_high_risk": true,
          "description": "50% direct incoming exposure to Theft / Hack (Stolen Funds)"
        }
      ],
      "raw_response": { "...": "provider-specific details" }
    },
    "created_at": "2026-04-16T12:00:02Z"
  }
]
```

`result_type`: `FIAT_MONITORING`, `WALLET_SCREENING`, `TRANSACTION_SCREENING`, `TRAVEL_RULE`, `NETWORK_GRAPH`, `CUSTOM`.

`payload.risk_factors` هو التفسير المرتب لـ `score`: ما الذي أنتج الحكم، مع عرض عوامل الخطر المرتفعة أولًا ثم بحسب قيمة المبالغ المحوّلة. تعني `score` مرتفعة دون إدخال `is_high_risk` أن المزوّد صنّف الكيان وفق نموذج التعرض الخاص به دون الإبلاغ عن تطابق مع العقوبات أو مع كيان منسوب؛ وتوضح `summary` ذلك صراحةً. المرجع التفصيلي للحقول: [عوامل المخاطر](https://docs.didit.me/ar/transaction-monitoring/wallet-screening.md#عوامل-المخاطر). النتائج التي فُحصت قبل إضافة هذا الحقل لا تتضمن هذا المفتاح.

في فحص تجزئة معاملات العملات المشفرة، يُعبَّأ `transaction_flows` عند توفر الإثراء على السلسلة. وهو يطبّع نشاط السلسلة حتى تتمكن وحدة التحكم من عرض نظرة عامة على المعاملة ومخطط التصور من حمولة الاستجابة نفسها.

مصادر الإثراء المدعومة:

* تستخدم سلاسل EVM خدمة Blockscout لتطبيع المعاملة الرئيسية والاستدعاءات الداخلية وتحويلات الرموز.
* يستخدم Bitcoin خدمة mempool.space لتطبيع مدخلات المعاملة ومخرجاتها.
* يستخدم Solana خدمة Helius لتطبيع تحويلات SOL الأصلية وتحويلات رموز SPL وسياق أحداث NFT المتاح.

يتضمن كل عنصر في `transaction_flows[]` حقولًا مُطَبَّعة ثابتة (`flow_type`, `from_address`, `to_address`, `amount`, `amount_usd`, `currency`, `token_name`, `token_address`, `transaction_hash`, `block_timestamp`, `index`, `success`) إضافةً إلى `metadata` خاصة بالمزوّد.

أمثلة شائعة على `metadata`:

```json theme={null}
{
  "provider": "blockscout",
  "decoded_method_call": "swap(string aggregatorId, address tokenFrom, uint256 amount, bytes data)",
  "block_number": 23141214,
  "gas_used": "171843",
  "fee_native": 0.000342317619518133,
  "token_icon_url": "https://...",
  "token_reputation": "ok"
}
```

```json theme={null}
{
  "provider": "mempool",
  "role": "input",
  "previous_txid": "4c0c...",
  "previous_vout": 0,
  "scriptpubkey_type": "v0_p2wpkh",
  "fee_btc": 0.00000322,
  "block_height": 943130
}
```

```json theme={null}
{
  "provider": "helius",
  "source": "MAGIC_EDEN",
  "type": "NFT_BID",
  "description": "Wallet bid 2.5 SOL on an NFT.",
  "slot": 136658192,
  "fee_sol": 0.000005,
  "nft_event": {
    "type": "NFT_BID",
    "source": "MAGIC_EDEN",
    "nft_mints": ["3bUW..."]
  }
}
```

`metadata` إضافية وخاصة بالمزوّد. لا تبنِ تكاملات حرجة تشترط وجود كل مفتاح في كل سلسلة.

### Travel Rule

تكون `null` عندما لا تتضمن المعاملة تحويل Travel Rule أو فحصه. تُعبَّأ عند إرسالك `travel_rule_details`، وكذلك عندما تكون [Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md) مفعّلة للتطبيق وأُنشئت المعاملة بالقيمة `transaction_category: "travelRule"`: عندئذٍ يبدأ Didit تبادل البيانات بنفسه، سواء أُرسل `travel_rule_details` أم لم يُرسَل، ويعرض حالته `status` هنا. اقرأ هذا الحقل بدلًا من الطلب الذي أرسلته.
في التحويل الوارد، تبقى `originator_data` و`beneficiary_data` الخاصتان بالطرف المقابل مخفيتين (`data_masked: true`) إلى أن تُؤكَّد ملكية المحفظة (راجع [بيانات الطرف المقابل المخفية](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#بيانات-الطرف-المقابل-المقنّعة)).

```json theme={null}
"travel_rule": {
  "uuid": "...",
  "status": "COMPLETED",
  "required": true,
  "protocol": "TRP",
  "obligations_count": 2,
  "originator_data": { "name": "...", "wallet_address": "..." },
  "beneficiary_data": { "name": "...", "wallet_address": "..." },
  "metadata": {},
  "direction": "OUTBOUND",
  "rail": "TRP",
  "counterparty_vasp": null,
  "delivery": {
    "kind": "SEND",
    "status": "DELIVERED",
    "rail": "TRP",
    "attempts": 1,
    "last_error": "",
    "next_attempt_at": null,
    "delivered_at": "..."
  },
  "discovery": [ ... ],
  "reason": "",
  "next_actions": []
}
```

تحمل الحقول `direction` و`rail` و`counterparty_vasp` و`delivery` و`discovery` و`reason` و`next_actions` البنية نفسها الموجودة على endpoint الخاص بالتحويل.
يوضح `reason` و`next_actions` سبب توقف تحويل `COUNTERPARTY_VASP_NOT_FOUND` أو `COUNTERPARTY_VASP_NOT_REACHABLE` وما الذي يدفعه إلى الأمام، وتكونان `""` و`[]` لأي حالة أخرى: راجع [سبب توقف التحويل](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#لماذا-يتوقف-التحويل).
يتضمن كل صف في [`GET /v3/transactions/`](https://docs.didit.me/ar/management-api/transactions/list) الكتلة نفسها.

راجع [Travel Rule](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md).

### لقطة الشبكة

المخطط المخزَّن نفسه، لا مرجع إليه. ويأتي من أحد المصدرين:

* `network_snapshot` أرسلته مع المعاملة، أو
* المخطط الذي يبنيه Didit عند نجاح [فحص المحافظ بـ AML](https://docs.didit.me/ar/transaction-monitoring/aml-screening.md) لمعاملة بعملة مشفّرة، حتى لو لم يتضمن الطلب `network_snapshot`. يحلّ المخطط المبني من الفحص محل المخطط المُرسَل، وتُحدّثه إعادة فحص غير متزامنة.

تكون `null` عند عدم وجود أيٍّ منهما:

```json theme={null}
"network_snapshot": {
  "uuid": "...",
  "nodes": [ ... ],
  "edges": [ ... ],
  "metrics": { }
}
```

تعرض صفحة تفاصيل المعاملة في وحدة التحكم المخطط نفسه.

### الوسوم والبيانات الوصفية والخصائص

* `tags[]`: الوسوم المرفقة (إما بإجراء قاعدة أو بواسطة المحلل): `{ "uuid", "name", "color", "description", "source" }`، حيث تكون قيمة `source` هي `didit` للوسم المعدّ مسبقًا و`custom` للوسم الخاص بك.
* `metadata`: لقطة من بيانات `subject` و`counterparty` تمامًا كما أرسلتها وقت الإنشاء، ضمن هذين المفتاحين.
* `props`: قيم `custom_properties` التي أرسلتها وقت الإنشاء. يمكن الإشارة إلى كل مفتاح في شروط القواعد باستخدام `custom_values.<key>`.

### المعالجة

عندما تُشغّل قاعدةٌ الحالة `AWAITING_USER`، ينشئ Didit جلسة التحقق المرتبطة ويعيدها في حقلين:

* `remediation`: الجلسة المرتبطة: `{ "session_id", "session_token", "url", "status" }`. تبقى مُعبّأة طوال عمر المعاملة، لتتمكن دائمًا من معرفة كيف انتهى إجراء المستخدم.
* `action_required`: الإجراء الذي يجب على المستخدم اتخاذه الآن، أو `null` عندما لا يكون هناك شيء معلّق: `{ "type": "verification_session", "url", "session_id", "session_token", "status" }`. وجِّه المستخدم إلى `url`، أو مرّر `session_token` إلى Didit SDK. تستخدم إجراءات ملكية المحفظة في Travel Rule الكتلة `{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }`، وتكون لها الأولوية عندما ينطبق الاحتمالان معًا. وعندما يكون إجراء ملكية المحفظة معلّقًا ولم يُعثر على الطرف المقابل للتحويل، تتضمن الكتلة نفسها أيضًا `reason` و`next_actions` (راجع [اكتشاف الطرف المقابل](https://docs.didit.me/ar/transaction-monitoring/travel-rule.md#اكتشاف-الطرف-المقابل)).

يرد الحقلان نفسهما في حمولتي webhook الخاصّتين بـ `transaction.created` و`transaction.status.updated` (`action_required`)، راجع [webhooks](https://docs.didit.me/ar/transaction-monitoring/webhooks.md).

### تفصيل التكلفة

تكون `null` إلى أن تُنفَّذ ميزة خاضعة للفوترة للمعاملة. وإلا فهي `{ "total_price", "items": [ { "usage_type", "price", "details" } ] }`، بعنصر واحد لكل ميزة تُحتسب بالاستخدام (الفحص، والإثراء، وغير ذلك).

## تحويل العملات

`preferred_currency_amount` هي قيمة `amount` بعد تحويلها إلى العملة المفضلة لتطبيقك وفق أسعار السوق المتوسطة، ما لم تُرسل `amount_in_default_currency`، وفي هذه الحالة تُستخدم القيمة المحوّلة مسبقاً كما هي. تقارن شروط القواعد التي تستخدم `amount` المبلغ الأصلي؛ استخدم `preferred_currency_amount` في الشروط عندما تحتاج إلى حد واحد عبر العملات.

## الخطوات التالية

> [card] [إرسال المعاملات](https://docs.didit.me/ar/transaction-monitoring/transactions.md)
>
> مخطط الطلب الكامل.

> [card] [الحالات](https://docs.didit.me/ar/transaction-monitoring/statuses.md)
>
> ما تعنيه كل حالة.

> [card] [احتساب الدرجات](https://docs.didit.me/ar/transaction-monitoring/risk-scoring.md)
>
> كيف تُحسب الدرجة.


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