Skip to Content

متتبّع أمانة تنفيذ التدخل

يجيب متتبّع أمانة التنفيذ (WP-FID-BE) عن سؤال واحد قبل أي تصعيد للمستوى: هل نُفِّذت الخطة فعلاً؟ يحسب نسبة الأمانة (الجلسات المنفَّذة ÷ المخطَّطة) لإسناد حزمة نشط، ويربطها بتصنيف، ويراجع إشارة النمو من مراقبة التقدم، ويعيد حكماً مع علم escalationBlocked. يقرأ محرك RTI هذه البوابة مباشرةً قبل أي انتقال من المستوى الثاني إلى الثالث.

المغزى التربوي: الخطة التي لم تنجح مختلفة عن الخطة التي لم تُنفَّذ. التنفيذ الأمين (≥80٪) مع نمو ضعيف قد يُصعِّد (فالخطة جُرِّبت ولم تنجح) — لكن ≥80٪ وحدها لم تعد كافية (انظر دورة الخروج عن المسار أدناه): فعَلَم major_fidelity_issue_flag (جلسات قصيرة جداً / مواد ناقصة / تنفيذ غير مطابق) يجعل النتيجة غير قابلة للبتّ بعد، حتى عند ≥0.80. ودون 80٪ مع نمو ضعيف يُحظر، إذ لا يمكن إدانة خطة لم تُنفَّذ قط. وغياب بيانات الجلسات يعيد cannot_evaluate_yet، لا تمريراً بالتخمين أبداً. وفي كل حالة “غير قابلة للبتّ” تكون الفجوة في التنفيذ، لا في عدم استجابة الطالب أبداً.

المسارات

الطريقةالمسارالصلاحية
GET/api/fidelity/{bundleAssignmentId}/checkVIEW_OWN_CLASSES (ClassTeacher) أو RUN_BACKOFFICE
GET/api/fidelity/{bundleAssignmentId}VIEW_OWN_CLASSES (ClassTeacher) أو RUN_BACKOFFICE
POST/api/fidelity/{bundleAssignmentId}/recomputeVIEW_OWN_CLASSES (ClassTeacher) أو RUN_BACKOFFICE
POST/api/fidelity/{bundleAssignmentId}/sessionVIEW_OWN_CLASSES (ClassTeacher) أو RUN_BACKOFFICE
GET/api/students/{id}/fidelity-trackerVIEW_OWN_CLASSES (ClassTeacher) أو RUN_BACKOFFICE
GET/api/fidelity/admin/low-fidelity-cohortRUN_BACKOFFICE (للمشرف فقط)

كل من bundleAssignmentId ومعرّف الطالب id عددٌ صحيح موجب. تُقيِّد مسارات المعلم الوصول بصف الطالب عبر حارس ClassTeacher داخل المعالج؛ ويعيد المعرّف خارج المؤسسة أو خارج النطاق 404 (عدم الكشف عن الوجود). ولا توجد عمداً أي نقطة وصول للطالب؛ فالطلاب لا يرون الأمانة أبداً.

POST /api/fidelity/{bundleAssignmentId}/session هو مسار الكتابة الأساسي: يسجّل جلسةً واحدة منفَّذة (أو مجدولة لم تُنفَّذ)، ويُشغِّل إعادة حساب، ويعيد إسقاطاً حديثاً. انظر دليل تسجيل جلسة التدخل للاطلاع على حقول جسم الطلب.

‏GET /check: بوابة التصعيد

هذا هو الحكم المتزامن الذي يستدعيه محرك RTI مباشرةً قبل التصعيد. يعيد آخر إسقاط مخزَّن، ولا يعيد الحساب.

curl https://localhost:3000/api/fidelity/8124/check \ -H "Authorization: Bearer <accessToken>"
{ "bundleAssignmentId": 8124, "fidelityRate": 0.86, "fidelityRating": "high", "fidelityIssueFlag": false, "fidelityIssueCode": null, "impactOnDecision": "no_issue", "growthSignal": "low_growth", "verdict": "adjust_intervention", "escalationBlocked": false, "recommendedAction": "...", "autoDraftedParagraphAr": "...", "sessionsCompleted": 12, "sessionsPlanned": 14 }

