fix(concept): step="any" — stepMismatch блокировал submit «Рассчитать концепцию» (#1953) #2103

Merged
bot-backend merged 1 commit from fix/concept-land-cost-step-mismatch into main 2026-06-30 10:09:56 +00:00
Collaborator

Summary

P0, пойман скриншот-верификацией §7 с интерактивом. Кнопка «Рассчитать концепцию» не работала на любом участке с кадастровой стоимостью.

Корень: поле «Стоимость участка» имело step={1_000_000}. Сид из egrn.cadastral_value_rub (напр. 74 766.08 ₽, не кратно миллиону) → HTML5 stepMismatch → форма :invalid → браузер молча блокирует submit (submit-событие даже не выстреливает). Авто-расчёт §7 маскировал баг — он зовёт движок напрямую (handleGenerate), минуя валидацию формы.

Фикс: step="any" на денежном поле в ConceptProgramForm (§7) и ConceptParamsForm (standalone /concept — тот же латентный баг). Плюс step="any" на floor_height (был 0.1) и пятне (был 1) — clampFloat допускает дробные → тот же класс stepMismatch.

Подтверждено на проде (DOM-патч step="any"form.checkValidity() = truerequestSubmit() проходит → ТЭП пересчитался: GFA 15 876 → 30 240 м², FAR 0.24 → 0.45 под изменённое пятно). Это же доказывает, что footprint-override из #2102 доходит до ТЭП end-to-end.

Test plan

  • tsc --noEmit clean, prettier
  • empirically validated on prod (checkValidity true → submit → recompute)
  • post-deploy: §7 → изменить этажность/корпуса/пятно → «Рассчитать концепцию» → ТЭП/финмодель/карта обновились (без DOM-патча)

Часть epic #1953.

## Summary **P0, пойман скриншот-верификацией §7 с интерактивом.** Кнопка «Рассчитать концепцию» не работала на любом участке с кадастровой стоимостью. **Корень:** поле «Стоимость участка» имело `step={1_000_000}`. Сид из `egrn.cadastral_value_rub` (напр. `74 766.08 ₽`, не кратно миллиону) → HTML5 **`stepMismatch`** → форма `:invalid` → браузер **молча блокирует submit** (submit-событие даже не выстреливает). Авто-расчёт §7 маскировал баг — он зовёт движок напрямую (`handleGenerate`), минуя валидацию формы. **Фикс:** `step="any"` на денежном поле в `ConceptProgramForm` (§7) **и** `ConceptParamsForm` (standalone `/concept` — тот же латентный баг). Плюс `step="any"` на `floor_height` (был 0.1) и пятне (был 1) — `clampFloat` допускает дробные → тот же класс stepMismatch. **Подтверждено на проде** (DOM-патч `step="any"` → `form.checkValidity()` = `true` → `requestSubmit()` проходит → ТЭП пересчитался: GFA 15 876 → 30 240 м², FAR 0.24 → 0.45 под изменённое пятно). Это же доказывает, что footprint-override из [#2102](https://git.gendsgn.ru/lekss361/gendesign/pulls/2102) доходит до ТЭП end-to-end. ## Test plan - [x] `tsc --noEmit` clean, prettier - [x] empirically validated on prod (checkValidity true → submit → recompute) - [ ] post-deploy: §7 → изменить этажность/корпуса/пятно → «Рассчитать концепцию» → ТЭП/финмодель/карта обновились (без DOM-патча) Часть epic #1953.
bot-backend added 1 commit 2026-06-30 10:07:18 +00:00
fix(concept): step="any" on number inputs — stepMismatch блокировал submit (#1953)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 58s
CI / openapi-codegen-check (pull_request) Successful in 1m51s
68f225f794
Поле «Стоимость участка» (ConceptProgramForm §7 + ConceptParamsForm /concept)
имело step={1_000_000}. Сид из кадастровой стоимости (напр. 74 766.08 ₽, не
кратно шагу) → HTML5 stepMismatch → форма :invalid → браузер МОЛЧА блокирует
submit (submit-событие не выстреливает) → кнопка «Рассчитать концепцию» не
работает на ЛЮБОМ участке с кадастровой стоимостью. Авто-расчёт §7 маскировал
баг — он зовёт движок напрямую, минуя валидацию формы.

Тот же латентный stepMismatch на floor_height (step 0.1) и пятне (step 1) —
clampFloat допускает дробные → step="any" и там.

Подтверждено на проде (DOM-патч step="any" → checkValidity()=true → submit
проходит → GFA 15 876→30 240, FAR 0.24→0.45 под изменённое пятно).
bot-backend merged commit de4704f6cd into main 2026-06-30 10:09:56 +00:00
bot-backend deleted branch fix/concept-land-cost-step-mismatch 2026-06-30 10:09:56 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2103
No description provided.