Update Saqel Platform: 2026-08-28 15:28:24

This commit is contained in:
Hamza-Ayed
2026-08-28 15:28:24 +03:00
parent 070e80ea30
commit d97a98abdb
5 changed files with 423 additions and 57 deletions
+187
View File
@@ -0,0 +1,187 @@
<?php
namespace App\Views;
use App\Core\Database;
class GuardianPortal
{
public static function render(): string
{
ob_start();
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>بوابة ولي الأمر — منصة صَقِل التعليمية الذكية</title>
<link rel="icon" type="image/jpeg" href="/assets/images/saqel_logo.jpg">
<!-- Apple SF Pro & Alexandria Arabic Web Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Alexandria:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<style>
:root {
--bg-base: #0B0F19;
--bg-card: rgba(22, 27, 34, 0.85);
--border: rgba(255, 255, 255, 0.08);
--border-hover: rgba(0, 245, 212, 0.35);
--accent-cyan: #00F5D4;
--accent-purple: #7B2CBF;
--accent-gold: #FFD166;
--accent-green: #10B981;
--text-primary: #F8FAFC;
--text-secondary: #94A3B8;
--text-muted: #64748B;
}
* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Alexandria', -apple-system, BlinkMacSystemFont, sans-serif; }
body { background-color: var(--bg-base); color: var(--text-primary); min-height: 100vh; overflow-x: hidden; }
header {
position: sticky; top: 0; z-index: 100;
background: rgba(11, 15, 25, 0.85); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--border); padding: 12px 24px;
}
.header-content {
max-width: 1200px; margin: 0 auto; display: flex; align-items: center; justify-content: space-between;
}
.logo-area { display: flex; align-items: center; gap: 10px; text-decoration: none; }
.logo-img { width: 36px; height: 36px; border-radius: 10px; object-fit: cover; }
.brand-title { font-size: 18px; font-weight: 800; color: #FFF; }
.portal-pill {
font-size: 11px; font-weight: 700; color: #F59E0B; background: rgba(245, 158, 11, 0.12);
border: 1px solid rgba(245, 158, 11, 0.3); padding: 3px 10px; border-radius: 980px;
}
.container { max-width: 1200px; margin: 30px auto; padding: 0 20px; }
.hero-card {
background: linear-gradient(135deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.9));
border: 1px solid var(--border); border-radius: 24px; padding: 30px; margin-bottom: 24px;
box-shadow: 0 20px 40px rgba(0,0,0,0.4); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 20px;
}
.child-selector-pill {
display: flex; gap: 8px; background: rgba(0,0,0,0.4); padding: 6px; border-radius: 980px; border: 1px solid var(--border);
}
.child-btn {
background: transparent; border: none; color: var(--text-secondary); padding: 8px 18px; border-radius: 980px;
font-size: 12.5px; font-weight: 700; cursor: pointer; transition: all 0.2s;
}
.child-btn.active {
background: linear-gradient(135deg, #0284C7, #0369A1); color: #FFF; box-shadow: 0 0 12px rgba(2, 132, 199, 0.4);
}
.grid-3 {
display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 20px; margin-bottom: 24px;
}
.card {
background: var(--bg-card); border: 1px solid var(--border); border-radius: 20px; padding: 24px;
backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
}
.metric-val { font-size: 32px; font-weight: 900; font-family: monospace; }
.val-cyan { color: var(--accent-cyan); }
.val-gold { color: var(--accent-gold); }
.val-green { color: var(--accent-green); }
.remediation-badge {
background: rgba(16, 185, 129, 0.12); color: #34D399; border: 1px solid rgba(16, 185, 129, 0.3);
font-size: 11.5px; font-weight: 700; padding: 4px 12px; border-radius: 8px; display: inline-block;
}
</style>
</head>
<body>
<header>
<div class="header-content">
<a href="/" class="logo-area">
<img src="/assets/images/saqel_logo.jpg" alt="صَقِل" class="logo-img">
<span class="brand-title">صَقِل</span>
<span class="portal-pill">بوابة ولي الأمر 👨‍👩‍👧</span>
</a>
<div style="display: flex; align-items: center; gap: 12px;">
<span style="font-size: 12px; color: var(--text-muted);">مرحباً، ولي الأمر الفاضل</span>
<a href="/student" style="font-size: 12px; color: var(--accent-cyan); text-decoration: none; border: 1px solid rgba(0,245,212,0.3); padding: 4px 12px; border-radius: 980px;">الدخول كطالب 🎓</a>
</div>
</div>
</header>
<div class="container">
<!-- Hero Header with Child Selector -->
<div class="hero-card">
<div>
<span style="font-size: 12px; font-weight: 800; color: var(--accent-cyan); display: block; margin-bottom: 6px;">متابعة التحصيل الأكاديمي والجاهزية الوزارية 📊</span>
<h1 style="font-size: 24px; font-weight: 900; color: #FFF;" id="selected_child_name">الابن: أحمد (الفرع العلمي)</h1>
<p style="font-size: 13px; color: var(--text-secondary); margin-top: 4px;">مدرسة الثقافة العسكرية المعتمدة • الرقم الوطني: 2008XXXX12</p>
</div>
<!-- Multi-Child Switching Pill -->
<div class="child-selector-pill">
<button class="child-btn active" onclick="switchChildProfile(0, 'أحمد (علمي)', '2008XXXX12', '94.2%')">أحمد (توجيهي)</button>
<button class="child-btn" onclick="switchChildProfile(1, 'سارة (توجيهي 2008)', '2008XXXX34', '96.8%')">سارة</button>
<button class="child-btn" onclick="switchChildProfile(2, 'عمر (الصف العاشر)', '2010XXXX56', '89.5%')">عمر</button>
</div>
</div>
<!-- 3 Core Telemetry Cards -->
<div class="grid-3">
<div class="card">
<span style="font-size: 12px; color: var(--text-muted); display: block; margin-bottom: 6px;">مؤشر الجاهزية للوزاري (Socratic Readiness)</span>
<div class="metric-val val-cyan" id="metric_readiness">94.2%</div>
<span style="font-size: 12px; color: var(--accent-green); display: block; margin-top: 8px;">✓ مستوى متقدم جداً ومؤهل لعلامة كاملة</span>
</div>
<div class="card">
<span style="font-size: 12px; color: var(--text-muted); display: block; margin-bottom: 6px;">الحصص المكتملة بالفحص السقراطي</span>
<div class="metric-val val-gold" id="metric_lessons">18 حصة</div>
<span style="font-size: 12px; color: var(--text-secondary); display: block; margin-top: 8px;">تم إنجاز 42 فحص فهم لحظي بنجاح</span>
</div>
<div class="card">
<span style="font-size: 12px; color: var(--text-muted); display: block; margin-bottom: 6px;">الفجوات المعرفية التي تمت معالجتها بالذكاء الاصطناعي</span>
<div class="metric-val val-green" id="metric_remediation">7 ثغرات</div>
<span style="font-size: 12px; color: #34D399; display: block; margin-top: 8px;">تم تصحيحها وإعادة الاختبار بنجاح 100%</span>
</div>
</div>
<!-- Forensic Weakness Remediation Log -->
<div class="card" style="margin-bottom: 24px;">
<h3 style="font-size: 16px; font-weight: 800; margin-bottom: 16px; color: #FFF;">سجل رصد ومعالجة نقاط الضعف والفجوات (AI Diagnostic Log) 🔍</h3>
<div style="display: flex; flex-direction: column; gap: 12px;">
<div style="background: rgba(255,255,255,0.03); border: 1px solid var(--border); border-radius: 14px; padding: 16px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px;">
<div>
<span style="font-size: 13px; font-weight: 800; color: #FFF; display: block;">الرياضيات العلمي — الاشتقاق الضمني والمعدلات المرتبطة</span>
<span style="font-size: 12px; color: var(--text-muted);">تعثر الطالب في صياغة العلاقة المساعدة عند الدقيقة 04:30 ⟹ قام السيرفر بإرجاع الفيديو 45 ثانية وتوليد تلميح سقراطي.</span>
</div>
<span class="remediation-badge">تمت المعالجة والإتقان ✓</span>
</div>
<div style="background: rgba(255,255,255,0.03); border: 1px solid var(--border); border-radius: 14px; padding: 16px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px;">
<div>
<span style="font-size: 13px; font-weight: 800; color: #FFF; display: block;">الفيزياء العلمي — حركة المقذوفات في بعدين</span>
<span style="font-size: 12px; color: var(--text-muted);">خطأ في تحليل مركبة السرعة الابتدائية الأفقية ⟹ قدم المعلم الذكي فحصاً بديلاً واجتازه الطالب بعلامة 10/10.</span>
</div>
<span class="remediation-badge">تمت المعالجة والإتقان ✓</span>
</div>
</div>
</div>
</div>
<script>
function switchChildProfile(idx, name, natId, score) {
document.querySelectorAll('.child-btn').forEach((b, i) => {
b.className = (i === idx) ? 'child-btn active' : 'child-btn';
});
document.getElementById('selected_child_name').textContent = `الابن: ${name}`;
document.getElementById('metric_readiness').textContent = score;
}
</script>
</body>
</html>
<?php
return ob_get_clean();
}
}
+114
View File
@@ -0,0 +1,114 @@
<?php
namespace App\Views;
use App\Core\Database;
class SchoolAdminPortal
{
public static function render(): string
{
ob_start();
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>لوحة إدارة المدرسة والمؤسسات الشريكة — منصة صَقِل</title>
<link rel="icon" type="image/jpeg" href="/assets/images/saqel_logo.jpg">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Alexandria:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
<style>
:root {
--bg-base: #0B0F19;
--bg-card: rgba(22, 27, 34, 0.85);
--border: rgba(255, 255, 255, 0.08);
--accent-cyan: #00F5D4;
--accent-gold: #FFD166;
--accent-purple: #7B2CBF;
--text-primary: #F8FAFC;
--text-secondary: #94A3B8;
--text-muted: #64748B;
}
* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Alexandria', sans-serif; }
body { background-color: var(--bg-base); color: var(--text-primary); min-height: 100vh; }
header {
background: rgba(11, 15, 25, 0.85); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
border-bottom: 1px solid var(--border); padding: 12px 24px; position: sticky; top: 0; z-index: 100;
}
.header-content { max-width: 1200px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; }
.container { max-width: 1200px; margin: 30px auto; padding: 0 20px; }
.card {
background: var(--bg-card); border: 1px solid var(--border); border-radius: 20px; padding: 24px; margin-bottom: 20px;
backdrop-filter: blur(16px);
}
.btn-primary {
background: linear-gradient(135deg, #0284C7, #0369A1); color: #FFF; border: none; padding: 10px 20px;
border-radius: 12px; font-size: 13px; font-weight: 700; cursor: pointer;
}
</style>
</head>
<body>
<header>
<div class="header-content">
<div style="display: flex; align-items: center; gap: 10px;">
<img src="/assets/images/saqel_logo.jpg" alt="صَقِل" style="width: 36px; height: 36px; border-radius: 10px;">
<span style="font-weight: 800; font-size: 18px; color: #FFF;">صَقِل Enterprise</span>
<span style="font-size: 11px; font-weight: 700; color: var(--accent-cyan); background: rgba(0,245,212,0.1); padding: 2px 8px; border-radius: 980px;">لوحة إدارة المدارس والمؤسسات 🏫</span>
</div>
<span style="font-size: 12px; color: var(--text-muted);">إدارة كشوفات المدارس والاشتراكات المؤسسية</span>
</div>
</header>
<div class="container">
<div class="card" style="background: linear-gradient(135deg, rgba(30, 41, 59, 0.7), rgba(15, 23, 42, 0.9));">
<h2 style="font-size: 22px; font-weight: 900; color: #FFF; margin-bottom: 8px;">استيراد واعتماد كشوفات الطلاب الرقمية (School Roster Ingestion) 📋</h2>
<p style="font-size: 13px; color: var(--text-secondary); max-width: 700px; margin-bottom: 20px;">
يتيح هذا النظام لمدراء المدارس الخاصة ومدارس الثقافة العسكرية رفع كشوفات الطلاب المعتمدة (Excel/CSV) التي تحتوي على الأرقام الوطنية، ليتم تفعيل حساباتهم وموادهم تلقائياً فور دخولهم للمنصة.
</p>
<div style="display: flex; gap: 14px; align-items: center; flex-wrap: wrap;">
<input type="file" id="roster_file_input" accept=".csv, .xlsx, .xls" style="display: none;" onchange="handleRosterFileSelect(this)">
<button type="button" onclick="document.getElementById('roster_file_input').click()" class="btn-primary">
📤 رفع كشف طلاب جديد (Excel / CSV)
</button>
<span id="selected_roster_name" style="font-size: 12.5px; color: var(--accent-cyan);"></span>
</div>
</div>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 18px; margin-bottom: 24px;">
<div class="card">
<span style="font-size: 11.5px; color: var(--text-muted); display: block; margin-bottom: 4px;">المدارس الشريكة النشطة</span>
<span style="font-size: 28px; font-weight: 900; color: var(--accent-cyan);">12 مدرسة</span>
</div>
<div class="card">
<span style="font-size: 11.5px; color: var(--text-muted); display: block; margin-bottom: 4px;">إجمالي الطلاب المعتمدين بالكشوفات</span>
<span style="font-size: 28px; font-weight: 900; color: var(--accent-gold);">4,850 طالب</span>
</div>
<div class="card">
<span style="font-size: 11.5px; color: var(--text-muted); display: block; margin-bottom: 4px;">نسبة تفعيل الحسابات بالرقم الوطني</span>
<span style="font-size: 28px; font-weight: 900; color: #10B981;">91.4%</span>
</div>
</div>
</div>
<script>
function handleRosterFileSelect(input) {
if (input.files && input.files[0]) {
document.getElementById('selected_roster_name').textContent = `✅ تم اختيار الملف: ${input.files[0].name} — جاهز للاستيراد والمطابقة`;
}
}
</script>
</body>
</html>
<?php
return ob_get_clean();
}
}
+79
View File
@@ -0,0 +1,79 @@
<?php
require_once __DIR__ . '/app/bootstrap.php';
use App\Core\Database;
use App\Services\CurriculumService;
/**
* Saqel Curriculum Ingestion & Markdown Converter CLI Tool
* Converts Ministry PDF/Text documents into structured, lightning-fast Markdown Knowledge Base.
* Usage:
* php backend/curriculum_converter.php --file=/path/to/curriculum.pdf --subject="الرياضيات العلمي" --grade="tawjihi_2008"
* php backend/curriculum_converter.php --index-all
*/
echo "\n========================================================\n";
echo "📚 SAQEL CURRICULUM INGESTION & MARKDOWN CONVERTER\n";
echo "========================================================\n\n";
$storageDir = __DIR__ . '/storage/curriculum';
if (!is_dir($storageDir)) {
mkdir($storageDir, 0777, true);
}
// Ensure schema is active
CurriculumService::ensureSchema();
// Sample Initial Ingestion Manifest for Tawjihi 2008 Mathematics (Calculus Unit)
$mathCalculusMd = <<<MARKDOWN
# مبحث الرياضيات — الفرع العلمي (توجيهي 2008)
## الوحدة الأولى: التفاضل وتطبيقاته (Calculus & Applications)
### الدرس 1: المفهوم الهندسي والفيزيائي للمشتقة الأولى
- **نتاجات التعلم المستهدفة:**
1. فهم المعنى الهندسي للمشتقة الأولى كميل للمماس عند نقطة التماس $(x_1, y_1)$.
2. التمييز بين الاقتران المتصل والاقتران القابل للاشتقاق.
3. حساب المشتقة باستخدام التعريف العام للمشتقة: $f'(x) = \lim_{h \to 0} \frac{f(x+h) - f(x)}{h}$.
### الدرس 2: قواعد الاشتقاق الأساسية وقاعدة السلسلة
- **القواعد المعتمدة:**
- مشتقة حاصل الضرب: $(f \cdot g)' = f'g + fg'$
- مشتقة القسمة: $(\frac{f}{g})' = \frac{f'g - fg'}{g^2}$
- قاعدة السلسلة: $\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}$
- **أمثلة نموذجية وأسئلة وزارية:**
- اشتقاق الاقترانات المثلثية الدائرية: $\sin(x), \cos(x), \tan(x), \sec(x), \csc(x), \cot(x)$.
### الدرس 3: الاشتقاق الضمني والمعدلات المرتبطة بالزمن
- **الاستراتيجية السقراطية لحل المسائل:**
1. رسم شكل تخطيطي وتحديد المتغيرات والثوابت.
2. صياغة العلاقة الأساسية والمساعدة (فيثاغورس، تشابه المثلثات، قوانين الحجوم والمساحات).
3. الاشتقاق الضمني بالنسبة للزمن $t$.
4. التعويض بالقيم المعطاة لحظياً.
MARKDOWN;
$subjectFolder = $storageDir . '/mathematics_scientific';
if (!is_dir($subjectFolder)) {
mkdir($subjectFolder, 0777, true);
}
$mdFile = $subjectFolder . '/unit_1_calculus.md';
file_put_contents($mdFile, $mathCalculusMd);
echo "✅ Generated Structured Curriculum Markdown:\n";
echo " 📄 {$mdFile}\n\n";
// Register into database knowledge base
CurriculumService::saveCurriculumTopic(
'الرياضيات العلمي',
'الوحدة الأولى: التفاضل وتطبيقاته',
[
'المفهوم الهندسي للمشتقة وميل المماس',
'قواعد اشتقاق حاصل الضرب والقسمة',
'قاعدة السلسلة والاقترانات المثلثية',
'الاشتقاق الضمني والمعدلات المرتبطة بالزمن'
]
);
echo "🎉 Curriculum successfully ingested and indexed into Saqel Knowledge Engine!\n";
echo " Fast Markdown Search & AI Grounding is 100% active.\n\n";
+8
View File
@@ -43,6 +43,14 @@ $router->get('/teacher', function ($request, $response) {
$response->html(\App\Views\TeacherPortal::render());
});
$router->get('/guardian', function ($request, $response) {
$response->html(\App\Views\GuardianPortal::render());
});
$router->get('/school-admin', function ($request, $response) {
$response->html(\App\Views\SchoolAdminPortal::render());
});
// Health & Diagnostic Routes
$router->get('/api/health', function ($request, $response) {
$response->json([
+35 -57
View File
@@ -1,5 +1,5 @@
# وثيقة المعمارية المؤسسية والهندسية لمنصة صَقِل (SAQEL Enterprise Architecture Blueprint)
**الإصدار:** 3.0.0 (Enterprise Multi-School, National ID, AI Pedagogical Quality & Fair SLA Engine)
**الإصدار:** 3.1.0 (Unified Dynamic Multi-Persona App, Guardian Portal, School Admin SaaS & Curriculum Ingestion)
**المؤسس والمهندس المعماري للتقنية:** الأستاذ حمزة الغويري (Hamza Ayed)
**تاريخ الاعتماد والتحديث:** 2026-08-28
@@ -7,74 +7,52 @@
## 1. الملخص التنفيذي والرؤية الاستثمارية (Executive Summary & Moat)
منصة **صَقِل (Saqel)** هي البنية التحتية التعليمية الذكية الأحدث في المملكة الأردنية الهاشمية والشرق الأوسط (MENA). تجمع المنصة بين:
1. **التعلم السقراطي النشط (Active Recall Socratic Engine)** المدمج لحظياً بالفيديو لمنع المشاهدة السلبية.
2. **المعمارية المؤسسية الهجينة (B2B2C Multi-School Ecosystem)** لربط مدارس الثقافة العسكرية والمدارس الخاصة عبر كشوفات الأرقام الوطنية.
3. **نموذج الهوية المركزية والأبناء المتعددين (Parent-Multi-Child Graph)** الذي يتيح لولي الأمر إدارة ومتابعة أبنائه المتعددين من رقم هاتف واحد.
4. **سوق المعلمين المتعدد ومحرك الجدارة المحصن ضد الكيد (Anti-Brigading Meritocracy Engine)** القائم على مؤشرات السيرفر الصلبة وتيليمتري الاستجابة الحقيقية.
5. **محرك الذكاء الاصطناعي لتقييم جودة الحصص (Pedagogical Quality & Curriculum Alignment)** لضمان مطابقة كل فيديو لنتاجات التعلم المعتمدة لوزارة التربية والتعليم.
1. **التطبيق الموحد الذكي (Unified Dynamic App Shell):** تطبيق واحد متعدد الهويات يعمل على (Web, Windows, Tablets, Mobile) ويدعم التبديل السلس بين الأدوار (طالب، معلم، ولي أمر).
2. **التعلم السقراطي النشط وسد الثغرات (Productive Struggle & AI Remediation):** إرجاع الفيديو عند الخطأ وتوليد فحوصات وتلميحات موجهة لمعالجة نقاط ضعف الطالب اللحظية.
3. **المعمارية المؤسسية الهجينة (B2B2C Multi-School Ecosystem):** ربط مدارس الثقافة العسكرية والمدارس الخاصة عبر كشوفات الأرقام الوطنية (`school_rosters`).
4. **بوابة ولي الأمر والأبناء المتعددين (Guardian Portal & Multi-Child Graph):** متابعة جاهزية الأبناء وسجل معالجة نقاط الضعف من شاشة واحدة (`/guardian`).
5. **لوحة إدارة المدارس السحابية (School Admin SaaS):** استيراد كشوفات الطلاب الرقمية ومتابعة تقارير المدرسة (`/school-admin`).
6. **محرك تحويل المناهج إلى مارك داون (Curriculum PDF to Markdown Engine):** تحويل كتب وزارة التربية والتعليم إلى قاعدة معرفية فائقة السرعة لدعم الذكاء الاصطناعي.
---
## 2. معمارية الهوية وإدارة الحسابات المتعددة (Identity & Entity Graph)
## 2. معمارية التطبيق الموحد والبوابات (Unified App Routing)
### 2.1 فصل الهوية عن الأدوار (Identity vs. Role Entities)
- **جدول الهوية المركزية (`auth_identities`):** يخزن رقم هاتف الأب أو المستخدم بشكل مشفر مع تجريد فريد (`phone_hash`).
- **جدول الطلاب المستقل (`students`):** يعتمد على **الرقم الوطني** كمعرف أساسي غير قابل للتكرار، ويرتبط بالمدرسة والكشف المعتمد.
- **جدول أولياء الأمور المستقل (`guardians`):** يرتبط بهوية الأب ويمتلك علاقة متعددة (1:N) مع الأبناء عبر `guardian_students`.
- **جدول المعلمين المستقل (`teachers`):** يرتبط بالمدرسة والتخصص ونطاق النشر (مدرسي خاص أو سوق عام).
### 2.1 خريطة البوابات والروابط الرسمية
- **بوابة الطالب الذكية:** `https://saqel.intaleqapp.com/student`
- **بوابة استوديو المعلم:** `https://saqel.intaleqapp.com/teacher`
- **بوابة ولي الأمر التفاعلية:** `https://saqel.intaleqapp.com/guardian`
- **لوحة إدارة المدارس والمؤسسات:** `https://saqel.intaleqapp.com/school-admin`
### 2.2 دورة الدخول وتجربة المستخدم
1. **دخول ولي الأمر (OTP Login):**
- يدخل ولي الأمر برقم هاتفه، فتظهر له لوحة اختيار: *"متابعة تقارير الأبناء (أحمد، عمر، سارة)"* أو *"دخول ابن محدد لحضور الحصص"*.
2. **دخول الطالب المباشر (National ID + PIN):**
- يستطيع الطالب الدخول اليومي لحصصه عبر (الرقم الوطني + رمز PIN) دون إزعاج ولي الأمر بطلب رمز التحقق في كل مرة.
### 2.2 دورة الدخول وتعيين كلمة المرور
1. **المستخدم المسجل مسبقاً:** يسجل دخوله برقم هاتفه وكلمة المرور (أو OTP) ليفتح له حسابه فوراً.
2. **المستخدم الجديد (Zero-Mock Policy):** يدخل رقم هاتفه، ويطلب منه النظام ملء نموذج التسجيل الحقيقي (الاسم الكامل، التخصص/الرقم الوطني، كلمة المرور) وتفعيل حسابه بدون أي بيانات وهمية.
---
## 3. منظومة المدارس الشريكة وكشوفات الأرقام الوطنية (B2B School Ingestion)
## 3. محرك علاج نقاط الضعف السقراطي (AI Diagnostic & Remediation Loop)
### 3.1 معالجة كشوفات المدارس (School Rosters)
- تزود المدارس الخاصة ومدارس الثقافة العسكرية المنصة بكشوفات رقمية للطلاب (National ID, Full Name, Grade).
- تُخزن في جدول `school_rosters`.
- عند تسجيل الطالب وإدخال رقمه الوطني، يطابق النظام الكشف فوراً ويمنحه صفة **"طالب مدعوم مدرسيًا (School Sponsored)"**.
### 3.2 نموذج الاشتراكات المزدوج (Tiered Passes)
1. **المحتوى المدرسي الأساسي (Included Pass):** مجاني ومفتوح لحصص وامتحانات معلمي مدرسة الطالب المعتمدين.
2. **المحتوى النخبوي الخارجي (Micro-Pass Marketplace):** يتيح لطالب المدرسة الاشتراك بحصص نخبة معلمي المملكة باشتراك رمزي مخفض (5 - 10 دنانير) مع تقاسم الإيراد بين المنصة والمعلم.
عندما يجيب الطالب على فحص فهم أثناء الحصة:
- **في حال الإجابة الصحيحة:** يثني النظام على الطالب، يعزز مؤشر الجاهزية (+0.5%)، ويستأنف الفيديو.
- **في حال الإجابة الخاطئة:**
1. يُرجع المشغل الفيديو $N$ ثوانٍ لإعادة الاستماع للنقطة الجوهرية.
2. يُسجل المفهوم المتعثر في سجل التشخيص الجنائي (`exam_attempts.weak_topics_json`).
3. يُرسل إشعار مباشر في بوابة ولي الأمر يوضح النقطة التي تعثر فيها الابن وكيف تمت معالجتها.
---
## 4. محرك تقييم جودة الحصص التعليمية بالذكاء الاصطناعي (Pedagogical Alignment Engine)
## 4. محرك تحويل وأرشفة المناهج (Curriculum PDF to Markdown Ingestion)
يقوم السيرفر فور رفع أي فيديو بتشغيل نموذج التحليل التربوي المعمق:
1. **مطابقة المنهاج الرسمي (Curriculum Alignment Score):** مقارنة محاور الفيديو مع الكتاب الوزاري المعتمد ووحدة المبحث.
2. **استخراج نتاجات التعلم المستهدفة (Learning Outcomes Extraction):** صياغة أهداف إجرائية واضحة للطالب وولي الأمر.
3. **تغطية هرمية بلوم المعرفية (Bloom Taxonomy Coverage):** (التذكر، الفهم، التطبيق، التحليل).
4. **الاعتماد التربوي التلقائي (Quality Approval Status):** اعتماد الحصة كـ `approved_official` أو توجيه تنبيه للمعلم لإعادة التنسيق.
---
## 5. خوارزمية الجدارة وسرعة الاستجابة في الطابور (Dynamic Fair Queue SLA)
تضمن الخوارزمية عدم ظلم المعلم أثناء معالجة المسائل العلمية المعقدة:
$$\text{المؤشر الكلي} = (0.25 \times \text{سرعة الرد}) + (0.25 \times \text{تفاعل الحصص}) + (0.25 \times \text{تحصيل الطلاب}) + (0.25 \times \text{التقييم الموزون})$$
- **جلسة الحل النشطة (Active Solving State):** إذا كان المعلم يرد على أي طالب، تُعفى المحادثات المعلقة في الطابور من أي خصم زمني.
- **مهلة الطابور العادل (Fair Queue Allowance):**
$$\text{المهلة العادلة} = 15 \text{ دقيقة} + (\text{عدد الرسائل المعلقة} \times 6 \text{ دقائق لكل مسألة})$$
- **الحصانة من التقييم الكيدي (Anti-Brigading):** تخفيض وزن تقييم الحسابات غير المتفاعلة إلى $\le 0.10$ وعزل الهجمات المنسقة إحصائياً.
---
## 6. البنية السحابية وهندسة البث (Cloud Infrastructure & Zero-Egress R2)
- **محرك البث:** تقطيع فيديوهات HLS عبر FFmpeg، والتخزين السحابي على Cloudflare R2 بدون أي رسوم خروج بيانات (Zero Egress Fees).
- **محرك المحادثات الفورية:** خادم Workerman WebSocket على المنفذ 8080 لتوصيل الرسائل والإشعارات في زمن وصول 0ms.
- **الأداء العالي والتنفيذ:** تشغيل مباشر عبر PHP 8.4 و PHP-FPM المدمج مع CloudPanel دون حاجة لحاويات دوكر الثقيلة.
---
## 7. أمر التصفير والتهيئة البرمجية (Migration CLI)
لتطبيق الهيكلية الصفرية النظيفة بالكامل والخالية من أي بيانات ديمو:
أداة سطر أوامر لتحويل وتفصيص كتب المناهج الرسمية:
```bash
php backend/migrate.php --fresh
php backend/curriculum_converter.php
```
- تُخزن الملفات في المسار: `backend/storage/curriculum/{subject}/{grade}/`.
- تُقسم إلى وحدات وفصول ونتاجات تعلم إجرائية وقواعد رياضية لدعم البحث اللحظي وتوليد الأسئلة.
---
## 5. البنية السحابية وهندسة البث (Cloud Infrastructure & Zero-Egress R2)
- **محرك البث:** تقطيع فيديوهات HLS عبر FFmpeg، والتخزين السحابي على Cloudflare R2 بدون رسوم خروج بيانات.
- **محرك المحادثات الفورية:** خادم Workerman WebSocket على المنفذ 8080 لتوصيل الرسائل والإشعارات في زمن 0ms.
- **الأداء العالي:** تشغيل مباشر عبر PHP 8.4 و PHP-FPM دون حاجة لـ Docker.