Главная/ Проекты/ Локальный часовой пояс в заявках на трансфер «Матч ТВ»
Часовые пояса UTC Регламент по времени Транспортное обеспечение

Локальный часовой пояс в заявках на трансфер для «Матч ТВ»

Доработали систему М!⁠Трансфер, которой «Матч ТВ» пользуется по всей России: дата и время заявки теперь показываются по часовому поясу адреса, а не по московскому времени на экране пользователя.

  • Меньше ручных пересчётов времени — отправление и прибытие показываются в часовом поясе адреса заявки
  • Заявки, которые сразу проходят по регламенту — система проверяет московское время до сохранения
  • Единая логика на всю страну — работает во всех 11 часовых поясах России
  • Часть системы М!⁠Трансфер — платформы, которой пользуются 2 000+ сотрудников «Матч ТВ»
скриншот: визард заявки — локальное время + предупреждение о регламенте
Клиент
ОтрасльСМИ, телевизионная индустрия
Масштаб2 000+ сотрудников пользуются системой М!⁠Трансфер
ГеографияВся Россия — 11 часовых поясов, от Калининграда до Владивостока
ФорматДоработка веб-интерфейса заявок и маршрутов действующей системы М!⁠Трансфер
02
Контекст

Клиент и исходная ситуация

«Матч ТВ» — федеральный спортивный телеканал, сотрудники которого работают по всей России. Служебный транспорт они заказывают через систему М!⁠Трансфер, которую GROTEM создала для телеканала в 2021–2023 годах (подробнее — в первом кейсе). Доработку с часовыми поясами команда сделала на следующем этапе развития системы — требования согласовали с заказчиком в 2025 году.

ОтрасльСМИ, телевизионная индустрия
Масштаб бизнеса2 000+ сотрудников пользуются системой М!⁠Трансфер по всей России
ГеографияВся Россия — 11 часовых поясов, от Калининграда до Владивостока
Формат доработкиВеб-интерфейс заявок и маршрутов действующей системы М!⁠Трансфер — без мобильного приложения

Что происходило до начала проекта

  • Время везде отображалось по московскому часовому поясу, независимо от того, где на самом деле находился пользователь.
  • Сотрудник во Владивостоке видел 9:00 по своему местному времени как московское и вручную пересчитывал разницу в 7 часов — с высоким риском ошибиться.
  • Заявка могла не пройти по регламенту, потому что регламентное время по МСК уже истекло, а по местному времени ещё нет, — и пользователь не понимал причину отказа.
  • В разделе «Маршруты» координаторам и диспетчерам приходилось держать в уме, на сколько часов сдвигать время каждой точки.
  • Фильтр по дате в «Заявках» и «Маршрутах» работал по-разному, и нужные заявки иногда «пропадали» из выборки из-за несовпадения часовых поясов.
скриншот: заявка до доработки — время по МСК
скриншот: обращение из-за путаницы во времени
03
Цели и задачи

Каких результатов хотел достичь клиент

Цель проекта

Избавить пользователей по всей России от ручного пересчёта времени и сделать так, чтобы заявка либо создавалась корректно сразу, либо явно блокировалась — без скрытых ошибок по регламенту.

01

Убрать ручной пересчёт времени

Показывать дату и время отправления и прибытия по часовому поясу адреса заявки, а не по устройству пользователя.

02

Не пропускать невалидные заявки

Проверять регламент по московскому времени до сохранения и блокировать кнопку «Сохранить», если он нарушен.

03

Навести порядок в «Маршрутах»

Применить ту же логику отображения времени и фильтрации, что и в «Заявках».

04

Сделать логику переиспользуемой

Чтобы каждый новый тип заявки автоматически получал корректное отображение времени без доработок под конкретный случай.

04
Решение

Что разработала команда GROTEM

Команда GROTEM разложила доработку по трём точкам, с которыми пользователи работают каждый день: визарду создания заявки, разделу «Маршруты» и разделу «Заявки»/«Лимит такси».

скриншот: визард заявки — локальное время
Визард заявок

Локальное время и предупреждение о регламенте — сразу в форме

