Plattform & Einstieg · Projekt-Teilbereich

Stunden: wofür der Bereich im Projektkontext gedacht ist.

Projektstunden einsehen, freigeben und im Projektkontext steuern. Das Modul erscheint innerhalb eines einzelnen Projekts und wirkt damit unmittelbar im Projektkontext.

  • Stunden erklärt kompakt, wofür der Bereich gedacht ist und wann er im Arbeitsalltag relevant wird.
  • Der Bereich spielt in der Praxis besonders mit Cash-Flow und Budget zusammen.
  • Nutzen, Sichtbarkeit und Verantwortlichkeit ergeben sich hier stark aus dem Projektkontext.
Modulzweck

Wofür das Modul gedacht ist

Stunden ist Teil des aktiven Modul-Katalogs und deckt einen klaren Ausschnitt des Produktalltags ab.

Projektstunden einsehen, freigeben und im Projektkontext steuern. Im Projektkontext bedeutet das, dass der Bereich nicht isoliert funktioniert, sondern direkt an Team, Status und weitere Projektbereiche anknüpft.

Stunden hängt fachlich an Cash-Flow. Dadurch ist für Nutzer sofort klar, in welchem größeren Ablauf das Modul seinen Platz hat.

Das Modul erscheint innerhalb eines einzelnen Projekts und wirkt damit unmittelbar im Projektkontext.
Praxisbezug

Typische Einsatzfälle

Diese Situationen zeigen, wann der Bereich in einem sauberen Rollout oder im laufenden Betrieb konkret Mehrwert liefert.

Schnell Orientierung gewinnen

Stunden bietet einen klaren Einstieg in den jeweiligen Arbeitsbereich.

Mit dem restlichen Produkt verzahnen

Der Bereich arbeitet am besten, wenn Verantwortlichkeiten, Sichtbarkeit und angrenzende Module gemeinsam gedacht werden.

Rollout schrittweise aufbauen

Im Rollout sollte zuerst der relevante Kernnutzen sichtbar sein und später gezielt erweitert werden.

Modulverbindungen

Wie das Modul mit anderen Bereichen zusammenspielt

struct-i-vio ist als zusammenhängende Plattform gedacht. Diese Module liegen fachlich am nächsten bei diesem Bereich.

Sichtbarkeit

Berechtigungen und Sichtbarkeit

Die öffentliche Dokumentation beschreibt die Logik auf Produktniveau - nicht als technische Policy-Liste, sondern als Rollout-Leitfaden.

Die Sichtbarkeit orientiert sich in der Regel am Projektkontext, an Projektmitgliedschaft und an projektbezogenen Zusatzrollen.
Stunden ist fachlich an Cash-Flow angebunden. Die Gruppe kann sichtbar sein, obwohl einzelne Detailrechte enger gesetzt bleiben.
Gerade bei Teamarbeit lohnt sich ein abgestuftes Modell aus Sichtbarkeit, Bearbeitung und Freigaben statt einer pauschalen Alles-oder-Nichts-Freigabe.
Empfohlener Einsatz

Best Practices

So bleibt der Bereich bei Einführung und Nutzung anschlussfähig an den restlichen Produktfluss.

Mit einem klaren Kernnutzen starten und nur die angrenzenden Bereiche freischalten, die den Alltag direkt entlasten.
Das Modul mit Rollen, Projektkontext und Navigation so verzahnen, dass Nutzer ohne Zusatzschulungen zurechtfinden.
Im Rollout regelmäßig prüfen, ob der Bereich wirklich für die richtigen Nutzer sichtbar und erreichbar ist.
Tiefer einsteigen

Entwickler Info

Größtes Backbone-fähiges Modul (11 Actions). Mehrere bestehende cross_module-Regeln in MANUAL_PERMISSION_DEPENDENCIES (edit/approve → projects.view_all_projects, view-before-edit, edit-before-delete). Mischung aus API+RPC, RLS-only und einem TRULY UNBOUND-Toggle.

Entwickler-Info aufklappen (4)

⚠ KRITISCHrevoke_approval_all ist TRULY UNBOUND

Die _all-Variante zu revoke_approval ist nirgends enforced — kein Code, keine RPC, keine RLS, keine View referenzieren sie. Symmetrische Karteileiche zu anderen _all-Toggles im System (delete_all in project_payments, view_fund/view_all_requests in company_fund). Toggle wirkungslos.

  • scripts/probes/probe-project-hours-module.js

⚡ MERKWÜRDIGapprove_project_hours_all ist nur über Trigger erreichbar

Im Code wird approve_project_hours (project-scoped) explizit per can_perform_action geprüft. Die _all-Variante hat KEINEN direkten Callsite — sie wird nur indirekt durch den check_approval_permission Trigger auf hours geprüft, wenn der Status von "submitted" auf "approved" wechselt und der scoped-Pfad fehlschlägt. In Praxis greift sie nur als Trigger-Fallback bei Hour-UPDATE.

  • DB Trigger: check_approval_permission auf public.hours

⚡ MERKWÜRDIGreassign_direct ist Trigger-enforced — UI darf irreführend wirken

check_reassign_direct_permission ist ein Trigger auf hours, der bei project_id-Wechsel feuert. Wer die Permission nicht hat, sieht den "Direkt umbuchen"-Knopf trotzdem im UI; das DB-UPDATE wirft dann RAISE EXCEPTION. Schöner wäre ein usePermissions-basierter Frontend-Gate.

  • pages/api/entries/reassign.ts:66
  • DB Trigger auf public.hours

Saubere _all/scoped-Verdrahtung mit zwei Stage-1-Couplings

view, edit, delete, approve folgen alle dem etablierten Pattern: separate Policies pro (CMD, scope), die Postgres ORt. Bestehende cross_module-Regeln in MANUAL_PERMISSION_DEPENDENCIES: edit_project_hours + approve_project_hours brauchen projects.view_all_projects (Endpoint lädt das Zielprojekt zur Validierung).

  • lib/permission-dependencies.ts
  • RLS: hours_select_all/_project, hours_update_all/_project, hours_delete_all/_project