# Épico 5 — Menu Lateral — Mapeamento de Banco de Dados (v1.0)

**Documentos deste épico:** [01 - Definição](./01%20-%20Defini%C3%A7%C3%A3o%20v1.0.md) (v1.0) · [02 - Especificação](./02%20-%20Especifica%C3%A7%C3%A3o%20v1.0.md) (v1.0) · [03 - Protótipo](./03%20-%20Prot%C3%B3tipo%20v1.0.md) (v1.0, código executável em `03 - Protótipo v1.0.html`) · [04 - Mapeamento de Banco de Dados](./04%20-%20Mapeamento%20de%20Banco%20de%20Dados%20v1.0.md) (v1.0). Este épico faz parte do documento guarda-chuva [Check-in de Usuários](../00%20-%20Guarda-chuva%20v2.13.md).

---

## SEÇÃO 4 — MAPEAMENTO DE BANCO DE DADOS

### Tabelas existentes utilizadas

|Tabela|Banco|Campos utilizados neste épico|
|---|---|---|
|Processo|IpSeguranca|Id, Processo (código único), Nome, Icone, Contexto, ProcessoGrupoId, Rota, RemovidoEm — cada linha é um item de menu/funcionalidade do sistema; `Icone` referencia um nome de ícone de lucide.dev/icons ou react-icons.github.io, nunca um arquivo próprio|
|ProcessoGrupo|IpSeguranca|Id, Nome — agrupamento sem hierarquia (sem campo de grupo pai); confirma a estrutura de camada única descrita em RN-CIU-026|
|ClienteProcesso|IpSeguranca|Id, ProcessoId, ClienteBDId, RemovidoEm — liga um Processo ao banco do cliente (tenant), isto é, marca quais Processo estão habilitados/licenciados para aquele cliente, independentemente de qualquer perfil de acesso|
|ClientePerfilAcesso|IpSeguranca|Id, Nome, ClienteBDId — perfil de acesso (papel) do cliente; já mapeado em CIU-E1/E3/E6|
|ClientePerfilAcessoUsuario|IpSeguranca|Id, ClientePerfilAcessoId, UsuarioClienteId, ClienteEmpresaId — vínculo entre um usuário, seu perfil de acesso e a clínica específica em que esse perfil vale; já mapeado em CIU-E1/E3/E6 — é a partir daqui que o perfil de acesso vigente na clínica atual é resolvido para montar o menu|
|ClientePerfilAcessoProcesso|IpSeguranca|Id, ClientePerfilAcessoId, ClienteProcessoId, ExibeMenu (default 'S'), Ordem, RemovidoEm — liga um ClientePerfilAcesso a um ClienteProcesso; um item só aparece no menu (RN-CIU-027) quando existe aqui uma linha com `ExibeMenu = 'S'` para o perfil de acesso vigente; `Ordem` define a posição do item dentro do grupo (ou da lista sem grupo) para aquele perfil especificamente|
|ClienteUsuarioMenuFavorito|IpSeguranca|ClientePerfilAcessoUsuarioId, ClientePerfilAcessoProcessoId (PK composta), ProcessoAbertura (default 'N'), RemovidoEm — a existência de uma linha ativa para o par (usuário/perfil/clínica × item) é o próprio favorito (RN-CIU-028); como `ClientePerfilAcessoUsuarioId` já é específico por clínica, o favorito é, por construção, específico por clínica também — é essa a origem do comportamento descrito em RN-CIU-028 (favorito não se repete automaticamente ao trocar de clínica)|
|ClienteEmpresa|IpSeguranca|Id, Nome — não consultada para montar o menu em si; referenciada aqui apenas porque `ClientePerfilAcessoUsuario.ClienteEmpresaId` é o campo que amarra perfil de acesso à clínica específica (já mapeado em CIU-E1/E3/E6)|

Nenhuma tabela nova. Toda a estrutura necessária — itens de menu, agrupamento, habilitação por cliente, liberação e ordem por perfil de acesso, e favoritos — já existe em produção no banco IpSeguranca.

### Schema legado identificado e descartado

O banco de template `GescomZeradoPadronizacao` (mesmo arquivo de origem da Biblioteca de Schema) tem uma estrutura equivalente e mais antiga para menu: `SegMenu`, `SegPastaMenu`, `SegMenuGrupo` e `SegMenuDetalhe` — esta última com um campo `PaginaInicial` que corresponde, na estrutura legada, ao mesmo papel do campo `ProcessoAbertura` de `ClienteUsuarioMenuFavorito` na estrutura atual (é a partir dessa correspondência que a Seção 1 registra a interpretação [PROPOSTA] de `ProcessoAbertura`).

Essa estrutura legada foi identificada e descartada em favor do schema moderno acima: pertence ao banco de template pré-Clean-Architecture, chaveado por identificadores numéricos locais (`smallint`) em vez de `uniqueidentifier`, e não tem nenhum dos conceitos centrais da arquitetura atual — não existe `Cliente`, `ClienteBD` (banco por tenant) nem `ClienteEmpresa` (clínica) na cadeia de chaves de `SegMenuDetalhe`, apenas um `IdUsuario` local. Não é uma base compatível com o modelo multi-tenant deste projeto.

### Seeds da Funcionalidade

|Seed|Tabela(s)|Por cliente ou global?|Status|Detalhe completo|
|---|---|---|---|---|
|Item de menu "Suporte Gemed" (link externo à aplicação de suporte técnico da Interprocess TI)|Processo (mais ClienteProcesso e ClientePerfilAcessoProcesso, por cliente/perfil, para habilitá-lo)|Global o cadastro do Processo; a habilitação por cliente e perfil de acesso é individual|**[PROPOSTA]** — item de exemplo, existência e nome exatos a confirmar contra o mockup original do menu, hoje indisponível|01 - Definição, "Lista consolidada de itens [PROPOSTA]", item 2|
|Árvore completa de grupos e itens do menu (quais Processo existem, em quais ProcessoGrupo, com quais ícones e rotas)|Processo, ProcessoGrupo, ClienteProcesso, ClientePerfilAcessoProcesso|Processo/ProcessoGrupo globais; ClienteProcesso e ClientePerfilAcessoProcesso por cliente/perfil|**[PROPOSTA]** — pendente de um levantamento de produto que substitua o mockup perdido; sem essa árvore, nenhum cliente novo tem menu funcional além dos módulos já especificados individualmente (Central do Médico/Cockpit, Agenda do Médico)|01 - Definição, "Lista consolidada de itens [PROPOSTA]", item 1|

Nenhum parâmetro de configuração (`IpParametro`/`IpParametroChave` ou equivalente) é necessário para esta funcionalidade — o comportamento do menu (filtragem, favoritos, busca, responsividade) não depende de nenhum valor configurável por cliente além da própria estrutura de `Processo`/`ClientePerfilAcessoProcesso` já listada acima.

---

## Histórico de Versões

- **v1.0** (15/09/2026) — versão inicial do épico. Estrutura de dados localizada por completo na Biblioteca de Schema (DDL), banco IpSeguranca — nenhuma tabela nova. Schema legado equivalente (`GescomZeradoPadronizacao.dbo.SegMenu`/`SegPastaMenu`/`SegMenuGrupo`/`SegMenuDetalhe`) identificado e descartado, com a correspondência de `SegMenuDetalhe.PaginaInicial` registrada como base da interpretação [PROPOSTA] de `ClienteUsuarioMenuFavorito.ProcessoAbertura`. Dois seeds registrados como [PROPOSTA] — item "Suporte Gemed" e a árvore completa de grupos/itens do menu, ambos pendentes do mockup original perdido.
