Understand Job Codes
Changelog: v2 corrects the conceptual spine. v1 framed Job Codes as OneClick's internal payroll aggregation layer. That framing was wrong in the common case. Dan confirmed on April 23 that Job Codes originate in HotSchedules for stores that use HotSchedules (the dominant case for CFA operators), and are defined directly in OneClick for stores that do not. v2 rewrites the "Where Job Codes come from" framing, resolves the creation-flow VERIFY blocks, and reshapes gotchas around HotSchedules sync behavior. At a glance tightened on April 24 per template spec. April 24 voice pass: removed "operator" as the subject of OneClick actions. The operator is the business owner who rarely performs UI-level tasks. OneClick users are leaders (Team Leader, Shift Leader, Scheduler, Manager, GM, Director) and team members; articles address them as the reader, not the operator.
At a glance
Job Codes are payroll and labor classifications that OneClick maps to positions, so hours a team member works in a position flow into labor reports and payroll exports under that position's Job Code. For most stores, Job Codes originate in HotSchedules and sync into OneClick; for stores that do not use HotSchedules, they are defined directly in OneClick. This reference covers the source of Job Codes, how they relate to positions and team members, and why payroll attribution depends on the position a team member worked rather than their role.
Before you start
This is a reference article. Read it once, return when needed.
Core reference content
Where Job Codes come from
Two paths feed Job Codes into OneClick.
Path 1: HotSchedules-sourced (most CFA stores). If your store uses HotSchedules for scheduling, Job Codes are defined and maintained in HotSchedules. OneClick imports them via a sync. Any Job Code you see in the OneClick position-mapping flow came from HotSchedules. To add a new Job Code, create it in HotSchedules; it will appear in OneClick after the next sync. [NEEDS JARED CONFIRMATION: confirm sync cadence and whether a manual sync trigger exists in OneClick.]
Path 2: OneClick-native. If your store does not use HotSchedules, Job Codes are defined directly inside OneClick in a Job Codes setup area. [NEEDS JARED CONFIRMATION: confirm exact location of the OneClick-native setup area.] Job Codes can be created and edited there by a leader with the appropriate permission. [NEEDS JARED CONFIRMATION: exact permission label.]
In both paths, the action inside OneClick is the same: each position on the roster is mapped to one Job Code. The only thing that changes is where the list of available Job Codes comes from. This is why the workflow is called "Assign a Job Code to a Position" rather than "Create a Job Code": the creation step happens elsewhere (or upstream), and OneClick's role is the mapping.
Job Codes, Positions, and Team Members
Three concepts interact to produce labor reporting in OneClick.
Team Member is the person. Position is the job on the floor for a given shift (for example, Front Counter, Drive-Thru, Runner, Back of House). Job Code is the payroll and labor category that a position rolls up to.
A team member is scheduled into a position for a shift. The position carries a Job Code. Hours worked in that position are reported under that Job Code. Change the team member who works the shift, and the position's Job Code does not change. Change the position's Job Code, and future hours are attributed differently. Change the team member's role or profile, and their hours are still attributed based on the position they worked, not the role they hold.
Job Codes follow the position, not the person. This is the single most important thing to understand about how Job Codes work in OneClick. Tickets routed to support about "my hours went to the wrong category" almost always trace back to the position the team member was scheduled into, not to a Job Code misconfiguration.
Why the mapping layer exists
OneClick could in principle use Job Codes directly as the scheduling unit, or use positions directly as the payroll unit. It does neither, for two reasons.
First, positions and payroll categories are different levels of detail. A store may schedule twelve distinct positions (Front Counter Breakfast, Front Counter Lunch, Drive-Thru Window, and so on) that roll up to three or four Job Codes for payroll. The mapping layer preserves the per-position granularity scheduling needs while producing the aggregation payroll needs.
Second, the source of Job Codes is often external. When HotSchedules owns the Job Code definitions, OneClick needs a stable way to attach incoming codes to its own roster structure. The position-to-Job-Code mapping is that stable attachment point. Positions are OneClick's concept; Job Codes are HotSchedules's (in the common case); the mapping is the bridge.
Where Job Codes show up
In the Job Code setup area. Path-dependent. For HotSchedules stores, setup happens in HotSchedules and OneClick is read-only on Job Code definitions. For stores that do not use HotSchedules, setup happens inside OneClick. [NEEDS JARED CONFIRMATION: exact OneClick-native setup location, likely Settings or a Job Codes management screen.]
On positions. Each position has an assigned Job Code. The assignment is visible in the position's configuration [NEEDS JARED CONFIRMATION: confirm where exactly, likely on a position detail screen or in a positions list column] and is changed via the Assign a Job Code to a Position workflow.
In labor reports. Hours roll up to Job Codes for reporting purposes. [NEEDS JARED CONFIRMATION: confirm which reports surface Job Code data and whether Job Codes are the primary grouping or a filter.]
In payroll exports. [NEEDS JARED CONFIRMATION: confirm which export formats include Job Code data, and how export behavior differs between HotSchedules and OneClick-native paths.]
How Job Codes interact with the schedule
When a team member is scheduled into a position on a given shift, those hours are attributed to the position's Job Code. Schedule changes affect Job Code attribution the moment they save; past hours are not retroactively re-attributed. Moving a team member from a Front Counter shift to a Drive-Thru shift moves the hours from the Front Counter Job Code to the Drive-Thru Job Code for that shift only, not for the entire week.
This means Job Code accuracy depends on schedule accuracy. If positions are mislabeled in the schedule, the Job Code attribution will be wrong too.
When Job Code mappings change
Changing a position's Job Code is a forward-looking action. Hours worked before the change stay attributed to the previous mapping; hours worked after the change are attributed to the new mapping. This matches how payroll and labor reporting are expected to behave: the report for last week should reflect what was true last week, not what is true today.
If you need historical hours corrected (for example, a position was mapped to the wrong Job Code for several weeks before anyone noticed), that is a support request. [NEEDS JARED CONFIRMATION: confirm the historical correction process and whether it differs by path.]
Common Job Code categories
Job Code categories are defined per store on both paths. HotSchedules stores use whatever categories are configured in HotSchedules; stores that do not use HotSchedules define their own categories inside OneClick.
Typical Job Code structures in restaurant environments include:
- Front of House. Customer-facing positions (Cashier, Front Counter, Drive-Thru window, Dining Room).
- Back of House. Kitchen and production positions (Cook, Prep, Dishwasher, Breading Table).
- Training. Time specifically in training roles, often at a different pay rate. [NEEDS JARED CONFIRMATION: whether training hours attribute to the worked position's Job Code or to a dedicated Training code, and whether this differs across the two paths.]
- Leadership. Shift leaders and above, when tracked separately from the floor positions they cover.
Your store may use a different set, fewer categories, or more granular ones. This is a store-level configuration decision, made in HotSchedules if your store uses HotSchedules, or in OneClick if it does not.
Video
Not planned.
Common gotchas
A team member's hours are attributed to a Job Code that does not match their role.
Job Codes follow the position, not the role. A leader who works a shift covering Front Counter has those hours attributed to the Front Counter Job Code, not a Leadership Job Code. This is working as designed. If your store wants to track leadership-covered floor hours separately, a distinct position (for example, "Leader on Floor") mapped to a Leadership Job Code is needed, and the leader must be scheduled into that position for those hours. [NEEDS JARED CONFIRMATION: confirm this model is accurate and that no per-team-member override exists.]
The Job Code I want to assign is not in the list.
Path-dependent. If your store uses HotSchedules, either the Job Code has not been created in HotSchedules yet, or it exists in HotSchedules but the sync has not run since it was added. Confirm the code exists in HotSchedules first; if it does, wait for the next sync or trigger one if that is available. [NEEDS JARED CONFIRMATION: confirm manual sync trigger availability.] If your store does not use HotSchedules, open the OneClick Job Codes setup area and create the code there. [NEEDS JARED CONFIRMATION: OneClick-native creation flow location.]
A Job Code exists in HotSchedules but not in OneClick.
Sync lag. New Job Codes added in HotSchedules are not available in OneClick until a sync has run. [NEEDS JARED CONFIRMATION: typical sync cadence.] If the code has been in HotSchedules for longer than the normal sync interval and still does not appear in OneClick, submit a support ticket.
A position shows no Job Code assigned.
Positions can exist without a Job Code, but hours worked in those positions will not roll up properly in reporting. Audit your positions periodically to confirm every active position has a Job Code. [NEEDS JARED CONFIRMATION: confirm whether unmapped positions produce a warning anywhere in the UI, or only show up as anomalies in reports.]
Two labor reports show different totals for the same Job Code over what looks like the same window.
Usually caused by either a date range mismatch or a position's Job Code changing during the report period. Confirm the date ranges match exactly and that no position mapping changes happened inside the window. If both check out and the totals still differ, that is a support ticket.
I want to change a team member's Job Code without changing the position.
Not how Job Codes work. Job Codes are a property of the position, not the team member. To attribute a team member's hours differently, schedule them into a different position for those hours. [NEEDS JARED CONFIRMATION: confirm no per-team-member Job Code override exists.]
Related articles
- Assign a Job Code to a Position (How-To Guides)
- Edit Job Code Mappings (How-To Guides)
- Add a Position (How-To Guides)
- Understand Permission Levels (Reference)
Still stuck
If Job Code behavior in reporting does not match expectations, or if a Job Code is missing that you expect to see, submit a support ticket and include:
- Your store number.
- Whether your store uses HotSchedules.
- The specific report or screen that is showing unexpected behavior.
- The date range involved, if reporting is the issue.
- A screenshot of what you are seeing versus what you expected.
Support typically responds within one business day.
Pre-publish checklist status
35 93c5be9a-30d1-4ec5-bb22-02df4686be43 complete Seven sections filled (Reference adaptation).
36 0d3acf59-8c89-4fbc-8bbc-62bc00eb99c5 complete At a glance within template spec (three sentences, one paragraph).
37 a8fdf58f-f27a-4fa7-ac57-054c02931075 complete No em dashes, no hedge words, permission-based throughout.
38 ccb0046c-f917-4f46-98d6-69f189ff36e9 complete Conceptual spine corrected: HotSchedules-or-OneClick source of truth model in place.
39 0f657e74-5259-4ffc-8c87-23cf7fae0e9b complete Voice: operator is not the subject of OneClick actions in this article.
40 addf5570-ed0a-49f8-bf33-fb709ae14500 incomplete UI verified against Production (remaining VERIFY blocks).
41 e9a6e7b6-8862-40b3-83e0-cb1d0303f59d incomplete VERIFY blocks resolved (sync cadence, manual sync trigger, OneClick-native setup location, position visibility of Job Code, report grouping, export format differences, training attribution behavior, unmapped warning behavior, per-team-member override).
42 54e7c982-c3f0-4834-b7cd-6ec50ae5b3aa incomplete Reviewed by Jared and Kevin.