Skip to content

Which markets does this system serve?

Colombia, Mexico, Peru, Chile and Brazil. They differ in regulator, altitude, seasonality and currency — and each of those changes the answer to the same question: which day should this flock be processed?

How big are these five markets?#

Together they account for most of Latin American broiler production. The figures below are the latest published by each country's industry association, consulted on 22 September 2026.

CountryBroiler meat, 2025Consumption per capitaSource
Brazil15.32 Mt46.7 kgABPA
Mexico3.9 Mt35.67 kgUNA
Colombia2.0 Mt37.8 kgFENAVI
Peru—~55 kgMIDAGRI
Chile0.675 Mt (all poultry)33.9 kg (2024)ChileCarne / ODEPA

Two numbers in that table deserve attention. Brazil exported 5.324 Mt in 2025 for US$ 9.8 bn, closing the year as the world's largest broiler exporter for the second year running. And Peru consumes more chicken per person than any other country in the region — around 81 kg per year in Lima alone.

Why does one decision engine need to handle all five?#

Because the question is the same and the constraints are not.

Every one of these markets asks the same thing every day: which day should this flock be processed? What differs is what rules the answer out.

VariableWhy it changes the answer
RegulatorICA, SENASICA, SENASA, SAG and MAPA each register products and set withdrawal periods
Altitudeproducing zones range from sea level to above 2,500 m, changing expected intake
SeasonalityChile's thermal amplitude is the widest; Mexico's summer heat stress is the sharpest
Channelplant quota, live-bird market, rotisserie calibre or export window
CurrencyCOP, MXN, PEN, CLP and BRL, each with its own feed and sale price series

A system that hard-codes one country's assumptions produces confident recommendations that are wrong everywhere else. The alternative is not five products: it is one engine where the constraints are declared rather than assumed.

What is a withdrawal period, and why is it a hard constraint?#

A withdrawal period is the time that must elapse between the last administration of a veterinary medicine and the moment the bird may be used for human consumption. Every regulator in the region sets one for each authorised product.

In a processing-day decision it is not a warning, it is a veto. A day inside the period is not an expensive day: it is a forbidden one, and no objective weight — kilos, margin, plant quota — may buy it.

There is one calculation trap that repeats across all five markets and costs real money: the period runs from the last dose, not from the first day of treatment. A five-day course with a five-day withdrawal does not clear the flock on day 5; it clears it on day 10. Counting from the start brings the processing date forward and leaves residues above the limit in birds that have already left the shed.

What does the system decide, and what does it not?#

Stated plainly, because a technical buyer checks this first:

It does:

  • Recommend a catch day for every live flock, with a weight band.
  • State whether that day comes from an actual weighing or from a projection — never presenting a projection as a measurement.
  • Report the policy as infeasible when no date satisfies what management declared, instead of relaxing the least important constraint to produce an answer.
  • Flag when a withdrawal period vetoes a range of dates, or when projected stocking density exceeds the welfare maximum before the planned date.
  • Work with no signal inside the shed, and sync when coverage returns.

It does not:

  • Optimise a whole complex's processing plan under plant quota, transport capacity and catching crews. That is a constrained optimisation problem which is specified and unbuilt.
  • Decide unsupervised. It recommends; management sets how much it delegates.
  • Issue sanitary certificates or sign documents before any authority.

Why declare the policy instead of configuring thresholds?#

Because the order in which rules apply is what makes a decision defensible.

Hard constraints filter the set of possible days. Trade-off rules decide who wins among what survives. Weights choose within what is already permitted. If weights entered the same sum as constraints, a high weight on "kilos" could buy the violation of a plant quota — which is exactly what nobody wants and exactly what a weighted-score system does by construction.

A consequence worth naming: a hard constraint has no tolerance field. The moment it had one, it would stop being hard.

Where do you start?#

With the data, not the model. Three conditions, in order:

  1. The daily record must distinguish partial removal from mortality. Without it, mortality is wrong for every flock with a staggered harvest, and so is every efficiency index built on it.
  2. Capture must work offline. There is no coverage inside a shed, and a form that requires a connection gets filled in from memory on the way out — the fastest way to contaminate six months of history.
  3. Sale price must be loaded, or the system must say it cannot compute margin. Both are acceptable. Inventing a plausible price is not: it produces a simulation that looks fine and recommends processing flocks early for reasons that do not exist.

Why does offline capture change the data, not just the convenience?#

Because there is no coverage inside a shed, and that is the normal working condition of the person recording — not the exception.

A form that requires a connection does not stop being filled in. It starts being filled in from memory, on the way out, once there is signal. The record still arrives, the screen still goes green and nobody notices anything. What changed is the quality: weights remembered rather than read, approximate times, rounded mortality.

