Health Microservice API

Un microservicio FastAPI para operaciones relacionadas con la salud, que cuenta con autenticación JWT y una base de datos PostgreSQL con migraciones Alembic.

Documentación

Health Microservice API

Un microservicio FastAPI integral para operaciones relacionadas con la salud, con autenticación JWT, base de datos PostgreSQL y migraciones Alembic. Está respaldado por un servidor MCP que utiliza FastApiMCP

Demo funcional

health-api-mcp-server-with-fastapi-demo.webm

Características

  • Autenticación basada en JWT
  • Base de datos PostgreSQL con SQLAlchemy asíncrono
  • Migraciones de base de datos con Alembic
  • Modelos integrales del dominio de salud (Paciente, Médico, Cita, Historial Médico)
  • Endpoints de API RESTful
  • Documentación interactiva de la API (Swagger UI)
  • Estructura de proyecto modular
  • Middleware CORS
  • Soporte async/await
  • Gestor de paquetes UV para resolución rápida de dependencias
  • Suite integral de pruebas

Requisitos previos

  • Python 3.13.3+
  • PostgreSQL
  • Gestor de paquetes UV

Estructura del proyecto

El proyecto sigue una estructura modular adecuada para aplicaciones grandes, con una clara separación de responsabilidades entre modelos, esquemas, rutas y lógica de negocio.

project_structure

Instalación

Instalar UV

# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or with pip
pip install uv

Configuración del proyecto

Clonar el repositorio:

git clone <repository-url>
cd health-api

Instalar dependencias:

uv sync

Configurar las variables de entorno:

cp .env.example .env
# Edit .env with your database credentials and secret key

Migraciones de base de datos con Alembic (usando UV)

Alembic se utiliza para gestionar las migraciones de la base de datos. Todos los comandos a continuación asumen que te encuentras en el directorio raíz del proyecto.

Pero primero, crea una base de datos PostgreSQL:

CREATE DATABASE health_db;

Generar una nueva migración (autogenerada)

uv run alembic revision --autogenerate -m "Your migration message"

Aplicar migraciones (actualizar la base de datos)

uv run alembic upgrade head

Iniciar la aplicación (elige una opción):

uv run uvicorn app.main:app --host 0.0.0.0 --port 5000 --reload
# Or use the convenience script
chmod +x scripts/start.sh
./scripts/start.sh

Algunos comandos adicionales necesarios de migración de Alembic

Estos comandos no son necesarios durante la configuración, pero son útiles para gestionar migraciones en el futuro durante el desarrollo.

Revertir la base de datos (revertir la última migración)

uv run alembic downgrade -1

Ver el estado actual de las migraciones

uv run alembic current

Mostrar el historial de migraciones

uv run alembic history

Para más comandos y usos de Alembic, consulta la documentación de Alembic.

Desarrollo

Instalar dependencias de desarrollo:

uv sync --group dev

Ejecutar pruebas:

uv run pytest
# Or use the test script
chmod +x scripts/test.sh
./scripts/test.sh

Formato de código:

uv run black app/ tests/
uv run isort app/ tests/

Verificación de tipos:

uv run mypy app/

Docker

Compilar y ejecutar con Docker Compose:

docker-compose up --build

Esto iniciará tanto la base de datos PostgreSQL como la aplicación FastAPI.

Documentación de la API

Una vez que la aplicación esté en ejecución, visita:

curl -H "Authorization: Bearer <your_bearer_token>" 
-H "Accept: text/event-stream" http://localhost:5000/mcp

Migraciones de base de datos

Crear una nueva migración:

uv run alembic revision --autogenerate -m "Description of changes"
# Or use the migration script
chmod +x scripts/migrate.sh
./scripts/migrate.sh "Description of changes"

Aplicar migraciones:

uv run alembic upgrade head

Autenticación

  • Registrar un nuevo usuario: POST /auth/register
  • Iniciar sesión para obtener el token de acceso: POST /auth/login
  • Usar el token en el encabezado Authorization: Bearer <token>

Principales endpoints de la API (después de la autenticación)

Después de obtener un token de acceso JWT, puedes acceder a los siguientes endpoints:

Health-Microservice-API-Swagger-UI

🖼️ Haz clic para ver los endpoints de Health Microservice API

Médicos

  • GET /doctors — Listar todos los médicos
  • GET /doctors/{doctor_id} — Obtener un médico específico por ID
  • POST /doctors — Crear un nuevo médico
  • PUT /doctors/{doctor_id} — Actualizar la información de un médico
  • DELETE /doctors/{doctor_id} — Eliminar un médico

Pacientes

  • GET /patients — Listar todos los pacientes
  • GET /patients/{patient_id} — Obtener un paciente específico por ID
  • POST /patients — Crear un nuevo paciente
  • PUT /patients/{patient_id} — Actualizar la información de un paciente
  • DELETE /patients/{patient_id} — Eliminar un paciente

Historiales médicos

  • GET /medical-records — Listar todos los historiales médicos (opcionalmente filtrar por paciente)
  • GET /medical-records/{record_id} — Obtener un historial médico específico por ID
  • POST /medical-records — Crear un nuevo historial médico
  • PUT /medical-records/{record_id} — Actualizar un historial médico
  • DELETE /medical-records/{record_id} — Eliminar un historial médico

Citas

  • GET /appointments — Listar todas las citas
  • GET /appointments/{appointment_id} — Obtener una cita específica por ID
  • POST /appointments — Crear una nueva cita
  • PUT /appointments/{appointment_id} — Actualizar una cita
  • DELETE /appointments/{appointment_id} — Eliminar una cita

