28 апр. 2025 г.·7 мин

Табель учёта времени с правилами сверхурочных: недельная подача и утверждения

Создайте приложение для табелей с правилами сверхурочных: недельная подача, утверждение менеджером и чистый экспорт утверждённых часов в payroll.

Табель учёта времени с правилами сверхурочных: недельная подача и утверждения

Что должно решать это приложение для табелей

Приложение для учёта рабочего времени с правилами сверхурочной работы не столько про отслеживание часов, сколько про предотвращение путаницы, снижение ошибок в выплатах и обеспечение единого понятного процесса для всех.

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

Сверхурочные — это место, где рождаются споры. Если правило непоследовательно (или написано так, что люди не понимают), двое сотрудников с одинаковым графиком могут получить разную оплату. Даже при добросовестном поведении неясные правила создают переработку: пересчёты, ретро-правки и неловкие разговоры.

Утверждения — это защитный шлюз перед тем, как деньги начнутся двигаться. Шаг подтверждения менеджером утверждает, что неделя завершена, коды задач или проектов (если они используются) имеют смысл, и сверхурочные обоснованы. Это также создаёт явный момент «это финально», чтобы бухгалтерия не брала числа из черновика в процессе редактирования.

Недельная подача должна стать простой привычкой: все работают в определённой рабочей неделе (например, пн–вс), сдают до установленного дедлайна (например, понедельник, 10:00), и получают напоминания перед сроком. После подачи правки либо блокируются, либо требуют повторного утверждения, а статус должен быть очевиден (Draft, Submitted, Approved, Rejected).

Ключевые требования и границы

Такое приложение работает только если все заранее договорились о базовых правилах: когда люди сдают, кто и что может менять и что считается сверхурочным. Если границы не задать сразу, приложение превратится в еженедельную дискуссию.

Начните с ритма подачи. Недельная подача упрощает процесс для большинства команд: люди вносят время в течение недели, а потом сдают раз в неделю. Ключевая граница — разрешать ли правки после отправки. Распространённое правило: записи остаются редактируемыми до нажатия кнопки Submit.

Правила сверхурочных должны быть однозначными. Решите, триггерят ли сверхурочные ежедневные лимиты (например, свыше 8 часов в день), недельные лимиты (свыше 40 часов в неделю) или оба варианта. Если применяются оба, укажите приоритет, чтобы не считать сверхурочные дважды.

Утверждение менеджера должно быть коротким циклом и быстрым в использовании: подтвердить (часы становятся финальными), вернуть на доработку (сотрудник правит и повторно отправляет) или отклонить (сотрудник исправляет и повторно отправляет).

После утверждения заблокируйте период. Блокировка предотвращает правки в последний момент и сохраняет консистентность для payroll. Если нужны исправления, используйте действие «разблокировать с указанием причины», которое фиксирует, кто и зачем разблокировал.

Экспорт в payroll должен включать только утверждённые часы. Это жёсткая граница: всё, что не утверждено, остаётся вне экспорта, даже если выглядит завершённым.

Данные, которые нужно сохранять (без усложнения)

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

Начните с ролей. Большинству команд нужны три роли: сотрудники, которые вводят время; менеджеры, которые утверждают; и payroll (или админ), который может экспортировать и управлять настройками. Сделайте права простыми, чтобы люди не блокировались.

Минимальные записи для хранения

Думайте в трёх слоях: люди, недельный табель и отдельные записи времени.

Храните базовые данные о каждом человеке (имя, идентификатор сотрудника или email, роль, менеджер и команда или центры затрат). Для каждого табеля храните владельца, дату начала недели, timezone, используемую для этой недели, и статус (Draft, Submitted, Approved, Rejected). Для каждой записи — дату, время начала, время окончания, длительность перерыва в минутах, проект или задача и короткая заметка.

Также понадобятся настройки календаря: первый день недели (пн или вс) и timezone для правил. При необходимости бухгалтерии можно добавить опциональный контекст — местоположение или департамент.

Поля для утверждений и аудита, которые пригодятся

