OrderController API Documentation

Este módulo permite gestionar órdenes RIS en el sistema.

Endpoints

Base Path

Todos los endpoints están prefijados con /api/v1/orders.

Global Standards

Consulte Common.md para detalles sobre:

  • Autenticación (X-Api-Key o token de usuario)
  • Paginación y ordenamiento
  • Estructura global de errores
  • Guía de Filtrado completa

Attributes (Order)

AtributoTipoModoValores / FormatoDescripción
idstring (UUID)Solo lecturaUUID v4Identificador único universal de la orden.
accession_numberstring(32)Lectura / EscrituraÚnico (AAAAJJJNNNNN)Número de acceso del estudio en la institución. Autogenerado si se omite al crear.
patient_identifierstringSolo lecturaTexto alfanuméricoIdentificación externa / Cédula del paciente asociado.
requested_procedure_idstringSolo lecturaSecuencia institucionalIdentificador del procedimiento solicitado generado automáticamente por secuencia (REQ...).
exam_descriptionstringSolo lecturaTextoDescripción del procedimiento radiológico asociado.
procedure_codestringEntrada (POST)Código válidoCódigo externo configurado en el mapeo de procedimientos de la institución o código base.
clinical_indicationstring(255)Entrada (POST / PUT)Texto libreMotivo clínico, diagnóstico presuntivo o síntoma que justifica el estudio.
special_instructionsstring(255)Lectura / EscrituraTexto libreInstrucciones técnicas o de preparación para la orden (ej. ayuno previo, alergias).
referring_physicianstring(64)Lectura / EscrituraDICOM VR PNMédico remitente en formato Apellido^Nombre^^Dr. o Apellido^Nombre.
prioritystring(16)Lectura / EscrituraROUTINE, URGENT, STATPrioridad o nivel de urgencia de la orden (por defecto: ROUTINE).
statusstring(16)Lectura / EscrituraORDERED, SCHEDULED, CANCELED, COMPLETEDEstado actual de la orden en el flujo RIS (por defecto: ORDERED).
created_atstring datetimeSolo lecturaYYYY-MM-DD HH:MM:SSFecha y hora de creación de la orden.

Filtros Adicionales (GET /api/v1/orders)

  • filter[accession_number]: Número de acceso (búsqueda exacta =)
  • filter[patient_identifier]: Cédula o número de documento del paciente (búsqueda exacta =)
  • filter[priority]: Prioridad (búsqueda exacta: ROUTINE, URGENT, STAT)
  • filter[status]: Estado de la orden (búsqueda exacta: ORDERED, SCHEDULED, CANCELED, COMPLETED)
  • filter[modality]: Modalidad radiológica (búsqueda exacta, ej. CR, CT, MR, DX)

Endpoints Detail

GET /api/v1/orders

Obtiene una lista paginada de órdenes RIS.

Ejemplo cURL (Listar todas las órdenes)

curl -X GET "http://worklist.dicomline.com/api/v1/orders" \
  -H "X-Api-Key: TU_API_KEY"

Ejemplo cURL (Filtrar por Accession Number)

curl -X GET "http://worklist.dicomline.com/api/v1/orders?filter[accession_number]=202600100001" \
  -H "X-Api-Key: TU_API_KEY"

Ejemplo cURL (Filtrar por identificación del paciente)

curl -X GET "http://worklist.dicomline.com/api/v1/orders?filter[patient_identifier]=100940" \
  -H "X-Api-Key: TU_API_KEY"

Ejemplo cURL (Filtrar por estado y prioridad)

curl -X GET "http://worklist.dicomline.com/api/v1/orders?filter[status]=ORDERED&filter[priority]=URGENT" \
  -H "X-Api-Key: TU_API_KEY"
Response 200 OK
{
  "data": [
    {
      "id": "c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e",
      "accession_number": "202600100001",
      "patient_identifier": "100940",
      "requested_procedure_id": "REQ0001",
      "exam_description": "Radiografía de Columna Lumbar AP y Lateral",
      "referring_physician": "House^Gregory^^Dr.",
      "special_instructions": "Paciente refiere dolor intenso",
      "priority": "ROUTINE",
      "status": "ORDERED",
      "created_at": "2026-07-07 12:30:00"
    }
  ],
  "_links": {
    "self": { "href": "http://worklist.dicomline.com/api/v1/orders?page=1" },
    "first": { "href": "http://worklist.dicomline.com/api/v1/orders?page=1" },
    "last": { "href": "http://worklist.dicomline.com/api/v1/orders?page=1" }
  },
  "_meta": {
    "totalCount": 1,
    "pageCount": 1,
    "currentPage": 1,
    "perPage": 20
  }
}

GET /api/v1/orders/{id}

Obtiene una orden específica utilizando su UUID ({id} representa el UUID de la orden).