В мастере создания и редактирования заявки дата и время отправления и прибытия сразу показываются в часовом поясе адреса. Если введённое время нарушает регламент по Москве, сразу появляется предупреждение «Внимание! Время подачи заявки по московскому времени истекло.», а кнопки «Сохранить» и «Продолжить» становятся неактивными. Исключение — пользователи с правом «Игнорирование регламентов при создании заявки».

  • Визард заявок
  • Локальное время
  • Предупреждение о регламенте
скриншот: раздел «Маршруты» — распределение по времени
Раздел «Маршруты»

Та же логика для координаторов и диспетчеров

На вкладках «Распределение» и «Маршруты» время каждой точки показывается и фильтруется так же, как в «Заявках» — по часовому поясу адреса, а не по Москве. Координаторам больше не нужно самим переводить время точек маршрута.

  • Маршруты
  • Распределение
  • Единая логика
скриншот: «Заявки» и «Лимит такси» — печать и фильтры
Раздел «Заявки» и «Лимит такси»

Понятные подписи и корректная печать

Колонки «Дата и время создания (МСК)» и «Дата и время обновления (МСК)», как и записи в истории заявки, явно подписаны московским временем — чтобы не путать его с локальным временем поездки. Печатные версии заявок и фильтр по дате учитывают часовой пояс адреса так же, как экран.

  • Заявки
  • Лимит такси
  • Печать заявок
05
Сложность

Особенности проекта

Больше всего сложностей давала не сама конвертация времени, а краевые случаи — когда устройство, часовой пояс отправления и часовой пояс прибытия попадали в разные календарные дни, а регламент при этом всегда мерился по Москве.

01
Регламент — всегда по Москве, а не по адресу

Время поездки показывается по-местному, а регламент проверяется по МСК. Заявки принимают до 18:00 по Москве: во Владивостоке в 21:00 по местному в Москве только 14:00, и заявку ещё можно создать. Поэтому восточнее Москвы система допускает даже заявку на время, которое по местным часам уже прошло.

02
Смена календарного дня

Заявка, заведённая в Москве «на завтра», для адреса в другом часовом поясе может по факту приходиться уже на «сегодня» — и наоборот; такие случаи проверяли отдельно для каждого типа заявки.

03
Старые данные без часового пояса

Тысячи заявок и адресов были созданы до доработки и не содержали информацию о часовом поясе; при миграции для них проставили московский часовой пояс по умолчанию, чтобы отображение не «переехало» задним числом.

04
Разные форматы даты на фронте и бэке

Из-за рассинхронизации форматов при каждом сохранении или переключении вкладки время могло незаметно «нарастать» на несколько часов — такие баги ловили только прицельным тестированием по опорным точкам.

06
Инженерная часть

Что было важно реализовать на уровне системы

Решение держится на трёх вещах: где хранится часовой пояс, кто и как его определяет, и кто считает — фронт или бэк.

Часовой пояс хранится в адресе, а не в заявкеВ таблицу адресов (location_point) добавили два поля, time_zone_system_id и time_zone_offset_in_hours; структура самой заявки (transfer_order_point) не менялась, время в ней как хранилось, так и хранится в UTC.
DaData → Windows Timezone ID через NodaTimeDaData возвращает смещение вида «UTC+10» только при поиске адреса; бэкенд разбирает его в целое число часов и через NodaTime, с фильтром по России, сопоставляет с системным идентификатором часового пояса, например Vladivostok Standard Time.
Разделение расчётов между фронтом и бэкомНа Angular считают только быстрое отображение, UTC ± смещение через dayjs; регламент, статус заявки «сегодня/завтра», Excel-экспорт и уведомления считает бэкенд на .NET через NodaTime, чтобы бизнес-правила нельзя было обойти с клиента.
Прагматичное поле-помощникЧисловое смещение хранится отдельным полем специально для фронта: интерфейсу хватает простой арифметики, а системный идентификатор часового пояса остаётся за бизнес-логикой на бэкенде. Это ускорило разработку интерфейса без изменений в архитектуре хранения времени.
Переиспользуемая логикаКонвертация работает одинаково во всех типах заявок и в разделе «Маршруты»; старые заявки, созданные до доработки, не пересчитываются — система различает их по московскому часовому поясу, проставленному по умолчанию при миграции.
Тестирование по опорным точкамКоманда собрала таблицу контрольных городов от Калининграда до Владивостока с временем на устройстве, в Москве и в локации заявки, и прогнала создание и редактирование всех типов заявок в критичные моменты: до и после регламентных 15:00 и 18:00 по Москве и на стыке календарных суток.
07
Результаты