تصنيف fidelityRating الخماسي هو high (≥0.80) / adequate (0.60 إلى 0.79) / partial (0.40 إلى 0.59) / low (أقل من 0.40) / unknown (لا بيانات). وحكم verdict الرباعي هو continue / adjust_intervention / cannot_evaluate_yet / fortuitous_complete_dose. وimpactOnDecision هو block_escalation / reduce_confidence / no_issue. وتُقرأ إشارة growthSignal (good_growth / partial_growth / low_growth / insufficient_data) من وحدة المراقبة.

مصفوفة التصنيف × النمو

يأتي الحكم وعلم escalationBlocked من مصفوفة نقية للتصنيف مقابل النمو:

الأمانة \ النموجيدمنخفضإيقاف (do_not_decide_yet / حاد)
high (≥0.80)continue (غير محظور)adjust_intervention (غير محظور)cannot_evaluate_yet (محظور)
adequate (0.60–0.79)continue (غير محظور)cannot_evaluate_yet (محظور)cannot_evaluate_yet (محظور)
partial (0.40–0.59)fortuitous_complete_dose (غير محظور)cannot_evaluate_yet (محظور)cannot_evaluate_yet (محظور)
low (أقل من 0.40)fortuitous_complete_dose (غير محظور)cannot_evaluate_yet (محظور)cannot_evaluate_yet (محظور)
unknown (لا بيانات)cannot_evaluate_yet (محظور)cannot_evaluate_yet (محظور)cannot_evaluate_yet (محظور)

يعيد مُوقِف الإيقاف دائماً cannot_evaluate_yet + محظور (قاعدة التعادل). ويُسمح بالتصعيد فقط عند أمانة عالية أو كافية مع إشارة نمو تسمح بها المصفوفة.

دورة الخروج عن المسار وصلاحية الأثر (R12، FR-FID-13)

يضيف R12 (FR-FID-13، المواصفة 35-fidelity-tracker.md) دورة استمرارية تنفيذ تُبنى فوق مصفوفة النسبة. تجيب عن سؤال ثانٍ لا تستطيع النسبة وحدها الإجابة عنه: هل تعثّرت الخطة في التنفيذ؟ ويلتقط ذلك عمودان جديدان.

intervention_track_status ∈ {on_track, partial_delivery, off_track, resumed_pending_new_evidence} — دورة استمرارية التنفيذ. تصبح الخطة off_track عندما لا تُنفَّذ أي جلسة مخططة لمدة offTrackThresholdWeeks أسابيع تعليمية متتالية (قابلة للتهيئة عبر InterventionTrackingConfig.offTrackThresholdWeeks، الافتراضي 3). والأسبوع التعليمي هو أسبوع ISO كان فيه ≥1 جلسة مخططة ولم يكن أسبوع عطلة؛ والعطلات والأسابيع التي لا جلسات مخططة فيها لا تدخل في حساب التتابع. وpartial_delivery = فاتت بعض الأسابيع المخططة لكن دون عتبة الخروج عن المسار؛ وresumed_pending_new_evidence = استأنف المعلم خطةً خرجت عن المسار ولم تتراكم بعد أدلة جديدة قابلة للمقارنة.

intervention_effect_validity_status ∈ {valid, limited, invalid_due_to_implementation_gap} — هل يجوز قراءة استجابة الطالب كأثر حقيقي للخطة:

  • invalid_due_to_implementation_gap — أمانة منخفضة/مجهولة، أو عَلَم major_fidelity_issue_flag، أو off_track. والفجوة في التنفيذ، لا في عدم استجابة الطالب. و≥80٪ وحدها غير كافية: فمشكلة أمانة كبرى (جلسات قصيرة جداً / مواد ناقصة / تنفيذ غير مطابق) تفرض invalid حتى عند ≥0.80.
  • limited — أمانة partial أو خطة مستأنفة: تُفسَّر بحذر، وليست سببية أبداً.
  • valid — أمانة adequate/high، بلا مشكلة كبرى، وعلى المسار.

