Solavel Solavel Docs

Landed costs

docs/solavel-finance/landed-costs.md

Who can use this: Owner, Manager, Accountant. URL / Route: /finance/ap/landed-costs (finance.ap.landed-costs.index). Detail: finance.ap.landed-costs.show, edit, update, create, store. Action endpoints: finance.ap.landed-costs.preview, post, void. Plan / feature gate: feature:tracker.landed_costs (default: enabled on standard plans where inventory is on). Permissions: landed_costs.view, landed_costs.create, landed_costs.post, landed_costs.void.

Purpose

A Landed cost spreads import/handling charges (freight, customs duty, insurance, port handling, broker fees) across the inventory items they relate to, so each item's on-hand cost reflects what it really cost to land on the shelf — not just the supplier's invoice price.

Without landed costs, a stocked item's cost is whatever you paid the supplier on the bill. With a landed cost, you take a separate bill (e.g. a freight bill) and allocate it across the receiving bill's lines, lifting each item's costing layer.

Step by step

Browse landed costs

Open /finance/ap/landed-costs. Each row shows the landed-cost number, date, originating cost bill (the freight / duty bill), target bill (the goods bill), total allocated, and status.

Create a landed cost

Route: finance.ap.landed-costs.create / store. Permission: landed_costs.create.

  1. Click New landed cost.
  2. Pick the Cost bill — the freight, duty, or handling bill you want to spread.
  3. Pick the Target bill(s) — the inventory bill(s) whose items received the goods.
  4. Choose an Allocation method:
    • By value — allocate proportionally to each line's amount.
    • By quantity — allocate proportionally to each line's quantity.
    • By weight / volume — allocate proportionally to a per-item attribute.
    • Manual — enter the amount per line yourself.
  5. Click Preview (landed-costs.preview) — the system shows each line's current cost, the share of landed cost added, and the new layered cost. Review before saving.
  6. Save as Draft or Save and Post.

Edit a draft

Route: finance.ap.landed-costs.edit / update. Permission: landed_costs.create. Drafts only.

Post a landed cost

Route: finance.ap.landed-costs.post. Permission: landed_costs.post.

Posting writes the GL journal:

  • Debit Inventory (each item's costing layer is lifted by its share).
  • Credit the cost-bill clearing account (or the freight/duty expense account, depending on the cost bill's setup).

The new layered cost is what COGS will use when the item is later sold.

Void a landed cost

Route: finance.ap.landed-costs.void. Permission: landed_costs.void.

Reverses the GL journal and rolls each affected item's costing layer back to its pre-landed-cost value. Use Void if you allocated to the wrong target bill or used the wrong method.

How the journal looks

You have a goods bill for 100 units of stock at JOD 10 each = JOD 1,000 inventory. A separate freight bill of JOD 200 is booked to a clearing account. You allocate the freight as a landed cost by value across the inventory bill.

Step 1 — the goods bill (already posted on its own):

Account Debit Credit
Inventory (100 × JOD 10) 1,000.00
AP — Goods supplier 1,000.00

Step 2 — the freight bill (already posted on its own, to a clearing account):

Account Debit Credit
Landed-cost clearing 200.00
AP — Freight supplier 200.00

Step 3 — the landed-cost allocation (this page) — adds JOD 200 to the inventory layer and clears the freight clearing account:

Account Debit Credit
Inventory 200.00
Landed-cost clearing 200.00

Each of the 100 units is now valued at JOD 12 (JOD 10 + JOD 2 of freight). When the unit is later sold, COGS will be JOD 12 — not JOD 10.

Partial allocation when some stock has already moved: if 30 of the 100 units were already sold before you raised the landed cost, only 70 units remain on hand. By value allocation still spreads the full JOD 200, but it can only lift the layer on the remaining 70 units — those go from JOD 10 to JOD 12.86 each. The portion of freight notionally attributable to the 30 already-sold units cannot be retroactively put through COGS and is left on the clearing account (or expensed, depending on your setup).

Behaviour and rules

  • Cost only adjusts on-hand stock. If an item has already been sold or moved out, the landed cost cannot be retroactively applied to that movement — it only affects the remaining on-hand layer.
  • Inventory costing method matters. With FIFO, the landed cost lifts the specific received layer. With weighted average, the lift is averaged across on-hand stock for that item.
  • Landed-cost JE source label. On the Journal entries page, the landed-cost JE is tagged with the teal Landed Cost chip.
  • Period lock. Posting / voiding require the date's period to be open.
  • The cost bill is still a bill. A landed cost does not replace booking the freight / duty bill — it's an additional allocation step on top. Book the cost bill normally, then create a landed cost to redistribute it into inventory.

Common mistakes

  • Allocating across already-sold stock. Once a unit has been invoiced and COGS posted, you can't retroactively lift its cost. The portion of freight notionally attributable to those units sits on the clearing account — see the worked example above.
  • Cost bill in a different currency. A landed cost bill in EUR allocating to inventory bought in USD needs an FX conversion — the rate on the landed-cost date is used. Confirm rates are current via Multi-currency.
  • Forgot to book the freight bill first. Landed cost is an allocation of an already-booked bill. If the freight bill isn't posted yet, raise it via Bills, then come back here.
  • Wrong target bill. Allocating to the wrong inventory bill puts the freight on the wrong items' cost layer. Void the landed cost and re-do — the inventory layer rolls back.
  • Method mismatch. "By value" works well when items are similar value; "by weight" or "by volume" is better when one heavy item dominates the freight. Pick deliberately.

Permissions / restrictions

  • View: landed_costs.view.
  • Create / edit drafts: landed_costs.create.
  • Post: landed_costs.post.
  • Void: landed_costs.void.

Related

  • Bills — both the goods bill and the cost bill are ordinary bills.
  • Purchase orders — typical upstream document for the goods bill.
  • Inventory — costing layers and methods (FIFO / weighted average).
  • Suppliers — freight / customs / broker counterparties.
  • Multi-currency — when goods and freight are in different currencies.
  • Chart of accounts — Inventory / clearing accounts.
  • Reports — Inventory Valuation, COGS by Item.
Source: docs/solavel-finance/landed-costs.md ← All documentation