Datenexport und Anbieterwechsel

Stand:

Stand: 09.11.2026

Diese Seite enthält die Angaben nach Art. 26 und Art. 28 der Verordnung (EU) 2023/2854 (Data Act). Die vertraglichen Regeln stehen in § 15 der AGB.

1. Verfahren

  • Export jederzeit: Administratoren mit vollen Rechten können alle Daten jederzeit selbst exportieren, unter Verwaltung → Einstellungen → Daten & Export → „Alle Daten exportieren“.
  • Wechselwunsch: Mit der Kündigung oder bis zum Ende der Kündigungsfrist in Textform an info@fairhours.de mitteilen, ob Sie zu einem anderen Anbieter wechseln, auf eigene Systeme wechseln oder Ihre Daten löschen lassen möchten.
  • Übergangszeitraum: bis zu 30 Kalendertage nach dem Ende der Kündigungsfrist. Fairhours läuft in dieser Zeit weiter. Sie können den Zeitraum einmal verlängern.
  • Datenabruf: 30 Kalendertage nach dem Vertragsende bzw. nach dem Übergangszeitraum.
  • Löschung: danach löschen wir alle exportierbaren Daten, siehe AGB § 15 Abs. 9. Sicherungskopien auf dem Server werden nach 14 Tagen überschrieben, Sicherungskopien außer Haus spätestens nach 40 Tagen gelöscht. Rechnungen bewahren wir auf, solange das Gesetz es verlangt.
  • Kosten: Export und Wechsel sind kostenlos.
  • Unterstützung: Fragen zum Export beantworten wir per E-Mail, auch gegenüber einem von Ihnen benannten neuen Anbieter.
  • Daten einer einzelnen Person (etwa für eine Auskunft nach Art. 15 DSGVO oder eine Datenübertragung nach Art. 20 DSGVO): Je Person gibt es den Stundenzettel und, falls die Personalakte gebucht ist, den Export der Personalakte. Aus dem Gesamtexport lassen sich alle Zeilen einer Person über die Spalte person_id herausfiltern. Der Gesamtexport enthält Daten aller Personen der Firma, auch Verweise auf andere Personen, etwa in entschieden_von. Geben Sie einer Person nur ihre eigenen Daten heraus und prüfen Sie, ob Angaben über andere Personen unkenntlich gemacht werden müssen.

2. Formate

ExportInhaltFormat
Gesamtexportalle Daten der Firma, eine Datei je TabelleZIP mit CSV-Dateien (Trennzeichen Semikolon, UTF-8 mit BOM)
Spesen-BelegeBelege im OriginalPDF, JPG, PNG (im Gesamtexport enthalten)
Personalakteje Person: Dokumente, Inhaltsverzeichnis, Stammblatt, auf Wunsch ZugriffsprotokollZIP
Monatsübersichten und Auswertungenlaufend für die LohnabrechnungExcel
Spesen-Exportlaufend für die BuchhaltungDATEV-CSV, Excel, PDF

3. Datenstrukturen

Die folgende Übersicht beschreibt die Dateien des Gesamtexports und ihre Felder.

Der Gesamtexport ist eine ZIP-Datei. CSV bedeutet: Trennzeichen Semikolon, Zeichensatz UTF-8 mit BOM, erste Zeile = Feldnamen. Zeitpunkte stehen als JJJJ-MM-TTTHH:MM:SS in deutscher Zeit (Zeitzone Europe/Berlin mit Sommerzeit, ohne Angabe des Abstands zu UTC). In der Stunde, die bei der Umstellung auf die Winterzeit doppelt vorkommt, ist ein solcher Zeitpunkt deshalb nicht eindeutig; bei Stempelungen klärt das die Spalte utc_abstand_min in buchungen.csv. Ausgenommen sind entra_gruppenwechsel.zeit (UTC mit Millisekunden und Z, JJJJ-MM-TTTHH:MM:SS.sssZ) sowie alle Zeitpunkte in reise_segmente.csv und reise_protokoll.csv (UTC mit Z, JJJJ-MM-TTTHH:MM:SSZ). zone_start und zone_ende nennen die Zeitzone am Start und am Ende eines Reiseabschnitts als IANA-Namen, etwa Europe/Berlin oder America/New_York; daraus lässt sich die Ortszeit berechnen. Die Dauer eines Abschnitts ist die Differenz der UTC-Zeitpunkte, nicht die Differenz der Ortszeiten. Beträge stehen in Cent. Texte, die (auch nach Leerzeichen) mit = + - @ oder mit einem Tabulator beginnen, haben ein Hochkomma davor.

