Skip to content

Job Costing


The Job Costing module tracks the complete financial lifecycle of projects — from initial contract and cost estimates through expense posting, billing, and closeout. It integrates with Accounts Receivable (invoices and payments), Inventory (material picks and allocations), and the General Ledger (cost postings and contract distributions).

Key capabilities include:

  • Job management — track projects from contract through close, with customer and site linking
  • Contracts and change orders — maintain original contract value and approved change orders
  • Billing — bill each contract the way it was sold: progress (pay applications), time & material (the job’s costs), or a simple invoice, all from Bill Job
  • Cost estimates — budget by cost category (material, labor, subcontractors, other)
  • Expense posting — post individual labor, material, subcontractor, and other expenses
  • Material posting — bulk-post material usage with inventory allocation
  • Actual vs. Estimate (AvE) — compare budgeted and actual costs at any point
  • Job close — finalize accounting and GL distributions at project completion

  • Job — A project tracked from contract through completion. Each job is linked to a customer and site, has a type that controls available cost entry types, and accumulates costs against estimates. Jobs can be open (active) or closed (finalized). Example: Job J-1050, “HVAC Installation — Greenfield Construction, Building C.”

  • Job Contract & Change Orders — The original contract establishes the agreed revenue for the job and how it is billed (Progress, Time & Material, or Simple Invoice). Change orders add or subtract from the contract they change as scope changes occur. The Total Contract Amount = Original Contract + All Approved Change Orders.

  • Cost Estimate — A budget for the job broken down by cost category (Electrical, Mechanical, etc.) and cost type (Material, Labor, Subs, Other). Estimates are set per contract/change order and provide the baseline for Actual vs. Estimate comparisons.

  • Job Cost Entry — An individual expense posted to a job. Each entry has a cost type (Labor, Material, Subs, or Other), an amount, and optional overhead. Labor entries include hours; material entries include quantity. These accumulate as the job’s actual cost.

  • Overhead / Burden — Indirect costs applied as a percentage of direct costs. Each Job Cost Category has overhead factors (Material Factor, Labor Factor, Subs Factor). When a $1,000 labor expense is posted to a category with a 15% Labor Factor, the application calculates $150 in overhead. Burden % on the job applies to all labor costs.

  • WIP (Work in Progress) — Jobs flagged as “WIP Reportable” are included in work-in-progress financial reporting. WIP compares earned revenue against costs incurred to determine over/under billing positions — critical for construction accounting.

  • CPI (Cost Performance Index) — Budgeted Cost of Work Performed (BCWP) ÷ Actual Cost, where BCWP = Percent Complete × Estimated Cost. A CPI of 1.0 means the job is exactly on budget. Above 1.0 = under budget (good). Below 1.0 = over budget (investigate). The CPI is displayed on the per-job metrics dashboard with color coding: green (≥ 1.0), yellow (0.9–1.0), red (< 0.9).


Upstream — Where Job Costing gets its data:

  • CRM → A proposal can use Conversion Type = Job, which structures the proposal’s line items for job work, but jobs are created manually in Job Costing → Manage Jobs (the Create Job form). There is no automatic job creation that pre-populates customer, site, or estimated values from a proposal.
  • Payroll (Timesheets) → Timesheet entries allocated to a job create labor cost entries when synced to payroll
  • Accounts Payable → Vendor invoice lines distributed to a job create subcontractor or material cost entries
  • Inventory → Material picks and allocations for a job create material cost entries; inventory is drawn from warehouse locations

Downstream — Where Job Costing sends its data:

  • Accounts Receivable → Job invoicing creates AR invoices linked to the job. Invoice amounts appear in the Billing & Collections section of the job dashboard.
  • General Ledger → Job expense postings create GL entries (debit expense accounts, credit cost accounts). Job close creates final GL distributions to the contract closing account.
  • Reports → Job profitability, WIP, and Actual vs. Estimate reports read directly from job cost data.

Key Integration Point — Actual vs. Estimate: Every expense posted to a job is compared against the cost estimate on the per-job dashboard. This real-time comparison drives CPI, forecast final cost, and margin erosion/growth metrics. When a vendor invoice from FastPipe Supply is distributed to Job J-1050 in AP, the material expense immediately appears in the job’s Actual vs. Estimate comparison, updating the CPI and forecast.


Navigation: Job Costing → Dashboard (the screen header reads “Job Cost Dashboard”)

The dashboard provides cross-job analysis with six charts, each with a date range filter (Start Date / End Date).

ChartTypeDescription
Expenses by Cost TypeBar chartTotal expense dollars grouped by job cost entry type (the named entry types such as “Direct Labor” or “Materials”), not the four Labor/Material/Subs/Other buckets. Y-axis formatted as currency. Zoom and navigator enabled.
Expenses by Job TypeBar chartTotal expense dollars grouped by job type. Hover tooltip shows the full job type name. Zoom and navigator enabled.
AvE by Job TypeGrouped bar chartActual vs. Estimate cost comparison by job type. Two bars per job type: Actual and Estimate. Y-axis in dollars. Zoom and navigator enabled.
Labor Productivity (Hours) by Job TypeGrouped bar chartActual vs. estimated labor hours by job type. Y-axis in hours (2 decimal places). Zoom and navigator enabled.
Gross Margin by Job TypeGrouped bar chartActual vs. estimated gross margin percentage by job type. Y-axis as percentage (2 decimal places). Zoom and navigator enabled.
Contract TotalsDual-axis bar chartDollar amounts and counts of job contracts by bucket (All, Contract, Change Order, and Pending Change Order). Left axis: amount ($); right axis: count.

Navigation: Job Costing → Manage Jobs

Manage Jobs is a configurable search grid — columns can be shown, ordered, pinned, and saved per user. Click any row to open the job’s View screen in a new tab.

The toolbar provides:

  • Search for a Job — quick text search that filters as you type.
  • Open / All / Closed toggle — filter by job status. Open shows only open jobs, Closed only closed jobs, and All shows both.
  • Tags filter — narrow the list to jobs carrying selected tags (requires the tag permission).
  • Salesman column — the job’s assigned salesman is available as a column on the grid (show, order, and filter it like any other column).
  • Edit / Delete row actions (require the Edit Job / Delete Job permissions) and a + header button to create a new job (requires the Create Job permission).

FieldRequiredDescription
CustomerYesThe customer associated with this job
SiteYesThe customer site address where work is performed. After selecting, the full address is displayed below.
Job IDNoUnique job identifier. Optional and manually entered on create (must be unique if provided); read-only on edit.
Project NameNoDescriptive project name
Job TypeYesThe job type classification (controls which cost entry types are available and GL accounts)
SalesmanNoThe salesman responsible for this job (selected from your salesman list)
Start DateNoPlanned start date
End DateNoPlanned end date
Customer Purchase Order NumberNoThe customer’s PO number referencing this job
CommissionNoCommission dollar amount (default $0.00)
RetentionNoRetainage percentage held back from invoices, entered as a percent (default 0%). The View screen displays this as “Retention %”.
BurdenNoLabor burden percentage applied to labor costs; entered as a percent (default 0%)
CertifiedNoCheckbox — marks the job as certified payroll
WIP ReportableNoCheckbox — includes this job in Work-in-Progress reporting (default checked)
NotesNoFree-text internal notes (multiline, 10 rows)

Custom fields (configured per your site) appear at the bottom of the form.

Click Create (new job) or Save (existing job) to submit.


The View Job screen is divided into a collapsible upper summary section and a lower tab section.

The upper section can be collapsed or expanded using the expand/collapse button. It displays:

Left column — Customer & Site:

  • Customer profile (name, contact info)
  • Site address

Right column — Job Details:

FieldDescription
Job ID
SalesmanThe salesman responsible for the job
Customer PO Number
Start Date / End Date
Retention % / Burden %
Project Name
Contract Date
Closed DateWhen the job was closed (blank if open)
Last Change DateMost recent change order date
Last Invoice DateMost recent invoice date
Last Paid DateMost recent payment date
Total Contract AmountOriginal contract + change orders
Contract AmountOriginal contract value
Change Order AmountApproved change order total
Pending Change Order AmountTotal of change orders not yet approved by the customer (not included in the contract total)
Last Invoice AmountMost recent invoice amount
Last Paid AmountMost recent payment amount
Estimated CostTotal estimated cost from the estimate
Estimated HoursTotal estimated labor hours
CommissionCommission dollar amount
Invoiced to DateCumulative invoiced amount
Paid to DateCumulative amount collected

Status Chips (top of screen):

  • Job Type — displays the assigned job type
  • Open (green) or Closed (red) — current status
  • Certified (yellow/warning) — appears when certified payroll is enabled
  • WIP Reportable — appears when WIP reporting is active
  • Tags — any tags applied to this job (requires tag permission)
TabDescription
GeneralThe summary fields described above
NotesJob notes in formatted display
Custom FieldsValues for any configured custom fields
TabDescription
DashboardPer-job KPI dashboard (see Section 6)
ContractsThe job’s contracts, each followed by its change orders, with each contract’s billing type and each change order’s status. A contract’s ID links to its contract view screen; + creates a contract and the row icons add a change order, edit, or delete (see The Contracts tab).
EstimatesEstimated costs by category and cost type
Actual vs EstSide-by-side comparison of actual vs. estimated costs by category
InvoicesAR invoices linked to this job
Job ExpensesAll posted job expense entries
Job Expense LogsAudit log of changes to job expense entries
AppointmentsRead-only list of the job visits scheduled against this job — assigned date and time, appointment ID, status, scheduled employee, duration, completed date and time, work performed, and internal notes, with a View Forms action per row. Appointments are scheduled from the dispatch board and worked from the mobile app, not created or edited here. Visible with permission to view appointments.
FormsThe forms filled out on this job’s appointments, grouped by appointment; pick a form to view its captured field values. Visible with permission to view forms.
CommunicationsCommunications (calls, emails, texts) logged against this job
Purchase OrdersInventory purchase orders linked to this job
AttachmentsFiles and documents attached to this job
ActionDescription
Bill JobBill the job — opens Post Job Invoice for a Progress contract or Post Sale for a Time & Material or Simple Invoice contract, asking which contract when there are several (see Billing a job). Disabled if closed.
Manage EstimatesNavigate to the Estimates screen for this job (disabled if closed)
Post ExpenseNavigate to Post Job Expense pre-loaded with this job (disabled if closed)
Close JobClose the job and finalize GL distributions. Toggle — shows Reopen Job when closed.
Preview Pick TicketPreview the inventory pick ticket for this job
Email Pick TicketEmail the pick ticket
Audit JobView an audit trail of changes to this job
Edit JobNavigate to the edit form (disabled if closed)
Delete JobDelete the job after confirmation (disabled if closed)

Navigation: View Job screen → Job Expenses tab.

The Job Expenses tab lists every posted expense entry for the job. What labor cost detail a user sees in this grid depends on the Job Cost Show Rates misc permission.

When a user does not have the Job Cost Show Rates permission:

ColumnBehavior without permission
Regular HoursHidden — the column is removed from the grid and cannot be re-added through the column chooser.
Overtime HoursHidden — the column is removed from the grid and cannot be re-added through the column chooser.
Doubletime HoursHidden — the column is removed from the grid and cannot be re-added through the column chooser.
Expense AmountBlank for Labor-type entries (the value is suppressed). Shown normally for non-Labor entries.
Overhead AmountBlank for Labor-type entries (the value is suppressed). Shown normally for non-Labor entries.

Users with the permission see all three hours columns and the Expense Amount and Overhead Amount values for labor entries as normal.

The Actual vs Est tab on the View Job screen presents a side-by-side, per-cost-category grid comparing estimated costs against job-to-date (JTD) actuals. Each row is a Job Cost Category; the grid includes one row for every category that appears in either the job’s estimates or its posted expenses.

The Job Cost Category column is pinned to the left and sorted in ascending order. All dollar columns are formatted as currency and hour/quantity columns to two decimal places.

ColumnDescription
Job Cost CategoryThe cost category for this row (pinned, sorted ascending)
Hrs EstEstimated labor hours for the category (sum of the estimate lines’ Labor Hours)
Hrs JTDActual labor hours posted to date — regular + overtime + doubletime hours across all Labor-type expenses in the category
Qty EstEstimated quantity (always displayed as 0)
Qty JTDActual quantity posted to date — the sum of the quantity field across all expenses in the category, regardless of cost type
Labor EstEstimated labor dollars (sum of the estimate lines’ Labor Cost)
Labor JTDActual labor expense dollars posted to date (Labor-type expense amounts, excluding burden)
Burden JTDActual labor overhead/burden posted to date (the overhead amount on Labor-type expenses)
Mat’l EstEstimated material dollars (sum of the estimate lines’ Material Cost)
Mat’l JTDActual material posted to date — material expense amount plus its overhead
Subs EstEstimated subcontractor dollars (sum of the estimate lines’ Subs Cost)
Subs JTDActual subcontractor posted to date — subs expense amount plus its overhead
Other EstEstimated other-cost dollars (sum of the estimate lines’ Other Cost)
Other JTDActual other cost posted to date — other expense amount plus its overhead
Total EstTotal estimated cost for the category (Labor Est + Mat’l Est + Subs Est + Other Est)
TotalTotal actual cost posted to date (Labor JTD + Burden JTD + Mat’l JTD + Subs JTD + Other JTD)
% DiffTotal actual as a percentage of total estimate (Total ÷ Total Est × 100). Displays 0 when the category has no estimate.

The Job Expense Logs tab on the View Job screen shows a transaction history of the job’s posted material and expense activity. Each top-level row is one posting transaction; rows for tracked-inventory material postings can be expanded to reveal the inventory pick detail behind them.

Navigation: View Job screen → Job Expense Logs lower tab

ColumnDescription
DateThe transaction date of the posting
Expense TypeThe job cost entry type used for the posting
Expense AmountThe expense dollar amount of the related job cost entry
OH AmountThe overhead dollar amount of the related job cost entry
UserThe user who created the transaction
ReversedWhether the transaction has been reversed
Reversal DateThe date the transaction was reversed (blank if not reversed)
Reversal UserThe user who reversed the transaction (blank if not reversed)

A row can be expanded only when its posting is a Material cost type and the product is inventory-tracked. For those rows, an expand control appears at the left of the row.

  1. Find a material transaction row whose product is inventory-tracked.
  2. Click the expand control at the start of the row.
  3. The detail grid loads the inventory pick records that made up that posting.

The expanded detail grid shows one row per inventory pick with these columns:

ColumnDescription
ProductThe product that was picked
LocationThe inventory location the quantity was drawn from
Serialized ProductThe specific serialized unit, when the product is serialized
PalletThe pallet the quantity was picked from, when applicable
Container SizeThe container size of the picked quantity
QuantityThe quantity picked from that location

Delete permanently removes a job from the system. A confirmation dialog appears: “Are you sure you want to delete this job?”

Prerequisites:

  • Job must be open — closed jobs cannot be deleted. Reopen the job first if needed.
  • User must have the job delete permission.
  • No close-date validation is required since deletion does not create GL entries.

Deleting a job removes the job record and its associated data (contracts, estimates, expense entries). This action cannot be undone.


Accessed from the Dashboard tab on the View Job screen, this section provides deep financial KPIs for the selected job.

  • Percent Complete — horizontal progress bar showing the ratio of actual cost to estimated cost
  • Earned Revenue — revenue recognized based on completion
  • Backlog Remaining — remaining unearned contract value
KPIDescription
Original ContractBase contract amount
Approved COsApproved change order total (highlighted if non-zero)
Pending COsTotal of change orders not yet approved by the customer. Highlighted when non-zero and not included in Total Revenue.
Total RevenueContract + change orders (shown in green as “good”)
KPIDescription
Estimated CostTotal from the job estimate, including burden. If a job has a Burden % configured, the estimate includes a Burden Estimated amount calculated from the labor estimate (unless the job type’s “Estimates Include Burden” flag is set, in which case burden is already included in the estimate figures).
Actual CostActual posted expenses to date, including burden (shown in red if exceeds estimate)
Committed (POs)Value of open purchase orders linked to this job
Remaining CommittedUndelivered PO value
Cost to CompleteProjected cost still required to finish

Cost Breakdown Donut Chart shows the split between Actual, Committed (Open POs), and Estimated Remaining cost.

Actual vs. Estimates Stacked Horizontal Bar Chart compares Estimated and Actual cost by job cost category, sorted by total estimated descending. Tooltips show Est, Act, and Difference for each category.

KPIDescription
Estimated MarginExpected gross margin (dollar + percent)
Actual Margin-to-DateRealized gross margin on costs incurred so far
CPICost Performance Index = BCWP ÷ Actual Cost, where BCWP = Percent Complete × Estimated Cost. ≥ 1.0 means on or under budget. Shown green (≥ 1.0), yellow (0.9–1.0), or red (< 0.9).
Forecast Final CostProjected total cost at completion based on current burn rate
Margin Growth/ErosionChange in margin vs. original estimate
Forecast MarginProjected final gross margin (dollar + percent)

Margin Comparison Chart shows bars for Estimated, Actual-to-Date, and Forecast margins. Green bars = positive margin; red = negative.

KPIDescription
Invoiced to DateTotal invoiced, with billing % as sub-label
Paid to DateTotal collected
Accounts ReceivableOutstanding balance (highlighted yellow if > 0)
Retainage HeldRetention amount withheld
Collection RatePaid ÷ invoiced (green/yellow/red)
Over / Under BillingAmount invoiced to date minus revenue earned. Positive = overbilled; negative = underbilled.

Billing Summary Chart shows a bar comparison of Invoiced, Paid, A/R, and Retainage.

KPIDescription
Estimated HoursHours from the labor estimate
Actual HoursLabor hours posted to date
Labor Burn RateActual hours ÷ estimated hours (% used). Highlighted yellow or red when over threshold.
Avg Daily Labor SpendTotal labor cost divided by the number of distinct days with any labor activity (the sub-label shows how many days were worked).
Avg Weekly Labor SpendTotal labor cost divided by the number of distinct weeks with any labor activity (the sub-label shows how many weeks were worked).

Hours Chart compares total Estimated vs. Actual labor hours.

KPIDescription
Cash PositionNet cash flow (collected − cost incurred). Green if positive, red if negative.

Navigation: Job Costing → Manage Estimates, or via Actions → Manage Estimates from a job

This screen sets the cost budget for a specific job contract.

FieldRequiredDescription
JobYesSearch for the job to estimate (searches open jobs by Job ID, customer name, or customer ID)
Customer—Read-only display of the selected job’s customer
Site—Read-only display of the selected job’s site address
Job ContractYesSelect which contract or change order to estimate. Switching contracts loads the existing estimates for that contract.
Contract Amount—Read-only display of the selected contract’s dollar value

Each row in the grid represents one cost category’s budget:

ColumnDescription
Job Cost CategorySelect the cost category for this estimate line
Material CostEstimated material dollars
Labor HoursEstimated labor hours
Labor CostEstimated labor dollars
Subs CostEstimated subcontractor dollars
Other CostEstimated other cost dollars
DeleteRemove this estimate row
  • A new blank row is automatically added when you focus on the last row.
  • The Estimate Total footer row shows the sum of all cost columns.
ButtonDescription
Save and Clear JobSave the current estimates and clear the job field so you can estimate a different job
Save Current EstimateSave the estimates for the current contract

Navigation: Job Costing → Post Job Expense, or via Actions → Post Expense from a job

This screen posts a single expense entry (labor, material, subcontractor, or other cost) to a job.

The Transfer Expense toggle at the top switches between:

  • Standard posting — records a new expense on the selected job
  • Transfer — moves an existing expense from one job to another (the Transfer To Job field appears)
FieldRequiredDescription
JobYesThe job to post to (search filters to open jobs only)
Transfer To JobConditionalTarget job when in Transfer mode (required if transferring)
DateYesTransaction date
Job Expense TypeYesThe expense type, filtered to match the selected job’s job type
Job Cost CategoryYesThe cost category for this expense
VendorConditionalRequired when the expense type has cost type Subs
EmployeeConditionalEnabled (editable) when the expense type has cost type Labor; optional — not required
ProductConditionalRequired when the expense type has cost type Material
DescriptionNoFree-text description of the expense
Invoice NumberNoReference invoice number

Labor Fields (visible when cost type = Labor)

Section titled “Labor Fields (visible when cost type = Labor)”
FieldDescription
Regular HoursRegular-time hours (2 decimal places). Negative values are allowed for corrections or adjustments.
Overtime HoursOvertime hours (2 decimal places). Negative values are allowed for corrections or adjustments.
Doubletime HoursDouble-time hours (2 decimal places). Negative values are allowed for corrections or adjustments.

Material Fields (visible when cost type = Material)

Section titled “Material Fields (visible when cost type = Material)”
FieldDescription
QuantityQuantity of material used (3 decimal places)
FieldRequiredDescription
Expense AmountNoDollar amount of the expense (auto-computed from hours/quantity like Overhead Amount, but can be edited)
Overhead AmountNoCalculated overhead amount (auto-computed based on cost category overhead factors; can be overridden)
FieldDescription
Debit GLThe GL account that will be debited for this expense
Credit GLThe GL account that will be credited for this expense
OH Debit GLOverhead debit GL account
OH Credit GLOverhead credit GL account

These are automatically determined based on the expense type and job type configuration and cannot be manually changed.

For a Material expense, when you select a specific product the Credit GL defaults to that product’s stock (inventory) ledger account, so the credit reduces the same inventory account the stock was carried in. If no product is selected, it falls back to the expense type’s configured credit account.

For Material-type expenses, an Allocation section appears below the GL accounts. This shows inventory reservations and allows you to select specific inventory locations to pick from for this material expense.

