Кто отвечает за проверку времени закрытия операционного дня
Что проверяют
Вопрос из банковских и платёжных проектов. Интервьюер хочет понять, различаете ли вы, кто задаёт правило, а кто его исполняет: время закрытия дня определяет бизнес, проверку делает система, и Go-сервис не должен решать это сам по своим часам. Следом обычно спрашивают, что происходит с платежом, пришедшим в последнюю секунду.
Как отвечать
Разведите ответственность по уровням:
- бизнес-владелец: операционное подразделение или казначейство утверждает регламент, время отсечки (cut-off) по каждому типу операций и календарь рабочих дней с праздниками и переносами;
- система-источник: обычно АБС (автоматизированная банковская система) или отдельный сервис календаря. Именно она объявляет, что день закрыт, и выдаёт текущую операционную дату;
- ваш сервис: не хранит время закрытия константой в коде, а получает его из конфигурации или от источника и применяет одинаково во всех инстансах;
- дежурные и мониторинг: следят, что закрытие прошло, и разбирают «зависшие» операции.
Технически в Go стоит сказать про несколько вещей. Время сравнивается в одной явно заданной зоне, через time.LoadLocation("Europe/Moscow"), а не в локальной зоне контейнера, которая часто оказывается UTC. Отметку времени ставит сервер в момент приёма операции, клиентскому времени верить нельзя. Операционная дата записывается в операцию сразу, а не вычисляется потом из created_at. Часы в коде стоит прятать за интерфейсом вроде Clock с методом Now(), чтобы граничные случаи проверялись тестом, а не ожиданием нужного часа.
Где спотыкаются
Отвечают «за это отвечает бизнес» и на этом останавливаются. Интервьюеру нужна и техническая часть: где хранится правило и кто применяет его в коде.
Сравнивают время в зоне сервера. После переезда в Kubernetes зона контейнера становится UTC, и отсечка сдвигается на три часа без единой ошибки в логах.
Не думают про границу. Операция, принятая в 17:59:59 и проведённая в 18:00:01, должна попасть в тот день, в который её приняли, а для этого дата фиксируется при приёме и повторно не пересчитывается.