# Science — منهج العلوم بالأدوار والمستويات

تطبيق Flask + SQLite + Docker. نفس مصفوفة الأدوار في تطبيقي الفرنسية والتهجئة: **المسؤول ← أولياء الأمور ← الأطفال**.

## التشغيل
```bash
docker compose up -d --build
```
ثم http://localhost:8255/science . قاعدة البيانات في المجلد `..\_Data\science_grades.db` (`/data/science_grades.db` داخل الحاوية).
بيانات المسؤول في `.env` (`ADMIN_USERNAME` / `ADMIN_PASSWORD`)، وكذلك `SECRET_KEY`.

## الأدوار
- **المسؤول** (`/admin`): يضيف أولياء الأمور ويحدد عدد الأطفال لكل منهم، ويضيف الأطفال لأي ولي أمر مع مستواهم، ويعيد تعيين كلمات المرور، ويوقف ويحذف، ويفتح لوحة أي ولي أمر.
- **ولي الأمر**: يضيف أطفاله ضمن الحد، ويختار مستوى كل طفل، ويعدّل ويغيّر كلمات المرور ويصفّر التقدّم ويوقف الحساب.
  تبويب «التقدّم» يعرض تقرير العلوم المفصّل للطفل (الأقسام، الدرجات، الشارات، التجارب).
- **الطفل**: يرى وحدات مستواه فقط ويلعب أنشطتها.

## المستويات
1 إلى 12 (المستوى N = الصف N). **المستوى الثاني** هو المنهج الحالي (Science Grade 2 Workbook)، والباقي «قريباً».
لفتح مستوى: أضف وحداته في `curriculum.py` مع `"level": <رقمه>`، واجعل `available=True` له في `levels.py`.

## ما تغيّر عن النسخة الأولى
- كان التطبيق يحذف كل تقدّم الأطفال عند كل تشغيل (إعادة بناء الأنشطة بمعرّفات جديدة)؛ الآن تُحدَّث الأنشطة في مكانها فيبقى التقدّم.
- كان يعيد كتابة اسم وكلمة مرور ولي الأمر والطفل من `.env` عند كل تشغيل؛ الآن تُنشأ الحسابات الأولى فقط إن لم توجد.
- كلمات المرور مخزّنة بتشفير مملّح (الكلمات القديمة تُقبل مرة وتُرقّى تلقائياً).
- لوحة ولي الأمر تعرض أطفاله فقط، ولا يستطيع تصفير تقدّم طفل لا يخصه.

## الاختبارات
```bash
python tools/smoke_test.py
```
