Round 26: Grade Analytics, School Transport, Peer Assessment, Styling

- Grade Analytics & Reporting View: distribution histogram, student trajectory, class comparison, subject analysis, report generation
- School Transport & Bus Routes View: route management, student assignment, transport schedule, stop management
- Peer Assessment View: creation wizard, rating sliders, results radar chart, self vs peer comparison
- 3 new Prisma models: GradeReport, TransportRoute, TransportStop
- Extended PeerAssessment and StudentTransport models
- Enhanced classes-view with gradient header, glassmorphism cards
- Enhanced attendance-view with attendance rate gauge, status indicators
- Fixed duplicate variable name bugs in school-transport-view.tsx
- 12+ new API route files
- 300+ i18n keys added
- All views verified working in browser
This commit is contained in:
Mustafa Cetin committed 2026-07-30 07:20:05 +00:00
1 parent 3d0d518bb9
commit 7f0810c88f
28 files changed
+10264 -127

No files matched your search

+660
View File
@@ -6320,6 +6320,336 @@ const de: TranslationDict = {
'newsletter.engagement_distribution': 'Engagement-Verteilung',
'newsletter.recent_performance': 'Aktuelle Performance',
'newsletter.subscriber_growth': 'Abonnenten-Wachstum',
// ─── Peer Assessment ──────────────────────────────────────────────
'nav.peer-assessment': 'Peer-Beurteilung',
'pa.title': 'Peer-Beurteilung',
'pa.subtitle': 'Schüler bewerten Schüler — strukturiert und fair',
'pa.tab_dashboard': 'Dashboard',
'pa.tab_sessions': 'Sitzungen',
'pa.tab_create': 'Erstellen',
'pa.tab_conduct': 'Durchführen',
'pa.tab_results': 'Ergebnisse',
'pa.new_session': 'Neue Sitzung',
'pa.stat_total_sessions': 'Sitzungen gesamt',
'pa.stat_active': 'Aktiv',
'pa.stat_completed': 'Abgeschlossen',
'pa.stat_completion_rate': 'Abschlussrate',
'pa.sessions_overview': 'Sitzungsübersicht',
'pa.no_sessions': 'Noch keine Peer-Beurteilungen erstellt.',
'pa.create_first': 'Erste erstellen',
'pa.recent_activity': 'Letzte Aktivität',
'pa.no_activity': 'Keine Aktivitäten vorhanden.',
'pa.avg_ratings_by_type': 'Durchschnittsbewertungen nach Typ',
'pa.submitted': 'eingereicht',
'pa.search_sessions': 'Sitzungen suchen...',
'pa.all_statuses': 'Alle Status',
'pa.all_types': 'Alle Typen',
'pa.no_sessions_found': 'Keine Sitzungen gefunden.',
'pa.close_session': 'Sitzung schließen',
'pa.delete_session': 'Sitzung löschen',
'pa.progress': 'Fortschritt',
'pa.view_details': 'Details',
'pa.view_results': 'Ergebnisse',
'pa.create_session': 'Sitzung erstellen',
'pa.create_session_desc': 'Erstellen Sie eine neue Peer-Beurteilungssitzung mit Kriterien und Einstellungen.',
'pa.session_title': 'Titel',
'pa.session_title_placeholder': 'z.B. Projektdarstellung Klasse 8a',
'pa.assessment_type': 'Beurteilungstyp',
'pa.type_competency': 'Kompetenz',
'pa.type_project': 'Projekt',
'pa.type_presentation': 'Präsentation',
'pa.type_teamwork': 'Teamarbeit',
'pa.description': 'Beschreibung',
'pa.description_placeholder': 'Beschreibung der Peer-Beurteilung...',
'pa.settings': 'Einstellungen',
'pa.anonymity_mode': 'Anonymitätsmodus',
'pa.anonymous': 'Anonym',
'pa.semi_anonymous': 'Teil-anonym',
'pa.open': 'Offen',
'pa.anonymous_desc': 'Bewerter und Bewerteter bleiben anonym.',
'pa.semi_anonymous_desc': 'Bewerter bleibt anonym, Bewerteter ist sichtbar.',
'pa.open_desc': 'Alle Namen sind sichtbar.',
'pa.assign_mode': 'Zuweisungsmodus',
'pa.assign_manual': 'Manuell',
'pa.assign_random': 'Zufällig',
'pa.assign_group': 'Gruppenbasiert',
'pa.deadline': 'Abgabefrist',
'pa.criteria_builder': 'Kriterien-Builder',
'pa.add_criterion': 'Kriterium hinzufügen',
'pa.criterion_name': 'Name',
'pa.criterion_name_placeholder': 'z.B. Fachwissen',
'pa.criterion_desc': 'Beschreibung',
'pa.criterion_desc_placeholder': 'Beschreibung des Kriteriums...',
'pa.max_score': 'Max. Punkte',
'pa.select_session': 'Wählen Sie eine Sitzung, um eine Bewertung durchzuführen.',
'pa.go_to_sessions': 'Zu den Sitzungen',
'pa.criteria': 'Kriterien',
'pa.points': 'Punkte',
'pa.assessment_list': 'Bewertungsliste',
'pa.no_assessments': 'Keine Bewertungen in dieser Sitzung.',
'pa.assessed_by': 'Bewertet von',
'pa.anonymous_mode': 'Anonymer Modus',
'pa.anonymous_assessor': 'Anonymer Bewerter',
'pa.rate': 'Bewerten',
'pa.rate_peer': 'Peer bewerten',
'pa.rating_for': 'Bewertung für',
'pa.anonymous_mode_active': 'Anonymer Modus aktiv — Ihre Bewertung ist anonym.',
'pa.criteria_ratings': 'Kriterienbewertungen',
'pa.overall_rating': 'Gesamtbewertung',
'pa.feedback_comment': 'Feedback-Kommentar',
'pa.comment_placeholder': 'Schreiben Sie hier Ihr Feedback...',
'pa.submit_assessment': 'Bewertung einreichen',
'pa.select_session_results': 'Sitzung für Ergebnisse auswählen',
'pa.no_sessions_for_results': 'Keine Sitzungen für Ergebnisse verfügbar.',
'pa.total_assessments': 'Bewertungen gesamt',
'pa.overall_average': 'Gesamtdurchschnitt',
'pa.std_deviation': 'Standardabweichung',
'pa.unique_assessors': 'Eindeutige Bewerter',
'pa.unique_assessed': 'Eindeutig Bewertete',
'pa.competency_radar': 'Kompetenz-Radar',
'pa.average_score': 'Durchschnitt',
'pa.student_results': 'Schülerergebnisse',
'pa.no_results': 'Keine Ergebnisse verfügbar.',
'pa.assessments_received': 'Bewertungen erhalten',
'pa.more_comments': 'weitere Kommentare',
'pa.self_vs_peer': 'Selbst- vs. Peer-Bewertung',
'pa.peer_avg': 'Peer-Durchschnitt',
'pa.self_avg': 'Selbst-Bewertung',
'pa.outliers_detected': 'Ausreißer erkannt',
'pa.rated_by': 'Bewertet von',
'pa.ratings': 'Bewertungen',
'pa.results_title': 'Ergebnisse',
'pa.status_active': 'Aktiv',
'pa.status_completed': 'Abgeschlossen',
'pa.status_closed': 'Geschlossen',
'pa.status_pending': 'Ausstehend',
'pa.status_submitted': 'Eingereicht',
// Navigation
'nav.school-transport': 'Schulverkehr',
// Transport
'transport.title': 'Schulverkehr & Busrouten',
'transport.subtitle': 'Schülertransport, Routen und Logistik verwalten',
'transport.total_students': 'Schüler gesamt',
'transport.active_routes': 'Aktive Routen',
'transport.total_capacity': 'Gesamtkapazität',
'transport.avg_distance': 'Ø Entfernung',
'transport.over_capacity_warning': 'Route(n) über Kapazität',
'transport.over_capacity_desc': 'Eine oder mehrere Routen haben mehr Schüler zugewiesen als Plätze verfügbar sind.',
'transport.type_distribution': 'Transportart-Verteilung',
'transport.type_distribution_desc': 'Verteilung der Schüler nach Transportart',
'transport.route_capacity': 'Routenkapazität',
'transport.route_capacity_desc': 'Belegung vs. Kapazität der aktiven Routen',
'transport.assigned': 'Zugewiesen',
'transport.capacity': 'Kapazität',
'transport.type_summary': 'Transportart-Übersicht',
'transport.quick_actions': 'Schnellaktionen',
'transport.add_route': 'Route hinzufügen',
'transport.assign_transport': 'Transport zuweisen',
'transport.bulk_assign': 'Massenzuweisung',
'transport.search_routes': 'Routen suchen...',
'transport.filter_type': 'Transportart',
'transport.filter_status': 'Status',
'transport.all_types': 'Alle Arten',
'transport.all_status': 'Alle Status',
'transport.active': 'Aktiv',
'transport.inactive': 'Inaktiv',
'transport.no_routes': 'Keine Routen gefunden',
'transport.create_first_route': 'Erste Route erstellen',
'transport.stops_count': '{count} Haltestellen',
'transport.add_stop': 'Haltestelle',
'transport.no_data': 'Noch keine Daten vorhanden',
'transport.no_routes_data': 'Keine Routen mit Daten vorhanden',
'transport.search_students': 'Schüler suchen...',
'transport.no_assignments': 'Keine Transportzuweisungen vorhanden',
'transport.student': 'Schüler',
'transport.type': 'Art',
'transport.route': 'Route',
'transport.stop': 'Haltestelle',
'transport.pickup': 'Abholung',
'transport.dropoff': 'Absetzung',
'transport.distance': 'Entfernung',
'transport.actions': 'Aktionen',
'transport.no_schedule': 'Kein Fahrplan verfügbar',
'transport.no_schedule_desc': 'Erstellen Sie Routen mit Haltestellen, um den Fahrplan zu sehen.',
'transport.my_transport': 'Mein Transport',
'transport.my_route': 'Meine Route',
'transport.no_personal_transport': 'Keine Transportinformationen verfügbar',
'transport.tab_overview': 'Übersicht',
'transport.tab_routes': 'Routen',
'transport.tab_assignments': 'Zuweisungen',
'transport.tab_schedule': 'Fahrplan',
'transport.edit_route': 'Route bearbeiten',
'transport.create_route': 'Route erstellen',
'transport.edit_route_desc': 'Bearbeiten Sie die Routendetails',
'transport.create_route_desc': 'Erstellen Sie eine neue Transportroute',
'transport.route_number': 'Routennummer',
'transport.route_name': 'Routenname',
'transport.route_name_placeholder': 'z.B. Nordroute',
'transport.transport_type': 'Transportart',
'transport.driver_name': 'Fahrer',
'transport.driver_name_placeholder': 'Name des Fahrers',
'transport.driver_phone': 'Telefon Fahrer',
'transport.notes': 'Notizen',
'transport.notes_placeholder': 'Zusätzliche Hinweise...',
'transport.edit_assignment': 'Zuweisung bearbeiten',
'transport.edit_assignment_desc': 'Bearbeiten Sie die Transportzuweisung',
'transport.assign_transport_desc': 'Weisen Sie einem Schüler eine Transportart zu',
'transport.student_id': 'Schüler-ID',
'transport.student_id_placeholder': 'Schüler-ID eingeben',
'transport.assign_route': 'Route zuweisen',
'transport.no_route': 'Keine Route',
'transport.stop_name': 'Haltestelle',
'transport.stop_name_placeholder': 'z.B. Hauptbahnhof',
'transport.pickup_time': 'Abholzeit',
'transport.dropoff_time': 'Absetzzeit',
'transport.distance_km': 'Entfernung (km)',
'transport.add_stop_to': 'Haltestelle zu Route {route} hinzufügen',
'transport.add_stop_desc': 'Fügen Sie eine neue Haltestelle zur Route hinzu',
'transport.stop_order': 'Reihenfolge',
'transport.stop_order_auto': 'Automatisch',
'transport.address': 'Adresse',
'transport.address_placeholder': 'Straße, PLZ Ort',
'transport.route_detail_desc': 'Detaillierte Informationen zur Route',
'transport.driver_info': 'Fahrerinformationen',
'transport.utilization': 'Auslastung',
'transport.stops_timeline': 'Haltestellen-Fahrplan',
'transport.assigned_students': 'Zugewiesene Schüler',
'transport.confirm_delete': 'Löschen bestätigen',
'transport.confirm_delete_desc': 'Möchten Sie dieses Element wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.',
'transport.bulk_assign_desc': 'Weisen Sie mehreren Schülern gleichzeitig eine Transportart zu',
'transport.student_ids': 'Schüler-IDs',
'transport.student_ids_placeholder': 'Eine ID pro Zeile',
'transport.student_ids_help': 'Geben Sie eine Schüler-ID pro Zeile ein',
'transport.assign': 'Zuweisen',
'transport.type_bus': 'Bus',
'transport.type_tram': 'Straßenbahn',
'transport.type_train': 'Zug',
'transport.type_walk': 'Zu Fuß',
'transport.type_car': 'Auto',
'transport.type_bike': 'Fahrrad',
'transport.type_other': 'Sonstige',
'transport.status': 'Status',
// ─── Grade Analytics ──────────────────────────────────────────────
'nav.grade-analytics': 'Notenanalyse',
'grade_analytics.title': 'Notenanalyse & Berichte',
'grade_analytics.subtitle': 'Umfassende Analyse der Notenverteilung, Schülerleistung und Klassenvergleiche auf der deutschen Notenskala (1-6).',
'grade_analytics.loading': 'Notenanalyse wird geladen...',
'grade_analytics.total_grades': 'Gesamtnoten',
'grade_analytics.average_grade': 'Durchschnittsnote',
'grade_analytics.finalized': 'Finalisiert',
'grade_analytics.risk_students': 'Risikoschüler',
'grade_analytics.filters': 'Filter',
'grade_analytics.all_classes': 'Alle Klassen',
'grade_analytics.all_subjects': 'Alle Fächer',
'grade_analytics.distribution': 'Verteilung',
'grade_analytics.performance': 'Leistung',
'grade_analytics.class_comparison': 'Klassenvergleich',
'grade_analytics.subject_analysis': 'Fachanalyse',
'grade_analytics.trends': 'Trends',
'grade_analytics.reports': 'Berichte',
'grade_analytics.grade_distribution': 'Notenverteilung',
'grade_analytics.distribution_desc': 'Verteilung der Noten auf der deutschen Skala',
'grade_analytics.scale': 'Skala',
'grade_analytics.count': 'Anzahl',
'grade_analytics.bell_curve': 'Glockenkurve',
'grade_analytics.mean': 'Mittelwert',
'grade_analytics.std_dev': 'Standardabweichung',
'grade_analytics.grade': 'Note',
'grade_analytics.view_overall': 'Gesamt',
'grade_analytics.view_subject': 'Nach Fach',
'grade_analytics.view_class': 'Nach Klasse',
'grade_analytics.distribution_by_subject': 'Notenverteilung nach Fach',
'grade_analytics.distribution_by_subject_desc': 'Vergleich der Notenverteilung zwischen verschiedenen Fächern',
'grade_analytics.distribution_by_class': 'Notenverteilung nach Klasse',
'grade_analytics.distribution_by_class_desc': 'Vergleich der Notenverteilung zwischen verschiedenen Klassen',
'grade_analytics.top_performers': 'Beste Schüler',
'grade_analytics.top_performers_desc': 'Schüler mit dem niedrigsten Notendurchschnitt (beste Leistung)',
'grade_analytics.bottom_performers': 'Schwächste Schüler',
'grade_analytics.bottom_performers_desc': 'Schüler mit dem höchsten Notendurchschnitt (schwachste Leistung)',
'grade_analytics.grades': 'Noten',
'grade_analytics.no_data': 'Keine Daten verfügbar',
'grade_analytics.risk_students_title': 'Risikoschüler',
'grade_analytics.risk_students_desc': 'Schüler mit einem Durchschnitt von 4,5 oder schlechter (tendieren zum Durchfallen)',
'grade_analytics.at_risk': 'Gefährdet',
'grade_analytics.no_risk_students': 'Keine Risikoschüler erkannt',
'grade_analytics.improvement_detection': 'Verbesserungs-/Verschlechterungserkennung',
'grade_analytics.improvement_detection_desc': 'Schüler mit signifikanten Notenveränderungen über die Zeit',
'grade_analytics.first_grade': 'Erste Note',
'grade_analytics.last_grade': 'Letzte Note',
'grade_analytics.improving': 'Verbesserung',
'grade_analytics.regressing': 'Verschlechterung',
'grade_analytics.percentile_ranking': 'Perzentil-Rangfolge',
'grade_analytics.percentile_ranking_desc': 'Rangfolge der Schüler nach Perzentil basierend auf dem Notendurchschnitt',
'grade_analytics.percentile': 'Perzentil',
'grade_analytics.class_average_comparison': 'Klassen-Durchschnittsvergleich',
'grade_analytics.class_average_comparison_desc': 'Vergleich der durchschnittlichen Noten zwischen den Klassen',
'grade_analytics.average': 'Durchschnitt',
'grade_analytics.median': 'Median',
'grade_analytics.class_ranking': 'Klassenrangliste',
'grade_analytics.class_ranking_desc': 'Rangfolge der Klassen nach Notendurchschnitt (niedriger = besser)',
'grade_analytics.anonymized': 'Anonymisiert',
'grade_analytics.grade_level': 'Klassenstufe',
'grade_analytics.excellent': 'Ausgezeichnet',
'grade_analytics.good': 'Gut',
'grade_analytics.satisfactory': 'Befriedigend',
'grade_analytics.needs_improvement': 'Verbesserungsbedarf',
'grade_analytics.subject_comparison_across_classes': 'Fachvergleich über Klassen',
'grade_analytics.subject_comparison_across_classes_desc': 'Vergleich der Fachnoten zwischen verschiedenen Klassen',
'grade_analytics.teacher_comparison': 'Lehrervergleich',
'grade_analytics.teacher_comparison_desc': 'Vergleich der Schülerleistung nach Lehrer (nur für Administratoren)',
'grade_analytics.subject_difficulty_ranking': 'Fachschwierigkeitsrangliste',
'grade_analytics.subject_difficulty_ranking_desc': 'Rangfolge der Fächer nach durchschnittlicher Note (höher = schwieriger)',
'grade_analytics.average_grade_short': 'Durchschnittsnote',
'grade_analytics.variance': 'Varianz',
'grade_analytics.subject_performance_radar': 'Fachleistungsradar',
'grade_analytics.subject_performance_radar_desc': 'Radardiagramm der Fachleistung (höher = bessere Leistung)',
'grade_analytics.performance': 'Leistung',
'grade_analytics.cross_subject_correlation': 'Fachübergreifende Korrelation',
'grade_analytics.cross_subject_correlation_desc': 'Korrelationsanalyse zwischen verschiedenen Fächern',
'grade_analytics.subject_recommendations': 'Fachempfehlungen',
'grade_analytics.subject_recommendations_desc': 'Automatische Empfehlungen basierend auf der Fachanalyse',
'grade_analytics.grade_trends_over_time': 'Notentrends über die Zeit',
'grade_analytics.grade_trends_over_time_desc': 'Entwicklung der durchschnittlichen Noten über die Zeit',
'grade_analytics.assessment_count': 'Anzahl Bewertungen',
'grade_analytics.no_trend_data': 'Keine Trenddaten verfügbar',
'grade_analytics.student_trajectories': 'Schülerverläufe',
'grade_analytics.student_trajectories_desc': 'Notenverlauf einzelner Schüler über die Zeit',
'grade_analytics.report_templates': 'Berichtsvorlagen',
'grade_analytics.report_templates_desc': 'Wählen Sie eine Vorlage zur schnellen Berichtserstellung',
'grade_analytics.quarterly': 'Quartalsbericht',
'grade_analytics.quarterly_desc': 'Notenanalyse für ein Quartal',
'grade_analytics.semester': 'Semesterbericht',
'grade_analytics.semester_desc': 'Umfassende Semesteranalyse',
'grade_analytics.annual': 'Jahresbericht',
'grade_analytics.annual_desc': 'Vollständiger Jahresbericht',
'grade_analytics.custom': 'Benutzerdefiniert',
'grade_analytics.custom_desc': 'Erstellen Sie einen individuellen Bericht',
'grade_analytics.generated_reports': 'Erstellte Berichte',
'grade_analytics.generated_reports_desc': 'Liste aller erstellten Berichte',
'grade_analytics.no_reports': 'Noch keine Berichte erstellt',
'grade_analytics.generate_report': 'Bericht erstellen',
'grade_analytics.report_builder': 'Berichtsgenerator',
'grade_analytics.report_title': 'Berichtstitel',
'grade_analytics.report_title_placeholder': 'Berichtstitel eingeben...',
'grade_analytics.report_type': 'Berichtstyp',
'grade_analytics.date_from': 'Von Datum',
'grade_analytics.date_to': 'Bis Datum',
'grade_analytics.report_metrics': 'Berichtsmetriken',
'grade_analytics.metric_distribution': 'Notenverteilung',
'grade_analytics.metric_averages': 'Durchschnitte',
'grade_analytics.metric_class_comparison': 'Klassenvergleich',
'grade_analytics.metric_subject_analysis': 'Fachanalyse',
'grade_analytics.metric_student_grades': 'Schülernoten',
'grade_analytics.metric_trends': 'Trends',
'grade_analytics.generating': 'Wird erstellt...',
'grade_analytics.generate': 'Erstellen',
'grade_analytics.completed': 'Abgeschlossen',
'grade_analytics.pending': 'Ausstehend',
'grade_analytics.failed': 'Fehlgeschlagen',
};
const en: TranslationDict = {
@@ -12638,6 +12968,336 @@ const en: TranslationDict = {
'newsletter.engagement_distribution': 'Engagement Distribution',
'newsletter.recent_performance': 'Recent Performance',
'newsletter.subscriber_growth': 'Subscriber Growth',
// ─── Peer Assessment ──────────────────────────────────────────────
'nav.peer-assessment': 'Peer Assessment',
'pa.title': 'Peer Assessment',
'pa.subtitle': 'Students assess students — structured and fair',
'pa.tab_dashboard': 'Dashboard',
'pa.tab_sessions': 'Sessions',
'pa.tab_create': 'Create',
'pa.tab_conduct': 'Conduct',
'pa.tab_results': 'Results',
'pa.new_session': 'New Session',
'pa.stat_total_sessions': 'Total Sessions',
'pa.stat_active': 'Active',
'pa.stat_completed': 'Completed',
'pa.stat_completion_rate': 'Completion Rate',
'pa.sessions_overview': 'Sessions Overview',
'pa.no_sessions': 'No peer assessments created yet.',
'pa.create_first': 'Create First',
'pa.recent_activity': 'Recent Activity',
'pa.no_activity': 'No activities available.',
'pa.avg_ratings_by_type': 'Average Ratings by Type',
'pa.submitted': 'submitted',
'pa.search_sessions': 'Search sessions...',
'pa.all_statuses': 'All Statuses',
'pa.all_types': 'All Types',
'pa.no_sessions_found': 'No sessions found.',
'pa.close_session': 'Close Session',
'pa.delete_session': 'Delete Session',
'pa.progress': 'Progress',
'pa.view_details': 'Details',
'pa.view_results': 'Results',
'pa.create_session': 'Create Session',
'pa.create_session_desc': 'Create a new peer assessment session with criteria and settings.',
'pa.session_title': 'Title',
'pa.session_title_placeholder': 'e.g. Project Presentation Class 8a',
'pa.assessment_type': 'Assessment Type',
'pa.type_competency': 'Competency',
'pa.type_project': 'Project',
'pa.type_presentation': 'Presentation',
'pa.type_teamwork': 'Teamwork',
'pa.description': 'Description',
'pa.description_placeholder': 'Description of the peer assessment...',
'pa.settings': 'Settings',
'pa.anonymity_mode': 'Anonymity Mode',
'pa.anonymous': 'Anonymous',
'pa.semi_anonymous': 'Semi-anonymous',
'pa.open': 'Open',
'pa.anonymous_desc': 'Assessor and assessed remain anonymous.',
'pa.semi_anonymous_desc': 'Assessor is anonymous, assessed is visible.',
'pa.open_desc': 'All names are visible.',
'pa.assign_mode': 'Assignment Mode',
'pa.assign_manual': 'Manual',
'pa.assign_random': 'Random',
'pa.assign_group': 'Group-based',
'pa.deadline': 'Deadline',
'pa.criteria_builder': 'Criteria Builder',
'pa.add_criterion': 'Add Criterion',
'pa.criterion_name': 'Name',
'pa.criterion_name_placeholder': 'e.g. Subject Knowledge',
'pa.criterion_desc': 'Description',
'pa.criterion_desc_placeholder': 'Description of the criterion...',
'pa.max_score': 'Max Score',
'pa.select_session': 'Select a session to conduct an assessment.',
'pa.go_to_sessions': 'Go to Sessions',
'pa.criteria': 'Criteria',
'pa.points': 'Points',
'pa.assessment_list': 'Assessment List',
'pa.no_assessments': 'No assessments in this session.',
'pa.assessed_by': 'Assessed by',
'pa.anonymous_mode': 'Anonymous Mode',
'pa.anonymous_assessor': 'Anonymous Assessor',
'pa.rate': 'Rate',
'pa.rate_peer': 'Rate Peer',
'pa.rating_for': 'Rating for',
'pa.anonymous_mode_active': 'Anonymous mode active — your assessment is anonymous.',
'pa.criteria_ratings': 'Criteria Ratings',
'pa.overall_rating': 'Overall Rating',
'pa.feedback_comment': 'Feedback Comment',
'pa.comment_placeholder': 'Write your feedback here...',
'pa.submit_assessment': 'Submit Assessment',
'pa.select_session_results': 'Select session for results',
'pa.no_sessions_for_results': 'No sessions available for results.',
'pa.total_assessments': 'Total Assessments',
'pa.overall_average': 'Overall Average',
'pa.std_deviation': 'Standard Deviation',
'pa.unique_assessors': 'Unique Assessors',
'pa.unique_assessed': 'Unique Assessed',
'pa.competency_radar': 'Competency Radar',
'pa.average_score': 'Average',
'pa.student_results': 'Student Results',
'pa.no_results': 'No results available.',
'pa.assessments_received': 'assessments received',
'pa.more_comments': 'more comments',
'pa.self_vs_peer': 'Self vs Peer Assessment',
'pa.peer_avg': 'Peer Average',
'pa.self_avg': 'Self Assessment',
'pa.outliers_detected': 'Outliers Detected',
'pa.rated_by': 'Rated by',
'pa.ratings': 'ratings',
'pa.results_title': 'Results',
'pa.status_active': 'Active',
'pa.status_completed': 'Completed',
'pa.status_closed': 'Closed',
'pa.status_pending': 'Pending',
'pa.status_submitted': 'Submitted',
// Navigation
'nav.school-transport': 'School Transport',
// Transport
'transport.title': 'School Transport & Bus Routes',
'transport.subtitle': 'Manage student transport, routes and logistics',
'transport.total_students': 'Total Students',
'transport.active_routes': 'Active Routes',
'transport.total_capacity': 'Total Capacity',
'transport.avg_distance': 'Avg Distance',
'transport.over_capacity_warning': 'route(s) over capacity',
'transport.over_capacity_desc': 'One or more routes have more students assigned than available seats.',
'transport.type_distribution': 'Transport Type Distribution',
'transport.type_distribution_desc': 'Distribution of students by transport type',
'transport.route_capacity': 'Route Capacity',
'transport.route_capacity_desc': 'Occupancy vs. capacity of active routes',
'transport.assigned': 'Assigned',
'transport.capacity': 'Capacity',
'transport.type_summary': 'Transport Type Summary',
'transport.quick_actions': 'Quick Actions',
'transport.add_route': 'Add Route',
'transport.assign_transport': 'Assign Transport',
'transport.bulk_assign': 'Bulk Assign',
'transport.search_routes': 'Search routes...',
'transport.filter_type': 'Transport Type',
'transport.filter_status': 'Status',
'transport.all_types': 'All Types',
'transport.all_status': 'All Status',
'transport.active': 'Active',
'transport.inactive': 'Inactive',
'transport.no_routes': 'No routes found',
'transport.create_first_route': 'Create First Route',
'transport.stops_count': '{count} stops',
'transport.add_stop': 'Add Stop',
'transport.no_data': 'No data available yet',
'transport.no_routes_data': 'No routes with data available',
'transport.search_students': 'Search students...',
'transport.no_assignments': 'No transport assignments found',
'transport.student': 'Student',
'transport.type': 'Type',
'transport.route': 'Route',
'transport.stop': 'Stop',
'transport.pickup': 'Pickup',
'transport.dropoff': 'Dropoff',
'transport.distance': 'Distance',
'transport.actions': 'Actions',
'transport.no_schedule': 'No schedule available',
'transport.no_schedule_desc': 'Create routes with stops to see the schedule.',
'transport.my_transport': 'My Transport',
'transport.my_route': 'My Route',
'transport.no_personal_transport': 'No transport information available',
'transport.tab_overview': 'Overview',
'transport.tab_routes': 'Routes',
'transport.tab_assignments': 'Assignments',
'transport.tab_schedule': 'Schedule',
'transport.edit_route': 'Edit Route',
'transport.create_route': 'Create Route',
'transport.edit_route_desc': 'Edit the route details',
'transport.create_route_desc': 'Create a new transport route',
'transport.route_number': 'Route Number',
'transport.route_name': 'Route Name',
'transport.route_name_placeholder': 'e.g. North Route',
'transport.transport_type': 'Transport Type',
'transport.driver_name': 'Driver',
'transport.driver_name_placeholder': 'Driver name',
'transport.driver_phone': 'Driver Phone',
'transport.notes': 'Notes',
'transport.notes_placeholder': 'Additional notes...',
'transport.edit_assignment': 'Edit Assignment',
'transport.edit_assignment_desc': 'Edit the transport assignment',
'transport.assign_transport_desc': 'Assign a transport type to a student',
'transport.student_id': 'Student ID',
'transport.student_id_placeholder': 'Enter student ID',
'transport.assign_route': 'Assign Route',
'transport.no_route': 'No Route',
'transport.stop_name': 'Stop Name',
'transport.stop_name_placeholder': 'e.g. Central Station',
'transport.pickup_time': 'Pickup Time',
'transport.dropoff_time': 'Dropoff Time',
'transport.distance_km': 'Distance (km)',
'transport.add_stop_to': 'Add Stop to Route {route}',
'transport.add_stop_desc': 'Add a new stop to the route',
'transport.stop_order': 'Order',
'transport.stop_order_auto': 'Auto',
'transport.address': 'Address',
'transport.address_placeholder': 'Street, ZIP City',
'transport.route_detail_desc': 'Detailed route information',
'transport.driver_info': 'Driver Information',
'transport.utilization': 'Utilization',
'transport.stops_timeline': 'Stops Timeline',
'transport.assigned_students': 'Assigned Students',
'transport.confirm_delete': 'Confirm Delete',
'transport.confirm_delete_desc': 'Are you sure you want to delete this item? This action cannot be undone.',
'transport.bulk_assign_desc': 'Assign transport to multiple students at once',
'transport.student_ids': 'Student IDs',
'transport.student_ids_placeholder': 'One ID per line',
'transport.student_ids_help': 'Enter one student ID per line',
'transport.assign': 'Assign',
'transport.type_bus': 'Bus',
'transport.type_tram': 'Tram',
'transport.type_train': 'Train',
'transport.type_walk': 'Walk',
'transport.type_car': 'Car',
'transport.type_bike': 'Bike',
'transport.type_other': 'Other',
'transport.status': 'Status',
// ─── Grade Analytics ──────────────────────────────────────────────
'nav.grade-analytics': 'Grade Analytics',
'grade_analytics.title': 'Grade Analytics & Reporting',
'grade_analytics.subtitle': 'Comprehensive analysis of grade distribution, student performance, and class comparisons on the German grading scale (1-6).',
'grade_analytics.loading': 'Loading grade analytics...',
'grade_analytics.total_grades': 'Total Grades',
'grade_analytics.average_grade': 'Average Grade',
'grade_analytics.finalized': 'Finalized',
'grade_analytics.risk_students': 'Risk Students',
'grade_analytics.filters': 'Filters',
'grade_analytics.all_classes': 'All Classes',
'grade_analytics.all_subjects': 'All Subjects',
'grade_analytics.distribution': 'Distribution',
'grade_analytics.performance': 'Performance',
'grade_analytics.class_comparison': 'Class Comparison',
'grade_analytics.subject_analysis': 'Subject Analysis',
'grade_analytics.trends': 'Trends',
'grade_analytics.reports': 'Reports',
'grade_analytics.grade_distribution': 'Grade Distribution',
'grade_analytics.distribution_desc': 'Distribution of grades on the German scale',
'grade_analytics.scale': 'scale',
'grade_analytics.count': 'Count',
'grade_analytics.bell_curve': 'Bell Curve',
'grade_analytics.mean': 'Mean',
'grade_analytics.std_dev': 'Std Dev',
'grade_analytics.grade': 'Grade',
'grade_analytics.view_overall': 'Overall',
'grade_analytics.view_subject': 'By Subject',
'grade_analytics.view_class': 'By Class',
'grade_analytics.distribution_by_subject': 'Grade Distribution by Subject',
'grade_analytics.distribution_by_subject_desc': 'Comparison of grade distribution across subjects',
'grade_analytics.distribution_by_class': 'Grade Distribution by Class',
'grade_analytics.distribution_by_class_desc': 'Comparison of grade distribution across classes',
'grade_analytics.top_performers': 'Top Performers',
'grade_analytics.top_performers_desc': 'Students with the lowest grade average (best performance)',
'grade_analytics.bottom_performers': 'Bottom Performers',
'grade_analytics.bottom_performers_desc': 'Students with the highest grade average (weakest performance)',
'grade_analytics.grades': 'grades',
'grade_analytics.no_data': 'No data available',
'grade_analytics.risk_students_title': 'Risk Students',
'grade_analytics.risk_students_desc': 'Students with an average of 4.5 or worse (trending towards failing)',
'grade_analytics.at_risk': 'At Risk',
'grade_analytics.no_risk_students': 'No risk students detected',
'grade_analytics.improvement_detection': 'Improvement/Regression Detection',
'grade_analytics.improvement_detection_desc': 'Students with significant grade changes over time',
'grade_analytics.first_grade': 'First Grade',
'grade_analytics.last_grade': 'Last Grade',
'grade_analytics.improving': 'Improving',
'grade_analytics.regressing': 'Regressing',
'grade_analytics.percentile_ranking': 'Percentile Ranking',
'grade_analytics.percentile_ranking_desc': 'Student ranking by percentile based on grade average',
'grade_analytics.percentile': 'Percentile',
'grade_analytics.class_average_comparison': 'Class Average Comparison',
'grade_analytics.class_average_comparison_desc': 'Comparison of average grades between classes',
'grade_analytics.average': 'Average',
'grade_analytics.median': 'Median',
'grade_analytics.class_ranking': 'Class Ranking',
'grade_analytics.class_ranking_desc': 'Class ranking by grade average (lower = better)',
'grade_analytics.anonymized': 'Anonymized',
'grade_analytics.grade_level': 'Grade Level',
'grade_analytics.excellent': 'Excellent',
'grade_analytics.good': 'Good',
'grade_analytics.satisfactory': 'Satisfactory',
'grade_analytics.needs_improvement': 'Needs Improvement',
'grade_analytics.subject_comparison_across_classes': 'Subject Comparison Across Classes',
'grade_analytics.subject_comparison_across_classes_desc': 'Comparison of subject grades across different classes',
'grade_analytics.teacher_comparison': 'Teacher Comparison',
'grade_analytics.teacher_comparison_desc': 'Comparison of student performance by teacher (admin only)',
'grade_analytics.subject_difficulty_ranking': 'Subject Difficulty Ranking',
'grade_analytics.subject_difficulty_ranking_desc': 'Subject ranking by average grade (higher = harder)',
'grade_analytics.average_grade_short': 'Average Grade',
'grade_analytics.variance': 'Variance',
'grade_analytics.subject_performance_radar': 'Subject Performance Radar',
'grade_analytics.subject_performance_radar_desc': 'Radar chart of subject performance (higher = better)',
'grade_analytics.performance': 'Performance',
'grade_analytics.cross_subject_correlation': 'Cross-Subject Correlation',
'grade_analytics.cross_subject_correlation_desc': 'Correlation analysis between different subjects',
'grade_analytics.subject_recommendations': 'Subject Recommendations',
'grade_analytics.subject_recommendations_desc': 'Automatic recommendations based on subject analysis',
'grade_analytics.grade_trends_over_time': 'Grade Trends Over Time',
'grade_analytics.grade_trends_over_time_desc': 'Development of average grades over time',
'grade_analytics.assessment_count': 'Assessment Count',
'grade_analytics.no_trend_data': 'No trend data available',
'grade_analytics.student_trajectories': 'Student Trajectories',
'grade_analytics.student_trajectories_desc': 'Grade trajectory of individual students over time',
'grade_analytics.report_templates': 'Report Templates',
'grade_analytics.report_templates_desc': 'Choose a template for quick report generation',
'grade_analytics.quarterly': 'Quarterly',
'grade_analytics.quarterly_desc': 'Quarterly grade analysis',
'grade_analytics.semester': 'Semester',
'grade_analytics.semester_desc': 'Comprehensive semester analysis',
'grade_analytics.annual': 'Annual',
'grade_analytics.annual_desc': 'Full annual report',
'grade_analytics.custom': 'Custom',
'grade_analytics.custom_desc': 'Create a custom report',
'grade_analytics.generated_reports': 'Generated Reports',
'grade_analytics.generated_reports_desc': 'List of all generated reports',
'grade_analytics.no_reports': 'No reports generated yet',
'grade_analytics.generate_report': 'Generate Report',
'grade_analytics.report_builder': 'Report Builder',
'grade_analytics.report_title': 'Report Title',
'grade_analytics.report_title_placeholder': 'Enter report title...',
'grade_analytics.report_type': 'Report Type',
'grade_analytics.date_from': 'Date From',
'grade_analytics.date_to': 'Date To',
'grade_analytics.report_metrics': 'Report Metrics',
'grade_analytics.metric_distribution': 'Grade Distribution',
'grade_analytics.metric_averages': 'Averages',
'grade_analytics.metric_class_comparison': 'Class Comparison',
'grade_analytics.metric_subject_analysis': 'Subject Analysis',
'grade_analytics.metric_student_grades': 'Student Grades',
'grade_analytics.metric_trends': 'Trends',
'grade_analytics.generating': 'Generating...',
'grade_analytics.generate': 'Generate',
'grade_analytics.completed': 'Completed',
'grade_analytics.pending': 'Pending',
'grade_analytics.failed': 'Failed',
};
const translations: Record<string, TranslationDict> = { de, en };
+4 -1
View File
@@ -53,7 +53,10 @@ export type ViewName =
| 'school-events'
| 'substitute-teacher'
| 'student-career'
| 'school-newsletter';
| 'school-newsletter'
| 'school-transport'
| 'peer-assessment'
| 'grade-analytics';
export interface CurrentUser {
id: string;