Mockup · CTC Adjustments v1 · Updated 2026-04-26

Filing the formal record of where the budget actually went

Desktop-first. Default view shows only what the PM needs to file today. "Show history" expands the full audit column set (Original → COs → CTCs → Current Budget) scrolling left. Spec: docs/specs/SPEC_ctc_adjustments_v1.md.

Project · CTC review

Tulsa Community College — SE Campus Restrooms

Key Construction · Tulsa, OK · status: In Progress · last CTC review: 14 days ago

CTC v1 mockup
Contract value
$1,250,000
Original margin
$187,500
15.0% at bid
Current margin
$197,500
15.8% with CTCs
Net margin impact
+$10,000
2 entries · margin gain
Backlog
1 needs CTC
closeout override · 30 days ago

Sections: 1) Cost-code review table · 2) Entry dialog (Overrun) · 3) Entry dialog (Underrun) · 4) Margin audit trail · 5) Close-out hard-gate · 6) Design annotations

1 · Cost-code review

Default: just what you need today. "Show history" scrolls the full audit trail in from the left.

Cost code Original 🔒at bid · locked CO #1Jan 2026 · from QB 🔒 CTC #1Mar 2026 · filed here Current Budget Spent Remaining Status Action
Plumbing — Labor & Materials
Plumbing · labor
$320,000 +$12,000 $332,000 $215,000 $117,000 ● On track
Plumbing — Underground
Plumbing · labor
$95,000 −$30,000Amend $65,000 $58,000 $7,000 ▼ Underrun · filed
Plumbing — Top-out
Plumbing · labor
$145,000 +$8,000 +$20,000Amend $173,000 $95,000 $78,000 ▲ Overrun · filed
Plumbing — Trim
Plumbing · labor
$78,000 $78,000 $82,200 −$4,200 ⚠ Already over · CTC required
HVAC — Labor & Materials
HVAC · labor
$285,000 +$15,000 $300,000 $198,000 $102,000 ● On track
HVAC — Equipment
HVAC · materials
$92,000 $92,000 $92,000 $0 ○ Not yet reviewed
Bonds & Permits
Other · misc
$8,500 $8,500 $7,200 $1,300 ● On track
Margin / Profit
Residual · not a cost code
$187,500 +$10,000 $197,500 ✦ Net gain · +$10,000
Current Budget = Original at bid + all approved COs + all filed CTCs. The number the forecast consumes. "Show history" reveals full column audit trail left-to-right in chronological order. 🔒 Original + CO columns are locked (edit in QB; syncs here nightly). CTC columns show "Amend" when visible.

2 · Entry dialog — Overrun (with split sources)

Opens centered on screen over a dark backdrop (see §6). Not anchored to the button.

File CTC adjustment

▲ Overrun · Plumbing — Top-out

Current Budget
$153,000
$145K orig + CO #1 $8K
Spent
$95,000
PM's projected total
$173,000
spent + remaining-to-do
Shortfall to cover
$20,000
$ → new current budget = $173,000
Sum must equal $20,000
$
$
✓ Sources sum to $20,000 — matches adjustment. 15,000 + 5,000 = 20,000
⚠ This adjustment includes a $5,000 margin draw. Net margin impact will move from +$15,000+$10,000 after save.
In-progress editing: All fields stay editable until "Save adjustment" is clicked — freely change amounts, swap sources, rewrite the reason. To switch which cost code you're filing for, click Cancel (no data saved) and reopen from the correct row.
Filed by Josh M. · audit row written on save · cannot be deleted, only superseded

3 · Entry dialog — Underrun (with split destinations)

Same shape, opposite direction. PM picks where the surplus goes.

File CTC adjustment

▼ Underrun · Plumbing — Underground

Current Budget
$95,000
no COs, no prior CTCs
Spent
$58,000
PM's projected total
$65,000
spent + ~$7K to wrap
Surplus to allocate
$30,000
$ → new current budget = $65,000
Sum must equal $30,000
$
$
✓ Destinations sum to $30,000 — matches adjustment. 15,000 + 15,000 = 30,000
✦ This adjustment includes a $15,000 margin gain. Net margin impact will move from +$0+$15,000 after save.
Filed by Josh M. · audit row written on save · cannot be deleted, only superseded

4 · Margin impact audit trail

Always shown on the project page. Net total computed from rows — never stored.

Net margin impact
+$10,000
Original margin $187,500 → current budget $197,500
Sum of CTC rows touching margin
+$15,000 − $5,000 = +$10,000
read-time computation; no stored aggregate
Date Type Amount Source / Destination Reason · filed by
Mar 2026 ✦ Margin gain +$15,000 From Plumbing — Underground (underrun) Underground came in clean — no rock, no utility encounters · Josh M.
Mar 2026 ⚠ Margin draw −$5,000 To Plumbing — Top-out (overrun coverage) Q&A on tile spec required additional labor · Josh M.
1 closeout override from Feb 2026 needs CTC formalization ("HVAC — Equipment, +$8,400 acknowledged without CTC, 30 days ago")

5 · Close-out wizard — hard-gate when an actual overrun exists

Replaces the old "Acknowledge and proceed without CTC" override card.

Close-out · Tulsa CC SE Restrooms

Closing month: April 2026

Step 3 of 4 · Budget adjustments
Step 3 — Budget adjustments

Move $ between buckets for inter-bucket rebalancing. Cost codes already over budget must be resolved with a CTC — no override path.

🚫
Cannot close — actual overrun on Plumbing — Trim
Spent $82,200 · current budget $78,000 · over by $4,200. File a CTC that covers $4,200+ before continuing.
Opens the entry dialog pre-filled for this bucket. After save, this banner clears and Continue enables.
Removed in CTC v1: the old "Acknowledge and proceed without CTC" override card. PMs no longer have an override path for actual overruns.
Inter-bucket BA table (existing, unchanged) lives here for projected rebalancing. Disabled while the hard-gate is active.

6 · Design annotations — open questions answered

Dialog placement — centered modal, not near the button

▲ Overrun · Plumbing — Top-out ×

Centered on screen with a dark overlay backdrop — not anchored to the row or button that was clicked. This is standard Radix Dialog behavior (already used elsewhere on the site).

Why not near the button: the row could be near the bottom of the screen, which would push the dialog off-screen. Centering keeps it fully visible regardless of scroll position and gives the PM a focused entry context.

In-progress editing — all fields editable until Save

Nothing commits until "Save adjustment" is clicked. While the dialog is open every field is live-editable: change the amount, swap a source dropdown, adjust source amounts, delete a source row with ×, or rewrite the reason. The reconciliation bar turns red/green live as amounts change.

To change which cost code you're filing for (e.g. accidentally opened Trim but meant Top-out): click Cancel or × — no data is saved — then click the correct row's action button.

No auto-save or draft in v1. Closing the dialog discards all in-progress entries. Once saved, the entry is permanent (amend-only via supersede — no delete).

🔒 Original column — locked; COs locked; CTCs amendable

The Original column is the Job Registry / EAB at bid date. Read-only in CRSApp — to correct it, edit in QuickBooks and it will update on next nightly sync.

CO columns are also locked here — they come from QB change orders via sync. Edit the CO in QB; it pulls in automatically.

CTC columns show an "Amend" link when history is visible. Amending creates a new CTC row that supersedes the old one — the original is preserved in the audit trail.

Future: CFO override path for edge cases (pre-import projects with no QB history). Not in v1.

All six sections rendered. Updated 2026-04-26. Spec: docs/specs/SPEC_ctc_adjustments_v1.md.