-- Sprint 17: motor de hipótesis y evaluación explicable de confianza.
-- Migración aditiva para MariaDB 10.4+.
-- La puntuación es orientativa y nunca confirma parentescos automáticamente.

ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS puntuacion_calculada DECIMAL(5,2) NULL AFTER probabilidad_orientativa;
ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS nivel_confianza ENUM('sin_evaluar','muy_baja','baja','media','alta','muy_alta') NOT NULL DEFAULT 'sin_evaluar' AFTER puntuacion_calculada;
ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS criterios_evaluados SMALLINT UNSIGNED NOT NULL DEFAULT 0 AFTER nivel_confianza;
ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS peso_evaluado DECIMAL(8,2) NOT NULL DEFAULT 0 AFTER criterios_evaluados;
ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS ultima_evaluacion_en DATETIME NULL AFTER peso_evaluado;
ALTER TABLE gene_hipotesis
  ADD COLUMN IF NOT EXISTS ultima_revision_por BIGINT UNSIGNED NULL AFTER ultima_evaluacion_en;
ALTER TABLE gene_hipotesis
  ADD INDEX IF NOT EXISTS idx_hipotesis_confianza (id_empresa,id_caso,nivel_confianza,estado);

CREATE TABLE IF NOT EXISTS gene_hipotesis_criterios (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  id_empresa BIGINT UNSIGNED NOT NULL,
  id_caso BIGINT UNSIGNED NOT NULL,
  id_hipotesis BIGINT UNSIGNED NOT NULL,
  titulo VARCHAR(300) NOT NULL,
  descripcion TEXT NULL,
  direccion ENUM('a_favor','en_contra','contexto') NOT NULL DEFAULT 'a_favor',
  tipo_referencia ENUM('afirmacion','evidencia','contradiccion','prueba','manual') NOT NULL DEFAULT 'manual',
  referencia_id BIGINT UNSIGNED NULL,
  peso DECIMAL(5,2) NOT NULL DEFAULT 10.00,
  evaluacion ENUM('cumplido','parcial','no_cumplido','desconocido') NOT NULL DEFAULT 'desconocido',
  explicacion TEXT NULL,
  estado ENUM('activo','archivado') NOT NULL DEFAULT 'activo',
  revision SMALLINT UNSIGNED NOT NULL DEFAULT 1,
  creado_por BIGINT UNSIGNED NOT NULL,
  actualizado_por BIGINT UNSIGNED NULL,
  creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  actualizado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_hip_criterio_case (id_empresa,id_caso,id_hipotesis,estado),
  KEY idx_hip_criterio_reference (id_empresa,id_caso,tipo_referencia,referencia_id),
  KEY idx_hip_criterio_creator (creado_por),
  KEY idx_hip_criterio_updater (actualizado_por),
  CONSTRAINT fk_hip_criterio_company FOREIGN KEY (id_empresa) REFERENCES org_empresas(id),
  CONSTRAINT fk_hip_criterio_case FOREIGN KEY (id_caso) REFERENCES gene_casos(id) ON DELETE CASCADE,
  CONSTRAINT fk_hip_criterio_hypothesis FOREIGN KEY (id_hipotesis) REFERENCES gene_hipotesis(id) ON DELETE CASCADE,
  CONSTRAINT fk_hip_criterio_creator FOREIGN KEY (creado_por) REFERENCES org_usuarios(id),
  CONSTRAINT fk_hip_criterio_updater FOREIGN KEY (actualizado_por) REFERENCES org_usuarios(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS gene_hipotesis_revisiones (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  id_empresa BIGINT UNSIGNED NOT NULL,
  id_caso BIGINT UNSIGNED NOT NULL,
  id_hipotesis BIGINT UNSIGNED NOT NULL,
  evento ENUM('creacion','criterio_creado','criterio_actualizado','recalculo','estado_actualizado','revision_humana','prueba_actualizada') NOT NULL,
  estado_anterior VARCHAR(60) NULL,
  estado_nuevo VARCHAR(60) NULL,
  puntuacion_anterior DECIMAL(5,2) NULL,
  puntuacion_nueva DECIMAL(5,2) NULL,
  nivel_anterior VARCHAR(30) NULL,
  nivel_nuevo VARCHAR(30) NULL,
  motivo TEXT NULL,
  snapshot_json LONGTEXT NULL,
  revisado_por BIGINT UNSIGNED NOT NULL,
  creado_en DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY idx_hip_revision_case (id_empresa,id_caso,id_hipotesis,creado_en),
  KEY idx_hip_revision_user (revisado_por),
  CONSTRAINT fk_hip_revision_company FOREIGN KEY (id_empresa) REFERENCES org_empresas(id),
  CONSTRAINT fk_hip_revision_case FOREIGN KEY (id_caso) REFERENCES gene_casos(id) ON DELETE CASCADE,
  CONSTRAINT fk_hip_revision_hypothesis FOREIGN KEY (id_hipotesis) REFERENCES gene_hipotesis(id) ON DELETE CASCADE,
  CONSTRAINT fk_hip_revision_user FOREIGN KEY (revisado_por) REFERENCES org_usuarios(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
