diff --git a/Hcs.ClientNet/Client/Api/ApiBase.cs b/Hcs.ClientNet/Client/Api/ApiBase.cs
new file mode 100644
index 0000000..55aa6a3
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/ApiBase.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api
+{
+ public abstract class ApiBase(ClientBase client)
+ {
+ protected ClientBase client = client;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/BillsApi.cs b/Hcs.ClientNet/Client/Api/BillsApi.cs
new file mode 100644
index 0000000..b30cbe9
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/BillsApi.cs
@@ -0,0 +1,68 @@
+using Hcs.ClientNet.Api.Payload.Bills;
+using Hcs.ClientNet.Api.Request.Bills;
+using Hcs.Service.Async.Bills;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/BillsServiceAsync/
+ public class BillsApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Идентификатор платежного документа
+ /// Токен отмены
+ /// Платежные документы
+ public async Task> ExportPaymentDocumentDataByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token = default)
+ {
+ var request = new ExportPaymentDocumentDataRequest(client);
+ return await request.ExecuteByPaymentDocumentIDAsync(paymentDocumentID, token);
+ }
+
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Год
+ /// Месяц
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Номер лицевого счета/иной идентификатор плательщика
+ /// Токен отмены
+ /// Платежные документы
+ public async Task> ExportPaymentDocumentDataByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token = default)
+ {
+ var request = new ExportPaymentDocumentDataRequest(client);
+ return await request.ExecuteByAccountNumberAsync(year, month, fiasHouseGuid, accountNumber, token);
+ }
+
+ ///
+ /// Экспорт платежных документов
+ ///
+ /// Год
+ /// Месяц
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Номер платежного документа, по которому внесена плата,
+ /// присвоенный такому документу исполнителем в целях осуществления расчетов по внесению платы
+ /// Токен отмены
+ /// Платежные документы
+ public async Task> ExportPaymentDocumentDataByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token = default)
+ {
+ var request = new ExportPaymentDocumentDataRequest(client);
+ return await request.ExecuteByPaymentDocumentNumberAsync(year, month, fiasHouseGuid, paymentDocumentNumber, token);
+ }
+
+ ///
+ /// Импорт сведений о платежных документах
+ ///
+ /// Пейлоад сведений о платежных документах
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportPaymentDocumentDataAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportPaymentDocumentDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/DeviceMeteringApi.cs b/Hcs.ClientNet/Client/Api/DeviceMeteringApi.cs
new file mode 100644
index 0000000..2f88ec0
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/DeviceMeteringApi.cs
@@ -0,0 +1,37 @@
+using Hcs.ClientNet.Api.Payload.DeviceMetering;
+using Hcs.ClientNet.Api.Request.DeviceMetering;
+using Hcs.Service.Async.DeviceMetering;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/DeviceMeteringServiceAsync/
+ public class DeviceMeteringApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Экспорт истории показаний и поверок приборов учета пользователя, установленных в указанном доме
+ ///
+ /// Пейлоад выборки ПУ
+ /// Токен отмены
+ /// Лицевые счета
+ public async Task> ExportMeteringDeviceHistoryAsync(ExportMeteringDeviceHistoryPayload payload, CancellationToken token = default)
+ {
+ var request = new ExportMeteringDeviceHistoryRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт показаний приборов учета
+ ///
+ /// Показания прибора учета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportMeteringDeviceValuesAsync(importMeteringDeviceValuesRequestMeteringDevicesValues values, CancellationToken token = default)
+ {
+ var request = new ImportMeteringDeviceValuesRequest(client);
+ return await request.ExecuteAsync(values, token);
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/HouseManagementApi.cs b/Hcs.ClientNet/Client/Api/HouseManagementApi.cs
new file mode 100644
index 0000000..967c913
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/HouseManagementApi.cs
@@ -0,0 +1,169 @@
+using Hcs.ClientNet.Api.Payload.HouseManagement;
+using Hcs.ClientNet.Api.Request.HouseManagement;
+using Hcs.Service.Async.HouseManagement;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/HouseManagementServiceAsync/
+ public class HouseManagementApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Экспорт лицевых счетов
+ ///
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Токен отмены
+ /// Лицевые счета
+ public async Task> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default)
+ {
+ var request = new ExportAccountRequest(client);
+ return await request.ExecuteAsync(fiasHouseGuid, token);
+ }
+
+ ///
+ /// Возвращает информацию о доме
+ ///
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ /// Токен отмены
+ /// Информация о доме
+ public async Task> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default)
+ {
+ var request = new ExportHouseRequest(client);
+ return await request.ExecuteAsync(fiasHouseGuid, token);
+ }
+
+ ///
+ /// Возвращает все договора ресурсоснабжения
+ ///
+ /// Токен отмены
+ /// Договора ресурсоснабжения
+ public async Task> ExportSupplyResourceContractDataAsync(CancellationToken token = default)
+ {
+ var request = new ExportSupplyResourceContractDataRequest(client);
+ return await request.ExecuteAsync(token);
+ }
+
+ ///
+ /// Возвращает договор ресурсоснабжения по его идентификатору в ГИС ЖКХ
+ ///
+ /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Договор ресурсоснабжения
+ public async Task ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default)
+ {
+ var request = new ExportSupplyResourceContractDataRequest(client);
+ return await request.ExecuteAsync(contractRootGuid, token);
+ }
+
+ ///
+ /// Возвращает договор ресурсоснабжения по номеру договора в ГИС ЖКХ
+ ///
+ /// Номер договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Договор ресурсоснабжения
+ public async Task ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default)
+ {
+ var request = new ExportSupplyResourceContractDataRequest(client);
+ return await request.ExecuteAsync(contractNumber, token);
+ }
+
+ ///
+ /// Возвращает объекты жилищного фонда из договора ресурсоснабжения по его идентификатору
+ ///
+ /// Идентификатор договора ресурсоснабжения в ГИС ЖКХ
+ /// Токен отмены
+ /// Объекты жилищного фонда
+ public async Task> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default)
+ {
+ var request = new ExportSupplyResourceContractObjectAddressDataRequest(client);
+ return await request.ExecuteAsync(contractRootGuid, token);
+ }
+
+ ///
+ /// Импорт лицевого счета
+ ///
+ /// Пейлоад лицевого счета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportAccountDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт сведений о ДУ (создание ДУ)
+ ///
+ /// Пейлоад ДУ
+ /// Токен отмены
+ /// Импортированный договор
+ public async Task ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportContractDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт данных дома
+ ///
+ /// Пейлоад данных дома
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportHouseUODataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт прибора учета
+ ///
+ /// Прибор учета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default)
+ {
+ var request = new ImportMeteringDeviceDataRequest(client);
+ return await request.ExecuteAsync(meteringDevice, token);
+ }
+
+ ///
+ /// Импорт новости для информирования граждан
+ ///
+ /// Пейлоад новости
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportNotificationDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт договора ресурсоснабжения с РСО
+ ///
+ /// Пейлоад договора ресурсоснабжения
+ /// Токен отмены
+ /// Импортированный договор
+ public async Task ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportSupplyResourceContractDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт проекта договора ресурсоснабжения с РСО
+ ///
+ /// Пейлоад проекта договора ресурсоснабжения
+ /// Токен отмены
+ /// Импортированный проект договора
+ public async Task ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportSupplyResourceContractProjectRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/NsiApi.cs b/Hcs.ClientNet/Client/Api/NsiApi.cs
new file mode 100644
index 0000000..7ec6b43
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/NsiApi.cs
@@ -0,0 +1,32 @@
+using Hcs.ClientNet.Api.Request.Exception;
+using Hcs.ClientNet.Api.Request.Nsi;
+using Hcs.Service.Async.Nsi;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/NsiService/
+ public class NsiApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Возвращает данные справочника поставщика информации
+ ///
+ /// Реестровый номер справочника
+ /// Токен отмены
+ /// Данные справочника
+ public async Task> ExportDataProviderNsiItemAsync(exportDataProviderNsiItemRequestRegistryNumber registryNumber, CancellationToken token = default)
+ {
+ try
+ {
+ var request = new ExportDataProviderNsiItemRequest(client);
+ return await request.ExecuteAsync(registryNumber, token);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return [];
+ }
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/NsiCommonApi.cs b/Hcs.ClientNet/Client/Api/NsiCommonApi.cs
new file mode 100644
index 0000000..7cd090a
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/NsiCommonApi.cs
@@ -0,0 +1,51 @@
+using Hcs.ClientNet.Api.Request.Exception;
+using Hcs.ClientNet.Api.Request.NsiCommon;
+using Hcs.Service.Async.NsiCommon;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/NsiCommonService/
+ public class NsiCommonApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Возвращает данные общесистемного справочника
+ ///
+ /// Реестровый номер справочника
+ /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
+ /// Токен отмены
+ /// Данные общесистемного справочника
+ public async Task ExportNsiItemAsync(int registryNumber, ListGroup listGroup, CancellationToken token = default)
+ {
+ try
+ {
+ var request = new ExportNsiItemRequest(client);
+ return await request.ExecuteAsync(registryNumber, listGroup, token);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return null;
+ }
+ }
+
+ ///
+ /// Возвращает перечень общесистемных справочников с указанием даты последнего изменения каждого из них
+ ///
+ /// Группа справочников, где NSI - общесистемный, а NSIRAO - ОЖФ
+ /// Токен отмены
+ /// Перечень общесистемных справочников
+ public async Task ExportNsiListAsync(ListGroup listGroup, CancellationToken token = default)
+ {
+ try
+ {
+ var request = new ExportNsiListRequest(client);
+ return await request.ExecuteAsync(listGroup, token);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return null;
+ }
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/OrgRegistryCommonApi.cs b/Hcs.ClientNet/Client/Api/OrgRegistryCommonApi.cs
new file mode 100644
index 0000000..02cc5e3
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/OrgRegistryCommonApi.cs
@@ -0,0 +1,52 @@
+using Hcs.ClientNet.Api.Request.Exception;
+using Hcs.ClientNet.Api.Request.OrgRegistryCommon;
+using Hcs.Service.Async.OrgRegistryCommon;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/OrganizationsRegistryCommonAsyncService/
+ public class OrgRegistryCommonApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// Экспорт сведений о поставщиках информации ИС
+ ///
+ /// Выгрузить только активных поставщиков данных
+ /// Токен отмены
+ /// Сведения о поставщиках данных
+ public async Task> ExportDataProviderAsync(bool isActual, CancellationToken token = default)
+ {
+ try
+ {
+ var request = new ExportDataProviderRequest(client);
+ return await request.ExecuteAsync(isActual, token);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return [];
+ }
+ }
+
+ ///
+ /// Экспорт сведений из реестра организаций
+ ///
+ /// ОГРН
+ /// КПП
+ /// Токен отмены
+ /// Сведения из реестра организаций
+ public async Task> ExportOrgRegistryAsync(string ogrn, string kpp, CancellationToken token = default)
+ {
+ try
+ {
+ var request = new ExportOrgRegistryRequest(client);
+ return await request.ExecuteAsync(ogrn, kpp, token);
+ }
+ catch (NoResultsRemoteException)
+ {
+ return [];
+ }
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/Bills/ImportPaymentDocumentDataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/Bills/ImportPaymentDocumentDataPayload.cs
new file mode 100644
index 0000000..0af91e8
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/Bills/ImportPaymentDocumentDataPayload.cs
@@ -0,0 +1,241 @@
+using Hcs.ClientNet.Api.Registry;
+using Hcs.ClientNet.Api.Type;
+using System;
+using System.Collections.Generic;
+
+namespace Hcs.ClientNet.Api.Payload.Bills
+{
+ // http://open-gkh.ru/Bills/importPaymentDocumentRequest.html
+ public class ImportPaymentDocumentDataPayload
+ {
+ // http://open-gkh.ru/Bills/importPaymentDocumentRequest/PaymentInformation.html
+ public class PaymentInformation
+ {
+ ///
+ /// БИК банка получателя
+ ///
+ public string bankBIK;
+
+ ///
+ /// Номер расчетного счета
+ ///
+ public string operatingAccountNumber;
+ }
+
+ ///
+ /// Начисление по услуге
+ ///
+ // http://open-gkh.ru/Bills/PaymentDocumentType/ChargeInfo.html
+ public interface IChargeInfo { }
+
+ ///
+ /// Главная коммунальная услуга
+ ///
+ // http://open-gkh.ru/Bills/PDServiceChargeType/MunicipalService.html
+ public class MunicipalService : IChargeInfo
+ {
+ ///
+ /// Необязательное. Перерасчеты, корректировки, руб.
+ ///
+ public decimal? moneyRecalculation;
+
+ ///
+ /// Необязательное. Льготы, субсидии, скидки, руб.
+ ///
+ public decimal? moneyDiscount;
+
+ ///
+ /// Необязательное. Норматив потребления коммунальных ресурсов в целях использования и содержания
+ /// общего имущества в многоквартирном доме.
+ ///
+ public decimal? houseOverallNeedsNorm;
+
+ ///
+ /// Необязательное. Норматив потребления коммунальных услуг.
+ ///
+ public decimal? individualConsumptionNorm;
+
+ ///
+ /// Необязательное. Текущие показания приборов учёта коммунальных ресурсов - индивидуальных
+ /// (квартирных).
+ ///
+ public decimal? individualConsumptionCurrentValue;
+
+ ///
+ /// Необязательное. Текущие показания приборов учёта коммунальных ресурсов - коллективных (общедомовых).
+ ///
+ public decimal? houseOverallNeedsCurrentValue;
+
+ ///
+ /// Необязательное. Суммарный объём коммунальных ресурсов в многоквартирном доме - в помещениях дома.
+ ///
+ public decimal? houseTotalIndividualConsumption;
+
+ ///
+ /// Необязательное. Суммарный объём коммунальных ресурсов в многоквартирном доме - в целях содержания
+ /// общего имущества в многоквартирном доме.
+ ///
+ public decimal? houseTotalHouseOverallNeeds;
+
+ ///
+ /// Необязательное. Способ определения объема коммунальных ресурсов при индивидуальном потреблении.
+ ///
+ public MunicipalServiceVolumeDeterminingMethod? individualConsumptionVolumeDeterminingMethod;
+
+ ///
+ /// Необязательное. Объем/площадь/кол-во коммунальных ресурсов при индивидуальном потреблении.
+ ///
+ public decimal? individualConsumptionVolumeValue;
+
+ ///
+ /// Необязательное. Способ определения объема коммунальных ресурсов при содержании общего имущества.
+ ///
+ public MunicipalServiceVolumeDeterminingMethod? overallConsumptionVolumeDeterminingMethod;
+
+ ///
+ /// Необязательное. Объем/площадь/кол-во коммунальных ресурсов при содержании общего имущества.
+ ///
+ public decimal? overallConsumptionVolumeValue;
+
+ ///
+ /// Необязательное. Размер повышающего коэффициента.
+ ///
+ public decimal? multiplyingFactorRatio;
+
+ ///
+ /// Необязательное. Размер превышения платы, рассчитанной с применением повышающего коэффициента над
+ /// размером платы, рассчитанной без учета повышающего коэффициента, руб.
+ ///
+ public decimal? amountOfExcessFees;
+
+ ///
+ /// К оплате за индивидуальное потребление коммунальной услуги, руб.
+ ///
+ public decimal? municipalServiceIndividualConsumptionPayable;
+
+ ///
+ /// К оплате за общедомовое потребление коммунальной услуги, руб.
+ ///
+ public decimal? municipalServiceCommunalConsumptionPayable;
+
+ ///
+ /// Необязательное. Размер платы за коммунальные услуги, индивидуальное потребление.
+ ///
+ public decimal? amountOfPaymentMunicipalServiceIndividualConsumption;
+
+ ///
+ /// Необязательное. Размер платы за коммунальные услуги, общедомовые нужды.
+ ///
+ public decimal? amountOfPaymentMunicipalServiceCommunalConsumption;
+
+ ///
+ /// Код услуги из справочника "Вид коммунальной услуги" НСИ 3
+ ///
+ public RegistryElement serviceType;
+
+ ///
+ /// Тариф/Размер платы на кв.м, руб./Размер взноса на кв.м, руб.
+ ///
+ public decimal rate;
+
+ ///
+ /// К оплате за расчетный период, руб.
+ ///
+ public decimal totalPayable;
+
+ ///
+ /// Необязательное. Начислено за расчетный период (без перерасчетов и льгот), руб.
+ ///
+ public decimal? accountingPeriodTotal;
+ }
+
+ // http://open-gkh.ru/Bills/importPaymentDocumentRequest/PaymentDocument.html
+ public class PaymentDocument
+ {
+ ///
+ /// Платежный реквизит
+ ///
+ public PaymentInformation paymentInformation;
+
+ ///
+ /// Идентификатор лицевого счета
+ ///
+ public string accountGuid;
+
+ ///
+ /// Необязательное. Номер платежного документа, по которому внесена плата, присвоенный такому
+ /// документу исполнителем в целях осуществления расчетов по внесению платы
+ ///
+ public string paymentDocumentNumber;
+
+ ///
+ /// Начисления по услугам
+ ///
+ public List chargeInfo;
+
+ ///
+ /// Если true, то выставлен на оплату, иначе - отозван
+ ///
+ public bool exposeNotWithdraw;
+
+ ///
+ /// Необязательное. Задолженность за предыдущие периоды, руб.
+ ///
+ public decimal? debtPreviousPeriods;
+
+ ///
+ /// Необязательное. Аванс на начало расчетного периода, руб.
+ ///
+ public decimal? advanceBllingPeriod;
+
+ ///
+ /// Необязательное. Итого к оплате за расчетный период c учетом задолженности/переплаты, руб.
+ /// (по всему платежному документу)
+ ///
+ public decimal? totalPayableByPDWithDebtAndAdvance;
+
+ ///
+ /// Необязательное. Сумма к оплате за расчетный период, руб. (по всему платежному документу).
+ ///
+ public decimal? totalPayableByPD;
+
+ ///
+ /// Необязательное. Оплачено денежных средств, руб.
+ ///
+ public decimal? paidCash;
+
+ ///
+ /// Необязательное. Дата последней поступившей оплаты
+ ///
+ public DateTime? dateOfLastReceivedPayment;
+ }
+
+ ///
+ /// Необязательное. Если true, то передаваемые данные платежных документов, следует считать верными,
+ /// даже если они отличаются от автоматически рассчитанных системой значений. В том случае, если параметр
+ /// не заполнен, то ГИС ЖХК будет проводить автоматическую проверку рассчитываемых сумм по ПД.
+ ///
+ public bool confirmAmountsCorrect;
+
+ ///
+ /// Месяц расчетного периода платежного документа
+ ///
+ public int month;
+
+ ///
+ /// Год расчетного периода платежного документа
+ ///
+ public short year;
+
+ ///
+ /// Сведения о платежных реквизитах получателя платежа - бизнес-ключ поиска размещенных платежных
+ /// реквизитов в ГИС ЖКХ
+ ///
+ public PaymentInformation[] paymentInformation;
+
+ ///
+ /// Размещаемый платежный документ. Максимум 500.
+ ///
+ public PaymentDocument[] paymentDocument;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/DeviceMetering/ExportMeteringDeviceHistoryPayload.cs b/Hcs.ClientNet/Client/Api/Payload/DeviceMetering/ExportMeteringDeviceHistoryPayload.cs
new file mode 100644
index 0000000..cef909f
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/DeviceMetering/ExportMeteringDeviceHistoryPayload.cs
@@ -0,0 +1,91 @@
+using Hcs.ClientNet.Api.Registry;
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.DeviceMetering
+{
+ // http://open-gkh.ru/DeviceMetering/exportMeteringDeviceHistoryRequest.html
+ public class ExportMeteringDeviceHistoryPayload
+ {
+ ///
+ /// Необязательное. Список из уникальных идентификаторов домов по ФИАС, в которых установлены ПУ
+ /// пользователей. Если не указано, то будут экспортироваться данные по всем ПУ пользователей.
+ ///
+ public string[] fiasHouseGuid;
+
+ ///
+ /// Выборочное. Выбор между , и
+ /// . Тип прибора учета (НСИ 27). Максимум 100 по выбранным.
+ ///
+ public RegistryElement[] meteringDeviceType;
+
+ ///
+ /// Выборочное. Выбор между , и
+ /// . Вид коммунального ресурса (НСИ 2). Максимум 100 по выбранным.
+ ///
+ public RegistryElement[] municipalResource;
+
+ ///
+ /// Выборочное. Выбор между , и
+ /// . Идентификатор ПУ. Максимум 100 по выбранным.
+ ///
+ public string[] meteringDeviceRootGUID;
+
+ ///
+ /// Необязательное. Дата ввода в эксплуатацию "С".
+ ///
+ public DateTime? commissioningDateFrom;
+
+ ///
+ /// Необязательное. Дата ввода в эксплуатацию "П".
+ ///
+ public DateTime? сommissioningDateTo;
+
+ ///
+ /// Необязательное. Выгружать архивированные или нет.
+ ///
+ public bool? serchArchived;
+
+ ///
+ /// Необязательное. Дата архивации "С".
+ ///
+ public DateTime? archiveDateFrom;
+
+ ///
+ /// Необязательное. Дата архивации "По".
+ ///
+ public DateTime? archiveDateTo;
+
+ ///
+ /// Необязательное. Дата начала периода, за который выгружаются показания и поверки ПУ (по дате
+ /// снятия показаний). Период выгрузки показаний ПУ (определяемый элементами
+ /// и ) не должен выходить за пределы двух последовательных календарных месяцев.
+ ///
+ public DateTime? inputDateFrom;
+
+ ///
+ /// Необязательное. Дата окончания периода, за который выгружаются показания и поверки ПУ (по дате
+ /// снятия показаний). Период выгрузки показаний ПУ (определяемый элементами
+ /// и ) не должен выходить за пределы двух последовательных календарных месяцев.
+ ///
+ public DateTime? inputDateTo;
+
+ ///
+ /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему гражданином,
+ /// включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку не включаются.
+ ///
+ public bool? excludePersonAsDataSource;
+
+ ///
+ /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему текущей
+ /// организацией, включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку не включаются.
+ ///
+ public bool? excludeCurrentOrgAsDataSource;
+
+ ///
+ /// Необязательное. Если флаг сброшен или отсутствует, то показания, введенные в систему организациями
+ /// отличной от текущей, включаются в выгрузку. Если флаг установлен, то такие показания в выгрузку
+ /// не включаются.
+ ///
+ public bool? excludeOtherOrgAsDataSource;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs
new file mode 100644
index 0000000..33f6381
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs
@@ -0,0 +1,97 @@
+using Hcs.Service.Async.HouseManagement;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ // http://open-gkh.ru/HouseManagement/importAccountRequest/Account.html
+ public class ImportAccountDataPayload
+ {
+ ///
+ /// Тип лицевого счета
+ ///
+ public enum AccountType
+ {
+ ///
+ /// Лицевой счет для оплаты за жилое помещение и коммунальные услуги
+ ///
+ UO,
+
+ ///
+ /// Лицевой счет для оплаты за коммунальные услуги
+ ///
+ RSO,
+
+ ///
+ /// Лицевой счет для оплаты капитального ремонта
+ ///
+ CR,
+
+ ///
+ /// Лицевой счет РКЦ
+ ///
+ RC,
+
+ ///
+ /// Лицевой счет ОГВ/ОМС
+ ///
+ OGVorOMS,
+
+ ///
+ /// Лицевой счет ТКО
+ ///
+ TKO
+ }
+
+ ///
+ /// Необязательное. Номер лицевого счета или иной идентификатор плательщика. Максимум 30 символов.
+ ///
+ public string accountNumber;
+
+ ///
+ /// Необязательное. Идентификатор ЛС в ГИС ЖКХ (при обновлении данных ЛС).
+ ///
+ public string accountGUID;
+
+ ///
+ /// Необязательное. Конкретизация оснований ЛС (договоров ресурсоснабжения, договоров социального найма,
+ /// договоров по обращению с ТКО).
+ ///
+ public AccountReasonsImportType accountReasons;
+
+ ///
+ /// Тип лицевого счета
+ ///
+ public AccountType accountType;
+
+ ///
+ /// Необязательное. Количество проживающих, не больше 9999.
+ ///
+ public uint? livingPersonsNumber;
+
+ ///
+ /// Необязательное. Общая площадь для ЛС. Не более 4 цифр после целой.
+ ///
+ public decimal? totalSquare;
+
+ ///
+ /// Необязательное. Жилая площадь. Не более 4 цифр после целой.
+ ///
+ public decimal? residentialSquare;
+
+ ///
+ /// Необязательное. Отапливаемая площадь. Не более 4 цифр после целой.
+ ///
+ public decimal? heatedArea;
+
+ // TODO: Добавить причину закрытия лицевого счета
+
+ ///
+ /// Помещения
+ ///
+ public AccountTypeAccommodation[] accomodations;
+
+ ///
+ /// Сведения о платильщике
+ ///
+ public AccountTypePayerInfo payerInfo;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs
new file mode 100644
index 0000000..88c139b
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportContractDataPayload.cs
@@ -0,0 +1,69 @@
+using Hcs.ClientNet.Api.Registry;
+using Hcs.Service.Async.HouseManagement;
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ public class ImportContractDataPayload
+ {
+ // TODO: LicenseRequest
+
+ ///
+ /// Объекты управления
+ ///
+ public importContractRequestContractPlacingContractContractObject[] contractObjects;
+
+ ///
+ /// Номер документа
+ ///
+ public string docNum;
+
+ ///
+ /// Дата заключения
+ ///
+ public DateTime signingDate;
+
+ ///
+ /// Дата вступления в силу
+ ///
+ public DateTime effectiveDate;
+
+ ///
+ /// Планируемая дата окончания
+ ///
+ public DateTime planDateComptetion;
+
+ // TODO: Вторая сторона договора
+
+ // TODO: Protocol
+
+ ///
+ /// Ссылка на НСИ "Основание заключения договора" (реестровый номер 58)
+ ///
+ public RegistryElement contractBase;
+
+ ///
+ /// Сведения о сроках
+ ///
+ public DateDetailsType dateDetailsType;
+
+ ///
+ /// Договор на управление и приложения
+ ///
+ public AttachmentType[] contractAttachment;
+
+ // TODO: AgreementAttachment
+
+ // TODO: SignedOwners
+
+ // TODO: CommissioningPermitAgreement
+
+ // TODO: Charter
+
+ // TODO: LocalGovernmentDecision
+
+ // TODO: RegistryDecisionID
+
+ // TODO: AutomaticRollOverOneYear
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportLivingHouseUODataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportLivingHouseUODataPayload.cs
new file mode 100644
index 0000000..93785e5
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportLivingHouseUODataPayload.cs
@@ -0,0 +1,95 @@
+using Hcs.ClientNet.Api.Registry;
+using Hcs.Service.Async.HouseManagement;
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ // http://open-gkh.ru/HouseManagement/importHouseUORequest/LivingHouse/LivingHouseToCreate.html
+ // http://open-gkh.ru/HouseManagement/HouseBasicUOType.html
+ public class ImportLivingHouseUODataPayload
+ {
+ ///
+ /// Глобальный уникальный идентификатор дома по ФИАС
+ ///
+ public Guid fiasHouseGuid;
+
+ ///
+ /// Общая площадь здания
+ ///
+ public decimal totalSquare;
+
+ ///
+ /// Состояние (НСИ 24)
+ ///
+ public RegistryElement state;
+
+ ///
+ /// Необязательное. Стадия жизненного цикла (НСИ 338).
+ ///
+ public RegistryElement lifeCycleStage;
+
+ ///
+ /// Год ввода в эксплуатацию. До 2215 включительно.
+ ///
+ public short usedYear;
+
+ ///
+ /// Количество этажей. До 999 включительно.
+ ///
+ public int floorCount;
+
+ ///
+ /// Необязательное. ОКТМО (обязательное для всех территорий, за исключением города и космодрома
+ /// "Байконур"). Значение из ФИАС при наличии.
+ ///
+ public OKTMORefType oktmo;
+
+ ///
+ /// Часовая зона. Справочник 32.
+ ///
+ public RegistryElement olsonTZ;
+
+ ///
+ /// Наличие у дома статуса объекта культурного наследия
+ ///
+ public bool culturalHeritage;
+
+ ///
+ /// Необязательное. Данные ОЖФ
+ ///
+ public OGFData[] ogfData;
+
+ ///
+ /// Необязательное. Дом находится в муниципальной собственности и в полном объеме используется
+ /// в качестве общежития. Принимает только false.
+ ///
+ public bool isMunicipalProperty;
+
+ ///
+ /// Необязательное. Дом находится в собственности субъекта Российской Федерации и в полном объеме
+ /// используется в качестве общежития. Принимает только false.
+ ///
+ public bool isRegionProperty;
+
+ ///
+ /// Кадастровый номер
+ ///
+ public string cadastralNumber;
+
+ ///
+ /// Условный номер. При указании в ГИС ЖКХ осуществляется привязка к ЕГРП (поиск в ЕГРП выполняется
+ /// по условному номеру).
+ ///
+ public string conditionalNumber;
+
+ ///
+ /// Необязательное. Жилой дом блокированной застройки (если не указан - аналог false).
+ ///
+ public bool hasBlocks;
+
+ ///
+ /// Необязательное. Несколько жилых домов с одинаковым адресом (если не указан - аналог false)
+ ///
+ public bool hasMultipleHousesWithSameAddress;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportNotificationDataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportNotificationDataPayload.cs
new file mode 100644
index 0000000..491155f
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportNotificationDataPayload.cs
@@ -0,0 +1,75 @@
+using Hcs.Service.Async.HouseManagement;
+using System;
+using System.Collections.Generic;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ // http://open-gkh.ru/HouseManagement/importNotificationRequest/notification/Create.html
+ public class ImportNotificationDataPayload
+ {
+ ///
+ /// Выборочное. Строковое представление темы, вместо ссылки на справочник. Максимальная длина
+ /// текста равно 200 символам.
+ ///
+ public string topic;
+
+ ///
+ /// Выборочное. Тема из справочника 364, заместо строкового представления темы.
+ ///
+ public nsiRef topicFromRegistry;
+
+ ///
+ /// Необязательное. Показывает высокую важность новости.
+ ///
+ public bool isImportant;
+
+ ///
+ /// Необязательное. Текст новости с максимальной длиной в 5000 символов.
+ ///
+ public string content;
+
+ ///
+ /// Адресаты. Подходящие типы для значения:
+ /// , если это глобальный уникальный идентификатор дома по ФИАС,
+ /// ,
+ /// либо true, если все дома.
+ ///
+ public List> destinations;
+
+ ///
+ /// Выборочное. Если true, то новость всегда актуальна. Иначе период актуальности берется из
+ /// и .
+ ///
+ public bool isNotLimit;
+
+ ///
+ /// Условное. Период актуальности "С". Обязательно задается в случае = false.
+ ///
+ public DateTime? startDate;
+
+ ///
+ /// Условное. Период актуальности "ДО". Обязательно задается в случае = false.
+ ///
+ public DateTime? endDate;
+
+ ///
+ /// Необязательное. Документы новостей.
+ ///
+ public AttachmentType[] attachment;
+
+ ///
+ /// Необязательное. Если true, то новость отправляется адресатам.
+ ///
+ public bool isShipOff;
+
+ ///
+ /// Необязательное. Признак "Для публикации в мобильном приложении".
+ ///
+ public bool isForPublishToMobileApp;
+
+ ///
+ /// Необязательное. Информация для новости, публикуемой в мобильном приложении.
+ ///
+ public importNotificationRequestNotificationCreateMobileAppData mobileAppData;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs
new file mode 100644
index 0000000..d578e05
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractDataPayload.cs
@@ -0,0 +1,212 @@
+using Hcs.Service.Async.HouseManagement;
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ // http://open-gkh.ru/HouseManagement/SupplyResourceContractType.html
+ public class ImportSupplyResourceContractDataPayload
+ {
+ ///
+ /// Если договор не является публичным и/или присутствует заключенный на бумажном носителе
+ /// (электронной форме) и/или не заключен в отношении нежилых помещений в многоквартирных домах,
+ /// то равно true, иначе - false
+ ///
+ public bool isContract;
+
+ ///
+ /// Номер договора
+ ///
+ public string contractNumber;
+
+ ///
+ /// Дата заключения
+ ///
+ public DateTime signingDate;
+
+ ///
+ /// Дата вступления в силу
+ ///
+ public DateTime effectiveDate;
+
+ ///
+ /// Необязательное. Договор заключен на неопределенный срок или нет.
+ ///
+ public bool indefiniteTerm;
+
+ ///
+ /// Необязательное. Автоматически пролонгировать договор на один год при наступлении
+ /// даты окончания действия или нет.
+ ///
+ public bool automaticRollOverOneYear;
+
+ ///
+ /// Условное. Дата окончания действия. Обязательно для заполнения, если
+ /// = true.
+ ///
+ public DateTime? comptetionDate;
+
+ ///
+ /// Условное. Период передачи текущих показаний по индивидуальным приборам учета. Обязателен для
+ /// заполнения, если поле = true ИЛИ если поле
+ /// = true.
+ ///
+ public SupplyResourceContractTypePeriod period;
+
+ ///
+ /// Необязательное. Показывает, разрешена ли гражданам передача текущих показаний по
+ /// индивидуальным приборам учета в любой день месяца. Заполнение возможно только если: в настройках
+ /// организации установлена настройка "Разрешить передачу гражданам показаний индивидуальных или общих
+ /// (квартирных) приборов учета в любой день месяца" ИЛИ в настройках организации установлена настройка
+ /// "Разрешить передачу гражданам показаний индивидуальных или общих (квартирных) приборов учета только
+ /// в сроки, установленные в договоре, или в любой день месяца, если в договоре установлен признак
+ /// "Разрешить передачу показаний приборов учета в любой день месяца" И заполнен .
+ ///
+ public bool indicationsAnyDay;
+
+ ///
+ /// Необязательное. Ссылка на НСИ "Основание заключения договора" (реестровый номер 58). Значения
+ /// брать из .
+ ///
+ public nsiRef[] contractBase;
+
+ ///
+ /// Вторая сторона договора. Подходящие типы:
+ /// ,
+ /// ,
+ /// ,
+ /// ,
+ /// либо true, если это договор оферты.
+ ///
+ public object counterparty;
+
+ ///
+ /// Если в договоре в наличии плановый объем и режим подачи поставки ресурсов то true, иначе - false
+ ///
+ public bool isPlannedVolume;
+
+ ///
+ /// Необязательное. Тип ведения планового объема и режима подачи: D - в разрезе договора,
+ /// O - в разрезе объектов жилищного фонда. Заполняется при наличии в договоре планового объема и
+ /// режима поставки ресурсов.
+ ///
+ public SupplyResourceContractTypePlannedVolumeType? plannedVolumeType;
+
+ ///
+ /// Предмет договора. Максимум 100 записей.
+ ///
+ public SupplyResourceContractTypeContractSubject[] contractSubject;
+
+ ///
+ /// Условное. Размещение информации о начислениях за коммунальные услуги осуществляет: R(SO)- РСО,
+ /// P(roprietor) - исполнитель коммунальных услуг. Заполняется, если порядок размещения информации
+ /// о начислениях за коммунальные услуги ведется в разрезе договора.
+ ///
+ public SupplyResourceContractTypeCountingResource? countingResource;
+
+ ///
+ /// Показатели качества коммунальных ресурсов и температурный график ведутся: D - в разрезе договора,
+ /// O - в разрезе объектов жилищного фонда
+ ///
+ public SupplyResourceContractTypeSpecifyingQualityIndicators specifyingQualityIndicators;
+
+ ///
+ /// Необязательное. Признак "Отсутствие присоединения сетей объектов жилищного фонда к централизованной
+ /// системе водоснабжения". Может быть указан, только если показатели качества коммунальных ресурсов
+ /// ведутся в разрезе договора и предмет договора включает коммунальную услугу "Холодное водоснабжение"
+ /// И/ИЛИ "Горячее водоснабжение".
+ ///
+ public bool noConnectionToWaterSupply;
+
+ ///
+ /// Условное. Данные об объекте жилищного фонда. При импорте договора должен быть добавлен как минимум
+ /// один адрес объекта жилищного фонда.
+ ///
+ public SupplyResourceContractTypeObjectAddress[] objectAddress;
+
+ ///
+ /// Необязательное. Показатель качества (содержащийся в справочнике показателей качества). Если
+ /// показатели указываются в разрезе договора, то ссылка на ОЖФ не заполняется. Если показатели
+ /// указываются в разрезе ОЖФ, то ссылка на ОЖФ обязательна.
+ ///
+ public SupplyResourceContractTypeQuality[] quality;
+
+ ///
+ /// Необязательное. Иной показатель качества коммунального ресурса (не содержащийся в справочнике
+ /// показателей качества). Если показатели указываются в разрезе договора, то ссылка на ОЖФ
+ /// не заполняется. Если показатели указываются в разрезе ОЖФ, то ссылка на ОЖФ обязательна.
+ ///
+ public SupplyResourceContractTypeOtherQualityIndicator[] otherQualityIndicator;
+
+ ///
+ /// Необязательное. Информация о температурном графике. Если показатели качества указываются в разрезе
+ /// договора, то ссылка на ОЖФ в данном элементе не заполняется и элемент может заполняться только если
+ /// в предмете договора хотя бы раз встречается ресурс "Тепловая энергия". Если показатели качества
+ /// указываются в разрезе ОЖФ, то ссылка на ОЖФ обязательна и элемент заполняется только если
+ /// в рамках ОЖФ встречается ресурс "Тепловая энергия".
+ ///
+ public SupplyResourceContractTypeTemperatureChart[] temperatureChart;
+
+ ///
+ /// Условное. Срок представления (выставления) платежных документов, не позднее. Является
+ /// обязательным, если вторая сторона договора отличается от "Управляющая организация" ИЛИ если
+ /// заполнено поле . Не заполняется, если
+ /// = true.
+ ///
+ public SupplyResourceContractTypeBillingDate billingDate;
+
+ ///
+ /// Условное. Срок внесения платы, не позднее. Является обязательным, если вторая сторона договора
+ /// отличается от "Управляющая организация" И договор не является публичным и/или присутствует
+ /// заключенный на бумажном носителе или в электронной форме И в поле
+ /// = false. Не заполняется, если = true.
+ ///
+ public SupplyResourceContractTypePaymentDate paymentDate;
+
+ ///
+ /// Условное. Срок предоставления информации о поступивших платежах, не позднее. Является
+ /// обязательным, если второй стороной договора является "Управляющая организация",
+ /// "Размещение информации о начислениях за коммунальные услуги осуществляет" = "РСО" И
+ /// договор не является публичным и/или присутствует заключенный на бумажном носителе или в
+ /// электронной форме.
+ ///
+ public SupplyResourceContractTypeProvidingInformationDate providingInformationDate;
+
+ ///
+ /// Условное. Указывает на то, что размещение информации об индивидуальных приборах учета и их
+ /// показаниях осуществляет ресурсоснабжающая организация или нет. Обязательно для заполнения,
+ /// если в указано "РСО". В остальных случаях не заполняется.
+ ///
+ public bool? meteringDeviceInformation;
+
+ ///
+ /// Необязательное. Указывает на то, что объем поставки ресурса(ов) определяется на основании прибора
+ /// учета или нет. Поле не заполняется, если вторая сторона договора "Управляющая организация"
+ /// ИЛИ поле = true.
+ ///
+ public bool? volumeDepends;
+
+ ///
+ /// Необязательное. Указывает на то, что оплата предоставленных услуг осуществляется ли единоразово
+ /// при отгрузке указанных ресурсов без заведения лицевых счетов для потребителей. Доступно
+ /// для заполнения, только если вторая сторона договора отлична от "Управляющая организация".
+ ///
+ public bool? oneTimePayment;
+
+ ///
+ /// Необязательное. Порядок размещения информации о начислениях за коммунальные услуги ведется: D - в
+ /// разрезе договора, O - в разрезе объектов жилищного фонда. Заполняется, если второй стороной договора
+ /// является исполнитель коммунальных услуг.
+ ///
+ public SupplyResourceContractTypeAccrualProcedure? accrualProcedure;
+
+ ///
+ /// Необязательное. Информация о применяемом тарифе.
+ ///
+ public SupplyResourceContractTypeTariff[] tariff;
+
+ ///
+ /// Необязательное. Информация о нормативе потребления коммунальной услуги.
+ ///
+ public SupplyResourceContractTypeNorm[] norm;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractProjectPayload.cs b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractProjectPayload.cs
new file mode 100644
index 0000000..798699c
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/HouseManagement/ImportSupplyResourceContractProjectPayload.cs
@@ -0,0 +1,214 @@
+using Hcs.Service.Async.HouseManagement;
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.HouseManagement
+{
+ // http://open-gkh.ru/HouseManagement/SupplyResourceContractType.html
+ public class ImportSupplyResourceContractProjectPayload
+ {
+ ///
+ /// Если договор не является публичным и/или присутствует заключенный на бумажном носителе
+ /// (электронной форме) и/или не заключен в отношении нежилых помещений в многоквартирных домах,
+ /// то равно true, иначе - false
+ ///
+ public bool isContract;
+
+ ///
+ /// Номер договора
+ ///
+ public string contractNumber;
+
+ ///
+ /// Дата заключения
+ ///
+ public DateTime signingDate;
+
+ ///
+ /// Дата вступления в силу
+ ///
+ public DateTime effectiveDate;
+
+ ///
+ /// Необязательное. Договор заключен на неопределенный срок или нет.
+ ///
+ public bool indefiniteTerm;
+
+ ///
+ /// Необязательное. Автоматически пролонгировать договор на один год при наступлении
+ /// даты окончания действия или нет.
+ ///
+ public bool automaticRollOverOneYear;
+
+ ///
+ /// Условное. Дата окончания действия. Обязательно для заполнения, если
+ /// = true.
+ ///
+ public DateTime? comptetionDate;
+
+ ///
+ /// Условное. Период передачи текущих показаний по индивидуальным приборам учета. Обязателен для
+ /// заполнения, если поле = true ИЛИ если поле
+ /// = true.
+ ///
+ public SupplyResourceContractProjectTypePeriod period;
+
+ ///
+ /// Необязательное. Показывает, разрешена ли гражданам передача текущих показаний по
+ /// индивидуальным приборам учета в любой день месяца. Заполнение возможно только если: в настройках
+ /// организации установлена настройка "Разрешить передачу гражданам показаний индивидуальных или общих
+ /// (квартирных) приборов учета в любой день месяца" ИЛИ в настройках организации установлена настройка
+ /// "Разрешить передачу гражданам показаний индивидуальных или общих (квартирных) приборов учета только
+ /// в сроки, установленные в договоре, или в любой день месяца, если в договоре установлен признак
+ /// "Разрешить передачу показаний приборов учета в любой день месяца" И заполнен .
+ ///
+ public bool indicationsAnyDay;
+
+ ///
+ /// Необязательное. Ссылка на НСИ "Основание заключения договора" (реестровый номер 58). Значения
+ /// брать из .
+ ///
+ public nsiRef[] contractBase;
+
+ ///
+ /// Вторая сторона договора. Подходящие типы:
+ /// ,
+ /// ,
+ /// ,
+ /// ,
+ /// либо true, если это договор оферты.
+ ///
+ public object counterparty;
+
+ ///
+ /// Если в договоре в наличии плановый объем и режим подачи поставки ресурсов то true, иначе - false
+ ///
+ public bool isPlannedVolume;
+
+ ///
+ /// Необязательное. Тип ведения планового объема и режима подачи: D - в разрезе договора,
+ /// O - в разрезе объектов жилищного фонда. Заполняется при наличии в договоре планового объема и
+ /// режима поставки ресурсов.
+ ///
+ public SupplyResourceContractProjectTypePlannedVolumeType? plannedVolumeType;
+
+ ///
+ /// Предмет договора. Максимум 100 записей.
+ ///
+ public SupplyResourceContractProjectTypeContractSubject[] contractSubject;
+
+ ///
+ /// Условное. Размещение информации о начислениях за коммунальные услуги осуществляет: R(SO)- РСО,
+ /// P(roprietor) - исполнитель коммунальных услуг. Заполняется, если порядок размещения информации
+ /// о начислениях за коммунальные услуги ведется в разрезе договора.
+ ///
+ public SupplyResourceContractProjectTypeCountingResource? countingResource;
+
+ ///
+ /// Показатели качества коммунальных ресурсов и температурный график ведутся: D - в разрезе договора,
+ /// O - в разрезе объектов жилищного фонда
+ ///
+ public SupplyResourceContractProjectTypeSpecifyingQualityIndicators specifyingQualityIndicators;
+
+ ///
+ /// Необязательное. Признак "Отсутствие присоединения сетей объектов жилищного фонда к централизованной
+ /// системе водоснабжения". Может быть указан, только если показатели качества коммунальных ресурсов
+ /// ведутся в разрезе договора и предмет договора включает коммунальную услугу "Холодное водоснабжение"
+ /// И/ИЛИ "Горячее водоснабжение".
+ ///
+ public bool noConnectionToWaterSupply;
+
+ ///
+ /// Необязательное. Показатель качества (содержащийся в справочнике показателей качества). Обязательно
+ /// для заполнения, если показатели качества указываются в разрезе договора. Для пары КУ и КР
+ /// "Горячее водоснабжение" и "Питьевая вода" указываются актуальные показатели, определенные для КР
+ /// "Горячая вода" в справочнике показателей качества коммунальных ресурсов. Для пары КУ и КР
+ /// "Горячее водоснабжение" и "Тепловая энергия" информация о показателях качества не заполняется
+ /// только в том случае, если для договора (если показатели ведутся в разрезе договора) или
+ /// ОЖФ в договоре (если показатели ведутся в разрезе ОЖФ) также указана пара КУ и КР
+ /// "Горячее водоснабжение" и "Питьевая вода".
+ ///
+ public SupplyResourceContractProjectTypeQuality[] quality;
+
+ ///
+ /// Необязательное. Иной показатель качества коммунального ресурса (не содержащийся в справочнике
+ /// показателей качества).
+ ///
+ public SupplyResourceContractProjectTypeOtherQualityIndicator[] otherQualityIndicator;
+
+ ///
+ /// Необязательное. Информация о температурном графике. Доступно для заполнения только если в
+ /// предмете договора хотя бы раз встречается ресурс "Тепловая энергия".
+ ///
+ public SupplyResourceContractProjectTypeTemperatureChart[] temperatureChart;
+
+ ///
+ /// Условное. Срок представления (выставления) платежных документов, не позднее. Является
+ /// обязательным, если вторая сторона договора отличается от "Управляющая организация" ИЛИ если
+ /// заполнено поле . Не заполняется, если
+ /// = true.
+ ///
+ public SupplyResourceContractProjectTypeBillingDate billingDate;
+
+ ///
+ /// Условное. Срок внесения платы, не позднее. Является обязательным, если вторая сторона договора
+ /// отличается от "Управляющая организация" И договор не является публичным и/или присутствует
+ /// заключенный на бумажном носителе или в электронной форме И в поле
+ /// = false. Не заполняется, если = true.
+ ///
+ public SupplyResourceContractProjectTypePaymentDate paymentDate;
+
+ ///
+ /// Условное. Срок предоставления информации о поступивших платежах, не позднее. Является
+ /// обязательным, если второй стороной договора является "Управляющая организация",
+ /// "Размещение информации о начислениях за коммунальные услуги осуществляет" = "РСО" И
+ /// договор не является публичным и/или присутствует заключенный на бумажном носителе или в
+ /// электронной форме.
+ ///
+ public SupplyResourceContractProjectTypeProvidingInformationDate providingInformationDate;
+
+ ///
+ /// Условное. Указывает на то, что размещение информации об индивидуальных приборах учета и их
+ /// показаниях осуществляет ресурсоснабжающая организация или нет. Обязательно для заполнения,
+ /// если в указано "РСО". В остальных случаях не заполняется.
+ ///
+ public bool? meteringDeviceInformation;
+
+ ///
+ /// Необязательное. Указывает на то, что объем поставки ресурса(ов) определяется на основании прибора
+ /// учета или нет. Поле не заполняется, если вторая сторона договора "Управляющая организация"
+ /// ИЛИ поле = true.
+ ///
+ public bool? volumeDepends;
+
+ ///
+ /// Необязательное. Указывает на то, что оплата предоставленных услуг осуществляется ли единоразово
+ /// при отгрузке указанных ресурсов без заведения лицевых счетов для потребителей. Доступно
+ /// для заполнения, только если вторая сторона договора отлична от "Управляющая организация".
+ ///
+ public bool? oneTimePayment;
+
+ ///
+ /// Необязательное. Порядок размещения информации о начислениях за коммунальные услуги ведется: D - в
+ /// разрезе договора, O - в разрезе объектов жилищного фонда. Заполняется, если второй стороной договора
+ /// является исполнитель коммунальных услуг.
+ ///
+ public SupplyResourceContractProjectTypeAccrualProcedure? accrualProcedure;
+
+ ///
+ /// Кода ФИАС региона РФ, в котором применяются тарифы и/или нормативы потребления КУ (у поставщика
+ /// данных должна быть подтвержденная функция РСО в этом Субъекте РФ).
+ ///
+ public string regionCodeFias;
+
+ ///
+ /// Необязательное. Информация о применяемом тарифе. Заполнется при указании .
+ ///
+ public SupplyResourceContractProjectTypeRegionalSettingsTariff[] tariff;
+
+ ///
+ /// Необязательное. Информация о нормативе потребления коммунальной услуги. Заполнется при
+ /// указании .
+ ///
+ public SupplyResourceContractProjectTypeRegionalSettingsNorm[] norm;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/Payments/ImportNotificationsOfOrderExecutionPayload.cs b/Hcs.ClientNet/Client/Api/Payload/Payments/ImportNotificationsOfOrderExecutionPayload.cs
new file mode 100644
index 0000000..5fca35c
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/Payments/ImportNotificationsOfOrderExecutionPayload.cs
@@ -0,0 +1,48 @@
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.Payments
+{
+ // http://open-gkh.ru/Payment/importNotificationsOfOrderExecutionRequest/NotificationOfOrderExecution139Type.html
+ public class ImportNotificationsOfOrderExecutionPayload
+ {
+ ///
+ /// Уникальный номер платежа (идентификатор операции)
+ ///
+ public string orderId;
+
+ ///
+ /// Дата
+ ///
+ public DateTime orderDate;
+
+ ///
+ /// Сумма оплаты (в копейках)
+ ///
+ public decimal amount;
+
+ ///
+ /// Необязательное. Признак онлайн-оплаты.
+ ///
+ public bool? onlinePayment;
+
+ ///
+ /// Необязательное. Год. Указывать совместно с .
+ ///
+ public short? year;
+
+ ///
+ /// Необязательное. Месяц. Указывать совместно с .
+ ///
+ public int? month;
+
+ ///
+ /// Идентификатор платежного документа
+ ///
+ public string paymentDocumentId;
+
+ ///
+ /// GUID платежного документа
+ ///
+ public string paymentDocumentGUID;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Payload/Payments/ImportSupplierNotificationsOfOrderExecutionPayload.cs b/Hcs.ClientNet/Client/Api/Payload/Payments/ImportSupplierNotificationsOfOrderExecutionPayload.cs
new file mode 100644
index 0000000..6c1d019
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Payload/Payments/ImportSupplierNotificationsOfOrderExecutionPayload.cs
@@ -0,0 +1,38 @@
+using System;
+
+namespace Hcs.ClientNet.Api.Payload.Payments
+{
+ // http://open-gkh.ru/Payment/importSupplierNotificationsOfOrderExecutionRequest/SupplierNotificationOfOrderExecution.html
+ public class ImportSupplierNotificationsOfOrderExecutionPayload
+ {
+ ///
+ /// Дата внесения платы (в случае отсутствия: дата поступления средств)
+ ///
+ public DateTime orderDate;
+
+ ///
+ /// Необязательное. Месяц, за который вносится плата. Указывать совместно с .
+ ///
+ public int? month;
+
+ ///
+ /// Необязательное. Год, за который вносится плата. Указывать совместно с .
+ ///
+ public short? year;
+
+ ///
+ /// Идентификатор платежного документа
+ ///
+ public string paymentDocumentId;
+
+ ///
+ /// Сумма
+ ///
+ public decimal amount;
+
+ ///
+ /// Необязательное. Признак онлайн-оплаты.
+ ///
+ public bool? onlinePayment;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/PaymentsApi.cs b/Hcs.ClientNet/Client/Api/PaymentsApi.cs
new file mode 100644
index 0000000..a9c4986
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/PaymentsApi.cs
@@ -0,0 +1,35 @@
+using Hcs.ClientNet.Api.Payload.Payments;
+using Hcs.ClientNet.Api.Request.Payments;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api
+{
+ // http://open-gkh.ru/PaymentsServiceAsync/
+ public class PaymentsApi(ClientBase client) : ApiBase(client)
+ {
+ ///
+ /// ВИ_ОПЛАТА_ИЗВ. Передать перечень документов "Извещение о принятии к исполнению распоряжения".
+ ///
+ /// Пейлоад документа
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportNotificationsOfOrderExecutionAsync(ImportNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportNotificationsOfOrderExecutionRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+ ///
+ /// Импорт пакета документов "Извещение о принятии к исполнению распоряжения", размещаемых исполнителем
+ ///
+ /// Пейлоад документа
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportSupplierNotificationsOfOrderExecutionAsync(ImportSupplierNotificationsOfOrderExecutionPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportSupplierNotificationsOfOrderExecutionRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry16.cs b/Hcs.ClientNet/Client/Api/Registry/Registry16.cs
new file mode 100644
index 0000000..87c5b55
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry16.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Межповерочный интервал" (реестровый номер 16).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-16/v1.
+ ///
+ public static class Registry16
+ {
+ ///
+ /// 4 года
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "e5e3288d-2994-41f7-8e44-f329b09ab77f");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry2.cs b/Hcs.ClientNet/Client/Api/Registry/Registry2.cs
new file mode 100644
index 0000000..09434b4
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry2.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Коммунальный ресурс" (реестровый номер 2).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-2/v1.
+ ///
+ public static class Registry2
+ {
+ ///
+ /// Тепловая энергия
+ ///
+ public static RegistryElement Element5 => new(
+ "5",
+ "44af905f-09c3-4cc3-b749-70048a53d8cf");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry239.cs b/Hcs.ClientNet/Client/Api/Registry/Registry239.cs
new file mode 100644
index 0000000..69a49c2
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry239.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Тарифицируемый ресурс" (реестровый номер 239).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-239/v1.
+ ///
+ public static class Registry239
+ {
+ ///
+ /// Тепловая энергия
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "eec6e4b8-76c8-4fce-99b7-c95718edad19");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry24.cs b/Hcs.ClientNet/Client/Api/Registry/Registry24.cs
new file mode 100644
index 0000000..6cf60a9
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry24.cs
@@ -0,0 +1,37 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Состояние дома" (реестровый номер 24).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-24/v1.
+ ///
+ public static class Registry24
+ {
+ ///
+ /// Аварийный
+ ///
+ public static RegistryElement Element1 => new(
+ "1",
+ "cbe05853-a91b-43cc-a2cb-06cdfa97d492");
+
+ ///
+ /// Исправный
+ ///
+ public static RegistryElement Element2 => new(
+ "2",
+ "2d3ae73e-6c72-4740-9122-9c632d1893a7");
+
+ ///
+ /// Ветхий
+ ///
+ public static RegistryElement Element3 => new(
+ "3",
+ "bf083ae4-e4ec-4ace-b190-4d009e5cd1a1");
+
+ ///
+ /// Не выбран
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "4ee07c0b-82d6-41f4-a8c5-2cff784bbd9c");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry27.cs b/Hcs.ClientNet/Client/Api/Registry/Registry27.cs
new file mode 100644
index 0000000..083c733
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry27.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Тип прибора учета" (реестровый номер 27).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-27/v1.
+ ///
+ public static class Registry27
+ {
+ ///
+ /// Индивидуальный
+ ///
+ public static RegistryElement Element1 => new(
+ "1",
+ "3a9687b5-caed-4ec6-8a08-f4d3d012f2c7");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry276.cs b/Hcs.ClientNet/Client/Api/Registry/Registry276.cs
new file mode 100644
index 0000000..696a874
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry276.cs
@@ -0,0 +1,23 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Показатели качества коммунальных ресурсов" (реестровый номер 276).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-276/v1.
+ ///
+ public static class Registry276
+ {
+ ///
+ /// Величина тепловой нагрузки
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "51dd6edc-83fe-4810-8b62-4dc85a75e9a3");
+
+ ///
+ /// Диапазон давления теплоносителя в подающем трубопроводе
+ ///
+ public static RegistryElement Element10 => new(
+ "10",
+ "a5a17c90-cc4b-4f32-a22b-6e06cd42a68c");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry3.cs b/Hcs.ClientNet/Client/Api/Registry/Registry3.cs
new file mode 100644
index 0000000..d120842
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry3.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Вид коммунальной услуги" (реестровый номер 3).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-3/v1.
+ ///
+ public static class Registry3
+ {
+ ///
+ /// Отопление
+ ///
+ public static RegistryElement Element6 => new(
+ "6",
+ "74925764-ddf3-4b4b-b18d-85994187c13a");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry32.cs b/Hcs.ClientNet/Client/Api/Registry/Registry32.cs
new file mode 100644
index 0000000..f4bceeb
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry32.cs
@@ -0,0 +1,16 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Часовые зоны по Olson" (реестровый номер 32).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-32/v1.
+ ///
+ public static class Registry32
+ {
+ ///
+ /// Иркутск
+ ///
+ public static RegistryElement Element11 => new(
+ "11",
+ "244ae392-0b96-46f2-80ea-4dac32e7326a");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry338.cs b/Hcs.ClientNet/Client/Api/Registry/Registry338.cs
new file mode 100644
index 0000000..73a5ca8
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry338.cs
@@ -0,0 +1,58 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Стадия жизненного цикла" (реестровый номер 338).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-338/v1.
+ ///
+ public static class Registry338
+ {
+ ///
+ /// Эксплуатация
+ ///
+ public static RegistryElement Element1 => new(
+ "1",
+ "29b18683-5195-4ef4-83fc-71bf45597d46");
+
+ ///
+ /// Реконструкция
+ ///
+ public static RegistryElement Element2 => new(
+ "2",
+ "75764145-f181-47e5-bff1-1306a46eb20e");
+
+ ///
+ /// Капитальный ремонт с отселением
+ ///
+ public static RegistryElement Element3 => new(
+ "3",
+ "dee170df-db42-4cd6-9e5e-b62be91b3663");
+
+ ///
+ /// Капитальный ремонт без отселения
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "91dc91e2-6883-4c84-b711-53f57f28dbe2");
+
+ ///
+ /// Снос
+ ///
+ public static RegistryElement Element5 => new(
+ "5",
+ "cc358aa9-10b3-4d6a-bbec-c5f6b14950f6");
+
+ ///
+ /// Не эксплуатируется, расселен
+ ///
+ public static RegistryElement Element6 => new(
+ "6",
+ "4bed3d7e-6015-428e-b4b4-7b7aec171c0d");
+
+ ///
+ /// Выведен из эксплуатации
+ ///
+ public static RegistryElement Element7 => new(
+ "7",
+ "f3edc065-c1a1-4110-96fa-03313ae7a039");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry51.cs b/Hcs.ClientNet/Client/Api/Registry/Registry51.cs
new file mode 100644
index 0000000..0c30856
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry51.cs
@@ -0,0 +1,15 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Вид коммунальной услуги" (реестровый номер 51)
+ ///
+ public static class Registry51
+ {
+ ///
+ /// Отопление
+ ///
+ public static RegistryElement Element6_1 => new(
+ "6.1",
+ "14ad13a3-45ce-408b-b641-6fc59554f803");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/Registry58.cs b/Hcs.ClientNet/Client/Api/Registry/Registry58.cs
new file mode 100644
index 0000000..a39a9e0
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/Registry58.cs
@@ -0,0 +1,79 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ ///
+ /// НСИ "Основание заключения договора" (реестровый номер 58).
+ /// Взято из https://dom.gosuslugi.ru/opendataapi/nsi-58/v1.
+ ///
+ public static class Registry58
+ {
+ ///
+ /// Решение собрания собственников
+ ///
+ public static RegistryElement Element1 => new(
+ "1",
+ "110d48b2-32a9-4a44-939c-b784d9794621");
+
+ ///
+ /// Открытый конкурс
+ ///
+ public static RegistryElement Element2 => new(
+ "2",
+ "a9dc59c3-d53f-42eb-ba98-cf8c74d88d36");
+
+ ///
+ /// Договор управления
+ ///
+ public static RegistryElement Element3 => new(
+ "3",
+ "11efe618-79f8-4f53-bfd6-11620e8e9e1e");
+
+ ///
+ /// Устав
+ ///
+ public static RegistryElement Element4 => new(
+ "4",
+ "a2eb920c-8163-4958-812a-ad153a5dfde6");
+
+ ///
+ /// Решение правления
+ ///
+ public static RegistryElement Element5 => new(
+ "5",
+ "58639715-2708-4b8e-a5e6-7cae4ddbf03b");
+
+ ///
+ /// Решение органа управления застройщика
+ ///
+ public static RegistryElement Element6 => new(
+ "6",
+ "9b606ef5-7701-4a12-a837-d81b50939160");
+
+ ///
+ /// Заявление потребителя
+ ///
+ public static RegistryElement Element7 => new(
+ "7",
+ "93cd9d85-91b8-4bf9-ae48-c5f1e691949f");
+
+ ///
+ /// Нормативный правовой акт
+ ///
+ public static RegistryElement Element8 => new(
+ "8",
+ "8b8ee37b-fa79-40cc-b98d-0e51f0c38d03");
+
+ ///
+ /// Разрешение на ввод в эксплуатацию
+ ///
+ public static RegistryElement Element9 => new(
+ "9",
+ "16331000-d96e-4a33-a6c7-3cb9eacf4927");
+
+ ///
+ /// Устав
+ ///
+ public static RegistryElement Element10 => new(
+ "10",
+ "555638ae-a207-46fa-99bd-88bdb297c45a");
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Registry/RegistryElement.cs b/Hcs.ClientNet/Client/Api/Registry/RegistryElement.cs
new file mode 100644
index 0000000..b773f6f
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Registry/RegistryElement.cs
@@ -0,0 +1,9 @@
+namespace Hcs.ClientNet.Api.Registry
+{
+ public class RegistryElement(string code, string guid)
+ {
+ public string Code { get; } = code;
+
+ public string GUID { get; } = guid;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IAck.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IAck.cs
new file mode 100644
index 0000000..ed06171
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IAck.cs
@@ -0,0 +1,9 @@
+namespace Hcs.ClientNet.Api.Request
+{
+ public interface IAck
+ {
+ string MessageGUID { get; set; }
+
+ string RequesterMessageGUID { get; set; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IAsyncClient.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IAsyncClient.cs
new file mode 100644
index 0000000..f8c7bbe
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IAsyncClient.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api.Request.Adapter
+{
+ public interface IAsyncClient where TRequestHeader : class
+ {
+ Task GetStateAsync(TRequestHeader header, IGetStateRequest request);
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IErrorMessage.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IErrorMessage.cs
new file mode 100644
index 0000000..d781c97
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IErrorMessage.cs
@@ -0,0 +1,9 @@
+namespace Hcs.ClientNet.Api.Request
+{
+ public interface IErrorMessage
+ {
+ string ErrorCode { get; }
+
+ string Description { get; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateRequest.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateRequest.cs
new file mode 100644
index 0000000..73dfeb1
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateRequest.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api.Request
+{
+ public interface IGetStateRequest
+ {
+ string MessageGUID { get; set; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResponse.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResponse.cs
new file mode 100644
index 0000000..20c8ef3
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResponse.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api.Request.Adapter
+{
+ public interface IGetStateResponse
+ {
+ IGetStateResult GetStateResult { get; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResult.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResult.cs
new file mode 100644
index 0000000..543927b
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResult.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api.Request.Adapter
+{
+ public interface IGetStateResult
+ {
+ sbyte RequestState { get; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultMany.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultMany.cs
new file mode 100644
index 0000000..3df5dcc
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultMany.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api.Request.Adapter
+{
+ public interface IGetStateResultMany : IGetStateResult
+ {
+ object[] Items { get; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultOne.cs b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultOne.cs
new file mode 100644
index 0000000..320e2c4
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Adapter/IGetStateResultOne.cs
@@ -0,0 +1,7 @@
+namespace Hcs.ClientNet.Api.Request.Adapter
+{
+ public interface IGetStateResultOne : IGetStateResult
+ {
+ object Item { get; }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/AsyncRequestStateType.cs b/Hcs.ClientNet/Client/Api/Request/AsyncRequestStateType.cs
new file mode 100644
index 0000000..52196f8
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/AsyncRequestStateType.cs
@@ -0,0 +1,9 @@
+namespace Hcs.ClientNet.Api.Request
+{
+ internal enum AsyncRequestStateType
+ {
+ Received = 1,
+ InProgress,
+ Ready
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Bills/BillsRequestBase.cs b/Hcs.ClientNet/Client/Api/Request/Bills/BillsRequestBase.cs
new file mode 100644
index 0000000..eefdaa9
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Bills/BillsRequestBase.cs
@@ -0,0 +1,55 @@
+using Hcs.ClientNet.Api.Request;
+using Hcs.ClientNet.Api.Request.Adapter;
+using Hcs.Service.Async.Bills;
+using System.Threading.Tasks;
+
+namespace Hcs.Service.Async.Bills
+{
+#pragma warning disable IDE1006
+ public partial class getStateResult : IGetStateResultMany { }
+#pragma warning restore IDE1006
+
+ public partial class BillsPortsTypeAsyncClient : IAsyncClient
+ {
+ public async Task GetStateAsync(RequestHeader header, IGetStateRequest request)
+ {
+ return await getStateAsync(header, (getStateRequest)request);
+ }
+ }
+
+#pragma warning disable IDE1006
+ public partial class getStateResponse : IGetStateResponse
+#pragma warning restore IDE1006
+ {
+ public IGetStateResult GetStateResult => getStateResult;
+ }
+
+ public partial class AckRequestAck : IAck { }
+
+ public partial class ErrorMessageType : IErrorMessage { }
+
+#pragma warning disable IDE1006
+ public partial class getStateRequest : IGetStateRequest { }
+#pragma warning restore IDE1006
+}
+
+namespace Hcs.ClientNet.Api.Request.Bills
+{
+ internal class BillsRequestBase(ClientBase client) :
+ RequestBase(client)
+ {
+ protected override EndPoint EndPoint => EndPoint.BillsAsync;
+
+ protected override bool EnableMinimalResponseWaitDelay => false;
+
+ protected override bool CanBeRestarted => false;
+
+ protected override int RestartTimeoutMinutes => 20;
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Bills/ExportPaymentDocumentDataRequest.cs b/Hcs.ClientNet/Client/Api/Request/Bills/ExportPaymentDocumentDataRequest.cs
new file mode 100644
index 0000000..eb9663b
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Bills/ExportPaymentDocumentDataRequest.cs
@@ -0,0 +1,71 @@
+using Hcs.ClientNet.Internal;
+using Hcs.Service.Async.Bills;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api.Request.Bills
+{
+ internal class ExportPaymentDocumentDataRequest(ClientBase client) : BillsRequestBase(client)
+ {
+ protected override bool CanBeRestarted => true;
+
+ internal async Task> ExecuteByPaymentDocumentIDAsync(string paymentDocumentID, CancellationToken token)
+ {
+ var request = new exportPaymentDocumentRequest()
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "13.1.0.1",
+ Items = [paymentDocumentID],
+ ItemsElementName = [ItemsChoiceType7.PaymentDocumentID]
+ };
+
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.exportPaymentDocumentDataAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+
+ return result.Items.OfType();
+ }
+
+ internal async Task> ExecuteByAccountNumberAsync(short year, int month, string fiasHouseGuid, string accountNumber, CancellationToken token)
+ {
+ var request = new exportPaymentDocumentRequest()
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "13.1.0.1",
+ Items = [year, month, fiasHouseGuid, accountNumber],
+ ItemsElementName = [ItemsChoiceType7.Year, ItemsChoiceType7.Month, ItemsChoiceType7.FIASHouseGuid, ItemsChoiceType7.AccountNumber]
+ };
+
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.exportPaymentDocumentDataAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+
+ return result.Items.OfType();
+ }
+
+ internal async Task> ExecuteByPaymentDocumentNumberAsync(short year, int month, string fiasHouseGuid, string paymentDocumentNumber, CancellationToken token)
+ {
+ var request = new exportPaymentDocumentRequest()
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "13.1.0.1",
+ Items = [year, month, fiasHouseGuid, paymentDocumentNumber],
+ ItemsElementName = [ItemsChoiceType7.Year, ItemsChoiceType7.Month, ItemsChoiceType7.FIASHouseGuid, ItemsChoiceType7.PaymentDocumentNumber]
+ };
+
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.exportPaymentDocumentDataAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+
+ return result.Items.OfType();
+ }
+ }
+}
diff --git a/Hcs.ClientNet/Client/Api/Request/Bills/ImportPaymentDocumentDataRequest.cs b/Hcs.ClientNet/Client/Api/Request/Bills/ImportPaymentDocumentDataRequest.cs
new file mode 100644
index 0000000..5ab464f
--- /dev/null
+++ b/Hcs.ClientNet/Client/Api/Request/Bills/ImportPaymentDocumentDataRequest.cs
@@ -0,0 +1,276 @@
+using Hcs.ClientNet.Api.Payload.Bills;
+using Hcs.ClientNet.Api.Request.Exception;
+using Hcs.ClientNet.Api.Type;
+using Hcs.ClientNet.Internal;
+using Hcs.Service.Async.Bills;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.ClientNet.Api.Request.Bills
+{
+ internal class ImportPaymentDocumentDataRequest(ClientBase client) : BillsRequestBase(client)
+ {
+ internal async Task ExecuteAsync(ImportPaymentDocumentDataPayload payload, CancellationToken token)
+ {
+ // TODO: Добавить проверку пейлоада
+
+ var request = GetRequestFromPayload(payload);
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.importPaymentDocumentDataAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+
+ result.Items.OfType().ToList().ForEach(error =>
+ {
+ throw RemoteException.CreateNew(error.ErrorCode, error.Description);
+ });
+
+ result.Items.OfType().ToList().ForEach(commonResult =>
+ {
+ commonResult.Items.OfType().ToList().ForEach(error =>
+ {
+ throw RemoteException.CreateNew(error.ErrorCode, error.Description);
+ });
+ });
+
+ return true;
+ }
+
+ private importPaymentDocumentRequest GetRequestFromPayload(ImportPaymentDocumentDataPayload payload)
+ {
+ var items = new List