feat: Update patient name extraction and enhance page context generation in PageGenerator
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
<!-- Name and Date Section -->
|
||||
<div class="text-right mt-16">
|
||||
<h2 class="text-4xl font-bold tracking-wider mb-2">
|
||||
{{ name|upper }}
|
||||
{{ first_name|upper }}
|
||||
</h2>
|
||||
<h2 class="text-4xl font-bold tracking-wider mb-6">
|
||||
{{ surname|upper }}
|
||||
|
||||
+176
-26
@@ -1,5 +1,8 @@
|
||||
import datetime
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
class PageGenerator:
|
||||
def __init__(self, pnoe_df, seca_df, spirometry_df, patient_info):
|
||||
def __init__(self, pnoe_df: pd.DataFrame, seca_df: pd.DataFrame, spirometry_df: pd.DataFrame, patient_info: dict):
|
||||
self.pnoe_df = pnoe_df
|
||||
self.seca_df = seca_df
|
||||
self.spirometry_df = spirometry_df
|
||||
@@ -9,33 +12,180 @@ class PageGenerator:
|
||||
def page_1_context(self):
|
||||
# Extract patient information
|
||||
patient_name = self.patient_info.get("patient_name", "N/A")
|
||||
age = self.patient_info.get("age", "N/A")
|
||||
height = self.patient_info.get("height", "N/A")
|
||||
weight = self.patient_info.get("weight", "N/A")
|
||||
focus = self.patient_info.get("focus", "N/A")
|
||||
session_id = self.patient_info.get("session_id", "N/A")
|
||||
|
||||
# Extract PNOE data
|
||||
pnoe_summary = self.pnoe_df.describe().to_dict()
|
||||
|
||||
# Extract SECA data
|
||||
seca_summary = self.seca_df.describe().to_dict()
|
||||
|
||||
# Extract Spirometry data
|
||||
spirometry_summary = self.spirometry_df.describe().to_dict()
|
||||
|
||||
context = {
|
||||
"patient_name": patient_name,
|
||||
"age": age,
|
||||
"height": height,
|
||||
"weight": weight,
|
||||
"focus": focus,
|
||||
"session_id": session_id,
|
||||
"pnoe_summary": pnoe_summary,
|
||||
"seca_summary": seca_summary,
|
||||
"spirometry_summary": spirometry_summary,
|
||||
"first_name": patient_name.split()[0] if patient_name else "N/A",
|
||||
"surname": patient_name.split()[-1] if patient_name else "N/A",
|
||||
"date": datetime.datetime.now().strftime("%B %d, %Y"),
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
|
||||
def page_3_context(self):
|
||||
# Example: Extract detailed PNOE data for page 3
|
||||
pnoe_details = self.pnoe_df.head(10).to_dict(orient="records")
|
||||
|
||||
context = {
|
||||
"pnoe_details": pnoe_details,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_4_context(self):
|
||||
# Example: Extract detailed Spirometry data for page 4
|
||||
# Filter df_2 for Keirstyn Moran
|
||||
patient_data = self.patient_info[self.patient_info['LastName'].str.contains('Moran', case=False, na=False)]
|
||||
fat_percentage = patient_data['Adult_FMP'].iloc[0]
|
||||
weight_kg = patient_data['Weight'].iloc[0]
|
||||
lean_percentage = 100 - fat_percentage
|
||||
|
||||
fat_mass_lbs = weight_kg * (fat_percentage / 100) * 2.20462
|
||||
lean_mass_lbs = weight_kg * (lean_percentage / 100) * 2.20462
|
||||
|
||||
total_weight = fat_mass_lbs + lean_mass_lbs
|
||||
fat_percentage = (fat_mass_lbs / total_weight) * 100
|
||||
lean_percentage = (lean_mass_lbs / total_weight) * 100
|
||||
|
||||
sizes = [fat_percentage, lean_percentage]
|
||||
colors = ['#fde3ac', '#ff9966'] # Light yellow/tan and orange from the image
|
||||
|
||||
plt.figure(figsize=(8, 8))
|
||||
|
||||
wedges, texts, autotexts = plt.pie(sizes, autopct='', startangle=90, wedgeprops=dict(width=0.5, edgecolor='w'), colors=colors, labels=['', '']) # Remove default labels
|
||||
|
||||
plt.text(-1, 1, f'Fat Mass ({fat_mass_lbs:.1f}lbs)\n{fat_percentage:.1f}%',
|
||||
fontsize=14, fontweight='bold', ha='center', va='center',
|
||||
bbox=dict(boxstyle="round,pad=0.3", facecolor='white', alpha=0.8))
|
||||
|
||||
plt.text(1, -1, f'Lean Mass ({lean_mass_lbs:.1f}lbs)\n{lean_percentage:.1f}%',
|
||||
fontsize=14, fontweight='bold', ha='center', va='center',
|
||||
bbox=dict(boxstyle="round,pad=0.3", facecolor='white', alpha=0.8))
|
||||
|
||||
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle
|
||||
spirometry_details = self.spirometry_df.head(10).to_dict(orient="records")
|
||||
|
||||
context = {
|
||||
"spirometry_details": spirometry_details,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_5_context(self):
|
||||
# Example: Summary and conclusions for page 5
|
||||
summary = {
|
||||
"pnoe_summary": self.pnoe_df.describe().to_dict(),
|
||||
"seca_summary": self.seca_df.describe().to_dict(),
|
||||
"spirometry_summary": self.spirometry_df.describe().to_dict(),
|
||||
}
|
||||
|
||||
context = {
|
||||
"summary": summary,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_6_context(self):
|
||||
# Example: Recommendations based on data for page 6
|
||||
recommendations = [
|
||||
"Increase cardiovascular training.",
|
||||
"Incorporate strength training twice a week.",
|
||||
"Monitor respiratory function regularly.",
|
||||
]
|
||||
|
||||
context = {
|
||||
"recommendations": recommendations,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_7_context(self):
|
||||
# Example: Additional notes or references for page 7
|
||||
notes = "This report is generated based on the provided data. Consult a healthcare professional for personalized advice."
|
||||
|
||||
context = {
|
||||
"notes": notes,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_8_context(self):
|
||||
# Example: Contact information and disclaimers for page 8
|
||||
contact_info = {
|
||||
"clinic_name": "Health Clinic",
|
||||
"address": "123 Wellness St, Healthy City, HC 12345",
|
||||
"phone": "(123) 456-7890",
|
||||
"email": "contact@healthclinic.com"
|
||||
}
|
||||
|
||||
context = {
|
||||
"contact_info": contact_info,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_9_context(self):
|
||||
# Example: Graphs and visualizations for page 9
|
||||
graphs = [
|
||||
"graph1.png",
|
||||
"graph2.png",
|
||||
"graph3.png"
|
||||
]
|
||||
|
||||
context = {
|
||||
"graphs": graphs,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_10_context(self):
|
||||
# Example: Final remarks and next steps for page 10
|
||||
final_remarks = "Thank you for using our health assessment services. We look forward to assisting you in your health journey."
|
||||
|
||||
context = {
|
||||
"final_remarks": final_remarks,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_11_context(self):
|
||||
# Example: Additional resources and references for page 11
|
||||
resources = [
|
||||
{"title": "Healthy Living Guide", "link": "http://example.com/healthy-living"},
|
||||
{"title": "Exercise Tips", "link": "http://example.com/exercise-tips"},
|
||||
{"title": "Nutrition Advice", "link": "http://example.com/nutrition-advice"}
|
||||
]
|
||||
|
||||
context = {
|
||||
"resources": resources,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_12_context(self):
|
||||
# Example: Feedback and survey information for page 12
|
||||
feedback_info = "We value your feedback. Please visit http://example.com/feedback to share your experience."
|
||||
|
||||
context = {
|
||||
"feedback_info": feedback_info,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_13_context(self):
|
||||
# Example: Acknowledgments and credits for page 13
|
||||
acknowledgments = "This report was generated using data analysis techniques and the expertise of our medical team."
|
||||
|
||||
context = {
|
||||
"acknowledgments": acknowledgments,
|
||||
}
|
||||
|
||||
return context
|
||||
|
||||
def page_18_context(self):
|
||||
# Example: Legal disclaimers and terms for page 18
|
||||
legal_disclaimer = "This report is for informational purposes only and does not constitute medical advice."
|
||||
|
||||
context = {
|
||||
"legal_disclaimer": legal_disclaimer,
|
||||
}
|
||||
|
||||
return context
|
||||
Reference in New Issue
Block a user