Build a unit's estimate
Fill in a unit's Bill of Quantities — sections, line items, and a contingency — in a builder that saves as you type.
Overview
An estimate is a Bill of Quantities: a list of the work a unit needs, grouped into sections, each line priced by quantity and rate. It is what the project's budget is built from, and it is what gets submitted for approval before work can start.
On a multi-unit project every unit carries its own estimate, reached from the unit itself. On a single-unit project there is one estimate for the whole job, under the project's Estimate tab. The builder is identical either way.
Two things about it are unlike the rest of RockOps:
- There is no save button. Every keystroke is written automatically after a short pause, and a small indicator beside the version number reports the state — Saving…, then ✓ Saved, or ⚠ Save failed if something went wrong. Leaving the page while it still reads Saving… risks losing the last edit.
- The table is edited in place. Cells look like text until you click them, at which point they become inputs. There is no row form and no dialog.
Every figure is computed rather than entered. A line's total comes from its quantity and rate, a section's subtotal from its lines, and the grand total from the sections — all in whole paise, so the displayed lines always sum exactly to the displayed total.
Before you start
The project must still be in Draft and the estimate must still be in draft status. Once an estimate is submitted it locks and the builder switches to a read-only view; if the project has moved on while the estimate is still draft, the same read-only view appears with a banner naming the project's current status. Neither is editable, and there is no override.
Editing requires Administrator, Owner, or Project Manager.
If you intend to submit this estimate afterwards, two things have to be true first, and neither is set on this screen: the project needs at least one milestone, and the estimate total must be more than zero. Both are checked only at submit time, so it is worth knowing before you get there.
1. Open the unit's estimate
Each unit carries its own Bill of Quantities. An estimate with nothing in it shows a Start estimate button instead of a table — either route adds the first section.

2. Name the section and set its kind
Sections group the bill into parts you can total separately. Kind is one of Labour, Materials, Overheads, or Custom, and a new section starts on Custom.

3. Enter the first line item
Click any cell to edit it. Units are typed in caret form — m^3 — and the table renders them as m³. The line total is computed from quantity and rate; there is nothing to type in that column.

4. Add the remaining lines
Add line item appends a row to this section. The section's own subtotal sits in its header and updates as you type.

5. Set a contingency and add notes
Contingency is a percentage of the grand total, in half-point steps up to 100. It is added on top rather than distributed across the lines, so it shows as its own row in the totals.

6. The estimate totals itself
There is no save button — every change is written automatically, and the indicator beside the version number reports it. The totals panel breaks out each section, the grand total, the contingency, and the total with contingency.

Field reference
Section
| Field | Required | Rules |
|---|---|---|
| Section name | No | Free text. A section left unnamed shows as (Unnamed) in the totals panel rather than being rejected. |
| Kind | Yes | Labour, Materials, Overheads, or Custom. A new section starts on Custom. |
Line item
| Field | Required | Rules |
|---|---|---|
| Description | No | Free text — the work being priced. |
| Unit | No | Typed in caret form and rendered as a superscript: m^3 displays as m³. The same convention as the material catalogue. |
| Qty | No | A number; new lines start at 1. |
| Rate (₹) | No | Rupees per unit. Held internally as paise. |
| Total | — | Not editable. Quantity times rate. |
Estimate
| Field | Required | Rules |
|---|---|---|
| Contingency % | No | 0 to 100, in steps of 0.5. Applied to the grand total and shown as its own line — it is not spread across the individual rates. |
| Notes | No | Free text, for assumptions and caveats that don't belong in a line description. |
Nothing here is individually required, which is why an estimate can sit at zero and only be refused at submit time.
Best practices
- Group by trade or by stage, and name the sections. Section subtotals are the only breakdown the totals panel offers, so sections are what makes a long bill readable. (Unnamed) rows in the totals panel are a sign one was skipped.
- Set Kind honestly. Labour, Materials, and Overheads are what let the numbers be read as a cost mix rather than one long list; leaving everything on Custom loses that for free.
- Put assumptions in Notes, not in descriptions. Line descriptions are what the bill reads as; the reason a rate was chosen belongs in the notes field under the table.
- Wait for the indicator to settle before navigating away. There is nothing to press, so Saving… is the only signal that work is still in flight.
Troubleshooting
"⚠ Save failed" — an auto-save did not reach the server. The edit is still on screen but not stored. Make any further change to trigger another save, and if it keeps failing, copy the affected lines out before leaving the page.
The cells won't accept typing — the estimate is no longer editable. Either it has been submitted or approved, or the project has left Draft. The banner above the table says which.
"Estimate is not in draft status" — the estimate was already submitted. Withdraw it to get back to a draft, or revise it if it has been approved or rejected.
"At least one master milestone is required before submitting" — the project has no milestones. Add one on the project's Milestones tab; this is a project level requirement, not something the estimate itself can satisfy.
"Estimate total must be greater than zero before submitting" — every line is missing a quantity or a rate. A contingency percentage alone does not create a value; it multiplies a grand total that is still zero.
A section shows as "(Unnamed)" — its name field was left blank. That is allowed, so it is easy to miss until the totals panel shows it.
Add units to a project
Define a unit type, then create a block of units from it in one batch — the fastest route from an empty multi-unit project to something estimable.
Submit and approve an estimate
Move an estimate from draft to approved — what locks, who decides, and how to reopen one that has already been signed off.