Что получил бизнес

Доработка распространяется на все 11 часовых поясов России и на все типы заявок М!⁠Трансфер: на работу и с работы, на проект, в офис Краснознаменск и лимит такси.

Меньше ошибок

время отправления и прибытия автоматически показывается в часовом поясе адреса, и пользователям вне Москвы больше не нужно вручную пересчитывать разницу

Без нарушений

заявки с нарушенным регламентом не создаются, а пользователь узнаёт о проблеме ещё при вводе даты, а не из отказа

Меньше обращений

типовые вопросы вроде «на какое время ставить заявку» и «почему заявка не создаётся» отпадают вместе с причиной, которая их вызывала

Единые маршруты

координаторы и диспетчеры видят время каждой точки в её локальном часовом поясе на вкладках «Распределение» и «Маршруты»

Точная фильтрация

фильтр по дате в «Заявках» и «Маршрутах» работает одинаково, по времени самой заявки, и заявки больше не «пропадают» из выборки из-за несовпадения поясов

Точная печать

в распечатанной заявке время пунктов отправления и прибытия совпадает с экраном — по часовому поясу каждого адреса

Процесс
До
После
Отображение времени заявки
По московскому времени, независимо от адреса
По часовому поясу адреса отправления/прибытия
Проверка регламента
Пользователь мог ошибиться и узнать об отказе уже после ввода данных
Проверка по МСК идёт сразу при вводе даты, кнопка «Сохранить» блокируется заранее
Раздел «Маршруты»
Своя логика отображения времени, отличная от «Заявок»
Единая логика отображения и фильтрации с разделом «Заявки»
Фильтрация по дате
Могла «терять» заявки из-за разных часовых поясов
Работает по времени заявки одинаково в «Заявках» и «Маршрутах»
  • Меньше ручной работы на всех ролях — сотрудники, координаторы и диспетчеры больше не переводят время в уме.
  • Задел для развития М!⁠Трансфер — новые типы заявок получают корректное время без отдельной доработки; о том, как создавалась сама система, — в первом кейсе.
08
Признание

Награды и публикации

Доработка — часть системы М!⁠Трансфер, которая в 2023 году получила премию Global CIO как лучший ИТ-проект в области кастомной разработки и была отмечена Tagline Awards. Подробнее о наградах — в первом кейсе о системе М!⁠Трансфер.

Global CIO — 2023 Победитель в категории «Лучший проект в области кастомной разработки»
Tagline Awards — 2023 «Лучшее IT-решение, разработка и интеграция»
09
Комментарий

Комментарий команды

“

«Самое сложное было не написать код, а не забыть, что регламент всегда проверяется по Москве, даже когда все остальные даты и время на экране уже локальные. Мы делали доработку так, чтобы логика сама подстраивалась под любой новый тип заявки — и не переписывать её заново при каждом расширении системы».

Мила Причинок
Мила ПричинокРуководитель проекта от GROTEM
10
Обсудим ваш проект

Поможем выбрать оптимальное решение для вашего бизнеса

Разберём задачу, предложим архитектуру решения и оценим сроки реализации — на первой консультации, бесплатно.

  • Покажем релевантный опыт на похожих проектах
  • Сформируем решение с учётом ваших задач и IT-ландшафта
  • Предложим следующие шаги без обязательств

Оставьте заявку на консультацию

Заполните обязательные поля — остальное обсудим в разговоре. Перезвоним или напишем в течение одного рабочего дня

Бесплатно Ответ за 1 рабочий день Без обязательств

Спасибо! Данные отправлены.

Для подписки на рассылку подтвердите почту по ссылке в письме. Если письма нет, проверьте папки «Спам» и «Промоакции».