prepare( "UPDATE turnero_consentimientos tc JOIN turnero_turnos t_old ON t_old.id = tc.turno_id JOIN turnero_turnos t_cur ON t_cur.id = ? AND t_cur.paciente_id IS NOT NULL AND t_cur.paciente_id = t_old.paciente_id SET tc.estado = 'rechazado' WHERE tc.id = ? AND tc.estado = 'en_progreso'" ); $stmt->execute([$turnoId, $consentId]); if ($stmt->rowCount() === 0) jsonError('Toma no encontrada o el paciente no coincide.', 404); // Cancelar una toma pendiente cierra un protocolo que quedó a medias en otra // visita: conviene saber quién lo dio por terminado. try { $inf = $pdo->prepare( "SELECT tc.turno_id, t.codigo, f.nombre AS formulario FROM turnero_consentimientos tc JOIN turnero_turnos t ON t.id = tc.turno_id JOIN lab_formularios f ON f.id = tc.formulario_id WHERE tc.id = ? LIMIT 1" ); $inf->execute([$consentId]); $d = $inf->fetch(PDO::FETCH_ASSOC) ?: []; (new ActividadAdmin())->registrar( adminId(), 'turnero', 'cancelar_toma_pendiente', $consentId, [ // Se registra bajo el turno donde se hizo la cancelación, que es // donde alguien la va a buscar en el historial. 'turno_id' => $turnoId, 'turno_origen_id' => isset($d['turno_id']) ? (int)$d['turno_id'] : null, 'turno_origen' => $d['codigo'] ?? null, 'formulario_nombre' => $d['formulario'] ?? null, ] ); } catch (\Throwable $e) { error_log('[cancelar_toma_pendiente] auditoría: ' . $e->getMessage()); } jsonOk(['cancelado' => true]);