Перенос в фонд экономии (q1/q2/q3/q4.transfer_econ, столбцы 75/107/137
и их Q4-аналог формы РФ) был raw passthrough-полем budget_line_quarter.
transfer_to_economy: ничего его не считало, поэтому после сохранения
строки с планом без переносов поле оставалось пустым, а "ВСЕГО" блоков
показывало прочерк вместо суммы.
v3.v_form4_sheet_sections теперь считает transfer_econ_QN из уже
имеющегося residual_after_actual_QN с поправкой на то, что тот уже
вычитает перенос в СЛЕДУЮЩИЙ квартал один раз (через cp1/cp2/cp3):
transfer_econ_Q1 = residual_after_actual_Q1 - transfer_q3 - transfer_q4
transfer_econ_Q2 = residual_after_actual_Q2 - transfer_q4
transfer_econ_Q3 = residual_after_actual_Q3
transfer_econ_Q4 = residual_after_actual_Q4
Буквальный перенос формулы Excel (ещё и минус transfer_q2 для Q1 /
transfer_q3 для Q2) задвоил бы вычитание. АХР, КВ (CAP) и Операц (OPER)
используют одну и ту же функцию, поэтому один фикс закрывает все три
листа; STRUCTURE — агрегирующий read-only свод без INPUT-строк, его не
касается.
v3._apply_form_cell для FORM_4 больше не принимает прямую запись в
q*.transfer_econ (ValueError computed_field, как у residual_after_actual).
Тесты (api/tests/integration/test_form4_transfer_econ.py):
- репро тикета (переносы = 0);
- регрессия на двойное вычитание с ненулевыми transfer_q2/q3/q4,
отличающая верную формулу от наивного Excel-порта;
- КВ и Операц дают те же числа, что АХР;
- запись в transfer_econ отклоняется.
Closes#255.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- REPORT: правки FORM_4 — вывод по коду, не замер (I-1); цена фильтра свода
по записям основного прогона, hotspots — верхняя граница (I-2); М6 поднята
до P1, пояснение состава топ-5 (I-4); формулировки кадров, малых листов,
admin-контроля, М8, время прогона (M-1, M-2, M-9, M-11); раздел 6 дополнен,
новый раздел 6а с находками при подготовке стенда (M-10, M-12, T7.3)
- README: контроль 4x с отдельным тегом и предупреждением (I-3), команды
modal-renders и netlog-sizes (M-4), гипотезы в «Как читать» (T8.7)
- design.md: R-7, правило приоритетов и топ-5, решения волны исправлений
- план: заметка о замене CPU [1,4,6] решением человека (M-12)
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- run-all.sh: копия run-all.status.json в report-data с относительными путями;
пример control4x с отдельным тегом и предупреждением (I-3, M-8); очищены
три закоммиченные копии статуса
- lib/modal.ts: long tasks по пересечению окна (tasksInWindow), тест (M-7)
- scale_compare.py: строки листов на момент скролла (до grow), пояснения (M-6)
- hotspots_summary.py: оговорка о разбавлении «на шаг» (M-5)
- netlog_sizes.py + report-data/20261026-s1/analysis/netlog-sizes.md (M-3)
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
perf/REPORT.md: резюме и ответы на жалобы заказчика, методика и окружение,
таблица 13 мест (file:line, доказательство, влияние, приоритет, подтверждено
замером), подробности, статический разбор без замера, что не проверено.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- report-data/20261026-control-s1: CPU 4x, 1 повтор (FORM_2/AHR, свод 1 MAIN,
свод 2 GO, модалка выбора ВСП на большом листе), отдельный run_id
- analysis/api-split: полное время API против заголовка X-DB-Time-Ms
(вместо py-spy, которому на macOS нужен root)
- analysis/modal-renders, hotspots: рендеры модалок прогона s1, циклы CSS и
matchMedia со вторым листом
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- C1: trace только на повторе 0 при числе повторов > 1 (lib/trace.ts
shouldTrace) в scroll и scroll-coauthor: admin-контроль, control4x и
PERF_S2_REPEATS=1 больше не теряют единственную запись (traced=1).
- I1: масштаб 2 - PERF_LOAD_TIMEOUT_MS=40 мин и PERF_TEST_TIMEOUT_MS=90 мин,
если не заданы.
- I2: шаг aggregate падает при сбое perfkit.aggregate/копирования и если
summary.json не создан; тесты run-all (perf/tests/test_run_all.py).
- M2: после modals_profiling останавливается preview :8081.
- README, design.md: решения раунда.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- perf/run-all.sh: масштабы 1 и 2, шаги reset -> gen -> verify -> stand ->
preflight -> scroll -> coauthor -> grow -> modals -> modals_profiling ->
memory -> memtrend -> [control4x] -> bench -> aggregate; лог и
run-all.status.json, возобновление (PERF_STEPS, PERF_SKIP_RESET),
сухой режим с оценкой длительности, PERF_S2_REPEATS/PERF_S2_TARGETS,
контроль CPU 4x (PERF_CONTROL_TARGETS).
- Основная метрика: main_thread_ms и main_thread_ms_per_step в скролле
(CDP TaskDuration), frame_excess_ms; в summary.md первыми строками.
- SQL-статистика по шагам: PERF_SQLSTATS_TAG -> sql/<шаг>/ (sqlstats --out).
- netlog: тела /auth/ не пишутся, поля password/token/secret вырезаются.
- scroll.spec: уникальные имена целей (лист ССП с суффиксом /ssp, год в
отчёте проекта) - иначе Playwright не запускал файл из-за дублей.
- PERF_TRACE=0 для прогонов с одним повтором.
- README: scroll-coauthor, run-all, возобновление, без CPU 4/6 в матрицах.
- design.md: уточнена формулировка R-2, решения Task 10a.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
perfkit.gen.grow доращивает FORM_2 AHR_UTILITY/AHR_SECURITY до 500 и
FORM_4 CAP до 300 строк; у форм-модалок варианты @big.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
no_overflow вместо пустого complete, узкий catch по строкам, таймаут свода 2,
подписка на мутации до ввода фильтра и проверка эффекта фильтра, traced=1.
Refs #202
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>