WEBSOCKETreports.release

Liberar Laudo

Evento WebSocket para notificar em tempo real sobre a liberação de um laudo médico. Após salvar um laudo com sucesso via POST /api/auth/reports, o cliente emite este evento. O servidor recebe a mensagem e propaga para todos os clientes conectados da mesma conta (isolamento por accountId), permitindo sincronização automática entre componentes. Componentes que escutam este evento (ex: LaudoModal.tsx) atualizam automaticamente a lista de procedimentos laudados. Quando todos os procedimentos de um pedido são laudados, o modal é fechado automaticamente.

Access Token

Para realizar requisições GET, POST, PUT, DELETE e PATCH nos endpoints da API você precisa de uma chave de autorização. Chamamos essa chave de accessToken.

Para ter acesso ao accessToken, é necessário que o usuário master da licença efetue a liberação deste pela interface do ImageMais Clinic. O accessToken tem validade de 1 hora.

Headers

AuthorizationOBRIGATÓRIO
Tipo:string
Token de autenticação no formato Bearer {accessToken}. O token deve ser enviado durante o handshake de conexão WebSocket.

Parâmetros

orderUlidOBRIGATÓRIO
Tipo:string
ULID (Identificador Único Universalmente Ordenável Lexicograficamente) do pedido/ordem

ULID (Identificador Único Universalmente Ordenável Lexicograficamente) do pedido/ordem. É um identificador único que identifica um pedido específico no sistema.

Para encontrar o ULID do pedido, para acessar a página de buscar todos os relatórios de pedidos.

procedureIdOBRIGATÓRIO
Tipo:string
ID do procedimento relacionado ao laudo

Fluxo passo a passo: reports.release

1

REST salva o laudo

O cliente envia o laudo via POST /api/auth/reports. Se a API retornar sucesso (response.ok), o fluxo segue para a notificação em tempo real.

2

Cliente emite o evento via WebSocket

Após o POST dar certo, o frontend emite:

socket.emit('reports.release', {
  orderUlid: ulid,
  procedureId: procedureId,
});
Quem emite: frontend
Quando: após sucesso do POST
Payload: { orderUlid, procedureId }
3

Servidor recebe e valida o contexto do socket

No backend (NestJS + Gateway), o servidor captura o evento:

@SubscribeMessage('reports.release')
async handleGetReports(
  @ConnectedSocket() client: Socket,
  @MessageBody() data: { orderUlid: string; procedureId: string },
) {
  const payload = client.data.payload as PayloadTokenDto;
  this.notifyOnEvent('reports.release', data, payload);
}
Quem recebe: servidor (Gateway WS)
O que ele usa para isolar: payload (ex.: contém accountId)
O que faz: repassa (notifyOnEvent) para os clientes da mesma conta
4

Servidor propaga para todos da mesma conta

O método `notifyOnEvent(...)` envia o evento para todos os sockets da mesma `accountId` (multi-tenant).

Quem recebe: todos os clientes conectados daquela conta
5

Clientes que escutam atualizam a UI

No frontend, componentes como `LaudoModal.tsx` escutam:

socket.on('reports.release', ({ orderUlid, procedureId }) => {
  // Atualiza lista de procedimentos laudados
  // Fecha o modal se todos forem laudados
});
No seu caso: adiciona `procedureId` na lista
: atualiza o estado
: se todos os procedimentos forem laudados → fecha o modal

Request URL

ws://api-dev.imagemais.com
{
  "orderUlid": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
  "procedureId": "123"
  ...
{
  "orderUlid": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
  "procedureId": "123"
}

Respostas

{
  "status": "success",
  "message": "Laudo salvo com sucesso!"
  ...
{
  "status": "success",
  "message": "Laudo salvo com sucesso!"
}
{
  "status": "refused",
  "message": "Erro ao adicionar o laudo"
  ...
{
  "status": "refused",
  "message": "Erro ao adicionar o laudo"
}