Dashboard
Drag any widget to rearrange · use Widgets to show/hide.
My NakalaPOS
Extend your store
Connect NakalaPOS to your ERP.
Link this store to Business Central or ERPNext to sync catalogue, customers and post sales automatically.
Weekly Sales
{{ abbr(dash.sales_this_week) }}
{{ abbr(dash.week_taxes) }}
{{ abbr(dash.week_net) }}
{{ abbr(dash.week_expenses) }}
Best Customers
{{ b.name }} |
{{ money(b.spend) }} |
|---|
Nothing to show for the meantime.
Recents Orders
Order : {{ o.code }}
{{ money(o.total) }}
Well.. nothing to show for the meantime.
Profile
| Total Orders | {{ dash.orders_total }} |
|---|---|
| Total Sales | {{ money(dash.income_total) }} |
| Total Refunds | {{ money(dash.refund_total) }} |
| Best Customer | {{ (dash.best_customers && dash.best_customers[0]) ? dash.best_customers[0].name : '—' }} |
| Products | {{ dash.products }} |
Best Cashiers
{{ b.username }} |
{{ abbr(b.total_sales) }} |
|---|
Well.. nothing to show for the meantime.
Products List
Display all products.
| Name | Sku | Category | Status | Price | Stock | ||
|---|---|---|---|---|---|---|---|
| {{ p.name }} variants | {{ p.sku }} | {{ catName(p.category_id) }} | {{ p.status }} | {{ money(p.units[0]?.sale_price) }} | {{ p.units[0]?.quantity||0 }} | ||
| No products | |||||||
Categories
Manage product categories.
| Name | ||
|---|---|---|
| {{ cat.name }} | ||
| No categories | ||
Taxes
Tax groups and their taxes.
| {{ g.name }} | {{ (g.taxes||[]).length }} taxes |
| No tax groups |
| {{ t.name }} ({{ g.name }}) | {{ t.rate }}% |
Units
Selling / measurement units.
| Unit | Group | Value |
|---|---|---|
| {{ u.name }} | {{ g.name }} | {{ u.value }} |
| No units | ||
Unit Groups
Groups of related units.
| Name | Units |
|---|---|
| {{ g.name }} | {{ (g.units||[]).length }} |
| No unit groups | |
Payment Types
Accepted tender types at the POS.
| Label | Identifier | |
|---|---|---|
| {{ pt.label }} | {{ pt.identifier }} | |
| No payment types (defaults: cash, mpesa, card, account) | ||
Print Labels
Print Code128 barcode labels for products.
| Product | SKU | Price | |
|---|---|---|---|
| {{ p.name }} | {{ p.sku }} | {{ money(p.units[0]?.sale_price) }} |
Stock Adjustment
Correct on-hand quantities (stock-take).
Stock Flow Records
Immutable stock movement ledger.
| When | Action | Qty | Before | After | Reference |
|---|---|---|---|---|---|
| {{ (m.at||'').slice(0,16).replace('T',' ') }} | {{ m.action }} | {{ m.quantity }} | {{ m.before }} | {{ m.after }} | {{ m.reference }} |
| No stock movements | |||||
Assigned Orders
Dine-in & delivery orders and their assignee.
| Code | Type | Fulfilment | Address | Total | Assignee |
|---|---|---|---|---|---|
| {{ o.code }} | {{ o.type }} | {{ o.process_status }} | {{ o.delivery_address||'—' }} | {{ money(o.total) }} | |
| No dine-in / delivery orders | |||||
Accounts
Chart of accounts.
| Code | Name | Type | |
|---|---|---|---|
| {{ a.code }} | {{ a.name }} | {{ a.type }} | |
| No accounts | |||
Rules
Automated accounting rules — book an account on an event.
| Name | Event | Account | Note | |
|---|---|---|---|---|
| {{ r.name }} | {{ r.on_event }} | {{ r.account }} | {{ r.note }} | |
| No rules | ||||
Scale Range
Configure weighing-scale barcodes parsed at the POS.
Example: a barcode {{ scaleForm.prefix }}00042001500 → prefix {{ scaleForm.prefix }}, product code (next {{ scaleForm.product_digits }} digits), then {{ scaleForm.value_digits }} digits of {{ scaleForm.value_type }}. The till parses this on scan.
Modules
Installed modules in this NakalaPOS build.
| Name | Phone | ERP No | Points | Account balance | ||
|---|---|---|---|---|---|---|
| {{ c.first_name }} {{ c.last_name }} | {{ c.phone }} | {{ c.erp_customer_no || '—' }} | {{ c.loyalty_points }} | {{ money(c.account_balance) }} | ||
| No customers | ||||||
| {{ g.name }} | {{ g.reward_ratio }} pts / unit spent |
| No groups |
| Code | Type | Value | Min | Used |
|---|---|---|---|---|
| {{ cp.code }} | {{ cp.discount_type }} | {{ cp.value }} | {{ money(cp.minimum_order) }} | {{ cp.used_count }}/{{ cp.usage_limit||'∞' }} |
| No coupons | ||||
| Date | Ref | Debit | Credit | Balance |
|---|---|---|---|---|
| {{ (e.date||'').slice(0,10) }} | {{ e.reference }} | {{ e.debit?money(e.debit):'' }} | {{ e.credit?money(e.credit):'' }} | {{ money(e.balance) }} |
| No account activity | ||||
| Description | Account | Type | Amount | |
|---|---|---|---|---|
| {{ e.description }} · {{ e.period_key }} | {{ e.account }} | {{ e.is_recurring?('template · '+e.recurrence):'one-off' }} | {{ money(e.amount) }} | |
| No expenses | ||||
Orders
Display all orders.
| Code | Type | Fulfilment | Payment | Total | Balance | ||
|---|---|---|---|---|---|---|---|
| {{ o.code }} | {{ o.type }} | {{ o.process_status }} | {{ o.payment_status }} | {{ money(o.total) }} | {{ money(o.balance_due) }} | ||
| No orders | |||||||
Reconciliation
Cash-up & release staged mobile-vehicle sales to the ERP.
Nothing to reconcile — no staged sales awaiting release.
Sales from stage-mode locations (route vans) collect here until you release them.
| Order | When | Customer | Cash | Non-cash | Total |
|---|---|---|---|---|---|
| {{ o.code }} | {{ o.created_at? new Date(o.created_at).toLocaleString():'' }} | {{ o.customer_no||'Walk-in' }} | {{ money(o.cash) }} | {{ money(o.noncash) }} | {{ money(o.total) }} |
Refunds
All credit notes & returns.
| Refund | Order | Method | Reason | Amount | ERP Doc | |
|---|---|---|---|---|---|---|
| {{ r.code }} | {{ r.order_code }} | {{ r.method }} | {{ r.reason }} | -{{ money(r.total) }} | {{ r.erp_document_no || '—' }} | |
| No refunds | ||||||
Organizations
Every company runs on this one URL, fully isolated from the others.
Create a new organization
| Organization | Slug | ERP | Status | Actions |
|---|---|---|---|---|
| {{ t.name }} | {{ t.slug }} | {{ t.erp_provider }} | {{ t.is_active?'Active':'Suspended' }} | |
| No organizations | ||||
| {{ l.quantity }} × {{ l.name }} | {{ money(l.total_price) }} |
| Code | Supplier | Status | Payment | Total | Actions | |
|---|---|---|---|---|---|---|
| {{ po.code }} | {{ po.supplier }} | {{ po.status }} | {{ po.payment_status }} | {{ money(po.total_cost) }} | ||
| No purchase orders | ||||||
| Name | Contact | Phone | Balance owed | ||
|---|---|---|---|---|---|
| {{ s.name }} | {{ s.contact_name }} | {{ s.phone }} | {{ money(s.balance) }} | ||
| No suppliers | |||||
| Username | Full name | Role | Status | ||
|---|---|---|---|---|---|
| {{ u.username }} | {{ u.full_name }} | {{ roleName(u.role) }} | {{ u.is_active?'Active':'Disabled' }} | ||
| No users | |||||
| {{ r.category }} | {{ r.qty }} | {{ money(r.revenue) }} |
| {{ r.name }} | {{ r.qty }} sold | {{ money(r.profit) }} |
| Date | Orders | Gross |
|---|---|---|
| {{ r.date }} | {{ r.orders }} | {{ money(r.gross) }} |
| No sales in range | ||
| Category | Qty | Revenue |
|---|---|---|
| {{ r.category }} | {{ r.qty }} | {{ money(r.revenue) }} |
| Product | Qty | Revenue | Profit |
|---|---|---|---|
| {{ r.name }} | {{ r.qty }} | {{ money(r.revenue) }} | {{ money(r.profit) }} |
| {{ m.identifier }} | {{ m.count }}× | {{ money(m.total) }} |
| {{ l.product }} | {{ l.on_hand }} | {{ money(l.stock_value) }} |
| {{ r.product }} | {{ r.on_hand }} |
| All stocked |
| Customer | Orders | Spend | Acct balance | Points |
|---|---|---|---|---|
| {{ r.customer }} | {{ r.orders }} | {{ money(r.spend) }} | {{ money(r.account_balance) }} | {{ r.loyalty_points }} |
| Walk-in | {{ custStmt.walk_in?.orders||0 }} | {{ money(custStmt.walk_in?.spend) }} | ||
| No customer sales in range | ||||
| {{ cu.code }} {{ cu.symbol }} | {{ cu.is_base?'base':('× '+cu.rate) }} |
| No currencies configured |
{{ connMsg }}
On payment the sale posts automatically as a Sales Invoice — Dr Customer / Cr Items (revenue) — then the tender settles it Dr Bank/Cash / Cr Customer. A failed post never blocks the sale; it raises a notification and stays retryable.
Each ERP payment method routes to its bank / GL account — configured once on the Business Central Payment Method card (Bal. Account No.). NakalaPOS sends the method; BC books it to the mapped account.
Locations
Branch bookshops, mobile-vehicle route bookshops & how each posts to the ERP.
Posts the invoice and the payment to the ERP immediately. For trusted front-desk tills.
Posts the invoice now but stages the payment for HQ cash-verification before it's booked.
Holds the whole sale locally — nothing posts until HQ releases it (mobile/vehicle route cash-up).
| Location | Code | Type | BC code | Posting | Status | |
|---|---|---|---|---|---|---|
| {{ l.name }} | {{ l.code }} | {{ l.type }} | {{ l.bc_location_code || '—' }} | {{ l.posting_mode }} | {{ l.is_active?'Active':'Inactive' }} | |
| No locations yet — create one or Pull from BC. | ||||||