---
title: "غرفة بيانات الطالب"
url: https://docs.growamal.com/ar/guides/data-room/
language: ar
---

# غرفة بيانات الطالب

غرفة البيانات (WP-DATA-ROOM-BE) هي **طبقة توثيق القرار** لكل طالب: تجمع أدلة الطفل ذات الصلة
بالقرار في ملفّ قابل للمراجعة ومُرسَّخ للتدقيق، وتوفّر هيكل حزمة القرار الذي يُبنى عليه سير عمل
انتقال المستوى. وهي لا تقرّر؛ فالقواعد في محركات حالة المهارة والمراقبة و RTI والملف الشخصي تبقى
هي صاحبة القرار؛ وغرفة البيانات تجعل كل قرار حسّاس يُظهر شواهده.

> **ملاحظة:** غرفة البيانات لا تكتب مستوى أبداً. تقرأ وتؤلّف `tier_decision_record`؛ ومسار كتابة المستوى الوحيد
> هو محرك RTI. والأدلة مُفهرسة لا منسوخة: كل صفّ فهرس يشير إلى سجلّه الأصلي.

## المسارات

| الطريقة | المسار | الصلاحية |
|---|---|---|
| `GET` | `/api/students/{id}/data-room` | `VIEW_OWN_CLASSES` (ClassTeacher) أو `RUN_BACKOFFICE` |
| `GET` | `/api/students/{id}/data-room/evidence` | `VIEW_OWN_CLASSES` (ClassTeacher) أو `RUN_BACKOFFICE` |
| `POST` | `/api/students/{id}/decision-packets` | `VIEW_OWN_CLASSES` (ClassTeacher) أو `RUN_BACKOFFICE` |
| `GET` | `/api/decision-packets/{id}` | `VIEW_OWN_CLASSES` (ClassTeacher) أو `RUN_BACKOFFICE` |
| `GET` | `/api/students/{id}/decision-history` | `VIEW_OWN_CLASSES` (ClassTeacher) أو `RUN_BACKOFFICE` |

معرّف الطالب `id` ومعرّف الحزمة `id` عددان صحيحان موجبان. وتُقيِّد كل المسارات الوصول بصف الطالب
عبر حارس ClassTeacher داخل المعالج؛ ويعيد المعرّف خارج المؤسسة أو خارج النطاق `404`. ولا توجد عمداً
**أي نقطة وصول للطالب**؛ فالطلاب لا يرون غرفة البيانات أبداً.

## ‏`GET /data-room`: الملفّ

يعيد الملفّ ملخّصات الأدلة الثمانية وحالة كفاية البيانات. ويفرض `?refresh=true` تحديثاً جديداً قبل
القراءة.

```bash
curl https://localhost:3000/api/students/42/data-room \
  -H "Authorization: Bearer <accessToken>"
```

```json
{
  "studentId": 42,
  "dataSufficiencyStatus": "insufficient",
  "nextRecommendedAction": "...",
  "summaryBlocks": {
    "benchmark": { },
    "cbmTrend": { },
    "practice": { },
    "paperChecks": { },
    "maintenance": { },
    "errorPatterns": { },
    "fidelity": { },
    "behaviorFlags": { }
  },
  "updatedAt": "2026-06-20T10:00:00.000Z"
}
```

‏`dataSufficiencyStatus` هو `sufficient` / `insufficient` / `contextual` (أو null حين لا توجد غرفة
بيانات بعد). والملخّصات تجميعات يولّدها النظام من أدلة مُشار إليها، لا نصّ حر أبداً، ولا مُدخَل لأي
قاعدة. وعندما تكون مهارة مساهِمة في حالة `do_not_decide_yet`، أو الأدلة دون العتبة القابلة
للمقارنة، تُبلِّغ الحالة `insufficient` ويحمل `nextRecommendedAction` إجراء البيانات التالي، لا
حركة أبداً.

## ‏`GET /data-room/evidence`: فهرس الأدلة

يصفّح فهرس الأدلة الأدلةَ المُشار إليها؛ وكل صفّ يشير إلى سجلّه الأصلي. ويرشّح حسب `evidenceType`
و`validityStatus` (`valid` / `use_with_caution` / `invalid`) و`includedInDecisionPacket`، مع `limit`
(1 إلى 200، الافتراضي 50) و`offset`.

