Price accessorials with rate cards
A rate card is a dated, scoped price list for accessorials. It supplies the standard price for jobs and quotes, while an authorized quote user can record a reasoned exception on one draft without changing that shared rate. This walks through building a card, controlling visibility, retiring items safely, and understanding which card wins when several could apply.
8 minute setup · Updated August 29, 2026
Exactly one card is used per job. Cards never merge.
Conterminal ranks every active card and picks a single winner. If your detention rate is on a customer card and your port surcharge is on a destination card, the operator will only ever see the items on the one card that won. Put everything an operator needs on the card that wins.
Cards, scope, and effective windows
Open Billing → Accessorial Rate Cards. The page is gated to a carrier workspace. Workspace administrators can create cards, install a starter pack, and change pricing or visibility. Managers can read the published choices and use them on jobs, but they cannot change the shared configuration.
Every card carries a name, a scope, an effective window, and a status. The scope is the part people get wrong, so read this pair carefully.
- Customer
- A dropdown of your billable organizations. Leaving it on “Carrier default” means the card is not customer-scoped and can serve any customer.
- Destination
- Free text. Blank means “All destinations.” A value here is matched exactly against the job's destination — it is not a substring or keyword search.
- Effective From
- Required, defaults to today. The card applies when the job's service date is on or after this date.
- Effective To
- Optional. Blank means open-ended. When set, the card applies through that date inclusive.
The summary line under each card name restates all of it: customer or Carrier default · destination or All destinations · Effective date · Updated date, with the item count on the right. Read that line before you edit anything — it is faster than re-checking the form fields.
Creating a blank or seeded card
Two forms sit at the top of the page. They behave differently in one important way, so pick deliberately.
Create Blank Card
- Name it. Required. If you submit an empty name the action returns Rate card name is required. and nothing is created.
- Set the scope. Choose a Customer, type a Destination, or leave both alone for a carrier-wide default card.
- Set Effective From. Defaults to today.
- Choose Status. This form offers only Draft and Active, and defaults to Draft. Leave it on Draft until the items are priced.
- Submit. Press Create Blank Card. The new card appears below with No accessorial items yet.
Install Drayage Starter Pack
This installs the latest published version of Conterminal's nine-item drayage starter pack. Set a name and Effective From date, then select Install Starter Pack. Installation is version-aware: repeating it returns the existing non-archived card for that starter-pack version instead of creating a duplicate.
Review the starter rates before activation.
The installed card is a Draft. Its items are active inside that draft, but they cannot price jobs or appear as quote options until an administrator reviews the rates and activates the card.
- Chassis Rental
- $40.00 per day, after 2 included days
- Wait Time / Detention
- $75.00 per hour, after 2 included hours
- Pier Detention
- $50.00 per hour, after 2 included hours
- Early Pick-up
- $125.00 flat per occurrence
- Extra Stop
- $125.00 flat per occurrence
- Attempted Pick-up / Dry Run
- $100.00 flat per occurrence
- Overweight Fee
- $75.00 flat per occurrence
- Reefer Surcharge
- $125.00 flat per container
- Port Liberty / Howland Hook Surcharge
- $175.00 flat per container
None of the seeded items has the fuel-surcharge flag set. The pack is platform-versioned, while your installed card remains tenant owned. Later platform versions do not overwrite the rates, active switches, quote visibility, or labels you have already reviewed.
Adding items: charge type, unit, pricing rule, included quantity, rate, FSC
Expand a card, open Add accessorial, complete the fields, and select Add accessorial again to save it.
- Charge Type. Required. The dropdown opens on Select charge type and lists every active platform accessorial type as Name (CODE). You map to these; you cannot create one.
- Display Label. Optional. This is the text operators and the eventual charge description will show. Leave it blank and it falls back to the charge type's own name.
- Unit. One of container, day, hour, or occurrence. The unit is a label on the quantity — it does not change the math.
- Pricing. One of flat, per unit after included, or manual quote. This one does change the math.
- Quote Scope. Choose whether the option applies to one route segment, the whole quote, or either context.
- Included. Free quantity, floored at 0. Only meaningful for per unit after included.
- Rate. Dollars. Dollar signs and commas are stripped; blanks, negatives, and non-numbers are rejected.
- Sort. Defaults to 100. Items display in ascending sort order.
- Show in quotes. Checked means the item may appear as an optional service when its card and item are active. Clear it to keep the rate available for operations without offering it during quote creation.
- FSC. A checkbox recording that this item is fuel-surchargeable. Read the warning below before you rely on it.
How each rule computes
- flat
- amount = quantity × rate. The included quantity is ignored.
- per unit after included
- amount = max(0, quantity − included) × rate. A quantity at or below the included amount prices to $0.
- manual quote
- No amount is computed at all. The rate field is allowed to be blank, and nothing downstream can bill it until someone edits an amount onto the attached accessorial.
Rate is required unless the rule is manual quote.
Submitting flat or per unit after included with an empty or invalid rate returns Rate is required for priced accessorials. and the item is not saved. The same check runs when you edit an existing item.
The FSC checkbox does not add money to the charge today.
The flag is stored and carried onto the staged accessorial, but the fuel-surcharge percentage on a staged accessorial defaults to 0 and no screen in the product sets it. The fuel surcharge on the resulting billing charge is therefore always $0. Treat FSC as intent you are recording, not as a calculation, and add fuel surcharge through your normal billing configuration.
Editing an existing item
Each saved item has a compact summary row. Expand it to edit the label, unit, pricing rule, quote scope, included quantity, rate, order, and visibility, then select Save accessorial. The charge type code and name are fixed. To use another charge type, add a new item and retire the old one. Active makes the item available for billing and internal use. Show in quotes is narrower: it offers the item during quote creation only while the item, card, effective date, and carrier-default scope are also eligible.
Removing, archiving, and restoring an item
Expand the item and select Remove item. The confirmation explains which of two outcomes Conterminal will use.
- Unused item
- The item is deleted when no quote or operation references it. It disappears from the card after the action completes.
- Referenced item
- The item is archived instead. Conterminal turns off Active and Show in quotes but keeps the original rate and references as pricing evidence.
An archived row stays visible to administrators with its reason. Expand it, turn on Active or Show in quotes, and save to restore it. Use Show in quotes only when you want the item offered during quote creation; an active operational rate can remain hidden from quotes.
Draft vs Active
Only cards with status active are ever considered when a job looks for pricing. Draft and archived cards are invisible to operators — they are not ranked lower, they are excluded from the query entirely.
- Draft
- The default for a blank card. Edit freely; no job will price against it.
- Active
- In play. Every edit you make is immediately live for jobs that match this card.
- Archived
- Retired. Available on the card row's status dropdown but not on the create form. Prefer this over deleting a card that has already produced charges.
Change status on the card's own row and press Save Card. If an operator somehow reaches an item on a non-active card, attaching it fails with Rate card is not active.
How a card is chosen when several match
Conterminal loads your active cards, drops the ones that cannot apply, scores the rest, and keeps the single highest score.
Step 1: elimination
A card is dropped outright if it is not active, if the job's service date falls outside its effective window, if it names a customer other than the job's customer, or if it names a destination that is not an exact match for the job's destination. A card with no customer matches every customer; a card with no destination matches every destination.
Step 2: specificity
- Customer and destination both set
- Score 4 — wins
- Customer only
- Score 3
- Destination only
- Score 2
- Neither (carrier default)
- Score 1 — last resort
Step 3: tie-breaks
Equal specificity is broken by the later Effective From date. If two equally specific cards share the same effective-from date, the winner is decided by an internal record-id comparison — deterministic, but arbitrary from your side. Do not build on it. When you re-price, give the new card a later Effective From and close out the old one with an Effective To.
Destination scope rarely matches what you would type.
On a container, the destination the card is matched against is the operation shell's route summary — the leg destination labels joined together — and only if the shell has no route does it fall back to the deliver-to BCO name, then the customer name, then the consignee name. A multi-leg route produces a joined string, so a card scoped to a single terminal name will not match it. Prefer customer-scoped cards unless you have confirmed the exact destination string a job produces.
Two smaller limits worth knowing: matching is case-insensitive and ignores leading and trailing spaces, but is otherwise literal, and only the 100 most recent active cards by Effective From are loaded for ranking. If you are carrying hundreds of active cards, archive the dead ones.
Attaching an accessorial to a job
Operators work from the Accessorials card on the container detail page, or on a cartage job's detail page. Its subtitle states the flow: Stage accessorials on the job shell, then create pending billing charges when they are ready.
The line under it is your diagnostic. Either it reads Active card: followed by the winning card's name, customer, and destination — or it reads No active card matched this shell. Manual accessorial entry is still available. A Manage Cards button links straight back to the rate-card page.
- Pick a rate item. The dropdown shows each active item as its display label, its rate, and — when the item has an included quantity — the phrase after N unit. Only items from the winning card appear, and only those still marked Active.
- Set Quantity. Defaults to 1. This is the only pricing input the operator supplies; unit, pricing rule, included quantity, rate, and the FSC flag are all copied from the card item.
- Set Service Date. Prefilled from the job's pickup date, then its gate-out date, then its scheduled date, then today.
- Choose Bill To. The options are the job's own billable parties — customer, BCO, broker, forwarder, warehouse — filtered to active tenant organizations and shown as Name · role. If there is exactly one candidate it is preselected.
- Press Attach. Add optional Notes first if the charge needs justification later.
For anything the winning card does not cover, expand Add manual accessorial. It exposes the same fields plus Charge Type, Display Label, Unit, Pricing, Included, and Rate, so an operator can price a one-off without a card. Manual rows are labeled Manual instead of Rate card in the list.
Attaching copies the price. Editing the rate card afterwards does not reprice anything already attached to a job. That is intentional — a card change cannot silently rewrite work already staged.
A staged row lands as ready only when it has a bill-to, a service date, a quantity above zero, a rate, and a computed amount. Missing any of those, it lands as planned. Row buttons are Mark Ready, Waive (which zeroes the amount), Void, and — once ready and above $0 — Create Pending Charge.
Changing an accessorial price on one quote
A quote-manager user can change an accessorial amount on one internal quote draft without editing the tenant rate card. Calculate and save the draft, then use Quote-specific accessorial priceson the Price step or the quote detail page.
- Check the standard price. The row shows the engine amount and the rate-card source used for the calculation.
- Enter the quote price. Type the total amount this quote should charge for that selected accessorial.
- Record the reason. A non-empty reason is required. Use a concrete explanation such as an approved customer discount or one-time service concession.
- Save. Conterminal records the original amount, override, reason, actor, and rate-card provenance. Reset removes the exception and restores the engine amount for that draft.
The override changes one draft only.
It does not edit the shared rate card or future quotes. Submitted website quotes remain immutable after the customer has seen them.
Materializing it into a billing charge
Create Pending Charge is the moment money exists. It writes a pending unbilled charge carrying the accessorial's display label as the description, its quantity, rate, amount, service date, bill-to, and charge type, then flips the accessorial to billed and locks the row.
The database re-checks everything before it writes. A charge is created only when all of these hold:
- The accessorial status is ready.
- A bill-to organization is set, active, has a party type, and is not a trucker.
- A service date is set and the quantity is above zero.
- Both the rate and the amount are set, and the amount is above $0.
- The underlying delivery order is still active and not superseded, or the underlying cartage job is not cancelled.
- You still have write access to the job shell.
If nothing qualifies, nothing is written and you get No charge was created. Confirm the accessorial is ready, active, and has an amount above $0.
Pressing the button twice is safe.
Each accessorial can own only one non-void charge. A repeat press returns the existing charge rather than creating a duplicate.
After that the row is closed to editing. Attempting to change it returns Billed or void accessorials cannot be edited., and attempting to change its status returns Billed accessorials cannot be changed. Corrections happen on the billing side, against the charge.
Charge types are platform-managed
You map to a charge type. You cannot invent one.
The Charge Type dropdown is the platform's canonical accessorial catalog. Carriers have no screen that adds to it. Only Conterminal platform administrators can create or rename a canonical code, on the Accessorial Catalog page. The count in the rate-card page header — N canonical accessorial types — is that catalog, not yours.
What you do control is the Display Label. Call the charge whatever your customer's contract calls it; the code underneath stays canonical so reporting and invoicing stay comparable across carriers. The platform's own instruction is explicit: use the OTHER charge type for a carrier label that has no canonical code yet, until that code is promoted into the catalog.
If you need a genuinely new canonical code — not a relabeled existing one — email support with the code you want, the plain-English name, and one sentence on what it bills for. Codes are normalized to uppercase with underscores, so ask for PORT_SURCHARGE, not Port Surcharge.
Troubleshooting
The card priced nothing — the operator saw no items
The card is almost certainly still Draft. Blank cards are created as Draft and only active cards are considered at all. Open the card row, set Status to Active, and press Save Card. If it is already Active, check that the items themselves still have the Active checkbox ticked — an unticked item is hidden from operators.
The wrong card won
Specificity beats recency. A customer-and-destination card outranks a customer card, which outranks a destination card, which outranks the carrier default. If the loser is the card you wanted, it is less specific, its effective window does not cover the service date, or its customer/destination does not match the job. Narrow the card you want, or archive the one that keeps winning.
The destination scope did not match
Destination matching is exact after lowercasing and trimming — not a substring or keyword match — and on a container the value being matched is the shell's joined route summary, not a single terminal name. Read the Active card line on the job's Accessorials card to see what actually matched, and prefer a customer-scoped card when the destination string is unpredictable.
No active card matched this shell
The Accessorials card says so directly. Either no active card covers this customer, destination, and service date, or the card that should have covered it is Draft. Manual accessorial entry stays available while you fix the card.
Rate is required for priced accessorials
The pricing rule is flat or per unit after included, and the Rate field was empty or not a valid non-negative number. Enter a rate, or switch the rule to manual quote — but a manual-quote item computes no amount and cannot be turned into a charge until an amount is edited onto the staged row.
No charge was created
The full message is “No charge was created. Confirm the accessorial is ready, active, and has an amount above $0.” Work down the guard list: status ready, bill-to set and an active non-trucker organization, service date set, quantity above zero, amount above $0, and the delivery order still active and not superseded.
The starter pack did not create another card
Starter-pack installation is version-aware. If this workspace already has a non-archived card from the current drayage pack version, Conterminal returns that card instead of duplicating it. Edit the existing draft, or archive it before intentionally installing the same version again.
The fuel surcharge came through as $0
Expected. The FSC checkbox records that an item is fuel-surchargeable, but the surcharge percentage on a staged accessorial is always 0 today, so the computed surcharge is always $0. Apply fuel surcharge through your billing configuration instead.
The accessorial can no longer be edited
Billed and void rows are locked: “Billed or void accessorials cannot be edited.” and “Billed accessorials cannot be changed.” Once a pending charge exists, correct it on the billing side against the charge, not on the job shell.
Operation shell not synced yet
The job has no operation shell, so there is nothing to stage accessorials against and the panel shows only that line. Wait for the shell to sync, then reload the detail page.