67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
"""СВ % WESP → г/кг и пересчёт энергии при битом EAV."""
|
|
|
|
from app.lab.calc.engine import calculate_ration
|
|
from app.lab.nutrient_schema import resolve_sv_g_per_kg
|
|
from app.lab.services.component_nutrients import _repair_for_ration_calc
|
|
|
|
|
|
def test_resolve_sv_from_wesp_percent():
|
|
assert resolve_sv_g_per_kg({"СВ": 5.0}, 88.7) == 887.0
|
|
assert resolve_sv_g_per_kg({}, 85.0) == 850.0
|
|
assert resolve_sv_g_per_kg({"СВ": 880.0}, 88.0) == 880.0
|
|
|
|
|
|
def test_repair_negative_energy():
|
|
repaired = _repair_for_ration_calc(
|
|
{
|
|
"СВ": 5.0,
|
|
"Сыр. Протеин": 78.0,
|
|
"Сырая клетч": 328.0,
|
|
"Сырой жир": 22.0,
|
|
"ОЭ-КРС": -0.92,
|
|
"ЧЭЛ- КРС": -0.31,
|
|
},
|
|
87.2,
|
|
)
|
|
assert repaired["СВ"] == 872.0
|
|
assert repaired["ОЭ-КРС"] > 0
|
|
assert repaired["ЧЭЛ- КРС"] > 0
|
|
|
|
|
|
def test_fill_missing_derived_preserves_pinned_energy():
|
|
repaired = _repair_for_ration_calc(
|
|
{
|
|
"Сыр. Протеин": 78.0,
|
|
"Сырая клетч": 328.0,
|
|
"Сырой жир": 22.0,
|
|
"ОЭ-КРС": 5.9,
|
|
"ЧЭЛ- КРС": 3.4,
|
|
"уСП": 62.0,
|
|
},
|
|
85.0,
|
|
)
|
|
assert repaired["ОЭ-КРС"] == 5.9
|
|
assert repaired["ЧЭЛ- КРС"] == 3.4
|
|
assert repaired["уСП"] == 62.0
|
|
assert repaired["Перевар Орг Вещ"] > 0
|
|
assert repaired["Переварим БЭВ"] > 0
|
|
|
|
|
|
def test_hay_without_eav_sv_uses_percent():
|
|
result = calculate_ration(
|
|
"DAIRY",
|
|
[
|
|
{
|
|
"daily_kg": 62,
|
|
"in_ration": True,
|
|
"in_compound": False,
|
|
"dry_matter": 88.7,
|
|
"nutrients": {"Сыр. Протеин": 78, "ОЭ-КРС": 5.9, "ЧЭЛ- КРС": 3.4},
|
|
}
|
|
],
|
|
{},
|
|
heads_per_trip=62,
|
|
)
|
|
dm = next(i for i in result["indicators"] if i["label"] == "Сухое вещество")
|
|
assert dm["content"] == 887.0
|