Утверждения — это место споров, поэтому ведите небольшой, но понятный аудит:

  • Submitted at, submitted by
  • Approved at, approved by
  • Rejected at, rejected by, rejection reason
  • Last edited at, last edited by
  • Locked flag (чтобы предотвратить правки после утверждения)

Пример: сотрудник в Берлине сдал табель в воскресенье вечером. Если вы храните timezone для этой недели, вы избегаете типичной проблемы, когда время отправки выглядит как понедельник для менеджера в Нью-Йорке.

Если вы сохраните только эти поля, вы сможете запускать правила сверхурочных, направлять на утверждение и экспортировать чистые итоги в payroll, не превращая приложение в сложную HR-систему.

Сформулируйте правила сверхурочных простыми предложениями

Напишите политику простыми предложениями, чтобы любой мог понять. Если вы не можете объяснить правило ясно, приложение создаст сюрпризы в payroll.

Начните с триггера: сверхурочные после 8 часов в день, после 40 часов в неделю или оба условия. Если используются оба, укажите порядок применения. Частый выбор — сначала считать ежедневные сверхурочные, затем применять недельные сверхурочные только к оставшимся регулярным часам.

Будьте конкретны, какие часы считаются рабочими. Неоплачиваемые перерывы меняют всё, поэтому скажите прямо: «Обед — неоплачиваемый и не входит в отработанное время». Если вы округляете время, тоже пропишите: например, «округление каждого входа/выхода до ближайших 5 минут». За месяц мелкие правила округления накапливаются.

Покройте особые дни. Выходные, праздники и время в дороге часто имеют другие правила оплаты. Даже если вы не платите дополнительно, нужно чётко прописать: «Часы в субботу учитываются так же, как будние, если только суммарные часы в неделе не превышают 40».

Примеры предложений политики, которые можно скопировать и адаптировать:

  • «Сверхурочные — это время свыше 8 часов в день.»
  • «Недельные сверхурочные применяются только после 40 регулярных часов, исключая уже учтённые ежедневные сверхурочные.»
  • «Неоплачиваемые перерывы исключаются; оплачиваемые перерывы включаются.»
  • «Часы в праздники оплачиваются по ставке 1.5x и не учитываются в недельных сверхурочных.»
  • «Время поездки между рабочими площадками засчитывается; дорога от дома до работы не засчитывается.»

Когда эти предложения согласованы, реализация логики превращается в задачу переводимости правил в вычисления, а не в предмет спора.

Пошагово: рабочий процесс недельной подачи

Проведите 2–4 недельный пилот
Запуститесь с одной командой, одной политикой и отладьте процесс после реального использования.
Запустить пилот

Недельный поток работает лучше, когда все знают, что считается «этой неделей», и когда её нужно сдать. Выберите один день начала недели (обычно понедельник) и явный дедлайн (например, понедельник 10:00 по часовому поясу сотрудника). Поздняя подача должна быть возможна, но видима в системе.

1) Установите период недели и дедлайн

Определите неделю как фиксированный диапазон дат и сохраните это в табеле. Это избавит от путаницы, когда кто-то открывает приложение посреди недели или в поездке. Включите поле статуса с самого начала (Draft, Submitted, Approved, Rejected).

2) Сделайте экран табеля сотрудника (добавление/редактирование записей)

Сделайте редактирование простым: дата, время начала, время окончания (или общее количество часов), время перерыва, проект или код затрат (если нужно) и короткая заметка. Позвольте сотрудникам копировать запись за вчера и править её — это сокращает усилия за неделю.

3) Показывайте автоматические итоги (регулярные vs сверхурочные)

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

Если обязательные поля отсутствуют, показывайте явное предупреждение, а не давайте искаженную картину итогов.

4) Отправка и блокировка недели

Кнопка Submit должна делать три вещи: валидировать записи (нет отрицательных интервалов, нет пересечений, обязательные заметки заполнены), менять статус на Submitted и блокировать редактирование. Если нужна правка, возвращайте в Draft (обычно через действие менеджера «на доработку» или отклонение).

