- Статус работы
- Реализованный проект
- Задача
- Собирать расходы и рабочее время по проектам через Telegram, сохраняя проверяемые записи и единый порядок учёта.
- Результат и границы
- Команде передан бот для учёта расходов и времени: роли пользователей, проверка записей и обмен с Google Таблицами. Для расчёта стоимости труда нужно внести согласованные ставки и коэффициенты.
Как устроен процесс
- Принять сообщение
Получить текст или голосовую запись от участника.
- Показать черновик
Уточнить проект, категорию, сумму или время.
- Подтвердить запись
Сохранить проверенные данные в основной базе.
- Передать в таблицы
Доставить сведения через очередь с повтором при сбое.
- Telegram
- TypeScript / grammY
- PostgreSQL
- Google Таблицы
- Распознавание голосовых сообщений
Учёт там, где уже работает команда
В проектной работе расходы и часы возникают в течение дня: закупка, выезд, выполнение задачи на объекте. Требование позже перенести всё в отдельный интерфейс создаёт ещё один шаг. Для проекта подготовлен Telegram-бот, через который участник может сообщить сведения сразу.
От сообщения к подтверждённой записи
Бот принимает текст и голосовые сообщения. После разбора пользователь видит черновик: что распознано, к какому проекту относится запись и какие значения будут сохранены. Ошибку можно исправить до подтверждения.
В системе есть пользователи с разными правами, проекты и категории расходов. Записи хранятся в базе PostgreSQL. Данные передаются в два файла Google Таблиц, где команда использует привычные представления и сводки.
Передача в таблицы отделена от сохранения записи. Для неё используется очередь с повторными попытками. Если внешний сервис временно недоступен, это не должно означать потерю уже подтверждённого расхода.
Пример расхода и рабочего времени
Условный участник сообщает: «Для проекта Север купил крепёж, сумму сейчас уточню». Бот готовит запись расхода, но не придумывает отсутствующее значение. После уточнения пользователь проверяет проект, категорию и сумму, затем подтверждает сохранение.
Запись времени проходит похожую проверку, но хранит другие сведения: участника, проект, дату и длительность. Расход и рабочее время не смешиваются в одну свободную заметку. Это позволяет строить сводки по правилам каждого вида учёта.
Если участник повторно отправляет то же действие после задержки ответа, механизм защиты от повторов помогает не создать дублирующую запись. История обработки нужна для разбора спорных ситуаций, а не только для технических логов.
Что передано
Команде переданы бот и инструкции по работе с ним. Реализованы учёт расходов и времени, роли пользователей, подтверждение записей и обмен с таблицами.
Чтобы рассчитывать стоимость рабочего времени, нужно внести согласованные ставки и коэффициенты заказчика. До этого бот можно использовать для учёта часов, а финансовые итоги требуют настройки.
Проверка учёта и обмена с таблицами
При проверке важны обычная запись, исправление черновика, повторное действие и недоступность таблиц. После восстановления связи подтверждённые сведения должны доставляться в согласованном порядке без повторного ввода пользователем.
Для расчётных сводок проверяются ставки, коэффициенты и исторические значения. Изменение текущих настроек не должно незаметно переписывать закрытые периоды. Рабочая инструкция помогает команде отличать ошибку ввода от задержки синхронизации.
Границы решения
Бот решает конкретную задачу учёта, а не заменяет бухгалтерию и все системы управления проектами. Финансовые итоги требуют корректных исходных данных.
Для более широкого связывания задач, этапов и нагрузки есть отдельный сценарий рабочего пространства команды.
Вопросы по этой задаче
Если Google Таблицы недоступны, запись потеряется?
Сначала запись сохраняется в основной базе. Для передачи в таблицы используется очередь с повторными попытками, поэтому временная ошибка доставки не требует вводить расход заново.
Как бот рассчитывает стоимость рабочего времени?
По внесённым ставкам и коэффициентам. Эти значения задаёт заказчик; перед использованием финансовой сводки их нужно проверить.
