How It Works¶
Hardhat Flow organizes every project around a single, linear pipeline. Work enters the system as a Bid, advances to a Job when approved, generates an Invoice, and closes out when payment is complete. This page explains each stage, who controls the transitions, and what happens automatically.
The Full Lifecycle¶
New Bid
└─► Bid Awaiting PO
└─► Bid Approved ──► Job Created (automatic)
└─► Ready to Start
└─► In Progress
└─► Completed / Needs Invoice
└─► Invoice Submitted
└─► Partially Paid
└─► Paid
└─► Workflow Complete
At any point an Owner can cancel a bid or job, and an Owner can reject a bid that has not yet been approved.
Stage 1: Bid¶
A bid represents a proposed scope of work with associated pricing and details.
Available to: Owner, Project Manager
Only Project Managers and Owners can create and edit bids. Accounting cannot create bids. Supervisors and Badge Workers have no access to bids at all.
Bid Statuses¶
| Status | Meaning | Who sets it |
|---|---|---|
| New Bid | Freshly created, work in progress | Auto-set on creation |
| Bid Awaiting PO | Submitted and waiting for purchase order | Project Manager or Owner |
| Bid Approved | Client approved — triggers automatic Job creation | Owner only |
| Bid Rejected | Declined — no job created | Owner only |
| Bid Cancelled | Withdrawn at any time | Owner only |
Only Owners can approve, reject, or cancel bids.
Project Managers can create and edit bids and advance them to Awaiting PO, but cannot approve, reject, or cancel.
Auto-Job Creation¶
When an Owner sets a bid to Bid Approved, Hardhat Flow automatically creates a Job linked to that bid. The job is set to Ready to Start and the assigned Project Manager receives an SMS notification. No manual step is required.
Stage 2: Job¶
A job represents active work being executed in the field.
Available to: Owner, Project Manager, Supervisor (assigned only), Badge Worker (assigned only)
Job Statuses¶
| Status | Meaning | Who sets it |
|---|---|---|
| Ready to Start | Job created, not yet underway | Auto-set on bid approval |
| In Progress | Active field work | Project Manager or Owner |
| Completed / Needs Invoice | Work done, awaiting invoicing | Project Manager or Owner |
| Job Cancelled | Job halted | Owner only |
Job Assignment¶
Each job has exactly:
- One Project Manager — responsible for the job end-to-end
- One Supervisor — oversees field execution
- One or more Badge Workers — perform the work (also used as site escorts)
Change orders on the job detail page track approved add-on scope and amounts beyond the original PO. See Change Orders.
Stage 3: Invoice¶
Once a job reaches Completed / Needs Invoice, the Accounting team creates an invoice.
Available to: Owner, Accounting
Project Managers, Supervisors, and Badge Workers cannot create or edit invoices.
One invoice per job
Each job may have exactly one invoice. Multiple payments against that invoice are allowed, but you cannot create a second invoice for the same job.
Invoice Statuses¶
| Status | Meaning | Who sets it |
|---|---|---|
| Invoice Submitted | Invoice sent to client | Accounting or Owner |
| Partially Paid | One or more payments received, balance remains | Auto-set on first payment |
| Paid | Full balance received | Auto-set when balance reaches zero |
| Workflow Complete | Final state — job and invoice fully closed | Set by system |
Stage 4: Payment¶
Payments are recorded against an invoice by the Accounting team or Owner. Each payment reduces the outstanding balance. When the balance reaches zero, the invoice status advances to Paid and the system automatically sets the workflow to Workflow Complete.
Full Status Transition Reference¶
Bids¶
New Bid → Bid Awaiting PO → Bid Approved
→ Bid Rejected (Owner only)
→ Bid Cancelled (Owner only, any time)
Bid Awaiting PO → Bid Cancelled (Owner only, any time)
Bid Approved → Bid Cancelled (Owner only, any time)
Jobs¶
Ready to Start → In Progress → Completed / Needs Invoice
→ Job Cancelled (Owner only)
In Progress → Job Cancelled (Owner only)
Invoices¶
Invoice Submitted → Partially Paid → Paid → Workflow Complete
Status transitions are enforced server-side.
The API rejects any transition that does not follow the allowed sequence. Skipping statuses is not possible.