Aquaculture inventory accuracy: why counts drift
Counts drift for four specific reasons between stocking and harvest. What each one does to the number, and what a record has to do to stay honest.
7 min read
Every farm knows its biomass figure is modelled. Between samplings, average weight comes off a growth curve, and nobody treats it as measurement.
The count is treated differently. It is stocked, it is written down, and from then on it is handled as a known quantity that events subtract from. It is not known. It drifts, quietly, for four specific reasons, and the harvest is where the drift gets settled all at once.
Where the count goes wrong
The count is carried forward from stocking and adjusted by events. Each adjustment is a chance for the record and the pond to separate, and the four that matter are mortality, sampling, grading and co-mingling.
What makes them dangerous is not that they are hard. It is that none of them announces itself. A pond with a count that is nine percent high looks exactly like a pond with a correct count. Feed is calculated off it, projections run off it, and a sale is planned against it, so a small error early in a cycle compounds into a large one by the end without ever surfacing as a problem to investigate.
The four below are worth understanding separately, because the fix for each one is different.
Mortality entered late, or in a round number
Mortality is the most under-recorded event on a farm, and the reason is practical rather than careless. Removing dead animals is done during other work, by whoever is there, and the count is an estimate made with wet hands.
Two habits do most of the damage. Entering a week’s losses on Friday against Friday’s date puts the biomass wrong for four days of feed calculation, not just the count. And rounding, which sounds harmless, is directional: nobody rounds mortality up. Fifty becomes “about fifty”, and about fifty becomes forty when it is written down.
The structural fix is to make the entry cheap enough to do on the day and precise enough to be worth doing. The record should accept a loss against the unit it happened in, on the date it happened, without requiring anyone to work out which batch it belongs to first when the answer is obvious.
A sample extrapolated to a whole unit
Sampling is where a measured number becomes an assumed one. A net comes up, animals are counted and weighed, and the result is applied to a population thousands of times larger.
For average weight this is understood and accepted. For count it is more slippery, because a sample that revises the average weight also revises the implied biomass, and a biomass revision that is not matched by a count revision changes the relationship between the two with nothing in the record to flag it. The record now says the same number of animals weighs more than it did, which may be true, or may mean there are fewer of them than recorded and they are the size you measured.
This is the same problem the feed record runs into from the other side. There it distorts feed conversion. Here it distorts the count, and it does so invisibly, because both readings are internally consistent.
A grading day that balanced itself
Grading is the highest-risk event in the record. Tens of thousands of animals move through a machine in a few hours, pulled from several units, and placed into different ones by size class. Everything moves at once.
The property that decides whether the count survives is what happens when the totals do not match. A system that adjusts one side to fit the other has absorbed the discrepancy into your inventory. It is now invisible, and it will surface a month later when a pond does not hold what it says it holds.
The correct behaviour is refusal. In AquaOS a sorting session holds the fish while they are in the machine, and what came out has to account for what went in before the session is allowed to close. If it does not, the session says so and names the gap rather than balancing itself. See sorting and grading for how a session is structured.
There is a companion to this that matters just as much. Sometimes the pond is right and the record is wrong: the amount pulled is less than the system’s count, and the tank is genuinely empty. The operator has to be able to say so, explicitly, and have the system treat the physical tank as the truth. That is a correction with a person’s name on it, which is exactly what it should be.
A unit holding two batches and no rule for whose fish died
Co-mingling is the cause nobody writes about, and it is the one that produces the strangest numbers.
Once a unit holds more than one batch, every event against that unit has an attribution question attached. A hundred dead animals in a tank holding two cohorts is not one fact, it is a fact plus a decision about which cohort lost them. Systems that model a unit as holding exactly one population have nowhere to put that decision, so the loss lands against whichever batch the interface happened to have selected, or against the unit with no batch attribution at all.
Either way, one batch’s survival rate is now flattering and another’s is punished, and the error is permanent because nothing downstream can distinguish it. In AquaOS a mortality event that spans several tanks is apportioned across them in proportion to biomass, and where a tank holds more than one batch, the entry names the batch the loss belongs to. Each allocation also stores the average weight at the time of the event, so a sampling three weeks later does not retroactively change what that event implied.
What a system has to do to keep the count honest
Four properties, one for each failure above.
It refuses to self-balance. Any operation where what came out should equal what went in either reconciles or stops. Silent adjustment is the single most expensive default in production software.
It attributes, rather than aggregating. A loss belongs to a batch in a unit on a date. A system that records it one level up has thrown away the only information that would have made it correctable.
It says which numbers are measured. A stock position for a past date is not the same kind of object as a live one, and a report that presents both with identical confidence is training its readers to distrust both. In reporting, a past date is reconstructed from what was saved that day and the report states that it is.
It makes corrections visible. A revision that reaches backwards through the record and changes figures other people already acted on should arrive with a warning describing the effect, not land overnight with no notice at all.
The harvest is the audit you cannot argue with
Every other check on a count is negotiable. Sampling can be redone, a projection can be re-run, and a disagreement between two figures can be left open. The harvest closes it: the animals come out, they are counted or weighed, and whatever the record said before is now either confirmed or corrected in public.
Most farms discover the accumulated drift there, at the worst possible moment, in front of a buyer with a contracted quantity. The alternative is not a more accurate count, because no count is exact. It is a count that corrects continuously, so the gap surfaces in week six rather than at the truck.
If you want to know how yours behaves, the fastest test is the one that breaks the most systems. Ask for a three-way split with a residual left in the source unit, then check the count and biomass on all four resulting positions. See production tracking for the model underneath, the buyer guide for the rest of the questions worth asking, or bring a real cycle of your own to a demo.