950 Commits

Author SHA1 Message Date
Andrey Epifancev
af44b98d7a fix(stages): этап определяется по листу, направлению и названию; кодирование пути и direction в params (AURORA-1880)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:05:09 +04:00
Andrey Epifancev
8798f092c4 fix(stages): именованный dollar-тег в DO-блоке 0059, правка интеграционных тестов этапов (AURORA-1879)
- 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>
2026-11-11 16:53:42 +04:00
Andrey Epifancev
92f6049a73 fix(stages): FormPhaseService.create отклоняет дубль этапа на листе и направлении (AURORA-1879)
Интеграционные тесты одноимённых этапов, PATCH/DELETE одного этапа, дубль без направления, direction в аудите.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:39:24 +04:00
Andrey Epifancev
9e15fad226 fix(stages): direction в первичном ключе ORM FormPhase, детерминированный порядок списка, миграция 0059 (AURORA-1879)
- 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>
2026-11-11 16:39:24 +04:00
aep
5a91f35ab2 Merge pull request 'AURORA-1902: возврат тестирования — цветные заливки на листах Операц/АХР/КВ выгрузки Сметы РФ' (#310) from feat/309-aurora-1902-export-colors into test 2026-11-11 15:16:32 +03:00
aep
dd40b9f341 Merge pull request 'AURORA-1899: возврат тестирования — разрядность не трогает неденежные и текстовые колонки' (#308) from feat/285-aurora-1899-non-money-fix into test 2026-11-11 15:15:41 +03:00
Andrey Epifancev
3b5f6025aa fix(export): заливки колонок на листах Операц/АХР/КВ Сметы РФ (AURORA-1902)
Возврат тестирования 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>
2026-11-11 15:40:03 +04:00
Andrey Epifancev
44e6afc774 fix(table): разрядность не трогает неденежные и текстовые колонки (AURORA-1899)
Возврат тестирования 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>
2026-11-11 15:34:08 +04:00
d5eb70e004 Merge pull request 'крестик для очистки строки поиска' (#307) from aurora-2023 into test
Reviewed-on: #307
2026-11-09 14:15:18 +03:00
PotapovaA
a2b132e9dc крестик для очистки строки поиска 2026-11-09 14:13:23 +03:00
aep
244c03ac14 Merge pull request 'AURORA-1892: доработка по сверке с исходным перечнем 02.11.2026' (#293) from feat/276-aurora-1892-negative-amounts into test 2026-11-08 17:12:34 +03:00
Andrey Epifancev
f61647d16c Merge remote-tracking branch 'origin/test' into feat/276-aurora-1892-negative-amounts 2026-11-08 18:11:36 +04:00
aep
bc9bd1b5e5 Merge pull request 'AURORA-1893: доработка по возврату тестирования — агрегаты в счётчике, переход и прокрутка к ячейке, {year}/{unit}' (#300) from feat/282-aurora-1893-error-alert-rework into test 2026-11-08 17:11:23 +03:00
aep
bf449c5754 Merge pull request 'fix(form2): дельта АХР пуста для статей глубины 4 после правки лимита (AURORA-1850, часть #296)' (#301) from feat/296-ahr-delta-depth4 into test 2026-11-08 17:11:12 +03:00
aep
1965f2a939 Merge pull request 'fix(tests): test_form2_ahr_limit падает KeyError после null-strip (AURORA-1897, часть #296)' (#299) from feat/296-ahr-limit-tests-null-strip into test 2026-11-08 17:10:01 +03:00
Andrey Epifancev
d341d21ec6 fix(form2): дельта АХР после правки лимита пуста для статей глубины 4 (AURORA-1850, #296)
0053 пересоздала v3.get_form2_ahr_satellite_delta по телу из 0031 с
сопоставлением лимитного шаблона «ei.depth = 3 AND (item_id OR
num_group_id)» и откатила правку 0037. Лимиты с кодом num_group_id статьи
глубины 4 (принтеры / МФУ / копиры) не попадали в target_lines, дельта
была пустой, и открытый АХР не обновлял сумму до перезагрузки.

Миграция 0058 пересоздаёт функцию с матчером 0037
((depth = 3 AND item_id = code) OR num_group_id = code); остальное тело —
как в 0053.

Тест-защита 0037 ждал в дельте INPUT-строку, которую AURORA-1887 скрыл на
листе AHR, — теперь проверяет заголовок SUB_SUB_ITEM статьи глубины 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 17:24:28 +04:00
Andrey Epifancev
20f1bed336 fix(table): минус красный и в нередактируемых ячейках строки ввода (AURORA-1892)
Возврат тестирования 06.11, критерий «любое отрицательное число выделено
цветом»: NOT_EDITABLE_INPUT_STYLES (AURORA-1890) разворачивался после цвета
текста и перекрашивал минус в серый #5F6B7A — в расчётных колонках вне
перечня отрицательные значения оставались серыми. Цвет текста теперь
решает resolveCellTextColor (utils/cellTextColor.js, с тестами): минус —
красный всегда, серый — только для неотрицательных значений.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 17:09:29 +04:00
Andrey Epifancev
5690b756e9 Merge origin/test в feat/276-aurora-1892-negative-amounts (перед доработкой по возврату 06.11)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:43:41 +04:00
Andrey Epifancev
a61c09be18 fix(table): контроль ошибок — агрегатные строки, переход и прокрутка к ячейке, подстановка {year}/{unit} (AURORA-1893)
Доработка по возврату тестирования 06.11:
- у агрегатных строк (ROOT/GROUP/ITEM/SUB_ITEM) нет data.id, ключ ошибки был
  «правило:колонка:null» — все агрегаты одной колонки схлопывались в одну
  запись. Ключ строки теперь getValidationRowKey: line id или sort:<sort_order>;
- переход к ошибке ищет строку по тому же ключу (раньше для агрегата
  прерывался, выделение оставалось на предыдущей ячейке);
- прокрутка: вместо scrollToIndex(rowIndex + 5, 'auto') — центрирование и
  scrollIntoView самой ячейки после отрисовки (у последних строк запас +5
  обрезался, шапка внутри контейнера не учитывалась — ячейка оставалась ниже
  видимой области);
- названия колонок в плашке и в тосте EditCell — с подставленными годом и
  единицами (formatHeaderPaths, как в TableHead);
- рамка активной ячейки дублируется псевдоэлементом ::after: inset-тень td
  перекрывалась красной рамкой ошибочной ячейки.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:38:49 +04:00
Andrey Epifancev
8ba26427dd fix(tests): test_form2_ahr_limit — чтение plan.qN без KeyError после null-strip (AURORA-1897, #296)
После AURORA-1848 GET листа вырезает null-поля, поэтому у заголовка статьи
без плана в квартале ключа plan.qN нет вовсе, и чтение «до» падало
KeyError до проверки самой логики. Заменено на plan.get("qN") or 0.
Продуктовый код не меняется: с правкой все 7 тестов зелёные на test
(после PR #295).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:04:33 +04:00
Andrey Epifancev
f9fbd7399f openspec: архив aurora-1843-svod2-server-paging (PR #241/#243/#245)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 14:40:36 +04:00
aep
40a84acdb0 Merge pull request 'AURORA-1843: свод 2 — сценарии и скрипты замера страниц (3/3, стенд)' (#245) from feat/236-aurora-1843-svod2-server-paging-perf into test 2026-11-08 12:57:48 +03:00
aep
83c43dccca Merge pull request 'AURORA-1843: свод 2 — догрузка строк страницами, поиск и фильтры через сервер (2/3, фронт)' (#243) from feat/236-aurora-1843-svod2-server-paging-web into test 2026-11-08 12:57:25 +03:00
aep
2685f9b0a0 Merge pull request 'AURORA-1843: свод 2 — серверные страницы, поиск, фильтры и варианты (1/3, сервер)' (#241) from feat/236-aurora-1843-svod2-server-paging into test 2026-11-08 11:07:51 +03:00
Andrey Epifancev
667cfd8353 docs(openspec): aurora-1843 — нумерация решения O-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:59:23 +04:00
Andrey Epifancev
4e1803568f Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf 2026-11-08 11:59:18 +04:00
Andrey Epifancev
fb87a6f4f6 docs(openspec): aurora-1843 — нумерация решения O-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:59:11 +04:00
Andrey Epifancev
0ad9ae32d2 Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging' into feat/236-aurora-1843-svod2-server-paging-web 2026-11-08 11:58:52 +04:00
Andrey Epifancev
77bfdf69fd perf(svod2): v_svod2_facets с SET jit TO off (O-1)
JIT добавлял ~1,4 с к вызову с буквальными параметрами (стенд масштаба 1: 1500 мс против 43 мс).
Тест: функции svod2 имеют jit=off. Убран тест формы плана: функция с SET не разворачивается.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:58:31 +04:00
Andrey Epifancev
58db6d7900 Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf
# Conflicts:
#	openspec/changes/aurora-1843-svod2-server-paging/design.md
2026-11-08 11:46:06 +04:00
Andrey Epifancev
5f14af7252 Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging' into feat/236-aurora-1843-svod2-server-paging-web
# Conflicts:
#	openspec/changes/aurora-1843-svod2-server-paging/design.md
2026-11-08 11:45:57 +04:00
Andrey Epifancev
5db0bd4cee fix(svod2): серверный поиск совпадает с экраном — пустое поле contract_detail не затирает contract_summary (R-30, решение пользователя 08.11)
В v3.svod2_lines counterparty/reference/deadline/comment берутся как COALESCE(detail, summary).
Оракулы (Python, JS, векторы) отбрасывают null при слиянии, legacy_full() снова читает
ответ без параметров. Тесты: пустое поле detail, отсутствие строки detail, перекрытие непустым detail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:45:37 +04:00
Andrey Epifancev
7d71001b7c Merge remote-tracking branch 'origin/test' into feat/236-aurora-1843-svod2-server-paging 2026-11-08 11:40:26 +04:00
aep
f6b95d7b54 Merge pull request 'AURORA-1842: свод 2 — виртуализация колонок и статичные стили' (#227) from feat/220-aurora-1842-svod2-column-virtual into test 2026-11-08 10:34:12 +03:00
aep
ab9616ae0a Merge pull request 'AURORA-1835: свод 1 и сводные проектов: форматтер чисел создаётся один раз' (#217) from feat/210-aurora-1835-svod1-formatter into test 2026-11-08 10:33:50 +03:00
Andrey Epifancev
d7aba96d6d Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf 2026-11-08 11:32:05 +04:00
Andrey Epifancev
57dfaa8d18 Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging' into feat/236-aurora-1843-svod2-server-paging-web 2026-11-08 11:31:58 +04:00
Andrey Epifancev
737ff55b42 test(api): схема OpenAPI свода 2 допускает Svod2PageResponse рядом с BaseListResponse (AURORA-1843)
Контрольный тест тяжёлых GET (AURORA-1848) требовал одну ссылку на BaseListResponse;
режим страниц добавляет второй вариант ответа.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:31:51 +04:00
Andrey Epifancev
d959e2ebfc Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging-web' into feat/236-aurora-1843-svod2-server-paging-perf
# Conflicts:
#	openspec/changes/aurora-1843-svod2-server-paging/design.md
2026-11-08 11:08:17 +04:00
Andrey Epifancev
2f5cde8c4a Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging' into feat/236-aurora-1843-svod2-server-paging-web
# Conflicts:
#	openspec/changes/aurora-1843-svod2-server-paging/design.md
2026-11-08 11:08:01 +04:00
Andrey Epifancev
32d81d82e8 docs(openspec): aurora-1843 — маркеры решений переноса R-23..R-29 (R-9..R-22 заняты в PR 2 и 3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:07:36 +04:00
Andrey Epifancev
15957a3ba3 Merge remote-tracking branch 'origin/feat/236-aurora-1843-svod2-server-paging' into feat/236-aurora-1843-svod2-server-paging-web
# Conflicts:
#	openspec/changes/aurora-1843-svod2-server-paging/design.md
2026-11-08 11:06:54 +04:00
Andrey Epifancev
6424cd168f docs(openspec): aurora-1843 — маркеры R-11..R-17 (R-9, R-10 заняты фронтовой веткой)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:06:39 +04:00
Andrey Epifancev
655a5043ab docs(openspec): aurora-1843 — решения R-9..R-15 при переносе на test
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:06:06 +04:00
Andrey Epifancev
24ad2728d7 fix(perf): svod2_paging_check сверяет склейку view=full с ответом без null-полей (AURORA-1848)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:05:58 +04:00
Andrey Epifancev
61541c74a7 Merge origin/feat/236 (фронт) в feat/236 (perf): api_split через measure() с поддержкой ответа-словаря (facets)
Конфликт perf/analysis/api_split.py: взят measure() из test (wire_bytes, AURORA-1848),
в него перенесена обработка нечислового result (facets возвращает объект, строк нет).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:04:41 +04:00
Andrey Epifancev
e05e3774f0 Merge origin/feat/236 (сервер) в feat/236 (фронт): страницы свода 2 поверх displayFactor и фиксированной высоты строк
Конфликты Svod2Page.jsx: сохранены окно страниц, заглушки и фасеты PR; добавлены
factor/formatHeaderUnit (AURORA-1899/1900). Измерение высоты строки по offsetHeight
заменено фиксированной высотой 2.75rem (AURORA-1836): px считается из rem без чтения layout,
заглушки получают высоту в rem.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:04:11 +04:00
Andrey Epifancev
c69a8e586b Merge remote-tracking branch 'origin/feat/220-aurora-1842-svod2-column-virtual' into feat/236-aurora-1843-svod2-server-paging
# Conflicts:
#	api/tests/integration/conftest.py
2026-11-08 11:02:38 +04:00
Andrey Epifancev
79c841dcaf Merge origin/feat/220 в feat/236 (сервер): свод 2 постранично поверх test (AURORA-1843)
Конфликты summary.py, summary_repository.py, summary_service.py,
test_summary2_related_records_sql.py: сохранены новые методы страниц и фасетов,
режим без параметров идёт по быстрому JSON-пути test (AURORA-1848).
Миграция переименована в 0057 (down_revision 0056); в svod2_lines добавлена
поправка 0050 (СПОД аренды, только ГО). Эталон svod2_legacy_golden перезаписан
под ответ без null-полей; legacy_full оракулов строится прямым вызовом функции.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 11:02:30 +04:00
Andrey Epifancev
6410a6ae05 Merge remote-tracking branch 'origin/feat/210-aurora-1835-svod1-formatter' into feat/220-aurora-1842-svod2-column-virtual 2026-11-08 11:02:12 +04:00