Beispiel #1
0
def nursePendingApp():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    # look up Time_slot table for next 7 days time_slot id
    next7d_slotid = helper.day2slotid(period=7)
    nurse_id = current_user.get_id()
    pending_app = helper.dept_appts(user=current_user, period=7).\
            filter(
             Application.status==StatusEnum.pending,
             Application.time_slot_id.in_(next7d_slotid)).all()

    helper.load_id2name_map()

    def response_generator(app):
        return {
            "appID": app.id,
            "date": app.date.strftime(helper.DATE_FORMAT),
            "time": app.time.strftime(helper.TIME_FORMAT),
            "doctor": helper.id2name(app.doctor_id),
            "patient": helper.id2name(app.patient_id),
            "symptoms": app.symptoms
        }

    ret = [response_generator(app) for app in pending_app]
    return make_response(jsonify(ret), 200)
Beispiel #2
0
def nurseUploadLabReport():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    nurse_id = current_user.get_id()

    mc_id = request.form['mcID']
    lr_id = request.form['id']
    lab_report_file = request.files['labReportInput']
    filename = lab_report_file.filename
    file_path = None
    if filename != "":
        # file_name = os.path.splitext(lr_fname)[0]
        file_ext = os.path.splitext(filename)[1]
        if file_ext not in current_app.config['UPLOAD_EXTENSIONS']:
            abort(400)
        lr_fname = secure_filename(mc_id + "_" + filename)
        file_path = os.path.join("EHR", app.config["UPLOAD_FOLDER"], lr_fname)
        lab_report_file.save(file_path)
    nurse_comments = request.form['commentsInput']

    lab_report = Lab_report.query.get(lr_id)
    if not lab_report:
        return make_response(
            jsonify({"ret": "Lab report request deos not exist"}))
    lab_report.nurse_comment = nurse_comments
    lab_report.uploader_id = nurse_id
    lab_report.file_path = lr_fname

    try:
        db.session.commit()
        return make_response(jsonify({'ret': 0}))
    except:
        db.session.rollback()
        return make_response(jsonify({'ret': "Database error"}))
Beispiel #3
0
def nurseOnGoingAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    helper.load_id2name_map()
    nurse_id = current_user.get_id()
    nowtime = datetime.datetime.now()

    # filter1: today's appts; filter2: status=approved
    today_approved_appts = helper.dept_appts(user=current_user, period=0).\
     filter(
      Application.status == StatusEnum.approved
      ).all()

    # filter2: now() in timeslot
    now_approved_appts = []
    for appt in today_approved_appts:
        appt_date_time = datetime.datetime.combine(appt.date, appt.time)
        if appt_date_time <= nowtime <= appt_date_time + timedelta(minutes=30):
            now_approved_appts.append(appt)
    return make_response(
        jsonify([{
            "appID": appt.id,
            "date": appt.date.strftime(helper.DATE_FORMAT),
            "time": appt.time.strftime(helper.TIME_FORMAT),
            "doctor": helper.id2name(appt.doctor_id),
            "patient": helper.id2name(appt.patient_id),
            "symptoms": appt.symptoms
        } for appt in now_approved_appts]))
Beispiel #4
0
def nurseEditPreExam():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    mc_id = request.form['mcID']
    body_temperature = helper.StrOrNone(request.form['bodyTemperature'])
    heart_rate = helper.StrOrNone(request.form['heartRate'])
    high_blood_pressure = helper.StrOrNone(request.form['highBloodPressure'])
    low_blood_pressure = helper.StrOrNone(request.form['lowBloodPressure'])
    weight = helper.StrOrNone(request.form['weight'])
    height = helper.StrOrNone(request.form['height'])
    state = stateEnum(request.form['state'])

    mc = Medical_record.query.filter(Medical_record.id == mc_id).first()
    mc.body_temperature = body_temperature
    mc.heart_rate = heart_rate
    mc.high_blood_pressure = high_blood_pressure
    mc.low_blood_pressure = low_blood_pressure
    mc.weight = weight
    mc.height = height
    mc.state = state

    try:
        db.session.commit()
        return make_response(jsonify({'ret': 0}))
    except:
        db.session.rollback()
        return make_response(jsonify({'ret': "Database error"}))
Beispiel #5
0
def viewMC():
    if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()):
        return redirect("/loadHomePage")

    patient_id = request.form['patientID']

    helper.load_id2name_map()
    table = Application.query.filter(
        Application.patient_id == patient_id,
        Application.status == StatusEnum.finished).all()
    return make_response(
        jsonify({
            'patientID':
            str(patient_id),
            'patientName':
            helper.id2name(patient_id),
            'appts': [{
                'appID': str(table[i].id),
                'mcID': table[i].mc_id,
                'date': table[i].date.strftime(helper.DATE_FORMAT),
                'time': table[i].time.strftime(helper.TIME_FORMAT),
                'doctor': helper.id2name(table[i].doctor_id),
                'symptoms': table[i].symptoms
            } for i in range(len(table))]
        }))
