Hospitais (BuddyPress Groups)
Resumo
Hospitais são modelados como BuddyPress Groups. Cada grupo armazena metadados do hospital (CNES, endereço, data de início de KPI, status de intervenção). Funções auxiliares resolvem permissões e hierarquia de administração hospitalar.
Fontes de evidência
theme/functions/helpers/hospitals_groups.php— helpers de hospital (~195 linhas)theme/functions/wp/ajax.php:150-200— endpoints AJAX de listagemtheme/functions/kpis/forms.php— uso de hospital em KPIs
Modelo de dados
Group Meta (BuddyPress)
| Meta key | Tipo | Descrição |
|---|---|---|
hospital_group | string | Identificador do grupo hospitalar (rede/regional) |
hospital_codigo_cnes | string | Código CNES do hospital |
hospital_address_group | string | Endereço (logradouro) |
hospital_address_number_group | string | Número do endereço |
hospital_address_city_id_group | int | ID do CPT cidades |
hospital_address_state_id_group | int | ID do CPT estados |
hospital_in_intervention | bool | Hospital em intervenção |
hospital_kpi_day | int | Dia de início das coletas KPI |
hospital_kpi_month | int | Mês de início das coletas KPI |
hospital_kpi_year | int | Ano de início das coletas KPI |
Evidência:
hospitals_groups.php:3—groups_get_groupmeta($hospital_id, 'hospital_group')hospitals_groups.php:8—groups_get_groupmeta($hospital_id, 'hospital_codigo_cnes')forms.php:217-220—hospital_kpi_day/month/yearregistration/ajax.php—hospital_address_city_id_group,hospital_address_state_id_group
CPTs auxiliares
| CPT | Propósito |
|---|---|
estados | Lista de estados brasileiros |
cidades | Lista de cidades (meta: state → ID do estado) |
Funções auxiliares
| Função | Descrição | Evidência |
|---|---|---|
get_hospital_group($id) | Retorna o identificador do grupo hospitalar (rede) | hospitals_groups.php:3 |
get_cnes_group($id) | Retorna código CNES | hospitals_groups.php:8 |
get_user_hospital_groups($uid) | Lista grupos hospitalares de um usuário | hospitals_groups.php:13 |
hospital_group_admin($id) | Verifica se o usuário atual é admin do grupo hospitalar | hospitals_groups.php:28 |
get_user_admin_hospitals($uid) | Lista todos os hospitais que o usuário administra | hospitals_groups.php:38 |
user_is_hospital_admin($uid) | Verifica se o usuário tem role administrador_grupo | hospitals_groups.php:63 |
Hierarquia de administração
Super Admin (WordPress)
└── Roles globais (administrator, administrador_site, ministerio_da_saude)
└── Administrador de Grupo (administrador_grupo)
└── Admin do Grupo BP (groups_is_user_admin)
└── Usuário KPI (group_user_is_kpi)
└── Usuário visualizador (group_user_is_read_kpi)
└── Admin de usuários (group_user_is_admusers)
└── Membro comum
Lógica de hospital_group_admin()
Um usuário é admin de um hospital se:
- Tem role
administrador_grupoE - Pertence a ao menos um grupo com o mesmo
hospital_groupdo hospital alvo.
Isso permite administração por rede/regional — um admin pode gerenciar múltiplos hospitais do mesmo grupo.
Evidência: hospitals_groups.php:28-36.
Status de intervenção
Hospitais podem estar "em intervenção" — afeta o fluxo de cadastro:
- Cadastro normal: requer aprovação do admin para entrar no grupo.
- Cadastro via convite: ativação automática (sem mudança).
Verificado via:
is_hospital_in_intervention($hospital_id)(se existir)- Fallback:
groups_get_groupmeta($hospital_id, 'hospital_in_intervention')
Evidência: registration/ajax.php — hsl_registration_check_hospital_status_handler().
Endpoints AJAX de listagem
| Action | Método | Descrição |
|---|---|---|
state_cities | GET | Cidades por estado |
city_hospitals | GET | Hospitais por cidade (exclui hidden) |
check_intervention_status | GET | Status de intervenção de hospital |
get_hospital_list_admin | GET | Lista filtrada de hospitais (admin) |
Formato da listagem de hospitais
Cada hospital é exibido como:
{Nome} | CNES: {código} | {endereço}, {número}
Evidência: ajax.php:150-175 — get_hospitals_from_city_id().
Visibilidade
- Grupos com status
hiddensão excluídos das listagens públicas. - Listagem admin (
get_hospital_list_admin) inclui todos os grupos.
Evidência: ajax.php:162 — if (bp_get_group_status() === 'hidden') continue;.
Fluxo — Cascata Estado → Cidade → Hospital
sequenceDiagram
participant U as Usuário
participant WP as WordPress
U->>WP: GET state_cities?state_id=X
WP->>WP: WP_Query(cidades, meta state=X)
WP-->>U: [{id, title}, ...]
U->>WP: GET city_hospitals?city_id=Y
WP->>WP: BP Groups meta_query(hospital_address_city_id_group=Y)
WP-->>U: [{id, "Nome | CNES: ... | Endereço"}, ...]
U->>WP: GET check_intervention_status?hospital_id=Z
WP-->>U: {in_intervention: true/false}