# Arbeitszeitmessung [![Quality Gate Status](https://sonar.letsstein.de/api/project_badges/measure?project=arbeitszeitmessung&metric=alert_status&token=sqb_253028eff30aff24f32b437cd6c484c511b5c33f)](https://sonar.letsstein.de/dashboard?id=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 ```bash git clone https://git.letsstein.de/tom/arbeitszeitmessung arbeitszeitmessung cd arbeitszeitmessung ./install.sh ``` ### Konfiguration: - Datenbank - `POSTGRES_USER` Postgres ADMIN Nutzername - `POSTGRES_PASSWORD` Postgres ADMIN Passwort - `POSTGRES_API_USER` Postgres API Nutzername für Webanwendung - `POSTGRES_API_PASS` Postgres API Passwort für Webanwendung - `POSTGRES_PATH` Datebank Pfad - `POSTGRES_DB` Postgres Datenbank Name - `POSTGRES_PORT` Postgres Port für administration - System - `TZ` Zeitzone - `LOG_LEVEL` Welche Log-Nachrichten werden in der Konsole erscheinen - Web/API - `API_TOKEN` API Token für ESP Endpoints - `WEB_PORT` Port unter welchem Webserver erreichbar ist - Ordnerstruktur - `BACKUP_FOLDER` Pfad für DB Backup Datein - `LOG_PATH` Pfad für Audit Logs ## Administration: ### Nutzer erstellen: Nutzerdaten erstellen: ```sql 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): ```sql 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: ```sql INSERT INTO "s_anwesenheit_typen" ("anwesenheit_id", "anwesenheit_name") VALUES (1, 'Büro'); ``` Abwesenheiten: ```sql 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. ```sql 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](#buchungstypen-erstellen)) 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 ```