Repository navigation
fix: manager and HR approval for outside-frame time entries (#41) - #47
Open
patrickschiller wants to merge 4 commits into
Open
patrickschiller wants to merge 4 commits into
patrickschiller wants to merge 4 commits into
Conversation
Reopen returned drafts with their values and revision reason. Add owner-only versioned editing/resubmission, shared validation, balance/overlap self-exclusion, transactional concurrency guards, employee names, synchronized API contracts and regression/manual acceptance coverage. Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com> Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Keep persisted timestamps unchanged until their time field is edited. Resolve wall-clock validation and payloads to identical instants, require explicit ambiguous-time choices, reject clock-change gaps, and cover seconds, both fold occurrences and reason-only save/resubmit cycles. Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com> Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Keep the English DST selection regression independent of jsdom persisted locale on Node 20. Verify all 208 web tests with Node 20.20.2 and document the CI follow-up. Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com> Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Add scoped, versioned TimeEntry review with distinct current-manager and HR stages, durable decision audit, legacy pending support and conservative edit invalidation. Surface employee guidance, reviewer actions and history in German/English, synchronize API contracts, and verify additive database upgrades and security/concurrency regressions. Based on accepted #42; no release or merge. Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com> Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This was referenced Nov 7, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #41.
Abhängigkeit und Merge-Reihenfolge
Depends on #46. Dieser PR basiert auf dem unabhängig akzeptierten #42-Head
4ff247bc18adfc0b245d8dbb044f7968cf2a4678und zielt bewusst aufmain, damitalle bestehenden CI-Jobs laufen. Der Diff gegen main ist kumulativ #42 + #41.
Vorgesehene Reihenfolge: zuerst #46, danach dieser PR. Es wird hier weder
gemergt noch Auto-Merge aktiviert. Der obere Branch kann schon jetzt beide
Pakete gemeinsam testen, ohne etwas zu mergen.
Nur #41 gegenüber #46: Commit
dbe68f57a93ba26bdc315d31fd4b313586a4337b,22 Dateien, +2915/−18. Kumulativ gegen main: 32 Dateien, +5526/−293.
Umsetzung #41
Zeitkorrektur-Antragsworkflow: aktuell zugewiesene aktive Führungskraft mit
Rolle Manager → danach zwingend HRAdmin. HR darf die erste Stufe nicht
ersetzen; eigene Buchungen darf auch eine breite Rolle nicht selbst freigeben.
GET /api/timeentries/approvals?scope=own|review,POST /api/timeentries/:id/approval,GET /api/timeentries/:id/approval-history.Identität aus JWT, aktuelle Rollen/Zuordnungen serverseitig gelesen,
Managerliste strikt eigenes Team; fremde Beschäftigte erhalten keinen Zugriff.
Buchungssperren sowie Zeilensperren für Rollen/Managerzuordnung sichern
doppelte, stale und konkurrierende Entscheidungen gegen Änderungen ab.
Offene laufende Buchungen können nicht genehmigt werden.
Zeitpunkt, Ergebnis und Notiz im bestehenden Auditmodell. Ablehnung verlangt
eine Begründung. Buchungsänderungen nach Teil-/Endfreigabe starten beide
Prüfungen neu; Split/Projektbereich behandeln jedes Segment korrekt, ohne
Ablehnungen reinzuwaschen. Alte Historie bleibt auch bei nun in-frame liegenden
Segmenten auffindbar.
Zustand. HR muss eine gültige Führungskraft zuordnen; keine stille
HR-/Selbstfreigabe. Ein anderer Manager vor HR-Bestätigung muss erneut prüfen.
Status-/Verlaufssicht unter Buchen, verständliche nächste Rolle/Ort,
Ergebnis und Fehler, verpflichtende Ablehnungsnotiz, Realtime-/Cache-Refresh.
20261107031000_time_entry_frame_approval: zwei nullableSignaturmarker. Bestehende Pending/null-mode-Team-Einträge benötigen keine
Neuanlage und starten bei der Managerprüfung. In-frame-, Tagesblock- und
Solo-Verhalten bleiben erhalten. OpenAPI und generierter Client synchron.
Lokale Verifikation
Ausschließlich synthetischer, isolierter PostgreSQL-16-Stack; keine vorhandene
Datenbank zurückgesetzt. pnpm 9.15.9, Gesamttests zusätzlich mit CI-Node 20.20.2.
TZ=Europe/Berlin pnpm nx e2e api-e2eunter Node 20.20.2TZ=UTC pnpm nx run-many -t test -p web,shared --run --skip-nx-cacheunter Node 20.20.2pnpm nx run-many -t typecheck,lint -p api,web,shared,api-e2epnpm nx run-many -t build -p api,web,shared, getrennt von Typecheckspnpm verify:apiundgit diff --checkops/upgrade-smoke.mjs verifyNachtest
Deutsche Anleitung mit eigenem Docker-Stack, synthetischen Rollen, echten
Stempel-Schritten, reproduzierbaren Legacy-Daten, Positiv-/Negativ-/Konkurrenzfällen
und Ergebnissen.
UI-Regressionen sind React-Testing-Library-Prüfungen. Der dokumentierte manuelle
Docker-/Browser-Durchlauf wurde nicht als durchgeführt gewertet.
Grenzen
Nur Pakete #42 und #41 auf diesem kumulativen Branch. #43, #45 und #44 nicht
begonnen. Kein Release, Tag, Versionsbump, Merge, Deployment oder Release-Workflow.
GitHub-Gates auf
dbe68f57a93ba26bdc315d31fd4b313586a4337bvollständig grün:build-test-lint,api-e2e,database-upgradeundterminal-pin-browsererfolgreich.pnpm verify:apierfolgreich.Builds erfolgreich.
erfolgreich; verlangter DCO-/Co-Author-Trailer vorhanden.