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 Progress or Reviewed). 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_date per 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 = true on their Adjudication Return, records awarded_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_number increments.
  • 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

SituationHandling
Supplier returns arrive with unit mismatchesImport Wizard flags; estimator maps or rejects
Supplier missing some ratesVisible as empty cells in Compare; Normalise step handles
Two suppliers pricing same Resource at identical rateNo 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 ResourcesNew Resources need to appear in the Export package for all participating suppliers
Estimate transitions to Reviewed mid-adjudicationNo constraint — Adjudication can complete; on award, Items cascade Reviewed → Priced
Estimate transitions to Submitted during Adjudicated stateAdjudication is frozen; re-open blocked until Admin unlock
Snapshot divergence after award but estimator doesn’t want new rateDon’t push through — snapshot holds. Anomaly persists as an acknowledged flag.

7. Roles

CapabilityAdminLead EstimatorEstimator
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.