2 min read
Vending ERP
Billing and operations ERP for a pan-India B2B vending operator.
The operations core of an ERP for a pan-India B2B vending operator. Coffee and tea machines sit at client sites, and the system tracks their stock, checks what was used, and builds each month's invoice for review.
- Web
- Mobile backend
- Python
- Frappe
- ERPNext
- MariaDB
- Redis
- 12
- modules, from contracts to dashboards
- 446
- business rules documented and checked against the code
- 4
- billing models: cup, litre, kg, flat package
What it does
One contract per site
Machines, prices, recipes and commitments live in one contract, which locks once it is active.
Four ways to bill
Per cup, per litre, per kg delivered or a flat package, with machine rental and minimum-order rules on top.
Stock you can trace
Stock is followed from head office, through transit, to the site, with a delivery challan at each step.
Counts checked against recipes
Physical counts and meter readings are compared with what the recipes say should have been used. Interchangeable ingredients are treated as one pool.
Invoices built for you
Each month's draft invoice comes from approved readings or deliveries. An accountant reviews it line by line before it is submitted.
Machines through their life
Dispatch, delivery, install, maintenance and return are tracked per machine, with undo and safety checks.
Separate who counts, approves and invoices
Roles keep those jobs apart, and profitability is visible to management only.
Dashboards that say what to do
Operations sees stock cover per site and machines in transit. Accounts sees what is ready to bill this month.
Safe bulk imports
Import tools preview first. They run the real checks, roll back, and isolate errors per row.
Under the hood, briefly
- The server decides. Rules are enforced on the server, not only in the form. Ambiguous data is refused rather than guessed, and stock changes only through one audited path.
- Every invoice is a draft first. The system proposes, including charges for excess consumption, and a person accepts or skips each line.
- Built for changing requirements. About 390 dated changes in roughly six months, so each rule is traced to the change that introduced it, and a rule catalogue is verified against the code.
- Six cooperating apps. Operations, CRM, mobile backend, push notifications, WhatsApp and invoice customisation sit on top of Frappe and ERPNext.
More of the design
- Machines through a ~12-state lifecycle, from dispatched to installed, flagged for maintenance, ready for pickup and returned. Spare parts are stock consumed through maintenance readings on the machine.
- Stock-out projection. Daily burn from the contracted quantity, the last count and the last dispatch tells operations “by now this should be over”, before the site runs dry.
- A CRM that can’t lose a lead. Hooks enforce that an activity is never just closed: a contact is closed with a reason or converted to a lead, and a lead is converted or lost. A “call back in a year” follow-up resurfaces on its own date.
- Field sales on mobile. A Flutter app, built by the team’s mobile developer, lets the sales team create contacts, leads and activities from the field.
Next project
Networking Platform →