"""Текст шапки экспорта с применёнными фильтрами.""" from __future__ import annotations from typing import Any, Optional _NET_DOMINANT_HINTS = { "overload": "Преобладает перерасход — прямой убыток бюджета", "underload": "Преобладает недогруз — экономия сейчас, риск падения надоев", "balanced": "Перерасход и недогруз за период уравновешены", } def net_rub_display(summary: dict[str, Any]) -> float: """Итог без знака минус — как на вкладке «Итоги» в интерфейсе.""" return round(abs(float(summary.get("netRub") or 0)), 2) def net_rub_dominant_hint(summary: dict[str, Any]) -> str: return _NET_DOMINANT_HINTS.get(str(summary.get("dominantIssue") or "balanced"), _NET_DOMINANT_HINTS["balanced"]) def _count_label(raw: Optional[str], *, all_label: str) -> str: text = (raw or "").strip() if not text or text.lower() == "all": return all_label parts = [p.strip() for p in text.split(",") if p.strip()] if not parts: return all_label if len(parts) == 1: return parts[0] return str(len(parts)) def build_export_header_lines( *, date_from: str, date_to: str, filter_farms: Optional[str] = None, filter_dispensers: Optional[str] = None, filter_recipes: Optional[str] = None, ) -> list[str]: period = f"{date_from} — {date_to}" farms = _count_label(filter_farms, all_label="все") dispensers = _count_label(filter_dispensers, all_label="все") recipes = _count_label(filter_recipes, all_label="все") lines = [f"Отчёт о загрузках кормов за период {period}."] filter_bits = [f"Фермы: {farms}", f"Кормораздатчики: {dispensers}", f"Рейсы: {recipes}"] lines.append("Выбрано: " + ", ".join(filter_bits) + ".") return lines