From 38e3d3ca55b7fb06357a6f5949318082e27765a9 Mon Sep 17 00:00:00 2001 From: HirschleM Date: Wed, 1 Oct 2025 12:03:15 +0200 Subject: [PATCH] MH: SuchtkrankenhilfeOstfriesland Abwesenheitsregelung --- .../Calculation/CustomCalculations.cs | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/ReportImp/SuchtkrankenhilfeOstfriesland/Calculation/CustomCalculations.cs b/ReportImp/SuchtkrankenhilfeOstfriesland/Calculation/CustomCalculations.cs index 07c790bf3..f1ada91e0 100644 --- a/ReportImp/SuchtkrankenhilfeOstfriesland/Calculation/CustomCalculations.cs +++ b/ReportImp/SuchtkrankenhilfeOstfriesland/Calculation/CustomCalculations.cs @@ -51,7 +51,7 @@ namespace SuchtkrankenhilfeOstfriesland.Calculation foreach (var sr in anwesenheiten) { // Hier muss geprüft werden, ob der Klient an dem Tag eine Abwesenheit hat. Ist sie noch abrechenbar, weil vom Budget - // noch was übrig ist, das Budget um 1 verringern und weitermachen. Ist kein Budget mehr übrig, Tag überspringen + // noch was übrig ist, das Budget um 1 verringern und weitermachen. Ist kein Budget mehr übrig, gilt Tag nicht als anwesend if (krankheitenImAbrechnungsjahr.Any(a => a.AbsenceSpan.ContainsDate(sr.Start.Value))) { if (uebrigesKrankheitsbudget == 0) @@ -64,13 +64,41 @@ namespace SuchtkrankenhilfeOstfriesland.Calculation anwesenheitstage.Add(sr.Start.Value.Date); } + // Prüfen, ob 14 oder 28 Tage in Folge "Abwesend TS" dokumentiert wurde. + // In dem Fall wird der Betrag für den Monat halbiert oder ganz gestrichen + bool rechnungHalbieren = false; // 14 Tage + bool rechnungNullen = false; // 28 Tage + ServiceRecord letzteAbwesenheit = null; + int abwesenheitenHintereinander = 0; + + foreach (var sr in abwesenheiten) + { + if (letzteAbwesenheit != null && letzteAbwesenheit.Start.Value.Date == sr.Start.Value.Date.AddDays(-1)) + abwesenheitenHintereinander++; + else + abwesenheitenHintereinander = 0; + + if (abwesenheitenHintereinander == 14) + rechnungHalbieren = true; + else if (abwesenheitenHintereinander == 28) + rechnungNullen = true; + + letzteAbwesenheit = sr; + } + + // Wenn die erste Anwesenheit erst ab dem 15. ist oder die letzte bis zum 15. wird die Pauschale für den Monat halbiert - // Gilt auch, wenn 14 Tage aufeinanderfolgend "Abwesend" dokumentiert wurde - if (anwesenheitstage[0].Day > 15 || anwesenheitstage[anwesenheitstage.Count - 1].Day <= 15) + // Gilt auch, wenn 14 Tage aufeinanderfolgend "Abwesend" dokumentiert wurde (also wenn rechnungHalbieren = true) + if (anwesenheitstage[0].Day > 15 || anwesenheitstage[anwesenheitstage.Count - 1].Day <= 15 || rechnungHalbieren) { data.AmountTotal /= 2; data.GrossAmountTotal /= 2; } + if (rechnungNullen) + { + data.AmountTotal = 0; + data.GrossAmountTotal = 0; + } } else {