Sistema de gestión integral para laboratorio clínico basado en arquitectura de microservicios con FastAPI, PostgreSQL y Docker.
- Arquitectura
- Tecnologías
- Requisitos Previos
- Instalación y Setup
- Estado del Proyecto
- Estructura del Proyecto
- Servicios
- Bases de Datos
- Autenticación
- Desarrollo
- Testing
- Documentación
El sistema está compuesto por 5 microservicios independientes + API Gateway:
┌─────────────────────────────────────────────────────────────┐
│ API GATEWAY (8000) │
└─────────────────────────────────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌────────▼────────┐ ┌───────▼────────┐ ┌───────▼────────┐
│ User Service │ │ Patient Service │ │ Order Service │
│ (Port 8001) │ │ (Port 8002) │ │ (Port 8003) │
│ user_db │ │ patient_db │ │ order_db │
└─────────────────┘ └─────────────────┘ └────────────────┘
│ │ │
└────────────────────┼────────────────────┘
│
┌────────────────────┼─
│ │
┌────────▼────────┐ ┌───────▼────────┐
│ Billing Service │ │ Config Service │
│ (Port 8004) │ │ (Port 8005) │
│ billing_db │ │ config_db │
└─────────────────┘ └─────────────────┘
- Backend: FastAPI 0.104+, Python 3.11+
- ORM: SQLAlchemy 2.0 (async)
- Database: PostgreSQL 15
- Authentication: JWT (python-jose) + bcrypt
- Containers: Docker, Docker Compose
- Migrations: Alembic
- Logging: Loguru
- Validation: Pydantic 2.5+
- Testing: Pytest
Sprint Actual: Sprint 4
- ✅ Docker Compose configurado (6 servicios + 5 bases de datos)
- ✅ Alembic configurado en todos los servicios
- ✅ Migraciones iniciales aplicadas
- ✅ Variables de entorno (.env) configuradas
- ✅ Modelos: CompanyInfo, Location, SystemSetting
- ✅ CRUD completo para información de empresa
- ✅ CRUD completo para sedes/sucursales
- ✅ CRUD completo para configuraciones del sistema
- ✅ 15 endpoints REST documentados
- ✅ Validaciones de negocio implementadas
- ✅ Modelos: User, Role, UserRole, PasswordResetToken, AuditLog
- ✅ Sistema de autenticación JWT
- ✅ Login con email/password
- ✅ Registro de usuarios con roles
- ✅ Cambio de contraseña
- ✅ Recuperación de contraseña (reset tokens)
- ✅ Middleware de autenticación
- ✅ Control de acceso basado en roles (RBAC)
- ✅ Auditoría de acciones (login, registro, cambios)
- ✅ 8 endpoints REST documentados
- ✅ Seed data: 4 roles + usuario admin
Roles disponibles:
- Administrador General (acceso completo)
- Recepcionista (pacientes, órdenes, facturación)
- Supervisor de Sede (reportes, conciliación)
- Laboratorista (resultados de lab)
- ✅ F-08: Gestión del catálogo
- ✅ F-09: Visualización y búsqueda de servicios
- ✅ F-10: Gestión económica del catálogo
- ✅ F-11: Creación y gestión de órdenes
- ✅ F-12: Control económico de órdenes
- ✅ F-13: Control administrativo de órdenes
- ✅ F-27: Reportes operativos
- ✅ F-03:Gestión del perfil de usuario
- ✅ F-04:Registro y mantenimiento de pacientes
- ✅ F-31:Parámetros fiscales y técnicos
- ✅ F-16:Gestión documental de comprobantes
- ✅ F-06:Consulta e historial clínico
- ✅ F-23:Gestión de discrepancias
- ✅ F-22:Reportes financieros
- ✅ F-20:Monitoreo y reenvío de notificaciones
- ✅ F-21:Conciliación automática diaria
- ✅ F-24:Sincronización automática
- ✅ F-26:Visualización de KPIs
- ✅ F-19:Alertas operativas
- ⏸️ F-05:Búsqueda y validación de datos
- ⏸️ F-14:Emisión automática de comprobantes
- ⏸️ F-17:Notificaciones automáticas al paciente
- ⏸️ F-25:Gestión técnica de integración
- ⏸️ F-32:Parámetros locales
- ⏸️ F-07:Exportación y reportes de pacientes
- ⏸️ F-28:Análisis de tendencias
- ⏸️ F-29:Interacción y exportación
- ⏸️ F-18:Gestión de comunicación institucional
- ⏸️ F-33:Backup y restauración
- ⏸️ F-15:Cumplimiento tributario y validación
LabMicroServ/
├── docker-compose.yml # Orquestación de servicios
├── .gitignore # Archivos ignorados
├── README.md # Este archivo
├── Sprint1.md # Planning Sprint 1
├── Historias.md # User Stories
│
├── user-service/ # ✅ COMPLETADO
│ ├── Dockerfile
│ ├── requirements.txt
│ ├── .env
│ ├── alembic.ini
│ ├── seed_data.py # Script de datos iniciales
│ ├── alembic/ # Migraciones DB
│ │ └── versions/
│ └── src/
│ ├── main.py # Entry point
│ ├── core/
│ │ ├── config.py # Configuración
│ │ ├── database.py # Conexión DB
│ │ └── security.py # JWT, hashing, RBAC
│ ├── models/
│ │ └── user.py # User, Role, UserRole, etc.
│ ├── schemas/
│ │ └── auth.py # Pydantic schemas
│ ├── repositories/
│ │ └── auth.py # Data access layer
│ ├── services/
│ │ └── auth.py # Business logic
│ └── routers/
│ └── auth.py # API endpoints
│
├── patient-service/ # 🔧 PREPARADO
│ ├── alembic/ # Migraciones aplicadas
│ └── src/
│ ├── models/ # PatientInfo, ContactInfo, etc.
│ └── ...
│
├── order-service/ # 🔧 PREPARADO (estructura modular)
│ ├── alembic/
│ └── src/
│ └── modules/
│ ├── catalog/ # Catálogo de servicios
│ ├── orders/ # Órdenes de servicio
│ └── lab_integration/ # Integración LIS
│
├── billing-service/ # 🔧 PREPARADO (estructura modular)
│ ├── alembic/
│ └── src/
│ └── modules/
│ ├── billing/ # Facturación SUNAT
│ └── reconciliation/ # Conciliación diaria
│
├── configuration-service/ # ✅ COMPLETADO (estructura modular)
│ ├── alembic/
│ └── src/
│ ├── main.py
│ └── modules/
│ ├── configuration/ # ✅ Config, Locations, Settings
│ │ ├── models.py
│ │ ├── schemas.py
│ │ ├── repository.py
│ │ ├── service.py
│ │ └── router.py
│ └── notifications/ # 🔧 PREPARADO
│
├── api-gateway/ # 🔧 PREPARADO
│ └── src/
│ └── main.py
│
└── docs/ # Documentación
├── ARQUITECTURA_MICROSERVICIOS.md
├── MODELOS_SQLALCHEMY.md
└── Requirements.md
Estado: Funcional
Funcionalidades:
- ✅ Login con JWT
- ✅ Registro de usuarios
- ✅ Gestión de roles (4 roles predefinidos)
- ✅ Cambio de contraseña
- ✅ Recuperación de contraseña
- ✅ Auditoría de acciones
- ✅ Control de acceso basado en roles
Endpoints disponibles: 8
POST /api/v1/auth/login- Iniciar sesiónPOST /api/v1/auth/register- Registrar usuarioGET /api/v1/auth/me- Usuario actualPOST /api/v1/auth/change-password- Cambiar contraseñaPOST /api/v1/auth/request-password-reset- Solicitar resetPOST /api/v1/auth/reset-password- Restablecer contraseñaPOST /api/v1/auth/verify-token- Verificar token- (más endpoints pendientes para gestión de usuarios)
Base de datos: user_db (5 tablas)
Estado: Base de datos configurada, pendiente implementación
Funcionalidades pendientes:
- Registro y gestión de pacientes
- Historial clínico
- Validaciones de DNI/RUC
- Pacientes recurrentes
Base de datos: patient_db (3 tablas)
Estado: Base de datos configurada, pendiente implementación
Módulos:
- Catalog: Catálogo de servicios/exámenes
- Orders: Gestión de órdenes de servicio
- Lab Integration: Sincronización con LIS
Base de datos: order_db (9 tablas)
Estado: Funcional - Integración SUNAT completada
Funcionalidades:
- ✅ Generación XML UBL 2.1 (estándar SUNAT)
- ✅ Firma digital de comprobantes
- ✅ Envío a SUNAT Beta/Producción vía SOAP
- ✅ Emisión de Facturas (01) y Boletas (03)
- ✅ Procesamiento de CDR (Constancia de Recepción)
- ✅ Manejo de estados tributarios
- ✅ CRUD completo de facturas
- ✅ Estadísticas y reportes de facturación
- ✅ Anulación de comprobantes
- ✅ Reenvío a SUNAT
Módulos:
- Billing: Facturación electrónica SUNAT ✅
- SUNAT Integration: Cliente SOAP + generador XML UBL 2.1 ✅
- Reconciliation: Conciliación y cierre de caja 🔧
Endpoints disponibles: 15+
- Creación de facturas/boletas
- Consulta y filtros
- Envío/reenvío a SUNAT
- Descarga de XML/CDR
- Anulación
- Estadísticas
Base de datos: billing_db (5 tablas)
Integración SUNAT:
- Ambiente Beta configurado (credenciales MODDATOS)
- Certificado autofirmado para pruebas
- Listo para producción (requiere certificado real)
Estado: Funcional
Funcionalidades:
- ✅ Gestión de información de empresa (RUC, razón social)
- ✅ Gestión de sedes/sucursales
- ✅ Configuración de parámetros del sistema (key-value)
- ✅ Actualización masiva de configuraciones
Endpoints disponibles: 15
- Información de empresa (3 endpoints)
- Sedes/Locations (5 endpoints)
- Configuraciones del sistema (7 endpoints)
Base de datos: config_db (5 tablas)
Estado: Configurado, pendiente routing
Funcionalidades pendientes:
- Enrutamiento unificado
- Autenticación centralizada
- Rate limiting
| Base de Datos | Puerto | Servicio | Tablas | Estado |
|---|---|---|---|---|
user_db |
5432 | user-service | 5 | ✅ Migrado |
patient_db |
5433 | patient-service | 3 | ✅ Migrado |
order_db |
5434 | order-service | 9 | ✅ Migrado |
billing_db |
5435 | billing-service | 5 | ✅ Migrado |
config_db |
5436 | configuration-service | 5 | ✅ Migrado |
Usuario: postgres
Password: 1234
- ✅ Contraseñas hasheadas con bcrypt
- ✅ Tokens JWT con expiración configurable (30 min por defecto)
- ✅ Validación de contraseñas seguras (8+ chars, mayúsculas, números)
- ✅ CORS configurado por servicio
- ✅ Variables sensibles en
.env(git ignored) - ⏳ HTTPS en producción (configurar reverse proxy)
- ⏳ Rate limiting en API Gateway
- ⏳ Refresh tokens
- William - User Service (Auth, Roles)
- Miguel - Catalog Service, Configuration
- Diego - Catalog Economic Module
- Eduard - Order Service
- Christian - Order Economic/Admin Controls
- Cristian - Reporting Service