┌─────────────────────────────────────────────────────────────┐
│ CodeIgniter 4 Application │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ AIMatching │ │ AIMatching │ │ pharma │ │
│ │ Controller │─▶│ Model │ │ helper │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────┐ │
│ │ SQL Server 2008 R2 │ │
│ │ - digemid_productos │ │
│ │ - ARTICULO │ │
│ │ - digemid_matching_suggestions │ │
│ │ - digemid_matching_history │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
│ (Opcional)
▼
┌─────────────────────────────────────────────────────────────┐
│ AWS Cloud Services │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ Lambda │────────▶│ Comprehend │ │
│ │ Function │ │ Medical │ │
│ └──────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Todos los archivos ya están creados en:
app/Config/AIMatching.phpapp/Helpers/pharma_helper.phpapp/Models/AIMatchingModel.phpapp/Controllers/AIMatching.phpapp/Views/ai_matching/dashboard.phpapp/Views/ai_matching/review.phpapp/Database/Migrations/2024-01-01-000001_CreateAIMatchingTables.php
php spark migrateEsto creará las tablas:
digemid_matching_suggestionsdigemid_matching_history
Agregar en app/Config/Routes.php:
$routes->group('aimatching', ['namespace' => 'App\Controllers'], function($routes) {
$routes->get('/', 'AIMatching::index');
$routes->post('processBatch', 'AIMatching::processBatch');
$routes->post('processWithAWS', 'AIMatching::processWithAWS');
$routes->get('review', 'AIMatching::review');
$routes->post('approve', 'AIMatching::approve');
$routes->post('reject', 'AIMatching::reject');
$routes->post('batchApprove', 'AIMatching::batchApprove');
$routes->get('stats', 'AIMatching::stats');
});Agregar en app/Config/Autoload.php:
public $helpers = ['pharma'];Navegar a: http://tu-dominio/aimatching
- Cuenta AWS activa
- AWS CLI instalado y configurado
- Permisos para crear Lambda, IAM, CloudWatch
Agregar en .env:
AWS_ACCESS_KEY=tu_access_key
AWS_SECRET_KEY=tu_secret_key
AWS_REGION=us-east-1cd aws
chmod +x deploy.sh
./deploy.shO manualmente:
# Desplegar CloudFormation
aws cloudformation deploy \
--template-file cloudformation/ai-matching-stack.yaml \
--stack-name pharma-ai-matching-stack \
--capabilities CAPABILITY_NAMED_IAM \
--region us-east-1
# Empaquetar Lambda
cd lambda
pip install -r requirements.txt -t .
zip -r ../pharma-matching.zip .
# Actualizar función
aws lambda update-function-code \
--function-name pharma-matching-processor \
--zip-file fileb://pharma-matching.zip \
--region us-east-1aws cloudformation describe-stacks \
--stack-name pharma-ai-matching-stack \
--query 'Stacks[0].Outputs'-
Dashboard (
/aimatching)- Ver estadísticas de matching
- Iniciar procesamiento por lotes
- Aprobar sugerencias de alta confianza
-
Procesamiento Local
- Click en "Iniciar Procesamiento Local"
- Seleccionar tamaño de lote (10-100 productos)
- El sistema genera sugerencias automáticamente
-
Procesamiento AWS (Opcional)
- Click en "Procesar con AWS Lambda"
- Usa Comprehend Medical para análisis avanzado
- Mayor precisión en extracción de entidades
-
Revisión (
/aimatching/review)- Ver sugerencias pendientes ordenadas por score
- Aprobar o rechazar cada sugerencia
- Ver detalles del análisis
-
Aprobación Automática
- Sugerencias con score ≥85% pueden auto-aprobarse
- Click en "Aprobar Alta Confianza"
Componentes del Score (0-1):
-
Similitud de Nombre (50%)
- Distancia Levenshtein normalizada
- Índice Jaccard de palabras
- Aplicación de sinónimos farmacéuticos
-
Similitud de Concentración (30%)
- Extracción de dosis (mg, ml, g, etc.)
- Comparación exacta
-
Forma Farmacéutica (20%)
- Tableta, cápsula, jarabe, etc.
- Coincidencia exacta o parcial
Umbrales:
- ≥85%: Auto-aprobación recomendada
- 70-84%: Sugerencia para revisión
- 50-69%: Revisión manual obligatoria
- <50%: Descartado
Editar app/Config/AIMatching.php:
public $autoMatchThreshold = 0.85; // Cambiar según necesidad
public $suggestThreshold = 0.70;
public $minThreshold = 0.50;public $synonyms = [
'paracetamol' => ['acetaminofen', 'acetaminofén'],
'ibuprofeno' => ['ibuprofén'],
// Agregar más...
];public $batchSize = 50; // Productos por lote
public $maxSuggestions = 5; // Sugerencias por producto// En controller o comando CLI
$this->matchingModel->clearOldRejections(30); // Díascurl http://tu-dominio/aimatching/stats- Local:
writable/logs/ - AWS: CloudWatch Logs
/aws/lambda/pharma-matching-processor
Lambda:
- 512 MB RAM, 300s timeout
- ~$0.0000166667 por segundo
- 1000 ejecuciones/mes: ~$5
Comprehend Medical:
- $0.01 por unidad (100 caracteres)
- 10,000 productos: ~$50-100
Total estimado: $55-105/mes para 10,000 productos
php spark migrateVerificar app/Config/Autoload.php incluye 'pharma'
Verificar .env tiene AWS_ACCESS_KEY y AWS_SECRET_KEY
- Revisar sinónimos en configuración
- Ajustar umbrales
- Verificar normalización de texto
-
Machine Learning
- Entrenar modelo con historial de decisiones
- Usar AWS SageMaker
-
Procesamiento Asíncrono
- Cola de trabajos con SQS
- Procesamiento en background
-
API REST
- Exponer endpoints para integraciones
- Documentación OpenAPI
-
Dashboard Analítico
- Gráficos de tendencias
- Métricas de precisión del algoritmo
Para problemas o consultas:
- Revisar logs en
writable/logs/ - Verificar configuración en
app/Config/AIMatching.php - Consultar documentación de CodeIgniter 4