AT-TOHFA User Manual
Everything the system does, screen by screen — written for the people behind the counter, not for programmers.
The application interface is in English. A Bangla edition of this manual is available and explains everything in Bangla while keeping the on-screen button names in English.
Which chapter do I need?
First-day checklist
Set the shop up in this order — each step depends on the one before it.
- 1 Shop DetailsShop name, phone, address. They print on every receipt.
- 2 UsersAn account for each staff member, with the right role.
- 3 Categories & BrandsYou cannot add a product without a category.
- 4 ProductsAdd your catalog.
- 5 PurchasesRecord the stock you hold, so cost and profit are correct.
- 6 SellOpen POS and make your first sale.
1Getting Started
How to sign in, find your way around, and understand why you can see some menus and not others.
Who can use this: everyone.
Contents
- Signing in
- Where you land after login
- The sidebar
- The header
- Roles and what each one can open
- Why can't I see a menu item?
- Your profile
- The Dashboard
- Signing out
Signing in
- Open the shop's web address in a browser. The public home page appears.
- Click Login, or go to the address ending in
/login. - Enter your Email and Password.
- Click the sign-in button.
Your login is created for you by the owner or an administrator — see Chapter 11 — Users. If you have never been given an email and password, you cannot sign in; ask the shop owner to create your account.
Note
Your session stays alive for about 30 days as long as you keep using the system. If you are signed out unexpectedly, just sign in again — nothing is lost.
Where you land after login
The system sends you to the most useful screen for your role:
| Your role | You land on |
|---|---|
| Staff (cashier) | POS — the selling screen |
| Everyone else | Dashboard |
If you clicked a link that required signing in first, you are returned to that page instead.
The sidebar
The dark menu strip on the left is how you move around. On a laptop or desktop it is always visible. On a phone or tablet it is hidden — tap the ☰ menu button in the top-left corner of the header to slide it open.
The menu, in order:
| Menu item | What it is for | Chapter |
|---|---|---|
| Dashboard | Today's numbers at a glance | below |
| POS | The selling register | 02 |
| Sales | Every sale you have made | 03 |
| Returns | Products customers brought back | 04 |
| Dues | Customers who owe you money | 05 |
| Products | Your product catalog | 06 |
| Purchases | Stock you received from suppliers | 07 |
| Product Removals | Damaged, expired or lost stock | 08 |
| Expenses | Rent, salaries, bills | 09 |
| Users | Staff accounts | 11 |
| Reports ▾ | Sales Report · Inventory Report · Profit & Loss | 10 |
| Setup ▾ | Categories · Brands | 12 |
| Profile | Your own name, photo and password | below |
| Settings | Shop details, permissions, backup | 13 |
| Sign out | Ends your session | below |
Reports and Setup have a ▾ arrow. Click the row to open or close the list underneath it.
Collapsing the sidebar. On a desktop there is a small round arrow button on the right edge of the sidebar, near the top. Click it to shrink the sidebar down to icons only, which gives the main screen more room. Click it again to expand. Hover over an icon to see its name.
Note
You will only see the menu items your role is allowed to open. A short list is normal — see Roles below.
The header
The bar across the top of every screen contains:
- ☰ — opens the sidebar drawer (phones and tablets only).
- The page title.
- Your avatar on the right. Click it for a small menu: Profile, Settings, Logout.
Roles and what each one can open
Every user account has exactly one role. There are six:
| Role | Meant for |
|---|---|
| SuperAdmin | The system administrator. Sees and can do everything, always. |
| Owner | The shop owner. |
| Admin | A trusted manager who also handles money and staff. |
| Manager | Runs the shop floor and stock, but not finances or staff. |
| Staff | Cashier. Sells, handles returns and takes payments. |
| Customer | Reserved; not used for shop staff. |
Default page access
This is what each role can open when the system is first set up. ✓ means allowed.
| Page | Owner | Admin | Manager | Staff | Customer |
|---|---|---|---|---|---|
| Dashboard | ✓ | ✓ | ✓ | ||
| POS | ✓ | ✓ | ✓ | ✓ | |
| Sales | ✓ | ✓ | ✓ | ✓ | |
| Returns | ✓ | ✓ | ✓ | ✓ | |
| Dues | ✓ | ✓ | ✓ | ✓ | |
| Products | ✓ | ✓ | ✓ | ||
| Purchases | ✓ | ✓ | ✓ | ||
| Product Removals | ✓ | ✓ | ✓ | ||
| Expenses | ✓ | ✓ | |||
| Users | ✓ | ✓ | |||
| Reports | ✓ | ✓ | |||
| Setup | ✓ | ✓ | ✓ | ||
| Settings |
SuperAdmin is not shown in the table because SuperAdmin can always open every page. Settings is empty by default, meaning only the SuperAdmin can open it until someone changes that.
This table is not fixed. The SuperAdmin can change any tick in it from Sidebar → Settings → Permissions — see Chapter 13. So your shop's actual access may differ from the defaults above.
Profile is not in the table because everyone can always open their own profile.
Why can't I see a menu item?
Because your role is not allowed to open that page. This is normal and intentional — a cashier does not need to see profit figures or staff salaries.
If you open a page address directly that you are not allowed to use, you will see an Access denied message with a link to a page you are allowed to use.
If you genuinely need access, ask the SuperAdmin to either change your role (Chapter 11) or grant your role that page (Chapter 13).
Your profile
Sidebar → Profile, or click your avatar in the header and choose Profile.
Two tabs:
Profile tab
| Field | What it is |
|---|---|
| Name | Your display name. Shown on receipts and records you create. |
| Phone | Your contact number. |
| Your login email. |
There is also a photo area. Click it to upload an avatar image, or use the remove option to delete the one you have. Your avatar appears in the header and on records you create.
Password tab
Change your own password. You will be asked for your current password and then the new one twice. Use at least 8 characters with both letters and numbers.
Note
Change the password you were given on your first day. Do not share it — every action in the system is recorded against the account that performed it (see Audit Log).
The Dashboard
Sidebar → Dashboard. A single screen answering "how is the shop doing right now?"
At the top is a period filter — today, this week, this month, and so on. Everything on the page recalculates for the period you pick.
What you will find, roughly top to bottom:
- KPI tiles — the headline numbers for the period: revenue, profit, number of sales, and similar. Each tile shows the figure and how it compares with the previous period.
- Alert strip — urgent things needing attention, such as products that have run low.
- Revenue trend chart — a line showing sales day by day, so you can see whether business is rising or falling.
- Profit chain — walks you from sales down to net profit, showing what each cost takes out along the way. The same logic as the Profit & Loss report (Chapter 10).
- Top products — your best sellers for the period.
- Recent sales — the latest transactions, so you can spot a mistake quickly.
- Stock watch — products running low or already out of stock.
- Category mix and Expense mix — where your revenue comes from and where your money goes.
Click through from any card to the full screen behind it when you want detail.
Signing out
Either:
- Sidebar → Sign out (the red item at the bottom of the menu), or
- Click your avatar in the header → Logout.
Always sign out at the end of a shift on a shared till computer. The next person will otherwise be recorded as making your sales.
Next: Chapter 2 — POS Terminal
2POS Terminal
The selling screen. This is where cashiers spend the whole day.
Who can use this: Owner, Admin, Manager, Staff (by default).
Contents
- The layout
- Finding a product
- Adding to the cart
- Working with the cart
- Checkout
- Full payment
- Partial payment — selling on credit
- The receipt
- Error messages you will see
- Quick reference
The layout
Sidebar → POS. The POS screen takes over the whole window — there is no sidebar here.
On a laptop or desktop:
┌──────────────────────────────────────────┬──────────────────┐
│ Header: search · fullscreen │ │
├──────────────────────────────────────────┤ CART │
│ [Category filter] [Brand filter] │ │
│ │ line items │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ quantity + / - │
│ │prod│ │prod│ │prod│ │prod│ │ │
│ └────┘ └────┘ └────┘ └────┘ │ Subtotal │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │ Total │
│ │prod│ │prod│ │prod│ │prod│ │ │
│ └────┘ └────┘ └────┘ └────┘ │ [ Checkout ] │
└──────────────────────────────────────────┴──────────────────┘
On a phone or tablet: the cart is not shown beside the products. Instead there is a wide Cart (n) bar along the bottom showing the running total. Tap it to slide the cart up from the bottom of the screen.
Fullscreen. There is a fullscreen button in the header. Turning it on hides the browser's own toolbars and gives you the largest possible product grid — worth doing on a dedicated till machine. Press it again, or press Esc, to come back.
Finding a product
Three tools, and they work together:
Search box (in the header). Type any part of the:
- product name, or
- SKU (the product's short code), or
- barcode.
The grid narrows as you type. If you have a barcode scanner, click into the search box first, then scan — the scanner types the barcode for you and the product appears immediately.
Category filter and Brand filter (above the grid). Pick one to show only products in that category or of that brand. Set them back to all to see everything again.
Important
Products with zero stock are not shown in the POS grid at all. If a product is missing, the most likely reason is that it has sold out. Check Sidebar → Products to confirm, then receive more stock through Purchases.
Adding to the cart
- Tap or click the product card.
- The quantity dialog opens. It shows the product and a quantity box, already filled in with 1 for you.
- Change the number if the customer wants more than one.
- Confirm. The item drops into the cart.
Whole numbers vs decimals
It depends on the product's unit:
| Unit type | Examples | Can you type 1.5? |
|---|---|---|
| Counted things | Piece, Box, Pack, Dozen, Bottle, Can, Pair, Set, Carton | No — whole numbers only |
| Weighed things | Kilogram, Gram | Yes |
| Liquids | Liter, Milliliter | Yes |
| Lengths | Meter, Feet, Inch | Yes |
For a decimal-capable unit the box starts at 1.00 instead of 1. So you can sell 2.5 kg of rice, but not 2.5 bottles of oil. If you type a decimal for a counted unit you will be told "Quantity must be a whole number for this unit".
Selling the same product twice
Add it again and the quantity on the existing cart line goes up — you do not get a second line for the same product.
Working with the cart
| To do this | Do that |
|---|---|
| Increase a quantity | Press + on the cart line |
| Decrease a quantity | Press − on the cart line |
| Remove one product entirely | Press the remove/trash icon on that line |
| Start over | Press Clear at the top of the cart |
| Go to payment | Press Checkout at the bottom |
The cart keeps a running Subtotal and Total as you go.
Note
The cart lives only in the browser window. If you refresh the page or the machine restarts, the cart is empty again. Finish a customer before doing anything else.
Checkout
Press Checkout and the Complete Sale dialog opens. Fill it in from the top down.
| Field | What to enter | Required? |
|---|---|---|
| Partial Payment (switch) | Turn on only if the customer is not paying in full today | No |
| Customer Name | The customer's name. Left blank it is recorded as Walk-in Customer | Only for partial payment |
| Customer Phone | e.g. 01712345678 | Only for partial payment |
| Discount Type | Special Offer — the only option | Yes (already selected) |
| Special Offer Price (৳) | The amount to take off the total, in taka | No — leave 0 for no discount |
| Payment Method | Cash · Card · Mobile Banking · Bank Transfer · Digital Wallet | Yes |
| Received Amount (৳) | How much cash/money the customer handed over | Yes |
| Notes | Anything worth remembering about this sale | No |
Below the fields is an order summary showing Subtotal, the discount if any, and the Total in large type. Check this against what you told the customer before you finish.
About the discount
The Special Offer Price box is the amount subtracted from the bill — it is not the new price of the sale, despite the name. Enter 50 and the customer pays ৳50 less. The line under the box shows the arithmetic so you can confirm before finishing.
Note
Percentage and fixed-amount discount types are not currently available in the dropdown. Special Offer is the only discount you can apply at the till. To give 10% off, work the taka amount out yourself and type that.
Note
There is no tax box on this screen. Sales made through POS carry no tax line. The tax rate in Settings → Shop Details does not add tax to a POS sale.
Full payment
This is the normal case — the customer pays the whole bill now.
- Leave Partial Payment switched off.
- Choose the Payment Method.
- Type the money received into Received Amount.
- If they gave you more than the total, Change: ৳… appears under the box. That is what you hand back.
- Press Complete Sale.
The Received Amount must be at least the Total. If it is less, you get "Received amount is less than total amount!" and the sale will not go through. Either collect more money, or switch on Partial Payment and record it as credit.
Partial payment — selling on credit
Use this when a regular customer takes goods now and pays the rest later. The unpaid part becomes a due tracked against that customer.
- Switch Partial Payment on. An amber warning box appears reminding you that customer details are required.
- Type the Customer Name and Customer Phone. Both are now compulsory — this is how the system knows whose account to charge.
- Choose the Payment Method for the part they are paying.
- Type what they are paying today into Received Amount.
- Due Amount: ৳… appears, along with a note that the balance goes to the customer's account.
- Press Complete Sale.
The rules for partial payment:
- Customer name and phone must both be filled in.
- Received Amount must be greater than 0 — you cannot record a fully unpaid sale here.
- Received Amount must be less than or equal to the Total.
Use the phone number consistently for the same person. It is what links their sales together, so one customer with two different phone numbers becomes two separate accounts.
Collecting that money later is covered in Chapter 5 — Dues & Payments.
The receipt
When the sale succeeds, the receipt prints automatically — the print dialog opens on its own. Choose your printer and print, or cancel it if the customer does not want a receipt.
The receipt carries your shop name, phone and address from Settings → Shop Details (Chapter 13).
Each sale gets an invoice number in the form INV-YYYYMMDD-#### — for example INV-20260828-0042, the 42nd sale on 28 August 2026. Quote this number when looking a sale up later or processing a return.
Straight after a successful sale the screen resets itself: the cart empties and the customer, discount, received amount and notes all clear, ready for the next customer.
Printing a receipt again
The POS screen cannot reprint. Go to Sidebar → Sales, find the sale, and print from there — see Chapter 3.
Error messages you will see
| Message | What happened | What to do |
|---|---|---|
| Cart is empty! | You pressed Checkout with nothing in the cart | Add products first |
| Please enter a valid quantity | The quantity box was empty, zero or not a number | Type a number above 0 |
| Quantity must be a whole number for this unit | You typed a decimal for a counted unit | Use a whole number |
| Insufficient stock! | You asked for more than the shop has | Reduce the quantity, or receive more stock |
| Customer name and phone are required for partial payments! | Partial payment with blank customer details | Fill both in |
| Received amount must be greater than 0 for partial payments! | Partial payment with nothing received | Collect at least something, or do not sell on credit |
| Received amount cannot be greater than total for partial payments! | Partial payment above the bill | This is a full payment — switch Partial Payment off |
| Received amount is less than total amount! | Full payment but not enough money | Collect the rest, or use partial payment |
Quick reference
A normal cash sale, start to finish:
- Search or tap the product → set quantity → confirm.
- Repeat for every item.
- Checkout.
- Payment Method: Cash.
- Received Amount = the notes handed over.
- Read the Change figure and give it back.
- Complete Sale → print.
A credit sale:
- Build the cart as normal.
- Checkout → Partial Payment on.
- Name + phone.
- Received Amount = what they pay today.
- Check the Due Amount.
- Complete Sale → print.
Next: Chapter 3 — Sales
3Sales
The record of every sale the shop has made. Look up an invoice, check what a customer bought, export the day's takings, or start a return.
Who can use this: Owner, Admin, Manager, Staff (by default).
Contents
- The screen
- The statistics strip
- Finding a sale
- Viewing a sale
- Starting a return
- Exporting
- Understanding the figures
The screen
Sidebar → Sales.
From the top down: a row of summary tiles, then the export buttons, then the filters, then the list of sales. On a wide screen the sales appear as a table; on a phone they become stacked cards, each showing the same information.
The statistics strip
The tiles at the top recalculate for whichever period you have selected in the filters below. They typically show:
- Total sales — how much money the sales came to.
- Number of transactions — how many separate sales.
- Items sold — total units across all of them.
- Returns — how many returns happened in the period.
These are a quick health check, not an accounting statement. For proper figures use Chapter 10 — Reports.
Finding a sale
Three controls sit above the list:
Period. A dropdown of ready-made ranges — Today, Yesterday, Last 7 Days, Last 30 Days, This Month, Last Month, This Quarter, This Year, and a Custom Range where you pick your own start and end dates.
Search. Type an invoice number or a customer name. Partial matches work — typing 0042 finds INV-20260828-0042.
Rows per page. Choose 5, 10, 20 or 50 rows. Use the page arrows at the bottom of the list to move between pages.
Tip
The fastest way to find one specific sale is to type its invoice number into search. The customer's receipt has it printed at the top.
Viewing a sale
Click View (the eye icon) on any row. The Sale Details dialog opens showing:
- The invoice number and the date and time of the sale.
- The customer's name and phone, or Walk-in Customer.
- Every line item: product name, SKU, quantity, unit price and line total.
- Subtotal, discount, and the final total.
- The payment method and the payment status.
- How much was received, and any change given.
- If part of the bill is unpaid, the due amount.
- Returned quantities if any of this sale has been brought back.
- Any notes the cashier typed at checkout.
Close the dialog with the ✕ or by clicking outside it.
Starting a return
Every row has a Return button (the circular-arrows icon). Click it and the return wizard opens with this sale already loaded.
This is the only way to start a return — you cannot create one from the Returns screen without a sale to attach it to. The full process is in Chapter 4 — Returns & Exchange.
Exporting
Two buttons near the top:
Export CSV — downloads a spreadsheet file of the sales currently shown, matching your period and search. Open it in Excel or Google Sheets to do your own sums.
Export PDF — opens your browser's print dialog with a formatted, branded version of the list. Choose your printer to print it, or choose "Save as PDF" as the destination to keep a file. The shop name and address come from Settings → Shop Details.
Both exports respect the filters you have set. Set the period to Today before exporting if you want a day-end sheet.
Understanding the figures
What is not on this screen
Some things you might expect are handled elsewhere:
| You want to | Go to |
|---|---|
| Reprint a customer's receipt | The receipt prints automatically at the moment of sale in POS. This screen does not reprint; use Export PDF of the sale list, or process the paperwork from the Sale Details dialog. |
| Cancel a sale entered by mistake | Process it as a Return — see Chapter 4. |
| See profit per sale | Reports → Sales Report |
| Collect money still owed on a sale | Chapter 5 — Dues & Payments |
Why a sale total might change
If a customer returns part of a sale, the sale's net total goes down but the original total is kept as well. The Sale Details dialog shows both, and the Sales Report separates Original Total, Returns and Net Total into their own columns. This is deliberate: you keep an honest record of what was sold and what came back, rather than pretending the sale was always smaller.
Payment status on a sale
| Status | Means |
|---|---|
| COMPLETED | Paid in full |
| PARTIAL | Some money taken, the rest is a due |
| PENDING | Nothing received yet |
| REFUNDED | Money given back through a return |
| VOIDED / CANCELLED | The sale no longer counts |
| OVERDUE | A due that has passed its date |
4Returns & Exchange
When a customer brings something back. Record what came back, refund the right amount, and put the goods back on the shelf.
Who can use this: Owner, Admin, Manager, Staff (by default).
Contents
- How a return works
- Creating a return
- The return form field by field
- How the refund is calculated
- The Returns screen
- Approving and completing a return
- Status meanings
- Return reasons
- Rules and limits
How a return works
A return always belongs to a sale. You cannot create a floating return — you must start from the original sale, so the system knows what was bought, at what price, and how much is still returnable.
The life of a return has three steps:
PENDING ──approve──▶ APPROVED ──complete──▶ COMPLETED
│ │
└────────────reject────────▶ REJECTED stock goes back on the shelf
Stock is only put back at the Complete step. Creating a return does not change your stock figures. This is deliberate — it gives someone senior a chance to look at the goods before they go back into sellable inventory.
Creating a return
- Go to
Sidebar → Sales. - Find the sale. Search by invoice number if the customer has their receipt.
- Click the Return button (circular-arrows icon) on that row.
- The return dialog opens with the sale's details already loaded at the top: invoice number, date, total, subtotal and discount.
- Fill in the form (next section).
- Press the submit button at the bottom.
The return is created with status PENDING and gets a return number in the form RTN-YYYYMMDD-####.
The return form field by field
Return Reason
A single dropdown covering the whole return. Pick the closest match — see Return reasons for the list. This is what shows up in reporting when you want to know why goods come back.
Select Items to Return
The heart of the form. Every line from the original sale is listed with:
| Shown | Meaning |
|---|---|
| Bought | How many the customer originally bought |
| Returned | How many have already come back on earlier returns |
| Available | How many can still be returned — this is the limit |
| Price each | The unit price actually paid on that sale |
Tick the checkbox next to each product being returned. A line with Available 0 cannot be ticked — it has already been fully returned.
When you tick a line, three boxes appear for it:
| Field | What to enter |
|---|---|
| Return qty | How many of that product are coming back. Minimum 1, maximum the Available number. |
| Condition | New · Used · Damaged · Defective — the state the goods are in |
| Reason | The reason for this particular item, which can differ from the overall reason |
A counter beside the heading shows how many items you have selected.
Tip
Condition matters. Marking goods as New means they can go straight back on the shelf. Damaged or Defective tells whoever completes the return that the goods should not be resold — they should be recorded as a Product Removal instead.
Restocking Fee (৳)
An amount deducted from the refund — your handling charge. Leave it at 0 for a normal goodwill return.
Two things to know: it is entered in whole taka (decimals are rounded down), and it cannot be larger than the refund itself. If you type too much you will get an error and the submit button will stay disabled until you fix it.
Customer Name (if different) / Customer Phone (if different)
Leave both blank in the normal case — the original customer's details carry over automatically (you can see them as the greyed-out placeholder text). Fill them in only when someone other than the original buyer is bringing the goods back.
Additional Notes
Free text. Useful for anything that does not fit the fields: "Customer says it stopped working after two days, kept the box".
How the refund is calculated
refund for each item = return qty × price actually paid per unit
total refund = sum of all item refunds
amount given back = total refund − restocking fee
The unit price used is the price on the original sale, not today's selling price. If the product's price has gone up since, the customer still gets back exactly what they paid.
A summary panel at the bottom of the form shows the figures as you build the return, including the restocking fee shown in red as a deduction. Check it before submitting.
The Returns screen
Sidebar → Returns. Every return in the shop, newest first.
Filters:
| Filter | Options |
|---|---|
| Status | All Status, or one of PENDING / APPROVED / COMPLETED / REJECTED / CANCELLED |
| Type | All Types, or Full Return / Partial Return / Exchange |
| Search | Return number, customer name, or invoice number |
| Date range | Start and end dates |
Use Clear to reset the filters. Each row shows the return number, the invoice it came from, the customer, type, refund amount, status badge and date. The status badges are colour coded: yellow for pending, blue for approved, green for completed, red for rejected, grey for cancelled.
Click View on any row to open the return.
Note
This screen is for looking at and managing returns. To create one, start from Sales.
Approving and completing a return
Open the return from Sidebar → Returns → View. The action buttons appear at the top of the details view, and which ones you see depends on the current status.
When the return is PENDING
Approve — you accept the return. Status becomes APPROVED. Nothing has moved yet: no stock, no money.
Reject — you refuse it. A small box asks you to type a rejection reason before it goes through. Status becomes REJECTED and the return is closed. Type a real reason; it stays on the record.
When the return is APPROVED
Complete — the final step. This is the one that matters:
- The returned quantities are added back to stock.
- The return is marked COMPLETED and stamped with the time and who did it.
- The refund is recorded against the sale.
Warning
Complete cannot be undone. Check the goods physically before pressing it. If the goods are not fit to sell, complete the return and then record a Product Removal so your stock count stays honest.
Practical routine
For a small shop where the same person handles the whole thing, the routine is: create the return → Approve → Complete, all in one go. The three steps exist so that larger shops can put a manager between the counter and the stock.
Status meanings
| Status | Meaning | Stock returned? | Next step |
|---|---|---|---|
| PENDING | Recorded, waiting for a decision | No | Approve or Reject |
| APPROVED | Accepted, goods not yet back in stock | No | Complete |
| COMPLETED | Finished. Stock is back, refund recorded | Yes | None — final |
| REJECTED | Refused, with a stated reason | No | None — final |
| CANCELLED | Called off before finishing | No | None — final |
Return reasons
| Reason | Use when |
|---|---|
| DEFECTIVE PRODUCT | It does not work |
| WRONG ITEM | The wrong thing was sold or picked up |
| DAMAGED | It arrived or was sold broken |
| NOT AS DESCRIBED | It is not what the customer was told it was |
| SIZE ISSUE | Wrong size |
| COLOR ISSUE | Wrong colour |
| QUALITY ISSUE | Works, but the quality is poor |
| CUSTOMER CHANGE MIND | Simply changed their mind |
| LATE DELIVERY | Arrived too late to be useful |
| OTHER | Nothing above fits — explain in the notes |
Be consistent. These reasons are the only way to later answer "which supplier keeps sending us faulty goods?"
Rules and limits
- You can never return more than was bought. The Available figure on each line enforces it, and it accounts for earlier returns against the same sale.
- Several returns per sale are fine. A customer can bring back one item today and another next week; each is its own return record.
- The restocking fee cannot exceed the refund. You cannot end up owing the customer nothing while claiming a fee.
- Stock moves only on Complete. A pending or approved return has not changed your inventory.
- A completed return cannot be reversed. If you complete one in error, correct it by recording a fresh sale or a product removal, whichever matches what actually happened.
On the Type field
Returns are recorded as Partial Return by default and the type selector is not currently exposed on the return form — so in practice every return you create will be of that type, whether the customer brings back one item or all of them. The Type filter on the Returns screen still works, and older records may carry other types. This does not affect the refund amount, the stock that goes back, or any report: those are all driven by the items and quantities you tick, not by the type label.
Likewise, the exchange flow (swapping goods for a different product rather than refunding) exists in the system but is not reachable from the return form as it currently stands. To handle an exchange today: complete the return for the goods coming back, then ring the replacement through POS as a new sale.
5Dues & Payments
Money customers still owe you, and recording it when they pay.
Who can use this: Owner, Admin, Manager, Staff (by default).
Contents
- Where dues come from
- The screen
- All Payments tab
- Customer Dues tab
- Overdue Sales tab
- Summary tab
- Recording a payment
- Payment methods and their extra fields
- How balances update
- Voiding a payment
- Good habits for credit customers
Where dues come from
A due is created when a sale is rung up with Partial Payment switched on at the POS — the customer takes the goods, pays part of the bill, and the rest is charged to their account. See Chapter 2 — Partial payment.
That is the only way a due appears. The customer record itself is created automatically the first time you sell to that phone number on credit; there is no separate "add customer" screen.
Important
The phone number is the customer's identity. Type it the same way every time. 01712345678 and +8801712345678 will be treated as two different people, and their dues will not add up together.
The screen
Sidebar → Dues. The page is titled Dues & Payments Management.
At the top right is a New Payment button — available from every tab. Below that, four tabs:
| Tab | Answers the question |
|---|---|
| All Payments | What money have we collected? |
| Customer Dues | Who owes us, and how much? |
| Overdue Sales | Which unpaid bills are late? |
| Summary | What is the overall picture? |
All Payments tab
Every payment you have recorded, newest first, with the payment number, customer, amount, method, status and date.
Each payment gets a number in the form PAY-YYYYMMDD-#### — quote it if a customer questions whether a payment was recorded.
Click a row to open the payment's details: the full amount, method, any transaction reference, which invoices it was applied to, who received it, and the notes.
Customer Dues tab
Your list of debtors. For each customer you see their name, phone, and current balance — the total they owe across every unpaid sale.
Open a customer to see the individual invoices making up the balance: invoice number, date, total, how much has been paid, and how much is still due.
Each customer row has an option to take a payment, which opens the payment form with that customer already filled in. This is the quickest route when someone walks in to settle up.
Overdue Sales tab
The subset of unpaid bills that have passed their due date. This is your chase list — work through it before it grows.
Same information as Customer Dues, filtered down to what is late.
Summary tab
The overall credit position of the shop:
- Total customers with dues — how many people owe you money.
- Total outstanding amount — the whole sum owed to the shop.
- Average due per customer.
- Customers over credit limit — anyone who has been allowed to owe more than their agreed limit.
- Recent payments and total pending invoices.
Watch the total outstanding figure. Rising steadily means you are selling on credit faster than you are collecting.
Recording a payment
Press New Payment (top right), or take a payment from a customer's row in Customer Dues. The Create New Payment dialog opens.
The form handles one customer paying off one or more invoices at once, which is how it usually happens in practice — a customer hands over ৳5,000 to clear three old bills.
Step by step:
- Customer * — pick from the dropdown. Each entry shows the name with the phone number beside it, so you can tell two same-named customers apart. If you came in from a customer's row, this is already selected and locked.
- A Customer Due Summary card appears showing their Total Due and how many Overdue Sales they have. Use this to tell the customer where they stand.
Payments * — build the list of what this money is paying off. Use the add button to add a row, and for each row:
- Invoice Number * — pick the unpaid invoice from the dropdown.
- Amount (৳) * — how much of this payment goes against that invoice.
Add another row for each additional invoice. The rows must add up to the money you actually received.
- Payment Method * — how they paid (see the next section).
- Fill in whichever extra reference fields appear for that method.
- Notes — anything worth recording.
- Submit.
Validation you may hit:
| Message | Fix |
|---|---|
| Please add at least one payment | You submitted with no invoice rows. Add one. |
| Please select an invoice for payment #n | Row n has no invoice chosen. |
| Please enter a valid amount for payment #n | Row n has 0 or a blank amount. |
Payment methods and their extra fields
Choosing the method changes which reference boxes appear. Fill them in — they are what lets you match your books against a bank or bKash statement later.
| Method | Extra fields shown |
|---|---|
| Cash | None |
| Card | Card/Cheque Number |
| Mobile Banking | Mobile Operator (e.g. bKash, Nagad) · Transaction ID |
| Bank Transfer | Bank Name · Account Number |
| Other | Reference/Transaction ID |
Tip
Always record the Transaction ID for mobile banking. When a customer insists they sent money, that number is the only thing that settles the question.
How balances update
When a payment is saved:
- Each invoice's paid amount goes up and its due amount goes down by what you allocated.
- An invoice paid off completely changes status from PARTIAL to COMPLETED.
- The customer's current balance falls by the total payment.
- A line is written to the customer's balance history, showing the balance before, the change, and the balance after.
The balance history is a permanent trail. It is what you show a customer who disputes their account — every sale that added to their balance and every payment that reduced it, in order.
Voiding a payment
A payment recorded in error can be voided. Voiding reverses everything it did: the invoice goes back to unpaid, the customer's balance goes back up, and the reversal is written into the balance history.
Warning
The voided payment stays visible in the list, marked VOIDED. This is intentional — the record is never erased, only cancelled, so the history stays auditable. Never void a payment simply to tidy the list.
Good habits for credit customers
- Take the phone number every time. Without it the sale cannot be tied to an account.
- Type phone numbers identically. Pick one format for the whole shop and stick to it.
- Record payments the moment you receive them. A payment sitting in your pocket unrecorded is a customer who will be chased for money they already paid.
- Check Overdue Sales weekly. Small debts chased early are collected; large ones chased late usually are not.
- Watch the Summary total. If total outstanding grows month after month, tighten who you sell to on credit.
- Never delete — void. If something is wrong, void it, then record the correct entry.
Next: Chapter 6 — Products
6Products
Your catalog. Everything you sell has to exist here first.
Who can use this: Owner, Admin, Manager (by default).
Contents
- Before you start
- The screen
- Adding a product
- The SKU
- Barcodes
- Choosing the right unit
- Pricing
- Low stock threshold
- The product list
- Product details
- Editing a product
- Deleting a product
- Printing barcode labels
- Adding stock
Before you start
You need at least one category before you can add a product — the Category field is compulsory and its dropdown will be empty otherwise. Brands are optional but useful. Set both up first in Chapter 12 — Setup.
The screen
Sidebar → Products. Two tabs:
- List — everything in your catalog, with search, filters and summary tiles.
- Add — the new product form. (When you are editing something, this tab becomes Edit.)
Adding a product
Sidebar → Products → Add. The form is titled Add New Product.
| Field | What to enter | Required |
|---|---|---|
| Product SKU | Your short code for the product — leave it on auto | ✓ |
| Product Name | The full name, e.g. iPhone 15 Pro Max 256GB | ✓ |
| Category | Which group it belongs to | ✓ |
| Brand | Who makes it — optional | |
| Unit | How it is counted or measured | ✓ |
| Storage Location | Where it physically sits, e.g. Aisle 3, Shelf B | |
| Purchase Price | What you pay per unit | ✓ |
| Selling Price | What the customer pays per unit | ✓ |
| Stock Quantity | How many you have right now | ✓ |
| Low Stock Threshold | The level at which you want warning | ✓ |
| Description | Any extra detail |
Fields marked * on screen must be filled in. Save when done.
Note
There is no barcode, tax rate or reorder point box on this form. Barcodes are generated for you (see below); tax rate and reorder point are stored by the system but are not set from this screen.
The SKU
The SKU (Stock Keeping Unit) is your internal code for a product. It appears on receipts, reports and exports, and it is the fastest way to search.
Two small badges under the box control how it is produced:
Auto-generate (the default, and what you should use). The system creates the code for you and the box is greyed out. Beside it is a refresh button that produces the next code, useful if you want to skip one.
Manual. Click this badge to unlock the box and type your own. Whatever you type is converted to CAPITALS automatically. Use this if your shop already has an established coding system.
The copy button beside the box copies the SKU to your clipboard.
Tip
Stay with auto-generation unless you have a real reason not to. Hand-typed codes drift into duplicates and typos, and every SKU must be unique.
Barcodes
A barcode is created automatically when you save a new product. There is nothing to type.
You can then:
- Scan it at the till. Click into the POS search box, scan, and the product appears — see Chapter 2.
- Print labels for your shelves — see below.
If a product already carries a manufacturer's barcode, you can put that number onto the product by editing it, so scanning the printed pack works. Barcodes must be unique — trying to give two products the same one is refused with "Product with this barcode already exists".
Choosing the right unit
The unit decides whether you can sell fractions of the product. Get it right at creation; it governs behaviour at the till every day afterwards.
Whole numbers only — you cannot sell 1.5 of these:
Piece · Box · Pack · Dozen · Set · Bag · Bottle · Can · Jar · Sachet · Bundle · Unit · Pair · Roll · Sheet · Carton · Case · Packet · Lot
Decimals allowed — you can sell 1.5 of these:
Kilogram · Gram · Liter · Milliliter · Meter · Feet · Inch
How to choose:
| You sell | Use |
|---|---|
| Rice, dal, sugar loose by weight | Kilogram |
| Spices in small weights | Gram |
| Cooking oil from a drum | Liter |
| Bottled drinks | Bottle or Piece |
| Cloth, wire, pipe by length | Meter or Feet |
| Eggs by the dozen | Dozen |
| Anything counted one at a time | Piece |
Warning
Changing a product's unit later does not convert your existing stock number. Switch from Kilogram to Gram and a stock of 5 still reads 5 — now meaning 5 grams instead of 5 kilograms. Fix the stock figure yourself immediately if you ever change a unit.
Pricing
Purchase Price is your cost per unit. Selling Price is the customer's price per unit. The difference is your margin, and it drives every profit figure in the system — the Dashboard profit tiles, the Sales Report, and the Profit & Loss statement.
profit per unit = Selling Price − Purchase Price
margin % = profit ÷ Selling Price × 100
Important
The purchase price on the product record is a default. The cost actually used in profit calculations comes from the purchase batch the goods were received in — see Chapter 7. If you buy the same product at different prices over time, receiving stock through Purchases is what keeps your profit honest.
Enter both prices with paisa where relevant, e.g. 10.50.
Low stock threshold
The point at which the product should be treated as running out. Set it to roughly the amount you sell during the time it takes your supplier to deliver.
Once stock falls to or below this number the product:
- appears in the Stock Watch card on the Dashboard,
- appears in the Low Stock Alert section of the Inventory Report,
- is flagged as Low Stock in the product list.
A fast-selling item with a slow supplier deserves a high threshold. A rarely-sold item can sit at 1 or 2.
The product list
Sidebar → Products → List.
Summary tiles across the top: how many products you have, how many are low on stock, your total inventory value, and similar.
Search by name, SKU or barcode. On a wide screen the products form a table; on a phone they become cards. Set the rows per page and use the arrows at the bottom to page through.
Stock status is shown against each product:
| Badge | Meaning |
|---|---|
| In Stock | Above the low stock threshold |
| Low Stock | At or below the threshold — reorder soon |
| Out of Stock | Zero. Will not appear in POS at all. |
Row actions: View · Barcode · Edit · delete.
The Barcode button is greyed out for any product with no barcode.
Product details
Click View on any product. Four tabs:
Overview — the full record: name, SKU, barcode, category, brand, unit, both prices, current stock, threshold, storage location, description and status.
Inventory — the purchase batches this product has been received in, each with its quantity, what remains, the unit cost paid and when it arrived. This is where you see that you bought 20 units at ৳100 and 30 more at ৳110, and how much of each is left.
Sales — the sales this product has appeared in. Good for checking whether something is actually moving.
Activity — a dated log of everything that has happened to this product record:
| Action | Means |
|---|---|
| CREATED | The product was added |
| UPDATED | Details were edited |
| RESTOCKED | Stock was received |
| ADJUSTED | The stock figure was changed directly |
| PRICE_CHANGED | A price was edited |
| STATUS_CHANGED | Activated or deactivated |
| DELETED | The product was removed |
Each entry names who did it and when. This is your first stop when a stock figure looks wrong.
Editing a product
Click Edit on a product row. The form opens pre-filled and the Add tab is relabelled Edit.
The edit form has the same fields as the add form except Stock Quantity — you cannot change stock by editing the product. That is deliberate: stock has to move for a reason, and the reason must be recorded. See Adding stock.
Everything else can be changed. Price changes take effect on the next sale; sales already made keep the price they were sold at.
Deleting a product
The delete button (trash icon) removes a product from your catalog.
Warning
Think before deleting. A product tied up in past sales, purchase batches or returns should not be removed — its history is part of your records. If you have simply stopped selling something, deactivate it instead. It then disappears from POS while its history stays intact.
Delete is for genuine mistakes: a product created twice, or one created with the wrong details before it was ever sold.
Printing barcode labels
Sidebar → Products → List.- Find the product.
- Click Barcode (the printer icon).
- A print preview opens showing the label with the barcode, product name and price.
- Choose how many copies you need and print.
Print onto label stock and stick them on shelves or products. After that, scanning at the till replaces typing entirely — faster and with no risk of ringing up the wrong item.
If you see "No barcode available for this product", that product has no barcode stored. Edit it and add one.
Adding stock
Two different situations, two different tools. Choosing correctly is what keeps your profit figures true.
You bought stock — use Purchases
Sidebar → Purchases and record what you received, including what you paid. This creates a batch, and the cost from that batch is what the system uses to work out profit when the goods sell.
This is the normal, correct way to add stock. See Chapter 7.
You are correcting a count — adjust the stock
When a stock-take shows 48 on the shelf but the system says 50, the two missing units are not a purchase. Record what actually happened:
- Damaged, expired, stolen or lost → Product Removal, which records the loss against your profit.
- A genuine counting error → adjust the stock figure, and the change is written to the product's Activity log with your name on it.
Warning
Never use a stock adjustment to record goods you bought. Stock added that way has no cost attached, so it looks like it cost you nothing — and every sale of it will show a wildly inflated profit.
Next: Chapter 7 — Purchases
7Purchases
Recording stock you have received from suppliers, with what you paid for it. This is what makes every profit figure in the system trustworthy.
Who can use this: Owner, Admin, Manager (by default).
Contents
- Why this screen matters
- What a batch is
- FIFO — how cost is worked out
- Recording a purchase
- The purchase list
- The statistics cards
- Batch details
- Expiry tracking
- Common mistakes
Why this screen matters
Profit is selling price minus what the goods cost you. The second half of that sum has to come from somewhere, and it comes from here.
When you record a purchase you tell the system two things: how many units arrived, and what you paid per unit. When those units sell, that cost is subtracted from the sale to give the profit. Skip this step and the system has no cost to work with, so it will report profit that you have not actually made.
The rule
goods you bought come in through Purchases. Nothing else.
What a batch is
Each purchase you record creates a batch — one delivery of one product at one price.
Buy 20 units of the same product at ৳100 in January and 30 more at ৳110 in March, and you have two batches. The system tracks them separately because they cost different amounts.
Each batch holds:
| The product | Which item this is |
| Total quantity | How many arrived |
| Quantity remaining | How many are still unsold |
| Unit cost | What you paid per unit |
| Expiry date | If it has one |
| Received date | When it arrived |
| Who recorded it | Your name |
The product's overall stock figure is simply the remaining quantities of all its batches added together.
FIFO — how cost is worked out
FIFO stands for First In, First Out: the oldest stock is treated as sold first.
Using the example above:
Batch A (January): 20 units @ ৳100 ← sells first
Batch B (March): 30 units @ ৳110 ← sells once A runs out
Sell 25 units at ৳150 each and the system works out:
20 units come from Batch A: 20 × ৳100 = ৳2,000
5 units come from Batch B: 5 × ৳110 = ৳550
cost = ৳2,550
revenue = 25 × ৳150 = ৳3,750
profit = ৳3,750 − ৳2,550 = ৳1,200
Batch A is now empty; Batch B has 25 units left.
This is the same method accountants use, and it matches how a shop actually works — you sell the older stock off the front of the shelf. It means:
- Your profit figures are real, not estimates.
- When your supplier raises prices, your reported profit narrows honestly instead of staying flattering.
- Your inventory value reflects what the goods really cost you.
None of it needs any thought from you at the till. Record purchases properly and the arithmetic happens by itself.
Recording a purchase
Sidebar → Purchases → Add.
| Field | What to enter | Required |
|---|---|---|
| Product | Which product arrived | ✓ |
| Quantity | How many units, e.g. 100 | ✓ |
| Unit Cost (৳) | What you paid per unit, e.g. 15.50 | ✓ |
| Batch Value | Calculated for you — quantity × unit cost | — |
| Reason | Why, e.g. Initial stock, Restock | |
| Notes | Anything else about this delivery |
Choosing the product. The product box is a searchable list. Click it and type part of the name or the SKU; matches narrow as you type. Pick one and it shows as Product Name (SKU: ABC123).
Unit Cost is per unit, not per delivery. If you paid ৳1,550 for 100 pieces, enter 15.50, not 1550. Batch Value fills in as you type — check it against your supplier's invoice before saving. If it does not match, you have the wrong number in one of the boxes.
Save, and the quantity is added to the product's stock immediately.
Note
The purchase form does not currently include an expiry date box. Expiry dates are stored on batches and shown throughout the screen for batches that have one, but they are not captured at this point in the flow.
The purchase list
Sidebar → Purchases → List. Titled Purchase Batches. Every batch, newest first, showing the product, quantity received, quantity remaining, unit cost, batch value and received date.
Search and paging work as on the other list screens.
Reading the list, the numbers to compare are quantity received against quantity remaining:
- Remaining close to received → barely selling. Money sitting still on a shelf.
- Remaining near zero → selling well. Reorder before it hits zero.
The statistics cards
Above the list is a row of cards summarising your stock position:
| Card | What it tells you |
|---|---|
| Total Batches | How many batches you hold, and how many have an expiry date |
| Total Value | The money tied up in stock, and the average batch value |
| Stock Status | The overall in-stock position |
| Utilization | How much of what you bought has actually sold |
| Quantity Overview | Total units received against units remaining |
| Expiry Alerts | Batches expiring soon (amber) and already expired (red) |
| Performance | Average batch quantity, average utilisation, and how many batches carry no expiry date |
| Efficiency | How well stock is turning over |
Utilization is the one to watch. A low percentage means you bought more than you can sell — cash locked in stock instead of working for you.
Batch details
Click a batch to open it. You see everything recorded about that delivery, plus how much of it remains and what it is worth today.
You can also reach a product's batches the other way round: Sidebar → Products → View on a product → the Inventory tab lists every batch for that one product. That view answers "what did I actually pay for the stock I am holding?"
Expiry tracking
For batches that carry an expiry date, the system watches it for you:
| Marker | Meaning |
|---|---|
| Amber badge | Expiring soon — sell it, discount it, or move it to the front |
| Red badge | Already expired — it must not be sold |
Check Expiry Alerts at the start of every week if you handle food, medicine or cosmetics.
When something does expire, take it off the shelf and record it as a Product Removal with the reason EXPIRED. That removes it from stock and books the loss properly.
The Performance card shows how many batches carry no expiry date at all, which tells you how much of your stock you are not monitoring this way.
Common mistakes
Entering the total invoice price as the unit cost. ৳1,550 typed in place of ৳15.50 makes the system think every unit cost you ৳1,550, so every sale of that product will report a huge loss. Always check Batch Value before saving.
Adding stock by editing the product instead. Stock added that way has no cost attached. The system treats it as free, and every sale of it shows an inflated profit. Always come here.
Recording one batch for goods bought at two prices. If the supplier gave you 50 at ৳100 and 50 more at ৳90, record two batches. Averaging them by hand throws away the accuracy the system is built to give you.
Not recording purchases at all. The stock number will be wrong, the POS will refuse sales as out of stock, and every report will be worthless. Record deliveries the day they arrive.
8Product Removals
Recording stock that leaves without being sold — damaged, expired, stolen, given away or used in-house.
Who can use this: Owner, Admin, Manager (by default).
Contents
- Why bother recording losses
- The screen
- Recording a removal
- Removal reasons
- Estimated loss
- The removal list
- Filtering removals
- The Statistics tab
- Editing and deleting
- Where losses show up
Why bother recording losses
Two reasons, and both matter.
Your stock count stays true. Ten broken bottles that are never recorded stay in the system as sellable stock forever. The POS offers them, the reorder figures are wrong, and every stock-take turns into a hunt for goods that no longer exist.
Your profit figures stay honest. Breakage and theft are real costs of running a shop. Record them and the Profit & Loss statement shows what the shop actually earned. Ignore them and it reports a profit you never had.
It is uncomfortable to write down losses. Do it anyway — the shop that measures its wastage is the one that can reduce it.
The screen
Sidebar → Product Removals. Three tabs:
- List — every removal recorded.
- Add — the removal form. (Becomes Edit when you are editing one.)
- Statistics — where your losses are actually coming from.
Recording a removal
Sidebar → Product Removals → Add.
| Field | What to enter | Required |
|---|---|---|
| Product | Which product is being removed | ✓ |
| Reason for Removal | Why — see the list below | ✓ |
| Quantity to Remove | How many units | ✓ |
| Batch ID | The specific batch, if you know it | |
| Expiry Date | The expiry date of the affected goods | |
| Damage Description | What happened, in your own words | |
| Estimated Loss | What it cost you, in taka | |
| Additional Notes | Anything else |
When you save, the quantity is taken out of stock immediately. There is no approval step — unlike returns, a removal takes effect at once.
Damage Description is worth filling in properly. "Carton dropped during unloading, 6 of 12 bottles broken" tells you something six months later; "damaged" does not.
Removal reasons
Pick the one that genuinely fits. These are the only way to answer "where is our stock going?"
| Reason | Use when |
|---|---|
| EXPIRED | Past its date and unsellable |
| DAMAGED | Damaged in general handling |
| BROKEN | Physically broken |
| DEFECTIVE | Faulty out of the box |
| STOLEN | Known theft |
| LOST | Missing with no explanation |
| SAMPLE | Given to a customer to try |
| QUALITY_ISSUE | Below the standard you will sell |
| RECALL | Withdrawn by the manufacturer |
| WASTE | Spoiled or wasted |
| DONATION | Given away |
| EMPLOYEE_USE | Taken for shop or staff use |
| TESTING | Used to test something |
| DEMONSTRATION | Used to demonstrate a product |
| SHOWROOM_DISPLAY | Put on display and no longer sellable |
| PROMOTIONAL | Given away as promotion |
| MANUFACTURER_DEFECT | Faulty from the factory |
| SHIPPING_DAMAGE | Damaged in transit to you |
| STORAGE_DAMAGE | Damaged in your own storeroom |
| NATURAL_DISASTER | Flood, fire, storm |
| OTHER | Nothing above fits — explain in the notes |
Some of these carry a lesson if you use them consistently:
- Lots of SHIPPING_DAMAGE → take it up with your supplier or courier.
- Lots of STORAGE_DAMAGE → your storeroom needs attention.
- Lots of EXPIRED → you are over-ordering, or not rotating stock to the front.
- Lots of LOST → look carefully; unexplained disappearance is often theft.
Estimated loss
What the removed goods cost you. As a rule use the purchase price, not the selling price — you lost what you paid, not what you hoped to earn.
estimated loss = quantity removed × purchase price per unit
Six bottles that cost you ৳80 each is a ৳480 loss, even if you were going to sell them at ৳120.
Leaving this blank still removes the stock, but the loss will not appear in your financial figures. Fill it in — it is the number that makes the Statistics tab and the Profit & Loss statement meaningful.
The removal list
Sidebar → Product Removals → List. Every removal, newest first, showing the product, quantity, reason, estimated loss, who recorded it and when.
Click a row to see the full record including the damage description, batch details and notes.
Filtering removals
There is a filter dialog offering:
| Filter | Use |
|---|---|
| Start / End date | A particular period |
| Reason | One reason at a time — e.g. only expiries |
| Product | One product's whole loss history |
| Min / Max loss | Only losses within a value range — useful for finding the big ones |
You can also list a single product's removals directly, or list everything with one particular reason.
The Statistics tab
Sidebar → Product Removals → Statistics. This is the tab that pays for the effort of recording removals.
| Section | What it shows |
|---|---|
| Total removals | How many removal records exist |
| Total quantity | How many units have left this way |
| Total loss | The money lost, added up |
| Monthly removals | Count, quantity and loss month by month — is it getting better or worse? |
| Reason breakdown | Losses grouped by reason — where the problem actually is |
| Product breakdown | Which products you lose most of |
| Recent removals | The latest few |
How to read it: find your biggest number in the reason breakdown and deal with that one cause. Most shops discover their losses are concentrated in one or two reasons and one or two products, and both are usually fixable.
Editing and deleting
Edit lets you correct a removal — the reason, quantity, estimated loss, description or notes. Correcting the quantity adjusts stock to match.
Delete removes the record and puts the stock back. Use it only when the removal should never have been recorded — you found the "lost" carton behind the shelf, or you recorded the wrong product.
Warning
Deleting a removal silently increases your stock. Never delete one to tidy up the list. If goods really did leave the shop, the record belongs there, however unpleasant it looks in the statistics.
Where losses show up
A recorded removal reaches:
- Product stock — reduced immediately.
Profit & Loss statement — as Removals Loss, subtracted right at the end:
Operating Profit − Removals Loss = Net ProfitSee Chapter 10.
- The Statistics tab — the analysis above.
- The product's Activity log.
This is why a shop can look profitable on sales and still end the month thin: the losses come off at the bottom. If Net Profit is far below Operating Profit, your removals are the reason, and the Statistics tab will tell you which ones.
Next: Chapter 9 — Expenses
9Expenses
Every taka the shop spends that is not buying stock — rent, salaries, electricity, transport.
Who can use this: Owner, Admin (by default).
Contents
- What belongs here
- The screen
- Recording an expense
- Expense categories
- Payment methods
- Receipts
- The expense list
- Statistics
- Exporting
- Editing and deleting
- How expenses affect profit
What belongs here
Yes — record it here: rent · staff salaries · electricity, water, gas, internet · shop supplies (bags, receipt rolls, cleaning) · advertising and signage · transport and delivery costs · repairs and maintenance · insurance · trade licence and taxes · bank charges
No — these go elsewhere:
| Spending | Where it belongs |
|---|---|
| Buying stock to sell | Purchases — that is cost of goods, not an expense |
| Goods damaged or expired | Product Removals |
| Refunding a customer | Returns |
The distinction between an expense and stock is the whole point of the Profit & Loss statement. Stock cost is subtracted to give Gross Profit; expenses are subtracted after that to give Operating Profit. Put stock purchases in here and both figures become meaningless.
The screen
Sidebar → Expenses. Two tabs: List and Add (which becomes Edit when editing).
Recording an expense
Sidebar → Expenses → Add.
| Field | What to enter | Required |
|---|---|---|
| Date | When the money was spent — not when you typed it in | ✓ |
| Amount (৳) | How much, e.g. 12000.00 | ✓ |
| Category | Which kind of expense | ✓ |
| Payment Method | How you paid | ✓ |
| Reference Number | Bill or invoice number, e.g. Invoice #12345 | |
| Receipt Upload | A photo or scan of the bill | |
| Description | What it was for |
Important
Set the Date to the day the expense actually happened. Type July's electricity bill in August with August's date and your monthly reports will both be wrong — July looks too cheap, August too expensive.
Expense categories
| Category | Covers |
|---|---|
| RENT | Shop rent, godown rent |
| UTILITIES | Electricity, water, gas, internet, phone |
| SALARIES | Staff wages, bonuses |
| SUPPLIES | Bags, receipt rolls, stationery, cleaning materials |
| MARKETING | Advertising, signboards, promotions |
| TRANSPORTATION | Delivery charges, fuel, rickshaw and van fares |
| MAINTENANCE | Repairs, servicing, painting |
| INSURANCE | Shop and stock insurance |
| TAXES | Trade licence, VAT payments, government fees |
| OTHER | Anything genuinely not covered above |
Use OTHER sparingly. An expense breakdown where the largest slice is "Other" tells you nothing. If you keep using it for the same kind of spending, pick the nearest real category and stay consistent.
Payment methods
| Method | Use for |
|---|---|
| CASH | Paid from the till or your pocket |
| BANK_TRANSFER | Sent from a bank account |
| CREDIT_CARD | Paid by credit card |
| DEBIT_CARD | Paid by debit card |
| MOBILE_PAYMENT | bKash, Nagad, Rocket and similar |
Receipts
Receipt Upload attaches an image or scan of the bill to the expense record.
Worth doing for anything substantial. Paper receipts fade, get lost, or go missing exactly when your accountant asks for them; the attached copy stays with the record permanently. Photograph the bill with your phone and upload it while you are entering the expense.
The expense list
Sidebar → Expenses → List. Every expense with its date, category, amount, payment method, reference and who recorded it.
Filter by date range and category, and search by description or reference number. Click a row to see the full record including the description and the attached receipt.
Statistics
The summary figures above the list cover the period you have selected:
- Total expenses — everything spent in the period.
- Number of expenses — how many separate entries.
- Average expense.
- Highest expense — the single biggest item.
- Category breakdown — the total for each category, so you can see where the money goes.
Check the category breakdown monthly. In most shops two or three categories account for nearly everything, and those are the only ones where cost-cutting is worth your effort.
Exporting
Export CSV downloads the filtered list as a spreadsheet. Useful for handing your accountant a month's expenses, or for doing your own analysis in Excel.
Set the date filter to the period you want before exporting — the export follows your filters.
Editing and deleting
Edit corrects any field of an expense — a wrong amount, a wrong category, a wrong date.
Delete removes the record entirely.
Warning
Deleting an expense changes past profit figures. A month you already reported on will quietly show a different net profit afterwards. Prefer editing a wrong entry to deleting it, and delete only genuine duplicates or entries that were never real spending.
How expenses affect profit
Expenses sit in the middle of the Profit & Loss statement:
Gross Sales
− Returns
= Net Revenue
− Cost of Goods Sold ← what your stock cost (from Purchases)
= Gross Profit
− Operating Expenses ← this chapter
= Operating Profit
− Removals Loss ← damaged and expired stock
= Net Profit
Gross Profit is what your trading earns. Operating Profit is what is left after the cost of keeping the doors open. The gap between them is this screen.
A shop with healthy gross profit and thin net profit does not have a pricing problem — it has an expense problem, and the category breakdown will show you exactly where.
The full statement is in Chapter 10 — Reports.
Next: Chapter 10 — Reports
10Reports
Three reports that answer the questions an owner actually asks: what did we sell, what are we holding, and did we make money?
Who can use this: Owner, Admin (by default).
Contents
- Finding the reports
- The period filter
- Sales Report
- Inventory Report
- Profit & Loss Report
- Exporting
- How to read the reports together
- Why the numbers might surprise you
Finding the reports
Sidebar → Reports. Click the row to expand it:
- Sales Report
- Inventory Report
- Profit & Loss
Each opens as its own page with a Summary view (charts and headline figures) and a Detailed view (the full tables).
The period filter
Sales and Profit & Loss both start with a period selector: Today, Yesterday, Last 7 Days, Last 30 Days, This Month, Last Month, This Quarter, This Year, or a Custom Range with your own dates.
The Inventory Report has no period — it always shows stock as it is right now.
Days run on Bangladesh time (Asia/Dhaka), so "Today" starts at midnight local time whatever timezone the computer is set to.
Sales Report
What it answers: what did we sell, to whom, and how were we paid?
Headline figures
| Figure | Meaning |
|---|---|
| Gross Sales | Everything sold before returns are taken off |
| Returns | The value customers brought back |
| Net Revenue | Gross Sales − Returns. What you actually sold. |
| Net Profit | What you earned after costs |
| Items Sold | Units sold, net of returns |
| Transactions | How many separate sales |
| Avg Order Value | Net Revenue ÷ Transactions — the average basket |
| Return Rate | What proportion of sales came back |
Tables
Sales Details — every sale in the period:
| Column | |
|---|---|
| Invoice | The invoice number |
| Customer | Name, or Walk-in |
| Items | Net units on the sale |
| Original Total | The bill as first rung up |
| Returns | Value returned from this sale |
| Net Total | What the sale is finally worth |
| Payment | Method used |
| Date | When |
Top Selling Products — product, net quantity, net revenue, returns and return rate.
Payment Methods — method, number of transactions, amount and share of the total.
Category Breakdown — revenue and share per category.
What to look at
Avg Order Value is the number most shops ignore and most easily improve. Raising it means each customer already through the door spends more.
Return Rate per product is a quality warning. One product with a return rate far above the rest has a real problem — cross-check it in Returns to see the reasons.
Payment Methods tells you how your customers want to pay. If mobile banking is climbing year on year, make it easy at the counter.
Inventory Report
What it answers: what am I holding, what is it worth, and what am I about to run out of?
Always current — no period to choose.
Headline figures
| Figure | Meaning |
|---|---|
| Total Products | Products in the catalog |
| Active Products | Those currently being sold |
| Inventory Value | What your stock cost you |
| Potential Revenue | What it would fetch at selling prices |
| Stock Quantity | Total units held |
| Low Stock | Products at or below their threshold |
| Out of Stock | Products at zero |
| Turnover | How many times your stock sells through and is replaced |
Tables
Inventory Details — SKU, product, category, stock, threshold, purchase price, selling price, margin, value and status for every product.
Category Breakdown — number of products and stock value per category.
Low Stock Alert — products at or below threshold, with stock and threshold side by side. This is your reorder list.
Out of Stock — products at zero, with their prices. Every one is a sale you cannot make today.
What to look at
Inventory Value is cash you have already spent, sitting on shelves. Watch the trend: if it grows while sales stay flat, you are over-ordering.
Turnover is the efficiency of that cash. Higher means the same money is being recycled into sales more often. A low figure with a high inventory value means dead stock.
Out of Stock deserves attention every single day. Each entry is money walking out of the door, and it is worse than it looks — a customer who cannot get what they came for often buys nothing at all.
Profit & Loss Report
What it answers: did the shop actually make money?
This is the report to read if you only read one.
The statement
Gross Sales everything sold
− Returns what came back
─────────────────────────
= Net Revenue what you really sold
− Cost of Goods Sold what that stock cost you (FIFO)
─────────────────────────
= Gross Profit what trading earns
− Operating Expenses rent, salaries, bills
─────────────────────────
= Operating Profit what running the shop earns
− Removals Loss damaged, expired, stolen stock
─────────────────────────
= NET PROFIT what you actually made
Every line comes from somewhere you can check:
| Line | Comes from |
|---|---|
| Gross Sales | POS and Sales |
| Returns | Returns |
| Cost of Goods Sold | Purchases — the FIFO batch costs |
| Operating Expenses | Expenses |
| Removals Loss | Product Removals |
Headline figures
Net Revenue · Gross Profit · Total Expenses · Net Profit · Gross Margin · Net Margin · Returns · Removals Loss.
Gross Margin is gross profit as a percentage of revenue — how much your pricing earns before overheads. Net Margin is net profit as a percentage — what actually reaches you. The gap between the two is everything it costs to run the shop.
Tables
Category Performance — revenue, cost, profit and margin per category. This shows which parts of your shop are worth the shelf space. A category with high revenue and thin margin is busy but not lucrative.
Expense Breakdown — each expense category with its amount and share.
Monthly Trend — revenue, cost, profit and margin month by month. The most useful table in the system. One month tells you little; twelve tell you whether the business is growing, whether margins are being squeezed, and which months you should plan for.
Top Profitable Products — ranked by profit, not revenue. Your bestseller and your most profitable product are frequently not the same thing, and this table is where you find out.
Exporting
Every report has export buttons:
CSV — a spreadsheet of the report data, for your own analysis or your accountant.
PDF — a branded, printable document carrying your shop name and details from Settings → Shop Details. It opens your browser's print dialog: choose a printer, or choose "Save as PDF" as the destination to keep the file.
The PDF contains the same headline figures and tables described above, laid out for paper. Use it for bank meetings, investor conversations, or your own monthly file.
Exports follow the period you have selected. Set the period first.
How to read the reports together
Monthly routine, in order:
- Profit & Loss — set the period to Last Month. Read Net Profit. That is the answer.
- If profit is thin, look at Gross Margin. Low means your pricing or your buying is the problem. Healthy means look at Expense Breakdown instead.
- Check Removals Loss. If the gap between Operating Profit and Net Profit is large, your losses are eating the business — go to Removals → Statistics.
- Sales Report — check Return Rate and the top products.
- Inventory Report — work through Low Stock Alert and Out of Stock, and reorder.
- Look at Monthly Trend and compare against the months before.
Half an hour, once a month, and you know your business.
Why the numbers might surprise you
"My sales look lower than I expected." Returns are subtracted. The report shows Net Revenue — what you kept, not what you rang up.
"My profit is much lower than sales minus purchase price." Three more things come out: operating expenses, removals losses, and the fact that cost of goods uses the actual FIFO batch cost, not the default purchase price on the product record.
"The profit on one product looks wrong." Check its purchase batches (Products → View → Inventory). Stock added without a purchase batch has no cost attached, so it appears to have been free and shows inflated profit. See Chapter 7.
"Two reports disagree." Check they cover the same period. The Inventory Report is always now; the other two follow the period filter.
"Last month's figures changed since I looked." Something was backdated — an expense entered late with the correct date, or a return completed against an older sale. This is correct behaviour: the reports always reflect the truth as it is now known.
Next: Chapter 11 — Users
11Users
Accounts for the people who work in the shop, and what each of them is allowed to do.
Who can use this: Owner, Admin (by default). Changing the permission table itself is SuperAdmin only.
Contents
- Why everyone needs their own account
- The screen
- Creating a user
- Choosing a role
- What each role can open
- Editing a user
- Deactivating an account
- Passwords
- Viewing a user
- Good practice
Why everyone needs their own account
Every sale, return, payment, stock change and removal is stamped with the account that did it. Share one login between four staff and that record becomes worthless — you can never tell who rang up the mistaken sale or removed the missing stock.
Individual accounts also mean you can give each person exactly the access they need and nothing more, and you can shut off one person's access the day they leave without disturbing anyone else.
It takes two minutes per person. Do it.
The screen
Sidebar → Users. Two tabs: List and Add (which becomes Edit when editing).
The list shows each user's name, email, phone, role, status and avatar, with search and paging.
Creating a user
Sidebar → Users → Add.
| Field | What to enter | Required |
|---|---|---|
| Full Name | The person's name, e.g. John Doe | ✓ |
Their login email, e.g. john.doe@example.com | ✓ | |
| Phone | Format +880XXXXXXXXXX or (+880) X XXXXXXXXX | ✓ |
| Role | What they are allowed to do | ✓ |
| Password | At least 8 characters | ✓ |
The eye icon beside the password box shows what you have typed — useful when you are reading a password out to someone.
Save, then give the person their email and password. Ask them to change it on first sign-in from Sidebar → Profile → Password (Chapter 1).
Email and phone must both be unique. If someone already has that email, you will be told.
Choosing a role
Each account gets exactly one role. Pick the smallest one that lets the person do their job.
| Role | Give it to |
|---|---|
| SuperAdmin | The one person who administers the system. Full access to everything, always, including permissions, backup and the audit log. |
| Owner | The shop owner. Everything except the SuperAdmin-only areas. |
| Admin | A senior manager you trust with money and staff — expenses, users and reports as well as the shop floor. |
| Manager | Runs the floor and the stock: products, purchases, removals, setup, plus selling. No expenses, users or reports. |
| Staff | Cashier. Sells, handles returns, takes payments. Cannot see the catalog, costs or profit. |
| Customer | Not used for shop staff. |
Rules of thumb:
- A cashier gets Staff. That is the whole point of the role — they can do the job without seeing your purchase prices, margins or expenses.
- Someone who orders stock and manages the shelves gets Manager.
- Only make someone Admin if they genuinely need to see money and manage other staff.
- There should be very few Owner accounts and normally exactly one SuperAdmin.
Warning
Do not hand out Admin because it is easier than thinking about it. An Admin can see every cost, margin and expense in your business, and can create and change other users' accounts.
What each role can open
These are the defaults:
| Page | Owner | Admin | Manager | Staff |
|---|---|---|---|---|
| Dashboard | ✓ | ✓ | ✓ | |
| POS | ✓ | ✓ | ✓ | ✓ |
| Sales | ✓ | ✓ | ✓ | ✓ |
| Returns | ✓ | ✓ | ✓ | ✓ |
| Dues | ✓ | ✓ | ✓ | ✓ |
| Products | ✓ | ✓ | ✓ | |
| Purchases | ✓ | ✓ | ✓ | |
| Product Removals | ✓ | ✓ | ✓ | |
| Expenses | ✓ | ✓ | ||
| Users | ✓ | ✓ | ||
| Reports | ✓ | ✓ | ||
| Setup | ✓ | ✓ | ✓ | |
| Settings |
SuperAdmin can open everything and is not listed. Settings is SuperAdmin-only until someone changes it.
The table is not fixed — the SuperAdmin can change it from Settings → Permissions (Chapter 13). If your shop needs Managers to see reports, that is one tick, not a role change.
Editing a user
Click Edit on any user row. The form opens pre-filled, with two differences from the add form:
- A Status dropdown appears (see below).
- The password field is labelled Password (leave blank to keep current). Leave it empty and the existing password is untouched. Type a new one to reset it.
Changing someone's Role takes effect the next time they load a page.
Deactivating an account
The Status dropdown on the edit form:
| Status | Effect |
|---|---|
| Active | Can sign in and work normally |
| Inactive | Cannot sign in. All their past records stay intact. |
Set a leaver's account to Inactive on their last day. Do not delete it — their name is attached to every sale, payment and stock movement they ever made, and that history should stay readable.
Also use Inactive for someone on long leave, and for any account you are unsure about while you investigate.
Passwords
- Minimum 8 characters, and they should contain both letters and numbers.
- Set an initial password when creating the account and have the person change it immediately.
- To reset a forgotten password: Edit the user and type a new one. There is no self-service password reset — a manager has to do it.
- Users change their own password at
Sidebar → Profile → Password.
Note
Never write passwords on a note beside the till. If people are sharing passwords, the audit trail becomes fiction and you lose the main reason for having accounts at all.
Viewing a user
Click View on a user row to see their full record: name, email, phone, role, status, avatar and when the account was created.
To see what someone has actually been doing, the SuperAdmin can filter the Audit Log by that user — see Chapter 13.
Good practice
- One account per person. No shared logins, ever.
- Smallest role that works. You can always raise it later.
- Deactivate leavers the same day, before they leave the building.
- Review the user list every few months. Old accounts that nobody has closed are the most common security hole in a small business.
- Keep the SuperAdmin credentials safe and known to the owner. Losing them means losing access to permissions, backup and the audit log.
Next: Chapter 12 — Setup
12Setup
Categories and brands — the groundwork you lay before adding a single product.
Who can use this: Owner, Admin, Manager (by default).
Contents
- Do this first
- Categories
- Adding a category
- Choosing your categories well
- Brands
- Adding a brand
- Active and inactive
- Editing and deleting
Do this first
A product cannot be created without a category. The Category field on the product form is compulsory, and its dropdown will simply be empty until you have created some.
Brands are optional, but a shop selling branded goods should set them up now rather than retrofitting them across hundreds of products later.
Sidebar → Setup and click to expand:
- Categories
- Brands
Both screens work identically: an All tab listing what exists, and an Add tab for creating (which becomes Edit when you are editing one).
Categories
A category is a group of similar products: Rice & Grains, Beverages, Stationery, Mobile Accessories.
Categories do real work in the system:
- Filtering at the AT-TOHFA Cashiers narrow the product grid by category, which is much faster than scrolling — see Chapter 2.
- Category Breakdown in the Sales Report — which parts of the shop earn your revenue.
- Category Performance in the Profit & Loss report — revenue, cost, profit and margin per category. This is where you learn that one section earns half your profit and another earns almost none.
- Category Breakdown in the Inventory Report — how much stock value sits in each group.
Categories chosen carelessly make all four useless.
Adding a category
Sidebar → Setup → Categories → Add Category.
| Field | What to enter | Required |
|---|---|---|
| Name | The category name | ✓ |
| Description | What belongs in it |
Names must be unique. Save, and it is immediately available on the product form.
Choosing your categories well
Aim for 5 to 15. Fewer and every report says "most of our money comes from General", which tells you nothing. Many more and nobody can find the right one, so products end up scattered inconsistently.
Group by what you would reorder together, not by supplier or by shelf. Beverages is a good category; Things from Karim Traders is not, because your supplier may change while the products stay.
Make each product's home obvious. If a member of staff has to think about where a new product belongs, two people will file it two ways and your reports will split it in half.
Avoid a "Miscellaneous" category if you possibly can. It grows relentlessly and everything inside it is invisible to your analysis.
Good example for a grocery shop: Rice & Grains · Cooking Oil · Spices · Dairy · Beverages · Snacks · Cleaning · Personal Care · Baby Products
Poor example: Food · Non-Food · Other
Get this right at the start. Reorganising categories once you have a thousand products is real work.
Brands
A brand is the maker: Pran, Fresh, Nestlé, Samsung.
Brands are optional on a product. They are useful for:
- Filtering at the POS when a customer asks for a brand by name.
- Searching your catalog — finding everything from one manufacturer.
- Deciding whether a manufacturer's products are worth the shelf space.
If you run a shop with generic unbranded goods, you can skip brands entirely.
Adding a brand
Sidebar → Setup → Brands → Add Brand.
| Field | What to enter | Required |
|---|---|---|
| Name | The brand name | ✓ |
| Description | Any notes about it |
Names must be unique.
Tip
Agree a spelling and stick to it. Nestle, Nestlé and NESTLE become three separate brands, and your filtering quietly stops working.
Active and inactive
Categories and brands each carry a status badge, Active or Inactive.
Active ones appear in the dropdowns on the product form and in the POS filters. Inactive ones do not, but everything already assigned to them keeps working and their history stays intact.
Use Inactive when you stop stocking a whole line: the old products and their sales records stay readable, but nobody can file anything new under it by accident.
Editing and deleting
Edit (pencil icon) changes the name or description. Renaming a category updates it everywhere at once — every product in it, and every report from now on.
Delete (trash icon) removes it entirely.
Warning
Do not delete a category or brand that products are using. Deactivate it instead. Deleting a group that products still belong to leaves those products without a valid group and breaks the breakdowns in your reports.
Delete is for genuine mistakes: a category created twice, or a typo caught before anything was filed under it.
Next: Chapter 13 — Settings
13Settings
Shop details, who can open what, backups, and the record of everything that has happened.
Who can use this: SuperAdmin by default. Some tabs can be opened by others if the SuperAdmin grants access.
Contents
- The tabs
- Shop Details tab
- Users tab
- Permissions tab
- Data Management tab
- Backups — how to do them properly
- Audit Log tab
The tabs
Sidebar → Settings. Which tabs you see depends on who you are:
| Tab | Who sees it |
|---|---|
| Shop Details | Anyone who can open Settings |
| Users | Anyone with Users access |
| Permissions | SuperAdmin only |
| Data Management | SuperAdmin only |
| Audit Log | SuperAdmin only |
Settings is closed to every role by default, so in a normal installation only the SuperAdmin sees any of this.
Shop Details tab
Titled Shop Information. These details appear on every receipt you print and at the top of every report PDF, so get them right before you start trading.
| Field | What to enter | Required |
|---|---|---|
| Shop Name | Your shop's name as customers know it | ✓ |
| The shop's email address | ✓ | |
| Phone | The number customers should call | ✓ |
| Tax Rate (%) | Your tax rate, if you charge one | |
| Address | The full shop address | ✓ |
Press Save Settings when done.
Note
The Tax Rate here is stored on the shop record, but sales made through the POS do not add tax — there is no tax box on the checkout screen. Do not expect setting a rate here to start adding tax to bills. See Chapter 2.
Amounts throughout the system are shown in Bangladeshi Taka (৳).
Check the printed result. Print one receipt after saving and read it as a customer would — the address and phone are what someone uses to find you or ring you about a problem.
Users tab
The same user management as Sidebar → Users, brought here for convenience. Everything about it is in Chapter 11 — Users.
Permissions tab
SuperAdmin only. Titled Page Permissions.
This is the grid that decides which roles can open which pages. Every page is a row, every role a column, and each cell a tick you can turn on or off.
To change access:
- Find the page's row.
- Tick or untick the role's box.
- Press the save button.
Changes take effect the next time that user loads a page. Someone who is signed in will see their sidebar change on their next navigation.
What you can grant: Owner, Admin, Manager, Staff, Customer.
SuperAdmin does not appear in the grid. SuperAdmin can always open every page, and that cannot be turned off — it is what keeps you from locking yourself out of your own system.
The pages you can control
dashboard · pos · sales · returns · dues · products · purchases · product-removal · expenses · users · reports · setup · settings
profile is not listed — everyone can always open their own profile.
Sensible changes
- Let Managers see Reports. Common in shops where the manager does the ordering.
- Stop Staff seeing Dues if you would rather cashiers did not see customer balances.
- Give the Owner Settings access so the owner is not dependent on the SuperAdmin for shop details.
Warning
Think carefully before granting Staff access to Products, Purchases or Reports. Those pages show your purchase prices and margins. Once a cashier can see what you pay for goods, so can anyone standing behind them.
Warning
Granting a role access to Settings hands them the Shop Details tab. It does not give them Permissions, Data Management or the Audit Log — those stay SuperAdmin-only whatever you do here.
Data Management tab
SuperAdmin only. Titled Database Backup.
Create Backup
Press Download Backup. The system produces a complete PostgreSQL dump (.dump) of every table — products, sales, purchases, users, settings, everything — and downloads it to your computer.
This one file can restore your entire system.
Restore From Backup
Press Restore Backup and choose a .dump file you downloaded earlier. Accepted file types are .dump, .sql and .backup.
Warning
Restoring replaces all current data with the contents of the backup file. Everything recorded since that backup was taken — every sale, payment, purchase and new product — is gone permanently. This cannot be undone.
Take a fresh backup immediately before restoring an old one. If the restore turns out to be a mistake, that fresh file is the only way back.
Restoring is a last resort: recovering from a serious failure, or moving the system to a new server. It is not a way to undo a day's work.
Backups — how to do them properly
A backup that lives only on the shop computer is not a backup. If that machine is stolen, burnt or its disk fails, you lose the business records and the backup together.
A workable routine for a small shop:
- Download a backup every week. Fix it to something you already do — Friday closing works.
- Take one before anything major: a software update, a bulk price change, a server move.
- Copy each file off the machine. Google Drive, Dropbox, a USB stick kept at home — any of these, as long as it is not the shop computer.
- Keep several. Corruption is not always noticed the same day; if you only keep the newest file you may find it already contains the problem. Keep the last four weekly files.
- Name them by date —
tohfa-backup-2026-08-28.dump. You will not remember otherwise. - Test one, once. A backup nobody has ever restored is only a hope. Restore an old file onto a test system once so you know the process works and you know how long it takes.
The question to ask
if the shop computer disappeared tonight, how much of your business would you have lost? Whatever that answer is, it is how often you should be taking backups.
Audit Log tab
SuperAdmin only. A permanent record of every change anyone has made in the system.
Every action that creates, edits or deletes anything is logged with who did it, what they did, what changed, when, and whether it succeeded.
Filters
| Filter | Use |
|---|---|
| Search | Actor, entity, path or message |
| Start date / End date | Narrow to a period |
| Actor | One user's activity — All users by default |
| Entity | One kind of record — products, sales, users, and so on |
| Action | One kind of change (see below) |
| Result | Successful or Failed — All by default |
Actions
| Action | Means |
|---|---|
| CREATE | A new record was made |
| UPDATE | An existing record was changed |
| DELETE | A record was removed |
| LOGIN / LOGOUT | Someone signed in or out |
| PASSWORD_CHANGE | A password was changed |
| ROLE_CHANGE | Someone's role was changed |
| PERMISSION_CHANGE | The permission grid was edited |
| RESTORE | A backup was restored |
| EXPORT | Data was exported |
| OTHER | Anything else |
Reading an entry
Each entry names the user, the action, which record it touched, exactly which fields changed and their old and new values, the date and time, and whether it worked.
That field-level detail is the point. "Someone changed the product" is not useful; "Karim changed the selling price of SKU ABC123 from ৳120 to ৳95 on 27 August at 4:12 PM" is.
Export CSV
Exports the whole filtered set — not just the page on screen. Use it to investigate something properly in a spreadsheet, or to keep a record outside the system.
When to use it
- Stock is wrong. Filter by that product and see every change made to it.
- A price is wrong. Filter by UPDATE on products to find who changed it and when.
- Something has disappeared. Filter by DELETE.
- A staff member is under suspicion. Filter by that actor and read their day.
- Failed logins. Filter Action = LOGIN, Result = Failed. Repeated failures on one account are worth understanding.
Note
The audit log cannot be edited or deleted from within the application, by anyone including the SuperAdmin. That is what makes it worth trusting.
14Troubleshooting & Glossary
What to do when something is not working, and what all the words mean.
Contents
- Signing in
- At the POS
- Stock problems
- Reports and figures
- Printing
- Access problems
- General problems
- Glossary
- Status reference
Signing in
"My email or password is not accepted." Check for a stray space at the start or end, and that Caps Lock is off. If it still fails, ask an Owner or Admin to reset your password from Sidebar → Users → Edit. There is no self-service password reset.
"I was signed out in the middle of work." Sessions expire after a period of inactivity. Sign in again; nothing you had already saved is lost. A cart you had not yet checked out is gone — that lives only in the browser.
"I have no login at all." Someone has to create your account: Chapter 11 — Users.
At the POS
"A product is not in the grid."
In order of likelihood:
- It is out of stock. Products at zero are hidden from the POS entirely. Check
Sidebar → Productsand receive stock through Purchases. - A filter is on. Set the category and brand filters back to all and clear the search box.
- It is deactivated. Check its status in the product list.
- It was never added. Add it — Chapter 6.
"Insufficient stock!" You asked for more than the system holds. Either the stock figure is behind reality — record the delivery in Purchases — or you genuinely do not have that many.
"Quantity must be a whole number for this unit." You typed a decimal for a counted unit like Piece or Box. Use a whole number. If the product should be sold by weight, its unit is wrong — see Chapter 6.
"Received amount is less than total amount!" Full payment needs at least the total. Either collect the rest, or switch Partial Payment on and record the balance as a due.
"Customer name and phone are required for partial payments!" Credit sales must be attached to a customer. Fill both fields in.
"My cart disappeared." The page was refreshed or the browser was closed. Carts are not saved. Finish each customer before doing anything else.
"I made a mistake on a completed sale." Sales cannot be edited. Process a Return for the wrong items and ring the correct ones through as a new sale.
Stock problems
"The stock number is wrong."
- Open
Sidebar → Products → View → Activity. Every change to that product is listed with who made it and when. - If you are the SuperAdmin, cross-check in Settings → Audit Log filtered to that product.
- Once you know the cause, correct it the right way: unrecorded delivery → Purchases; damage or loss → Removal; miscount → stock adjustment.
"Stock went up on its own." A return was completed (stock goes back at that step) or a removal was deleted. Both are in the Activity log.
"I recorded a purchase but stock did not change." Check you saved the form, and that you selected the right product — the product picker is a search box and it is easy to pick the wrong similar name. Look at Purchases → List for your batch.
Reports and figures
"Profit looks far too high." Almost always stock added without a purchase batch. Stock added by adjustment has no cost attached, so the system thinks it was free. Check the product's Inventory tab. Fix it by recording the purchase properly from now on.
"Profit looks too low." Work down the Profit & Loss statement to find which line is taking it:
- Large Returns? Look at return reasons.
- High Cost of Goods Sold? Your buying prices have risen but your selling prices have not.
- High Operating Expenses? Read the expense breakdown.
- Large Removals Loss? Go to Removals → Statistics.
"Two screens show different numbers." Check the period filter on each. The Inventory Report is always now; Sales and Profit & Loss follow whatever period you selected.
"Last month's figures changed." Something was backdated — a late expense entered with its real date, or a return completed against an old sale. This is correct: reports always show the truth as currently known.
"Sales are lower than I counted." The report shows Net Revenue, after returns. Gross Sales is the figure you counted.
Printing
"The receipt did not print." The print dialog opens automatically after a sale. If it was closed by accident, the sale is still saved — only the printout was missed. Check the printer is on, has paper, and is selected in the dialog.
"I need the receipt again." POS cannot reprint. Find the sale in Sidebar → Sales and work from the Sale Details dialog, or use Export PDF.
"The shop name on the receipt is wrong." Settings → Shop Details, correct it, save. New receipts pick it up immediately.
"Barcode labels will not print." The Barcode button is disabled for products with no barcode. Edit the product and add one.
Access problems
"Access denied." Your role is not allowed on that page. The message includes a link to a page you can use. To get access, ask the SuperAdmin to change your role (Chapter 11) or grant your role that page (Chapter 13).
"A menu item vanished." Your permissions changed, or the page is still loading. Refresh once. If it stays missing, ask the SuperAdmin what changed.
"I cannot see Settings." Settings is SuperAdmin-only by default.
General problems
"The page is stuck loading." Refresh. If it persists, check your internet connection — the system needs to reach its server.
"Data I just saved is not showing." Refresh the page. If it is still missing, it did not save; check for an error message and try again.
"Everything is slow." Usually the connection rather than the system. Test another website. Also close unused browser tabs on a shared till machine.
"I deleted something I should not have." Deletions are permanent from inside the application. If the SuperAdmin has a recent backup, a restore can bring the data back — but it also undoes everything recorded since that backup. See Chapter 13. This is why regular backups matter.
Glossary
Money and profit
COGS (Cost of Goods Sold) — what the goods you sold actually cost you. Taken from purchase batches using FIFO.
Gross Sales — everything sold, before returns are deducted.
Net Revenue — Gross Sales minus returns. What you actually sold.
Gross Profit — Net Revenue minus COGS. What your trading earns before overheads.
Operating Profit — Gross Profit minus expenses. What running the shop earns.
Net Profit — Operating Profit minus removals losses. What you actually made.
Gross Margin — Gross Profit as a percentage of revenue.
Net Margin — Net Profit as a percentage of revenue.
Avg Order Value — average value of one sale. Net Revenue ÷ number of transactions.
Stock
SKU (Stock Keeping Unit) — your short code identifying one product.
Barcode — the scannable number on a product. Generated automatically for new products.
Batch — one delivery of one product at one price. See Chapter 7.
FIFO (First In, First Out) — the oldest stock is treated as sold first, so profit is calculated against what those particular units really cost.
Low Stock Threshold — the level at which a product is flagged as running out.
Reorder Point — the level at which you should place a new order.
Inventory Value — what your current stock cost you.
Potential Revenue — what your current stock would fetch if it all sold.
Turnover — how many times your stock sells through and is replaced in a period.
Unit — how a product is counted or measured. Decides whether fractions can be sold.
Removal — stock that left without being sold: damaged, expired, stolen, given away.
Sales
Invoice Number — INV-YYYYMMDD-####, unique per sale.
Walk-in Customer — a sale with no customer details recorded.
Due — money a customer still owes.
Partial Payment — a sale where the customer paid some and owes the rest.
Void — cancelling a record without erasing it. It stays visible, marked as voided.
Return — goods brought back by a customer, refunded.
Restocking Fee — an amount deducted from a refund as a handling charge.
Return Rate — what proportion of sales came back.
Special Offer — the only discount type available at the till. The number entered is the amount taken off the bill.
People and access
Role — the job title on an account: SuperAdmin, Owner, Admin, Manager, Staff or Customer.
Permission — whether a role may open a particular page.
SuperAdmin — the system administrator. Always has full access; cannot be restricted.
Audit Log — the permanent record of every change made in the system.
Actor — the user who performed an action.
Status reference
Payment status (on a sale)
| Status | Means |
|---|---|
| PENDING | Nothing received yet |
| PARTIAL | Some money taken, the rest is a due |
| COMPLETED | Paid in full |
| FAILED | The payment did not go through |
| REFUNDED | Money given back |
| CANCELLED | The sale was called off |
| VOIDED | The record has been cancelled but kept |
| OVERDUE | A due past its date |
Return status
| Status | Means | Stock back? |
|---|---|---|
| PENDING | Waiting for a decision | No |
| APPROVED | Accepted, not yet finished | No |
| COMPLETED | Finished — stock restored, refund recorded | Yes |
| REJECTED | Refused | No |
| CANCELLED | Called off | No |
Stock status
| Status | Means |
|---|---|
| In Stock | Above the low stock threshold |
| Low Stock | At or below the threshold |
| Out of Stock | Zero — hidden from POS |
User status
| Status | Means |
|---|---|
| Active | Can sign in and work |
| Inactive | Cannot sign in; history preserved |
Back to the index