feat: формулы ячеек на сервере, маркер fx для всех пользователей (AURORA-1896) #323

Merged
aep merged 25 commits from feat/320-aurora-1896-cell-formulas into test 2026-11-12 17:03:43 +03:00

25 Commits

Author SHA1 Message Date
Andrey Epifancev
38036b31af chore(formulas): миграция 0060 → 0061 поверх 0060_form_phase_direction_fix (#315) (AURORA-1896)
Порядок мержа фиксирован: #315 → #317 → #319 → #323. design.md #22.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:08:21 +04:00
Andrey Epifancev
baa5f4e8cd docs(openspec): решения #19–#21 по итогам финального ревью (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:14:18 +04:00
Andrey Epifancev
54e60dcf8e test(formulas): GET formulas без доступа, спека приведена к коду (AURORA-1896, M-5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:06:53 +04:00
Andrey Epifancev
e107fa418d perf(formulas): равенство по владельцу вместо IS NOT DISTINCT FROM, отказ на Infinity (AURORA-1896, M-1, M-2, M-3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:06:53 +04:00
Andrey Epifancev
e569d18624 fix(formulas): нормализация пробелов выражения перед отправкой и текст ошибки invalid_formula (AURORA-1896, I-2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:06:53 +04:00
Andrey Epifancev
ecef6eb247 fix(formulas): рассылка WS не несёт формулу клиента при отказе в доступе (AURORA-1896, I-1)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:06:53 +04:00
Andrey Epifancev
683e12c52f chore(formulas): номер миграции 0060 после rebase на test (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:10:55 +04:00
Andrey Epifancev
18573d6dc4 test(formulas): правки WS-тестов T5.1–T5.3 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:42 +04:00
Andrey Epifancev
aebaaa4ab7 docs(openspec): решение контроллера #18 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:42 +04:00
Andrey Epifancev
3bee5e795f feat(formulas): маркер fx у ячейки, формула с сервера в редакторе, без localStorage (AURORA-1896)
- RealtimeContext: стор карты формул (formulaStore), загрузка при открытии листа и
  переподключении (формы и отчёты проектов), обновление на каждом cell_updated,
  защита от устаревших ответов при смене листа; useCellFormula; updateCell(..., { formula })
- Cell: маркер fx только при актуальной формуле, подсказка с единицей при displayFactor != 1
- EditCell: начальный текст «=выражение», выражение уходит в data.formula, без localStorage;
  ввод «100+50» без «=» не отправляется (тост «Формула начинается с =»)
- удалены resolveEditorState и clearLegacyFormulaKeys; T6.1/T6.2 в cellFormulaUtils

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:42 +04:00
Andrey Epifancev
b93e22080e docs(openspec): решение контроллера #17 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
6ba677cd39 feat(formulas): утилиты карты формул и API чтения формул (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
af687a7e22 feat(formulas): formula и formula_meta в cell_updated по WebSocket (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
c1e21e7cd6 docs(openspec): решение контроллера #16 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
84dbaaf361 test(formulas): правки minor-находок T1.1–T4.2 (AURORA-1896)
T1.1 каскад hard_delete проверяется по AHR_LIMIT; T1.2 тесты триггеров
rent/utility/security/fixed_asset_report; T1.3 NaN в set_cell_formulas
отклоняется (0059 правится на месте); T3.1 unit-кейсы asyncpg-обёртки;
T3.2 предусловие SAVEPOINT-теста и комментарий к 403; T4.1 проверка
незаписи значения при 422 отчёта проекта; T4.2 убрана мёртвая логика.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
17e7d46859 docs(openspec): решение контроллера #15 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
187988bd76 feat(formulas): формулы в отчётах проектов — запись и GET formulas (AURORA-1896)
PATCH cell/cells отчёта проекта пишут формулу в той же транзакции, GET
.../report/{year}/{report_type}/formulas возвращает формулы отчёта.
Тесты: roundtrip, снятие формулы, каскад удаления проекта, триггер
rf_project_report_line (del_form3_line и прямой DELETE).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
f707130ff0 docs(openspec): решение контроллера #14 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
5bc6a755bc feat(formulas): запись формулы при правке ячейки формы и GET formulas листа (AURORA-1896)
SheetService.update_cell_with_formula/update_cells пишут формулу после значения в одной
транзакции, GET /form/{id}/sheet/{sheet}/formulas. Ошибки БД с обёрткой asyncpg
"<class ...>: invalid_formula: ..." теперь корректно мапятся в 422.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
2bf1aba536 docs(openspec): решение контроллера #13 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
1d6d95db9f feat(formulas): CellFormulaRepository, invalid_formula → 422, схемы (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
725b994afa docs(openspec): решения контроллера #10–#12 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
a29207f814 feat(formulas): таблица cell_formula, set/v_cell_formulas, триггеры очистки, миграция 0059 (AURORA-1896)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
Andrey Epifancev
1187ac2f8f docs(plan): план реализации AURORA-1896 — формулы ячеек на сервере
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:07:04 +04:00
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