This article explains the Classification watch in the console's Team module: why it exists, the three signals and their exact thresholds, where the numbers come from, what "watch" and "high risk" mean, and what to do when a contractor is flagged. It is the reference behind the panel's Rules link and its four-word disclaimer, monitoring, not legal advice.
Why it exists
Black Fodder's 1099 baristas are vendors: they are booked for events, paid a negotiated rate, and re-booked or not on outcomes. The risk is drift — a contractor who starts working regular café shifts, sustained hours, or near-weekly events begins to look like an employee. Two frames the code names explicitly:
- IRS behavioral control. Evaluating how a contractor works — reviews, coaching, skill plans, calibration — is evidence the business controls the work. That is why the Team module refuses those instruments for 1099 profiles (see Team — ladder, levels, reviews, moments, and the contractor policy); the watch covers the other half, the work pattern itself.
- IL 820 ILCS 405/212. The Illinois unemployment-insurance statute's independent-contractor test. The code treats regular café-role work on the staff schedule as the signal that "guts prong B" — core retail work on the staff schedule is the business's usual work, done where the business does it. [check: statute text not read — 'prong B' is the code comment's wording]
The panel heading puts both in one line (slated for trimming once this article is published): Classification watch — 1099s drifting toward employee status (IRS behavioral control · IL 820 ILCS 405/212). The statute references are the code's framing of the risk, not a legal opinion; the disclaimer under the list stands.
The three signals
All three recompute from the same rolling 90-day window the Team evidence cards use (STATS_DAYS = 90, classificationRisk() in pepper-ui/backend/team-data.js), for every active 1099 profile. Thresholds are exact:
| Signal | Fires at | Level | Line shown on screen |
|---|---|---|---|
Regular café shifts (core-retail) | 4 or more café days in 90 days | watch at 4–7 days; high at 8 or more (roughly weekly) | N café days in 90d — core retail work on the staff schedule (IL 820 ILCS 405/212 prong B) |
Sustained hours (hours) | 120 or more hours in 90 days (about 9.3 h/week) | watch | Nh in 90d (~X.Xh/wk) — economic-dependence signal |
Near-weekly engagement (frequency) | 8 or more catering event dates in 90 days | watch | N events in 90d — continuous integral relationship |
Design intent from the code comments: four café days is a pattern, not emergency fill-ins, and it is the strongest signal; the other two are dependence and continuity signals worth watching, not alarms by themselves. Only café days can ever escalate to high.
How the overall level is set
- No signal fires → no flag. The person does not appear in the watch list, and the list reads No classification flags — contractor engagement looks event-based and sporadic, as it should.
- Any signal fires → watch.
- Any signal at high (today, only café days ≥ 8) → high risk.
- If 7shifts or Dripos were unreachable when the aggregate was built, there are no stats and the function returns nothing rather than a fabricated verdict. A blank watch after an outage means "unknown", not "clean".
Where the numbers come from
| Input | Source | Detail |
|---|---|---|
| Café days | Dripos timecards | Count of dates in the window with a timecard whose role is not a Catering… role. Matched by name, so it catches contractors who have no 7shifts id. |
| Hours | Dripos timecards + 7shifts punches | Timecard hours over the window, plus hours from 7shifts punches in the catering department (CATERING_DEPT) for that user id. |
| Catering events | 7shifts shifts | Distinct dates of the person's non-deleted, non-draft shifts in the catering department that have already ended. Needs a seven_shifts_id on the profile. |
The whole Team aggregate is cached for 10 minutes and rebuilt on any write, so a flag can lag a new timecard by up to that long.
Where it shows
- Contractors table — a
classificationtag in the Notes column on any flagged row (stronger colour at high). - Classification watch section — under the contractors table, one row per flagged person with a watch or high risk badge and each signal's line. The section only gets a warning frame when someone is at high risk; otherwise it is an open list.
- Member sheet — a Classification watch / Classification risk card with the same signal lines.
What to do
| Level | Action the console names |
|---|---|
| watch | keep an eye — no action forced yet. Check whether the pattern is a one-off (a run of events, a cover stretch) or a habit before it reaches eight café days. |
| high risk | convert to W-2 or move off the café schedule. The sheet adds: Fix: convert to W-2 (like Nathan/Kathleen) or move them off the café schedule. Nathan and Kathleen are the precedent the console cites for the conversion route. |
Whichever way, do not "fix" a flag by adding development instruments to the contractor. The server blocks the obvious ones — a level, a skill plan, a review, or a coaching/calibration/1:1 note on a 1099 profile is rejected with a misclassification message — because those would add behavioral-control evidence on top of the pattern evidence.
What this is not
This is monitoring, not legal advice. The thresholds are house numbers chosen to surface drift early; they are not the statute's tests, and a clean watch is not a determination. Anything that touches an actual conversion, or a claim, goes through the CPA or counsel — the console's job is to make sure the pattern is seen in the quarter it forms, not the December after.