Bids¶
Available to: Owner, Project Manager, Accounting, Supervisor (read-only)
A bid is the starting point for all work in Hardhat Flow. It captures the full scope, logistics, and financial details of a proposed project before any work begins. Once a bid is approved, a Job is automatically created from it — at which point the bid becomes read-only.
What is a Bid?¶
A bid represents a proposal submitted to a client for a defined scope of work. It tracks everything needed to price and plan the job: location, staffing, materials, permits, inspections, and financial terms.
Bids flow through an approval process. Only an Owner can approve or reject a bid. A Project Manager creates and manages bids on behalf of their assigned projects.
Bid Fields¶
Project Details¶
| Field | Description |
|---|---|
client |
The company or individual the work is being performed for. Use + New Client on the New Bid form to create a client inline. |
contact |
The client-side point of contact for this bid. Select from the chosen client's contacts, or use + New Contact to add one inline. |
location |
Physical address or site description for the work. |
pm |
The Project Manager assigned to this bid. |
supervisor |
The field Supervisor responsible for execution. |
scope |
Free-text description of the work to be performed. |
measurements |
Room sizes listed as room name + dimensions (e.g. Lobby: 20x30 ft). |
equipment_needed |
Equipment name and quantity only. |
estimated_days |
Estimated number of days to complete the work. |
expected_completion_date |
Estimated calendar date the work will be finished. |
Logistics¶
| Field | Description |
|---|---|
shift_type |
Whether the work is a day or night shift. |
escort_name |
Legacy free-text escort name on older jobs. Assign Badge Workers from Settings → Team (or Escorts in the nav), then pick them on each job under Job Operations. |
materials_status |
Current status of materials procurement. One of: None, Needed, Ordered, Shipped, Delivered. |
permits_needed |
Boolean — whether permits are required for this job. |
inspections_status |
Current inspection status. One of: None, Needed, Requested, Pass, Fail. |
po_number |
The client's Purchase Order number, required before bid approval in most workflows. |
Financials¶
| Field | Description |
|---|---|
bid_price |
The total price quoted to the client for the work. |
taxable |
Boolean — whether this bid is subject to sales tax. Tax rate is pulled from CompanySettings. |
Flags¶
| Field | Description |
|---|---|
priority |
Boolean — marks the bid as high priority. Triggers an SMS notification to PM and Supervisor. Surfaced prominently on the dashboard feed. |
blocked |
Boolean — indicates the bid cannot proceed due to an unresolved issue. |
blocked_reason |
Free-text explanation of why the bid is blocked. Required when blocked is set to true. |
Status Machine¶
| Status | Description | Who Can Set |
|---|---|---|
New Bid |
Default status on creation. Bid is being drafted. | System (on create) |
Bid Awaiting PO |
Bid has been submitted for approval and is awaiting the client's Purchase Order. | Project Manager |
Bid Approved |
Bid has been accepted. A Job is automatically created and the user is redirected to the new Job. | Owner |
Bid Rejected |
Bid was declined. No job is created. | Owner |
Bid Cancelled |
Bid was withdrawn before a decision was made. | Owner |
New Bid → Bid Awaiting PO → Bid Approved (creates Job, redirects to Job detail)
↘ Bid Rejected
Bid Cancelled (from any pre-approved state, Owner only)
Approval Flow (UI)¶
From the Bid detail page:
- New Bid status: A Submit for Approval button is shown. Clicking it transitions the bid to Waiting on Approval (
Bid Awaiting PO). - Waiting on Approval: PM or Owner can click Edit Bid, revise scope/measurements/equipment, and Save & Resubmit. Owner/Admin also see Approve and Reject.
- Edit Bid Proposal opens the document editor to customize the PDF before download.
Editing while waiting on approval
Bids in Waiting on Approval can be edited by the Project Manager or Owner without extra confirmation. Once a bid is Approved and linked to a job, only the Owner can edit (with confirmation), and changes sync to the job.
Approved bids require Owner authorization to edit
After approval, only an Owner can make field edits. Owners will see a confirmation prompt before changes are saved. Confirmed edits are automatically synced to the linked Job.
The Blocked Flag¶
Setting blocked = true on a bid signals that something is preventing progress — a missing permit, unresolved client question, or materials delay.
blocked_reasonmust be provided when blocking.- Blocked bids are surfaced as alerts in the dashboard feed for the assigned PM and Owner.
- Unblocking a bid clears the alert.
The Priority Flag¶
Setting priority = true marks a bid as urgent.
- An SMS is sent immediately to the assigned PM and Supervisor.
- Priority bids appear at the top of the dashboard alert panel.
- The flag can be toggled by the PM or Owner at any time before approval.
PDF Generation¶
A printable bid proposal PDF can be generated at any time.
- Available to Owner, PM, and Accounting roles.
- The PDF uses a standardized proposal layout so every client-facing bid has the same structure.
- Header includes your company name and address.
- Proposal section includes:
BID PROPOSALtitle and the date generated- contact name and client name lines
- intro text describing the proposed work
- job location
- numbered scope lines from the bid scope
- a final supervision line with your company name
TOTALfrom the bid priceBid Prepared Bywith the name, email, and phone for the user who generated the PDF- The PDF reflects the bid's current values at the moment it is generated and is not stored as a separate record.
Use PDF export when sharing bid details with clients or for record-keeping outside the system.
Edit Permissions by Status¶
| Bid Status | Who Can Edit |
|---|---|
New Bid |
Owner, Project Manager (any role with bid access) |
Bid Awaiting PO |
Owner / Platform Admin only — confirmation required |
Bid Approved |
Owner / Platform Admin only — confirmation required, job is synced |
Bid Rejected |
No one — terminal state, locked |
Bid Cancelled |
No one — terminal state, locked |
Owner Confirmation Flow¶
When an Owner attempts to edit a bid in Awaiting PO or Approved status, the API returns HTTP 409 with:
{
"requires_confirmation": true,
"has_job": true,
"warning": "This bid has progressed beyond New status. Changes will also update the linked job. Send the request again with X-Confirm-Override: true to proceed."
}
The client must re-send the request with the X-Confirm-Override: true header to apply the changes.
Job Sync on Confirmed Edit¶
When an Owner confirms an edit on an Approved bid that has a linked Job, the following fields are automatically synced from the bid to the job:
project_manager, supervisor, escort, escort_name, po_number, permits_list, priority, materials_status, inspections_status, completion_date (from expected_completion_date)
Staff assignments for PM and Supervisor are also updated on the Job to match the bid.
Role Access¶
| Action | Owner | PM | Accounting | Supervisor | Badge Worker |
|---|---|---|---|---|---|
| Create bid | Yes | Yes | No | No | No |
Edit bid (new_bid) |
Yes | Yes | No | No | No |
| Edit bid (progressed, with confirm) | Yes | No | No | No | No |
| View bid | Yes | Yes | Yes | Yes (assigned) | No |
| Submit for PO | Yes | Yes | No | No | No |
| Approve bid | Yes | No | No | No | No |
| Reject bid | Yes | No | No | No | No |
| Cancel bid | Yes | No | No | No | No |
| Set priority flag | Yes | Yes | No | No | No |
| Set blocked flag | Yes | Yes | No | No | No |
| Generate PDF | Yes | Yes | Yes | No | No |
Supervisors can view bids they are assigned to, but cannot edit any bid fields.