5) Уведомьте менеджера и покажите очередь ожидания

После отправки менеджеру нужна простая очередь: имя сотрудника, диапазон недели, всего часов, отмеченные проблемы (например, отсутствующие заметки) и быстрый экран для обзора. Здесь также должны приходить автоматические уведомления о переходе в статус Submitted.

Пошагово: поток утверждения менеджером

Автоматизируйте еженедельные напоминания
Отправляйте напоминания о дедлайне по электронной почте, SMS или Telegram, когда недели близки к сдаче.
Настроить напоминания

Менеджер должен открыть один экран и сразу увидеть, что требует внимания. Покажите короткую очередь отправленных недель, с именем сотрудника, диапазоном недели, общими и сверхурочными часами и индикатором заметок. Это помогает менеджерам выявлять проблемы без кликанья в каждый день.

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

  • Approve: блокирует неделю и помечает готовой к экспорту в payroll.
  • Send back: возвращает сотруднику с обязательным комментарием.
  • Reject: используется в случаях нарушения политики (отсутствие работы, неверный проект, подозрение на дубликат).
  • Delegate: передаёт полномочия резервному согласующему на время отсутствия менеджера.

Комментарии важны. Требуйте короткую причину для send-back и reject и сохраняйте её в записи, чтобы сотрудник точно знал, что исправлять.

Чётко пропишите, что можно менять после каждого решения. После send-back или reject сотрудник может править записи и заметки, а затем повторно отправить. После approve правки по умолчанию должны блокироваться. Если вы позволяете изменения, используйте действие «reopen week», которое запускает новый цикл утверждения (и при необходимости — второе утверждение).

Планируйте отсутствие людей. Назначьте резервного согласующего для команды (или для сотрудника) и разрешите HR или админу переназначать утверждения на время отпусков.

Ведите аудит: кто отправил, кто утвердил (или делегировал), временные метки и простой журнал изменений (какое поле и когда изменилось).

Логика расчёта сверхурочных и крайние случаи

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

Начните с определения, откуда вы считаете: по дневным суммам, по недельным суммам или по обоим. Многие политики считают первые 8 часов в день регулярными, а всё, что сверх — сверхурочными. Другие смотрят только на недельный итог (например, всё свыше 40 часов). Если вы используете оба правила, задайте порядок, чтобы не считать один и тот же период дважды. Практичный подход: сначала считать ежедневные сверхурочные, затем применять недельные сверхурочные к оставшимся регулярным часам.

Крайние случаи, которые нужно обработать заранее

Эти ситуации обычно ломают итоги или создают споры:

  • Раздельные смены: две записи в один день должны сворачиваться в один дневной итог.
  • Ночные смены: храните начало и конец как полные date-time значения, а не только время суток.
  • Отсутствует время окончания: блокируйте отправку или помечайте запись как незавершённую, чтобы она не раздувала часы.
  • Пересечения и отрицательные интервалы: запрещайте записи, которые перекрываются или завершаются раньше, чем начались.
  • Правила округления: решите, округляете ли вы каждую запись (например, до 5 минут) или только дневные итоги.

Люди быстрее исправляют ошибки, когда видят ясную детализацию. Показывайте для каждого дня регулярные и сверхурочные часы, неоплачиваемые перерывы, а затем недельную сводку. Если что-то выглядит странно, выделяйте конкретную запись, которая вызывает проблему (например: «Пересекается с 14:00–16:00»).

Держите вычисления одинаковыми везде. Повторно используйте одну и ту же логику сверхурочных в экране сотрудника, в виде менеджера, в отчётах и в экспорте для payroll.

Экспорт утверждённых часов в payroll

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

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

Согласуйте формат экспорта. CSV распространён, потому что большинство систем payroll его понимают, но главное — список полей и точные имена колонок. Если payroll требует колонку с именем EmployeeID, соблюдайте это точно.

Практичный файл экспорта обычно содержит идентификатор сотрудника (не только имя), дату окончания недели (или дату начала и конца), регулярные и сверхурочные часы в отдельных колонках, код центра затрат или проекта (если вы распределяете труд), и метку времени утверждения с идентификатором утвердившего.

