Skip to content

feat(budget): дайджест трат за вчера в утреннем напоминании - #60

Merged
Tarasusrus merged 2 commits into
mainfrom
task/budget-yesterday-digest
Jul 2, 2026
Merged

feat(budget): дайджест трат за вчера в утреннем напоминании#60
Tarasusrus merged 2 commits into
mainfrom
task/budget-yesterday-digest

Conversation

@Tarasusrus

Copy link
Copy Markdown
Owner

Что

Утреннее напоминание «внеси покупки» теперь несёт дайджест трат за вчера: 💸 Вчера потрачено: ~N ฿.

Задачи: simpleAI-27a5 (DigestSource) + simpleAI-c2ud (проводка в воркер). Эпик simpleAI-4vy / GH #22.

Как

  • internal/skills/budget/digest.goDigestProvider.YesterdayDigest(ctx, chatID, loc): календарный день «вчера» в таймзоне получателя → GetSummary → THB-эквивалент. Пустой день → "".
  • internal/notify/reminder_worker.go — интерфейс DigestSource + DI в ReminderWorker; аппенд дайджеста в check().
  • cmd/app/main.go — сборка провайдера.

Архитектурные решения

  • Глобальный single-household ledger: chatID не фильтрует данные (budget_transaction без chat_id), а определяет только получателя + таймзону окна «вчера». GetSummary используется как есть, store не меняли. (verified @architect)
  • Валюта дайджеста — THB (฿), осознанно расходится с остальным UI (₽ экв.). Курс из GetExchangeRates с фолбэком на rubRates, не хардкод.
  • Non-fatal: ошибка/пустой день/nil-источник не блокируют отправку напоминания — покрыто тестом.
  • transaction_date это DATE → день якорится UTC-midnight (консистентно с существующим day-range).

Тесты

  • digest_test.go (5): non-empty, empty→"", multicurrency→THB, tz-boundary (день в loc), summary-error.
  • reminder_worker_test.go (6): error-degradation (ключевой), non-empty append, empty без \n, nil digest, outside-window.
  • go build/test ./..., go vet, golangci-lint = 0 issues.

Вне скоупа

  • Дефолт времени напоминания остаётся 21:00 (юзер задаёт час через бота).
  • Эпик 4vy issue todo #21 («прочее» → запрос описания) не входит.

🤖 Generated with Claude Code

Tarasusrus and others added 2 commits June 29, 2026 18:12
DigestProvider.YesterdayDigest: календарный день «вчера» в loc → GetSummary
(глобальный ledger, без chatID-фильтра) → THB-эквивалент. Пустой день → "".
Интерфейс notify.DigestSource (контракт; проводка в воркер — c2ud).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ReminderWorker принимает DigestSource (опционален); в check() дайджест за
вчера аппендится к напоминанию. Non-fatal: ошибка/пусто/nil не блокируют
отправку. Инвариант «доставка не зависит от дайджеста» покрыт тестом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Tarasusrus
Tarasusrus merged commit ae6bdea into main Jul 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant