Skip to main content

Exames — visão geral

O módulo de Exames é a tela principal do Portal 2.0: a worklist (/exams) onde médicos, técnicos, gestores e o restante da equipe encontram, filtram e operam os exames do dia a dia — abrir o laudário, atribuir médico, mudar status/prioridade/unidade, duplicar, cancelar, anexar, comentar, exportar e, para quem administra a plataforma, cadastrar um exame manualmente.

Worklist de exames (perfil administrator): filtros, chips de status/prioridade e a linha do exame de teste

Este levantamento cobre a interface (Angular) do repositório mm-pacs-portal-main-interface, branch integration/with-fixlaudo, testada no ambiente https://task4.srv1812538.hstgr.cloud/.

:::caution Pendência deste levantamento — exame de teste sem médico nem imagens O único exame cadastrado na unidade "Unidade Central Docs" ("Paciente Teste Docs Portal2", modalidade CR) foi criado manualmente, sem vínculo com um estudo PACS por trás — por isso ele não tem médico atribuído e a coluna SE/IMG (séries/imagens) fica vazia. Isso é uma limitação real do ambiente de teste, não um bug.

Atualização 24/09/2026: a captura original desta página (contra um task4 desatualizado) mostrava Abrir Laudário, Exibir áudio e Imprimir protocolo desabilitados nesse exame. Depois de atualizar o task4 para develop, Abrir Laudário passou a aparecer habilitado (comportamento correto, batendo com o código) e Exibir áudio passou a não aparecer (em vez de aparecer desabilitado) — só Imprimir protocolo segue de fato desabilitado. Abrir o laudário falha por um bug real de schema GraphQL da própria branch develop, documentado em Laudário — não mais pela falta de imagem em si. Não foi possível, portanto, capturar o laudário, o modal de áudio nem o fluxo de laudação a partir desta tela. A confirmar — responsável: time de frontend; data: 24/09/2026: repetir a captura das ações que dependem de laudo/imagem depois que o bug de schema GraphQL do laudário for corrigido, com um exame real (ingerido via PACS) ou com um segundo exame de teste que tenha ao menos um laudo associado. :::

O que este levantamento cobre e o que fica de fora​

O escopo pedido foi só o núcleo da worklist — listagem, filtros, criação manual de exame e as ações da linha — excluindo explicitamente telas que já têm dossiê próprio ou que pertencem a outro momento do roadmap:

Módulo (com dossiê próprio)Pasta no códigoPor que não entra aqui
Anexosfeatures/exam-attachmentsJá documentado — o ícone de anexo da worklist só abre o modal descrito lá.
Comentáriosfeatures/exam-commentsFora de escopo desta tarefa; o popover de comentário da linha só é citado de passagem.
Achado críticofeatures/exam-critical-findingIdem — citado só como gatilho na barra de ações da linha.
Laudário (relatório)pages/exam-report, features/exam-report-*Rota própria (/exams/:examId/report); tem escopo grande o bastante para um levantamento à parte.
Áudio do examewidgets/exam-audio-list, features/exam-audio*, report-audio-recorderIdem — módulo próprio.

O que este levantamento cobre, dentro de src/app/pages/exam, widgets/{exam-worklist, exam-filter-bar} e as features/exam-* restantes:

Páginas deste módulo​

PáginaCobre
Listagem de exames (worklist)Colunas, paginação/ordenação, estados, seleção em lote e a barra de ações em lote
Filtros da worklistBarra de filtros, diálogo de filtro avançado, diálogos de unidade/usuário/especialidade e o botão Adicionar exame
Criar exameO modal Adicionar exame — campos, validações e o que acontece ao salvar
Ações da linhaÍcones fixos da linha, o menu Abrir opções, a barra de ações expandida e os ~15 diálogos de ação individual

Quem acessa o quê — visão rápida​

A permissão-base de tudo é exam:read: sem ela, permissionGuard('exam:read') (src/app/app/routes/exam.routes.ts:13) bloqueia a própria rota /exams. Lendo o catálogo de papéis do backend (mm-pacs-portal-main-api/package/identity/authorization/core/models/identity-system-role.ts), dos 9 perfis de teste deste levantamento (docs-usuarios.md), dois não têm exam:read: typist (só permissões de laudo — report:*) e financial (só as 4 permissões mínimas de leitura de usuário/unidade/grupo/tenant, nenhuma de exame). Para esses dois perfis, /exams não deveria abrir. A confirmar — responsável: time de frontend; data: 24/09/2026: este levantamento não testou navegando com typist nem financial — só leu o catálogo de permissões.

PermissãoQuem tem (catálogo do backend)O que libera nesta tela
exam:readadministrator, manager, doctor, technician, resident, read_only, requestorVer a worklist. Sem ela, a rota /exams não abre.
exam:createsó administrator (linha 81 de identity-system-role.ts, dentro de ADMINISTRATOR_PERMISSIONS)Botão Adicionar exame na barra de filtros.
patient:read-identityadministrator e doctor (não os demais)Ver o nome real do paciente na coluna Paciente. Sem ela, a coluna mostra *** — confirmado navegando com read_only (ver Filtros da worklist).
exam:writeadministrator, manager, doctor, technician, requestorBase para boa parte das ações de escrita da linha (ver Ações da linha).
exam:deleteadministrator (manager recebe via reconciled(), ver nota abaixo)Nível "gestor do exame" (isExamManager, exam-policy.ts:116) — cancelar exame concluído, editar SLA, trocar equipe em exame compartilhado, etc.

Mesma worklist pelo perfil read_only: nome do paciente mascarado, sem botão Adicionar exame, sem ícones de comentário/anexo

:::info Achado de código: manager recebe permissões por um caminho diferente de administrator O array MANAGER_PERMISSIONS existe em identity-system-role.ts mas não é usado: o método IdentitySystemRoleCatalog.reconciled() (linha 317), que é o que efetivamente popula o banco na inicialização (ApplyIdentitySystemRoleCatalogService.apply()), substitui as permissões do manager por todo o catálogo atribuível, menos report:sign — deliberadamente, segundo o comentário do código, para o gestor administrar a unidade sem se autodeclarar radiologista ao abrir o laudário. Na prática, isso significa que manager, neste ambiente, tem exam:create, exam:delete e a maior parte das permissões "de administrador" sobre exame, mesmo sem constar explicitamente na lista MANAGER_PERMISSIONS. Não testamos isso navegando (ver pendência acima sobre perfis não testados) — é uma leitura de código (identity-system-role.ts:308-328). :::

Contexto de negócio (legado) — Bitrix​

Os cards abaixo (funil de features do sistema legado, entityTypeId 1320) descrevem a intenção de produto original do módulo de Exames. Eles não são fonte de comportamento atual — o Portal 2.0 reimplementa o domínio em NestJS/Angular, e várias regras do legado mudaram ou não foram portadas (ver as ressalvas em cada página de feature e a nota "Fonte de verdade" em Módulo Exame — visão geral (Back)). Listamos aqui só id e título, como contexto histórico:

CardTítulo
522F-001 — Ingestão e criação de exame (múltiplas fontes)
526F-002 — Worklist, listagem e consulta de exame
530F-003 — Marcação clínica e preparação do estudo
534F-004 — Motivos (catálogo) e exclusão/restauração de exame
542F-006 — Impressão, download e liberação de exame
546F-007 — Relacionamentos entre exames (anterior, complemento, conjugado, duplicado)
550F-008 — Atribuição de médico/residente ao exame
554F-009 — Catálogo clínico (modalidade / subespecialidade) e edição de metadados
566F-012 — Catálogo de especialidade/subespecialidade entre unidades
570F-013 — Imagem-chave do exame
574F-014 — Laudário do exame: abertura, preparação e protocolo
582F-S01 — Compartilhamento de exame entre unidades
594F-S04 — Substituição de variáveis do exame/empresa no HTML do laudo (impressão)

(Os ids 1296–1314 no funil são duplicatas dessas mesmas features, mais três cards de outros módulos — anexos duplicados, anexar arquivos e SLA — encontrados na mesma faixa de ids e fora do escopo desta doc.)

Relacionado​