MH: SuchtkrankenhilfeOstfriesland Abwesenheitsregelung

This commit is contained in:
2025-10-01 12:03:15 +02:00
parent 00c77b4de8
commit 38e3d3ca55

View File

@@ -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
{