Files
OperatorSchedule/PLAN.md
ki.sagidullin 5d2b665fa6 Выполнены этапы 2, 3, 4
Дополнен план работ этапом 7 (покрытие тестами)
2026-04-07 00:59:57 +05:00

137 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📋 ПЛАН РАБОТ: Модульность конфигурации
## Цель
Перенести все константы (настройки) в отдельный файл `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:3020: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`
- Полноценный набор тестов для всех компонентов