Sales · Purchasing · Inventory · Accounting

Four modules, one ledger underneath

Ledgerly runs the cycle a small business actually has: an order, the stock that leaves the shelf, the invoice, the money. What makes it an ERP rather than four disconnected tools is that each of those is one event, recorded once, in a set of books every report is computed from.

What every document does

The shortest honest summary of the product. Four documents move the books without touching stock, three move stock and the books in one transaction, and three touch stock while posting nothing.

DocumentStockDebitCredit
Sales orderCommits the quantity——
DeliveryLeaves the warehouseCost of salesInventory
InvoiceUntouchedReceivableRevenue, tax payable
ReceiptUntouchedCashReceivable
Purchase orderExpected, not on hand——
Goods receiptArrives, at costInventoryGoods received
Supplier billUntouchedGoods received, taxPayable
PaymentUntouchedPayableCash
Stock count (short)Adjusted to the countStock lossInventory
Warehouse transferMoves warehouse——

A count that finds more stock posts the same entry the other way round, as a gain. Every posting above is balanced, unique to its document, and undone by a reversal rather than a delete. New to debits and credits? Start here →

Sales

Orders, partial deliveries, invoices and receipts — four documents because a sale rarely happens in one moment, and each of them means something different to the books.

An order is a commitment, not a transaction

Confirming a sales order commits the stock, so the same twenty units cannot be promised twice. It posts nothing, and that is the point: nothing has been earned and nothing has moved. An order you never ship has no business in an income statement.

Deliveries can be partial

Ship four of the ten and the order stays open for six. Each delivery costs its goods out at the moving average in force that day, so cost of sales posts in the transaction that moves the stock.

The invoice raises the receivable

Invoicing posts the receivable, the revenue and the tax as one balanced entry; a receipt clears the receivable against cash. What a customer owes is read from the ledger, so the aging and the balance sheet cannot disagree.

Nothing is deleted to fix it

Voiding a posted document books a reversing entry, so last month stays as reported. Products marked as services skip the stock ledger: a consultancy gets invoices, receipts, aging and full statements without a warehouse.

Purchasing

The same shape in reverse: order, goods receipt, supplier bill, payment. The interesting part is the middle, where goods and paperwork arrive on different days.

The receipt is what makes stock worth something

A goods receipt capitalises the stock at what you paid and books the other side to a goods-received accrual. The goods are on the balance sheet and the debt recorded, whether or not the paperwork has arrived.

The bill clears the accrual

The supplier bill clears that accrual and raises the payable, with tax. It does not debit inventory a second time. That double count is the specific mistake the two-step flow exists to prevent.

Ordering is not receiving

A purchase order shows the quantity as expected rather than on hand, so nobody sells stock still on a lorry. Like a sales order, it posts nothing. Payments settle the payable; the aging reads those postings.

Inventory

Quantities per warehouse, one cost per product, and a movement ledger that explains how both got there.

Weighted moving average, per product

Receiving blends the new cost into the running average; shipping costs out at the average in force at that moment. No cost layers to maintain, no revaluation run to remember — the movement updates the average.

The movement ledger only grows

Every quantity change is a row: what moved, from which warehouse, when, at what cost, and which document caused it. Rows are never edited. A correction is another movement, which keeps a stock figure explainable.

A count is a posting, not an edit

Count 98 where the system says 100 and the two units are booked as a loss, with a journal entry dated the day you counted. Shrinkage becomes a line somebody can ask about, not a field that quietly changed.

Transfers move goods, not value

The average cost is held per product, so moving stock between warehouses changes where it is, not what the company owns. Reorder points flag what to buy before a shelf empties rather than after.

Costing decides what your gross margin says, so it is worth understanding first. How weighted moving average works, with numbers →

Accounting

Not a summary of the other three modules — the general ledger they all post into, and the only place the reports read from.

One entry per document, however often you click

Each journal entry is unique to the document that caused it, so posting is idempotent. A double-clicked button, a retried request or a replayed job produces one entry; revenue cannot be counted twice by accident.

Reports read the ledger, never the documents

Trial balance, income statement, balance sheet, receivables and payables aging, sales analysis and stock valuation are all computed from postings. The valuation reconciles to the inventory account because it comes from the movements that posted to it.

Close a period and it stays closed

Lock a period and nothing can post into it: not a correction, not a late supplier bill, not an administrator. The correction goes into the open period, dated when it was made, where an auditor expects it.

The chart of accounts is yours

Signing up installs a chart of accounts wired to the posting rules, plus tax rates, document numbering and a warehouse. Re-point a rule at another account later and everything already posted stays where it was.

You can also post a journal entry by hand for what no document covers — depreciation, an accrual, an opening balance. It faces the same balance check as everything else.

True in every module

A handful of decisions made once, underneath all four, rather than four times with slightly different answers.

Exact money
Amounts are Decimal columns and the arithmetic runs in whole minor units. No floating point touches a total, because a rounding error here is not a display bug — it is a trial balance off by a cent.
One company per row
Every record belongs to a company, and the database client applies that filter to every query, so application code cannot issue an unscoped read. Foreign keys carry the company: one company’s invoice cannot reference another’s customer.
Seven roles
Write access is gated per module, so the person who raises a purchase order need not be the person who records paying it. Every posting and settings change records who did it and when.
Limits, not locks
Users, products, warehouses and documents per month are capped by plan and checked on the server, in the transaction that would create the row. Every plan includes every module — the limits are about size, never features.
Read-only, never deleted
An expired trial or an unpaid account stops accepting writes. Every invoice, movement and journal entry stays visible and stays yours. Deleting a company’s books over a bill is never the right answer.

How one database holds many companies without any overlap →

What is deliberately not here

A feature list that only ever grows is one nobody can trust. These are the things people ask for that the product does not do, said here rather than discovered in week three.

No payment processing

You record that a customer paid; you do not take the card here. No card details reach the product, so there are none to lose.

No integrations or file transfer

No app store, no bank feed, no import or export tooling. What is in the system was entered in the system.

One currency per company

Books are kept in one currency. If you invoice in three and need them translated at closing rates, this is not your ledger yet.

No payroll or manufacturing

No pay runs, no bills of material, no production orders. Buying, selling, holding stock and accounting for all three is the scope.

No mobile app

A web application that behaves on a phone screen. Nothing to install, nothing to keep updated in a store.

What is left is the part most small businesses are still doing in a workbook, badly. Where spreadsheets stop being enough →

See it with one invoice

Sign up, raise one invoice, then open the trial balance and the journal entry it wrote. A minute, and it tells you more than any feature list, including this one.

Create your company

No card. Back to the overview