namespace LehrerApp.Core.Models; public class ParticipationSession { public Guid Id { get; set; } = Guid.NewGuid(); public Guid GroupId { get; set; } public DateOnly Date { get; set; } = DateOnly.FromDateTime(DateTime.Today); public Guid? LessonId { get; set; } public string? Comment { get; set; } public List CompetencyCodes { get; set; } = []; public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class ParticipationEntry { public Guid Id { get; set; } = Guid.NewGuid(); public Guid SessionId { get; set; } public Guid StudentId { get; set; } public List Ratings { get; set; } = []; public List CompetencyRatings { get; set; } = []; public string? Note { get; set; } public bool HomeworkMissing { get; set; } public AttendanceStatus? Attendance { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } /// /// Anwesenheitsstatus einer Sitzung; null (Standard) bedeutet anwesend. /// ist ein bewusster Zwischenzustand, da die Entschuldigung meist /// erst später eintrifft — er wird beim Erfassen des Fehltags gesetzt und danach manuell auf /// oder nachgetragen. /// public enum AttendanceStatus { ExcusePending, Excused, Unexcused } /// /// Ein Bewertungsabschnitt einer Lerngruppe (z.B. alle 4–7 Wochen), an dessen Ende eine /// Abschnittsnote Mitarbeit vergeben wird. Nur abgeschlossene Abschnitte werden gespeichert; /// der aktuell laufende Zeitraum ergibt sich aus dem Ende des letzten Abschnitts bis heute. /// public class ParticipationSection { public Guid Id { get; set; } = Guid.NewGuid(); public Guid GroupId { get; set; } public string Label { get; set; } = ""; public DateOnly StartDate { get; set; } public DateOnly EndDate { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; } public class CompetencyRating { public string Code { get; set; } = ""; public int Value { get; set; } } public class AspectRating { public string Key { get; set; } = ""; public int Value { get; set; } } public class ParticipationAspect { public Guid Id { get; set; } = Guid.NewGuid(); public Guid? GroupId { get; set; } public string Key { get; set; } = ""; public string Label { get; set; } = ""; public AspectValueType ValueType { get; set; } = AspectValueType.Scale5; public double Weight { get; set; } = 1.0; public bool IsActive { get; set; } = true; public int SortOrder { get; set; } public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public enum AspectValueType { Scale5, Scale3, Binary, Points } public static class DefaultParticipationAspects { public static readonly IReadOnlyList All = [ new() { Key = "quality", Label = "Qualität", ValueType = AspectValueType.Scale5, SortOrder = 0 }, new() { Key = "quantity", Label = "Quantität", ValueType = AspectValueType.Scale5, SortOrder = 1 }, new() { Key = "workphase", Label = "Arbeitsphase", ValueType = AspectValueType.Scale5, SortOrder = 2 }, ]; }