Skip to content

Estimate Sheet

StatusShipped
LinearPIN-52 ↗ PIN-420 ↗
ModuleEstimating ↗

The spreadsheet heart of preconstruction: CSI scope lines per section, up to 8 vendor quote columns, and the Budget → Bid → Cut% → Cost chain feeding a live contract price. Takeoff sub-tab and Excel import have their own walkthroughs; this page covers the grid itself.

Prerequisites

  • Role: Estimator or Chief Estimator. An Owner/Exec login for the profitability row; an Assistant PM login to confirm the whole tab is absent.
  • Bid state: any bid (status Estimating is the natural habitat).

1. Create the estimate

Bid → Estimate tab → empty state "No estimate yet"Create Estimate. Verify the seeded defaults: three sections (EQUIPMENT / ACCESSORIES / LABOR), 20% markup, Open Shop labor, 4 vendor columns, 0% tax/insurance/overhead.

2. Add scope lines

Each section ends with an italic "+ Add scope line..." ghost row → type into "Search CSI scope..." → pick a CSI code from the dropdown, or type a custom code/name and press Enter to create a custom scope. Each new scope gets one "Base" sub-line and empty quotes across all vendor columns.

On the local stand (2026-07-08) the CSI suggestion dropdown never appeared for any query — only the custom-scope Enter path worked. Check whether the CSI library is seeded in your environment before filing; if it's seeded and still empty, that's a bug.

Right-click a row for the context menu: Assign to Alternate / Create Substitute / Duplicate / Add Sub-Line / Delete. Keyboard: Ctrl+D duplicate, Ctrl+Z/Y undo/redo — delete a scope line and undo it back.

3. The money chain

Columns: Code / Description / Vendor 1…N / +− / Budget / Bid / Cut% / Cost / Comments. The logic to verify with a calculator:

  1. Budget = budget rate × qty, or a direct manual amount (the cell shows a "MANUAL" tag when overridden).
  2. Bid = the selected vendor quote, or Budget when "use budget as bid" is on. Exactly one quote per sub-line can be selected.
  3. Cost = Bid × (1 − Cut%).
  4. Footer: MATERIALS · LABOR · TAX% · JOB COST · MARKUP% · CONTRACT PRICE. LABOR-section totals roll into Labor; everything else into Materials. Alternates and inactive substitutes are excluded from totals.
  5. Reverse markup: click the contract price and type a target — markup % recomputes.

All displayed amounts are whole dollars (no cents anywhere in the UI); inputs tolerate $, commas and %.

Vendor columns: drag headers to reorder, +/− adds/removes columns (min 1, max 8). Ctrl-click several vendor cells → a floating bar with SUM and Compare Selected / Compare Package → the compare modal picks a winner per line (or awards the whole package), which becomes the Bid.

4. Sub-tabs

Estimate · Equipment Schedule · Takeoff · Award · Alternates · Clarifications (deep-linkable via ?subtab=).

  • Equipment Schedule: Add Equipment manually or Import from Spec (AI extraction from a spec PDF with Accept/Rerun preview — shipped and testable). Grid tracks Tag/Mfr/Model/Qty/vendor quotes/lead times.
  • Alternates: groups from grid alternateTags + Add Manual Alternate; per-alt totals and markup. With alternates present, the footer gains Base Bid / Alt tabs.
  • Award and Clarifications: "coming soon" placeholders — not bugs.

5. Revisions

With zero revisions the toolbar shows just an Add Revision button; once revisions exist it becomes the Revision dropdown (switch/compare). Viewing a non-active revision shows a yellow "Viewing {label} (read-only)" banner and hides write actions (including Extract Assembly). The active revision is what Proposals snapshot.

6. What's intentionally off

  • Award bid toolbar button — disabled, "Coming soon".
  • Export to Excel (⋯ menu) — present but disabled.
  • Extract Assembly — appears only with the assembly-extraction permission and on the active revision.
  • AI xlsx estimate ingestion — September spike, doesn't exist; don't confuse it with the shipped Import from Spec (equipment) and Takeoff Excel import.

7. Role gating

  • No Estimate tab at all without estimating read access (Assistant PM & most non-estimating roles).
  • Profitability footer row (Gross/Net Profit, margin, Insurance/Overhead %) only for Owner, Executive, Administration, Senior PM — a plain Estimator sees the totals row but not profitability.

Verification Checklist

  • Create Estimate seeds 3 sections / 20% / Open Shop / 4 vendor columns
  • Ghost row adds a CSI scope with a Base sub-line; undo restores a deleted scope
  • Selecting a vendor quote drives Bid; Cost = Bid × (1−Cut%); footer math checks out by hand
  • Reverse-markup from contract price recomputes markup %
  • Vendor columns capped at 8; compare modal awards a package across lines
  • Alternates excluded from base totals; footer Base/Alt tabs switch correctly
  • Non-active revision is read-only with the yellow banner
  • Estimator sees no profitability row; Owner does; Assistant PM sees no tab
  • Presence indicator shows Synced after edits settle (no stuck "Saving")
  • No console errors throughout

Known Issues / Current Gaps

  • 🕐 Award sub-tab, Clarifications, toolbar "Award bid", and Export to Excel are all visible-but-disabled placeholders.
  • ⚠ Concurrent editing: two users on the same estimate see presence avatars; if edits collide watch the Synced/Unsaved indicator — anything stuck on "Saving" is a bug.

Updating this walkthrough

Run the full flow yourself end-to-end. If it passes, bump last_verified: in the frontmatter to today's date. If any step fails, fix the doc or the code in the same PR — drift is the enemy.