Repository navigation
feat: Soll/Ist-Vergleich mit bestätigter Vertragshistorie (#45) - #49
patrickschiller wants to merge 7 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>
Bind correction requests to an owned eligible entry ID and original revision with immutable server snapshots. Revalidate targets, overlaps and required manager/HR stages, then update the same entry and linked audit atomically at final approval. Retain draft precision, metadata and break policies; add target selection/diffs, upgrade safety and focused rollback/concurrency regressions. Cumulative on accepted #42 and #41; 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>
Distinguish forbidden foreign targets from ignored body employee identities; eligible own targets remain valid under the authenticated identity. Co-authored-by: patrickschiller <39913537+patrickschiller@users.noreply.github.com> Signed-off-by: Patrick Schiller <39913537+patrickschiller@users.noreply.github.com>
…#45) Add HR-confirmed immutable contract snapshots, scoped period calculations, accessible DE/EN reports and complete regression/upgrade evidence. 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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3a2361d0d2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const report = await this.buildWorkingTimes( | ||
| actorId, | ||
| { ...query, includeLocations: 'false' }, | ||
| tx, | ||
| ); |
There was a problem hiding this comment.
Align the PDF explanation with the new clipped report rows
For HR PDF exports containing overnight bookings or bookings crossing the selected period boundary, buildWorkingTimes now supplies midnight-split, period-clipped rows with synthetic start/end timestamps. However, renderWorkingTimePdf still prints an intervalNote in both languages stating that overnight intervals remain complete and are not clipped at period boundaries (working-time-pdf.ts). The exported working-time record therefore describes the opposite of how its timestamps and totals were calculated, potentially making a partial booking look like the complete recorded interval. Update the PDF explanation to describe splitting/clipping, or retain the original interval semantics specifically for PDF exports.
Useful? React with 👍 / 👎.
Paket #45 – vertragliches Soll / Netto-Ist je Zeitraum
Closes #45.
Abhängigkeit / Reihenfolge: #46 → #47 → #48 → dieser PR. Basis dieses Pakets ist der dokumentationskorrigierte #43-Head
53f961164245db69ac91912d3f123961ce846dd8. Der PR zielt absichtlich auf main, damit sämtliche bestehenden CI-Gates laufen. Der sichtbare Diff ist kumulativ #42 + #41 + #43 + #45, kein unabhängiger Ersatz für die drei Vorgänger. Kein Merge/Release/Tag/Versionsbump/Deployment wurde ausgeführt.3a2361d0d2d25f23ce030ce751cf67873aedbf8ffeat/45-contract-period-comparison.Umsetzung
Verifiziert (Node 20.20.2 / pnpm 9.15.9, isoliertes PostgreSQL 16, Europe/Berlin)
pnpm verify:api, staged/working diff checksDie Anleitung dokumentiert auch Zwischenbefunde (ungültige Mehrfach-Open-Fixture, vorläufige TypeScript-Testfehler, eine ULP bei Mitternachtssummen und lokalen HTTP-Port-Ausreißer). Keine fachlichen Status-/Berechtigungsassertions wurden gelockert, keine automatischen Retries. Der E2E-Server besitzt jetzt genau einen Loopback-Listener je Suite.
Nachtest: docs/ISSUE_FIXES_MANUAL_TEST.de.md mit eigenem Docker-Projekt/Port, synthetischen Rollen, ausführbarer Fixture, Zahlenfällen und Negativtests. Ein manueller Docker-/Browserdurchlauf wird nicht als erfolgt behauptet. Vorhandene
.agents/undopenspec/im Hauptcheckout bleiben unberührt.Alle fünf GitHub-Checks auf
3a2361d0d2d25f23ce030ce751cf67873aedbf8ferfolgreich: