Нельзя ввести отрицательную среднюю температуру наружного воздуха

Запрос на изменение Версия: 1.0 done

В карточке модели поле «Отопительный период. Средняя температура наружного воздуха» не принимает значения меньше нуля. Ограничение задано общим компонентом ввода фронтенда; методика и валидаторы расчёта отрицательные температуры допускают.

⟨/⟩ Исходник

1. Источник (как есть)

Отопительный период. Средняя температура наружного воздуха - нельзя внести значение меньше нуля.

2. Разбор

Замечание подтверждается, ограничение лежит на фронтенде. Поле объявлено с режимом ввода decimal (heating-period.util.ts), собственных правил валидации у него нет — ограничение целиком наследуется от общего компонента ввода ntr-input (Ntr.Web/src/app/ui/input/input.component.ts):

Предметная область отрицательные значения допускает. Методика задаёт правило \(t_{ext} \in [-50; 50]\) °C — см. te.spec_internal_heat_gain_char; валидатор секции проверяет именно этот диапазон, домен хранит decimal? без ограничения знака. То есть данные корректны и расчёт с ними работает — их нельзя только ввести.

Ограничение общее, а не только для температуры. Режим decimal используют все вещественные поля карточки модели: габариты, объёмы, уровни, мощности, время работы. Для большинства из них запрет отрицательных значений уместен, поэтому снимать его в самом компоненте нельзя — нужен явный признак у поля.

2.1. Открытые вопросы

3. Blast radius

Только фронтенд. Домен, БД, контракты API и расчёт правок не требуют: отрицательные значения ими уже поддержаны.

Слой Правка
ui/input/input.component.ts новый режим ввода (или признак «допускать отрицательные») — разрешить ведущий минус в обработчике нажатия и сохранить его при чистке вставленного значения
model/utils/heating-period.util.ts признак у полей средней температуры наружного воздуха — справочные данные и данные пользователя
model/utils/operating-conditions.util.ts то же для средней температуры воздуха внутри здания — по решению OQ-1
Карточка модели потребления описание поведения поля, если правка меняет описанный контракт ввода

Проверить заодно, что минус допускается только первым символом и в единственном экземпляре — иначе чистка вставленного значения пропустит «1-2».

4. План

  1. Закрыть OQ-1 — перечень полей, принимающих отрицательные значения.
  2. Признак «допускать отрицательные» в компоненте ввода: обработка нажатия клавиши, чистка вставки, нормализация значения.
  3. Проставить признак у полей из OQ-1.
  4. Проверить ввод, вставку из буфера и сохранение отрицательного значения.
  5. Зафиксировать «Итог».

5. Acceptance criteria

6. Итог

OQ-1 закрыт. Отрицательные значения разрешены обеим температурам: «Средняя температура наружного воздуха (данные пользователя)» и «Средняя температура воздуха внутри здания за ОП». Поле справочных данных — только для отображения (не редактируемый ввод), правки не требовало. Остальные вещественные поля остаются неотрицательными.

Реализация (фронтенд) — выполнено:

Домен, БД, контракты API и расчёт не менялись — отрицательные значения ими уже поддержаны (decimal?, диапазон [-50; 50] °C в валидаторе).

Статус acceptance criteria:

OQ-2 (валидация диапазона на форме) — отложено: за пределами этого замечания.

Связанные артефакты

Документы