Point of Sale

Flowtly Editorial Team6 min

Point of Sale (POS) is Flowtly's toolkit for a shop that sells physical things over a counter. It brings together a product catalog, a stock ledger, and a till — so you can list what you sell, know how much of it you have, and ring up a sale in seconds, with a proper invoice for every customer who wants one.

POS is off by default for every organization. If you don't sell physical goods over a counter, you'll never see it. If you do, an admin turns it on in Settings, and a new Shop section appears in the navigation with three screens: Catalog, Stock, and Sell.

Two roles, on purpose

POS has two dedicated roles, and they see different things:

  • POS Manager builds and maintains the catalog, receives goods, and can see the buying price — what you paid the supplier — and therefore your margin on every product.
  • POS Clerk sells. A clerk can ring up sales, receive goods, and count stock, but the buying price and margin are deliberately hidden from their screens. A cashier doesn't need to see what the shop paid to do their job well, and Flowtly doesn't show it to them.

Assign these roles to people the same way you assign any other role in Flowtly, from their profile.

Building the catalog

The catalog is your list of products, organized into categories so the till stays easy to scan. For each product you set a name, an optional SKU, a category, a supplier, a tax group, and — the field that matters most — a selling price.

The selling price you enter already includes tax. It's the number on the shelf label, the amount the customer actually hands over at the till. You never type in a "net" price and a tax rate separately: you type the price a customer sees, and Flowtly works out the net amount and the VAT behind it automatically, based on the product's tax group. That's what keeps every invoice honest — it always adds up to exactly the price the customer was quoted, because the price is the starting point, not the result of a calculation you have to get right yourself.

As a POS Manager, you can also record the buying price — what the product cost you. Flowtly uses it to show your margin, but it never appears on an invoice, a receipt, or a clerk's screen.

Products can also carry a warranty (none, a number of months, or lifetime), which travels with the sale so you and the customer both know what's covered.

Stock: nothing exists until it arrives

Stock isn't something you type into a product — it only comes into existence when you receive goods. When a delivery arrives, you record how much came in, and Flowtly adds it to the shelf.

From there, every single change to how much of a product you have is written down as a movement: a delivery, a sale, a stocktake correction, a return. Nothing changes the number silently. That movement history is what makes the stock figure trustworthy — if a number ever looks wrong, you can always trace back exactly which delivery, sale, or count produced it.

Selling at the till

The till is built for speed: tap a product to add it to the cart, tap again to add another one, adjust quantities, and charge. Flowtly always prices the sale itself from the current catalog price, so what the clerk sees on screen is exactly what the customer pays — there's no way for a mistyped price to sneak onto an invoice.

Payment can be taken in cash or mobile money (for example MTN Mobile Money or Orange Money). Once payment is confirmed, Flowtly automatically issues an invoice and reduces the stock of every item sold — one sale, one movement per product, no extra steps.

Most sales are walk-ins, and that's fine: you don't need a customer record to sell something. Only attach a real customer to the sale when the buyer actually wants the invoice made out to their name — for example, so they have proof of purchase for a warranty claim. You can add that customer right from the payment screen.

Counting the shelf (stocktake)

Physical counts drift from the system over time — a box goes missing, a delivery gets miscounted, a customer walks off with two instead of one. A stocktake fixes that: you go to the product, enter the quantity you actually counted, and Flowtly compares it to what the ledger says and records the difference as a movement. You never have to do the subtraction yourself — you just tell Flowtly what you see on the shelf.

Correcting a sale

Mistakes happen — the wrong item was rung up, or a customer returns something. Issue a correction on the invoice, the same way you would for any Flowtly invoice, and the stock comes back onto the shelf automatically. You don't need to also record a separate stock movement; correcting the invoice is enough.

Selling when the count says zero

Flowtly lets you record a sale even when the system shows zero stock for that product. This is deliberate: if the count is wrong but the goods are physically on the shelf, a till that refuses to ring up a real sale is worse than a stock count that occasionally needs fixing with a stocktake. The product simply shows a gentle "out of stock, but still sellable" notice at the till — it never blocks the sale.

Example use cases

  • Opening the shop for the day: a clerk logs into the till and starts ringing up customers, with no setup needed beyond what the manager already configured in the catalog.
  • A new delivery arrives: the manager receives the goods, adding the quantity to stock in one step.
  • A customer wants a warranty claim later: the clerk attaches the customer's details to the sale so the invoice — their proof of purchase — is in their name.
  • End-of-day count: a clerk counts what's physically on the shelf and enters it as a stocktake; Flowtly quietly corrects any drift.
  • A customer returns a faulty item: the manager issues a correction on the original invoice, and the item is automatically back in stock.

Connection map

Refers toUses upDerived fromPart of
Documented hereDocumented elsewhere
invoice billed to counterparty. invoice taxed by tax-group. cost spends against budget. cost owed to counterparty. bank-transaction reconciled to invoice. bank-connection imports bank-transaction. contract schedules payment-schedule-line. contract agreed with counterparty. contract attached to budget. budget covers project. invoice billed from project. project linked to budget. lead becomes counterparty. deal sold to counterparty.billed totaxed byspends againstowed toreconciled toimportsschedulesagreed withattached tocoversbilled fromlinked tobecomessold toIInvoice — A sales document issued to a client: line items, dates, tax. It is created, reviewed, previewed and then sent.InvoiceCCounterparty — The other side of a financial document — a client billed, or a supplier owed.CounterpartyTTax group — The tax treatment applied to a line, so rates are set once rather than per document.Tax groupCCost — Money the organisation owes or has spent, tracked against a budget.CostBBudget — The financial envelope an engagement is measured against — what was planned, versus what has actually been spent.BudgetBBank transaction — A movement on a connected bank account. Matching it to an invoice or a cost is what makes the books agree with the bank.Bank transactionBBank connection — The consented link to one bank that transactions arrive through. It can stop working on its own — a consent expires or is withdrawn — so it reports whether it is still working.Bank connectionCContract — The financial terms of an engagement: a structured set of payment schedule lines, in one direction or the other.ContractPPayment schedule line — One dated amount on a contract, in a direction — money owed to a supplier, or due from a client.Payment schedule linePProject — The core organizational unit for a business initiative, client engagement or internal work. Everything tracked — time, cost, invoicing, profitability — hangs off one.ProjectPProspect — A company you are working but that is not a customer yet. It sits at New, Contacted or Qualified, and everything done to it is logged against it.ProspectDDeal — A sale in progress: a customer, an amount, and the stage it has reached. It cannot exist without a customer, and its stage is never blank.Deal