Change Orders¶
| Status | Shipped |
|---|---|
| Linear | PIN-53 ↗ PIN-473 ↗ PIN-484 ↗ |
| Module | Change Orders ↗ |
Four flavors of contract change on a project: PCO (request to the GC — renamed from COR in PIN-484), CO (approved change), ICO (internal, against profit), and Backcharge. PCOs have their own lifecycle ending in a server-spawned draft CO on approval. Profit numbers are visible only to the exec tier.
Prerequisites¶
- Role: PM or Assistant PM for the main pass; an Owner/Executive login for Proceed and profit checks; an Estimator login to confirm read-only.
- Project state: any project; cost codes present make the per-line "Charges to cost code" select appear.
- Test data: PDFs from
docs-pdfs/for attachments.
1. Open the log¶
Project detail → Change Orders tab (top-level, not nested). Top-down: a type legend strip (PCO blue / CO green / ICO orange / BC red), five KPI cards (Approved COs / Pending PCOs / Internal COs / Backcharges / Net CO Impact), toolbar with search, type filter buttons All / PCO / CO / ICO / Backcharge, Show history toggle (includes superseded), PDF + CSV export, New Change Order.
Table columns: # / TYPE / DESCRIPTION / TOTAL / STATUS / BALL IN COURT / COST / SCHED / LINKED RFI / AGING + a paperclip attachment count. $ in COST and S in SCHED render only when the impact is Yes; AGING shows Nd only on pending statuses.
2. Create one of each type¶
New Change Order — one form for all four types:
- Type (immutable after create): PCO — request to GC, CO — approved change order, ICO — internal (against profit), Backcharge.
- CO # — read-only preview ("Assigned on save"), per-project-per-type sequence:
PCO-001,CO-001,ICO-001,BC-001. The preview re-peeks when you change Type. - Description * , scope line items (Qty × Unit $ with running Total, optional cost-code charge per line), Cost Impact / Schedule Impact (Yes/No/TBD), Link to RFI (project RFIs dropdown).
- ICO only: a warning-styled block with Reason code * (Missed in estimate / Field error / Design change / Coordination issue / Other) + Reason detail with a minimum 20 characters validation — try 19 characters.
- Budgeted profit ($) — appears only for Owner/Admin/Sr.PM/Exec; accepts negatives (ICO reducing profit).
- Buttons: Save as Draft / Create & Submit.
3. Walk the PCO lifecycle (the special one)¶
PCO buttons per status: Draft → Submit (+ a Proceeded button enabled only for Owner/Executive — force-account); Submitted → Approve / Reject / Begin Negotiating; Negotiating → Approve / Reject; Rejected → Create Revision (spawns an append-only draft PCO-001-1).
Approve on a PCO spawns a draft CO — toast "PCO approved — draft CO created", navigation to the new CO, which carries a "from PCO-001" back-link chip and is non-deletable.
CO/ICO/Backcharge use the generic chain: Draft → Submitted → Under Review → Approved/Rejected/Revised (Rejected/Revised → back to Submitted).
Ball-in-court is derived, never set by hand: GC only while a PCO/CO is Submitted / Under Review / Negotiating; everything else shows Pinley (all ICO/BC regardless of status), and — once Approved.
4. Attachments and exports¶
- Attach (.pdf/.png/.jpg, multiple): rows with inline preview (eye), Download, Delete. The paperclip count in the log must update immediately.
- Export PDF (single CO) and log PDF/CSV. PDF export runs on the pure-Go renderer (PIN-504) — it should work the same on staging as anywhere else; a failure there is a real bug, not a known risk.
5. Role gating¶
| Check | Expected |
|---|---|
| Estimator / Financial Controller | Read-only: sees the log, no New Change Order, no status buttons |
| PM / Assistant PM | Create, edit, status changes, approve PCO |
| Proceed on a draft PCO | Enabled for Owner/Executive only (visible but disabled for others) |
| Delete CO | Owner / Administration / Senior PM only, and only Draft + non-spawned + non-revision |
| Profit block + Budgeted profit input | Owner / Administration / Senior PM / Executive only |
| Subcost tracker | Cost-only by design — profit never appears there for anyone |
Verification Checklist¶
- Numbering: first of each type gets
PCO-001/CO-001/ICO-001/BC-001; revision getsPCO-00N-1 - ICO blocks save with reason detail under 20 chars
- PCO Approve spawns a draft CO with the back-link chip; the CO can't be deleted
- Ball-in-court flips to GC on submit and back to Pinley/— after decision; ICO/BC never show GC
- Assistant PM can create/edit but sees no profit fields; Estimator is fully read-only
- Attachment add/delete updates both the card badge and the log paperclip count
- No console errors throughout
Known Issues / Current Gaps¶
PIN-484 renamed COR→PCO labels only — searching an old "COR-001" from a GC email won't match
PCO-001; accepted limitation.
Related docs¶
- Proposals — shares the same PDF export path
- RFIs — the linkable RFI source
- Projects & Project Detail — Budget tab shows CO adjustments
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.