# 📋 ПЛАН РАБОТ: Модульность конфигурации ## Цель Перенести все константы (настройки) в отдельный файл `config.py` для удобства редактирования человеком, не знакомым с Python. --- ## Этап 1: Создание файла конфигурации **Файл:** `config.py` **Что перенести:** - **Настройки дня** - Год (`year = 2026`) - Месяц (`month = 4`) - **Смены (`SHIFTS`)** - С 06:00 до 14:30 (смена 0) - С 08:00 до 16:30 (смена 1) - С 11:30 до 20:00 (смена 2) - С 12:30 до 21:00 (смена 3) - **Операторы (`OPERATORS`)** - Иванов - Алексеев - Сидоров - Козобородов - Трудяшкина - Петрова - **Предпочтения операторов (`OPERATOR_PREFERENCES`)** - Иванов: 10, 13 апреля - Алексеев: понедельники - Сидоров: 25, 26 апреля - Козобородов: смена 2 (11:30–20:00) - Трудяшкина: 4 апреля - Петрова: 8, 29 апреля **Как редактировать:** 1. Откройте `config.py` в текстовом редакторе 2. Изменяйте значения в квадратных скобках или кавычках 3. Для добавления/удаления дней используйте списки `[25, 26]` 4. Сохраните файл --- ## Этап 2: Обновление `models.py` **Что делать:** - Удалить все константы из `models.py` - Добавить импорт: `from config import *` - Удалить определения `SHIFTS`, `OPERATORS`, `OPERATOR_PREFERENCES` --- ## Этап 3: Обновление `main.py` **Что делать:** - Удалить встроенную генерацию дат - Использовать импорт из `config.py` - Добавить вывод в CSV --- ## Этап 4: Создание класса предпочтений операторов **Файл:** `models.py` (или отдельный файл `preferences.py`) **Что сделать:** - Создать класс `OperatorPreferences` для конструирования и управления предпочтениями операторов. - Реализовать цепочку методов (builder pattern) for удобного создания предпочтений. - Поддержать следующие типы предпочтений: - Желаемый рабочий день (конкретные даты месяца) - Желаемая смена (индекс смены 0-3) - Желаемый день недели для работы (понедельник, вторник, ...) - Желаемый выходной (конкретные даты месяца) - Реализовать метод `__str__` для отладки. - Обеспечить экспорт предпочтений в формат, пригодный для `config.py`. **Требования к реализации:** - Класс должен позволять конструировать предпочтения через цепочку методов. - Поддерживать три типа предпочтений (как указано выше). - Экспортировать предпочтения в формат, пригодный для `config.py`. - Поддерживать метод `__str__` для отладки. --- ## Этап 5: Создание документации **Файл:** `USER_GUIDE.md` **Что включить:** - Как изменить даты - Как добавить/удалить операторов - Как изменить смены - Как добавить новые предпочтения --- ## Этап 6: Тестирование **Проверить:** 1. Запуск `python main.py` 2. Корректное считывание дат из `config.py` 3. Генерация расписания 4. Вывод в CSV 5. Корректная работа класса `OperatorPreferences` 6. Экспорт предпочтений в `config.py` --- ## Этап 7: Написание тестов **Файл:** `tests/test_all.py` **Что сделать:** - Создать тесты для всех модулей проекта - Использовать pytest для запуска тестов - Проверить корректность работы всех компонентов - Добавить тесты для edge-кейсов **Структура тестов:** - `test_config.py` - тесты для конфигурации - `test_models.py` - тесты для моделей и предпочтений - `test_main.py` - тесты для основного скрипта - `test_integration.py` - интеграционные тесты --- ## Результат - Конфигурация в одном файле `config.py` - Простое редактирование без знания Python - Четкая документация в `USER_GUIDE.md` - Гибкая система предпочтений через класс `OperatorPreferences` - Полноценный набор тестов для всех компонентов