Monalisa
Modelo de dados

Bank Users

Usuários bancários: o login de uma pessoa numa IF, sua atribuição a corretores e a revelação da senha.

Um usuário bancário (user_banks) é global e sensível: pessoa × IF, com a senha guardada em Credentials. Nenhuma rota deve lê-lo diretamente; o acesso passa pela atribuição (bank_user_assignments), que tem tenant e corretor. Transferir o usuário bancário entre corretores do mesmo tenant fecha uma atribuição e abre outra, com registro em bank_user_transfers. A revelação da senha acontece só no portal e é registrada uma vez por versão em bank_credential_deliveries.

Tabelas (4)

TabelaPara quê
user_banksO login de uma pessoa numa IF, com sua credencial; um aberto por (usuário, IF).
bank_user_assignmentsAtribuição de um usuário bancário a um corretor do tenant, com vigência por dia [valid_from, valid_until), o código de loja sob o qual foi criado e a atuação de origem (origin_membership_broker_id).
bank_user_transfersRegistro da transferência de um usuário bancário entre corretores do mesmo tenant: atribuição de origem e de destino, data efetiva, ator e motivo.
bank_credential_deliveriesRevelação da senha bancária no portal: uma por versão da credencial (a PK é credential_version_id), com quem viu e quando (clock_timestamp()).

Referência

user_banks

O login de uma pessoa numa IF, com sua credencial; um aberto por (usuário, IF).

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
user_idbigintnão
financial_institution_idbigintnão
credential_idbigintnão
kindtextnão
statustextnão
confirmed_attimestamptznão
closed_attimestamptzsim
created_attimestamptznãopadrão clock_timestamp()
updated_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • credential_id → credentials.id
  • financial_institution_id → financial_institutions.id
  • user_id → users.id

Referenciada por: bank_credential_deliveries, bank_user_assignments.

Garantido pelo banco

TipoNomeDefinição
PKuser_banks_pkeyPRIMARY KEY (id)
UNIQUEuser_banks_credential_keyUNIQUE (credential_id)
UNIQUEuser_banks_id_credential_keyUNIQUE (id, credential_id)
UNIQUEuser_banks_id_user_institution_keyUNIQUE (id, user_id, financial_institution_id)
UNIQUE parcialuser_banks_user_if_open_key(user_id, financial_institution_id) WHERE (closed_at IS NULL)

Fora do banco

  • kind e status não têm CHECK de valores.
  • O número do usuário bancário não se repetir entre tenants é tratado na aplicação, que responde com erro neutro.

bank_user_assignments

Atribuição de um usuário bancário a um corretor do tenant, com vigência por dia [valid_from, valid_until), o código de loja sob o qual foi criado e a atuação de origem (origin_membership_broker_id).

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
user_bank_idbigintnão
user_idbigintnão
party_idbigintnão
financial_institution_idbigintnão
tenant_idbigintnão
broker_idbigintnão
valid_fromdatenãovigência por dia
valid_untildatesimexclusivo [valid_from, valid_until)
created_by_user_idbigintsim
ended_by_user_idbigintsim
change_reasontextsim
created_attimestamptznãopadrão clock_timestamp()
ended_recorded_attimestamptzsim
store_code_idbigintnãocódigo de loja sob o qual o usuário foi criado
origin_membership_broker_idbigintnãoatuação de origem no corretor (obrigatória)

