Reviewed-on: #81
Arbeitszeitmessung
Eine open-source Software zur Arbeitszeitmessung
Features
-
manuelle Korrektur von einzelnen Buchungen
-
Buchung von benutzerdefinierten Abwesenheiten
-
automatische gesetzlicher Feiertage
-
Pflege eigener Feiertage
-
wöchentliches Abrechnungssystem
-
Kontrolle der Arbeitszeiten durch direkte Führungskraft
-
Ausgabe der Arbeitszeiten je Monat in PDF Format
-
Anwesenheitsübersicht
Installation
git clone https://git.letsstein.de/tom/arbeitszeitmessung arbeitszeitmessung
cd arbeitszeitmessung
./install.sh
Konfiguration:
- Datenbank
POSTGRES_USERPostgres ADMIN NutzernamePOSTGRES_PASSWORDPostgres ADMIN PasswortPOSTGRES_API_USERPostgres API Nutzername für WebanwendungPOSTGRES_API_PASSPostgres API Passwort für WebanwendungPOSTGRES_PATHDatebank PfadPOSTGRES_DBPostgres Datenbank NamePOSTGRES_PORTPostgres Port für administration
- System
TZZeitzoneLOG_LEVELWelche Log-Nachrichten werden in der Konsole erscheinen
- Web/API
API_TOKENAPI Token für ESP EndpointsWEB_PORTPort unter welchem Webserver erreichbar ist
- Ordnerstruktur
BACKUP_FOLDERPfad für DB Backup DateinLOG_PATHPfad für Audit Logs
Administration:
Nutzer erstellen:
Nutzerdaten erstellen:
INSERT INTO "s_personal_daten"
(
"personal_nummer",
"vorname",
"nachname",
"card_uid",
"geburtsdatum",
"geschlecht",
"adresse",
"plz",
"hauptbeschaeftigungs_ort",
"aktiv_beschaeftigt",
"vorgesetzter_pers_nr",
"arbeitszeit_min_start",
"arbeitszeit_max_ende",
"arbeitszeit_per_tag",
"arbeitszeit_per_woche",
)
VALUES (
1,
'Max',
'Mustermann',
'acde-edca',
'2003-02-01',
1,
'Musterstr. 42',
'00001',
1,
true,
123,
'07:00:00',
'20:00:00',
8,
40
);
Nutzerpasswort generieren (kann auch später als Passwort reset genutzt werden):
INSERT INTO "user_password"
("personal_nummer", "pass_hash")
VALUES (123, crypt('password', gen_salt('bf')));
Buchungstypen erstellen:
Ohne definierte Anwesenheits und Abwesenheitstypen funktioniert die Anwendung nicht!
Anwesenheiten:
INSERT INTO "s_anwesenheit_typen"
("anwesenheit_id", "anwesenheit_name")
VALUES (1, 'Büro');
Abwesenheiten:
INSERT INTO "s_abwesenheit_typen"
("abwesenheit_id", "abwesenheit_name", "arbeitszeit_equivalent")
VALUES (1, 'Urlaub', 100);
Feiertage erstellen:
Die gesetzlichen Feiertage für Deutschland/Sachsen werden automatisch mit der Route auto/feiertage für das aktuelle Kalenderjahr erzeugt. Um weitere Unternehmensspezifische Feiertage (z.B. 24.12. oder 31.12.) mit in die Liste der Feiertage aufzunehmen, müssen diese manuell erstellt werden.
INSERT INTO "s_feiertage"
("datum", "name", "arbeitszeit_equivalent", "wiederholen")
VALUES ('2026-12-24', 'Helligabend', 50, 1);
Wenn wiederholen == 1 wird der Feiertag automatisch beim Aufruf von auto/feiertage mit ins nächste Jahr (am selben Datum) übernommen.
Das Feld arbeitszeit_equivalent arbeitszeit_equivalent ist die prozentuelle Zeit am Tag welche durch diesen Eintrag eingenommen wird. (dies gilt auch für die Buchungstypen)
Alle weiteren Tabellen sollte ausschließlich über die Weboberfläche oder per API befüllt werden.
Filestrukture
├── Backend (Webserver)
│ ├── doc (Templates for Document Creator --> typst used to create PDF Reports)
│ │ ├── static
│ │ └── templates
│ ├── endpoints (HTML Server endpoints (see main.go for Routes))
│ ├── helper (Helper classes)
│ │ ├── logs
│ │ └── paramParser
│ ├── logs (Log Folder, no sourcecode)
│ ├── migrations (DB Migrations Folder, no direct sourcecode)
│ ├── models (DB Models and their function)
│ ├── src (Tailwind src --> used to config css formatter)
│ ├── static (Webserver static, used to server static content, e.g. JS and CSS files)
│ │ └── css
│ └── templates (HTML Templates for every page written in templ and compiled to go)
├── Cron (all Cron Scripts)
├── DB (local Database mount Point)
│ └── initdb (initialization scripts for DB)
├── Docker (Docker Files, only docker-compose.yaml used)
├── docs
└── └── images