191 lines
5.8 KiB
Markdown
191 lines
5.8 KiB
Markdown
|
|
# Feeding Transition Calculator — Implementation Guide (30 kg adult)
|
|||
|
|
|
|||
|
|
## 1) Purpose & principle
|
|||
|
|
|
|||
|
|
- The calculator **keeps energy intake continuous** while transitioning from kibble (current) to gently cooked (GC, target).
|
|||
|
|
|
|||
|
|
- Internally it uses the **kibble chart’s month-level precision**; externally it **communicates in GC phases** (<5 mo, 5–6 mo, 7–12 mo).
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 2) Fixed scope
|
|||
|
|
|
|||
|
|
- Dog profile: **30 kg adult** only.
|
|||
|
|
|
|||
|
|
- Supported ages: **2.0 to 12.0 months** inclusive.
|
|||
|
|
If the user enters a value outside this range, **clamp** to the nearest bound and show a subtle note.
|
|||
|
|
|
|||
|
|
- Required configuration at runtime: **kibble energy density (kcal per 100 g)**.
|
|||
|
|
If missing, show an error and do not compute.
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 3) Data you must hard-code
|
|||
|
|
|
|||
|
|
1. **Kibble reference points (grams/day, 30 kg column):**
|
|||
|
|
(2→250), (3→330), (4→365), (6→400), (8→410), (10→410), (12→405).
|
|||
|
|
|
|||
|
|
2. **Interpolated monthly kibble (round to whole grams):**
|
|||
|
|
|
|||
|
|
|
|||
|
|
- 2 mo: 250
|
|||
|
|
|
|||
|
|
- 3 mo: 330
|
|||
|
|
|
|||
|
|
- 4 mo: 365
|
|||
|
|
|
|||
|
|
- 5 mo: 382
|
|||
|
|
|
|||
|
|
- 6 mo: 400
|
|||
|
|
|
|||
|
|
- 7 mo: 405
|
|||
|
|
|
|||
|
|
- 8 mo: 410
|
|||
|
|
|
|||
|
|
- 9 mo: 410
|
|||
|
|
|
|||
|
|
- 10 mo: 410
|
|||
|
|
|
|||
|
|
- 11 mo: 408
|
|||
|
|
|
|||
|
|
- 12 mo: 405
|
|||
|
|
|
|||
|
|
|
|||
|
|
3. **GC communication buckets and ranges (g/day):**
|
|||
|
|
|
|||
|
|
- **< 5 months** (covers 2.0–4.999… mo): **950–1350**
|
|||
|
|
|
|||
|
|
- **5–6 months** (covers 5.0–6.999… mo): **1250–1550**
|
|||
|
|
|
|||
|
|
- **7–12 months** (covers 7.0–12.0 mo): **1300–1500**
|
|||
|
|
|
|||
|
|
|
|||
|
|
**Boundary rule:** exact 5.0 and 7.0 belong to the **later** bucket (5.0 → “5–6”, 7.0 → “7–12”).
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 4) How to calculate results (conceptual, no code)
|
|||
|
|
|
|||
|
|
### A) Kibble grams/day at any age (2.0–12.0)
|
|||
|
|
|
|||
|
|
- Use **linear interpolation** between the nearest kibble reference points listed above.
|
|||
|
|
|
|||
|
|
- Round the resulting kibble grams/day to **whole grams** (or to the nearest **5 g** if the user enables a rounding toggle).
|
|||
|
|
|
|||
|
|
|
|||
|
|
### B) GC bucket assignment
|
|||
|
|
|
|||
|
|
- Based on the **age**, assign the corresponding GC bucket and attach that bucket’s **low/high range** (g/day).
|
|||
|
|
|
|||
|
|
### C) Energy-matched GC grams/day (the backbone)
|
|||
|
|
|
|||
|
|
- Convert kibble grams/day to **kcal/day** using the **user-provided** kibble energy density (kcal/100 g).
|
|||
|
|
|
|||
|
|
- Convert kcal/day to **GC grams/day** using GC’s energy density **115 kcal per 100 g**.
|
|||
|
|
(Equivalently, GC provides **1.15 kcal per gram**.)
|
|||
|
|
|
|||
|
|
- Round to **whole grams** (or to **nearest 5 g** if the user toggled it).
|
|||
|
|
|
|||
|
|
|
|||
|
|
### D) Range status
|
|||
|
|
|
|||
|
|
- Compare the **energy-matched GC grams/day** to the GC bucket’s **low/high**:
|
|||
|
|
|
|||
|
|
- “within” if inside \[low, high\]
|
|||
|
|
|
|||
|
|
- “below” if under the low
|
|||
|
|
|
|||
|
|
- “above” if over the high
|
|||
|
|
(Do **not** alter the energy-matched amount; just flag it.)
|
|||
|
|
|
|||
|
|
|
|||
|
|
### E) Transition schedule (blended days)
|
|||
|
|
|
|||
|
|
- Default to **7 days** (configurable).
|
|||
|
|
|
|||
|
|
- Linearly ramp daily fractions from **100% kibble / 0% GC** on Day 1 to **0% kibble / 100% GC** on the last day, in equal steps.
|
|||
|
|
|
|||
|
|
- Each day’s grams = (kibble grams/day × kibble fraction) + (GC grams/day × GC fraction).
|
|||
|
|
Round after multiplying (whole grams or nearest 5 g per the user setting).
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 5) What to display (UX rules)
|
|||
|
|
|
|||
|
|
1. **Primary number:** “Gently cooked (energy-matched): **X g/day**”.
|
|||
|
|
Directly below, show the GC bucket label and its range (e.g., “7–12 months: 1300–1500 g/day”) plus a small **status chip** (within/below/above).
|
|||
|
|
|
|||
|
|
2. **Context line:** “Based on your kibble energy density: **Y kcal / 100 g**” with an edit control.
|
|||
|
|
|
|||
|
|
3. **Age input:** accept decimals (e.g., 5.5 months).
|
|||
|
|
Add tick marks at 2, 3, 4, 6, 8, 10, 12 (the original kibble points).
|
|||
|
|
|
|||
|
|
4. **Transition widget:** a simple 5–7 day table or bar chart that shows **kibble g** and **GC g** per day, plus the day total.
|
|||
|
|
(Totals will typically increase during the transition because GC is less energy-dense; this is expected.)
|
|||
|
|
|
|||
|
|
5. **Rounding toggle:** whole grams vs nearest 5 g.
|
|||
|
|
|
|||
|
|
6. **Download/export:** CSV with columns:
|
|||
|
|
age_months, kibble_g_per_day, kibble_kcal_per_100g, kcal_per_day, gc_energy_matched_g_per_day, gc_bucket_name, gc_low_g, gc_high_g, range_status, and per-day transition grams.
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 6) Validation & edge cases
|
|||
|
|
|
|||
|
|
- **Missing kibble kcal density:** block calculation and display a clear prompt to enter kcal/100 g.
|
|||
|
|
|
|||
|
|
- **Age outside 2–12 months:** clamp to the nearest bound; show a subtle informational note.
|
|||
|
|
|
|||
|
|
- **Energy-matched GC outside bucket range:** keep the energy-matched number; display the status chip and a short educational tooltip (growth varies; this tool prioritizes energy continuity).
|
|||
|
|
|
|||
|
|
- **Rounding:** perform all math in floating point; **round only for display** (and for the per-day plan after multiplying by fractions).
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 7) Acceptance checks (use these to verify)
|
|||
|
|
|
|||
|
|
- At **5.5 months** with **380 kcal/100 g** kibble:
|
|||
|
|
|
|||
|
|
- Interpolated kibble ≈ **391 g/day**.
|
|||
|
|
|
|||
|
|
- Kcal/day ≈ **1,486 kcal**.
|
|||
|
|
|
|||
|
|
- Energy-matched GC ≈ **1,292 g/day**.
|
|||
|
|
|
|||
|
|
- GC bucket “5–6 months” (1,250–1,550) → **within**.
|
|||
|
|
|
|||
|
|
- At **8.0 months** with **380 kcal/100 g** kibble:
|
|||
|
|
|
|||
|
|
- Kibble ≈ **410 g/day** → ≈ **1,558 kcal/day** → GC ≈ **1,355 g/day**.
|
|||
|
|
|
|||
|
|
- GC bucket “7–12 months” (1,300–1,500) → **within**.
|
|||
|
|
|
|||
|
|
- At **2.0 months** with **380 kcal/100 g** kibble:
|
|||
|
|
|
|||
|
|
- Kibble **250 g/day** → **950 kcal/day** → GC **≈ 826 g/day**.
|
|||
|
|
|
|||
|
|
- GC bucket “<5 months” (950–1,350) → **below** (expected for some formulas).
|
|||
|
|
|
|||
|
|
|
|||
|
|
* * *
|
|||
|
|
|
|||
|
|
## 8) Deliverables checklist
|
|||
|
|
|
|||
|
|
- Precise monthly interpolation (ready values above).
|
|||
|
|
|
|||
|
|
- Age-aware GC bucket labelling and ranges.
|
|||
|
|
|
|||
|
|
- Energy-matched GC grams/day with status flag.
|
|||
|
|
|
|||
|
|
- Configurable transition length; per-day blend table.
|
|||
|
|
|
|||
|
|
- Rounding control.
|
|||
|
|
|
|||
|
|
|
|||
|
|
|