[ 'method' => 'GET', 'header' => 'X-Lab-Key: ' . LAB_SYNC_KEY . "\r\n", 'timeout' => 8, 'ignore_errors' => true, ], ]); $resp = @file_get_contents($url, false, $ctx); if ($resp === false) jsonError('No se pudo conectar con RIPS Manager', 503); $data = json_decode($resp, true); if (!($data['ok'] ?? false)) { jsonError($data['error'] ?? 'Error en RIPS Manager', 502); } $examenes = $data['examenes'] ?? []; if (!$examenes) { jsonOk(['encontrados' => [], 'no_mapeados' => [], 'total_rips' => 0]); } // Mapear COD_EXAMEN → exam_tipos por codigo_legacy $codigos = array_values(array_unique(array_filter( array_map(fn($e) => trim($e['cod_examen'] ?? ''), $examenes) ))); $encontrados = []; $no_mapeados = []; if ($codigos) { $ph = implode(',', array_fill(0, count($codigos), '?')); $stmt = db()->prepare( "SELECT id AS exam_tipo_id, codigo, nombre, codigo_legacy FROM exam_tipos WHERE codigo_legacy IN ($ph) AND activo = 1" ); $stmt->execute($codigos); $mapa = []; foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $r) { $mapa[trim($r['codigo_legacy'])] = $r; } foreach ($codigos as $cod) { if (isset($mapa[$cod])) { $encontrados[] = [ 'exam_tipo_id' => (int)$mapa[$cod]['exam_tipo_id'], 'codigo' => $mapa[$cod]['codigo'], 'nombre' => $mapa[$cod]['nombre'], 'cod_rips' => $cod, ]; } else { $no_mapeados[] = $cod; } } } $meta = $examenes[0] ?? []; jsonOk([ 'encontrados' => $encontrados, 'no_mapeados' => $no_mapeados, 'total_rips' => count($examenes), 'recepcion_id' => $meta['recepcion_id'] ?? null, 'hora' => $meta['hora'] ?? null, ]);