whereHas('department', function ($query) use ($departmentName) { $query->where('name_full', 'ilike', "$departmentName%"); }) ->where('period_start', '>=', $startDate) ->where('period_end', '<=', $endDate) ->latest() ->first(); if (!$report) { return "Данные по отделению '{$departmentName}' за указанный период не найдены."; } // dd($report, $report->metrikaResult); // 3. Возвращаем агенту структурированные данные (например, в JSON). // Агент проанализирует эти цифры и даст ответ. return json_encode([ 'department' => $departmentName, 'beds' => $report->metrikaResult->where('rf_metrika_item_id', 1)->first()?->value ?? 0, 'patients_in_department' => $report->metrikaResult->where('rf_metrika_item_id', 8)->first()?->value ?? 0, 'patient_outcome' => $report->metrikaResult->where('rf_metrika_item_id', 7)->first()?->value ?? 0, 'avg_bed_day' => $report->metrikaResult->where('rf_metrika_item_id', 18)->first()?->value ?? 0, 'occupancy_percent' => $report->metrikaResult->where('rf_metrika_item_id', 22)->first()?->value ?? 0, 'patients_is_recipient' => $report->metrikaResult->where('rf_metrika_item_id', 3)->first()?->value ?? 0, 'patients_is_discharged' => $report->metrikaResult->where('rf_metrika_item_id', 15)->first()?->value ?? 0, 'patients_is_transferred' => $report->metrikaResult->where('rf_metrika_item_id', 13)->first()?->value ?? 0, 'patients_is_deceased' => $report->metrikaResult->where('rf_metrika_item_id', 9)->first()?->value ?? 0, 'planned_patients' => $report->metrikaResult->where('rf_metrika_item_id', 4)->first()?->value ?? 0, 'urgent_patients' => $report->metrikaResult->where('rf_metrika_item_id', 12)->first()?->value ?? 0, 'total_bed_days' => $report->metrikaResult->where('rf_metrika_item_id', 25)->first()?->value ?? 0, 'total_pre_op_days' => $report->metrikaResult->where('rf_metrika_item_id', 26)->first()?->value ?? 0, 'patients_with_ops' => $report->metrikaResult->where('rf_metrika_item_id', 27)->first()?->value ?? 0, 'avg_pre_op_bed_day' => $report->metrikaResult->where('rf_metrika_item_id', 21)->first()?->value ?? 0, 'mortality_percent' => $report->metrikaResult->where('rf_metrika_item_id', 19)->first()?->value ?? 0, 'planned_operations' => $report->metrikaResult->where('rf_metrika_item_id', 11)->first()?->value ?? 0, 'urgent_operations' => $report->metrikaResult->where('rf_metrika_item_id', 10)->first()?->value ?? 0, 'staff' => $report->metrikaResult->where('rf_metrika_item_id', 17)->first()?->value ?? 0, // $this->saveMetric($reportDuty->id, 18, $avgBedDay); // Ср. койко-день ]); } /** * Get the tool's schema definition. */ public function schema(JsonSchema $schema): array { return [ 'department_name' => $schema->string()->required()->description('Название отделения, например: "Отоларингологическое"'), 'start_date' => $schema->string()->required()->description('Дата начала периода в формате YYYY-MM-DD HH:mm'), 'end_date' => $schema->string()->required()->description('Дата окончания периода в формате YYYY-MM-DD HH:mm'), ]; } }