getConnection(); $pdo->exec("CREATE TEMPORARY TABLE tmp_rips LIKE rips_examenes_pendientes"); $ins = $pdo->prepare( "INSERT INTO tmp_rips (numero_documento, datos, recepcion_id, hora_recepcion, created_at, turno_id) VALUES (?, ?, ?, ?, ?, ?)" ); // (documento, minutos hacia atrás de created_at, turno_id) $casos = [ ['1111', 5, null], // reciente y libre → debe aparecer ['2222', 45, null], // fuera de la ventana de 30 min ['3333', 5, 999], // ya usado por un turno ['4444', 1500, null], // de ayer ['5555', 20, null], // mismo doc, dos registros… ['5555', 3, null], // …gana el más reciente (marcado v2) ]; foreach ($casos as $i => [$doc, $min, $turno]) { $ins->execute([ $doc, json_encode([['cod_examen' => 'T' . $i, 'v' => $i === 5 ? 'v2' : 'v1']]), 1000 + $i, '08:00:00', date('Y-m-d H:i:s', time() - $min * 60), $turno, ]); } // La MISMA consulta de get_examenes_rips.php, apuntada a la tabla temporal $q = $pdo->prepare( "SELECT datos FROM tmp_rips WHERE numero_documento = ? AND DATE(created_at) = CURDATE() AND created_at >= NOW() - INTERVAL 30 MINUTE AND turno_id IS NULL ORDER BY created_at DESC LIMIT 1" ); $buscar = function (string $doc) use ($q) { $q->execute([$doc]); $r = $q->fetch(PDO::FETCH_ASSOC); return $r ? json_decode($r['datos'], true) : null; }; ok('un registro de hace 5 minutos se encuentra', $buscar('1111') !== null); ok('uno de hace 45 minutos queda fuera de la ventana', $buscar('2222') === null); ok('uno ya asignado a un turno no se reutiliza', $buscar('3333') === null); ok('uno de ayer no aparece aunque el documento coincida', $buscar('4444') === null); $r = $buscar('5555'); ok('con dos del mismo documento gana el más reciente', ($r[0]['v'] ?? '') === 'v2'); // El re-empuje del scheduler (DELETE + INSERT) refresca created_at, así que un // registro viejo que el sistema legado reenvía vuelve a entrar en la ventana. $pdo->exec("DELETE FROM tmp_rips WHERE numero_documento = '2222'"); $ins->execute(['2222', json_encode([['cod_examen' => 'RE']]), 2000, '08:00:00', date('Y-m-d H:i:s'), null]); ok('un re-empuje del scheduler vuelve a hacer visible el registro', $buscar('2222') !== null); echo "\n" . ($fallos === 0 ? "Todo correcto.\n" : "$fallos pruebas fallaron.\n"); exit($fallos === 0 ? 0 : 1);