prepare( "SELECT tc.id, tc.turno_id, tc.datos_respuestas, tc.estado, t.sesion_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.token = ? LIMIT 1" ); $stmt->execute([$token]); $tc = $stmt->fetch(PDO::FETCH_ASSOC); if (!$tc) jsonError('Consentimiento no encontrado.', 404); if ($tc['estado'] !== 'en_progreso') jsonError('Solo se pueden olvidar tomas en estado en_progreso.'); $dr = json_decode($tc['datos_respuestas'] ?? '{}', true) ?? []; foreach ($campos as $campo) { unset($dr[$campo]); } $pdo->prepare( "UPDATE turnero_consentimientos SET datos_respuestas = ?, siguiente_toma_at = NULL, toma_inicio_at = NULL WHERE token = ?" )->execute([json_encode($dr, JSON_UNESCAPED_UNICODE), $token]); notificarSSE((int)$tc['sesion_id']); // Olvidar una toma borra datos de un protocolo prolongado en curso: se registra // qué campos se descartaron, porque después no hay forma de saberlo. try { (new ActividadAdmin())->registrar( adminId(), 'turnero', 'resetear_toma', (int)$tc['id'], [ 'turno_id' => (int)$tc['turno_id'], 'turno_codigo' => $tc['codigo'], 'formulario_nombre' => $tc['formulario'], 'campos_olvidados' => $campos, ] ); } catch (\Throwable $e) { error_log('[resetear_toma] auditoría: ' . $e->getMessage()); } jsonOk([], 'Toma olvidada.');