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 2-4 weeks from confirmed scope. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $249.00 USD; request a quote for a scoped proposal.

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 2-4 weeks from confirmed scope.
अभी कोई भुगतान नहीं। यह हमारी टीम को एक कोटेशन अनुरोध भेजता है — हम कीमत और अगले चरणों के साथ ईमेल द्वारा संपर्क करेंगे।
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.
`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
Variances breaching tolerance are auto-flagged and routed to a Shift Supervisor for approval before the shift can close
Denomination-wise drawer count on both open and close, with per-note/coin subtotals reconciled to the counted cash total
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 2-4 weeks from confirmed scope, and every install includes a post-go-live support window plus a tested rollback plan.
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.
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.
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.
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.
Buy the license on ecosire.com and download the POS Shift & Cash Management for ERPNext app ZIP from your account dashboard.
Extract the ZIP into your bench's apps folder, or run `bench get-app` with the path to the extracted app.
Run `bench --site SITE_NAME install-app APP_NAME` followed by `bench migrate` to install POS Shift & Cash Management for ERPNext and apply its schema.
Open the ECOSIRE License settings on your site and activate your license key. Requires the free ecosire_connect and ecosire_license_client apps.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo 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 | |
| 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 | |
| Paid-in / paid-out logging | `Cash Movement` DocType with reason, category, user, kept out of sales | Depends on developer scope | Basic or absent | |
| Over/short handling | Server-side compute + tolerance threshold + supervisor approval | Whatever you commission | Simple diff, no approval workflow | |
| Roles & permissions | Cashier / Supervisor / Finance Role Profiles with `permlevel` locks | Must be defined and tested by you | Generic POS roles | |
| 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 | |
| Support & handover | Git repo, docs, training, post-go-live support window | Only if separately contracted | Vendor forum or paid tickets | |
| Version compatibility | Built and tested for your Frappe/ERPNext v15 or v16 | You own upgrade maintenance | May lag ERPNext releases |
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 2-4 weeks from confirmed scope — including a UAT pass on a staging bench before we touch production.
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.
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.
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.
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.
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.
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.
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 2-4 weeks from confirmed scope.