الخروج عن المسار يحظر كل حركة مستوى تلقائية. عند off_track، تفرض إعادة الحساب escalationBlocked = true حتى لو لم تحظر مصفوفة النسبة، فتمنع بوابة TM_BLOCK_01 في محرك RTI كل حركة مستوى تلقائية — التصعيد، والتنزيل، والتخرّج إلى دعم أخفّ — حتى يستأنف المعلم الخطة. ولا يتحرك المستوى ما دام محظوراً. وقد يظل الفرق العددي بين التقييمات يُعرَض كنتيجة أداء، لكنه لا يُنسَب إلى التدخل أبداً. وتصل إشارة الخروج عن المسار إلى محرك RTI عبر مَنفَذ قارئ الأمانة القائم (عَلَم offTrack بوليّ على القراءة) — دون أي ربط RTI جديد.

الاستئناف. عند الاستئناف يختار المعلم رمز سبب مضبوطاً من قاموس ADD_Context_Flag_Dictionary المغلق (B.24 — بلا نصّ حر)؛ ويسجّل الصف resumeReasonCode + resumedAt ويضبط intervention_track_status = resumed_pending_new_evidence. وتبقى صلاحية الأثر limited حتى تتراكم نقاط جديدة قابلة للمقارنة.

‏POST /recompute: إلحاق لقطة جديدة

تفرض إعادة الحساب حساباً جديداً وتُلحق صفّ لقطة جديد غير قابل للتعديل. لا تحمل أي جسم؛ فلا حقل نصّ حر على أي مسار أمانة؛ والسياق الوحيد للمشكلة هو مفردات fidelityIssueCode المضبوطة (missed_sessions / short_duration / wrong_grouping / incomplete_material / unknown).

curl -X POST https://localhost:3000/api/fidelity/8124/recompute \ -H "Authorization: Bearer <accessToken>"

إعادة الحساب مقفلة احترازياً لكل (org, assignment) وثابتة الناتج عند عدم تغيّر المدخلات. وتعيد الإسقاط الجديد (بنفس شكل /check) مع 201.

الفقرة المصاغة تلقائياً

يصيغ كل حكم تلقائياً فقرة عربية قصيرة لاجتماع المراجعة (autoDraftedParagraphAr). وهي مكتوبة بالقواعد، لا بنموذج لغوي، ومُرشَّحة عبر طبقة سلامة اللغة من اللغة السريرية وأطر القياس الدولية ولغة العجز. وهي سطح للمعلم/المشرف فقط.

الثوابت

  • الفشل المغلق. الإسناد المفقود 404؛ وقراءة نمو مفقودة أو غياب صفّ لقطة يعطي unknown / escalationBlocked = true، لا adequate مُلفَّقاً أبداً. غياب بيانات الأمانة يحجب التصعيد؛ ولا يسمح به أبداً.
  • إلحاق فقط (V-6). جدولا intervention_fidelity وintervention_session_log جدولا تدقيق نقيان: لا تعديل، لا حذف. ويُثبَّت إصدار الإعداد على كل صفّ، فتُعيد إعادة حساب المدخلات نفسها إنتاج اللقطة حرفاً بحرف.
  • لا نصّ حر. لا حقل reason / note / comment على أي مسار؛ وسياق المشكلة مفردات fidelityIssueCode المضبوطة.
  • لا نموذج لغوي (V-5). الحكم والفقرة حتميان ومكتوبان بالقواعد.
  • معزول حسب المؤسسة. يقصر organizationId كل قراءة وكتابة؛ وعبر المؤسسات 404.
  • مُقيَّد بالمعلم (ClassTeacher) / للمشرف فقط؛ غير ظاهر للطالب أبداً.

أدلة ذات صلة