Capability matrix defining what each User Role can do in oxFlow. Pairs with the glossary User / Role definitions.

Related docs: glossary.md Β· concept-map.md


1. Roles overview

Three roles, hierarchically nested in capability:

RoleScopeOne-line summary
Admin 🟒Full workspaceSystem owner. Does everything Lead Estimator can, plus manages Users, Roles, lookups, branding, and integrations.
Lead Estimator 🟒Tender / Estimate controlThe accountable owner for pricing. Does everything Estimator can, plus creates Tenders and Estimates, manages Commercials, runs Adjudications, and locks/submits estimates.
Estimator 🟒Item-level workThe day-to-day build-up worker. Edits Items, Worksheets, Worksheet Resources, Variables, Calculations, Content Blocks. Cannot configure Estimates or run Commercials.

Key principles:

  • Roles are hierarchical β€” Admin βŠ‡ Lead Estimator βŠ‡ Estimator. If a capability is granted to Estimator, Lead Estimator and Admin automatically have it.
  • Every User has exactly one Role. Multi-role users not supported in v1.
  • Role is assigned in the oxFlow Admin page after M365 sync pulls in identity.
  • Admin capabilities are intentionally wide because Admins are the only ones who can affect system-wide configuration.

2. Scoping β€” who can do what, to what

Oxcon runs a flat team structure; oxFlow doesn’t need per-Tender or per-Estimate assignment-based permissions. Capability is driven entirely by Role:

  • Any Admin can do anything.
  • Any Lead Estimator can act on any Tender or Estimate in the workspace (including Lock, Submit, Publish).
  • Any Estimator can act on any Tender or Estimate in the workspace within the Estimator capability set.

The Lead Estimator field on an Estimate identifies the nominal owner for reporting and accountability β€” it does not gate access. Any Lead Estimator can still Lock, Submit, or Publish, regardless of whether they’re the assigned Lead.

Admin-managed lookups and system-level configuration (Integrations, User/Role management) remain Admin-only.

Concurrency: multiple Users can edit the same Estimate simultaneously, with explicit per-Item locks. When one User is actively editing an Item (and its Worksheet), other Users see that Item as read-only with β€œcurrently edited by [User]β€œ. Concurrent editing on different Items is unrestricted. Flagged 🟑 for Oxcon workshop discussion.


3. Permissions matrix

Legend: βœ… Allowed Β· ❌ Not allowed Β· πŸ”’ Allowed under condition (footnoted)

Tenders

CapabilityAdminLead EstimatorEstimator
View Tender listβœ…βœ…βœ…
View Tender detailsβœ…βœ…βœ…
Create Tenderβœ…βœ…βŒ
Edit Tender metadata (client, dates, location, status)βœ…βœ…βŒ
Upload / replace Tender Programβœ…βœ…βŒ
Link Program Tasks to Itemsβœ…βœ…βœ…
Transition Tender state (Active β†’ Submitted β†’ Won/Lost/Archived)βœ…βœ…βŒ
Delete Tender (hard delete)βœ…βŒβŒ

Estimates

CapabilityAdminLead EstimatorEstimator
View Estimate listβœ…βœ…βœ…
View Estimate detailsβœ…βœ…βœ…
Create Estimate (within a Tender)βœ…βœ…βŒ
Edit Estimate metadata (name, number, notes)βœ…βœ…βŒ
Assign Lead Estimator on Estimateβœ…βœ…βŒ
Transition Estimate state (In Progress β†’ Reviewed β†’ Submitted)βœ…βœ…βŒ
Archive Estimateβœ…βœ…βŒ
Delete Estimateβœ…βŒβŒ

Items & Worksheets

CapabilityAdminLead EstimatorEstimator
View Itemsβœ…βœ…βœ…
Create Itemβœ…βœ…βœ…
Edit Item attributes (description, code, Unit, quantity)βœ…βœ…βœ…
Set Item Type (Schedule / Normal / Provisional / Rate-Only)βœ…βœ…βœ…
Set Item Flags (Indirect Cost, Inactive)βœ…βœ…βœ…
Assign Estimator to Itemβœ…βœ…βŒ
Delete Itemβœ…βœ…βœ…
Edit Worksheet content (Variables, Calculations, Content Blocks)βœ…βœ…βœ…
Add Worksheet Resource / Worksheet Recipeβœ…βœ…βœ…
Push through snapshot update (accept new Resource rate)βœ…βœ…βœ…

Recipes

CapabilityAdminLead EstimatorEstimator
View Recipe Libraryβœ…βœ…βœ…
Create Recipe (from Library or promote from Item)βœ…βœ…βœ…
Edit Recipe definition (Input Parameters, Output Unit, Worksheet)βœ…βœ…βœ…
Delete Recipeβœ…βœ…βŒ
Use Recipe inside an Item’s Worksheetβœ…βœ…βœ…

Price Books & Resources

