using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Backend.Calc
{
/// <summary>
/// Контракт расчёта нормативного расхода топлива — структура модели расчёта (`CalcModel`):
/// вход, выход, журнал, ошибки и статус. Точка входа в структуру расчёта.
/// </summary>
public class DOC_NtsCalcModel : ISdaidDocument, IHasStructuralLinks, IFolder<NtsBackendFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<DOC_InputModel>(),
Rel.Uses<DOC_OutputModel>(),
Rel.Uses<DOC_CalcLog>(),
Rel.Uses<DOC_CalcValidators>(),
Rel.Uses<DOC_NtsCalc>(),
Rel.Uses<DOC_NtsCalcErrors>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_CalculationStatus>(),
};
public static string _refName = "Модель расчёта";
public string Name => "Модель расчёта нормативного расхода";
public string Description =>
@"Структура модели расчёта: вход (`InputModel`), выход (`OutputModel`), журнал, ошибки и статус.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string Body = $$""""
## Модель расчёта
`CalcModel` — корневая модель расчёта; заполняется в два этапа: до расчёта задаются `RefId` и
`InputModel`, фасад возвращает новую модель с остальными полями.
| Поле | Тип | Что |
|---|---|---|
| `RefId` | строка | идентификатор объекта расчёта (ТС) |
| `InputModel` | {{SdaidAnchors.RefTo<DOC_InputModel>()}} | вход — единая модель данных |
| `OutputModel` | {{SdaidAnchors.RefTo<DOC_OutputModel>()}} | выход — единый набор полей; `null` при ошибке |
| `CalcLog` | {{SdaidAnchors.RefTo<DOC_CalcLog>()}} | журнал — шаги расчёта по секциям методики |
| `Errors` | {{SdaidAnchors.RefTo<DOC_CalcValidators>()}} | ошибки расчёта (валидация исходных данных) |
| `Status` | {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_CalculationStatus>()}} | результат калькулятора: не выполнен, успешно выполнен, выполнен с ошибкой |
## Правила
- **Вход один** — единая модель `InputModel`; отдельного входа на ветку нет.
- **Выход один** — единый набор результатов (`OutputModel`), **не разбит по веткам**; поля
неприменимой ветки — по умолчанию.
- Порядок шагов и формулы — в {{SdaidAnchors.RefTo<DOC_NtsCalc>()}}.
"""";
}
}