Extracted from ../../foundation/business-rules.md.


  • v0.11 — Batch C review round 2 (Commercials, Tenders, Programs, Companies, Codes):

    • BR-070 — updated text: clarified that rules apply to the running state of each rule’s scope (not original baseline). Order determines final totals.
    • BR-074a (new) 🟢 — Lump Sum Rule scope across multiple Items: proportional distribution by cost share. Formula: item_share = item_cost / total_in_scope_cost × lump_sum_amount.
    • BR-092 — updated text: Tender state transitions; Admin + Lead Estimator can trigger transitions (role-based).
    • BR-093a (new) 🟢 — Estimate In Progress → Reviewed transition is automatic when all Items = Reviewed. Reviewed → In Progress can happen manually or via cascade (e.g., BR-049a rate change).
    • BR-104 (new) 🟢 — Program Task durations adopted directly from MS Project export; oxFlow does NOT recalculate (no working-day calendar math).
    • BR-105 (new) 🟢 — Summary-task handling: only summary task duration exposed as Variable; subtasks not exposed.
    • BR-106 (new) 🟢 — Program re-upload conflict resolution: Task ID governs. Same ID = same task (update fields). New ID = new task. Orphans flagged via Import Wizard.
    • BR-080 — updated text: Xero → oxFlow is one-way; no Phase 2 bi-directional plan.
    • BR-080a (new) 🟢 — Archival cascade: Company archived in Xero auto-archives in oxFlow on next sync. Archived Companies remain visible for history; read-only for new relationships.
    • BR-120a (new) 🟢 — Categorizations and Categorization Options use soft-delete (archive). Archived entries visible on historical entities; not available for new selections. Can be un-archived.
    • BR-121a (new) 🟢 — Categorization inheritance: sub-Items inherit parent Item’s Categorization Options at creation. Estimator can override. Parent changes do NOT retroactively propagate.
    • BR-125 — updated text: Codes scope constrained to Items and Resources only (not Tenders/Estimates).
    • BR-125a (new) 🟢 — Custom Code creation is Admin-only. Lead Estimators cannot create new Codes; can only assign existing ones.
    • BR-128 — updated text: Codes sync is one-time initial migration + on-demand manual refresh (not scheduled).
    • BR-144 — added clarification: Reference Rates are not versioned; edits overwrite. Historical comparison at Anomaly Review Layer 3 uses archived Price Books, not Reference Rate versions.
    • Commercials & Submission: 6 → 7 rules (1 new, BR-070 updated). Tenders & Estimates: 6 → 7 rules (1 new, BR-092 updated). Programs & Tasks: 4 → 7 rules (3 new). Companies & Users: 7 → 8 rules (1 new, BR-080 updated). Categorization, Flags & Codes: 12 → 15 rules (3 new, 2 updated). Reference Rate: BR-144 clarified (no count change).
    • Total: 114 → 123 rules. Locked 🟢: 79 → 88 (9 new + BR-070 scope clarification counts). Working 🟡: unchanged at 31. Open 🔴: unchanged at 3.
  • v0.10 — Batch C review (Price Book, Adjudication, and Subcontract Package specs):

    • BR-053 — promoted to 🟢 Locked. Updated text: Resources inherit their parent Price Book’s scope; no per-Resource scope override in v1.
    • BR-053a (new) 🟢 — Price Books auto-archive when scope_end_date < today. Logical check at query time; status auto-transitions to Archived.
    • BR-053b (new) 🟢 — Multiple Price Books per Supplier for the same date range are allowed (e.g., different product categories). Names must be unique workspace-wide.
    • BR-062 — updated text: supports multiple rounds — each round enters Draft → Adjudicated; re-awarding produces a new round (consistency with Subcontract Package Adjudication).
    • BR-064 — updated text: Adjudications can be re-opened at any time while parent Estimate is in editable state (In Progress / Reviewed). Once Submitted/Won/Lost/Archived, frozen (BR-094 cascade).
    • BR-065 — updated text: Items can be added/removed while current Adjudication round is in Draft; once locked (Adjudicated), Item membership frozen until re-opened.
    • BR-068b (new) 🟢 — Adjudication return import uses Import Wizard; Excel primary format; smart column-mapping, preview validation, manual override.
    • BR-068c (new) 🟢 — Variance, inclusion, exclusion notes stored as Content Block instances on affected Item’s Worksheet (not Adjudication).
    • BR-069 (new) 🟢 — Supplier/Subcontractor role enforcement validated at first gate (add Company or import their return).
    • BR-069a (new) 🟢 — Subcontract Package has no pre-qualified list; selection lives in Adjudication workflow (step 1: Generate).
    • Price Books & Suppliers: 5 → 7 rules. Adjudications: 10 → 14 rules. Locked 🟢: 74 → 79 (4 new + BR-053 lock upgrade).
    • Total: 108 → 114 rules. Working 🟡: 31 (unchanged). Open 🔴: 3 (unchanged).
  • v0.9 — Worksheet Resource rate-change mechanics locked (Recipe/Resource BR-review):

    • BR-047 (new) — Default rate-edit: per-instance override on the Worksheet Resource snapshot (simplest; matches existing divergence semantics)
    • BR-048 (new) — “Apply to this Estimate” bulk override — retroactive across all matching Worksheet Resources in the current Estimate
    • BR-049 (new) — “Fork to new Resource” creates a new Resource in an auto-generated Project-Specific Price Book for the Estimate
    • BR-049a (new) — Rate change cascades affected Items from Reviewed back to Priced (automatic; review must be re-done)
    • Worksheets category: 7 → 11 rules. Total: 104 → 108 rules.
    • Locked: 74 (no new locks). Working 🟡: 27 → 31. Open 🔴: 3 (unchanged).
  • v0.8 — Flag Catalog + Modifier Catalog model locked (Resource entity spec v0.3):

    • BR-023 reworded — Flag Catalog is admin-managed with scope per entry; narrower, curated scope
    • BR-027 (new) — Modifier Catalog definition: name, scope, math operation, value unit, default
    • BR-028 (new) — Modifier snapshot flow: Resource → Worksheet Resource defaults; per-instance override allowed (no propagation back)
    • BR-029 (new) — Modifier math application order: quantity_multiplier → rate_adder → lump_sum_add → total_multiplier
    • BR-040 extended — snapshot now includes modifier default values (in addition to rate, Unit, flags)
    • BR-026 moved from 🔴 to 🟡 — model locked; only catalog seeding entries + defaults pending
    • Total rules: 104 (was 101). Resources category: 10 (was 7). Working 🟡: 25 (was 22). Open 🔴: 3 (was 4).
  • v0.7 — Item Status expansion (driven by Item entity spec v0.3):

    • BR-019a (new) — Item Status derivation (Unpriced / Plugged / Priced auto-derived from Worksheet + plug_rate)
    • BR-019b (new) — plug_rate vs Worksheet cost mutual exclusion
    • BR-019c (new) — Submission block (Estimate blocked while any Item is Unpriced/Plugged; preview allowed)
    • BR-019d (new) — Distinction between Plugged (Item Status) and Plug Rate (Resource flag)
    • BR-094 updated with cross-ref to BR-019c submission gate
    • Total rules: 101 (was 97). Working 🟡: 22 (was 18).
  • v0.6 — gap-analysis pass (per gap-analysis-batch-a.md):

    • BR-019 (new) — Risk Item as a distinct Item Type
    • BR-035 (new) — copy/paste for Items (within Estimate, across Estimates, across Tenders)
    • BR-046 (new) — Production Rate as a Variable pattern linking quantity and duration
    • BR-068 / BR-068a (new) — six-step Adjudication workflow applicable to BOTH Price Book and Subcontract Package flavours
    • BR-095 (new) — real-time collaboration with explicit per-Item locking; flagged for Oxcon discussion
    • BR-144 / BR-145 / BR-146 (new) — Reference Rate library + two-tier matching (rules-first Alpha + AI-assist Release)
    • Anomaly Review reframed as 3-layer (deterministic / Reference Rate / AI historical comparison)
    • BR-011 Item Type list updated to include Risk
    • Total rules: 97 (was 88). Open 🔴: 4 (same). Working 🟡: 18 (was 12).
  • v0.5 — consistency pass:

    • BR-093 reworded — Lead Estimator is nominal accountability, NOT an access-control gate. Aligns with roles-permissions.md §2 flat model. Resolves cross-doc contradiction.
    • BR-045 added cross-ref to domain-model §9 (same open issue in both).
  • v0.4 — discussion-item lock-in pass:

    • BR-024 resolved 🟢: unification adopted — all Subcontract Resources live in a Price Book (user-created or system-generated)
    • BR-040 resolved 🟢: snapshot mechanism confirmed
    • BR-054 (new) 🟢: system-generated Price Books hidden from default list; source_type field distinguishes user vs adjudication
    • BR-063 rewritten: Subcontract Package Adjudication creates/updates a system-generated Price Book; Items reference Resources in it
    • BR-067 rewritten: re-opening an Adjudication preserves the system-generated Price Book until re-award
    • BR-090 resolved 🟢: Client stays at Tender level; multi-client scope handled as separate Tenders
    • Total rules: 88 (was 87). Open 🔴: 4 (same). Working 🟡: 12 (was 15).
  • v0.3 — second BR review pass:

    • BR-018 (new) — Normal Items can be flagged Inactive (soft-disable; retains record, excluded from costing)
    • BR-024 — re-opened (🟡) with unification proposal (Subcontract Adjudication creates a Price Book)
    • BR-030 — expanded: Recipe declares an Output Unit; input parameters drive calc, output unit declares how the result is expressed when used
    • BR-032 — added third access path (create new Recipe from scratch within an Item’s Worksheet)
    • BR-040 — detailed snapshot mechanism explanation with worked example; status 🟡 pending confirmation the mechanism matches your mental model
    • BR-073 — promoted from 🔴 to 🟡 with a proposed v1 list of 8 scope targets
    • BR-090 — re-opened (🟡) with multi-client discussion (Client at Tender vs Estimate level)
    • BR-093 — expanded: Lead Estimator is the access-control anchor, not just accountability
    • BR-094 — expanded: Tender state cascades to Estimates (Won keeps one + archives others; Lost/Archived archives all)
    • BR-103 — resolved 🟢: Program Task ↔ Item is M:M, with examples
    • BR-127 — updated to tiered enforcement model (soft in Estimate/Publisher, hard block at Cost Management export)
    • BR-143 (new) — Workbench cost management integration
    • Total rules: 87 (was 85). Open 🔴: 4 (was 5). Working 🟡: 15 (was 10).
  • v0.2 — BR review pass:

    • BR-032 — listed Recipe Builder access paths (Item Worksheet, Recipe Library)
    • BR-040 — snapshot now covers rate, Unit, and flags (not wastage); wastage is estimator-controlled
    • BR-063 — reworked to “creates or replaces” semantics (one Subcontract Resource per Item per Package)
    • BR-066 — “Awarded” → “Adjudicated” throughout
    • BR-067 — resolved 🟢: existing Resources persist until re-adjudicated
    • BR-071 — Rate Adjustment dropped as a Rule type (covered by Submission Value override)
    • BR-074 — resolved 🟢: linear application only, no dependencies or conflict resolution
    • BR-075 — resolved 🟢: Publisher keeps latest version only
    • BR-094 — resolved 🟢: Estimate fully locked post-submission; moves to project on Tender = Won
    • BR-110 — simplified: LS is just a standard Unit
    • BR-112 — moved to 🟡 with nuanced heuristic needed (simple mismatch is not enough)
    • BR-125–128 (new) — Codes concept added: required, admin-defined, integration-linked classifiers distinct from Categorization
    • BR-130 — “Risk Breakdown” → “Risks”
    • Total rules: 85 (was 81). Open 🔴: 5 (was 12). Working 🟡: 10 (was 0 explicit, some previously 🟢 are now 🟡).