CI / build-and-test (push) Canceled after 0s
Feste Score-Gewichte durch einen Einstellungsdialog ersetzt. Ein geschlossener Vorgang dämpft ab seinem Schließ-Datum den zu seinen Schlagwörtern passenden Score-Bereich (Anwesenheit/Verspätung/ Klassenbuch), ohne Schlagwort-Treffer vorsichtshalber alle drei — die faktische Fehlquote bleibt davon unberührt. Verschlechtert sich die Lage danach wieder spürbar, erscheint eine "erneut auffällig"-Warnung im bestehenden "Muster erkannt"-Panel. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
using System.Text.Json;
|
|
|
|
namespace LehrerApp.Core.Services;
|
|
|
|
/// <summary>Gewichte für ClassTeacherRosterRow.PatternScore (Klassenlehrer-Bereich, "Gesamtbild")
|
|
/// — Default-Werte entsprechen den ursprünglich fest verdrahteten Konstanten.</summary>
|
|
public sealed class PatternScoreWeights
|
|
{
|
|
public double UnexcusedDayWeight { get; set; } = 3.0;
|
|
public double ExcusedDayWeight { get; set; } = 1.0;
|
|
public double LateDayWeight { get; set; } = 0.5;
|
|
public double NegativeClassRegisterEntryWeight { get; set; } = 1.0;
|
|
public double ConcerningKeywordBonus { get; set; } = 1.5;
|
|
public double SuspensionKeywordWeight { get; set; } = 15.0;
|
|
}
|
|
|
|
/// <summary>Speichert die Gewichte lokal, gleiches Muster wie WorkloadSettingsService/
|
|
/// DashboardSettingsService.</summary>
|
|
public sealed class PatternScoreSettingsService
|
|
{
|
|
private readonly string _configPath;
|
|
|
|
public PatternScoreSettingsService(string appDataPath) =>
|
|
_configPath = Path.Combine(appDataPath, "patternscoreweights.json");
|
|
|
|
public PatternScoreWeights Load()
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(_configPath))
|
|
return JsonSerializer.Deserialize<PatternScoreWeights>(File.ReadAllText(_configPath))
|
|
?? new PatternScoreWeights();
|
|
}
|
|
catch { /* beschädigte Konfiguration -> Standardgewichte */ }
|
|
return new PatternScoreWeights();
|
|
}
|
|
|
|
public void Save(PatternScoreWeights weights) =>
|
|
File.WriteAllText(_configPath, JsonSerializer.Serialize(weights));
|
|
}
|