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

More solutions