/
Free Consultation
All articles
Guides5 min read

Intercompany Inventory Transfers and Their Journals in Odoo

Moving stock between companies in one group isn't just a warehouse move — it's two transactions with two journals. Here's how Odoo handles it.

By Tim Keyklik

Many business groups in Indonesia run as several legal entities (PTs) — one for distribution, one for retail, or different entities per region. When stock moves from one company to another within the same group, it feels on the ground like simply moving goods between warehouses. In the books, though, that move is two transactions, not one.

This misunderstanding tends to surface only at month-end: group profit looks larger than it should, the balance between companies never quite reaches zero, and finance spends hours matching figures by hand. This article explains what actually happens, then how Odoo handles the whole flow.

Why an internal move is really two transactions

Two PTs are two separate legal entities, each with its own books, tax registration, and financial statements. So when Company A hands goods to Company B:

  • For Company A, this is a sale — stock goes out, a receivable from B is created.
  • For Company B, this is a purchase — stock comes in, a payable to A is created.

Both need a document (an invoice), both hit a separate ledger, and both must be eliminated when the group's consolidated statements are prepared. Skip any of these steps and the group numbers can no longer be trusted.

What the journal actually records

Say Company A moves goods that cost IDR 100 million to Company B at a transfer price of IDR 120 million. The essence of what gets recorded:

SideWhat is recorded
Company A (seller)Inventory down IDR 100m, COGS IDR 100m, receivable from B IDR 120m, profit IDR 20m
Company B (buyer)Inventory up IDR 120m, payable to A IDR 120m
Group consolidationRemove the intercompany receivable/payable; remove the IDR 20m profit still sitting inside B's inventory

That last line is the one most often missed. As long as the goods have not been sold outside the group, the IDR 20 million from the transfer has not really been earned by the group — it has only moved from the left pocket to the right. If it isn't eliminated, group profit and inventory are overstated. For the group, inventory should return to IDR 100 million (its original cost), not IDR 120 million.

The tax side: this is a related-party transaction

Because the two PTs are separate entities with their own tax registrations, a stock transfer is generally treated as a delivery of taxable goods — meaning it needs a tax invoice (faktur pajak) and VAT, not just an internal delivery note.

On top of that, the transfer price between companies in one group is a related-party transaction that draws DJP's attention. The price must be at arm's length and usually needs transfer-pricing documentation to support it. Setting the transfer price too high or too low — to shift profit between entities — is precisely what gets scrutinized. This is not merely a warehouse operation.

How Odoo handles the flow

Odoo's strength here is one system for many companies. Instead of two separate systems reconciled after the fact, both PTs live in a single database while keeping their ledgers apart. What to make sure of:

  1. Intercompany transactions mirror automatically. When Company A raises a sales order to Company B, Odoo can immediately create the matching purchase order on B's side — along with the invoice and the bill. One action, both sides recorded, with no double manual entry.
  2. Goods movements post their own inventory journal. With automated inventory valuation, every item leaving warehouse A and entering warehouse B records its own inventory and COGS journal — no waiting for period close.
  3. The tax invoice comes from the same transaction. Because A's sale and B's purchase start from synchronized documents, the tax invoice and VAT follow the same figures — cutting the discrepancies that appear when each side is booked twice.
  4. Consolidation gathers every entity's books. Odoo can combine several companies' accounts into one group report and flag intercompany balances for elimination — including helping you see the profit still lodged in inventory.

The point: Odoo does not erase the accounting and tax complexity, but it turns it into one cleanly recorded flow rather than a month-end matching exercise.

Signs your setup is off

  • The intercompany balance never reaches zero at consolidation, always leaving a difference that eventually gets written off.
  • Stock transfers are recorded as ordinary warehouse moves, with no invoice and no sale/purchase journal on either side.
  • Group profit feels larger than the actual profit from sales outside the group.
  • The team records the seller side and the buyer side separately and by hand, so the figures often don't agree.

Next steps

Intercompany stock transfers are one of the places a group most easily loses accuracy — and one of the easiest to fix once the flow lives in a single system. If your group runs several PTs and still reconciles inventory and intercompany balances by hand, start by organizing the transfer and consolidation flow in Odoo.

Need help setting up multi-company and consolidation in Odoo? See our services or contact the Keyklik team.

Note (DYOR — Do Your Own Research): This article is general information, not tax, legal, or accounting advice. The VAT treatment of intercompany transfers, transfer-pricing requirements, and consolidation rules can vary with your group's structure and circumstances, and can change over time. Always verify against official sources (DJP at pajak.go.id, the accounting standards that apply to you, Odoo documentation) and consult your tax advisor and accountant before making changes.

#odoo#intercompany#inventory-transfer#journal#multi-company#guide

Ready to start your digital transformation?

Talk to our team about your Odoo, ERP, or business integration needs.