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

CamadaO que mudaSeção
BancoCampo 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 — contratoIds 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 valores3.1
Back-end — regrasJanelas 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 ordem3.2 a 3.9
FrontPainel “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; acessibilidade4
i18nChaves novas, alteradas e removidas (tabelas completas)5
Tema e coresNa 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
TestesCenários v5.5; data-base 23/09/2026 12:00; limites da planilha de carga7

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).

ItemAntes (v4)Agora (v5.5)Decisão
Fuso da clínicaClienteEmpresa.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ógicaNão havia regra geralToda 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 filtrarRegra de todo o sistema (início da Seção 4 do Mapeamento)
Agenda.DataOs Mapeamentos v4.x já filtravam o dia por DhAgendaIniUTC; Agenda.Data não aparece nelesSerá 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 tocamDT-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 PrescricaoTempoRevisaoD-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 = 7D-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 4D-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.

EndpointCampoAntesAgora
appointments, procedures, prescriptions, patients/searchid, patient.iduuidinteiro. 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
conversationspatient.iduuidinteiro (Conversa.IdPaciente; o Mapeamento v4.48 escrevia Conversa.PacienteId). patient é null também quando o paciente tem RemovidoEm
appointments, procedurestagslista de stringslista de objetos { code, description, color }, já na ordem de exibição (seção 3.6)
appointmentselapsedMinutes, overtimenão existiamnovos (seção 3.5)
appointmentsfirstTimejá existia, como char 'S'/'N' de Agenda.PrimeiraConsulta; a tag 1a_consulta também vinha em tagsbooleano (= 'S'); a 1ª Consulta sai de tags (D-CM-003)
appointments, procedurespatient.preferredNameo Mapeamento v4.48 escrevia prefferedName (erro de digitação)conferir que o JSON emite preferredName
appointmentsstartTime, endTimejá eram “HH:mm”sem mudança (a mudança de formato vale só para procedures)
proceduresstartTimeISO em UTC”HH:mm” no fuso da clínica, como em appointments (D-CM-042)
proceduresfirstTimenão existianovo, booleano (Agenda.PrimeiraConsulta = 'S', D-CM-029)
proceduresprogresspercentual de Agenda.Tempopercentual de Prescricao.TempoAplicacao; null quando a prescrição não tem tempo de aplicação (seção 3.9)
proceduresstatusscheduled, waiting, checked, preparation, administering, administered/completed (a v4 era inconsistente entre Especificação e Mapeamento), finished, canceledNa 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)
prescriptionsminutesRemainingnão existianovo, inteiro, negativo quando a hora da aplicação já passou
prescriptionshoursRemaininghorasinteiro truncado em direção a zero (D-CM-026)
prescriptionsisPreferredReviewersó 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)
prescriptionstypejanela contínuafiltrado pelas janelas de calendário (seção 3.2)
prescriptionsordenaçãohoursRemaining crescenteminutesRemaining 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)
appointmentsclinicnão existianovo (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)
prescriptionsclinicnão existianovo (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)
proceduresclinicnão existianovo (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)
conversationsescoposó 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)
conversationsclinicnão existianovo (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-alertstoSignWindowDaysnão existianovo: 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-todaytotaljá 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-todaydelayed—não conta consulta em atendimento (D-CM-008)
conversationssourceTypeperson | systemUser | System (D-CM-042)
conversations/{id}messages[].typeinitial | reply | updatevalor ú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; o INNER JOIN com 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 em IpParametroChave) e as consultas de 4.6 e 4.7 a ligam à prescrição por a.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ção Q, F, E ou C não aparece.
  • Prescricao.IdAgenda obrigatório: prescrição sem agenda fica fora (D-CM-025).
  • Agenda.RemovidoEm IS NULL e Paciente.RemovidoEm IS NULL.
  • Escopo “Meus”: Prescricao.IdChProfissionalMed = {médico logado} ou Paciente.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” para toSignNext7Days e para a parcela de assinatura de urgent, 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 da DhAgendaIniUTC de cada prescrição e do N da clínica dela; o fuso é o da clínica logada, {FusoWindowsLogin}).
  • PrescricaoAssinatura.Data e Prescricao.DataAssinaturaPrescricao são datetime sem 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 usa AT TIME ZONE com 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 / 60 com divisão inteira do T-SQL (trunca em direção a zero; 90 min → 1, −90 min → −1).
  • Ordenação da lista sem type: minutesRemaining crescente, desempate pelo nome do paciente (D-CM-047) e, para o mesmo nome, por id crescente (E-CM-027, a confirmar). Vencidas ficam no topo. O hoursRemaining sozinho 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çãoRegraExemplo (pt-BR)
