Возврат тестировщика 12.11.
- Шапка «План {year} (тыс. руб.) {vat_plan}» подставляла текст подколонок:
Ф.1 АХР и все листы Ф.4 выгружались «без НДС», а на экране — «с учётом
складского НДС» (Ф.4 КВ — «с учётом НДС»). Теперь у шапки своя подпись
по экрану (FORM1/FORM4_SHEET_PLAN_VAT_WORDING), подколонки не менялись.
- Раскладки Excel (FORM1/FORM2 depth, АХР-сателлиты, проекты, SMETA формы 2/4,
патчи формы 4): «тыс. руб.» по тому же правилу, что на экране; у комментариев
убран подзаголовок «Сумма, тыс. руб. (…)».
- «Коллегиальные органы → Сумма (без НДС)» (collegial.approved,
collegial_approval.approved_amount NUMERIC) считалась текстом (AURORA-1899):
не масштабировалась разрядностью и не получала единицу. Теперь денежная.
- test_export_unit_labels.py: на реальных раскладках выгрузки форм 1/2/4 у каждой
денежной колонки есть «тыс. руб.», у текстовых нет, шапка плана — как на экране.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Возврат тестировщика 12.11. В #291 существовавший текст «тыс. руб.» заменили на
{unit}, но там, где единицы не было, её не добавили. Не было её у договоров,
секвестирования, резерва, итоговой сметы, закрытия кварталов, платежей,
переносов, брони, факта; у «Сумма (без НДС)» формы 4; на основных листах и
листе «Смета» формы РФ; в своде 2 и на странице сводов проектов. Комментарии в
кварталах форм 1/4 и на «Структуре» были подписаны «Сумма, {unit} (…)».
- Конфиги колонок (кодмод на AST): единица ставится в самый верхний заголовок
группы, где все колонки денежные; если в группе есть текст — в заголовок
самой колонки. Подписи вида «Сумма (без НДС)» получают единицу в колонке:
«Сумма, {unit} (без НДС)». Подзаголовок комментария — пустой.
- Свод 2 — {unit} в группах и колонках по тому же правилу; страница сводов
проектов — фиксированное «тыс. руб.» (селектора разрядности там нет).
- Журнал аудита: {unit} в пути колонки подставляется как «тыс. руб.».
- Импорт columnColors в конфигах с расширением .js, чтобы node --test мог
загрузить конфиги.
- columnUnitLabels.test.js: у каждой денежной колонки всех конфигов есть
единица, у текстовых денежной подписи нет.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- VSPRepository.get: with_deleted=True означает «включая удалённые», а не «только удалённые»
- VSPService.update: ключ closed_at (имя поля модели) вместо close_date (входной alias)
- тесты: integration test_vsp.py, unit test_vsp_service_close_date.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
notify_ahr_about_satellite_change рассылал на АХР row_deleted по скрытой
(AURORA-1887) строке сателлита с пустым result: фронт не находил строку
и не получал пересчитанных заголовков — итоги статьи, раздела и сметы
оставались прежними до перезагрузки.
Теперь в result — заголовки ROOT/GROUP/ITEM/SUB_ITEM/SUB_SUB_ITEM по пути
статьи удалённой строки (как del_budget_line для обычных листов). Поиск
строки по аудиту и выборка заголовков вынесены в
SheetRepository/SheetService.get_form2_ahr_satellite_delete_delta.
Протокол WS и фронт не меняются.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 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>
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>
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>
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>
proposal, дельта спеки cell-formula, design.md со сверкой дизайна Jira
с кодом test 5a91f35 и разделом решений без обсуждения.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>