Pular para o conteúdo principal

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)

CPTSlugOrigemEvidência
NotíciasnewsCPT-UI ou códigoTemplates taxonomy-news_category-*.php
HistóriashistoriesCPT-UI ou códigotheme/single-histories.php
ChamadoschamadosCPT-UI ou códigotheme/single-chamados.php, theme/functions/helpers/chamados.php
EAD (Cursos)eadCPT-UI ou códigotheme/single-ead.php, theme/functions/ead/ead.php
Biblioteca Virtualbiblioteca_virtualCPT-UI ou códigotheme/single-biblioteca_virtual.php
Estadosestadosregister_post_type()theme/functions/registration/class-registration-validator.php:239
Cidadescidadesregister_post_type()theme/functions/registration/class-registration-validator.php:254
WorkshopworkshopCPT-UI ou códigotheme/single-workshop.php
Materiais CoronavíruscoronavirusmateriaisCPT-UI ou códigotheme/archive-coronavirusmateriais.php, theme/single-coronavirusmateriais.php
Eventostribe_eventsPlugin The Events Calendartheme/tribe-events/

Taxonomias

TaxonomiaSlugAssociada aEvidência
Categorias de Notícianews_categorynewstheme/taxonomy-news_category-coronavirus.php
Categorias de Bibliotecacategoria_bibliotecabiblioteca_virtualtheme/taxonomy-categoria_biblioteca.php
Categorias de Eventotribe_events_cattribe_eventsPlugin The Events Calendar
Tipo de Grupo BPbp_group_typeBuddyPress Groupstheme/functions/hooks/buddypress.php — tipo hospital

Meta Fields por CPT

news (Notícias)

Meta KeyTipoDescriçãoEvidência
grupo_da_noticiaintID do grupo hospital associado à notíciatheme/functions/wp/ajax.php (filter_posts_news)
ft_imageintOverride de imagem de destaquetheme/functions/helpers/posts.php
clicks_counterintContador de cliquestheme/functions/wp/ajax.php:111
views_counterintContador de visualizaçõestheme/functions/wp/ajax.php:128
likes_counterintContador de curtidastheme/functions/wp/ajax.php:146
shares_counterintContador de compartilhamentosInferido do switch em handle_item_interaction_counter

ead (Cursos)

Meta KeyTipoDescriçãoEvidência
course_workloadstringCarga horária do cursotheme/functions/wp/ajax.php:389 (filter_ead)
course_topicsstringNúmero de tópicostheme/functions/wp/ajax.php:396
course_certificateboolSe emite certificadotheme/functions/wp/ajax.php:411
course_teacher_institutionstringInstituição do professortheme/functions/wp/ajax.php:425

biblioteca_virtual

Meta KeyTipoDescriçãoEvidência
clicks_counterintContador de cliquestheme/functions/wp/ajax.php:111
views_counterintContador de visualizaçõestheme/functions/wp/ajax.php:128
likes_counterintContador de curtidastheme/functions/wp/ajax.php:146

tribe_events (Eventos)

Meta KeyTipoDescriçãoEvidência
add_event_linkboolSe exibe link externo do eventotheme/functions/wp/ajax.php:501 (filter_events_for_calendar)

Pages/Posts (genéricos via ACF Flex)

Meta KeyTipoDescriçãoEvidência
flexarrayFlexible content layout (módulos ACF)theme/functions/helpers/posts.php (calc_reading_time_acf_flex)
gradientobjectCores de gradiente (start, middle, end)theme/functions/wp/taxonomy.php (get_colors_for_gradient)

User Meta Fields

Meta KeyTipoDescriçãoEvidência
hospitalintID do grupo hospital principal do usuáriotheme/modules/header.php
cargostringCargo do profissionaltheme/modules/header.php
canvas-idintID do usuário no Canvas LMStheme/functions/ead/ead.php:35
user_library_likesint[]IDs dos posts curtidos pelo usuáriotheme/functions/wp/ajax.php:149-158

BuddyPress Groups (Hospitais)

Os hospitais são representados como BuddyPress Groups com tipo hospital.

Group Meta Fields

Meta KeyTipoDescriçãoEvidência
hospital_grupostringGrupo/rede do hospitaltheme/functions/helpers/hospitals_groups.php:15
hospital_codigo_cnesstringCódigo CNES do hospitaltheme/functions/helpers/hospitals_groups.php:32
hospital_cnesstringCNES alternativoInferido de helpers
hospital_address_*stringEndereço (rua, cidade, estado, CEP)Uso em módulos
hospital_kpi_dayintDia de início da coleta KPItheme/functions/kpis/forms.php:221
hospital_kpi_monthintMês de início da coleta KPItheme/functions/kpis/forms.php:222
hospital_kpi_yearintAno de início da coleta KPItheme/functions/kpis/forms.php:222
hospital_status_intervencaostringStatus de intervenção do hospitaltheme/functions/wp/ajax.php (hospital_intervention_status)
hospital_tipo_unidadestringTipo de unidade hospitalarInferido
hospital_gestaostringTipo de gestãoInferido
hospital_natureza_juridicastringNatureza jurídicaInferido
hospital_intervencao_inicio_*intData início da intervenção (day/month/year)Inferido
hospital_intervencao_fim_*intData fim da intervenção (day/month/year)Inferido
indicador_*mixedFlags de indicadores habilitadosInferido
_bpgmq_featured_groupboolSe o grupo é destaqueMódulos de frontend

