docs: update CHANGELOG and ROADMAP with section 10 (svodka/otchet split, Y-23:59:59)

This commit is contained in:
2026-08-27 22:43:45 +03:00
parent a9680db0aa
commit fa386b3b79
10 changed files with 483 additions and 256 deletions
+12 -5
View File
@@ -1,7 +1,6 @@
"""
===============================================================================
FILE: main_etl.py
PROJECT: SCUD Orion AI (Unified Architecture)
ROLE: Главная точка входа ETL-конвейера СКУД ⟷ 1С:ЗУП.
===============================================================================
"""
@@ -20,7 +19,7 @@ from services.text_reporter import generate_markdown_report
from services.scud_export import run_export
from services.share_copier import copy_1c_files_from_share
from services.excel_exporter import generate_summary_excel, generate_detailed_excel
from services.excel_exporter import generate_summary_excel, generate_detailed_excel, export_raw_scud
logging.basicConfig(level=logging.INFO, format="[%(asctime)s] [%(levelname)s] %(message)s")
@@ -38,7 +37,7 @@ def main():
now = datetime.now()
today_str = now.strftime("%d.%m.%Y")
# ⭐️ По понедельникам (weekday == 0) отчетом накануне является пятница (-3 дня)
if now.weekday() == 0:
yesterday_str = (now - timedelta(days=3)).strftime("%d.%m.%Y")
else:
@@ -47,7 +46,7 @@ def main():
# [Этап 0] Выгрузка свежих данных СКУД
if not args.skip_export and not args.snapshot:
print(f"\n[0/5] Экспорт данных СКУД за {today_str} и {yesterday_str}...")
run_export(debug=args.debug)
run_export(debug=args.debug, save_xlsx=True)
else:
print("\n[0/5] Пропуск прямого экспорта СКУД из MS SQL (--skip-export)...")
@@ -66,6 +65,10 @@ def main():
df_staff_yesterday, df_abs_yesterday = load_1c_files_for_date(yesterday_str)
df_staff_today, df_abs_today = load_1c_files_for_date(today_str)
# Сохранение диагностического дампа сырого СКУД
if df_scud_today is not None and not df_scud_today.empty:
export_raw_scud(df_scud_today, filename=f"СКУД_Сырые_данные_{today_str}.xlsx")
# [Этап 3] Детальный отчет за вчера
print(f"\n[3/5] Обработка и построение детального отчета за ВЧЕРА ({yesterday_str})...")
df_merged_yesterday = merge_scud_and_1c(df_scud_yesterday, df_staff_yesterday, df_abs_yesterday)
@@ -75,7 +78,7 @@ def main():
print(f"\n[4/5] Обработка и построение Ежедневной сводки за {today_str}...")
df_merged_today = merge_scud_and_1c(df_scud_today, df_staff_today, df_abs_today)
metrics_today = calculate_summary_metrics(df_merged_today)
anomalies_today = detect_registry_anomalies(df_merged_today)
anomalies_today = detect_registry_anomalies(df_merged_today, df_raw_scud=df_scud_today)
generate_summary_excel(df_merged_today, date_str=today_str)
# [Этап 5] Формирование Markdown-сводки через ИИ-аудитора
@@ -92,12 +95,16 @@ def main():
(df_merged_today.get('is_excluded', False) == False)
]
# ⭐️ Передаем сырые датасеты для выявления опечаток и анализа мульти-записей
summary_md = generate_markdown_report(
merged_df=df_merged_today[df_merged_today.get('is_excluded', False) == False],
absent_explained=absent_explained,
absent_unexplained=absent_unexplained,
scud_present_but_absent_in_1c=pd.DataFrame(),
anomalies_list=anomalies_today,
raw_scud_df=df_scud_today,
raw_staff_df=df_staff_today,
raw_absent_df=df_abs_today,
date_str=today_str
)