API · v1 · stabil
CODEMETA OSDeveloper Center
Konsole öffnen
Entity · time_account_transactions

Time Account Transaction Schema

Schema-ID
time_account_transaction
Collection
time_account_transactions
Permissions
  • Lesentime_account_view
  • Anlegentime_account_correct
  • Änderntime_account_correct
  • Löschentime_account_correct

Felder

Time Account Transaction Schema

time_account_transactions4 Permissions

Einzelbuchung im Stundenkonto (append-only, Hash-Kette)

accountIduuiderforderlich

Referenz auf time_account._id

read-only
userIduuiderforderlich

Denormalisiert für schnelle Per-User-Queries

read-only
datestringerforderlich

Fachliches Datum der Buchung (nicht Insert-Zeitpunkt)

Patternread-only
typestringerforderlich

DAILY_BALANCE = tägliche Materialisierung (berechnet Soll/Ist, ändert Saldo NICHT direkt); PERIOD_CLOSING (als sourceType) bucht den Monats-Saldo. CORRECTION_CARRIED_FORWARD dokumentiert retroaktive Korrekturen, die nach Payroll-Export im aktuellen Monat nachgebucht werden.

CREDITDEBITCARRY_OVERPAYOUTCORRECTIONCORRECTION_CARRIED_FORWARDEXPIRYOPENING_BALANCEDAILY_BALANCE
read-only
subTypestringoptional

Klassifiziert PERIOD_CLOSING-Buchungen (CREDIT/DEBIT). FLEX = Saldo aus Stunden innerhalb des Gleitzeitrahmens; OVERTIME_OUTSIDE_FLEX = Stunden außerhalb des Rahmens (auf OVERTIME-Konto, ADR 0050a). MANUAL_OVERTIME = manuell beantragte/markierte Überstunden-Gutschrift, läuft PENDING durch die Freigabe-Queue (ADR 0438). War vor ADR 0438 Phase 0 undeklariert im Einsatz.

FLEXOVERTIME_OUTSIDE_FLEXMANUAL_OVERTIME
nullable
approvalStatusstringoptional

Nur bei subType=OVERTIME_OUTSIDE_FLEX befüllt, wenn das Modell `overtimeRules.outsideFlexRequiresApproval=true` setzt. PENDING = Buchung saldo-neutral bis zur Entscheidung; APPROVED = saldo-wirksam gebucht; REJECTED = bleibt saldo-neutral, geleistete Stunden im Audit erhalten. Siehe ADR 0050a.

PENDINGAPPROVEDREJECTED
nullable
approvalDecisionAtdatetimeoptional

Zeitstempel der Approve-/Reject-Entscheidung. Phase 2 (ADR 0050a).

nullable
approvalDecisionBystringoptional

userId des Approvers/Rejectors. Phase 2 (ADR 0050a).

max 64 Zeichennullable
approvalNotestringoptional

Freitext-Begründung. Pflicht bei REJECTED, optional bei APPROVED. Phase 2 (ADR 0050a).

max 4000 Zeichennullable
submittedBystringoptional

userId (users._id) des Antragstellers bei subType=MANUAL_OVERTIME — Grundlage des 4-Augen-Checks im Approve-/Reject-Pfad. Bestandsdaten vor ADR 0438 Phase 0 können hier die better-auth-Id tragen; die Prüfung vergleicht deshalb tolerant gegen beide ID-Räume.

max 64 Zeichennullable
submittedAtdatetimeoptional

Zeitpunkt der Antragstellung bei subType=MANUAL_OVERTIME. Siehe ADR 0438.

nullable
creditedMinutesintegeroptional

Saldo-wirksam gutgeschriebene Minuten nach Freigabe — ggf. vom Teamleiter angepasst und/oder gegen `limits.maxBalanceMinutes` gekappt. Bewusst getrennt von `minutes` (beantragter Betrag): `minutes` ist Teil des gehashten Inhalts und darf nach dem Insert nicht mutiert werden (ADR 0438 / Befund B14). null = noch nicht entschieden oder Alt-Zeile vor Phase 3 (dann gilt `minutes` als gutgeschriebener Betrag).

≥ 0nullable
overtimeFlagsobjectoptional

Kategorie-Flags der markierten Zeitbuchung (1:1 vom time_record kopiert), nur bei subType=MANUAL_OVERTIME. Bewusst die drei Flags statt einer abgeleiteten Einzelkategorie — Kombinationen (z. B. Sonntags-Notdienst) bleiben verlustfrei; die Satz-/Stacking-Regel wird erst bei Auszahlung/Payroll angewendet. Siehe ADR 0438.

nullable
isOvertimebooleanoptional
Default: false
isWeekendbooleanoptional
Default: false
isEmergencyServicebooleanoptional
Default: false
categoryMinutesobjectoptional

Beantragte Minuten je Kategorie nach den Tenant-Fensterregeln (ADR 0441), nur bei subType=MANUAL_OVERTIME. `minutes` ist die VEREINIGUNG der Fenster-Schnitte (eine Minute zählt nie doppelt als Zeit) — die Summe dieser Felder kann daher größer sein als `minutes` (So 19–21 h bei „Wochenende ganztägig" + „Überstunden ab 18": minutes=120, weekend=120, overtime=120). Grundlage der späteren kategoriegetrennten Sätze in der Payroll. null = Zeile vor ADR 0441.

