Milking
Milking is the farm’s daily activity: who gave how much milk in which shift, and where it went. The screen is one grid per day — cows down the side, shifts across the top — and every box saves its liters on its own as you type. Behind each column there is still a session per shift: closing it pools the milk by destination, the interface cheese production consumes downstream. A cow under milk withdrawal is still milked and recorded, but her liters never reach the tank. Under the grid sit the day’s quality tests: somatic cells, fat and protein — the numbers that say what that milk is worth.
Terms
- Milking session
- The container for one shift’s milking: one per farm, date and shift. It opens empty and collects one entry per cow as they are milked. It starts "open" and, once every cow is recorded, is closed — closing is what turns the entries into milk pools by destination. A session cannot be dated in the future.Where it appears: Dashboard → Milking
- Shift
- Which milking of the day a session belongs to: morning, afternoon, evening or night. The farm’s "milkings per day" setting drives which shifts are offered by default — one milking a day offers only morning, two add afternoon, and so on. A farm that occasionally milks outside its usual count can still open a session in any of the four shifts through the "other shifts" option; the configured count is a default, not a hard limit.Where it appears: Dashboard → Milking
- Entry
- One cow’s liters within a session: the animal and the quantity given. Only lactating cows present on the farm that day can receive one, and there is at most one entry per cow per session — recording a new amount for the same cow replaces the previous one rather than adding a second row. Milk withdrawal never blocks an entry: an animal under withdrawal is milked and recorded like any other, only her destination changes when the session closes.Where it appears: Dashboard → Milking
- Not milked
- Records that a cow was deliberately not milked in that shift — drying off, low yield, a treatment — with an optional free-text reason. It is not a zero-litre entry: it adds nothing to production, stays out of the cow’s averages, and never triggers the production-drop alert, which exists to warn about mastitis rather than about a planned dry-off. Marking her also pre-ticks the skip box on her suggested feed, since a cow that did not come through the parlour did not get her ration there either; untick it if she was fed anyway. Recording litres for her afterwards undoes the mark, and removing the mark makes her available again.Where it appears: Dashboard → Milking
- Milk pool
- The result of closing a session: the entries’ liters grouped into one row per destination — cheese, direct sale, self-consumption, calves, mixed, or discarded for withdrawal. With no explicit split, the sellable liters go into a single pool at the farm’s default milk destination; splitting divides them across several destinations instead, and the split must add up to the sellable total. Pools are where cheesemaking draws its milk (cheese destination) and where Sales sells from (direct-sale destination): a direct-sale pool’s card shows how many liters were sold and how many are left.Where it appears: Dashboard → Milking → Close session
- Withheld milk goes to discard
- Whether an entry’s milk is withheld is worked out only when the session is closed (or viewed), by comparing the cow’s milk withdrawal period against the session’s date — it is never decided or stored at the moment the entry is recorded, because the withdrawal window can still change afterwards. Any withheld liters always form their own pool, discarded for withdrawal, no matter what split is chosen for the rest: there is no destination that can route withheld milk anywhere else.Where it appears: Dashboard → Milking
- Close and reopen
- Closing a session needs at least one entry; it creates the milk pools and locks the entries against further changes. Reopening undoes that: it deletes the pools the close created and returns the session to open, so entries can be corrected and the session closed again — the same replay-the-mistake philosophy used elsewhere in Mi Finca, nothing about a wrong close is unrecoverable. Reopening is not possible once a cheese batch used milk from that milking or a sale sold milk from it: that batch or that sale has to be corrected or deleted first.Where it appears: Dashboard → Milking
- Day grid
- The milking screen is one worksheet per day: a row per cow, a column per shift, and a box for the liters where the two cross. You pick the date and the whole day is in front of you — nothing to choose beforehand, nothing to open. The rows are the cows that can be milked that day (lactating, present on the farm, not frozen); the columns are the shifts the farm milks, plus any shift that already has milk recorded that day, plus any column you add by hand. At the bottom the day’s total and, separately, how many of those liters are withheld.Where it appears: Dashboard → Milking
See full explanation
A cow that stops belonging in the list after her milk was already recorded — she dried off, she left the farm — keeps her row for that day anyway. Her liters were given and are still counted in the totals; hiding the row would make them vanish from the screen while they keep adding up underneath.
- Capturing with the keyboard
- The grid is built to be filled without touching the mouse: type the liters, press Enter, type the next cow. Thirty cows in one shift should take a few minutes and one hand — the other one is usually busy.Where it appears: Dashboard → Milking
See full explanation
Key What it does Enter Saves the box and jumps to the next cow in the same shift Tab Crosses to the next shift column Arrow up / down Moves between cows without changing the number Clicking away Saves too — leaving a box never loses what you typed - Autosave
- There is no save button. Each box saves itself when you press Enter or leave it, and says where it stands: saving, saved with a check, or the reason it was refused in plain words — retype the number and it tries again. Clearing a box is not a delete: an empty box simply has nothing to say about that cow and that shift.Where it appears: Dashboard → Milking
- Sessions the grid opens for you
- You no longer open a milking session by hand. The first liters typed into a column that has no session yet create that shift’s session and then record the entry — including a column you added for a shift the farm does not normally milk. The session is still there underneath, with the same close and reopen it always had; you just stop having to think about it before you can write a number.Where it appears: Dashboard → Milking
- Closed column
- Each column header carries its shift’s state — no session yet, open, or closed — its total, and the action that goes with it: Close while it is open, Reopen once it is closed. A closed column is read-only: the boxes stop taking liters, because that milk is already pooled by destination. Correcting it is the same as always — reopen from the header, fix the numbers, close again.Where it appears: Dashboard → Milking
- Recording the milking total
- For farms that measure the tank or the buckets and do not weigh each cow. In the shift card, turn on "Record the milking total", enter the liters and the cows milked (prefilled with the cows that can be milked), save, and close the shift as usual. A farm can use it for some milkings and weigh cow by cow in others — milk recording, say — each milking has its own mode.Where it appears: Dashboard → Milking
See full explanation
If a cow is under milk withholding that day, the app lists her and asks for the discarded liters; a cow you marked "Not milked" in that milking does not count, since she gave no milk to discard. Zero is a valid answer; leaving it empty is not, because an empty box would read as "nothing to discard". That milk goes to the discard pool and never reaches the tank, the cheese or a sale. A withholding registered after the total was saved is checked again when closing, and the app then asks for the discarded liters.
- Included: herd production, the home tile, tank reconciliation and feed efficiency count the totals.
- Cow by cow only: the cow ranking, a cow’s detail, profitability per cow and her nutrition summary count only the milkings recorded cow by cow. The ranking (on the home screen and in the reports) and a cow’s milk detail say on screen how many liters they cannot split.
- Drop alerts ignore the days with a milking recorded as a total, since there is nothing to compare for each cow.
- Per-liter rations use the milking’s average per cow.
Limits: a milking that already has cows recorded must have them deleted before you switch it to a total, and going back to cow by cow deletes the total after asking for confirmation.
- Quality test
- A measurement of the milk on a given day: somatic cells, fat, protein. You write down whichever numbers you have — one is enough, all three if the laboratory sent them — plus which milk was measured and who measured it. It sits beside the day’s milking without touching it: recording quality never changes liters, destinations or pools. A test recorded by mistake is annulled, and the record stays in the audit trail.Where it appears: Dashboard → Milking → Milk quality
- Somatic cell count (SCC)
- How many somatic cells there are in a milliliter of milk, written in thousands — 250 means 250,000 cells per ml. It is the udder-health number: cells climb when a quarter is inflamed, so a count that keeps rising on one cow is mastitis showing up long before anything can be seen in the milk, and the tank figure says how the whole herd is doing.Where it appears: Dashboard → Milking → Milk quality
- Fat and protein
- The two solids, each written as a percentage of the milk. They are what becomes cheese: the same liters with more fat and protein give more kilos in the vat, which is why they belong next to the liters and not in a drawer. They move with the feed, the stage of lactation and the season.Where it appears: Dashboard → Milking → Milk quality
- What the test measures
- Every test says which milk the sample came from. There are three answers, and they are not interchangeable: a tank figure describes the herd, a cow figure describes that cow.Where it appears: Dashboard → Milking → Milk quality
See full explanation
Scope Which milk it describes Tank (whole day) Everything the farm milked that day — the default A milking shift Only that shift’s milk, one column of the grid A cow One animal’s milk, wherever the sample was taken The last two can be combined: a cow sampled at a specific milking is a legitimate test with both a shift and an animal. And a cow does not need to be milking to have a result — a dry cow can still carry a laboratory report. If a test was filed against the wrong scope, edit it: the scope is changed like any other field, including back to the tank.
- Farm or lab
- Where the number came from: the farm’s own meter or paddle test, or a laboratory. Choosing lab lets you write down which laboratory, so months later a result can be traced back to the report it came in. A farm reading carries no lab name — if you have one to write, the source is a lab.Where it appears: Dashboard → Milking → Milk quality
- Report period
- The reports page works on one period: a start day, an end day, and how the days are grouped — by day, by week or by month. It opens on the last 30 days grouped by day, and every block on the page — alerts, herd production, the ranking, the tank reconciliation — reads from that same period, so widening it re-runs the whole page instead of one panel at a time.Where it appears: Dashboard → Milking → Reports
- Herd production
- A bar chart of the whole herd’s liters over the period, one bar per day, week or month depending on how it’s grouped. Each bar also breaks down where that milk went — cheese, direct sale, self-consumption, calves, discarded for withholding — for the days already closed; a day still open shows its liters with no breakdown yet, because nobody has decided where that milk goes. A day nobody milked shows as an empty bar, not a gap, so a quiet Sunday reads as quiet, not as missing data.Where it appears: Dashboard → Milking → Reports
- Top producers
- A ranking of the herd’s best-producing cows for the period: total liters, her daily average, and how many milkings were recorded for her — ordered by total liters, highest first. The daily average divides by the days she actually has entries for, never by the whole length of the period, so a cow that joined partway through does not look like a low producer just because she was there for fewer days. Tapping a row opens that cow’s detail.Where it appears: Dashboard → Milking → Reports
- A cow’s detail
- Opened by selecting a cow from the alerts or from the ranking: her liters over the period, one point per milking, next to her quality tests for the same days. Seeing both together is the point — a drop in liters next to a rising somatic cell count tells a different story than the same drop on its own.Where it appears: Dashboard → Milking → Reports
- Tank measurement
- How much milk the tank actually holds, weighed by the farm and written down — the figure the day’s milkings get checked against. A reading covers either the whole day or a single milking, and there can be only one active reading per scope per day: weighing the tank twice for the same day (or the same milking) corrects the earlier number, it doesn’t add a second one. Readings are registered, corrected and annulled from the reconciliation table, never guessed from the milkings themselves.Where it appears: Dashboard → Milking → Reports → Reconciliation
- Tank reconciliation
- One row per day, comparing what the tank was weighed at against what the day’s milkings add up to. It exists to catch what a milking log alone can’t: a leak, a spill, a capture mistake, or a milking that never got written down.Where it appears: Dashboard → Milking → Reports → Reconciliation
See full explanation
State What it means Tank agrees The tank and the milkings match within a small margin — the ordinary slop of weighing, nothing to chase. Milk missing The tank holds less than the milkings say: a leak, a spill, or milk that was recorded but never reached the tank. Extra milk The tank holds more than the milkings say: a milking that happened but was never written down. Tank not weighed Nobody weighed the tank that day. Shown as unknown, never as a difference of zero — a day nobody weighed is not a day that balanced. - Drop alert
- A warning for a cow whose milk has stayed below her own normal for several days in a row — not against the herd’s average, against her own history. Two rules keep it from crying wolf: a day she wasn’t milked is skipped, never counted as zero, so a quiet Sunday or a dry-off never sets it off; and one bad day is never enough — every day of the recent stretch has to be down for the alert to fire. The days-sustained number shown is the whole streak, however long it has run, not just the minimum the alert needed. A cow with too little history behind her is left out — there’s nothing yet to compare her against. When her somatic cell count has also been high over the same stretch, a small chip points at her quality tests — a nudge to go look, not a diagnosis. How sensitive the alert is — what counts as a drop, and for how many days — is set per farm in Settings → Production; left blank, it defaults to a 25% drop held for 3 days.Where it appears: Dashboard → Milking → Reports
See full explanation
Skipping days with no entry is deliberate, not a gap: reading a missing day as zero liters would set off the alert for the entire herd every Sunday nobody milks, and a cow who stopped being milked altogether — because she dried off or left the farm — would misread as the worst case of all. She doesn’t alert; her own status already says what happened to her.
Flows
Milking session lifecycle
Open
Started for a date and shift; no entries yet
Recording
One entry per lactating cow as she is milked
Close
Entries pooled into milk by destination; withheld milk pooled to discard
Reopen (if needed)
Pools removed, entries editable again, then closed once more
Capturing a day in the grid
Pick the day
Cows down the side, the day’s shifts across
Type the liters
Enter saves and drops to the next cow; Tab crosses to the next shift
The column opens itself
A shift with no session yet gets one the moment it receives milk
Close each shift
From its column header; the column turns read-only and the milk is pooled
Reading the reports page
Set the period
From, to, and day/week/month grouping — every block reads from it
Check the alerts
Cows with a sustained drop, first because they need attention
Read herd production
The totals over the period and where the milk went
See who’s producing
The ranking; tap a cow to open her detail
Reconcile the tank
Day by day; register a reading wherever one is missing
Frequently asked questions
Can I close a session with only some of the cows recorded?
Yes — closing only requires at least one entry. Cows left unrecorded simply have no entry in that session; there is no rule that every lactating cow must appear before closing.
Why did closing ask me to split the milk by destination?
Because the farm has no default milk destination configured (or it is set to "mixed"). Set one in the farm settings to make closing default to a single pool, or keep splitting by hand each time.
Do I have to open the shift before recording milk?
No. Type the liters into the column and the session for that shift is created on the spot, before the entry is saved. It also works for a column you added for a shift the farm does not usually milk.
Why won’t a column take any liters?
Because that shift is closed and its milk is already pooled by destination. Reopen it from the column header, correct the numbers, and close it again — the pools are rebuilt from what the entries say at that moment.
Can I record a quality test for a cow that is not milking?
Yes. A quality test only needs a female animal of the farm — a dry cow can perfectly well have a laboratory result. Milking rules apply to liters, not to samples.
Why does a day show "Tank not weighed" instead of a zero difference?
Because nobody weighed the tank that day, and a percentage or difference against nothing would just be made up. It stays unknown until a reading is registered for that day.
A cow is clearly giving less milk, why isn’t she in the alerts?
Most likely she doesn’t have enough history yet to compare against, or the drop hasn’t held for every day of the recent stretch — one low day on its own never triggers it. It can also mean she isn’t being milked at all anymore, which the alert deliberately leaves to her own status instead of flagging as a drop.
Do I need to weigh the tank before or after recording the day’s milkings?
Neither order matters. Milkings are captured on the grid, the tank is weighed and registered from the reconciliation table, and the two are only compared when both exist for the same day.