---
title: "سلامة اللغة"
url: https://docs.growamal.com/ar/guides/language-safety/
language: ar
---

# سلامة اللغة

كل سلسلة نصية تُعرضها منصة أمل أو تحفظها أو تطبعها تمر عبر طبقة سلامة اللغة. تُنفِّذ هذه الوحدة التزامين مطلقين: لغة النمو في جميع النصوص المواجهة للمستخدم، وعدم حفظ أي نص حر عن الطلاب على الخادم أبداً.

## لماذا يوجد هذا النظام

تنصّ قاعدة البنية المعمارية V-12 على: "المعلم يقرر؛ النظام يقترح؛ لغة النمو فقط." تدفع مشكلتان ملموستان هذا التصميم:

1. **اللغة العجزية/السريرية تضر بالأطفال.** الكلمات التي تصنِّف أو تُوصم تُضعف مفهوم الذات. يجب أن تصف كل سلسلة مُعرَّضة النمو والخطوات التالية، لا العجز.
2. **ملصقات الأطر الدولية للمعايرة الداخلية، لا للنصوص المواجهة للمستخدم.** مصطلحات مثل PIRLS وEGRA وGPF وLexile (وما يعادلها بالعربية) تظهر في الأدبيات البحثية التي يستند إليها الشريك التربوي لأمل، لكنها يجب ألا تظهر أبداً في النص الذي يراه المعلم أو الوالد أو الطالب. القاعدة الصارمة Q15 تحظرها من جميع أسطح المستخدم.

تمتلك طبقة السلامة أيضاً **المسار القانوني الوحيد لتعليق السياق على جلسة طالب**: علامة سياق من قاموس مغلق، لا نص حر قط.

## خط أنابيب القواعد

عند حاجة الخادم إلى عرض سلسلة نصية لجمهور معين، يستدعي `sanitize(text, activeRules, { appliesTo })`. تُحمَّل القواعد من قاعدة البيانات وتُطبَّق بترتيب ثابت:

| نوع القاعدة | ما تفعله |
|---|---|
| `clinical_term` | تستبدل أو تحظر المفردات السريرية/التشخيصية |
| `international_framework_label` | تجرِّد الملصقات مثل PIRLS وEGRA وGPF وLexile (وما يعادلها بالعربية) من النسخ المواجهة للمستخدم؛ هذه المصطلحات مذكورة هنا لأنها قائمة المحظورات؛ راجع التنبيه أدناه |
| `categorical_phrasing` | تُلطِّف صياغات العجز الفئوية إلى إطار النمو |
| `cbm_alert_script` | تطبِّق نصوص لغة النمو الخاصة بـCBM |
| `parent_stricter_guardrail` | ضمانات GL-001..GL-005 (مستوى الوالدين، انظر أدناه) |
| `profile_do_not_say` | العبارات المحظورة لكل ملف تُحمَّل عند وقت العرض |
| `numeric_score_block` | تجرِّد الدرجات الرقمية الخام من نسخ الوالدين |
| `internal_label_block` | تجرِّد رموز الملف الداخلية/الحزمة من نسخ الوالدين |

لكل قاعدة `severity` (`block` / `soften` / `strip`) ومجموعة `appliesTo` للجمهور (`ui` / `reports` / `parent` / `parent_stricter` / `teacher_note` / `student` / `admin`).

> **تنبيه:** **لماذا تُذكر ملصقات الأطر (PIRLS وEGRA وGPF وLexile…) هنا:** هذه الصفحة تصف ما يحظره المرشِّح. ذكرها هنا صحيح؛ هذا المكان الوحيد الذي تنتمي إليه. على أي سطح مواجه للمعلم أو الوالد أو الطالب يجب ألا تظهر أبداً.

## مستويات الجمهور

للمرشِّح أربعة مستويات جمهور تتراكم فوق بعضها:

| المستوى | مَن | قيود إضافية |
|---|---|---|
| `ui` / `reports` / `teacher_note` / `admin` | المعلم، المدير | مرشِّح كامل للمصطلحات السريرية وملصقات الأطر؛ تلطيف فئوي |
| `parent` | الوالد | كل ما سبق بالإضافة إلى نصوص النمو الخاصة بالوالدين |
| `parent_stricter` | الوالد (التقارير، PDF) | كل ما سبق، بالإضافة إلى: لا درجات رقمية، لا رموز ملف/حزمة داخلية، لا ملصقات داخلية، بالإضافة إلى ضمانات GL الخمس |
| `student` | الطالب | مرشِّح منفصل: لا مقارنات بالأقران، لا ملصقات، تغذية راجعة داعمة فقط |

### ضمانات GL الخمس (GL-001..GL-005)

هذه عبارات عجز عربية محددة حدَّدها الشريك التربوي وهي محظورة كلياً من نسخ الوالدين والطلاب. كل منها حظر سلسلة فرعية مع استبدال مطلوب أو حذف. القواعد موجودة في جدول `LanguageRule` بـ`ruleType=parent_stricter_guardrail`.

### `do_not_say` لكل ملف

لكل ملف أساسي قائمة `do_not_say` في مصفوفة تطبيق الملف للصف (PGA). عند وقت العرض، يُحمِّل محرك سلامة اللغة المجموعة النشطة لملف الطالب ويضيف هذه العبارات كطبقة تصفية إضافية. يضمن هذا ألا تستخدم قوالب SPOT السردية عن طريق الخطأ عبارةً تتعارض مع إطار النمو الخاص بالملف.

## الإصدار بالإلحاق الحصري

لا تُعدَّل القواعد في مكانها. لتغيير قاعدة:

1. أرسل POST بقاعدة جديدة (يُدرَج صف جديد بـ`version` جديد).
2. أرسل PATCH للقاعدة القديمة لإلغاء تنشيطها (`PATCH /api/language-rules/{id}/deactivate`).

