prepare( "SELECT COUNT(*) FROM exam_ordenes o JOIN lab_pacientes p ON p.id = o.paciente_id {$whereSQL}" ); $countStmt->execute($params); $total = (int) $countStmt->fetchColumn(); // Datos $sql = " SELECT o.id, o.codigo, o.prioridad, o.estado, o.requiere_ayuno, o.horas_ayuno, o.medico_nombre, o.diagnostico, o.notas, o.creado_at, o.updated_at, p.id AS paciente_id, p.nombre_completo, p.numero_documento, p.tipo_documento, p.telefono, p.fecha_nacimiento, (SELECT COUNT(*) FROM exam_items ei WHERE ei.orden_id = o.id) AS total_items, (SELECT COUNT(*) FROM exam_items ei WHERE ei.orden_id = o.id AND ei.estado = 'resultado_listo') AS items_listos, (SELECT COUNT(*) FROM exam_muestras em WHERE em.orden_id = o.id AND em.estado = 'tomada') AS muestras_tomadas FROM exam_ordenes o JOIN lab_pacientes p ON p.id = o.paciente_id {$whereSQL} ORDER BY FIELD(o.prioridad, 'stat', 'urgente', 'normal'), o.creado_at ASC LIMIT {$limit} OFFSET {$offset} "; $stmt = $pdo->prepare($sql); $stmt->execute($params); $ordenes = $stmt->fetchAll(PDO::FETCH_ASSOC); // Calcular edad en años para cada paciente foreach ($ordenes as &$row) { if ($row['fecha_nacimiento']) { $diff = (new DateTime($row['fecha_nacimiento']))->diff(new DateTime()); $row['edad'] = $diff->y; } else { $row['edad'] = null; } } unset($row); jsonOk([ 'data' => $ordenes, 'total' => $total, 'page' => $page, 'limit' => $limit, 'pages' => (int) ceil($total / $limit), 'fecha' => $fecha, ]);