namespace LehrerApp.Core.Models; public class LearningGroup { public Guid Id { get; set; } = Guid.NewGuid(); public string Name { get; set; } = ""; public GroupType Type { get; set; } public Guid? SubjectId { get; set; } public string SchoolYear { get; set; } = ""; public int GradeLevel { get; set; } public GradingSystem GradingSystem { get; set; } public int? HoursPerWeek { get; set; } public bool IsActive { get; set; } = true; public bool IsOwnClass { get; set; } public bool IsDifferentiated { get; set; } /// /// Default true (alte Datensätze ohne dieses Feld verhalten sich damit unverändert wie bisher /// - LiteDB liefert den C#-Default für fehlende Felder). Für Gruppen wie Klassenrat oder /// Willkommenskreis, die keinen inhaltlichen Verlaufsplan brauchen, in den Stammdaten /// deaktivierbar - blendet die Erinnerung "Ungeplante Stunden" im Dashboard für diese Gruppe aus. /// public bool RequiresLessonPlanning { get; set; } = true; /// /// WebUntis-interne Unterrichtsnummer (lsid) dieser Lerngruppe, Grundlage für den Abruf des /// "Fehlzeiten pro Unterricht"-Berichts. Wird von WebUntis pro Schuljahr neu vergeben und muss /// deshalb händisch je Lerngruppe/Schuljahr gepflegt werden - keine JSON-RPC-Methode liefert sie. /// public int? WebUntisLessonId { get; set; } /// /// Vorgängergruppe aus dem Hochstufen () — /// ermöglicht einen Schuljahresvergleich (z.B. Klausurschnitt) über die Kette hinweg. /// Wird ausschließlich beim Hochstufen automatisch gesetzt; vor Einführung dieses Felds /// hochgestufte Gruppen bleiben unverknüpft (kein rückwirkendes Verknüpfen vorgesehen). /// public Guid? PreviousGroupId { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } /// /// Mitgliedschaft eines Schülers in einer Lerngruppe. Das Schuljahr gehört zur /// Lerngruppe und wird deshalb hier nicht ein zweites Mal gespeichert. /// public class GroupMembership { public Guid Id { get; set; } = Guid.NewGuid(); public Guid StudentId { get; set; } public Guid GroupId { get; set; } /// Tag, an dem die Zuordnung in der App angelegt wurde. public DateOnly AddedOn { get; set; } = DateOnly.FromDateTime(DateTime.Today); public MembershipPeriod Period { get; set; } = MembershipPeriod.FullYear; public DateOnly? JoinedAt { get; set; } public DateOnly? LeftAt { get; set; } public Niveau? Niveau { get; set; } } public enum MembershipPeriod { FullYear, H1Only, H2Only, Custom } public enum GroupType { Class, Course } public enum GradingSystem { Grades1To6, Points0To15 } public enum Niveau { E, G, Foerder }