You are checking one prepared estimate against the specification it was priced from, for
the person who has to sign the estimate off.
Two documents are given to you in one package. The first is the SPECIFIED SCOPE: the work that has
to be done, item by item, each with a section reference, the item as specified, a quantity and a
unit. The second is the PREPARED ESTIMATE: priced lines, in their own wording, in their own order,
grouped however the estimator chose to group them.
The two documents were written by different people. Neither was written from the other. Nothing in
either names the other's references. Your job is exactly one thing:
FOR EVERY SPECIFIED ITEM, NAME THE ESTIMATE LINE OR LINES THAT COVER IT.
How to decide:
- Coverage is about the WORK, never about the words. An estimate line describing the same work in
completely different language covers the item.
- ONE ESTIMATE LINE MAY COVER SEVERAL SPECIFIED ITEMS. A line reading "Structural steel frame,
columns, beams and bracing" covers the separate specified items for columns, for beams and for
bracing -- name that same line against all three. This is the case that is easiest to get wrong,
and reporting a bundled item as uncovered sends somebody to argue about work that is already in
the price.
- A DISAGREEING QUANTITY IS STILL COVERAGE. If a line prices the right work in the wrong quantity,
name it. The quantity is checked separately and is not your job.
- A NEAR MISS IS NOT COVERAGE. A line for steel columns does not cover a specified item for steel
handrailing merely because both are steel. If nothing prices the item's work, name nothing.
- Name only references that are printed in this package. Do not invent one.
WHAT YOUR MAPPING IS TURNED INTO. You do not answer any of these -- pure code
derives every one of them from the references you name. They are here so you know
what each decision costs:
COVERED_BUNDLED
Covered, but only because one estimate line covers this item together with others. Nothing
in either document says so -- it falls out of the fact that several specified items name
the same line. It is covered, and its quantity is compared against the SUM of everything
that line covers rather than against this item alone. Reported as a gap instead, somebody
spends a morning arguing about work that is already in the price; this is the row a word
matcher gets wrong, and it is 40 of the 659 items in this corpus.
QUANTITY_NOT_COMPARED
Covered, and the quantities were not compared -- because a unit is not in the unit table,
or because the line covers items measured in different dimensions and they cannot be
summed. It is a third state, not a quiet pass: nothing is claimed about these two numbers,
and a person has to look. Rendered as `agrees` it hides a real disagreement; rendered as
`disagrees` it invents one.
GAP
No estimate line prices this item's work at all. The work is in the specification and it
is not in the price. This is the expensive direction: missed, it reaches the priced total
as a hole and is found by somebody who is already committed, with no later step that
recovers it. Its precision and its recall are always published together, because an arm
that reports every item as a gap finds all of them and is useless.
QUANTITY_MISMATCH
Covered, and the specified and estimated quantities do not reconcile once both are in the
base unit of their dimension, at 0.5 per cent. DIFFERENT DIMENSIONS NEVER RECONCILE,
however close the two numbers look -- `216 m` and `216 nr` are 8 of this corpus's 14
mismatches, with the two numbers identical. Reported without BOTH quantities it is not a
finding anybody can act on, so the scorer only counts it found when both numbers come with
it.
UNSPECIFIED
An estimate line that covers no specified item at all -- priced work the specification
does not account for. This is the only verdict that belongs to a LINE rather than to a
specified item. It is not always an error: an estimator may be pricing something the
specification assumes. It is always a question, and the point is that somebody is asked it
before the estimate is signed off rather than after.
COVERED
One estimate line prices this item's work, that line prices nothing else, and the
quantities reconcile. Nothing to do. It is last in this list deliberately: it is the
majority of every package -- 645 of 659 items here are covered -- and a panel that leads
with it buries the five verdicts that need a person.
Return one entry for EVERY specified item, in the order the specification prints
them, and list the estimate references that cover no specified item at all.
Reply with JSON and nothing else, in the shape given at the end.
THE COVERAGE RULEBOOK, as written:
# The coverage rulebook
This is the whole rule set. The model reads this file verbatim in its prompt; every code path
reads `data/rulebook.json` and `data/units.json`, which carry the same facts as data.
## 1. What the two documents are
A **specification** states the work that has to be done. Each specified item carries a **section
reference** (`S-2.3`), the item **as specified**, a **quantity** and a **unit**.
A **prepared estimate** prices work. Each line carries a **line reference** (`E-014`), the line
**in its own wording**, a quantity, a unit, a rate and an amount.
**The two documents were written by different people and neither was written from the other.** The
wording differs, the ordering differs and the groupings differ. Nothing in either document names
the other's references. Matching them is the whole of the reading.
## 2. Coverage
A specified item is **covered** when at least one estimate line prices the work that item
specifies. Coverage is decided on **what the work is**, never on wording, ordering, position or
quantity:
- an estimate line may describe the same work in completely different words;
- **one estimate line may cover several specified items** — a line reading "Structural steel frame
complete, columns, beams and bracing" covers the separate specified items for columns, for beams
and for bracing. All three are covered, by the same line;
- an estimate line whose quantity disagrees with the specification **still covers the item**. A
wrong quantity is a *quantity mismatch*, reported separately. It is not a gap.
A specified item is **uncovered** when no estimate line prices its work at all. That is a **gap**:
work that has been specified and has not been priced.
An estimate line is **unspecified** when it prices work no specified item asks for. That is the
other direction: money in the estimate that the specification does not account for.
⚠︎ **A near-miss is not coverage.** A line for "Steel columns" does not cover a specified item for
*handrailing* merely because both are steel. Coverage means the same work.
⚠︎ **And a gap is not "I could not find the words".** An item covered by a bundled line, in words
that share nothing with the specification, is covered. Reporting it as a gap sends a buyer to
argue about work that is already in the price.
## 3. Quantity
Compare quantities **only** on an item that is covered — an uncovered item has no quantity to
compare against.
- Both quantities are converted to the **base unit of their dimension** (`data/units.json`):
length → m, area → m2, volume → m3, mass → kg, count → nr, lump → item, time → hr.
- **If the two units are in different dimensions, the quantities disagree** — however close the
two numbers look. `216 m` and `216 nr` are not the same quantity and never were.
- If the two units are in the same dimension, convert and compare. `1.5 t` and `1,500 kg` agree.
- Quantities agree when they are within **0.5 per cent** of each other after conversion.
- **Where one estimate line covers several specified items, the line's quantity is compared
against the SUM of those items' specified quantities**, converted to the line's unit. A bundled
line is priced once for the whole bundle.
- A unit neither `data/units.json` nor this list carries is **unknown**: the comparison is not
made and the item is reported with `quantity_agrees: "unknown"`, never as a mismatch.
## 4. What the report says
For every specified item, in specification order:
| field | |
|---|---|
| `scope_ref` | the section reference, verbatim |
| `estimate_refs` | every estimate line that covers it — an empty list when nothing does |
| `covered` | `true` when `estimate_refs` is not empty |
| `quantity_agrees` | `true`, `false`, or `"unknown"` |
And once per package, `unspecified_estimate_refs`: every estimate line that covers no specified
item at all.
## 5. What the report is not
It does not price anything, re-rate anything, adjust an amount, or say what a gap should cost. It
does not decide who is right when the two documents disagree — it says **that** they disagree,
where, and by how much. Somebody with the drawings in front of them decides the rest.
THE PACKAGE, verbatim:
SCOPE AND ESTIMATE COVERAGE PACKAGE
====================================================
Package reference PKG-0001
Project Highmarsh Service Yard
Estimate prepared by Meridian Cost Services
Revision E
Currency GBP
SECTION 1 - SPECIFIED SCOPE
The rows below are the specified work. Each carries its section reference, the item
as specified, the specified quantity and its unit. This document was issued before
the estimate below was prepared and does not refer to it.
Ref Item as specified Quantity Unit
EXTERNAL WORKS
S-1.1 Precast concrete kerbs laid to falls with haunching 430 m
S-1.2 Reinforced concrete external hardstanding and yard paving 890 m2
S-1.3 Below ground foul and surface water drainage runs 890 m
CONCRETE
S-2.1 Reinforcement bar, cut, bent and fixed in position 86 t
S-2.2 Reinforced concrete pad foundations including all formwork 75 m3
FINISHES AND ACCESS
S-3.1 Statutory and wayfinding signage internally and externally 20 nr
S-3.2 Galvanised steel handrail to edges, walkways and stairs 345 m
BUILDING ENVELOPE
S-4.1 Insulated composite wall cladding panels including flashings and trims 2,690 m2
S-4.2 Industrial sectional overhead doors, electrically operated 10 nr
STRUCTURAL STEELWORK
S-5.1 Protective coating to structural steelwork, two coat system 1,290 m2
S-5.2 Structural steel columns, fabricate, deliver and erect 47 t
SERVICES
S-6.1 Small power distribution, containment and outlets 50 nr
SECTION 2 - PREPARED ESTIMATE
The estimate below was prepared separately, in its own wording and its own order.
A line may cover more than one specified item. Line references are this document's
own and carry no relationship to the section references above.
Ref Line as estimated Quantity Unit Rate Amount
E-001 RC pad bases, formwork and pour 75 m3 236.89 17,766.75
E-002 External concrete hardstanding 890 m2 102.24 90,993.60
E-003 Underground drainage, foul and surface water 890 m 136.90 121,841.00
E-004 Small power, containment and sockets 50 nr 135.12 6,756.00
E-005 Sectional overhead doors, electric 10 nr 5,796.62 57,966.20
E-006 Precast kerbing, laid and haunched 430,000 mm 0.06 25,800.00
E-007 Bar reinforcement, supply and fix 86 t 1,650.53 141,945.58
E-008 Signage, statutory and wayfinding 20 nr 74.46 1,489.20
E-009 Wall cladding, composite panel with trims 2,690 m2 94.58 254,420.20
E-010 Handrailing, galvanised 345 m 170.30 58,753.50
E-011 Steelwork protective paint system, two coats 1,290 m2 23.19 29,915.10
E-012 Steel columns, fabricated and erected 47 t 2,881.22 135,417.34
ESTIMATE TOTAL 943,064.47
SECTION 3 - NOTES
Quantities are as measured by the party that produced each document. Rates are
exclusive of tax. Every amount above is its line's quantity multiplied by its rate.
No allowance, provisional sum or contingency is carried outside the lines printed.
Reply with JSON and nothing else, exactly this shape:
{"package_ref": "<the Package reference printed in the header, verbatim>",
"coverage": [
{"scope_ref": "<the section reference verbatim, e.g. S-2.3>",
"estimate_refs": ["<every estimate line covering this item, e.g. E-014>"],
"why": "<at most fifteen words: what made this line cover this item, or why nothing does>"}
],
"unspecified_estimate_refs": ["<every estimate line covering no specified item at all>"]}
`estimate_refs` is an EMPTY LIST for a specified item nothing in the estimate covers. Entries appear
in specification order, one per specified item, with no item left out and none repeated. An estimate
line may appear against more than one item. Do not report gaps, quantities or totals -- they are
derived from this mapping.