Telemedicina

  • POST /telemedicine/visits/ — Crear una nueva visita virtual
  • GET /telemedicine/visits/ — Listar todas las visitas virtuales
  • GET /telemedicine/visits/{visit_id} — Obtener una visita virtual específica por ID
  • POST /telemedicine/chats/ — Crear un nuevo registro de chat
  • GET /telemedicine/chats/ — Listar todos los registros de chat
  • GET /telemedicine/chats/{chat_id} — Obtener un registro de chat específico por ID
  • POST /telemedicine/videos/ — Crear una nueva sesión de video
  • GET /telemedicine/videos/ — Listar todas las sesiones de video
  • GET /telemedicine/videos/{video_id} — Obtener una sesión de video específica por ID

Laboratorio

  • POST /lab/orders/ — Crear una nueva orden de laboratorio
  • GET /lab/orders/ — Listar todas las órdenes de laboratorio
  • GET /lab/orders/{order_id} — Obtener una orden de laboratorio específica por ID
  • POST /lab/results/ — Crear un nuevo resultado de laboratorio
  • GET /lab/results/ — Listar todos los resultados de laboratorio
  • GET /lab/results/{result_id} — Obtener un resultado de laboratorio específico por ID
  • POST /lab/images/ — Crear una nueva imagen diagnóstica
  • GET /lab/images/ — Listar todas las imágenes diagnósticas
  • GET /lab/images/{image_id} — Obtener una imagen diagnóstica específica por ID

Derivaciones

  • POST /referral/requests/ — Crear una nueva solicitud de derivación
  • GET /referral/requests/ — Listar todas las solicitudes de derivación
  • GET /referral/requests/{request_id} — Obtener una solicitud de derivación específica por ID
  • POST /referral/statuses/ — Crear un nuevo estado de derivación
  • GET /referral/statuses/ — Listar todos los estados de derivación
  • GET /referral/statuses/{status_id} — Obtener un estado de derivación específico por ID
  • POST /referral/notes/ — Crear una nueva nota de especialista
  • GET /referral/notes/ — Listar todas las notas de especialista
  • GET /referral/notes/{note_id} — Obtener una nota de especialista específica por ID

Farmacia

  • POST /pharmacy/medications/ — Crear un nuevo medicamento
  • GET /pharmacy/medications/ — Listar todos los medicamentos
  • GET /pharmacy/medications/{med_id} — Obtener un medicamento específico por ID
  • POST /pharmacy/prescriptions/ — Crear una nueva receta
  • GET /pharmacy/prescriptions/ — Listar todas las recetas
  • GET /pharmacy/prescriptions/{pres_id} — Obtener una receta específica por ID
  • POST /pharmacy/orders/ — Crear una nueva orden de farmacia
  • GET /pharmacy/orders/ — Listar todas las órdenes de farmacia
  • GET /pharmacy/orders/{order_id} — Obtener una orden de farmacia específica por ID

Seguros

  • POST /insurance/plans/ — Crear un nuevo plan de seguro
  • GET /insurance/plans/ — Listar todos los planes de seguro
  • GET /insurance/plans/{plan_id} — Obtener un plan de seguro específico por ID
  • POST /insurance/claims/ — Crear una nueva reclamación de seguro
  • GET /insurance/claims/ — Listar todas las reclamaciones de seguro
  • GET /insurance/claims/{claim_id} — Obtener una reclamación de seguro específica por ID
  • POST /insurance/payments/ — Crear un nuevo pago
  • GET /insurance/payments/ — Listar todos los pagos
  • GET /insurance/payments/{payment_id} — Obtener un pago específico por ID
  • POST /insurance/invoices/ — Crear una nueva factura
  • GET /insurance/invoices/ — Listar todas las facturas
  • GET /insurance/invoices/{invoice_id} — Obtener una factura específica por ID

Todos estos endpoints requieren el encabezado Authorization: Bearer . Consulta la documentación interactiva de la API en /docs para ver los esquemas detallados de solicitud/respuesta y probar los endpoints de forma interactiva.

Gestión de paquetes con UV

UV proporciona resolución e instalación rápida de dependencias. Comandos útiles:

  • uv sync - Instalar dependencias desde el archivo de bloqueo
  • uv add <package> - Agregar una nueva dependencia
  • uv remove <package> - Eliminar una dependencia
  • uv run <command> - Ejecutar un comando en el entorno virtual
  • uv lock - Actualizar el archivo de bloqueo

Integración con MCP

La integración con MCP se realiza utilizando la clase FastApiMCP del paquete fastapi_mcp. El servidor MCP se monta en la aplicación FastAPI mediante el método mount.

Configuración de windsurf,

{
  "mcpServers": {
    "health-api": {
      "serverUrl": "http://localhost:5000/mcp",
      "headers": {
        "Authorization": "Bearer 
        <put_your_bearer_token_here>"
      } 
    }
  }
}

Configuración de vscode o cursor,

{
  "servers": {
    "health-api": {
      "url": "http://localhost:5000/mcp",
      "headers": {
        "Authorization": "Bearer 
        <put_your_bearer_token_here>"
      }
    }
  }
}

Nota: aún no he probado en vscode o cursor.

Licencia

Licencia MIT

Tareas pendientes

  • Agregar más casos de prueba
  • Agregar más funciones
  • Agregar más documentación
  • Agregar más funciones de seguridad
  • Agregar más registros
  • Agregar más monitoreo
  • Agregar más optimización de rendimiento

Contribuciones

  1. Instalar dependencias de desarrollo: uv sync --group dev
  2. Realizar los cambios
  3. Ejecutar pruebas: uv run pytest
  4. Formatear código: uv run black app/ tests/
  5. Enviar una solicitud de extracción

Consulta más en [Contribuciones](https://github.com/ AlwaysSany/health-api/blob/main/CONTRIBUTING.md).

Contacto

Referencias