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)
| Tabela | Para quê |
|---|---|
user_banks | O login de uma pessoa numa IF, com sua credencial; um aberto por (usuário, IF). |
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). |
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. |
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()). |
Referência
user_banks
O login de uma pessoa numa IF, com sua credencial; um aberto por (usuário, IF).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
user_id | bigint | não | |
financial_institution_id | bigint | não | |
credential_id | bigint | não | |
kind | text | não | |
status | text | não | |
confirmed_at | timestamptz | não | |
closed_at | timestamptz | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
updated_at | timestamptz | não | padrão clock_timestamp() |
Chaves estrangeiras
credential_id→credentials.idfinancial_institution_id→financial_institutions.iduser_id→users.id
Referenciada por: bank_credential_deliveries, bank_user_assignments.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| PK | user_banks_pkey | PRIMARY KEY (id) |
| UNIQUE | user_banks_credential_key | UNIQUE (credential_id) |
| UNIQUE | user_banks_id_credential_key | UNIQUE (id, credential_id) |
| UNIQUE | user_banks_id_user_institution_key | UNIQUE (id, user_id, financial_institution_id) |
| UNIQUE parcial | user_banks_user_if_open_key | (user_id, financial_institution_id) WHERE (closed_at IS NULL) |
Fora do banco
kindestatusnã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).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
user_bank_id | bigint | não | |
user_id | bigint | não | |
party_id | bigint | não | |
financial_institution_id | bigint | não | |
tenant_id | bigint | não | |
broker_id | bigint | não | |
valid_from | date | não | vigência por dia |
valid_until | date | sim | exclusivo [valid_from, valid_until) |
created_by_user_id | bigint | sim | |
ended_by_user_id | bigint | sim | |
change_reason | text | sim | |
created_at | timestamptz | não | padrão clock_timestamp() |
ended_recorded_at | timestamptz | sim | |
store_code_id | bigint | não | código de loja sob o qual o usuário foi criado |
origin_membership_broker_id | bigint | não | atuaçã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.idended_by_user_id→users.id
Referenciada por: bank_credential_deliveries, bank_user_transfers.
Garantido pelo banco
| Tipo | Nome | Definição |
|---|---|---|
| CHECK | bank_assignments_valid_period_check | CHECK (((valid_until IS NULL) OR (valid_until > valid_from))) |
| PK | bank_user_assignments_pkey | PRIMARY KEY (id) |
| UNIQUE | bank_user_assignments_id_tenant_key | UNIQUE (id, tenant_id) |
| UNIQUE | bank_user_assignments_id_user_bank_key | UNIQUE (id, user_bank_id) |
| UNIQUE | bank_user_assignments_id_user_bank_tenant_broker_key | UNIQUE (id, user_bank_id, tenant_id, broker_id) |
| UNIQUE parcial | bank_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_identre 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.
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
id | bigint | não | identity (GENERATED ALWAYS) |
tenant_id | bigint | não | |
user_bank_id | bigint | não | |
from_assignment_id | bigint | não | |
from_broker_id | bigint | não | |
to_assignment_id | bigint | não | |
to_broker_id | bigint | não | |
effective_on | date | não | troca vale a partir deste dia |
actor_user_id | bigint | não | |
actor_membership_id | bigint | sim | |
actor_broker_id | bigint | sim | |
reason | text | não | |
recorded_at | timestamptz | não | padrã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
| Tipo | Nome | Definição |
|---|---|---|
| CHECK | bank_transfers_distinct_assignments_check | CHECK ((from_assignment_id <> to_assignment_id)) |
| PK | bank_user_transfers_pkey | PRIMARY KEY (id) |
| UNIQUE | bank_user_transfers_from_assignment_key | UNIQUE (from_assignment_id) |
| UNIQUE | bank_user_transfers_to_assignment_key | UNIQUE (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()).
| Coluna | Tipo | Nulo | Observação |
|---|---|---|---|
credential_version_id | bigint | não | |
credential_id | bigint | não | |
user_bank_id | bigint | não | |
assignment_id | bigint | não | |
consumed_at | timestamptz | não | padrão clock_timestamp() |
viewed_by_user_id | bigint | não | |
tenant_id | bigint | não | segredo 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
| Tipo | Nome | Definição |
|---|---|---|
| PK | bank_credential_deliveries_pkey | PRIMARY KEY (credential_version_id) |
Fora do banco
viewed_by_user_idvem da identidade autenticada no servidor, nunca do payload; a senha é devolvida só depois do commit.