Init: DB layer chk — tables, init scripts, docs, PlantUML schema

This commit is contained in:
commit c3932e6404
10 changed files with 312 additions and 0 deletions

BIN
DB/chk/chk_schema.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

16
DB/chk/functions.md Normal file
View File

@ -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).

28
DB/chk/init/init.sql Normal file
View File

@ -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;

57
DB/chk/schema.puml Normal file
View File

@ -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 <<PK>>
--
* name : text
}
entity "chk_status" as chk_status {
* id : int <<PK>>
--
* name : text
}
entity "chk_check" as chk_check {
* id : serial <<PK>>
--
* check_date : date
* chk_type_id : int <<FK>>
* chk_status_id : int <<FK>>
smev_message_id : text
rr_organization_id : text
params : jsonb
parent_check_id : int <<FK, nullable>>
}
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

72
DB/chk/tables.md Normal file
View File

@ -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` |

View File

@ -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);

View File

@ -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
);

View File

@ -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
);

31
DB/readme.md Normal file
View File

@ -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`), реализация — отдельными задачами.

79
DB/task.md Normal file
View File

@ -0,0 +1,79 @@
Задача сформировать файлы таблиц и скрипты инициализации
Структура:
&nbsp;
\[Таблица с проверками]
&nbsp;
1\. Id
2\. День (дата) проверки
3\. Тип проверки
4\. Статус проверки
5\. Идентификатор сообщения СМЭВ
6\. Идентификатор организации РР
7\. Параметры
8\. Идентификатор родительской проверки? (не уверен что нужно)
&nbsp;
По поводу 7 поля с параметрами - тут можно сделать JSON в котором хранить различные результаты проверок, чтобы их явно потом использовать позже (например, хранить сколько организаций было получено из дельты ЕГРЮЛ и сколько было сформировано запросов)
&nbsp;
\[Таблица с типами проверок]
&nbsp;
1\. Id
2\. Наименование
&nbsp;
Значения:
1\. Запрос изменений (дельты) ЕГРЮЛ
2\. Запрос изменений (дельты) ЕГРИП
3\. Отправка запроса в ЕГРЮЛ
4\. Отправка запроса в ЕГРИП
5\. Актуализация организации ОТ
6\. Актуализация организации СОУТ
&nbsp;
&nbsp;
\[Таблица со статусами проверок]
1\. Id
2\. Наименование
&nbsp;
Значения:
1\. Запрос отправлен
2\. Ответ получен
3\. Ответ успешно обработан
4\. Ошибка при обработке