nullable
overtimeintegeroptional
≥ 0Default: 0
weekendintegeroptional
≥ 0Default: 0
emergencyintegeroptional
≥ 0Default: 0
windowFallbackbooleanoptional

true = die Zeitbuchung hatte keine verwertbaren Uhrzeiten, eine WINDOWS-Regel fiel deshalb auf die volle Buchungsdauer zurück (bewusster PO-Entscheid, ADR 0441). Wird in der Freigabe-Queue als Warnhinweis angezeigt — der Teamleiter korrigiert per Minuten-Feld.

Default: falsenullable
minutesintegererforderlich

Buchungsbetrag in Minuten. Positiv = Gutschrift; negativ = Abzug. Für DAILY_BALANCE: delta (actual - effective), ändert aber nicht den Saldo.

read-only
balanceAfterintegeroptional

Saldo nach dieser Buchung. Pflicht für saldo-wirksame Transaktionen; null für DAILY_BALANCE (nicht saldo-wirksam).

read-onlynullable
dailyBalanceobjectoptional

Nur bei type === DAILY_BALANCE befüllt.

nullable
effectiveMinutesintegeroptional
≥ 0
actualMinutesintegeroptional
≥ 0
deltaMinutesintegeroptional
flexDeltaMinutesintegeroptional

Mehrstunden über Soll, geleistet INNERHALB des Gleitzeitrahmens. Fließt in das FLEX-Konto. Siehe ADR 0050a.

≥ 0Default: 0
overtimeDeltaMinutesintegeroptional

Stunden geleistet AUSSERHALB des Gleitzeitrahmens (vor Multiplikator). Fließt in das OVERTIME-Konto. Siehe ADR 0050a.

≥ 0Default: 0
shortfallMinutesintegeroptional

Minus-Stunden: max(0, Soll − Ist). Fließt als Abzug in das FLEX-Konto. Siehe ADR 0050a.

≥ 0Default: 0
absenceTypestringoptional

z.B. VACATION, SICK, TIME_IN_LIEU, HOLIDAY

nullable
isHolidaybooleanoptional
Default: false
holidayRegionstringoptional
nullable
holidaySurchargeMinutesintegeroptional
≥ 0Default: 0
surchargeBreakdownobjectoptional

Vorberechneter Zuschlag für diese Buchung. Für Payroll-Export.

nullable
baseMinutesintegeroptional
≥ 0Default: 0
nightMinutesintegeroptional
≥ 0Default: 0
weekendMinutesintegeroptional
≥ 0Default: 0
holidayMinutesintegeroptional
≥ 0Default: 0
overtimeMinutesintegeroptional
≥ 0Default: 0
insideFlexWindowMinutesintegeroptional

Ist-Minuten innerhalb des Gleitzeitrahmens (`flexWindow`). Nur bei FLEXTIME-Modellen mit gesetztem flexWindow befüllt, sonst 0.

≥ 0Default: 0
outsideFlexWindowMinutesintegeroptional

Ist-Minuten außerhalb des Gleitzeitrahmens (`flexWindow`). Quelle für `dailyBalance.overtimeDeltaMinutes` — fließt ab ADR 0050a in das OVERTIME-Konto und nicht mehr in den Gleitzeit-Saldo.

≥ 0Default: 0
appliedPercentsobjectoptional
nightnumberoptional
≥ 0
weekendnumberoptional
≥ 0
holidaynumberoptional
≥ 0
overtimenumberoptional
≥ 0
surchargeAmountCentsintegeroptional
≥ 0Default: 0
sourceTypestringoptional
PERIOD_CLOSINGMANUALSYSTEMVACATION_CONVERSIONOVERTIME_TRANSFERPAYROLL_EXPORTRETRO_CORRECTION
read-onlynullable
sourceRefobjectoptional
read-onlynullable
collectionstringoptional
max 64 Zeichennullable
documentIdstringoptional
max 64 Zeichennullable
reasonstringoptional

Freitext. Pflicht bei CORRECTION und sourceType=MANUAL (Service erzwingt das).

max 4000 Zeichennullable
approvedBystringoptional

userId des Genehmigers bei MANUAL/CORRECTION (4-Augen)

max 64 Zeichennullable
previousHashstringoptional

SHA-256 des vorherigen Eintrags in derselben User-Kette

Patternread-onlynullable
entryHashstringoptional

SHA-256 dieses Eintrags (kanonisiert) inkl. previousHash

Patternread-onlynullable

Standard-Endpoints

Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:

  • GET /api/v1/time_account_transactions — Liste, paginiert + filterbar
  • GET /api/v1/time_account_transactions/<id> — Einzelne Entity
  • POST /api/v1/time_account_transactions — Anlegen
  • PATCH /api/v1/time_account_transactions/<id> — Teil-Update
  • DELETE /api/v1/time_account_transactions/<id> — Soft-Delete
  • GET /api/v1/time_account_transactions/<id>/timeline — Audit + Aktivitäten

Suche