5.3 KiB
5.3 KiB
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, RESTPATCH …/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на утилиты формул.