From df3f9f27415dc94c9a922b19eeb4809db7ac9440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D1=85=20=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9?= Date: Tue, 8 Sep 2026 21:48:30 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8:=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=B8=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BB=D0=B8=D1=86=D0=B0=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D1=85=20?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20(UTF-8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DB/chk/functions.md | 46 +++--- MT.Checks/Domain/ChkCheck.cs | 26 ++-- MT.Checks/Domain/ChkStatus.cs | 18 +-- MT.Checks/Domain/ChkType.cs | 22 +-- MT.Checks/Repository/ChkCheckRepository.cs | 54 +++---- MT.Checks/Repository/ChkStatusRepository.cs | 12 +- MT.Checks/Repository/ChkTypeRepository.cs | 12 +- MT.Checks/Repository/Filter/ChkCheckFilter.cs | 12 +- Plan/dal_report.md | 136 +++++++++--------- 9 files changed, 169 insertions(+), 169 deletions(-) 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` — после утверждения +пользователем.