Third-party logistics

Every unit knows whose it is

Two clients can keep the same item in the same bin and stay two separate balances, with two counts and two service invoices. The stock owner is a column of the movement ledger and of the stock table, not a field on a customer record: that is why the separation holds.

Talk to us

Per row
Segregated stock

The owner is one of the seven columns that identify a stock row: same bin, same item, two owners, two balances.

Four
Metered services

Units received, units shipped, lines picked and units on hand at period end: counted from the ledger, not from a sheet on the side.

Portal
Your client looks for themselves

Read-only on their own goods and their own orders, through a key you can expire and revoke.

Zero
Migrations to start

The owner column is there from day one even with a single owner: starting is a line of configuration, not a data move.

Running logistics for other people is not a bigger warehouse: it is a different one. You have to keep apart the goods of clients who must not learn about each other, let each of them see their own stock without opening your management system, and at the end of the period say exactly how much work you did for each — without rebuilding it from memory and a spreadsheet. CargoNode carries the owner inside the data model from day one, even for a warehouse that only holds its own goods: the day third-party work starts, there is nothing to migrate.

The owner is a dimension, not a label

A stock row is identified by seven things together — warehouse, location, item, lot, serial, owner, state — and the owner is one of those seven, enforced by a database constraint. It is not a descriptive field somebody fills in properly for as long as they remember to. The same holds for the ledger: receipts, picks, shipments, transfers and adjustments are booked to somebody from the start, and a movement with no owner does not exist. In practice, two clients’ goods can live in the same aisle without ever mixing in the numbers, and “how much of this does that client have with us” is a question with a computed answer.

  • The owner is part of the stock key, alongside warehouse, location, item, lot, serial and state
  • Every movement is booked to an owner: there are no unowned goods
  • Two owners in the same location stay two rows with two balances
  • The operator’s own goods are an owner too — the default one
  • Stock, valuation and counts all read per owner
Cell B-04-2 · one item, two owners
  • ROSSI50 units · SKU-4471B-04-2 · available
  • BIANCHI30 units · SKU-4471B-04-2 · available
  • ROSSI ORDERS60 unitshe has 50, and that is where it stops

It is not a note on the label: they are two stock rows, because the owner is one of the seven columns that identify them — and Bianchi’s thirty are not taken to make the order add up.

Whoever logs in sees their own goods and nothing else

Segregation is not a screen that hides a few columns: it is a filter resolved at the door, before any query leaves, and derived from the identity of the caller — never from a parameter the browser could change. Reads are born already narrowed: stock, orders, shipments, returns, delivery notes. Totals and page counters are filtered along with the rows, not just the visible lines, or the page would say “one of three hundred and forty” to somebody who has twelve. And another owner’s document answers that it does not exist, rather than that it is not theirs: knowing that it exists is already information they are not entitled to.

  • The owner is resolved from the caller’s identity, never from the request
  • Stock, orders, shipments, returns and delivery notes filtered together
  • Totals and page counts filtered too, not only the rows on screen
  • Another owner’s record answers as non-existent
  • A user bound to third-party work but with no owner assigned sees nothing, rather than everything
An account belonging to owner Rossi
  • STOCKOnly Rossi’s rowstotals and counters included
  • SEARCHA code that exists, but is Bianchi’sno row at all, not even a zero
  • DOCUMENTOpened by number, but someone else’sthe answer is that it does not exist
  • NO OWNERA third-party user with no owner assignedsees nothing: in doubt it closes

The owner is resolved from the identity of the caller, never from a parameter the browser could change: the filter is settled at the door, before a query is issued.

The client portal

Your client needs two answers — how much stock do I have, and where are my orders — and does not need your management system to get them. The portal is a read-only page that answers those two, and there are two ways in: a key you hand over, with an optional expiry and revocable the day the contract ends, or a real user invited from the Users page and bound to that one owner. The same code sits behind both routes, so they cannot tell two different stories. Stock states are spelled out in words — available, committed, under inspection, damaged — because the reader is a customer, not one of your operators.

  • Their own stock row by row: item, warehouse, location, state and quantity
  • Their own orders, with the stage each one has reached
  • Two ways in, a key or a user account, reading the same code
  • Keys with a visible prefix, last use, optional expiry and revocation
  • Read-only by construction: nothing can be written from the portal
  1. You create the ownerOn the Monday you sign: it is a row, not a migration.
  2. You set the ratesYour warehouse price list, plus the exceptions you agreed with him.
  3. You issue the key and send itWith a visible prefix, last use, optional expiry and revocation the day the contract ends.
  4. On Tuesday he looks for himselfHis own stock and his own orders, read-only and with the states written in plain words, without access to the rest of the warehouse.

Billing the service on the warehouse’s own numbers

The bill is built on four items, and none of the four is typed in by hand: units received, units shipped, lines picked and units on hand at the end of the period. They are read from the movement ledger — the same source stock itself comes from, not a parallel counter somebody has to remember to increment. Rates live on a price list for your warehouse, and on top of it each client can have their own: a negotiated condition is an exception, not a second price list to keep in step. The tax regime is your choice — standard, exempt, out of scope — and it is frozen onto the document, so an old invoice stays readable after the regime changes.

  • Four metered items: receiving, shipping, picking, stock at period end
  • One warehouse price list, plus per-client exceptions on top of it
  • Tax regime standard, exempt or out of scope, frozen onto the document
  • One invoice per client and period: the second is refused by the database, not by a check that can be walked around
  • A period can be redone, but the earlier invoice has to be cancelled first
  • Every line carries the measured quantity and the rate it applied
