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.
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 2-4 weeks from confirmed scope.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
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 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.
| 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 |
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 2Checkout (Verifone) payment integration for ERPNext, giving global digital-goods sellers card acceptance, 45+ local payment methods, multi-currency checkout, and reconciled invoices. ECOSIRE scopes, builds, installs, and supports it on your ERPNext v15/v16 instance.

A build-to-order ERPNext application for anonymous 360-degree reviews — configurable peer, manager, report and self rater groups, weighted competency scoring, and aggregated gap-analysis and heatmap reports. ECOSIRE scopes, builds, installs and supports it on your Frappe/ERPNext v15/v16 instance.

A build-to-order ERPNext app that detects abandoned webshop and POS carts, then runs multi-channel WhatsApp, email, and SMS recovery and win-back sequences with dynamic cart content and coupon injection. ECOSIRE scopes, builds, installs, and supports it for your v15/v16 instance.

A build-to-order ERPNext app for running B2B account-based campaigns: define target-account lists, sequence outreach calls, auto-distribute them to agents, and score account engagement across every contact. ECOSIRE designs, builds, installs and supports it after you confirm scope.
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.