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.
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:
- Swagger UI: http://localhost:5000/docs
- ReDoc: http://localhost:5000/redoc
- MCP ping: verifica en la terminal con el siguiente comando
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:
🖼️ Haz clic para ver los endpoints de Health Microservice API
Médicos
GET /doctors— Listar todos los médicosGET /doctors/{doctor_id}— Obtener un médico específico por IDPOST /doctors— Crear un nuevo médicoPUT /doctors/{doctor_id}— Actualizar la información de un médicoDELETE /doctors/{doctor_id}— Eliminar un médico
Pacientes
GET /patients— Listar todos los pacientesGET /patients/{patient_id}— Obtener un paciente específico por IDPOST /patients— Crear un nuevo pacientePUT /patients/{patient_id}— Actualizar la información de un pacienteDELETE /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 IDPOST /medical-records— Crear un nuevo historial médicoPUT /medical-records/{record_id}— Actualizar un historial médicoDELETE /medical-records/{record_id}— Eliminar un historial médico
Citas
GET /appointments— Listar todas las citasGET /appointments/{appointment_id}— Obtener una cita específica por IDPOST /appointments— Crear una nueva citaPUT /appointments/{appointment_id}— Actualizar una citaDELETE /appointments/{appointment_id}— Eliminar una cita
Telemedicina
POST /telemedicine/visits/— Crear una nueva visita virtualGET /telemedicine/visits/— Listar todas las visitas virtualesGET /telemedicine/visits/{visit_id}— Obtener una visita virtual específica por IDPOST /telemedicine/chats/— Crear un nuevo registro de chatGET /telemedicine/chats/— Listar todos los registros de chatGET /telemedicine/chats/{chat_id}— Obtener un registro de chat específico por IDPOST /telemedicine/videos/— Crear una nueva sesión de videoGET /telemedicine/videos/— Listar todas las sesiones de videoGET /telemedicine/videos/{video_id}— Obtener una sesión de video específica por ID
Laboratorio
POST /lab/orders/— Crear una nueva orden de laboratorioGET /lab/orders/— Listar todas las órdenes de laboratorioGET /lab/orders/{order_id}— Obtener una orden de laboratorio específica por IDPOST /lab/results/— Crear un nuevo resultado de laboratorioGET /lab/results/— Listar todos los resultados de laboratorioGET /lab/results/{result_id}— Obtener un resultado de laboratorio específico por IDPOST /lab/images/— Crear una nueva imagen diagnósticaGET /lab/images/— Listar todas las imágenes diagnósticasGET /lab/images/{image_id}— Obtener una imagen diagnóstica específica por ID
Derivaciones
POST /referral/requests/— Crear una nueva solicitud de derivaciónGET /referral/requests/— Listar todas las solicitudes de derivaciónGET /referral/requests/{request_id}— Obtener una solicitud de derivación específica por IDPOST /referral/statuses/— Crear un nuevo estado de derivaciónGET /referral/statuses/— Listar todos los estados de derivaciónGET /referral/statuses/{status_id}— Obtener un estado de derivación específico por IDPOST /referral/notes/— Crear una nueva nota de especialistaGET /referral/notes/— Listar todas las notas de especialistaGET /referral/notes/{note_id}— Obtener una nota de especialista específica por ID
Farmacia
POST /pharmacy/medications/— Crear un nuevo medicamentoGET /pharmacy/medications/— Listar todos los medicamentosGET /pharmacy/medications/{med_id}— Obtener un medicamento específico por IDPOST /pharmacy/prescriptions/— Crear una nueva recetaGET /pharmacy/prescriptions/— Listar todas las recetasGET /pharmacy/prescriptions/{pres_id}— Obtener una receta específica por IDPOST /pharmacy/orders/— Crear una nueva orden de farmaciaGET /pharmacy/orders/— Listar todas las órdenes de farmaciaGET /pharmacy/orders/{order_id}— Obtener una orden de farmacia específica por ID
Seguros
POST /insurance/plans/— Crear un nuevo plan de seguroGET /insurance/plans/— Listar todos los planes de seguroGET /insurance/plans/{plan_id}— Obtener un plan de seguro específico por IDPOST /insurance/claims/— Crear una nueva reclamación de seguroGET /insurance/claims/— Listar todas las reclamaciones de seguroGET /insurance/claims/{claim_id}— Obtener una reclamación de seguro específica por IDPOST /insurance/payments/— Crear un nuevo pagoGET /insurance/payments/— Listar todos los pagosGET /insurance/payments/{payment_id}— Obtener un pago específico por IDPOST /insurance/invoices/— Crear una nueva facturaGET /insurance/invoices/— Listar todas las facturasGET /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 bloqueouv add <package>- Agregar una nueva dependenciauv remove <package>- Eliminar una dependenciauv run <command>- Ejecutar un comando en el entorno virtualuv 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
- Instalar dependencias de desarrollo:
uv sync --group dev - Realizar los cambios
- Ejecutar pruebas:
uv run pytest - Formatear código:
uv run black app/ tests/ - Enviar una solicitud de extracción
Consulta más en [Contribuciones](https://github.com/ AlwaysSany/health-api/blob/main/CONTRIBUTING.md).
Contacto
- Autor: Sany Ahmed
- Correo electrónico: sany2k8@gmail.com