Экспортируйте только полностью утверждённые недели. Рассматривайте утверждение как шлюз: без утверждения — без экспорта.

Исправления — это то, где команды застревают. Чистый подход — не править экспортированную запись на месте. Вместо этого создавайте корректирующую запись, которую бухгалтерия может импортировать как дельту. Например, если неделя 42 была экспортирована с 5.0 сверхурочными часами, но должна была быть 4.0, создайте корректировку -1.0 сверхурочных часов, привязанную к исходной неделе и сотруднику.

Храните экспорты пакетами, чтобы бухгалтерия могла безопасно их повторно запускать. Давайте каждому пакету export ID, дату и время генерации и точные фильтры (например, «Approved weeks ending 2026-01-18»). Если payroll импортирует один и тот же пакет дважды, export ID поможет обнаружить дубли.

Распространённые ошибки и подводные камни

Такие приложения чаще всего ломаются по простым причинам: неясные финальные состояния, неясные временные границы и экспорты, которые не соответствуют ожиданиям payroll.

Первый капкан — позволять править время после утверждения недели. Это выглядит гибко, но подрывает доверие к числам. Рассматривайте статус Approved как заблокированный. Если действительно нужна поправка, требуйте запрос на корректировку, который снова открывает неделю и оставляет аудиторский след того, что и почему изменилось.

Изменение правил сверхурочных в середине периода — ещё один источник споров. Если политика меняется в среду, документируйте дату вступления в силу и версию, используемую для каждой недели. Иначе два человека с одинаковыми часами могут получить разные результаты. Даже простая пометка «Policy v2 effective Jan 15» в привязке к неделе предотвращает споры.

Решения по часовым поясам могут тихо испортить итоги. Выберите одно правило и придерживайтесь его: используйте локальный timezone сотрудника или общий timezone компании для payroll. Если ничего не выбрать, ночные смены могут «переместиться» в другой день и изменить ежедневные и недельные суммарные часы.

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

Несколько правил, которые стоит жестко применять:

  • Блокируйте отправленные недели, если только менеджер явно не отправил их на доработку.
  • Держите утверждённые недели заблокированными, за исключением прохода через отслеживаемый поток корректировок.
  • Версионируйте политику по сверхурочным и храните дату вступления в силу.
  • Выберите одно правило по часовым поясам и отображайте его на табеле.
  • Экспортируйте только полностью утверждённые недели (не Submitted, не частично утверждённые).

Быстрый чек-лист перед запуском

Держите опции развёртывания открытыми
Сначала собирайте без кода, но при необходимости получите реальный исходный код для развёртывания где угодно.
Сгенерировать код

Перед тем как кто-то начнёт логировать время, согласуйте настройки, которые решают, кажется ли процесс справедливым и предсказуемым.

Зафиксируйте правила календаря: первый день недели (понедельник vs воскресенье) и дедлайн подачи (например, «подать до понедельника 10:00 за предыдущую неделю»). Пропишите это и продублируйте в интерфейсе, чтобы люди не догадывались.

Напишите политику сверхурочных простыми предложениями, затем протестируйте её на нескольких реальных примерах. Не проверяйте только одну «нормальную» неделю. Попробуйте 3–5 сценариев, включая ночную смену, пропущенный обед и раздельную смену.

Держите проверки развертывания практичными:

  • День начала недели и дедлайн подачи настроены и объявлены.
  • Правила сверхурочных написаны и протестированы на 3–5 примерах.
  • Менеджеры видят итоги и заметки сотрудников до утверждения.
  • Экспорт в payroll содержит только утверждённые данные и воспроизводим.

Обратите особое внимание на блокировки. Submit должен останавливать правки, если только менеджер не вернул на доработку. Approved должен быть по сути неизменяемым, кроме отслеживаемого потока исправлений. Иначе payroll станет движущейся целью.

