Files
site/WESP_REL/app/services/analytics/export_context.py
T
2026-07-17 12:57:18 +03:00

52 lines
2.0 KiB
Python

"""Текст шапки экспорта с применёнными фильтрами."""
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