Pacientes

Endpoints para consultar pacientes. A API é read-only — pacientes são criados e atualizados automaticamente pelo worker Python durante a ingestão DICOM, a partir das tags do estudo recebido. Isolamento: aplicado via scope BelongsToTenant. Usuários regulares veem apenas pacientes que possuem ao menos um estudo na sua unidade; tenant admins veem todos os pacientes do tenant; super admins veem tudo.

GET /api/patients

Lista paginada de pacientes. Auth: auth:api

Query params

Busca case-insensitive em patient_name e patient_id. Máximo 255 caracteres.
page
integer
default:"1"
Página da paginação.

Response 200

Paginação Laravel padrão (20 itens por página, não customizável):
{
  "data": [
    {
      "id": "uuid",
      "tenant_id": "uuid",
      "patient_id": "string",
      "patient_name": "string",
      "patient_birth_date": "YYYY-MM-DD | null",
      "patient_sex": "M | F | null",
      "created_at": "iso8601",
      "updated_at": "iso8601"
    }
  ],
  "current_page": 1,
  "per_page": 20,
  "total": 456,
  "last_page": 23
}
Ordenação: patient_name ASC, created_at DESC.

Erros

StatusSituação
401Token inválido ou ausente
422search com mais de 255 caracteres

GET /api/patients/

Detalhe de um paciente. Auth: auth:api

Path params

ParamTipoDescrição
iduuidID do paciente

Response 200

{
  "id": "uuid",
  "tenant_id": "uuid",
  "patient_id": "string",
  "patient_name": "string",
  "patient_birth_date": "YYYY-MM-DD | null",
  "patient_sex": "M | F | null",
  "created_at": "iso8601",
  "updated_at": "iso8601"
}

Erros

StatusSituação
401Token inválido
404Paciente não encontrado, ou usuário regular sem estudos desse paciente na sua unidade

GET /api/patients//studies

Lista paginada de estudos de um paciente. Auth: auth:api

Response 200

Mesmo shape de GET /api/studies, mas filtrado pelo paciente (15 itens por página):
{
  "data": [
    {
      "id": "uuid",
      "patient_uuid": "uuid",
      "study_date": "YYYY-MM-DD",
      "study_description": "string | null",
      "modalities": ["CT"],
      "report_status": "pending | draft | final | null",
      "...": "demais campos do estudo"
    }
  ],
  "current_page": 1,
  "per_page": 15,
  "total": 12,
  "last_page": 1
}
Ordenação: study_date DESC, created_at DESC.

Erros

StatusSituação
401Token inválido
404Paciente não encontrado ou fora do tenant