Restante, menos de 60 minminutos”45min restantes” (D-CM-055)
Restante, 60 min ou maishoras truncadas”8h restantes”, “123h restantes”
Atrasada, menos de 60 minminutos”40min atrasada”
Atrasada, de 60 min a 47h59horas e minutos, minutos com dois dígitos”1h59 atrasada”, “3h00 atrasada”
Atrasada, 48 h ou maisdias, 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()) quando DhAtendimentoIniUTC não é nulo e DhAtendimentoFimUTC é nulo (consulta em atendimento); NULL nos demais estados.
  • overtime = elapsedMinutes > Agenda.Tempo; false se 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' (via Agenda.IdPaciente) em appointments e em kpis/appointments-today já 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:
    1. ProgramaApoioPaciente por IdPaciente — atribuição no cadastro do paciente; tags de Finalidade D (administrativas), inclusive VIP.
    2. PEPProgramaApoioPaciente → PEP por PEP.IdPaciente — atribuição no prontuário; tags de Finalidade A (assistenciais). A chave de PEPProgramaApoioPaciente é IdPEP (um registro de PEP leva uma tag).
  • Se a mesma tag vier das duas origens, aparece uma vez.
  • VIP vem de ProgramaApoioPaciente; Paciente.PacienteVip não é lido (D-CM-002). Remover o UNION com Paciente.PacienteVip (bit = 1 virava a tag vip) e o filtro de vigência antigo (DataInicio <= hoje, DataFim nulo ou >= hoje, que não tratava a hora). VIP é exceção ao filtro MostrarEm e à 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/DataFim nã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): Finalidade A antes de D; 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):

OrdemStatusCondição
1canceledSituacao IN ('C','D','F','I','M','O','T')
2finishedSituacao = 'V' e DhAtendimentoFimUTC preenchido
3consultationSituacao = 'V', DhAtendimentoIniUTC preenchido, DhAtendimentoFimUTC nulo
4checkedSituacao = 'V' e DhAtendimentoIniUTC nulo
5waitingSituacao = 'A' e DhChegadaUTC preenchido
6scheduledSituacao = 'A' e DhChegadaUTC nulo

ProcedureStatus():

OrdemStatusCondição
1canceledSituacao IN ('C','D','F','I','M','O','T')
2finished (alta)Situacao = 'V' e DhAtendimentoFimUTC preenchido
3administered (infusão terminada, sem alta)Situacao = 'V', DhInfusaoFimUTC preenchido, DhAtendimentoFimUTC nulo
4administeringSituacao = 'V', DhInfusaoIniUTC preenchido, DhInfusaoFimUTC nulo
5preparationSituacao = 'V', DhAtendimentoIniUTC preenchido, DhInfusaoIniUTC nulo
6checkedSituacao = 'V' e DhAtendimentoIniUTC nulo
7waitingSituacao = 'A' e DhChegadaUTC preenchido
8scheduledSituacao = '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 chave id: (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 NULL também em Agenda, Paciente e PEP nas duas partes de PatientInTreatmentCount e no TreatmentPlanAdherenceCount (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 guia Tema 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

CardO que muda
Consultas HojeSubtexto 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 HojeO 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çãoSubtexto “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 cardsFalha 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

