Skip to main content

Módulos (feature flags por grupo e unidade)

Tela onde você liga ou desliga funcionalidades inteiras do produto — 14 chaves fixas, como "Revisão por pares" ou "Central de comando" — para um grupo inteiro, com a opção de uma unidade específica sobrescrever o valor do grupo.

Tela de Módulos do grupo, com as 14 chaves e o toggle de cada uma

Antes de começar​

  • Componentes: ModulesComponent (@pages/modules), acessado através de TenantModulesRouteComponent (grupo) e UnitModulesRouteComponent (unidade), com o editor de cada módulo em OrganizationModuleEditorComponent.
  • Rotas: /admin/tenant/:id/modules (grupo), /admin/company/:id/modules (unidade).
  • Conceito de base: cascata de dois níveis GRUPO → UNIDADE, com histórico de cada mudança preservado (nunca apagado) — ver Módulos — API.

Permissões e acesso​

AçãoRotaGuard de rotaQuem pode editar
Ver/editar Módulos do grupo/admin/tenant/:id/modulespermissionGuard('permission:read', 'route') no grupopermission:manage no grupo
Ver/editar Módulos da unidade/admin/company/:id/modulespermissionGuard('permission:read', 'route') + unit:read, na unidadepermission:manage no grupo ou na unidade

Sem permission:manage, os toggles ficam visíveis mas desabilitados, com o aviso "Você pode consultar os módulos, mas não possui permissão para alterá-los."

Neste levantamento, o item Módulos não aparece no menu lateral da unidade para administrator (o menu usa a mesma checagem de escopo de grupo descrita na visão geral do módulo) — mas a rota abre normalmente por URL direta. Ao abrir, a tela mostra as 14 chaves corretamente, porém um toast "Você não possui permissão para executar esta ação!" aparece e os botões Cancelar/Salvar ficam desabilitados mesmo sem nenhuma edição pendente — sinal de que a permissão exigida pela chamada real de dados (aparentemente permission:read/permission:manage num escopo que este perfil não tem) é mais estrita do que a que o guard da rota checou para deixá-lo entrar.

Tela de Módulos da unidade com toast de permissão negada, perfil administrator

ChaveNome na telaDescrição
AI_INTEGRATIONIntegração com IADisponibiliza integrações administrativas com provedores de inteligência artificial
AI_REPORTLaudo com IAHabilita recursos de inteligência artificial no fluxo de laudos
COMMAND_CENTERCentral de comandoDisponibiliza a visão operacional consolidada do grupo
DELIVERY_PORTALPortal de entregaHabilita o portal de entrega de exames e resultados
DICOM_PRINTImpressão DICOMHabilita impressão e composição de imagens no padrão DICOM
INTEGRATIONIntegraçõesDisponibiliza integrações operacionais com sistemas externos
LINUX_SERVERServidor LinuxHabilita recursos dependentes do servidor Linux da unidade
MESSAGINGMensageriaHabilita comunicação e troca de mensagens na operação
PEER_REVIEWRevisão por paresDisponibiliza o fluxo de revisão clínica por pares
PERSONAL_APPSAplicativos pessoaisHabilita aplicativos associados ao perfil profissional
PORTABLEPortátilDisponibiliza fluxos operacionais para equipamentos portáteis
POWER_BIPower BIHabilita painéis e integrações analíticas do Power BI
ROBOTRobôHabilita automações operacionais executadas por robôs
WORKLISTLista de trabalhoDisponibiliza a lista de trabalho clínica para a organização

Os nomes e descrições são fixos na interface (tradução local), não vêm do backend.

Caminho principal​

  1. Abra Módulos no detalhe do grupo ou da unidade.
  2. Cada módulo aparece como um cartão com o nome, a descrição e um interruptor (toggle).
  3. Ligar ou desligar um toggle não grava na hora — a tela guarda a mudança em memória (o cartão já reflete o novo estado, otimisticamente) e habilita os botões Cancelar e Salvar no rodapé.
  4. Clique Salvar para confirmar todas as mudanças pendentes de uma vez — a tela dispara uma chamada por módulo alterado. Cancelar descarta tudo e recarrega o estado salvo.

Tela de Módulos da unidade, com os badges de origem por card

Herança e restauração (só na tela da unidade)​

Cada módulo mostra um selo indicando de onde vem o valor atual:

SeloSignificado
SistemaNenhum override em nenhum nível — o módulo nunca foi mexido
Definido no grupoO grupo ligou/desligou este módulo explicitamente, e a unidade não tem override próprio
Definido na unidadeA própria unidade tem um valor que vence sobre o do grupo, mesmo que seja para desligar algo que o grupo ligou

Quando um módulo tem override (configured: true), aparece um botão Restaurar que remove o override daquele nível e faz o valor voltar a ser herdado (do grupo, ou do sistema se o grupo também não tiver definido nada).

Filtro​

Busca por texto (nome, descrição ou chave) e um interruptor Apenas sobrescritos, que mostra só os módulos com um valor diferente do herdado.

Rotas e contratos relacionados​

Uso na telaRota de API
Listar/consultar módulos do grupoMódulos — API
Listar/consultar módulos da unidade, com herançaMódulos — API
Ligar/desligar/restaurarMódulos — API

Validações​

Frontend​

Nenhuma validação de formato — é só ligar/desligar. A única regra de UX é o buffer local: nada é enviado até clicar Salvar.

Backend​

Ver Módulos — API, seção Funcionamento — em especial, a distinção entre enabled: false, configured: true (desligado explicitamente) e enabled: false, configured: false (nunca mexido), e o fato de que cada mudança gera uma linha de histórico (nunca é sobrescrita).

Caminhos alternativos e falhas​

SituaçãoO que aconteceComo se recupera
Sem permission:manageToggles desabilitados, aviso informativo — sem toast de erroPedir a permissão a quem administra o grupo/unidade
Permissão insuficiente na chamada real de dados (observado com administrator na unidade)Toast "Você não possui permissão para executar esta ação!", botões desabilitados mesmo sem edição pendenteA confirmar — responsável: time de frontend; data: 24/09/2026. — a causa exata da divergência entre o guard de rota e a permissão da chamada não foi isolada
Falha ao salvar um ou mais módulosMensagem inline vermelha ("Não foi possível salvar todos os módulos. Revise as alterações e tente novamente.") com botão "Tentar novamente" — sem toastRevisar as alterações pendentes e salvar de novo
Falha ao carregar a listaMensagem inline vermelha com botão "Tentar novamente"Tentar de novo; se persistir, verificar permissão

Próximos passos​