Build a small review dashboard whose rates, distribution, uncertainty and accessible summary all come from one versioned data contract.
Project: build an auditable receipt-review dashboard
Define the packet
Use receipt ID, channel, submission time, terminal outcome time and eligibility status as the input. Write the target population, time zone, daily cutoff and duplicate-ID policy. Produce an input manifest with source snapshot and row counts. Grain and denominator must be documented before drawing the first mark.
Implement three views
Create a bar comparison of channel completion rates, a delay distribution with overflow count and a trend of daily eligible submissions. Each view needs axes, units, exact values and a text alternative. Show eligible counts beside rates and mark open or incomplete days. Accessible encoding is part of completion, not optional polish.
Validate data and display
Check two channels at 34 of 47 and 18 of 23: the combined completion rate is 52 of 70, not the mean of the two percentages. Check delays of 3, 4, 5, 6 and 47 hours: the median is 5 and the tail remains visible. Add a duplicated receipt and an empty period; both must have deliberate states.
Submit reproducible evidence
Save the data fixture, calculated aggregates, rendering script or chart specification, filter state and a short decision note. The note should name what can and cannot be inferred from the sample. A reviewer should be able to trace a displayed mark to source IDs and explain every exclusion. Link the project to uncertainty only if an interval construction is included and tested.
Implementation
def dashboard_total(channel_counts):
timely_total = 0
eligible_total = 0
for timely, eligible in channel_counts:
if not 0 <= timely <= eligible:
raise ValueError("invalid channel")
timely_total += timely
eligible_total += eligible
return None if eligible_total == 0 else timely_total / eligible_total
assert dashboard_total([(34, 47), (18, 23)]) == 52 / 70Performance and operating cost
A single pass over N receipts can accumulate C channel groups in O(N) expected time and O(C) state; the distribution adds O(B) bins. Rendering should reuse those aggregates. The deliverable must include runtime checks on real input before operational use.
Common Mistakes
- Do not average channel percentages into a total.
- Do not hide a 47-hour valid delay from the distribution.
- Do not submit a screenshot without data and filter provenance.