ButtonDescription
Recompute AmountsRecalculates expense and overhead amounts based on current field values
Auto-Allocate MaterialsAutomatically selects inventory allocations for material expenses
PostSubmit the expense and reset the form for a new entry
Post & Reuse JobSubmit the expense and keep the current job selected (useful for posting multiple expenses to the same job)

If material allocations cannot fully cover the required quantity, a dialog titled “Allocations Not Made” appears showing:

  • Product — the product with insufficient inventory
  • Needed — quantity required
  • Requested / Available — what was available

The expense was not posted. Click Acknowledge to dismiss the dialog, then add or adjust inventory allocations (or reduce the quantity) and post again.

Reversing a job expense creates offsetting GL entries that negate the original expense posting, effectively undoing the expense without deleting the audit trail.

Navigation: On the View Job screen, open the Job Expenses tab, then click the Reverse button (history icon) on the expense row.

FieldRequiredDescription
Posting DateYesThe date for the reversal GL entries. Must pass close-date validation.
  • Job must be open — expenses on closed jobs cannot be reversed.
  • The expense must not already be reversed (the button is disabled for already-reversed entries).
  • The expense must have a transaction log record.
  • User must have the Reverse Job Cost Expense permission.

The reversal creates four offsetting GL entries per expense:

  1. Debit GL — negative of the original expense amount
  2. Credit GL — the original expense amount (reversed direction)
  3. OH Debit GL — negative of the original overhead amount
  4. OH Credit GL — the original overhead amount (reversed direction)

For material expenses with inventory allocations, the reversal also reverses the inventory transaction, returning quantities to their original locations.

The original expense entry is marked as reversed with the reversal date and user. A new negative job cost entry is created as a mirror of the original.


In addition to reversing an expense, you can move an individual already-posted expense entry from one job to another directly from the Job Expenses tab. Transferring an expense reverses the original posting on the source job and creates a matching new posting on the destination job, so the expense is removed from the original job and added to the target job without losing the audit trail.

Navigation: On the View Job screen, open the Job Expenses tab, then click the Transfer Expense button (compare-arrows icon) on the expense row.

FieldRequiredDescription
Transfer To JobYesThe open job to move the expense to. Type to search jobs by ID; only open (not closed) jobs appear in the list.

Click Transfer to perform the move, or Cancel to close without changes.

  • The source job must be open — the Transfer Expense button does not appear on a closed job.
  • The expense must have a transaction log record and must not already be reversed (the button is disabled for already-reversed entries).
  • User must have the Post Job Cost Expense permission.
  • The destination job must be open. Selecting a closed job is rejected with “Cannot transfer to a closed job. Please select another Job.”
  • The destination job’s job type must have the same expense type as the entry being transferred. Otherwise the transfer is rejected with “Cannot transfer to a job who’s type does not have the same expense type.”

When you confirm a transfer:

  1. The original expense entry on the source job is marked as reversed (with the reversal date and the acting user recorded), and a mirroring negative job cost entry is created on the source job to offset it.
  2. A new job cost entry — copying the original expense’s amount, overhead, quantity, hours, category, vendor/employee/product, invoice number, date, and description — is created on the destination job, along with its own posting transaction and log records.
  3. For material expenses, the associated inventory transaction logs are carried over to the destination job’s posting.

The transfer is subject to close-date validation before it is posted.

Why the Reverse / Transfer buttons are disabled

Section titled “Why the Reverse / Transfer buttons are disabled”

On the Job Expenses grid, the Reverse (history icon) and Transfer (compare-arrows icon) buttons are disabled in some cases. Hover the button to see why:

SituationTooltip
You lack the permission”You don’t have permission to reverse job cost expenses.” / “You don’t have permission to transfer job cost expenses.”
The expense is already reversed”This expense has already been reversed.”
The expense came from a vendor invoice”This expense was posted from a vendor invoice. Reverse or adjust it in Accounts Payable.”
The expense came from payroll”This expense was posted through Payroll. Reverse or adjust it in Payroll.”
The expense has no posting log”This expense has no posting log, so it can’t be reversed or transferred here.”

When a job expense was posted from a vendor invoice that has a filed document you can view, a View Invoice action (eye icon) appears on that row of the Job Expenses grid. Click it to open the invoice’s filed document in place — the scanned invoice, migrated invoice image, or uploaded file. If the invoice has more than one file attached, the dialog lets you switch between them. Because it only displays the document, this action stays available even on closed jobs.

Expenses posted from Accounts Payable or Payroll do not carry a job-cost posting log and must be reversed or adjusted in their source module. On a closed job the action buttons do not appear at all.

Navigation: Job Costing → Post Job Materials

This screen allows bulk-posting of multiple material expenses against a job in a single transaction. It is more efficient than Post Job Expense when posting many material lines at once.

FieldRequiredDescription
DateYesTransaction date for all materials in this posting
JobYesThe job to post to (open jobs only)
Invoice NumberNoReference invoice number applied to all lines
Default Job Expense TypeNoPre-fills the expense type on new rows
Default Job Cost CategoryNoPre-fills the cost category on new rows

An inline-editable grid where each row is a material expense:

ColumnRequiredDescription
ProductNoThe material product
DescriptionNoFree-text description for this line
Job Expense TypeNoExpense type for this line. Required when a product is selected on the row (inherits the header default if one is set).
Job Cost CategoryNoCost category for this line. Required when a product is selected on the row (inherits the header default if one is set).
QuantityNoQuantity used (3 decimal places). Required when a product is selected on the row.
Expense AmountNoDollar amount (currency; aggregated in footer)
Overhead AmountNoOverhead amount (currency; aggregated in footer)
Row Actions (⋮)—Per-row menu: Recompute Expense, Recompute Overhead, Delete
  • A new blank row is added automatically as you work through the grid.
  • The footer shows the sum of Expense Amount and Overhead Amount across all rows.

Shows inventory allocation details — which specific inventory locations will be drawn from when this posting is committed.

ButtonDescription
Auto-AllocateAutomatically selects inventory allocations for all material lines
PostCommit all material entries. Disabled until a job is selected.

Same as Post Job Expense — lists products with insufficient inventory. Click Acknowledge to proceed.


Every job bills through its contracts, and every contract is billed one of three ways. You choose the way when you create the contract, and from then on billing the job is one button: Actions → Bill Job on the View Job screen (or Bill on the contract screen). ServiSuite opens the right screen for that contract’s type.

Contract typeUse it when…How it billsBills on
ProgressThe job is a fixed-price contract billed in stages — construction and installation work, AIA pay applications, retainageA schedule of values: each period you record how far along each line is, and a pay application bills the changePost Job Invoice
Time & MaterialYou bill the customer for the labor, materials and other costs actually recorded on the jobThe job’s unbilled costs come in as invoice lines — labor at the labor rate you pick, materials and other costs at cost plus a markupPost Sale, with Add Unbilled Costs
Simple InvoiceYou just need to send an invoice — a deposit, a lump sum, whatever you typeFree-form invoice linesPost Sale

Pick the type that matches how your customer expects to be billed, not how big the job is.

Choose Progress when any of these is true:

  • The customer (usually a general contractor) requires pay applications — the AIA G702/G703 forms or their equivalent — instead of ordinary invoices.
  • The contract has retainage: the customer holds back a percentage of every bill until the job is done.
  • You bill a fixed contract price in stages over the life of the job — typically monthly — by how far along each part of the work is.
  • The customer approved a schedule of values (a line-by-line price breakdown) with the contract, or expects one with your first bill.

Choose Time & Material when the customer pays for the labor, materials and other costs actually spent on the job, at your rates and markup — there is no fixed price to bill against.

Choose Simple Invoice when you bill with ordinary invoices you write yourself: a deposit and a final bill, a single invoice at completion, or a few lump-sum invoices with no retainage and no pay-application forms. When in doubt on a small job, Simple Invoice is the right choice.

