Andrey Epifancev 8e294e2899 docs(openspec): change aurora-1896-cell-formulas — формулы ячеек на сервере (AURORA-1896)
proposal, дельта спеки cell-formula, design.md со сверкой дизайна Jira
с кодом test 5a91f35 и разделом решений без обсуждения.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00

5.3 KiB
Raw Blame History

Proposal

Why

Замечание заказчика №8 «Формулы и факт» (свод замечаний Фомичева от 27.10.2026, Jira AURORA-1896, Критичный): формулы, введённые одним пользователем (например, =100+50), не видны другим пользователям в исходном виде. Это мешает проверять фактические проводки, введённые разными сотрудниками.

Сейчас формула живёт только в localStorage браузера автора (web/src/components/RealtimeTable/Cell/EditCell/EditCell.jsx, ключ formula_v2_…, после AURORA-1895 — с привязкой к line_id и проверкой совпадения результата). На сервер уходит только число. Другие пользователи — и сам автор на другом компьютере — видят только число; признака формулы в обычной ячейке нет, индикатор fx есть только в открытом редакторе автора.

What Changes

  • Новая таблица v3.cell_formula: последняя формула ячейки — выражение, значение на момент сохранения, автор, время. Ключ — (форма или отчёт проекта, лист, строка, колонка).
  • Запись ячейки (WS cell_updated, REST PATCH …/cell и …/cells — для форм и для отчётов проектов) принимает необязательное formula. Формула пишется в той же транзакции, что и значение, и только после успешной записи значения (те же права). Ввод значения без формулы удаляет формулу этой ячейки.
  • Сервер проверяет выражение (допустимые символы, длина) и отвечает 422 invalid_formula: на некорректное; значение при этом тоже не пишется.
  • Новые эндпоинты чтения формул листа формы и отчёта проекта.
  • WS-рассылка cell_updated несёт нормализованную формулу (или null) и автора/время — остальные клиенты обновляют маркер без перезагрузки.
  • Фронт: карта формул листа в RealtimeContext; маркер fx в углу ячейки с подсказкой «=выражение · ФИО · дата время», если значение формулы совпадает с текущим значением ячейки; редактор открывается с =выражением с сервера; localStorage для формул больше не используется, старые ключи formula_* удаляются.
  • Формулы удаляемых строк, форм и отчётов удаляются автоматически (FK с каскадом и триггеры на таблицах строк).

Не меняется:

  • вычисление выражения — по-прежнему на фронте (formulaUtils.calculateFormula); сервер выражение не вычисляет;
  • ответ на правку (result — затронутое поддерево, AURORA-1850), содержимое GET листа (AURORA-1848);
  • права на запись ячеек; отсутствие серверной проверки окон для FORM_3 (существующее поведение, см. design.md);
  • Excel-выгрузка (формулы не выгружаются);
  • история значений ячейки не ведётся — хранится только последняя формула.

Capabilities

New Capabilities

  • cell-formula: хранение, запись, чтение и рассылка формул ячеек листов бюджетных форм и отчётов проектов; отображение маркера формулы.

Modified Capabilities

Нет.

Impact

  • SQL: новая миграция (следующий свободный номер на момент мержа — см. design.md, D9): таблица v3.cell_formula, функции v3.set_cell_formulas, v3.v_cell_formulas, триггеры очистки на budget_line, rent_detail, utility_detail, security_detail, fixed_asset_report, rf_project_report_line.
  • Python: sheet_repository.update_cell/update_cells, project_repository.upd_form3_cell(s), сервисы, websocket.py (FormEventProcess/ProjectEventProcess.__update_cell), forms.py/projects.py (новые GET, formula в CellPatch), schemas.py, CONSTANTS.VALIDATION_PREFIXES.
  • Web: RealtimeContext, useRealtimeData, Cell, EditCell, formulaUtils, новые чистые утилиты карты формул, API-клиент.
  • Тесты: api/tests/integration/test_cell_formula_integration.py, unit на репозитории/сервис, node --test на утилиты формул.