# Agenda do Médico — Definição (v1.0)

**Documentos desta funcionalidade:** [01 - Definição](./01%20-%20Defini%C3%A7%C3%A3o%20v1.0.md) (v1.0) · Especificação (Seção 2): **pendente** — aguardando decisão sobre o formato de visualização (lista ou grade), ver Seção "Próximos passos" · Protótipo (Seção 3): **pendente** · Mapeamento de Banco de Dados (Seção 4): **pendente**.

---

## SEÇÃO 1 — DEFINIÇÃO

### Objetivo

Dar ao médico uma visão ampla e navegável da própria agenda do dia — todas as suas consultas agendadas, com os mesmos elementos de identificação de paciente já usados no Cockpit — permitindo também bloquear horários vagos (ex.: para reuniões, ausências, atividades não assistenciais). É a tela dedicada aberta ao clicar no cabeçalho do painel "Consultas" do Cockpit (Central do Médico) — RN-CM-003 já especifica esse ponto de entrada (Central do Médico, Seção 2, "Navegação"); não repetido aqui (Lição #10).

### Escopo

**Dentro do escopo:**
- Visualização das consultas do médico logado para um dia específico (o dia atual, por padrão).
- Navegação entre dias (avançar, retroceder, voltar para hoje).
- Bloqueio de horários vagos da própria agenda.
- Acesso à consulta a partir de um item da agenda (abre o PEP — mesmo comportamento já especificado em Central do Médico, Seção 2, "Navegação": "Ao clicar em qualquer card de consulta, o sistema abre o Prontuário Eletrônico do Paciente").
- Exibição, por consulta: dos elementos já definidos em Central do Médico (Seção 4.1) — paciente (nome, foto, diagnóstico oncológico), horário, status, modo de atendimento, indicador de primeira consulta, tags do paciente — mais três elementos novos desta funcionalidade: tags do paciente restritas às habilitadas para exibição em agenda (RN-AGM-006), campo de complemento (RN-AGM-007) e tipo de consulta, quando configurado pelo cliente (RN-AGM-008).

**Fora do escopo (confirmado pelo solicitante — "só visualização + bloqueio"):**
- Criar, editar, cancelar ou reagendar consultas. Essas ações continuam exclusivas do fluxo de Agendamento da Recepção (contexto Agendamento, que por sua vez toca os contextos Assistencial e Financeiro — distinto desta tela, que é só Assistencial).
- Parametrização de agendas (dias/horários por especialidade e profissional — SBIS ECF.05.01) e de tipos de consulta (SBIS ECF.05.04, a parte de *cadastro* do domínio) — fora de escopo desta tela; ela apenas *exibe* o tipo de consulta já configurado (RN-AGM-008).
- Check-in/chegada do paciente na clínica — fluxo de Recepção.
- Execução do atendimento — fluxo do PEP.
- Duração da consulta — já definida pela Recepção no momento do agendamento (RN-AGM-005); esta tela não a edita.

### Personas envolvidas

- **Médico** — único usuário desta tela, não necessariamente oncologista (confirmado pelo solicitante). Mesma persona de Central do Médico, ver Central do Médico, Seção 1, "Personas" (não repetido aqui — Lição #10).

Nenhuma outra persona usa esta tela. Telas equivalentes para outros profissionais (agenda da enfermagem, agenda da farmácia, agenda da recepção) são funcionalidades futuras e independentes — motivo pelo qual o solicitante optou pelo prefixo de RN `RN-AGM` (Agenda do Médico) em vez de um prefixo genérico de agenda, reservando espaço para prefixos próprios dessas outras agendas quando forem especificadas.

### Workflows do Profissional

Esta funcionalidade não introduz um workflow novo — ela é o destino de um touchpoint já documentado em Central do Médico (Workflow 1 — Atendimento de Consulta, RN-CM-003) e o ponto de partida para o touchpoint "abrir o PEP a partir de uma consulta", também já especificado lá. Resumo do encaixe, sem repetir o fluxo completo (documentado em Central do Médico, Seção 1):

1. O médico está no Cockpit e quer ver o dia inteiro (não só os próximos atendimentos do painel compacto) ou bloquear um horário — clica no título "Consultas".
2. A Agenda do Médico abre no dia atual, com a lista/grade completa (formato a decidir, ver "Próximos passos").
3. O médico pode navegar para outro dia (ex.: para checar a agenda de amanhã antes de sair) ou bloquear um horário vago (ex.: reunião administrativa, ausência programada).
4. Ao tocar em uma consulta, o sistema abre o PEP do paciente — mesmo destino já usado a partir do card de consulta no Cockpit.
5. Não há retorno automático ao Cockpit; o médico navega de volta pela navegação padrão do sistema.

### Regras de Negócio

| ID | Regra |
|---|---|
| RN-AGM-001 | **Somente leitura de consultas.** O médico pode visualizar e navegar pela agenda e bloquear horários vagos, mas não pode criar, editar, cancelar ou reagendar consultas nesta tela. |
| RN-AGM-002 | **Escopo do médico logado.** A tela mostra exclusivamente a agenda do médico autenticado — mesmo filtro já usado em Central do Médico (`Agenda.IdChRecurso = {IdChProfissional do médico logado}`, ver Central do Médico Seção 4.1, "Filtros do endpoint"). Não há alternância para ver a agenda de outro médico. |
| RN-AGM-003 | **Navegação por dia.** Visualização diária (não semanal nem mensal, por decisão do solicitante). O médico pode avançar/retroceder dia a dia e retornar diretamente para o dia atual. Sem limite de navegação para o passado ou o futuro definido nesta versão — **[A DEFINIR]** se deve haver um horizonte máximo (ex.: não navegar além do fim do período de agendamento parametrizado pela clínica). |
| RN-AGM-004 | **Bloqueio de horários.** O médico pode bloquear um horário vago da própria agenda (ex.: reunião, atividade não assistencial, ausência). O mecanismo de persistência desta ação — se reaproveita a estrutura existente de `Agenda.TipoAgenda = 'S'` ("Reserva de sala para assuntos não assistenciais", já documentado em Central do Médico Seção 4.1, domínio `TipoAgenda`) combinada com o parâmetro `AgendaSalaPacienteEspecial` (paciente-placeholder usado hoje para reservas de sala/auditório, já que `Agenda.IdPaciente` é `NOT NULL`) — é uma leitura da estrutura existente, não uma decisão confirmada; será resolvido na Seção 4 (Mapeamento de Banco de Dados) desta funcionalidade. |
| RN-AGM-005 | **Duração não editável aqui.** A duração de cada consulta já é definida pela Recepção no momento do agendamento; esta tela apenas exibe o intervalo resultante (`startTime`/`endTime`, mesma origem de Central do Médico Seção 4.1). |
| RN-AGM-006 | **Tags do paciente restritas às habilitadas para agenda.** Diferente do Cockpit (que exibe todas as tags do paciente — `PacienteVip` + `ProgramaApoioPaciente`/`ProgramaApoio`, Central do Médico Seção 4.1), esta tela exibe apenas o subconjunto de tags marcado como "habilitada para exibição em agendas". Existe um campo real candidato para esse controle — `ProgramaApoio.MostrarEm` (`int`, default `1`) — mas sua decodificação (bitmask? enumeração? qual valor corresponde a "agenda"?) não está documentada em nenhuma fonte consultada (Biblioteca de Schema (DDL), `EsquemaGemed21.csv`); **[A DEFINIR]** — precisa ser levantada com o time técnico/DBA antes de especificar a Seção 4. |
| RN-AGM-007 | **Campo de complemento.** Cada consulta pode ter um complemento textual livre, associado ao agendamento. Campo real já existente: `Agenda.Complemento` (`varchar(128)`, nullable) — confirmado na Biblioteca de Schema (DDL). |
| RN-AGM-008 | **Tipo de consulta (opcional por cliente).** Quando a clínica configurou classificações de agenda, a consulta exibe seu tipo. Estrutura real correspondente: `AgendaClassificacao`/`AgendaSubClassificacao` — tabelas de domínio já configuráveis por clínica (`AgendaClassificacao.IdChClinica`), referenciadas por `Agenda.IdAgendaClassificacao`/`Agenda.IdAgendaSubClassificacao` (ambos nullable — condizente com "opcional por cliente": uma clínica que não cadastrou classificações simplesmente não preenche esses campos). Existe também `Agenda.TipoConsulta` (`char(1)`, `NOT NULL DEFAULT 'N'`), campo diferente e já obrigatório — não é o campo referenciado por esta regra; mantido de lado, sem uso nesta funcionalidade, para não confundir os dois. |
| RN-AGM-009 | **Elementos herdados do Cockpit.** Paciente (nome preferido/legal, foto, diagnóstico oncológico), horário, status calculado (`AppointmentStatus()`), modo de atendimento, indicador de primeira consulta — todos com a mesma origem e lógica já mapeadas em Central do Médico, Seção 4.1; não redefinidos aqui (Lição #10), apenas reutilizados nesta tela. |

### Premissas

- O médico só usa esta tela para a própria agenda — não há necessidade de seletor de profissional.
- A visualização diária é o formato de período (dia, não semana/mês) — decisão já confirmada pelo solicitante. O formato *visual* dentro do dia (lista ou grade) ainda está em aberto — ver "Próximos passos".
- O bloqueio de horário reaproveita estrutura de agenda existente (não propõe, a priori, uma tabela nova) — a confirmar na Seção 4.

### Dependências

- **Central do Médico (Cockpit)** — ponto de entrada (RN-CM-003) e origem dos elementos de card reutilizados (Seção 4.1). Mudanças na estrutura desses elementos em Central do Médico devem se refletir aqui.
- **Agendamento (Recepção)** — cria, edita, cancela e reagenda as consultas que esta tela exibe; também é responsável pela parametrização de agendas por especialidade/profissional (SBIS ECF.05.01) e pelo cadastro de tipos de consulta (SBIS ECF.05.04, parte de cadastro). Ainda não especificada como funcionalidade própria neste projeto.
- **PEP (Prontuário Eletrônico do Paciente)** — destino ao tocar em uma consulta.

### Requisitos SBIS Aplicáveis

Consultados em `RequisitosSBIS-v5.2-(ambulatorial).xlsx`, grupo "ECF.05 - Agendamento" e, transversalmente, "Auditoria" (NGS1):

| Requisito | Título | Estágio (clínica/ambulatório) | Aplicação nesta funcionalidade |
|---|---|---|---|
| ECF.05.02 | Bloqueios na agenda | 2 (recomendado) | Atendido pela funcionalidade de bloqueio de horários (RN-AGM-004) — mecanismo de persistência ainda **[A DEFINIR]**, ver Seção 4. |
| ECF.05.04 | Especificação do tipo de consulta | 2 (recomendado) | Atendido pela exibição do tipo de consulta (RN-AGM-008), quando configurado pelo cliente. A parte de *cadastro/parametrização* do tipo de consulta é responsabilidade de outra funcionalidade (fora de escopo aqui). |
| ECF.05.01 | Parametrização de agendas de consultas | 2 (recomendado) | Fora de escopo desta tela — dependência (ver "Dependências"), não pendência. |
| ECF.05.03 | Agendamento de consultas por profissionais | **1 (obrigatório)** | Fora de escopo desta tela por decisão do solicitante (só visualização + bloqueio) — atendido pelo fluxo de Agendamento da Recepção, ainda não especificado neste projeto. Registrado aqui para não passar despercebido: é estágio 1, então precisa ser coberto por alguma funcionalidade do projeto, mesmo que não seja esta. |
| NGS1.07.03 / NGS1.07.04 | Eventos (e eventos avançados) registrados na trilha de auditoria | 1 / 2 | Transversal ao contexto Segurança — acesso a dados de paciente e a ação de bloqueio de horário (RN-AGM-004) devem gerar evento de auditoria, mesmo padrão já usado em outras funcionalidades assistenciais deste projeto. Não redefinido aqui. |

---

## Próximos passos

1. **Decisão de formato de visualização** — o solicitante pediu protótipos comparando lista vs. grade para o dia. Comparação exploratória entregue separadamente (fora da numeração de Seção 3 — ainda não há Seção 2 concluída para basear um protótipo formal); após a decisão, a Seção 2 (Especificação) e a Seção 3 (Protótipo) seguem com o formato escolhido.
2. **RN-AGM-004 (mecanismo de bloqueio)** — confirmar com o solicitante se a leitura proposta (`TipoAgenda='S'` + paciente-placeholder de `AgendaSalaPacienteEspecial`) é aceitável, ou se deve ser tratada de outra forma.
3. **RN-AGM-006 (`ProgramaApoio.MostrarEm`)** — levantar a decodificação real do campo com o time técnico/DBA antes de escrever a Seção 4.
4. **RN-AGM-003 (horizonte de navegação)** — confirmar se há limite de dias para navegação passada/futura.

---

## Prioridade sugerida

**Should Have** — não é bloqueante para o fluxo assistencial do Cockpit (que já cobre "próximos atendimentos do dia"), mas cobre um requisito SBIS estágio 1 relacionado (ECF.05.03, ainda que não implementado *nesta* tela) e dois recomendados (ECF.05.02, ECF.05.04) diretamente.

## Complexidade estimada

**Média** — poucas regras de negócio, mas duas pendências reais de estrutura de dados (bloqueio de horário, decodificação de `MostrarEm`) que podem se revelar mais complexas na Seção 4, e uma decisão de formato de UI ainda em aberto.

## Dependências (funcionalidades mapeadas)

Central do Médico (Cockpit) — DOC-004. Agendamento (Recepção) — ainda não mapeada neste projeto.

---

## Histórico de Versões

- **v1.0** (31/08/2026) — Documento criado. Seção 1 (Definição) completa, a partir das respostas do solicitante sobre contexto (Assistencial), objetivo/escopo (visualização + navegação + bloqueio, sem CRUD de consulta), persona (médico, não necessariamente oncologista), visualização (diária; formato lista vs. grade em aberto) e regras de negócio (duração fixada pela Recepção; tags restritas às habilitadas para agenda; campo de complemento; tipo de consulta opcional por cliente). Estrutura real de banco consultada na Biblioteca de Schema (DDL) para `Agenda.Complemento`, `Agenda.TipoConsulta`, `AgendaClassificacao`/`AgendaSubClassificacao`, `ProgramaApoio.MostrarEm` e o padrão de filtro por médico logado (`Agenda.IdChRecurso`) já usado em Central do Médico — nenhuma estrutura inventada; itens sem decodificação disponível marcados **[A DEFINIR]**. Seções 2, 3 e 4 pendentes.