Service invoice · June
Metered itemWhere it comes fromQuantityRate applied
Units receivedthe month’s receiving movements1,240warehouse price list
Units shippedthe month’s shipping movements1,115warehouse price list
Lines pickedconfirmed pick lines388this owner’s exception
Units in stockstock on 30 June2,960warehouse price list
Four items, none of them typed in: they are counted from the movement ledger, the same source the stock figure comes from. Storage is charged on the last day of the period, so the same invoice regenerated in September gives the same amount — which is what lets you defend it.

From the service invoice to the books

With the Accounting module on, the service invoice does not stay a calculation: it becomes a double-entry posting with its own journal reason, on a receivables account dedicated to logistics clients — kept apart from trade receivables, so the two sub-ledgers never mix — with the net amount on logistics service revenue and the tax on its own account. At the same moment an open item appears in the due-date ledger, and the client’s payment closes it. Without that module the activity billing still works: it measures, keeps the history and shows what is owed, and stops short of the books.

  • A dedicated journal reason for the service invoice, apart from goods sales
  • Receivables from logistics clients kept separate from trade receivables
  • Logistics service revenue kept separate from goods revenue
  • An open item in the due-date ledger, closed by the payment
  • Without the Accounting module the calculation stays, the posting does not
  1. The service invoiceThe four items with their measured quantity and applied rate, the taxable amount and the tax under the regime you chose.
  2. With Accounting switched onIt becomes a double-entry posting, on a receivables account dedicated to owners and kept apart from the customer one.
  3. An open item appearsIn the ledger of amounts due, and the owner’s payment closes it.
  4. Without that moduleThe calculation stays and the amount due is visible: it stops before the books, and that is all that changes.

The rest of the warehouse does not change

Third-party work is not a warehouse apart: it is the same warehouse with one more dimension. You receive against a purchase order booked to the owner or blind, put away, pick, pack, ship and print the Italian delivery note — the legally required document that travels with the goods — with the right declared reason on it: consignment and subcontract work are on the list, not only sale. Cycle counts open on a single owner, so you can check one client’s goods without stopping everybody else’s. And the number of owners and depots is written on your own row: it goes up when you need it to, without changing plan, because there is only one plan.

  • Receiving against an order booked to the owner, or blind
  • Delivery notes carrying their declared reason: sale, return, goods on approval, subcontract work, consignment, free of charge
  • Cycle counting on a single owner, or across all of them
  • Transfers between depots with a transit balance that is real
  • Owners, warehouses, users, monthly orders and connectors are numbers on your row, and they may have no ceiling at all
  1. ReceiveRECEIVINGGoods arrive and are counted against the order, or blind.
  2. Put awayA-12-3Put-away takes them to the shelf, with a double scan.
  3. PickPACK-2The pick moves them from the shelf to the bench.
  4. PackPACK-2Parcels are built at the bench, item by item.
  5. ShipDISPATCHThe outbound movement produces the delivery note.

And goods come back in three ways

  • ReturnsA return is an inbound movement: it lands in receiving and goes back to the shelf from there.
  • TransfersBetween two warehouses goods sit in a transit location with a real balance.
  • AdjustmentsA count variance becomes a movement only once it has been approved.
The physical cycle, and the three ways goods come back inConfirmed put-away is what makes goods pickable: the pick only sees what is genuinely on the shelf, so it never promises a unit still sitting on the dock. Receiving and shipping on the same day works fine.

Frequently asked questions

Can one client see another client’s goods?

No, and not because a screen hides them. Whoever logs in carries their own owner, derived from their identity and never from an editable parameter; reads are born already narrowed, totals and counters included, and another client’s document answers that it does not exist rather than that it is not theirs. If a user is bound to third-party work but has no owner assigned, they see nothing: in doubt the system closes rather than opens.

Do I have to migrate data when I start working for third parties?

No. The owner is a column of the data model from day one, even in a warehouse that only holds its own goods: those goods are already booked to the default owner. Starting means switching on the Third-party logistics module, creating the real owners and raising their limit. No export, no re-platforming, no downtime.

Can I charge different rates to different clients?

Yes. There is one price list for your warehouse with the four items, and on top of it each client can have their own: where there is an exception the exception wins, where there is none the list wins. So you never end up with one price list per client to keep in step by hand, and every invoice line states the rate it applied.

How do my clients see their stock and what has gone out?

From the portal, where each of them logs in and sees only their own goods: their stock and their orders — without you opening your management system to them, and without a single line belonging to somebody else ever reaching their screen. Or through an API key tied to them alone, which their own system queries directly within exactly the same perimeter, so the figures they read are yours rather than a copy. And if they sell online, their orders can come in from their store through the connector. A full EDI exchange is a project in its own right, with your client’s own format and partner: if you have one who works only that way, bring them to us — that is the kind of thing you judge by looking at a real file, not at a list of acronyms.

Is the service invoice the document I send to my client?

It is the calculation of what is owed, and it carries everything needed to defend it: the four items with their measured quantity, the rate applied, the net amount, the tax under the regime you chose and the total. With the Accounting module it also becomes a double-entry posting and an open item in the due-date ledger. The legal numbering of the document, though, does not originate here: here you settle how much, and on which measured figures.

How many clients can I have?

As many as your own row says. The number of owners is a limit written next to warehouses, users, monthly orders and connectors, and it may have no ceiling at all. When you try to create one past the limit the system tells you straight away, instead of creating it and presenting the bill later.

Let us put one of your clients on CargoNode

Tell us how many clients you hold goods for, how you keep them apart today and how you measure what you invoice. We will walk the whole loop on a case of yours: receiving, portal, service invoice.

Talk to us