Central do Médico — mudanças da v5: guia para desenvolvimento
Para quem é: time de desenvolvimento (back-end, banco e front-end) que já implementou a Central do Médico a partir dos documentos da série v4 e precisa saber o que mudar para chegar à v5.20.
Base de comparação (o que foi desenvolvido): Definição v4.42, Especificação v4.37, Mapeamento de Banco de Dados v4.48 (arquivos em Histórico/).
Destino: Definição v5.20, Especificação v5.20, Protótipo v5.20, Mapeamento v5.20, Cenários de Teste v5.20 e Registro de Decisões v1.19 (série v5 fechada em 29/10/2026; os arquivos estão em Central do Médico (Cockpit)/Histórico/).
Linha do tempo da v5: v5.0 abriu em 08/10/2026; v5.1 e v5.2 em 09/10; v5.3 em 10/10; v5.4 em 13/10; v5.5 em 14/10 (só alinhamento de cores ao Design System, sem mudança de regra nem de contrato); v5.6 em 21/10 (idioma da clínica e tradução sem queda para pt-BR — seção 5); v5.7 em 21/10 (só dois detalhes visuais: destaque de conversa não lida e tamanho do percentual da barra — seções 4.5 e 4.6); v5.8 em 26/10 (anel de foco de 2px e chips de urgência leves — seção 4.8; sem mudança de regra, contrato ou schema); v5.9 em 26/10 (desempate por nome do paciente, todas as clínicas do cliente com o campo clinic, nova versão de prescrição sem assinaturas, CHECK de Mensagem.Tipo, selo “Atrasado” e número do KPI mais leves — seções 2, 3.1, 3.3, 4.3, 4.4 e 6); v5.10 em 26/10 (médico vê agendas, prescrições e mensagens de todas as clínicas do cliente, com janelas de prescrição por clínica; campo clinic também em procedures; chips em peso regular; campo em repouso com neutral-light; seções 3.1, 3.2, 4.2, 4.5, 4.6, 4.8, 4.10 e 8); v5.11 em 26/10 (o “hoje” das janelas de prescrição no fuso da clínica logada; clínica também no card de mensagem, com o campo clinic em conversations; ligação das clínicas do login com a base do cliente por SegEmpresa e Clinica; seções 2, 3.1, 3.2, 4.2, 4.5, 4.11, 7 e 8); v5.12 a v5.14 em 26/10 (o médico vê só as clínicas a que tem acesso e a Agenda filtra igual; perda de acesso tira agendas e prescrições, não pacientes; nome do campo de SegEmpresa; Clinica.FusoHorario descontinuada; seções 2 e 4.8); v5.15 em 27/10 (cores e nome do status vindos da API, administered no lugar de completed, procedimento cancelado com textos riscados; seção 4.12); v5.16 em 27/10 (status do procedimento em chip, troca de formato no mesmo deploy, nomes de TermoTraducao; seção 4.12); v5.17 em 28/10 (botões pela seção 12 do Design System, “Aguardando recepção”; seção 4.14); v5.18 em 28/10 (painel de Mensagens alinhado à Mensageria; seção 4.13).
Situação: v1.19, 29/10/2026 — versão final e fechada. A v5.20 foi para desenvolvimento e este guia não recebe mais mudanças. O que mudar a partir da v6.0 está em Central do Médico - mudanças da v6 - guia para desenvolvimento.md.
Como ler. Este documento é um resumo de diferenças, não substitui a especificação: a regra completa, os critérios de aceitação e os SQLs estão nos documentos v5.5, citados em cada item. As citações “v5.5” nas linhas “Fonte” indicam a versão em que o item foi conferido; o que mudou nas v5.6, v5.7, v5.8, v5.9 e v5.10 está nas seções 2, 3.1, 3.2, 3.3, 4.2, 4.3, 4.4, 4.5, 4.6, 4.8, 4.10, 5 e 6. Cada mudança traz o código da decisão no Registro de Decisões:
- D-CM-nnn — decidido pelo solicitante. Pode implementar.
- E-CM-nnn — escolha do Designer, ainda a confirmar pelo solicitante. Implemente, mas saiba que pode mudar.
- [PROPOSTA] — proposta do Designer (invenção), sem decisão. Não tratar como requisito.
- P-CM-nnn — pergunta em aberto. Está listada na seção 8; algumas podem alterar código já feito.
1. Resumo por camada
| Camada | O que muda | Seção |
|---|---|---|
| Banco | Campo novo ClienteEmpresa.FusoHorarioOficial (IANA) no lugar de FusoOficial; filtro RemovidoEm IS NULL em todas as leituras; Agenda.Data sai de uso; seed de PrescricaoTempoAssinatura; índice proposto; v5.9: CHECK de Mensagem.Tipo só com 'Response' (a aplicar) | 2 |
| Back-end — contrato | Ids inteiros (não uuid); tags viram objetos; campos novos elapsedMinutes, overtime, minutesRemaining, isPreferredReviewer, firstTime (procedimentos), toSignWindowDays; novos status de procedimento; startTime de procedimentos em “HH:mm”; sourceType e type de mensagem com novos valores | 3.1 |
| Back-end — regras | Janelas de prescrição em dias de calendário; assinatura dentro da janela dispensa revisão; administração iniciada retira só “a revisar”; ordenação por minutos; tags em duas origens com vigência por data; diagnóstico com início do prontuário; progresso por TempoAplicacao; funções de status em ordem | 3.2 a 3.9 |
| Front | Painel “Pacientes em procedimento”; ícone de 1ª Consulta; “há 1h20”; textos de tempo da prescrição; confirmação ao resolver/descartar; faixa de sem conexão (o polling de 1 e 5 minutos já existia na v4.37); seletor de tema; botões, avatar e toggle com novos tokens; acessibilidade | 4 |
| i18n | Chaves novas, alteradas e removidas (tabelas completas) | 5 |
| Tema e cores | Na v5.15, cores de status vindas da API (status.colors, classes .chip-status e .avatar-status); tokens --color-on-primary, --color-first-visit; valores do Design System de 14/10/2026; na v5.8, anel de foco de 2px e chips de urgência leves (Design System de 26/10/2026) | 6 |
| Testes | Cenários v5.5; data-base 23/09/2026 12:00; limites da planilha de carga | 7 |
2. Banco de dados e parâmetros
Fonte: Mapeamento v5.5, “Campos novos”, “Índices” e “Seeds da Funcionalidade”; Log de Mudanças Estruturais do Banco de Dados (07/10/2026).
| Item | Antes (v4) | Agora (v5.5) | Decisão |
|---|---|---|---|
| Fuso da clínica | ClienteEmpresa.FusoOficial (smallint, deslocamento) | ClienteEmpresa.FusoHorarioOficial (varchar(64), IANA, ex.: America/Sao_Paulo). Campo novo em IpSeguranca; NOT NULL depois de preencher as clínicas existentes. Todo “hoje” e todo horário exibido usam esse fuso. Migração a criar (Log de Mudanças Estruturais, 07/10/2026) | Decidido pelo solicitante na Agenda do Médico |
| Exclusão lógica | Não havia regra geral | Toda leitura filtra RemovidoEm IS NULL nas tabelas que têm o campo: Agenda, Paciente, PEP, PEPDiagnostico, ProgramaApoio, ProgramaApoioPaciente. Não têm o campo: Prescricao, PacienteFoto, PEPProgramaApoioPaciente — nelas não filtrar | Regra de todo o sistema (início da Seção 4 do Mapeamento) |
Agenda.Data | Os Mapeamentos v4.x já filtravam o dia por DhAgendaIniUTC; Agenda.Data não aparece neles | Será descontinuado: nenhuma consulta nova usa Agenda.Data; usar Agenda.DhAgendaIniUTC convertido para o fuso da clínica. Só a massa de teste e o script UPDATE DATAS ainda a tocam | DT-002 (Decisões Transversais, 10/10/2026) e Log de Mudanças Estruturais de 10/10/2026 |
| Janela de “a revisar” | Parâmetro PrescricaoTempoRevisao ([PROPOSTA], janela contínua a partir de agora, DATEADD(DAY, X, SYSDATETIMEOFFSET())) | Parâmetro já existente NumeroDiasRevisaoPrescricoes (IpParametro/IpParametroChave), em dias de calendário. Padrão 1 dia no Gemed 2.1 quando a linha não existe (o sistema atual assume 2). Não criar PrescricaoTempoRevisao | D-CM-006, D-CM-023, D-CM-037 |
| Janela de “a assinar” | PrescricaoTempoAssinatura ([PROPOSTA], 7 dias contínuos) | PrescricaoTempoAssinatura continua [PROPOSTA], mas agora em dias de calendário. Padrão 7 dias. Aplicar o seed em todo cliente, mesmo existindo o padrão no código: IpParametro (IdParametro = PrescricaoTempoAssinatura, Dominio NULL, UsuarioControla S, Tipo N, Descricao = “Dias de calendário a partir de hoje em que prescrição nunca assinada aparece em “a assinar"", 91 caracteres) e IpParametroChave (IdChave = id da clínica, Valor = 7, IdChave2 NULL). A Descricao da v4.48 tinha 123 caracteres, acima do varchar(100): use a da v5.5. O valor é lido com COALESCE((SELECT TRY_CONVERT(int, ipc.Valor) ...), padrão); valor não numérico cai no padrão (a v4.48 lia ipc.Valor direto) Não criar PrescricaoValidadeAssinatura (conceito de assinatura vencida abolido desde a v4.39) | D-CM-037 |
Mensagem.Tipo (v5.9) | CHECK aceita 'Initial', 'Update', 'Reply' e 'Response' (segundo a Biblioteca de Schema (DDL)) | CHECK aceita só 'Response' (D-CM-052). A aplicar no banco; quem grava mensagens com os outros valores (primeira mensagem, alertas do sistema) precisa passar a gravar 'Response'; impacto fora da Central não levantado. Registrado no Log de Mudanças Estruturais (26/10/2026) | D-CM-052 |
| Ligação das clínicas (v5.11) | — | O login é de um Cliente; as clínicas dele são linhas de ClienteEmpresa (IpSeguranca), e os dados ficam no banco do cliente. Cadeia: ClienteEmpresa.Id = SegEmpresa.SegurancaClienteEmpresaId → SegEmpresa.IdEmpresa → Clinica.IdEmpresa (chave estrangeira real) → Clinica.IdChClinica, que é o valor de Agenda.IdChClinica e de IpParametroChave.IdChave. {IdClinica} nas consultas é o IdChClinica da clínica logada. O campo de SegEmpresa é SegurancaClienteEmpresaId, o nome do DDL (D-CM-071). A coluna Clinica.FusoHorario está descontinuada (D-CM-072): não use; o fuso vem de ClienteEmpresa.FusoHorarioOficial. Padrões por clínica: NumeroDiasRevisaoPrescricoes = 1, PrescricaoTempoAssinatura = 7 | D-CM-065 (D-CM-006, D-CM-037), D-CM-071, D-CM-072 |
| Clínicas em que o médico atende (v5.12) | — | O médico vê só as clínicas do cliente em que atende, na Central e na Agenda. Confirmado (v5.13, D-CM-067): são as clínicas a que o usuário tem acesso (ClientePerfilAcessoUsuario, o mesmo critério de ClinicVisible() da Agenda). A aplicação monta {ClinicasDoMedico} (IdEmpresa, IdChClinica) e filtra: consultas e procedimentos por Agenda.IdChClinica IN essa lista; prescrições pelo INNER JOIN com {LimitesPorClinica}, que tem uma linha por clínica da lista; conversas por Conversa.IdEmpresa IN a lista; ações sobre conversa de outra clínica são recusadas. Quem perde o acesso a uma clínica deixa de ver as agendas e as prescrições dela, mas não perde o acesso aos pacientes (D-CM-068, D-CM-070); a Agenda do Médico tem o mesmo filtro (Mapeamento da Agenda v1.10). “Em Tratamento”, adesão ao protocolo e busca de pacientes seguem sem filtro por clínica, e Paciente.IdChClinica não é usado pela Central (o solicitante informou que será filtro do administrativo e de outras funções, fora deste escopo). SQL em Mapeamento, início da Seção 4 | D-CM-066, D-CM-067, D-CM-068, D-CM-070 |
| Índice | — | [PROPOSTA] IX_Agenda_IdChRecurso_TipoAgenda_DhAgendaIniUTC, o mesmo da Agenda do Médico (a confirmar com o time de banco). A Central lê mais colunas de Agenda; ajustar o INCLUDE desse índice, sem criar um segundo. Os endpoints de procedimentos (4.3, 4.4) filtram por tipo e dia, sem o médico — o índice não os atende como está | Mapeamento, “Índices” |
Conferir antes do deploy: a linha de IpParametro de NumeroDiasRevisaoPrescricoes existe nas bases novas? A aba IpParametro da planilha de carga traz a definição de PrescricaoTempoRevisao (sem valor por clínica e sem uso) — ela não deve ser criada em produção.
3. Back-end: mudanças por endpoint
3.1 Mudanças de contrato (tabela única)
Fonte: Especificação v5.5, Seção 2.9. “Antes” é a Especificação v4.37.
| Endpoint | Campo | Antes | Agora |
|---|---|---|---|
appointments, procedures, prescriptions, patients/search | id, patient.id | uuid | inteiro. appointments: id = Agenda.IdAgenda, patient.id = Agenda.IdPaciente. procedures e prescriptions: id = Prescricao.IdPrescricao (não Agenda.IdAgenda), patient.id = Prescricao.IdPaciente. patients/search: id = Paciente.IdPaciente. Só os ids de conversa e de mensagem continuam uuid |
conversations | patient.id | uuid | inteiro (Conversa.IdPaciente; o Mapeamento v4.48 escrevia Conversa.PacienteId). patient é null também quando o paciente tem RemovidoEm |
appointments, procedures | tags | lista de strings | lista de objetos { code, description, color }, já na ordem de exibição (seção 3.6) |
appointments | elapsedMinutes, overtime | não existiam | novos (seção 3.5) |
appointments | firstTime | já existia, como char 'S'/'N' de Agenda.PrimeiraConsulta; a tag 1a_consulta também vinha em tags | booleano (= 'S'); a 1ª Consulta sai de tags (D-CM-003) |
appointments, procedures | patient.preferredName | o Mapeamento v4.48 escrevia prefferedName (erro de digitação) | conferir que o JSON emite preferredName |
appointments | startTime, endTime | já eram “HH:mm” | sem mudança (a mudança de formato vale só para procedures) |
procedures | startTime | ISO em UTC | ”HH:mm” no fuso da clínica, como em appointments (D-CM-042) |
procedures | firstTime | não existia | novo, booleano (Agenda.PrimeiraConsulta = 'S', D-CM-029) |
procedures | progress | percentual de Agenda.Tempo | percentual de Prescricao.TempoAplicacao; null quando a prescrição não tem tempo de aplicação (seção 3.9) |
procedures | status | scheduled, waiting, checked, preparation, administering, administered/completed (a v4 era inconsistente entre Especificação e Mapeamento), finished, canceled | Na v5.15, status é objeto { domain, name, colors } (seção 4.12); domain = scheduled | waiting | checked | preparation | administering | administered | finished | canceled. De v5.4 a v5.14 o valor foi completed; na v5.15 volta a administered (D-CM-074) |
prescriptions | minutesRemaining | não existia | novo, inteiro, negativo quando a hora da aplicação já passou |
prescriptions | hoursRemaining | horas | inteiro truncado em direção a zero (D-CM-026) |
prescriptions | isPreferredReviewer | só em to_review na Especificação v4.37 (o Mapeamento v4.48 já dizia os dois tipos) | presente nos dois tipos (to_sign e to_review) |
prescriptions | type | janela contínua | filtrado pelas janelas de calendário (seção 3.2) |
prescriptions | ordenação | hoursRemaining crescente | minutesRemaining crescente; desempate pelo nome do paciente (nome social, se houver; senão o civil; sem diferenciar maiúsculas e acentos) e, para o mesmo nome, por id crescente (D-CM-047, E-CM-027; v5.9) |
appointments | clinic | não existia | novo (v5.9), string ou null: nome curto da clínica (Agenda.IdChClinica → Chave.Descricao); null quando o médico atende em uma só clínica (ClinicVisible() da Agenda do Médico; v5.12: entre a v5.10 e a v5.11 a regra era “o cliente tem uma só clínica”). O endpoint devolve as consultas das clínicas em que o médico atende, filtradas por {ClinicasDoMedico} (D-CM-066, E-CM-028, D-CM-067) |
prescriptions | clinic | não existia | novo (v5.9), mesma regra, a partir de Prescricao.IdAgenda → Agenda.IdChClinica. Prescrições das clínicas em que o médico atende; reviewScope = all = todos os médicos dessas clínicas (D-CM-066, E-CM-029). Os parâmetros das janelas são os da clínica de cada prescrição (D-CM-060; seção 3.2) |
procedures | clinic | não existia | novo (v5.10), string ou null, mesma origem e regra de appointments.clinic (Prescricao.IdAgenda → Agenda.IdChClinica). O endpoint devolve os procedimentos das clínicas em que o médico atende (D-CM-061, D-CM-066) |
conversations | escopo | só a clínica da sessão (Conversa.IdEmpresa) | filtro pelas clínicas do médico (v5.12): Conversa.IdEmpresa IN as clínicas em que o médico atende; o vínculo continua pelo destinatário (D-CM-066; na v5.10 e na v5.11 não havia filtro de clínica, D-CM-060) |
conversations | clinic | não existia | novo (v5.11, D-CM-064), string ou null quando o médico atende em uma só clínica: Conversa.IdEmpresa → Clinica.IdEmpresa → Clinica.IdChClinica → Chave.Descricao (E-CM-033). Conversa.IdEmpresa é o SegEmpresa.IdEmpresa (D-CM-069; P-CM-052) |
kpis/prescription-alerts | toSignWindowDays | não existia | novo: a janela de assinatura da clínica, em dias (PrescricaoTempoAssinatura, padrão 7). O front monta o rótulo “p/assinar (próx. N dias)” com ele. O campo toSignNext7Days continua com esse nome, por compatibilidade, mesmo com a janela configurável |
kpis/procedures-today | total | já era count(Situacao IN ('A','V')) | só esclarecimento, sem mudança de query (D-CM-038): inclui completos e finalizados; os três subtotais não precisam somar o total |
kpis/appointments-today | delayed | — | não conta consulta em atendimento (D-CM-008) |
conversations | sourceType | person | system | User | System (D-CM-042) |
conversations/{id} | messages[].type | initial | reply | update | valor único Response (D-CM-042). Atenção: no banco, o CHECK do tipo de mensagem ainda aceita Initial, Update e Reply; deve passar a aceitar só Response (D-CM-052, seção 2) |
Polling (RN-CM-017, Especificação 2.9; os intervalos já valiam na v4.37, o novo é a faixa de sem conexão): 1 minuto para appointments, conversations e o KPI appointments-today; 5 minutos para prescriptions, procedures e os KPIs procedures-today, prescription-alerts e in-treatment. Se uma atualização falhar, o front mantém os últimos dados e mostra a faixa de sem conexão (seção 4.7). Esse intervalo é do front; não há push nem websocket.
3.2 Janelas de prescrição: “a revisar” e “a assinar”
Fonte: Mapeamento 4.6 e 4.7; Definição RN-CM-020; D-CM-023, D-CM-037.
Mudança central: as duas janelas deixam de ser contínuas (hoje + N × 24 h) e passam a ser dias de calendário no fuso da clínica logada (v5.11, D-CM-062). “N dias” é o dia de hoje mais N dias, até 23:59:59, e não há limite para trás (as já vencidas continuam na lista).
A aplicação (não o SQL) calcula os limites, para respeitar mudança de horário de verão:
- Por clínica (v5.10, D-CM-060; fuso v5.11, D-CM-062, E-CM-032): cada clínica do cliente tem os próprios parâmetros N e S, e a prescrição segue os da clínica dela (
Agenda.IdChClinica). A aplicação monta, a cada chamada, uma tabela{LimitesPorClinica}com uma linha por clínica de{ClinicasDoMedico}(v5.12, D-CM-066; oINNER JOINcom ela é também o filtro de clínicas) (IdChClinica,N,S,LimiteRevisaoUTC,LimiteAssinaturaUTC; padrões N = 1 e S = 7 quando não há linha emIpParametroChave) e as consultas de 4.6 e 4.7 a ligam à prescrição pora.IdChClinica. O “hoje” e o fim do dia de cada janela são os do fuso da clínica em que o usuário está logado (decisão do solicitante), também para prescrições de clínicas de outro fuso: o médico vê um só dia em toda a tela. O fuso de cada clínica da prescrição não entra no cálculo. LimiteRevisaoUTC= meia-noite local do dia (hoje + N + 1), no fuso da clínica logada, convertida para UTC; N =NumeroDiasRevisaoPrescricoes(padrão 1).LimiteAssinaturaUTC= idem com S =PrescricaoTempoAssinatura(padrão 7).- Condição no SQL:
Agenda.DhAgendaIniUTC < lc.Limite...UTC, sem piso (lc= a linha da clínica da prescrição).
Exemplo (padrão de 1 dia, hoje = dia 10): aplicação no dia 11 às 23:30 entra em “a revisar”; no dia 12 às 00:00, não entra (entra à 00:00 do dia 11).
Condições comuns às duas listas e aos três números do KPI:
Prescricao.Situacao IN ('P','G','A','O'). PrescriçãoQ,F,EouCnão aparece.Prescricao.IdAgendaobrigatório: prescrição sem agenda fica fora (D-CM-025).Agenda.RemovidoEm IS NULLePaciente.RemovidoEm IS NULL.- Escopo “Meus”:
Prescricao.IdChProfissionalMed = {médico logado}ouPaciente.IdChProfissional = {médico logado}. “Todos” remove essa restrição, nas duas categorias. O KPI é sempre “Meus”, com o mesmo critério (prescritor ou assistente) nas três métricas. Atenção: o texto “Filtros do endpoint” do Mapeamento v4.48 dizia “apenas prescritor” paratoSignNext7Dayse para a parcela de assinatura deurgent, contradizendo as funções do mesmo documento; quem seguiu esse texto precisa corrigir.
“A assinar” (to_sign): nenhuma assinatura existe — nem PrescricaoAssinatura.TipoAssinatura = 'A', nem o par legado Prescricao.DataAssinaturaPrescricao/IdChProfissionalAssinou (RN-CM-029). Aplicação antes de lc.LimiteAssinaturaUTC. Sem filtro de administração iniciada.
“A revisar” (to_review): já assinada por qualquer das duas fontes; aplicação antes de lc.LimiteRevisaoUTC; nenhum registro TipoAssinatura = 'R' jamais registrado (a confirmação de revisão não tem prazo); e as duas exceções abaixo.
Exceção (a) — assinatura dentro da janela de revisão dispensa a revisão (D-CM-040, E-CM-019). A prescrição não é “a revisar” se existe assinatura 'A' (ou DataAssinaturaPrescricao) com data igual ou posterior à meia-noite local do dia da aplicação menos N dias. Exemplo, N = 1 e aplicação no dia 11: assinatura do dia 10 às 00:00 em diante dispensa; assinatura do dia 9 não dispensa. Com aplicação no dia 10, a janela abre no dia 9 às 00:00.
- O valor
{InicioJanelaRevisaoLocal}é por linha (depende daDhAgendaIniUTCde cada prescrição e doNda clínica dela; o fuso é o da clínica logada,{FusoWindowsLogin}). PrescricaoAssinatura.DataePrescricao.DataAssinaturaPrescricaosãodatetimesem fuso; a Especificação os trata como hora local da clínica. É escolha do Designer a confirmar com o time de banco (E-CM-019). A conversão do dia da aplicação usaAT TIME ZONEcom o nome Windows do fuso, traduzido pela aplicação a partir do IANA.- Consequência visível: assinar uma prescrição cuja aplicação já está na janela de revisão a tira da lista inteira, e o número “P/ assinar” diminui em um (e “Urgentes”, se era urgente). Não passa para “a revisar”.
Exceção (b) — administração iniciada (D-CM-039, E-CM-018). Agenda.DhInfusaoIniUTC preenchido retira só “a revisar”. Uma prescrição “a assinar” com administração iniciada continua na lista e no número, de propósito: sem assinatura em procedimento é falha grave de processo e deve ficar visível (D-CM-033, D-CM-039). A correção é da Recepção (cancelar a agenda ou marcar falta), não do médico.
KPI urgent = prescrições “a assinar” mais “a revisar” do médico com menos de 12 h para a aplicação. Classificação por minutos (< 720), não pelo hoursRemaining truncado: 11h59 é urgente mesmo aparecendo como 11. As vencidas contam como urgentes até serem assinadas ou revisadas (D-CM-013, D-CM-024).
Nova versão de prescrição (v5.9, D-CM-050, D-CM-052). Editar uma prescrição gera uma nova versão; a anterior fica cancelada e, entre as versões, só uma é válida (Prescricao.Situacao fora de P/G/A/O já a tira das listas). A nova versão nasce sem assinaturas: não herda PrescricaoAssinatura nem os campos legados (IdChProfissionalAssinou, DataAssinaturaPrescricao); portanto é “a assinar”. A assinatura que dispensou a revisão não vale mais se a aplicação for adiada: a comparação de E-CM-019 é refeita com a nova data, e a prescrição volta só a “a revisar”, quando a nova data entrar na janela de revisão. Ela não volta a “a assinar”: a prescrição já assinada não precisa ser assinada de novo (D-CM-059).
3.3 minutesRemaining, hoursRemaining e ordenação
minutesRemaining = DATEDIFF(MINUTE, SYSDATETIMEOFFSET(), Agenda.DhAgendaIniUTC).hoursRemaining = minutesRemaining / 60com divisão inteira do T-SQL (trunca em direção a zero; 90 min → 1, −90 min → −1).- Ordenação da lista sem
type:minutesRemainingcrescente, desempate pelo nome do paciente (D-CM-047) e, para o mesmo nome, poridcrescente (E-CM-027, a confirmar). Vencidas ficam no topo. OhoursRemainingsozinho não distingue −40 min de +20 min — por isso a ordenação é pelos minutos.
3.4 Textos de tempo da prescrição (calculados no front)
Fonte: D-CM-041, D-CM-055. O back-end só envia minutesRemaining.
| Situação | Regra | Exemplo (pt-BR) |
|---|---|---|
| Restante, menos de 60 min | minutos | ”45min restantes” (D-CM-055) |
| Restante, 60 min ou mais | horas truncadas | ”8h restantes”, “123h restantes” |
| Atrasada, menos de 60 min | minutos | ”40min atrasada” |
| Atrasada, de 60 min a 47h59 | horas e minutos, minutos com dois dígitos | ”1h59 atrasada”, “3h00 atrasada” |
| Atrasada, 48 h ou mais | dias, parte inteira (piso) | “30 dias atrasada”; 59 h → “2 dias atrasada” |
Atrasada sempre com o chip vermelho. O corte de chips por urgência (RN-CM-011: crítica < 12 h, atenção de 12 h a 24 h, texto simples acima de 24 h) não mudou.
3.5 Consultas: elapsedMinutes, overtime, delayMinutes
Fonte: Mapeamento 4.1; D-CM-017, D-CM-008.
elapsedMinutes = DATEDIFF(MINUTE, Agenda.DhAtendimentoIniUTC, SYSDATETIMEOFFSET())quandoDhAtendimentoIniUTCnão é nulo eDhAtendimentoFimUTCé nulo (consulta em atendimento);NULLnos demais estados.overtime = elapsedMinutes > Agenda.Tempo;falsese qualquer um for nulo. Sem tolerância.delayMinutes: sem mudança de regra (0 quando o horário previsto ainda não chegou).- Indicador de consultas: “atrasadas” não conta consulta em atendimento (D-CM-008).
- Bloqueios de horário da Recepção (RN-CM-030, RN-AGM-019) são gravados como agenda de consulta com o paciente reservado “B”. O filtro
Paciente.Paciente <> 'B'(viaAgenda.IdPaciente) emappointmentse emkpis/appointments-todayjá existia desde o Mapeamento v4.48; só a descrição mudou.
3.6 Tags (appointments.tags e procedures.tags)
Fonte: Mapeamento 4.1 (mapa de campos e Domínios); D-CM-002, D-CM-021, D-CM-022; RN-CM-025.
- Duas origens, unidas, ambas com join em
ProgramaApoio:ProgramaApoioPacienteporIdPaciente— atribuição no cadastro do paciente; tags deFinalidadeD(administrativas), inclusive VIP.PEPProgramaApoioPaciente→PEPporPEP.IdPaciente— atribuição no prontuário; tags deFinalidadeA(assistenciais). A chave dePEPProgramaApoioPacienteéIdPEP(um registro de PEP leva uma tag).
- Se a mesma tag vier das duas origens, aparece uma vez.
- VIP vem de
ProgramaApoioPaciente;Paciente.PacienteVipnão é lido (D-CM-002). Remover oUNIONcomPaciente.PacienteVip(bit = 1 virava a tagvip) e o filtro de vigência antigo (DataInicio <= hoje,DataFimnulo ou>= hoje, que não tratava a hora). VIP é exceção ao filtroMostrarEme à vigência da tag. - Filtros das tags de
ProgramaApoio:(MostrarEm & 32) = 32(bit 6, Agendas — não o bit da Central do Médico); vigência da própria tag (DataInicio/DataFim);RemovidoEm IS NULL. - Vigência por data, inclusiva nas duas pontas (D-CM-021): compara-se só o dia de calendário no fuso da clínica, sem hora. Início hoje ou antes, e fim (se houver) hoje ou depois. Vale para a tag e para a atribuição ao paciente. Para o prontuário usar
PEP.DataInicioUTC/DataFimUTC(datetimeoffset, convertidos para o fuso da clínica antes de tomar a data);PEP.DataInicio/DataFimnão são lidos (D-CM-009). - Saída:
code=ProgramaApoio.Sigla;description=ProgramaApoio.Descricao;color=ProgramaApoio.Cor(#RRGGBB; ausente ou inválida, o front usa--color-neutral-lighter). - Ordem (D-CM-022):
FinalidadeAantes deD; em cada grupo, alfabética pela sigla. A lista já sai ordenada; o front não reordena. - A 1ª Consulta não é tag: é
firstTime.
3.7 Diagnóstico (appointments.patient.diagnosis)
Fonte: Mapeamento 4.1; D-CM-009, D-CM-010.
Todos os diagnósticos oncológicos “ativos” (PEPDiagnostico.Tipo = 'O'), sem RemovidoEm em PEPDiagnostico e em PEP, e com PEP.DataInicioUTC até o fim de hoje no fuso da clínica (nulo = vigente desde sempre). Diagnóstico de um PEP que só começa depois de hoje não é retornado. Só o início é avaliado; PEP.DataFimUTC não filtra.
3.8 Funções de status (D-CM-030, DT-010)
As condições são avaliadas em ordem; vale a primeira que se aplicar. Agenda.Situacao é NOT NULL.
AppointmentStatus() (também mudou: na v4.48 a lista não tinha ordem, e Situacao = 'V' com fim preenchido e início nulo satisfazia checked e finished ao mesmo tempo; agora vale finished. Origem: Especificação/Mapeamento v5.0 e DT-010):
| Ordem | Status | Condição |
|---|---|---|
| 1 | canceled | Situacao IN ('C','D','F','I','M','O','T') |
| 2 | finished | Situacao = 'V' e DhAtendimentoFimUTC preenchido |
| 3 | consultation | Situacao = 'V', DhAtendimentoIniUTC preenchido, DhAtendimentoFimUTC nulo |
| 4 | checked | Situacao = 'V' e DhAtendimentoIniUTC nulo |
| 5 | waiting | Situacao = 'A' e DhChegadaUTC preenchido |
| 6 | scheduled | Situacao = 'A' e DhChegadaUTC nulo |
ProcedureStatus():
| Ordem | Status | Condição |
|---|---|---|
| 1 | canceled | Situacao IN ('C','D','F','I','M','O','T') |
| 2 | finished (alta) | Situacao = 'V' e DhAtendimentoFimUTC preenchido |
| 3 | administered (infusão terminada, sem alta) | Situacao = 'V', DhInfusaoFimUTC preenchido, DhAtendimentoFimUTC nulo |
| 4 | administering | Situacao = 'V', DhInfusaoIniUTC preenchido, DhInfusaoFimUTC nulo |
| 5 | preparation | Situacao = 'V', DhAtendimentoIniUTC preenchido, DhInfusaoIniUTC nulo |
| 6 | checked | Situacao = 'V' e DhAtendimentoIniUTC nulo |
| 7 | waiting | Situacao = 'A' e DhChegadaUTC preenchido |
| 8 | scheduled | Situacao = 'A' e DhChegadaUTC nulo |
O que mudou: o valor do status 3 é administered (D-CM-074; de v5.4 a v5.14 a série usou completed, que não deve ser implementado); finished ganhou precedência sobre administered (a massa tem 23 linhas com alta e DhInfusaoFimUTC nulo, que devem ser finished); com DhInfusaoFimUTC preenchido nunca é administering; com início de infusão preenchido e DhAtendimentoIniUTC nulo vale administering, não checked.
KPI procedures-today: total = contagem de Situacao IN ('A','V') (inclui completos e finalizados); inProgress = administering; waiting = waiting + checked + preparation; scheduled = scheduled.
startTime do procedimento (nome mantido por herança): se finalizado, DhAtendimentoFimUTC; senão, se Situacao = 'V', DhAtendimentoIniUTC; senão DhAgendaIniUTC — sempre convertido para “HH:mm” do fuso da clínica (RN-CM-026, D-CM-042). A ordenação do painel continua pelo horário agendado, desempate alfabético pelo nome do paciente (RN-CM-027).
3.9 Progresso do procedimento (progress)
Fonte: Mapeamento 4.3; D-CM-015, D-CM-020, D-CM-034.
CAST(ROUND(DATEDIFF(MINUTE, Agenda.DhAtendimentoIniUTC, SYSDATETIMEOFFSET()) * 100.0
/ NULLIF(Prescricao.TempoAplicacao, 0), 0) AS int)TempoAplicacao é numeric(6,0), em minutos. NULL quando TempoAplicacao é nulo ou zero — o front não desenha a barra e mostra “sem tempo previsto”. A base deixou de ser Agenda.Tempo. O contrato não traz o tempo de aplicação; o null de progress também ocorre em atendimento sem início (P-CM-042, item 2).
3.10 Outras mudanças de leitura
- Busca de pacientes (
patients/search). O número de prontuário não é critério da busca comum (D-CM-036), mas continua nos resultados (medicalRecordNumber, ECF.03.14). Já era assim no Mapeamento v4.48 e na Especificação v4.37; a decisão só confirma. A chaveid:(busca pelo prontuário) existirá só para a certificação, sem contrato, mapeamento nem texto de ajuda ainda (P-CM-038). Se o back-end já compara o texto digitado com o prontuário, tirar da busca comum. - Correções de escrita no Mapeamento v4.48 (conferir se o código copiou o erro):
Prescricao.IdAgenda <> NULL(nunca verdadeiro) →IS NOT NULL;Agenda.TipoAgenda IN 'Q', 'R'→IN ('Q','R');DhAtendimentoFim(coluna inexistente) →DhAtendimentoFimUTC;Conversa.PacienteId→Conversa.IdPaciente;RemovidoEm IS NULLtambém emAgenda,PacienteePEPnas duas partes dePatientInTreatmentCounte noTreatmentPlanAdherenceCount(kpis/in-treatment, 4.5). - Conversas: resolver e descartar valem para todos os destinatários (D-CM-011). Sem “desfazer” e sem texto de auditoria (D-CM-014). Descartar continua sendo
PATCH(registro append-only, nunca excluído).
4. Front-end: mudanças por área
Fonte: Especificação v5.5, Seções 2.1 a 2.8; Protótipo v5.5 (03 - Protótipo v5.5.html ilustra o comportamento; onde divergir da Especificação ou do Mapeamento, vale o documento — ver divergências conhecidas do protótipo na seção 7). Ícones: só Lucide ou react-icons.
4.1 Cabeçalho e busca
- O menu do avatar tem o seletor de tema (Automático, Claro, Escuro;
MSG_themeOptions) e “Sair”. Sem nome, CRM nem especialidade no cabeçalho. Seleção do tema: ver o guiaTema claro e escuro - guia para desenvolvimento.md. Se a escolha é guardada entre sessões não foi decidido (o Design System traz só uma [PROPOSTA] de guardar no navegador; os Cenários registram a lacuna). - Busca de pacientes: nome, CPF, data de nascimento e nome da mãe. Prontuário não entra como critério da busca comum (D-CM-036), mas continua exibido nos resultados (ECF.03.14). A comparação ignora acentos.
- Busca como combobox/listbox acessível (seção 4.8).
4.2 KPI Bar
| Card | O que muda |
|---|---|
| Consultas Hoje | Subtexto passa a “X pendentes (Y atrasadas)”; no singular “1 pendente (1 atrasada)”. As atrasadas já estão contadas nas pendentes (D-CM-018). Para leitor de tela: “X pendentes, das quais Y atrasadas” |
| Procedimentos Hoje | O número principal inclui os procedimentos já finalizados (D-CM-038; esclarecimento, a query já era assim). O subtexto “X em atendimento · Y aguardando · Z previstos” não precisa fechar a conta. O clique abre a tela de Pacientes em procedimento (antes “Procedimentos na Clínica”). Desde a v5.10 conta os procedimentos de todas as clínicas do cliente (D-CM-060) |
| Alertas de Prescrição | Subtexto “X p/revisar · Y p/assinar (próx. {n} dias)”, com {n} = toSignWindowDays; no singular “próx. 1 dia”. Antes era fixo “próx. 7 dias”. Com clínicas de janelas diferentes, toSignWindowDays é o da clínica em que o médico está logado (D-CM-063). O número principal fica em color-error-dark quando maior que zero (v5.9, D-CM-054, D-CM-058) |
| Os quatro cards | Falha do endpoint de KPIs mostra ”—” nos valores e não trava os outros painéis. Falha em atualização automática mantém os últimos valores e liga a faixa de sem conexão |
4.3 Painel de Consultas
| Item | Antes | Agora | Decisão |
|---|---|---|---|
| 1ª Consulta | chip de texto “1ª Consulta” dentro das tags | ícone circle-number-1 (Tabler; react-icons TbCircleNumber1), 18 px, sem fundo, cor --color-first-visit, logo depois do nome do paciente. role="img" e aria-label “1ª Consulta” | D-CM-003 |
| Dica do ícone | title nativo | dica (role="tooltip") que abre ao passar o mouse e ao tocar. O toque abre só a dica e não aciona o card; fecha ao tocar fora (esse primeiro toque só fecha a dica), ao rolar, ao redimensionar e com Esc. Não fecha sozinha na atualização automática (polling de 1 min). Com o mouse, fica aberta enquanto o ponteiro estiver sobre o ícone ou sobre a própria dica. Área de toque do ícone de 44 × 44 px | D-CM-016, E-CM-013 confirmada |
| Foco de teclado do ícone | — | o ícone não recebe foco; “1ª Consulta” já está no nome acessível do card | D-CM-035 |
| Ordem do que aparece no card | — | ícone de 1ª Consulta (junto ao nome), tags assistenciais, tags administrativas; o back-end já envia as tags ordenadas | D-CM-022 |
| Selo de atraso | — | “Atrasado · Nmin” único, para qualquer consulta atrasada e não iniciada. A Central não distingue “Esperando” de “Não chegou” (isso existe só na Agenda do Médico). Selo leve (v5.9): fundo --color-error-light, texto e ponto em --color-error-dark, sem contorno (5,6:1 no claro, 6,3:1 no escuro); só o ponto do selo pulsa (some com movimento reduzido). A Agenda do Médico mantém o selo preenchido com --color-alert-fill | D-CM-004, E-CM-007, D-CM-054, E-CM-026 |
| Consulta em atendimento além do previsto | — | quando overtime é true, mostra ao lado do status “há 1h20” (abaixo de 1 h, “há 45min”), com ícone Lucide clock-alert, fundo color-highlight-light, sem contorno, texto e ícone color-highlight-dark (v5.8; até a v5.7 era fundo -medium, contorno e texto neutral-darker: o chip usa os mesmos tokens do chip “Atenção”, D-CM-046). Some quando a consulta é finalizada. O front monta o texto a partir de elapsedMinutes; a partir de 1 h os minutos têm dois dígitos (“há 1h05”, “há 2h00”). O nome acessível do card acrescenta “em atendimento há 1h20, além do previsto” | D-CM-017, E-CM-017 confirmada; D-CM-046 |
| Diagnóstico | uma lista | todos os diagnósticos oncológicos ativos; um com PEP que começa depois de hoje não vem | D-CM-009, D-CM-010 |
| Bloqueio de horário | — | nunca aparece, em nenhum toggle | RN-CM-030 |
| Selo de atraso (marcador) | ”🔴 15min” (emoji) | texto “Atrasado · 15min”, sem emoji | Especificação 2.3 |
| Finalizadas esmaecidas | fundo mais claro e opacidade reduzida | fundo mais claro e borda discreta, sem reduzir a opacidade (para manter o contraste); a cor do chip Finalizado também mudou (valores na seção 6) | Especificação 2.3, 2.8 |
Sem mudança: ordenação cronológica, toggle Pendentes (default) / Todas, bordas laterais de Recepcionado (secondary-pure) e Aguardando (--color-status-waiting-border), clique no card abre o PEP, título do painel leva à Agenda do Médico.
4.4 Painel de Prescrições Pendentes
- Texto de tempo e atraso conforme a seção 3.4, montado no front a partir de
minutesRemaining. Chaves novas na seção 5. - Ordenação: a lista já vem ordenada do back-end (seção 3.3); o front não reordena.
- Destaque “Meu” (
isPreferredReviewer) nos dois tipos de card, não só “a revisar”. É só destaque visual, sem texto com nomes de terceiros. - Meus / Todos afeta as duas categorias da mesma forma. Default “Meus”. “Meus” esconde a pendência de um colega ausente; “Todos” existe para a colaboração (D-CM-028).
- Depois de assinar: toast de sucesso, retorno à Central com foco no painel de Prescrições, e o KPI atualizado — “P/ assinar” diminui em um (e “Urgentes”, se era urgente). Se a aplicação estava na janela de revisão, a prescrição some da lista inteira (seção 3.2, exceção (a)).
- Prescrição vencida (hora da aplicação já passou) continua na lista com o chip vermelho e conta em “Urgentes” até ser assinada ou revisada.
- Tela de assinatura, de revisão e endpoints de ação de prescrição continuam fora desta especificação (processo de Prescrições, documento à parte).
4.5 Painel de Mensagens
- Escopo (v5.12, D-CM-066): o painel lista as conversas do médico das clínicas em que ele atende, filtradas por
Conversa.IdEmpresa(seção 3.1; na v5.10 e na v5.11 era de todas as clínicas do cliente, D-CM-060). No banco,IdEmpresaé NOT NULL e entra nas chaves estrangeiras compostas: as junções usamId+IdEmpresa, e toda linha nova das ações grava oIdEmpresada conversa (Mapeamento 4.8 e 4.9). O card mostra a linha de clínica (v5.11, D-CM-064), no mesmo formato e com a mesma regra dos demais cards (seção 4.11). - Confirmação ao resolver e ao descartar (D-CM-032, E-CM-021). Diálogo
role="alertdialog"comaria-modal,aria-labelledby(título) earia-describedby(corpo). Foco inicial em Cancelar; Tab e Shift+Tab ficam entre Cancelar e o botão de confirmar; Esc cancela (quando aberto sobre o modal da conversa, cancela só a confirmação); o foco volta ao botão que abriu o diálogo. O texto vale para qualquer destinatário e não promete “desfazer” (D-CM-014). - Sem “desfazer” e sem texto de auditoria (D-CM-014).
- Prazo da conversa no card: o emoji ”⏰ Responder até 14:00” vira o ícone Lucide
clock+ o texto “Responder até 14:00”. sourceTypeagora éUser | System;messages[].typeé sempreResponse. O front que testavaperson/systemouinitial/reply/updateprecisa ser ajustado.- Conversa não lida (v5.7, D-CM-045): ícone e borda lateral esquerda (3 px) em
color-secondary-dark. A Especificação v5.5 pediaprimary-pureno ícone esecondary-purena borda (1,7:1 e 2,0:1 sobre branco, abaixo de 3:1); o protótipo já usavasecondary-dark. Lida: íconeneutral-pure, sem borda. - Modal da conversa: ver acessibilidade (seção 4.8).
- v5.18 (D-CM-087): assunto no cartão, retirada do selo “Respondida”, ícones
check/check-check, ordem eresponded, decididos na Mensageria; descritos na seção 4.13.
4.6 Painel Pacientes em procedimento
| Item | Antes | Agora | Decisão |
|---|---|---|---|
| Nome do painel | ”Procedimentos na clínica" | "Pacientes em procedimento”. O card do KPI continua “Procedimentos Hoje” | D-CM-019 |
| Ícone de 1ª Consulta | não havia | mesmo ícone, mesma dica e mesma regra de teclado do painel de Consultas, quando firstTime é true | D-CM-029 |
| Status | administered/completed (confuso) — na v5.15, administered | Agendado, Aguardando recepção, Recepcionado, Em preparo, Em aplicação, Completo (infusão terminada, sem alta), Finalizado (alta registrada), Cancelado | D-CM-030 |
| Barra de progresso | base Agenda.Tempo | só para “Em aplicação”; base TempoAplicacao; 50 px × 3 px, percentual em 10 px (--font-size-xs; D-CM-045, v5.7) na linha do nome; trilho neutral-lighter, barra neutral-dark; passou de 100% fica error-dark | D-CM-015, E-CM-008 |
| Sem tempo de aplicação | barra | sem barra e sem percentual; texto discreto “sem tempo previsto” | D-CM-034 |
| Horário do card | ISO em UTC | startTime “HH:mm” já no fuso da clínica. (Mostrar o horário de término a partir de Finalizado, RN-CM-026, já valia na v4.37) | D-CM-042 |
Sem mudança: toggle Meus (default) / Todos, ordenação por horário agendado com desempate alfabético.
v5.10 (D-CM-060, D-CM-061): o painel e o indicador “Procedimentos Hoje” reúnem os procedimentos das clínicas em que o médico atende (v5.12, D-CM-066); o card mostra a linha de clínica (ícone building-2 de 14 px, texto de 12 px color-neutral-pure) quando clinic vem preenchido, como nos cards de consulta e de prescrição (seção 4.10).
4.7 Faixa de sem conexão e estados
Fonte: Especificação 2.7; D-CM-007, D-CM-027 (E-CM-001).
- Se uma atualização automática falhar depois de o painel ou indicador já ter carregado: mantém os últimos dados e mostra uma só faixa para toda a Central, largura total, logo abaixo do cabeçalho.
- Ícone Lucide
wifi-offeMSG_connectionLost: “Sem conexão — dados atualizados às {hh:mm}”, horário no fuso da clínica. - O horário é o da atualização bem-sucedida mais antiga entre os painéis e indicadores que estão falhando (pior caso de defasagem).
role="status", anunciada uma vez ao aparecer, sem botão de fechar; some sozinha quando nenhuma atualização está falhando.- Em telas de até 1024 px o cabeçalho fica preso no topo e a faixa fica presa junto.
- Painel que falha antes de ter dados continua com
MSG_endpointFail, e a faixa não aparece por causa dele. - Cada painel tem skeleton próprio durante o carregamento; a busca mostra spinner dentro do campo.
4.8 Acessibilidade (Especificação 2.8, subseção “Acessibilidade (transversal)”, D-CM-012)
- Contraste: texto de informação ≥ 4,5:1 (3:1 em texto grande e componentes gráficos), nos dois temas.
color-neutral-mediumnão vale como texto de informação nem placeholder. Finalizado se distingue por fundo e borda, nunca por opacidade. - Teclado: todo card e controle alcançável por Tab; Enter e Espaço fazem o que o clique faz. O botão de ação (Assinar, Revisar, PEP, Resolvido) é um controle à parte, sem aninhamento dentro do elemento clicável do card.
- Foco visível (v5.8, D-CM-046; Design System, seção 11): em
:focus-visible, anel de 2 px em--color-neutral-dark,outline-offsetde 2 px (recuado,-2px, só no item do menu do usuário; o anel do card é externo, afastado 2 px, e cabe no padding do painel), 11,2:1 ou mais nos dois temas. Até a v5.7 era 3 px. O anel de foco agora é regra do Design System (gemed-theme.csstraz a regra); quem usa--ringlocal pode trocar. Nuncaoutline: nonesem substituto. - Alvos de toque: mínimo 44 × 44 px.
- Modal de conversa:
role="dialog",aria-modal="true", nome acessível pelo título; foco entra e fica preso; Esc fecha; o foco volta a quem abriu (ou ao próximo elemento do painel, se a conversa saiu da lista). - Toasts:
role="status"comaria-live="polite"; erros emrole="alert". - Busca:
role="combobox"comaria-expanded,aria-controls,aria-activedescendant; listarole="listbox", itensrole="option"; setas navegam, Enter seleciona, Esc fecha; “nenhum paciente encontrado” em regiãoaria-live. prefers-reduced-motion: reducedesliga o ponto pulsante do selo “Atrasado” e a entrada dos avisos.- 360 px sem rolagem horizontal; chips e tags quebram de linha.
- Botões, avatar e toggle (Especificação 2.8; antes da v5 → agora; os botões mudam de novo na v5.17, seção 4.14): Revisar e PEP: transparente com borda
primary→ fundosecondary-light, textoneutral-darker. Resolvido: textoprimary-pure→ contorno 1 pxneutral-light, textoneutral-dark. Descartado: preenchidoerror-purecom texto branco → transparente, contorno 1 pxerror-dark, textoerror-dark. Avatar do painel de Procedimentos:primary-light/primary-dark→neutral-light/neutral-dark. Toggle ativo: ganha contorno 1 pxneutral-dark, textoneutral-darker(erasecondary-dark) e área clicável de 44 px. Foco do campo de busca: borda de 2 px (v4) → anel de 3 px (v5.0 a v5.7) → borda de 2 pxneutral-dark, sem anel (v5.8;border: 1pxmaisbox-shadow: inset 0 0 0 1px, para o campo não mudar de tamanho). - Chips de urgência (v5.8, D-CM-046): Crítico (< 12 h, inclusive atrasada) = fundo
color-error-light, sem contorno, texto e íconetriangle-alertemcolor-error-dark; Atenção (12 h a 24 h) = fundocolor-highlight-light, sem contorno, texto e íconeclockemcolor-highlight-dark; os dois em peso regular, 400 (v5.10, D-CM-056; até a v5.9,font-weight-medium). Contraste do texto: 5,6:1 e 5,0:1 no claro; 6,3:1 e 8,9:1 no escuro. Até a v5.7: fundo-medium, contorno de 1 px e textoneutral-darker. O ícone continua, para a urgência não depender só da cor. Botões “Revisar”/“PEP” e toggles ativos usam textoneutral-darker(E-CM-004, a confirmar).
4.9 v5.9: clínica no card, desempate por nome, selo e número do KPI mais leves
- Linha de clínica (D-CM-050, E-CM-028): nos cards de consulta e de prescrição, quando
clinicvem preenchido, mostrar na última linha do card o ícone Lucidebuilding-2(14 px) e o nome curto, em 12 pxcolor-neutral-pure, sem chip.clinicénullquando o médico atende em uma só clínica: nesse caso, não desenhar a linha (v5.12, D-CM-066; entre a v5.10 e a v5.11 a regra foi “cliente com uma clínica”, D-CM-060). Incluir o nome da clínica no nome acessível do card. - Ordenação das prescrições (D-CM-047, E-CM-027):
minutesRemaining, depois nome do paciente (sem diferenciar maiúsculas e acentos), depoisid. O protótipo usalocaleCompare('pt-BR', { sensitivity: 'base' }); no back-end, a collation do banco. - Selo “Atrasado” (D-CM-054, D-CM-058): fundo
--color-error-light, texto e ponto--color-error-dark, sem contorno; só o ponto pulsa. O selo e o número não usam mais--color-alert-fill(o.toast-errordo protótipo ainda o usa). - Número do KPI de Alertas:
--color-error-dark(era--color-error-pure). O “há 1h20” continua leve (D-CM-053).
4.10 v5.10: escopo do cliente, janelas por clínica e campo em repouso
- Escopo (D-CM-060): o login é autorizado para um cliente; as clínicas (
ClienteEmpresa) ficam no banco do cliente. Durante o login, o médico vê agendas, prescrições e mensagens das clínicas do cliente em que atende (v5.12, D-CM-066; antes, todas as clínicas do cliente); os demais profissionais ficam só na clínica escolhida na seleção de clínicas. Ao trocar de clínica, o médico pode trocar de cliente. Todos os endpoints filtram pelas clínicas do médico ({ClinicasDoMedico}); “hoje” e os horários de consultas e procedimentos seguem o fuso da clínica logada; as janelas de prescrição também (v5.11, D-CM-062, seção 3.2). - Linha de clínica: aparece quando o médico atende em mais de uma clínica, nos cards de consulta, prescrição e procedimento (E-CM-028, D-CM-061); na v5.11, também no de mensagem (D-CM-064).
- Janelas de prescrição por clínica: seção 3.2 (D-CM-060, D-CM-062). Rótulo do indicador e “Em Tratamento” com a clínica logada (D-CM-063).
- Chips: peso regular, 400 (D-CM-056).
- Campo de texto em repouso: borda
--color-neutral-light(1,7:1 no claro, 1,8:1 no escuro), como no Design System; o protótipo deixou de usarneutral-pureno campo de busca e no de resposta do modal. Contraste abaixo de 3:1 aceito pelo solicitante (D-CM-057). - Prescrição já assinada não volta a “a assinar” se a aplicação for adiada (D-CM-059, seção 3.2).
4.11 v5.11: mensagem com clínica e relógio único
- Card de mensagem (D-CM-064; o card mudou de novo na v5.18, seção 4.13): mostra a linha de clínica (ícone
building-2de 14 px e nome curto em 12 pxcolor-neutral-pure, sem chip) quandoconversations[].clinicvem preenchido;nullcom uma só clínica (não desenhar a linha). Incluir o nome da clínica no nome acessível do card. A linha vai depois das linhas do card (na v5.18: assunto e hora na linha 1, “autor: texto” na linha 2), como nos outros cards. - Relógio único (D-CM-062): a tela inteira usa o “hoje” e o fuso da clínica logada. O front não calcula janela de prescrição; só exibe o que o back-end manda.
- Sem mudança de regra, contrato ou schema além do campo
clinicdeconversationse da cadeia de clínicas da seção 2.
4.14 v5.17: botões pela seção 12 do Design System e “Aguardando recepção”
Fonte: Especificação v5.17 (2.8), Design System (seções 4a e 12), D-CM-084, D-CM-085, D-CM-086 (confirma E-CM-049).
| Botão | Até a v5.16 | Na v5.17 |
|---|---|---|
| Assinar (card de prescrição) | Preenchido primary-pure, texto --color-on-primary | Secundário: transparente, contorno 1 px neutral-pure, texto neutral-dark |
| Revisar (card de prescrição), PEP (card de procedimento) | Fundo secondary-light, texto neutral-darker | Secundário (como acima) |
| Resolvido (card de mensagem e modal) | Terciário: contorno 1 px neutral-light, texto neutral-dark | Secundário (como acima) |
| Responder (modal de mensagem) | Fundo secondary-light, texto neutral-darker | Primário: --color-primary-strong (#007A13), texto --color-on-primary-strong (branco), 5,5:1 nos dois temas |
| Cancelar (caixa de confirmação) | Terciário | Secundário |
| Resolver (caixa de confirmação) | Preenchido primary-pure, texto --color-on-primary | Primário (verde escuro) |
| Descartado (modal) e Descartar (caixa de confirmação) | Destrutivo: transparente, contorno e texto error-dark | Sem mudança (D-CM-086: o Design System ainda não define o destrutivo) |
- Regra da seção 12: no máximo um botão preenchido por região; botão dentro de card é sempre secundário. Os tokens
--color-primary-stronge--color-on-primary-strongsão iguais nos dois temas (não entram no bloco escuro). --color-on-primarycontinua no sistema (contadores, logotipo), mas o Assinar não o usa mais.- Nome do status
waiting(D-CM-084): o texto cadastrado emTermoTraducaoé “Aguardando recepção” (com “r” minúsculo); vem da API emstatus.name.
4.13 v5.18: mudanças do painel de Mensagens vindas da Mensageria
Fonte: Mensageria, 05 - Registro de Decisões v1.2 (D-MSG-021, D-MSG-023; seção 4), 02 - Especificação v1.2 (2.3 e 2.8.1) e 01 - Definição v1.2 (RN-MSG-002, 016 e 018), em Definições e especificações/Mensageria/.
Estado: na Central desde a v5.18 (D-CM-087). Fonte também na Central: Especificação v5.18 (2.5, 2.8, 2.9), Mapeamento v5.18 (4.8, 4.9), Cenários CT-MSG-05, 08, 15 e 23 a 25. Vale só para o painel de Mensagens. Escolhas do Designer a confirmar: E-CM-050 (campo authorIsMe, ícone só no card, cor do check-check, assunto do modal).
| # | Mudança | Até a v5.17 | Na v5.18 | Onde mexe |
|---|---|---|---|---|
| 1 | Assunto no cartão | Texto da última mensagem e “Há 15 min · Sandra”, sem assunto | Linha 1: assunto (uma linha, truncado) com a hora à direita; linha 2: “autor: texto da última mensagem”. Responde ao contexto perdido em respostas curtas | Back-end: POST /reply grava a leitura de quem respondeu (Mapeamento 4.9); campo subject (Conversa.Assunto) e authorIsMe (“Você”; E-CM-050) em conversations[] e subject no detalhe; front (card) |
| 2 | Selo “Respondida” | Existe, quando o médico já respondeu e a conversa voltou a ficar não lida | Retirado. A resposta nova é a última mensagem, com o autor, e o cartão volta a ficar não lido (borda e ícone de origem coloridos; a Central não usa o ícone de carta da Mensageria, E-CM-050) | Front (card) |
| 3 | Aviso de lida | Não existe | Quando a última mensagem é do médico (e não é de alerta do sistema), check (enviada) ou check-check (lida por pelo menos um dos outros) antes da hora; rótulos “Enviada” e “Lida” para leitor de tela. Campo readByOthers (`boolean | null) em conversations[], calculado por ConversaLeitura` (Mensageria, Mapeamento 4.1) |
| 4 | Ordem | Por estado de leitura; dentro de cada grupo, o prazo mais próximo e depois a mais recente | Por estado de leitura; dentro de cada grupo, o maior entre a última mensagem e o prazo, mais recente primeiro; empate: a conversa criada mais recentemente (RN-MSG-002). A Mensageria v1.3 põe o grau de urgência antes da data (seção 4.15) | Back-end (ORDER BY, Mapeamento 4.8; empate por Conversa.CriadoEmUtc); o resultado esperado de CT-MSG-08 não muda com a massa atual; novo CT-MSG-25 |
| 5 | Valor do estado “respondida” | replied | responded (é o valor do banco, Responded) | Back-end (status de conversations[], do detalhe e das respostas de POST .../read e .../reply), front e CT-MSG-15 da Central |
| 6 | Horário | Relativo (“Há 15 min”) | Continua relativo no painel; a Mensageria passa a usar a mesma regra nos cartões (D-MSG-032, v1.4; dentro da conversa segue data e hora). A regra do formato relativo foi definida na Mensageria v1.3 (D-MSG-028) e está pendente de versão da Central: seção 4.15, item 3 | — |
| 7 | Botão “Resolvido” | Estilo definido na Central | Secundário, com contorno, quando a Central adotar o padrão de botões (Design System, seção 12); o botão sai do card na v5.19 (seção 4.15, item 4) | CSS — feito na v5.17 (D-CM-085, seção 4.14) |
Não muda: borda e ícone de não lida em secondary-dark de 3 px, linha da clínica, type sempre Response, e resolver e descartar valendo para todos os destinatários.
4.12 v5.15 e v5.16: cores e nome do status vindos da API
Fonte: Especificação v5.15 e v5.16 (2.3, 2.6, 2.8, 2.9), Mapeamento v5.15 e v5.16 (4.1, 4.3), Design System de 27/10/2026 (seção 4), DT-016. Guia relacionado: Mudanças no Design System - guia para desenvolvimento.md, seção 3.14.
- Contrato (D-CM-073): em
appointmentseprocedures,statusdeixa de ser texto e vira objeto{ "domain": "finished", "name": "Finalizado", "colors": { "light": { "background": "#EDE7FA", "text": "#6A4FC4" }, "dark": { "background": "#302F52", "text": "#C0AFED" } } }. As regras do front (toggle, bordas, selo de atraso, horário do procedimento) usamdomain.namejá vem no idioma da clínica.colorsvem com os quatro valores ou não vem. - Banco: cores em
IpTerminologia.DomEstadoAgendaConsultaeIpTerminologia.DomEstadoAgendaProcedimento(chaveCodEstado; consultaA,D,G,J,M,X; procedimentoSCH,WTI,CKD,PRP,ADM,ASD,FNS,CNL); nome emTermoTraducao(Termo=CodEstado,Origem= nome da tabela). Base global: mesmas cores para todas as clínicas. As tabelas ainda não estão na Biblioteca de Schema (DDL). administered(D-CM-074): o status 3 deProcedureStatus()volta a seradministered(CodEstadoASD). Quem implementoucompleted(v5.4 a v5.14) troca o valor; quem ficou noadministeredda v4 mantém, mas confere a ordem de avaliação (seção 3.8).- Front, painel de Consultas: chip com
.chip-statuse avatar de iniciais com.avatar-status, passando as cores como variáveis locais (--st-bg-l,--st-fg-l,--st-bg-d,--st-fg-d) só depois de validar o formato#RRGGBB; sem cor válida, chip e avatar ficam neutros. No avatar, iniciais em--color-neutral-darkernos dois temas, sobre o fundo do status (D-CM-075). Trocar o tema troca o par sem recarregar. - Front, painel de Procedimentos (v5.16): o status também é chip
.chip-status, comstatus.colorsestatus.name(D-CM-079), na linha 2 do card, entre o local e as tags, com o horário entre parênteses logo depois do chip (E-CM-048). O avatar continua neutro (D-CM-077). Procedimento cancelado: nome, local, tags e clínica riscados (text-decoration: line-throughem cada elemento, não no card, porque o risco se propaga e não pode ser desfeito no chip); o chip “Cancelado” e o avatar ficam sem risco (D-CM-076, D-CM-077). O risco não é anunciado pelo leitor de tela. - Deploy (D-CM-080): back-end e front-end trocam o formato de
status(texto → objeto) no mesmo deploy, na Central e na Agenda do Médico; não há período com os dois formatos. - Indicadores (D-CM-081): o indicador
EstadoAgendaConsultadeIpTerminologia.Indicadoresserá descontinuado depois da implementação nova; a Central não o lê. - Nomes (D-CM-082): os textos de
TermoTraducaoem pt-BR são “Em atendimento”, “Em preparo” e “Em aplicação” (não “Em administração”). - i18n: saem do catálogo do front as chaves
status-*(2.3 e 2.6).
4.15 v5.19: mudanças vindas da Mensageria (v1.3 a v1.8)
Fonte: Mensageria 05 - Registro de Decisões v1.3 (D-MSG-025 a 028; seção 4), 01 - Definição v1.3 (RN-MSG-002 e 034), 02 - Especificação v1.3 (2.3.1, 2.3.8, 2.8.1) e Design System de 28/10/2026 (seção 13), em Definições e especificações/Mensageria/.
Estado: na Central desde a v5.19 (D-CM-088 e D-CM-089, 29/10/2026); a v5.20 (D-CM-090) renomeia o campo para urgencyLevel e o indicador de tempo para timeIndicator. Fonte também na Central: Especificação v5.19 (2.5, 2.9, i18n), Mapeamento v5.19 (4.8), Protótipo v5.19, Cenários CT-MSG-19, 26 a 29 e CT-ACES-11. Vale só para o painel de Mensagens. Os itens 1 e 2 dependem da criação da coluna GrauUrgencia (L-09 da Mensageria); o contrato e o chip foram confirmados pelo solicitante em 28/10/2026 (D-MSG-029). O domínio em IpTerminologia.Indicadores é GrauUrgencia (D-MSG-034), com as chaves do HL7 em minúsculas (routine, urgent, asap, stat; D-MSG-046, já aplicadas no banco pelo solicitante); a chave de TermoTraducao ainda será definida. Escolhas do Designer a confirmar: E-CM-051 (chip também no modal, serverNow na resposta, textos msg-ha-min, msg-ha-h e msg-grau-titulo).
| # | Mudança | Até a v5.18 | Na v5.19 | Onde mexe |
|---|---|---|---|---|
| 1 | Grau de urgência no cartão | Não existe | Chip só com o nome do grau, depois do chip do paciente e antes do de prazo, só quando a conversa tem grau (RN-MSG-034): Rotina, Urgente, Quanto antes ou Imediato (domínio HL7, D-MSG-039), com ícone flag, título “Grau de urgência: {nome}” e cor da seção 13 do Design System (Imediato sólido com --color-alert-fill; Quanto antes com fundo claro de erro e contorno; Urgente neutro; Rotina com contorno). Campo `urgencyLevel: { key: “routine | urgent |
| 2 | Ordem com o grau | Por estado de leitura; dentro de cada grupo, o maior entre a última mensagem e o prazo | Por estado de leitura; dentro de cada grupo, primeiro o grau (Imediato, Quanto antes, Urgente, Rotina e, por último, sem grau) e, dentro do mesmo grau, a regra atual (RN-MSG-002, D-MSG-026) | Back-end (ORDER BY, GrauUrgencia nulo conta como 0); CT-MSG-08 e CT-MSG-25 da Central |
| 3 | Horário relativo | ”Há 15 min”, sem regra definida | Regra (D-MSG-028), no fuso da clínica (DT-001, DT-005): mesmo dia e menos de 1 h: “Há x min”; mesmo dia: “Há x h”; outro dia (dia de calendário): data e hora. A Mensageria usa a mesma regra nos cartões (D-MSG-032, v1.4), e a data e hora fica só dentro da conversa. Detalhes ainda propostos: x inteiro por truncamento, mínimo 1 min, recálculo a cada atualização de 1 minuto (E-MSG-019) | Front (formatação do horário do card); novos textos em TermoTraducao nos três idiomas |
| 4 | Botão “Resolvido” no card | Secundário com contorno em todo card aberto (v5.17, D-CM-085) | Retirado do card. “Resolvido” e “Descartado” existem só no modal da conversa, com a mesma confirmação (D-CM-089; Mensageria D-MSG-047). Motivo: a leitura vem antes de encerrar, e um alerta não é resolvido para toda a equipe sem ser lido; os críticos de UX e do médico recomendaram a retirada | Front: remover o botão do card (card-action de conversa) e o aria-label “Resolvido: {assunto}”; o card fica com um só alvo de toque; endpoints e confirmação não mudam |
Não muda: o chip “Crítico”/“Atenção” de alertas de atendimento (D-CM-046), que segue leve e com outro sentido (o grau deixou de ter o nome “Crítica”, P-MSG-31 resolvida na Mensageria); o modal de mensagem, a confirmação de resolver e descartar, os endpoints de read, reply, resolve e dismiss, e a borda de não lida.
5. Internacionalização (v4.37 → v5.6)
Mudança da v5.6 (21/10/2026), back-end (D-CM-044; decisões transversais DT-011 e DT-012):
- O idioma de todo texto é o da clínica atual (
ClienteEmpresa.IdiomaOficial), inclusive as mensagens do sistema, que a Especificação v5.5 dizia traduzir “para o idioma do usuário”. Não há idioma por usuário. - Termo buscado em
TermoTraducao(Termo,Origem,Idioma) sem linha no idioma da clínica: o campo recebe a própria chave (Termo) e o back-end registra anomalia no log técnico comTermo,OrigemeIdioma. Não há queda para pt-BR nem para outro idioma. Se a implementação da v4 fazia queda para pt-BR, ela deve ser retirada. TermoTraducao.Termopassa avarchar(128)(Log de Mudanças, 21/10/2026); sem efeito nos termos usados pela Central.
Fonte: Especificação v5.5, blocos “Internacionalização” de cada painel. pt-BR é o idioma da certificação SBIS (D-CM-036); en-US e es-419 constam da especificação.
Chaves novas
| Chave | pt-BR | en-US | es-419 |
|---|---|---|---|
dica-primeira-consulta | 1ª Consulta | First visit | Primera consulta |
consulta-ha-tempo | há {t} | for {t} | hace {t} |
presc-restante | {h}h restantes | {h}h left | {h}h restantes |
presc-restante-min | {m}min restantes | {m}min left | {m}min restantes |
presc-atrasada-hm | {h}h{mm} atrasada | {h}h{mm} overdue | {h}h{mm} de atraso |
presc-atrasada-dias | {d} dias atrasada | {d} days overdue | {d} días de atraso |
presc-atrasada-min | {m}min atrasada | {m}min overdue | {m}min de atraso |
MSG_resolveConfirmTitle | Resolver conversa? | Resolve conversation? | ¿Resolver la conversación? |
MSG_resolveConfirmBody | A conversa será marcada como resolvida para todos os destinatários. | The conversation will be marked as resolved for all recipients. | La conversación se marcará como resuelta para todos los destinatarios. |
MSG_resolveConfirmOk | Resolver | Resolve | Resolver |
MSG_discardConfirmTitle | Descartar conversa? | Discard conversation? | ¿Descartar la conversación? |
MSG_discardConfirmBody | A conversa será descartada para todos os destinatários. | The conversation will be discarded for all recipients. | La conversación se descartará para todos los destinatarios. |
MSG_discardConfirmOk | Descartar | Discard | Descartar |
MSG_confirmCancel | Cancelar | Cancel | Cancelar |
proc-sem-tempo | sem tempo previsto | no planned time | sin tiempo previsto |
MSG_connectionLost | Sem conexão — dados atualizados às {hh:mm} | No connection — data updated at {hh:mm} | Sin conexión — datos actualizados a las {hh:mm} |
MSG_themeOptions | Tema / Automático (segue o sistema do aparelho) / Claro / Escuro | Theme / Automatic (follows the device setting) / Light / Dark | Tema / Automático (sigue la configuración del dispositivo) / Claro / Oscuro |
Também são novos os singulares “pendente” e “atrasada” dos cards de KPI nos três idiomas (o título “Alertas de prescrição” já existia); a tabela completa está na Especificação 2.2, bloco “Internacionalização”. Os textos de confirmação e “sem tempo previsto” são escolha do Designer (E-CM-021, a confirmar; ver também P-CM-041).
Chaves alteradas
| Chave | Antes | Agora |
|---|---|---|
painel-título (procedimentos) | Procedimentos na clínica / Procedures at the clinic / Procedimientos en la clínica | Pacientes em procedimento / Patients in procedure / Pacientes en procedimiento |
| KPI “assinar” | p/assinar (próx. 7 dias) — texto fixo | p/assinar (próx. {n} dias), com variante singular “próx. 1 dia”; en-US “to sign (next {n} days)”; es-419 “p/firmar (próx. {n} días)“ |
status-completo (en-US) | Completed (igual a Finalizado) | Complete. Na v5.15, as chaves status-* saem do catálogo: o nome vem da API (status.name, seção 4.12) |
toggle-meus (es-419, procedimentos) | Mios | Míos |
status-atendimento (en-US) | In consulation (erro de digitação) | In consultation |
MSG_searchPac (en-US) | Search Pacient… | Search patient… |
MSG_searchFoot (en-US) | Enter parte of … | Enter part of … |
MSG_searchFoot (es-419) | texto com “Ingrese parte del busque por nombre…“ | reescrito: “Ingrese parte del nombre, ID, nombre de la madre o fecha de nacimiento para filtrar” |
status-agendado (en-US) | Shceduled (erro de digitação) | Scheduled |
| KPI “atrasadas” (es-419) | atrasada | atrasadas |
Chave removida: chip-T_restante (“T RESTANTES”). Substituída pelas chaves presc-restante* e presc-atrasada-*.
6. Tema, cores e tokens
Fonte: Especificação 2.8; D-CM-027, D-CM-043; guia Mudanças no Design System - guia para desenvolvimento.md (não repetido aqui).
- A Central segue o Design System de 14/10/2026. Nenhum uso de token mudou na v5.5; só os valores (regra C8 e
neutral-pureclaro#526A90). Quem já implementou o Design System atualizado não tem trabalho adicional na Central, exceto, na v5.8, o anel de foco e os chips de urgência (seção 4.8). --color-on-primaryé o token do texto e dos ícones sobre--color-primary-pure(botão Assinar). Texto escuro sobre o verde, nos dois temas.- Status de agenda (v5.15 e v5.16): chip e avatar de iniciais da consulta e, desde a v5.16, chip de status do procedimento (D-CM-079) usam as cores que vêm da API em
status.colors, pelas classes.chip-statuse.avatar-statusdo Design System (seção 4; seção 4.12 deste guia).--color-status-waiting-bordercontinua na borda lateral. Até a v5.14, eram os tokens--color-status-*-bg/-fg; eles continuam no Design System como referência dos valores, mas o componente não os usa mais. --color-first-visitno ícone da 1ª Consulta.- Tags do cadastro: classe
.chip-tagcom--tag=ProgramaApoio.Cor. - Número do KPI de alertas: texto em
color-error-darkdesde a v5.9 (D-CM-054, D-CM-058; 6,3:1 no claro e 7,4:1 no escuro; antescolor-error-pure), não badge preenchido. Selo “Atrasado”: ver a seção 4.3. Contador do painel: badgecolor-neutral-lightercom textocolor-neutral-darker. - Barra de progresso:
neutral-dark; vermelha emerror-dark. - Faixa de sem conexão:
highlight-light,neutral-dark,neutral-lighter(Design System, seção 7). - v5.8 (26/10/2026): a Central passa a seguir o Design System de 26/10/2026, que só acrescentou o token
--color-field-changed(#467EE5, borda de campo alterado; a Central não tem campo editável e não o usa) e a seção 11 (estados de campo e foco). Nenhum valor existente mudou. Chips de urgência e anel de foco: seção 4.8.
7. Testes e massa de dados
Fonte: Cenários de Teste v5.11.md; CargaCMZero.xlsx; ScriptComplementarvCM.sql.
- v5.10 a v5.12 (escopo de clínicas): casos novos que dependem de massa proposta, ainda inexistente na carga (v5.12: um cliente de três clínicas, das quais o Dr. 9 atende em duas, e outro de uma só; a segunda clínica com outro
FusoHorarioOficial): CT-CONS-19 (consultas das clínicas dele, a da terceira clínica fora, linha de clínica e horário no fuso da clínica logada), CT-CONS-20 (troca de cliente), CT-PRES-19 (prescrições das clínicas dele, “Meus” e “Todos”, sem a da terceira), CT-PRES-21 (reagendamento de prescrição já assinada, D-CM-059), CT-PRES-22 (janelas de assinatura diferentes por clínica), CT-PRES-23 (o “hoje” da janela de revisão é o da clínica logada, com fusos −03:00 e −04:00), CT-PROC-14 (procedimentos das clínicas dele) e CT-MSG-22 (conversas das clínicas dele, linha de clínica, resposta gravada na clínica de origem e recusa de ação sobre conversa da terceira). A restrição dos demais profissionais à clínica escolhida não é testada na Central. - v5.8: CT-ACES-06 (foco: anel de 2 px; campo de busca com borda de 2 px) e CT-ACES-07 (chips leves e seus contrastes) têm novo resultado esperado; nenhum dado de massa muda.
- Os Cenários de Teste v5.5 cobrem os 4 painéis, os 4 KPIs, a busca e as exceções (tema, acessibilidade, faixa de sem conexão). Os resultados esperados estão em pt-BR; en-US e es-419 aparecem só onde há texto próprio a conferir.
- Data-base: 23/09/2026 12:00. Toda data relativa (“hoje”, “hoje+N”) gira em torno desse instante. A carga recalcula as datas a cada execução (
UPDATE DATAS, relativo aGETDATE()); em outro dia, os valores absolutos dos cenários se deslocam e precisam ser reconferidos. - Médicos da massa: IdChProfissional 11 (Craig Evans) e 9 (Gilliard Onório Santos).
Cuidados conhecidos com a massa e com o protótipo (não corrigidos):
- O
UPDATE DATASda planilha tem um erro de digitação (DATEAD) noUPDATE PEP(DataInicioUTC): o comando falha e o script para ali, e osUPDATEseguintes não rodam.- Além disso, o script não desloca nenhum
DhInfusaoFimUTC; a Agenda 138 é o exemplo visível (fim em 18/09, início em 23/09).
- Além disso, o script não desloca nenhum
- A aba
PrescricaoAssinaturada planilha tem colunasReassinareStatusque não existem no DDL deGescomClienteAlfa(a pergunta que isso motivou foi decidida em D-CM-050: a nova versão da prescrição nasce sem assinaturas). - A aba
IpParametroda planilha traz a definição dePrescricaoTempoRevisao(sem valor por clínica e sem uso); ela não deve ser criada (seção 2). - Na massa entregue, a prescrição 71 fica fora das listas, porque a assinatura 1030 (22/09 11:14) cai dentro da janela de revisão. A “massa alternativa da 71” (sem assinatura, para ter o caso vencido e urgente) usada em CT-PRES-11 e CT-KPI-04.2 é [PROPOSTA] do Designer, a validar com o solicitante — não é massa entregue. Outras lacunas: nenhum procedimento da massa resolve para “Completo” (CT-PROC-11 exige alterar a Agenda 138) e nenhuma prescrição tem
TempoAplicacaovazio ou zero. - 23 linhas da massa têm alta e
DhInfusaoFimUTCnulo: o resultado esperado éfinished. - O protótipo foi validado apenas em JSDOM/node, não num navegador real.
- O protótipo não testa
Situacao = 'V'em alguns status de procedimento e ainda compara o texto da busca com o prontuário (P-CM-042, P-CM-038): o Mapeamento é a referência, não o protótipo. Outras divergências conhecidas do protótipo: ele ordena as tags no front (a Especificação diz que o back-end já envia ordenado); en-US e es-419 só existem no protótipo para o que é novo ou alterado. (A borda e o ícone de conversa não lida emsecondary-darke o percentual da barra em 10 px eram divergências até a v5.6; foram decididos em D-CM-045 e a Especificação v5.7 já os descreve assim.) O chip “Crítico” da Especificação é o mesmo que a classe.chip-criticaldo protótipo e o que o KPI chama de “Urgentes”.
8. Decisões abertas que podem mudar o desenvolvimento
Fonte: Registro de Decisões v1.13. Nada aqui bloqueia a implementação do que está nas seções 2 a 6; são os pontos em que o código pode ser refeito se o solicitante decidir diferente. Cada “ideia do Designer” abaixo é invenção, sem decisão.
8.1 Escolhas do Designer a confirmar (implementar como descrito)
| Código | O que está implementado como proposta | Se mudar, afeta |
|---|---|---|
| E-CM-004 | Botões “Revisar”/“PEP” e toggles ativos com texto neutral-darker. (A parte dos chips e a E-CM-003, anel de foco, foram decididas em D-CM-046.) | Só CSS |
| E-CM-024 | Itens [PROPOSTA] da seção 11 do Design System: 2 px em “selecionado” e “com erro”, precedência entre estados abaixo de “erro” (erro antes de selecionado foi decidido, D-CM-049), :focus-visible | Só CSS |
| E-CM-018 | ”Administração iniciada” = Agenda.DhInfusaoIniUTC preenchido; retira só “a revisar” | SQL de 4.6 e 4.7 |
| E-CM-019 | ”Assinatura dentro da janela” = assinatura em data ≥ meia-noite local de (dia da aplicação − N); datetime sem fuso tratado como hora local da clínica (a confirmar com o time de banco) | SQL de 4.6 e 4.7 ({InicioJanelaRevisaoLocal}), conversão de fuso |
| E-CM-021 | Textos de confirmação, “sem tempo previsto” e “{d} dias atrasada” | Só i18n |
| E-CM-032 | Tabela {LimitesPorClinica} com uma linha por Clinica do banco do cliente, montada pela aplicação, com limites em UTC no fuso da clínica logada; a hora das assinaturas (datetime sem fuso) é lida como hora local da clínica logada | SQL de 4.6 e 4.7; serviço que monta os limites |
| E-CM-033 | Nome da clínica no card de mensagem pelo caminho Conversa.IdEmpresa → Clinica.IdEmpresa → Clinica.IdChClinica → Chave.Descricao; a condição de exibir o nome mudou na v5.12: “o médico atende em mais de uma clínica” (D-CM-067) | Contrato de conversations; query de 4.8 |
| E-CM-027 | Último critério de desempate das prescrições: id crescente, para o mesmo nome de paciente | ORDER BY do endpoint |
| E-CM-028 | Nome curto da clínica no card de consulta e de prescrição (ícone building-2 de 14 px, texto de 12 px neutral-pure), só quando o médico atende em mais de uma clínica (D-CM-066); campo clinic | Contrato de appointments e prescriptions; CSS do card |
| E-CM-029 | ”Consultas Hoje”, “Procedimentos Hoje”, “Alertas de Prescrição” e o toggle “Todos” seguem o escopo das clínicas em que o médico atende (D-CM-066) | Queries de 4.2, 4.4 e 4.7 (filtro por {ClinicasDoMedico}) |
8.2 Perguntas em aberto (P-CM)
| Código | Pergunta | Impacto provável no código |
|---|---|---|
| P-CM-003 | Confirmar que assinar uma prescrição na janela de revisão a tira da lista e baixa o número (D-CM-040). Atenção: o sistema atual tem RevisorIgualMedicoQueAssinou (padrão “N”), que impede o mesmo médico de assinar e revisar — vai em sentido contrário | Regra de 4.6 e 4.7 |
| P-CM-007 | attendanceMode deve ser objeto {code, label}, como na Agenda do Médico? (Ideia do Designer: sim, para reaproveitar o componente) | Contrato de appointments (procedures não tem attendanceMode) |
| P-CM-026 (a) | Resolver/descartar conversa sem trilha de auditoria (SBIS NGS1.07.03) — a mensageria pode ser tratada como canal auxiliar fora do SBIS? | Pode exigir auditoria nos endpoints resolve e discard |
| P-CM-035 | Lembrete: parâmetro do sistema atual que permite ou não que outros médicos assinem as prescrições do prescritor. Não foi localizado em ParametrosGemedLegado.csv; existem MedicoPodeRevisar, EnfermeiroPodeRevisar, FarmaceuticoPodeRevisar, RevisorIgualMedicoQueAssinou. Especificar em versão futura | Interação com “Todos” e com D-CM-040 |
| P-CM-036 | Nome e comportamento do item do Menu Lateral que abre a tela de Pacientes em procedimento (hoje “Pacientes na Clínica Hoje”). Ideia do Designer: “Pacientes em procedimento” | Menu Lateral (outra funcionalidade) |
| P-CM-037 | SBIS: (1) “Todos” e o médico assistente em “Meus” versus ECF.16.01(c); (2) card sem o médico prescritor versus ECF.17.01; (3) ECF.17.18 e os idiomas adicionais | Pode restringir “Todos” ou mudar o card |
| P-CM-038 | Especificar a chave id: da busca (contrato, banco, texto de ajuda, formato)? Ideia do Designer: especificar só o necessário para a demonstração e tirar o prontuário da busca comum | Endpoint patients/search |
| P-CM-039 | Prescrição “a assinar” com infusão iniciada aparece como “3h00 atrasada” (pode ser lido como “ainda não aplicada”); “a revisar” com infusão iniciada some. Ideias do Designer: (a) texto “Em aplicação sem assinatura”; (b) manter “a revisar” na lista com a marca “revisão não feita”; (c) avisar na tela de assinatura quando a aplicação já passou ou começou | Texto do card; exceção (b) de 4.6 |
| P-CM-040 | Cancelar a agenda ou marcar falta cancela a prescrição? As consultas de 4.6 e 4.7 não olham Agenda.Situacao, só Prescricao.Situacao e Agenda.RemovidoEm; uma vencida sem desfecho fica na lista e em “Urgentes”. Ideias do Designer: (a) excluir agendas fora de A/V; (b) vencidas há muitos dias no fim da lista; (c) aviso ao assinar uma vencida | SQL de 4.6 e 4.7; ordenação |
| P-CM-041 | Textos a avaliar, com alternativas (invenção do Designer): “atrasada há 3h00”; “duração da infusão não informada”; “Isso não pode ser desfeito.” na confirmação; “Infusão concluída” × “Alta dada” no lugar de Completo × Finalizado | Só i18n |
| P-CM-052 | Conversa.IdEmpresa deveria guardar o IdChClinica e não o IdEmpresa? O solicitante acha que o ideal seria, e adiou. Hoje guarda SegEmpresa.IdEmpresa (confirmado, D-CM-069) | Filtro de 4.8; mensageria (GescomMensageria.sql) |
| P-CM-042 | Divergências técnicas menores (itens 1 a 5): protótipo sem Situacao = 'V' em alguns status; progress nulo com dois significados; painel de procedimentos mostra ou não os cancelados; recálculo de “45min restantes” entre os polls de 5 min; “0min restantes” com exatamente 0 minuto. Os itens 6 a 8 e a segunda parte do 3 foram decididos em D-CM-052 | Detalhes do front e do contrato |
9. Rastreabilidade: mudança → decisão → documento
| Mudança | Decisão | Onde está a regra completa |
|---|---|---|
| Bloqueio de horário da Recepção fora da Central | D-CM-001 | Definição RN-CM-030; Mapeamento 4.1, 4.2 |
VIP vem de ProgramaApoioPaciente | D-CM-002 | Definição RN-CM-025; Mapeamento 4.1 |
| 1ª Consulta como ícone | D-CM-003, D-CM-016, D-CM-035 | Especificação 2.3, 2.8; Definição RN-CM-028 |
| Selo “Atrasado” único | D-CM-004 | Especificação 2.3 |
Mudanças do painel de Mensagens vindas da Mensageria (assunto no cartão, selo “Respondida” retirado, check/check-check, ordem, responded) | D-CM-087 (a partir de D-MSG-021 e D-MSG-023, Mensageria) | Seção 4.13; Especificação 2.5, 2.9 |
| Janela de revisão: parâmetro existente, padrão 1 dia | D-CM-006 | Mapeamento 4.6 |
| Faixa de sem conexão | D-CM-007, D-CM-027 | Especificação 2.7 |
| ”Atrasadas” não conta consulta em atendimento | D-CM-008 | Mapeamento 4.2 |
| Vigência de prontuário e diagnóstico | D-CM-009, D-CM-010 | Mapeamento 4.1 |
| Resolver/descartar vale para todos; sem desfazer; confirmação | D-CM-011, D-CM-014, D-CM-032 | Definição RN-CM-015; Especificação 2.5 |
| Acessibilidade | D-CM-012 | Especificação 2.8 |
| Prescrição vencida fica na lista e é urgente | D-CM-013, D-CM-024 | Definição RN-CM-011, RN-CM-020; Mapeamento 4.6, 4.7 |
Progresso por TempoAplicacao | D-CM-015, D-CM-020, D-CM-034 | Mapeamento 4.3 |
| ”há 1h20” na consulta em atendimento | D-CM-017 | Especificação 2.3; Mapeamento 4.1 |
| Subtexto “X pendentes (Y atrasadas)“ | D-CM-018 | Especificação 2.2 |
| Painel “Pacientes em procedimento” | D-CM-019 | Especificação 2.6 |
| Item do Menu Lateral que abre a tela de Pacientes em procedimento | D-CM-031 (nome do item em P-CM-036) | Menu Lateral (outra funcionalidade) |
| Seletor de tema no menu do avatar | sem D-CM; Design System, seção 6 | Especificação 2.1. Persistência da escolha não decidida |
Agenda.Data descontinuada | DT-002 | Decisões Transversais; Log de Mudanças Estruturais (10/10/2026) |
| Vigência de tag por data, inclusiva | D-CM-021 | Mapeamento 4.1 |
| Ordem das tags | D-CM-022 | Mapeamento 4.1; Especificação 2.3 |
| Janelas em dias de calendário | D-CM-023, D-CM-037 | Mapeamento 4.6, 4.7 |
| Prescrição sem agenda fora das listas | D-CM-025 | Mapeamento 4.6, 4.7 |
hoursRemaining truncado | D-CM-026 | Mapeamento 4.7 |
| Escopo “Meus” e colaboração em “Todos” | D-CM-028 | Especificação 2.4 |
firstTime em procedimentos | D-CM-029 | Mapeamento 4.3 |
| Status de procedimento em ordem | D-CM-030 | Mapeamento 4.3, 4.4 |
| ”A assinar” inclui vencidas; falha de processo é da Recepção | D-CM-033 | Definição RN-CM-020 |
Prontuário fora dos critérios da busca (já era assim); id: só na certificação; idioma | D-CM-036 | Especificação 2.1, 2.10 |
| Total de Procedimentos Hoje inclui finalizados (esclarecimento, sem mudança de query) | D-CM-038 | Mapeamento 4.4 |
| Administração iniciada retira só “a revisar” | D-CM-039 | Mapeamento 4.6, 4.7 |
| Assinatura na janela dispensa revisão | D-CM-040 | Mapeamento 4.6, 4.7 |
| Textos de tempo e atraso | D-CM-041 | Especificação 2.4 |
Contrato: Response, User | System, startTime “HH:mm”, completed/finished (na v5.15, administered) | D-CM-042, D-CM-074 | Especificação 2.9 |
Status como objeto { domain, name, colors }, cores das tabelas DomEstadoAgenda* | D-CM-073 | Especificação 2.3, 2.9; Mapeamento 4.1, 4.3 |
Avatar: iniciais neutral-darker sobre a cor do status | D-CM-075 | Especificação 2.3, 2.8 |
| Procedimento cancelado com textos riscados | D-CM-076, D-CM-077 | Especificação 2.6 |
| Status do procedimento em chip | D-CM-079, E-CM-048 | Especificação 2.6, 2.8 |
Troca do formato de status no mesmo deploy | D-CM-080 | Especificação 2.9 |
Indicador EstadoAgendaConsulta descontinuado depois | D-CM-081 | Mapeamento, “Tabelas novas” |
| Nomes “Em atendimento”, “Em preparo”, “Em aplicação” | D-CM-082 | Especificação 2.3, 2.6 |
| Nome “Aguardando recepção” | D-CM-084 | Especificação 2.3, 2.6 |
| Botões pela seção 12 do Design System | D-CM-085, D-CM-086 | Especificação 2.8 |
| Painel de Mensagens alinhado à Mensageria | D-CM-087, E-CM-050 | Especificação 2.5, 2.9; Mapeamento 4.8 |
| Alinhamento ao Design System de 14/10 | D-CM-043 | Especificação 2.8 |
| Idioma da clínica e tradução sem queda para pt-BR | D-CM-044 | Especificação 2.9 e i18n |
Conversa não lida em secondary-dark; percentual da barra em 10 px | D-CM-045 | Especificação 2.5, 2.6 e 2.8 |
Anel de foco de 2 px; chips de urgência leves; token --color-field-changed | D-CM-046 | Especificação 2.3, 2.4 e 2.8; Design System 4a e 11 |
| Desempate das prescrições pelo nome do paciente | D-CM-047, E-CM-027 | Definição RN-CM-011; Especificação 2.4 e 2.9; Mapeamento 4.7 |
| Erro antes de selecionado na precedência dos campos | D-CM-049 | Design System 11 |
| Nova versão de prescrição nasce sem assinaturas; Central em todas as clínicas do cliente (revisto na v5.12 por D-CM-066) | D-CM-050, D-CM-052, E-CM-028, E-CM-029 | Definição RN-CM-020 e RN-CM-032; Especificação 2.3, 2.4 e 2.9; Mapeamento 4.1 e 4.7 |
| Ordem das mensagens confere com ECF.17.04 | D-CM-051 | Especificação 2.10 |
CHECK de Mensagem.Tipo só Response | D-CM-052 | Mapeamento 4.9; Log de Mudanças Estruturais |
| Selo “Atrasado” e número do KPI mais leves; “há 1h20” leve | D-CM-053, D-CM-054, D-CM-058 | Especificação 2.2, 2.3 e 2.8 |
| ”45min restantes” abaixo de 1 hora | D-CM-055 | Especificação 2.4 |
| Chips “Crítico”/“Atenção” em peso regular (400) | D-CM-056 | Especificação 2.4 e 2.8 |
Campo em repouso com neutral-light (contraste aceito) | D-CM-057 | Especificação 2.8; Protótipo |
| Prescrição já assinada não é assinada de novo; só volta a “a revisar” | D-CM-059 | Definição RN-CM-020; Cenários (CT-PRES-21) |
Médico vê agendas, prescrições e mensagens de todas as clínicas do cliente (revisto na v5.12 por D-CM-066); janelas por clínica; clinic em procedures | D-CM-060, D-CM-061 | Definição RN-CM-032 e RN-CM-020; Especificação 2.2 a 2.6 e 2.9; Mapeamento 4.1 a 4.8; Cenários (CT-PRES-22, CT-PROC-14, CT-MSG-22) |
| “Hoje” e fim do dia das janelas de prescrição no fuso da clínica logada; N e S por clínica | D-CM-062, E-CM-032 | Definição RN-CM-020 e RN-CM-032; Mapeamento 4.6 e 4.7; Cenários (CT-PRES-23) |
| Rótulo do alerta e “Em Tratamento” com a clínica logada | D-CM-063 | Especificação 2.2 e 2.9; Mapeamento 4.5 e 4.6 |
Card de mensagem com a clínica; campo clinic em conversations | D-CM-064, E-CM-033 | Especificação 2.5 e 2.9; Mapeamento 4.8; Cenários (CT-MSG-22) |
Ligação das clínicas: ClienteEmpresa → SegEmpresa → Clinica → IpParametroChave | D-CM-065 | Mapeamento, início da Seção 4 |
Médico vê só as clínicas em que atende (Central e Agenda); linha de clínica quando atende em mais de uma; {ClinicasDoMedico}; perda de acesso | D-CM-066, D-CM-067, D-CM-068, D-CM-070 | Definição RN-CM-032; Especificação 2.2 a 2.6 e 2.9; Mapeamento, início da Seção 4 e 4.1 a 4.8; Cenários (CT-CONS-19, CT-PRES-19, CT-PROC-14, CT-MSG-22) |
| Grau de urgência no cartão, ordem pelo grau, horário relativo e botão “Resolvido” fora do card, no painel de Mensagens (v5.19) | D-CM-088 e D-CM-089 (Central); D-MSG-025 a 028, 046 e 047 (Mensageria) | Mensageria: Definição RN-MSG-002 e 034; Especificação 2.3.8 e 2.8.1; Design System, seção 13; este documento, seção 4.15 |
Mudanças sem código D-CM próprio neste documento (ids inteiros, tags como objetos, FusoHorarioOficial, RemovidoEm): estão no Histórico de Versões da Especificação e do Mapeamento, a partir da v5.0.
Histórico de Versões
- v1.19 (29/10/2026) — Guia fechado: a série v5 foi fechada na v5.20 e foi para desenvolvimento (a pedido do solicitante). Sem mudança de conteúdo técnico; só o cabeçalho (destino “v5.20” em vez de “v5.14”, pasta
Histórico/, situação). As mudanças da nova versão estão no guia da v6. - v1.18 (29/10/2026) — Destino passa à série v5.20 (Registro v1.19). Nomes técnicos (D-CM-090): na seção 4.15, o campo do grau é
urgencyLevel(eraurgency); o chip “Crítico”/“Atenção” dos painéis de Consultas e de Prescrições é otimeIndicator(valores propostoscritical,attention,normal; classeschip-criticalechip-attention, anteschip-urgenteechip-atencao). A contagemurgentdo endpoint de alertas de prescrição não muda. - v1.17 (29/10/2026) — Destino passa à série v5.19 (Registro v1.18). Seção 4.15: deixa de ser “pendente” e passa a descrever a v5.19; chaves do grau em minúsculas (D-MSG-046); novo item 4, o botão “Resolvido” sai do card (D-CM-089); item 7 da seção 4.13 e seção 9 ajustados.
- v1.16 (28/10/2026) — Seção 4.15, item 1 (e 2): o grau da Mensageria passa ao domínio HL7 (Rotina, Urgente, Quanto antes, Imediato;
urgency: { key, name }; chip só com o nome; D-MSG-039). A ordem passa a Imediato, Quanto antes, Urgente, Rotina e sem grau. - v1.15 (28/10/2026) — Seção 4.15 atualizada para a Mensageria v1.4: o horário relativo vale também nos cartões da Mensageria (D-MSG-032); contrato do grau e chip confirmados (D-MSG-029); domínio
GrauUrgencia(D-MSG-034). Item 6 da seção 4.13 ajustado. - v1.14 (28/10/2026) — Nova seção 4.15, “Pendente de versão da Central”: três mudanças do painel de Mensagens vindas da Mensageria v1.3 (grau de urgência no cartão, ordem pelo grau, regra do horário relativo, D-MSG-025 a 028); itens 4 e 6 da seção 4.13 apontam para ela; seção 9 com uma linha. Nenhuma mudança já implementada na v5.18 foi alterada.
- v1.13 (28/10/2026) — Destino passa à série v5.18 (Registro v1.17). A seção 4.13 deixa de ser “pendente”: as mudanças do painel de Mensagens vindas da Mensageria estão na Central v5.18 (D-CM-087), com a coluna “Onde mexe” ajustada (
subject,authorIsMe, empate da ordem, CT-MSG-25). E-CM-049 confirmada (D-CM-086). Seção 9 com as novas decisões. - v1.12 (28/10/2026) — Destino passa à série v5.17 (Registro v1.16). Nova seção 4.14: botões pela seção 12 do Design System (D-CM-085, E-CM-049) e nome “Aguardando recepção” (D-CM-084). Na seção 4.13, o item 7 (Resolvido com contorno) fica marcado como feito; os outros seis seguem pendentes de pedido. Seção 9 com as novas decisões.
- v1.11 (27/10/2026) — Nova seção 4.13, “Pendente de versão da Central”: sete mudanças do painel de Mensagens decididas na Mensageria (assunto no cartão, selo “Respondida” retirado,
check/check-checkcomreadByOthers, nova ordem,responded, horário relativo mantido, botão “Resolvido” com contorno). Marcadas como ainda fora das especificações da Central, por pedido do solicitante. A seção 4.5 aponta para ela e a seção 9 ganha uma linha. Nenhuma outra seção muda; destino segue a série v5.16. - v1.10 (27/10/2026) — Destino passa à série v5.16 (Registro v1.15). Seção 4.12: status do procedimento em chip (D-CM-079, E-CM-048), avatar neutro confirmado (D-CM-077), troca de formato no mesmo deploy (D-CM-080), indicador
EstadoAgendaConsultadescontinuado depois (D-CM-081) e nomes deTermoTraducao(D-CM-082). Nomes atualizados nas demais seções; seção 9 com as novas decisões. - v1.9 (27/10/2026) — Destino passa à série v5.15 (Registro v1.14). Nova seção 4.12:
statuscomo objeto{ domain, name, colors }, tabelasDomEstadoAgendaConsultaeDomEstadoAgendaProcedimento,administeredno lugar decompleted, avatar com iniciaisneutral-darker, procedimento cancelado com textos riscados (D-CM-073 a D-CM-076). Seções 1, 3.1, 3.8, 4.6, 5, 6 e 9 ajustadas. - v1.8 (26/10/2026) — Destino passa à série v5.14 (Registro v1.13). Corrige a v1.7: quem perde o acesso a uma clínica perde as agendas e as prescrições dela, não os pacientes (D-CM-070); “Em Tratamento”, adesão e busca seguem sem filtro por clínica. Nome do campo de
SegEmpresafixado no do DDL (D-CM-071).Clinica.FusoHorariodescontinuada (D-CM-072). Sem mudança de código em relação à v1.7. Saem P-CM-050 e P-CM-053; segue em aberto P-CM-052. - v1.7 (26/10/2026) — Destino passa à série v5.13 (Registro v1.12). E-CM-034 vira decisão (D-CM-067); perda de acesso a uma clínica (D-CM-068);
Conversa.IdEmpresae fonte do fuso confirmados (D-CM-069). Sem mudança de código em relação à v1.6, exceto: a Agenda do Médico passa a ter o mesmo filtro por{ClinicasDoMedico}(Mapeamento da Agenda v1.10). P-CM-050 reduzida ao nome do campo; novas P-CM-052 e P-CM-053; sai P-CM-051. - v1.6 (26/10/2026) — Destino passa à série v5.12 (Registro v1.11). Nova mudança descrita: o médico vê só as clínicas em que atende, em vez de todas as clínicas do cliente (D-CM-066): tabela
{ClinicasDoMedico}e filtros em todos os endpoints (seção 3.1),{LimitesPorClinica}só com as clínicas do médico (seção 3.2), linha de clínica quando atende em mais de uma, casos de teste com cliente de três clínicas. Novas escolhas a confirmar: E-CM-034. Sai a questão P-CM-049; entra P-CM-051. - v1.5 (26/10/2026) — Destino passa à série v5.11 (Registro v1.10). Novas mudanças descritas: “hoje” e fim do dia das janelas de prescrição no fuso da clínica logada (D-CM-062, seção 3.2);
{LimitesPorClinica}com uma linha porClinica(E-CM-032); rótulo do alerta e “Em Tratamento” com a clínica logada (D-CM-063, seção 4.2); card de mensagem com a clínica e campoclinicemconversations(D-CM-064, E-CM-033; seções 3.1, 4.5 e nova 4.11); ligação das clínicas porSegEmpresaeClinica(D-CM-065, seção 2); casos de teste novos da v5.10 e v5.11 descritos na seção 7 (lacuna da v1.4). Seção 8: saem E-CM-030 (D-CM-061), E-CM-031 e P-CM-048; novas E-CM-032, E-CM-033, P-CM-049 e P-CM-050. v1.4 arquivada emPara Desenvolvedores/Histórico/Central do Médico - mudanças da v5 - guia para desenvolvimento v1.4.md. - v1.4 (26/10/2026) — Destino passa à série v5.10 (Registro v1.9). Novas mudanças descritas: escopo do cliente inteiro para agendas, prescrições e mensagens do médico (D-CM-060, seções 3.1, 4.5 e 4.10); janelas de prescrição por clínica (D-CM-060, E-CM-031, seção 3.2);
clinicemprocedures(E-CM-030); chips em peso regular (D-CM-056); campo em repouso comneutral-light(D-CM-057); prescrição já assinada não volta a “a assinar” (D-CM-059); “45min restantes” aprovado (D-CM-055); selo e número do KPI aprovados (D-CM-058). Corrigido na seção 4.2 o número do KPI de alertas, que ainda diziacolor-error-pure. Seção 8: saem E-CM-020, E-CM-025, E-CM-026, P-CM-043, P-CM-046 e P-CM-047; novas E-CM-030, E-CM-031 e P-CM-048; E-CM-028 e E-CM-029 ajustadas. v1.3 arquivada emPara Desenvolvedores/Histórico/Central do Médico - mudanças da v5 - guia para desenvolvimento v1.3.md. - v1.3 (26/10/2026) — Destino passa à série v5.9 (Registro v1.8). Novas mudanças descritas: desempate por nome do paciente (D-CM-047); campo
clinice escopo de todas as clínicas do cliente (D-CM-050, E-CM-028, E-CM-029); nova versão de prescrição nasce sem assinaturas (D-CM-052);CHECKdeMensagem.Tiposó comResponse(D-CM-052, seção 2); selo “Atrasado” e número do KPI mais leves (D-CM-054, E-CM-026; seções 4.3 e 6, nova 4.9). Seção 8: saem E-CM-022, E-CM-023, P-CM-008, P-CM-026 (e), P-CM-044 e P-CM-045; novas E-CM-026 a E-CM-029, P-CM-046 e P-CM-047. v1.2 arquivada emPara Desenvolvedores/Histórico/Central do Médico - mudanças da v5 - guia para desenvolvimento v1.2.md. - v1.2 (26/10/2026) — Destino passa à série v5.8. Novas mudanças descritas: v5.7 (D-CM-045: conversa não lida em
secondary-dark, percentual da barra em 10 px) e v5.8 (D-CM-046: anel de foco de 2 px, campo de busca com borda de 2 px, chips de urgência leves, token--color-field-changedsem uso na Central). Seção 8.1: E-CM-003 resolvida, E-CM-004 reduzida a botões e toggles, novas E-CM-023 a E-CM-025; seção 8.2: novas P-CM-043 a P-CM-045. Revisão por Dois Críticos (26/10/2026): corrigidos o recuo do anel do card, o item 7 da seção 7 (divergências já decididas em D-CM-045) e a ressalva da seção 6. v1.1 arquivada emPara Desenvolvedores/Histórico/Central do Médico - mudanças da v5 - guia para desenvolvimento v1.1.md. - v1.1 (21/10/2026) — Destino passa à série v5.6: seção 5 ganha a mudança de idioma e tradução (D-CM-044, DT-011, DT-012).
- v1.0 (20/10/2026) — Primeira versão. Revisão por Dois Críticos (técnico e negócio/UX) antes de fechar: achados aplicados (itens que já valiam na v4 e estavam como mudança, tabela de botões e avatar, chaves de i18n, detalhes do seed, massa de teste). Compara a série v4 (Definição v4.42, Especificação v4.37, Mapeamento v4.48) com a série v5.5 (Definição, Especificação, Protótipo, Mapeamento e Cenários v5.5; Registro de Decisões v1.4), a pedido do solicitante: “gere um documento com as diferenças que criamos desde a abertura da v5 para facilitar ao time de desenvolvimento os ajustes necessários.”