diff --git a/README.md b/README.md index 8a98230..dd76421 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,216 @@ +# 📋 ИИ Промпт - Графики смен + +## 🎯 Описание проекта + +Проект для автоматического составления графиков смен сотрудников с использованием **Constraint Programming (CP-SAT)**. Решает задачи оптимального распределения персонала с учетом множества ограничений и предпочтений. + +## 📁 Структура проекта + +``` +├── main.py # Основная логика с генерацией графика +├── shift_schedule.csv # Результат (заполненный график) +├── README.md # Документация +└── .continue/ # Система контроля версий +``` + +--- + +## 🚀 Планы по улучшению проекта + +### 📌 Общее описание плана + +Данный план содержит улучшения для: +1. **Удобства использования** — понятная документация +2. **Модульности** — выделение логических блоков в функции +3. **Гибкости** — поддержка разных форматов экспорта +4. **Тестируемости** — возможность проверки результатов + +--- + +## 📝 Задачи и планы по улучшению + +### ✅ Улучшение 1: Более понятный README.md + +#### 🎯 Цель +Сделать документацию дружелюбной для новых разработчиков и пользователей + +#### 📋 Подзадачи + +- [ ] **2.1.1 — Добавить описание проекта** + - [ ] Краткий абзац о назначении + - [ ] Пример использования + +- [ ] **2.1.2 — Структурировать условия задачи** + - [ ] Сделать списки с маркерами + - [ ] Выделить типы ограничений (жёсткие/мягкие) + +- [ ] **2.1.3 — Обновить секцию "Смены"** + - [ ] Оформить таблицей с временем работы + - [ ] Добавить комментарии для каждого значения + +- [ ] **2.1.4 — Структурировать предпочтения** + - [ ] Сформировать таблицу с операторами и пожеланиями + - [ ] Объяснить типы предпочтений (обязательные/желательные) + +- [ ] **2.1.5 — Добавить секцию "Как это работает"** + - [ ] Краткое описание алгоритма + - [ ] Пример потока выполнения + +- [ ] **2.1.6 — Добавить примеры конфигурации** + - [ ] Пример добавления нового оператора + - [ ] Пример добавления новой смены + +- [ ] **2.1.7 — Добавить секцию "Формат CSV"** + - [ ] Объяснить структуру файла + - [ ] Пример содержимого + +- [ ] **2.1.8 — Добавить секцию "Как запустить"** + - [ ] Команды для запуска скрипта + - [ ] Требования (Python версии и библиотеки) + +- [ ] **2.1.9 — Добавить секцию "Возможные расширения"** + - [ ] Учёт усталости сотрудников + - [ ] Интеграция с календарными данными + - [ ] Поддержка разных форматов экспорта + +- [ ] **2.1.10 — Добавить секцию "FAQ"** + - [ ] Ответы на частые вопросы + - [ ] Что делать, если график не составляется + - [ ] Как обработать конфликт предпочтений + +--- + +### ✅ Улучшение 2: Модульность ограничений + +#### 🎯 Цель +Упростить добавление новых операторов и ограничений + +#### 📋 Подзадачи + +- [ ] **2.2.1 — Создать функцию `add_hard_constraints(operator_name)`** + - [ ] Обрабатывать обязательные дни отдыха + - [ ] Обрабатывать обязательные дни работы + - [ ] Обрабатывать ограничения на непрерывную работу + +- [ ] **2.2.2 — Создать функцию `add_soft_preferences(operator_name)`** + - [ ] Обрабатывать предпочтения по сменам + - [ ] Обрабатывать предпочтения по дням + - [ ] Использовать `AddHint()` для мягких условий + +- [ ] **2.2.3 — Создать функцию `add_global_constraints(model)`** + - [ ] Проверка покрытия всех смен + - [ ] Проверка количества выходных + - [ ] Проверка лимита дней подряд + +- [ ] **2.2.4 — Создать функцию `create_operator_variables(model)`** + - [ ] Генерация переменных для одного оператора + - [ ] Создание булевых переменных для всех смен + +- [ ] **2.2.5 — Переписать `main.py` с использованием новых функций** + - [ ] Вынести цикл по операторам + - [ ] Вынести создание переменных + - [ ] Добавить тестовые операторы в конце + +- [ ] **2.2.6 — Добавить докстринги** + - [ ] Документирование всех функций + - [ ] Описание аргументов + - [ ] Возвращаемых значений + +- [ ] **2.2.7 — Добавить проверки типов** + - [ ] Проверка входных данных + - [ ] Валидация дат и смен + +--- + +### ✅ Улучшение 3: Экспорт результатов + +#### 🎯 Цель +Поддержка различных форматов вывода + +#### 📋 Подзадачи + +- [ ] **2.3.1 — Создать базовый класс `ScheduleExporter`** + - [ ] Интерфейс для методов экспорта + - [ ] Конструктор с параметрами модели + +- [ ] **2.3.2 — Реализовать экспорт в CSV** + - [ ] Метод `export_to_csv(self, filename)` + - [ ] Форматирование заголовков + - [ ] Обработка пустых значений + +- [ ] **2.3.3 — Реализовать экспорт в Excel (.xlsx)** + - [ ] Использование `pandas` + - [ ] Сохранение стилей (опционально) + +- [ ] **2.3.4 — Реализовать экспорт в HTML-таблицу** + - [ ] Создание интерактивной таблицы + - [ ] Добавление календаря + - [ ] Подсветка выходных + +- [ ] **2.3.5 — Добавить вывод в консоль (Pretty Print)** + - [ ] Отформатированный вывод в терминал + - [ ] Цветовое кодирование (опционально) + +- [ ] **2.3.6 — Создать класс `UIExporter` (для будущих веб-интерфейсов)** + - [ ] Генерация JSON для frontend + - [ ] REST API endpoints (будущее) + +- [ ] **2.3.7 — Добавить методы конфигурации** + - [ ] Выбор формата по умолчанию + - [ ] Настройки кодировки + - [ ] Дополнительные столбцы (например, время смены) + +- [ ] **2.3.8 — Обновить `main.py` с использованием экспортера** + - [ ] Вынести логику записи в `main.py` + - [ ] Создать экземпляр `ScheduleExporter` + - [ ] Вызвать нужный метод экспорта + +- [ ] **2.3.9 — Добавить тесты для экспортеров** + - [ ] Проверка правильности CSV + - [ ] Проверка форматирования Excel + - [ ] Проверка HTML валидности + +--- + +## 📅 Дорожная карта (Roadmap) + +### Этап 1: Фундамент (Неделя 1) +- [ ] Обновление README.md (подзадачи 2.1.*) +- [ ] Добавление докстрингов и комментариев в код + +### Этап 2: Модульность (Неделя 2) +- [ ] Создание функций ограничений (подзадачи 2.2.1–2.2.4) +- [ ] Переписывание `main.py` +- [ ] Тестирование модульных функций + +### Этап 3: Экспорт (Неделя 3) +- [ ] Разработка базового класса экспортера (2.3.1–2.3.5) +- [ ] Реализация Excel и HTML +- [ ] Интеграция в `main.py` + +### Этап 4: Документация и тесты (Неделя 4) +- [ ] Написание примеров в README +- [ ] Создание секции FAQ +- [ ] Написание unit-тестов +- [ ] Проверка всех форматов экспорта + +--- + +## 🛠️ Технические требования + +- **Python**: 3.8+ +- **Библиотеки**: + - `ortools` (CP-SAT) + - `pandas` (для Excel) + - `jinja2` (для HTML) + - `openpyxl` (для стилей Excel) + +--- + +## 📝 Примечание + +Этот план можно выполнять итеративно. Можно начать с улучшения README.md, затем перейти к модульности, и в конце добавить новые форматы экспорта. + # ИИ Промпт Нужно назначить операторов на смены