namespace LehrerApp.Core.Models; public class Documentation { public Guid Id { get; set; } = Guid.NewGuid(); public Guid StudentId { get; set; } public Guid? GroupId { get; set; } public DocumentationType Type { get; set; } public DateOnly Date { get; set; } public string Title { get; set; } = ""; public string Content { get; set; } = ""; public List Participants { get; set; } = []; public AbsenceData? AbsenceData { get; set; } public SupportData? SupportData { get; set; } public ParentCallData? ParentCallData { get; set; } public ParentLetterData? ParentLetterData { get; set; } public List Attachments { get; set; } = []; /// Freie Labels zur Nachverfolgung, z.B. "Kritisch", "Nacharbeiten" — siehe `DocumentationTagDisplay`. public List Tags { get; set; } = []; public bool IsConfidential { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; // Löschen entfernt den Eintrag nicht hart, sondern markiert ihn nur (Nachvollziehbarkeit, 5.1.4). public bool IsDeleted { get; set; } public DateTime? DeletedAt { get; set; } } public class AbsenceData { public int LessonCount { get; set; } public bool Excused { get; set; } public string? Reason { get; set; } } public class SupportData { public List Measures { get; set; } = []; public DateOnly? ReviewDate { get; set; } public SupportStatus Status { get; set; } = SupportStatus.Active; } /// Geplante Gesprächspunkte eines Elternanrufs, abgehakt in . public class ParentCallPoint { public Guid Id { get; set; } = Guid.NewGuid(); public string Text { get; set; } = ""; public bool IsDone { get; set; } } /// /// Elternanruf: Gesprächspunkte werden vorab geplant, dann im begleitenden Dialog während des /// Anrufs abgehakt und um Eindrücke/Ergänzungen zum Protokoll ergänzt. /// public class ParentCallData { public List Points { get; set; } = []; public string Impressions { get; set; } = ""; public bool IsConducted { get; set; } public DateOnly? ConductedDate { get; set; } } /// Elternbrief: Entwurf/Planung sowie Absende- und Rückmeldedaten. public class ParentLetterData { public string DraftContent { get; set; } = ""; public DateOnly? SentDate { get; set; } public bool ResponseReceived { get; set; } public DateOnly? ResponseDate { get; set; } public string ResponseNote { get; set; } = ""; } /// Datei-Anhang eines Dokumentationseintrags, im LiteDB-Dateispeicher abgelegt. public class DocumentAttachment { public string StorageId { get; set; } = ""; public string FileName { get; set; } = ""; public long SizeBytes { get; set; } public DateTime UploadedAt { get; set; } = DateTime.UtcNow; } // Hinten angefügt, damit die numerischen Werte bereits gespeicherter LiteDB-Einträge stabil bleiben. public enum DocumentationType { Conversation, Incident, SupportPlan, Absence, ParentCall, ParentLetter } public enum SupportStatus { Active, Completed, Paused } public class WorkTask { public Guid Id { get; set; } = Guid.NewGuid(); public string Title { get; set; } = ""; public TaskCategory Category { get; set; } public Guid? GroupId { get; set; } public DateOnly? DueDate { get; set; } public int? EstimatedMinutes { get; set; } public WorkTaskStatus Status { get; set; } = WorkTaskStatus.Open; public string? Notes { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } public class TimeEntry { public Guid Id { get; set; } = Guid.NewGuid(); public Guid? TaskId { get; set; } public string Category { get; set; } = ""; public Guid? GroupId { get; set; } public DateOnly Date { get; set; } public TimeOnly? StartTime { get; set; } public TimeOnly? EndTime { get; set; } public int DurationMinutes { get; set; } public string? Description { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; } public enum TaskCategory { Correction, Preparation, Admin, Meeting, Other } public enum WorkTaskStatus { Open, InProgress, Done }