The Compliance Dashboard is where you review and resolve break-rule violations logged by BuyerKiosk's policy engine. Whenever an employee misses a required meal, takes a meal too late, takes a short meal, or skips a required rest, the engine writes a violation record. This page is one screen to see every open issue across your store, filter and sort it, mark it resolved, and export the data for payroll.

![Compliance Dashboard showing the filter row (Violation Type, Employee, From Date, To Date, Status) and the violation list area](/images/support/articles/compliance_dashboard_overview.png)

*The Break Compliance dashboard for a California store: filter row at the top, violations listed below.*

---

## Getting There

Navigate to **Scheduling** > **Compliance** from the admin sidebar, or go directly to `/admin/{storeCode}/scheduling/compliance`.

You need the `uri_schedule_manage` permission to view or resolve violations.

> **Prerequisite:** The Compliance Dashboard surfaces data produced by the policy engine. If your store hasn't [adopted a Break Policy](/support/articles/break-policies) (or hasn't been switched on by BuyerKiosk yet), the dashboard will be empty — there's nothing to flag without a policy. When I Work integrated stores don't generate violations in v1.

---

## Filtering the List

The filter row at the top lets you scope what you're looking at. Filters combine with AND — narrower filters = fewer rows.

| Filter | Options |
|--------|---------|
| **Violation Type** | All types, **Missing Meal**, **Late Meal**, **Short Meal**, **Missing Rest**, **Auto-Deduct** |
| **Employee** | All employees, or any individual team member assigned to this store |
| **From Date / To Date** | Defaults to the last 30 days. Click the calendar icon to pick a custom range. |
| **Status** | **All**, **Open only** (default for triage), or **Resolved only** (for audit / payroll review) |

> **Tip:** For weekly payroll review, set `Status = Open only` and `From Date = the Monday of the pay period`. That's the smallest list you need to clear before exporting timesheets.

---

## Violation Types Explained

The policy engine writes one of five violation types per shift. Each has its own trigger and remediation expectation.

