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

5.4 KiB
Raw Permalink Blame History

📋 ПЛАН РАБОТ: Модульность конфигурации

Цель

Перенести все константы (настройки) в отдельный файл 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
  • Полноценный набор тестов для всех компонентов