```bash
curl "https://localhost:3000/api/students/42/data-room/evidence?validityStatus=valid&limit=20" \
  -H "Authorization: Bearer <accessToken>"
```

أدلة التطبيق غير الصالحة تبقى مُفهرسة (لا يُحذف شيء) لكنها تُستبعَد من حساب الكفاية.

## ‏`POST /decision-packets`: فتح هيكل حزمة

يلتقط فتحُ الحزمة الأدلةَ بالإشارة ويثبّت إصدارات القواعد التي قرأها، فتُعاد الحزمة حرفاً بحرف بعد
سنوات. ويحمل الجسم فقط `reviewType` وبيانات الإطلاق وأعلام السياق المضبوطة الاختيارية، ولا يوجد
**أي حقل نصّ حر**.

```bash
curl -X POST https://localhost:3000/api/students/42/decision-packets \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "reviewType": "tier_review",
    "triggerSource": "system",
    "triggerRuleId": "DATA_ROOM_OPEN_PACKET",
    "contextFlagIds": ["CTX_RECENT_ABSENCE"]
  }'
```

‏`reviewType` هو `profile_bundle` / `tier_review` / `plan_adjustment` / `maintenance_review`.
و`triggerSource` هو `system` / `v3` / `add`. وفتحٌ ثانٍ لنفس `reviewType` يعيد `409`؛ وعلمُ سياقٍ
محظورٌ أو غير معروف يعيد `422`. وتحمل الاستجابة `packetId` و`snapshottedEvidenceCount`.

يعيد `GET /api/decision-packets/{id}` الحزمة الكاملة بما فيها إصدارات القواعد المثبَّتة ولقطة
الأدلة (إشارات). والحزمة المغلقة غير قابلة للتعديل إلى الأبد.

## ‏`GET /decision-history`

سجلّ القرار تسلسلٌ زمني محسوب: دمجٌ من الأحدث أولاً لـ `tier_decision_record` و`decision_packet`
و`teacher_action_log`. وهو للقراءة فقط؛ تؤلّف غرفة البيانات التسلسل لكنها لا تكتب أياً من السجلات
الأساسية.

## الثوابت

- **غرفة البيانات لا تكتب مستوى أبداً.** تقرأ وتؤلّف `tier_decision_record`؛ ومسار كتابة المستوى
  الوحيد هو محرك RTI (مُثبَت بـ `lint:data-room-single-write-path`).
- **الأدلة مُفهرسة لا منسوخة.** تبقى الصفوف غير الصالحة مُفهرسة (لا يُحذف شيء) لكنها تُستبعَد من
  حساب الكفاية.
- **البيانات الضعيفة تمنع القرار القوي.** مهارة `do_not_decide_yet` أو أدلة دون العتبة تعطي
  `insufficient` وإجراء البيانات التالي، لا حركة أبداً.
- **حزمة غير قابلة للتعديل (V-6).** فتح الحزمة يثبّت كل إصدار قرأه؛ والحزمة المغلقة تُعاد حرفاً
  بحرف.
- **إلحاق فقط** (القابل للتعديل فقط هو `summaryBlocks` / `includedInDecisionPacket` / `status`)،
  و**لا نصّ حر** (أعلام سياق مضبوطة فقط)، و**لا نموذج لغوي (V-5)**، و**معزول حسب المؤسسة**
  (`organizationId`؛ عبر المؤسسات `404`)، و**غير ظاهر للطالب أبداً**.

## أدلة ذات صلة

- [قرارات الاستجابة للتدخل والمستويات](https://docs.growamal.com/ar/guides/rti-decisions/): المحرك الذي يملك مسار كتابة المستوى الوحيد
- [حزم القرار](https://docs.growamal.com/ar/guides/decision-packets/): سير العمل الذي يجمّع حزمة غنية فوق هذا الهيكل
- [متتبّع أمانة تنفيذ التدخل](https://docs.growamal.com/ar/guides/fidelity-tracker/): تجميع الأمانة المقروء في الملفّ
- [مراقبة التقدم](https://docs.growamal.com/ar/guides/progress-monitoring/): مصدرٌ للأدلة التي يفهرسها الملفّ
