Struxen Docs

LEDGER

Run the money on a job. Budgets, prime contracts, buy-out, change management, billing, retainage and WIP, all filed against one set of cost codes

LEDGER is the cost and contract side of Struxen. It is paid: not in the CORE free tier, and not bundled into the $500 organization fee. It holds what the job was sold for, what it was bought out for, what changed, what it has cost, what has been billed in both directions, and what is being held back. Every register is scoped to one project, and every register files its records against the same budget codes, so a dollar entered once shows up everywhere it belongs.

Open it from LEDGER in the left rail. The landing page is a tool tray, one card per module, grouped the way the rail groups them. Prime Contract, Commitments, Changes and Direct Costs carry a live count, and each of those asks the same route its register reads, so a number on a card can never disagree with the page it opens. A register that could not be read shows no number rather than a zero. Budget carries no count and says so: its read recomputes the whole column matrix and returns a matrix, not a total a card could name.

This is your money, not your Struxen bill

LEDGER accounts for the construction project's own costs: your owner contract, your subcontracts, your invoices, your retainage. What you pay Struxen for the platform is a completely separate thing and lives in Billing. The two use the same words ("invoice", "billing period", "credits") and share nothing else. Never read a figure from one as if it came from the other.

The money model

Three ideas hold LEDGER together.

Budget codes. A budget code is the filing key for every dollar in the product. Your company defines the shape of a code as an ordered list of segments (phase, cost type, contract item, and anything else you use), and each segment carries the values it may take. A budget code is one value per segment joined into a flat string like 000100-3-01-001. Budget lines, commitment lines, change-order lines and direct costs all carry one. See Cost codes.

One register per kind of record, one column engine over them. The Budget register is where the registers meet: each of its source columns is an aggregate pulled from another module, filtered by that module's own status rules, and landed on the budget line whose code the record carries. Committed Costs comes from executed commitments. Direct Costs comes from approved direct costs. Approved COs comes from the change chain and from executed prime-contract amendments.

Money is exact. Every amount in LEDGER is stored and computed as a whole number of cents. Nothing is held in a floating-point number and no total is produced by adding decimals. Rates are stated in basis points, so 5% is 500 and 5.5% is 550. Unit costs are the one exception to the cents rule: they carry four decimal places, because construction unit pricing is quoted finer than a cent.

What is in LEDGER

The rail groups the modules the way the money moves.

GroupModulesRead about it
ContractsPrime ContractPrime contracts
ContractsCommitments, Commitment Change OrdersCommitments
ContractsChanges, T&M TicketsChange management
ContractsDirect CostsDirect costs
Budget & CostBudgetBudget
BillingBilling Periods, InvoicesBilling periods and invoices
BillingPay ApplicationsPay applications
BillingRetainage, Lien WaiversRetainage and lien waivers
BillingAccounting ExportsWIP and accounting exports
Period ReportsWIP ScheduleWIP and accounting exports
Period ReportsContingency ReportChange management
Period ReportsEquipment ReportDirect costs

Two more surfaces sit in Settings rather than in the rail, because they are company-wide rather than per-project: the vendor directory and the cost-code structure.

A typical order of work

  1. Set up your company's cost-code structure once, in Settings → Cost codes.
  2. Record the prime contract and its schedule of values.
  3. Load the budget, then Lock budget at buy-out so the baseline stops moving.
  4. Buy the job out as commitments against vendors in the directory.
  5. Run change events as they arise, price them, and promote the approved ones into owner change orders.
  6. Enter direct costs and T&M tickets as the work happens.
  7. Open a billing period each month, take subcontractor invoices into it, and bill the owner with a pay application for the same month.
  8. Close the period. Read the WIP schedule. Hand the month to accounting.

Who can see what

Every LEDGER surface is gated by a project tool permission, and the financial tools default to NONE on every seed role except Project Manager. This is deliberate: the budget register puts revised budget beside committed costs line by line, which is the contractor's margin.

ToolProject ManagerSuperintendentSub / CollaboratorOwner Read-Only
ContractsADMINNONENONENONE
CommitmentsADMINREAD_ONLYNONENONE
ChangesADMINREAD_ONLYNONENONE
Direct CostsADMINSTANDARDNONENONE
BudgetADMINNONENONENONE
InvoicingADMINNONENONENONE

Sub / Collaborator is the default template for a new project member, so a newly added person sees no LEDGER data until someone grants it. An organization OWNER or ADMIN resolves to full access on every tool, on every project in their own organization, without being staffed on the job.

Rail rows stay visible regardless. Clicking one you have no permission for returns a refusal, not an empty register. See Permissions for how templates and granular permissions work.

Rules the whole product follows

Unavailable is never zero. If a register cannot be read, or a budget source module fails, or you lack permission for one part of a composed view, that figure renders as unavailable with a stated reason. A cell showing $0.00 always means a service answered zero.

Approved records are frozen. An approved change order, an approved pay application, an executed amendment, an approved direct cost: none of these can be edited. The correction is a new record that moves the money back, so both facts stay on the file.

A truncated read is a refused read. Where a register's scan window is cut, the count is reported as unavailable rather than as a smaller number, and composed reports refuse rather than sum a partial set.

Concurrency is checked. Every write that moves a total carries the version you loaded. If someone else saved first you get a conflict and nothing is written, rather than a silent overwrite.

AI in LEDGER

Eight affordances call a model, and every one of them produces a preview a human confirms. None writes a record on its own.

WhereWhat it does
Cost codesMaps a legacy code list onto one of your segments
Prime contractReads a schedule of values out of the executed PDF
Prime contractReads the commercial terms out of the executed PDF, with page citations
CommitmentsReads a subcontract or PO into a draft commitment
ChangesDrafts change-order lines from the event's evidence
Direct costsReads a receipt into a draft cost
VendorsReads a certificate of insurance into policy lines
BudgetFlags anomalies in the register and writes a cause sentence for each

These are metered AI operations and they draw on the project's credit pool. Budget anomaly flagging is a special case worth knowing: the flags themselves are found by plain arithmetic and are correct whether or not the model answers. Only the explanatory sentence is generated.

On this page