Cheesemaking
Cheesemaking turns milk into cheese: a product catalog with its recipe, batches that consume milk pools and ingredients and get weighed at close, reverse traceability all the way back to the cows whose milk went in, yield and cost reports, and the finished-cheese stock each batch leaves behind. A weighed batch creates its own stock entry — nobody has to write down "I produced this many kilos" twice — and that stock only drops through a manual adjustment with a reason, never below zero.
Terms
- Product and recipe
- The catalog of cheeses produced, each with its recipe: the ingredients and amounts per 10 L of milk, plus the expected yield in kilograms per 10 L. The recipe is what suggests doses when capturing a batch, and what computes how much "should" have come out, against what the scale actually showed.Where it appears: Dashboard → Cheesemaking → Production → Products & recipes
- Cheese batch
- One concrete production run of a product, identified by a batch number (date + that day's sequence). It starts by consuming one or more milk pools and the recipe's ingredients, and it closes by weighing the cheese that actually came out — that weigh-in is what makes it "ready" (`READY`) and triggers the stock movement. A batch's product can never be changed once it is created.Where it appears: Dashboard → Cheesemaking → Production → Batches
- Milk pool consumption
- A batch draws its liters from one or more milk pools closed that same day (or earlier). Unlike ingredients, this draw is rejected if it asks for more liters than the pool has left — they are physical, weighed-at-milking liters, and there is no way for extra to appear from nowhere. Reopening a milking session already consumed by a batch is also rejected, until the batch stops using it.Where it appears: Dashboard → Cheesemaking → Production → Batches → New batch
- Ingredient consumption
- Rennet, salt and the rest of the recipe's ingredients are drawn from the general cheese-input inventory when the batch is saved. Unlike milk, this draw never blocks: if the ingredient's stock goes negative it is a discrepancy to fix with a purchase or an adjustment, not a reason to stop production — the same doctrine as the rest of the farm's inventory.Where it appears: Dashboard → Cheesemaking → Production → Batches → New batch
- Yield loss (merma)
- The difference between what the recipe expected to produce from those liters and what the scale actually showed. It is computed on its own, with a sign — negative when less than expected came out, positive the other way — and is never clamped to zero: a real positive merma says as much as a negative one.Where it appears: Dashboard → Cheesemaking → Production → Batches → Weigh batch
- Reopening a batch
- A ready (`READY`) batch is read-only; correcting its pools, ingredients or weight requires reopening it first. Reopening only applies to a batch that is already closed, and is rejected if it has any active sale or adjustment on its stock (see "Reopening or deleting blocked by outbound stock"). Without that block, reopening annuls the production movement the close had created — it is re-created, with the new weight, the next time it closes.Where it appears: Dashboard → Cheesemaking → Production → Batches
- Batch traceability
- From a batch's detail page you can open its reverse-traceability tree: which milk pools it consumed, which milking session each pool came from, and which cows contributed those liters — with each cow's real milked amount, never split proportionally between animals. An annulled batch keeps its trace even though its pools no longer show as active.Where it appears: Dashboard → Cheesemaking → Production → Batches → Batch detail
- Cheesemaking reports
- Four views derived from weighed batches: real yield against the recipe's expected yield, production grouped by day/week/month, cost per kilogram (null-honest — one batch with an unpriced ingredient leaves the whole product's cost blank, never a made-up number), and the merma trend, always signed, never clamped.Where it appears: Dashboard → Cheesemaking → Reports
- Finished-cheese stock (ledger)
- A signed movement log per batch, separate from the general supplies inventory because finished cheese has no supplier, no per-batch expiry, no purchase price. A batch's stock is simply the sum of its active movements — never a number stored on its own — and a product's stock is the sum of its batches. Closing a batch creates its own production movement with the weighed kilograms; nobody writes it down by hand.Where it appears: Dashboard → Cheesemaking → Stock
- Stock adjustment
- A manual correction to a batch's stock: signed kilograms, a required reason, date and optional notes. The reasons are loss, damage, gift, consumption, return, correction or other. There is no editing a saved adjustment — it gets annulled and a new one is created, the same correct-by-repeating-the-action philosophy used across the rest of the system.Where it appears: Dashboard → Cheesemaking → Stock → Adjust
- Overdraw blocked
- Unlike the supplies inventory — which never blocks, because its opening balance can be incomplete — finished cheese IS rejected if an adjustment would take a batch's stock below zero. A batch's kilograms are weighed on a scale, not an estimate: the same doctrine that already governs milk pool consumption.Where it appears: Dashboard → Cheesemaking → Stock → Adjust
- Reopening or deleting blocked by outbound stock
- A batch with any active adjustment or sale on its stock cannot be reopened or deleted until those movements are annulled first — otherwise stock would stop reflecting reality. The message says exactly that: annul the sales or adjustments before reopening or deleting.Where it appears: Dashboard → Cheesemaking → Production → Batches
- Price per kilogram
- An optional sale price per product. Once sales arrive, the suggestion will fall back to the cheese price configured on the farm if the product has none of its own; if that is missing too, there will be no suggestion — zero will never be proposed just because the data is missing.Where it appears: Dashboard → Cheesemaking → Production → Products & recipes → Edit product
- Stock tab
- One table per product, expandable into its ready batches: each one shows what was produced, sold, adjusted and what remains, plus the full movement history and the adjust action. Under the batch number sits the day and milking of the milk it was made with (“Friday · morning”, or “morning and afternoon” when it pooled two milkings; just the day when the batch has no milk recorded); the suffix of the number (-1, -2) is only a counter within the day, not the milking. Only products with at least one ready batch appear here — a product with no batches produced yet stays on the Products tab, without taking up space in this one.Where it appears: Dashboard → Cheesemaking → Stock
Flows
A batch's lifecycle
New batch
Pick the product, the milk pools and the suggested ingredient amounts
Weigh and close
The real weight computes merma and creates the production stock movement
Ready (READY)
Becomes read-only; its stock can now be reviewed and adjusted
Reopen (if needed)
Annuls the production movement; rejected if any sale or adjustment exists
Adjusting a batch's stock
Open the Stock tab
Expand the product and find the batch
Adjust
Signed kilograms, a reason, a date and optional notes
Overdraw is blocked
If the adjustment would take stock below zero, it is rejected
Annul if needed
From the batch's movement history; never edited, always annulled
Reviewing a batch's traceability
Open the batch's detail page
From the batch list
Expand the tree
One milk pool per branch, with its originating milking session
See the cows
Each animal's real contributed liters, linked to its record
Frequently asked questions
Why can't I reopen a batch that already has sales or adjustments?
Because reopening annuls the production movement, and with active sales or adjustments stock would stop adding up correctly. Those movements have to be annulled first, from the batch's history on the Stock tab.
Why is cheese overdraw blocked when ingredient stock never blocks?
Because a batch's kilograms are weighed on a scale at close time — they are not an opening balance that might have been incomplete, the way ingredients bought before the system existed can be. It's the same reason a milk pool doesn't allow overdraw either.
What happens if a product has no price per kilogram configured?
Once sales arrive, the suggestion will fall back to the cheese price configured on the farm; if that is missing too, nothing will be suggested. Zero will never be proposed just because the data is missing — that would read as "this cheese is worth nothing".
Can I edit a stock adjustment that is already saved?
Not directly: the adjustment gets annulled and a new one is created with the corrected data. It is the same correct-by-repeating-the-action philosophy used across the rest of Mi Finca, so the movement history always stays complete.
Why does every batch show zero as "sold"?
Because sales don't exist as a module yet — they arrive in the next milestone. For now stock only moves through the automatic production entry at batch close and through manual adjustments; the sold column is already wired for when sales start drawing it down.
How is the stock shown on the Stock tab calculated?
By summing each batch's active movements — never a number stored on its own. That's why an annulled movement stops counting immediately, with nobody having to "recalculate" anything.
Why don't some batches show up on the Stock tab?
Because only batches that are already weighed and closed (`READY`) are listed. A batch still in production, with no weight set yet, has no stock to show yet.