Bicycle/.claude/memory/промт_по_конкретной_реализации_конструктора_метрик.md
Egor Isaev 69ce89a695 dev
2026-08-11 17:05:39 +03:00

7.0 KiB
Raw Permalink Blame History

Задача: провести полный аудит и довести до законченного состояния конструктор пользовательских метрик для дашборда. Не переписывай работающий движок без необходимости — сначала изучи текущую реализацию в app/assets/js/metrics.js, app/assets/css/metrics.css и связанные тесты.

Цель

Пользователь должен без технических знаний собрать метрику, выбрать источник данных, настроить отображение и сразу понимать, что получится. Интерфейс должен быть компактным, визуально цельным и соответствовать брендовому glass-дизайну приложения.

Функциональные требования

  1. Сохрани структуру конструктора из трёх разделов:

    • «Основное»;
    • «Расчёт»;
    • «Отображение».
  2. В разделе «Основное»:

    • название метрики;
    • понятная идентификация создаваемой или редактируемой метрики;
    • отсутствие лишнего поясняющего текста.
  3. Поддержи типы расчёта:

    • сумма выбранных категорий;
    • доходы минус расходы;
    • доля расходов от дохода;
    • собственная формула.
  4. Поддержи режимы данных:

    • факт, если есть, иначе план;
    • только факт;
    • только план.
  5. Категории:

    • получай исключительно из пользовательских данных;
    • не возвращай хардкод категорий и позиций;
    • пустой инстанс должен оставаться пустым;
    • исторические категории должны оставаться доступными для расчётов;
    • выбор категорий оформить компактным раскрывающимся блоком с количеством выбранных элементов.
  6. Собственные формулы:

    • сохранить существующий движок формул;
    • поддерживать базовые переменные, категории, ссылки на другие метрики и соседние периоды;
    • поддерживать префиксы prev_, next_, prev2_ и next2_;
    • автодополнение должно показывать полный доступный список без искусственного ограничения;
    • неизвестные переменные, пустые выражения и синтаксические ошибки должны блокировать сохранение с понятной ошибкой;
    • выбор результата: денежная сумма, коэффициент или процент;
    • при собственной формуле отключать обычный выбор категорий, поскольку категории указываются токенами в выражении.
  7. Настройки отображения:

    • сравнение;
    • динамика;
    • прогресс;
    • направление оценки «больше — лучше» или «меньше — лучше»;
    • целевое значение показывать только при выбранном графике прогресса;
    • переключатель закрепления метрики на дашборде.
  8. Добавь живое превью карточки метрики внутри конструктора:

    • название;
    • рассчитанное или демонстрационное значение;
    • единица измерения;
    • выбранные графики;
    • состояние цели;
    • превью должно обновляться при изменении настроек и не сохранять данные само по себе.
  9. Сохранение:

    • создание новой метрики;
    • редактирование существующей без потери ID и owner;
    • удаление с возможностью восстановления через существующие хранилище и корзину;
    • метрики должны продолжать работать в дашборде и каталоге калькулятора;
    • при изменении структуры данных предусмотреть schemaVersion и миграцию старых записей.

Дизайн

  • Используй существующие брендовые переменные, стеклянные поверхности и SVG-иконки проекта.
  • Не добавляй новые случайные цвета и стили.
  • Модальное окно должно находиться поверх всего интерфейса и использовать общий popup/modal слой.
  • На десктопе поля можно размещать в две колонки.
  • На мобильном всё должно переходить в одну колонку без горизонтального скролла.
  • Учти экранную клавиатуру, safe-area и небольшую высоту экрана.
  • Не перегружай форму подсказками: оставляй только ошибки, важные ограничения и необходимые пояснения для формул.
  • Состояния выбора, disabled, loading, validation и focus должны быть визуально различимы.

Критерии готовности

  • Можно создать и отредактировать каждый тип метрики.
  • Формулы корректно работают с планом, фактом, категориями, соседними периодами и другими метриками.
  • Пустой инстанс не получает предустановленных категорий или метрик.
  • Старые сохранённые метрики продолжают работать.
  • Конструктор не выходит за границы экрана на desktop и mobile.
  • Все существующие тесты проходят.
  • Добавлены тесты на живое превью, валидацию, динамические категории, адаптив и обратную совместимость.
  • Проведена проверка синтаксиса всех изменённых JS-файлов.