Files
site/WESP_REL/app/lab/calc/ingredient_catalog.py
T
2026-07-17 12:57:18 +03:00

188 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Каталог показателей zootech «База сырья» (109 колонок)."""
from __future__ import annotations
from openpyxl.utils import column_index_from_string, get_column_letter
# Заголовки row 3 в xlsx_extracted/data_csv_cleaned/База сырья.csv
INGREDIENT_HEADERS: tuple[str, ...] = (
"№",
"Наименование",
"Цена 1 кг",
"СВ",
"Осн.Корм",
"Сыр. Протеин",
"уСП",
"БРА",
"ЧЭЛ- КРС",
"ОЭ-КРС",
"Сырая клетч",
"Структур клетч",
"Сырой жир",
"НДК",
"КДК",
"NFC",
"Ca",
"P",
"Mg",
"Fe",
"Zn",
"Cu",
"Co",
"Mn",
"Se",
"J",
"Na",
"K",
"CL",
"S",
"DCAB Форм",
"Сахар и Крохм",
"Нераств Крохм",
"Сахар",
"Крахмал",
"Нераств крахмал",
"Вит А",
"Вит D",
"Вит Е",
"Вит В1",
"Вит В2",
"Вит В6",
"Вит В12",
"Пант Кальц",
"Никот Ки-та",
"Фол ки-та",
"Холин",
"Биотин",
"Сырая зола",
"БЕР",
"Лизин",
"Метионин",
"Треонин",
"Триптофан",
"Изолейцин",
"Лейцин",
"Валин",
"Каротин",
"b -Каротин",
"Линолевая к-та",
"Линоленовая ки-та",
"Масляная ки-та",
"Арахидоновая ки-та",
"Полиэновая ки-та",
"Мочевина",
"СВ Основной корм",
"ВРХ Орг Вещ",
"Перевар Орг Вещ",
"КРС Протеин",
"Переварим Протеин",
"КРС Сырой жир",
"Переварим Сырой жир",
"КРС Сырая клетч",
"Переварим сырая клетч",
"КРС БЭВ",
"Переварим БЭВ",
"ВЕ",
"OЭ КРС форм",
"ЧЭЛ - КРС Форм",
"НДК Общ",
"НДК Осн. Корм",
"КДК общ",
"% нераствор протеин",
"Нерастворим прот",
"СЖ/кг СВ",
"НСП/кг СВ",
"СП/кг СВ",
"пОВ/кг СВ",
"пСЖ/кг СВ",
"уСП<7%CЖ",
"уСП>7%CЖ",
"уСП/кг СВ формул",
"уСП в ОР",
"уСП формул",
"БРА",
"Нераств крохмал",
"доля крохмала",
"Доля белка",
"% перев в кишках",
"OEB",
"Синтез Мдж",
"Промеж рез 1",
"Промеж рез 2",
"Метаб ОЕТ",
"Метаб лизин",
"Метабол Треон",
"Метабол Лейцин",
"Метабол Изолейц",
"Метабол Валин",
)
HEADER_TO_LETTER: dict[str, str] = {
header: get_column_letter(i + 1) for i, header in enumerate(INGREDIENT_HEADERS)
}
LETTER_TO_HEADER: dict[str, str] = {
get_column_letter(i + 1): header for i, header in enumerate(INGREDIENT_HEADERS)
}
# Колонки с формулами в шаблонной строке 6 (native port, не Excel runtime).
DERIVED_LETTERS: frozenset[str] = frozenset(
{
"AE",
"AF",
"AG",
"AX",
"BN",
"BP",
"BR",
"BT",
"BV",
"BX",
"BY",
"BZ",
"CA",
"CF",
"CG",
"CH",
"CI",
"CJ",
"CK",
"CL",
"CM",
"CN",
"CP",
"CQ",
"CX",
"CY",
"CZ",
"DA",
"DB",
"DC",
"DD",
"DE",
}
)
# Отображаемые поля G–J синхронизируются с расчётными CP/CQ/CA/BZ.
DISPLAY_SYNC: tuple[tuple[str, str], ...] = (
("G", "CP"), # уСП
("H", "CQ"), # RNB (legacy заголовок «БРА», дубль CQ)
("I", "CA"), # ЧЭЛ- КРС
("J", "BZ"), # ОЭ-КРС
)
DERIVED_HEADERS: frozenset[str] = frozenset(
LETTER_TO_HEADER[letter] for letter in DERIVED_LETTERS
) | frozenset(LETTER_TO_HEADER[g] for g, _ in DISPLAY_SYNC)
INPUT_HEADERS: frozenset[str] = frozenset(INGREDIENT_HEADERS) - DERIVED_HEADERS - frozenset(
("№", "Наименование", "Цена 1 кг")
)
# Дублирующий заголовок «БРА»/RNB (H и CQ) — в derive используем CQ.
DUPLICATE_HEADERS: frozenset[str] = frozenset({"БРА"})
def letter_index(letter: str) -> int:
return column_index_from_string(letter) - 1