Валидаторы расчёта
Валидация исходных данных расчёта: как устроены валидаторы, где описаны правила и что возвращают; ошибки сохраняются в «Расчёт ТС».
1. Как устроена валидация
- У каждой секции методики (Методика расчёта расхода топлива) есть валидатор —
это архитектурное правило узла графа расчёта, не зависящее от того, есть ли у секции
собственные правила проверки: оркестратор вызывает валидатор и калькулятор секции
одинаково для любого узла, без ветвления «если у секции есть валидатор». У секции без
собственных исходных данных (все входы — выходы других секций, например
fuel.q_transport) валидатор пуст: возвращает пустой список ошибок, но всё равно собирает полученные параметры в типизированный вход секции (<Section>Input) для её калькулятора — не тождественная передача, а адаптация формы данных под контракт секции, просто без правил отбраковки (см. прецедентLightingModelTotalsValidator/AirExchangeRateValidatorвNtr.Calc). Это правило — стабильное, менять его не планируется. - Сейчас валидируются исходные данные расчёта — поля Модель входных данных расчёта ЭНТС; входные параметры секции, посчитанные другими секциями, здесь не проверяются — они валидированы в своих секциях. Это текущая практика, а не инвариант узла: если появится потребность в перекрёстной валидации уже посчитанных параметров нескольких секций — это утверждение (а не предыдущее) будет пересмотрено.
- Правила. Описаны в самой секции методики (блок «Правила валидации»); коды, условия и тексты — в Классификатор ошибок расчёта.
- Порядок. Сначала валидатор, затем (при отсутствии нарушений) калькулятор секции. При
нарушении секция не считается, результат расчёта не собирается (
OutputModel = null), калькулятор возвращаетCalculationStatus.Failed. - Что возвращает валидатор.
(IReadOnlyList<ValidationError> Errors, <Section>Input? Validated): список ошибок и вход секции для калькулятора (null, если есть ошибки).
2. Ошибка валидации
Ошибка — ValidationError:
MethodSectionId— идентификатор секции методики (fuel.*);Path— путь к атрибутуInputModel;RuleCode— категория правила (ValidationRuleCode:Required,OutOfRange,Inconsistent,EmptyCollection);Code— код ошибки (категория) из классификатора Классификатор ошибок расчёта;Message— текст для пользователя;RefId— идентификатор ТС.
Ошибки сохраняются в Расчёт ТС (calc_errors_json).
Связи
classDiagram
direction LR
class CalcErrors {
+IReadOnlyList~ValidationError~ fuel
}
Структура
| Наименование | Атрибут | Тип | Обязательно для создания | Описание |
|---|---|---|---|---|
| Ошибки расчёта | fuel | IReadOnlyList<ValidationError> | Нет | Ошибки расчёта по секциям методики |
Исходник
public class CalcErrors
{
/// <summary>Ошибки расчёта</summary>
[DomainField(Alias = "fuel", Description = "Ошибки расчёта по секциям методики")]
public IReadOnlyList<ValidationError>? Fuel { get; set; }
}Структурные связи
Использует
- Документ Классификатор ошибок расчёта ЭНТС
- Документ Методика расчёта нормативного расхода топлива
- Доменная сущность Модель входных данных расчёта
- Доменная сущность Расчёт ТС
Используется
- Документ Классификатор ошибок расчёта ЭНТС
- Документ Модель расчёта нормативного расхода
- Документ Политика обновления из АИС
- Запрос на изменение «Применить» в окне подбора модификаций запускает пересчёт
- Vision Модуль «Эталоны и нормативы потребления автомобильного топлива транспортными средствами ПАО „Россети“»
Связанные артефакты
Документы
- Документ Классификатор ошибок расчёта ЭНТС
- Документ Методика расчёта нормативного расхода топлива
- Доменная сущность Модель входных данных расчёта
- Доменная сущность Расчёт ТС