The invoice is the shipment’s own lines.

Month-end billing across every shipment on one screen. Supplier bills are allocated onto the job’s cost lines, credit notes and partial payments sit on the invoice, and what the two sides leave behind is that job’s profit — not a figure assembled afterwards from somewhere else.

176
Demo invoices
Each one billed from its shipment’s own lines rather than keyed again at month end.
1,955
Invoice lines
88 of those 176 invoices once showed none of them. That defect is now a release check — see the rule below.
What it does

One screen for the month, one record per job.

Every shipment that is ready is billed from a single screen rather than opened one at a time. Credit notes, partial payments and the balance stay on the invoice. Credit terms come from the customer card, and while an invoice is past those terms that customer’s delivery order is locked — and the lock names the invoice.

On the cost side, the supplier’s bill is allocated onto the cost lines of the jobs it covers, so a single carrier invoice across nine houses lands on nine jobs. The job P&L is then the two sides of the same record. With the Connect extension, invoices, credit notes and supplier bills go to QuickBooks both ways, and a payment read back marks the invoice paid.

Fig. 1 — The number is typed once and then it travels.lib/charge-line.ts
QuotationShipmentInvoice USD 1,614.00 USD 1,614.00 USD 1,614.00 Nothing is re–typed, so nothing can be typed differently.
Nothing on the invoice was re-keyed from the quotation, so an invoice that disagrees with the quote is a decision somebody made on the record rather than a typing slip.
Invoice INV-2609-0331 · HBL AMCH-2609-0418 · Net 30 Part paid
Invoice INV-2609-0331 — charge lines
LineBasisQtyRateAmount
Ocean freight, LCL8.000 CBM / 12,000 KGS · W/M = 12.000 Per W/MRevenue ton, greater of W or M 12.00087.001,044.00
Terminal handling, originPer shipment1185.00185.00
DocumentationPer B/L165.0065.00
Pickup, Vernon CAPer truck1320.00320.00
Waiting at pickup90 min over 2 free hours · from the driver’s link Per hour1.5065.0097.50
Payment received 30 Sep−800.00
Invoiced 1,711.50  ·  Paid 800.00Balance 911.50
Why the first line reads that way
The quantity prints its inputs. The B/L says 8 CBM and the invoice bills 12.000 — and the line shows the 12,000 KGS that made it 12. Nobody has to take the number on trust, and nobody has to recalculate it to check.
Recording — 12 s, silent, loops R-04 · not yet shot
What it shows A month of invoices raised from one screen, and the profit on a single job appearing on the same record a second later.
Where to shoot it Billing — month end, then Job P&L, September on the demo company
The take
  1. On the month-end screen, tick the shipments that are ready and press the button once.
  2. Let the invoice numbers fill the column.
  3. Open one of them, then its Job P&L — stop on Profit 441.50, 25.8%.
Why here Every system claims batch billing. What is worth seeing is that the batch and the per-job profit are two sides of one record rather than a run followed by a report somebody builds afterwards.
One rule

A charge line proves itself.

Ocean LCL rates are filed in FMC tariffs as “per 1 Cubic Meter (M) or 1,000 Kilos (W), whichever yields the greater revenue”. A shipment of 8 CBM weighing 12,000 kilos therefore has a billing quantity of 12.000 W/M — not 8, and not 12 of anything that can be pointed at in the container.

The accident this prevents: writing 12.000 CBM on the invoice contradicts the 8 CBM on the bill of lading — an invoice inflated by half, sent to a customer who can read both documents. Writing 8.000 gives away four revenue tons. Both are one keystroke, and both are invisible on a printed invoice that shows only a quantity.

The line therefore carries its own inputs: 8.000 CBM / 12,000 KGS · W/M = 12.000 (Fig. 2). FCL does not pass through this at all — a container is a flat price rather than a weight or a volume, and it branches separately. The pounds-to-kilos constant exists in exactly one place in the code. Authority: 46 U.S.C. 41104(a)(2), 46 CFR 532.5 and 545.4.

Measured rather than assumed

A list that was cut must say it was cut.

On this system’s own demonstration data, 88 of 176 invoices displayed Lines 0. There were 1,955 lines. Nothing had failed loudly: a row cap had been hit and the screen drew the truncation as a fact about the invoice.

An invoice list is precisely where that is most expensive, because zero lines is a plausible number — a draft invoice can legitimately have none. Two of the twenty release checks (check_row_caps and check_rest_cap) therefore fail a build where a capped list does not say so, and a third (check_silent_errors) fails one that paints a zero over a read that did not finish.

Why the checks are published →

Fig. 2 — The greater of the two, and nothing else.46 U.S.C. §41104(a)(2) · lib/rton.ts
FMC filed tariff — ocean LCL “per 1 Cubic Meter (M) or 1,000 Kilos (W), whichever yields the greater revenue” Volume 8 CBM on the B/L 8.000 Weight 12,000 kg ÷ 1,000 12.000 Greater the four R.TON between them Chargeable quantity 12.000 W/M 12.000 CBM fifty per cent over — it fights the B/L 8.000 four R.TON short, on every file like it FCL neither weight nor volume — a flat rate per container
Both wrong answers are a single keystroke away and neither is visible on a printed invoice that shows only a quantity — which is why the line carries the two figures it chose between.
What this does not do

This is billing rather than accounting.

No general ledger
No chart of accounts, no bank reconciliation, no month-end close. With the Connect extension the invoices, credit notes and supplier bills go to QuickBooks both ways, and payments read back and mark an invoice paid.
Historic invoices do not import
Customers, open shipments and rate sheets migrate. Old invoices stay with the existing accounting system, where they already balance, and the office starts with the open jobs.
No custom report builder
Nine standard reports and saved views in the Insights extension. Instead of a builder, the exports are widened: shipment CSVs in five shapes — billing, customer, ops, customs, and one that is every field held in the system.
An undo will refuse
An imported batch can be rolled back as a batch — unless something in it has already been invoiced or dispatched. In that case it refuses, and says so, rather than silently unpicking a job that has left the building.
Get a demo

A disputed invoice is welcome.

It is rebuilt from a quotation, a supplier bill is allocated across the jobs it covers, and the profit on each one is shown. 45 minutes, and the session ends with a written quotation.