DateiInhaltFelderFormat
tabellen/abwesenheiten.csvAbwesenheiten außer Urlaub und Krankheit (z. B. Dienstreise, Messe, Sonderurlaub) mit Antrag und Entscheidungid: laufende Nummer; person_id: Person (id aus personen.csv); art: Art der Abwesenheit; von: Beginn; bis: Ende; halbtag: halber Tag; grund: Grund; begruendung: Begründung; tage: Tage; status: Stand; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); entschieden: entschieden am; entschieden_von: entschieden von (id aus personen.csv); kommentar: Kommentar; ohne_genehmigung: 1 = ohne Genehmigung eingetragen; vertretung_fuer: in Vertretung für (id aus personen.csv)CSV
tabellen/abwesenheitskalender.csvEinträge im gemeinsamen Abwesenheitskalender in Outlook und ihr Standid: laufende Nummer; person_id: Person (id aus personen.csv); postfach; teil; von: Beginn; bis: Ende; beginn; ende; betreff; kennung; event_id; ziel; zustand: Stand; versuche: Zahl der Versuche; naechster: nächster Versuch; letzter_fehler: letzte Fehlermeldung; zeit: ZeitpunktCSV
tabellen/antraege.csvAnträge auf Urlaub, Zeitkorrektur und Nachtrag mit Entscheidungid: laufende Nummer; person_id: Person (id aus personen.csv); art: urlaub, korrektur oder nachtrag; status: Stand; von: Beginn; bis: Ende; halbtag: halber Tag; datum: Tag; buchungen: beantragte Stempelungen (JSON); ersetzt: ersetzte Stempelungen (JSON); begruendung: Begründung; tage: Tage; stunden; erstellt: angelegt am; entschieden: entschieden am; entschieden_von: entschieden von (id aus personen.csv); kommentar: Kommentar; vertretung_id: Vertretung während des Urlaubs (id aus personen.csv); durch_admin: 1 = von einem Admin eingetragen; eingetragen_von: eingetragen von (id aus personen.csv); vertretung_fuer: in Vertretung für (id aus personen.csv)CSV
tabellen/anwesenheit_beispiele.csvBeispiele, nach denen der Anwesenheitskalender Outlook-Termine einordnetid: laufende Nummer; kennung; betreff; betreff_norm; show_as; ganztags; entscheidung; art; privat; quelle; zeit: ZeitpunktCSV
tabellen/anwesenheit_einordnung.csvGeprüfte Einordnung von Outlook-Terminen im Anwesenheitskalender (ohne Betreff)entscheidung; art; privat; quelle; sicher; zeit: Zeitpunkt; gruppeCSV
tabellen/anwesenheit_termine.csvTermine aus den eigenen Outlook-Kalendern für den Anwesenheitskalender und ihre Einordnungid: laufende Nummer; person_id: Person (id aus personen.csv); event_id; serie_id; tag: Tag; von: Beginn; bis: Ende; ganztags; show_as; privat; abgesagt; zeiterfassung; vorschlag_entscheidung; vorschlag_art; vorschlag_privat; vorschlag_quelle; entscheidung; art; quelle; regel_grund; anzeige_von; anzeige_bis; gelesenCSV
tabellen/anwesenheit_wahl.csvEigene Einordnung einer Person im Anwesenheitskalenderperson_id: Person (id aus personen.csv); entscheidung; art; zeit: ZeitpunktCSV
tabellen/arbeitsort_ergebnisse.csvErgebnisse beim Setzen des Arbeitsorts in Teams und Outlookid: laufende Nummer; zeit: Zeitpunkt; kuerzel; ort; umfang; ok; status: Stand; fehlerCSV
tabellen/arbeitsort_tage.csvArbeitsort je Person und Tag (Büro, Homeoffice)person_id: Person (id aus personen.csv); datum: Tag; ort; zeit: ZeitpunktCSV
tabellen/arbeitsort_zaehler.csvZähler je Tag: Arbeitsort gesetzt bzw. fehlgeschlagendatum: Tag; ok; fehlerCSV
tabellen/ausserhalb.csvZeit außerhalb der Rahmenzeit je Person und Tag mit Entscheidungid: laufende Nummer; person_id: Person (id aus personen.csv); datum: Tag; status: Stand; vor_min; nach_min; entscheidung; entschieden_vor_min; entschieden_nach_min; genehmigt_vor_min; genehmigt_nach_min; erstellt: angelegt am; aktualisiert; entschieden: entschieden am; entschieden_von: entschieden von (id aus personen.csv); kommentar: Kommentar; mit_vor_min; mit_nach_min; mit_herkunft; genehmigt_spannen: Zeitspannen früherer Freigaben (JSON), bis zur nächsten zeitlich wirksamen Korrektur gültig; vertretung_fuer: in Vertretung für (id aus personen.csv); korrektur_hinweis: Letzte Rücksetzung mit Korrektur, Zeitpunkt und bisheriger Entscheidung (JSON); mit_ab_id: Nur Mitgenehmigungen mit größerer Nummer gehören zur aktuellen TagesentscheidungCSV
tabellen/ausserhalb_entscheidungen.csvEntscheidungen und Rücksetzungen nach Buchungskorrekturen mit altem und neuem Stand (nur anhängen)id: laufende Nummer; ausserhalb_id; person_id: Person (id aus personen.csv); zeitpunkt: Zeitpunkt; entschieden_von: entschieden von (id aus personen.csv); vertretung_fuer: in Vertretung für (id aus personen.csv); ok; kommentar: Kommentar; beantragt_vor_min; beantragt_nach_min; alt_status; alt_vor_min; alt_nach_min; neu_status; neu_vor_min; neu_nach_min; art: entscheidung, zuruecksetzung oder korrekturentscheidung; korrektur_art: korrektur, nachtrag, admin, chip_verwerfen oder chip_zuordnen; korrektur_id: Nummer des Antrags, beim Chip-Verwerfen Buchungsnummer, bei alter Chip-Zuordnung Ereignisnummer; alt_stand: Minuten, sekundengenaue Zeitspannen und Entscheidung vor der Änderung (JSON); neu_stand: Minuten, sekundengenaue Zeitspannen und Entscheidung nach der Änderung (JSON)CSV
tabellen/ausserhalb_mit.csvMitgenehmigte Zeit außerhalb der Rahmenzeit (durch welchen Antrag, wer, wann)id: laufende Nummer; ausserhalb_id; antrag_id; vor_min; nach_min; genehmigt_von; vertretung_fuer: in Vertretung für (id aus personen.csv); zeitpunkt: Zeitpunkt; spannen: Zeitspannen früherer Mitgenehmigungen (JSON); neue Entscheidungen gelten für den ganzen TagCSV
tabellen/ausserhalb_mit_verlauf.csvVollständiger ursprünglicher Stand zurückgesetzter Mitgenehmigungen, einschließlich Quelle der Rücksetzung (nur anhängen)mit_id: Ursprüngliche Nummer aus ausserhalb_mit; ausserhalb_id; antrag_id; daten: Vollständige ursprüngliche Zeile aus ausserhalb_mit (JSON); zurueckgesetzt: Zeitpunkt der Rücksetzung; korrektur_art: Art der auslösenden Korrektur; korrektur_id: Nummer der auslösenden KorrekturCSV
tabellen/buchungen.csvStempelungen (Kommen und Gehen) aus Browser, Handy und Terminalid: laufende Nummer; person_id: Person (id aus personen.csv); chip: Chip-Nummer; aktion: kommen oder gehen; grund: Grund beim Gehen; zeitpunkt: Zeitpunkt; quelle: Herkunft der Stempelung; empfangen: beim Server angekommen; rohdaten: Daten des Terminals; storniert: storniert am (zählt nicht mehr); ort: Arbeitsort; utc_abstand_min: Abstand der Ortszeit zu UTC in Minuten (120 Sommerzeit, 60 Winterzeit; leer bei älteren Stempelungen)CSV
tabellen/chips.csvBekannte Chips der Stempelterminalschip: Chip-Nummer; erstmals: zuerst gesehen; quelle: wo der Chip zuerst gelesen wurdeCSV
tabellen/darstellung.csvPersönliche Darstellung je Person: Design (hell, dunkel, automatisch), Schriftgröße und Kontrastperson_id: Person (id aus personen.csv); thema; schrift; kontrast; geaendert: geändert amCSV
tabellen/einstellungen.csvEinstellungen der Firma (Name der Einstellung und Wert, meist als JSON)schluessel: Name der Einstellung; wert: WertCSV
tabellen/entra_gruppenwechsel.csvÄnderungen der Microsoft-365-Gruppe: wer wann welche Wahl übernommen hat, Bestätigung und Zahlen des Abgleichsid: laufende Nummer; zeit: Zeitpunkt in UTC (JJJJ-MM-TTTHH:MM:SS.sssZ), abweichend von der deutschen Ortszeit der übrigen Tabellen; person_id: Person (id aus personen.csv); person_name: Name der handelnden Admin-Person; alt: vorherige Gruppenwahl (JSON); neu: neue Gruppenwahl (JSON); bestaetigt: eins = Deaktivieren für diesen Lauf ausdrücklich bestätigt; zahlen: Zahlen des Abgleichs (JSON)CSV
tabellen/ereignisse.csvMeldungen der Terminals, der Outlook-Freischaltung, Admin-Wiederherstellungen und Datenübernahmen (Admin, Zeitpunkt, Anzahl Personen und Abwesenheiten, SHA-256-Prüfsumme)id: laufende Nummer; quelle: Herkunft; daten_import bei einer Datenübernahme; art: Art der Meldung; text: Ereignistext; bei Datenübernahmen JSON mit admin_id, personen, abwesenheiten und sha256; zeitpunkt: Zeitpunkt; empfangen: beim Server angekommenCSV
tabellen/firmenlogo.csvAngaben zum Firmenlogo (das Bild liegt im Ordner logo/)id: immer 1 (es gibt höchstens ein Logo); mime: Dateiart; breite: Breite in Pixel; hoehe: Höhe in Pixel; version: Prüfsumme des Bildes; geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv)CSV
tabellen/firmentermine.csvFirmentermine (z. B. Betriebsurlaub, Schulferien, Messen)id: laufende Nummer; titel: Titel; art: Art; von: Beginn; bis: Ende; farbe; abteilungen: betroffene Abteilungen; teams: betroffene Teams; wirkung: Wirkung auf Arbeitszeit und Urlaub; hinweistext; vorlaeufig: 1 = vorläufig; vorlage; wiederholung: Wiederholung; wiederholung_bis: Wiederholung bis; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv)CSV
tabellen/genehmigungsvertretungen.csvVertretungen bei Genehmigungenid: laufende Nummer; vg_id; vertreter_id; von: Beginn; bis: Ende; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv)CSV
tabellen/gesamtexporte.csvProtokoll der Gesamtexporte: wer wann exportiert hat (ohne Inhalt)id: laufende Nummer; person_id: wer exportiert hat (id aus personen.csv); zeitpunkt: wannCSV
tabellen/ki_hilfe_plaetze.csvWer einen Platz im KI-Hilfe-Chat hatperson_id: Person (id aus personen.csv); seit: Platz vergeben amCSV
tabellen/konto_gutschriften.csvGutschriften auf Konten, z. B. Messeausgleichid: laufende Nummer; person_id: Person (id aus personen.csv); konto: Konto; datum: Tag; tage: gutgeschriebene Tage; grund: Grund; erfasst: angelegt am; erfasst_von: angelegt von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv); vertretung_fuer: in Vertretung für (id aus personen.csv)CSV
tabellen/krankheiten.csvKrankheitstage einschließlich Bemerkung und Ansprechperson (für den Export entschlüsselt)id: laufende Nummer; person_id: Person (id aus personen.csv); von: Beginn; bis: Ende; bemerkung: Bemerkung; erfasst: angelegt am; erfasst_von: angelegt von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv); vertretung_fuer: in Vertretung für (id aus personen.csv); geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv); geaendert_vertretung_fuer; ansprechperson_id: Ansprechperson (id aus personen.csv); ohne_ansprechpersonCSV
tabellen/messe_outlook.csvMesse-Termine aus Outlook und ihre Zuordnung im Messekalenderid: laufende Nummer; postfach; event_id; ical_uid; art; termin_id; messe_id; team_neu; zustand: Stand; ignoriert_weil; herkunft; gehoert_app; organisator; serie; betreff; beginn; ende; ganztags; ort; eintrag; outlook_geaendert; change_key; eigener_change_key; eigener_inhalt; app_stand; fest_ort; grund: Grund; vorschlag; vorschlag_von; erstellt: angelegt am; geaendert: geändert amCSV
tabellen/messe_outlook_auftraege.csvAufträge vom Messekalender an Outlook und ihr Standid: laufende Nummer; postfach; ziel_art; ziel_id; aktion; kennung; event_id; unsicher; zustand: Stand; versuche: Zahl der Versuche; naechster: nächster Versuch; letzter_fehler: letzte Fehlermeldung; zeit: ZeitpunktCSV
tabellen/messe_team.csvWer zum Team einer Messe gehörtmesse_id; person_id: Person (id aus personen.csv)CSV
tabellen/messe_termin_personen.csvWer an einem Messe-Termin teilnimmttermin_id; person_id: Person (id aus personen.csv)CSV
tabellen/messe_termin_tage.csvTage eines Messe-Terminstermin_id; tag: TagCSV
tabellen/messe_termine.csvTermine auf Messen (z. B. Kundentermine am Stand)id: laufende Nummer; messe_id: Messe (id aus messen.csv); tag: Tag; von: Beginn; bis: Ende; kunde: Kunde; ansprechpartner: Ansprechpartner beim Kunden; status: Stand; notiz: Notiz; kuerzel_alt; war_da_am; war_da_von; quelle; erstellt_von: angelegt von (id aus personen.csv); erstellt_am: angelegt am; geaendert_von: geändert von (id aus personen.csv); geaendert_am: geändert am; entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv); geaendert_ueberCSV
tabellen/messen.csvMessen mit Ort, Stand und Zeitraumid: laufende Nummer; name: Name; ort: Ort; stand: Stand auf der Messe; von: Beginn; bis: Ende; aufbau: Aufbau; firmentermin_id; firmentermin_eigen; quelle; erstellt_von: angelegt von (id aus personen.csv); erstellt_am: angelegt am; geaendert_von: geändert von (id aus personen.csv); geaendert_am: geändert am; entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv)CSV
tabellen/outlook_abwesenheiten.csvTermine und Abwesenheitsnotizen, die Fairhours für Urlaub und Krankheit in Outlook eingetragen hatantrag_id; person_id: Person (id aus personen.csv); entra_oid; ziel; mit_termin; mit_notiz; kennung; termine; notiz: Notiz; notiz_ende; stand; zustand: Stand; versuche: Zahl der Versuche; naechster: nächster Versuch; letzter_fehler: letzte Fehlermeldung; meldungen; zeit: ZeitpunktCSV
tabellen/personen.csvPersonen mit Stammdaten (Rolle, Abteilung, Zeitmodell, Urlaubsanspruch, Eintritt und Austritt)id: laufende Nummer; name: Name; chip: Chip-Nummer; rolle: Rolle (ma = Mitarbeitende, vg = Vorgesetzte, admin); personalnummer: Personalnummer; abteilung: Abteilung; vorgesetzter_id: Vorgesetzte(r) (id aus personen.csv); wochenstunden: Wochenstunden; verteilung: Stunden je Wochentag (JSON); land: Bundesland für Feiertage (Kürzel, z. B. BY); eintritt: Eintritt; kuerzel: Kürzel; email: E-Mail; urlaub_anspruch_tage: Urlaubsanspruch im Jahr; urlaub_uebertrag_tage: Resturlaub aus dem Vorjahr; ueberstunden_uebertrag_min: Überstunden-Übertrag in Minuten; aktiv: 1 = aktiv; austritt: Austritt; entra_oid: Kennung in Microsoft 365; quelle; entra_vorgesetzter_oid; stempelpflicht: 1 = stempelt; messeausgleich_uebertrag_tage; abrechnungsbeginn; hr: 1 = Personalabteilung; hr_vertraulich; dienstreise_ohne_genehmigung; ueberstunden_verfall; ueberstunden_verfall_ab; admin_eingeschraenkt: 1 = Admin Zeiterfassung; urlaub_start: Beginn des Urlaubskontos (ab diesem Jahr rechnet der Übertrag); urlaub_start_fest: Kontobeginn ausdrücklich gesetzt; frühere Stempelungen verschieben ihn nicht; team_hoechstens_wegCSV
tabellen/reise_protokoll.csvÄnderungen an Reisezeit und Firmeneinstellungen mit altem und neuem Wertid: laufende Nummer; bereich: segment oder einstellungen; segment_id: Nummer aus reise_segmente.csv; leer bei Firmeneinstellungen; feld: geändertes Feld; arbeitsweg_vorbelegung enthält die Einstellung beim Anlegen; alt: vorheriger Wert als JSON; neu: neuer Wert als JSON; wer: ändernde Person (id aus personen.csv); wann: Zeitpunkt in UTCCSV
tabellen/reise_segmente.csvReisezeit-Segmente mit UTC-Zeiten, Zeitzonen, ArbZG-Bewertung, Gutschrift und Entscheidungid: laufende Nummer; person_id: Person (id aus personen.csv); reise_id: gemeinsame zufällige Kennung aller Segmente einer Reise; typ: Typ aus dem Reisezeit-Katalog: aktiv_ohne_typ = Reisezeit ohne Untertyp (aktiv); aktiv_selbst_gefahren = selbst gefahren auf Anweisung; aktiv_arbeit_unterwegs = unterwegs gearbeitet auf Anweisung; aktiv_fahrer = Fahrer für Kollegen; passiv_oeffentlich = Bahn, Flug oder Bus ohne Arbeitsauftrag; passiv_freiwillig_auto = freiwillig selbst gefahren statt der vorgesehenen Bahn; mitfahrt_ag_organisiert = Mitfahrt in einer vom Arbeitgeber organisierten Fahrt; start_utc: Beginn in UTC (JJJJ-MM-TTTHH:MM:SSZ); ende_utc: Ende in UTC; leer bei laufender Reise; zone_start: IANA-Zeitzone am Start; zone_ende: IANA-Zeitzone am Ende; leer bei laufender Reise; ausland: 1 = Reise im Ausland; zaehlt_fuer_arbzg: 1 = zählt für Arbeitszeit, Pausen und Ruhezeit nach ArbZG; gutschrift_prozent: Gutschrift auf das Zeitkonto in Prozent (0 bis 100); arbeitsweg_abzug_min: Abzug von der Gutschrift in Minuten, ohne Wirkung auf ArbZG; status: gilt, offen, abgelehnt oder storniert; quelle: live, nachtrag oder verwaltung; bemerkung: Bemerkung zur Reise; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); entschieden: entschieden am; entschieden_von: entschieden von (id aus personen.csv); entscheidung_grund: Grund der Genehmigung oder AblehnungCSV
tabellen/spesen_abrechnungen.csvSpesenabrechnungen und Reisen mit Stand und Entscheidungid: laufende Nummer; nummer: Nummer; person_id: Person (id aus personen.csv); art: Monat oder Reise; titel: Titel; monat; reise_zweck; reise_ziel; reise_land; reise_ort; reise_beginn; reise_ende; reise_uebernachtung; reise_ergebnis; abwesenheit_id; status: Stand; eingereicht; entschieden: entschieden am; entschieden_von: entschieden von (id aus personen.csv); vertretung_fuer: in Vertretung für (id aus personen.csv); kommentar: Kommentar; geprueft; geprueft_von; export_id: Export (id aus spesen_exporte.csv); pos_zaehler; erstellt: angelegt am; geaendert: geändert amCSV
tabellen/spesen_belege.csvAngaben zu den Belegen der Spesen (die Dateien liegen im Ordner belege/)id: Kennung; Dateiname im Ordner belege/; person_id: Person (id aus personen.csv); mime: Dateiart; groesse: Größe in Bytes; sha256; dateiname: ursprünglicher Dateiname; hochgeladen: hochgeladen am; ki_status: Stand der KI-Belegprüfung; ki_ergebnis: von der KI gelesene Angaben (JSON); ki_fehler; ki_versuche; ki_zeit; format: Ablage der Datei auf dem Server (zbl1 = verschlüsselt, klar = älterer unverschlüsselter Beleg); im Export immer unverschlüsseltCSV
tabellen/spesen_belege_tag.csvZahl der hochgeladenen Belege je Person und Tagperson_id: Person (id aus personen.csv); datum: Tag; anzahlCSV
tabellen/spesen_exporte.csvExporte der Spesen für die Buchhaltungid: laufende Nummer; nummer; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); anzahl: Zahl der Abrechnungen; summe_cent: Summe in Cent; datev: 1 = DATEV-Format; hinweise; daten: Abrechnungen und Einstellungen beim Erstellen (JSON); daraus entstehen Excel-Liste und ZIP des Exports; zurueckgenommen; zurueckgenommen_vonCSV
tabellen/spesen_kurse.csvWechselkurse der Europäischen Zentralbank, die für Spesen genutzt wurdendatum: Tag; waehrung; kursCSV
tabellen/spesen_plaetze.csvWer einen Spesen-Platz hatperson_id: Person (id aus personen.csv); seit: Platz vergeben amCSV
tabellen/spesen_positionen.csvEinzelne Ausgaben einer Spesenabrechnungid: laufende Nummer; abrechnung_id: Abrechnung (id aus spesen_abrechnungen.csv); nr; kategorie: Kategorie; datum: Tag; betrag_cent: Betrag in Cent (Euro); waehrung: Währung; betrag_original_cent: Betrag in der Währung des Belegs (Cent); kurs: Wechselkurs; kurs_quelle; angaben; beleg_id: Beleg (id aus spesen_belege.csv); warnung_grund; warnung_codes; konto: Konto; steuer: Steuerschlüssel; bezahlt: privat oder firmenkarte; automatisch; erstellt: angelegt am; geaendert: geändert amCSV
tabellen/spesen_reisetage.csvReisetage einer Reise mit Land, Ort und gestellten Mahlzeitenabrechnung_id; datum: Tag; land; ort; fruehstueck; mittag; abendCSV
tabellen/spesen_verlauf.csvVerlauf einer Spesenabrechnung (eingereicht, genehmigt, zurückgegeben …)id: laufende Nummer; abrechnung_id; zeit: Zeitpunkt; person_id: Person (id aus personen.csv); aktion; kommentar: KommentarCSV
tabellen/stundenbuchungen.csvVon Hand gebuchte Stunden (Gutschrift oder Abzug)id: laufende Nummer; person_id: Person (id aus personen.csv); datum: Tag; minuten: Minuten (plus = Gutschrift, minus = Abzug); grund: Grund; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv); entfernt_grund; abgegolten_monat: Monat des Überstunden-VerfallsCSV
tabellen/terminals.csvStempelterminals (ohne Kennwörter)seriennummer: Seriennummer; port; letzter_kontakt: letzter Kontakt; uhr_abweichung_s: Abweichung der Uhr in Sekunden; id: laufende Nummer; name: Name; kennung: Kennung; gesperrt: gesperrt am; angelegt: angelegt am; angelegt_von: angelegt von (id aus personen.csv); zuletzt_abgewiesenCSV
tabellen/ueberstunden_verfall.csvMonatsabschluss für den Verfall von Überstunden je Personperson_id: Person (id aus personen.csv); monat: Monat; ergebnis: Ergebnis; saldo_min: Saldo am Monatsende in Minuten; buchung_id: Buchung (id aus stundenbuchungen.csv); gelaufenCSV
tabellen/urlaubswuensche.csvUnverbindliche Urlaubswünscheid: laufende Nummer; person_id: Person (id aus personen.csv); von: Beginn; bis: Ende; halbtag: halber Tag; notiz: Notiz; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv); antrag_idCSV
tabellen/vertretungsgruppen.csvVertretungsgruppen mit Mindestbesetzungid: laufende Nummer; name: Name; mindestens: Mindestbesetzung; notiz: Notiz; erstellt: angelegt am; erstellt_von: angelegt von (id aus personen.csv); geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv)CSV
tabellen/vertretungsgruppen_mitglieder.csvWer zu einer Vertretungsgruppe gehörtgruppe_id; person_id: Person (id aus personen.csv)CSV
tabellen/zeitmodelle.csvFrühere Arbeitszeitmodelle je Person: Wochenstunden und Verteilung, die bis zu einem Tag galtenid: laufende Nummer; person_id: Person (id aus personen.csv); bis: Ende; wochenstunden; verteilung; geaendert: geändert am; geaendert_von: geändert von (id aus personen.csv)CSV
tabellen/zusatzurlaub.csvZusätzliche Urlaubstage je Person und Jahrid: laufende Nummer; person_id: Person (id aus personen.csv); tage: Tage; ab_jahr: ab Jahr; bis_jahr: bis Jahr; grund: Grund; erfasst: angelegt am; erfasst_von: angelegt von (id aus personen.csv); entfernt: entfernt am (der Eintrag bleibt zum Nachweis); entfernt_von: entfernt von (id aus personen.csv)CSV
belege/Belege der Spesen im Original; Dateiname = id aus spesen_belege.csv–PDF, JPG, PNG
logo/Firmenlogo im Original, falls eines hochgeladen ist (Angaben in firmenlogo.csv)–PNG, JPG oder WEBP
LIESMICH.txtAufbau des Exports, Zeitpunkt der Erstellung und Zahl der Tabellen und Belege–Text (UTF-8)
PersonalakteJe Person ein eigener Export in der Personalakte: Dokumente, Inhaltsverzeichnis, Stammblatt, auf Wunsch Zugriffsprotokoll–ZIP je Person

