/api/tenantsObtener lista de todas las organizaciones
Response:
[
{
"id": "uuid",
"name": "Centro Médico ABC",
"slug": "centro-medico-abc",
"logo": "https://...",
"primaryColor": "#0066CC",
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z"
}
]/api/tenantsCrear una nueva organización
Request Body:
{
"name": "Centro Médico ABC",
"slug": "centro-medico-abc",
"logo": "https://...", // opcional
"primaryColor": "#0066CC" // opcional, default: #0066CC
}Response:
{
"id": "uuid",
"name": "Centro Médico ABC",
"slug": "centro-medico-abc",
...
}Cada tenant puede tener múltiples tipos de turnero: Consulta Externa, Toma de Muestras, Urgencias, Imágenes Diagnósticas, etc.
/api/tenants/{tenantId}/queue-typesObtener tipos de turnero de una organización
Response:
[
{
"id": "uuid",
"tenantId": "uuid",
"name": "Consulta Externa",
"slug": "consulta-externa",
"code": "CE",
"description": "Consultas médicas generales",
"color": "#0284c7",
"icon": "stethoscope",
"voiceAnnouncement": "both",
"isActive": true,
"displayOrder": 1,
"createdAt": "2024-01-15T10:00:00Z"
}
]/api/tenants/{tenantId}/queue-typesCrear un nuevo tipo de turnero
Request Body:
{
"name": "Toma de Muestras", // requerido
"slug": "toma-muestras", // requerido - para URL
"code": "TM", // requerido - prefijo de turnos
"description": "Laboratorio", // opcional
"color": "#059669", // opcional
"icon": "test-tube", // opcional (users, test-tube, stethoscope, siren, image, pill, heart-pulse, clipboard)
"voiceAnnouncement": "both", // opcional (turn_number, patient_name, both, none)
"displayOrder": 2 // opcional
}turn_number - Solo anuncia el número de turnopatient_name - Solo anuncia el nombre del pacienteboth - Anuncia turno y nombre del pacientenone - Sin anuncio de voz/api/tenants/{tenantId}/officesObtener consultorios de una organización
Response:
[
{
"id": "uuid",
"tenantId": "uuid",
"queueTypeId": "uuid",
"name": "Consultorio 1",
"code": "C01",
"floor": "Piso 2",
"isActive": true,
"createdAt": "2024-01-15T10:00:00Z"
}
]/api/tenants/{tenantId}/officesCrear un nuevo consultorio
Request Body:
{
"name": "Consultorio 1",
"code": "C01",
"queueTypeId": "uuid", // opcional - tipo de turnero asociado
"floor": "Piso 2" // opcional
}/api/tenants/{tenantId}/turnsObtener turnos de una organización
Query Parameters:
status - Filtrar por estado (waiting, calling, attending, completed, cancelled, no_show)queueType - Filtrar por tipo de turnero (slug)date - Filtrar por fecha (YYYY-MM-DD)Response:
[
{
"id": "uuid",
"tenantId": "uuid",
"queueTypeId": "uuid",
"officeId": "uuid",
"turnNumber": "CE001",
"patientName": "Juan Pérez",
"patientDocument": "12345678",
"status": "waiting",
"priority": 0,
"announced": false,
"notes": null,
"calledAt": null,
"attendedAt": null,
"completedAt": null,
"createdAt": "2024-01-15T10:00:00Z",
"updatedAt": "2024-01-15T10:00:00Z",
"office": { ... },
"queueType": { ... }
}
]/api/tenants/{tenantId}/turnsCrear un nuevo turno
Request Body:
{
"patientName": "Juan Pérez", // requerido
"queueTypeId": "uuid", // requerido - tipo de turnero
"patientDocument": "12345678", // opcional
"officeId": "uuid", // opcional
"priority": 0, // opcional, 0=normal, 1+=prioritario
"notes": "Observaciones" // opcional
}Response:
{
"id": "uuid",
"turnNumber": "CE001",
"status": "waiting",
"queueType": { "name": "Consulta Externa", "code": "CE", ... },
...
}/api/tenants/{tenantId}/turns/{turnId}Actualizar un turno (cambiar estado, asignar consultorio, etc.)
Request Body:
{
"status": "calling", // waiting, calling, attending, completed, cancelled, no_show
"officeId": "uuid", // opcional
"notes": "Nota adicional", // opcional
"patientName": "Nuevo nombre" // opcional
}/api/tenants/{tenantId}/turns/call-nextLlamar al siguiente turno en espera (prioridad más alta primero, luego más antiguo)
Request Body:
{
"officeId": "uuid", // requerido - consultorio que llama
"queueTypeId": "uuid" // opcional - filtrar por tipo de turnero
}Response:
{
"id": "uuid",
"turnNumber": "CE001",
"status": "calling",
"calledAt": "2024-01-15T10:30:00Z",
"office": { ... },
"queueType": { ... },
...
}/api/tenants/{tenantId}/turns/{turnId}Eliminar un turno
/api/tenants/{tenantId}/displayObtener datos optimizados para el display del turnero
Query Parameters:
queueType - Filtrar por tipo de turnero (slug). Si no se especifica, muestra todos los tipos.Response:
{
"tenant": {
"id": "uuid",
"name": "Centro Médico ABC",
"slug": "centro-medico-abc",
"logo": "https://...",
"primaryColor": "#0066CC",
...
},
"queueType": {
// Tipo de turnero seleccionado (null si no se filtró)
"id": "uuid",
"name": "Consulta Externa",
"slug": "consulta-externa",
"voiceAnnouncement": "both",
...
},
"queueTypes": [
// Todos los tipos de turnero activos del tenant
{ "id": "uuid", "name": "Consulta Externa", "slug": "consulta-externa", ... }
],
"calling": [
// Turnos con status "calling" (siendo llamados)
{
"turnNumber": "CE001",
"patientName": "...",
"office": {...},
"queueType": {...},
"announced": false,
...
}
],
"waiting": [
// Próximos 15 turnos en espera
{ "turnNumber": "CE002", "patientName": "...", "queueType": {...}, ... }
],
"recent": [
// Últimos 5 turnos atendidos/completados
{ "turnNumber": "CE000", ... }
],
"timestamp": "2024-01-15T10:30:00Z"
}/display/{slug}Pantalla principal del turnero. Muestra todos los tipos de turnero.
/display/{slug}?queueType=consulta-externaPantalla filtrada por tipo de turnero específico.
/demoDemostración con datos de ejemplo y prueba de voz.
El sistema incluye anuncios de voz automáticos en español latinoamericano (es-419). Los anuncios se activan cuando un turno pasa a estado "calling".
"Atención. Turno C E cero cero uno. Paciente María García López. Por favor diríjase a Consultorio 3. Piso 2."
waiting - En espera de ser llamadocalling - Siendo llamado (se muestra en pantalla y se anuncia por voz)attending - En atencióncompleted - Atención completadacancelled - Turno canceladono_show - Paciente no se presentó