{{define "content"}}

← все инструкции

База данных

PostgreSQL 16 (или PostgreSQL Pro Certified). Хранит сделки, журнал событий, справочники и данные, поступающие из внешних систем через ETL.

1. Подключение

DSN указывается в разделе Настройка → PostgreSQL. Формат:

postgres://USER:PASSWORD@HOST:PORT/DBNAME?sslmode=disable

Локальный дев-стенд:

postgres://bj:bj_dev@127.0.0.1:5432/bj?sslmode=disable

При сохранении выполняется pgx.Connect и Ping. Если БД недоступна, форма покажет ошибку.

2. Схемы

СхемаНазначениеКто пишетКто читает
fansy_staging Промежуточные таблицы для ETL Fansy Команда Fansy (роль fansy_etl) Наша процедура перелива в fansy
fansy Рабочие данные: клиенты, документы, ИИС, депо-счета, портфели, справочники ЦБ и участников Наша процедура перелива (после валидации) Наша система (роль bj_reader): m2m-core при формировании заявок
m2m_core Сделки M2M, журнал событий FSM bj-server bj-server, admin-ui

3. Что подгружается из внешних систем

Команда Fansy через инкрементный UPSERT в staging-таблицы:

Таблица stagingSLA свежестиЧто в ней
clients≤ 5 минутАнкеты инвесторов (ФИО, дата рождения, ИНН)
client_documents≤ 5 минутДокументы (паспорт, ИНН и др.)
iia_contracts≤ 5 минутДоговоры ИИС (тип T12/T03, номер, дата, ИНН брокера)
depo_accounts≤ 5 минутДепо-счета и разделы у разных депозитариев
portfolios≤ 1 минутаОстатки ЦБ (целое/дробное количество, статус обособления)
securities / participantsраз в суткиСправочники ЦБ и участников MOST

Полный data-dictionary: docs/fansy-contract/v1/data-dictionary.md. Требования к ETL: docs/fansy-contract/v1/etl-requirements.md.

4. Что пишет сама система

Только в схему m2m_core:

Старт сделки происходит при POST /api/v1/back_office/claims/. FSM проходит этапы:

draft → validated → submitted_to_nsd → awaiting_decision →
    confirmed → awaiting_sub16 → done
                            ↘ rejected
                            ↘ timed_out
                            ↘ manual_approval

5. Учётные записи и роли

РольПраваСоздаёт
fansy_etlSELECT/INSERT/UPDATE на fansy_staging.*миграция 000__roles.sql
bj_readerSELECT на fansy.*миграция 000__roles.sql
bj_migratorВладелец схем, DDL-правамиграция 000__roles.sql

Пароли проставляются администратором БД через ALTER ROLE, в репозиторий не попадают.

6. Накатывание миграций

Файлы лежат в migrations/fansy-store/ и migrations/m2m-core/. Применить локально:

cd /home/fontvielle/Bridge-and-Join-s
for f in migrations/fansy-store/*.sql migrations/m2m-core/*.sql; do
    podman exec -i bj-postgres psql -U bj -d bj -v ON_ERROR_STOP=1 < "$f"
done

Порядок:

  1. fansy-store/000__roles.sql — роли
  2. fansy-store/001__schemas.sql — схемы и гранты
  3. fansy-store/002__working.sql — рабочая схема
  4. fansy-store/003__staging.sql — staging
  5. fansy-store/004__seed_participants.sql — справочник участников (НРД, БКС, Ренессанс, Альфа-Банк)
  6. m2m-core/001__deals.sql — сделки M2M
  7. m2m-core/002__stages.sql — jsonb-колонка истории FSM

7. Полезные запросы

-- Состояние сделок за последний час
SELECT state, count(*) FROM m2m_core.deals
WHERE created_at > now() - interval '1 hour'
GROUP BY state;

-- Журнал событий по сделке
SELECT created_at, type, actor, payload
FROM m2m_core.deal_events
WHERE deal_id = '...'
ORDER BY created_at;

-- Свежесть данных Fansy
SELECT 'portfolios' AS t, max(loaded_at) FROM fansy_staging.portfolios
UNION ALL SELECT 'clients', max(loaded_at) FROM fansy_staging.clients;
{{end}}