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

**Documentos desta funcionalidade:** [01 - Definição](./01%20-%20Defini%C3%A7%C3%A3o%20v1.4.md) (v1.4) · Especificação (Seção 2): **pendente** — formato de visualização decidido (lista); aguardando confirmação de RN-AGM-010, ver Seção "Próximos passos" · Protótipo (Seção 3): **pendente** · Mapeamento de Banco de Dados (Seção 4): **pendente** — já tem um item confirmado para a subseção "Seeds da Funcionalidade" (RN-AGM-004) quando a Seção 4 for escrita.

---

## 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).
- Agrupamento visual de consultas já finalizadas/canceladas, para manter as consultas pendentes sempre acessíveis sem rolagem excessiva — **[PROPOSTA]** RN-AGM-010, ainda pendente de confirmação (independente da decisão de formato).

**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, em formato de lista (decisão do solicitante, v1.4).
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). Mecanismo confirmado pelo solicitante (como o sistema legado já resolve): o registro de `Agenda` do horário bloqueado recebe (1) o paciente especial "Bloqueio" — um `Paciente` com `Paciente.Paciente = 'B'` (campo real confirmado na Biblioteca de Schema (DDL), `char(1)`, domínio hoje conhecido só por este valor e o default `'S'`) — como `Agenda.IdPaciente`, satisfazendo o `NOT NULL` sem usar um paciente real; e (2) o convênio padrão desse paciente "Bloqueio", um `Convenio` com `Convenio.Convenio = 'B'` (também confirmado na Biblioteca de Schema (DDL), `char(1)`, nullable), como `Agenda.IdChConvenio`. **Decisão do solicitante (v1.3):** o paciente e o convênio "Bloqueio" entram como **seed** desta funcionalidade — uma linha de cada por cliente, criada no setup/deploy, não apenas verificada se já existe. Motivo adicional dado pelo solicitante: essas linhas também servem como item de conferência do setup de um cliente novo (checklist de deploy). Será formalizado na subseção "Seeds da Funcionalidade" quando a Seção 4 for escrita (Lição #19 da Skill Designer) — nenhuma pendência restante nesta regra. |
| 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". Mecanismo confirmado pelo solicitante: `ProgramaApoio.MostrarEm` (`int`) é um mapa de bits que endereça as telas onde a tag aparece — todos os bits desligados (`0`) = não mostra em lugar nenhum; bit ligado = mostra na tela correspondente. Domínio completo (revisado pelo solicitante, resolve a inconsistência da v1.1): prontuário = `1`, cadastro do paciente = `2`, tela da recepção = `4`, Central do Médico = `8`, confirmação de quimioterapia = `16`, agendas = `32`. Soma das 6 telas = `63`, batendo exatamente com o exemplo do solicitante "`63` = todas as telas" — domínio agora fechado, sem lacuna. Condição de filtro desta funcionalidade: `(ProgramaApoio.MostrarEm & 32) = 32`. |
| 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. |
| RN-AGM-010 | **[PROPOSTA] Consultas finalizadas/canceladas agrupadas, não ocultas.** Justificativa de design: o objetivo desta tela é a visão ampla do dia (Seção 1, "Objetivo") — copiar o comportamento padrão do painel compacto de Central do Médico (que *oculta* finalizadas por padrão, com toggle "Todas" para revelar, Central do Médico Seção 4.1 "Filtros do endpoint") contrariaria o motivo desta tela existir. Ao mesmo tempo, consultas já concluídas (status `finished`, mesmo cálculo de `AppointmentStatus()`, Central do Médico Seção 4.1) ou canceladas (`canceled`) não precisam ocupar o mesmo espaço visual que as pendentes, que são o foco do trabalho do médico. Proposta: agrupar consultas `finished`/`canceled` num bloco único, compacto e recolhido por padrão (ex.: "6 consultas já realizadas ▸"), expansível sob demanda — mantém a consulta presente e contável (visão ampla preservada) sem consumir o espaço de rolagem que atrapalharia o acesso às pendentes. Complementar: a tela abre com a posição de rolagem ancorada no horário atual, deixando a próxima consulta pendente visível sem precisar rolar, independente do agrupamento. Com o formato lista já decidido (v1.4), o agrupamento é a supressão das linhas individuais das consultas `finished`/`canceled`, substituídas por um único item recolhido na mesma lista. Pendente de confirmação do solicitante. |

### 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 (decisão do solicitante, v1.4, após comparação exploratória com grade).
- O bloqueio de horário reaproveita estrutura de agenda existente (paciente/convênio especiais "Bloqueio", RN-AGM-004) — nenhuma tabela nova necessária para esta regra.

### 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 confirmado (paciente/convênio especiais "Bloqueio", criados como seed por cliente); a formalizar em "Seeds da Funcionalidade" na 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. **RN-AGM-010 (agrupamento de finalizadas/canceladas)** — confirmar com o solicitante a proposta de agrupamento compacto + rolagem ancorada no horário atual, antes de fechar a Seção 2. Demonstração visual entregue (formato lista, já refletindo a decisão de formato).
2. **RN-AGM-003 (horizonte de navegação)** — confirmar se há limite de dias para navegação passada/futura.
3. **Seção 4, "Seeds da Funcionalidade"** — quando a Seção 4 for escrita, incluir a linha do seed de RN-AGM-004 (paciente/convênio "Bloqueio", por cliente), já decidido nesta versão.
4. **Seção 2 (Especificação)** — pode começar assim que RN-AGM-010 for confirmada; formato (lista) e todas as demais RNs já estão fechados.

---

## 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

**Baixa** — todas as pendências de estrutura de dados (RN-AGM-004, RN-AGM-006) e a decisão de formato de UI estão resolvidas; resta só a confirmação de RN-AGM-010 (agrupamento) e o horizonte de navegação (RN-AGM-003), ambas de produto/UX, não de dados.

## 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.
- **v1.1** (31/08/2026, mesmo dia) — Três respostas do solicitante incorporadas. (1) RN-AGM-006 resolvida: `ProgramaApoio.MostrarEm` é mapa de bits (prontuário=1, cadastro do paciente=2, Central do Médico=4, confirmação de quimio=8, agendas=32), confirmado por três exemplos numéricos consistentes do solicitante; condição de filtro `(MostrarEm & 32) = 32`; registrada como nota não-bloqueante uma inconsistência aritmética no quarto exemplo dado (63="todas as telas" exige um bit `16` não descrito entre as 5 telas nomeadas). (2) RN-AGM-004 (mecanismo de bloqueio) mantida **[A DEFINIR]** por decisão do solicitante — leitura candidata anterior (`TipoAgenda='S'` + `AgendaSalaPacienteEspecial`) retirada da regra por ora; solicitante consultando o time do sistema legado. (3) Criada RN-AGM-010 **[PROPOSTA]** — resposta a uma pergunta do solicitante sobre como tratar consultas finalizadas/canceladas sem comprometer a objetividade da tela: agrupamento compacto e recolhido (não ocultação, diferente do padrão do painel compacto de Central do Médico) + rolagem ancorada no horário atual ao abrir a tela; nota sobre como a proposta se traduziria em cada formato de visualização (lista vs. grade), alimentando a decisão de formato ainda pendente.
- **v1.2** (31/08/2026, mesmo dia) — Duas pendências de dados resolvidas pelo solicitante. (1) RN-AGM-004 (bloqueio de horário) resolvida: mecanismo real confirmado — paciente especial `Paciente.Paciente = 'B'` como `Agenda.IdPaciente` + convênio especial `Convenio.Convenio = 'B'` como `Agenda.IdChConvenio`; ambos os campos (`Paciente.Paciente`, `Convenio.Convenio`) confirmados na Biblioteca de Schema (DDL) antes de escrever a regra — não invenção. Resta apenas confirmar se as linhas "Bloqueio" já existem em produção ou precisam entrar como seed (Seção 4). (2) RN-AGM-006 corrigida: o solicitante notou o bit faltante apontado na v1.1 — domínio revisado para 6 telas (prontuário=1, cadastro do paciente=2, recepção=4, Central do Médico=8, confirmação de quimio=16, agendas=32), soma agora bate exatamente com o exemplo "63 = todas as telas"; o bit de "agendas" usado no filtro desta funcionalidade permanece `32`, sem mudança na condição de filtro. Também produzida (fora da numeração de Seção 3) uma demonstração visual de RN-AGM-010, a pedido do solicitante — ver `Comparação de Formato — Lista vs Grade (exploração).html`, atualizado.
- **v1.3** (31/08/2026, mesmo dia) — Resolvida a última pendência de RN-AGM-004: o solicitante decidiu que o paciente/convênio "Bloqueio" entram como **seed** desta funcionalidade (uma linha de cada por cliente, criada no setup/deploy), não apenas verificados se já existem — motivo dado: também servem como item de conferência do setup de um cliente novo. A criação da linha propriamente dita na subseção "Seeds da Funcionalidade" fica para quando a Seção 4 for escrita (a Seção 4 desta funcionalidade ainda não foi iniciada — Seções 2 e 3 seguem pendentes, aguardando a decisão de formato); RN-AGM-004 e a tabela SBIS (ECF.05.02) atualizadas para refletir a decisão, sem pendência restante.
- **v1.4** (31/08/2026, mesmo dia) — Decisão de formato de visualização: o solicitante escolheu **lista** (após comparar com grade na demonstração exploratória). Objetivo, Escopo, Workflow do Profissional, Premissas, RN-AGM-010 e "Próximos passos" atualizados para refletir a decisão — nenhuma regra de negócio nova criada, apenas texto ajustado para não descrever mais dois formatos em aberto. Resta confirmar RN-AGM-010 (agrupamento) e RN-AGM-003 (horizonte de navegação) antes de iniciar a Seção 2 (Especificação); nenhum outro item pendente.
