The job of this console
Understand which family you are about to enable, the dependents, and the screens that will appear. Enable from Feature flags / Application Config — this page is the map, not a second toggle UI.
A code-owned catalog of timesheet, approval, planning, attendance, and integration features. Catalog defaults are off. Application Config stores tenant choices; existing timesheet, leave, and attendance approval engines stay the source of truth.
Admins enable features on Admin → Feature flags. Contributors see a governance banner on Timesheet when validation or late-band rules apply.
Code-owned catalog
Work-Time Governance is a code-owned catalog of timesheet, approval, planning, attendance, and integration features. Catalog defaults are off. Application Config and the Feature flags console are how families go live.
Understand which family you are about to enable, the dependents, and the screens that will appear. Enable from Feature flags / Application Config — this page is the map, not a second toggle UI.
Administrators designing time rules. Employees never enable catalog families.
Read the family, check dependents, enable on Feature flags, then prove timesheet, attendance, or approval still behave. Roll back the flag if a family is not ready.
Before turning on approval chain. A planning feature that surprised managers. After an upgrade that added catalog entries. When two families overlap.
Work-Time Governance sits on top of the existing timesheet approval flags. Use the timesheet simulator for submit/approve/lock, then return here for catalog families and resolver rules.
Each diagram auto-plays steps when it scrolls into view. Use Play / Pause, or click a step to jump.
Catalog default, then Application Config, then optional project override, then role AND, then dependency AND.
flowchart TD
Cat[Catalog default off] --> App[Application Config]
App --> Proj{Project override?}
Proj -->|No| Role
Proj -->|Yes| Role[Role gate AND]
Role --> Dep[Dependencies AND]
Dep --> Eff[Effective enabled]
Leave first, then swipe, timesheet WFH hours, and regularization. Resolve is a composed read — it does not write the attendance matrix.
flowchart TD
Day[Work day] --> Leave{Approved leave?}
Leave -->|Yes| Out[Leave evidence]
Leave -->|No| Swipe{Swipe ingest on?}
Swipe -->|Hit| Out2[Swipe evidence]
Swipe -->|Miss| Wfh{Timesheet WFH on?}
Wfh -->|Hours| Out3[WFH from timesheet]
Wfh -->|No| Reg{Regularization?}
Reg -->|Yes| Out4[Override]
Reg -->|No| Empty[No composed source]
attendance.swipe-ingest is on.Work-Time Governance is not a second timesheet product. It is a switchboard: about twenty catalog features grouped into approval, timesheet, planning, attendance, integration, and admin families. Turning a feature on does not invent a new source table. Hours still live on timesheet activity, projects still live on Purchase Order → Project → Task → Task Activity, and attendance marks still live on the attendance matrix.
The Feature Flags panel shows each feature’s inherited value, optional project override, role gate, and whether a missing dependency is blocking it. Effective state is Enabled, Blocked (selected on but role or dependency failed), or Off.
adminGovernanceEnabled and featureFlagsAdminEnabled. Scroll to the Work-Time Governance panel.approval.chain before escalation or bulk actions. Enable planning.estimates before FTE or variance.timesheet.reminders or timesheet.late-workflow is on, the page loads a server deadline preview for the selected week. Late weeks can show a late-reason field on Submit. Submit still uses the protected timesheet workflow — including Submit on behalf when enableTimeSheetSubmissionOnBehalfOf is on. Governance does not change who may approve.Catalog keys are stable ids. Defaults in code are off; organisation seeds may turn selected features on for a tenant.
| Family | Feature ids | What it does |
|---|---|---|
| Approval | approval.chain, approval.escalation, approval.bulk-actions |
Versioned policy/steps, escalation, and role-gated bulk actions. Timesheet can keep legacy manager approval when approvalChainFallbackLegacy is true. |
| Timesheet | timesheet.validation, approval-units, reminders, late-workflow, period-lock, variance, allocation |
WARN/BLOCK validation, weekly approval units, deadline preview and reminder offsets, late bands with required reason, period lock after lockAfterDays, and planning bridges. Does not replace the existing timesheet grid. |
| Planning | planning.estimates, planning.fte, planning.variance |
Grade / skill / resource estimate dimensions and optional FTE gate. Variance is a report over Task Activity hours. |
| Attendance | attendance.swipe-ingest, source-resolution, timesheet-wfh, cross-midnight, period-lock |
Connector-gated swipe rows and a composed read of leave → swipe → WFH hours → regularization. attendance.period-lock has no lock service yet — do not treat it as active. |
| Integration | integration.project-import, integration.timesheet-export |
Vendor-neutral adapters with mapping, least-privilege scopes, and idempotency. A vendor-specific adapter is not bundled. |
| Admin | admin.policy-management, admin.observability |
Role-gated policy editors and observability inventory for operators. |
timesheet.reminders or timesheet.late-workflow is on (and approval.chain is effective), the timesheet page calls GET …/timesheets/deadline-preview for the selected week. The UI follows that preview; it does not guess Friday 18:00 locally. If both features are off, preview is DISABLED and not late.timesheet.late-workflow is on and the preview reports reasonRequired, Submit shows a late-reason field (Other needs detail). Exactly seven elapsed days follows the moderately late band (TIMESHEET-LATE-LTE7); later follows TIMESHEET-LATE-GT7. Changing week or team clears leftover submit governance so an on-time week does not keep a prior late reason.timesheet.validation can WARN (submit allowed with hints) or BLOCK.timesheet.reminders supplies cut-off day and offsets (default Friday 18:00 UTC, 3 / 1 / 0). Emails still need the master flag timesheetAdditional.timesheetSubmissionReminderEnabled and the reminder job. Master off blocks emails even if the catalog reminder is on.timesheet.period-lock on, lockAfterDays greater than 0 (tenant seed often 7), and job TIMESHEET_PERIOD_LOCK, approved weeks lock. Reopen can require a reason. The older month lock disableLastMonthAfterXDays still applies separately.approvalChainFallbackLegacy=true keeps the existing manager approval path.When approval.chain is effective and a domain policy is published, instances appear with step metadata. My Approvals remains the action inbox; it does not store a second copy of the timesheet. Escalation and bulk actions require the chain feature plus their own flags (bulk is role-gated).
Delegation still uses the existing approval-authority and delegation services. Governance does not replace leave or attendance approval.
Enable integration.project-import and integration.timesheet-export separately. Both are role-gated. Import creates or updates projects from a mapped payload; export emits timesheet rows for a scoped period. Least-privilege scopes apply. There is no bundled vendor project-tracking adapter, delivery receipt, or dead-letter queue until those are configured as connectors.
Grade, skill, and resource dimensions resolve from Application Config lists. Resource-level estimates stay optional unless planning.fte is effective. Variance reporting reads Task Activity hours — it is not a separate hours store.
attendance.period-lock has no lock service. A complete ACS / device feed still needs the client vendor API. Overnight pairing is a limited look-ahead, not full shift windows. Observability is an inventory, not a replacement for application logs.| Role | Access |
|---|---|
| Platform admin | Feature Flags panel; enable catalog features; optional project override; policy/observability when those features and role gates are on. |
| Integration admin | Project import / timesheet export only when those features and workTimeIntegrationRoles allow it. |
| Manager / approver | Existing timesheet and inbox actions. Chain steps apply only when a policy is published and the chain feature is effective. |
| Individual contributor | Timesheet banner and validation hints when those features are effective. No catalog editor. |