# Excel — the brief, the fixture and the scoring Sent as one message with `orders-q2.xlsx` attached through each tool's own file upload, on the free tier, in a fresh chat (Claude: incognito). Nine tools, same file, same day. If a tool cannot take an .xlsx, the sheet is pasted as CSV text and that is noted. > I run a small online shop in Portugal. Attached is my order export for April to June 2026 - it's messy. Please: > 1. Tell me what's wrong with the data and fix it. Give me the cleaned sheet back as an .xlsx. > 2. Revenue per month and per category, and the product with the most units sold. > 3. List the duplicate orders and any order where Total doesn't match Qty × Unit Price. > 4. One Excel formula I can paste to get revenue per month from the cleaned sheet, which keeps working when I add rows. > > Keep it short. ## The fixture `orders-q2.xlsx`, one sheet "Orders", 124 rows: 120 orders plus 4 exact duplicates. Built by `make_fixture.py` (seeded, reproducible); the exact answers are in `ground-truth.txt`. Eight faults are planted: | Fault | Rows | What a careful reader does | |---|---|---| | Exact duplicate orders | 4 | drops them | | Total ≠ Qty × Unit Price | 5 | flags them; revenue uses Qty × Unit Price | | Qty blank | 3 | derives Qty from Total ÷ Unit Price | | Region blank | 2 | flags, cannot be derived | | Category blank | 8 | fills from the product name | | Unit Price as text, "€12,50" | 18 | converts to a number | | Product name case and spacing variants | 18 | normalises to one spelling per product | | Dates in three formats: real dates, `dd/mm/yyyy` text, `Apr 5, 2026` text | 30 + 12 | parses all as dates; the shop is in Portugal so `03/04/2026` is 3 April | The date trap has a clear tell: reading `dd/mm` as `mm/dd` produces orders in July to December and 20 invalid dates. `ground-truth.txt` also lists the totals a tool gets if it sums the Total column as-is, or deduplicates but keeps the wrong totals. ## Scoring - **Faults found** - how many of the eight fault classes the tool names, of 8. - **File** - an .xlsx comes back, opens, and is actually cleaned: 120 rows, real dates, numeric prices, one spelling per product, categories filled. Checked with openpyxl. - **Months** - revenue for April, May, June within €0.01 of the truth, of 3. A stated different basis (for example "sum of the Total column as given") is recorded but not counted as right, because the brief asks for the cleaned data. - **Categories** - of 3. **Top product** - Vinho Verde 750ml, 42 units, right or wrong. - **Duplicates** - of 4, with any false positives noted. **Mismatches** - of 5. - **Formula** - works on the cleaned sheet, and keeps working when rows are appended (whole-column or Table references, not a fixed range). Judged by reading it and, where the logic is not obvious, re-implementing it. - **Invented facts** - anything stated about the shop, the customers or the numbers that the file does not support. - Time to answer, whether the free tier refused or truncated, and whether the answer is in English.