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-Keyo token de usuario) - Paginación y ordenamiento
- Estructura global de errores
- Guía de Filtrado completa
Attributes (Order)
| Atributo | Tipo | Modo | Valores / Formato | Descripción |
|---|---|---|---|---|
id | string (UUID) | Solo lectura | UUID v4 | Identificador único universal de la orden. |
accession_number | string(32) | Lectura / Escritura | Único (AAAAJJJNNNNN) | Número de acceso del estudio en la institución. Autogenerado si se omite al crear. |
patient_identifier | string | Solo lectura | Texto alfanumérico | Identificación externa / Cédula del paciente asociado. |
requested_procedure_id | string | Solo lectura | Secuencia institucional | Identificador del procedimiento solicitado generado automáticamente por secuencia (REQ...). |
exam_description | string | Solo lectura | Texto | Descripción del procedimiento radiológico asociado. |
procedure_code | string | Entrada (POST) | Código válido | Código externo configurado en el mapeo de procedimientos de la institución o código base. |
clinical_indication | string(255) | Entrada (POST / PUT) | Texto libre | Motivo clínico, diagnóstico presuntivo o síntoma que justifica el estudio. |
special_instructions | string(255) | Lectura / Escritura | Texto libre | Instrucciones técnicas o de preparación para la orden (ej. ayuno previo, alergias). |
referring_physician | string(64) | Lectura / Escritura | DICOM VR PN | Médico remitente en formato Apellido^Nombre^^Dr. o Apellido^Nombre. |
priority | string(16) | Lectura / Escritura | ROUTINE, URGENT, STAT | Prioridad o nivel de urgencia de la orden (por defecto: ROUTINE). |
status | string(16) | Lectura / Escritura | ORDERED, SCHEDULED, CANCELED, COMPLETED | Estado actual de la orden en el flujo RIS (por defecto: ORDERED). |
created_at | string datetime | Solo lectura | YYYY-MM-DD HH:MM:SS | Fecha 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
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"
{
"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
}
}
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"
{
"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.
Crea una nueva orden RIS en el sistema.
Headers Requeridos
Content-Type: application/jsonX-Api-Key: <TU_API_KEY>
Estructura del Payload
El cuerpo de la solicitud JSON se compone de dos partes:
- Atributos de la Orden (Nivel Raíz): Datos del estudio radiológico (código del procedimiento, prioridad, médico, etc.).
- 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)
| Campo | Tipo | Requerido | Valor por Defecto / Permitidos | Descripción |
|---|---|---|---|---|
procedure_code | string | Sí | Código válido | Código externo configurado en el mapeo de procedimientos de la institución o el código base del procedimiento |
patient | object | Sí | Objeto JSON | Objeto contenedor con los datos del paciente (ver tabla siguiente). |
accession_number | string(32) | No | Autogenerado (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). |
priority | string(16) | No | ROUTINE | Prioridad de la orden. Valores admitidos: ROUTINE, URGENT, STAT. |
status | string(16) | No | ORDERED | Estado inicial de la orden. Valores admitidos: ORDERED, SCHEDULED, CANCELED, COMPLETED. |
clinical_indication | string(255) | No | null | Indicación clínica, diagnóstico presuntivo o motivo del examen. |
special_instructions | string(255) | No | null | Instrucciones especiales de preparación o manejo del paciente (ej. ayuno, alergias). |
referring_physician | string(64) | No | null | Médico solicitante en formato DICOM Person Name (VR PN): Apellido^Nombre^^Dr. o Apellido^Nombre. |
2. Atributos del Paciente (Objeto anidado patient)
| Campo | Tipo | Requerido | Valores Permitidos / Formato | Descripción |
|---|---|---|---|---|
patient_identifier | string(255) | Sí | Texto alfanumérico | Cédula, DNI, Pasaporte o identificador único del paciente en el sistema integrador (HIS/EMR). |
patient_name | string(255) | Condicional | DICOM VR PN: APELLIDOS^NOMBRES^SEGUNDO_NOMBRE | Requerido si el paciente no existe previamente. Debe contener al menos un caracter ^ separando apellidos de nombres (ej: Perez^Juan o Perez^Juan^Carlos). |
identification_type | string(50) | No | XX (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) | No | null | Sexo biológico del paciente. Admite M, F, O o palabras completas: MALE, FEMALE, OTHER. |
date_of_birth | string date | No | null | Fecha 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
{
"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"
}
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\"."
]
}
}
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 error403 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"
}'
{
"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"
}
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"
{
"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"
}
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"
{
"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.