# Exception dashboard worksheet Fictional business: Harbor Print Desk. Prepared October 7, 2026. This is a planning resource and checked example, not a live dashboard. Download the companion [editable JSON fixture](/learn/resources/exception-dashboard-example.json). ## 1. Freeze the contract - Source scope: all 12 jobs below, with no owner filter. - Snapshot cutoff: **2026-10-12T12:00:00Z**. Whole-second UTC; rules version `worksheet-v1`. - Active: `open` or `waiting_customer`. Closed: `completed` or `canceled`. - Overdue: active, due time known, and `due_at < cutoff`. Equality is not overdue. - Waiting: active and status `waiting_customer`; a dependency flag, not an instruction to send a reminder. - Unassigned: active and owner is `null`. - Missing due: active and due time is `null`. Lateness remains unknown. - Identity: unique job `id`; count records by ID, not by label or card memberships. - Unknown statuses, duplicate IDs, malformed dates, empty-string owners, and empty-string dates must be corrected or reported as an input error. Do not quietly convert them to a healthy zero. In the fixture, absent values are JSON `null`. ## 2. Source records All October 12 times below are UTC. A dash means `null`, not zero. Owner IDs identify fictional staff. | ID | Work | Status | Owner | Due UTC | | --- | --- | --- | --- | --- | | J01 | Menu proof | open | U-01 | Oct 12, 09:00:00 | | J02 | Event posters | waiting_customer | U-01 | Oct 12, 11:00:00 | | J03 | Window decals | open | — | Oct 12, 15:00:00 | | J04 | Invitation proof | waiting_customer | — | Oct 12, 10:00:00 | | J05 | Table cards | completed | U-02 | Oct 12, 09:00:00 | | J06 | Canceled banner | canceled | — | Oct 12, 08:00:00 | | J07 | Flyer proof | open | U-02 | Oct 12, 12:00:00 | | J08 | Sticker sheet | open | U-01 | — | | J09 | Brochure proof | waiting_customer | U-02 | Oct 13, 12:00:00 | | J10 | Price labels | open | — | Oct 12, 11:00:00 | | J11 | Folded leaflet | open | U-01 | Oct 13, 12:00:00 | | J12 | Counter sign | open | — | — | ## 3. Give each queue an accountable next step | Queue | Who acts | Next step | | --- | --- | --- | | Overdue | Job owner; dispatcher if absent | Review missed commitment and record the next action | | Waiting | Job owner; dispatcher if absent | Identify the missing customer input and agree on a follow-up | | Unassigned | Dispatcher | Assign an accountable owner | | Missing due | Dispatcher and job owner | Resolve whether a due time should be set | These are proposed human actions. The reference example performs no assignment, reminder, or completion operation. Your actual workflow must decide whether a completion is valid. ## 4. Compare row IDs, then counts | Result | Baseline | J04 completed, same cutoff | Baseline rows, cutoff +1 second | | --- | --- | --- | --- | | Overdue IDs | J01 J02 J04 J10 | J01 J02 J10 | J01 J02 J04 J07 J10 | | Waiting IDs | J02 J04 J09 | J02 J09 | J02 J04 J09 | | Unassigned IDs | J03 J04 J10 J12 | J03 J10 J12 | J03 J04 J10 J12 | | Missing-due IDs | J08 J12 | J08 J12 | J08 J12 | | Active jobs | 10 | 9 | 10 | | Operational card memberships | 11 | 8 | 12 | | Distinct operational-exception jobs | 7 | 6 | 8 | | All four card memberships | 13 | 10 | 14 | | Distinct jobs across all four queues | 8 | 7 | 9 | Baseline operational union: **J01 J02 J03 J04 J09 J10 J12**. Adding missing due adds only J08. The baseline reconciliation is **12 source = 2 closed + 10 active**, and **10 active = 8 with a listed exception + 2 without one**. The latter two are J07 and J11. In the completion case, keep all 12 records and change only J04's status. Its historical due and absent owner remain recorded; it is excluded because it is closed. The new operational union is **J01 J02 J03 J09 J10 J12**. Adding missing due gives 7 jobs. Do not also advance the clock in this case. ## 5. Test the states a neat screenshot misses | Case | Expected result | | --- | --- | | Empty source scope | Every count is 0 and every matching list is empty | | All jobs completed | Every attention count is 0; historical records still exist | | J07 due exactly at the cutoff | Excluded from overdue | | Same records, cutoff 12:00:01 UTC | J07 joins overdue | | J08 and J12 have no due time | Both appear under missing due; neither is classified overdue | | Filter the baseline scope to owner U-01 | Overdue J01/J02; waiting J02; unassigned none; missing due J08; 3 distinct attention jobs | | J04 is completed | Remove it from all three affected queues and counts, retain history | | Paginate a matching list | Card uses full matching count, list shows page range plus total | | Refresh after a saved change | Count and matching IDs use the same scope, cutoff, and snapshot | | Invalid status, duplicate ID, or malformed timestamp | Explicit input error; do not silently count it as healthy | The first seven cases have a deterministic answer from this fixture. Pagination, permissions, actual saved changes, and cache refresh need testing in the built application. They have not been exercised here. ## 6. Define your own card before arranging the screen | Field | Your decision | | --- | --- | | Buyer decision the card supports | | | Source scope and permission boundary | | | Stable record ID | | | Active and closed states | | | Exact predicate, including equality and missing values | | | Cutoff, timezone, rule version, and snapshot | | | Owner when assigned / when no owner exists | | | Useful next action and where it occurs | | | Baseline matching IDs / distinct count | | | One changed record / expected new IDs and count | | | Empty, unknown-data, and overlap cases | | | Observed implementation result and evidence | Not tested | Carry this completed contract into your app brief. Keep hypothetical expectations separate from observed application results.