Struxen Docs

Budget

The project cost plan by budget code, with committed costs, change orders and forecast landing on the same line

The budget is the project's cost plan, one line per budget code, and the column engine over it is what makes it useful. Each column is either a figure you entered, an aggregate pulled from another LEDGER register, or a signed sum of other columns. Open it from Budget in the LEDGER rail.

The Budget tool defaults to NONE on every seed role except Project Manager, because the register puts revised budget beside committed costs line by line.

Build the budget

  1. Open Budget.
  2. Click New line.
  3. Pick a budget code, give the line a description, and enter the original budget.
  4. Optionally record quantity, unit of measure, unit cost and budgeted labor hours.

Hours are tracked beside labor dollars rather than derived from them. Unit cost is $/unit at four decimal places, and the extended amount is computed from quantity times unit cost.

Clicking a row opens it for editing. Show inactive lines brings back lines that were retired. A line with history is never deleted, only made inactive, so every reference stays resolvable.

Lock the budget

Once the job is bought out, click Lock budget. The confirmation states what happens:

Locking freezes Original Budget on every line. After this, money moves only through budget changes or the change management chain. A new line can still be created, but only at zero.

Unlocking is a separate act, recorded in the audit log, and the dialog tells you to prefer a budget change unless the baseline itself was entered wrong. Locking and unlocking need Budget ADMIN, or Budget STANDARD with the Lock and unlock the budget baseline permission explicitly granted.

The Standard columns

ColumnWhere it comes from
Original BudgetThe line itself. Frozen once locked
Budget ModificationsApproved budget changes
Approved COsApproved change orders and executed prime-contract amendments
Revised BudgetOriginal Budget + Budget Modifications + Approved COs
Pending Budget ChangesBudget changes submitted but not yet approved
Projected BudgetRevised Budget + Pending Budget Changes
Committed CostsCommitments that are executed or complete
Direct CostsApproved direct costs
Pending Cost ChangesSubmitted change orders with their markups, plus contingency uses that are submitted or approved by project controls but not yet signed by the owner
Projected CostsCommitted Costs + Direct Costs + Pending Cost Changes
Forecast to CompleteMode-driven, see below
Est. Cost at CompletionProjected Costs + Forecast to Complete
Projected Over/UnderProjected Budget - Est. Cost at Completion

Nothing here is stored. The whole matrix is recomputed from the source records on every read, so a column can never be stale.

Why Over/Under reads zero on a fresh line

Under the automatic forecast mode, Forecast to Complete is Projected Budget minus Projected Costs. Substitute that into Est. Cost at Completion and it collapses to Projected Budget, which makes Projected Over/Under exactly zero. That is not a rounding artifact. An automatic forecast is, by definition, a forecast that lands exactly on budget. Over/Under only becomes informative once a line is set to manual or lump sum.

Unavailable columns

If a source module fails, or nothing is registered to feed a column, the column is unavailable, not zero. Every calculated column that references it becomes unavailable too, carrying the reason forward. A budget cell showing $0.00 because a module is missing is a wrong number someone would act on, so the product refuses to draw one.

Some money genuinely carries no budget code, and it is disclosed rather than spread. A prime-contract amendment and a commitment change order both carry a value with no coded lines behind them. Those amounts appear in the register's project total as unattributed rather than being allocated across lines nobody allocated them to.

Forecast to Complete

Set a line's forecast mode when you edit it.

ModeWhat it does
AutomaticProjected Budget minus Projected Costs. The default, and recomputed on every read
Manual (itemized)A list of remaining-work items that sum to the forecast
Lump sumOne number you enter
Monitored resourcesNot selectable

Monitored resources renders disabled with its reason: it needs schedule resource loading, which the platform does not track. Use automatic, manual or lump sum.

Manual forecasts cap at 25 itemized entries per line.

Time-phased forecasting

The Forecasting tab on the same register spreads each line's Forecast to Complete across a window of calendar months, so you can say when the remaining money lands rather than only how much is left.

  • A derived spread splits the forecast evenly across the window. It is recomputed on every read and never stored.
  • A manual spread is months you typed, stored as a record.

Two things about a manual grid are worth knowing before you use it:

  • The last month of the window is the server's. It is re-derived on every read and every write as Forecast to Complete minus the sum of the earlier months, so the grid can never disagree with the column it came from. That cell is read-only, labelled as the balancing month, and reports when it moved.
  • Edits are staged and saved on purpose. Nothing is written as you type. Click save when the grid is right.

If someone else saved a manual grid while yours was open, the save is refused and nothing is retried. Reload and re-enter, rather than overwriting a decision someone else made.

The project's forecast window is set from a cost-through date (costs are counted through it, and forecast months begin the month after) and an end period. With no end period the window runs eleven months past the first forecast month.

You can import a month grid from CSV and download a template for it. The import caps at 2,000 rows.

Budget changes

After the budget is locked, a budget change is the only internal mechanism that moves budget money. Open them from Budget changes in the header, or create one with New budget change.

A budget change carries lines on two sides: an Adjustment taking money away from a code, and one or more Allocations putting it somewhere else. The arithmetic reads the signed amount only, so the side is intent and display structure, never what moves the money.

Budget changes must net to exactly zero unless you explicitly flag the change an increase. The check runs when the change is submitted and again when it is approved, and the refusal reports the imbalance to the cent. A draft is allowed to be out of balance while you build it.

StatusMeaning
DraftBeing built. Moves nothing
PendingSubmitted for approval. Feeds the Pending Budget Changes column
ApprovedFeeds the Budget Modifications column. Terminal
VoidAbandoned. Terminal

Approving or voiding a budget change requires Budget ADMIN. Approved and Void are both terminal: to reverse an approved change, issue another one that moves the money back, so both facts stay on the record.

Types are reporting metadata and do not change the arithmetic: Allowance, Buy-out, Contingency, Production quantity, Transfer.

Budget changes are numbered from a per-project counter that is monotonic and never reuses a number.

Snapshots

Click Snapshot to materialize every column for every line exactly as the register reads it right now. A snapshot is immutable and byte-stable: the matrix is serialized once at capture, so re-reading it returns the identical figures no matter how the column engine changes later. A snapshot is what the numbers were.

Flag anomalies

Flag anomalies reads the current register and returns a list of flags with a short cause sentence for each. It is on demand, it changes nothing, and there is no apply step: a flag is an observation, not a change.

The division of labour matters. The flags themselves are found by plain arithmetic over the already-computed matrix and the most recent snapshot, so they cannot be invented. Only the sentence is generated. If the model returns nothing usable, the flags still ship with plain-English descriptions. A model failure degrades the feature to a list of correct flags, never to a wrong number.

A movement counts as material only when it clears both a $1,000 floor and 2% of the line's revised budget. A hand-set forecast older than 30 days is a stale-forecast candidate. At most 40 flags go into one pass.

This is a metered AI operation and it draws on the project's credit pool.

Limits

LimitValue
Budget lines per project2,000
Itemized forecast entries per line25
Lines per budget change200
Budget changes per project1,000
Rows in one forecast CSV import2,000

Troubleshooting

A column header is dimmed and its cells show a placeholder. That column's source could not be read, or nothing is registered to feed it. The header carries the reason. Every calculated column downstream of it is dimmed too.

Original Budget will not accept an edit. The budget is locked. Move the money with a budget change instead, or unlock the budget if the baseline itself was entered wrong.

Submitting a budget change is refused. The lines do not net to zero and the change is not flagged an increase. The message states the imbalance.

Projected Over/Under is zero on every line. Every line is still forecasting automatically. Set the lines you have a view on to manual or lump sum.

On this page