Outsourcing a pharmaceutical warehouse to a specialized 3PL operator such as Livlina (many still know it under its former name, PDC) solves the problem of storage, order picking and the cold chain. It also creates a new problem: your ERP stops seeing the warehouse.
Which orders shipped? Which came back with a partial delivery? How much stock is really sitting on the shelf, in which lot, with what expiry date? If the answer lives only in the operator's system, your ERP is guessing.
We built an Odoo module that ends the guessing. It has exchanged data with the Livlina logistics center since 2020.
Three flows, one module
1. Delivery orders go out
When a delivery is ready in Odoo, one click marks it ready to ship. The module generates an order file in exactly the format the logistics center expects, with the customer type (wholesaler, hospital, pharmacy or other company), shipping method, warehouse code and required delivery date, then sends it over SFTP. The delivery in Odoo moves to shipped status, so everyone can see which orders are already at the operator's warehouse.
2. Shipment confirmations come back
When the operator ships the goods, a confirmation file comes back and the module automatically updates the delivery in Odoo: fully delivered or partially delivered. Customer service sees the actual delivery status without opening a second system.
3. Stock reconciliation
The warehouse sends stock files with quantities per product and lot, together with expiry dates. The module writes them straight into Odoo's inventory: lots are created or updated with expiry and removal dates (ready for FEFO picking), quantities are corrected, and any discrepancy between the file and the data in Odoo is logged, never silently overwritten. Non-stockable items, such as services, are safely skipped instead of producing junk records.
On top of that, products carry an expected availability date that clears itself automatically the moment the stock actually arrives, so sales always quotes live data.
The unglamorous parts are the hardest
Anyone can demo the happy path of a file transfer. The value of this module lies in years of handled edge cases: character encodings from legacy systems, combined deliveries, priorities by customer type, files arriving half empty, lots with dates that do not match the ERP, and connections that have to keep working while the operator rebuilds its infrastructure.
That last one is not hypothetical. When Livlina migrated its SFTP platform in 2025 (new hosts, new ports, SSH key authentication, IP whitelisting), the integration migrated with it. That is what maintenance means: the module is not a file handed over once, it is a live connection we keep alive.
FAQ
What is PDC, and what is Livlina?
PDC is the former name of the pharmaceutical logistics operator now operating as Livlina. Our module speaks the file protocol of its distribution center.
What data is exchanged?
Outgoing delivery orders, incoming shipment confirmations (including partial deliveries), and warehouse stock files with lot numbers and expiry dates.
How does the module handle lot numbers and expiry dates?
Lots are created in Odoo from the warehouse data, with expiry and removal dates set for FEFO logic. If a warehouse file does not match the data in Odoo, the difference is logged for review, never silently overwritten.
Does this run automatically?
Yes. Scheduled jobs in Odoo generate and send order files, and import and process incoming files. Every run is logged, and every file is archived as an attachment in Odoo.
Will you build the same thing for another 3PL operator?
Yes. The pattern (orders go out, confirmations come back, stock reconciliation with lots and expiry dates) fits any logistics operator with a file interface or an API. The Livlina implementation shows the depth we go to.
Let's talk
If your 3PL operator and your ERP communicate through emailed spreadsheets, you are paying people to be the interface. We build the real one.