Home › Use Cases › Re-do a bid tabulation from the bid forms and name the apparent low
Use caseUC0343
🧪 Use-case kit · runnable

Re-do a bid tabulation from the bid forms and name the apparent low

A small, forkable project that does one job end to end. Run once for real, and every figure on these pages captured from that run.

The business caseThe problem this solves

A public owner advertises a bid schedule, opens the bids and posts a tabulation with an apparent low bidder on it. Everything below that name is arithmetic somebody did once: a unit price transcribed off each bid form, multiplied by the schedule quantity, summed into a base bid, plus whichever alternates the award basis elects. The arithmetic is easy and it is not where the sheet goes wrong. It goes wrong where a bid form states a price in words and in figures and the two disagree — the words govern and the figure is what got typed — and where an addendum revised a quantity that the sheet extended at the advertised one. Both of those live in a sentence, and both extend, foot and rank as neatly as a correct price does. Opening one posted bid tabulation beside every bidder's own schedule of prices, re-typing each unit price into a spreadsheet, multiplying it out against the advertised quantity, footing the base bids, adding whichever alternates the award basis elects, re-ranking, and then reading every note on the sheet to decide which of them is a price and which is a letter that arrived after the opening. It does NOT replace the award decision, the responsiveness determination or the responsibility determination, and it never makes any of them.

Audience

A public owner's procurement analyst or the owner's agent, checking a posted tabulation before the bid abstract is signed and an award recommendation is written. Whoever has to answer, in writing, whether the sheet is right. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual bid tabulation

The corpus is 62 bid tabulation, 0.27 MB (txt 62). It is generated because it has to be. A real bid tabulation is a public record only after the opening, it carries the trading names of companies that lost, and the exact shapes this kit measures — a unit price transcribed from the figures when the words governed, a letter arriving after the opening asking for a different price, an addendum rescinded before any bid was received — are rare on any one procurement and are exactly what nobody publishes a labelled set of. Generating it also means every bidder is B-1..B-5 and nothing else, so there is no company for a responsibility statement to attach to.

The corpus

  • The 62 bid tabulationgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromdata/SOURCES.md states where every byte came from AND what the generator costs the measurement, family by family.

Swap this folder for your own material and the kit is pointed at your bid tabulation. That is the whole change — there is no database to migrate.

One bid tabulation, as the model receives itBTV-0001.txt · 1 of 62
==============================================================================
BID TABULATION                                             BTV-0001
Owner: Northgate Regional Water Authority (invented)
Solicitation: IFB-2026-1000   Runway apron reconstruction   Opened: 2026-06-08   Procedure: BTV-2026
==============================================================================

SOLICITATION AS ADVERTISED
  award basis                    base bid plus elected alternates
  alternates elected             ALT-1
  bid opening                    2026-06-08
  bidders                        3

BID SCHEDULE AS ADVERTISED
  LINE    DESCRIPTION                               UNIT       QUANTITY
  L-01    Roofing membrane, fully adhered           SF              600
  L-02    Sanitary pipe, 8 inch, open cut           LF             1200
  L-03    Asphalt surface course                    TON             120
  L-04    Traffic control, per day                  DAY            4000
  L-05    Hazardous material handling allowance     ALLOW             1   stipulated 15000.00

ALTERNATES AS ADVERTISED
  ALT     DESCRIPTION                                   BASIS
  ALT-1   Extend the warranty to twenty years           add
  ALT-2   Add the east parking bay                      add

BID TABULATION AS POSTED BY THE OWNER'S AGENT
  ROW        BIDDER  LINE     UNIT PRICE      QUANTITY        EXTENSION
  T-0001     B-1     L-01           7.35           600          4410.00
  T-0002     B-1     L-02         113.00          1200        135600.00
  T-0003     B-1     L-03          67.20           120          8064.00
  T-0004     B-1     L-04         990.00          4000       3960000.00
  T-0005     B-1     L-05       15000.00             1         15000.00

Abridged — the file continues.

The outcomeWhat a good result looks like

One solicitation in, one row out: which unit prices the bid forms actually state, which schedule quantity an issued addendum put in force, every tabulation row this procedure treats differently from the sheet that printed it, and one verdict from a closed set of five — TAB-BROKEN, LOW-CHANGES, RANK-CHANGES, TOTALS-CORRECTED, TAB-CONFIRMED — with the corrected award-basis totals and the apparent low beside the one the sheet posted.

And when it cannot

