49 lines
2.4 KiB
Python
49 lines
2.4 KiB
Python
"""
|
|
===============================================================================
|
|
FILE: services/text_reporter/service.py
|
|
PROJECT: SCUD Orion AI (Unified Architecture)
|
|
MODULE: services / text_reporter
|
|
ROLE: Формирование текстовой сводки ИИ-аудитора для вывода в консоль и сохранения в MD.
|
|
===============================================================================
|
|
"""
|
|
|
|
from typing import Dict, Any, List
|
|
|
|
|
|
def format_controlling_summary_markdown(
|
|
target_date: str,
|
|
metrics: Dict[str, Any],
|
|
anomalies: List[Dict[str, Any]]
|
|
) -> str:
|
|
"""Генерирует Markdown-текст ежедневной сводки контроллинга."""
|
|
lines = [
|
|
f"**Сводка контроллинга СКУД и 1С:ЗУП на {target_date}**\n",
|
|
f"- Всего сотрудников по штату: **{metrics['total_staff']}**",
|
|
f"- Итого на работе (в офисе): **{metrics['working_in_office_count']}**",
|
|
f"- Удаленная работа (из дома): **{metrics['remote_home_count']}**",
|
|
f"- Официально отсутствуют: **{metrics['official_absent_count']}**",
|
|
f"- Неизвестно (истинно неотмеченные): **{metrics['unknown_count']}** чел.",
|
|
f"- Выявлено аномалий/конфликтов реестров: **{len(anomalies)}** шт.\n"
|
|
]
|
|
|
|
# Блок аномалий
|
|
lines.append(f"#### 🚨 Выявленные ИИ аномалии и конфликты источников ({len(anomalies)}):")
|
|
if anomalies:
|
|
for idx, a in enumerate(anomalies, 1):
|
|
lines.append(f"{idx}. {a['fio']}: {a['description']}")
|
|
else:
|
|
lines.append("Конфликтов и аномалий реестров не обнаружено.")
|
|
lines.append("")
|
|
|
|
# Блок неизвестных
|
|
unknown_list = metrics.get("unknown_list", [])
|
|
lines.append(f"#### ❓ Неизвестные случаи ({len(unknown_list)}):")
|
|
if unknown_list:
|
|
for idx, u in enumerate(unknown_list, 1):
|
|
dept = u.get("Подразделение") or "—"
|
|
pos = u.get("Должность") or "—"
|
|
lines.append(f"{idx}. {u.get('fio_clean')} — {dept}, {pos}")
|
|
else:
|
|
lines.append("Все отсутствия подтверждены документами.")
|
|
|
|
return "\n".join(lines) |