Parámetros URL:

  • {id}: string (UUID de la orden)

Ejemplo cURL

curl -X GET "http://worklist.dicomline.com/api/v1/orders/c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e" \
  -H "X-Api-Key: TU_API_KEY"
Response 200 OK
{
  "id": "c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e",
  "accession_number": "202600100001",
  "patient_identifier": "100940",
  "requested_procedure_id": "REQ0001",
  "exam_description": "Radiografía de Columna Lumbar AP y Lateral",
  "referring_physician": "House^Gregory^^Dr.",
  "special_instructions": "Paciente debe estar en ayunas 6 horas",
  "priority": "ROUTINE",
  "status": "ORDERED",
  "created_at": "2026-07-07 12:30:00"
}

Respuestas de error:

  • 404 Not Found: Si la orden no existe o no pertenece a la institución autenticada.

POST /api/v1/orders

Crea una nueva orden RIS en el sistema.

Headers Requeridos

  • Content-Type: application/json
  • X-Api-Key: <TU_API_KEY>

Estructura del Payload

El cuerpo de la solicitud JSON se compone de dos partes:

  1. Atributos de la Orden (Nivel Raíz): Datos del estudio radiológico (código del procedimiento, prioridad, médico, etc.).
  2. Objeto patient (Nivel Anidado): Datos de identificación y demografía del paciente.

Lógica de Resolución del Paciente

  • El API busca automáticamente si ya existe un paciente registrado en la institución con el patient_identifier.
  • Si el paciente ya existe: Se asocia automáticamente a la orden. No es necesario enviar nuevamente todos sus datos demográficos.
  • Si el paciente NO existe: Se crea automáticamente en la institución con los datos demográficos incluidos en el objeto patient.

1. Atributos de la Orden (Nivel Raíz)

CampoTipoRequeridoValor por Defecto / PermitidosDescripción
procedure_codestringSíCódigo válidoCódigo externo configurado en el mapeo de procedimientos de la institución o el código base del procedimiento
patientobjectSíObjeto JSONObjeto contenedor con los datos del paciente (ver tabla siguiente).
accession_numberstring(32)NoAutogenerado (AAAAJJJNNNNN)Número de acceso único de la orden en la institución. Si se omite o viene vacío, el backend lo genera automáticamente (ej. 202620500001).
prioritystring(16)NoROUTINEPrioridad de la orden. Valores admitidos: ROUTINE, URGENT, STAT.
statusstring(16)NoORDEREDEstado inicial de la orden. Valores admitidos: ORDERED, SCHEDULED, CANCELED, COMPLETED.
clinical_indicationstring(255)NonullIndicación clínica, diagnóstico presuntivo o motivo del examen.
special_instructionsstring(255)NonullInstrucciones especiales de preparación o manejo del paciente (ej. ayuno, alergias).
referring_physicianstring(64)NonullMédico solicitante en formato DICOM Person Name (VR PN): Apellido^Nombre^^Dr. o Apellido^Nombre.

2. Atributos del Paciente (Objeto anidado patient)

CampoTipoRequeridoValores Permitidos / FormatoDescripción
patient_identifierstring(255)SíTexto alfanuméricoCédula, DNI, Pasaporte o identificador único del paciente en el sistema integrador (HIS/EMR).
patient_namestring(255)CondicionalDICOM VR PN: APELLIDOS^NOMBRES^SEGUNDO_NOMBRERequerido si el paciente no existe previamente. Debe contener al menos un caracter ^ separando apellidos de nombres (ej: Perez^Juan o Perez^Juan^Carlos).
identification_typestring(50)NoXX (por defecto)Tipo de identificación. Valores admitidos:
• NI: Cédula / DNI / Identificador Nacional
• PPN: Pasaporte
• SS: Seguro Social
• MR: Historia Clínica (Medical Record)
• DL: Licencia de Conducir
• PI: Identificador Interno del Paciente
• AN: Número de Cuenta
• PN: Número de Persona
• XX: Otro / No especificado
sex (o gender)string(10)NonullSexo biológico del paciente. Admite M, F, O o palabras completas: MALE, FEMALE, OTHER.
date_of_birthstring dateNonullFecha de nacimiento en formato ISO 8601: YYYY-MM-DD (ej: 1980-01-01).

Ejemplos de Solicitud (Request Body) y cURL

Caso A: Paciente Nuevo con datos completos
curl -X POST "http://worklist.dicomline.com/api/v1/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: TU_API_KEY" \
  -d '{
    "procedure_code": "CT_HEAD_WO",
    "patient": {
      "patient_identifier": "100940",
      "patient_name": "Perez^Juan^Carlos",
      "identification_type": "NI",
      "sex": "M",
      "date_of_birth": "1980-01-01"
    },
    "clinical_indication": "Dolor lumbar persistente con irradiacion",
    "special_instructions": "Paciente debe estar en ayunas 6 horas",
    "referring_physician": "House^Gregory^^Dr.",
    "priority": "URGENT",
    "status": "ORDERED"
  }'
