File size: 3,363 Bytes
5aec14b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from flask import Flask, render_template, request, send_file, redirect, url_for
import os
import logging
from utils.meldrx import MeldRxAPI
from old.oneclick import generate_discharge_paper_one_click

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

app = Flask(__name__)

# Configuration from environment variables
CLIENT_ID = os.getenv("MELDRX_CLIENT_ID", "04bdc9f9a23d488a868b93d594ee5a4a")
CLIENT_SECRET = os.getenv("MELDRX_CLIENT_SECRET", None)
WORKSPACE_ID = os.getenv("MELDRX_WORKSPACE_ID", "09ed4f76-b5ac-42bf-92d5-496933203dbe")
SPACE_URL = os.getenv("SPACE_URL", "https://multitransformer-tonic-discharge-guard.hf.space")
REDIRECT_URI = f"{SPACE_URL}/auth/callback"

# Initialize MeldRx API
meldrx_api = MeldRxAPI(
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    workspace_id=WORKSPACE_ID,
    redirect_uri=REDIRECT_URI
)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/auth', methods=['GET', 'POST'])
def auth():
    if request.method == 'POST':
        auth_code = request.form.get('auth_code')
        if auth_code:
            if meldrx_api.authenticate_with_code(auth_code):
                return redirect(url_for('dashboard'))
            return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Authentication failed")
    return render_template('auth.html', auth_url=meldrx_api.get_authorization_url())

@app.route('/auth/callback', methods=['GET'])
def auth_callback():
    auth_code = request.args.get('code')
    if auth_code and meldrx_api.authenticate_with_code(auth_code):
        return redirect(url_for('dashboard'))
    return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Callback failed")

@app.route('/dashboard', methods=['GET'])
def dashboard():
    if not meldrx_api.access_token:
        return redirect(url_for('auth'))
    patients_data = meldrx_api.get_patients()
    if not patients_data or "entry" not in patients_data:
        return render_template('dashboard.html', error="Failed to fetch patient data")
    patients = [entry['resource'] for entry in patients_data.get('entry', [])]
    return render_template('dashboard.html', patients=patients, authenticated=True)

@app.route('/oneclick', methods=['GET', 'POST'])
def one_click():
    if not meldrx_api.access_token:
        return redirect(url_for('auth'))
    if request.method == 'POST':
        patient_id = request.form.get('patient_id', '')
        first_name = request.form.get('first_name', '')
        last_name = request.form.get('last_name', '')
        action = request.form.get('action', '')

        pdf_path, status, display_summary = generate_discharge_paper_one_click(
            meldrx_api, patient_id, first_name, last_name
        )

        if action == "Display Summary" and display_summary:
            return render_template('oneclick.html', status=status, summary=display_summary)
        elif action == "Generate PDF" and pdf_path:
            return send_file(pdf_path, as_attachment=True, download_name="discharge_summary.pdf")
        return render_template('oneclick.html', status=status, summary=display_summary)

    return render_template('oneclick.html')

if __name__ == '__main__':
    port = int(os.getenv("PORT", 7860))
    app.run(debug=False, host='0.0.0.0', port=port)