Modelo de Dados (WordPress)
Introdução ao documento
Este documento registra Custom Post Types, taxonomias, meta fields, tabelas customizadas e relacionamentos do modelo de dados WordPress do Lean nas Emergências.
Versionamento
- Versão do documento: 1.0.0
- Última atualização: 2026-03-10
- Responsável: Equipe HSL / Weef Interativa
Referencial teórico
Escopo e fontes
- Fonte principal: código do tema (
theme/functions/), hooks BuddyPress, plugins instalados. - Banco KPI:
mysql-init/init.sql,theme/functions/kpis/forms.php - Evidências por artefato indicadas abaixo.
Custom Post Types (CPTs)
| CPT | Slug | Origem | Evidência |
|---|---|---|---|
| Notícias | news | CPT-UI ou código | Templates taxonomy-news_category-*.php |
| Histórias | histories | CPT-UI ou código | theme/single-histories.php |
| Chamados | chamados | CPT-UI ou código | theme/single-chamados.php, theme/functions/helpers/chamados.php |
| EAD (Cursos) | ead | CPT-UI ou código | theme/single-ead.php, theme/functions/ead/ead.php |
| Biblioteca Virtual | biblioteca_virtual | CPT-UI ou código | theme/single-biblioteca_virtual.php |
| Estados | estados | register_post_type() | theme/functions/registration/class-registration-validator.php:239 |
| Cidades | cidades | register_post_type() | theme/functions/registration/class-registration-validator.php:254 |
| Workshop | workshop | CPT-UI ou código | theme/single-workshop.php |
| Materiais Coronavírus | coronavirusmateriais | CPT-UI ou código | theme/archive-coronavirusmateriais.php, theme/single-coronavirusmateriais.php |
| Eventos | tribe_events | Plugin The Events Calendar | theme/tribe-events/ |
Taxonomias
| Taxonomia | Slug | Associada a | Evidência |
|---|---|---|---|
| Categorias de Notícia | news_category | news | theme/taxonomy-news_category-coronavirus.php |
| Categorias de Biblioteca | categoria_biblioteca | biblioteca_virtual | theme/taxonomy-categoria_biblioteca.php |
| Categorias de Evento | tribe_events_cat | tribe_events | Plugin The Events Calendar |
| Tipo de Grupo BP | bp_group_type | BuddyPress Groups | theme/functions/hooks/buddypress.php — tipo hospital |
Meta Fields por CPT
news (Notícias)
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
grupo_da_noticia | int | ID do grupo hospital associado à notícia | theme/functions/wp/ajax.php (filter_posts_news) |
ft_image | int | Override de imagem de destaque | theme/functions/helpers/posts.php |
clicks_counter | int | Contador de cliques | theme/functions/wp/ajax.php:111 |
views_counter | int | Contador de visualizações | theme/functions/wp/ajax.php:128 |
likes_counter | int | Contador de curtidas | theme/functions/wp/ajax.php:146 |
shares_counter | int | Contador de compartilhamentos | Inferido do switch em handle_item_interaction_counter |
ead (Cursos)
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
course_workload | string | Carga horária do curso | theme/functions/wp/ajax.php:389 (filter_ead) |
course_topics | string | Número de tópicos | theme/functions/wp/ajax.php:396 |
course_certificate | bool | Se emite certificado | theme/functions/wp/ajax.php:411 |
course_teacher_institution | string | Instituição do professor | theme/functions/wp/ajax.php:425 |
biblioteca_virtual
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
clicks_counter | int | Contador de cliques | theme/functions/wp/ajax.php:111 |
views_counter | int | Contador de visualizações | theme/functions/wp/ajax.php:128 |
likes_counter | int | Contador de curtidas | theme/functions/wp/ajax.php:146 |
tribe_events (Eventos)
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
add_event_link | bool | Se exibe link externo do evento | theme/functions/wp/ajax.php:501 (filter_events_for_calendar) |
Pages/Posts (genéricos via ACF Flex)
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
flex | array | Flexible content layout (módulos ACF) | theme/functions/helpers/posts.php (calc_reading_time_acf_flex) |
gradient | object | Cores de gradiente (start, middle, end) | theme/functions/wp/taxonomy.php (get_colors_for_gradient) |
User Meta Fields
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
hospital | int | ID do grupo hospital principal do usuário | theme/modules/header.php |
cargo | string | Cargo do profissional | theme/modules/header.php |
canvas-id | int | ID do usuário no Canvas LMS | theme/functions/ead/ead.php:35 |
user_library_likes | int[] | IDs dos posts curtidos pelo usuário | theme/functions/wp/ajax.php:149-158 |
BuddyPress Groups (Hospitais)
Os hospitais são representados como BuddyPress Groups com tipo hospital.
Group Meta Fields
| Meta Key | Tipo | Descrição | Evidência |
|---|---|---|---|
hospital_grupo | string | Grupo/rede do hospital | theme/functions/helpers/hospitals_groups.php:15 |
hospital_codigo_cnes | string | Código CNES do hospital | theme/functions/helpers/hospitals_groups.php:32 |
hospital_cnes | string | CNES alternativo | Inferido de helpers |
hospital_address_* | string | Endereço (rua, cidade, estado, CEP) | Uso em módulos |
hospital_kpi_day | int | Dia de início da coleta KPI | theme/functions/kpis/forms.php:221 |
hospital_kpi_month | int | Mês de início da coleta KPI | theme/functions/kpis/forms.php:222 |
hospital_kpi_year | int | Ano de início da coleta KPI | theme/functions/kpis/forms.php:222 |
hospital_status_intervencao | string | Status de intervenção do hospital | theme/functions/wp/ajax.php (hospital_intervention_status) |
hospital_tipo_unidade | string | Tipo de unidade hospitalar | Inferido |
hospital_gestao | string | Tipo de gestão | Inferido |
hospital_natureza_juridica | string | Natureza jurídica | Inferido |
hospital_intervencao_inicio_* | int | Data início da intervenção (day/month/year) | Inferido |
hospital_intervencao_fim_* | int | Data fim da intervenção (day/month/year) | Inferido |
indicador_* | mixed | Flags de indicadores habilitados | Inferido |
_bpgmq_featured_group | bool | Se o grupo é destaque | Módulos de frontend |
BuddyPress XProfile Fields
| Campo | Tipo | Descrição | Evidência |
|---|---|---|---|
| Hospital | seleção | Hospital selecionado no signup | theme/functions/helpers/buddypress.php |
| Cargo | seleção | Cargo profissional | theme/functions/helpers/buddypress.php |
Banco de Dados KPI (MySQL separado)
Tabela: coleta
Armazena registros de coleta de indicadores por hospital e período.
| Campo | Tipo | Descrição | Evidência |
|---|---|---|---|
id_coleta | int (PK) | ID da coleta | theme/functions/kpis/forms.php:213 |
id_tipo_coleta | int (FK) | Referência ao tipo de coleta | theme/functions/kpis/forms.php:213 |
wp_bp_id_usuario | int | ID do usuário WordPress que realizou a coleta | Inferido |
wp_bp_id_hospital | int | ID do grupo BuddyPress (hospital) | theme/functions/kpis/forms.php:216 |
dt_coleta_inicio | datetime | Data/hora início do período | theme/functions/kpis/forms.php:211 |
dt_coleta_termino | datetime | Data/hora término do período | theme/functions/kpis/forms.php:212 |
Tabela: dados_coleta
Armazena valores individuais de indicadores por coleta.
| Campo | Tipo | Descrição | Evidência |
|---|---|---|---|
id_coleta | int (FK) | Referência à coleta | Inferido de importers |
chave_indicador | string | Identificador do indicador | Inferido de importers e REST callbacks |
valor | decimal/string | Valor do indicador | Inferido |
Tabela: tipo_coleta
Tipos/categorias de coleta de KPIs.
| Campo | Tipo | Descrição | Evidência |
|---|---|---|---|
id_tipo_coleta | int (PK) | ID do tipo | theme/functions/kpis/forms.php:149 |
slug | string | Slug do tipo (ex: diario-10h, mensal, semestral) | theme/functions/kpis/forms.php:153 |
Slugs de tipo_coleta conhecidos
diario-10hdiario-16hsemestralmensalmensal-centro-cirurgicomensal-unidade-internacaomensal-geralindicador-diario-centro-cirurgicokpi-list- Evidência:
theme/functions/kpis/forms.php:30-37
Tabela: wp_email_log (Email Logger)
| Campo | Tipo | Descrição | Evidência |
|---|---|---|---|
id | bigint (PK) | ID do log | mu-plugins/email-logger/migrations/create-email-log-table.php |
to_email | varchar | E-mail destinatário | Inferido da classe |
subject | varchar | Assunto do e-mail | Inferido da classe |
body | text | Corpo do e-mail | Inferido da classe |
headers | text | Headers do e-mail | Inferido da classe |
context | varchar | Contexto de negócio (ex: confirmacao_cadastro, invite_group_email) | mu-plugins/email-logger/includes/class-email-context.php |
status | varchar | Status (success / failure) | Inferido da classe |
error_message | text | Mensagem de erro (se falhou) | Inferido da classe |
created_at | datetime | Data/hora do envio | Inferido |
Roles e Capabilities (WordPress)
| Role | Slug | Descrição | Evidência |
|---|---|---|---|
| Administrador | administrator | Super-admin com acesso ao wp-admin | theme/functions/hooks/admin_custom_hooks.php |
| Administrador Site | administrador_site | Admin funcional da plataforma, sem dependência de wp-admin para operar fluxos de negócio | theme/functions/kpis/forms.php:48 |
| Administrador Grupo | administrador_grupo | Administração por rede hospitalar (via hospital_group) | theme/functions/helpers/hospitals_groups.php:63 |
| Ministério da Saúde | ministerio_da_saude | Perfil observador com leitura e exportação de KPI | theme/functions/kpis/forms.php:94, theme/functions/kpis/forms_action.php:248 |
| Admin Users (BP) | admusers | Role WP auxiliar atribuída automaticamente por integração com BuddyPress | theme/functions/hooks/buddypress_acls.php, theme/functions/plugins/bp.php |
Roles internas por hospital (BuddyPress)
| Papel interno | Onde é gerenciado | Descrição |
|---|---|---|
| Admin do grupo | BuddyPress nativo | Administração completa do grupo hospitalar |
kpi_users | Group meta (kpi_users) | Pode enviar KPI no grupo |
kpi_read_users | Group meta (kpi_read_users) | Pode visualizar KPI no grupo |
admusers_users | Group meta (admusers_users) | Pode administrar usuários do grupo |
ACF Options (Globais)
| Field Group | Campo | Tipo | Evidência |
|---|---|---|---|
| APIs | canvas-api-url | url | theme/functions/ead/ead.php:5 |
| APIs | canvas-token | text | theme/functions/ead/ead.php:6 |
| APIs | canvas-integration-id | text | theme/functions/ead/ead.php:7 |
| APIs | canvas-subaccount-id | text | theme/functions/ead/ead.php:8 |
| APIs | recaptcha_secret_key | text | theme/functions/registration/class-registration-validator.php:353 |
| APIs | google_maps_api_key | text | Uso em módulos de mapa |
| Geral | jobtitles | textarea | theme/functions/registration/class-registration-validator.php:392 |
| Geral | intervention_status_list | repeater | Uso em lookup de status |
| Login | brand | image | theme/functions/wp/login.php |
| Login | gallery | gallery | theme/functions/wp/login.php |
| KPI Config | configurations.environments | repeater | theme/functions/kpis/forms.php:183-198 |
| Live Banner | live_config_options.show_live_banner | bool | theme/modules/banner-top.php |
Diagrama ER (Mermaid)
erDiagram
WP_USERS ||--o{ WP_USERMETA : has
WP_USERS ||--o{ BP_GROUPS_MEMBERS : joins
WP_USERS {
bigint ID PK
string user_login
string user_email
string display_name
}
WP_USERMETA {
bigint umeta_id PK
bigint user_id FK
string meta_key
string meta_value
}
BP_GROUPS ||--o{ BP_GROUPS_MEMBERS : contains
BP_GROUPS ||--o{ BP_GROUPMETA : has
BP_GROUPS {
bigint id PK
string name
string description
string status
}
BP_GROUPMETA {
bigint id PK
bigint group_id FK
string meta_key
string meta_value
}
BP_GROUPS_MEMBERS {
bigint id PK
bigint group_id FK
bigint user_id FK
boolean is_admin
boolean is_mod
}
WP_POSTS ||--o{ WP_POSTMETA : has
WP_POSTS ||--o{ WP_TERM_RELATIONSHIPS : tagged
WP_POSTS {
bigint ID PK
string post_type
string post_title
string post_status
bigint post_author FK
}
WP_POSTMETA {
bigint meta_id PK
bigint post_id FK
string meta_key
string meta_value
}
WP_TERMS ||--o{ WP_TERM_TAXONOMY : defines
WP_TERM_TAXONOMY ||--o{ WP_TERM_RELATIONSHIPS : classifies
WP_TERMS {
bigint term_id PK
string name
string slug
}
WP_TERM_TAXONOMY {
bigint term_taxonomy_id PK
bigint term_id FK
string taxonomy
}
WP_TERM_RELATIONSHIPS {
bigint object_id FK
bigint term_taxonomy_id FK
}
KPI_COLETA ||--o{ KPI_DADOS_COLETA : contains
KPI_COLETA ||--|| KPI_TIPO_COLETA : categorized
KPI_COLETA ||--o{ KPI_SALA_COMANDO : referenced_by
KPI_COLETA {
int id_coleta PK
int id_tipo_coleta FK
int wp_bp_id_usuario
int wp_bp_id_hospital
timestamp dt_coleta_inicio
timestamp dt_coleta_termino
timestamp dt_criacao
timestamp dt_atualizacao
tinyint is_diagnostico_inicial
tinyint is_diagnostico_final
varchar ciclo
datetime dt_liberacao_temporaria
}
KPI_TIPO_COLETA {
int id_tipo_coleta PK
varchar nome
varchar slug
}
KPI_INDICADOR {
int id_indicador PK
varchar chave_indicador
text titulo
text descricao
text formula
varchar periodicidade
text unidade
varchar sentido_melhoria
varchar exportacao
text titulo_exportacao
}
KPI_DADOS_COLETA {
int id_dados_coleta PK
int id_coleta FK
varchar chave_indicador FK
text valor
}
KPI_SALA_COMANDO {
int id PK
int id_coleta
varchar Hospital
varchar SIGLA_HOSPITAL
varchar CNES
varchar MUNICIPIO_IBGE_CODIGO
varchar Data
varchar Hora
varchar Tipo
varchar Status_Mes
varchar CICLO
varchar Considerar
varchar NEDOCS
}
KPI_INDICADOR ||--o{ KPI_DADOS_COLETA : chave_indicador
EMAIL_LOG {
bigint id PK
string to_email
string subject
text body
string context
string status
datetime created_at
}
Pendências
- ACF field groups não exportados em JSON/PHP — gerenciados via UI admin. Mudanças de schema dependem de sync manual.
- Meta keys dinâmicos (ex:
indicador_*nos grupos) não possuem lista definida em código. - CPTs registrados via plugin CPT-UI não possuem definição em código — dependem de exportação do plugin.
- Relação entre
cidadeseestadosnão formalizada como FK (apenas via metastateno postcidades). - Tabela
kpi.sala_de_comandopopulada por processo externo/manual — fluxo de atualização não documentado. - Schema do banco KPI não está versionado no repositório — manter dump atualizado em
mysql-init/.