diff --git a/modules/turnero/api/create_solicitud.php b/modules/turnero/api/create_solicitud.php index eb1c8c3..55a72ce 100644 --- a/modules/turnero/api/create_solicitud.php +++ b/modules/turnero/api/create_solicitud.php @@ -107,19 +107,25 @@ try { $stmtItem->execute([$solicitudId, $examId]); } - // ── Consentimientos: todos los formularios activos del laboratorio ── - // (no solo los vinculados a exámenes — el recepcionista elige cuáles aplican) + // ── Consentimientos: solo los configurados para este lugar ── $stmt = $pdo->prepare( - "SELECT id AS formulario_id, nombre AS formulario_nombre - FROM lab_formularios - WHERE is_active = 1 - ORDER BY nombre ASC" + "SELECT f.id AS formulario_id, f.nombre AS formulario_nombre + FROM lab_formularios f + INNER JOIN turnero_lugar_consentimientos tlc ON tlc.formulario_id = f.id + WHERE tlc.lugar_id = ? + AND f.is_active = 1 + ORDER BY f.nombre ASC" ); - $stmt->execute(); + $stmt->execute([$lugarId]); $consentimientosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC); - // Agregar estado actual de cada consentimiento (si ya fue enviado antes) + // Crear o recuperar estado de cada consentimiento requerido + $stmtCreateConsent = $pdo->prepare( + "INSERT IGNORE INTO turnero_consentimientos (turno_id, formulario_id, estado, creado_at) + VALUES (?, ?, 'pendiente', NOW())" + ); foreach ($consentimientosRequeridos as &$c) { + $stmtCreateConsent->execute([$turnoId, $c['formulario_id']]); $stC = $pdo->prepare( "SELECT estado FROM turnero_consentimientos WHERE turno_id = ? AND formulario_id = ?" ); diff --git a/modules/turnero/api/send_consentimiento.php b/modules/turnero/api/send_consentimiento.php index d3bd0b0..56bc329 100644 --- a/modules/turnero/api/send_consentimiento.php +++ b/modules/turnero/api/send_consentimiento.php @@ -77,48 +77,19 @@ if (empty($examIds)) { jsonError('La solicitud no tiene exámenes registrados.', 422); } -// ── 3. Obtener formularios de consentimiento (deduplicados) ─── -// 3a. Consentimientos por tipo de examen -$in = implode(',', array_fill(0, count($examIds), '?')); +// ── 3. Obtener formularios configurados para este turno ─────── $stmt = $pdo->prepare( - "SELECT DISTINCT etc.formulario_id, f.nombre AS formulario_nombre - FROM exam_tipo_consentimientos etc - JOIN lab_formularios f ON f.id = etc.formulario_id - WHERE etc.exam_tipo_id IN ({$in})" + "SELECT tc.formulario_id, f.nombre AS formulario_nombre + FROM turnero_consentimientos tc + JOIN lab_formularios f ON f.id = tc.formulario_id + WHERE tc.turno_id = ? + ORDER BY f.nombre ASC" ); -$stmt->execute($examIds); +$stmt->execute([$turnoId]); $formulariosRequeridos = $stmt->fetchAll(PDO::FETCH_ASSOC); -// 3b. Consentimientos por lugar/servicio (de la solicitud) -$lugarIdSol = (int)($turno['lugar_id'] ?? 0); -if (!$lugarIdSol) { - // Intentar leer lugar_id directo de la solicitud si no vino en el join anterior - $stmtLugar = $pdo->prepare("SELECT lugar_id FROM turnero_solicitudes WHERE id = ?"); - $stmtLugar->execute([$turno['solicitud_id']]); - $lugarIdSol = (int)($stmtLugar->fetchColumn() ?: 0); -} -if ($lugarIdSol > 0) { - $stmtLc = $pdo->prepare( - "SELECT tlc.formulario_id, f.nombre AS formulario_nombre - FROM turnero_lugar_consentimientos tlc - JOIN lab_formularios f ON f.id = tlc.formulario_id - WHERE tlc.lugar_id = ?" - ); - $stmtLc->execute([$lugarIdSol]); - foreach ($stmtLc->fetchAll(PDO::FETCH_ASSOC) as $row) { - // Deduplicar: solo agregar si aún no está en la lista - $yaExiste = false; - foreach ($formulariosRequeridos as $fr) { - if ((int)$fr['formulario_id'] === (int)$row['formulario_id']) { $yaExiste = true; break; } - } - if (!$yaExiste) { - $formulariosRequeridos[] = $row; - } - } -} - if (empty($formulariosRequeridos)) { - jsonOk(['consentimientos' => [], 'mensaje' => 'Ningún examen ni servicio requiere consentimiento.']); + jsonOk(['consentimientos' => [], 'mensaje' => 'Este turno no tiene consentimientos requeridos.']); } // ── 4. Generar / recuperar tokens UUID ────────────────────────