Módulo Laudo (Report) — visão geral
O módulo de laudo é o núcleo clínico do Portal 2.0: cobre a digitação e edição do laudo de um
exame, a assinatura (própria, complementar, por residente) e a correção pós-assinatura, as
transições de status e reatribuição, o controle de concorrência de quem está editando um laudo, as
máscaras de laudo (templates de conteúdo por modalidade/sexo/BIRADS), os modelos de cabeçalho e
rodapé usados na composição do PDF, a geração e reprocessamento do PDF do laudo, a revisão por
pares (peer review) e a entrega do laudo assinado para sistemas de integração externos (RIS/PACS).
Ele vive inteiramente no pacote diagnosis/report do backend (NestJS), branch
integration/with-fixlaudo.
O envio do laudo por e-mail (paciente e destinatários avulsos) não faz parte deste levantamento — já está documentado em Notification — Enviar laudo por e-mail; esta página só faz o link cruzado.
Fonte de verdade. Este levantamento foi feito inteiramente a partir do código atual (branch
integration/with-fixlaudo, pacotepackage/diagnosis/report) e dos testes em__test__. Não documentamos SQL, migration nem nome de tabela/coluna — só o contrato observável (rota, permissão, validação, erro, regra de negócio). Cartões de negócio do Bitrix (funil 562, features F-001 a F-013 e F-S002) descrevem o sistema legado (mm-pacs-portal-api, rotas/laudo/*,/mascara/*, tabelastb_exame_laudo*,tb_exame_mascara*) e foram usados só como pista de intenção de produto — o campo que mapearia "status vs. código real" está vazio em todos os cartões consultados (714, 718, 722, 726, 730, 734, 738, 742, 756, 760, 768), então nenhuma regra de negócio foi copiada do Bitrix sem confirmação direta no código NestJS atual. Onde o comportamento do legado e do v2 divergem (por exemplo,SafeIDhabilitado por credencial do ator em vez de config global; motor de PDF único viaComposeDiagnosisReportPdfServiceem vez de dois motores concorrentes), esta página descreve apenas o v2.
Prefixo de rotas e versionamento
Como nos demais módulos, a API usa versionamento por URI (VersioningType.URI, versão padrão
1): toda rota deste módulo é servida sob /v1/... (ex.: /v1/reports, /v1/report-masks).
Todos os controllers aplicam JwtAuthenticationGuard + AuthorizationGuard na classe, e a maior
parte também aplica DiagnosisAuthorizationTransactionInterceptor (abre a transação de banco já
dentro do escopo de autorização resolvido).
Arquitetura
Capacidades documentadas
- Criar, editar, consultar e excluir laudo —
POST /reports,PATCH /reports/:id(conteúdo e/ou campos do exame),DELETE /reports/:id,GET /reports,GET /reports/:id,GET /reports/metadata/count, verificação de assinatura. - Assinar e corrigir o laudo —
POST /reports/:id/signatures(padrão, complementar, por residente) ePOST /reports/:id/revisions(correção ortográfica pós-assinatura). - Status, reatribuição e reavaliação —
PATCH /reports/:id/status,PATCH /reports/:id/owner,DELETE /reports/:id/resident,POST /reports/:id/reevaluations,GET /report-action-reasons. - Edição concorrente do laudo (lock) —
POST /exams/:id/report-editor,POST /exams/:id/report-editor/renewals,DELETE /exams/:id/report-editor. - Máscaras de laudo — CRUD, cópia, resolução automática por estudo e
imagens embutidas (
/report-masks,/report-mask-images,/report-mask-image-usages). - Compartilhamento e máscara padrão — compartilhar/remover compartilhamento com unidades e usuários, listar máscaras aplicáveis a uma unidade e definir a máscara padrão da unidade.
- Modelos de cabeçalho e rodapé —
/report-templates(HEADER/FOOTERpor unidade, consumidos na geração do PDF). - Geração, prévia e reprocessamento do PDF —
/report-pdf-previews,/reports/:id/pdf-generations,/reports/:id/pdf. - Revisão por pares (peer review) —
/reports/:id/peer-reviews,/report-peer-reviews/:id. - Entrega para integração externa —
/report-deliveries(outbox de laudos assinados para sistemas externos). - Enviar laudo por e-mail — módulo Notification, não repetido aqui.
Conceitos que atravessam várias páginas
Status do laudo (ReportStatus). CLEARED, SIGNED, REPORTING, PENDING, SECOND_OPINION, RESIGNED, TYPED, RECALL, AI_TYPED, PRE_SIGNED, TYPING. CLEARED é um status sentinela interno
(não pode ser setado via API). O status do laudo é espelhado automaticamente no status do exame
(DiagnosisClinicalStatusPolicy); as regras de transição aparecem detalhadas em
Status, reatribuição e reavaliação.
"Versionamento" do laudo. Não existe uma rota de histórico dedicada. O que existe são
operações que, em vez de editar o laudo assinado em memória, criam um novo registro de laudo
vinculado ao mesmo exame: reatribuir o dono de um laudo assinado com
versionSignedReports: true (ver reatribuição), e solicitar reavaliação de um laudo assinado
(ver reavaliação) — em ambos os casos o laudo original passa para RESIGNED e o novo laudo nasce
com o próprio id. GET /reports?examId= lista todos os laudos (todas as versões) daquele exame, e
é a forma de reconstruir esse histórico a partir da API.
Assinatura digital (SafeID/ICP-Brasil). Quando o token do ator carrega hasSafeId e um
accessTokenSafeId, a assinatura efetiva também assina digitalmente o PDF via um cliente externo
(DiagnosisDigitalSignatureClient, implementação SafeWeb PSS). Isso acontece de forma assíncrona
best-effort depois do commit da transação de assinatura; falhas ficam registradas como
"reprocessamento pendente" e podem ser refeitas por
POST /reports/:id/pdf-generations.
Compliance
Este levantamento não reproduz os pareceres de compliance do Bitrix (LGPD/HIPAA/ANVISA) como
fato — cada página só afirma o que o código atual efetivamente implementa (guard de MFA na
assinatura, licença profissional ativa, trilha de auditoria por evento, sanitização de HTML de
máscara). Onde a exigência regulatória citada no Bitrix não tem controle equivalente confirmado no
código, a página correspondente registra a pendência com
A confirmar — responsável: time de Diagnosis; data: 24/09/2026. em vez de afirmar conformidade.
Relacionado
- 📧 Notification — Enviar laudo por e-mail
- 🔑 Authorization — significado das permissões
REPORT_*e RLS por unidade/recurso usadas em todo este módulo. - 👤 Usuário — licença profissional ativa (
hasActiveProfessionalLicense), exigida para assinar e para ser reatribuído como dono do laudo.