Externe Datenbank
Zeiterfassung schreibt jedes Stempelereignis unmittelbar als einzelnen Datensatz in eine von Ihnen bereitgestellte SQL-Datenbank. Drittsysteme — Lohnbuchhaltung, HR-Software oder BI-Werkzeuge — lesen diese Tabelle direkt per SQL, ohne Umweg über das Modul. Der Vertrag dieser Schnittstelle ist das nachfolgend dokumentierte Tabellenschema.
Diese Schnittstelle ist für die Nutzung durch Drittsysteme freigegeben. Änderungen und Erweiterungen werden je Version in den Release Notes dokumentiert.
Grundlagen
- Typ: SQL-Datenbank — das Modul schreibt, Drittsysteme lesen
- Unterstützte Datenbanksysteme: PostgreSQL, MySQL, Microsoft SQL Server, Derby
- Konfiguration: Moduloberfläche, Karte Datenbank-Einstellungen — Felder Datenbanktyp, Host, Datenbankname, Benutzername, Passwort und Optionen (optionale Parameter, die zu Verbindungsbeginn an den Datenbankserver übergeben werden). Die Schaltfläche Verbindung testen prüft die Angaben; das Passwort legt das Modul verschlüsselt ab.
- Tabelle: genau eine Tabelle mit frei wählbarem Namen. Das Modul normalisiert den Namen auf Kleinbuchstaben und entfernt alle Zeichen außer Buchstaben, Ziffern und Unterstrich.
- Zugriff für Drittsysteme: direkte SQL-Verbindung mit eigenen Zugangsdaten an dieselbe Datenbank. Das Modul stellt keinen eigenen Abfrage-Endpunkt bereit; lesende Zugriffe erfordern keine Modullizenz.
- Netzzugriff: Für Installationen ohne direkte Verbindung zum Datenbankserver (z. B. STARFACE Cloud) bietet die Moduloberfläche zusätzlich eine SSH-Tunnel-Konfiguration.
Alternativ zur eigenen Datenbank trägt die Schaltfläche STARFACE Datenbank die interne
PostgreSQL-Datenbank der Anlage ein (localhost, Datenbank asterisk). Empfohlen ist eine
eigene Datenbank: Bei Anlagen-Updates hat das Modul keine Kontrolle über die interne
Datenbank. Legen Sie in jedem Fall regelmäßige Backups der Tabelle an.
Schreibverhalten
Auslöser der Zeiterfassung ist die Gruppenanmeldung: Meldet sich ein Benutzer an der
konfigurierten Zeiterfassungsgruppe an oder ab (Funktionstaste „Gruppe An-/Abmelden",
STARFACE App, Teams-Integration oder User-Frontend des Moduls), fügt das Modul genau
einen neuen Datensatz ein (INSERT). Optional stempelt das Modul ausgestempelte
Gruppenmitglieder bei einem ausgehenden Telefongespräch automatisch ein. Bestehende Zeilen
werden vom Modul weder geändert noch gelöscht; ohne gültige Modullizenz werden keine
Stempelereignisse geschrieben.
Die Tabelle erstellen Sie einmalig über die Moduloberfläche. Das Modul setzt dabei die
folgende DDL ab (Tabellenname beispielhaft zeiterfassung; existiert bereits eine Tabelle
dieses Namens, schlägt die Erstellung fehl):
CREATE TABLE zeiterfassung (timestamp TEXT, status TEXT, accountid INTEGER, name TEXT)
Primärschlüssel, Indizes oder Constraints legt das Modul nicht an; die generischen Typangaben bildet das jeweilige Datenbanksystem auf seine nativen Typen ab.
Ausfallsicherheit: Ist die Datenbank beim Stempeln nicht erreichbar, puffert das Modul
den Eintrag im Modulspeicher und versucht alle 5 Minuten, gepufferte Einträge nachzutragen
— es gehen keine Stempelereignisse verloren. Nachgetragene Einträge behalten ihren
ursprünglichen Zeitstempel, erscheinen aber erst verzögert in der Tabelle. Die physische
Zeilenreihenfolge ist daher nicht zwingend chronologisch: Sortieren Sie Abfragen stets über
ORDER BY timestamp, und verlassen Sie sich bei inkrementellen Abgleichen nicht allein auf
den höchsten bereits gelesenen Zeitstempel.
Über die Moduloberfläche lässt sich zusätzlich ein Backup der Tabelle erstellen und
wiederherstellen (Dateiendung .zebak, ein modulinternes, komprimiertes JSON-Format; die
Wiederherstellung ersetzt den Tabelleninhalt vollständig).
Schema
Alle Stempeldaten liegen in der einen konfigurierten Tabelle (im Folgenden beispielhaft
zeiterfassung):
| Spalte | Typ | Bedeutung |
|---|---|---|
timestamp | TEXT | Zeitpunkt des Stempelereignisses als ISO-8601-Zeichenkette in lokaler Anlagenzeit, sekundengenau, ohne Zeitzonenangabe — z. B. 2026-08-04T07:32:10. Lexikografische Sortierung entspricht der zeitlichen Reihenfolge. |
status | TEXT | in = eingestempelt, out = ausgestempelt |
accountid | INTEGER | Account-ID des Benutzers auf der STARFACE — der stabile Schlüssel für die Benutzerzuordnung |
name | TEXT | Name des Benutzers zum Stempelzeitpunkt im Format „Nachname, Vorname" (denormalisierte Momentaufnahme) |
Hinweise für auswertende Systeme:
- Die im Modul gepflegten Personalnummern (Eigene IDs) werden nicht in die Datenbank geschrieben; sie fließen erst beim Datei-Export ein (siehe Exportformate).
namedient der Lesbarkeit; maßgeblich für Auswertungen istaccountid, da sich Benutzernamen ändern können.- Arbeitszeiten sind nicht vorberechnet gespeichert — die Tabelle enthält ausschließlich
die rohen Ereignisse. Dauern berechnen Sie durch Paarung aufeinanderfolgender
in-/out-Ereignisse je Benutzer (oder Sie verwenden die Zeiterfassungs-Exporte des Moduls).
Beispiele
Alle Stempelereignisse eines Monats, chronologisch (das Zeitraumfilter-Muster LIKE
auf der ISO-Zeichenkette verwendet das Modul selbst und funktioniert auf allen
unterstützten Datenbanksystemen):
SELECT timestamp, status, accountid, name
FROM zeiterfassung
WHERE timestamp LIKE '2026-07-%'
ORDER BY timestamp;
Alle Ereignisse eines einzelnen Benutzers:
SELECT timestamp, status
FROM zeiterfassung
WHERE accountid = 101
ORDER BY timestamp;
Aktuell eingestempelte Benutzer (jeweils letzter Status je Account):
SELECT t.accountid, t.name, t.timestamp AS eingestempelt_seit
FROM zeiterfassung t
JOIN (SELECT accountid, MAX(timestamp) AS ts
FROM zeiterfassung
GROUP BY accountid) letzter
ON letzter.accountid = t.accountid
AND letzter.ts = t.timestamp
WHERE t.status = 'in';
Beispieldatensätze:
| timestamp | status | accountid | name |
|---|---|---|---|
2026-07-01T07:58:23 | in | 101 | Mustermann, Max |
2026-07-01T12:02:41 | out | 101 | Mustermann, Max |
2026-07-01T12:31:07 | in | 101 | Mustermann, Max |
2026-07-01T16:45:12 | out | 101 | Mustermann, Max |
Eine Anwesenheitsübersicht im Intranet fragt zyklisch den letzten Status je Benutzer ab (Abfrage oben) und zeigt live, wer gerade eingestempelt ist — ganz ohne Modul-Oberfläche.
Versionierung & Kompatibilität
Tabellenaufbau, Spaltennamen und die Wertemenge von status (in/out) sind der stabile
Vertrag dieser Schnittstelle; dokumentierter Stand ist Modulversion 26.4.1. Eine separate
Schemaversion in der Datenbank existiert nicht — maßgeblich ist die installierte
Modulversion. Schemaänderungen werden in den
Release Notes der jeweiligen Modulversion
dokumentiert. Bauen Sie Auswertungen auf Spaltennamen auf (explizite Spaltenliste statt
SELECT *), damit spätere Erweiterungen bestehende Abfragen nicht beeinflussen.