CapabilityAdminLead EstimatorEstimator
View Price Book list (user-created)βœ…βœ…βœ…
View Resources within a user-created Price Bookβœ…βœ…βœ…
Create Price Book β€” Project-Specificβœ…βœ…βœ…
Create Price Book β€” Externalβœ…βœ…βœ…
Create Price Book β€” Internalβœ…βœ…βŒ
Edit Price Book metadata β€” Project-Specificβœ…βœ…βœ…
Edit Price Book metadata β€” Externalβœ…βœ…βœ…
Edit Price Book metadata β€” Internalβœ…βœ…βŒ
Create Resource β€” Project-Specific / External Price Bookβœ…βœ…βœ…
Create Resource β€” Internal Price Bookβœ…βœ…βŒ
Edit Resource β€” Project-Specific / External Price Bookβœ…βœ…βœ…
Edit Resource β€” Internal Price Bookβœ…βœ…βŒ
Delete Price Bookβœ…βŒβŒ
Delete Resourceβœ…βœ…βŒ

Adjudications

CapabilityAdminLead EstimatorEstimator
View Adjudicationsβœ…βœ…βœ…
Create Price Book Adjudicationβœ…βœ…βœ…
Edit Price Book Adjudication (add suppliers, import prices, variances)βœ…βœ…βœ…
Lock Price Book Adjudication (Draft β†’ Adjudicated)βœ…βœ…βœ…
Re-open locked Price Book Adjudicationβœ…βœ…βœ…
Create Subcontract Packageβœ…βœ…βœ…
Edit Subcontract Package contents (add/remove Items)βœ…βœ…βœ…
Run Subcontract Package Adjudication (Draft β†’ Adjudicated)βœ…βœ…βœ…
Re-open Subcontract Package Adjudicationβœ…βœ…βœ…

Commercials & Submission

CapabilityAdminLead EstimatorEstimator
View Commercialsβœ…βœ…βœ…
Add/edit Rulesβœ…βœ…βŒ
Reorder Rules (sequence)βœ…βœ…βŒ
Delete Rulesβœ…βœ…βŒ
Edit Submission Value overridesβœ…βœ…βŒ
Run Anomaly Reviewβœ…βœ…βœ…
Dismiss / resolve Anomaly itemsβœ…βœ…βœ…

Publishing

CapabilityAdminLead EstimatorEstimator
View Publisher previewβœ…βœ…βœ…
Edit cover letter, conditions, inclusions/exclusionsβœ…βœ…βŒ
Generate Publisher Output (draft)βœ…βœ…βŒ
Publish (finalise submission)βœ…βœ…βŒ
Download published artifactβœ…βœ…βœ…

Admin & Lookups

CapabilityAdminLead EstimatorEstimator
Access Admin pageβœ…βŒβŒ
View Usersβœ…βŒβŒ
Trigger M365 User syncβœ…βŒβŒ
Assign / change User Rolesβœ…βŒβŒ
Manage Units libraryβœ…βœ…βŒ
Manage Categorizations (definitions and options)βœ…βœ…βŒ
Manage Flag Catalog (definitions and options)βœ…βœ…βŒ
Manage Modifier Catalog (definitions, math operations, default values)βœ…βœ…βŒ
Manage Codes (definitions, options, sync config)βœ…βŒβŒ
Manage Reference Rates libraryβœ…βœ…βŒ
Manage Content Block Definitionsβœ…βŒβŒ
Manage Branding (logo, Publisher styles)βœ…βœ…βŒ
Manage Company Roles on a Companyβœ…βœ…βŒ

Integrations

CapabilityAdminLead EstimatorEstimator
Configure Xero syncβœ…βŒβŒ
Trigger manual Xero syncβœ…βœ…βŒ
Configure M365 syncβœ…βŒβŒ
Configure Workbench integrationβœ…βŒβŒ
Trigger manual Workbench export (won project β†’ cost management)βœ…βœ…βŒ

4. Key gating rules (the β€˜hard’ boundaries)

These are the rules that really matter β€” where a wrong assignment would break things:

  1. Only Admin can assign or change Roles. Everything else cascades from here.
  2. Only Admin can manage Users, Codes, and Content Block Definitions. These have outsized system impact (identity, integration, shared content templates).
  3. Only Admin can delete Tenders and Price Books. Deletes are destructive; Lead Estimators archive but don’t delete.
  4. Estimators cannot modify Internal Price Books. Internal = shared, company-wide rate reference; changes need Lead Estimator or Admin approval.
  5. System-generated Price Books are backend-only. Not visible in any UI to any Role. Managed entirely by the Adjudication workflow.
  6. Lead Estimators can manage some shared config. Units, Categorizations, Flag Catalog, Modifier Catalog, Branding, and Company Roles can be edited by Lead Estimator β€” these are frequently touched during day-to-day work and don’t warrant Admin-only friction. Codes remain Admin-only due to integration linkage.