getConnection(); $stmt = $pdo->prepare(' SELECT o.id, o.codigo, o.prioridad, o.estado, o.requiere_ayuno, o.horas_ayuno, o.medico_nombre, o.diagnostico, o.creado_at, p.nombre_completo, p.numero_documento, p.tipo_documento, p.fecha_nacimiento, p.eps FROM exam_ordenes o JOIN lab_pacientes p ON p.id = o.paciente_id WHERE o.id = ? '); $stmt->execute([$ordenId]); $orden = $stmt->fetch(PDO::FETCH_ASSOC); if (!$orden) { http_response_code(404); die('Orden no encontrada.'); } // Ítems $stmt = $pdo->prepare(' SELECT ei.estado, et.nombre AS tipo_nombre, et.codigo AS tipo_codigo, et.requiere_ayuno, et.horas_ayuno FROM exam_items ei JOIN exam_tipos et ON et.id = ei.exam_tipo_id WHERE ei.orden_id = ? ORDER BY et.nombre '); $stmt->execute([$ordenId]); $items = $stmt->fetchAll(PDO::FETCH_ASSOC); // Edad $edad = null; if ($orden['fecha_nacimiento']) { $edad = (new DateTime($orden['fecha_nacimiento']))->diff(new DateTime())->y; } // Ayuno requerido (por la orden o por algún ítem) $ayunoReq = (bool) $orden['requiere_ayuno']; foreach ($items as $it) { if ($it['requiere_ayuno']) { $ayunoReq = true; break; } } $horasValues = array_filter(array_column($items, 'horas_ayuno')); $horasAyuno = $orden['horas_ayuno'] ?? ($horasValues ? max($horasValues) : 0); } catch (\Throwable $e) { http_response_code(500); die('Error al cargar datos: ' . htmlspecialchars($e->getMessage())); } $fecha = $orden['creado_at'] ? (new DateTime($orden['creado_at']))->format('d/m/Y H:i') : date('d/m/Y'); // Generar código de barras como CSS barcode (sin librería externa) // Usaremos simplemente el código textual + formato visual $codigoBarras = $orden['codigo']; ?>