BuddyPress XProfile Fields

CampoTipoDescriçãoEvidência
HospitalseleçãoHospital selecionado no signuptheme/functions/helpers/buddypress.php
CargoseleçãoCargo profissionaltheme/functions/helpers/buddypress.php

Banco de Dados KPI (MySQL separado)

Tabela: coleta

Armazena registros de coleta de indicadores por hospital e período.

CampoTipoDescriçãoEvidência
id_coletaint (PK)ID da coletatheme/functions/kpis/forms.php:213
id_tipo_coletaint (FK)Referência ao tipo de coletatheme/functions/kpis/forms.php:213
wp_bp_id_usuariointID do usuário WordPress que realizou a coletaInferido
wp_bp_id_hospitalintID do grupo BuddyPress (hospital)theme/functions/kpis/forms.php:216
dt_coleta_iniciodatetimeData/hora início do períodotheme/functions/kpis/forms.php:211
dt_coleta_terminodatetimeData/hora término do períodotheme/functions/kpis/forms.php:212

Tabela: dados_coleta

Armazena valores individuais de indicadores por coleta.

CampoTipoDescriçãoEvidência
id_coletaint (FK)Referência à coletaInferido de importers
chave_indicadorstringIdentificador do indicadorInferido de importers e REST callbacks
valordecimal/stringValor do indicadorInferido

Tabela: tipo_coleta

Tipos/categorias de coleta de KPIs.

CampoTipoDescriçãoEvidência
id_tipo_coletaint (PK)ID do tipotheme/functions/kpis/forms.php:149
slugstringSlug do tipo (ex: diario-10h, mensal, semestral)theme/functions/kpis/forms.php:153

Slugs de tipo_coleta conhecidos

  • diario-10h
  • diario-16h
  • semestral
  • mensal
  • mensal-centro-cirurgico
  • mensal-unidade-internacao
  • mensal-geral
  • indicador-diario-centro-cirurgico
  • kpi-list
  • Evidência: theme/functions/kpis/forms.php:30-37

Tabela: wp_email_log (Email Logger)

CampoTipoDescriçãoEvidência
idbigint (PK)ID do logmu-plugins/email-logger/migrations/create-email-log-table.php
to_emailvarcharE-mail destinatárioInferido da classe
subjectvarcharAssunto do e-mailInferido da classe
bodytextCorpo do e-mailInferido da classe
headerstextHeaders do e-mailInferido da classe
contextvarcharContexto de negócio (ex: confirmacao_cadastro, invite_group_email)mu-plugins/email-logger/includes/class-email-context.php
statusvarcharStatus (success / failure)Inferido da classe
error_messagetextMensagem de erro (se falhou)Inferido da classe
created_atdatetimeData/hora do envioInferido

Roles e Capabilities (WordPress)

RoleSlugDescriçãoEvidência
AdministradoradministratorSuper-admin com acesso ao wp-admintheme/functions/hooks/admin_custom_hooks.php
Administrador Siteadministrador_siteAdmin funcional da plataforma, sem dependência de wp-admin para operar fluxos de negóciotheme/functions/kpis/forms.php:48
Administrador Grupoadministrador_grupoAdministração por rede hospitalar (via hospital_group)theme/functions/helpers/hospitals_groups.php:63
Ministério da Saúdeministerio_da_saudePerfil observador com leitura e exportação de KPItheme/functions/kpis/forms.php:94, theme/functions/kpis/forms_action.php:248
Admin Users (BP)admusersRole WP auxiliar atribuída automaticamente por integração com BuddyPresstheme/functions/hooks/buddypress_acls.php, theme/functions/plugins/bp.php

Roles internas por hospital (BuddyPress)

Papel internoOnde é gerenciadoDescrição
Admin do grupoBuddyPress nativoAdministração completa do grupo hospitalar
kpi_usersGroup meta (kpi_users)Pode enviar KPI no grupo
kpi_read_usersGroup meta (kpi_read_users)Pode visualizar KPI no grupo
admusers_usersGroup meta (admusers_users)Pode administrar usuários do grupo

ACF Options (Globais)

Field GroupCampoTipoEvidência
APIscanvas-api-urlurltheme/functions/ead/ead.php:5
APIscanvas-tokentexttheme/functions/ead/ead.php:6
APIscanvas-integration-idtexttheme/functions/ead/ead.php:7
APIscanvas-subaccount-idtexttheme/functions/ead/ead.php:8
APIsrecaptcha_secret_keytexttheme/functions/registration/class-registration-validator.php:353
APIsgoogle_maps_api_keytextUso em módulos de mapa
Geraljobtitlestextareatheme/functions/registration/class-registration-validator.php:392
Geralintervention_status_listrepeaterUso em lookup de status
Loginbrandimagetheme/functions/wp/login.php
Logingallerygallerytheme/functions/wp/login.php
KPI Configconfigurations.environmentsrepeatertheme/functions/kpis/forms.php:183-198
Live Bannerlive_config_options.show_live_bannerbooltheme/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 cidades e estados não formalizada como FK (apenas via meta state no post cidades).
  • Tabela kpi.sala_de_comando populada 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/.