HealthyMe es un sistema de microservicios desarrollado en Java con Spring Boot para la gestión integral de clínicas médicas. Esta arquitectura facilita la administración escalable de pacientes, personal médico, citas médicas, consultas, laboratorios y toda la infraestructura asociada a un entorno clínico moderno.
El sistema se despliega de forma automatizada con Jenkins e integra un modelo de lenguaje autoalojado para la atención a pacientes.
El sistema está dividido en los siguientes microservicios:
-
Servicio de Autenticación y Autorización
- Gestión de usuarios, roles y permisos
- Autenticación y control de acceso
-
Servicio de Personal Médico
- Administración de médicos, enfermeros, técnicos y administradores
- Gestión de especialidades y horarios
-
Servicio de Pacientes
- Información de pacientes y seguros
- Historial médico y triajes
-
Servicio de Citas
- Programación y seguimiento de citas médicas
- Estado y gestión de agendas
-
Servicio de Consultas/Diagnósticos
- Registro de consultas médicas
- Emisión y control de recetas
-
Servicio de Laboratorio
- Reservas de laboratorio
- Gestión de exámenes y resultados
-
Servicio de Infraestructura
- Administración de sedes y consultorios
- Gestión de laboratorios y espacios
-
Servicio de Pagos
- Procesamiento de transacciones
- Facturación y control financiero
-
Servicio de Notificaciones
- Envío de avisos por múltiples canales
- Gestión de plantillas y adjuntos
- Java 21: Lenguaje de programación principal
- Spring Boot 3.4.4: Framework base para el desarrollo
- Spring Data JPA: Persistencia y acceso a datos
- Spring Security: Autenticación y autorización
- Java Mail: Envío de correos electrónicos
- MySQL 8.0: Base de datos relacional para cada microservicio
- Flyway: Gestión de migraciones de base de datos
- MapStruct 1.6.3: Mapeo entre entidades y DTOs
- Lombok 1.18.38: Reducción de código boilerplate
- SpringDoc 2.8.6: Documentación de la API con OpenAPI
- Kafka: Sistema de mensajería para comunicación entre servicios
- Resilience4j: Implementación de patrones de resiliencia
- Actuator: Monitoreo y gestión de aplicaciones
- Maven: Gestión de dependencias y construcción del proyecto
Implementado para transacciones distribuidas entre microservicios, manteniendo la consistencia de datos en operaciones que abarcan múltiples servicios.
Ejemplo: Creación de citas médicas
1. Cliente solicita nueva cita → Servicio de Citas
2. Verificar paciente válido → Servicio de Pacientes
3. Verificar disponibilidad médico → Servicio de Personal
4. Verificar consultorio disponible → Servicio de Infraestructura
5. Confirmación de cita → Cliente
En caso de error, se ejecutan acciones compensatorias para mantener la consistencia.
Utilizado para evitar llamadas a servicios no disponibles y proporcionar respuestas alternativas.
Implementado en:
- Servicio de citas: Para llamadas a servicios de pacientes, personal médico, etc.
- Servicio de pagos: Para comunicación con pasarelas de pago externas
- Servicio de notificaciones: Para envío de mensajes por diferentes canales
Implementado para comunicación asíncrona entre servicios:
Tópicos principales:
citas-events: Eventos de creación y modificación de citasconsultas-events: Notificaciones sobre consultas médicasexamenes-events: Información sobre exámenes de laboratoriopagos-events: Transacciones y estados de pagonotifications-commands: Comandos para envío de notificaciones
Para configurar y ejecutar este proyecto, necesitas:
- JDK 21 o superior
- Maven 3.8+
- MySQL 8.0 o superior
- Kafka
- Git
- IDE recomendado: IntelliJ IDEA
healthyme-app/
├── security-service/ # Servicio de autenticación
├── healthyme-personal/ # Servicio de personal médico
├── healthyme-pacientes/ # Servicio de pacientes
├── healthyme-citas/ # Servicio de citas
├── healthyme-consultas/ # Servicio de consultas/diagnósticos
├── healthyme-laboratorio/ # Servicio de laboratorio
├── healthyme-infraestructura/# Servicio de infraestructura
├── healthyme-payment/ # Servicio de pagos
├── healthyme-notification/ # Servicio de notificaciones
├── config-server/ # Configuración centralizada
├── api-gateway/ # Puerta de enlace API
└── discovery-server/ # Servidor de descubrimiento
git clone https://github.com/TheJose24/HealthyMe-Backend.git
cd HealthyMe-BackendCada microservicio utiliza un archivo .env para gestionar las variables de entorno en desarrollo local. Crea un archivo .env en la raíz de cada microservicio con el siguiente contenido:
# Configuración de Base de Datos
DB_HOST=localhost
DB_PORT=3306
DB_NAME=healthyme_{servicio}_db
DB_USER=tu_usuario
DB_PASSWORD=tu_contraseña
# Configuración del Servidor
PORT=808x # Diferente para cada microservicio
# Configuración de Kafka
KAFKA_BOOTSTRAP_SERVERS=localhost:9092Cada microservicio está configurado con múltiples perfiles:
- dev: Entorno de desarrollo local
- prod: Entorno de producción
Para especificar el perfil en tu IDE:
-
Busca la opción
Edit Configurationsdentro de la pestañaRun -
En active profiles indica el nombre del perfil con el que se va a ejecutar la aplicación (dev o prod)
master: Código en producción establedevelop: Rama de integración principalfeature/*: Ramas para nuevas funcionalidades
feature/[microservicio]-[descripción-breve]
Ejemplos:
feature/auth-login-pacientesfeature/citas-validacion-horariosfeature/recetas-envio-email
Todos los commits deben seguir esta estructura:
tipo(microservicio): Título descriptivo
- Cuerpo del commit con detalles del cambio.
Issue #número
Tipos de Commits:
feat: Nuevas funcionalidadesfix: Corrección de erroresdocs: Cambios en documentaciónstyle: Cambios que no afectan el funcionamientorefactor: Refactorización de código existentetest: Adición o modificación de pruebaschore: Tareas de mantenimiento, configuraciones, etc.
Después de iniciar cada microservicio, su documentación estará disponible en:
http://localhost:808x/healthyme-docs
Para contribuir al desarrollo:
- Crea una rama a partir de
develop - Implementa los cambios siguiendo las convenciones de código
- Realiza commits descriptivos según el formato establecido
- Crea un Pull Request para su revisión