188 lines
4.6 KiB
Python
188 lines
4.6 KiB
Python
"""Каталог показателей 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
|