Skip to content

Billing & Pricing

The Warehouse 3PL billing system is activity-based: every warehouse operation automatically generates a Billing Transaction record that captures the service performed, the quantity, and the charge. This creates a complete, auditable log of all billable events that can be rolled up into client invoices.

How Billing Works

Billing Transactions are created automatically — warehouse staff do not need to do anything special. Every time a Receiving is submitted, a Wave is released, a Pack Task is completed, etc., the billing fires in the background.

INFO

Billing Transactions are append-only. They are never edited after creation. If a correction is needed, a reversing transaction (negative qty) is created and a new transaction with the correct values is added.


Activity Types

Activity TypeTriggered ByBilling UnitDescription
ReceivingReceiving submittedPer unit receivedUnloading, counting, and checking inbound goods
PutawayPutaway Task completedPer unit put awayMoving goods from staging to storage bins
PickPick Task completedPer unit pickedSelecting items from bins for an order
PackPack Task completedPer order linePacking items into cartons/pallets
ShipPack Task completedPer shipmentGenerating Delivery Note, labeling, handoff to carrier
StorageScheduled (daily/monthly)Per pallet per day/monthOngoing storage occupancy charge
ReturnsReturn ReceivingPer unit returnedProcessing inbound customer returns
Special HandlingManual entryPer occurrenceNon-standard services (re-labeling, kitting, etc.)

Rate Card Setup

A Rate Card defines the per-activity rates for a specific client. See Master Data Setup → Rate Card for creation instructions.

Rate Lookup Logic

When a Billing Transaction is created, the system looks up the rate as follows:

  1. Find the active Rate Card for the client (Effective From ≤ today, not expired)
  2. Find the row in the Rate Card matching the Activity Type
  3. Apply the Rate and UOM from that row
  4. If no matching row, rate = 0.00 and a warning is flagged

WARNING

If a client has no active Rate Card, or if an activity type is missing from the Rate Card, the Billing Transaction is created with Amount = 0 and marked as "Rate Missing". Review and correct these before generating invoices.

Rate Card Versioning

Rate Cards are versioned by Effective From date. To update rates for a client:

  1. Create a new Rate Card with the new rates
  2. Set the Effective From to the date the new rates take effect
  3. Submit the new Rate Card
  4. The old Rate Card remains valid for transactions before the new effective date

Billing Transactions

Each Billing Transaction record captures:

FieldDescription
ClientThe 3PL client being charged
Activity TypeWhat was done
Reference DoctypeDocument that triggered this (Receiving, Pack Task, etc.)
Reference NameID of the triggering document
Transaction DateDate the activity occurred
QtyNumber of units / shipments / lines
UOMUnit of measure (Each, Order Line, Shipment)
RateRate from Rate Card at time of billing
AmountQty × Rate
CurrencyClient billing currency
InvoiceLink to Invoice (populated when invoiced)
StatusPending / Invoiced / Cancelled

Billing Transaction List

Filtering and Review

Before generating invoices, review pending Billing Transactions:

Warehouse 3PL → Billing Transaction
Filter: Client = [Client Name], Status = Pending, Date range = [month]

Look for:

  • Transactions with Amount = 0 (rate missing)
  • Unusually high quantities (data entry errors)
  • Missing transactions (activity occurred but no billing created)

Invoice Generation

INFO

Full automated invoice generation is on the roadmap. Currently, invoices are generated manually from the Billing Transaction summary.

Current Process (Manual)

  1. At month end, go to Warehouse 3PL → Reports → Monthly Billing Summary
  2. Filter by Client and Month
  3. Review the summary — total by activity type
  4. Create an ERPNext Sales Invoice:
    • One line per activity type
    • Qty = total units billed for the period
    • Rate = from Rate Card
  5. Link the invoice back to the Billing Transactions (set Invoice field)
  6. Submit and send the invoice

Planned: Automated Invoice Generation

The planned automation will:

  1. Run on the 1st of each month (or on demand)
  2. Group all Pending Billing Transactions by client
  3. Create a Sales Invoice per client with line items by activity
  4. Mark all included Billing Transactions as Invoiced
  5. Send the invoice by email to the client's billing contact

Example: TechGear Inc Billing

The test dataset ships with activity data for TechGear Inc. Here is a sample month's billing:

Inbound Activity

DateActivityQtyRateAmount
Jan 5Receiving680 units$0.50$340.00
Jan 5Putaway680 units$0.25$170.00

Outbound Activity

DateActivityQtyRateAmount
Jan 8Pick25 units$0.35$8.75
Jan 8Pack3 lines$1.50$4.50
Jan 8Ship1 shipment$5.00$5.00
Jan 12Pick15 units$0.35$5.25
Jan 12Pack2 lines$1.50$3.00
Jan 12Ship1 shipment$5.00$5.00

Storage

PeriodPalletsDaysRateAmount
Jan 1–3114 pallets31 days$0.50/pallet/day$217.00

January Total

CategoryAmount
Inbound (Receiving + Putaway)$510.00
Outbound (Pick + Pack + Ship)$31.50
Storage$217.00
Total Due$758.50

Special Handling Charges

For non-standard services not covered by standard activity types, create a Manual Billing Transaction:

  1. Go to Warehouse 3PL → Billing Transaction → New
  2. Set Client, Activity Type = "Special Handling"
  3. Enter Qty, Rate, and a Description
  4. Submit

Use this for:

  • Re-labeling or re-packaging
  • Kitting / assembly services
  • Hazmat surcharges
  • After-hours or rush handling fees
  • Returns processing (complex)

Built on Frappe/ERPNext