TermWhat it is
Job ContractThe thing you bill. A job can have one or more contracts, each with its own billing type, plus any number of change orders.
Schedule of Values (SOV)(Progress contracts) The line-by-line breakdown of the contract amount — one row per scope item, each with a scheduled value, a retainage %, and a revenue account. The base lines must add up to the contract amount.
Change Order (CO)A change to a contract’s scope or price, added from the contract it changes. It is pending until the customer approves it. On a Progress contract an approved change order is always its own line on the schedule — positive or negative.
Pay ApplicationOne posted progress bill against a contract’s schedule (Application #1, #2, …). Each one creates a customer invoice in Accounts Receivable.
Retention (Retainage)A percentage of each line’s billing that the customer holds back until the work is done. On job contracts it is a real receivable (see Retention holdback).
Unbilled costs(Time & Material) Job cost entries — labor, materials, subs and other — that no invoice has billed yet.

Navigation: View Job screen → Contracts tab

On the Contracts tab, click + (New Contract). Change orders are not created here — add them from the contract they change (see Change orders).

FieldRequiredDescription
IDNoLeave blank to number it automatically. Read-only after creation.
DateYesContract date. Defaults to today.
DescriptionNoWhat the contract covers. For a Progress contract this also names the first schedule line.
AmountYesThe contract amount. Use $0.00 for a Time & Material contract with no fixed price.
Linked LeadNoThe lead/opportunity this contract came from.
How will this contract be billed?YesProgress, Time & Material, or Simple Invoice. A one-line explanation of the choice appears under it.
  1. Fill in the fields, choose how the contract will be billed, and click Create.
  2. Progress: the contract opens in Edit on its Schedule of Values tab. The schedule already has one line for the whole amount, named after the contract’s description (or the job’s project name). Click Save to keep a single line, or split it into the lines you bill against — they must still add up to the contract amount. The contract can be billed right away even if you click Cancel.
  3. Time & Material and Simple Invoice: the contract is saved and you stay on the job.

The tab lists every contract on the job, each followed by its change orders (marked ↳).

ColumnDescription
IDOpens the contract screen
Description
TypeThe contract’s billing type (Progress, Time & Material, Simple Invoice), or Change order to contract for a change order. An older change order that can’t be matched to a contract shows Change order (not assigned to a contract).
StatusAwaiting approval for a change order the customer hasn’t approved
Date / Amount / Billed Amount / Estimated Cost / Estimated Hours / Lead

Row actions: Add Change Order (contracts only), Edit (opens the contract screen in edit mode), and Delete.

Navigation: Contracts tab → click a contract’s ID

The top of the screen shows the contract number and a chip with its type (for example Progress · Standard, Time & Material). The three everyday actions are buttons; the rest are under Actions:

ButtonWhat it does
BillBills this contract — the same as Bill Job for this contract (see Billing a job)
Add Change OrderAdds a change order to this contract (see Change orders)
EditEdits the contract (see Editing a contract)
Actions → Release Retention(Progress contracts) Opens Retention Adjustment for the customer
Actions → Convert to Change OrderTurns the contract into a change order — only if it has no posted pay applications and no change orders of its own
Actions → DeleteDeletes the contract (the server lists what has to be cleared first, if anything)

The summary under the buttons depends on the type:

FieldProgressTime & Material / Simple Invoice
Original ContractThe contract amountThe contract amount
Markup on Costs—(Time & Material) The contract’s markup, or the job type’s, shown as “X% (job type)“
Change OrdersChange orders on the scheduleApproved change orders
Contract SumOriginal + change orders on the scheduleOriginal + approved change orders — shown only when the contract has a fixed sum
Billed to DateCompleted + stored billed on pay applicationsInvoices posted against the contract
Balance to FinishContract Sum − Billed to DateShown only when the contract has a fixed sum
Retention Held / ReleasedRetention withheld and not yet released; released to date (when any)—

Tabs:

  • Schedule of Values (Progress) — the schedule lines with their live positions: Scheduled Value, Billed to Date, Stored, % Complete ((Billed + Stored) ÷ Scheduled Value), Retainage %, Held, Released, Revenue Account, and a CO flag on change-order lines.
  • Change Orders (n) — this contract’s change orders and where each one stands (see Change orders).
  • Pay Applications (Progress) — the contract’s pay-application history (see Application history).
  • Estimates — cost estimates budgeted against this contract (with the View Job Cost Estimate permission).

Opening a change order shows a simpler screen: an Awaiting approval or Approved chip, a Changes Contract link back to its contract, its Amount, and Approve (while it’s pending), Edit, and Actions (Convert to Contract, Delete).

Click Edit. The header fields and (on a Progress contract) the schedule become editable together, and one Save writes both — the schedule is checked against the new contract amount, so an amount change and the matching line changes land together or not at all.

FieldShown forDescription
Date, Description, AmountAll
Billing MethodContractsProgress, Time & Material, or Simple Invoice (see below)
Invoice FormatProgressStandard or AIA — the pay-application layout
SubcontractProgressBill a general contractor under a subcontract — the pay application prints To Contractor / From Subcontractor (the G702S flavor)
Markup % (blank = job type’s X%)Time & MaterialThe markup on material and other costs. Leave blank to use the job type’s T&M Markup %.
Linked LeadAll

There is no approval checkbox — a change order is approved with its Approve button, which also puts it on the schedule.

Change Billing Method in Edit and click Save.

  • Switching to Progress starts a schedule of values with one line for the whole amount (edit it before saving). If the job has already been invoiced outside pay applications — through Sales Invoice or Post Sale — a warning appears: pay applications start from $0 billed, so switching would bill that work again. (Invoices tied to another contract on the job don’t count.) If this contract itself has already been invoiced outside pay applications, the save is refused: “This contract has already been invoiced outside pay applications (Sales Invoice or Post Sale) — progress billing would bill that work again. Keep it on Simple Invoice.”
  • Switching away from Progress is refused while the contract has posted pay applications (void them first) or change orders on its schedule (take them off first). Otherwise its schedule of values is removed.

A schedule of values is how a Progress contract gets billed: the contract amount broken into lines, and each pay application bills how far along each line is. Set it up once, right after you create the contract and before the first pay application — it is what the customer will check every bill against.

When it opens: creating a Progress contract opens the contract in Edit on its Schedule of Values tab, with one line for the whole contract amount. You can also come back any time with Edit on the contract screen.

  1. Decide the lines. Replace the single line with one line per part of the work you will bill separately (see How to break the contract down below), or keep the one line if the customer is happy to be billed against the whole contract.
  2. Enter each line. Give it a Description and a Base Amount. Fill in Item # if the customer uses item numbers. The Base Amount column must add up to the contract amount exactly — a warning shows the difference until it does.
  3. Choose each line’s Billing Method — Percent Complete or Milestone (see below).
  4. Set Retainage % and Retain on Stored on each line from your contract’s retainage terms.
  5. Leave Revenue Account blank unless a line should credit a different revenue account than the job type’s contract revenue account.
  6. Click Save. The contract is ready to bill.

How to break the contract down

  • Use the customer’s breakdown when they give you one. If the general contractor sent a schedule of values, a bid form, or their own continuation-sheet layout, enter their lines in their order with their item numbers in Item #. Their reviewer compares your pay application to it line by line, and a mismatch is the most common reason a pay application is sent back.
  • Otherwise, one line per phase or per part of the system. Lines should be pieces of work whose progress you can state honestly each month. Typical examples:
    • Plumbing: Underground, Rough-in, Top-out, Trim-out / fixtures.
    • HVAC: Mobilization, Equipment, Ductwork, Piping, Controls, Startup & test and balance.
    • Electrical: Underground / site, Rough-in, Gear, Fixtures & devices, Trim & testing.
  • Give expensive equipment its own line. Chillers, rooftop units, switchgear and other long-lead or made-to-order equipment should each be a line, so you can bill them as stored materials when they are delivered, before they are installed.
  • Put items you only bill when finished on their own line and make them Milestone lines — closeout documents, as-builts, permits and inspections, startup.
  • A small job can be one line. If the customer only cares about percent complete overall, keep the single line the contract started with.

Percent Complete or Milestone

Billing MethodBillsUse it for
Percent CompleteAny amount from 0% to 100%, cumulatively, as the work progressesAlmost every line — work that is done a bit at a time
MilestoneAll or nothing: the line is billed at 0% until it is billed at 100% in one application. It can’t carry stored materials, and once billed it is locked until that application is voidedDeliverables that are either done or not — closeout, startup, permits, a final inspection

Retainage settings

  • Retainage % — use the rate in your contract on every line it applies to. If the contract exempts some items from retainage, give those lines 0%. Keeping one rate across the schedule keeps the printed application simple: the G702 states a single retainage rate, and an approved change order’s line starts at the schedule’s rate when every retained line uses the same one (with mixed rates it starts at 0% and you set it on the new line).
  • Retain on Stored — leave it checked if your contract retains on materials stored on site (the usual AIA arrangement). Uncheck it if retainage only applies once material is installed; retention on stored value is then withheld when the material is installed instead — delayed, not skipped. See Stored materials.

After billing has started, don’t re-price base lines to account for extra or reduced scope — that would restate percentages you have already billed. Add a change order instead; it goes on the schedule as its own line. You can still fix descriptions and item numbers at any time.

In Edit on a Progress contract (requires the Manage Schedule of Values permission) each schedule line has:

ColumnDescription
SeqSort order
Item #Optional line code (e.g. an AIA item number)
DescriptionLine description (required)
Billing MethodPercent Complete (bill any % as work progresses) or Milestone (bill all-or-nothing — 0% or 100%). Locked once the line has billing history.
Base AmountThe line’s scheduled dollar value. Base lines cannot be negative — a deduct is a change order.
Scheduled ValueBase Amount + change-order adjustments (read-only)
Retainage %Percentage of this line’s billing withheld as retention (0–100). Locked once the line has history.
Retain on StoredWhether retention also applies to stored materials on this line. When it is off, retention on stored value is delayed, not skipped — it is withheld once the material is installed. Locked once the line has history.
Revenue AccountThe GL revenue account credited when this line is billed. Blank falls back to the job type’s contract credit account (shown as Default (…)).

A few more rules govern editing:

  • Header vs. schedule permissions — editing the header fields requires the Job Contract edit permission; editing the schedule lines requires Manage Schedule of Values. A user with only the former can change the header while the schedule stays read-only.
  • Scheduled value floor — a line’s scheduled value cannot be dropped below what it has already billed and stored to date. Void the applications that hold it up first.
  • Change-order lines are fixed — a change order’s line carries exactly the change order’s amount. Once it is on a schedule, its amount can’t change and it can’t be un-approved. Issue another change order instead.

Navigation: View Job screen → Actions → Bill Job, or Bill on the contract screen

  1. Click Bill Job. If the job has one contract, it is billed straight away. If it has several, a Which contract are you billing? dialog lists them with their type and amount — pick one. (Change orders aren’t listed; they bill through their contract.) If the job has no contracts, Post Sale opens for the job.
  2. ServiSuite opens the screen for that contract’s type:
    • Progress → Post Job Invoice for the contract. If its schedule of values has no lines yet, the contract opens in Edit instead so you can build it first.
    • Time & Material → Post Sale with the customer, job and contract filled in. Use Add Unbilled Costs to bring in the job’s costs.
    • Simple Invoice → Post Sale with the customer, job and contract filled in. Type the invoice lines.

Bill Job is disabled on a closed job and for users who can open neither Post Job Invoice nor Post Sale. Billing a Progress contract needs the Post Job Invoice permission; billing the other two needs Post Sale.

Navigation: Bill on a Progress contract, or Actions → Bill Job on its job

The Post Job Invoice screen bills each schedule line cumulatively — you enter the position the line should be at as of this application, not the delta. The header captures:

FieldRequiredDescription
Invoice DateYesThe application/invoice date
Period ToNoThe “work completed through” date printed on the application
Due DateNoDefaults from the customer’s payment terms if left blank
Customer PO #NoOverrides the job’s PO number on this application
Format—Standard or AIA (defaults from the contract’s Invoice Format)
NotesNoFree-text notes printed on the application

For each schedule line:

ColumnDescription
DescriptionThe schedule line description (read-only)
Scheduled ValueThe line’s scheduled value (read-only)
PreviousAmount billed on prior applications (read-only)
% CompleteCumulative percent complete — cross-computes with Completed to Date
Completed to DateCumulative completed dollars — cross-computes with % Complete
Stored MaterialsCumulative value of materials stored on site but not yet installed (hidden for Milestone lines)
HeldRetention currently held on the line (read-only)
Release This PeriodRetention dollars to release back on this application (inline release). Released amounts are durable — later billing never re-withholds them.
Work This PeriodCompleted to Date − Previous (derived)
Retention ΔChange in retention held this period (derived)
Net AmountThe amount due this period after retention (derived)

The footer totals This Application, Retention, Released (when any), and Amount Due.

  1. Set the Invoice Date (and optionally Period To, Due Date, Customer PO #, Format).
  2. For each line, enter either a % Complete or a Completed to Date figure (the two stay in sync), and a Stored Materials figure if materials are on site. On a Milestone line, once it has been billed at 100% the fields lock — void and reissue to reverse it.
  3. Optionally enter Release This Period to hand back held retention on the same application.
  4. Click Preview to open a draft PDF of the application from the unsaved values.
  5. Click Post. The application is assigned the next application number and an invoice number, a customer AR invoice is generated, and the schedule of values advances.

Posting a progress application recognizes revenue on the percentage-of-completion basis: installed work credits contract revenue, while newly-stored (not yet installed) material is deferred to Billings in Excess and reclassifies to revenue as it is installed. The account labels below are the AR Settings labels (Accounts Receivable → Settings).

For one application, the journal is:

Account (AR Settings label)DebitCredit
Accounts Receivable AccountNet amount due (billed − retention withheld this period)
Retention Receivable Account (Job Invoicing)Retention withheld this period
Contract revenue account (per schedule line; job type’s contract credit account by default)Work completed (installed) this period
Billings in Excess Account (Job Invoicing)Stored materials added this period

The debit and credit sides always balance, because net due + retention withheld = billed this period = installed work + stored materials. The customer invoice records a gross invoice total (this application’s billing) but an open balance equal to the net amount due; the withheld retention is not yet part of the collectible balance. The customer’s AR balance increases by the net amount due.

A change order changes a contract’s scope or price. It belongs to the contract it changes, and on a Progress contract it always becomes its own line on the schedule of values — never an adjustment to an existing line, so the percentages already billed on the original lines never change.

Navigation: contract screen → Add Change Order, or the job’s Contracts tab → the Add Change Order icon on the contract’s row

FieldRequiredDescription
DateYesDefaults to today
DescriptionYesWhat changed. On a Progress contract this names the new schedule line.
Amount (negative for a deduct)YesThe change in price. A deduct is entered as a negative amount.
Customer approved—Checked by default. Uncheck it if the customer hasn’t approved the change yet.
  1. Fill in the fields. The text under Customer approved says what will happen.
  2. Click Add Change Order.
    • Approved, on a Progress contract — the change order goes on the schedule as its own line, ready to bill on the next pay application. The new line takes the schedule’s retainage % when every retained line uses the same rate; otherwise it starts at 0% (set it before its first billing).
    • Approved, on a Time & Material or Simple Invoice contract — the change order is added to the contract’s total.
    • Not approved — the change order waits on the contract as Awaiting approval. It isn’t billable and counts toward the job’s Pending Change Order Amount, not its contract total.

The contract screen’s Change Orders tab lists the contract’s change orders with a total of the approved ones (Approved change orders: $X). Each row’s Status tells you where it stands and what to do next:

StatusAction
Awaiting approvalApprove — approves it and, on a Progress contract, puts it on the schedule as its own line
On the schedule — Own line NRed trash icon — take it off the schedule (only if it hasn’t been billed). It stays approved.
Approved — not on the schedulePut on schedule
Approved(Time & Material and Simple Invoice contracts) Nothing to do — it’s in the contract total
Not assigned to a contractAssign Here (or Approve Here if pending) — see below

Approve, Put on schedule and Assign Here need the Job Contract edit permission; taking a change order off the schedule needs Manage Schedule of Values. None of them are offered on a closed job.

Change orders added before this release may sit on the schedule as an adjustment to an existing line; they show where they were applied (for example “A1 — Sitework”) and print that way on the documents.

  1. If it has been billed, void the pay applications that billed it — newest first (see Voiding an application).
  2. On the contract’s Change Orders tab, take it off the schedule (red trash icon).
  3. Delete it — Actions → Delete on the change order’s screen, or the trash icon on the job’s Contracts tab.

A change order that is still on a schedule can’t be deleted: “This change order is on a contract’s schedule of values — take it off the schedule (the contract’s Change Orders tab) before deleting it.”

Change orders from before change orders belonged to a contract

Section titled “Change orders from before change orders belonged to a contract”

Change orders recorded before they were tied to a contract are matched up automatically when the job has only one contract. On a job with several contracts they show on each contract’s Change Orders tab as Not assigned to a contract (and on the job’s Contracts tab as Change order (not assigned to a contract)). They are left out of every contract’s totals until you click Assign Here (or Approve Here) on the contract they belong to. Assigning one that is already on another contract’s schedule is refused — it belongs to that contract.

Actions → Convert to Contract on a change order makes it a standalone contract (only if it isn’t on a schedule). Actions → Convert to Change Order on a contract archives its schedule and makes it a change order (only with no posted pay applications and no change orders of its own). Both need Manage Schedule of Values.

A Time & Material contract bills the costs actually recorded on the job.

Markup: material, subs and other costs bill at cost plus a markup. Set the default per job type (T&M Markup % in Job Types); override it on a contract with Markup % in Edit (leave it blank to use the job type’s). The contract screen shows the one in effect as Markup on Costs.

  1. Click Bill Job on the job (or Bill on the contract). Post Sale opens with the customer, job and contract filled in.

  2. Click Add Unbilled Costs under the invoice grid. The dialog lists every cost on the job that no invoice has billed yet, each checked:

    ColumnDescription
    Date / Type / DescriptionThe cost entry — labor shows the employee, materials show the product
    Hours / QtyLabor hours, or the quantity (1 when the cost has none)
    CostWhat the cost was recorded at
    Labor Rate(Labor) Pick the labor rate to bill, or leave Price it on the invoice
    BillsWhat the line will bill
  3. Pick a Labor Rate for each labor row you want priced, and uncheck anything to leave for a later invoice.

  4. Click Add N Lines. The costs become ordinary invoice lines you can still edit:

    • Labor — “Labor — employee (date)”, quantity = hours, unit price = the picked rate (blank if you left Price it on the invoice).
    • Material, subs and other — the product’s description (and number), or the cost’s description, at cost × (1 + markup).
    • Each line’s Account defaults to the job type’s sales account.
  5. Fill in any missing prices, review the total, and click Post.

Posting marks each cost billed, so it won’t be offered again. If the sale is held for approval (a closed period), the costs are marked when the posting is approved.

  • $0 lines — a line that bills a job cost at $0 shows a warning in the yellow box above the grid: “Labor — Pat Smith (03/12/2026)” bills at $0.00 — posting marks that cost billed, so it won’t come up to bill again. Post still works — that’s right for a deliberate no-charge line; if you just forgot the price, type it in and the warning clears.
  • Labor with no hours — a labor cost recorded as an amount with no hours comes in at quantity 0, so it bills $0 whatever rate you pick. Set a quantity, or clear Qty and type the amount.
  • Billing a cost again — to re-bill costs after a correction, tick Also show costs already billed in the dialog. Already-billed rows are marked “(billed)” and unchecked; check the ones you need. Posting moves their billed mark to the new invoice.
  • A line that bills a job cost needs the sale’s Job — Post Sale refuses it otherwise (“This line bills a job cost — choose the job it belongs to”).

Click Bill Job on the job (or Bill on the contract). Post Sale opens with the customer, job and contract filled in; type the invoice lines and post. See Post Sale.

On a job contract, retention withheld on a pay application is a real receivable, not just a memo: the net (after-retention) amount posts to the customer’s AR balance, and the held portion posts to the separate Retention Receivable Account (Job Invoicing). Retention accumulates on each schedule line as you bill.

Retention is released — not edited in place — from the Retention Adjustment screen, reached via Actions → Release Retention on a Progress contract’s screen. In the Job Retention (Holdback) section you release an amount per line (by % of the held amount or as a dollar figure) and click Release Retention; the system generates a retention release invoice per contract and posts:

Account (AR Settings label)DebitCredit
Accounts Receivable AccountReleased amount
Retention Receivable Account (Job Invoicing)Released amount

A release recognizes no new revenue — it moves money from the retention account into regular receivables. The release invoice carries a gross total of $0.00 and a balance equal to the released amount, and is labeled as a retention release. There is no in-place edit of a posted release: to correct one, void the release invoice. Retention can also be handed back inline on a regular application via the Release This Period column. Full details of the Retention Adjustment screen (including legacy memo retention) are in Accounts Receivable → Retention Adjustment.

What it is. Stored materials are materials that have been delivered for the job — to the site, or to a secured location the contract allows — but not yet installed. On a Progress contract you can bill for them before they are installed: a chiller that arrives in March but is set in May can be billed on the March pay application. It prints in the Materials Presently Stored column (column F) of the AIA continuation sheet.

When to use it. Bill stored materials when your contract allows it (most AIA contracts do) and the material has actually been delivered — typically expensive, long-lead or made-to-order equipment that otherwise ties up your cash for weeks before it can be installed. Give that equipment its own schedule line (see Setting up a schedule of values). Don’t bill stored materials for anything not yet delivered, and leave the column at zero if your contract doesn’t allow it. Milestone lines can’t carry stored materials.

How to bill it. The Stored Materials column on Post Job Invoice is cumulative — enter the value currently stored, not the change.

  1. Delivered — raise the line’s Stored Materials by the value delivered. The application bills the increase.
  2. Installed — on a later application, raise Completed to Date and lower Stored Materials by the value installed. The two moves cancel out: nothing new is billed, because the customer was already billed for that material.
  3. Removed without being installed (returned, rejected, moved to another job) — lower Stored Materials without raising Completed. The application credits that amount back to the customer.

Completed to Date plus Stored Materials can never exceed the line’s scheduled value.

What it does to the books

  • It isn’t revenue yet. Stored value you bill is credited to the Billings in Excess Account (Job Invoicing) — a liability: you have billed for work you haven’t performed. When the material is installed (step 2), that amount moves out of Billings in Excess into the line’s contract revenue account. AR Settings must have a Billings in Excess account, or any application that changes stored materials won’t post.
  • The customer owes it like any other billing. The billed amount, less retention, goes on the customer’s AR balance.
  • Retention. With Retain on Stored checked, retention is withheld on stored value when it is billed. Unchecked, retention on that value is withheld when it is installed instead — delayed, not skipped.
  • Over / Under Billing. The job dashboard’s Over / Under Billing compares what you have invoiced with earned revenue, which is based on cost: earned revenue = (actual cost ÷ estimated cost) × contract revenue. Billing stored materials raises invoiced-to-date right away, so the job reads as overbilled until the material’s cost is posted to the job. Positive means billed ahead of earned revenue (overbilled), negative means earned more than billed (underbilled).
  • A check against cost. When posting a pay application, ServiSuite warns (without blocking) if the stored materials billed across the job exceed the material cost received in job cost — a prompt to make sure what you bill as stored was actually delivered.

When a Progress contract is flagged Subcontract (in Edit), its AIA pay application renders the G702S flavor: the certificate cover reads APPLICATION AND CERTIFICATE FOR PAYMENT with TO CONTRACTOR / FROM SUBCONTRACTOR blocks (instead of TO OWNER / FROM CONTRACTOR), and it certifies work “in connection with the Subcontract.” Use it when you are billing a general contractor as their subcontractor.

Each posted application prints in the contract’s configured format — overridable per application at posting time via the Format field. A Preview prints a DRAFT watermark; a voided application reprints with a VOID watermark.

  • Standard — a progress invoice: a line grid (scheduled value, % complete, work this period, stored, retention, amount this period), a separate CHANGE ORDERS section for change-order lines, a Change Order Register, and a totals box (contract sum to date, retention held to date, amount due). A retention-release invoice prints under a RETENTION RELEASE title.
  • AIA — an AIA-style pay application: a G702-equivalent certificate cover (numbered lines 1–9, with the retainage split into a. Completed Work and b. Stored Material, contractor certification and architect certificate blocks, and the Change Order Register) plus a G703-equivalent continuation sheet whose columns run through I — Retainage, with change-order lines listed under their own CHANGE ORDERS heading.

The contract screen’s Pay Applications tab lists the contract’s pay applications:

ColumnDescription
App #Sequential application number
Invoice #The generated invoice number (opens the job invoice detail)
DateInvoice date
TypeProgress or Retention Release (a progress application that only returns retention also reads as Retention Release)
This ApplicationGross billing this application
RetentionRetention change this application
Amount DueNet amount due
StatusVoided applications are chipped Voided

A Show Voided toggle reveals voided applications. Each row’s action menu offers View PDF, Email (sends the application PDF to customer contacts), View Customer Invoice, and Void. Every pay application also appears on the job’s Invoices tab with the rest of the job’s invoices.

Void reverses the application’s ledger entries and unwinds the schedule-of-values progress. Because the billing math is cumulative, applications must be voided newest-first — only the latest non-voided application on a contract can be voided (the menu item is disabled otherwise). Enter a Void Date and confirm. If payments had been applied to the invoice, they become a credit on the voided invoice to be reapplied to the corrected invoice. Voiding requires the Void Job Invoice permission. Because application numbers count only non-voided applications, voiding the latest one frees its number for the next posting to reuse.

Clicking an invoice number in any applications table opens the View Job Invoice screen — a read-only record of one posted application. It shows:

  • A type chip (Progress Billing or Retention Release), and a Voided chip and banner when the application has been voided.
  • Header details: Job (a link back to the job), Contract, Application #, Invoice Date, Period To, Format, Customer PO #, and Notes.
  • The per-line billing snapshot exactly as it posted (Scheduled Value, % Complete, Completed to Date, Stored Materials, Work This Period, Retention Δ, Released, Net Amount), and the This Application / Retention / Amount Due totals.

The Actions menu offers View Invoice PDF, Email Invoice PDF, and View Customer Invoice.


Navigation: Job Costing → Close Job, or via Actions → Close Job from a job

This screen finalizes a job by posting the closing GL distributions and locking the job from further changes.

FieldRequiredDescription
JobYesSearch for the job to close (by Job ID, customer name, or customer ID)
Close DateYesThe date of closing. The close form validates that this date is on or after the latest invoice and payment date on the job.

Once a job is selected, the following information is displayed:

FieldDescription
Contract Amount TotalTotal contract value including change orders
Contract DateDate of the original contract
Site AddressJob site address
Invoiced TotalTotal amount invoiced against this job
Last Invoice DateDate of the most recent invoice
Paid TotalTotal collected
Last Paid DateDate of the most recent payment
Closing Contract GLThe GL account that will receive the contract closing entry
Expense TotalTotal actual expenses posted to this job
Estimate TotalTotal estimated cost from the job estimate

Chips appear to flag issues before closing:

IndicatorColorMeaning
Expenses More Than EstimateYellow (warning)Total actual posted expenses (expense + overhead) exceed the estimated cost
Expenses Less Than EstimateGreen (success)Total actual posted expenses (expense + overhead) are at or below the estimated cost
Job Not Fully InvoicedRed (error)Revenue has not been fully billed
Invoices Not Fully PaidRed (error)Outstanding AR balance remains

If the job has not been fully invoiced or paid, a confirmation dialog appears: “This job has not been fully invoiced and/or paid. Do you still wish to close?” You can proceed or cancel.

TabDescription
Job ExpensesDetailed list of all expense entries that will be included in the close
GL DistributionsThe GL debit/credit lines that will be posted when the job is closed

Click Close Job to finalize. The button is disabled if the job is already closed.

Closed jobs can be reopened from Actions → Reopen Job on the View Job screen. Reopening reverses all of the closing GL distributions, allowing additional expense postings and billing changes.

What happens when a job is reopened:

  1. The system reverses every closing GL entry that was created when the job was closed — both expense closing entries and the contract amount closing entry.
  2. All reversal entries are posted to the “Reopen Job” subledger with the description “Reopening Job [Job ID]”.
  3. The job’s status is set back to open and its closed date is cleared.
  4. The job returns to Open status, and all actions (Post Expense, Manage Estimates, Edit Job) become available again.

Prerequisites:

  • Job must be closed — the Reopen action is hidden when the job is already open.
  • User must have the Re-Open Job permission.
  • The reopen posts at the current date and runs through the standard GL close-date check. If that date falls in a closed GL period, the reopen is submitted to the head accountant for approval (or requires a password) before it can post.

Navigation: Job Costing → Settings

The settings screen organizes reference data into three tabs.

Displays and manages job type definitions. Requires the View Job Type permission to see this tab.

Grid Columns:

ColumnDescription
Job Type IDThe short code for this job type
NameFull name of the job type
Contract Credit GLContract credit ledger account assigned to this job type
Contract Closing Credit GLContract closing credit ledger account assigned to this job type
Estimates Include BurdenWhether labor burden is already pre-factored into this job type’s estimates
DisabledWhether this job type is currently inactive

Actions:

  • + — Create a new job type (requires the Create Job Type permission)
  • Edit (pencil) — Modify an existing job type (requires the Edit Job Type permission; unavailable on disabled job types)
  • Enable (green checkmark) — Re-enable a disabled job type (requires the Edit Job Type permission; shown in place of Delete on disabled rows)
  • Delete — Remove a job type (requires the Delete Job Type permission). If any jobs are associated with the type, it is set to disabled instead of deleted, and the message “There are existing/archived jobs associated with this type. Type has been set to disabled.” is shown.
  • Show/Hide Disabled toggle — Shows or hides disabled job types (disabled job types are hidden by default)

Click a job type row to open the Job Type View screen.

Create / Edit Dialog:

FieldRequiredDescription
IDYesThe short code for the job type. Must be unique across job types. Read-only after creation.
NameYesFull name of the job type.
Contract Credit GLYesServes two purposes: it is the default revenue account for job invoice (pay application) lines of jobs of this type, and it is the offset account debited for the total contract amount when the job is closed (paired with the Contract Closing Credit GL).
Contract Closing Credit GLYesGL account credited for the total contract amount when the job is closed, recognizing the contract as revenue.
Estimates Include BurdenNoMark this checkbox if labor burden is already pre-factored when creating estimates for jobs of this type. Defaults to off.
T&M Markup %NoThe markup added to material, subs and other costs when a Time & Material contract on a job of this type is billed (see Time & Material billing). A contract can set its own. Defaults to 0.

The Job Cost Entry Types tab on the Job Type View screen shows which expense types are available for jobs of this type.

Job cost entry types define the categories of expenses that can be posted to jobs (e.g., “Direct Labor”, “Overtime”, “Materials - Electrical”).

Grid Columns:

ColumnDescription
NameEntry type name
Cost TypeLabor, Material, Subs, or Other
DisabledWhether this entry type is currently inactive

Actions:

  • + — Create a new entry type
  • Edit — Modify an existing entry type
  • Enable (green checkmark) — Re-enable a disabled entry type
  • Delete — Remove an entry type. If any job cost entries are associated with it, it is set to disabled instead of deleted, and the message “There are existing/archived job cost entries associated with this type. Entry type has been set to disabled.” is shown.
  • Show/Hide Disabled toggle — Shows or hides disabled entry types

Create / Edit Dialog:

FieldRequiredDescription
NameYesEntry type name. Must be unique.
Cost TypeYesLabor, Material, Subs, or Other. Read-only after creation.

Job Type Detail — Associated Job Cost Entry Types

Section titled “Job Type Detail — Associated Job Cost Entry Types”

Navigation: Job Costing → Settings → Job Types tab → click a job type to open the View Job Type screen, then the Job Cost Entry Types tab.

The top card of the View Job Type screen shows the job type’s Job Type ID, Name, Contract Credit GL, and Contract Closing Credit GL. Below it, the Job Cost Entry Types tab is a full management surface that controls which cost entry types are available to jobs of this type and, for each one, which GL accounts are used when expenses are posted.

Each row associates one cost entry type (the catalog entries from the Job Cost Entry Types tab) with this job type and its own set of GL accounts. Only cost types that are not already associated with this job type are offered when adding a new association.

Grid Columns:

ColumnDescription
NameThe cost entry type’s name
Cost TypeThe cost type of the entry type (Labor, Material, Subs, or Other)
DebitThe GL account debited for the base expense when an expense is posted
CreditThe GL account credited for the base expense when an expense is posted
Closing DebitThe GL account debited for the accumulated base expense when the job is closed (the Debit account is reversed at the same time)
Overhead DebitThe GL account debited for the overhead portion when an expense is posted
Overhead CreditThe GL account credited for the overhead portion when an expense is posted
Overhead Closing DebitThe GL account debited for the accumulated overhead when the job is closed (the Overhead Debit account is reversed at the same time)
Use Job Specific BurdenWhether labor overhead for this entry type is calculated from the job’s Burden % instead of the cost category’s Labor Factor

Actions:

  • + (Create Associated Entry Type) — Add a new cost entry type association to this job type. Requires the Create Job Type Job Cost Entry Type permission.
  • Edit (pencil) — Modify the GL accounts and burden flag of an existing association. Requires the Edit Job Type Job Cost Entry Type permission; disabled for disabled rows.
  • Enable (green checkmark) — Re-enable a disabled association. Requires the Edit Job Type Job Cost Entry Type permission.
  • Disable (trash) — Disable (soft-delete) an association so the cost type is no longer available for this job type. Requires the Edit Job Type Job Cost Entry Type permission.
  • Show/Hide Disabled toggle — Shows or hides disabled associations. By default disabled associations are hidden.

Create / Edit Dialog (titled “Create New Associated Job Cost Entry Type” or “Edit Associated Job Cost Entry Type”):

FieldRequiredDescription
Cost TypeYesThe cost entry type to associate. Only entry types not already associated with this job type appear in the list.
Debit GLYesGL account debited for the base expense amount when an expense is posted
Credit GLYesGL account credited for the base expense amount when an expense is posted
Closing Debit GLYesGL account debited for the accumulated base expense when the job is closed; the Debit GL is reversed at the same time
Overhead Debit GLYesGL account debited for the overhead amount when an expense is posted
Overhead Credit GLYesGL account credited for the overhead amount when an expense is posted
Overhead Closing Debit GLYesGL account debited for the accumulated overhead when the job is closed; the Overhead Debit GL is reversed at the same time
Should Use Job Specific BurdenNoWhen checked, labor costs posted to this entry type from payroll compute their overhead from the job’s Burden % rather than the cost category’s Labor Factor. Defaults to off.

Job cost categories segment costs within a job for more granular reporting and overhead calculations.

Grid Columns:

ColumnDescription
Category IDShort code for this category
DescriptionFull category name
Material FactorOverhead multiplier applied to material costs (%)
Labor FactorOverhead multiplier applied to labor costs (%)
Subs FactorOverhead multiplier applied to subcontractor costs (%)

Actions: Create (+) and Edit (pencil) buttons.

Create / Edit Dialog:

FieldRequiredDescription
IDYesUnique category code. Read-only after creation.
DescriptionYesCategory name
Material FactorNoOverhead percentage applied to material expenses (2 decimal places). Defaults to 0.00.
Labor FactorNoOverhead percentage applied to labor expenses (2 decimal places). Defaults to 0.00. On Post Job Expense, a labor expense uses this factor when it is above 0; at 0 it falls back to the job’s Burden %.
Subs FactorNoOverhead percentage applied to subcontractor expenses (2 decimal places). Defaults to 0.00.

For the complete list of permissions in this module and what each one allows, see the Permissions Reference.

PermissionActionsDescription
JobCreate, View, Edit, DeleteManage jobs
Job TypeCreate, View, Edit, DeleteManage job types. View gates viewing/selecting job types and seeing the Job Types settings tab; Create, Edit, and Delete gate adding, editing, and removing job types
Job Cost Entry TypeCreate, View, Edit, DeleteManage job cost entry types. View gates viewing the Job Cost Entry Types settings tab; Create, Edit, and Delete gate adding, editing, and removing entry types
Job Cost CategoryCreate, View, Edit, DeleteManage job cost categories. View gates viewing the Job Cost Categories settings tab; Create, Edit, and Delete gate adding, editing, and removing categories
Job ContractCreate, View, Edit, DeleteManage job contracts and change orders. Create also allows Add Change Order; Edit allows editing a contract’s header and Approve / Put on schedule / Assign Here on change orders
Job Cost EstimateCreate, View, Edit, DeleteManage cost estimates
Job Cost EntryCreate, View, Edit, DeletePost and view job expenses
Post Job Cost Expense—Screen permission: access to the Post Job Expense screen
Post Job Materials—Screen permission: access to the Post Job Materials screen
Close Job—Screen permission: access to the Close Job screen
Post Job Invoice—Permission set: post pay applications (Bill on a Progress contract) and open the Post/View Job Invoice and View Job Contract screens (includes preview, PDF, and email of applications)
Post Sale—Permission set (AR module): needed to Bill Time & Material and Simple Invoice contracts, which bill on Post Sale
Manage Schedule of Values—Permission set: edit a contract’s schedule of values, take change orders off a schedule, convert a contract’s type, and delete contracts and change orders
Void Job Invoice—Permission set: void a posted pay application
Adjust Retention—Permission set (AR module): release/adjust retention from the Retention Adjustment screen; enables Actions → Release Retention on a Progress contract’s screen
Re-Open Job—Misc permission: ability to reopen a closed job
View Attachments—Misc permission: view and upload job attachments
Manage Tag Definitions—Misc permission: view and manage job tags
Job Cost Show Rates—Misc permission: shows the Regular/Overtime/Doubletime Hours columns on the Job Expenses grid and reveals the Expense Amount and Overhead Amount values for labor entries. Without it, those hours columns are hidden and labor expense/overhead amounts are blanked.

Example 1: Setting Up a New Job with Estimates

Section titled “Example 1: Setting Up a New Job with Estimates”

Scenario: Precision Mechanical wins a $125,000 HVAC installation contract for Greenfield Construction, Building C. Tom (Project Manager) sets up the job with a full cost estimate.

Step 1 — Create the job:

  1. Navigate to Job Costing → Manage Jobs and click +.
  2. Customer = Greenfield Construction, Site = Building C — 450 Industrial Pkwy.
  3. Job ID = J-1050, Project Name = HVAC Install — Building C.
  4. Job Type = Mechanical Install, Start Date = 03/01/2026, End Date = 06/30/2026.
  5. Retention % = 10%, Burden % = 12%, WIP Reportable = ✓.
  6. Click Create.

Step 2 — Create the contract:

  1. On the View Job screen, open the Contracts tab and click +.
  2. Amount = $125,000.00, Date = 02/15/2026, Description = HVAC Install — Building C.
  3. Under How will this contract be billed?, choose Progress and click Create.
  4. The contract opens on its Schedule of Values with one $125,000 line. Split it into the lines you will bill (for example Ductwork, Equipment, Controls, Piping — they must still total $125,000) and click Save.

Step 3 — Enter cost estimates:

  1. Navigate to Actions → Manage Estimates.
  2. Select Job = J-1050, Contract = Original Contract ($125,000).
  3. Enter estimates by category:
Cost CategoryMaterialLabor HoursLabor $SubsOtherTotal
Ductwork$18,000200$12,000$0$500$30,500
Equipment$35,00080$4,800$0$0$39,800
Controls$8,000120$7,200$5,000$0$20,200
Piping$6,000100$6,000$0$300$12,300
Estimate Total$67,000500$30,000$5,000$800$102,800
  1. Click Save Current Estimate.

Result: Job J-1050 is open with a $125,000 contract and $102,800 in estimated costs. Estimated margin = $22,200 (17.8%).


Example 2: Posting Mixed Expenses and Monitoring Health

Section titled “Example 2: Posting Mixed Expenses and Monitoring Health”

Scenario: Three weeks into Job J-1050, Tom reviews the job after posting labor, subcontractor, and material expenses.

Expenses posted so far:

DateTypeCategoryDescriptionAmount
03/05LaborDuctworkMike Torres — 40 reg hrs × $30/hr$1,200.00
03/05LaborDuctworkMike Torres — 8 OT hrs × $45/hr$360.00
03/10MaterialEquipment2 × Carrier RTU (from inventory)$14,200.00
03/12SubsControlsABC Controls — panel installation$4,800.00
03/15LaborPipingMike Torres — 32 reg hrs × $30/hr$960.00

Total actual cost to date: $21,520.00

Checking job health on the Dashboard tab:

  • Percent Complete: 20.9% (based on actual cost vs. estimated cost)
  • Actual Cost: $21,520.00
  • Estimated Cost: $102,800.00
  • CPI: budgeted cost of work performed ÷ actual cost = (percent complete × estimated cost) ÷ actual cost = 1.00 (green — at or above 1.0). Because percent complete is itself actual cost ÷ estimated cost, this metric stays pinned at 1.00 whenever cost has been posted
  • Actual Margin-to-Date: $26,167 - $21,520 = +$4,647 (a modest positive margin at this early stage)
  • Forecast Final Cost: $102,800 (tracking to estimate)
  • Labor Burn Rate: 80 hours used ÷ 500 estimated = 16% (healthy)

Key observation: The subcontractor cost ($4,800) is tracking close to the $5,000 Controls subs estimate — Tom notes this may need a change order if additional controls work is required.


Scenario: Greenfield Construction requests additional ductwork that adds $15,000 to the contract. After completion, Tom closes the job.

Step 1 — Add the change order:

  1. On Job J-1050, open the Contracts tab and click the contract’s ID to open it.
  2. Click Add Change Order.
  3. Enter Description = “Additional return ductwork — floors 3-4” and Amount = $15,000.00, and leave Customer approved checked (an unapproved change order waits as Awaiting approval and does not count toward the total).
  4. Click Add Change Order. Because the contract is Progress, the change order goes on the schedule of values as its own line, ready to bill on the next pay application.
  5. Total Contract Amount is now $125,000 + $15,000 = $140,000.00.

Step 2 — Enter change order estimates:

  1. Navigate to Actions → Manage Estimates.
  2. Switch to Job Contract = Change Order #1 ($15,000).
  3. Add estimate: Category = Ductwork, Material = $4,000, Labor Hours = 60, Labor $ = $3,600, Other = $200. Total = $7,800.

Step 3 — Post remaining expenses and invoice:

  • All work is completed. Final actual costs:
Cost TypeEstimatedActual
Material$71,000$68,500
Labor$33,600$35,200
Subs$5,000$4,800
Other$1,000$950
Total$110,600$109,450
  • All invoices sent and collected: $140,000 invoiced, $140,000 paid.

Step 4 — Close the job:

  1. Navigate to Actions → Close Job from the View Job screen.
  2. Close Date = 07/15/2026.
  3. Review summary:
    • Contract Total: $140,000.00
    • Invoiced: $140,000.00 ✓
    • Paid: $140,000.00 ✓
    • Expense Total: $109,450.00
    • Status: Expenses Less Than Estimate (green)
  4. Review the GL Distributions tab — closing entries look correct.
  5. Click Close Job.

Final margin: $140,000 - $109,450 = $30,550 (21.8%) — better than the original estimated margin of 17.8%.


Rules are grouped by category.

  • Contract Before Estimate — The UI requires a contract with a contract amount before cost estimates can be entered.
  • Close Date Floor — The close form validates that the job close date is on or after the most recent invoice and payment date.
  • Closed Job Lock — Closed jobs prevent additional expense postings; reopening reverses the closing GL entries.
  • Delete Job Prerequisites — A job can only be deleted when it is open. Closed jobs must be reopened before deletion.
  • Schedule Ties to Contract — A contract’s base (non-change-order) schedule-of-values lines must total the contract amount exactly, or the schedule cannot be saved. Deducts are never entered as negative base lines — they route through a change order.
  • Billing Within Scope — A pay application cannot bill a line beyond its scheduled value, and completed + stored to date together cannot exceed it. A Milestone line bills all-or-nothing (0% or 100%) and, once billed at 100%, is locked — void and reissue to reverse it.
  • Pending COs Not Billable — A change order that is not customer-approved is pending: it is not on any schedule, cannot be billed, and is excluded from Total Revenue (but shown as Pending Change Order Amount).
  • Void Newest-First — Because progress billing is cumulative, only the latest non-voided application on a contract may be voided; earlier applications must be voided newest-first.
  • Change Orders Are Their Own Line — On a Progress contract an approved change order always becomes its own schedule line (a deduct is a negative line); it never adjusts an existing line, so percentages already billed never change. A change order on a schedule can’t change amount or be un-approved, and can’t be deleted until it is taken off the schedule (only if unbilled).
  • Billing Method Switch Guards — A contract can’t switch to Progress once it has been invoiced outside pay applications, and can’t leave Progress while it has posted pay applications or change orders on its schedule.
  • Costs Bill Once — A job cost billed on a Time & Material invoice is marked billed and is not offered again unless you ask for already-billed costs; a line that bills a job cost needs the sale’s job.
  • Overhead Calculation — When posting an expense, the application calculates overhead as Expense × (Category Factor ÷ 100), where the factor is the cost category’s per-type factor (Material Factor, Labor Factor, or Subs Factor). For labor, the job’s Burden % is used only as a fallback when the category’s Labor Factor is 0; a non-zero Labor Factor overrides the Burden %.
  • CPI Dashboard — CPI (BCWP ÷ Actual Cost, where BCWP = Percent Complete × Estimated Cost) auto-calculates with color coding: green ≥ 1.0, yellow 0.9–1.0, red < 0.9.
  • Forecast Projection — Forecast Final Cost auto-calculates from actual costs extrapolated against percent complete.
  • Job Close GL Distribution — Closing a job auto-generates GL entries transferring costs to the contract closing account.
  • Expense Reversal — Reversing a job expense creates offsetting GL entries (negative amounts) and marks the original entry as reversed. For material expenses, inventory quantities are returned to their original locations.
  • Progress-Invoice GL — Posting a pay application debits Accounts Receivable for the net amount due and the Retention Receivable Account (Job Invoicing) for retention withheld, and credits contract revenue for installed work and the Billings in Excess Account (Job Invoicing) for materials stored this period. Stored materials reclassify from billings in excess to revenue as they are installed.
  • Retention Holdback & Release — On a job contract, withheld retention posts to Retention Receivable (Job Invoicing) and only the net posts to AR. Releasing retention generates a $0-gross retention release invoice per contract that debits Accounts Receivable and credits Retention Receivable (no new revenue); correct a release by voiding the release invoice.
  • Progress Contract Starts Billable — Creating a Progress contract creates its schedule of values with one line for the full amount.
  • Approved Change Orders Go on the Schedule — Adding or approving a change order on a Progress contract places it on the schedule as its own line in the same save, at the schedule’s single prevailing retainage rate (otherwise 0%).
  • Job Lifecycle — Create Job → Create Contract (choose how it bills) → Enter Estimates → Post Expenses → Bill Job → Close Job.
  • Change Order Flow — Add Change Order on the contract → Approve (placed on the schedule for Progress) → Enter Estimates → Bill.
  • Reopen Job Flow — Reopen reverses all closing GL entries → Job returns to Open → Post additional expenses or billing → Close again when done.
  • Progress Billing Flow — Create a Progress contract → split its schedule of values → (approved change orders add their own lines) → Bill each period (pay applications, cumulative) → Release retention → Void newest-first if a correction is needed.
  • Time & Material Flow — Create a Time & Material contract → post costs to the job → Bill Job → Add Unbilled Costs → price labor, review → Post (costs marked billed).
  • AP Invoice to Job — Vendor invoice lines distributed to a job create job cost entries (Material, Subs) updating Actual vs. Estimate.
  • Timesheet to Labor — Payroll timesheets allocated to a job create labor cost entries; employee rate × hours = labor expense.
  • Inventory Material — Material picks/allocations from inventory create material cost entries on the job.
  • Job Invoice to AR — Every way of billing a job creates AR invoices: pay applications for Progress contracts, Post Sale invoices for Time & Material and Simple Invoice contracts. Invoice amounts appear in Billing & Collections. (See Progress-Invoice GL, Retention Holdback & Release, Application to AR, and Section 10.)
  • Application to AR — Each posted pay application generates a customer AR invoice (gross total = this application; open balance = net due), collected through the normal AR screens; voiding the application reverses the invoice and turns any applied payments into a reapplyable credit.

Q: I can’t enter cost estimates — the Manage Estimates screen shows no contracts. The form requires a contract with a contract amount before estimates can be entered (see Contract Before Estimate). Navigate to the job’s Contracts tab and create a contract first, then return to Manage Estimates.

Q: Job close fails — “close date before latest invoice/payment.” The close form validates that the close date is on or after the most recent invoice and payment date (see Close Date Floor). Check the job’s Billing & Collections section for the latest dates and set the close date accordingly.

Q: I can’t post expenses to a job — it says the job is closed. Closed jobs prevent additional expense postings (see Closed Job Lock). If you need to add expenses, use Actions → Reopen Job to unlock it. Note that reopening reverses the closing GL entries, so you’ll need to close again when done.

Q: The CPI is red (below 0.9) — what should I do? A CPI below 0.9 means actual costs are exceeding the budgeted cost of work performed by more than 10% (see CPI Dashboard). Review the Actual vs. Estimate dashboard to identify which cost categories are over budget. Consider whether a change order is needed to increase the contract amount, or investigate cost overruns (labor inefficiency, material waste, unplanned subcontractor work).

Q: Overhead amounts seem too high on my job expenses. Overhead is calculated as Expense Amount x (Category Factor / 100) (see Overhead Calculation). Check the overhead factors on the Job Cost Category — each category has Material, Labor, and Subs factors. Also check the job’s Burden %, which applies to all labor costs. If the factors are set incorrectly, update the category settings.

Q: A vendor invoice posted in AP isn’t showing on the job dashboard. Verify the invoice distribution lines in AP were allocated to the correct job and cost category (see AP Invoice to Job). The job field must be filled on the AP distribution line for the cost to appear in Job Costing’s Actual vs. Estimate.

Q: The “Not Fully Invoiced” warning appears when I try to close the job. This means the total invoiced amount is less than the contract amount. You can either send the remaining invoices before closing, or acknowledge the warning and proceed if the shortfall is intentional (e.g., a negotiated reduction).

Q: How do I reopen a closed job? Navigate to the View Job screen for the closed job and select Actions → Reopen Job. The system reverses all closing GL entries and returns the job to Open status (see Reopen Job Flow). Remember to close the job again after making your changes.

Q: How do I reverse a job expense? Open the View Job screen, go to the Job Expenses tab, and click the Reverse button (history icon) on the expense row. Enter a posting date and confirm. The system creates offsetting GL entries that negate the original expense (see Expense Reversal). The original entry remains for audit purposes but is marked as reversed.

Q: I can’t delete a job — the Delete button is disabled. Jobs can only be deleted when they are open (see Delete Job Prerequisites). If the job is closed, use Actions → Reopen Job first, then delete it. Also verify you have the Delete Job permission assigned to your role.

Q: Bill opened the contract’s schedule of values instead of a pay application. The Progress contract’s schedule has no lines yet. Add lines that total the contract amount and click Save (see Schedule Ties to Contract), then click Bill again.

Q: An approved change order isn’t showing up when I bill. Open the contract’s Change Orders tab. Approved — not on the schedule means it still needs Put on schedule; Awaiting approval means the customer hasn’t approved it — click Approve once they have (see Pending COs Not Billable). Not assigned to a contract means it predates change orders belonging to a contract — click Assign Here on the right contract.

Q: I entered a change order by mistake. Void any pay applications that billed it (newest first), take it off the schedule on the contract’s Change Orders tab, then delete it (see Fixing a change order entered by mistake).

Q: Why can’t I switch this contract to Progress? It has already been invoiced outside pay applications (Sales Invoice or Post Sale). Pay applications start from $0 billed, so progress billing would bill that work again — keep billing it as a Simple Invoice (see Billing Method Switch Guards).

Q: A labor line from Add Unbilled Costs shows $0. Either no labor rate was picked (type the unit price) or the cost was recorded with no hours (set a quantity, or clear Qty and type the amount). A $0 line that bills a job cost shows a warning; posting it marks the cost billed (see Time & Material billing).

Q: I need to fix a pay application I already posted. Void it and re-post. Applications unwind newest-first, so if it isn’t the latest one, void the later applications first (see Void Newest-First). Enter a void date; any payments applied to the invoice become a credit to reapply to the corrected invoice.

Q: How do I give the customer their held retention back? Use Actions → Release Retention on the Progress contract’s screen to open Retention Adjustment, enter the amount to release per line, and post. This creates a $0-gross retention release invoice that moves the held amount into the customer’s AR balance (see Retention Holdback & Release); collect it with a normal cash receipt. To reverse a release, void the release invoice. You can also release retention inline on a regular application via the Release This Period column.

Q: Why is Over / Under Billing negative (or positive) on the dashboard? It compares what you have billed to what you have earned. Positive = overbilled (you billed ahead of earned revenue — often stored materials or front-loaded lines); negative = underbilled. Billing stored materials defers that value to Billings in Excess until the work is installed (see Progress-Invoice GL).

Q: My pay application prints “To Owner / From Contractor” but I’m the subcontractor. Flag the contract as Subcontract (contract screen → Edit, Progress contracts only). The AIA application then prints the G702S flavor with To Contractor / From Subcontractor blocks.


  1. Create the Customer in Accounts Receivable if not already on file.
  2. Navigate to Jobs → Create Job. Select the customer, site, and job type.
  3. Set Retention % and Burden % if applicable.
  4. Save. The job is now open.
  5. Navigate to Actions → Manage Estimates to enter the cost budget by category.
  6. Create the Contract from the Contracts tab and choose how it will be billed (see Choosing a contract type).
  7. For a Progress contract, set up its schedule of values before the first bill (see Setting up a schedule of values).
  1. Open Manage Estimates (from the Actions menu or the main navigation).
  2. Select the job and then the contract to estimate.
  3. For each cost category, enter the expected Material Cost, Labor Hours, Labor Cost, Subs Cost, and/or Other Cost.
  4. The Estimate Total footer shows the running total.
  5. Click Save Current Estimate.
  1. Navigate to Post Job Expense.
  2. Select the job and a Job Expense Type with Cost Type = Labor.
  3. Select the Employee.
  4. Enter Regular Hours, Overtime Hours, and/or Doubletime Hours.
  5. The Expense Amount will be auto-computed; click Recompute Amounts if needed.
  6. Click Post or Post & Reuse Job to post and stay on the same job.

Use Post Job Materials when you have many products to post at once:

  1. Select the job and date.
  2. Set default Job Expense Type and Job Cost Category if most lines will share the same values.
  3. Add product rows in the Materials grid; the system auto-adds new rows as you work.
  4. Click Auto-Allocate to pull from available inventory.
  5. Click Post to commit all lines at once.

Use the Dashboard tab on the View Job screen to monitor:

  • CPI — anything below 1.0 means you are over budget
  • Over / Under Billing — a large negative number means you are billing behind your earned revenue
  • Forecast Margin — the projected final margin; compare to Estimated Margin to see margin erosion or growth
  • Cash Position — if negative, you have paid more in costs than you have collected
  1. Ensure all expenses are posted and all invoices are sent and collected.
  2. Navigate to Actions → Close Job from the View Job screen, or go to Close Job from the main menu.
  3. Review the GL Distributions tab to confirm the entries are correct.
  4. If the “Not Fully Invoiced” or “Invoices Not Fully Paid” warnings appear, resolve them first — or acknowledge the warning and proceed if appropriate.
  5. Click Close Job. The job is locked for further edits.
  6. If changes are needed after closing, use Actions → Reopen Job to unlock it.

Add a change order from the contract it changes — Add Change Order on the contract screen, or the icon on the contract’s row in the job’s Contracts tab. Leave Customer approved checked once the customer has signed off; on a Progress contract it goes straight onto the schedule as its own line. Each change order increases or decreases the total contract amount. To budget it, open Manage Estimates and select the change order.

  1. Navigate to the View Job screen for the closed job.
  2. Click Actions → Reopen Job. The system reverses all closing GL entries and returns the job to Open status.
  3. Post any additional expenses or billing adjustments as needed.
  4. When finished, use Actions → Close Job to re-close and re-post the final GL distributions.
  1. Navigate to the View Job screen and open the Job Expenses tab.
  2. Find the expense entry you want to reverse and click the Reverse button (history icon).
  3. Enter the Posting Date for the reversal entries.
  4. Click Reverse. The system creates offsetting GL entries and marks the original as reversed.
  5. For material expenses, inventory quantities are automatically returned to their original locations.

Each Job Cost Category has three overhead factors (Material, Labor, Subs). When you post an expense to that category, the application calculates an overhead charge:

Overhead Amount = Expense Amount × (Factor ÷ 100)

The overhead is posted to the overhead GL accounts defined on the expense type. This is useful for applying indirect costs (project management time, facility costs) to jobs proportionally without manual calculation.