/
amirkh7
/
project
Обзор
Документация
Войти
/
amirkh7
/
project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/validator.py
60 строк
3 KB
amirkh7
create: cost_calculator.py, validator.py
17 май 2026, 23:28
Верифицирован
17 май 2026, 23:28
3d04c1f
Код
Авторство
О чём код?
import pandas as pd def run_validation(data_dir: str = "data"): """Запуск всех валидаций (минимум 5 правил)""" orders = pd.read_csv(f"{data_dir}/orders_t1.csv") bom = pd.read_csv(f"{data_dir}/bom_t1.csv") labor = pd.read_csv(f"{data_dir}/labor_t1.csv") overhead = pd.read_csv(f"{data_dir}/overhead_t1.csv") errors = [] warnings = [] # Правило 1: Положительные значения if (bom['qty'] <= 0).any() or (bom['unit_cost'] <= 0).any(): errors.append("❌ Ошибка: qty или unit_cost ≤ 0 в BOM") if (labor['hours'] <= 0).any() or (labor['rate'] <= 0).any(): errors.append("❌ Ошибка: hours или rate ≤ 0 в labor") if (overhead['amount'] <= 0).any(): errors.append("❌ Ошибка: amount ≤ 0 в overhead") # Правило 2: Ссылочная целостность valid_ids = set(orders['order_id']) if not set(bom['order_id']).issubset(valid_ids): errors.append("❌ Ошибка: BOM содержит order_id, которого нет в orders") if not set(labor['order_id']).issubset(valid_ids): errors.append("❌ Ошибка: labor содержит order_id, которого нет в orders") if not set(overhead['order_id']).issubset(valid_ids): errors.append("❌ Ошибка: overhead содержит order_id, которого нет в orders") # Правило 3: Корректность дат if (orders['start_date'] > orders['end_date']).any(): errors.append("❌ Ошибка: start_date > end_date") # Правило 4: Запрет изменения закрытых заказов closed_orders = orders[orders['status'] == 'closed']['order_id'] if bom['order_id'].isin(closed_orders).any() or labor['order_id'].isin(closed_orders).any(): errors.append("❌ Ошибка: попытка изменить данные закрытого заказа (status = closed)") # Правило 5: Полнота данных for oid in orders['order_id']: has_material = oid in bom['order_id'].values has_labor = oid in labor['order_id'].values if not has_material and not has_labor: warnings.append(f"⚠️ Предупреждение: Заказ {oid} не имеет ни материалов, ни трудозатрат") # Итог print("=== РЕЗУЛЬТАТ ВАЛИДАЦИИ ===") if errors: print("\n".join(errors)) else: print("✅ Все проверки пройдены успешно!") if warnings: print("\n".join(warnings)) return len(errors) == 0 # Для запуска: python validator.py if __name__ == "__main__": run_validation()