Skip to main content
POS Shift & Cash Management for ERPNext — A build-to-order Frappe app that adds cashier shift open/close, blind drawer counts — 1/1Illustrative preview

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.

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

`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
Links each shift to its `POS Profile`, terminal/POS device, and the assigned cashier for per-terminal and per-cashier reporting
`doc_events` wired in `hooks.py` for `validate`/`on_submit` so all reconciliation logic is enforced server-side and can't be bypassed from the browser
Whitelisted methods (`@frappe.whitelist()`) exposing shift open/close and cash-movement actions to the POS UI and the Frappe REST API
Dedicated Role Profiles (Cashier, Shift Supervisor, Finance) with field-level `permlevel` locks on floats and variance approval
Scheduler event to auto-flag shifts left open past a configured cutoff and notify a supervisor
Cash carry-forward: closing counted cash can seed the next shift's opening float, with an explicit banking/drop deduction
Over/short and cash-movement report views (Query/Report) filterable by cashier, terminal, date range, and variance status
Optional GL/Journal Entry hook to post confirmed over/short and cash drops to a configured account, respecting ERPNext accounting dimensions
Built and tested against Frappe/ERPNext v15 and v16, packaged as a standard installable Frappe app on your bench

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your ERPNext.

  3. 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

CriterionECOSIRECustom BuildCompetitorERPNext Native
Blind cash countExpected cash hidden via client script + `permlevel` until count submittedPossible but must be designed and built from scratchRarely enforced; usually shows expected totalNo — POS Closing Entry pre-fills expected cash
Denomination-wise float`Cash Denomination` child table on open and close, server-rolledBuildable if specified up frontSometimes a flat float field, no per-note breakdownNo structured denomination capture
Paid-in / paid-out logging`Cash Movement` DocType with reason, category, user, kept out of salesDepends on developer scopeBasic or absentNo mid-shift cash-movement log
Over/short handlingServer-side compute + tolerance threshold + supervisor approvalWhatever you commissionSimple diff, no approval workflowDifference shown, no enforcement or trail
Roles & permissionsCashier / Supervisor / Finance Role Profiles with `permlevel` locksMust be defined and tested by youGeneric POS rolesStandard POS user roles only
Fit to your workflowScoped to your terminals, shifts, tolerances, and approval chainFully bespoke but you carry all risk and costOne-size-fits-all, limited configurationCore defaults, not built for cash accountability
Support & handoverGit repo, docs, training, post-go-live support windowOnly if separately contractedVendor forum or paid ticketsCommunity forum only
Version compatibilityBuilt and tested for your Frappe/ERPNext v15 or v16You own upgrade maintenanceMay lag ERPNext releasesShips 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.

Request a quote

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

Request a Quotation

Tell us about your POS Shift & Cash Management requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.