fetchAll( "SELECT o.id, p.nombre_completo AS paciente, p.numero_documento, p.eps, o.estado, o.medico_nombre, o.fecha_orden, o.examenes_solicitados, o.requiere_ayuno, o.horas_ayuno, o.created_at, ar.full_name AS revisada_por, aa.full_name AS autorizada_por FROM lab_ordenes_medicas o JOIN lab_pacientes p ON p.id = o.paciente_id LEFT JOIN admin_users ar ON ar.id = o.revisada_por LEFT JOIN admin_users aa ON aa.id = o.autorizada_por WHERE DATE(o.created_at) BETWEEN ? AND ? ORDER BY o.created_at DESC", [$desde, $hasta] ); $filename = "ordenes_$desde\_$hasta.csv"; $headers = ['ID','Paciente','Documento','EPS','Estado','Médico','Fecha Orden','Exámenes','Ayuno','H.Ayuno','Creada','Revisada por','Autorizada por']; break; case 'domicilios': $rows = $db->fetchAll( "SELECT d.id, p.nombre_completo AS paciente, p.telefono AS tel_paciente, d.direccion, d.barrio, d.ciudad, d.fecha_programada, d.hora_programada, d.estado, COALESCE(e.nombre_completo,'Sin asignar') AS enfermera, d.tipo_servicio, d.created_at FROM lab_domicilios d JOIN lab_pacientes p ON p.id = d.paciente_id LEFT JOIN lab_asignaciones a ON a.domicilio_id = d.id AND a.estado NOT IN ('liberada') LEFT JOIN lab_enfermeras e ON e.id = a.enfermera_id WHERE DATE(d.fecha_programada) BETWEEN ? AND ? ORDER BY d.fecha_programada, d.hora_programada", [$desde, $hasta] ); $filename = "domicilios_$desde\_$hasta.csv"; $headers = ['ID','Paciente','Teléfono','Dirección','Barrio','Ciudad','Fecha','Hora','Estado','Enfermera','Tipo Servicio','Registrado']; break; case 'pacientes': $rows = $db->fetchAll( "SELECT p.id, p.nombre_completo, p.tipo_documento, p.numero_documento, p.telefono, p.email, p.eps, p.ciudad, p.barrio, p.is_active, COUNT(o.id) AS total_ordenes, p.created_at FROM lab_pacientes p LEFT JOIN lab_ordenes_medicas o ON o.paciente_id = p.id GROUP BY p.id ORDER BY p.nombre_completo", [] ); $filename = "pacientes_" . date('Y-m-d') . ".csv"; $headers = ['ID','Nombre','Tipo Doc.','Documento','Teléfono','Email','EPS','Ciudad','Barrio','Activo','Total Órdenes','Registrado']; break; default: http_response_code(400); exit('Tipo de exportación no válido'); } header('Content-Type: text/csv; charset=utf-8'); header("Content-Disposition: attachment; filename=\"$filename\""); header('Pragma: no-cache'); $f = fopen('php://output', 'w'); fputs($f, "\xEF\xBB\xBF"); // BOM UTF-8 para Excel fputcsv($f, $headers); foreach ($rows as $row) { fputcsv($f, array_values($row)); } fclose($f); exit; } $adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Admin'; ?>