Поддержка времени в периоде отчёта (datetime precision) #47

Closed
opened 2026-06-30 09:26:55 +07:00 by artem.kokos · 0 comments
Owner

Контекст

Задачи #44 и #45 предполагают автоматическую фиксацию последнего периода и отправку отчётов. Сейчас период задаётся с точностью до даты. Если отчёт сформирован и отправлен в 12:00, а после этого пользователь продолжает работать, следующий отчёт захватит time entries за весь текущий день — включая те, что уже попали в предыдущий отчёт. Это приведёт к дублированию.

Предложение

Поддерживать период с точностью до даты и времени (datetime) и хранить момент последнего «коммита» в YAML-конфиге (#46).

Структура в конфиге

period:
  precision: datetime  # date | datetime
  last_used:
    from: "2026-06-30T09:00:00"
    to: "2026-06-30T12:00:00"

Режимы

  • precision: date — текущее поведение. last_used округляется до даты, следующий период начинается со следующего дня.
  • precision: datetimelast_used хранится как datetime. Следующий период начинается с точки остановки.

Проблема Redmine API

Redmine time entries фильтруются по spent_on, который, скорее всего, представляет собой дату, а не datetime. Это означает, что на уровне API нельзя запросить записи только после 12:00.

Возможная реализация

  1. Запросить у Redmine все time entries за дату last_used.to и новее.
  2. Локально отсечь записи, у которых время создания или обновления (created_on / updated_on) раньше сохранённого last_used.to.
  3. Записи с более поздним created_on / updated_on включаются в следующий отчёт.

Альтернативы

  • Хранить last_time_entry_id вместо времени. Это точно отсекает уже учтённые записи, но не спасает от записей, добавленных или отредактированных задним числом.
  • Округлять всё до даты и документировать, что --commit работает с дневной точностью.

Связанные задачи

  • #46 — YAML-конфиг, в котором будет храниться period.last_used.
  • #44--commit должен записывать last_used с учётом precision.
  • #45 — автоотправка по почте активирует --commit или сама фиксирует момент отправки.

Критерии приёмки

  • В config.yml поддержано поле period.precision (date / datetime).
  • При precision: datetime --commit сохраняет last_used.to как datetime.
  • При следующем запуске записи, попавшие в предыдущий отчёт, не дублируются.
  • Реализация учитывает ограничения Redmine API (spent_on — дата).
  • Добавлены тесты на дедупликацию time entries по datetime.
## Контекст Задачи #44 и #45 предполагают автоматическую фиксацию последнего периода и отправку отчётов. Сейчас период задаётся с точностью до даты. Если отчёт сформирован и отправлен в 12:00, а после этого пользователь продолжает работать, следующий отчёт захватит time entries за весь текущий день — включая те, что уже попали в предыдущий отчёт. Это приведёт к дублированию. ## Предложение Поддерживать период с точностью до даты и времени (`datetime`) и хранить момент последнего «коммита» в YAML-конфиге (#46). ## Структура в конфиге ```yaml period: precision: datetime # date | datetime last_used: from: "2026-06-30T09:00:00" to: "2026-06-30T12:00:00" ``` ## Режимы - `precision: date` — текущее поведение. `last_used` округляется до даты, следующий период начинается со следующего дня. - `precision: datetime` — `last_used` хранится как `datetime`. Следующий период начинается с точки остановки. ## Проблема Redmine API Redmine time entries фильтруются по `spent_on`, который, скорее всего, представляет собой дату, а не `datetime`. Это означает, что на уровне API нельзя запросить записи только после 12:00. ## Возможная реализация 1. Запросить у Redmine все time entries за дату `last_used.to` и новее. 2. Локально отсечь записи, у которых время создания или обновления (`created_on` / `updated_on`) раньше сохранённого `last_used.to`. 3. Записи с более поздним `created_on` / `updated_on` включаются в следующий отчёт. ## Альтернативы - Хранить `last_time_entry_id` вместо времени. Это точно отсекает уже учтённые записи, но не спасает от записей, добавленных или отредактированных задним числом. - Округлять всё до даты и документировать, что `--commit` работает с дневной точностью. ## Связанные задачи - #46 — YAML-конфиг, в котором будет храниться `period.last_used`. - #44 — `--commit` должен записывать `last_used` с учётом `precision`. - #45 — автоотправка по почте активирует `--commit` или сама фиксирует момент отправки. ## Критерии приёмки - [ ] В `config.yml` поддержано поле `period.precision` (`date` / `datetime`). - [ ] При `precision: datetime` `--commit` сохраняет `last_used.to` как `datetime`. - [ ] При следующем запуске записи, попавшие в предыдущий отчёт, не дублируются. - [ ] Реализация учитывает ограничения Redmine API (`spent_on` — дата). - [ ] Добавлены тесты на дедупликацию time entries по `datetime`.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#47