Skip to content

Invoice a plumbing firm's jobs with a call-out hour, labour in started quarter hours, emergency rates and banded parts markup

Exact prompt

# Invoice a plumbing firm's jobs with a call-out hour, labour in started quarter hours, emergency rates and banded parts markup Inputs: `jobs.csv` (job_id, customer_id, arrive, depart, emergency), `parts.csv` (line_id, job_id, part, qty, unit_cost), `customers.csv` (customer_id, name, service_plan) and `rates.json` (callout_fee, labour_per_hour, emergency_multiplier, markup_bands, tax_pct). All customers and jobs are synthetic; amounts are in dollars and times are local. These rules are the firm's policy; where `office-note.txt` disagrees, the rules win. Rules: - Labour: the first 60 minutes on site (depart − arrive) are covered by callout_fee, charged even for a shorter visit; time beyond 60 minutes is billed in started 15-minute blocks at labour_per_hour ÷ 4 per block; customers whose service_plan is 'yes' pay no callout_fee (their blocks are still charged); an emergency job ('yes') has its whole labour charge multiplied by emergency_multiplier, rounded half-up to the cent. - Parts: each part line is marked up by the first band in markup_bands whose max_unit_cost is at least the line's unit_cost (null = no limit); line price = qty × unit_cost × (100 + pct) / 100, rounded half-up to the cent. - Tax: tax_pct of the job's parts total, rounded half-up to the cent per job; labour is not taxed. Job total = labour + parts + tax. - Write `out/invoices.json`: `{"parts": {"<line_id>": <dollars>, ...}, "jobs": {"<job_id>": {"labour": <dollars>, "parts": <dollars>, "tax": <dollars>, "total": <dollars>}, ...}, "customers": {"<customer_id>": <sum of the customer's job totals>, ...}}`. `parts` has one entry per row of parts.csv and `jobs` one entry per row of jobs.csv (a job with no parts has parts 0 and tax 0). - Roll-ups: Customers in customers.csv with no jobs are left out. ## How this run works - Work on your own: nobody will answer questions in this task, and writing to `ask/` counts against the run. - Write only under `out/`. Create `out/` if it is missing. Inputs are synthetic; don't fetch anything from the network. - Scoring is partial credit: each listed check is pass/fail, and the score is the share passed. Numbers are compared to within 0.005 unless the task says otherwise.

Invoice a synthetic plumbing firm's jobs. A call-out fee covers the first hour (waived for service-plan customers), later time is billed in started quarter hours, emergencies multiply the labour, parts are marked up by cost bands with unit costs exactly on a band limit, and tax applies to parts only. The prompt says customers with no jobs are left out of the roll-up. An office note gets the rounding, call-out and roll-up rules wrong. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).

Success criteria: labour parts_markup tax job_totals customer_totals

Best model for this task so far: Claude Haiku 5.5 (effort default (no --effort flag) · thinking on) (success, $0.0044, 16s).

Run this on another model

All runs (3)

100% pass rate across 3 eligible runs: 3 pass, 0 partial, 0 fail. Partial and failed runs are listed below with everything else.ⓘ

Runs for this use case
ModelCostTimeStep-insⓘAutonomyOutcomeTrustⓘDateCompare
AClaude Opus 5.5default · thinking on$0.1319s0Fully autonomouspassTrust 80%2026-10-25
AClaude Haiku 5.5default · thinking on$0.004416s0Fully autonomouspassTrust 80%2026-10-25
AClaude Sonnet 5.5default · thinking on$0.0612s0Fully autonomouspassTrust 80%2026-10-25

Embed this result

A live badge for this use case. It links back here and updates as new runs are published.

UseCaseRank badge for Invoice a plumbing firm's jobs with a call-out hour, labour in started quarter hours, emergency rates and banded parts markup

Get new runs and ranking changes weekly

Which models got better or cheaper on real tasks like this one.