"""СВ % 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