Barcode scanners, 1D and 2D
Most scanners emulate a keyboard, so most simply work. Buy a 2D imager even where 1D would do: packaging QR and payment QR are both 2D, and GS1 element strings carry batch and expiry.
Scanners, printers, drawers, terminals, tax rails, suppliers and your books. Hardware here is declared in a definition rather than waiting for a driver, which is why an unlisted device is not a support ticket.
Four models exist for driving retail hardware: an approved list, an approved host, a driver per device, or a declaration. We chose the declaration, and the rule that makes it work is that an unknown element is skipped rather than thrown.
Most scanners emulate a keyboard, so most simply work. Buy a 2D imager even where 1D would do: packaging QR and payment QR are both 2D, and GS1 element strings carry batch and expiry.
The de facto command set, implemented in genuinely different subsets by different makes. Receipts come from a definition, so changing the footer is not a release.
Not a device: the drawer opens on a command sent to the printer over its kick port. Worth knowing before you buy, because small portable printers usually have no port.
Your payment processor should be a choice you can change without changing your point of sale. Card settles onto the same ledger as cash and as UPI.
The till runs on Android-first hardware with the print layer built once against ESC/POS, so the same build drives a counter terminal and a handheld.
A phone is a valid till. Shelf counting, receiving, and a second checkout lane during a rush all run on hardware the shop already has in a pocket.
Payment rails, tax rules, and the accounts are three faces of one transaction. Keeping them on one core is why the day-close explains itself instead of needing a reconciliation.
Every tender settles onto the same ledger. UPI carries no merchant discount rate, which is exactly why we do not take a percentage of your sales.
Tax and receipt rules differ by market and are configuration, not a rebuild. Each receipt is sealed into a hash-chained fiscal record for the locale it was raised in.
Sale and cost of goods post as journal entries at the moment they happen, which is why the margin number and the books cannot drift apart.
Trade customers, account sales, and credit notes are the same document family as the receipt, on the same ledger, so nothing settles in a spreadsheet.
One order per supplier goes out and comes back matched to the invoice, with the discrepancy flagged rather than absorbed quietly into your margin.
One count, decremented by the till and incremented by the delivery, with reorder driven by real movement rather than a reorder point somebody set in 2019.
Receiving, put-away, and transfers between locations are real movements on the same stock record, so the branch that is short can see who is long.
Delivery rounds and dispatch runs are planned against the orders that promised them, so what was committed online is what the van is loaded for.
A standard outlives a connector. Where an obligation has a date, the date matters more than the feature, so these are named with what is shipped and what is still being built.
EAN and UPC at the shelf edge, GS1 element strings for batch and expiry, and DataMatrix for the 2D transition retail scanners are being asked to complete by the end of 2027.
On the roadmap and on a clock. India requires invoices to reach the portal inside a fixed window above a turnover threshold, and the European model builds on EN 16931 with a UBL serialisation over an access point. One invoice model, two mappings.
Today: a label-printing scale that emits a weight-embedded barcode, which the till reads and prices with no serial link at all. A live serial link and price-lookup upload are on the roadmap.
On the roadmap, and built as one rail rather than one integration each: order ingest, status callbacks, and a reconciled payout report, reusable across open commerce networks and aggregators.
Prices, formats, tax treatment, and language follow the market a store is in, on one codebase. Opening a new market is configuration, not a fork.
The till keeps selling through an outage and reconciles itself when the network returns. The device layer has no domain imports, so printing does not depend on a server being reachable.
Both storefronts read this catalog, pricing, and stock. Not synced to it: the same row the till decrements and the ledger posts against.
Catalog, stock, orders, and the ledger are reachable over a documented HTTP API, with published events so another system can react to a sale rather than poll for it.
Sales, cost of goods, and expenses export in a form your accountant can take straight into their own books, from the ledger that raised them.
Catalog, suppliers, customers, sales, and books export at any time. There is no lock-in, no exit fee, and nothing here depends on you being unable to leave.
Send us your scanner, your printer, your terminal, and your accountant's format. We will tell you what works out of the box, what needs a definition writing, and what is honestly on the roadmap.
Your data stays yours. Catalog, suppliers, sales, and books are exportable at any time.
The full picture, one page at a time.
The store types and the jobs grossDule was built around, from one till to many.
Simple and honest. One price per location, unlimited tills and staff, and nothing taken from your sales.