промежуточный положительный результат. Отчеты коррктно формируются. Перед автоматической загрузкой файлов 1С.

This commit is contained in:
2026-07-30 12:42:41 +03:00
parent 2fc417f3a7
commit 9347c42d22
10 changed files with 477 additions and 237 deletions
+12 -11
View File
@@ -1,28 +1,25 @@
import os
import re
from datetime import datetime, timedelta
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = os.path.join(BASE_DIR, "data")
# 📂 ПОДПАПКИ DАТА
SCUD_DIR = os.path.join(DATA_DIR, "scud")
ZUP_1C_DIR = os.path.join(DATA_DIR, "1c")
OUTPUT_DIR = os.path.join(BASE_DIR, "output")
# Создаем директории при их отсутствии
for folder in [DATA_DIR, SCUD_DIR, ZUP_1C_DIR, OUTPUT_DIR]:
os.makedirs(folder, exist_ok=True)
# 📅 Даты
NOW = datetime.now()
DATE_TODAY = NOW.strftime("%d.%m.%Y")
if NOW.weekday() == 0: # Понедельник -> Вчера = Пятница
if NOW.weekday() == 0:
DATE_YESTERDAY = (NOW - timedelta(days=3)).strftime("%d.%m.%Y")
else:
DATE_YESTERDAY = (NOW - timedelta(days=1)).strftime("%d.%m.%Y")
# 📄 Пути к файлам
SCUD_FILE_TODAY = os.path.join(SCUD_DIR, f"Сотрудники_{DATE_TODAY}.xlsx")
SCUD_FILE_YESTERDAY = os.path.join(SCUD_DIR, f"Сотрудники_{DATE_YESTERDAY}.xlsx")
SCUD_FILE = os.path.join(SCUD_DIR, "Сотрудники.xlsx")
@@ -30,7 +27,6 @@ SCUD_FILE = os.path.join(SCUD_DIR, "Сотрудники.xlsx")
STAFF_FILE_1C = os.path.join(ZUP_1C_DIR, "Штатные сотрудники - ОУП.xlsx")
ABSENT_FILE_1C = os.path.join(ZUP_1C_DIR, "Отсутствия сотрудников - выгрузка.xlsx")
# Настройки Ollama / RAG (объявляем оба имени для совместимости)
OLLAMA_URL = "http://10.121.18.227:11434/api/generate"
OLLAMA_MODEL = "qwen2.5:14b"
MODEL_NAME = OLLAMA_MODEL
@@ -40,17 +36,22 @@ EXCEPTIONS_PATH = os.path.join(BASE_DIR, "exceptions.json")
def normalize_fio(fio):
"""
Нормализует ФИО:
1. Вырезает скобки и их содержимое: (осн.), (совм.), (сводная), (внешн.)
2. Заменяет неразрывные пробелы \xa0 на обычные
3. Приводит к регистру Заглавных Букв
"""
if not fio or not isinstance(fio, str):
return ""
parts = fio.strip().split()
fio_clean = re.sub(r'\(.*?\)', '', fio)
fio_clean = fio_clean.replace('\xa0', ' ')
parts = fio_clean.strip().split()
return " ".join(parts).title()
def clean_scud_fio_light(fio_str):
if not isinstance(fio_str, str):
return ""
fio_clean = fio_str.replace("(сводная)", "").strip()
return normalize_fio(fio_clean)
return normalize_fio(fio_str)
def load_exceptions():