"""Все показатели рациона для расчёта и сравнения с нормами профиля.""" from __future__ import annotations from typing import Any def _ind( key: str, label: str, unit: str, nutrient_keys: list[str] | None = None, *, aggregation: str = "daily_total", derived: str | None = None, **extra: Any, ) -> dict[str, Any]: row: dict[str, Any] = { "key": key, "label": label, "unit": unit, "nutrient_keys": nutrient_keys or [], "aggregation": aggregation, } if derived: row["derived"] = derived row.update(extra) return row # Порядок: базовые → расширенные zootech → производные RATION_ALL_INDICATORS: list[dict[str, Any]] = [ _ind("dry_matter", "Сухое вещество", "г", ["СВ"]), _ind("dm_main", "СВ — основной корм", "г", ["Осн.Корм", "СВ Основной корм"]), _ind("oe", "ОЭ — КРС / Дойн", "MJ", ["ОЭ-КРС", " ОЭ-КРС", "OЭ КРС форм"]), _ind("nel", "ЧЭЛ — КРС / Дойн", "MJ", ["ЧЭЛ- КРС", " ЧЭЛ- КРС", "ЧЭЛ - КРС Форм"]), _ind("nel_per_kg_dm", "ЧЭЛ/кг СВ", "MJ", derived="nel_per_kg_dm"), _ind("crude_protein", "Сырой протеин", "г", ["Сыр. Протеин"]), _ind("rup_per_kg_dm", "Нер. СП / кг СВ", "г", ["Нер. СП / кг СВ"], aggregation="weighted_avg"), _ind("insoluble_protein", "Нерастворимый протеин", "г", ["Нераствор протеин ", "Нерастворим прот ", "Нерастворим прот"]), _ind("insoluble_protein_pct", "% нераств. протеин", "%", ["% нераств. протеин", "% нераствор протеин"], aggregation="weighted_avg"), _ind("usp", "уСП", "г", ["уСП", "уСП формул"]), _ind("usp_pct_dm", "% уСП/кг СВ", "%", ["% уСП/кг СВ", "% уСП/кг СР"], aggregation="weighted_avg"), _ind("usp_per_kg_dm", "уСП/кг СВ", "г", derived="g_per_kg_dm", from_key="usp"), _ind("usp_in_om", "уСП в ОВ", "г", ["уСП в ОР", "уСП в ОВ"]), _ind("usp_low_fat", "уСП <7% СЖ", "г", ["уСП<7%CЖ"], aggregation="weighted_avg"), _ind("usp_high_fat", "уСП >7% СЖ", "г", ["уСП>7%CЖ"], aggregation="weighted_avg"), _ind("ndf", "Сырая клетчатка", "г", ["Сырая клетч", "Сырая клетчатка", "НДК"]), _ind("ndf_total", "НДК общ", "г", ["НДК Общ", "НДК"]), _ind("ndf_main_feed", "НДК осн. корм", "г", ["НДК Осн. Корм"]), _ind("adf_total", "КДК общ", "г", ["КДК общ", "КДК"]), _ind("structural_fiber", "Структур. клетчатка", "г", ["Структур клетч", "Структур. клетчатка"]), _ind("structural_fiber_pct", "% стр. клетчатки", "%", ["% стр Сыр. Клетчатк.", "% стр Сыр. Клетч."], aggregation="weighted_avg"), _ind("crude_fat", "Сырой жир", "г", ["Сырой жир"]), _ind("rnb", "RNB", "г", ["RNB", "БРА", " БРА "], derived="rnb"), _ind("calcium", "Ca", "г", ["Ca"]), _ind("phosphorus", "P", "г", ["P"]), _ind("magnesium", "Mg", "г", ["Mg"]), _ind("sodium", "Na", "г", ["Na"]), _ind("potassium", "K", "г", ["K"]), _ind("dcab", "DCAB", "мэкв", ["DCAB Форм", "DCAB"]), _ind("sugar_starch", "Сахар и крахмал", "г", ["Сахар и Крохм"]), _ind("sugar_digestible_starch", "Сахар и усв. крахмал", "г", ["Сахар и усв. крох"]), _ind("insoluble_starch", "Нераств. крахмал", "г", ["Нераств. Крохмал", "Нераств Крохм", "Нераств крахмал"]), _ind("insoluble_starch_alt", "Нераств. крахмал (2)", "г", ["Нераств крохмал"]), _ind("insoluble_starch_pct", "% нераств. крахмала", "%", ["% Нераств крохм"], aggregation="weighted_avg"), _ind("sugar", "Сахар", "г", ["Сахар"]), _ind("starch", "Крахмал", "г", ["Крахмал"]), _ind("starch_pct_dm", "% крахмала СВ", "%", ["% Крохмал. СВ", "доля крохмала"], aggregation="weighted_avg"), _ind("carotene", "Каротин", "мг", ["Каротин"]), _ind("beta_carotene", "β-каротин", "мг", ["b -Каротин"]), _ind("linoleic_acid", "Линолевая к-та", "г", ["Линолевая к-та"]), _ind("linolenic_acid", "Линоленовая к-та", "г", ["Линоленовая ки-та"]), _ind("butyric_acid", "Масляная к-та", "г", ["Масляная ки-та"]), _ind("arachidonic_acid", "Арахидоновая к-та", "г", ["Арахидоновая ки-та"]), _ind("polyenoic_acid", "Полиэновая к-та", "г", ["Полиэновая ки-та"]), _ind("urea", "Мочевина", "г", ["Мочевина"]), _ind("crude_ash", "Сырая зола", "г", ["Сырая зола"]), _ind("nfe", "БЭВ", "г", ["БЕР", "БЭВ"]), _ind("tdn_cattle", "КРС орг. вещество", "г", ["КРС Орг Вещ", "ВРХ Орг Вещ"]), _ind("digestible_organic_matter", "Перевар. орг. вещество", "г", ["Перевар Орг Вещ", "Переварим Орг Вещ"]), _ind("cp_cattle", "КРС протеин", "г", ["КРС Протеин"]), _ind("digestible_protein", "Перевар. протеин", "г", ["Перевар Протеин", "Переварим Протеин"]), _ind("fat_cattle", "КРС сырой жир", "г", ["КРС Сырой жир", "КРС Сирий жир", "КРС Сирой жир"]), _ind("digestible_fat", "Перевар. сырой жир", "г", ["Перевар Сырой жир", "Перевар Сирой жир", "Переварим Сырой жир"]), _ind("fiber_cattle", "КРС сырая клетчатка", "г", ["КРС Сырая клетч"]), _ind("digestible_fiber", "Перевар. сырая клетчатка", "г", ["Перевар сыр клетч", "Переварим сырая клетч"]), _ind("nfe_cattle", "КРС БЭВ", "г", ["КРС БЭВ"]), _ind("digestible_nfe", "Перевар. БЭВ", "г", ["Перевар БЭВ", "Переварим БЭВ"]), _ind("feed_value", "ВЕ", "", ["ВЕ"], aggregation="weighted_avg"), _ind("fat_per_kg_dm", "СЖ/кг СВ", "г", derived="g_per_kg_dm", from_key="crude_fat"), _ind("nsp_per_kg_dm", "НСП/кг СВ", "г", ["НСП/кг СВ"], aggregation="weighted_avg"), _ind("cp_per_kg_dm", "СП/кг СВ", "г", derived="g_per_kg_dm", from_key="crude_protein"), _ind("dom_per_kg_dm", "пОВ/кг СВ", "г", derived="g_per_kg_dm", from_key="digestible_organic_matter"), _ind( "digestible_fat_per_kg_dm", "пСЖ/кг СВ", "г", derived="g_per_kg_dm", from_key="digestible_fat", ), _ind("fiber_pct_per_kg_dm", "%СК/кг СВ", "%", derived="pct_of_dm", from_key="ndf"), _ind("fat_pct_per_kg_dm", "%-СЖ/кг СВ", "%", derived="pct_of_dm", from_key="crude_fat"), _ind("usp_pct_per_kg_dm", "%-уСП / кг СВ", "%", derived="pct_of_dm", from_key="usp"), _ind("ca_pct_per_kg_dm", "%-Ca / кг СВ", "%", derived="pct_of_dm", from_key="calcium"), _ind("p_pct_per_kg_dm", "%-P / кг СВ", "%", derived="pct_of_dm", from_key="phosphorus"), _ind("k_pct_per_kg_dm", "%-К / кг СВ", "%", derived="pct_of_dm", from_key="potassium"), _ind("na_pct_per_kg_dm", "%-Na / кг СВ", "%", derived="pct_of_dm", from_key="sodium"), _ind("mg_pct_per_kg_dm", "%-Mg / кг СВ", "%", derived="pct_of_dm", from_key="magnesium"), _ind("ndf_pct_dm", "НДК % от СВ", "%", derived="pct_of_dm", from_key="ndf"), _ind("ndf_main_pct_dm", "НДК-ОК % от СВ", "%", derived="pct_of_dm", from_key="ndf_main_feed"), _ind("adf_pct_dm", "КДК % от СВ", "%", derived="pct_of_dm", from_key="adf_total"), _ind("nfc_pct_dm", "НКВ % от СВ", "%", derived="pct_of_dm", from_key="nfe"), _ind("sw_per_kg_dm", "SW / кг СВ", "", ["SW / кг СВ ()"], aggregation="weighted_avg"), _ind("metab_oet", "Метаб. ОЕТ", "г", ["Метаб ОЕТ", "OEB"]), _ind("metab_lysine", "Метаб. лизин", "г", ["Метаб лизин", "Лизин"]), _ind("metab_threonine", "Метаб. треонин", "г", ["Метабол Треон", "Треонин"]), _ind("metab_leucine", "Метаб. лейцин", "г", ["Метаб Лейц", "Метабол Лейцин", "Лейцин"]), _ind("metab_isoleucine", "Метаб. изолейцин", "г", ["Метаб Изол", "Метабол Изолейц", "Изолейцин"]), _ind("metab_valine", "Метаб. валин", "г", ["Метаб Вал", "Метабол Валин", "Валин"]), _ind("vitamin_a", "Витамин А", "МЕ", ["Вит А"]), _ind("vitamin_d", "Витамин D", "МЕ", ["Вит D"]), _ind("vitamin_e", "Витамин Е", "мг", ["Вит Е"]), _ind("vitamin_b1", "Витамин В1", "мг", ["Вит В1"]), _ind("vitamin_b2", "Витамин В2", "мг", ["Вит В2"]), _ind("vitamin_b6", "Витамин В6", "мг", ["Вит В6"]), _ind("vitamin_b12", "Витамин В12", "мкг", ["Вит В12"]), _ind("calcium_pantothenate", "Пантотенат кальция", "мг", ["Пант Кальц", "Пантеонат Кальция"]), _ind("niacin", "Никотиновая к-та", "мг", ["Никот Ки-та", "Никотиновая кислота"]), _ind("folic_acid", "Фолиевая к-та", "мг", ["Фол ки-та", "Фолиева кислота"]), _ind("choline", "Холин", "мг", ["Холин"]), _ind("biotin", "Биотин", "мкг", ["Биотин"]), _ind("iron", "Fe", "мг", ["Fe"]), _ind("zinc", "Zn", "мг", ["Zn"]), _ind("copper", "Cu", "мг", ["Cu"]), _ind("cobalt", "Co", "мг", ["Co"]), _ind("manganese", "Mn", "мг", ["Mn"]), _ind("selenium", "Se", "мг", ["Se"]), _ind("iodine", "J", "мг", ["J"]), _ind("oet", "OET", "", ["OEB", "OET"]), _ind("synthesis_mj", "Синтез", "МДж", ["Синтез Мдж"]), _ind("ca_p_ratio", "Са:P", "", derived="ratio", ratio_num="calcium", ratio_den="phosphorus"), _ind("k_na_ratio", "K:Na", "", derived="ratio", ratio_num="potassium", ratio_den="sodium"), _ind("ration_dm_pct_bw", "Рацион % СВ от веса", "%", derived="dm_pct_bw"), _ind("ration_pct_bw", "Рацион % от веса", "%", derived="ration_pct_bw"), # Дубликаты ключей норм (укр. заголовки) — тот же расчёт _ind("ndf_pct_dm_uk", "НДК % від СВ", "%", derived="alias", alias_of="ndf_pct_dm"), _ind("ndf_main_pct_dm_uk", "НДК-ОК % від СВ", "%", derived="alias", alias_of="ndf_main_pct_dm"), _ind("adf_pct_dm_uk", "КДК % від СВ", "%", derived="alias", alias_of="adf_pct_dm"), _ind("nfc_pct_dm_uk", "НКВ % від СВ", "%", derived="alias", alias_of="nfc_pct_dm"), ] # Обратная совместимость RATION_QUALITY_INDICATORS = RATION_ALL_INDICATORS _INDICATOR_BY_KEY = {d["key"]: d for d in RATION_ALL_INDICATORS} _LABEL_TO_KEY = {d["label"]: d["key"] for d in RATION_ALL_INDICATORS} def indicator_by_key(key: str) -> dict[str, Any] | None: return _INDICATOR_BY_KEY.get(key) def label_to_indicator_key(label: str) -> str | None: return _LABEL_TO_KEY.get(label) def calc_indicator_keys() -> frozenset[str]: return frozenset(_INDICATOR_BY_KEY)