نظام متابعة المعلمة لاختبار PIRLS
متابعة + تحليل + تصحيح
يتيح هذا النظام للمعلمة متابعة دخول الطلبة للاختبار، ومراجعة حالاتهم، وتحليل مفردات الاختبار، وتصحيح الأسئلة المقالية، وعرض الترتيب داخل الشعبة.
🎯 ملاحظات مهمة
- يعرض النظام حالات الطلبة: دخلوا الاختبار، لم يدخلوا، أرسلوا الإجابات، دخلوا ولم يرسلوا، وتم تصحيحهم.
- يتم تحديث بيانات الطلبة والتصفية مباشرة عند تغيير الشعبة أو الحالة.
- تحليل المفردات يُحتسب آليًا من السؤال 1 الى 12، وتُحدَّث نتائج السؤالين 13 و14 بعد حفظ تصحيح المعلمة.
- السؤال 10 يُحتسب جزئيًا من 2.5 درجة، والسؤال 11 يُحتسب جزئيًا من درجتين.
- تظهر الإجابات الصحيحة للأسئلة المقالية داخل نافذة التصحيح لمساندة المعلمة أثناء التصحيح.
🔐 الدخول
الولاية
المدرسة
⏳ جاري جلب المدارس...
كلمة المرور
النوافذ: نظرة عامة / الطلبة / تحليل المفردات / تصحيح المعلمة / الترتيب.
نظام المتابعة التربوية — PIRLS
—
نظرة عامة
الطلبة
تحليل المفردات
تصحيح المعلمة
الترتيب
عدد الطلبة
0
إجمالي المدرسة
دخلوا الاختبار
0
دخلوا أو أرسلوا أو تم تصحيحهم
لم يدخلوا
0
لم يبدأوا الاختبار
أرسلوا الإجابات
0
أرسلوا أو تم تصحيحهم
دخلوا ولم يرسلوا
0
دخلوا فقط
تم تصحيحهم
0
تم التصحيح
🧠 قراءة تشخيصية
سيتم تحديث القراءة بعد تحميل البيانات.
📌 متوسطات الشعب
لا توجد بيانات بعد.
👥 الطلبة (تصفية فورية)
الشعبة
الحالة
* يتم تحديث الطلبة فور تغيير أي اختيار.
لا توجد بيانات بعد.
📊 تحليل المفردات (جدول)
السؤال | المتوسط | نسبة الخطأ | نسبة الصح | نسبة المتروك
| السؤال | المتوسط | نسبة الخطأ | نسبة الصح | نسبة المتروك |
|---|---|---|---|---|
| لا توجد بيانات بعد. | ||||
✅ للمفردة 10: الاحتساب جزئي من 2.5 درجة، وكل جزء صحيح = 0.5.
✅ للمفردة 11: الاحتساب جزئي من 2 درجة، وكل جزء صحيح = 0.5.
✅ للمفردة 12: الدرجة الكلية 0.5.
✅ للمفردتين 13 و14: يتم الاحتساب وفق تصحيح المعلمة بعد الحفظ.
✅ للمفردة 11: الاحتساب جزئي من 2 درجة، وكل جزء صحيح = 0.5.
✅ للمفردة 12: الدرجة الكلية 0.5.
✅ للمفردتين 13 و14: يتم الاحتساب وفق تصحيح المعلمة بعد الحفظ.
✍️ تصحيح المقالي (13 و14)
تظهر هنا المحاولات التي أرسلت الإجابات وتحتاج تصحيح المقالي ثم الحفظ.
| الشعبة | الطالب/الطالبة | الآلي | المقالي | المجموع | إجراء |
|---|---|---|---|---|---|
| لا توجد بيانات بعد. | |||||
🏆 الترتيب داخل الشعبة
اختيار الشعبة
اختاري شعبة لعرض الترتيب.
* يتم في هذا القسم عرض مستويات الطلبة حسب المجموع النهائي داخل الشعبة، مع إمكانية التصدير لمعرفة الطلبة الأوائل ودعم المتابعة التربوية.
—
—
آلي
0
موضوعي
مقالي
0
يدوي
المجموع
0
نهائي
✍️ تصحيح المقالي (13 و14)
س13 + س14إجابة الطالب/الطالبة — السؤال 13
—
الإجابة الاسترشادية — السؤال 13
في البداية: خائف وقلق
في النهاية: فرح وسعيد بعد نجاة الدجاجة وصغارها
إجابة الطالب/الطالبة — السؤال 14
—
الإجابة الاسترشادية — السؤال 14
الجزء الأكثر تأثيرًا: مواجهة الدجاجة للثعلب وصراعها معه
السبب: لأنه أبرز الشجاعة وتحمل المسؤولية وحماية الصغار عند الخطر.
درجة السؤال 13
درجة السؤال 14
ملاحظات المعلمة
* بعد الحفظ سيتم تحديث تحليل المفردات 13 و14 تلقائيًا.
—
لا توجد بيانات بعد.
`;
return;
}sectionsHost.innerHTML = rows.map(r=>{
const sec = r.class_section || "";
const avg = r.avg_total ?? 0;
const cnt = r.students_count ?? 0;const opt1 = document.createElement("option");
opt1.value = sec; opt1.textContent = sec;
filterSection.appendChild(opt1);const opt2 = document.createElement("option");
opt2.value = sec; opt2.textContent = sec;
leaderSectionSel.appendChild(opt2);return `${esc(sec)}
عدد الطلبة: ${esc(cnt)}
${esc(avg)}
${msg.join("
")}
`;
}function renderCards(){
if(!state.filteredAttempts.length){
cardsHost.innerHTML = `")}
لا توجد بيانات مطابقة.
`;
return;
}cardsHost.innerHTML = state.filteredAttempts.map(r=>{
const status = r.status || "";
const total = r.total_score ?? 0;
const auto = r.auto_score ?? 0;
const essay = r.essay_score ?? 0;return `${esc(r.student_name || "—")}
الشعبة: ${esc(r.class_section || "—")}
${pillStatus(status)}
المجموع: ${esc(total)}
آلي: ${esc(auto)}
مقالي: ${esc(essay)}
${esc(statusAr(status))}
لا توجد تفاصيل متاحة.
`;
return;
}answersHost.innerHTML = review.map((item, idx)=>{
const qNo = idx + 1;
const answer = (item?.answer ?? "").toString().trim();
const isEmpty = !answer || answer === "متروك";
const type = item?.type || "";
const isEssay = (type === "essay");let title = (item?.question || ("السؤال " + qNo)).toString().trim() || ("السؤال " + qNo);
if(qNo === 10) title = "رتّب الأحداث حسب التسلسل الزمني";
if(qNo === 11) title = "صِلْ بين الشخصية ووصفها";let chips = [];
if(!isEssay && (qNo === 6 || qNo === 10 || qNo === 11) && !isEmpty){
const sc = scoreObjective01(qNo, answer);
const pctMastery = Math.round((sc.score01||0)*1000)/10;
const pctTxt = (pctMastery.toString().replace(/\.0$/,'')) + "%";
chips.push(`نسبة الإتقان: ${pctTxt}`);
chips.push(`الأجزاء الصحيحة: ${sc.gotParts}/${sc.maxParts}`);
chips.push(`الدرجة: ${sc.scoreValue} من ${sc.maxScore}`);
} else if(!isEssay && !isEmpty){
const sc = scoreObjective01(qNo, answer);
if(sc.score01 === 1) chips.push(`صحيح`);
else if(sc.score01 === 0) chips.push(`خطأ`);
if(qNo === 12){
chips.push(`الدرجة: ${sc.scoreValue} من ${sc.maxScore}`);
}
} else if(!isEssay && isEmpty){
chips.push(`متروك`);
} else if(isEssay){
chips.push(`مقالي`);
}let cls = "";
let label = "إجابة الطالب/الطالبة";
if(!isEssay){
if(isEmpty){
cls="empty"; label="إجابة الطالب/الطالبة — متروك";
}else if(qNo===6 || qNo===10 || qNo===11){
cls=""; label="إجابة الطالب/الطالبة";
}else{
const sc = scoreObjective01(qNo, answer);
if(sc.score01 === 1){ cls="correct"; label="إجابة الطالب/الطالبة — صحيحة"; }
else { cls="wrong"; label="إجابة الطالب/الطالبة — غير صحيحة"; }
}
}else if(isEmpty){
cls="empty";
}const manualKey = (qNo === 13) ? "q13_note" : (qNo === 14) ? "q14_note" : "";
const manualNote = manualKey ? (essayManual?.[manualKey] || "") : "";
const correctAnswer = getCorrectAnswerText(qNo);return `${qNo}
${esc(title)}
${esc(item?.cat || "")}
${chips.join("")}
${label}
${isEmpty ? "متروك" : esc(answer)}
${!isEssay ? `الإجابة الصحيحة
${esc(correctAnswer)}
` : `الإجابة الاسترشادية
${esc(correctAnswer)}
`}${isEssay ? `ملاحظة المقالي
${manualNote ? esc(manualNote) : "لا توجد ملاحظة محفوظة لهذا السؤال."}
` : ``}| الشعبة | الطالب/الطالبة | الحالة | الآلي | المقالي | المجموع |
|---|---|---|---|---|---|
| ${esc(r.class_section||"")} | ${esc(r.student_name||"")} | ${esc(statusAr(r.status||""))} | ${esc(r.auto_score??0)} | ${esc(r.essay_score??0)} | ${esc(r.total_score??0)} |
لا توجد نتائج لهذه الشعبة.
`;
return;
}leaderHost.innerHTML = `
${rows.map((r,i)=>`
`).join("")}
`;
}catch(e){
leaderMeta.textContent = "تعذر تحميل الترتيب: " + e.message;
}
});exportLeaderExcelBtn.addEventListener("click", ()=>{
const sec = state.lastLeaderboard.section;
const rows = state.lastLeaderboard.rows || [];
if(!sec || !rows.length){
showToast("err","اعرضي الترتيب أولًا ثم قومي بالتصدير.");
return;
}const table = `
#${i+1}
${esc(r.student_name || "—")}
${esc(statusAr(r.status || ""))}
${esc(r.total_score ?? 0)}
| الطالب/الطالبة | المجموع |
|---|---|
| ${esc(r.student_name||"")} | ${esc(r.total_score??0)} |