Chaves estrangeiras

  • (origin_membership_broker_id, tenant_id, broker_id, user_id) → membership_brokers (id, tenant_id, broker_id, user_id) (mesmo tenant)
  • (store_code_id, financial_institution_id, tenant_id) → store_codes (id, financial_institution_id, tenant_id) (mesmo tenant)
  • (tenant_id, broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • (user_bank_id, user_id, financial_institution_id) → user_banks (id, user_id, financial_institution_id)
  • (user_id, party_id) → users (id, party_id)
  • created_by_user_id → users.id
  • ended_by_user_id → users.id

Referenciada por: bank_credential_deliveries, bank_user_transfers.

Garantido pelo banco

TipoNomeDefinição
CHECKbank_assignments_valid_period_checkCHECK (((valid_until IS NULL) OR (valid_until > valid_from)))
PKbank_user_assignments_pkeyPRIMARY KEY (id)
UNIQUEbank_user_assignments_id_tenant_keyUNIQUE (id, tenant_id)
UNIQUEbank_user_assignments_id_user_bank_keyUNIQUE (id, user_bank_id)
UNIQUEbank_user_assignments_id_user_bank_tenant_broker_keyUNIQUE (id, user_bank_id, tenant_id, broker_id)
UNIQUE parcialbank_assignments_one_open_key(user_bank_id) WHERE (valid_until IS NULL)

Fora do banco

  • Não há EXCLUDE de sobreposição: só uma atribuição aberta por usuário bancário é garantida.
  • Coerência de party_id entre a atribuição e a atuação de origem é regra da aplicação.

bank_user_transfers

Registro da transferência de um usuário bancário entre corretores do mesmo tenant: atribuição de origem e de destino, data efetiva, ator e motivo.

ColunaTipoNuloObservação
idbigintnãoidentity (GENERATED ALWAYS)
tenant_idbigintnão
user_bank_idbigintnão
from_assignment_idbigintnão
from_broker_idbigintnão
to_assignment_idbigintnão
to_broker_idbigintnão
effective_ondatenãotroca vale a partir deste dia
actor_user_idbigintnão
actor_membership_idbigintsim
actor_broker_idbigintsim
reasontextnão
recorded_attimestamptznãopadrão clock_timestamp()

Chaves estrangeiras

  • (actor_membership_id, actor_user_id, tenant_id) → memberships (id, user_id, tenant_id) (mesmo tenant)
  • (from_assignment_id, user_bank_id, tenant_id, from_broker_id) → bank_user_assignments (id, user_bank_id, tenant_id, broker_id) (mesmo tenant)
  • (tenant_id, actor_broker_id) → tenant_brokers (tenant_id, broker_id) (mesmo tenant)
  • (to_assignment_id, user_bank_id, tenant_id, to_broker_id) → bank_user_assignments (id, user_bank_id, tenant_id, broker_id) (mesmo tenant)
  • actor_user_id → users.id

Garantido pelo banco

TipoNomeDefinição
CHECKbank_transfers_distinct_assignments_checkCHECK ((from_assignment_id <> to_assignment_id))
PKbank_user_transfers_pkeyPRIMARY KEY (id)
UNIQUEbank_user_transfers_from_assignment_keyUNIQUE (from_assignment_id)
UNIQUEbank_user_transfers_to_assignment_keyUNIQUE (to_assignment_id)

Fora do banco

  • Fechar a origem e abrir o destino na mesma data, numa única transação, é regra da aplicação.

bank_credential_deliveries

Revelação da senha bancária no portal: uma por versão da credencial (a PK é credential_version_id), com quem viu e quando (clock_timestamp()).

ColunaTipoNuloObservação
credential_version_idbigintnão
credential_idbigintnão
user_bank_idbigintnão
assignment_idbigintnão
consumed_attimestamptznãopadrão clock_timestamp()
viewed_by_user_idbigintnão
tenant_idbigintnãosegredo dentro do tenant

Chaves estrangeiras

  • (assignment_id, tenant_id) → bank_user_assignments (id, tenant_id) (mesmo tenant)
  • (assignment_id, user_bank_id) → bank_user_assignments (id, user_bank_id)
  • (credential_version_id, credential_id) → credential_versions (id, credential_id)
  • (user_bank_id, credential_id) → user_banks (id, credential_id)
  • viewed_by_user_id → users.id

Garantido pelo banco

TipoNomeDefinição
PKbank_credential_deliveries_pkeyPRIMARY KEY (credential_version_id)

Fora do banco

  • viewed_by_user_id vem da identidade autenticada no servidor, nunca do payload; a senha é devolvida só depois do commit.

Nesta página