147 lines
4.4 KiB
Dart
147 lines
4.4 KiB
Dart
/**
|
|
* ==============================================================================
|
|
* SAQEL TEACHER STUDIO - DATA MODELS
|
|
* ==============================================================================
|
|
*
|
|
* نماذج البيانات الخاصة باستوديو المعلم:
|
|
* - نتائج فحص الجودة الإدراكي والأكاديمي (Quality Gate & MIT 20-25 Min Limit)
|
|
* - بيانات التسييل المالي وحسابات الحصص (55% المعلم / 15% المديرية / 30% المنصة)
|
|
* - أوراق العمل والواجبات المدرسية المصححة آلياً
|
|
* - استفسارات وأسئلة الطلبة الميدانية (غرفة الشكوك) والردود السقراطية المسجلة.
|
|
*/
|
|
|
|
class TeacherLessonAuditModel {
|
|
final String lessonTitle;
|
|
final String subject;
|
|
final double durationMinutes;
|
|
final bool durationGatePassed;
|
|
final String? durationWarning;
|
|
final int qualityScore;
|
|
final String approvalStatus;
|
|
final String curriculumAlignment;
|
|
final String audioClarity;
|
|
final int socraticStopsCount;
|
|
final String decision;
|
|
|
|
const TeacherLessonAuditModel({
|
|
required this.lessonTitle,
|
|
required this.subject,
|
|
required this.durationMinutes,
|
|
required this.durationGatePassed,
|
|
this.durationWarning,
|
|
required this.qualityScore,
|
|
required this.approvalStatus,
|
|
required this.curriculumAlignment,
|
|
required this.audioClarity,
|
|
required this.socraticStopsCount,
|
|
required this.decision,
|
|
});
|
|
|
|
factory TeacherLessonAuditModel.fromJson(Map<String, dynamic> json) {
|
|
return TeacherLessonAuditModel(
|
|
lessonTitle: json['lesson_title'] ?? '',
|
|
subject: json['subject'] ?? 'الفيزياء',
|
|
durationMinutes: (json['duration_minutes'] as num?)?.toDouble() ?? 22.5,
|
|
durationGatePassed: json['duration_gate_passed'] ?? true,
|
|
durationWarning: json['duration_warning'],
|
|
qualityScore: json['quality_score'] ?? 92,
|
|
approvalStatus: json['approval_status'] ?? 'approved_for_broadcast',
|
|
curriculumAlignment: json['curriculum_alignment'] ?? '96% تطابق مع مخرجات المنهاج الوزاري',
|
|
audioClarity: json['audio_clarity'] ?? '95% نقاء صوتي ممتاز',
|
|
socraticStopsCount: json['socratic_stops_count'] ?? 3,
|
|
decision: json['decision'] ?? 'الحصة معتمدة ومؤهلة للبث المشفر والعرض للبيع خارج الثقافة العسكرية 🚀',
|
|
);
|
|
}
|
|
}
|
|
|
|
class TeacherHomeworkModel {
|
|
final String id;
|
|
final String title;
|
|
final String className;
|
|
final String submitted;
|
|
final String dueDate;
|
|
final String averageScore;
|
|
final String status; // 'active', 'completed'
|
|
|
|
const TeacherHomeworkModel({
|
|
required this.id,
|
|
required this.title,
|
|
required this.className,
|
|
required this.submitted,
|
|
required this.dueDate,
|
|
required this.averageScore,
|
|
required this.status,
|
|
});
|
|
}
|
|
|
|
class StudentDoubtModel {
|
|
final String id;
|
|
final String studentName;
|
|
final String className;
|
|
final String question;
|
|
final String time;
|
|
final bool replied;
|
|
final bool voiceReply;
|
|
|
|
const StudentDoubtModel({
|
|
required this.id,
|
|
required this.studentName,
|
|
required this.className,
|
|
required this.question,
|
|
required this.time,
|
|
required this.replied,
|
|
required this.voiceReply,
|
|
});
|
|
|
|
StudentDoubtModel copyWith({
|
|
bool? replied,
|
|
bool? voiceReply,
|
|
}) {
|
|
return StudentDoubtModel(
|
|
id: id,
|
|
studentName: studentName,
|
|
className: className,
|
|
question: question,
|
|
time: time,
|
|
replied: replied ?? this.replied,
|
|
voiceReply: voiceReply ?? this.voiceReply,
|
|
);
|
|
}
|
|
}
|
|
|
|
class TeacherCourseModel {
|
|
final String id;
|
|
final String title;
|
|
final String grade;
|
|
final int totalLessons;
|
|
final int militaryStudents;
|
|
final int externalSubscribers;
|
|
final double priceJod;
|
|
final double netRevenueJod;
|
|
|
|
const TeacherCourseModel({
|
|
required this.id,
|
|
required this.title,
|
|
required this.grade,
|
|
required this.totalLessons,
|
|
required this.militaryStudents,
|
|
required this.externalSubscribers,
|
|
required this.priceJod,
|
|
required this.netRevenueJod,
|
|
});
|
|
}
|
|
|
|
class TeacherPayoutRequestModel {
|
|
final String cliqAlias;
|
|
final double amountJod;
|
|
final String requestedAt;
|
|
final String status; // 'queued', 'approved', 'completed'
|
|
|
|
const TeacherPayoutRequestModel({
|
|
required this.cliqAlias,
|
|
required this.amountJod,
|
|
required this.requestedAt,
|
|
required this.status,
|
|
});
|
|
}
|