From b7f5a27671e5bcfcbf7d2f2c4636bf7a2408f5e9 Mon Sep 17 00:00:00 2001 From: "MH.Dmitrii" Date: Thu, 18 Jun 2026 17:20:21 +0300 Subject: [PATCH] arti resolve --- columns.json | 6 +++--- handlers/handler.py | 23 +++++++++++++++-------- handlers/s_daemon.py | 2 +- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/columns.json b/columns.json index 87ac9f5..5480a12 100644 --- a/columns.json +++ b/columns.json @@ -6,9 +6,9 @@ "Выкупы": 7, "Возвраты":13, "Не_выкупы":16, - "Налог_в_руб":115, - "Прибыль":118, - "Все_удержания_магазина": 104, + "Налог_в_руб":117, + "Прибыль":120, + "Все_удержания_магазина": 106, "Эквайринг":26, "Логистика":35, "Себестоимость":22, diff --git a/handlers/handler.py b/handlers/handler.py index a60737f..7ef6b48 100644 --- a/handlers/handler.py +++ b/handlers/handler.py @@ -1,7 +1,7 @@ import pandas as pd from schema.pydantic import settings, Translit import os - +import re class BaseHandler: @@ -45,12 +45,20 @@ class Handler(BaseHandler): self.df['Артикул'] = self.df['Артикул'].replace(Translit.TRANSLIT, regex=True) + self.df['Артикул'] = self.df['Артикул'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') + self.df.dropna(subset=["Артикул"], inplace=True) # Удаляем пустые строки + + def normalize(arti): + if re.search(r'\d{3,}$', arti): + return re.sub(r'(\d)\d{2,}$', r'\1', arti) + else: + return re.sub(r'\d{1,2}$', '', arti) + + self.df['Артикул'] = self.df['Артикул'].apply(normalize) + def grouping(self): #группировка - - self.df['Артикул'] = self.df['Артикул'].astype(str).str.upper().str.extract(f'({settings.PATTERN})') # Отбираем Артикула по регексу - self.df.dropna(subset=["Артикул"], inplace=True) # Удаляем пустые строки - + agg_dict = {col: "sum" for col in self.df.columns if col != "Артикул" and col != "Наименование"} # По умолчанию суммируем все кроме Артикула и наименования if "Наименование" in self.df.columns: @@ -72,9 +80,8 @@ class Handler(BaseHandler): def calculations(self): #Исчисляемые колонки - self.df["Все удержания в %"] = self.df.apply( - lambda row: (row["Все_удержания_магазина"] / row["Выручка"] * 100) if row["Выручка"] != 0 else 100, #Возможно все удержания в таком случае 100% + lambda row: (row["Все_удержания_магазина"] / row["Выручка"] * 100) if abs(row["Выручка"]) > 0.01 else 100, #Возможно все удержания в таком случае 100% axis=1 ) if "Выкупы" in self.df.columns and "Не_выкупы" in self.df.columns: @@ -93,7 +100,7 @@ class Handler(BaseHandler): axis=1 ) self.df["Маржинальность"] = self.df.apply( - lambda row: (row["Прибыль"] / row["Выручка"] * 100) if row["Выручка"] != 0 else 0, + lambda row: (row["Прибыль"] / row["Выручка"] * 100) if abs(row["Выручка"]) > 0.01 else 0, axis=1 ) if "Себестоимость" in self.df.columns: diff --git a/handlers/s_daemon.py b/handlers/s_daemon.py index 9fe4125..787278f 100644 --- a/handlers/s_daemon.py +++ b/handlers/s_daemon.py @@ -9,7 +9,7 @@ for i in ("input", "output"): path.mkdir(exist_ok=True) # Print the files for file in files: - file=file.lower + if file.startswith("~$"): #Проверка не редактируемый ли файл continue # Check if item is a file, not a directory