Сделайте экспорт для payroll предсказуемым. Он должен давать одни и те же числа для одинакового периода. Если повторный запуск экспорта за прошлый месяц меняет результат, приостановите запуск и сначала исправьте это.

Реалистичный пример

Отправьте чистый экспорт для payroll
Экспортируйте только утверждённые часы с нужными колонками для CSV.
Сгенерировать экспорт

Складская команда платит сверхурочные за всё свыше 40 часов в неделе с понедельника по воскресенье, и оплачиваются только утверждённые часы. Каждый работник сдаёт раз в неделю, менеджер должен утвердить до понедельника 12:00.

Джордан работает утреннюю смену. К пятнице у него 38 часов. В субботу он задержался и добавил 6 часов. В воскресенье вечером Джордан проверил неделю, дописал заметку к записи субботы и отправил табель с итогом 44 часа.

В понедельник менеджер проверяет отправку. Приложение показывает простую разбивку: 40 регулярных и 4 сверхурочных часа. Менеджер замечает, что запись за субботу создана после смены и просит уточнить. Джордан видит, что время начала сдвинуто на 30 минут и исправляет.

Поскольку табель уже был отправлен, правка проходит через поток повторной отправки: менеджер отклоняет табель с причиной «Исправьте время начала в субботу и повторно отправьте». Джордан правит запись, отправляет снова, и сверхурочные пересчитываются до 3.5 часов.

Когда менеджер утверждает, payroll получает чистый экспорт за эту неделю: ID сотрудника и имя, даты начала и конца недели, утверждённые регулярные и сверхурочные часы, опциональный код центра затрат или местоположение (Warehouse A), метку времени утверждения и имя утвердившего.

После запуска команда отслеживает несколько простых метрик: поздние отправки (после воскресенья), долю отклонённых (сколько раз менеджеры возвращают табели) и среднее время от отправки до утверждения. Если эти показатели растут, это обычно указывает на неясные правила или недостаток напоминаний.

Следующие шаги и план постепенного запуска

Относитесь к первой версии как к контролируемому тесту, а не к глобальному переключению. Выберите одну пилотную команду с обычным сочетанием регулярных часов и сверхурочных и начните с одной понятной политики сверхурочных. Это ограничит объём обратной связи и позволит доказать процесс от начала до конца.

Проведите пилот 2–4 недельных цикла. Этого достаточно, чтобы увидеть, где люди тормозят, где менеджеры запинаются и совпадает ли экспорт с ожиданиями финансовой службы.

Практичный план развёртывания:

  • Пилот с одной командой и одной политикой сверхурочных (на первом этапе пропустите специальные случаи).
  • Соберите пять самых частых вопросов и исправьте экраны или формулировки, которые их вызвали.
  • Зафиксируйте, кто управляет настройками: кто может обновлять правила сверхурочных, коды оплаты и настройки утверждений.
  • Согласуйте расписание экспорта в payroll (например, каждый понедельник 9:00 после закрытия сроков утверждения).
  • Добавьте интеграцию только тогда, когда ручной экспорт верен в течение двух расчётных периодов.

Небольшие изменения текста в UI убирают много тикетов в поддержку. Держите поток подачи коротким и добавляйте подсказки только там, где люди действительно спотыкаются.

Раннее определите владельца обновлений политики. HR может владеть определениями сверхурочных, payroll — форматами экспорта, менеджеры — утверждениями. Сделайте эти полномочия явными, чтобы доброжелательный админ не поменял настройку в середине расчётного периода.

Если вы хотите собрать это без собственной разработки, AppMaster (appmaster.io) — один из вариантов для прототипирования и доставки с визуальными моделями данных, drag-and-drop рабочими процессами для подачи и утверждений и конструкторами UI для web/mobile. Начните с минимального рабочего потока и расширяйте только после того, как пилот подтвердит логику сверхурочных и экспорт payroll.

Легко начать
Создай что-то невероятное

Экспериментируйте с AppMaster с бесплатной подпиской.
Как только вы будете готовы, вы сможете выбрать подходящий платный план.

Попробовать AppMaster