The buyer and approver paths

Reading the budget ledger

Every movement on a budget, and what caused it.

A budget's remaining amount is a number somebody will question. The ledger is how you answer: every movement on the budget as its own entry, with the reason and the request or order behind it. Nothing changes a budget's balance except a new entry, and no entry is ever changed or deleted.

You read it when a customer's controller phones and says "KST-2200 shows €3,100 left, our ERP says €4,800". The difference is always explained by the entries. This article is how to read them.

Where you find it

Under Procurement › Cost centres › Budgets, the list shows every budget with its cost centre, Seq, Allowance, Remaining, period start and end, and whether it is active. Open a budget, then its Ledger tab. Each entry shows:

ColumnMeans
WhenThe time of the movement
ReasonWhat kind of movement it was (below)
AmountThe change. Negative spends, positive gives back
Before, AfterThe remaining amount on either side of the entry
ActorWho made a manual correction
NoteAny note that came with it

Behind each entry sits the purchase request or the order that caused it. Amounts are in the cost centre's currency. Nothing is ever converted.

The reasons

ReasonWritten whenEffect on remaining
InitializedThe budget is createdLifts it from zero to the allowance
ReservationA purchase request is submitted, or a pending request's lines are correctedLowers it at once, or moves it by the difference
WithdrawalA request is declined or cancelledGives the reservation back
OrderAn order is placed with no approval needed: the amount is spent in one step. Or an approved request becomes an order: a zero entry naming the orderLowers it (direct order) or leaves it unchanged (approved request)
CancellationAn order placed through the procurement app is cancelled, whole or line by lineGives the booked amount back; zero if the budget's period has closed
ManualSomebody corrects the budget by hand, through the cost-centers APIWhatever the correction says. The person is recorded as Actor
RolloverA recurring budget's period ended and its successor was openedMoves the carried amount from the finished budget to the new one
LapsedSame momentWrites off what the finished budget did not carry

Two things in that table surprise people.

The money moves at the reservation, not at the order. A pending request already lowers the remaining amount, so the next buyer sees only what is truly left. When the request becomes an order, the ledger gets an Order entry of zero that names the order; nothing moves a second time. A remaining amount that looks too low usually has pending requests behind it.

There is no "delivered" or "invoiced" stage. The ledger knows reserved, booked and given back. Whether the goods arrived or the invoice was posted is your ERP's business, not the budget's.

How spend is spread over several budgets

A cost centre can hold several active budgets. Spend takes them in the order of their Seq number: the first is used up before the second is touched. The last budget absorbs whatever is left over and may go below zero. A negative remaining amount is therefore not an error. It is the record that more was booked than the allowance held, and it stays visible until somebody adds money.

A budget alone does not stop spend. What stops it, or sends it to approval, is an approval rule with the condition Available budget. Without one, spend above the remainder is booked and the last budget goes negative.

When a period ends

Recurring budgets roll over by themselves. Every night, each recurring budget whose period has ended gets a successor starting the day after, with the same allowance plus whatever the carry-over setting allows:

Carry-overWhat moves into the new period
Never (the default)Nothing
LimitedWhat was left, up to the cap
AlwaysEverything that was left

The finished budget shows a Rollover entry for what carried and a Lapsed entry for what did not, and it is set inactive. An overspend never carries: a period that went below zero keeps its negative amount, and the new one starts clean.

A budget whose period ended more than one full period ago is not rolled forward step by step. It is left as it is, which means the nightly run did not reach it. If you find a recurring budget still active long after its period end, open the current period's budget by hand: on the cost centre, under Budgets, with New budget.

What it does not guarantee

Two carts submitted at the very same moment can both read the same remaining amount and both be booked. The ledger records both entries correctly, and the remaining amount ends lower than either buyer saw. On a budget with a tight remainder and many buyers, expect it occasionally, and read the ledger rather than the balance when it happens.

Reconciling with the customer's ERP

When the shop's figure and the ERP's disagree, work through the entries in this order:

  1. Pending requests. Reservation entries without a later Withdrawal or Order belong to requests still waiting. The shop counts them; the ERP has never heard of them. This is the most common difference by far.
  2. Orders not yet in the ERP. An Order entry with an amount is a direct order the shop booked at once. If the ERP has not received it yet, that is timing, not an error.
  3. Cancellations. A Cancellation entry gives budget back. One of zero means the cancellation came after the budget's period had closed; the money stays in the old period. Moving it into the current one is a manual correction.
  4. Manual entries. Read the Actor and the Note. An unexplained manual entry is the one to raise with the customer.

Where the procurement app could not book or give back budget at the time, it keeps track for you: Procurement › Direct order log lists checkouts whose booking is still pending or was refused, and Procurement › Budget returns lists cancellations whose return is pending or was refused. Both offer a retry, and for a refused case a manual settlement with a note.

What to check

  • The latest entry's After equals the budget's Remaining in the list. It always should.
  • Every Reservation entry older than a few days belongs to a request that is still Pending under Purchase requests. If the request is long decided, run Run reconciliation on the purchase-request list; it returns budget a declined or cancelled request is still holding.
  • After a period end, the finished budget is inactive and a successor with the next period exists.

Next