⟨/⟩ Nts/55_Backend/Calc/CalcModel.cs

58 строк · в начало

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>()}}.
        """";
    }
}