Struxen Docs

Cost codes

Define the budget-code structure every budget line, commitment, change order and cost is filed against, then narrow it per project

A budget code is the filing key for every dollar in LEDGER. Nothing financial can be created on a project until a budget code can be composed, so this is the first thing to set up.

Cost codes are defined once for the whole company at Settings → Cost codes, and each project can narrow what its pickers offer at Settings → Cost codes under Current project.

How a budget code is built

Your company defines an ordered list of segments. A segment is one part of the code, such as Phase, Cost Type or Contract Item. Each segment carries the codes it may take, and each segment has a separator that prints between its value and the next one.

A budget code is one value per segment joined by the separators, producing a flat code such as 000100-3-01-001. That flat code is what every register aggregates against.

Segment propertyWhat it does
OrderWhere the segment sits in the composed code
TypePhase, Cost Type, Contract Item, Sub Job, or Custom
ValuesFlat (an unordered list) or Tiered (codes nest, the way CSI divisions hold sections)
SeparatorThe characters printed after this segment's value
RequiredWhether a code must carry a value for this segment

An optional segment composes as an empty string between its separators, which is why a Timberline-style phase prints as 000100- -.

Set up the structure

  1. Go to Settings → Cost codes under Account management. This surface requires organization OWNER or ADMIN.
  2. If you have no structure yet, click Start from CSI MasterFormat to create a tiered Phase segment seeded with the CSI MasterFormat 2020 divisions and sections. Divisions land at tier 1, sections at tier 2 under their division. Reserved divisions are seeded retired.
  3. Otherwise define your own segments in Code structure.
  4. Add each segment's codes in its code panel.

The CSI seed is safe to re-run: values the segment already carries are skipped rather than duplicated.

Loading codes into a segment

ActionWhat it does
Add codesType values and descriptions by hand
Import CSVLoad your existing list from a file
CSI seedPull the CSI MasterFormat 2020 set into a tiered segment
Map legacy codesPropose, per legacy row, which existing code it maps onto

Map legacy codes is the AI affordance here. Rows whose normalized values match exactly are decided on the server with no model call at all, because an exact match must never be inferred. The rest come back as a proposed target with a stated confidence, or as no defensible target. Nothing is ticked by default and nothing is written until you tick rows and confirm, so closing the dialog leaves the segment exactly as it was. It is a metered AI operation.

The structure locks once codes exist

As soon as a company has any budget code, the code structure is locked. Segments can no longer be reshaped. The refusal says so:

This company already has budget codes, so its code structure is locked. Deactivate codes or adjust per-project overrides instead of reshaping segments.

This is deliberate. Reshaping a segment after records are filed against it would silently re-key history. Retire codes you no longer want offered, or restrict them per project instead.

Codes are retired, never deleted

A code with history has to stay resolvable on the records that carry it, so codes are never hard-deleted. Setting one inactive drops it from pickers and leaves every existing record readable.

Narrowing a project

Settings → Cost codes under Current project shows what a picker on that project may compose: the company structure, minus the segments this project hides, with each segment's code set optionally narrowed to a subset. Every row says whether it is inherited from the company or overridden here.

  • A restriction filters pickers. It never rewrites history: a record already holding a now-restricted code still resolves and still renders.
  • Reading the effective structure is open to any project member, because that is what their own pickers offer.
  • Changing it is an organization OWNER or ADMIN action, because narrowing a project's cost-code vocabulary is financial configuration rather than data entry. A member sees the read-only picture rather than controls that would fail.

Cost types

Cost Type is a fixed eight-value list, in this order:

CodeName
1Labor
2Burden
3Subcontract
4Material Purchase Order
5Owned Equipment
6Rented Equipment
7Other
8Misc Materials

Limits

LimitValue
Segments per company13
Custom-type segments per company10

Where budget codes are used

Every one of these records carries one, and every one of them rolls up to the Budget register through it:

  • Budget lines and budget-change lines
  • Commitment lines and change-order lines
  • Change-event pricing lines, and the change event's own expected code
  • Direct costs

On this page