Наметили план работ

This commit is contained in:
ki.sagidullin
2026-04-04 21:56:57 +05:00
parent b7e4691efb
commit 018e2a860e

213
README.md
View File

@@ -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.12.2.4)
- [ ] Переписывание `main.py`
- [ ] Тестирование модульных функций
### Этап 3: Экспорт (Неделя 3)
- [ ] Разработка базового класса экспортера (2.3.12.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, затем перейти к модульности, и в конце добавить новые форматы экспорта.
# ИИ Промпт # ИИ Промпт
Нужно назначить операторов на смены Нужно назначить операторов на смены