Ali2206 commited on
Commit
7e654ed
·
verified ·
1 Parent(s): 81dee31

Update api/routes.py

Browse files
Files changed (1) hide show
  1. api/routes.py +13 -14
api/routes.py CHANGED
@@ -151,11 +151,9 @@ def format_timestamp(timestamp: str) -> str:
151
  if not isinstance(timestamp, str):
152
  return ""
153
  try:
154
- # Parse the timestamp and extract just the date part
155
  dt = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z")
156
  return dt.strftime("%Y-%m-%d")
157
  except ValueError:
158
- # If parsing fails, return the original string (safely escaped later)
159
  return timestamp
160
 
161
  async def process_synthea_patient(bundle: dict, file_path: str) -> Optional[dict]:
@@ -345,7 +343,7 @@ async def import_patients(
345
  errors.append(f"No valid patient data in {file_path}")
346
 
347
  except Exception as e:
348
- logger.error(f"Error processing {file_path}: {str(e)}")
349
  errors.append(f"Error in {file_path}: {str(e)}")
350
  continue
351
 
@@ -618,7 +616,7 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
618
  escape_latex_special_chars(hyphenate_long_strings(n.get("text", "") or ""))
619
  )
620
  for n in patient.get("notes", [])
621
- ) or "\\multicolumn{3}{l}{No notes available} \\\\"
622
 
623
  condition_rows = " \\\\\n".join(
624
  "{} & {} & {} & {} & {}".format(
@@ -629,7 +627,7 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
629
  escape_latex_special_chars(hyphenate_long_strings(c.get("verification_status", "") or ""))
630
  )
631
  for c in patient.get("conditions", [])
632
- ) or "\\multicolumn{5}{l}{No conditions available} \\\\"
633
 
634
  medication_rows = " \\\\\n".join(
635
  "{} & {} & {} & {} & {}".format(
@@ -640,7 +638,7 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
640
  escape_latex_special_chars(hyphenate_long_strings(m.get("dosage", "") or ""))
641
  )
642
  for m in patient.get("medications", [])
643
- ) or "\\multicolumn{5}{l}{No medications available} \\\\"
644
 
645
  encounter_rows = " \\\\\n".join(
646
  "{} & {} & {} & {} & {}".format(
@@ -651,7 +649,7 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
651
  escape_latex_special_chars(hyphenate_long_strings(e.get("service_provider", "") or ""))
652
  )
653
  for e in patient.get("encounters", [])
654
- ) or "\\multicolumn{5}{l}{No encounters available} \\\\"
655
 
656
  # Use Template for safe insertion
657
  latex_template = Template(r"""
@@ -661,7 +659,8 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
661
  \usepackage{geometry}
662
  \geometry{margin=1in}
663
  \usepackage{booktabs,longtable,fancyhdr}
664
- \usepackage{array} % Added for better table column formatting
 
665
  \setlength{\headheight}{14.5pt} % Fix fancyhdr warning
666
  \pagestyle{fancy}
667
  \fancyhf{}
@@ -690,7 +689,7 @@ async def generate_patient_pdf(patient_id: str, current_user: dict = Depends(get
690
  \end{itemize}
691
 
692
  \section*{Clinical Notes}
693
- \begin{longtable}{>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{7cm}}
694
  \toprule
695
  \textbf{Date} & \textbf{Type} & \textbf{Text} \\
696
  \midrule
@@ -700,7 +699,7 @@ $notes
700
  \end{longtable}
701
 
702
  \section*{Conditions}
703
- \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{3cm}}
704
  \toprule
705
  \textbf{ID} & \textbf{Code} & \textbf{Status} & \textbf{Onset} & \textbf{Verification} \\
706
  \midrule
@@ -710,7 +709,7 @@ $conditions
710
  \end{longtable}
711
 
712
  \section*{Medications}
713
- \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{2cm}}
714
  \toprule
715
  \textbf{ID} & \textbf{Name} & \textbf{Status} & \textbf{Date} & \textbf{Dosage} \\
716
  \midrule
@@ -720,7 +719,7 @@ $medications
720
  \end{longtable}
721
 
722
  \section*{Encounters}
723
- \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4cm}>{\raggedright\arraybackslash}p{3cm}}
724
  \toprule
725
  \textbf{ID} & \textbf{Type} & \textbf{Status} & \textbf{Start} & \textbf{Provider} \\
726
  \midrule
@@ -732,8 +731,8 @@ $encounters
732
  \end{document}
733
  """)
734
 
