Что ломается при переносе одного урока: три инварианта расписания репетитора
Я основатель UrokDesk. Самая опасная фраза для расписания звучит совершенно буднично: «Давайте на этой неделе не в среду, а в четверг». В календаре нужно поменять одну дату. Но за ней уже стоят правило повтора, домашняя работа и расчёты. Если они живут отдельно, маленький перенос обнаруживает сразу несколько разных версий одного и того же урока.
Когда мы проектировали этот сценарий, я сформулировал три инварианта. Это не список функций, а условия, которые должны оставаться истинными после любого переноса.
1. Один перенос не переписывает всю серию
У повторяющегося расписания есть правило — например, каждый вторник в 15:00 — и есть конкретные занятия. Перенос одного из них должен стать исключением, а остальные вторники остаться на месте. Если же меняется время всех будущих встреч, это другое действие, которое нужно выбрать явно.
Иначе календарь начинает задваиваться: старый ряд занятий остаётся, рядом появляется новый, а через месяц уже непонятно, какой из них считать настоящим. Поэтому первый вопрос при редактировании — не «на какую дату перенести», а «какую область мы меняем: один урок, будущую часть серии или всю серию?».
2. Дата меняется, учебный контекст не теряется
Урок — это не только ячейка календаря. У него есть ученик, предмет, цена и связанные действия. После переноса репетитор должен открыть ту же встречу, а ученик — увидеть фактическое время в своём кабинете. Не должно возникать параллельной копии, к которой случайно привязали новое домашнее задание.
При этом перенос даты не обязан автоматически двигать дедлайн ДЗ. Это уже педагогическое решение: иногда задание нужно сдать к новому времени, иногда — по исходному плану. Для меня важна именно эта граница: система сохраняет условие, решение и историю проверки, но не принимает решение за преподавателя.
3. Перенос не создаёт финансового события
Самая неприятная ошибка проявляется не в календаре, а при сверке денег. Будущий запланированный урок сам по себе не должен создавать долг, а смена даты — превращать занятие в проведённое или отменённое. Финансовое последствие появляется после отдельного решения репетитора о статусе урока.
Цена при этом остаётся свойством конкретного занятия. Она может отличаться от обычной ставки, но перенос не должен незаметно заменить её значением по умолчанию. В кабинете ученика или родителя уже показывается результат: баланс, подтверждённые оплаты и остаток абонемента, если репетитор открыл соответствующий доступ. Менять эти данные из родительского кабинета нельзя.
Проверка, которая занимает минуту
После переноса я бы проверил пять вещей: область изменения серии, новую дату и часовой пояс, сохранённую цену, решение по дедлайну ДЗ и одинаковое фактическое время в кабинетах репетитора и ученика. Если каждый пункт требует сверки в другом чате или таблице, проблема не в невнимательности — данные просто не связаны.
Такой сценарий мы собрали в расписании UrokDesk. Но сами три инварианта полезны и без продукта: серия не меняется случайно, контекст не теряется, деньги не выводятся из движения календарной записи.
https://urokdesk.ru/schedule/?utm_source=spark&utm_medium=organic_social&utm_campaign=workspace-for-tutors&utm_content=three-schedule-invariants
Примечание: структуру и редактуру текста мне помог проверить ИИ. Сценарий, выводы и проверка интерфейса — мои; скриншоты сделаны из текущей версии UrokDesk с демонстрационными данными. 
