Pular para o conteúdo principal

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 listagem
  • theme/functions/kpis/forms.php — uso de hospital em KPIs

Modelo de dados

Group Meta (BuddyPress)

Meta keyTipoDescrição
hospital_groupstringIdentificador do grupo hospitalar (rede/regional)
hospital_codigo_cnesstringCódigo CNES do hospital
hospital_address_groupstringEndereço (logradouro)
hospital_address_number_groupstringNúmero do endereço
hospital_address_city_id_groupintID do CPT cidades
hospital_address_state_id_groupintID do CPT estados
hospital_in_interventionboolHospital em intervenção
hospital_kpi_dayintDia de início das coletas KPI
hospital_kpi_monthintMês de início das coletas KPI
hospital_kpi_yearintAno de início das coletas KPI

Evidência:

  • hospitals_groups.php:3groups_get_groupmeta($hospital_id, 'hospital_group')
  • hospitals_groups.php:8groups_get_groupmeta($hospital_id, 'hospital_codigo_cnes')
  • forms.php:217-220hospital_kpi_day/month/year
  • registration/ajax.phphospital_address_city_id_group, hospital_address_state_id_group

CPTs auxiliares

CPTPropósito
estadosLista de estados brasileiros
cidadesLista de cidades (meta: state → ID do estado)

Funções auxiliares

FunçãoDescriçãoEvidência
get_hospital_group($id)Retorna o identificador do grupo hospitalar (rede)hospitals_groups.php:3
get_cnes_group($id)Retorna código CNEShospitals_groups.php:8
get_user_hospital_groups($uid)Lista grupos hospitalares de um usuáriohospitals_groups.php:13
hospital_group_admin($id)Verifica se o usuário atual é admin do grupo hospitalarhospitals_groups.php:28
get_user_admin_hospitals($uid)Lista todos os hospitais que o usuário administrahospitals_groups.php:38
user_is_hospital_admin($uid)Verifica se o usuário tem role administrador_grupohospitals_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:

  1. Tem role administrador_grupo E
  2. Pertence a ao menos um grupo com o mesmo hospital_group do 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.phphsl_registration_check_hospital_status_handler().

Endpoints AJAX de listagem

ActionMétodoDescrição
state_citiesGETCidades por estado
city_hospitalsGETHospitais por cidade (exclui hidden)
check_intervention_statusGETStatus de intervenção de hospital
get_hospital_list_adminGETLista 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-175get_hospitals_from_city_id().

Visibilidade

  • Grupos com status hidden são excluídos das listagens públicas.
  • Listagem admin (get_hospital_list_admin) inclui todos os grupos.

Evidência: ajax.php:162if (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}