|
import asyncio |
|
import base64 |
|
import io |
|
|
|
import markdown2 |
|
from xhtml2pdf import pisa |
|
|
|
from ocr.api.openai_requests import generate_consult_note |
|
|
|
|
|
async def create_consult_notes(text: str, changes: str | None) -> str: |
|
changes = '' if changes is None else f"\n\n**Changes**:\n```\n{changes}\n```" |
|
chief_complaint, hpi, social_history, surgical_history, family_history, medications, assessment, plan = await asyncio.gather( |
|
generate_consult_note(text, changes, 'chief'), |
|
generate_consult_note(text, changes, 'hpi'), |
|
generate_consult_note(text, changes, 'social'), |
|
generate_consult_note(text, changes, 'surgical'), |
|
generate_consult_note(text, changes, 'family'), |
|
generate_consult_note(text, changes, 'medications'), |
|
generate_consult_note(text, changes, 'assessment'), |
|
generate_consult_note(text, changes, 'plan'), |
|
) |
|
response = f"""# Chief Complaint |
|
|
|
{chief_complaint} |
|
|
|
# History of Present Illness (HPI) |
|
|
|
{hpi} |
|
|
|
# Social History |
|
|
|
{social_history} |
|
|
|
# Surgical History |
|
|
|
{surgical_history} |
|
|
|
# Family History |
|
|
|
{family_history} |
|
|
|
# Medications |
|
|
|
{medications} |
|
|
|
# Assessment |
|
|
|
{assessment} |
|
|
|
# Plan |
|
|
|
{plan}""" |
|
return response |
|
|
|
|
|
def text_to_pdf_base64(text: str) -> str: |
|
html_text = markdown2.markdown(text) |
|
pdf_buffer = io.BytesIO() |
|
pisa.CreatePDF(html_text, dest=pdf_buffer) |
|
pdf_bytes = pdf_buffer.getvalue() |
|
base64_pdf = base64.b64encode(pdf_bytes).decode("utf-8") |
|
return base64_pdf |
|
|