ItemAntesAgoraDecisão
1ª Consultachip 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 íconetitle nativodica (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 pxD-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 cardD-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 ordenadasD-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-fillD-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ósticouma listatodos os diagnósticos oncológicos ativos; um com PEP que começa depois de hoje não vemD-CM-009, D-CM-010
Bloqueio de horário—nunca aparece, em nenhum toggleRN-CM-030
Selo de atraso (marcador)”🔴 15min” (emoji)texto “Atrasado · 15min”, sem emojiEspecificação 2.3
Finalizadas esmaecidasfundo mais claro e opacidade reduzidafundo 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 usam Id + IdEmpresa, e toda linha nova das ações grava o IdEmpresa da 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" com aria-modal, aria-labelledby (título) e aria-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”.
  • sourceType agora é User | System; messages[].type é sempre Response. O front que testava person/system ou initial/reply/update precisa 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 pedia primary-pure no ícone e secondary-pure na borda (1,7:1 e 2,0:1 sobre branco, abaixo de 3:1); o protótipo já usava secondary-dark. Lida: ícone neutral-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 e responded, decididos na Mensageria; descritos na seção 4.13.

4.6 Painel Pacientes em procedimento

ItemAntesAgoraDecisão
Nome do painel”Procedimentos na clínica""Pacientes em procedimento”. O card do KPI continua “Procedimentos Hoje”D-CM-019
Ícone de 1ª Consultanão haviamesmo ícone, mesma dica e mesma regra de teclado do painel de Consultas, quando firstTime é trueD-CM-029
Statusadministered/completed (confuso) — na v5.15, administeredAgendado, Aguardando recepção, Recepcionado, Em preparo, Em aplicação, Completo (infusão terminada, sem alta), Finalizado (alta registrada), CanceladoD-CM-030
Barra de progressobase Agenda.Temposó 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-darkD-CM-015, E-CM-008
Sem tempo de aplicaçãobarrasem barra e sem percentual; texto discreto “sem tempo previsto”D-CM-034
Horário do cardISO em UTCstartTime “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-off e MSG_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-medium nã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-offset de 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.css traz a regra); quem usa --ring local pode trocar. Nunca outline: none sem 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" com aria-live="polite"; erros em role="alert".
  • Busca: role="combobox" com aria-expanded, aria-controls, aria-activedescendant; lista role="listbox", itens role="option"; setas navegam, Enter seleciona, Esc fecha; “nenhum paciente encontrado” em região aria-live.
  • prefers-reduced-motion: reduce desliga 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 → fundo secondary-light, texto neutral-darker. Resolvido: texto primary-pure → contorno 1 px neutral-light, texto neutral-dark. Descartado: preenchido error-pure com texto branco → transparente, contorno 1 px error-dark, texto error-dark. Avatar do painel de Procedimentos: primary-light/primary-dark → neutral-light/neutral-dark. Toggle ativo: ganha contorno 1 px neutral-dark, texto neutral-darker (era secondary-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 px neutral-dark, sem anel (v5.8; border: 1px mais box-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 ícone triangle-alert em color-error-dark; Atenção (12 h a 24 h) = fundo color-highlight-light, sem contorno, texto e ícone clock em color-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 texto neutral-darker. O ícone continua, para a urgência não depender só da cor. Botões “Revisar”/“PEP” e toggles ativos usam texto neutral-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 clinic vem preenchido, mostrar na última linha do card o ícone Lucide building-2 (14 px) e o nome curto, em 12 px color-neutral-pure, sem chip. clinic é null quando 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), depois id. O protótipo usa localeCompare('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-error do 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 usar neutral-pure no 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-2 de 14 px e nome curto em 12 px color-neutral-pure, sem chip) quando conversations[].clinic vem preenchido; null com 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 clinic de conversations e 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ãoAté a v5.16Na v5.17
Assinar (card de prescrição)Preenchido primary-pure, texto --color-on-primarySecundário: transparente, contorno 1 px neutral-pure, texto neutral-dark
Revisar (card de prescrição), PEP (card de procedimento)Fundo secondary-light, texto neutral-darkerSecundário (como acima)
Resolvido (card de mensagem e modal)Terciário: contorno 1 px neutral-light, texto neutral-darkSecundário (como acima)
Responder (modal de mensagem)Fundo secondary-light, texto neutral-darkerPrimário: --color-primary-strong (#007A13), texto --color-on-primary-strong (branco), 5,5:1 nos dois temas
Cancelar (caixa de confirmação)TerciárioSecundário
Resolver (caixa de confirmação)Preenchido primary-pure, texto --color-on-primaryPrimário (verde escuro)
Descartado (modal) e Descartar (caixa de confirmação)Destrutivo: transparente, contorno e texto error-darkSem 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-strong e --color-on-primary-strong são iguais nos dois temas (não entram no bloco escuro).
  • --color-on-primary continua no sistema (contadores, logotipo), mas o Assinar não o usa mais.
  • Nome do status waiting (D-CM-084): o texto cadastrado em TermoTraducao é “Aguardando recepção” (com “r” minúsculo); vem da API em status.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çaAté a v5.17Na v5.18Onde mexe
1Assunto no cartãoTexto da última mensagem e “Há 15 min · Sandra”, sem assuntoLinha 1: assunto (uma linha, truncado) com a hora à direita; linha 2: “autor: texto da última mensagem”. Responde ao contexto perdido em respostas curtasBack-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)
2Selo “Respondida”Existe, quando o médico já respondeu e a conversa voltou a ficar não lidaRetirado. 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)
3Aviso de lidaNão existeQuando 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 (`booleannull) em conversations[], calculado por ConversaLeitura` (Mensageria, Mapeamento 4.1)
4OrdemPor estado de leitura; dentro de cada grupo, o prazo mais próximo e depois a mais recentePor 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
5Valor do estado “respondida”repliedresponded (é 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
6HorárioRelativo (“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—
7Botão “Resolvido”Estilo definido na CentralSecundá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 appointments e procedures, status deixa 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) usam domain. name já vem no idioma da clínica. colors vem com os quatro valores ou não vem.
  • Banco: cores em IpTerminologia.DomEstadoAgendaConsulta e IpTerminologia.DomEstadoAgendaProcedimento (chave CodEstado; consulta A, D, G, J, M, X; procedimento SCH, WTI, CKD, PRP, ADM, ASD, FNS, CNL); nome em TermoTraducao (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 de ProcedureStatus() volta a ser administered (CodEstado ASD). Quem implementou completed (v5.4 a v5.14) troca o valor; quem ficou no administered da v4 mantém, mas confere a ordem de avaliação (seção 3.8).
  • Front, painel de Consultas: chip com .chip-status e 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-darker nos 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, com status.colors e status.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-through em 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 EstadoAgendaConsulta de IpTerminologia.Indicadores será descontinuado depois da implementação nova; a Central não o lê.
  • Nomes (D-CM-082): os textos de TermoTraducao em 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çaAté a v5.18Na v5.19Onde mexe
1Grau de urgência no cartãoNão existeChip 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: “routineurgent
2Ordem com o grauPor estado de leitura; dentro de cada grupo, o maior entre a última mensagem e o prazoPor 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
3Horário relativo”Há 15 min”, sem regra definidaRegra (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
4Botão “Resolvido” no cardSecundá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 retiradaFront: 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 com Termo, Origem e Idioma. 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.Termo passa a varchar(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

Chavept-BRen-USes-419
dica-primeira-consulta1ª ConsultaFirst visitPrimera consulta
consulta-ha-tempohá {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_resolveConfirmTitleResolver conversa?Resolve conversation?¿Resolver la conversación?
MSG_resolveConfirmBodyA 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_resolveConfirmOkResolverResolveResolver
MSG_discardConfirmTitleDescartar conversa?Discard conversation?¿Descartar la conversación?
MSG_discardConfirmBodyA 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_discardConfirmOkDescartarDiscardDescartar
MSG_confirmCancelCancelarCancelCancelar
proc-sem-temposem tempo previstono planned timesin tiempo previsto
MSG_connectionLostSem conexão — dados atualizados às {hh:mm}No connection — data updated at {hh:mm}Sin conexión — datos actualizados a las {hh:mm}
MSG_themeOptionsTema / Automático (segue o sistema do aparelho) / Claro / EscuroTheme / Automatic (follows the device setting) / Light / DarkTema / 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

ChaveAntesAgora
painel-título (procedimentos)Procedimentos na clínica / Procedures at the clinic / Procedimientos en la clínicaPacientes em procedimento / Patients in procedure / Pacientes en procedimiento
KPI “assinar”p/assinar (próx. 7 dias) — texto fixop/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)MiosMí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)atrasadaatrasadas

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-pure claro #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-status e .avatar-status do Design System (seção 4; seção 4.12 deste guia). --color-status-waiting-border continua 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-visit no ícone da 1ª Consulta.
  • Tags do cadastro: classe .chip-tag com --tag = ProgramaApoio.Cor.
  • Número do KPI de alertas: texto em color-error-dark desde a v5.9 (D-CM-054, D-CM-058; 6,3:1 no claro e 7,4:1 no escuro; antes color-error-pure), não badge preenchido. Selo “Atrasado”: ver a seção 4.3. Contador do painel: badge color-neutral-lighter com texto color-neutral-darker.
  • Barra de progresso: neutral-dark; vermelha em error-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 a GETDATE()); 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):

  1. O UPDATE DATAS da planilha tem um erro de digitação (DATEAD) no UPDATE PEP (DataInicioUTC): o comando falha e o script para ali, e os UPDATE seguintes 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).
  2. A aba PrescricaoAssinatura da planilha tem colunas Reassinar e Status que não existem no DDL de GescomClienteAlfa (a pergunta que isso motivou foi decidida em D-CM-050: a nova versão da prescrição nasce sem assinaturas).
  3. A aba IpParametro da planilha traz a definição de PrescricaoTempoRevisao (sem valor por clínica e sem uso); ela não deve ser criada (seção 2).
  4. 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 TempoAplicacao vazio ou zero.
  5. 23 linhas da massa têm alta e DhInfusaoFimUTC nulo: o resultado esperado é finished.
  6. O protótipo foi validado apenas em JSDOM/node, não num navegador real.
  7. 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 em secondary-dark e 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-critical do 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ódigoO que está implementado como propostaSe mudar, afeta
E-CM-004Botõ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-024Itens [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-visibleSó 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-021Textos de confirmação, “sem tempo previsto” e “{d} dias atrasada”Só i18n
E-CM-032Tabela {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 logadaSQL de 4.6 e 4.7; serviço que monta os limites
E-CM-033Nome 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 pacienteORDER BY do endpoint
E-CM-028Nome 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 clinicContrato 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ódigoPerguntaImpacto provável no código
P-CM-003Confirmar 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árioRegra de 4.6 e 4.7
P-CM-007attendanceMode 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-035Lembrete: 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 futuraInteração com “Todos” e com D-CM-040
P-CM-036Nome 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-037SBIS: (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 adicionaisPode restringir “Todos” ou mudar o card
P-CM-038Especificar 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 comumEndpoint patients/search
P-CM-039Prescriçã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çouTexto do card; exceção (b) de 4.6
P-CM-040Cancelar 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 vencidaSQL de 4.6 e 4.7; ordenação
P-CM-041Textos 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 × FinalizadoSó i18n
P-CM-052Conversa.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-042Divergê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-052Detalhes do front e do contrato

9. Rastreabilidade: mudança → decisão → documento

MudançaDecisãoOnde está a regra completa
Bloqueio de horário da Recepção fora da CentralD-CM-001Definição RN-CM-030; Mapeamento 4.1, 4.2
VIP vem de ProgramaApoioPacienteD-CM-002Definição RN-CM-025; Mapeamento 4.1
1ª Consulta como íconeD-CM-003, D-CM-016, D-CM-035Especificação 2.3, 2.8; Definição RN-CM-028
Selo “Atrasado” únicoD-CM-004Especificaçã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 diaD-CM-006Mapeamento 4.6
Faixa de sem conexãoD-CM-007, D-CM-027Especificação 2.7
”Atrasadas” não conta consulta em atendimentoD-CM-008Mapeamento 4.2
Vigência de prontuário e diagnósticoD-CM-009, D-CM-010Mapeamento 4.1
Resolver/descartar vale para todos; sem desfazer; confirmaçãoD-CM-011, D-CM-014, D-CM-032Definição RN-CM-015; Especificação 2.5
AcessibilidadeD-CM-012Especificação 2.8
Prescrição vencida fica na lista e é urgenteD-CM-013, D-CM-024Definição RN-CM-011, RN-CM-020; Mapeamento 4.6, 4.7
Progresso por TempoAplicacaoD-CM-015, D-CM-020, D-CM-034Mapeamento 4.3
”há 1h20” na consulta em atendimentoD-CM-017Especificação 2.3; Mapeamento 4.1
Subtexto “X pendentes (Y atrasadas)“D-CM-018Especificação 2.2
Painel “Pacientes em procedimento”D-CM-019Especificação 2.6
Item do Menu Lateral que abre a tela de Pacientes em procedimentoD-CM-031 (nome do item em P-CM-036)Menu Lateral (outra funcionalidade)
Seletor de tema no menu do avatarsem D-CM; Design System, seção 6Especificação 2.1. Persistência da escolha não decidida
Agenda.Data descontinuadaDT-002Decisões Transversais; Log de Mudanças Estruturais (10/10/2026)
Vigência de tag por data, inclusivaD-CM-021Mapeamento 4.1
Ordem das tagsD-CM-022Mapeamento 4.1; Especificação 2.3
Janelas em dias de calendárioD-CM-023, D-CM-037Mapeamento 4.6, 4.7
Prescrição sem agenda fora das listasD-CM-025Mapeamento 4.6, 4.7
hoursRemaining truncadoD-CM-026Mapeamento 4.7
Escopo “Meus” e colaboração em “Todos”D-CM-028Especificação 2.4
firstTime em procedimentosD-CM-029Mapeamento 4.3
Status de procedimento em ordemD-CM-030Mapeamento 4.3, 4.4
”A assinar” inclui vencidas; falha de processo é da RecepçãoD-CM-033Definição RN-CM-020
Prontuário fora dos critérios da busca (já era assim); id: só na certificação; idiomaD-CM-036Especificação 2.1, 2.10
Total de Procedimentos Hoje inclui finalizados (esclarecimento, sem mudança de query)D-CM-038Mapeamento 4.4
Administração iniciada retira só “a revisar”D-CM-039Mapeamento 4.6, 4.7
Assinatura na janela dispensa revisãoD-CM-040Mapeamento 4.6, 4.7
Textos de tempo e atrasoD-CM-041Especificação 2.4
Contrato: Response, User | System, startTime “HH:mm”, completed/finished (na v5.15, administered)D-CM-042, D-CM-074Especificação 2.9
Status como objeto { domain, name, colors }, cores das tabelas DomEstadoAgenda*D-CM-073Especificação 2.3, 2.9; Mapeamento 4.1, 4.3
Avatar: iniciais neutral-darker sobre a cor do statusD-CM-075Especificação 2.3, 2.8
Procedimento cancelado com textos riscadosD-CM-076, D-CM-077Especificação 2.6
Status do procedimento em chipD-CM-079, E-CM-048Especificação 2.6, 2.8
Troca do formato de status no mesmo deployD-CM-080Especificação 2.9
Indicador EstadoAgendaConsulta descontinuado depoisD-CM-081Mapeamento, “Tabelas novas”
Nomes “Em atendimento”, “Em preparo”, “Em aplicação”D-CM-082Especificação 2.3, 2.6
Nome “Aguardando recepção”D-CM-084Especificação 2.3, 2.6
Botões pela seção 12 do Design SystemD-CM-085, D-CM-086Especificação 2.8
Painel de Mensagens alinhado à MensageriaD-CM-087, E-CM-050Especificação 2.5, 2.9; Mapeamento 4.8
Alinhamento ao Design System de 14/10D-CM-043Especificação 2.8
Idioma da clínica e tradução sem queda para pt-BRD-CM-044Especificação 2.9 e i18n
Conversa não lida em secondary-dark; percentual da barra em 10 pxD-CM-045Especificação 2.5, 2.6 e 2.8
Anel de foco de 2 px; chips de urgência leves; token --color-field-changedD-CM-046Especificação 2.3, 2.4 e 2.8; Design System 4a e 11
Desempate das prescrições pelo nome do pacienteD-CM-047, E-CM-027Definição RN-CM-011; Especificação 2.4 e 2.9; Mapeamento 4.7
Erro antes de selecionado na precedência dos camposD-CM-049Design 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-029Definiçã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.04D-CM-051Especificação 2.10
CHECK de Mensagem.Tipo só ResponseD-CM-052Mapeamento 4.9; Log de Mudanças Estruturais
Selo “Atrasado” e número do KPI mais leves; “há 1h20” leveD-CM-053, D-CM-054, D-CM-058Especificação 2.2, 2.3 e 2.8
”45min restantes” abaixo de 1 horaD-CM-055Especificação 2.4
Chips “Crítico”/“Atenção” em peso regular (400)D-CM-056Especificação 2.4 e 2.8
Campo em repouso com neutral-light (contraste aceito)D-CM-057Especificação 2.8; Protótipo
Prescrição já assinada não é assinada de novo; só volta a “a revisar”D-CM-059Definiçã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 proceduresD-CM-060, D-CM-061Definiçã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ínicaD-CM-062, E-CM-032Definiçã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 logadaD-CM-063Especificação 2.2 e 2.9; Mapeamento 4.5 e 4.6
Card de mensagem com a clínica; campo clinic em conversationsD-CM-064, E-CM-033Especificação 2.5 e 2.9; Mapeamento 4.8; Cenários (CT-MSG-22)
Ligação das clínicas: ClienteEmpresa → SegEmpresa → Clinica → IpParametroChaveD-CM-065Mapeamento, 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 acessoD-CM-066, D-CM-067, D-CM-068, D-CM-070Definiçã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 (era urgency); o chip “Crítico”/“Atenção” dos painéis de Consultas e de Prescrições é o timeIndicator (valores propostos critical, attention, normal; classes chip-critical e chip-attention, antes chip-urgente e chip-atencao). A contagem urgent do 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-check com readByOthers, 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 EstadoAgendaConsulta descontinuado depois (D-CM-081) e nomes de TermoTraducao (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: status como objeto { domain, name, colors }, tabelas DomEstadoAgendaConsulta e DomEstadoAgendaProcedimento, administered no lugar de completed, avatar com iniciais neutral-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 SegEmpresa fixado no do DDL (D-CM-071). Clinica.FusoHorario descontinuada (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.IdEmpresa e 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 por Clinica (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 campo clinic em conversations (D-CM-064, E-CM-033; seções 3.1, 4.5 e nova 4.11); ligação das clínicas por SegEmpresa e Clinica (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 em Para 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); clinic em procedures (E-CM-030); chips em peso regular (D-CM-056); campo em repouso com neutral-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 dizia color-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 em Para 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 clinic e 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); CHECK de Mensagem.Tipo só com Response (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 em Para 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-changed sem 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 em Para 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.”