Monalisa
Modelo de dados

Brokers

Corretores, seu vínculo com o tenant, hierarquia, termos com CNPJs e códigos de loja.

O corretor é global (uma party); o que o tenant conhece é tenant_brokers. Quase todas as tabelas seguintes referenciam o par (tenant_id, broker_id) de tenant_brokers, e não brokers direto, para que o corretor seja sempre um corretor daquele tenant.

Códigos de loja (store_codes) pertencem a exatamente um dono: a conta do grupo na IF ou o próprio corretor. broker_store_codes diz qual código o corretor usa em cada IF, em qual regime e em qual período, sem sobreposição.

Tabelas (6)

TabelaPara quê
brokersIdentidade global do corretor (party), com identificador público.
tenant_brokersO corretor dentro de um tenant, com código no tenant e desativação.
broker_affiliationsHistórico da hierarquia entre corretores do mesmo tenant (corretor e corretor-pai), com início e fim; uma afiliação aberta por corretor.
tenant_broker_accountsCom quais CNPJs do grupo o corretor tem termo assinado (N:N), com vigência.
store_codesRegistro dos códigos de loja e de seu dono: a conta do grupo na IF ou o corretor.
broker_store_codesQual código de loja o corretor usa em cada IF e em qual regime, com vigência [valid_from, valid_until) sem sobreposição.

Referência

brokers

Identidade global do corretor (party), com identificador público.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
uidtextnão
party_idbigintnão
created_attimestamptznãopadrão clock_timestamp()
updated_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • party_id → parties.id

Referenciada por: tenant_brokers.

Garantido pelo banco

TipoNomeDefinição
PKbrokers_pkeyPRIMARY KEY (id)
UNIQUEbrokers_uid_uniqueUNIQUE (uid)

Fora do banco

  • Nenhuma regra registrada além das constraints acima.

tenant_brokers

O corretor dentro de um tenant, com código no tenant e desativação.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
tenant_idbigintnão
broker_idbigintnão
broker_codetextsim
disabled_attimestamptzsim
disabled_reasontextsim
created_attimestamptznãopadrão clock_timestamp()
updated_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • broker_id → brokers.id
  • tenant_id → tenants.id

Referenciada por: access_profiles, bank_user_assignments, bank_user_transfers, broker_affiliations, broker_prospects, broker_store_codes, invitation_grants, membership_brokers, membership_portfolios, store_codes, tenant_broker_accounts.

Garantido pelo banco

TipoNomeDefinição
PKtenant_brokers_pkeyPRIMARY KEY (id)
UNIQUEtenant_brokers_tenant_broker_keyUNIQUE (tenant_id, broker_id)
UNIQUEtenant_brokers_tenant_code_keyUNIQUE (tenant_id, broker_code)

Fora do banco

  • Nenhuma regra registrada além das constraints acima.

broker_affiliations

Histórico da hierarquia entre corretores do mesmo tenant (corretor e corretor-pai), com início e fim; uma afiliação aberta por corretor.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
uidtextnão
tenant_idbigintnão
broker_idbigintnão
parent_idbigintnão
started_ondatenão
ended_ondatesim
ended_bybigintsim
ended_reasontextsim
approved_bybigintsim
created_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • (tenant_id, broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • (tenant_id, parent_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • approved_by → users.id
  • ended_by → users.id

Garantido pelo banco

TipoNomeDefinição
PKbroker_affiliations_pkeyPRIMARY KEY (id)
UNIQUEbroker_affiliations_uid_uniqueUNIQUE (uid)
UNIQUE parcialbroker_affiliations_live_key(tenant_id, broker_id) WHERE (ended_on IS NULL)

Fora do banco

  • Ausência de ciclos na hierarquia e ended_on posterior a started_on não são verificados pelo banco.

tenant_broker_accounts

Com quais CNPJs do grupo o corretor tem termo assinado (N:N), com vigência.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
tenant_idbigintnão
broker_idbigintnão
tenant_account_idbigintnão
signed_ondatesimtermo assinado com esse CNPJ
valid_fromdatenão
valid_untildatesim
created_attimestamptznãopadrão clock_timestamp()
updated_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • (tenant_account_id, tenant_id) → tenant_accounts (id, tenant_id) (mesmo tenant)
  • (tenant_id, broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)

Garantido pelo banco

TipoNomeDefinição
PKtenant_broker_accounts_pkeyPRIMARY KEY (id)
UNIQUE parcialtenant_broker_accounts_live_key(tenant_id, broker_id, tenant_account_id) WHERE (valid_until IS NULL)

Fora do banco

  • Não há CHECK de ordem entre valid_from e valid_until, nem EXCLUDE de sobreposição; só um termo aberto por trio é garantido.

store_codes

Registro dos códigos de loja e de seu dono: a conta do grupo na IF ou o corretor. O código é único por (tenant, IF), preservando zeros à esquerda; pode repetir entre tenants.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
tenant_idbigintnão
financial_institution_idbigintnão
codetextnãocomo o banco manda; zeros à esquerda preservados
financial_institution_account_idbigintsimdono = CNPJ do grupo
broker_idbigintsimdono = corretor (código próprio)
disabled_attimestamptzsim
created_attimestamptznãopadrão clock_timestamp()
updated_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • (financial_institution_account_id, financial_institution_id, tenant_id) → financial_institution_accounts (id, financial_institution_id, tenant_id) (mesmo tenant)
  • (tenant_id, broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • financial_institution_id → financial_institutions.id

Referenciada por: bank_user_assignments, broker_store_codes.

Garantido pelo banco

TipoNomeDefinição
CHECKstore_codes_one_owner_checkCHECK ((num_nonnulls(financial_institution_account_id, broker_id) = 1))
PKstore_codes_pkeyPRIMARY KEY (id)
UNIQUEstore_codes_id_institution_tenant_keyUNIQUE (id, financial_institution_id, tenant_id)
UNIQUEstore_codes_id_tenant_institution_keyUNIQUE (id, tenant_id, financial_institution_id)
UNIQUEstore_codes_tenant_institution_code_keyUNIQUE (tenant_id, financial_institution_id, code)

Fora do banco

  • Nenhuma regra registrada além das constraints acima.

broker_store_codes

Qual código de loja o corretor usa em cada IF e em qual regime, com vigência [valid_from, valid_until) sem sobreposição. O sistema resolve o código a partir daqui; ele não é digitado.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
tenant_idbigintnão
broker_idbigintnão
financial_institution_idbigintnão
store_code_idbigintnão
regimetextnãostandard | substabelecido | indicado | subzero
valid_fromdatenão
valid_untildatesimexclusivo
assigned_by_user_idbigintnão
created_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • (store_code_id, tenant_id, financial_institution_id) → store_codes (id, tenant_id, financial_institution_id) (mesmo tenant)
  • (tenant_id, broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • assigned_by_user_id → users.id

Garantido pelo banco

TipoNomeDefinição
CHECKbroker_store_codes_period_checkCHECK (((valid_until IS NULL) OR (valid_until > valid_from)))
CHECKbroker_store_codes_regime_checkCHECK ((regime IN ('standard', 'substabelecido', 'indicado', 'subzero')))
PKbroker_store_codes_pkeyPRIMARY KEY (id)
EXCLUDEbroker_store_codes_no_overlapEXCLUDE USING gist (tenant_id WITH =, broker_id WITH =, financial_institution_id WITH =, daterange(valid_from, valid_until, '[)') WITH &&)

Fora do banco

  • Regime standard exige código da conta do grupo; os demais regimes exigem código do próprio corretor. É regra de domínio em código (assertRegimeMatchesOwner), não constraint.

Nesta página