Direct costs
The job costs incurred outside a commitment, entered in batches or read from a receipt, with an owned and rented equipment report
Direct costs are what the job spends outside its commitments: self-perform labor, direct-bought material, owned and rented equipment, and miscellaneous invoices. Open Direct Costs in the LEDGER rail.
This is the one financial tool a superintendent gets at STANDARD by default, because entering field costs is the point of the module. Approving one is Direct Costs ADMIN.
Enter costs
Batch entry is the primary path, because field entry is a batch reality: a week of equipment time, or a stack of receipts. The dialog is a keyboard-first grid, and the save is all or nothing. A failed batch comes back with per-row messages rendered against the rows, so a 20-row batch is fixed in one pass.
Each row carries:
| Field | Notes |
|---|---|
| Kind | Labor, Material, Owned Equipment, Rented Equipment, Invoice, Other |
| Date | The date the cost was incurred, not the date it was entered |
| Budget code | Validated against the project's effective cost-code structure |
| Cost type | One of the eight WBS cost types, checked for consistency with the kind |
| Description | |
| Vendor | Rented equipment and invoices usually have one; labor rarely does |
| Amount | Signed, so a return or credit is negative and renders as one |
| Hours | Labor only, to two decimals |
| Quantity, unit of measure, unit cost | |
| Location | |
| Invoice number | |
| Receipt | A Drive item holding the scan |
Amounts are signed. A return is a negative direct cost, first class, rather than being silently made positive.
Quantity times unit cost has to agree
If a row carries both a quantity and a unit cost, the extended amount must equal the amount. A mismatch is refused and the difference is reported. Nothing is auto-corrected: the product will not decide for you which of the three figures you meant.
Read a receipt
Extract runs one metered AI read over a receipt or invoice scan and returns a preview with per-field confidence. Confirming seeds a single batch row. Discarding writes nothing. The source file caps at 10 MB.
Lifecycle
| Status | Meaning |
|---|---|
| Draft | Entered. Moves no budget column |
| Approved | Counted. Feeds the budget's Direct Costs column and the equipment report |
| Void | Terminal |
| Action | From | Permission |
|---|---|---|
| Approve | Draft | Direct Costs ADMIN |
| Void | Draft | Direct Costs STANDARD |
| Void | Approved | Direct Costs ADMIN |
There is no un-approve. A draft is not yet a cost and a void never was, so neither moves a budget column. Only Approved counts.
Each cost carries an audit trail, readable from its detail view.
The equipment report
Equipment Report in the Period Reports group groups approved owned and rented equipment costs by budget code for a month, with an owned total, a rented total and a combined total.
Draft and void rows are excluded, and the report states how many it excluded, so a month that looks light is visibly light rather than quietly wrong.
It ships inside the pay-application package.
Limits
| Limit | Value |
|---|---|
| Rows in one batch | 50 |
| Direct costs per project | 20,000 |
| Hours per row | 100,000 |
Troubleshooting
A batch row is refused with an extension mismatch. The row's quantity times its unit cost does not equal its amount. The message gives the difference. Fix whichever of the three is wrong.
A cost was approved by mistake. It cannot be returned to draft. Void it, which needs Direct Costs ADMIN, and re-enter it.
The budget's Direct Costs column shows unavailable. The direct-cost read was truncated. A partial read is refused rather than reported as a smaller number, so the column says it could not be read.