132 lines
7.9 KiB
Go
132 lines
7.9 KiB
Go
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,
|
|
}
|
|
}
|