4. Bekannte Einschränkungen

  • Nicht exportiert werden Daten, die nur dem internen Betrieb dienen: Sitzungen, interne Zähler und Protokolle der KI-Funktionen und des Mailversands, die Zugriffsprotokolle des Webservers (IP-Adresse, Zeitpunkt, aufgerufene Adresse und Browser-Kennung, nach 14 Tagen gelöscht), Kennwort-Hashes, Tokens und Schlüssel.
  • Ebenfalls nicht im Gesamtexport: interne Läufe und Stände der Abgleiche mit Microsoft 365 und Outlook, die Prüfung der Outlook-Freischaltung, Anmelde-Übergaben vom Portal und Prüfwerte (Hashes) der KI-Einordnung von Kalenderterminen.
  • Es gibt keine Schnittstelle für eine direkte Übertragung zu einem anderen Anbieter. Der Gesamtexport ist eine Datei zum Herunterladen.
  • Die Personalakte ist nicht im Gesamtexport: Sie ist verschlüsselt gespeichert und hat eigene Rechte. Sie wird je Person in der Personalakte exportiert.
  • Den Gesamtexport laden nur Admins mit vollen Rechten herunter, nicht die Rolle „Admin Zeiterfassung“. In der Demo gibt es keinen Gesamtexport.
  • Höchstens ein Gesamtexport alle 10 Minuten je Firma. Jeder Export wird mit Person und Zeitpunkt vermerkt; der Vermerk steht selbst im Export (gesamtexporte.csv).
  • Einige Felder enthalten strukturierte Angaben als JSON, zum Beispiel die Werte der Einstellungen.

