Sınav ve Değerlendirme
Bu bölüm üç ayrı modülü kapsar: deneme sınavı sistemi, Maarif soru üretimi ve hata defteri.
Deneme Sınavı (practice_exam)
Modül: src/modules/practice_exam
Deneme sınavları okul genelinde yapılan LGS ve YKS hazırlık sınavlarının sonuçlarını sisteme almak ve analiz etmek için kullanılır.
Sınav Tipleri
İki farklı sistem tipi var:
| Tip | Açıklama |
|---|---|
PUBLISHER |
Yayıncı firmaların sınavları. Cevap anahtarı ve öğrenci cevapları dışarıdan dosya ile yüklenir. |
INTERNAL |
Okulun kendi optik formuyla yaptığı sınavlar (YES Optik sistemi). .bldm / .ftm formatında form tanımı yüklenir. |
İki seviye tipi:
| Seviye | Bölümler |
|---|---|
LGS |
Türkçe, Sosyal, Din, İngilizce, Matematik, Fen (6 bölüm) |
YKS |
TYT (Türkçe, Sosyal, Temel Matematik, Fen) + AYT (Edebiyat-Sosyal1, Sosyal2, Matematik, Fen) |
YKS sınavları iki modda çalışabilir:
FULL— TYT + AYT birlikteSINGLE_TYT— Sadece TYT
Tablolar
PracticeExams
| Alan | Açıklama |
|---|---|
answerKey |
JSONB — cevap anahtarı |
testNames |
JSONB — kitapçık/test adları eşlemesi |
formDefinition |
JSONB — .bldm/.ftm dosyasından ayrıştırılmış optik form tanımı |
bookletMapping |
JSONB — kitapçık numaralarının bölümlere eşlenmesi (örn. TYT=1, AYT=2) |
StudentExamResults
| Alan | Açıklama |
|---|---|
student |
JSONB — öğrenci bilgileri (ad, TC, sınıf, okul kodu) |
booklet |
Kitapçık türü |
answers |
JSONB — verilen cevaplar |
results |
JSONB — doğru/yanlış/boş hesaplamaları |
stats |
JSONB — net, yüzdelik, puan türleri, sıralama |
Optik Form Ayrıştırma
.bldm ve .ftm dosyaları özel bir format kullanan optik form tanım dosyalarıdır. OpticalFormParserService bu dosyaları okur ve formDefinition alanına kayıt edilecek yapıya dönüştürür.
ExamParserService ise yayıncı sınavlarının sonuç dosyalarını (genellikle XLSX veya metin) okur. Bu dosyalar zaman zaman Windows-1254 (Latin5) encoding'de gelir, Türkçe karakter bozulmalarını düzeltmek için özel dönüşüm uygulanır.
YKS Puanlama Motoru
src/modules/practice_exam/services/yks_scoring/ dizini bağımsız bir puanlama motorudur. Şunları hesaplar:
- Net puanlar — doğru - (yanlış × 0.25)
- Ağırlıklı puanlar — YKS puan türlerine göre (SAY, SÖZ, EA, DIL vb.)
- Normalizasyon — oturum içi ağırlıklı ortalama, standart sapma
- OGM puanları — Ölçme, Seçme ve Yerleştirme Merkezi normlarına dayalı tahmini puan
- Sıralama — oturum içi ve tahmini ulusal sıralama
- Yüzdelik dilimleri — her puan türü için
Harici skorlama (externalScoring: false değilse) OGM verilerini de dahil eder.
Maarif Soru Sihirbazı (maarif_question_wizard)
Modül: src/modules/maarif_question_wizard
PDF veya metin içeriğinden otomatik soru üretir. Türkiye Yüzyılı Maarif Modeli (TYMM) kurallarına göre çalışır.
TYMM Kuralları
Gemini'ye verilen sistem promptunda şu kurallar zorunlu tutulur:
- Sorular beceri temelli olmalı
- Her soru işlevsel bir bağlama dayanmalı (bağlam dekoratif olmamalı)
- Bağlam okunmadan soru çözülememeli
- Çeldiriciler tipik kavram yanılgılarına dayanmalı
- Dil sade, seviyeye uygun, öğretici
- Gereksiz işlem yükü yok
- 5 seçenek (A-E), soru kökü net
Teknik Detaylar
- PDF yüklendiyse
pdfjs-dist+canvaskütüphaneleriyle sayfa görsellerine render edilir (sunucu taraflı canvas —node-canvas) - Görseller Gemini'ye gönderilir
- Gemini çıktısı JSON modunda alınır
- Üretilen soru yapılandırılarak
MaarifQuestionRecordtablosuna kaydedilir - Aynı zamanda
question_bankmodülü üzerinden soru bankasına da eklenir
MaarifQuestionRecord Tablosu
| Alan | Açıklama |
|---|---|
userId |
Soruyu oluşturan kullanıcı |
lessonId / lessonTitle |
Bağlı olduğu ders |
gradeLabel |
Sınıf düzeyi (örn. "9. Sınıf") |
difficulty |
Zorluk seviyesi (varsayılan: "Orta") |
gainText |
Hedef kazanım metni |
processComponentCode |
İşlem bileşeni kodu |
workflowSource |
"generated" (AI üretimi) veya başka kaynak |
content |
JSON — üretilen sorunun tam içeriği |
Maarif Test Üreticisi (maarif_test_generator)
Modül: src/modules/maarif_test_generator
Soru sihirbazına benzer ama toplu test üretimi için tasarlanmıştır. Farkları:
- Birden fazla konu/kazanım seçilip tek seferde çok sorulu test üretilebilir
- Dosya içeriği veya seçilmiş ders içerikleri kaynak olarak kullanılabilir (max 3 içerik)
- Üretilen test
filestablosuna Maarif test MIME tipiyle (application/x-maarif-test+json) kaydedilir - Soru bankasına da eklenir
Kaynak dosya boyut sınırı: 15MB (üzerindeyse base64 inline gönderilmez, URI referansıyla gönderilir)
Hata Defteri (error_booklet)
Modül: src/modules/error_booklet
Öğrencinin sınavlarda yanlış yaptığı soruları tekrar çözmesi için kişisel bir çalışma defteri.
Yapı
Hata defteri ay bazlı organize edilir. Her kullanıcı için ayda en fazla bir defter olabilir (unique constraint: userId + year + month).
ErrorBooklet (Aylık defter)
└── ErrorBookletQuestions (Yanlış yapılan sorular)
ErrorBooklets Tablosu
| Alan | Açıklama |
|---|---|
userId |
Defterin sahibi |
year / month |
Ay bazlı organizasyon |
totalQuestions |
Defterdeki toplam soru sayısı |
solvedQuestions |
Tekrar çözülen soru sayısı |
correctAnswers |
Tekrar çözümde doğru yapılan soru sayısı |
status |
PENDING, IN_PROGRESS, COMPLETED |
ErrorBookletQuestions Tablosu
| Alan | Açıklama |
|---|---|
originalQuestionId |
Sınav sorusunun orijinal ID'si (LessonSectionExamQuestions) |
gainId |
Sorunun bağlı olduğu kazanım |
lessonSectionContentId |
Sorunun geldiği içerik |
previousWrongAnswer |
Orijinal sınavda verilen yanlış cevap (JSON) |
answer |
Hata defterinde verilen cevap (JSON) |
isCorrect |
Hata defterinde doğru yapıldı mı? |
answeredAt |
Ne zaman cevaplandı? |
Bir soru bir ay içinde birden fazla kez eklenemez (unique constraint: errorBookletId + originalQuestionId).