Labor rates, parts markup tiers, estimate statuses, billing types, and the estimate-to-invoice lifecycle.
PlaneConnection’s maintenance billing system calculates work order costs from
configurable labor rates and parts markup rules, generates formal estimates,
and tracks those estimates through approval and invoicing. This page is the
technical reference for all billing configuration and lifecycle rules.
Billing configuration is managed in Maintenance > Billing Settings.
For step-by-step setup instructions, see the billing settings how-to guide.
For the API reference, see Maintenance API Endpoints.
Labor rates are defined per workspace and determine how technician time is
priced on billing estimates. Each rate has a base hourly rate plus optional
multipliers for overtime and AOG (Aircraft on Ground) situations.
Display name for the rate (e.g., “Standard A&P Rate”).
mechanic_type
Enum
Yes
One of: ap, ia, avionics, sheet_metal, general.
hourly_rate
Number
Yes
Base hourly rate in USD. Must be greater than zero.
overtime_multiplier
Number
No
Multiplier for overtime hours. Defaults to 1.5.
aog_multiplier
Number
No
Multiplier for AOG priority work orders. Defaults to 1.5.
effective_date
Date
Yes
Date from which this rate applies. Allows rate versioning.
expires_at
Date
No
Optional expiration date. Null means the rate is active indefinitely.
is_default
Boolean
No
If true, this rate is used when no specific rate is assigned to an estimate line item.
Only one rate per workspace should be marked as the default (is_default = true). When generating
an estimate, the system uses the most recent default rate if no rate is explicitly assigned. If no
default rate exists, a system fallback rate is applied.
Parts markup rules define the profit margin applied to parts costs on billing
estimates. Rules are configured as tiered cost ranges, allowing different
markup percentages for different part price points.
When an estimate is generated, each parts line item’s unit cost is evaluated
against the markup rules in sort order. The first rule whose cost range
matches the unit cost determines the markup percentage.Example tier structure:Markup tiers are fully configurable. A typical setup uses tiered cost
ranges with higher markup percentages on lower-cost parts and lower
percentages on major components. You can create as many tiers as needed
to match your shop’s pricing strategy.
In addition to parts markup, operators can configure shop supply charges
that cover consumables (safety wire, sealant, hardware, rags, etc.) not
individually tracked as inventory items.Shop supply rules support two basis types:
When billing type is not_to_exceed, the estimate includes an nte_amount
field representing the maximum the customer will be invoiced. If actual costs
exceed the NTE amount, the operator absorbs the difference.
When a billing estimate is generated for a work order, the system performs
the following calculation:
1
Collect work order items
2
The system queries all items attached to the work order, classifying each as
either a labor task (has estimated_hours) or a parts item (has quantity
and unit_cost).
3
Calculate labor costs
4
For each labor item:
5
Look up the applicable labor rate (default rate for the workspace if none specified)
Multiply estimated hours by the hourly rate
Sum all labor line items into labor_total
6
Calculate parts costs with markup
7
For each parts item:
8
Evaluate the unit cost against active markup rules (in sort order)
Apply the matching tier’s markup percentage to compute the unit price
Multiply unit price by quantity for the line total
Sum base parts costs into parts_total
Sum markup amounts into parts_markup_total
9
Calculate shop supplies
10
Evaluate shop supply rules against the labor total or as flat amounts.
Sum into shop_supplies_total.