Closure
Every payroll risk, auto-flagged by pay group, before you close.
Closure pulls every pre-close payroll risk from Dayforce automatically โ so payroll teams stop building checklists by hand and start closing with confidence.
Overview
Closure
Payroll Readiness for Dayforce
Built on the Dayforce REST API with a React web frontend. Auto-generates a pre-close checklist by pay group, surfacing missing timesheets, unapproved absences, incomplete new hire pay assignments, and unflagged terminations before payroll runs. Requires an active Dayforce license with Payroll and Workforce Management modules enabled.
Overview
CloseReady โ Solution Overview
CloseReady is a standalone web application built directly on the Dayforce REST API. It pulls timesheet data, absence records, new hire pay assignments, and termination flags from Dayforce in real time, runs them against a configurable pre-close rule set, and auto-generates a prioritized readiness checklist by pay group โ one per payroll run cycle.
No manual checklist assembly. No cross-referencing Dayforce screens before every close. No last-minute discoveries after payroll has already run.
The application is built on a React frontend authenticated against Dayforce via OAuth 2.0. All checklist items are derived live from Dayforce โ the app writes nothing back except resolution notes and item sign-off records, which are stored in a companion audit log for compliance purposes. There is no ETL, no middleware, and no third-party sync. The checklist reflects the current state of Dayforce at every load.
CloseReady is designed for payroll managers and HR operations teams at multi-entity Dayforce customers โ organizations running multiple pay groups across FOCs, sites, and employment types, where pre-close prep currently happens in spreadsheets, email threads, and memory.
How It Works
When a payroll user opens CloseReady, the application authenticates against Dayforce, identifies all active pay groups with a close date within the configured lookahead window (default: next 7 days), and fetches the relevant timesheet, absence, employee, and payroll data for each group. The rule engine runs against that data and generates a checklist of flagged items โ grouped by pay group, sorted by severity, and assigned to the responsible resolution owner.
Data flows in one direction for reads:
Dayforce API โ OAuth Token Exchange โ Rule Engine โ Checklist State โ React Frontend
For item resolution, the flow extends:
Payroll User Action โ Resolution Note โ App Backend โ Audit Log + Checklist State Update
The checklist is stateful within a pay period. Once an item is marked resolved, it stays resolved for that cycle unless the underlying Dayforce data changes โ in which case it automatically resurfaces on the next refresh.
Integration Architecture
The end-to-end pipeline follows a single pattern:
Dayforce OAuth โ REST API โ Rule Engine โ Checklist Generator โ Pay Group View
Five Dayforce API domains are consumed:
Domain | Dayforce API Area | Data Retrieved |
|---|---|---|
Pay Groups | Payroll Configuration | Active pay groups, close dates, pay period start/end |
Timesheets | Workforce Management | Submitted, approved, missing, and rejected timesheet records |
Absences | Absence Management | Pending and unapproved absence requests within pay period |
Employees | Employee Management | New hires missing pay assignments, terminations missing final pay flags |
Payroll | Payroll Processing | Pay run status, prior period comparisons, earnings code assignments |
Authentication uses OAuth 2.0 with a dedicated Dayforce service account scoped to read-only Payroll, Workforce Management, Absence, and Employee API access, plus write access to the notification endpoint for escalation routing. The token is stored server-side and exchanged at session initiation.
All API calls are routed through a thin Node.js backend handling token management, rate limiting, and response caching. Checklist data is cached per pay group for ten minutes and invalidated on any resolution action or manual refresh trigger.
Access control mirrors the authenticated user's Dayforce payroll entity permissions. A payroll manager scoped to a single FOC sees only that entity's pay groups. A payroll director with multi-entity access sees the consolidated view across all groups.
Data Model
CloseReady does not persist Dayforce-sourced payroll or employee data. All checklist items are derived live on each fetch. The backend stores only checklist state and resolution log records.
PayGroup_View โ Derived Per Pay Group
Assembled on each API fetch. Not persisted. Drives pay group card rendering.
Field | Type | Source |
|---|---|---|
PayGroup_XRefCode | Text | Dayforce Payroll API |
PayGroup_Name | Text | Dayforce Payroll API |
Entity_XRefCode | Text | Dayforce Payroll API |
Pay_Period_Start | Date | Dayforce Payroll API |
Pay_Period_End | Date | Dayforce Payroll API |
Close_Date | Date | Dayforce Payroll API |
Days_To_Close | Integer | Calculated: Close_Date minus today |
Employee_Count | Integer | Active employees in pay group |
Item_Total | Integer | COUNT of all flagged checklist items |
Item_Open | Integer | COUNT of unresolved items |
Item_Critical | Integer | COUNT of Critical severity items |
Readiness_Status | Text | Calculated: Blocked, At Risk, Ready โ see rule set below |
Checklist_Item โ Per Flagged Issue
One record per detected issue per pay group per pay period. Derived from rule engine output.
Field | Type | Source |
|---|---|---|
Item_ID | UUID | Generated at detection time |
PayGroup_XRefCode | Text | Parent pay group |
Employee_XRefCode | Text | Affected employee โ null for group-level items |
Item_Type | Text | See item type taxonomy below |
Severity | Text | Critical, High, Medium |
Description | Text | Auto-generated plain-language description |
Owner_Type | Text | Payroll, Manager, HR, Employee โ responsible resolution party |
Detected_At | DateTime | Timestamp of first detection |
Status | Text | Open, Resolved, Waived |
Resolved_By | Text | User XRefCode โ null if open |
Resolved_At | DateTime | Null if open |
Waive_Reason | Text | Required if Status = Waived |
Resolution_Log โ Persisted Backend Record
Written on every status change to a checklist item.
Field | Type | Notes |
|---|---|---|
Log_ID | UUID | Auto-generated |
Item_ID | UUID | FK to Checklist_Item |
PayGroup_XRefCode | Text | Parent pay group |
Action_Type | Text | Resolved, Waived, Escalated, Reopened |
Initiated_By | Text | Payroll user XRefCode |
Timestamp | DateTime | UTC |
Note | Text | Optional free-text resolution note |
Prior_Status | Text | Status before action |
Checklist Item Taxonomy
Eight item types, grouped by source domain. Severity is fixed per type but overridable by the admin configuration.
Item Type | Source Domain | Default Severity | Description Logic |
|---|---|---|---|
Missing timesheet | Timesheets | Critical | Employee in pay group has no submitted timesheet for the pay period |
Unapproved timesheet | Timesheets | Critical | Timesheet submitted but not approved by manager before close |
Rejected timesheet | Timesheets | High | Timesheet rejected and not resubmitted |
Unapproved absence | Absences | High | Absence request within pay period is pending manager approval |
New hire missing pay assignment | Employees | Critical | Employee with hire date in current or prior pay period has no earnings code or pay assignment in Dayforce |
Termination missing final pay flag | Employees | Critical | Employee with termination date in current pay period has no final pay indicator set |
Retroactive pay change | Payroll | Medium | Pay rate or earnings code change backdated into a closed period โ may require manual adjustment |
Prior period variance | Payroll | Medium | Current period gross deviates more than configured threshold percentage from prior period for the same employee |
Readiness Status Rule Set
Pay group readiness status is derived client-side on each load. Rules applied in priority order โ first match wins.
Status | Rule |
|---|---|
Blocked | One or more Critical items are open AND close date is within 24 hours |
At Risk | One or more Critical items are open with more than 24 hours to close, OR two or more High items are open regardless of close date |
Ready | No Critical items open and zero or one High items open |
Thresholds are configurable per pay group in the admin settings screen. High-volume hourly pay groups typically warrant tighter thresholds than salaried groups.
Application Views
Pay Group Dashboard (Default View)
The primary screen. All active pay groups with a close date within the lookahead window rendered as cards โ Blocked at top, then At Risk, then Ready, within each group sorted by days-to-close ascending. Each card shows: pay group name, entity, pay period dates, close date, days-to-close badge, readiness status badge, open item count by severity, and a progress bar showing resolved vs. total items. Filters by entity, readiness status, and days-to-close range.
Checklist View
Single pay group drill-through. Full itemized checklist grouped by item type, with severity badges, affected employee names, auto-generated descriptions, owner type indicators, and resolution controls. Payroll users mark items resolved, waive with a reason, or escalate from this view. Each item shows detection timestamp and, if resolved, who resolved it and when.
Employee Spotlight
Accessible from any checklist item tied to a specific employee. Shows all open checklist items across all pay groups for that employee in the current cycle โ useful for employees appearing in multiple item types simultaneously (e.g. missing timesheet AND unapproved absence).
Historical Close View
Post-close read-only view of completed pay period checklists. Shows final item counts, resolution timeline, waive rate, and which item types recurred most frequently. Designed for payroll managers conducting post-close reviews and identifying systemic gaps in upstream processes.
Admin / Configuration View
Manage item type severity overrides, configure readiness status thresholds per pay group, set the close date lookahead window, configure prior period variance percentage threshold, manage notification routing for escalations, and view API health status.
Action Types
Four actions available from the checklist view.
Action | Behavior |
|---|---|
Mark resolved | Closes the item for the current cycle. Requires confirmation. Logged to Resolution_Log. Item reopens automatically if underlying Dayforce data reverts to a flagged state on next refresh. |
Waive | Closes the item with a mandatory reason note. Used for known exceptions (e.g. employee on approved unpaid leave with no timesheet). Logged to Resolution_Log. Does not reopen on refresh. |
Escalate | Routes a notification to the item's Owner_Type contact via Dayforce notification endpoint. Logged to Resolution_Log with delivery status. |
Reopen | Re-activates a previously resolved or waived item. Requires a note. Logged to Resolution_Log. |
Deployment Architecture
Three-component deployment. All components containerized and deployable to any cloud environment.
Component | Stack | Purpose |
|---|---|---|
React Frontend | React, hosted on Vercel or Azure Static Web Apps | UI rendering, rule engine execution, checklist state management |
Node.js Backend | Express, deployed to Azure App Service or equivalent | OAuth token management, Dayforce API proxy, cache layer, Resolution_Log writes, checklist state persistence |
Postgres Instance | Azure Database for PostgreSQL or equivalent | Checklist_Item state and Resolution_Log persistence only โ no payroll data stored |
The backend never persists Dayforce payroll or employee data. It proxies, caches briefly, and passes through. All source data remains in Dayforce as the system of record.
Deployment Sequence
Phase | Deliverable | Detail |
|---|---|---|
1 | Dayforce API setup | Service account created, OAuth 2.0 client registered, API scopes granted for Payroll, Workforce Management, Absence, and Employee read; Notification write enabled |
2 | Backend deploy | Node.js API deployed, environment variables configured, token exchange validated, caching and Postgres connection confirmed |
3 | Frontend deploy | React app deployed, pay group scope validated against test payroll accounts, item type taxonomy and severity thresholds configured for client, resolution workflow tested end-to-end |
Requirements
Requirement | Minimum |
|---|---|
Dayforce | Active license with Payroll and Workforce Management modules enabled |
Dayforce API Access | OAuth 2.0 client registration; Payroll, Workforce Management, Absence, Employee read scopes; Notification write scope |
Frontend Hosting | Vercel, Azure Static Web Apps, or equivalent |
Backend Hosting | Azure App Service, AWS App Runner, or equivalent Node.js host |
Database | Postgres โ checklist state and audit log only |
Browser Support | Chrome, Edge, Firefox โ modern evergreen versions |
Multi-Entity | Requires Dayforce org hierarchy and entity-scoped payroll user accounts |



