The six-step workflow for adjudicating Resource rates across competing suppliers. On award, the winning rates replace the scoped Resource rates in place.
Primary view: Price Book Adjudication (view 10) Related entities: Adjudication · Price Book · Resource · Company
1. When to use
Run a Price Book Adjudication (PBA) when:
- The Estimate uses a set of Resources whose rates need fresh market testing.
- Multiple suppliers compete on the same Resource set.
- On award, you want to update the existing Resources (not create new Subcontract Resources — that’s SPA).
Typical targets: Labour day rates, Material unit rates, Plant hire rates across a handful of Price Books.
2. Preconditions
- Estimate is in an editable state (
In ProgressorReviewed). PBAs cannot be re-opened once Estimate is Submitted. - Resources to be adjudicated already exist in user-created Price Books (External or Internal typically).
- Competing suppliers are Companies with the Supplier role.
3. The six steps
┌─────────┐ ┌────────┐ ┌────────┐ ┌─────────┐ ┌───────────┐ ┌──────────┐
│1. │ │2. │ │3. │ │4. │ │5. │ │6. │
│Generate │ → │Export │ → │Import │ → │Compare │ → │Normalise │ → │Transfer │
│ │ │ │ │ │ │ │ │ │ │(Award) │
└─────────┘ └────────┘ └────────┘ └─────────┘ └───────────┘ └──────────┘
(Draft throughout) (Adjudicated)
Step 1 — Generate
Goal: assemble the Resource scope for the comparison.
- Estimator opens a new Price Book Adjudication within the Estimate.
- Picks Resources from the Estimate’s active Price Books (filterable by Price Book, Resource Type, Categorization, flag).
- System creates a scope list with each Resource’s current rate as baseline.
- Captured on the Adjudication record:
adjudication_type = price_book,scoped_resource_ids,round_number = 1.
State: Draft.
Step 2 — Export
Goal: package the scope for distribution to competing suppliers.
- Estimator chooses a format (Excel or PDF).
- Export includes: baseline rates, instructions for return, optional variance / inclusion / exclusion template.
- Distribution is manual in v1 (email or out-of-band); the system tracks
return_received_dateper Supplier as returns are imported in Step 3.
State: still Draft.
Step 3 — Import
Goal: bring competing returns back into the system.
- For each supplier:
- Estimator uploads the returned Excel file via the Import Wizard.
- Wizard provides smart column mapping (auto-detect with manual override), preview validation, and error detection (missing rates, unit mismatches, non-numeric values).
- System parses and stores as an Adjudication Return record (one per Supplier).
- Suppliers that haven’t returned yet remain as “awaiting return” rows.
Role gate: first-gate validation — the first of (adding the Company to the Adjudication) or (importing their return) requires the Company to have the Supplier role.
State: Draft.
Step 4 — Compare
Goal: side-by-side view of competing quotes with variance.
- Table / matrix showing each Resource × each Supplier’s return + baseline.
- Per cell: quoted rate, variance vs baseline (% and $), inclusion / exclusion notes.
- Variance / inclusion / exclusion notes that the estimator records during this step are saved as Content Block instances on the affected Items’ Worksheets — not on the Adjudication itself. They persist on Items after award.
- Read-only exploration; no rate writes yet.
State: Draft.
Step 5 — Normalise
Goal: add missing rates for like-for-like comparison.
- If Supplier A quoted everything but Supplier B missed a few rates, estimator adds normalisation rows — e.g., “use Supplier A’s rate for the missing line, or a manual estimate”.
- Normalisation rows are transient to the Adjudication — they are NOT written back to Resources or Items.
- They only matter for the selected winner’s final Transfer step: if the winner’s return needed normalisation, those rates are applied as part of the award.
State: Draft.
Step 6 — Transfer (Award)
Goal: apply the award.
- Estimator selects one Supplier’s return as the winner (sets
selected = trueon their Adjudication Return, recordsawarded_at). - System replaces the rates on the scoped Resources with the winner’s quoted rates (including any normalisation rates for that winner).
- Adjudication status transitions
Draft → Adjudicated.
Downstream effects:
- Existing Worksheet Resources referencing those Resources still carry their old snapshots. Anomaly Review flags divergence on next run.
- Estimator pushes through updates on each divergence (accepts new rates / flags / modifier defaults).
- Each pushed-through rate change triggers cascade on the affected Item (
Reviewed → Priced).
4. Multiple rounds
PBAs support multiple rounds over the same Resource set. Each round is a fresh six-step cycle:
- From the Adjudicated state, estimator clicks Re-open → status reverts to
Draft;round_numberincrements. - Scope can be adjusted (add / remove Resources) before Step 2.
- On award, the Resource rates are updated again (replacing whatever the previous round set).
Re-open gate: Re-open is blocked once the parent Estimate transitions to Submitted (or Won / Lost / Archived). Adjudications are frozen with the Estimate.
Re-open semantics: Resource rates remain as set by the last award until the new round’s Transfer step replaces them.
5. Workflow diagram
Estimate (In Progress or Reviewed)
│
▼
Estimator opens new Price Book Adjudication
│
▼
┌──────────────────── Draft state ───────────────────┐
│ │
│ 1. Generate — pick Resources as scope │
│ │ │
│ ▼ │
│ 2. Export — produce Excel / PDF package │
│ │ (suppliers work offline) │
│ ▼ │
│ 3. Import — upload returns (Import Wizard) │
│ │ (role gate: Supplier role check) │
│ ▼ │
│ 4. Compare — side-by-side matrix │
│ │ (variance notes → Content Blocks on Items) │
│ ▼ │
│ 5. Normalise — add transient fill-in rows │
│ │ │
│ ▼ │
│ 6. Transfer — select winner, replace rates │
│ │
└───────────────────────┬────────────────────────────┘
│
▼
Adjudicated state
│
▼
Worksheet Resources show divergence
(snapshot vs new Resource rate)
│
┌───────────────────┼─────────────────────┐
▼ ▼
Estimator pushes Estimator re-opens
through on each WR (if rates no longer
(cascade right — new round)
Items → Priced) │
▼
Back to Draft
(round_number++)
6. Anomalies & edge cases
| Situation | Handling |
|---|---|
| Supplier returns arrive with unit mismatches | Import Wizard flags; estimator maps or rejects |
| Supplier missing some rates | Visible as empty cells in Compare; Normalise step handles |
| Two suppliers pricing same Resource at identical rate | No algorithmic tie-break; estimator chooses |
| Round 2 reduces scope (some Resources removed) | Removed Resources keep their current rates (last award held); round 2 only touches what’s in the new scope |
| Round 2 adds Resources | New Resources need to appear in the Export package for all participating suppliers |
| Estimate transitions to Reviewed mid-adjudication | No constraint — Adjudication can complete; on award, Items cascade Reviewed → Priced |
| Estimate transitions to Submitted during Adjudicated state | Adjudication is frozen; re-open blocked until Admin unlock |
| Snapshot divergence after award but estimator doesn’t want new rate | Don’t push through — snapshot holds. Anomaly persists as an acknowledged flag. |
7. Roles
| Capability | Admin | Lead Estimator | Estimator |
|---|---|---|---|
| Create Price Book Adjudication | ✅ | ✅ | ✅ |
| Edit scope / add suppliers / import returns | ✅ | ✅ | ✅ |
| Lock (Draft → Adjudicated) | ✅ | ✅ | ✅ |
| Re-open (Adjudicated → Draft) | ✅ | ✅ | ✅ |
All three roles can run the full workflow (foundation/roles-permissions.md §3 · Adjudications).
8. Worked example
8 labour rates across 3 suppliers:
Generate:
Scope = 8 Labour Resources (Carpenters, Electricians, Plumbers — variants)
Baseline rates from current Price Books
Status: Draft
Export:
Excel sent to Supplier A, B, C
Import:
Supplier A: returns all 8 rates, 5–10% above baseline
Supplier B: returns 7 (missed one Electrician variant), 3–8% below baseline
Supplier C: returns all 8, 10–15% below baseline
Each return stored as Adjudication Return record
Compare:
Side-by-side matrix visible
Estimator notes B's missing rate (gap)
Markup language differs between A/B and C — captured as inclusion notes,
land as Content Block instances on affected Items
Normalise:
Estimator adds normalisation row to B: "Electrician variant 3 — use A's rate $65/day"
(Transient; not written to Resources)
Transfer:
Estimator selects Supplier C
System replaces rates on 8 Resources:
Carpenter day rate: $78 → $68
Electrician day rate: $92 → $79
Plumber day rate: $85 → $72
(etc.)
Status: Adjudicated
Downstream:
Estimate's Worksheet Resources referencing the 8 Resources now carry old
snapshots ($78, $92, $85) against new Resource rates ($68, $79, $72).
Anomaly Review flags divergence.
Estimator pushes through on each → affected Items cascade Reviewed → Priced.