- Home
- Apps
- SaaS Tools
- POS Shift & Cash Management for ERPNext
Illustrative previewA build-to-order Frappe app that adds cashier shift open/close,
blind drawer counts, float control, and over/short reconciliation to ERPNext POS terminals.
ECOSIRE scopes, builds, installs, and supports it — typical delivery is one working week from confirmed scope.
What is POS Shift & Cash Management for ERPNext?
A build-to-order Frappe app that adds cashier shift open/close, blind drawer counts, float control, and over/short reconciliation to ERPNext POS terminals. ECOSIRE scopes, builds, installs, and supports it — typical delivery is one working week from confirmed scope. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your ERPNext.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- ERPNext Compatibility
- —
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- MariaDB 10.6+
About this Product
Multi-cashier retail and restaurant operations bleed cash through the gaps ERPNext core leaves at the till. Native ERPNext ships a POS Opening Entry and POS Closing Entry, but the closing screen pre-fills the expected cash from POS Invoice totals — the cashier sees the number they are supposed to hit before they count the drawer. There is no enforced opening float per denomination, no paid-in/paid-out log for petty cash movements mid-shift, no blind count, and no structured over/short trail you can report on by cashier or terminal. For a business running several tills across shifts, that means shrinkage is invisible until month-end and there is no accountability chain when a drawer comes up short.
ECOSIRE builds pos_shift_cash, a proper Frappe app (its own module, DocTypes, and hooks.py) installed onto your bench alongside ERPNext. At its core is a Cashier Shift DocType that a cashier opens with a denomination-wise opening float (a Cash Denomination child table capturing note/coin counts that roll up to the float total), links to the assigned POS Profile and terminal, and closes with a genuinely blind count — the expected-cash field is hidden by a client script and permission-level (permlevel) restriction until after the physical count is submitted, so the counter never sees the target. A Cash Movement DocType records every paid-in and paid-out event during the shift with a reason, category, and the operating user, keeping petty-cash and drops out of sales figures.
Technically, the logic lives where Frappe expects it. Server-side validate and on_submit controller methods (registered through doc_events in hooks.py) compute over/short as counted minus expected, apply your configured tolerance threshold, and flag variances that breach it for supervisor review. Denomination roll-ups and float carry-forward are enforced server-side so they can't be bypassed from the client. Whitelisted methods (@frappe.whitelist()) expose the shift open/close and cash-movement actions to the POS UI and to the Frappe REST API (/api/method/...) for any integration or hardware you use. A scheduler event can auto-flag shifts left open past a cutoff and notify a supervisor. Access is governed by dedicated Role Profiles — Cashier, Shift Supervisor, Finance — with field-level permlevel locks so only supervisors can approve a flagged variance or edit an opening float after submission.
Because this is build-to-order, nothing ships until we agree on scope. We start with a short scoping call to map your POS Profiles, terminals, shift patterns, denomination set and currency, tolerance rules, and approval chain. We then build against your ERPNext version — Frappe/ERPNext v15 or v16 — on a staging bench, run UAT with your real terminals and cashiers, and hand over installable source, a git repository, and documentation. Typical delivery is one working week from confirmed scope, and every install includes a post-go-live support window plus a tested rollback plan.
What you get
- Installable source code for your version of the `pos_shift_cash` Frappe app, packaged for `bench get-app` / `bench install-app`
- Installation and configuration on your environment — POS Profiles, terminals, denominations, tolerance rules, Role Profiles, and approval chain wired to your setup
- Technical documentation: DocType schemas, `hooks.py` doc events, whitelisted methods, REST endpoints, permissions, and scheduler jobs
- End-user guide plus a live training session for cashiers, supervisors, and finance staff
- UAT on a staging bench against your real terminals and cashiers, with a tested rollback plan before production cutover
- Post-go-live support window for bug fixes and configuration adjustments after launch
- Git repository handover with full commit history and tagged release
- Version-compatibility notes for your target Frappe/ERPNext release (v15 or v16) and upgrade guidance
Who this is for
Multi-terminal retail operations manager
Runs several POS terminals across shifts and needs a per-cashier, per-terminal over/short trail so shrinkage is caught the same day instead of at month-end. Wants enforced opening floats and an approval chain when a drawer comes up short.
Restaurant / QSR owner
Hands the till to different staff across breakfast, lunch, and dinner shifts and needs clean cash accountability with paid-in/paid-out logging for tips, drops, and petty cash — without those movements polluting sales figures in ERPNext.
Finance controller / accountant
Wants blind cash counts to remove the 'count to the expected number' loophole, structured variance data to reconcile against POS sales, and optional Journal Entries so over/short and cash drops post to the right GL accounts with correct dimensions.
ERPNext administrator / implementation partner
Maintains the bench and needs a properly-built Frappe app — real DocTypes, `hooks.py` events, whitelisted methods, Role Profiles — that installs cleanly on v15/v16, ships with a git repo, and won't break on the next ERPNext upgrade.
How POS Shift & Cash Management for ERPNext Compares
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| Blind cash count | Expected cash hidden via client script + `permlevel` until count submitted | Possible but must be designed and built from scratch | Rarely enforced; usually shows expected total | No — POS Closing Entry pre-fills expected cash |
| Denomination-wise float | `Cash Denomination` child table on open and close, server-rolled | Buildable if specified up front | Sometimes a flat float field, no per-note breakdown | No structured denomination capture |
| Paid-in / paid-out logging | `Cash Movement` DocType with reason, category, user, kept out of sales | Depends on developer scope | Basic or absent | No mid-shift cash-movement log |
| Over/short handling | Server-side compute + tolerance threshold + supervisor approval | Whatever you commission | Simple diff, no approval workflow | Difference shown, no enforcement or trail |
| Roles & permissions | Cashier / Supervisor / Finance Role Profiles with `permlevel` locks | Must be defined and tested by you | Generic POS roles | Standard POS user roles only |
| Fit to your workflow | Scoped to your terminals, shifts, tolerances, and approval chain | Fully bespoke but you carry all risk and cost | One-size-fits-all, limited configuration | Core defaults, not built for cash accountability |
| Support & handover | Git repo, docs, training, post-go-live support window | Only if separately contracted | Vendor forum or paid tickets | Community forum only |
| Version compatibility | Built and tested for your Frappe/ERPNext v15 or v16 | You own upgrade maintenance | May lag ERPNext releases | Ships with ERPNext core |
Frequently Asked Questions about POS Shift & Cash Management
How long does delivery take?
This is a build-to-order app, not an instant download. After a short scoping call to confirm your POS Profiles, denominations, tolerance rules, and approval chain, typical delivery is one working week from confirmed scope — including a UAT pass on a staging bench before we touch production.
Does this work with our ERPNext version?
Yes. We build and test against Frappe/ERPNext v15 and v16. Tell us your exact version on the scoping call and we target that release; we also provide upgrade guidance so the app survives your next ERPNext update.
What exactly does 'blind cash count' mean here?
Unlike ERPNext's native POS Closing Entry — which pre-fills the expected cash from invoice totals so the cashier can see the target — our close screen hides the expected figure via a client script and `permlevel` restriction until the physical denomination count is submitted. The over/short is then computed server-side, so counters can't count to the number.
How do you handle updates and support after go-live?
Every install includes a post-go-live support window for bug fixes and configuration tweaks. Because you receive the full git repository and installable source, you own the code and can maintain it yourself or engage us for a support/retainer arrangement, including compatibility work for future ERPNext upgrades.
Will the app conflict with the standard ERPNext POS or its Opening/Closing Entries?
No. It's a separate Frappe app with its own module and DocTypes that links to your existing `POS Profile` and terminals rather than overwriting core. We can optionally bridge to the native POS Opening/Closing Entry or post confirmed variances to GL, and any core interaction is done through supported `hooks.py` doc events, not by patching ERPNext files.
Can we control who can open shifts, count drawers, and approve variances?
Yes. The app ships dedicated Role Profiles (Cashier, Shift Supervisor, Finance) with field-level `permlevel` locks — cashiers open and count, but only supervisors can approve a flagged over/short variance or edit an opening float after submission. We map these to your actual staffing during scoping.
Can it integrate with our cash drawer hardware or other systems?
The shift and cash-movement actions are exposed as whitelisted methods over the Frappe REST API (`/api/method/...`), so they can be driven from the POS UI, external hardware, or other systems. We scope any specific hardware or integration on the call and build the endpoints to match.
Related Modules