5. Gerichtsbarkeit der technischen Infrastruktur

TeilBetreiberStandort und Recht
Server, Datenbanken, SicherungenHetzner Online GmbHRechenzentren in Deutschland, deutsches Recht
KI-Funktionen (nur wenn gebucht)Langdock GmbH, BerlinVerarbeitung in der EU. Langdock nutzt Modellanbieter, von denen einige ihren Sitz oder ihre Muttergesellschaft in den USA haben.
Support-Postfach info@fairhours.deMicrosoft Ireland Operations LimitedIrland, Muttergesellschaft in den USA

6. Schutz vor unrechtmäßigem staatlichem Zugriff

  • Ihre Daten liegen bei einem deutschen Rechenzentrumsbetreiber in Deutschland.
  • Alle Verbindungen sind verschlüsselt. Personalakten, Spesen-Belege und Krankheitstage sind zusätzlich mit einem eigenen Schlüssel je Firma verschlüsselt gespeichert.
  • Sicherungen außer Haus werden verschlüsselt, bevor sie unseren Server verlassen. Den Schlüssel zum Öffnen haben nur wir, offline. Der Speicheranbieter kann die Sicherungen nicht lesen.
  • KI-Funktionen sind optional und lassen sich abschalten.
  • Verlangt eine Behörde außerhalb der EU Zugang zu Ihren Daten, geben wir sie nur heraus, wenn das nach Art. 32 Data Act zulässig ist. Vorher informieren wir Sie, soweit das erlaubt ist.