import pandas as pd # Beispielhafte steuerliche Höchstgrenzen (jährlich, Stand 2024) BENEFIT_LIMITS = { ‚Sachbezug‘: 600, # 50€/Monat ‚Erholungsbeihilfe_MA‘: 156, ‚Erholungsbeihilfe_Ehepartner‘: 104, ‚Erholungsbeihilfe_Kind‘: 52, ‚Essenszuschuss‘: 996, # 4,13€/Arbeitstag, ca. 21 Tage/Monat ‚Jobticket‘: 1200, # Beispielwert } def verteile_benefits(mitarbeiter_df, gesamtbudget): # Initiale Verteilung: maximal steuerfrei, Rest ggf. pauschal versteuert for i, row in mitarbeiter_df.iterrows(): rest = gesamtbudget # Sachbezug sachbezug = min(BENEFIT_LIMITS[‚Sachbezug‘], rest) rest -= sachbezug # Essenszuschuss essens = min(BENEFIT_LIMITS[‚Essenszuschuss‘], rest) rest -= essens # Erholungsbeihilfe erholung = BENEFIT_LIMITS[‚Erholungsbeihilfe_MA‘] if row[‚Ehepartner‘]: erholung += BENEFIT_LIMITS[‚Erholungsbeihilfe_Ehepartner‘] erholung += row[‚Kinder‘] * BENEFIT_LIMITS[‚Erholungsbeihilfe_Kind‘] erholung = min(erholung, rest) rest -= erholung # Jobticket jobticket = min(BENEFIT_LIMITS[‚Jobticket‘], rest) rest -= jobticket # Ergebnisse speichern mitarbeiter_df.loc[i, ‚Sachbezug‘] = sachbezug mitarbeiter_df.loc[i, ‚Essenszuschuss‘] = essens mitarbeiter_df.loc[i, ‚Erholungsbeihilfe‘] = erholung mitarbeiter_df.loc[i, ‚Jobticket‘] = jobticket mitarbeiter_df.loc[i, ‚Restbudget‘] = rest return mitarbeiter_df # Beispiel-Mitarbeiterdaten mitarbeiter = pd.DataFrame([ {‚Name‘: ‚Anna‘, ‚Ehepartner‘: 1, ‚Kinder‘: 2}, {‚Name‘: ‚Ben‘, ‚Ehepartner‘: 0, ‚Kinder‘: 0}, ]) # Anwendung gesamtbudget_pro_mitarbeiter = 2000 verteilung = verteile_benefits(mitarbeiter, gesamtbudget_pro_mitarbeiter) print(verteilung)
import pandas as pd

# Beispielhafte steuerliche Höchstgrenzen (jährlich, Stand 2024)
BENEFIT_LIMITS = {
    'Sachbezug': 600,          # 50€/Monat
    'Erholungsbeihilfe_MA': 156,
    'Erholungsbeihilfe_Ehepartner': 104,
    'Erholungsbeihilfe_Kind': 52,
    'Essenszuschuss': 996,     # 4,13€/Arbeitstag, ca. 21 Tage/Monat
    'Jobticket': 1200,         # Beispielwert
}

def verteile_benefits(mitarbeiter_df, gesamtbudget):
    # Initiale Verteilung: maximal steuerfrei, Rest ggf. pauschal versteuert
    for i, row in mitarbeiter_df.iterrows():
        rest = gesamtbudget
        # Sachbezug
        sachbezug = min(BENEFIT_LIMITS['Sachbezug'], rest)
        rest -= sachbezug
        # Essenszuschuss
        essens = min(BENEFIT_LIMITS['Essenszuschuss'], rest)
        rest -= essens
        # Erholungsbeihilfe
        erholung = BENEFIT_LIMITS['Erholungsbeihilfe_MA']
        if row['Ehepartner']:
            erholung += BENEFIT_LIMITS['Erholungsbeihilfe_Ehepartner']
        erholung += row['Kinder'] * BENEFIT_LIMITS['Erholungsbeihilfe_Kind']
        erholung = min(erholung, rest)
        rest -= erholung
        # Jobticket
        jobticket = min(BENEFIT_LIMITS['Jobticket'], rest)
        rest -= jobticket

        # Ergebnisse speichern
        mitarbeiter_df.loc[i, 'Sachbezug'] = sachbezug
        mitarbeiter_df.loc[i, 'Essenszuschuss'] = essens
        mitarbeiter_df.loc[i, 'Erholungsbeihilfe'] = erholung
        mitarbeiter_df.loc[i, 'Jobticket'] = jobticket
        mitarbeiter_df.loc[i, 'Restbudget'] = rest
    return mitarbeiter_df

# Beispiel-Mitarbeiterdaten
mitarbeiter = pd.DataFrame([
    {'Name': 'Anna', 'Ehepartner': 1, 'Kinder': 2},
    {'Name': 'Ben', 'Ehepartner': 0, 'Kinder': 0},
])

# Anwendung
gesamtbudget_pro_mitarbeiter = 2000
verteilung = verteile_benefits(mitarbeiter, gesamtbudget_pro_mitarbeiter)
print(verteilung)