Pipeline & Sales Forecasting Analytics
A build-to-order ERPNext CRM extension that turns your Opportunities into weighted-pipeline, win-probability forecasting and rep-performance dashboards. ECOSIRE scopes, builds, installs and supports it on your bench.

Portal & Website Theme Builder
A build-to-order Frappe app that lets your team re-skin the entire ERPNext customer/vendor portal and website — navbar, footer, cards, login, signup and CMS pages — from a single settings DocType, no front-end code required. ECOSIRE scopes, builds, installs and supports it for you.

Premium Desk Themes & White-Label UI
A build-to-order Frappe app that gives ERPNext v15/v16 modern Desk themes, full white-labeling, custom fonts, dark mode, and branded login and portal pages. ECOSIRE scopes, builds, installs, and supports it for your brand or reseller stack.

Professional Tax & Statutory Deductions
A build-to-order ERPNext application that automates state-wise professional tax slabs and statutory deductions inside your payroll and accounting flow. ECOSIRE scopes, builds, installs, and supports it for your Frappe/ERPNext v15/v16 site.
POS Shift & Cash Management
A build-to-order Frappe app that adds cashier shift open/close, blind drawer counts, float control, and over/short reconciliation to ERPNext POS terminals. ECOSIRE scopes, builds, installs, and supports it — typical delivery is one working week from confirmed scope.
- `Cashier Shift` DocType with denomination-wise opening float captured in a `Cash Denomination` child table that rolls up server-side to the float total
- Blind close: the expected-cash figure is hidden via client script + `permlevel` until the physical count is submitted, so the cashier never sees the target
- Over/short computed in a server-side `on_submit` controller as counted-minus-expected, with a configurable tolerance threshold
- `Cash Movement` DocType logging every paid-in / paid-out with reason, category, and operating user, kept out of sales totals