diff --git a/Hcs.Client/Client/Api/HouseManagementApi.cs b/Hcs.Client/Client/Api/HouseManagementApi.cs
index 5ef1245..4dc6ea9 100644
--- a/Hcs.Client/Client/Api/HouseManagementApi.cs
+++ b/Hcs.Client/Client/Api/HouseManagementApi.cs
@@ -59,6 +59,19 @@ namespace Hcs.Client.Api
}
+ ///
+ /// Импорт лицевого счета
+ ///
+ /// Пейлоад лицевого счета
+ /// Токен отмены
+ /// true, если операция выполнена успешно, иначе - false
+ public async Task ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default)
+ {
+ var request = new ImportAccountDataRequest(client);
+ return await request.ExecuteAsync(payload, token);
+ }
+
+
///
/// Импорт новости для информирования граждан
///
diff --git a/Hcs.Client/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs
new file mode 100644
index 0000000..7bb429a
--- /dev/null
+++ b/Hcs.Client/Client/Api/Payload/HouseManagement/ImportAccountDataPayload.cs
@@ -0,0 +1,97 @@
+using Hcs.Service.Async.HouseManagement;
+
+namespace Hcs.Client.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.Client/Client/Api/Request/HouseManagement/ImportAccountDataRequest.cs b/Hcs.Client/Client/Api/Request/HouseManagement/ImportAccountDataRequest.cs
new file mode 100644
index 0000000..319f78e
--- /dev/null
+++ b/Hcs.Client/Client/Api/Request/HouseManagement/ImportAccountDataRequest.cs
@@ -0,0 +1,108 @@
+using Hcs.Client.Api.Payload.HouseManagement;
+using Hcs.Client.Api.Request.Exception;
+using Hcs.Client.Internal;
+using Hcs.Service.Async.HouseManagement;
+using System;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Hcs.Client.Api.Request.HouseManagement
+{
+ internal class ImportAccountDataRequest(ClientBase client) : HouseManagementRequestBase(client)
+ {
+ protected override bool CanBeRestarted => false;
+
+ internal async Task ExecuteAsync(ImportAccountDataPayload payload, CancellationToken token)
+ {
+ // TODO: Добавить проверку пейлоада
+
+ // http://open-gkh.ru/HouseManagement/importAccountRequest.html
+ var request = new importAccountRequest
+ {
+ Id = Constants.SIGNED_XML_ELEMENT_ID,
+ version = "10.0.1.1",
+ Account = [GetAccountFromPayload(payload)]
+ };
+
+ var result = await SendAndWaitResultAsync(request, async asyncClient =>
+ {
+ var response = await asyncClient.importAccountDataAsync(CreateRequestHeader(), request);
+ return response.AckRequest.Ack;
+ }, token);
+
+ result.Items.OfType().ToList().ForEach(error =>
+ {
+ throw RemoteException.CreateNew(error.ErrorCode, error.Description);
+ });
+
+ return true;
+ }
+
+ private importAccountRequestAccount GetAccountFromPayload(ImportAccountDataPayload payload)
+ {
+ var account = new importAccountRequestAccount()
+ {
+ TransportGUID = Guid.NewGuid().ToString(),
+ AccountNumber = payload.accountNumber,
+ AccountGUID = payload.accountGUID,
+ AccountReasons = payload.accountReasons,
+ Item = true,
+ Accommodation = payload.accomodations,
+ PayerInfo = payload.payerInfo
+ };
+
+ switch (payload.accountType)
+ {
+ case ImportAccountDataPayload.AccountType.UO:
+ account.ItemElementName = ItemChoiceType8.isUOAccount;
+ break;
+
+ case ImportAccountDataPayload.AccountType.RSO:
+ account.ItemElementName = ItemChoiceType8.isRSOAccount;
+ break;
+
+ case ImportAccountDataPayload.AccountType.CR:
+ account.ItemElementName = ItemChoiceType8.isCRAccount;
+ break;
+
+ case ImportAccountDataPayload.AccountType.RC:
+ account.ItemElementName = ItemChoiceType8.isRCAccount;
+ break;
+
+ case ImportAccountDataPayload.AccountType.OGVorOMS:
+ account.ItemElementName = ItemChoiceType8.isOGVorOMSAccount;
+ break;
+
+ case ImportAccountDataPayload.AccountType.TKO:
+ account.ItemElementName = ItemChoiceType8.isTKOAccount;
+ break;
+ }
+
+ if (payload.livingPersonsNumber.HasValue)
+ {
+ account.LivingPersonsNumber = payload.livingPersonsNumber.Value.ToString();
+ }
+
+ if (payload.totalSquare.HasValue)
+ {
+ account.TotalSquare = payload.totalSquare.Value;
+ account.TotalSquareSpecified = true;
+ }
+
+ if (payload.residentialSquare.HasValue)
+ {
+ account.ResidentialSquare = payload.residentialSquare.Value;
+ account.ResidentialSquareSpecified = true;
+ }
+
+ if (payload.heatedArea.HasValue)
+ {
+ account.HeatedArea = payload.heatedArea.Value;
+ account.HeatedAreaSpecified = true;
+ }
+
+ return account;
+ }
+ }
+}
diff --git a/Hcs.Client/Hcs.Client.csproj b/Hcs.Client/Hcs.Client.csproj
index 522967c..74c3c0b 100644
--- a/Hcs.Client/Hcs.Client.csproj
+++ b/Hcs.Client/Hcs.Client.csproj
@@ -69,6 +69,7 @@
+
@@ -90,6 +91,7 @@
+
diff --git a/Hcs.TestApp/TestApp/Program.cs b/Hcs.TestApp/TestApp/Program.cs
index 494965b..74560d7 100644
--- a/Hcs.TestApp/TestApp/Program.cs
+++ b/Hcs.TestApp/TestApp/Program.cs
@@ -48,6 +48,8 @@ namespace Hcs.TestApp
//houseManagementScenario.ExportSupplyResourceContractObjectAddressData();
+ //houseManagementScenario.ImportAccountData();
+
//houseManagementScenario.ImportNotificationData();
//houseManagementScenario.ImportSupplyResourceContractData();
diff --git a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
index 2aa4e71..4029f5b 100644
--- a/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
+++ b/Hcs.TestApp/TestApp/Scenario/HouseManagementScenario.cs
@@ -3,7 +3,6 @@ using Hcs.Client.Api.Payload.HouseManagement;
using Hcs.Client.Api.Registry;
using Hcs.Service.Async.HouseManagement;
using System;
-using System.Collections.Generic;
namespace Hcs.TestApp.Scenario
{
@@ -155,5 +154,51 @@ namespace Hcs.TestApp.Scenario
var result = client.HouseManagement.ImportNotificationDataAsync(payload).Result;
Console.WriteLine("Scenario execution " + (result ? "succeeded" : "failed"));
}
+
+ internal void ImportAccountData()
+ {
+ var payload = new ImportAccountDataPayload()
+ {
+ accountNumber = "385635479641",
+ accountReasons = new AccountReasonsImportType()
+ {
+ SupplyResourceContract =
+ [
+ new()
+ {
+ Items = ["0aca4ebc-8d5c-4a39-801c-e25f0867adc6"],
+ ItemsElementName = [ItemsChoiceType17.ContractGUID]
+ }
+ ]
+ },
+ accountType = ImportAccountDataPayload.AccountType.RC,
+ livingPersonsNumber = 1,
+ totalSquare = 29.3m,
+ residentialSquare = 29.3m,
+ heatedArea = 29.3m,
+ accomodations =
+ [
+ new()
+ {
+ Item = "db041c58-4a14-45ce-8ecc-d99727e9683f",
+ ItemElementName = ItemChoiceType9.FIASHouseGuid
+ }
+ ],
+ payerInfo = new AccountTypePayerInfo()
+ {
+ IsRenter = true,
+ IsRenterSpecified = true,
+ Item = new AccountIndType()
+ {
+ Item = "62392021264",
+ FirstName = "Имя",
+ Surname = "Фамилия",
+ Patronymic = "Отчество"
+ }
+ }
+ };
+ var result = client.HouseManagement.ImportAccountDataAsync(payload).Result;
+ Console.WriteLine("Scenario execution " + (result ? "succeeded" : "failed"));
+ }
}
}