Caso B: Mínimo Obligatorio

Si solo envías los datos indispensables (el número de acceso y secuencia se generan automáticamente):

curl -X POST "http://worklist.dicomline.com/api/v1/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: TU_API_KEY" \
  -d '{
    "procedure_code": "RX-COL-001",
    "patient": {
      "patient_identifier": "100940",
      "patient_name": "Perez^Juan^Carlos"
    }
  }'
Caso C: Paciente Preexistente en la Institución

Si el paciente ya está registrado en la institución, basta con enviar su identificador:

curl -X POST "http://worklist.dicomline.com/api/v1/orders" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: TU_API_KEY" \
  -d '{
    "procedure_code": "RX-COL-001",
    "patient": {
      "patient_identifier": "100940"
    },
    "clinical_indication": "Control rutinario anual",
    "priority": "ROUTINE"
  }'

Respuestas

Response 201 Created
{
  "id": "c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e",
  "accession_number": "202600100001",
  "patient_identifier": "100940",
  "requested_procedure_id": "REQ0001",
  "exam_description": "Radiografía de Columna Lumbar AP y Lateral",
  "referring_physician": "House^Gregory^^Dr.",
  "special_instructions": "Paciente debe estar en ayunas 6 horas",
  "priority": "URGENT",
  "status": "ORDERED",
  "created_at": "2026-07-07 12:30:00"
}
Response 422 Unprocessable Entity

Si falla la validación del procedimiento o de la orden:

{
  "procedure_code": [
    "Seleccione un procedimiento valido de la lista."
  ]
}

Si falla la validación de los datos del paciente:

{
  "patient": {
    "patient_name": [
      "patient_name debe enviarse como \"LAST NAME^FIRST NAME^MIDDLE NAME\"."
    ]
  }
}

PUT /api/v1/orders/{id}

Actualiza los datos de una orden existente utilizando su UUID ({id} representa el UUID de la orden).

Nota: Solo pueden modificarse órdenes en estado ORDERED. Si la orden ya se encuentra en otro estado, la solicitud retornará un error 403 Forbidden.

Parámetros URL:

  • {id}: string (UUID de la orden)

Ejemplo cURL

curl -X PUT "http://worklist.dicomline.com/api/v1/orders/c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: TU_API_KEY" \
  -d '{
    "clinical_indication": "Control postquirurgico y seguimiento",
    "special_instructions": "Revisar imagenes previas antes del estudio",
    "referring_physician": "Strange^Stephen^^Dr.",
    "priority": "STAT"
  }'
Response 200 OK
{
  "id": "c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e",
  "accession_number": "202600100001",
  "patient_identifier": "100940",
  "requested_procedure_id": "REQ0001",
  "exam_description": "Radiografía de Columna Lumbar AP y Lateral",
  "referring_physician": "Strange^Stephen^^Dr.",
  "special_instructions": "Revisar imágenes previas antes del estudio",
  "priority": "STAT",
  "status": "ORDERED",
  "created_at": "2026-07-07 12:30:00"
}

POST /api/v1/orders/{id}/cancel

Cancela una orden cambiando su estado a CANCELED ({id} representa el UUID de la orden).

Parámetros URL:

  • {id}: string (UUID de la orden)

Ejemplo cURL

curl -X POST "http://worklist.dicomline.com/api/v1/orders/c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e/cancel" \
  -H "X-Api-Key: TU_API_KEY"
Response 200 OK
{
  "id": "c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e",
  "accession_number": "202600100001",
  "patient_identifier": "100940",
  "requested_procedure_id": "REQ0001",
  "exam_description": "Radiografía de Columna Lumbar AP y Lateral",
  "referring_physician": "House^Gregory^^Dr.",
  "special_instructions": "Paciente debe estar en ayunas 6 horas",
  "priority": "ROUTINE",
  "status": "CANCELED",
  "created_at": "2026-07-07 12:30:00"
}

DELETE /api/v1/orders/{id}

Elimina una orden existente utilizando su UUID ({id} representa el UUID de la orden).

Parámetros URL:

  • {id}: string (UUID de la orden)

Ejemplo cURL

curl -X DELETE "http://worklist.dicomline.com/api/v1/orders/c7a8b41f-829d-4e9a-9e1d-8f2a63b0194e" \
  -H "X-Api-Key: TU_API_KEY"
Response 204 No Content
{
  "message": "Orden eliminada exitosamente."
}

Notas Finales

  • Consulte Common.md para los códigos de estado y la estructura de errores globales.
  • Los resultados están limitados a los datos autorizados para la clave API utilizada.