Reads come from the local database
Not from the network with a cache as a fallback. The counter is instant whether the line is up or not.
How it works
This page is the design rather than the feature list. If the first section makes sense, the rest of the product follows from it.
The ledger
A balance is the sum of the entries that produced it. There is no editable quantity column anywhere, which is why a difference at a stock take can be taken apart instead of absorbed.
One append-only entry per movement, stamped with the weight, the purity and the document that caused it.
balance = Σ entries
Not a stored figure kept in step by hand. There is nothing to drift.
The weights
Gross as it sits on the scale. Stone for diamonds and stones, converted to grams. Other for thread, lac, wax and enamel. Net for the metal alone. Fine for the pure metal content. All five on the item, on every movement and on every document line.
Gross must be at least net plus stone plus other, to a milligram of tolerance for scale rounding. That is a database check constraint, so it holds at every door — the form, the bulk import, the API and the offline sync. A larger difference is a real discrepancy and has to be entered as a weight adjustment, which leaves a document behind rather than a silently corrected row.
Fine weight is net weight times the purity fraction, computed in one place and stamped on the document. Nothing recomputes it later and prints a different answer.
Every piece, five weights
Net = Gross − Stone − Other
Fine = Net × purity
A gross weight below net plus stone plus other is refused at every door — the form, the import, the API and the offline sync. One constraint, not four validations that can disagree.
In practice
Five steps, in the order a shop actually does them.
Your firm, your branches and warehouses, your staff and what each of them may do. Metals and the purities you deal in, with the karat whose rate you publish. The setup checklist ends at the point where the shop can actually trade — not at a percentage.
One rate per metal and purity, entered once. Everything priced anywhere reads it from there, and what a document stamps is what it reprints.
Opening stock, or a goods receipt against a purchase order. Either way it posts a movement into the ledger with the five weights and the purity on it, and the balance follows.
Estimates and bills at the counter, old gold taken in against a sale, transfers between branches, metal out to a karigar and finished goods back. Every one of them a document, every one of them an entry.
Day close settles cash and metal so a period has an edge on it. The registers, the ledgers and the analytics all read the same documents, so they cannot disagree.
Offline
Offline-first, not offline-tolerant — the distinction is the whole design.
Not from the network with a cache as a fallback. The counter is instant whether the line is up or not.
The network is a background detail. The only visible difference offline is a badge and a queue count.
Prices are computed by the same compiled packages the server uses, so the figures are identical by construction.
Start on the free trial, or book a walkthrough and we will set the first branch up with you.