Finance module

TMS finance — a true P&L and batch payments

📅2026
1 month
👥2 developers
🔒 your-tms.com/finance/dashboardRevenue$138,817Net Profit$54,839Net Margin39.5%AR Outstanding$23,840P&L waterfall · JuneRevenueCarriersAccess.WagesSalaryOverheadNetrevenue − Σ(costs) = net profit ✓ reconciled to the centCost breakdownCarriersWages + OOAccessorialsSalary + OHBatch paymentPay 7 invoices3 carriers · $12,480 total · 1 check · 1 proof fileAR Outstanding$23,840AR Overdue$6,120AP Carriers$18,940AP Cross-dock$456Wages due$9,300Net position+$4,900
8
P&L cost lines
1
check pays many carriers
2
AP submodules

The challenge

The freight company’s TMS handled operations well, but finance lived elsewhere: how much was really earned in a month, what was owed to carriers and cross-dock vendors, where the overhead went — all of it was counted in spreadsheets. They needed a finance layer right inside the system: an honest P&L, receivables and payables, and convenient bulk payments.

What was built

A finance module was built into the TMS: a dashboard with a P&L waterfall and a Net Profit formula as the single source of truth, two AP submodules (carriers and cross-dock vendors) and overhead expense tracking — all reconciled against real data.

1

P&L waterfall: revenue minus eight cost lines (carriers, pallets, lumpers, accessorials, dispatcher wages, owner-operators, salaries, overhead) = Net Profit; the reconciliation invariant is pinned

the cost donut, KPIs and P&L always agree.

2

Carrier batch payment: unpaid invoices of several carriers are closed with one "check" and one proof file; the Combined payments tab shows every batch with a per-invoice breakdown.

3

Cross-dock Payments: what’s owed to vendors for drops and repacks; the amount is always read live from the load’s charges

no data duplication.

4

General Expenses: categories, recurring and one-off, frozen by month

and instantly reflected in Net Profit.

5

Period-scoped AR/AP: outstanding/overdue invoices, wages due and the net position all follow the selected period.

6

A Factoring column on carriers

it’s immediately clear who actually gets paid.

7

An eight-segment cost-breakdown donut and previous-period comparison on every KPI.

The result

The owner opens one dashboard and sees the month’s true bottom line — the formula is reconciled against real data to the cent. Paying a week’s stack of invoices takes a few clicks instead of manual one-by-one processing, and cross-dock vendor debts no longer get lost.

Tech stack

PHP (Yii2)MySQLJavaScriptApexCharts

Have a similar challenge?

Discuss a project

Next case

Automation

TMS notifications in Telegram — events, digests, 2FA