diff --git a/Persistence/API/IApiChangeLog.cs b/Persistence/API/IApiChangeLog.cs
new file mode 100644
index 0000000..61af1e8
--- /dev/null
+++ b/Persistence/API/IApiChangeLog.cs
@@ -0,0 +1,79 @@
+using Persistence.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.API;
+
+///
+/// Интерфейс для работы с API, предназначенного для CRUD-операций над данными
+///
+public interface IApiChangeLog
+ where TDto : class, new()
+ where TChangeLogDto : ChangeLogDto
+{
+ ///
+ /// Получение исторических данных на текущую дату
+ ///
+ ///
+ ///
+ Task> GetChangeLogCurrent(CancellationToken token);
+
+ ///
+ /// Получение исторических данных на определенную дату
+ ///
+ ///
+ ///
+ ///
+ Task> GetChangeLogForDate(DateTimeOffset historyMoment, CancellationToken token);
+
+ ///
+ /// Добавить одну запись
+ ///
+ ///
+ ///
+ ///
+ Task AddAsync(TDto dto, CancellationToken token);
+
+ ///
+ /// Добавить несколько записей
+ ///
+ ///
+ ///
+ ///
+ Task AddRangeAsync(IEnumerable dtos, CancellationToken token);
+
+ ///
+ /// Обновить одну запись
+ ///
+ ///
+ ///
+ ///
+ Task UpdateAsync(TDto dto, CancellationToken token);
+
+ ///
+ /// Обновить несколько записей
+ ///
+ ///
+ ///
+ ///
+ Task UpdateRangeAsync(IEnumerable dtos, CancellationToken token);
+
+ ///
+ /// Удалить одну запись
+ ///
+ ///
+ ///
+ ///
+ Task DeleteAsync(int id, CancellationToken token);
+
+ ///
+ /// Удалить несколько записей
+ ///
+ ///
+ ///
+ ///
+ Task DeleteRangeAsync(IEnumerable ids, CancellationToken token);
+}
diff --git a/Persistence/API/IApiDictionaryElement.cs b/Persistence/API/IApiDictionaryElement.cs
new file mode 100644
index 0000000..38cc68f
--- /dev/null
+++ b/Persistence/API/IApiDictionaryElement.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.API;
+
+///
+/// Интерфейс для API, предназначенного для работы со справочниками
+///
+public interface IApiDictionaryElement where TDto : class, new()
+{
+ ///
+ /// Получить все данные справочника
+ ///
+ /// ключ справочника
+ ///
+ ///
+ Task> GetDataAsync(Guid dictionaryKey, CancellationToken token);
+
+ ///
+ /// Добавить элемент в справочник
+ ///
+ /// ключ справочника
+ ///
+ ///
+ ///
+ Task AddAsync(Guid dictionaryKey, TDto dto, CancellationToken token);
+
+ ///
+ /// Изменить одну запись
+ ///
+ /// ключ справочника
+ /// ключ элемента в справочнике
+ ///
+ ///
+ ///
+ Task UpdateAsync(Guid dictionaryKey, Guid dictionaryElementKey, TDto dto, CancellationToken token);
+
+ ///
+ /// Удалить одну запись
+ ///
+ /// ключ справочника
+ /// ключ элемента в справочнике
+ ///
+ ///
+ Task DeleteAsync(Guid dictionaryKey, Guid dictionaryElementKey, CancellationToken token);
+}
diff --git a/Persistence/API/IApiSetpoint.cs b/Persistence/API/IApiSetpoint.cs
new file mode 100644
index 0000000..6c113dd
--- /dev/null
+++ b/Persistence/API/IApiSetpoint.cs
@@ -0,0 +1,47 @@
+using Microsoft.AspNetCore.Mvc;
+using Persistence.Models;
+using System.Threading.Tasks;
+
+namespace Persistence.API;
+
+///
+/// Интерфейс для работы с API, предназначенного для работы с уставками
+///
+public interface IApiSetpoint
+{
+ ///
+ /// Получить актуальные значения уставок
+ ///
+ ///
+ ///
+ ///
+ Task>> GetCurrentAsync(IEnumerable setpoitKeys, CancellationToken token);
+
+ ///
+ /// Получить значения уставок за определенный момент времени
+ ///
+ ///
+ /// дата, на которую получаем данные
+ ///
+ ///
+ Task> GetHistoryAsync(IEnumerable setpoitKeys, DateTimeOffset historyMoment, CancellationToken token);
+
+ ///
+ /// Получить историю изменений значений уставок
+ ///
+ ///
+ ///
+ ///
+ Task>> GetLogAsync(IEnumerable setpoitKeys, CancellationToken token);
+
+ ///
+ /// Метод сохранения уставки
+ ///
+ /// ключ операции
+ /// значение
+ ///
+ ///
+ /// to do
+ /// id User учесть в соответствующем методе репозитория
+ Task SaveAsync(Guid setpointKey, object newValue, CancellationToken token);
+}
diff --git a/Persistence/API/IApiSync.cs b/Persistence/API/IApiSync.cs
new file mode 100644
index 0000000..3df36b2
--- /dev/null
+++ b/Persistence/API/IApiSync.cs
@@ -0,0 +1,30 @@
+using Persistence.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.API;
+
+///
+/// Интерфейс для работы с API, предназначенного для синхронизации данных
+///
+public interface IApiSync where TDto : class, new()
+{
+ ///
+ /// Получить порцию записей, начиная с заданной даты
+ ///
+ ///
+ /// количество записей
+ ///
+ ///
+ Task> GetPartAsync(DateTimeOffset dateBegin, int take = 24 * 60 * 60, CancellationToken token = default);
+
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ Task GetDatesRangeAsync(CancellationToken token);
+}
diff --git a/Persistence/API/IApiTableData.cs b/Persistence/API/IApiTableData.cs
new file mode 100644
index 0000000..bbdad57
--- /dev/null
+++ b/Persistence/API/IApiTableData.cs
@@ -0,0 +1,25 @@
+using Persistence.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.API;
+
+/// Интерфейс для работы с API, предназначенного для работы с табличными данными
+public interface IApiTableData
+ where TDto : class, new()
+ where TRequest : RequestDto
+{
+ ///
+ /// Получить страницу списка объектов
+ ///
+ ///
+ ///
+ /// строка с настройками сортировки
+ /// параметры фильтрации
+ ///
+ ///
+ Task> GetPageAsync(TRequest request, CancellationToken token);
+}
diff --git a/Persistence/API/IGraphData.cs b/Persistence/API/IGraphData.cs
new file mode 100644
index 0000000..ff020f1
--- /dev/null
+++ b/Persistence/API/IGraphData.cs
@@ -0,0 +1,25 @@
+using Persistence.Models;
+
+namespace Persistence.API;
+
+///
+/// Интерфейс для работы с API графиков
+///
+public interface IGraphData
+{
+ ///
+ /// Получить список объектов с прореживанием
+ ///
+ /// дата начала
+ /// дата окончания
+ ///
+ ///
+ Task> GetThinnedDataAsync(DateTimeOffset dateBegin, DateTimeOffset dateEnd, int approxPointsCount = 1024);
+
+ ///
+ /// Получить диапазон дат, для которых есть данные в репозитории
+ ///
+ ///
+ ///
+ Task GetDatesRangeAsync(CancellationToken token);
+}
diff --git a/Persistence/Models/DatesRangeDto.cs b/Persistence/Models/DatesRangeDto.cs
new file mode 100644
index 0000000..5f41083
--- /dev/null
+++ b/Persistence/Models/DatesRangeDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.Models;
+public class DatesRangeDto
+{
+ public DateTimeOffset dateBegin { get; set; }
+
+ public DateTimeOffset dateEnd { get; set; }
+}
diff --git a/Persistence/Models/PaginationContainer.cs b/Persistence/Models/PaginationContainer.cs
new file mode 100644
index 0000000..a0c64b2
--- /dev/null
+++ b/Persistence/Models/PaginationContainer.cs
@@ -0,0 +1,36 @@
+namespace Persistence.Models;
+
+///
+/// Контейнер для поддержки постраничного просмотра таблиц
+///
+///
+public class PaginationContainer
+{
+ ///
+ /// конструктор
+ ///
+ public PaginationContainer()
+ {
+ Items = Enumerable.Empty();
+ }
+
+ ///
+ /// Кол-во записей пропущенных с начала таблицы в запросе от api
+ ///
+ public int Skip { get; set; }
+
+ ///
+ /// Кол-во записей в запросе от api
+ ///
+ public int Take { get; set; }
+
+ ///
+ /// Кол-во записей всего в таблице
+ ///
+ public int Count { get; set; }
+
+ ///
+ /// Данные
+ ///
+ public IEnumerable Items { get; set; }
+}
\ No newline at end of file
diff --git a/Persistence/Models/RequestDto.cs b/Persistence/Models/RequestDto.cs
new file mode 100644
index 0000000..d27d210
--- /dev/null
+++ b/Persistence/Models/RequestDto.cs
@@ -0,0 +1,10 @@
+namespace Persistence.Models;
+
+public class RequestDto
+{
+ public int Skip { get; set; }
+
+ public int Take { get; set; }
+
+ public string SortSettings { get; set; } = string.Empty;
+}
diff --git a/Persistence/Models/SetpointDescriptionDto.cs b/Persistence/Models/SetpointDescriptionDto.cs
new file mode 100644
index 0000000..27005b0
--- /dev/null
+++ b/Persistence/Models/SetpointDescriptionDto.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.Models;
+public class SetpointDescriptionDto
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Description { get; set; }
+ public string Type { get; set; }
+}
+
diff --git a/Persistence/Models/SetpointLogDto.cs b/Persistence/Models/SetpointLogDto.cs
new file mode 100644
index 0000000..8c259ca
--- /dev/null
+++ b/Persistence/Models/SetpointLogDto.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.Models;
+public class SetpointLogDto : SetpointValueDto
+{
+ public DateTimeOffset Edit { get; set; }
+ public int IdUser { get; set; }
+}
diff --git a/Persistence/Models/SetpointValueDto.cs b/Persistence/Models/SetpointValueDto.cs
new file mode 100644
index 0000000..7b49143
--- /dev/null
+++ b/Persistence/Models/SetpointValueDto.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Persistence.Models;
+
+public class SetpointValueDto
+{
+ public int Id { get; set; }
+ public object Value { get; set; }
+}
+
diff --git a/Persistence/Persistence.csproj b/Persistence/Persistence.csproj
index 1bd718e..aaccee7 100644
--- a/Persistence/Persistence.csproj
+++ b/Persistence/Persistence.csproj
@@ -7,6 +7,7 @@
+