Возврат тестировщика 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>
- sql_migration._split_statements узнаёт только $tag$, пустой $$ ломал разбиение:
DO $$ … $$ → DO $do$ … $do$.
- test_form_phases_delete_removes_only_named_phase: ?sheet= без direction
фильтрует direction IS NULL — читаем весь список и отбираем AHR в тесте.
- test_form_phases_duplicate_without_direction_rejected: после ошибки
сессия клиента откатывается, число строк не проверяем; защиту БД
проверяет новый test_form_phase_nodir_unique_index_blocks_duplicate.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Интеграционные тесты одноимённых этапов, PATCH/DELETE одного этапа, дубль без направления, direction в аудите.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ORM: direction входит в PK (nullable), одноимённые этапы Support/Development больше не склеиваются
- get_list: ORDER BY sheet, direction (NULL первыми), opens_at, phase_code
- 0059: del_form_phase фильтрует по phase_code, direction в v_phase_id (add/upd/del) и в payload upd,
чистка дублей без направления и частичный уникальный индекс form_phase_nodir_uidx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Возврат тестирования 10.11: в выгрузке формы 2 не было цветных заливок.
XlsxDepthSheetWriter._set_palette искал цвет только по пути ключей дерева
колонок (section_code, god.….q2), а FORM2_COLORS ключуется путём данных
(header.section_code, booking.y2026.q2) — совпадений 0 из 162. Теперь, если
по пути дерева цвета нет, он берётся по плоскому ключу данных колонки.
Форма 1 не меняется (её цвета находятся по пути дерева, как раньше).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Возврат тестирования 11.11:
- tableColumns считал множитель по MRT column, у которого нет accessorKey, —
getMoneyUnit видел пустой ключ и считал денежной любую колонку (НДС, курс,
сумма в валюте, площадь масштабировались). getMoneyUnit теперь берёт
column.columnDef ?? column.
- текстовые колонки (комментарии, обоснования, реквизиты договоров, коды)
попадали в правило «иначе thousand»: «123» в комментарии делилось, а при
«млн»/«млрд» редактор обоснования закрывался как денежный. Добавлен
isTextColumn: такие колонки не масштабируются и не форматируются как числа
(внутренний заказ 10123 и комментарий «123» показываются как есть).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>