diff --git a/api/ai_report.php b/api/ai_report.php
new file mode 100644
index 0000000..158ee92
--- /dev/null
+++ b/api/ai_report.php
@@ -0,0 +1,42 @@
+ false, 'error' => 'No symptoms or diagnosis provided.']);
+ exit;
+}
+
+$prompt = "You are a professional medical assistant. Based on the following symptoms and diagnosis, please generate a concise treatment plan and medical report for the patient.\n\n";
+if (!empty($symptoms)) {
+ $prompt .= "Symptoms:\n" . strip_tags($symptoms) . "\n\n";
+}
+if (!empty($diagnosis)) {
+ $prompt .= "Diagnosis:\n" . strip_tags($diagnosis) . "\n\n";
+}
+$prompt .= "Please provide the report in a clear, professional format using HTML tags (like
, , , etc.) for better readability.";
+
+try {
+ $response = LocalAIApi::createResponse([
+ 'input' => [
+ ['role' => 'system', 'content' => 'You are a helpful medical assistant.'],
+ ['role' => 'user', 'content' => $prompt],
+ ],
+ ]);
+
+ if (!empty($response['success'])) {
+ $text = LocalAIApi::extractText($response);
+ echo json_encode(['success' => true, 'report' => $text]);
+ } else {
+ echo json_encode(['success' => false, 'error' => $response['error'] ?? 'AI generation failed.']);
+ }
+} catch (Exception $e) {
+ echo json_encode(['success' => false, 'error' => $e->getMessage()]);
+}
+
diff --git a/assets/js/ai_helper.js b/assets/js/ai_helper.js
new file mode 100644
index 0000000..eeee588
--- /dev/null
+++ b/assets/js/ai_helper.js
@@ -0,0 +1,47 @@
+async function generateAIReport(button) {
+ const modal = button.closest(".modal");
+ const symptomsEditor = $(modal.querySelector('textarea[name="symptoms"]'));
+ const diagnosisEditor = $(modal.querySelector('textarea[name="diagnosis"]'));
+ const treatmentPlanEditor = $(modal.querySelector('textarea[name="treatment_plan"]'));
+
+ const symptomsText = symptomsEditor.length && symptomsEditor.summernote ? symptomsEditor.summernote('code') : (modal.querySelector('textarea[name="symptoms"]') ? modal.querySelector('textarea[name="symptoms"]').value : '');
+ const diagnosisText = diagnosisEditor.length && diagnosisEditor.summernote ? diagnosisEditor.summernote('code') : (modal.querySelector('textarea[name="diagnosis"]') ? modal.querySelector('textarea[name="diagnosis"]').value : '');
+
+ // Check if actually empty beyond HTML tags
+ const cleanSymptoms = symptomsText.replace(/<[^>]*>/g, "").trim();
+ const cleanDiagnosis = diagnosisText.replace(/<[^>]*>/g, "").trim();
+
+ if (!cleanSymptoms && !cleanDiagnosis) {
+ alert("Please enter symptoms or diagnosis first.");
+ return;
+ }
+
+ const originalHTML = button.innerHTML;
+ button.disabled = true;
+ button.innerHTML = ' AI generating...';
+
+ try {
+ const response = await fetch("api/ai_report.php", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({ symptoms: symptomsText, diagnosis: diagnosisText })
+ });
+ const data = await response.json();
+
+ if (data.success) {
+ if (treatmentPlanEditor.length && treatmentPlanEditor.summernote) {
+ treatmentPlanEditor.summernote('code', data.report);
+ } else {
+ modal.querySelector('textarea[name="treatment_plan"]').value = data.report;
+ }
+ } else {
+ alert("AI Error: " + (data.error || "Unknown error"));
+ }
+ } catch (error) {
+ console.error("AI Report generation failed:", error);
+ alert("Failed to generate AI suggestion.");
+ } finally {
+ button.disabled = false;
+ button.innerHTML = originalHTML;
+ }
+}
diff --git a/includes/layout/footer.php b/includes/layout/footer.php
index b1b0841..b30dc61 100644
--- a/includes/layout/footer.php
+++ b/includes/layout/footer.php
@@ -1277,7 +1277,12 @@
-
+
+
+
+ AI Suggestion
+
+
@@ -1352,7 +1357,12 @@
-
+
+
+
+ AI Suggestion
+
+
@@ -2622,5 +2632,6 @@
bootstrap.Modal.getOrCreateInstance(document.getElementById("visitResultsModal")).show();
}
+