- docs/architecture/plan.md — полный план проекта (архитектура, стек, SLA, регуляторика, Реестр ПО, roadmap M1–M5, открытые вопросы и решения). - docs/tasks/README.md — индекс задач и инструкция запуска для Claude Code на dev-ВМ. - docs/tasks/PR-1-go-models-m2m.md — Go-модели M2M, парсер windows-1251, NSDDateTime, round-trip тесты на эталонах. - docs/tasks/PR-2-fansy-ddl.md — DDL принимающей БД для команды Fansy (контракт данных, ETL-требования, словарь полей, тестовые данные). - docs/tasks/PR-3-lk-openapi.md — OpenAPI контракт lk-gateway по ESIA Finance API V1, для синхронизации с командой ЛК. - docs/tasks/PR-4-m2m-core-skeleton.md — FSM сделки, репозиторий, идемпотентность по GUID, метрики SLA. - docs/tasks/PR-5-nsd-adapter-skeleton.md — REST-клиент ИШ НРД, маршрутизация типов пакетов (M2MTR/M2MTD/M2MER/SUBBR/SUBER/SUB16). - docs/tasks/PR-6-crypto-service-skeleton.md — gRPC-каркас Java-сервиса криптографии (КриптоПро JCP, UDS, Provider-абстракция). С этого коммита дальнейшая разработка идёт на dev-ВМ через запущенный там Claude Code. Промпты PR-1..PR-3 готовы к параллельному запуску; PR-4 после PR-1; PR-5 и PR-6 ждут поставку артефактов (ИШ НРД, сертификаты, КриптоПро JCP). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.7 KiB
PR-2: DDL принимающей БД для команды Fansy
Цель
Спроектировать DDL принимающей БД fansy-store под требования
документации НРД к данным M2M и передать его команде Fansy как
контракт для их ETL.
ETL делает команда Fansy в автоматизированном режиме. Наша ответственность — схема таблиц, индексы, миграции, типизированный Go-репозиторий чтения и контракт данных.
Источники правды
DOC/M2MSchemas_260408/*.xsd— какие поля и типы нужны для формирования M2M-сообщений.DOC/Справочник пользователей.pdf— перечень контрагентов (БКС 5406121446, Ренессанс Брокер 7709258228, Альфа-банк 7728168971).docs/architecture/plan.md— контракт с командой Fansy (раздел «Контракт с командой Fansy — что мы передаём»).
Состав PR
1. docs/fansy-contract/v1/ddl/ — SQL-миграции
PostgreSQL 16 / PostgreSQL Pro Certified. Используй goose или
просто пронумерованные файлы 001__init.sql, 002__staging.sql и т. д.
Схема разделена на две:
fansy_staging— куда пишет команда Fansy (только их роль может делать INSERT/UPDATE);fansy— рабочая, куда переливаются актуальные данные триггерами или процедурами после валидации.
Минимальный набор таблиц (повторяй структуру и в staging, и в рабочей):
clients— депоненты/инвесторы:id(uuid),inn(для юрлиц),last_name,first_name,middle_name,birth_date,created_at,updated_at.
client_documents— документы инвестора:id,client_id (FK),document_type(enum поIdentityDocumentCode),series,number,issued_at,issuer.
iia_contracts— ИИС-договоры:id,client_id (FK),agreement_type(T12|T03),agreement_number,agreement_date,broker_inn.
depo_accounts— депо-счета и разделы:id,client_id (FK),deponent_code,account_id,section_id,depository_inn,is_active,is_trading.
settlement_requisites— реквизиты расчётов:id,inn,display_name,created_at.
portfolios— портфели/остатки ЦБ:id,client_id (FK),depo_account_id (FK),security_code,isin,quantity_whole(numeric),quantity_fractional(numeric(38,16)),isolation_status(SGDN),valued_at.
securities— справочник ЦБ:id,security_code(PK),isin,classification(BOND|SHAR|MFUN),category(ORDN|PREF|UKWN),security_type,security_series,reg_number,fund_class,display_name.
participants— контрагенты-участники сервиса MOST:id,inn(PK),ogrn,full_name_rus,short_name_rus,display_name_rus,full_name_eng,short_name_eng,display_name_eng,depository_participant_code,broker_participant_code,is_available_for_m2m,comment.- Предзаполни записями из
Справочник пользователей.pdf.
Дополнительно:
etl_errors— таблица для ошибок выгрузки Fansy (id, source_table, source_pk, payload jsonb, error_message, created_at).- В
_staging-таблицах полеloaded_at timestamptz default now().
Индексы. Минимум: PK, FK, индекс по inn и deponent_code в
основных таблицах, индекс по valued_at в portfolios.
Роль fansy_etl. В отдельном 000__roles.sql:
- роль
fansy_etlс правами INSERT/UPDATE/SELECT на схемуfansy_staging; - роль
bj_readerс SELECT на схемуfansy— для нашегоm2m-core/lk-gateway; - DDL-права (CREATE/ALTER/DROP) — только у миграционной роли, не у Fansy-ETL.
2. docs/fansy-contract/v1/data-dictionary.md
Таблица: «поле → семантика → источник в Fansy (если известен) → nullable → пример». На каждую колонку каждой таблицы.
3. docs/fansy-contract/v1/etl-requirements.md
Технические требования к процессу выгрузки от команды Fansy:
- Подключение: PostgreSQL, роль
fansy_etl, отдельная учётная запись. - Тип load: инкрементный UPSERT в staging-таблицы по бизнес-ключу;
полная перезаливка — только для справочников (
securities,participants), не чаще раза в сутки. - SLA свежести данных:
portfolios— не позднее 1 минуты после изменения в Fansy;clients,depo_accounts,client_documents,iia_contracts— не позднее 5 минут;securities,participants— раз в сутки или по событию.
- Формат timestamp — UTC с явной зоной (
timestamptz). - Обработка ошибок: запись в
etl_errors. - Окно простоя для регламентных работ — согласовать.
4. docs/fansy-contract/v1/examples/
example-claim.md— какие поля из БД нужныm2m-coreдля одной типовой M2M-заявки (с конкретными SQL-запросами).seed-data.sql— 5–10 тестовых клиентов, портфелей, заявок для совместного приёмочного теста.
5. migrations/fansy-store/
Скопировать *.sql из docs/fansy-contract/v1/ddl/ — отсюда будут
исполняться миграциями в нашем сервисе.
6. Обновить docs/fansy-contract/v1/README.md
Описать состав каталога и порядок согласования с командой Fansy.
Требования к коду
- Все DDL-файлы — на одной кодировке UTF-8.
- Имена таблиц и колонок —
snake_caseанглийский. - Комментарии в DDL (
COMMENT ON COLUMN ... IS '...') — на русском. - Без эмодзи.
Коммит
feat(fansy-store): DDL принимающей БД + контракт данных для команды Fansy
- docs/fansy-contract/v1/ddl/ — миграции PostgreSQL
- docs/fansy-contract/v1/data-dictionary.md — словарь данных
- docs/fansy-contract/v1/etl-requirements.md — требования к ETL
- docs/fansy-contract/v1/examples/ — пример заявки + seed-data
- migrations/fansy-store/ — рабочие копии миграций
- предзаполнен справочник контрагентов из DOC/Справочник пользователей.pdf
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
После коммита
- Обновить
docs/tasks/README.md: PR-2 — «выполнено». - Сообщить заказчику, что DDL готов и можно отправлять команде Fansy.