غرفة بيانات الطالب
غرفة البيانات (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 تحديثاً جديداً قبل
القراءة.
curl https://localhost:3000/api/students/42/data-room \
-H "Authorization: Bearer <accessToken>"{
"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.
curl "https://localhost:3000/api/students/42/data-room/evidence?validityStatus=valid&limit=20" \
-H "Authorization: Bearer <accessToken>"أدلة التطبيق غير الصالحة تبقى مُفهرسة (لا يُحذف شيء) لكنها تُستبعَد من حساب الكفاية.
POST /decision-packets: فتح هيكل حزمة
يلتقط فتحُ الحزمة الأدلةَ بالإشارة ويثبّت إصدارات القواعد التي قرأها، فتُعاد الحزمة حرفاً بحرف بعد
سنوات. ويحمل الجسم فقط reviewType وبيانات الإطلاق وأعلام السياق المضبوطة الاختيارية، ولا يوجد
أي حقل نصّ حر.
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)، وغير ظاهر للطالب أبداً.
أدلة ذات صلة
- قرارات الاستجابة للتدخل والمستويات: المحرك الذي يملك مسار كتابة المستوى الوحيد
- حزم القرار: سير العمل الذي يجمّع حزمة غنية فوق هذا الهيكل
- متتبّع أمانة تنفيذ التدخل: تجميع الأمانة المقروء في الملفّ
- مراقبة التقدم: مصدرٌ للأدلة التي يفهرسها الملفّ