Estimate Sheet¶
| Status | Shipped |
|---|---|
| Linear | PIN-52 ↗ PIN-420 ↗ |
| Module | Estimating ↗ |
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:
- Budget = budget rate × qty, or a direct manual amount (the cell shows a "MANUAL" tag when overridden).
- Bid = the selected vendor quote, or Budget when "use budget as bid" is on. Exactly one quote per sub-line can be selected.
- Cost = Bid × (1 − Cut%).
- 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.
- 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.
Related docs¶
- Takeoff · Excel Imports — the other Estimate sub-tabs
- Proposals — consumes the active revision snapshot
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.