Endpoints
6
3 GET · 1 POST · 1 DELETE
Versión
1.0.0
Stable
Formato
JSON
Content-Type: application/json
Autenticación
No requerida
Entorno de demo

Interfaz interactiva disponible

Probá todos los endpoints en tiempo real con Swagger UI sin necesidad de cliente HTTP externo.

Abrir Swagger UI →
Profesionales
GET /profesionales Lista todos los profesionales del centro

Retorna la lista completa de médicos y profesionales con su ID, especialidad, matrícula y horario de atención. El ID es el que se usa en todos los demás endpoints.

Sin parámetros
Códigos de respuesta
200 OK
Respuesta 200 — ejemplo
{
  "total": 8,
  "profesionales": [
    {
      "id": "P001",
      "nombre": "Dr. Carlos García",
      "especialidad": "Medicina General",
      "matricula": "MN 48.231",
      "dias_atencion": ["lunes", "martes", "miércoles", "jueves", "viernes"],
      "horario": "08:00 – 18:00"
    },
    {
      "id": "P003",
      "nombre": "Dr. Luis Rodríguez",
      "especialidad": "Cardiología",
      "matricula": "MN 39.105",
      "dias_atencion": ["martes", "miércoles", "jueves"],
      "horario": "10:00 – 16:00"
    }
    ...
  ]
}
GET /profesionales/{id}/disponibilidad Ver disponibilidad por fecha

Retorna todos los slots de 30 minutos del profesional indicado para una fecha específica, marcando cuáles están disponibles y cuáles ocupados.

Parámetros de path
NombreTipoDescripción
id requerido string ID del profesional (ej: P001)
Query parameters
NombreTipoDescripción
fecha requerido string Fecha en formato YYYY-MM-DD (ej: 2026-05-28)
Códigos de respuesta
200 OK 404 Profesional no encontrado
Respuesta 200 — ejemplo
{
  "profesional_id": "P001",
  "profesional": "Dr. Carlos García",
  "especialidad": "Medicina General",
  "fecha": "2026-05-28",
  "dia": "miércoles",
  "atiende": true,
  "slots": [
    { "hora": "08:00", "disponible": true },
    { "hora": "08:30", "disponible": false },
    { "hora": "09:00", "disponible": true }
  ],
  "total_slots": 20,
  "total_disponibles": 18,
  "total_ocupados": 2
}
Turnos
POST /turnos Crear un nuevo turno

Registra un nuevo turno en el sistema. Valida automáticamente que el profesional atienda ese día, que el horario esté dentro del rango de atención y que no exista otro turno en ese slot.

Body (JSON)
CampoTipoDescripción
paciente_dni requerido string DNI del paciente (acepta puntos y guiones)
profesional_id requerido string ID del profesional (ej: P001)
fecha requerido string Fecha en formato YYYY-MM-DD
hora requerido string Hora en formato HH:MM (ej: 10:00)
motivo opcional string Motivo de la consulta. Default: "Consulta médica"
Códigos de respuesta
201 Creado 400 Horario inválido 404 Profesional o paciente no encontrado 409 Turno ya ocupado
Request body
{
  "paciente_dni": "46555258",
  "profesional_id": "P001",
  "fecha": "2026-05-28",
  "hora": "10:00",
  "motivo": "Control anual de rutina"
}
Respuesta 201
{
  "mensaje": "Turno creado exitosamente.",
  "turno": {
    "id": "T-A3F92B1C",
    "paciente_dni": "46555258",
    "paciente_nombre": "Bautista Simón",
    "paciente_obra_social": "OSDE",
    "profesional_nombre": "Dr. Carlos García",
    "especialidad": "Medicina General",
    "fecha": "2026-05-28",
    "hora": "10:00",
    "motivo": "Control anual de rutina",
    "estado": "confirmado",
    "creado_en": "2026-05-21T14:32:11"
  }
}
GET /turnos Listar todos los turnos activos

Retorna todos los turnos registrados en el sistema durante la sesión actual. Los datos persisten en memoria mientras la API esté corriendo.

Sin parámetros
Códigos de respuesta
200 OK
DELETE /turnos/{id} Eliminar un turno

Cancela y elimina un turno del sistema. Retorna los datos del turno eliminado para confirmar la operación.

Parámetros de path
NombreTipoDescripción
id requerido string ID del turno a eliminar (ej: T-A3F92B1C)
Códigos de respuesta
200 OK 404 Turno no encontrado
Respuesta 200
{
  "mensaje": "Turno T-A3F92B1C eliminado correctamente.",
  "turno_cancelado": { ... }
}
Pacientes
GET /pacientes/{dni} Historia clínica por DNI

Busca un paciente por DNI y retorna su historia clínica completa: datos personales, obra social, historial de consultas, tratamientos realizados y turnos activos en el sistema.

Parámetros de path
NombreTipoDescripción
dni requerido string DNI del paciente. Acepta formato con puntos (46.555.258) o sin ellos (46555258)
Pacientes de prueba
DNINombreObra Social
46555258Bautista SimónOSDE 210 Plus
30456789María Elena GómezSwiss Medical SMG30
25678901Roberto FernándezGaleno Plus
Códigos de respuesta
200 OK 404 Paciente no encontrado
Respuesta 200 — DNI 46555258
{
  "dni": "46555258",
  "nombre": "Bautista Simón",
  "fecha_nacimiento": "2005-07-11",
  "edad": 20,
  "obra_social": "OSDE",
  "plan": "210 Plus",
  "numero_afiliado": "7-245-8831200/01",
  "grupo_sanguineo": "A+",
  "alergias": ["Penicilina"],
  "medicacion_actual": [],
  "historial_clinico": [
    {
      "fecha": "2025-03-12",
      "profesional": "Dr. Carlos García",
      "especialidad": "Medicina General",
      "motivo": "Control anual de rutina",
      "diagnostico": "Paciente sano. Sin hallazgos patológicos relevantes.",
      "indicaciones": "Se solicitan análisis de laboratorio de control."
    },
    ...
  ],
  "tratamientos": [
    {
      "nombre": "Plan de fisioterapia - esguince tobillo",
      "sesiones_totales": 8,
      "sesiones_realizadas": 8,
      "estado": "completado"
    }
  ],
  "turnos_activos": []
}
Manejo de errores

Todos los errores retornan un JSON con el campo detail describiendo el problema.

Ejemplo de error 404
{
  "detail": "Paciente con DNI 12345678 no encontrado en el sistema."
}
CódigoSignificado
200Operación exitosa
201Recurso creado exitosamente
400Datos inválidos (horario fuera de rango, día sin atención)
404Recurso no encontrado (paciente, profesional o turno)
409Conflicto — el turno ya está ocupado