AWRA OpsHub Search

A Quantity That Cannot Have a Decimal Point

Every quantity column in our system is a whole number, and there is no unit of measure anywhere in it. For a business that moves cartons that is invisible and correct. For one that buys maize by the tonne, sells it by the fifty-kilo bag and loses some of it to moisture on the way, it is the difference between a stock figure and a guess.

Inventory Insights AWRA OpsHub Team 12 min read

A warehouse in Lusaka holds 412 bags of fertiliser, 18,600 litres of diesel and 6.4 tonnes of maize. Our system can hold two of those three numbers.

It can hold 412. It can hold 18,600 if you decide, once and for all, that the unit is the litre and never the drum. It cannot hold 6.4 of anything, because there is no fractional quantity in the product at all — and it cannot record, anywhere, that the first number is bags, the second is litres and the third is tonnes.

This is not a bug report. It is a description of a design decision that was made implicitly, years ago, by a product built for organisations that count discrete objects: laptops, boxes of gloves, reams of paper, spare parts. For those organisations the design is right, and the absence is genuinely invisible. It stops being invisible the moment your business is weighed rather than counted.

What was actually checked

Two things, both mechanical, both easy for you to ask any vendor to reproduce in front of you.

First: is there a unit of measure? A search across the entire application and every database migration for the obvious names — unit of measure, UOM, pack size, base unit, conversion factor — returns nothing. Not a column, not a dropdown, not a config list. An item has a name, a category, a stock number and prices. The unit lives in the item name, if it lives anywhere, which is why catalogues in this product tend to read Maize (50kg bag).

Second: can a quantity be fractional? Every quantity column in the stock path is declared as an integer — the item's stock figure, the per-location quantity, the transfer quantity, and the check-in and check-out quantities that move them. There is no decimal quantity column anywhere in the schema.

The product is precise about money to three decimal places and coarse about amount to the nearest whole thing. That asymmetry is the finding.

The absence of the unit has been published before, from a different direction: a catalogue is not a text field reaches it while arguing that a coded value is not a free-text field with rules, and uses our missing unit of measure as its worked example. This post is about the other half — the number itself, and the fact that it cannot be fractional.

The contrast is worth sitting with, because it tells you what the system was built to worry about. Money columns were widened to three decimals deliberately. Rates carry two. Somebody thought carefully about rounding on a price. Nobody had to think about rounding on a quantity, because in the world the product grew up in, half a laptop is not a thing.

Why this lands hardest here

Because the Zambian economy that buys software is disproportionately an economy of bulk. Maize and soya through the milling and stockfeed chain. Fertiliser and agro-chemicals inbound. Fuel in and out of tanks. Copper concentrate, cathode, cobalt hydroxide. Cement and aggregate. Timber. In every one of those, the thing you own is a mass or a volume, and the number that matters has a fractional part.

It is also an economy of two units at once. You buy in one and sell in another, and the conversion between them is where the margin lives. That is the part a system with no unit of measure cannot help you with, because it does not know there are two units to convert between.

What you actually hold What the system can hold What is lost
6.4 tonnes of maize 6 — or 128 if you decide the unit is the 50kg bag The fraction, or the ability to talk about tonnes at all
18,600 litres in a 20,000L tank 18,600 litres, or 930 twenty-litre drums Nothing, if you never change your mind about which
A 25kg bag bought by the tonne One number, one meaning The purchase unit, the sales unit, and the ratio between them
A drum that is two-thirds full 0 or 1 Two-thirds of a drum
412 bags of fertiliser 412 Nothing — this is the case the product was built for

The last row is in the table on purpose. Most items in most catalogues look like that one, which is exactly why the gap survives: it is invisible in the majority of a catalogue and decisive in the minority that carries the value.

The four things that actually go wrong, in cost order

  1. Shrinkage becomes unmeasurable, not merely unmeasured

    Grain loses weight to drying. Fuel loses volume to temperature and to evaporation. Both are real, both are small percentages, and both are the difference between a well-run store and a leaking one. A system that rounds to the nearest whole unit cannot see a 0.4% loss on a 6-tonne movement, so the one number that would tell you whether your losses are normal or criminal is below the resolution of the instrument.

  2. The conversion gets done by a person, every time

    Somebody buys 30 tonnes and books in 600 bags. Somebody else sells 12 bags and the tonnage report is produced in a spreadsheet on Friday. The arithmetic is trivial and correct nine times out of ten, which is what makes the tenth expensive — nothing in the system can check it, because the system was never told that a tonne is twenty bags.

  3. Valuation inherits the rounding

    Cost is held per unit and multiplied by quantity. If the quantity has been rounded to make it fit, the value is wrong by the rounding times the unit cost — which on a high-value commodity is not a rounding error, it is money. And it is a quiet error: the balance sheet still balances, it just balances at the wrong number.

  4. Two sites end up using two units for the same item

    This is the one that is hardest to unwind. With no unit field, the unit is a convention, and conventions drift between depots. Lusaka books in bags, Kitwe books in tonnes, and the consolidated stock figure is a sum of two different things that looks perfectly ordinary.

The workaround that actually works

Pick the smallest unit you ever transact in, define every item in it, and put the unit in the item name so nobody can be in any doubt. Kilograms, not tonnes. Litres, not drums. Individual units, not cases. You lose readability on big numbers and you keep every fraction, because a fraction of a tonne is a whole number of kilograms. This is not elegant and it is not what a unit-of-measure engine would do, but it is robust, it is auditable, and it survives staff turnover — which the convention in somebody's head does not.

