package excelread import ( "business-engine/internal/database" "fmt" "time" ) // EmployeeDataRow repräsentiert eine einzelne, vollständige Datenzeile aus der CSV. type EmployeeDataRow struct { Personalnummer int `json:"personalnummer"` Nachname string `json:"nachname"` Vorname string `json:"vorname"` Vertragsart string `json:"vertragsart"` HatPersonenbefoerderungsschein string `json:"hatPersonenbefoerderungsschein"` HatRechtAufZuschlaege string `json:"hatRechtAufZuschlaege"` Vertragsstart string `json:"vertragsstart"` VertragstageProWoche float64 `json:"vertragstageProWoche"` VertragsstundenProWoche float64 `json:"vertragsstundenProWoche"` VertragsstundenMax string `json:"vertragsstundenMax"` UrlaubstageProJahr float64 `json:"urlaubstageProJahr"` GearbeiteteTage float64 `json:"gearbeiteteTage"` GearbeiteteStunden float64 `json:"gearbeiteteStunden"` GenommeneUrlaubstage float64 `json:"genommeneUrlaubstage"` GenommeneUrlaubsstunden float64 `json:"genommeneUrlaubsstunden"` Krankheitstage float64 `json:"krankheitstage"` Krankheitsstunden float64 `json:"krankheitsstunden"` KrankengeldTage float64 `json:"krankengeldTage"` KrankengeldStunden float64 `json:"krankengeldStunden"` UnbezahlterUrlaubTage float64 `json:"unbezahlterUrlaubTage"` UnbezahlterUrlaubStunden float64 `json:"unbezahlterUrlaubStunden"` EinbehaltungGesamtTage float64 `json:"einbehaltungGesamtTage"` EinbehaltungGesamtStunden float64 `json:"einbehaltungGesamtStunden"` IstSollGesamtTage float64 `json:"istSollGesamtTage"` IstSollGesamtStunden float64 `json:"istSollGesamtStunden"` IstSollVertragsTage float64 `json:"istSollVertragsTage"` IstSollVertragsStunden float64 `json:"istSollVertragsStunden"` IstSollPlusMinusStunden float64 `json:"istSollPlusMinusStunden"` BerechnungMehrstunden float64 `json:"berechnungMehrstunden"` BerechnungUeberstunden float64 `json:"berechnungUeberstunden"` BerechnungAnzahlPSchein float64 `json:"berechnungAnzahlPSchein"` BerechnungKrankOhneAUTage float64 `json:"berechnungKrankOhneAUTage"` BerechnungKrankOhneAUStunden float64 `json:"berechnungKrankOhneAUStunden"` BerechnungNachtzuschlag25Tage float64 `json:"berechnungNachtzuschlag25Tage"` BerechnungNachtzuschlag25Stunden float64 `json:"berechnungNachtzuschlag25Stunden"` BerechnungNachtzuschlag40Tage float64 `json:"berechnungNachtzuschlag40Tage"` BerechnungNachtzuschlag40Stunden float64 `json:"berechnungNachtzuschlag40Stunden"` BerechnungSonntagszuschlag50Tage float64 `json:"berechnungSonntagszuschlag50Tage"` BerechnungSonntagszuschlag50Stunden float64 `json:"berechnungSonntagszuschlag50Stunden"` BerechnungVerpflegungspauschale14Tage float64 `json:"berechnungVerpflegungspauschale14Tage"` BerechnungSamstagszuschlag15Tage float64 `json:"berechnungSamstagszuschlag15Tage"` BerechnungSamstagszuschlag15Stunden float64 `json:"berechnungSamstagszuschlag15Stunden"` BerechnungZeitausgleichStart float64 `json:"berechnungZeitausgleichStart"` BerechnungZeitausgleichPlusMinus float64 `json:"berechnungZeitausgleichPlusMinus"` BerechnungZeitausgleichAenderungen float64 `json:"berechnungZeitausgleichAenderungen"` BerechnungZeitausgleichAuszahlen float64 `json:"berechnungZeitausgleichAuszahlen"` BerechnungZeitausgleichJetzt float64 `json:"berechnungZeitausgleichJetzt"` SaldenUrlaubStart float64 `json:"saldenUrlaubStart"` SaldenUrlaubAbbau float64 `json:"saldenUrlaubAbbau"` SaldenUrlaubKorrektur float64 `json:"saldenUrlaubKorrektur"` SaldenUrlaubJetzt float64 `json:"saldenUrlaubJetzt"` SaldenMehrstunden float64 `json:"saldenMehrstunden"` SaldenUeberstunden float64 `json:"saldenUeberstunden"` AuszahlenFahrtkostenKm float64 `json:"auszahlenFahrtkostenKm"` AuszahlenVerpflegungspauschaleTage float64 `json:"auszahlenVerpflegungspauschaleTage"` AuszahlenAnzahlPSchein float64 `json:"auszahlenAnzahlPSchein"` AuszahlenZuschlag25Stunden float64 `json:"auszahlenZuschlag25Stunden"` AuszahlenZuschlag40Stunden float64 `json:"auszahlenZuschlag40Stunden"` AuszahlenZuschlag50Stunden float64 `json:"auszahlenZuschlag50Stunden"` AuszahlenZuschlag14Stunden float64 `json:"auszahlenZuschlag14Stunden"` AuszahlenZuschlag15Stunden float64 `json:"auszahlenZuschlag15Stunden"` } type PayrollInputData struct { ContractSalaryHour float64 Tourengeld float64 Worktimes []database.WorkTime Plannedtimes []database.ListPlannedTimesForEmployeeInPeriodRow } func NewPayrollInputData(salaryHour float64, tourengeld float64, worktimes []database.WorkTime, plannedtimes []database.ListPlannedTimesForEmployeeInPeriodRow) PayrollInputData { return PayrollInputData{ ContractSalaryHour: salaryHour, Tourengeld: tourengeld, Worktimes: worktimes, Plannedtimes: plannedtimes, } } type PayrollStatement struct { Nachname string `json:"nachname" csv:"Nachname"` Vorname string `json:"vorname" csv:"Vorname"` Verpflegungspauschale float64 `json:"verpflegungspauschale" csv:"Verpflegungspauschale"` VertragStundenlohn float64 `json:"stundenlohn" csv:"Vertr. Stundenlohn"` Vertragsstunden float64 `json:"vertragsstunden" csv:"Arbeitsstunden lt. Vertrag"` GearbeiteteStunden float64 `json:"gearbeiteteStunden" csv:"Gearbeitet Stunden"` GearbeiteteTage float64 `json:"gearbeiteteTage" csv:"Gearbeitet Tage"` PuenktlichkeitspraemieAnzahl float64 `json:"puenktlichkeitspraemieAnzahl" csv:"Pünktlichkeitsprämie anzahl"` Krankheitstage float64 `json:"krankheitstage" csv:"Krankheitstage x 8 Stunden"` Ueberstunden float64 `json:"ueberstunden" csv:"davon Überstunden"` Tourengeld float64 `json:"tourengeld" csv:"Tourengeld Anzahl"` TourengeldBonus float64 `json:"tourengeldBonus" csv:"Tourengeld-Bonus (Platz 1-3, EUR)"` GesundheitsbonusAbzug string `json:"gesundheitsbonusAbzug" csv:"Gesundheitsbonus abzuziehen? (ja/nein)"` Urlaubsgeld float64 `json:"urlaubsgeld" csv:"Urlaubsgeld (44 EUR pro tag)"` PScheinZulage float64 `json:"pScheinZulage" csv:"P-schein Zulage"` Wochenendzuschlag15 float64 `json:"wochenendzuschlag15" csv:"Wochenendzuschlag 15%"` Sonntagszuschlag50 float64 `json:"sonntagszuschlag50" csv:"Sonntagszuschlag 50%"` Feiertagszuschlag125 float64 `json:"feiertagszuschlag125" csv:"Feiertagszuschlag 125%"` Nachtzuschlag25 float64 `json:"nachtzuschlag25" csv:"Nachtzuschlag 25%"` Nachtzuschlag40 float64 `json:"nachtzuschlag40" csv:"Nachtzuschlag 40%"` } type EmployeeOnTime struct { EmployeeId string `csv:"EmployeeId"` WorkTime time.Time `csv:"Arbeitszeit"` PlannedTime time.Time `csv:"Schichtplanung"` IsOnTime bool `csv:"Pünktlich?"` } func NewEmployeeOnTime(employeeId string, worktime, plannedtime time.Time) EmployeeOnTime { loc, err := time.LoadLocation("Europe/Berlin") if err != nil { fmt.Println("Fehler beim Laden der Zeitzone:", err) } return EmployeeOnTime{ EmployeeId: employeeId, WorkTime: worktime.In(loc), PlannedTime: plannedtime.In(loc), IsOnTime: worktime.Before(plannedtime) || worktime == plannedtime, } }