diff --git a/DB/chk/functions.md b/DB/chk/functions.md
index e15c9a0..ee8dfcc 100644
--- a/DB/chk/functions.md
+++ b/DB/chk/functions.md
@@ -1,29 +1,29 @@
-# Слой `chk` — функции
+# Слой `chk` — функции
-## СпиÑок функций
+## Список функций
-| СущноÑть | Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ | Ð¡Ñ‚Ð°Ñ‚ÑƒÑ | Параметры | Возвращает | Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ | Репозиторий | Комментарий |
+| Сущность | Функция | Статус | Параметры | Возвращает | Функция | Репозиторий | Комментарий |
|---|---|---|---|---|---|---|---|
-| chk_type | chk_type_select | DEV | — | TABLE — Ñтроки Ñправочника | CODE | REQ | код: `functions/chk_type_select.sql`; теÑты: `tests/test_chk_type_select.psql`; репозиторий: `MT.Checks/Repository/ChkTypeRepository.cs` |
-| chk_status | chk_status_select | DEV | — | TABLE — Ñтроки Ñправочника | CODE | REQ | код: `functions/chk_status_select.sql`; теÑты: `tests/test_chk_status_select.psql`; репозиторий: `MT.Checks/Repository/ChkStatusRepository.cs` |
-| chk_check | chk_check_insert | DEV | p_check_date, p_chk_type_id, p_chk_status_id, p_smev_message_id, p_rr_organization_id, p_params (JSON), p_parent_check_id | int — id проверки | CODE | REQ | код: `functions/chk_check_insert.sql`; теÑты: `tests/test_chk_check_insert.psql`; репозиторий: `MT.Checks/Repository/ChkCheckRepository.cs` |
-| chk_check | chk_check_update | DEV | p_id + вÑе Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи | int — чиÑло Ñтрок (db-m-3) | CODE | REQ | Ð¿Ð¾Ð»Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ объекта (db-m-8); код: `functions/chk_check_update.sql`; теÑты: `tests/test_chk_check_update.psql` |
-| chk_check | chk_check_delete | DEV | p_id | int — чиÑло Ñтрок | CODE | REQ | код: `functions/chk_check_delete.sql`; теÑты: `tests/test_chk_check_delete.psql` |
-| chk_check | chk_check_select | DEV | p_check_date, p_chk_type_id, p_chk_status_id, p_rr_organization_id | TABLE — Ñтроки chk_check | CODE | REQ | NULL параметра = фильтр не применÑетÑÑ; код: `functions/chk_check_select.sql`; теÑты: `tests/test_chk_check_select.psql` |
-| chk_check | chk_check_get | DEV | p_id | TABLE — Ñтрока chk_check | CODE | REQ | код: `functions/chk_check_get.sql`; теÑты: `tests/test_chk_check_get.psql` |
+| chk_type | chk_type_select | DEV | — | TABLE — строки справочника | CODE | REQ | код: `functions/chk_type_select.sql`; тесты: `tests/test_chk_type_select.psql`; репозиторий: `MT.Checks/Repository/ChkTypeRepository.cs` |
+| chk_status | chk_status_select | DEV | — | TABLE — строки справочника | CODE | REQ | код: `functions/chk_status_select.sql`; тесты: `tests/test_chk_status_select.psql`; репозиторий: `MT.Checks/Repository/ChkStatusRepository.cs` |
+| chk_check | chk_check_insert | DEV | p_check_date, p_chk_type_id, p_chk_status_id, p_smev_message_id, p_rr_organization_id, p_params (JSON), p_parent_check_id | int — id проверки | CODE | REQ | код: `functions/chk_check_insert.sql`; тесты: `tests/test_chk_check_insert.psql`; репозиторий: `MT.Checks/Repository/ChkCheckRepository.cs` |
+| chk_check | chk_check_update | DEV | p_id + все поля записи | int — число строк (db-m-3) | CODE | REQ | полная запись объекта (db-m-8); код: `functions/chk_check_update.sql`; тесты: `tests/test_chk_check_update.psql` |
+| chk_check | chk_check_delete | DEV | p_id | int — число строк | CODE | REQ | код: `functions/chk_check_delete.sql`; тесты: `tests/test_chk_check_delete.psql` |
+| chk_check | chk_check_select | DEV | p_check_date, p_chk_type_id, p_chk_status_id, p_rr_organization_id | TABLE — строки chk_check | CODE | REQ | NULL параметра = фильтр не применяется; код: `functions/chk_check_select.sql`; тесты: `tests/test_chk_check_select.psql` |
+| chk_check | chk_check_get | DEV | p_id | TABLE — строка chk_check | CODE | REQ | код: `functions/chk_check_get.sql`; тесты: `tests/test_chk_check_get.psql` |
-Спецификации функций и теÑÑ‚-планы: `func_specs/{функциÑ}.md` (d-db-9). Код функций:
-`functions/{ÑущноÑть}_{дейÑтвие}.sql` (db-func-4, раÑширение `.sql` — Ñоглашение
-репозиториÑ). psql-теÑты: `tests/test_{ÑущноÑть}_{дейÑтвие}.psql` (db-tst),
-Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€Ð¾Ðº = Ñтрокам таблиц «ТеÑты» Ñпецификаций. Выполнение теÑтов —
-на теÑтовой базе (db-tst-4): `psql -d <база> -f tests/test_*.psql`.
+Спецификации функций и тест-планы: `func_specs/{функция}.md` (d-db-9). Код функций:
+`functions/{сущность}_{действие}.sql` (db-func-4, расширение `.sql` — соглашение
+репозитория). psql-тесты: `tests/test_{сущность}_{действие}.psql` (db-tst),
+нумерация проверок = строкам таблиц «Тесты» спецификаций. Выполнение тестов —
+на тестовой базе (db-tst-4): `psql -d <база> -f tests/test_*.psql`.
-СтатуÑÑ‹ (d-dev-1, d-dev-2, d-dev-5): `СтатуÑ` = `DEV` (Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð°Ñ‡Ð°Ñ‚Ð°);
-колонка «ФункциÑ» = `CODE` (код и теÑты напиÑаны; `DONE` — поÑле утверждениÑ
-пользователем); «Репозиторий» = `REQ`.
+Статусы (d-dev-1, d-dev-2, d-dev-5): `Статус` = `DEV` (реализация начата);
+колонка «Функция» = `CODE` (код и тесты написаны; `DONE` — после утверждения
+пользователем); «Репозиторий» = `REQ`.
-Примечание к колонке «Репозиторий» (2026-09-08, решение пользователÑ):
-unit-теÑты репозиториев не ÑоздаютÑÑ Ð²Ð¾Ð²Ñе; Ñпецификации теÑтов Ñохранены как
-Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð³Ð¾ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ â€” `1-docs/2-core/chk/repository_tests/`.
-Код репозиториев напиÑан (проект `MT.Checks`); ÑÑ‚Ð°Ñ‚ÑƒÑ `CODE` по d-dev-3
-неприменим, Ñ‚.к. требует Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñ‚ÐµÑтов.
+Примечание к колонке «Репозиторий» (2026-09-08, решение пользователя):
+unit-тесты репозиториев не создаются вовсе; спецификации тестов сохранены как
+документация ожидаемого поведения — `1-docs/2-core/chk/repository_tests/`.
+Код репозиториев написан (проект `MT.Checks`); статус `CODE` по d-dev-3
+неприменим, т.к. требует наличия тестов.
diff --git a/MT.Checks/Domain/ChkCheck.cs b/MT.Checks/Domain/ChkCheck.cs
index 219cdda..51d86c6 100644
--- a/MT.Checks/Domain/ChkCheck.cs
+++ b/MT.Checks/Domain/ChkCheck.cs
@@ -1,38 +1,38 @@
-namespace MT.Checks.Domain;
+namespace MT.Checks.Domain;
///
-/// Проверка организаций (chk.chk_check). Колонка params хранитÑÑ Ð² jsonb,
-/// в домене передаётÑÑ Ñтрокой JSON.
+/// Проверка организаций (chk.chk_check). Колонка params хранится в jsonb,
+/// в домене передаётся строкой JSON.
///
public class ChkCheck
{
- /// Идентификатор проверки.
+ /// Идентификатор проверки.
public int Id { get; set; }
- /// День (дата) проверки.
+ /// День (дата) проверки.
public DateTime CheckDate { get; set; }
- /// Тип проверки — ключ chk.chk_type.
+ /// Тип проверки — ключ chk.chk_type.
public int TypeId { get; set; }
- /// Объект Ñправочника типов; заполнÑетÑÑ Ð¿Ñ€Ð¸ÐºÐ»Ð°Ð´Ð½Ñ‹Ð¼ кодом при необходимоÑти.
+ /// Объект справочника типов; заполняется прикладным кодом при необходимости.
public ChkType? Type { get; set; }
- /// Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ — ключ chk.chk_status.
+ /// Статус проверки — ключ chk.chk_status.
public int StatusId { get; set; }
- /// Объект Ñправочника ÑтатуÑов; заполнÑетÑÑ Ð¿Ñ€Ð¸ÐºÐ»Ð°Ð´Ð½Ñ‹Ð¼ кодом при необходимоÑти.
+ /// Объект справочника статусов; заполняется прикладным кодом при необходимости.
public ChkStatus? Status { get; set; }
- /// Идентификатор ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¡ÐœÐÐ’.
+ /// Идентификатор сообщения СМЭВ.
public string SmevMessageId { get; set; } = "";
- /// Идентификатор организации РР.
+ /// Идентификатор организации РР.
public string RrOrganizationId { get; set; } = "";
- /// Параметры проверки — JSON (результаты проверок, ÑоÑтав не фикÑирован).
+ /// Параметры проверки — JSON (результаты проверок, состав не фиксирован).
public string Params { get; set; } = "";
- /// РодительÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ°; null — ÐºÐ¾Ñ€Ð½ÐµÐ²Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ°.
+ /// Родительская проверка; null — корневая проверка.
public int? ParentCheckId { get; set; }
}
diff --git a/MT.Checks/Domain/ChkStatus.cs b/MT.Checks/Domain/ChkStatus.cs
index 8122f2a..609ce61 100644
--- a/MT.Checks/Domain/ChkStatus.cs
+++ b/MT.Checks/Domain/ChkStatus.cs
@@ -1,31 +1,31 @@
-namespace MT.Checks.Domain;
+namespace MT.Checks.Domain;
///
-/// Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ (Ñправочник chk.chk_status, фикÑированные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€” Ñм. init.sql).
+/// Статус проверки (справочник chk.chk_status, фиксированные значения — см. init.sql).
///
public class ChkStatus
{
- /// Идентификатор ÑтатуÑа.
+ /// Идентификатор статуса.
public int Id { get; set; }
- /// Ðаименование ÑтатуÑа проверки.
+ /// Наименование статуса проверки.
public string Name { get; set; } = "";
}
///
-/// Коды ÑтатуÑов проверок (chk.chk_status); Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€” DB/chk/init/init.sql.
+/// Коды статусов проверок (chk.chk_status); значения — DB/chk/init/init.sql.
///
public static class ChkStatuses
{
- /// Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½.
+ /// Запрос отправлен.
public const int RequestSent = 1;
- /// Ответ получен.
+ /// Ответ получен.
public const int ResponseReceived = 2;
- /// Ответ уÑпешно обработан.
+ /// Ответ успешно обработан.
public const int ResponseProcessed = 3;
- /// Ошибка при обработке.
+ /// Ошибка при обработке.
public const int ProcessingError = 4;
}
diff --git a/MT.Checks/Domain/ChkType.cs b/MT.Checks/Domain/ChkType.cs
index 6b9baef..cb73a85 100644
--- a/MT.Checks/Domain/ChkType.cs
+++ b/MT.Checks/Domain/ChkType.cs
@@ -1,37 +1,37 @@
-namespace MT.Checks.Domain;
+namespace MT.Checks.Domain;
///
-/// Тип проверки (Ñправочник chk.chk_type, фикÑированные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€” Ñм. init.sql).
+/// Тип проверки (справочник chk.chk_type, фиксированные значения — см. init.sql).
///
public class ChkType
{
- /// Идентификатор типа.
+ /// Идентификатор типа.
public int Id { get; set; }
- /// Ðаименование типа проверки.
+ /// Наименование типа проверки.
public string Name { get; set; } = "";
}
///
-/// Коды типов проверок (chk.chk_type); Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ â€” DB/chk/init/init.sql.
+/// Коды типов проверок (chk.chk_type); значения — DB/chk/init/init.sql.
///
public static class ChkTypes
{
- /// Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ (дельты) ЕГРЮЛ.
+ /// Запрос изменений (дельты) ЕГРЮЛ.
public const int EgrulDelta = 1;
- /// Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ (дельты) ЕГРИП.
+ /// Запрос изменений (дельты) ЕГРИП.
public const int EgripDelta = 2;
- /// Отправка запроÑа в ЕГРЮЛ.
+ /// Отправка запроса в ЕГРЮЛ.
public const int EgrulRequest = 3;
- /// Отправка запроÑа в ЕГРИП.
+ /// Отправка запроса в ЕГРИП.
public const int EgripRequest = 4;
- /// ÐÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ ОТ.
+ /// Актуализация организации ОТ.
public const int OtActualization = 5;
- /// ÐÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸ СОУТ.
+ /// Актуализация организации СОУТ.
public const int SoutActualization = 6;
}
diff --git a/MT.Checks/Repository/ChkCheckRepository.cs b/MT.Checks/Repository/ChkCheckRepository.cs
index 82a8c9c..a975e3e 100644
--- a/MT.Checks/Repository/ChkCheckRepository.cs
+++ b/MT.Checks/Repository/ChkCheckRepository.cs
@@ -1,50 +1,50 @@
-namespace MT.Checks.Repository
+namespace MT.Checks.Repository
{
using Kit.Helpers.SqlHelperAbstract;
using MT.Checks.Domain;
using MT.Checks.Repository.Filter;
///
- /// Репозиторий проверок организаций: чтение и запиÑÑŒ через хранимые функции Ñхемы chk.
- /// Транзакцию из неÑкольких вызовов Ñобирает вызывающий код.
+ /// Репозиторий проверок организаций: чтение и запись через хранимые функции схемы chk.
+ /// Транзакцию из нескольких вызовов собирает вызывающий код.
///
public interface IChkCheckRepository
{
- /// Создаёт проверку (chk.chk_check_insert); возвращает id новой запиÑи.
+ /// Создаёт проверку (chk.chk_check_insert); возвращает id новой записи.
int Insert(ChkCheck item);
- /// ЗапиÑывает проверку целиком по Id (chk.chk_check_update);
- /// возвращает чиÑло запиÑанных Ñтрок. ИзменÑемый объект читаетÑÑ Ð·Ð°Ñ€Ð°Ð½ÐµÐµ
- /// методом Get (read-modify-write).
+ /// Записывает проверку целиком по Id (chk.chk_check_update);
+ /// возвращает число записанных строк. Изменяемый объект читается заранее
+ /// методом Get (read-modify-write).
int Update(ChkCheck item);
- /// УдалÑет проверку по Id (chk.chk_check_delete);
- /// возвращает чиÑло удалённых Ñтрок.
+ /// Удаляет проверку по Id (chk.chk_check_delete);
+ /// возвращает число удалённых строк.
int Delete(int id);
- /// Выбирает проверки по уÑловиÑм фильтра (chk.chk_check_select);
- /// null ÑвойÑтва фильтра = уÑловие не применÑетÑÑ.
+ /// Выбирает проверки по условиям фильтра (chk.chk_check_select);
+ /// null свойства фильтра = условие не применяется.
IList Select(ChkCheckFilter filter);
- /// Возвращает проверку по Id (chk.chk_check_get); null — запиÑÑŒ не найдена.
+ /// Возвращает проверку по Id (chk.chk_check_get); null — запись не найдена.
ChkCheck? Get(int id);
}
///
- /// РеализациÑ: каждый метод вызывает ровно одну хранимую функцию; имена
- /// параметров вызова Ñовпадают Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ параметров функции (p_*).
+ /// Реализация: каждый метод вызывает ровно одну хранимую функцию; имена
+ /// параметров вызова совпадают с именами параметров функции (p_*).
///
public class ChkCheckRepository : IChkCheckRepository
{
private readonly IConnectionString _connectionString;
- /// Подключение передаётÑÑ Ñнаружи и не открываетÑÑ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸ÐµÐ¼.
+ /// Подключение передаётся снаружи и не открывается репозиторием.
public ChkCheckRepository(IConnectionString connectionString)
{
_connectionString = connectionString;
}
- /// Создаёт проверку (chk.chk_check_insert); возвращает id новой запиÑи.
+ /// Создаёт проверку (chk.chk_check_insert); возвращает id новой записи.
public int Insert(ChkCheck item)
{
return _connectionString.PrepareExecute("chk.chk_check_insert")
@@ -59,14 +59,14 @@
.ExecuteScalar();
}
- /// ЗапиÑывает проверку целиком по Id (chk.chk_check_update);
- /// возвращает чиÑло запиÑанных Ñтрок. ИзменÑемый объект читаетÑÑ Ð·Ð°Ñ€Ð°Ð½ÐµÐµ
- /// методом Get (read-modify-write).
+ /// Записывает проверку целиком по Id (chk.chk_check_update);
+ /// возвращает число записанных строк. Изменяемый объект читается заранее
+ /// методом Get (read-modify-write).
public int Update(ChkCheck item)
{
if (item.Id == 0)
{
- throw new ArgumentException("ChkCheckRepository.Update: не задан идентификатор запиÑи (Id = 0)");
+ throw new ArgumentException("ChkCheckRepository.Update: не задан идентификатор записи (Id = 0)");
}
return _connectionString.PrepareExecute("chk.chk_check_update")
@@ -82,13 +82,13 @@
.ExecuteScalar();
}
- /// УдалÑет проверку по Id (chk.chk_check_delete);
- /// возвращает чиÑло удалённых Ñтрок.
+ /// Удаляет проверку по Id (chk.chk_check_delete);
+ /// возвращает число удалённых строк.
public int Delete(int id)
{
if (id == 0)
{
- throw new ArgumentException("ChkCheckRepository.Delete: не задан идентификатор запиÑи (id = 0)");
+ throw new ArgumentException("ChkCheckRepository.Delete: не задан идентификатор записи (id = 0)");
}
return _connectionString.PrepareExecute("chk.chk_check_delete")
@@ -97,8 +97,8 @@
.ExecuteScalar();
}
- /// Выбирает проверки по уÑловиÑм фильтра (chk.chk_check_select);
- /// null ÑвойÑтва фильтра = уÑловие не применÑетÑÑ.
+ /// Выбирает проверки по условиям фильтра (chk.chk_check_select);
+ /// null свойства фильтра = условие не применяется.
public IList Select(ChkCheckFilter filter)
{
filter ??= new ChkCheckFilter();
@@ -128,12 +128,12 @@
.ToList();
}
- /// Возвращает проверку по Id (chk.chk_check_get); null — запиÑÑŒ не найдена.
+ /// Возвращает проверку по Id (chk.chk_check_get); null — запись не найдена.
public ChkCheck? Get(int id)
{
if (id == 0)
{
- throw new ArgumentException("ChkCheckRepository.Get: не задан идентификатор запиÑи (id = 0)");
+ throw new ArgumentException("ChkCheckRepository.Get: не задан идентификатор записи (id = 0)");
}
IList result = _connectionString.PrepareExecute("chk.chk_check_get")
diff --git a/MT.Checks/Repository/ChkStatusRepository.cs b/MT.Checks/Repository/ChkStatusRepository.cs
index fecbed1..9e615d9 100644
--- a/MT.Checks/Repository/ChkStatusRepository.cs
+++ b/MT.Checks/Repository/ChkStatusRepository.cs
@@ -1,27 +1,27 @@
-namespace MT.Checks.Repository
+namespace MT.Checks.Repository
{
using Kit.Helpers.SqlHelperAbstract;
using MT.Checks.Domain;
- /// Репозиторий Ñправочника ÑтатуÑов проверок (только чтение).
+ /// Репозиторий справочника статусов проверок (только чтение).
public interface IChkStatusRepository
{
- /// Возвращает вÑе Ñтроки Ñправочника (chk.chk_status_select).
+ /// Возвращает все строки справочника (chk.chk_status_select).
IList Select();
}
- /// РеализациÑ: ÐºÐ°Ð¶Ð´Ð°Ñ Ð²Ñ‹Ð±Ð¾Ñ€ÐºÐ° — вызов chk.chk_status_select.
+ /// Реализация: каждая выборка — вызов chk.chk_status_select.
public class ChkStatusRepository : IChkStatusRepository
{
private readonly IConnectionString _connectionString;
- /// Подключение передаётÑÑ Ñнаружи и не открываетÑÑ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸ÐµÐ¼.
+ /// Подключение передаётся снаружи и не открывается репозиторием.
public ChkStatusRepository(IConnectionString connectionString)
{
_connectionString = connectionString;
}
- /// Возвращает вÑе Ñтроки Ñправочника (chk.chk_status_select).
+ /// Возвращает все строки справочника (chk.chk_status_select).
public IList Select()
{
return _connectionString.PrepareExecute("chk.chk_status_select")
diff --git a/MT.Checks/Repository/ChkTypeRepository.cs b/MT.Checks/Repository/ChkTypeRepository.cs
index 8e053d3..30daa81 100644
--- a/MT.Checks/Repository/ChkTypeRepository.cs
+++ b/MT.Checks/Repository/ChkTypeRepository.cs
@@ -1,27 +1,27 @@
-namespace MT.Checks.Repository
+namespace MT.Checks.Repository
{
using Kit.Helpers.SqlHelperAbstract;
using MT.Checks.Domain;
- /// Репозиторий Ñправочника типов проверок (только чтение).
+ /// Репозиторий справочника типов проверок (только чтение).
public interface IChkTypeRepository
{
- /// Возвращает вÑе Ñтроки Ñправочника (chk.chk_type_select).
+ /// Возвращает все строки справочника (chk.chk_type_select).
IList Select();
}
- /// РеализациÑ: ÐºÐ°Ð¶Ð´Ð°Ñ Ð²Ñ‹Ð±Ð¾Ñ€ÐºÐ° — вызов chk.chk_type_select.
+ /// Реализация: каждая выборка — вызов chk.chk_type_select.
public class ChkTypeRepository : IChkTypeRepository
{
private readonly IConnectionString _connectionString;
- /// Подключение передаётÑÑ Ñнаружи и не открываетÑÑ Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸ÐµÐ¼.
+ /// Подключение передаётся снаружи и не открывается репозиторием.
public ChkTypeRepository(IConnectionString connectionString)
{
_connectionString = connectionString;
}
- /// Возвращает вÑе Ñтроки Ñправочника (chk.chk_type_select).
+ /// Возвращает все строки справочника (chk.chk_type_select).
public IList Select()
{
return _connectionString.PrepareExecute("chk.chk_type_select")
diff --git a/MT.Checks/Repository/Filter/ChkCheckFilter.cs b/MT.Checks/Repository/Filter/ChkCheckFilter.cs
index 580d094..48c4b5f 100644
--- a/MT.Checks/Repository/Filter/ChkCheckFilter.cs
+++ b/MT.Checks/Repository/Filter/ChkCheckFilter.cs
@@ -1,19 +1,19 @@
-namespace MT.Checks.Repository.Filter;
+namespace MT.Checks.Repository.Filter;
///
-/// УÑÐ»Ð¾Ð²Ð¸Ñ Ð²Ñ‹Ð±Ð¾Ñ€ÐºÐ¸ проверок; null ÑвойÑтва = уÑловие не применÑетÑÑ.
+/// Условия выборки проверок; null свойства = условие не применяется.
///
public class ChkCheckFilter
{
- /// День (дата) проверки.
+ /// День (дата) проверки.
public DateTime? CheckDate { get; set; }
- /// Тип проверки (chk.chk_type.id).
+ /// Тип проверки (chk.chk_type.id).
public int? TypeId { get; set; }
- /// Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ (chk.chk_status.id).
+ /// Статус проверки (chk.chk_status.id).
public int? StatusId { get; set; }
- /// Идентификатор организации РР.
+ /// Идентификатор организации РР.
public string? RrOrganizationId { get; set; }
}
diff --git a/Plan/dal_report.md b/Plan/dal_report.md
index c75b05b..d8fa97c 100644
--- a/Plan/dal_report.md
+++ b/Plan/dal_report.md
@@ -1,99 +1,99 @@
-# Отчёт генерации DAL (навык project_dal) — прогон 2026-09-08
+# Отчёт генерации DAL (навык project_dal) — прогон 2026-09-08
-## Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñтапов
+## Статус этапов
-| Ðтап | Ð¡Ñ‚Ð°Ñ‚ÑƒÑ |
+| Этап | Статус |
|---|---|
-| 0_scan (разведка) | done |
-| 1_rules (правила MCP) | done |
-| 2_spec (Ñпецификации теÑтов) | done — утверждены пользователем |
-| 3_code (генерациÑ) | done (теÑты не ÑоздаютÑÑ â€” решение пользователÑ) |
-| 4_validate | done — build 0 ошибок; check: 1 извеÑтный false positive (Ñм. ниже) |
-| 5_report | done — ожидание ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ DONE |
+| 0_scan (разведка) | done |
+| 1_rules (правила MCP) | done |
+| 2_spec (спецификации тестов) | done — утверждены пользователем |
+| 3_code (генерация) | done (тесты не создаются — решение пользователя) |
+| 4_validate | done — build 0 ошибок; check: 1 известный false positive (см. ниже) |
+| 5_report | done — ожидание утверждения DONE |
-## ВерÑии правил
+## Версии правил
-- Каталог MCP standarts-catalog: **1.2** (= rules-baseline.json 1.2); раÑхождений
- нет, `validate-rules` не требовалÑÑ.
-- ИÑпользованные облаÑти: c-dal 1.1, d-tst 1.1, c-tst 1.1, c-cs 1.1, db-m 1.1,
- db-s 1.1, db-func 1.1, db-tst 1.1, c-dm 1.1, d-dev 1.1, d-db 1.1 (вÑе 2026-09-04).
+- Каталог MCP standarts-catalog: **1.2** (= rules-baseline.json 1.2); расхождений
+ нет, `validate-rules` не требовался.
+- Использованные области: c-dal 1.1, d-tst 1.1, c-tst 1.1, c-cs 1.1, db-m 1.1,
+ db-s 1.1, db-func 1.1, db-tst 1.1, c-dm 1.1, d-dev 1.1, d-db 1.1 (все 2026-09-04).
-## Решение (проект `MT.Checks`)
+## Решение (проект `MT.Checks`)
-- `MT.Checks.slnx` → проект `MT.Checks\MT.Checks.csproj` (net10.0),
- ProjectReference на `I:\Gitea\Kit\Kit.Core\Kit.Core\Kit.Core.csproj` (Kit.Helpers).
-- ТеÑтового проекта нет — решение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Â«Ð±ÐµÐ· теÑтов ÑовÑем» (2026-09-08).
+- `MT.Checks.slnx` → проект `MT.Checks\MT.Checks.csproj` (net10.0),
+ ProjectReference на `I:\Gitea\Kit\Kit.Core\Kit.Core\Kit.Core.csproj` (Kit.Helpers).
+- Тестового проекта нет — решение пользователя «без тестов совсем» (2026-09-08).
-### Файлы
+### Файлы
-| Файл | Содержимое |
+| Файл | Содержимое |
|---|---|
-| `Domain\ChkCheck.cs` | ÑущноÑть проверки (+ Type/Status-Ñправочники, Params — Ñтрока JSON) |
-| `Domain\ChkType.cs` | Ñправочник типов + конÑтанты `ChkTypes` (6 значений) |
-| `Domain\ChkStatus.cs` | Ñправочник ÑтатуÑов + конÑтанты `ChkStatuses` (4 значениÑ) |
-| `Repository\Filter\ChkCheckFilter.cs` | фильтр Select (null = уÑловие не применÑетÑÑ) |
+| `Domain\ChkCheck.cs` | сущность проверки (+ Type/Status-справочники, Params — строка JSON) |
+| `Domain\ChkType.cs` | справочник типов + константы `ChkTypes` (6 значений) |
+| `Domain\ChkStatus.cs` | справочник статусов + константы `ChkStatuses` (4 значения) |
+| `Repository\Filter\ChkCheckFilter.cs` | фильтр Select (null = условие не применяется) |
| `Repository\ChkCheckRepository.cs` | Insert/Update/Delete/Select/Get |
-| `Repository\ChkTypeRepository.cs` | Select (Ñправочник — только чтение) |
-| `Repository\ChkStatusRepository.cs` | Select (Ñправочник — только чтение) |
+| `Repository\ChkTypeRepository.cs` | Select (справочник — только чтение) |
+| `Repository\ChkStatusRepository.cs` | Select (справочник — только чтение) |
-ÐеймÑпейÑÑ‹: `MT.Checks.Domain`, `MT.Checks.Repository`, `MT.Checks.Repository.Filter`
-(папка/Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑÐ»Ð¾Ñ `Chk` в коде не иÑпользуютÑÑ â€” решение пользователÑ).
+Неймспейсы: `MT.Checks.Domain`, `MT.Checks.Repository`, `MT.Checks.Repository.Filter`
+(папка/префикс слоя `Chk` в коде не используются — решение пользователя).
-### Методы → функции БД
+### Методы → функции БД
-| Метод | Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ | Возврат |
+| Метод | Функция | Возврат |
|---|---|---|
-| `ChkCheckRepository.Insert(ChkCheck)` | `chk.chk_check_insert` | id запиÑи |
-| `ChkCheckRepository.Update(ChkCheck)` | `chk.chk_check_update` | чиÑло Ñтрок (read-modify-write; guard Id=0) |
-| `ChkCheckRepository.Delete(int)` | `chk.chk_check_delete` | чиÑло Ñтрок (guard id=0) |
+| `ChkCheckRepository.Insert(ChkCheck)` | `chk.chk_check_insert` | id записи |
+| `ChkCheckRepository.Update(ChkCheck)` | `chk.chk_check_update` | число строк (read-modify-write; guard Id=0) |
+| `ChkCheckRepository.Delete(int)` | `chk.chk_check_delete` | число строк (guard id=0) |
| `ChkCheckRepository.Select(ChkCheckFilter)` | `chk.chk_check_select` | `IList` |
| `ChkCheckRepository.Get(int)` | `chk.chk_check_get` | `ChkCheck?` (guard id=0) |
| `ChkTypeRepository.Select()` | `chk.chk_type_select` | `IList` |
| `ChkStatusRepository.Select()` | `chk.chk_status_select` | `IList` |
-Каждый метод — ровно одна Ñ…Ñ€Ð°Ð½Ð¸Ð¼Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ, транÑпорт — fluent API Kit.Helpers
+Каждый метод — ровно одна хранимая функция, транспорт — fluent API Kit.Helpers
(`PrepareExecute().AsStoredProcedure().AddParameter*().AddConverter(...)`),
-конвертеры таблиц ответа — inline-лÑмбды.
+конвертеры таблиц ответа — inline-лямбды.
-## Слой БД (Ñтот же прогон)
+## Слой БД (этот же прогон)
-- `DB/chk/functions/*.sql` — 7 функций (параметры `p_*` по db-func-5);
-- `DB/chk/func_specs/*.md` — 7 Ñпецификаций Ñ Ñ‚ÐµÑÑ‚-планами (d-db-9);
-- `DB/chk/tests/test_*.psql` — 7 psql-теÑтов (**не иÑполнÑлиÑÑŒ** — нужна теÑтоваÑ
- база: `psql -d <база> -f DB/chk/tests/test_*.psql`);
-- `DB/chk/functions.md` — ÑтатуÑÑ‹: функции `DEV`/«ФункциÑ»=`CODE`; «Репозиторий»=`REQ`
- Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸ÐµÐ¼ (unit-теÑты не ÑоздаютÑÑ, `CODE` по d-dev-3 неприменим).
+- `DB/chk/functions/*.sql` — 7 функций (параметры `p_*` по db-func-5);
+- `DB/chk/func_specs/*.md` — 7 спецификаций с тест-планами (d-db-9);
+- `DB/chk/tests/test_*.psql` — 7 psql-тестов (**не исполнялись** — нужна тестовая
+ база: `psql -d <база> -f DB/chk/tests/test_*.psql`);
+- `DB/chk/functions.md` — статусы: функции `DEV`/«Функция»=`CODE`; «Репозиторий»=`REQ`
+ с примечанием (unit-тесты не создаются, `CODE` по d-dev-3 неприменим).
-## ВалидациÑ
+## Валидация
-- `dotnet build MT.Checks.slnx` — **0 ошибок** (Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ NU1903/CS — из Kit.Core).
-- DalTools `check` (Ñ Ð¼Ð°Ð½Ð¸Ñ„ÐµÑтом) — **1 нарушение c-dal-1, извеÑтный false positive**:
- ÑвриÑтика «SQL в Ñтроке C#» Ñканирует текÑÑ‚ между Ñтроковыми литералами файла и
- находит Ñлово `Select` в Ñигнатуре метода `Select(ChkCheckFilter)` — Ð¸Ð¼Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð°
- обÑзательно по правилу c-dal-5 (имена CRUD: Insert/Update/Delete/Select/Get).
- ÐеуÑтранимо в коде без Ð½Ð°Ñ€ÑƒÑˆÐµÐ½Ð¸Ñ Ñтандарта; SQL в Ñтроках отÑутÑтвует.
+- `dotnet build MT.Checks.slnx` — **0 ошибок** (предупреждения NU1903/CS — из Kit.Core).
+- DalTools `check` (с манифестом) — **1 нарушение c-dal-1, известный false positive**:
+ эвристика «SQL в строке C#» сканирует текст между строковыми литералами файла и
+ находит слово `Select` в сигнатуре метода `Select(ChkCheckFilter)` — имя метода
+ обязательно по правилу c-dal-5 (имена CRUD: Insert/Update/Delete/Select/Get).
+ Неустранимо в коде без нарушения стандарта; SQL в строках отсутствует.
-## Спецификации теÑтов
+## Спецификации тестов
-`1-docs/2-core/chk/repository_tests/` — ChkCheckRepository.md (17 теÑтов),
-ChkTypeRepository.md, ChkStatusRepository.md — утверждены как документациÑ
-ожидаемого поведениÑ. ТеÑтовый код по решению Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ ÑоздаётÑÑ
-(Ñм. `DB/chk/functions.md`, примечание к колонке «Репозиторий»).
+`1-docs/2-core/chk/repository_tests/` — ChkCheckRepository.md (17 тестов),
+ChkTypeRepository.md, ChkStatusRepository.md — утверждены как документация
+ожидаемого поведения. Тестовый код по решению пользователя не создаётся
+(см. `DB/chk/functions.md`, примечание к колонке «Репозиторий»).
-## ИзвеÑтные Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸ решениÑ
+## Известные ограничения и решения
-1. **ТранÑпорт `p_` vs `_`**: Kit.Helpers Ñтроит именованные аргументы `_<имÑ>`,
- функции chk объÑвлены Ñ `p_<имÑ>` (db-func-5; решение Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ â€” Ñохранить
- Ñтандарт). До доработки Kit.Helpers (админиÑтратор Kit) вызовы репозиториев
- против живой БД будут давать «function ... does not exist».
-2. **Имена**: решение/проект `MT.Checks` — по указанию пользователÑ
- (в `MT.Check.Core.Dal`/`MT.Checks.Test` отказ).
-3. **Без теÑтов**: теÑтовый проект отÑутÑтвует; `dotnet test` из конвейера иÑключён.
-4. ÐŸÑ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ñборки NU1903 (уÑзвимые пакеты Npgsql/SqlClient и др.) —
- из Kit.Core, вне рамок навыка.
+1. **Транспорт `p_` vs `_`**: Kit.Helpers строит именованные аргументы `_<имя>`,
+ функции chk объявлены с `p_<имя>` (db-func-5; решение пользователя — сохранить
+ стандарт). До доработки Kit.Helpers (администратор Kit) вызовы репозиториев
+ против живой БД будут давать «function ... does not exist».
+2. **Имена**: решение/проект `MT.Checks` — по указанию пользователя
+ (в `MT.Check.Core.Dal`/`MT.Checks.Test` отказ).
+3. **Без тестов**: тестовый проект отсутствует; `dotnet test` из конвейера исключён.
+4. Предупреждения сборки NU1903 (уязвимые пакеты Npgsql/SqlClient и др.) —
+ из Kit.Core, вне рамок навыка.
-## Возобновление/завершение
+## Возобновление/завершение
-ПоÑле доработки Kit.Helpers доÑтаточно проверить вызовы на теÑтовой БД
-(Ñпецификации вызовов не менÑÑŽÑ‚ÑÑ). СтатуÑÑ‹ `DONE` — поÑле утверждениÑ
-пользователем.
+После доработки Kit.Helpers достаточно проверить вызовы на тестовой БД
+(спецификации вызовов не меняются). Статусы `DONE` — после утверждения
+пользователем.