using System;
using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Ntr.Api.Endpoints.ActualConsumption
{
/// <summary>
/// Возвращает расход энергии от сторонних источников за календарный год по зданиям выбранного
/// организационного объекта или по одному зданию. Что происходит при вызове —
/// <see cref="Rugrid.Sdaid.Epas.Ntr.Backend.Handlers.ActualConsumption.DOC_GetActualConsumptionHandler"/>.
/// </summary>
public class DOC_GetActualConsumptionEndpoint : IApiContractDocument, IHasStructuralLinks, IFolder<NtrApiFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Ntr.Backend.Handlers.ActualConsumption.DOC_GetActualConsumptionHandler>(),
};
public static string _refName = "Запрос расхода энергии";
public string Name => "Запрос расхода энергии от сторонних источников";
public string Description =>
"Данные вкладок «Расход ЭЭ» и «Расход ТЭ»: расход за календарный год по зданиям организационного объекта или по одному зданию.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
}
/// <summary>Вид ТЭР, расход которого запрашивается.</summary>
public enum ResourceKind
{
/// <summary>Электрическая энергия, тыс. кВт·ч</summary>
ElectricEnergy,
/// <summary>Тепловая энергия, Гкал</summary>
HeatEnergy,
}
/// <summary>
/// Запрос расхода энергии от сторонних источников.
/// Задаётся либо организационный объект, либо здание.
/// </summary>
public class GetActualConsumptionQuery
{
/// <summary>Организационный объект, по зданиям которого запрашивается расход</summary>
public Guid? NavId { get; set; }
/// <summary>Здание, расход которого запрашивается</summary>
public Guid? BuildingId { get; set; }
/// <summary>Вид ТЭР</summary>
public ResourceKind ResourceKind { get; set; }
/// <summary>Календарный год. Не задан — берётся год, предшествующий текущему</summary>
public int? Year { get; set; }
/// <summary>
/// Включать здания организационных объектов, подчинённых заданному.
/// Для запроса по зданию значения не имеет
/// </summary>
public bool WithDescendants { get; set; }
}
/// <summary>Расход энергии за год: строки иерархии и перечень доступных лет.</summary>
public class GetActualConsumptionQueryResult
{
/// <summary>Год, за который возвращены строки</summary>
public int Year { get; set; }
/// <summary>Годы, за которые есть данные учёта в пределах запроса, по возрастанию</summary>
public int[]? AvailableYears { get; set; }
/// <summary>
/// Строки таблицы в порядке обхода иерархии сверху вниз: организационный объект предшествует
/// своим подчинённым объектам и зданиям
/// </summary>
public GetActualConsumptionRow[]? Rows { get; set; }
}
/// <summary>Строка таблицы расхода: организационный объект или здание.</summary>
public class GetActualConsumptionRow
{
/// <summary>Глубина в иерархии; 0 — объект или здание, по которому сделан запрос</summary>
public int Level { get; set; }
/// <summary>Наименование организационного объекта или здания</summary>
public string? Name { get; set; }
/// <summary>Здание, если строка — здание; иначе не задан</summary>
public Guid? BuildingId { get; set; }
/// <summary>
/// Расход по месяцам года, двенадцать значений в календарном порядке.
/// Незаданное значение означает, что расход за месяц в источнике не задан
/// </summary>
public decimal?[]? Months { get; set; }
/// <summary>Расход за год — сумма заданных значений месяцев</summary>
public decimal? Total { get; set; }
}
}