يبقى صف الإصدار القديم دائماً للتدقيق. تُحمَّل القواعد النشطة بالإغلاق عند الفشل: إذا لم يوجد مجموعة قواعد نشطة عند محاولة المحرك العرض، فإنه يُلقي استثناءً بدلاً من إصدار نص غير مُرشَّح (V-6 + V-3).

## علامات السياق: الطريقة الوحيدة لإرفاق السياق بطالب

> **تنبيه:** **لا يوجد حقل نص حر على أي سجل طالب.** V-12 والقاعدة الصارمة B.24 تحظران ذلك. الطريقة الوحيدة التي يمكن للمعلم بها إرفاق سياق الجلسة أو التعليمية بطالب هي اختيار علامة من `ContextFlagDictionary` المغلق.

معرِّفات العلامات السبع المسموح بها:

| معرِّف العلامة | متى تُستخدم |
|---|---|
| `CTX_SESSION_INTERRUPTED` | الجلسة انقطعت قبل الاكتمال الطبيعي |
| `CTX_TECHNICAL_ISSUE` | مشكلة جهاز أو اتصال أثَّرت على الجلسة |
| `CTX_AUDIO_PROBLEM` | تشغيل الصوت كان متأثراً |
| `CTX_GROUP_NOT_COMPLETED` | لم تتمكن مجموعة من إنهاء نشاطها |
| `CTX_STUDENT_ABSENT` | الطالب غائب أثناء مسبار مجدوَل |
| `CTX_NEEDED_REPETITION` | احتاج الطالب تعليمات متكررة أكثر من المعتاد |
| `CTX_PAPER_CHECK_ADMIN` | تم تطبيق اختبار ورقي (الاسم البديل `CTX_PAPER_CHECK_ADMINISTERED`) |

ثلاثة معرِّفات إضافية محظورة صراحةً (`CTX_FREE_TEXT_NOTE`، `CTX_MEDICAL_NOTE`، `CTX_PSYCHOLOGICAL_NOTE`). محاولة إرسال أحدها تُعيد `422 context_flag_blocked`؛ يكتب النظام صفاً بـ**الطول فقط** في `security_audit_log` (قيمة العلامة نفسها لا تُخزَّن أبداً).

### كتابة علامة سياق

```bash
curl -X POST https://localhost:3000/api/students/{studentId}/context-flag \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "flag_id": "CTX_SESSION_INTERRUPTED",
    "evidence_ref": "optional-string-reference",
    "session_ref": "optional-string-reference"
  }'
```

> **تنبيه:** يُتحقَّق من جسم الطلب بـ**مخطط صارم** (`flag_id`، `evidence_ref`، `session_ref`). تستخدم الحقول الثلاثة صيغة snake_case. أي مفتاح غير معروف في الجسم (بما في ذلك متغيرات camelCase مثل `flagId` أو `relatedEvidenceId`) يُعيد `422`. `evidence_ref` و`session_ref` سلاسل اختيارية.

تتطلب `SELECT_CONTEXT_FLAG`. تُعيد `{ studentId, contextFlagLogId, flagId }`.

### قراءة علامات السياق

```bash
curl https://localhost:3000/api/students/{studentId}/context-flags \
  -H "Authorization: Bearer <accessToken>"
```

تتطلب `VIEW_OWN_CLASSES` أو `RUN_BACKOFFICE`.

## ملاحظات المعلم للطباعة فقط

حين يرغب المعلم في التعليق غير الرسمي على سجل طالب، تدعم المنصة **ملاحظات المعلم للطباعة فقط**. هذه الملاحظات موجودة فقط في المتصفح وعلى الورق؛ لا تُرسَل إلى الخادم أبداً، ولا تُخزَّن، ولا تظهر في أي استجابة API. هذا التزام خصوصية V-12، لا قيد تقني يمكن التحايل عليه.

## إدارة قواعد اللغة (الإدارة/الباك أوفيس)

| نقطة النهاية | الصلاحية | ما تفعله |
|---|---|---|
| `GET /api/language-rules` | `VIEW_OWN_CLASSES` أو `RUN_BACKOFFICE` | قائمة بجميع القواعد النشطة (الصفوف غير النشطة/المستبدَلة مستبعدة؛ السجل الكامل موجود في قاعدة البيانات للتدقيق فقط) |
| `POST /api/language-rules` | `RUN_BACKOFFICE` | نشر إصدار قاعدة جديد |
| `PATCH /api/language-rules/{id}/deactivate` | `RUN_BACKOFFICE` | إلغاء تنشيط إصدار قاعدة قديم |
| `POST /api/language-rules/validate` | `VIEW_OWN_CLASSES` أو `RUN_BACKOFFICE` | تجربة سلسلة على القواعد النشطة دون حفظ |

## الاستخدام داخل العملية

المستهلكون الذين يحتاجون المرشِّح عند الكتابة (نقطة الاختناق لمساعد المعلم، توليد نص التنبيه) يستوردون `sanitize` و`loadActiveRules` مباشرةً من وحدة `language-safety`؛ لا حاجة لطلب HTTP.

## صفحات ذات صلة

- [فحوصات جودة النظام](https://docs.growamal.com/ar/guides/qa-checks/): QA_022 (فحص اللغة الحساسة) وQA_023 (فحص سلامة تقرير الوالدين) مدخلات في السجل تشير إلى التطبيق هنا
- [قواعد السلامة](https://docs.growamal.com/ar/how-it-works/safety/): مجموعة القواعد الشاملة الشاملة
- [ملفات الطلاب](https://docs.growamal.com/ar/guides/student-profiles/): قوالب SPOT السردية وآلية `do_not_say` لكل ملف
