feat: CRM Clinicas SaaS - MVP completo
- Auth: Login/Register con creacion de clinica - Dashboard: KPIs reales, graficas recharts - Pacientes: CRUD completo con busqueda - Agenda: FullCalendar, drag-and-drop, vista recepcion - Expediente: Notas SOAP, signos vitales, CIE-10 - Facturacion: Facturas con IVA, campos CFDI SAT - Inventario: Productos, stock, movimientos, alertas - Configuracion: Clinica, equipo, catalogo servicios - Supabase self-hosted: 18 tablas con RLS multi-tenant - Docker + Nginx para produccion Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
86
.claude/helpers/pattern-consolidator.sh
Executable file
86
.claude/helpers/pattern-consolidator.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/bin/bash
|
||||
# Claude Flow V3 - Pattern Consolidator Worker
|
||||
# Deduplicates patterns, prunes old ones, improves quality scores
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
PATTERNS_DB="$PROJECT_ROOT/.claude-flow/learning/patterns.db"
|
||||
METRICS_DIR="$PROJECT_ROOT/.claude-flow/metrics"
|
||||
LAST_RUN_FILE="$METRICS_DIR/.consolidator-last-run"
|
||||
|
||||
mkdir -p "$METRICS_DIR"
|
||||
|
||||
should_run() {
|
||||
if [ ! -f "$LAST_RUN_FILE" ]; then return 0; fi
|
||||
local last_run=$(cat "$LAST_RUN_FILE" 2>/dev/null || echo "0")
|
||||
local now=$(date +%s)
|
||||
[ $((now - last_run)) -ge 900 ] # 15 minutes
|
||||
}
|
||||
|
||||
consolidate_patterns() {
|
||||
if [ ! -f "$PATTERNS_DB" ] || ! command -v sqlite3 &>/dev/null; then
|
||||
echo "[$(date +%H:%M:%S)] No patterns database found"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "[$(date +%H:%M:%S)] Consolidating patterns..."
|
||||
|
||||
# Count before
|
||||
local before=$(sqlite3 "$PATTERNS_DB" "SELECT COUNT(*) FROM short_term_patterns" 2>/dev/null || echo "0")
|
||||
|
||||
# Remove duplicates (keep highest quality)
|
||||
sqlite3 "$PATTERNS_DB" "
|
||||
DELETE FROM short_term_patterns
|
||||
WHERE rowid NOT IN (
|
||||
SELECT MIN(rowid) FROM short_term_patterns
|
||||
GROUP BY strategy, domain
|
||||
)
|
||||
" 2>/dev/null || true
|
||||
|
||||
# Prune old low-quality patterns (older than 7 days, quality < 0.3)
|
||||
sqlite3 "$PATTERNS_DB" "
|
||||
DELETE FROM short_term_patterns
|
||||
WHERE quality < 0.3
|
||||
AND created_at < datetime('now', '-7 days')
|
||||
" 2>/dev/null || true
|
||||
|
||||
# Promote high-quality patterns to long-term (quality > 0.8, used > 5 times)
|
||||
sqlite3 "$PATTERNS_DB" "
|
||||
INSERT OR IGNORE INTO long_term_patterns (strategy, domain, quality, source)
|
||||
SELECT strategy, domain, quality, 'consolidated'
|
||||
FROM short_term_patterns
|
||||
WHERE quality > 0.8
|
||||
" 2>/dev/null || true
|
||||
|
||||
# Decay quality of unused patterns
|
||||
sqlite3 "$PATTERNS_DB" "
|
||||
UPDATE short_term_patterns
|
||||
SET quality = quality * 0.95
|
||||
WHERE updated_at < datetime('now', '-1 day')
|
||||
" 2>/dev/null || true
|
||||
|
||||
# Count after
|
||||
local after=$(sqlite3 "$PATTERNS_DB" "SELECT COUNT(*) FROM short_term_patterns" 2>/dev/null || echo "0")
|
||||
local removed=$((before - after))
|
||||
|
||||
echo "[$(date +%H:%M:%S)] ✓ Consolidated: $before → $after patterns (removed $removed)"
|
||||
|
||||
date +%s > "$LAST_RUN_FILE"
|
||||
}
|
||||
|
||||
case "${1:-check}" in
|
||||
"run"|"consolidate") consolidate_patterns ;;
|
||||
"check") should_run && consolidate_patterns || echo "[$(date +%H:%M:%S)] Skipping (throttled)" ;;
|
||||
"force") rm -f "$LAST_RUN_FILE"; consolidate_patterns ;;
|
||||
"status")
|
||||
if [ -f "$PATTERNS_DB" ] && command -v sqlite3 &>/dev/null; then
|
||||
local short=$(sqlite3 "$PATTERNS_DB" "SELECT COUNT(*) FROM short_term_patterns" 2>/dev/null || echo "0")
|
||||
local long=$(sqlite3 "$PATTERNS_DB" "SELECT COUNT(*) FROM long_term_patterns" 2>/dev/null || echo "0")
|
||||
local avg_q=$(sqlite3 "$PATTERNS_DB" "SELECT ROUND(AVG(quality), 2) FROM short_term_patterns" 2>/dev/null || echo "0")
|
||||
echo "Patterns: $short short-term, $long long-term, avg quality: $avg_q"
|
||||
fi
|
||||
;;
|
||||
*) echo "Usage: $0 [run|check|force|status]" ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user