| Type | Triggered when… | What to do |
|------|-----------------|------------|
| **Missing Meal** | A shift required a meal break (per your active preset) and no meal break was punched | Confirm with the employee whether they took the meal off-punch (manual edit) or genuinely missed it (apply premium pay if your state requires it) |
| **Late Meal** | A meal break started after the "must start before hour X" boundary defined in the rule | Verify the start-time on the punch; if accurate, flag for premium pay where required |
| **Short Meal** | A meal break was shorter than the rule's `Duration` (e.g., 22 minutes against a 30-minute rule) | Confirm whether the employee returned early voluntarily or was asked back; apply premium pay where required |
| **Missing Rest** | A shift required a paid rest break (e.g., CA's 10-min per 4h rule) and none was logged | Rest breaks are often taken without punching — confirm with the employee before treating as a real violation |
| **Auto-Deduct** | A long shift had no meal break, and your policy synthesized a virtual unpaid deduction | Audit the shift's actual breaks; if the employee took a meal but forgot to punch, add a manual break to undo the auto-deduct |

> **Tip:** **Missing Rest** is the most common false positive — most stores don't require employees to punch in/out for paid rest breaks. If your culture is "managers know rests happen," you can [disable the Required flag](/support/articles/break-policies#editing-a-rule) on the Rest Break rule to stop these violations from being logged.

---

## Reading a Violation Row

Each row in the list represents one violation on one shift. The columns surface what happened and what (if anything) is owed.

| Column | What it shows |
|--------|---------------|
| **Date** | The shift date the violation occurred on |
| **Employee** | Name of the employee whose shift triggered the violation |
| **Violation Type** | One of the five types above, with a colored badge |
| **Rule** | Which rule from your active preset triggered this (e.g., `CA Meal Break`) |
| **Premium Pay (hrs)** | Hours flagged for manager review. **Not auto-added to payroll** — you decide whether to apply it. |
| **Status** | `Open` (pending review) or `Resolved` with the resolver's name and resolved-at timestamp |
| **Actions** | `Resolve` button on open rows; `Reopen` on resolved rows |

Click a row to expand it and see the shift's full punch history alongside the rule that triggered.

---

## Resolving a Violation

"Resolved" doesn't mean the violation disappears — it means a manager has reviewed it and either applied the premium pay manually or determined no action is needed.

1. Click `Resolve` on the row.
2. Add a short **note** explaining what you did:
   - "Added $X premium pay to timesheet — CA-required missed-meal pay"
   - "Verified with employee — rest break was taken, not a real violation"
   - "Auto-deduct undone via manual break punch"
3. Click `Confirm`.

The row updates to **Resolved** and records:

- `resolvedByUserId` — who marked it resolved (you)
- `resolvedAt` — when
- Your note (stays attached to the violation log forever)

> **Tip:** Even "no action needed" violations should be resolved with a note. The compliance log is your audit trail — empty resolution notes make it hard to defend a wage-and-hour claim later.

### Reopening a Violation

If you resolved a violation by mistake or want to revisit it:

1. Filter to `Status = Resolved only`.
2. Find the row.
3. Click `Reopen` and add an explanatory note.

The row moves back to **Open** with the reopen action appended to its audit trail.

---

## Exporting for Payroll

Click `Export CSV` (top-right of the page) to download the currently filtered list as a CSV file. The export includes:

- Date, employee, violation type, rule name
- Premium pay hours per row
- Status, resolved-by, resolved-at
- The resolution note (if any)

The CSV honors your active filters — so for a payroll-period export, set `From Date` / `To Date` first, then click `Export`.

> **Tip:** Pair this export with your timesheet CSV. Cross-reference the two so any premium pay you decided to apply ends up on the right payroll line.

---

## Premium Pay — Important to Know

Premium pay (the "hours flagged" column on a violation) is **never automatically added** to payroll totals in v1. The dashboard surfaces it; you decide whether to pay it.

- **Some states (e.g., CA)** legally require an hour of premium pay for a missed or late meal. In those states, applying the premium is mandatory — but BuyerKiosk leaves the application to you for visibility and accuracy.
- **Other states (e.g., FLSA Default)** don't require premium pay at all. The number is informational — usually 0.
- **To actually pay an employee the premium**, edit their timesheet for that day and add a manual entry, or apply the hours through your payroll provider directly. The Compliance Dashboard's job is to make sure nothing slips through; it doesn't write to payroll on its own.

A future BuyerKiosk release may add an opt-in to auto-add premium pay. Until then, treat the dashboard as a review queue, not an autopilot.

---

## Common Workflows

### Weekly payroll review (5-minute version)
1. Filter to `Status = Open only`, `From Date = pay-period start`.
2. Scan each row. For each:
   - If real → apply premium pay on the timesheet, then resolve with a note.
   - If false positive (rest break taken without punching, employee took meal off-clock, etc.) → resolve with an explanatory note.
3. Export the now-empty open list (or the all-status export) for your records.
4. Run the timesheet [Custom Export](/support/articles/timesheets#exporting-timesheets).

### Spot-checking a specific employee
1. Set `Employee = {name}`, `Status = All`, `From Date = last 90 days`.
2. Review the row count and types. Patterns ("always Late Meal") may indicate scheduling issues, not employee misconduct.

### Quarterly compliance audit
1. Set `Status = All`, `From Date = quarter start`, `To Date = quarter end`.
2. Export to CSV.
3. Use the CSV to total premium-pay hours owed, missed meal counts, etc.

---

## Troubleshooting

### "Failed to load violations" error on first open
- This usually means your store's compliance log table isn't seeded yet, or the policy engine hasn't run against any punches. If you've just enabled Break Policy for your store, give it a day of clock-ins and recheck.
- Persistent error: contact BuyerKiosk support with your store typeNum.

### A violation looks wrong (employee did take the break)
- Check the punch history (click the row to expand). The most common cause is a missed break punch — the employee took the break but didn't clock out / back in.
- Add a manual break punch from the [Timesheet detail page](/support/articles/timesheets-time-tracking#editing-time-punches) for that day. The violation will be re-evaluated and cleared on the next timesheet save.

### "Auto-Deduct" violation on a shift where the employee actually took a meal
- Same root cause — break wasn't punched. Add a manual break punch to the timesheet; the auto-deduct unwinds.

### I want to stop seeing "Missing Rest" violations
- Most stores don't punch rest breaks (they're paid and short). To stop logging those violations: open the [Break Policy page](/support/articles/break-policies), edit the **Rest Break** rule, and turn the **Required** toggle off.

### Export CSV is empty
- The export honors your filters. Confirm the filter row hasn't narrowed too far (e.g., a specific employee + status = Resolved only when there are no resolved violations).

---

## Related Articles

- [Break Policies](/support/articles/break-policies) — Configure which rules trigger violations
- [Timesheets](/support/articles/timesheets) — Where premium pay lands once you apply it
- [Timesheets & Time Tracking](/support/articles/timesheets-time-tracking) — Editing punches to fix a violation