735
- # Set the generated_on date to 03:59 PM CET, May 16, 2025
736
- generated_on = datetime.strptime("2025-05-16 15:59:00+01:00", "%Y-%m-%d %H:%M:%S%z").strftime("%A, %B %d, %Y at %I:%M %p")
737
 
738
  latex_filled = latex_template.substitute(
739
  generated_on=generated_on,
 
151
  if not isinstance(timestamp, str):
152
  return ""
153
  try:
 
154
  dt = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z")
155
  return dt.strftime("%Y-%m-%d")
156
  except ValueError:
 
157
  return timestamp
158
 
159
  async def process_synthea_patient(bundle: dict, file_path: str) -> Optional[dict]:
 
343
  errors.append(f"No valid patient data in {file_path}")
344
 
345
  except Exception as e:
346
+ 流量 logger.error(f"Error processing {file_path}: {str(e)}")
347
  errors.append(f"Error in {file_path}: {str(e)}")
348
  continue
349
 
 
616
  escape_latex_special_chars(hyphenate_long_strings(n.get("text", "") or ""))
617
  )
618
  for n in patient.get("notes", [])
619
+ ) or "\\multicolumn{3}{l}{No notes available}\n\\hline"
620
 
621
  condition_rows = " \\\\\n".join(
622
  "{} & {} & {} & {} & {}".format(
 
627
  escape_latex_special_chars(hyphenate_long_strings(c.get("verification_status", "") or ""))
628
  )
629
  for c in patient.get("conditions", [])
630
+ ) or "\\multicolumn{5}{l}{No conditions available}\n\\hline"
631
 
632
  medication_rows = " \\\\\n".join(
633
  "{} & {} & {} & {} & {}".format(
 
638
  escape_latex_special_chars(hyphenate_long_strings(m.get("dosage", "") or ""))
639
  )
640
  for m in patient.get("medications", [])
641
+ ) or "\\multicolumn{5}{l}{No medications available}\n\\hline"
642
 
643
  encounter_rows = " \\\\\n".join(
644
  "{} & {} & {} & {} & {}".format(
 
649
  escape_latex_special_chars(hyphenate_long_strings(e.get("service_provider", "") or ""))
650
  )
651
  for e in patient.get("encounters", [])
652
+ ) or "\\multicolumn{5}{l}{No encounters available}\n\\hline"
653
 
654
  # Use Template for safe insertion
655
  latex_template = Template(r"""
 
659
  \usepackage{geometry}
660
  \geometry{margin=1in}
661
  \usepackage{booktabs,longtable,fancyhdr}
662
+ \usepackage{array}
663
+ \usepackage{microtype} % Added for better text wrapping and hyphenation
664
  \setlength{\headheight}{14.5pt} % Fix fancyhdr warning
665
  \pagestyle{fancy}
666
  \fancyhf{}
 
689
  \end{itemize}
690
 
691
  \section*{Clinical Notes}
692
+ \begin{longtable}{>{\raggedright\arraybackslash}p{3.5cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{6.5cm}}
693
  \toprule
694
  \textbf{Date} & \textbf{Type} & \textbf{Text} \\
695
  \midrule
 
699
  \end{longtable}
700
 
701
  \section*{Conditions}
702
+ \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3.5cm}>{\raggedright\arraybackslash}p{3cm}}
703
  \toprule
704
  \textbf{ID} & \textbf{Code} & \textbf{Status} & \textbf{Onset} & \textbf{Verification} \\
705
  \midrule
 
709
  \end{longtable}
710
 
711
  \section*{Medications}
712
+ \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{3.5cm}>{\raggedright\arraybackslash}p{2cm}}
713
  \toprule
714
  \textbf{ID} & \textbf{Name} & \textbf{Status} & \textbf{Date} & \textbf{Dosage} \\
715
  \midrule
 
719
  \end{longtable}
720
 
721
  \section*{Encounters}
722
+ \begin{longtable}{>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4cm}>{\raggedright\arraybackslash}p{2cm}>{\raggedright\arraybackslash}p{4.5cm}>{\raggedright\arraybackslash}p{3cm}}
723
  \toprule
724
  \textbf{ID} & \textbf{Type} & \textbf{Status} & \textbf{Start} & \textbf{Provider} \\
725
  \midrule
 
731
  \end{document}
732
  """)
733
 
734
+ # Set the generated_on date to 04:51 PM CET, May 16, 2025
735
+ generated_on = datetime.strptime("2025-05-16 16:51:00+01:00", "%Y-%m-%d %H:%M:%S%z").strftime("%A, %B %d, %Y at %I:%M %p")
736
 
737
  latex_filled = latex_template.substitute(
738
  generated_on=generated_on,