feat(fansy-store): DDL принимающей БД + контракт данных для команды Fansy
- docs/fansy-contract/v1/ddl/000__roles.sql: роли fansy_etl, bj_reader, bj_migrator - docs/fansy-contract/v1/ddl/001__schemas.sql: схемы fansy_staging и fansy с грантами - docs/fansy-contract/v1/ddl/002__working.sql: рабочая схема (participants, securities, clients, client_documents, iia_contracts, settlement_requisites, depo_accounts, portfolios, etl_errors) - docs/fansy-contract/v1/ddl/003__staging.sql: staging-зеркало с loaded_at и сниженными ограничениями - docs/fansy-contract/v1/ddl/004__seed_participants.sql: предзаполнение справочника (НРД, БКС 5406121446, Ренессанс 7709258228, Альфа-Банк 7728168971) - docs/fansy-contract/v1/data-dictionary.md: семантика каждого поля - docs/fansy-contract/v1/etl-requirements.md: требования к ETL (UPSERT в staging, SLA свежести по таблицам, обработка ошибок) - docs/fansy-contract/v1/examples/example-claim.md: SQL-запросы для формирования M2MTransferRequest - docs/fansy-contract/v1/examples/seed-data.sql: 5 тестовых клиентов + портфели + договоры - migrations/fansy-store/: рабочие копии миграций Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,33 +1,56 @@
|
||||
# docs/fansy-contract/v1 — контракт данных с командой Fansy
|
||||
|
||||
ETL Fansy → принимающая БД (`fansy-store`) реализует **другая команда
|
||||
разработки**. С нашей стороны:
|
||||
разработки**. С нашей стороны зафиксирован контракт: схема таблиц,
|
||||
индексы, миграции, требования к выгрузке и тестовые данные.
|
||||
|
||||
1. Спроектировать таблицы по требованиям документации НРД к данным M2M.
|
||||
2. Передать команде Fansy DDL и контракт данных.
|
||||
3. Согласовать тип load (UPSERT в staging), окна обновления, SLA на
|
||||
свежесть данных.
|
||||
4. Не давать ETL-роли DDL-прав в принимающей схеме.
|
||||
## Состав каталога
|
||||
|
||||
Состав каталога (создаём в M1, отправляем в начале M2):
|
||||
- **`ddl/`** — SQL-миграции PostgreSQL:
|
||||
- `000__roles.sql` — роли `fansy_etl` (ETL Fansy), `bj_reader`
|
||||
(наши сервисы), `bj_migrator` (миграции).
|
||||
- `001__schemas.sql` — две схемы: `fansy_staging` (куда пишет ETL) и
|
||||
`fansy` (рабочая, для нашего чтения). Гранты по ролям.
|
||||
- `002__working.sql` — рабочие таблицы: `participants`, `securities`,
|
||||
`clients`, `client_documents`, `iia_contracts`,
|
||||
`settlement_requisites`, `depo_accounts`, `portfolios`,
|
||||
`etl_errors`.
|
||||
- `003__staging.sql` — staging-зеркало рабочих таблиц с полем
|
||||
`loaded_at` и сниженными ограничениями.
|
||||
- `004__seed_participants.sql` — предзаполнение справочника
|
||||
участников: НРД, БКС (5406121446), Ренессанс (7709258228),
|
||||
Альфа-Банк (7728168971).
|
||||
- **`data-dictionary.md`** — семантика каждого поля.
|
||||
- **`etl-requirements.md`** — требования к процессу выгрузки от
|
||||
команды Fansy: подключение, тип load (UPSERT в staging),
|
||||
SLA свежести по таблицам, обработка ошибок, окна простоя, ПДн.
|
||||
- **`examples/`**:
|
||||
- `example-claim.md` — какие данные `m2m-core` тянет из БД для
|
||||
одной типовой M2M-заявки (с конкретными SQL).
|
||||
- `seed-data.sql` — 5 тестовых клиентов, портфели, договоры —
|
||||
основа для приёмочного теста.
|
||||
|
||||
- `ddl/` — `*.sql` миграции PostgreSQL для всех таблиц.
|
||||
- `data-dictionary.md` — семантика каждого поля (источник в Fansy,
|
||||
nullable, единицы, примеры).
|
||||
- `etl-requirements.md` — требования к процессу выгрузки: тип load,
|
||||
расписание, способ записи, окна простоя, обработка ошибок,
|
||||
конфиденциальность.
|
||||
- `examples/` — пример заявки M2M «end-to-end», 5–10 тестовых клиентов
|
||||
и заявок для совместного приёмочного теста.
|
||||
## Рабочие копии миграций
|
||||
|
||||
Минимальный набор таблиц (см. план):
|
||||
Те же файлы лежат в `migrations/fansy-store/` — оттуда они
|
||||
применяются при инициализации БД сервиса.
|
||||
|
||||
- Депоненты / клиенты.
|
||||
- Документы инвестора (`IdentityDocumentCodeEnum`).
|
||||
- ИИС-договоры (`IIAContractTypeEnum ∈ {T12, T03}`).
|
||||
- Депо-счета и разделы (`AccountId`, `SectionId`, `DeponentCode`).
|
||||
- Реквизиты расчётов (ИНН депозитария).
|
||||
- Портфели и остатки (Whole / Fractional, `IsolationStatus = SGDN`).
|
||||
- Справочник ЦБ (`SecurityCode`, `ISIN`, `Classification`, `Category`).
|
||||
- Контрагенты-участники сервиса MOST (Справочник пользователей).
|
||||
- Audit / staging-таблицы для каждой основной.
|
||||
## Порядок согласования
|
||||
|
||||
1. Передать команде Fansy ссылку на эту папку (тег `fansy-contract-v1`).
|
||||
2. Обсудить с ними SLA, окна простоя, тип load.
|
||||
3. По согласовании — дать им учётку с ролью `fansy_etl` и подсеть для
|
||||
доступа.
|
||||
4. Запустить совместный приёмочный тест на `seed-data.sql`.
|
||||
5. Изменения контракта — через новую папку `v2/` с changelog'ом, без
|
||||
правки `v1/`.
|
||||
|
||||
## Принципы
|
||||
|
||||
- Имена таблиц/колонок — `snake_case` английский.
|
||||
- Комментарии к таблицам и важным колонкам — на русском
|
||||
через `COMMENT ON ... IS '...'`.
|
||||
- Все timestamp — `timestamptz` в UTC.
|
||||
- DDL-права только у `bj_migrator`, у `fansy_etl` нет.
|
||||
- ETL пишет ТОЛЬКО в `fansy_staging.*`. Перелив в `fansy.*` — на нашей
|
||||
стороне после валидации.
|
||||
|
||||
Reference in New Issue
Block a user