Goal
Allow a farm to sell Cracked and Dirty eggs as separate quality stock while preserving complete, auditable daily-entry accounting.
Product decisions
- Cracked and Dirty are saleable by default in fresh base reference data, but each farm can turn either grade non-saleable.
- They retain separate Daily Entry counters and are bound to explicit, rename-safe quality-grade identities rather than a name match.
- Manual grade lines reconcile exactly to
total - cracked - dirty - discarded when a Daily Entry is submitted or adjusted; drafts remain flexible.
- Saleable quality counters create their own lots. Non-saleable conditions remain losses. Discarded always remains a loss.
- The official entry snapshots the selected quality-grade disposition. Later configuration changes never reinterpret historical production or create retrospective lots.
- Cracked and Dirty sell through ordinary mapped products with independently configured default prices; there is no hard-coded discount.
UI
- Daily Entry excludes the condition grades from manual grading and shows the complete reconciliation.
- The History adjustment dialog uses the same counts-and-grading structure and blocks an official save until reconciliation and reason are both present.
Operational acceptance criteria
Design and implementation plan are prepared in the documentation PR.
Goal
Allow a farm to sell Cracked and Dirty eggs as separate quality stock while preserving complete, auditable daily-entry accounting.
Product decisions
total - cracked - dirty - discardedwhen a Daily Entry is submitted or adjusted; drafts remain flexible.UI
Operational acceptance criteria
Persistence/Migrations/holds exactly one,InitialCreate(Squash the 30 EF migrations into a single InitialCreate before first production deploy #245).The columns, the partial unique index and the seed defaults are hand-carried into it and
hand-edited, never regenerated — a regenerate silently drops the four
lower("Name")expression indexes and the 21 guarded reference-data rows. This application has never been
deployed, so a virgin database is the only starting state and there is no existing farm whose
saleability could be reclassified; a follow-on migration would touch zero rows by construction,
which is the dead-backfill pattern the Squash the 30 EF migrations into a single InitialCreate before first production deploy #245 squash was performed to remove.
Design and implementation plan are prepared in the documentation PR.