Two cautions on it. It makes your reorder points and your reports read in unfamiliar magnitudes, so agree the unit before go-live and never change it afterwards; a mid-life unit change is a data migration, not a settings edit. And it does not solve the buy-in-one-unit, sell-in-another problem — nothing in the product does. That conversion stays with your commercial team.

The verdict

If your catalogue is things, this changes nothing about your evaluation and you can stop reading. If your catalogue is mass or volume, treat the unit-of-measure question as a first-round filter rather than a detail — define every item in your smallest transacted unit before go-live if you buy anyway, and never let a second convention start at a second site.

Where we stand on this, precisely

What AWRA OpsHub does today

  • Whole-unit stock tracking per item, per warehouse and per bin location, with movement history behind every number.
  • Batch and expiry tracking, with allocation ordered oldest-expiry-first on every issue path.
  • Weighted-average cost per item, with landed cost apportioned across what actually arrived on each delivery.
  • Money held to three decimal places, and per-line rates to two — the precision is on the value side.

What it does not do

  • Any unit of measure. There is no field, no list and no conversion — the unit lives in the item name or in somebody's head.
  • Fractional quantities. Every stock quantity column in the schema is an integer: the item balance, the per-location balance, transfers, check-ins and check-outs.
  • Buy-in-one-unit, sell-in-another. With no units there is no conversion, so the ratio is applied by a person on every transaction.
  • Weight- or volume-based loss tracking. Drying and evaporation losses are below the resolution of a whole-number quantity.

Not ours, by choice

  • This is correct behaviour for discrete goods, which is most catalogues. We are not describing a defect; we are describing a fit question.
  • The smallest-unit workaround is real and used, and it closes the fractional half of the problem. It does not close the two-units half.
  • Nothing here is specific to Zambia. It applies wherever goods are weighed rather than counted; Zambia is where our own reader is most likely to be holding a tonne.

This is scope, not a ceiling

What is not built for Southern Africa today can still be built for you

Anything described above as not built is a statement about what ships in the standard product today — not a limit on what AWRA OpsHub can do in Southern Africa. Kenya's eTIMS integration and its maintained payroll engine exist because Kenyan clients needed them and commissioned them; neither appeared by itself. The same door is open here. If a revenue authority pipeline, a bank or mobile money feed, a statutory return format, a rule your own operation needs that the standard one does not have, or a link to a system you already run is what stands between you and a decision, tell us and we will scope it as a build — written spec, timeline and price — before you commit to anything.

Tax pipelines and return output

Return output in the shape your revenue authority expects and electronic invoicing against any prescribed interface, with retries, a failure queue and a reconciliation report.

Banks, EFT and card acquirers

Bank statement feeds, EFT and debit-order files and card acquirer settlements pulled into the Payments Register so receipts match invoices without re-keying.

The operational work, which is what most commissions actually are

An extra approval stage in a chain that does not match the standard one, a custom field set on employees or assets that only your sector needs, an expiry that has to block an order rather than send an email, a report your board asks for in a shape nothing produces, or a scanner or weighbridge feeding the goods-in door. These are the commissions we are asked for most often and the smallest ones we quote — and unlike a revenue-authority pipeline, none of them waits on a regulator.

Payroll and statutory returns

Payroll tax and social security schedules produced in the layout your filing body expects, generated from live payroll records rather than rebuilt each month.

Systems you already run

The accounting package, CRM, online store or custom database you intend to keep — connected through our API so a fact is entered once and appears everywhere it is needed.

How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. No roadmap slide, and no pretending in a demo that something exists when it does not.

Tell us what you need integrated

What to ask any vendor, including us

Four questions that separate a real unit engine from a text field

Show me an item held in kilograms and sold in 50kg bags, with the conversion in the system.

A good answer sounds like

They configure a base unit and a sales unit with a ratio, then sell one bag and show 50 leaving stock.

What it actually means

If the demo is a naming convention and a mental calculation, they have what we have. That is not disqualifying — it is just not what you asked.

Book in 6.4 tonnes. Not 6, not 6400.

A good answer sounds like

The field accepts it and the stock figure reads 6.4.

What it actually means

Fractional quantity is a schema property. It is either there or it is not, and no amount of configuration adds it.

What happens to the fraction when I move stock between sites?

A good answer sounds like

The same precision survives the transfer and the receipt.

What it actually means

Some systems hold decimals on the item and round them on movements, which is the worst of both — the balance drifts and nothing reports why.

Can two depots record the same item in different units?

A good answer sounds like

No, because the unit belongs to the item, not to the depot.

What it actually means

If the answer is yes, you have a consolidation problem waiting for its first group report.

Talk to us about a bulk catalogue

If you move grain, fuel, chemicals or concentrate, tell us what your two units are and what the ratio is. We will tell you honestly whether the smallest-unit approach carries your operation or whether you need something we do not have today.

Start the conversation

Frequently asked questions

Can I just enter grams instead of kilograms to get a decimal?

Yes, and it is the recommended workaround — choose the smallest unit you ever transact in and define every item in it. Fractions of a tonne become whole numbers of kilograms. The cost is readability: your reports will show large numbers, and your reorder points have to be set in the same unit.

Does the point-of-sale side have units even if inventory does not?

No. The till sells the same item records as everything else, so it inherits the same whole-number quantities and the same absence of a unit. Price and tax carry decimals; quantity does not.

Is this a limitation you would build past for a specific customer?

Units and fractional quantities touch the stock schema and every movement path, so this is a project rather than a setting. If it is decisive for you, describe the requirement and we will come back with a written scope, timeline and cost before you commit to anything.

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center