Лог разработки / Roadmap

Сводка недавних изменений, заглушек и планов

2025-11-12 — Roadmap с CRUD и фильтрами

STATUS: DONE
- Добавлена таблица `roadmap_items`, миграция и сидер с основными хотелками (AI-чек, JSON-импорт, распознавание счётчиков, KPI менеджеров).
- Страница `/dashboard/roadmap` стала доступна всем авторизованным пользователям: прогресс-бар, фильтры по статусу/приоритету, сортировка, карточки с длительностью.
- Для админов появились формы `/dashboard/admin/roadmap/new` и `/dashboard/admin/roadmap/{id}/edit`, статус `done` автоматически проставляет дату завершения, `dropped` оставляет запись в истории.
- Документация (README, /dashboard/help) обновлена, чтобы отражать новый процесс.

2025-11-12 — Импорт объекта из JSON

STATUS: DONE
- Добавлена таблица `accounts`, nullable `services.account_id` и колонка `services.meta` для хранения строк ЕПД, реализована Alembic-миграция + обновлены ORM-модели.
- Появилась админ-форма `/dashboard/admin/object-json/new`, которая валидирует JSON по Pydantic-схеме и в одной транзакции создаёт/обновляет объект, лицевые счета, услуги и ссылки на вложения ЕПД (идемпотентно).
- Карточка объекта группирует услуги по ЛС, отображает суммы/тарифы/периоды и ссылки на загруженные EPD-PDF, старая таблица остаётся для объектов без связки.
- Документация (/dashboard/help, README) и DevLog обновлены описанием сценария, страница версий показывает новый бэкап `add_object_json_import`.

2025-11-08 — Чеки и импорт платежей

STATUS: DONE
- Реализована сущность PaymentImport, загрузка чеков через дашборд, карточка review и админская очередь.
- Настроен базовый конвейер применения платежа и связка с платежами/услугами.

2025-11-09 — Интерфейс ИИ-парсинга чеков

STATUS: STUB
- Добавлен контракт ChequeParseResult, CHEQUE_AI_* настройки, заглушки parse_cheque_local/parse_cheque_via_ai, интеграция с PaymentImport.meta.
- Страница /dashboard/devlog отображает историю изменений; README и /dashboard/help описывают новый конвейер.
- TODO:
  - Подключить внешний ИИ-сервис в parse_cheque_via_ai (HTTP API + ключи).
  - Определить политику автоматического применения платежей при высокой уверенности.
  - Научить UI подсвечивать авто-определённую услугу и статус уверенности.

2025-11-10 — Roadmap и чек-лист хотелок

STATUS: IN_PROGRESS
- Roadmap вынесен в <code>infra/ROADMAP.yaml</code>, страница <code>/dashboard/roadmap</code> показывает прогресс, карточки задач и теги; доступна только администраторам.
- README и /dashboard/help обновлены описанием новой страницы; nav bar содержит ссылку «✨ Roadmap».
- TODO:
  - Перевести статус roadmap_page в DONE, когда визуальные правки и тесты завершены.
  - Прописать регламент обновления ROADMAP.yaml при каждой новой фиче.

2025-11-11 — Хронология и часы по Roadmap

STATUS: DONE
- Для каждой задачи Roadmap указаны реальные created_at/completed_at и effort_hours (собраны из dev-лога и git-истории); страница `/dashboard/roadmap` теперь показывает длительность в часах/днях и строки вида «≈ N ч разработки».
- README и /dashboard/help обновлены рекомендациями по заполнению YAML.

2025-11-10 — Старт модуля быстрого добавления объектов

STATUS: IN_PROGRESS
- Запущены работы над модулем, который позволит одним действием создавать объект и сразу задавать услуги (вода, электричество, интернет и пр.) вместе с параметрами оплаты.
- В той же форме сразу привязываем счётчики: тип, серийный номер, тарифы и другие реквизиты, чтобы менеджеру не приходилось перескакивать по разделам.
- В следующих итерациях модуль научится импортировать объекты/услуги/счётчики из таблицы или CSV, сохраняя описание новых объектов в Roadmap.
- Статус задачи в Roadmap (`fast_object_bulk_add`) выставлен в `in_progress`, чтобы прогресс отображался на /dashboard/roadmap.

2025-11-15 14:50 UTC — meter.create

STATUS: INFO
{"service_id": 1, "meter_id": 16, "object_id": 1, "created_by": "admin", "source": "inline-form-json"}
- 2025-11-15T14:52:17Z verify_meter_json_20251115T144600Z: backup→deploy→routes/templates verified; JSON meter create OK; duplicate OK.

2025-11-15 14:54 UTC — meter.create

