Наметили план работ
This commit is contained in:
213
README.md
213
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, затем перейти к модульности, и в конце добавить новые форматы экспорта.
|
||||
|
||||
# ИИ Промпт
|
||||
Нужно назначить операторов на смены
|
||||
|
||||
|
||||
Reference in New Issue
Block a user