commit c3932e6404cab93efa8a8522f976531934741aac Author: Витковских Евгений Date: Tue Sep 8 18:09:01 2026 +0500 Init: DB layer chk — tables, init scripts, docs, PlantUML schema diff --git a/DB/chk/chk_schema.png b/DB/chk/chk_schema.png new file mode 100644 index 0000000..a356161 Binary files /dev/null and b/DB/chk/chk_schema.png differ diff --git a/DB/chk/functions.md b/DB/chk/functions.md new file mode 100644 index 0000000..2fd6f2d --- /dev/null +++ b/DB/chk/functions.md @@ -0,0 +1,16 @@ +# Слой `chk` — функции + +## Список функций + +| Сущность | Функция | Статус | Параметры | Возвращает | Функция | Репозиторий | Комментарий | +|---|---|---|---|---|---|---|---| +| chk_type | chk_type_select | PLAN | — | TABLE — строки справочника | - | - | — | +| chk_status | chk_status_select | PLAN | — | TABLE — строки справочника | - | - | — | +| chk_check | chk_check_insert | PLAN | 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 проверки | - | - | — | +| chk_check | chk_check_update | PLAN | p_id + все поля записи | int — число строк (db-m-3) | - | - | полная запись объекта (db-m-8) | +| chk_check | chk_check_delete | PLAN | p_id | int — число строк | - | - | — | +| chk_check | chk_check_select | PLAN | p_check_date, p_chk_type_id, p_chk_status_id, p_rr_organization_id | TABLE — строки chk_check | - | - | NULL параметра = фильтр не применяется | +| chk_check | chk_check_get | PLAN | p_id | TABLE — строка chk_check | - | - | — | + +Функции в статусе `PLAN`: спецификации и тест-планы отсутствуют, файлы +`func_specs/{функция}.md` создаются при переводе в `DEV` (d-db-9, d-dev-1). diff --git a/DB/chk/init/init.sql b/DB/chk/init/init.sql new file mode 100644 index 0000000..7caee35 --- /dev/null +++ b/DB/chk/init/init.sql @@ -0,0 +1,28 @@ +-- Инициализация БД MT.Сhecks: схема chk, таблицы, значения справочников. +-- Запуск: psql -d <база> -f init.sql. Скрипт идемпотентен +-- (CREATE SCHEMA/TABLE IF NOT EXISTS, сидирование через ON CONFLICT DO NOTHING). +\set ON_ERROR_STOP on + +CREATE SCHEMA IF NOT EXISTS chk; + +\ir ../tables/chk_type.sql +\ir ../tables/chk_status.sql +\ir ../tables/chk_check.sql + +-- Сидирование справочника типов проверок (значения — из DB/task.md). +INSERT INTO chk.chk_type (id, name) VALUES + (1, 'Запрос изменений (дельты) ЕГРЮЛ'), + (2, 'Запрос изменений (дельты) ЕГРИП'), + (3, 'Отправка запроса в ЕГРЮЛ'), + (4, 'Отправка запроса в ЕГРИП'), + (5, 'Актуализация организации ОТ'), + (6, 'Актуализация организации СОУТ') +ON CONFLICT (id) DO NOTHING; + +-- Сидирование справочника статусов проверок (значения — из DB/task.md). +INSERT INTO chk.chk_status (id, name) VALUES + (1, 'Запрос отправлен'), + (2, 'Ответ получен'), + (3, 'Ответ успешно обработан'), + (4, 'Ошибка при обработке') +ON CONFLICT (id) DO NOTHING; diff --git a/DB/chk/schema.puml b/DB/chk/schema.puml new file mode 100644 index 0000000..eda69f1 --- /dev/null +++ b/DB/chk/schema.puml @@ -0,0 +1,57 @@ +@startuml chk_schema +' ER-схема слоя chk (БД MT.Сhecks) +' Источник требований: DB/task.md; документация: DB/chk/tables.md +hide circle +skinparam linetype ortho + +entity "chk_type" as chk_type { + * id : int <> + -- + * name : text +} + +entity "chk_status" as chk_status { + * id : int <> + -- + * name : text +} + +entity "chk_check" as chk_check { + * id : serial <> + -- + * check_date : date + * chk_type_id : int <> + * chk_status_id : int <> + smev_message_id : text + rr_organization_id : text + params : jsonb + parent_check_id : int <> +} + +chk_type ||--o{ chk_check : "chk_type_id" +chk_status ||--o{ chk_check : "chk_status_id" +chk_check |o--o{ chk_check : "parent_check_id" + +note bottom of chk_check + Индексы: idx_chk_check_type (chk_type_id), + idx_chk_check_status (chk_status_id), + idx_chk_check_parent (parent_check_id) + params: результаты проверок (состав не фиксирован) +end note + +note bottom of chk_type + Значения (id): 1 — Запрос изменений (дельты) ЕГРЮЛ, + 2 — Запрос изменений (дельты) ЕГРИП, + 3 — Отправка запроса в ЕГРЮЛ, + 4 — Отправка запроса в ЕГРИП, + 5 — Актуализация организации ОТ, + 6 — Актуализация организации СОУТ +end note + +note bottom of chk_status + Значения (id): 1 — Запрос отправлен, + 2 — Ответ получен, + 3 — Ответ успешно обработан, + 4 — Ошибка при обработке +end note +@enduml diff --git a/DB/chk/tables.md b/DB/chk/tables.md new file mode 100644 index 0000000..133b056 --- /dev/null +++ b/DB/chk/tables.md @@ -0,0 +1,72 @@ +# Слой `chk` — таблицы + +Слой проверок организаций. Источник требований: `DB/task.md`. + +## Список таблиц + +| Таблица | Тип | Набор функций | Функции | Комментарий | +|---|---|---|---|---| +| `chk_type` | системный справочник | chk_type_select | SELECT | функции запланированы, статус PLAN (functions.md) | +| `chk_status` | системный справочник | chk_status_select | SELECT | функции запланированы, статус PLAN (functions.md) | +| `chk_check` | сущность | chk_check_insert, chk_check_update, chk_check_delete, chk_check_select, chk_check_get | CRUD | функции запланированы, статус PLAN (functions.md) | + +## chk_type — типы проверок + +Справочник типов проверок. Файл DDL: `tables/chk_type.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | int | PK | идентификатор типа | +| `name` | text | NOT NULL | наименование типа | + +Значения: + +| id | name | +|---|---| +| 1 | Запрос изменений (дельты) ЕГРЮЛ | +| 2 | Запрос изменений (дельты) ЕГРИП | +| 3 | Отправка запроса в ЕГРЮЛ | +| 4 | Отправка запроса в ЕГРИП | +| 5 | Актуализация организации ОТ | +| 6 | Актуализация организации СОУТ | + +## chk_status — статусы проверок + +Справочник статусов проверок. Файл DDL: `tables/chk_status.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | int | PK | идентификатор статуса | +| `name` | text | NOT NULL | наименование статуса | + +Значения: + +| id | name | +|---|---| +| 1 | Запрос отправлен | +| 2 | Ответ получен | +| 3 | Ответ успешно обработан | +| 4 | Ошибка при обработке | + +## chk_check — проверки + +Основная таблица проверок. Файл DDL: `tables/chk_check.sql`. + +| Поле | Тип | Ограничения | Описание | +|---|---|---|---| +| `id` | serial | PK | идентификатор проверки | +| `check_date` | date | NOT NULL | день (дата) проверки | +| `chk_type_id` | int | NOT NULL, FK → `chk.chk_type(id)` | тип проверки | +| `chk_status_id` | int | NOT NULL, FK → `chk.chk_status(id)` | статус проверки | +| `smev_message_id` | text | — | идентификатор сообщения СМЭВ | +| `rr_organization_id` | text | — | идентификатор организации РР | +| `params` | jsonb | — | параметры: результаты проверок (например, сколько организаций получено из дельты ЕГРЮЛ и сколько сформировано запросов); состав не фиксирован | +| `parent_check_id` | int | nullable, FK → `chk.chk_check(id)` | идентификатор родительской проверки; в задаче помечен «не уверен что нужно» — включён nullable | + +Индексы (FK в PostgreSQL автоматически не индексируются): + +| Индекс | Колонки | +|---|---| +| `idx_chk_check_type` | `chk_type_id` | +| `idx_chk_check_status` | `chk_status_id` | +| `idx_chk_check_parent` | `parent_check_id` | diff --git a/DB/chk/tables/chk_check.sql b/DB/chk/tables/chk_check.sql new file mode 100644 index 0000000..c38b9bc --- /dev/null +++ b/DB/chk/tables/chk_check.sql @@ -0,0 +1,17 @@ +-- chk.chk_check: проверки организаций. +-- Поля — из задачи (DB/task.md); parent_check_id включён как nullable +-- (в задаче помечен «не уверен что нужно»). +CREATE TABLE IF NOT EXISTS chk.chk_check ( + id serial PRIMARY KEY, + check_date date NOT NULL, + chk_type_id int NOT NULL REFERENCES chk.chk_type (id), + chk_status_id int NOT NULL REFERENCES chk.chk_status (id), + smev_message_id text, + rr_organization_id text, + params jsonb, + parent_check_id int REFERENCES chk.chk_check (id) +); + +CREATE INDEX IF NOT EXISTS idx_chk_check_type ON chk.chk_check (chk_type_id); +CREATE INDEX IF NOT EXISTS idx_chk_check_status ON chk.chk_check (chk_status_id); +CREATE INDEX IF NOT EXISTS idx_chk_check_parent ON chk.chk_check (parent_check_id); diff --git a/DB/chk/tables/chk_status.sql b/DB/chk/tables/chk_status.sql new file mode 100644 index 0000000..b5a9f08 --- /dev/null +++ b/DB/chk/tables/chk_status.sql @@ -0,0 +1,6 @@ +-- chk.chk_status: справочник статусов проверок. +-- Значения — из задачи (DB/task.md), идентификаторы фиксированные. +CREATE TABLE IF NOT EXISTS chk.chk_status ( + id int PRIMARY KEY, + name text NOT NULL +); diff --git a/DB/chk/tables/chk_type.sql b/DB/chk/tables/chk_type.sql new file mode 100644 index 0000000..767095f --- /dev/null +++ b/DB/chk/tables/chk_type.sql @@ -0,0 +1,6 @@ +-- chk.chk_type: справочник типов проверок. +-- Значения — из задачи (DB/task.md), идентификаторы фиксированные. +CREATE TABLE IF NOT EXISTS chk.chk_type ( + id int PRIMARY KEY, + name text NOT NULL +); diff --git a/DB/readme.md b/DB/readme.md new file mode 100644 index 0000000..1473204 --- /dev/null +++ b/DB/readme.md @@ -0,0 +1,31 @@ +# БД MT.Сhecks + +## Общая информация + +| Параметр | Значение | +|---|---| +| СУБД | PostgreSQL (PL/pgSQL) | +| Схемы-слои | `chk` — проверки организаций | +| Источник требований | `DB/task.md` | +| Инициализация | `chk/init/init.sql` (psql, идемпотентно) | + +## Конвенции + +- Имя таблицы: `{слой}_{сущность}` (`chk.chk_check`); функции: `{слой}.{сущность}_{действие}` (db-func-3). +- Один файл — одна таблица (`chk/tables/*.sql`, по образцу db-func-4). +- PK сущности — `serial` (d-db-3); справочники — фиксированные `id`. +- JSON-параметры: в таблице — `jsonb`; в функции передаются как `text` с кастом внутри (db-m-5). +- Документация слоя: `chk/tables.md` (d-db-2), `chk/functions.md` (d-db-7), ER-схема: `chk/schema.puml` (PlantUML, c-skl-8). + +## Перечень таблиц + +| Таблица | Тип | Описание | +|---|---|---| +| `chk.chk_type` | системный справочник | типы проверок (6 значений) | +| `chk.chk_status` | системный справочник | статусы проверок (4 значения) | +| `chk.chk_check` | сущность | проверки организаций | + +## План миграции + +1. `psql -d <база> -f chk/init/init.sql` — создание схемы, таблиц, сидирование справочников. +2. Функции слоя — по `chk/functions.md` (все в статусе `PLAN`), реализация — отдельными задачами. diff --git a/DB/task.md b/DB/task.md new file mode 100644 index 0000000..c1e0327 --- /dev/null +++ b/DB/task.md @@ -0,0 +1,79 @@ +Задача сформировать файлы таблиц и скрипты инициализации + + + +Структура: + +  + +\[Таблица с проверками] + +  + +1\. Id + +2\. День (дата) проверки + +3\. Тип проверки + +4\. Статус проверки + +5\. Идентификатор сообщения СМЭВ + +6\. Идентификатор организации РР + +7\. Параметры + +8\. Идентификатор родительской проверки? (не уверен что нужно) + +  + +По поводу 7 поля с параметрами - тут можно сделать JSON в котором хранить различные результаты проверок, чтобы их явно потом использовать позже (например, хранить сколько организаций было получено из дельты ЕГРЮЛ и сколько было сформировано запросов) + +  + +\[Таблица с типами проверок] + +  + +1\. Id + +2\. Наименование + +  + +Значения: + +1\. Запрос изменений (дельты) ЕГРЮЛ + +2\. Запрос изменений (дельты) ЕГРИП + +3\. Отправка запроса в ЕГРЮЛ + +4\. Отправка запроса в ЕГРИП + +5\. Актуализация организации ОТ + +6\. Актуализация организации СОУТ + +  + +  + +\[Таблица со статусами проверок] + +1\. Id + +2\. Наименование + +  + +Значения: + +1\. Запрос отправлен + +2\. Ответ получен + +3\. Ответ успешно обработан + +4\. Ошибка при обработке