Как создать приложение для учёта времени: таймеры, табели и отчёты
Приложение для учёта времени фиксирует, кто над чем работал, сколько времени это заняло и можно ли выставить это время к оплате. Чтобы его создать, нужны клиенты и проекты, к которым привязывается время, таймер, который переживает закрытие вкладки браузера, способ добавлять и исправлять записи вручную, недельный табель и отчёты, которые превращают сырые записи в итоги. ИИ-конструктор приложений может выдать рабочую первую версию по одному понятному промпту. Решения, которые важны, касаются правил: округления, того, кто может что редактировать, когда неделя блокируется и что считается оплачиваемым.
Решите, для чего вы учитываете время
Одно и то же приложение выглядит по-разному в зависимости от причины:
- Выставление счетов клиентам. Часы по клиенту, ставка для человека или проекта и чистый экспорт для счетов. Важнее всего точность и журнал изменений.
- Зарплата почасовым сотрудникам. Отметки прихода и ухода, перерывы, правила сверхурочных и подпись руководителя. Действуют местные трудовые нормы, поэтому проверьте, какие записи вы обязаны хранить.
- Понимание, куда уходит время. Личная или командная аналитика, сравнение оценок и фактических часов. Скорость ввода важнее, чем потоки согласования.
Выберите одну главную задачу для первой версии. Таймер и общая логика будут общими у трекера фрилансера для выставления счетов и у смены на складе, а вот почти всё остальное — разное.
Что нужно приложению
Данные
| Таблица | Ключевые поля |
|---|---|
| Клиенты | Название, ставка по умолчанию за час, активен да/нет |
| Проекты | Клиент, название, бюджет в часах (необязательно), оплачиваемый по умолчанию да/нет |
| Задачи или категории | Проект, название (дизайн, встречи, поддержка) — сначала необязательно |
| Записи времени | Человек, проект, задача, время начала, время окончания, длительность, заметка, оплачиваемая да/нет, статус (черновик, отправлено, утверждено), выставлено в счёт да/нет |
| Люди | Имя, email, роль, стоимость или ставка для клиента |
Храните время начала и окончания в каждой записи и вычисляйте длительность из них. Записи, введённые как «2 ч 15 мин» без времени, могут хранить только длительность, но обязательно с датой.
Страницы
- Таймер и сегодня: большая кнопка запуска и остановки, выбор проекта и записи за сегодня под ней.
- Вид недели: сетка, где проекты стоят строками, а дни — столбцами, и люди вводят часы прямо в ячейки. Многие предпочитают это таймерам.
- Отчёты: часы по клиентам, проектам и людям за период, с разделением на оплачиваемые и неоплачиваемые, и экспорт в CSV.
- Админка: управление клиентами, проектами, людьми и ставками.
Права доступа
Запишите до начала сборки, кто что может делать:
- Люди видят и редактируют свои записи.
- Руководители видят записи своей команды и утверждают недели.
- Только администраторы меняют ставки, и желательно, чтобы только они вообще их видели.
- Никто не редактирует запись после утверждения или выставления в счёт, если администратор не открыл её снова.
Последнее правило и делает отчёты надёжными. Наше руководство по добавлению входа в приложение описывает часть про вход, а управление доступом на основе ролей — роли.
Решения и компромиссы
Таймер, ручной ввод или оба
Таймеры точны, когда люди не забывают их запускать, а это не всегда так. Ручной ввод быстр для тех, кто заполняет неделю в пятницу. Большинству команд нужны оба варианта и возможность исправить запись таймера постфактум. Если делать только один, делайте сетку недели: она проще и покрывает случай «забыл запустить».
Где живёт запущенный таймер
Таймер, который отсчитывает время в браузере, теряет всё при закрытии вкладки. Сохраняйте время старта в базу данных, когда человек нажимает «старт», и показывайте прошедшее время, вычитая его из текущего. Тогда таймер продолжает работать после обновления страницы, на другом ноутбуке или телефоне. Решите, может ли один человек вести два таймера одновременно. Обычно ответ «нет»: запуск нового останавливает старый.
Округление
Частые правила — округлять каждую запись вверх до ближайших 6, 15 или 30 минут. Храните точное время в базе данных и применяйте округление только в отчётах и счетах. Показывайте оба значения в отчётах, чтобы никто не удивился.
Блокировка и согласование
Без блокировки часы прошлого месяца могут измениться уже после выставления счёта. Простая модель: люди отправляют неделю, руководитель её утверждает, и утверждённые записи становятся доступными только для чтения. Если вы выставляете счета из приложения, помечайте записи как выставленные, чтобы их нельзя было выставить дважды.
Часовые пояса и полночь
Храните время в UTC и показывайте его в часовом поясе человека. Решите, к какому дню относится запись, которая идёт с 23:00 до 01:00. Обычно её относят к дню начала.
Первый промпт, который работает
Создай приложение для учёта времени для студии дизайна из шести человек. Данные: клиенты (название, почасовая ставка), проекты (клиент, название, бюджет часов) и записи времени (человек, проект, начало, конец, заметка, оплачиваемое да/нет, статус черновик/отправлено/утверждено). Страницы: «Сегодня» с таймером запуска и остановки и выбором проекта, который сохраняет время старта в базу данных, чтобы таймер переживал обновление страницы; «Неделя» с проектами в строках, днями с понедельника по воскресенье в столбцах, где можно вводить часы прямо в ячейки; «Отчёты» с часами по клиентам, проектам и людям за период, с разделением на оплачиваемые и неоплачиваемые и экспортом в CSV; и «Админка» для клиентов, проектов и людей. У одного человека может идти только один таймер. Утверждённые записи нельзя редактировать. Храни время в UTC и показывай его в часовом поясе пользователя. Чистый, быстрый дизайн, удобный с клавиатуры.
В промпте названы таблицы, страницы, поведение таймера и правило блокировки — то, что ИИ иначе стал бы угадывать.
Этапы сборки
- Сначала проекты и ручной ввод. Клиенты, проекты, форма добавления записи и список. Убедитесь, что итоги сходятся.
- Таймер. Запуск, остановка, один запущенный таймер на человека, сохранённое время старта. Проверьте: запустите таймер, закройте вкладку и откройте её снова.
- Сетка недели. Ввод часов в ячейку создаёт или обновляет запись.
- Вход и роли. Добавьте их до того, как пользоваться будут реальные люди, чтобы никто случайно не увидел ставки или чужие записи.
- Отправка и утверждение. Еженедельная отправка, утверждение руководителем, доступ только для чтения после утверждения.
- Отчёты и экспорт. Период, группировка, разделение на оплачиваемые часы, CSV.
- Ставки и подключение к выставлению счетов, если вы выставляете счета клиентам. Создание счетов держите отдельным шагом или приложением; см. как создать приложение для выставления счетов.
- Проверьте крайние случаи. Запись через полночь, неделя перехода на летнее время, два таймера, запущенные с двух устройств, редактирование утверждённой записи.
Типичные ошибки
- Учитывать время только в браузере. Работает в демо и теряет часы в реальном использовании.
- Округлять сохранённые значения. Точное время потом уже не вернуть.
- Нет блокировки утверждённых недель. Отчёты перестают совпадать со счетами.
- Все видят ставки всех. Скрывайте ставки по роли с самого начала.
- Слишком много обязательных полей. Если учёт времени занимает больше нескольких секунд, люди перестают его вести, и данные превращаются в вымысел. Сначала сделайте задачу и заметку необязательными.
- Строить полноценный менеджер проектов внутри трекера. Держите проекты простыми метками. Если нужны задачи, доски и дедлайны, это инструмент управления проектами — отдельная сборка.
Когда лучше готовый трекер
Если вашей команде нужны таймер, недельный вид и отчёты, специализированные продукты для учёта времени уже делают это хорошо. Они также дают то, на что самой сборке уйдёт много сил: приложения для компьютера и телефона, определение простоя, интеграции с календарём и инструментами, напоминания о заполнении табеля. Для почасовой зарплаты инструмент, созданный для этого, аккуратнее обработает перерывы, сверхурочные и хранение записей, чем первая версия собственного приложения.
Своё приложение стоит делать, когда ваши правила не вписываются в готовые решения, когда вы хотите связать часы с данными, которые уже ведёте (работами, заказ-нарядами, абонентскими платежами, счетами), когда оплата за место для большой команды становится дорогой или когда учёт времени — часть большого внутреннего инструмента. Наша статья о выборе между собственной разработкой и покупкой ПО разбирает этот компромисс, а если ваши часы сейчас живут в общей таблице, см. как превратить таблицу в приложение.
Как это сделать в Mythex
В Mythex вы описываете трекер в чате, а агент строит его в живом превью. Когда записям нужно сохраняться, добавляется выделенная база данных Postgres; вы можете попросить об этом прямо или ввести /database. В сценарии использования внутреннего инструмента в документации предлагается выбрать один болезненный шаг для первой версии, и здесь это подходит: начните с записей и сетки недели, потом добавьте таймеры и согласование.
Вход для вашей команды вы добавляете собственным подходом к аутентификации (рецепт добавления входа). Аккаунты Mythex предназначены для людей, которые создают приложение, а не для тех, кто им пользуется. Когда основной сценарий заработает, команда /test заставит агента пройти по превью (запустить таймер, добавить запись, построить отчёт) и сообщить, что сломалось. Для визуальной отправной точки посмотрите шаблоны приложений.
Вопросы
Какие функции нужны приложению для учёта времени?
Список клиентов и проектов, таймер запуска и остановки, способ добавить или исправить записи вручную, недельный табель и отчёт по часам на проект и человека. Согласование, почасовые ставки и экспорт — следующие шаги.
Как таймер не теряет время, если браузер закрылся?
Сохраняйте время старта в базу данных в момент запуска таймера и вычисляйте текущую длительность от этого сохранённого времени. Тогда закрытие вкладки, обновление страницы или переход на другое устройство ничего не сломает.
Нужно ли округлять время?
Храните точное время начала и окончания и применяйте округление только в отчётах и счетах. Так вы сможете позже изменить правило округления, не переписывая историю.
Стоит ли создавать собственный трекер времени?
Обычно только если ваши правила необычны или вы хотите связать часы с другими данными, которые уже ведёте, например с работами, клиентами или счетами. Для простых таймеров и отчётов готовый трекер дешевле и быстрее.