File size: 3,365 Bytes
9cb381b
09daffd
 
d452590
9cb381b
219df52
09daffd
 
 
219df52
09daffd
9cb381b
 
 
 
4a78b46
 
09daffd
9cb381b
 
 
 
 
 
 
09daffd
219df52
 
 
 
 
 
 
 
 
9cb381b
 
 
 
219df52
e714a62
 
9cb381b
 
e714a62
9cb381b
e714a62
 
 
9cb381b
 
 
 
 
 
e714a62
 
219df52
 
9cb381b
36e302c
219df52
 
 
 
36e302c
 
 
9cb381b
36e302c
 
9cb381b
36e302c
9cb381b
219df52
36e302c
 
219df52
 
 
36e302c
219df52
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 utils.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)