And what it does when it cannot. On the scored run 62 of 62 replies parsed and nothing stopped at the ceiling, so there is no unparsed row to report. What it gets WRONG is published by name: it left 2 unit prices at the figure the words do not support, it missed the arithmetic-only row on 10 files, and it cited neither half or only one half of every one of the 5 offsetting pairs — a family the free rules floor gets 3 of. On 6 files the arm's own stated apparent-low total was below the cheapest total that could exist on that sheet; the station flags it and does not correct it.

Where it fitsWhat did work

Every line below is a measured result from this kit's own runs, with the figure that supports it. The headline above is not softened by any of them.

  • Your posted tabulations are wrong because somebody's spreadsheet mis-extended a row — the free arith floor, and do not buy a call at all
    an extension that does not equal its own printed price times its own printed quantity is arithmetic. Free code gets 9 of the 13 arithmetic-only files here.
  • Your bid forms state prices in words and figures and the two sometimes disagree — the scored arm
    this is the reading the money buys: 60 of 62 governing prices right against free code's 40.
  • Bidders write to you after the opening asking for their prices to be read differently — the scored arm
    free code applied every one of the 17 such letters in this corpus as a price; the paid arm applied 0.

And where nothing here is good enough:

  • You need to know WHICH rows are wrong on a sheet whose totals happen to be right — neither arm alone — read the cited set and expect to lose the offsetting family
    the paid arm gets 0 of the 5 offsetting pairs and free code gets 3. This is the kit's own named failure.
  • You want an award recommendation, a responsiveness ruling or a responsibility determination — none of this
    BTV-2026 makes none of those and the answer contract offers no field that could carry one. Naming an apparent low is arithmetic.

At a glanceHow the whole thing runs

18%all five correct pct
1,720 msp50, end to end
$0.00per 1,000 bid tabulation · google/gemini-3-flash

Run once, for real, on 2026-09-09. Every figure on these pages was captured from that run — nothing is written from intent.

14 steps, grouped by the question that sends you to them rather than by build order. Each tile carries the one figure that step is about, and opens the page behind it.

Should you use this?What you bring, where it stops, and when not to use it

Before you commit an afternoon to this, these are the answers that decide it. Each one is rendered from the record it lives in — and links the page that holds it in full.

What do I have to bring?Replace data/corpus/*.txt with your own posted tabulations in the same shape and data/solicitations.json with your own solicitation register, then rebuild the key by labelling them. ⚠︎ WHAT STOPS BEING TRUE THE MOMENT YOU DO. Corpus lens →
When is this the wrong choice?Avoid: Buying a model call to do a multiplication. That is the case against the best-fitting scenario (“Your posted tabulations are wrong because somebody's spreadsheet mis-extended a row”). 5 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A tabulation that is not fixed-width columns. src/bidsheet.py's row regexes are the shape these sheets print; a CSV export or a procurement system's API shape needs a different parser and nothing above it changes. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?NO SECOND SCORED RUN. One was fired, so the run-to-run spread on this corpus is unknown and unclaimed. 8 items this kit says it could not check. Eval lens →
Can I run this on a model I control?Yes — any OpenAI-compatible endpoint, including one on your own hardware. The shipped adapter takes its host from BASE_URL and its model from MODEL, so nothing in src/ changes. The published figures come from 1 model on the fast tier, one provider, one key. Prompt lens →
And if it fits — what do I stand up?6 artifacts with a stated home and a stated egress, and 3 decisions each with what you provision past its ceiling — plus what was not measured. That is the next page, not this one. step 14 — Run it in your environment →

Not asked of this kit — 2 questions: clone (a fresh clone of this kit runs with nothing fetched); judge (nothing here is graded by a model).

Last verified 2026-09-09 — r001-bid-tabulation. Every figure on these pages was captured from that run.

Run itHow this reaches your data

Every result on this page was produced by pure code over checked-in files, with no API key — which is why you can read the numbers before anyone spends anything.

Run this on your own data

  • The pipeline, its eval harness and the runs behind every numberdeployed inside your environment, on your own model endpoints, against your own documents.
  • The corpus above is the shape, not the limitit is a folder swap, and there is no database to migrate.

Talk to us →

Checked before this shipped — A clean checkout with no key configured renders the whole board, all three free floors, all six committed runs and every screenshot. python3 -m evals.check_labels and python3 tools/build_corpus.py --check both run on a machine with nothing installed — the kit is standard library only.

A living map of modern AI — kept current every morning