Beispiel #6
0
def nursePastAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    end_date = datetime.datetime.strptime(request.form['endDate'],
                                          helper.DATE_FORMAT)
    nurse_id = current_user.get_id()
    if request.form['startDate']:
        start_date = datetime.datetime.strptime(request.form['startDate'],
                                                helper.DATE_FORMAT)
        apps = helper.dept_appts(user=current_user, period=(end_date-start_date).days,\
          start_date=start_date).filter(Application.status==StatusEnum.finished)
    else:  # if startDate is None then get all past appts
        apps = helper.dept_appts(user=current_user, direction="past",\
          start_date=end_date).filter(Application.status==StatusEnum.finished)

    helper.load_id2name_map()
    return make_response(
        jsonify([{
            "appID": app.id,
            "date": app.date.strftime(helper.DATE_FORMAT),
            "time": app.time.strftime(helper.TIME_FORMAT),
            "doctor": helper.id2name(app.doctor_id),
            "patient": helper.id2name(app.patient_id),
            "symptoms": app.symptoms
        } for app in apps]))
Beispiel #7
0
def goViewMC():
    if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()):
        return redirect("/loadHomePage")

    patient_id = request.form['patientID']

    helper.load_id2name_map()
    return render_template('doctorNurseViewMC.html',
                           patientID=patient_id,
                           patientName=helper.id2name(patient_id))
Beispiel #8
0
def nurseCreateAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    try:
        nurseID = current_user.get_id()
        symptom = request.form['symptoms']
        time_slot_id = request.form['slotID']
        doctor_id = request.form['doctorID']
        patient_id = request.form['patientID']
        slot = Time_slot.query.filter(Time_slot.id == time_slot_id).first()
        date = slot.slot_date
        time = Time_segment.query.filter(
            Time_segment.t_seg_id == slot.slot_seg_id).first().t_seg_starttime

        # create an empty medical record for the to-be-created appointment
        medical_record = Medical_record(patient_id=patient_id)
        try:
            db.session.add(medical_record)
            db.session.commit()
        except:
            db.session.rollback()
            return make_response(jsonify({'ret': "error"}))
        mc_id = medical_record.id

        # create the appointment (approved application)
        application = Application(
            app_timestamp=datetime.datetime.now().strftime(
                "%Y-%m-%d %H:%M:%S"),
            symptoms=symptom,
            status=StatusEnum.approved,
            reject_reason="",
            date=date,
            time=time,
            time_slot_id=time_slot_id,
            doctor_id=doctor_id,
            approver_id=nurseID,
            patient_id=patient_id,
            mc_id=mc_id)
        db.session.add(application)

        # update time slot
        timeslot = Time_slot.query.filter(Time_slot.id == time_slot_id).first()
        if timeslot.n_booked < timeslot.n_total:
            timeslot.n_booked = timeslot.n_booked + 1
        else:
            db.session.rollback()
            db.session.delete(medical_record)
            db.session.commit()
            return make_response(jsonify({'ret': "no available slots!"}))
        db.session.commit()
        return make_response(jsonify({"ret": 0}), 200)
    except:
        db.session.rollback()
        return make_response(jsonify({'ret': "Database error"}))
Beispiel #9
0
def nurseGetDepartmentsForNurse():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    nurseID = current_user.get_id()
    dept_list, dept_name = helper.nurse_hosp2dept(nurseID)
    return make_response(
        jsonify([{
            "deptID": dept_list[i],
            "deptName": dept_name[i]
        } for i in range(len(dept_list))]), 200)
Beispiel #10
0
def nurseFutureAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    nurse_id = current_user.get_id()
    start_date = datetime.datetime.strptime(request.form['startDate'],
                                            helper.DATE_FORMAT)
    start_date_str = request.form['startDate']
    today_str = datetime.datetime.strftime(datetime.datetime.now(),
                                           helper.DATE_FORMAT)

    if request.form['endDate']:
        end_date = datetime.datetime.strptime(request.form['endDate'],
                                              helper.DATE_FORMAT)
        future_appt_filter = helper.dept_appts(
            user=current_user,
            direction="future",
            period=(end_date - start_date).days,
            start_date=start_date).filter(
                Application.status == StatusEnum.approved)
        if start_date_str == today_str:
            nowTime = datetime.datetime.strftime(datetime.datetime.today(),
                                                 helper.TIME_FORMAT)
            future_appts = future_appt_filter.filter(
                Application.time >= nowTime).all()
        else:
            future_appts = future_appt_filter.all()
    else:
        future_appt_filter = helper.dept_appts(
            user=current_user, direction="future",
            start_date=start_date).filter(
                Application.status == StatusEnum.approved)
        if start_date_str == today_str:
            nowTime = datetime.datetime.strftime(datetime.datetime.today(),
                                                 helper.TIME_FORMAT)
            future_appts = future_appt_filter.filter(
                Application.time >= nowTime).all()
        else:
            future_appt_filter.all()

    helper.load_id2name_map()

    def response_generator(app):
        return {
            "appID": app.id,
            "date": app.date.strftime(helper.DATE_FORMAT),
            "time": app.time.strftime(helper.TIME_FORMAT),
            "doctor": helper.id2name(app.doctor_id),
            "patient": helper.id2name(app.patient_id),
            "symptoms": app.symptoms
        }

    return make_response(
        jsonify([response_generator(app) for app in future_appts]), 200)
Beispiel #11
0
def getPatientInfo():
    if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()):
        return redirect("/login")

    p_id = request.form['patientID']
    patient = db.session.query(Patient).filter(Patient.id == p_id).first()
    gender = patient.gender
    if gender:
        gender = gender.value
    return make_response(
        jsonify({
            "ret": 0,
            "age": patient.age,
            "gender": gender,
            "bloodType": patient.blood_type,
            "allergies": patient.allergies,
            "chronics": patient.chronics,
            "medications": patient.medications
        }), 200)
Beispiel #12
0
def getLabReports():
    if not (helper.check_doctor_privilege() or helper.check_nurse_privilege()):
        return redirect("/loadHomePage")

    mc_id = request.form['mcID']
    mc = Medical_record.query.filter(Medical_record.id == mc_id).first()
    if not mc:
        return make_response({"ret": "Medical Record Not Found!"})
    return make_response(
        jsonify({
            "ret":
            0,
            "labReports": [{
                "lr_type": lr.lr_type,
                "id": lr.id,
                "nurse_comments": lr.nurse_comment,
                "doctor_comments": lr.doctor_comment,
                "file_path": lr.file_path
            } for lr in mc.lab_reports]
        }))
Beispiel #13
0
def nurseGoViewAppt(appID):
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    appt_res = Application.query.filter(Application.id == appID).first()
    finished = False
    if appt_res.status.value == "finished":
        finished = True

    helper.load_id2name_map()
    return render_template('nurseViewAppt.html',
                           appID=appt_res.id,
                           date=appt_res.date.strftime(helper.DATE_FORMAT),
                           time=appt_res.time.strftime(helper.TIME_FORMAT),
                           doctor=helper.id2name(appt_res.doctor_id),
                           patientID=appt_res.patient_id,
                           patient=helper.id2name(appt_res.patient_id),
                           symptoms=appt_res.symptoms,
                           comments=appt_res.reject_reason,
                           mcID=appt_res.mc_id,
                           finished=finished)
Beispiel #14
0
def nurseProcessApp():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    try:
        nurseID = current_user.get_id()
        appID = request.form['appID']
        # get Appt
        app = Application.query.filter(Application.id == appID).first()
        if not app:
            return {'ret': f'The application: {appID} does not exist!'}

        decision = request.form['action']
        app.approver_id = nurseID
        app.reject_reason = request.form['comments']
        if decision.lower() == 'reject':
            app.status = StatusEnum.rejected
            timeslot = Time_slot.query.filter(
                Time_slot.id == app.time_slot_id).first()
            if timeslot.n_booked > 0:
                timeslot.n_booked = timeslot.n_booked - 1
        elif decision.lower() == 'approve':
            app.status = StatusEnum.approved
            medical_record = Medical_record(patient_id=app.patient_id)
            try:
                db.session.add(medical_record)
                db.session.commit()
            except:
                db.session.rollback()
                return make_response(jsonify({'ret': "error"}))
            # link medical record to appointment
            mc_id = medical_record.id
            app.mc_id = mc_id

        db.session.commit()
        return make_response({'ret': 0})
    except:
        db.session.rollback()
        return make_response(jsonify({'ret': "Database error"}))
Beispiel #15
0
def nurseGetSlotsForDoctor():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    doctorID = request.form['doctorID']
    slot_list = helper.doc2slots_available(doctorID,
                                           0,
                                           start_date=datetime.date.today())
    date_list = [
        helper.t_slotid2date(slot_list[i].id) for i in range(len(slot_list))
    ]
    time_list = [
        helper.t_slot2time(slot_list[i].id) for i in range(len(slot_list))
    ]
    return make_response(
        jsonify([{
            "slotID":
            str(slot_list[i].id),
            "slotDateTime":
            datetime.datetime.combine(date_list[i],
                                      time_list[i]).strftime("%Y-%m-%d %H:%M")
        } for i in range(len(slot_list))]), 200)
Beispiel #16
0
def nurseTodayAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")

    nurseID = current_user.get_id()
    # department ID of current nurse
    today_depts_appts = helper.dept_appts(
        user=current_user,
        period=0).filter(Application.status == StatusEnum.approved).all()

    helper.load_id2name_map()

    def response_generator(app):
        return {
            "appID": app.id,
            "date": app.date.strftime(helper.DATE_FORMAT),
            "time": app.time.strftime(helper.TIME_FORMAT),
            "doctor": helper.id2name(app.doctor_id),
            "patient": helper.id2name(app.patient_id),
            "symptoms": app.symptoms
        }

    return make_response(
        jsonify([response_generator(app) for app in today_depts_appts]), 200)
Beispiel #17
0
def nurseAllAppt():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")
    return render_template('nurseAllAppt.html')
Beispiel #18
0
def nurseGetDoctorsForDepartment():
    if not helper.check_nurse_privilege():
        return redirect("/loadHomePage")
    deptID = request.form['deptID']
    return make_response(jsonify(helper.dept_to_doc(deptID)), 200)