STATUS: INFO
{"service_id": 12, "meter_id": 17, "object_id": 5, "created_by": "admin", "source": "inline-form-json"}

2025-11-15 15:10 UTC — meter.create

STATUS: INFO
{"service_id": 14, "meter_id": 18, "object_id": 5, "created_by": "admin", "source": "inline-form-json"}

2025-11-16 15:49 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 6
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 1 новых / 0 обновлено
- admin_id: 1

2025-11-16 15:55 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 7
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 1 новых / 0 обновлено
- admin_id: 1

2025-11-16 15:58 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 8
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 1 новых / 0 обновлено
- admin_id: 1

2025-11-16 16:11 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 9
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 2 новых / 0 обновлено
- admin_id: 1

2025-11-16 16:14 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 10
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 9 новых / 0 обновлено
- admin_id: 1

2025-11-16 16:25 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 11
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 0 новых / 0 обновлено
- admin_id: 1

2025-11-16 16:46 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 11
- объект обновлён
- аккаунты: 1 новых / 0 обновлено
- услуги: 0 новых / 0 обновлено
- admin_id: 1
- 2025-11-16T18:22:15Z epd_step1: добавлены таблицы epd_bills/epd_bill_payments и колонка services.scope (миграции применены).

2025-11-16 18:58 UTC — grand_run_20251116T184450Z: backup + deploy

STATUS: DONE
- backup: app_20251116_185423_grand_run_20251116T184450Z.tar.gz + db_20251116_185423_grand_run_20251116T184450Z.sql
- rsync из ~/Projects/mk-utilities, pip install -r requirements.txt, alembic upgrade 9a807b4b1f72, systemctl restart mku-backend
- smoke HTML → /opt/mk-utilities/_ops/grand_run_20251116T184450Z/smoke_*.html

2025-11-16 18:59 UTC — grand_run_20251116T184450Z: EPD API и CLI платежей

STATUS: DONE
- API: POST /api/epd/import и GET /api/epd/bills (admin-only) — upsert объекта + список счетов
- CLI: backend.app.management.epd_import_cli (epd_object.json) и epd_payment_cli (partial→overpaid, payments #1-2 для bill_id=1)
- документация: help-раздел «ЕПД: импорт счетов и платежей (JSON/CLI/API)», DevLog записи и OPS артефакты

2025-11-16 19:06 UTC — epd_ui_20251116T190609Z: ЕПД UI + API оплат

STATUS: DONE
- admin API: POST /api/epd/payments/import + FastAPI роуты для списка/карточек счетов
- UI: страницы /dashboard/admin/objects/&lt;id&gt;/epd, карточка счёта, импорт JSON, форма оплаты (Поля/JSON), подсекция ЕПД на карточке объекта
- UX: визуализация подобных объектов (accounts), общий блок счётчиков, переключатель scope услуги (account/object)
- Docs: раздел «ЕПД в админке...» в dashboard_help + smoke/OPS epd_ui_20251116T190609Z

2025-11-16 19:28 UTC — epd_payments_attachments_dedupe_20251116T192802Z

STATUS: DONE
- миграция d4dd7e0b23f3: dedupe_key + attachment_* в epd_bill_payments
- сервис/API: SHA1-ключ, duplicate-флаг, multipart загрузка чеков с сохранением в media/epd_payments/&lt;bill_id&gt;/
- UI: превью/ссылки на вложения, бейдж Duplicate, форма оплаты с input[type=file]
- Docs: help-дополнение про антидубль/чеки + OPS /opt/mk-utilities/_ops/epd_payments_attachments_dedupe_*

2025-11-21 22:41 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 1
- объект создан
- аккаунты: 1 новых / 0 обновлено
- услуги: 0 новых / 0 обновлено

2025-11-21 22:41 UTC — grand_run import: объект 1

STATUS: INFO
{"object": 1, "source": "api-epd-pdf", "accounts": [{"epd_code": "1011547137", "period": "2025-10"}]}

2025-11-21 22:46 UTC — Импорт объекта из JSON

STATUS: DONE
- object_id: 1
- объект обновлён
- аккаунты: 0 новых / 1 обновлено
- услуги: 0 новых / 0 обновлено

2025-11-21 22:46 UTC — grand_run import: объект 1

STATUS: INFO
{"object": 1, "source": "api-epd-pdf", "accounts": [{"epd_code": "1011547137", "period": "2025-10"}]}
- 2025-11-21T23:15Z fix dashboard/objects 500: added services.scope column in sqlite
- 2025-11-21T23:28Z fix dashboard/objects detail: added sqlite columns epd_bill_payments.paid_at/bank_ref/etc.; added smoke_dashboard.py

Файл логов: infra/DEV_LOG.md