Anexos (Attachment) — visão geral
O módulo de Anexos cobre os arquivos vinculados a um exame — pedido médico, exame anterior, laudo externo, resultado, documento do paciente, termo de consentimento e outros — e a via de upload para quem não tem login no Portal 2.0. Não existe uma tela própria de "lista de anexos": os anexos vivem dentro do modal de anexos do exame, aberto a partir do ícone de clipe na worklist ou no laudário, e dentro da página pública de upload por convite, aberta a partir de um link compartilhado fora do Portal.
:::caution Pendência deste levantamento — sem exame de teste na unidade
O ambiente de testes (https://task4.srv1812538.hstgr.cloud/) apresentou indisponibilidade
persistente da API (502 em /v1/auth/session e /v1/auth/login) por boa parte desta
verificação; depois que ela voltou, o login funcionou normalmente com o perfil administrator. O
bloqueio real acabou sendo outro: a worklist (/exams) da unidade "Unidade Central Docs" não
retornou nenhum exame em nenhum filtro de período testado (24h/48h/7 dias/30 dias, com e sem
"Assinados") — e as duas telas deste módulo (modal de anexos e convite externo) só abrem a partir
de um exame concreto. Sem exame, não há linha para clicar. A única captura possível sem depender de
exame foi o estado "Link inválido" da página pública, obtida abrindo /external-attachments sem
token (ver Convite de anexo externo). O
restante do conteúdo abaixo — rotas, guards, permissões, regras e os textos exatos de tela — foi
confirmado lendo o código-fonte (componentes, guards de rota, funções de política e as chaves
de tradução em public/i18n/pt-BR.json) da branch integration/with-fixlaudo de
mm-pacs-portal-main-interface, não por navegação real. A confirmar — responsável: time de frontend; data: 24/09/2026. Refazer este levantamento com um exame de teste cadastrado na unidade,
para: (1) capturar as telas listadas na tabela de páginas abaixo, incluindo os estados "vê"/"não
vê" de cada perfil; (2) confirmar visualmente que o comportamento lido no código é o que a tela
realmente mostra.
:::
Este levantamento cobre a interface (Angular) do repositório mm-pacs-portal-main-interface,
branch integration/with-fixlaudo. O contrato de API correspondente já está documentado em
Anexos (Attachment) — visão geral, back; esta seção
documenta a experiência de tela — quem vê o quê, o que cada ação faz e como o modal se comporta.
As duas vias, na tela
Páginas deste módulo
| Página | Cobre |
|---|---|
| Anexos do exame | Modal de anexos (ExamAttachmentsComponent) aberto a partir da worklist (/exams) e do laudário (/exams/:examId/report) — upload, listagem, reclassificação e exclusão |
| Convite de anexo externo | Criação do link (dentro do modal acima) e a página pública /external-attachments, sem login, onde o terceiro externo efetivamente anexa os arquivos |
Onde cada capacidade vive
O modal de anexos (app-exam-attachments) é o mesmo componente nos dois pontos de entrada — só
muda quem o abre e com quais inputs:
| Ponto de entrada | Rota | Componente que abre o modal | readOnly | canDelete |
|---|---|---|---|---|
| Ícone de clipe na linha da worklist | /exams | ExamWorklistComponent (src/app/widgets/exam-worklist/ui/exam-worklist.component.html:903) | sempre false | canDeleteAttachments(exam) — gestor do exame (ver Anexos do exame) |
| Ícone de anexos no laudário | /exams/:examId/report | ExamReportPageComponent (src/app/pages/exam-report/ui/exam-report-page.component.html:664) | readOnly() = exame assinado ou falha ao checar assinatura | !readOnly() |
A criação do convite de anexo externo acontece dentro do mesmo modal (menu do botão de anexar), não em uma tela separada — só aparece quando a unidade do exame libera anexo externo (ver Convite de anexo externo).
Quem acessa — resumo (confirmado no código, não testado navegando)
| Capacidade | Regra no código | Fonte |
|---|---|---|
Ver/abrir a worklist (/exams), pré-requisito para tudo abaixo | permissionGuard('exam:read') | src/app/app/routes/exam.routes.ts:13 |
| Ver o ícone de anexar/anexos na linha da worklist | exam:add-attachment no escopo da unidade do exame (ou platform admin) | canAttachToExam, src/app/entities/exam/lib/exam-policy.ts:182-184 |
| Excluir um anexo (dentro do modal, aberto pela worklist) | gestor do exame: platform admin, ou exam:update e exam:delete na unidade do exame; em exame concluído, só platform admin | canDeleteAttachments, src/app/widgets/exam-worklist/ui/exam-worklist.component.ts:1013 |
| Excluir um anexo (dentro do modal, aberto pelo laudário) | qualquer usuário que chegou à tela, desde que o exame não esteja assinado (!readOnly()) | exam-report-page.component.html:667 |
| Criar um link de anexo externo | não estar em modo readOnly e a unidade ter externalAttachmentsEnabled = true (preferência, padrão false) | canCreateExternalInvitation, exam-attachments.component.ts:194-198 |
Abrir a página pública /external-attachments e enviar arquivos | qualquer pessoa com o link do convite — sem login | app.routes.ts:59-65 (rota sem canActivate) |
v1 (legado) restringia anexar a PROPRIETARIO/GESTOR/MEDICO/TECNICO/RESIDENTE/DIGITADOR; a v2
não distingue papel — qualquer usuário com a permissão granular exam:add-attachment no escopo da
unidade do exame anexa, independente do nome do papel atribuído a ele. Nos 9 perfis de teste deste
ambiente (docs-usuarios.md), isso deveria se traduzir em administrator, manager, doctor,
technician, resident e typist vendo o ícone, e read_only, requestor e financial não —
mas isso não foi confirmado navegando neste levantamento — a "Unidade Central Docs" não tinha
nenhum exame cadastrado, então não havia uma linha de exame para testar com cada um dos 9 perfis.
A confirmar — responsável: time de frontend; data: 24/09/2026.
Fora do escopo desta interface
O legado (mm-pacs-portal-frontend, fora deste levantamento) tinha telas/ações para anexos
duplicados (anexo_original_id), duplicação de anexos entre exames na replicação, conciliação via
Clinux e geração de PDF de imagens-chave/laudo (cards Bitrix SPA 1320, entityTypeId 1320: F-006
"Anexar documentos via link externo com token temporário" #618, F-008 "Gerenciar anexos
duplicados" #626, F-S01 "Armazenar e Persistir Anexos do Exame" #634, F-S04 "Duplicar e Conciliar
Anexos entre Exames" #644, F-S05 "Gerar PDF de Laudo / Imagens-Chave e Relatório de Logs" #648).
Nenhuma dessas capacidades tem tela correspondente no Portal 2.0 atual — o próprio back-end já
registra que os pacotes lidos (clinical-media,
external-attachment-invitation) não implementam anexos duplicados nem geração de PDF (ver
visão geral do módulo — back, seção "Fora do escopo").
Trate esses cards como contexto histórico do sistema legado, nunca como especificação do
comportamento atual.
O botão Imprimir e o botão Salvar Alterações do modal de anexos aparecem desabilitados de propósito (ver Anexos do exame) — não são telas ausentes, são funcionalidades do legado que o time decidiu não portar ainda.