Six months later that history is what any projection gets calibrated against. The consequence is not a bad forecast: it is a forecast that looks good because it is comparing two equally biased figures.

RequirementWhy it matters
Always write locally firstthe row appears immediately, with no wait for the network
Durable upload queueclosing the app does not lose what has not yet been sent
Idempotent uploadresending does not duplicate the record
Two separate timestampswhen it was captured, and when the server received it

That last one is the most often forgotten and the most explanatory. A record captured at 06:12 and received at 19:40 is not an error: it is a full day of work with no signal, and the system needs to know that in order to judge the data — and in order not to accuse the shed keeper of recording late.

What does a reliability score on each record buy you?#

It buys the ability to say "I do not trust this week" before the number reaches a decision.

Every incoming record can be checked against context that is already available: is the weight falling with no thinning to explain it? Is it byte-identical to yesterday's? Does feed intake match the age and the population? Was it captured outside the shed's working hours? Each of those is a flag, and flags add up to a score.

Two design choices matter more than the rules themselves:

  • A flagged record is never rejected. Rejecting field data teaches the operator to lie to the form until it accepts the entry, and a form that accepts everything after three attempts records fiction. The record goes in, scored.
  • Corroboration lowers the weight of a flag. If another measurement in the same record explains the anomaly — 38 °C explaining the mortality, a thinning explaining the drop in average weight — the flag is still raised, but it counts for less. Without this, every genuine event looks like a data problem.

The score then feeds the decision: a projection built on doubtful input has to carry a wider band than one built on clean input. A system that treats both the same is lying twice — once about the data and once about the confidence.

What do you benchmark a flock against, and what is an improvement worth?#

Against two different references, and conflating them is the first mistake.

The first is the published performance objective of the genetics in that house, in the relevant edition. A 2014 Ross 308 weighs 2,809 g at day 42 and the 2022 edition 2,998 — nearly 190 grams per bird. Measuring a farm group against the wrong edition injects a permanent bias that is not theirs.

The second is the company's own declared target, which is not the same thing as a national average. A sector benchmark tells you where you sit against everyone else; it does not tell you whether a flock did what it was supposed to.

What is at stake, in figures you can check by hand

A flock of 20,000 birds caught at 2.5 kg produces 50,000 live kilos. Across a farm group of 12 houses running 5.5 cycles a year — 66 flocks:

If you improve…Per flockPer year, across the group
Feed conversion, 1.75 → 1.702,500 kg less feed165,000 kg less feed
Feed conversion, by 0.01500 kg less feed33,000 kg less feed
Mortality, by one point200 more birds reaching catch13,200 more birds

Deliberately in kilos and birds rather than money: feed price depends on each operation's grain contract, and a regional average here would be a number invented to make the table look more concrete. Multiply by yours.

What does not depend on the contract is how much that line weighs. FAO puts feed at 70% to 75% of total production cost in commercial broilers — which is why a hundredth of a point of conversion outweighs almost any saving you can negotiate across the rest of the budget.

And why traceability belongs in this same calculation

For anyone selling into the European market, Article 18 of Regulation (EC) No 178/2002 requires traceability to "be established at all stages of production, processing and distribution", with every operator able to identify their immediate supplier and immediate customer.

A per-station record does not meet that. One running from the breeder house to dispatch does — and it is the same record that makes the table above measurable in the first place.

What is genuinely different about each of these five markets?#

Nothing in this page is a regional average, because a regional average would describe none of them. The five markets differ in what actually constrains the decision:

MarketWhat constrains the decision there
ColombiaPrice volatility. The only market where the trade body publishes feed, live-bird and carcass series, so the day that maximises kilos and the day that maximises money can be seen to diverge.
MexicoScale and variance. At roughly 39.3 million birds a week nationally, what separates operations is not the best flock: it is the spread between flocks, which an averages dashboard hides.
PeruChannel calibre. The highest per-capita consumption in the region, split across channels that pay for different things. Uniformity is a money indicator, not a quality one.
ChileSeasonality and export. The widest seasonal temperature range of the five, plus a buyer's traceability standard that is not the national one.
BrazilIntegration. The grower does not decide the catch day but decides everything leading to it, and receives a settlement they cannot check.

That is why each of these markets has its own page rather than a shared one with the place name swapped: the arithmetic is the same everywhere, but what binds it is not.

What would it take to be wrong about all of this?#

A fair question, and the honest answer is that two things would do it.

The first is data that nobody sustains. Everything above assumes a daily record taken with some discipline. Where that does not happen, no engine helps, and it is better to say so before starting than to discover it in month four.

The second is an operation small enough that one person genuinely holds it. A grower with two houses and one buyer does not need a policy engine; they need a spreadsheet and a good memory, and both work. The point where this stops being true is not a decision — it arrives by accumulation, usually somewhere past the point where no single person can walk every house every day.