$(document).ready(function() { // run when page is loaded // prevent enter/return key from submitting the form $('input, select').bind('keydown', function (e) { var keyCode = e.keyCode || e.which; if(keyCode === 13) { e.preventDefault(); $('input, select, textarea')[$('input, select, textarea').index(this)+1].focus(); } }); $( function() { $( "#accordion" ).accordion({ heightStyle: "content", collapsible: true, active : 'none' }); }); // set up date picker $('.dates').datepicker(); // set up input functions $('#em_code_reported').change(function() { chart.changeCodeReported(); }); $('#encounter_type_picker').change(function() { chart.changeEncounter(); }); $('.time-group').change(function() { chart.calcTimeBased(); }); $('#hpi_type_none').change(function() { chart.showNotes(); chart.calcHPI(0); }); $('#hpi_type_chronic').change(function() { chart.showNotes(); chart.calcHPI(0); }); $('#hpi_type_elements').change(function() { chart.showNotes(); chart.calcHPI(0); }); $('.hpi-group').change(function(event) { chart.calcHPI(event.target.id); }); $('.ros-group').change(function(event) { chart.calcROS(event.target.id); }); $('.pfsh-group').change(function(event) { chart.calcPFSH(event.target.id); }); $('.exam-group').change(function(event) { chart.calcExam(event.target.id); }); $('.e95ba, .e95baD, .e95os, .e95osD').change(function(event) { chart.calcExamCalc95(event.target.id); }); $('.e97con, .e97eye, .e97ent, .e97neck, .e97resp, .e97card, .e97chest, .e97gastro, .e97geni, .e97lymph, .e97muscu, .e97skin, .e97neuro, .e97psych').change(function(event) { chart.calcExamCalc97(event.target.id); }); $('.dxtx-group').change(function(event) { chart.calcDxTx(event.target.id); }); $('.data-reviewed-group').change(function(event) { chart.calcDataReviewed(event.target.id); }); $('.risk-group').change(function(event) { chart.calcRisk(event.target.id); }); $('.use-result').change(function(event) { chart.updateOverallResult() }); $('#sos_exams_container :input').change(function() { chart.gradeSOSExam(); }); // setup the page based on current data chart.initPage(); }); // end document ready // create chart object var chart = (function($) { // (don't "var" any of these in the functions or they will only be local to the function) var hpi = 0; var ros = 1; var pfsh = 2; var historyScore = 0; // final component var examScore = 0; // final component var dxtxScore = 0; var dataReviewScore = 1; var riskScore = 0; var mdmScore = 0; // final component function initPage() { // run setup functions as solo (so they don't keep calling the other functions they normally call // changeCodeReported(true); // showValidCode(); changeEncounter(true); // showValidCode2(); calcTimeBased(true); // showNotes(true); calcHPI(0, true); calcROS(0, true); calcPFSH(0, true); calcHistoryResult(true); calcExam(0, true); calcDxTx(0, true); calcDataReviewed(0, true); calcRisk(0, true); calcMDM(true); gradeSOSExam(true); calcOverall(true); updateOverallResult(); } // end function initPage function changeCodeReported(solo) { // set solo default if (solo === undefined) { solo = false; } var emCodeReported = $('#em_code_reported').val(); emCodeReported = emCodeReported.trim(); if (emCodeReported) { $('#em_code_reported').val(emCodeReported); var encounterType = ''; var validCode = 'yes'; switch (emCodeReported) { case '99201': encounterType = 'office_new'; break; case '99202': encounterType = 'office_new'; break; case '99203': encounterType = 'office_new'; break; case '99204': encounterType = 'office_new'; break; case '99205': encounterType = 'office_new'; break; case '99212': encounterType = 'office_est'; break; case '99213': encounterType = 'office_est'; break; case '99214': encounterType = 'office_est'; break; case '99215': encounterType = 'office_est'; break; case '99221': encounterType = 'hospital_new'; break; case '99222': encounterType = 'hospital_new'; break; case '99223': encounterType = 'hospital_new'; break; case '99231': encounterType = 'hospital_sub'; break; case '99232': encounterType = 'hospital_sub'; break; case '99233': encounterType = 'hospital_sub'; break; case '99241': encounterType = 'consult'; break; case '99242': encounterType = 'consult'; break; case '99243': encounterType = 'consult'; break; case '99244': encounterType = 'consult'; break; case '99245': encounterType = 'consult'; break; default: encounterType = 'office_new'; validCode = 'no'; break; } // set encounter_type and valid_code value $('#encounter_type').val(encounterType); $('#encounter_type_picker option[value='+encounterType+']').attr('selected','selected'); $('#valid_code').val(validCode); showValidCode(); } // if this function is not being called solo, pass on the work if (!solo) { changeEncounter(); } } // end function changeCodeReported function showValidCode() { var emCodeReported = $('#em_code_reported').val(); var validCode = $('#valid_code').val(); if (emCodeReported && validCode == 'no') { $('#em_code_invalid').show(); } else { $('#em_code_invalid').hide(); } } // end showValidCode function changeEncounter(solo) { // set solo default if (solo === undefined) { solo = false; } var emCodeReported = $('#em_code_reported').val(); var encounterType = $('#encounter_type_picker').val(); $('#encounter_type').val(encounterType); var timeCodeTimes = ''; var validCode2 = 'no'; // hide all history and overall tables, then show the appropariate encounter-based $('.history-table').hide(); $('#history_grid_'+encounterType ).show(); $('.overall-table').hide(); $('#overall_grid_'+encounterType ).show(); // set and update encounter-based code displays switch (encounterType) { case 'office_new': timeCodeTimes = 'Time Requirements

99201 = 10 minutes
99202 = 20 minutes
99203 = 30 minutes
99204 = 40 minutes
99205 = 60 minutes

'; $('#exam_level_1').html('99201'); $('#exam_level_2').html('99202'); $('#exam_level_3').html('99203'); $('#exam_level_4').html('99204/99205'); validCode2 = in_array(emCodeReported, ['99201', '99202', '99203', '99204', '99205']) ? 'yes' : 'no'; break; case 'office_est': timeCodeTimes = 'Time Requirements

99212 = 10 minutes
99213 = 15 minutes
99214 = 25 minutes
99215 = 40 minutes

'; $('#exam_level_1').html('99212'); $('#exam_level_2').html('99213'); $('#exam_level_3').html('99214'); $('#exam_level_4').html('99215'); validCode2 = in_array(emCodeReported, ['99212', '99213', '99214', '99215']) ? 'yes' : 'no'; break; case 'hospital_new': timeCodeTimes = 'Time Requirements

99221 = 30 minutes
99222 = 50 minutes
99223 = 70 minutes

'; $('#exam_level_1').html('N/A'); $('#exam_level_2').html('N/A'); $('#exam_level_3').html('99221'); $('#exam_level_4').html('99222/99223'); validCode2 = in_array(emCodeReported, ['99221', '99222', '99223']) ? 'yes' : 'no'; break; case 'hospital_sub': timeCodeTimes = 'Time Requirements

99231 = 15 minutes
99232 = 25 minutes
99233 = 35 minutes

'; $('#exam_level_1').html('99231'); $('#exam_level_2').html('99232'); $('#exam_level_3').html('99233'); $('#exam_level_4').html('99233'); validCode2 = in_array(emCodeReported, ['99231', '99232', '99233']) ? 'yes' : 'no'; break; case 'consult': timeCodeTimes = 'Time Requirements

99241 = 15 minutes
99242 = 30 minutes
99243 = 40 minutes
99244 = 60 minutes
99245 = 80 minutes

'; $('#exam_level_1').html('99241'); $('#exam_level_2').html('99242'); $('#exam_level_3').html('99243'); $('#exam_level_4').html('99244/99245'); validCode2 = in_array(emCodeReported, ['99241', '99242', '99243', '99244', '99245']) ? 'yes' : 'no'; break; } $('#time_codes_times').html(timeCodeTimes); // set valid code and show message $('#valid_code2').val(validCode2); showValidCode2(); // if this function is not being called solo, pass on the work if (!solo) { // recalculate encounter-based elements chart.calcTimeBased(); chart.calcPFSH(); } } // end function changeEncounter function showValidCode2() { var emCodeReported = $('#em_code_reported').val(); var validCode2 = $('#valid_code2').val(); if (emCodeReported && validCode2 == 'no') { $('#em_code_invalid2').show(); } else { $('#em_code_invalid2').hide(); } } // end function showValidCode2 function calcTimeBased(solo) { // set solo default if (solo === undefined) { solo = false; } var encounterType = $('#encounter_type_picker').val(); var time1 = $('#time_1').prop('checked'); var time2 = $('#time_2').prop('checked'); var time3 = $('#time_3').prop('checked'); var timeMinutes = parseInt($('#time_minutes').val()); var timeCode = 'N/A'; var timeRequired = ''; if (time1 && time2 && time3 && timeMinutes>0) { // based on encounterType and # of minutes switch (encounterType) { case 'office_new': if (timeMinutes>59) { timeCode = '99205'; timeRequired = '(60 minutes)'; } else if (timeMinutes>39) { timeCode = '99204'; timeRequired = '(40 minutes)'; } else if (timeMinutes>29) { timeCode = '99203'; timeRequired = '(30 minutes)'; } else if (timeMinutes>19) { timeCode = '99202'; timeRequired = '(20 minutes)'; } else if (timeMinutes>9) { timeCode = '99201'; timeRequired = '(10 minutes)'; } break; case 'office_est': if (timeMinutes>39) { timeCode = '99215'; timeRequired = '(40 minutes)'; } else if (timeMinutes>24) { timeCode = '99214'; timeRequired = '(25 minutes)'; } else if (timeMinutes>14) { timeCode = '99213'; timeRequired = '(15 minutes)'; } else if (timeMinutes>9) { timeCode = '99212'; timeRequired = '(10 minutes)'; } break; case 'hospital_new': if (timeMinutes>69) { timeCode = '99223'; timeRequired = '(70 minutes)'; } else if (timeMinutes>49) { timeCode = '99222'; timeRequired = '(50 minutes)'; } else if (timeMinutes>29) { timeCode = '99221'; timeRequired = '(30 minutes)'; } break; case 'hospital_sub': if (timeMinutes>34) { timeCode = '99233'; timeRequired = '(35 minutes)'; } else if (timeMinutes>24) { timeCode = '99232'; timeRequired = '(25 minutes)'; } else if (timeMinutes>14) { timeCode = '99231'; timeRequired = '(15 minutes)'; } break; case 'consult': if (timeMinutes>79) { timeCode = '99245'; timeRequired = '(80 minutes)'; } else if (timeMinutes>59) { timeCode = '99244'; timeRequired = '(60 minutes)'; } else if (timeMinutes>39) { timeCode = '99243'; timeRequired = '(40 minutes)'; } else if (timeMinutes>29) { timeCode = '99242'; timeRequired = '(30 minutes)'; } else if (timeMinutes>14) { timeCode = '99241'; timeRequired = '(15 minutes)'; } break; } } // display value $('#time_code_display').html(timeCode); } // end function calcTimeBased function showNotes(solo) { // set solo default if (solo === undefined) { solo = false; } // set hpi type if ($('#hpi_type_none').is(':checked')) { $('#hpi_none_div').show(); $('#hpi_chronic_div').hide(); $('#hpi_elements_div').hide(); } if ($('#hpi_type_chronic').is(':checked')) { $('#hpi_none_div').hide(); $('#hpi_chronic_div').show(); $('#hpi_elements_div').hide(); } if ($('#hpi_type_elements').is(':checked')) { $('#hpi_none_div').hide(); $('#hpi_chronic_div').hide(); $('#hpi_elements_div').show(); } // show all notes divs for checked elements if (solo) { $('.hpi-group').each(function() { if ($('#'+this.id).is(':checked')) { $('#'+this.id+'_div').show(); } }); $('.ros-group').each(function() { if ($('#'+this.id).is(':checked')) { $('#'+this.id+'_div').show(); } }); $('.pfsh-group').each(function() { if ($('#'+this.id).is(':checked')) { $('#'+this.id+'_div').show(); } }); } } // end function showNotes function calcHPI(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // show/hide notes area if (elementID) { $('#'+elementID+'_div').toggle(); } hpi = 0; var result = 'Result:  N/A'; if ($('#hpi_type_none').is(':checked')) { } if ($('#hpi_type_chronic').is(':checked')) { result = 'Result:  Extended HPI (3 conditions)'; hpi = 4; } if ($('#hpi_type_elements').is(':checked')) { var count = 0; if ($('#hpi_location').is(':checked')) count++; if ($('#hpi_duration').is(':checked')) count++; if ($('#hpi_timing').is(':checked')) count++; if ($('#hpi_quality').is(':checked')) count++; if ($('#hpi_severity').is(':checked')) count++; if ($('#hpi_context').is(':checked')) count++; if ($('#hpi_modifying_factors').is(':checked')) count++; if ($('#hpi_assoc_signs').is(':checked')) count++; if (count>3) { result = 'Result:  Extended HPI (4+)'; hpi = 4; } else if (count>0) { result = 'Result: Brief HPI (1-3)'; hpi = 2; } } $('#hpi_result').html(result); // if this function is not being called solo, pass on the work if (!solo) { calcHistoryResult(); } } // end function calcHPI function calcROS(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // show/hide notes area if (elementID) { $('#'+elementID+'_div').toggle(); } ros = 1; var result = 'Result:  N/A'; var count = 0; if ($('#ros_constitutional').is(':checked')) count++; if ($('#ros_allergy').is(':checked')) count++; if ($('#ros_gastro').is(':checked')) count++; if ($('#ros_skin').is(':checked')) count++; if ($('#ros_eyes').is(':checked')) count++; if ($('#ros_genitourinary').is(':checked')) count++; if ($('#ros_enmt').is(':checked')) count++; if ($('#ros_hema').is(':checked')) count++; if ($('#ros_resp').is(':checked')) count++; if ($('#ros_endo').is(':checked')) count++; if ($('#ros_neuro').is(':checked')) count++; if ($('#ros_musculo').is(':checked')) count++; if ($('#ros_cardio').is(':checked')) count++; if ($('#ros_psych').is(':checked')) count++; if ($('#ros_all_other_negative').is(':checked') && count>0) { result = 'Result:  Complete (Pertinent & All Other Systems: 10+ systems)'; ros = 4; } else { if (count>9) { result = 'Result:  Complete (Pertinent & All Other Systems: 10+ systems)'; ros = 4; } else if (count>1) { result = 'Result:  Extended (Pertinent & Other Systems: 2-9 systems)'; ros = 3; } else if (count>0) { result = 'Result: Pertinent to Problem (1 system)'; ros = 2; } } $('#ros_result').html(result); // if this function is not being called solo, pass on the work if (!solo) { calcHistoryResult(); } } // end function calcROS function calcPFSH(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // show/hide notes area if (elementID) { $('#'+elementID+'_div').toggle(); } pfsh = 2; var result = 'Result:  N/A'; var count = 0; var result1 = 'Result:  Pertinent (1 history area)'; var result12 = 'Result:  Pertinent (1-2 history areas)'; var result23 = 'Result:  Complete (2-3 history areas)'; var result3 = 'Result:  Complete (3 history areas)'; if ($('#pfsh_past').is(':checked')) count++; if ($('#pfsh_family').is(':checked')) count++; if ($('#pfsh_social').is(':checked')) count++; var encounterType = $('#encounter_type').val(); switch (encounterType) { case 'office_new': case 'hospital_new': case 'consult': if (count==1) { result = result12; pfsh = 3; } if (count==2) { result = result12; pfsh = 3; } if (count==3) { result = result3; pfsh = 4; } break; case 'office_est': case 'hospital_sub': if (count==1) { result = result1; pfsh = 3; } if (count==2) { result = result23; pfsh = 4; } if (count==3) { result = result23; pfsh = 4; } break; } $('#pfsh_result').html(result); // if this function is not being called solo, pass on the work if (!solo) { calcHistoryResult(); } } // end function calcPFSH function calcHistoryResult(solo) { // set solo default if (solo === undefined) { solo = false; } var encounterType = $('#encounter_type').val(); historyScore = Math.min(hpi, ros, pfsh); var result = 'N/A'; // calculate code switch (historyScore) { case 1: result = 'Problem Focused - '; switch (encounterType) { case 'office_new': result += '99201'; break; case 'office_est': result += '99212'; break; case 'hospital_sub': result += '99231'; break; case 'consult': result += '99241'; break; } break; case 2: result = 'Expanded Problem Focused - '; switch (encounterType) { case 'office_new': result += '99202'; break; case 'office_est': result += '99213'; break; case 'hospital_sub': result += '99232'; break; case 'consult': result += '99242'; break; } break; case 3: result = 'Detailed - '; switch (encounterType) { case 'office_new': result += '99203'; break; case 'office_est': result += '99214'; break; case 'hospital_new': result += '99221'; break; case 'hospital_sub': result += '99233'; break; case 'consult': result += '99242'; break; } break; case 4: result = 'Comprehensive - '; switch (encounterType) { case 'office_new': result += '99204/99205'; break; case 'office_est': result += '99215'; break; case 'hospital_new': result += '99222/99223'; break; case 'hospital_sub': result += '99233'; break; case 'consult': result += '99244/99245'; break; } break; } $('#history_result').html(result); // update history grid highlights $('#history_grid_'+encounterType+'>tbody>tr>td').removeClass('history-highlight'); $('#history_grid_'+encounterType+'>tbody>tr>th').removeClass('history-highlight'); $('#'+encounterType+'_'+historyScore ).addClass('history-highlight'); $('#'+encounterType+'_hpi_'+hpi ).addClass('history-highlight'); if (hpi>0 || ros>1 || pfsh>2) { $('#'+encounterType+'_ros_'+ros ).addClass('history-highlight'); $('#'+encounterType+'_pfsh_'+pfsh ).addClass('history-highlight'); } $('#'+encounterType+'_level_'+historyScore ).addClass('history-highlight'); // if this function is not being called solo, pass on the work if (!solo) { // calculate overall calcOverall(); } } // end function calcHistoryResult function calcExam(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // get chosen values and determine higher value var exam95 = ''; if ($('input[name=exam95]:checked').length) { exam95 = parseInt($('input[name=exam95]:checked').val()); } var exam97 = ''; if ($('input[name=exam97]:checked').length) { exam97 = parseInt($('input[name=exam97]:checked').val()); } var exam97sos = ''; if ($('input[name=exam97sos]:checked').length) { exam97sos = parseInt($('input[name=exam97sos]:checked').val()); } if(exam95 !== '' && exam97 !== '' && exam97sos !== '') { examScore = Math.max(exam95, exam97, exam97sos); } else { examScore = ''; } // highlight the background table cell of the item chosen and the code for the greater of the 95 and 97 guidlines $('#examGrid>tbody>tr>td').removeClass('exam-highlight'); $('#examGrid>tbody>tr>th').removeClass('exam-highlight'); $('#exam95_cell_'+exam95 ).addClass('exam-highlight'); $('#exam97_cell_'+exam97 ).addClass('exam-highlight'); $('#exam97sos_cell_'+exam97sos ).addClass('exam-highlight'); $('#exam_cell_level_'+examScore ).addClass('exam-highlight'); $('#exam_type_level_'+examScore ).addClass('exam-highlight'); // calculate overall // if this function is not being called solo, pass on the work if (!solo) { calcOverall(); } } // end function calcExam function calcExamCalc95(elementID, solo) { var resultBA = 0; var resultOS = 0; // 95 guidelines var ba95 = $('input.e95ba:checked').length; $('#examCalcBA').html(ba95); if ( ba95 > 7 ) resultBA = 4; else if ( ba95 > 1 && $('#e95baDetail').is(":checked") ) resultBA = 3; else if ( ba95 > 1 ) resultBA = 2; else if ( ba95 > 0 ) resultBA = 1; var os95 = $('input.e95os:checked').length; $('#examCalcOS').html(os95); if ( os95 > 7 ) resultOS = 4; else if ( os95 > 1 && $('#e95osDetail').is(":checked") ) resultOS = 3; else if ( os95 > 1 ) resultOS = 2; else if ( os95 > 0 ) resultOS = 1; $("input[name=exam95]").val([Math.max(resultBA, resultOS)]); calcExam(); } function calcExamCalc97(elementID, solo) { // 97 guidelines var systems = 0; var bullets = 0; var count = 0; count = $('input.e97con:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97eye:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97ent:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97neck:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97resp:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97card:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97chest:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97gastro:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97geni:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97lymph:checked').length; bullets = bullets + count; if ( count > 1 ) systems = systems + 1; // note this one takes 2 checkboxes to count as a organ system count = $('input.e97muscu:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97skin:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97neuro:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; count = $('input.e97psych:checked').length; bullets = bullets + count; if ( count > 0 ) systems = systems + 1; $('#examCalc97Bullets').html(bullets); $('#examCalc97OS').html(systems); if ( bullets > 17 && systems > 8 ) { $("input[name=exam97]").val([4]); } else if ( bullets > 11 && systems > 1 ) { $("input[name=exam97]").val([3]); } else if ( bullets > 5 ) { $("input[name=exam97]").val([2]); } else if ( bullets > 0 ) { $("input[name=exam97]").val([1]); } else { $("input[name=exam97]").val([0]); } calcExam(); } function calcDxTx(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // get entered values var dxtx_1 = parseInt($('#dxtx_1').val()); var dxtx_2 = parseInt($('#dxtx_2').val()); var dxtx_3 = parseInt($('#dxtx_3').val()); var dxtx_4 = parseInt($('#dxtx_4').val()); var dxtx_5 = parseInt($('#dxtx_5').val()); //validate min/max var dxtx_1_real = validateMinMax(dxtx_1, 0, 2); var dxtx_2_real = validateMinMax(dxtx_2, 0, 5); var dxtx_3_real = validateMinMax(dxtx_3, 0, 5); var dxtx_4_real = validateMinMax(dxtx_4, 0, 1); var dxtx_5_real = validateMinMax(dxtx_5, 0, 5); if (dxtx_1 != dxtx_1_real) { $('#dxtx_1').val(dxtx_1_real); dxtx_1 = dxtx_1_real; } if (dxtx_2 != dxtx_2_real) { $('#dxtx_2').val(dxtx_2_real); dxtx_2 = dxtx_2_real; } if (dxtx_3 != dxtx_3_real) { $('#dxtx_3').val(dxtx_3_real); dxtx_3 = dxtx_3_real; } if (dxtx_4 != dxtx_4_real) { $('#dxtx_4').val(dxtx_4_real); dxtx_4 = dxtx_4_real; } if (dxtx_5 != dxtx_5_real) { $('#dxtx_5').val(dxtx_5_real); dxtx_5 = dxtx_5_real; } dxtxScore = 0; // declared outside of this function - don't "var" it here or it won't keep it's value outside of the function var dxtxCalc = 0; var dxtxResult = ''; // calculate $('#dxdx_1_result').html(dxtx_1*1); dxtxCalc = dxtx_1*1; $('#dxdx_2_result').html(dxtx_2*1); dxtxCalc = dxtxCalc+dxtx_2*1; $('#dxdx_3_result').html(dxtx_3*2); dxtxCalc = dxtxCalc+dxtx_3*2; $('#dxdx_4_result').html(dxtx_4*3); dxtxCalc = dxtxCalc+dxtx_4*3; $('#dxdx_5_result').html(dxtx_5*4); dxtxCalc = dxtxCalc+dxtx_5*4; // determine type switch (dxtxCalc) { case 0: dxtxResult = 'N/A'; break; case 1: dxtxResult = 'Minimal'; dxtxScore = 1; break; case 2: dxtxResult = 'Limited'; dxtxScore = 2; break; case 3: dxtxResult = 'Multiple'; dxtxScore = 3; break; default: // 4 or higher dxtxResult = 'Extensive'; dxtxScore = 4; break; } // write final result $('#dxtxResult').html(dxtxResult); $('#dxtxCalc').html(dxtxCalc); // if this function is not being called solo, pass on the work if (!solo) { // update the MDM grid calcMDM(); } } // end function calcDxTx function calcDataReviewed(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // get entered values var dataReviewedCalc = 0; if ($('#dataReviewed_1').is(':checked')) dataReviewedCalc++; if ($('#dataReviewed_2').is(':checked')) dataReviewedCalc++; if ($('#dataReviewed_3').is(':checked')) dataReviewedCalc++; if ($('#dataReviewed_4').is(':checked')) dataReviewedCalc++; if ($('#dataReviewed_5').is(':checked')) dataReviewedCalc++; if ($('#dataReviewed_6').is(':checked')) dataReviewedCalc += 2; if ($('#dataReviewed_7').is(':checked')) dataReviewedCalc += 2; // determine type switch (dataReviewedCalc) { case 0: case 1: dataResult = 'Minimal'; dataReviewScore = 1; break; case 2: dataResult = 'Limited'; dataReviewScore = 2; break; case 3: dataResult = 'Multiple'; dataReviewScore = 3; break; default: // 4 or higher dataResult = 'Extensive'; dataReviewScore = 4; break; } // write final result $('#dataReviewResult').html(dataResult); $('#dataReviewCalc').html(dataReviewedCalc); // if this function is not being called solo, pass on the work if (!solo) { // update the MDM grid calcMDM(); } } // end function calcDataReviewed function calcRisk(elementID, solo) { // set solo default if (solo === undefined) { solo = false; } // get entered values riskScore = 0; var riskResult = 'N/A'; // remove any existing highlighting $('#riskTable>tbody>tr>td').removeClass('risk-highlight'); $('#riskTable>tbody>tr>th').removeClass('risk-highlight'); var riskMin = 0; if ($('#riskMin_1_1').is(':checked')) riskMin++; if ($('#riskMin_2_1').is(':checked')) riskMin++; if ($('#riskMin_2_2').is(':checked')) riskMin++; if ($('#riskMin_2_3').is(':checked')) riskMin++; if ($('#riskMin_2_4').is(':checked')) riskMin++; if ($('#riskMin_2_5').is(':checked')) riskMin++; if ($('#riskMin_2_6').is(':checked')) riskMin++; if ($('#riskMin_3_1').is(':checked')) riskMin++; if ($('#riskMin_3_2').is(':checked')) riskMin++; if ($('#riskMin_3_3').is(':checked')) riskMin++; if ($('#riskMin_3_4').is(':checked')) riskMin++; if (riskMin>0) { riskScore = 1; riskResult = 'Minimal'; } var riskLow = 0; if ($('#riskLow_1_1').is(':checked')) riskLow++; if ($('#riskLow_1_2').is(':checked')) riskLow++; if ($('#riskLow_1_3').is(':checked')) riskLow++; if ($('#riskLow_2_1').is(':checked')) riskLow++; if ($('#riskLow_2_2').is(':checked')) riskLow++; if ($('#riskLow_2_3').is(':checked')) riskLow++; if ($('#riskLow_2_4').is(':checked')) riskLow++; if ($('#riskLow_2_5').is(':checked')) riskLow++; if ($('#riskLow_3_1').is(':checked')) riskLow++; if ($('#riskLow_3_2').is(':checked')) riskLow++; if ($('#riskLow_3_3').is(':checked')) riskLow++; if ($('#riskLow_3_4').is(':checked')) riskLow++; if ($('#riskLow_3_5').is(':checked')) riskLow++; if (riskLow>0) { riskScore = 2; riskResult = 'Low'; } var riskMod = 0; if ($('#riskMod_1_1').is(':checked')) riskMod++; if ($('#riskMod_1_2').is(':checked')) riskMod++; if ($('#riskMod_1_3').is(':checked')) riskMod++; if ($('#riskMod_1_4').is(':checked')) riskMod++; if ($('#riskMod_1_5').is(':checked')) riskMod++; if ($('#riskMod_2_1').is(':checked')) riskMod++; if ($('#riskMod_2_2').is(':checked')) riskMod++; if ($('#riskMod_2_3').is(':checked')) riskMod++; if ($('#riskMod_2_4').is(':checked')) riskMod++; if ($('#riskMod_2_5').is(':checked')) riskMod++; if ($('#riskMod_3_1').is(':checked')) riskMod++; if ($('#riskMod_3_2').is(':checked')) riskMod++; if ($('#riskMod_3_3').is(':checked')) riskMod++; if ($('#riskMod_3_4').is(':checked')) riskMod++; if ($('#riskMod_3_5').is(':checked')) riskMod++; if ($('#riskMod_3_6').is(':checked')) riskMod++; if (riskMod>0) { riskScore = 3; riskResult = 'Moderate'; } var riskHigh = 0; if ($('#riskHigh_1_1').is(':checked')) riskHigh++; if ($('#riskHigh_1_2').is(':checked')) riskHigh++; if ($('#riskHigh_1_3').is(':checked')) riskHigh++; if ($('#riskHigh_2_1').is(':checked')) riskHigh++; if ($('#riskHigh_2_2').is(':checked')) riskHigh++; if ($('#riskHigh_2_3').is(':checked')) riskHigh++; if ($('#riskHigh_2_4').is(':checked')) riskHigh++; if ($('#riskHigh_3_1').is(':checked')) riskHigh++; if ($('#riskHigh_3_2').is(':checked')) riskHigh++; if ($('#riskHigh_3_3').is(':checked')) riskHigh++; if ($('#riskHigh_3_4').is(':checked')) riskHigh++; if ($('#riskHigh_3_5').is(':checked')) riskHigh++; if (riskHigh>0) { riskScore = 4; riskResult = 'High'; } // set highlight switch (riskScore) { case 1: $('#riskMin').addClass('risk-highlight'); break; case 2: $('#riskLow').addClass('risk-highlight'); break; case 3: $('#riskMod').addClass('risk-highlight'); break; case 4: $('#riskHigh').addClass('risk-highlight'); break; } // write final result $('#riskResult').html(riskResult); // if this function is not being called solo, pass on the work if (!solo) { // update the MDM grid calcMDM(); } } // end function calcDataReviewed function calcMDM(solo) { // set solo default if (solo === undefined) { solo = false; } // clear existing highlights $('#mdmGrid>tbody>tr>td').removeClass('mdm-highlight'); $('#mdmGrid>tbody>tr>th').removeClass('mdm-highlight'); // set new highlights $('#mdmDxTx_'+dxtxScore ).addClass('mdm-highlight'); $('#mdmData_'+dataReviewScore ).addClass('mdm-highlight'); $('#mdmRisk_'+riskScore ).addClass('mdm-highlight'); // the middle item defines the overall score if we have all 3 scores if (dxtxScore>0 && dataReviewScore>0 && riskScore>0) { var vals = [dxtxScore, dataReviewScore, riskScore]; vals.sort(); mdmScore = vals[1]; $('#mdm_'+mdmScore ).addClass('mdm-highlight'); } // if this function is not being called solo, pass on the work if (!solo) { // calculate overall calcOverall(); } } // end function calcMDM function calcOverall(solo) { // set solo default if (solo === undefined) { solo = false; } // get encounterType var encounterType = $('#encounter_type').val(); // clear highlights $('#overall_grid_'+encounterType+'>tbody>tr>td').removeClass('overall-highlight'); $('#overall_grid_'+encounterType+'>tbody>tr>th').removeClass('overall-highlight'); // set overallCalc if all of the score are present, and set calc values for the three components var validCode = $('#valid_code').val(); var validCode2 = $('#valid_code2').val(); if (validCode == 'no' || validCode2 == 'no') { validCode = 'no'; } var overallCalc = (historyScore>0 && examScore>0 && mdmScore>0); var historyScoreCalc = historyScore; var examScoreCalc = examScore; var mdmScoreCalc = mdmScore; var componentCode = 'N/A'; var componentStatus = ''; var componentOverUnder = ''; var componentLevel = ''; var componentResultsText = ''; var componentResults = ''; // set overall based on encounter type switch (encounterType) { case 'office_new': if (historyScoreCalc>0) { if (historyScoreCalc==4) historyScoreCalc = 5; $('#'+encounterType+'_history_'+historyScoreCalc ).addClass('overall-highlight'); } if (examScoreCalc>0) { if (examScoreCalc==4) examScoreCalc = 5; $('#'+encounterType+'_exam_'+examScoreCalc ).addClass('overall-highlight'); } if (mdmScoreCalc>0) { mdmScoreCalc++; $('#'+encounterType+'_mdm_'+mdmScoreCalc ).addClass('overall-highlight'); } if (overallCalc) // take the lowest score { min = Math.min(historyScoreCalc, examScoreCalc, mdmScoreCalc); $('#'+encounterType+'_overall_'+min ).addClass('overall-highlight'); switch (min) { case 1: componentCode = '99201'; break; case 2: componentCode = '99202'; break; case 3: componentCode = '99203'; break; case 4: componentCode = '99204'; break; case 5: componentCode = '99205'; break; } componentLevel = min; } break; case 'office_est': if (historyScoreCalc>0) { $('#'+encounterType+'_history_'+historyScoreCalc ).addClass('overall-highlight'); } if (examScoreCalc>0) { $('#'+encounterType+'_exam_'+examScoreCalc ).addClass('overall-highlight'); } if (mdmScoreCalc>0) { $('#'+encounterType+'_mdm_'+mdmScoreCalc ).addClass('overall-highlight'); } if (overallCalc) // take the middle score { var vals = [historyScoreCalc, examScoreCalc, mdmScoreCalc]; vals.sort(); $('#'+encounterType+'_overall_'+vals[1] ).addClass('overall-highlight'); switch (vals[1]) { case 1: componentCode = '99212'; break; case 2: componentCode = '99213'; break; case 3: componentCode = '99214'; break; case 4: componentCode = '99215'; break; } componentLevel = vals[1]; } break; case 'hospital_new': if (historyScoreCalc>2) { if (historyScoreCalc==4) { historyScoreCalc = 3; } else if (historyScoreCalc==3) { historyScoreCalc = 1; } $('#'+encounterType+'_history_'+historyScoreCalc ).addClass('overall-highlight'); } if (examScoreCalc>2) { if (examScoreCalc==4) { examScoreCalc = 3; } else if (examScoreCalc==3) { examScoreCalc = 1; } $('#'+encounterType+'_exam_'+examScoreCalc ).addClass('overall-highlight'); } if (mdmScoreCalc>0) { if (mdmScoreCalc>1) mdmScoreCalc--; $('#'+encounterType+'_mdm_'+mdmScoreCalc ).addClass('overall-highlight'); } if (overallCalc) // take the lowest score { min = Math.min(historyScoreCalc, examScoreCalc, mdmScoreCalc); $('#'+encounterType+'_overall_'+min ).addClass('overall-highlight'); switch (min) { case 1: componentCode = '99221'; break; case 2: componentCode = '99222'; break; case 3: componentCode = '99223'; break; } componentLevel = min; } break; case 'hospital_sub': if (historyScoreCalc>0) { if (historyScoreCalc==4) historyScoreCalc = 3; $('#'+encounterType+'_history_'+historyScoreCalc ).addClass('overall-highlight'); } if (examScoreCalc>0) { if (examScoreCalc==4) examScoreCalc = 3; $('#'+encounterType+'_exam_'+examScoreCalc ).addClass('overall-highlight'); } if (mdmScoreCalc>0) { if (mdmScoreCalc>1) mdmScoreCalc--; $('#'+encounterType+'_mdm_'+mdmScoreCalc ).addClass('overall-highlight'); } if (overallCalc) // take the middle score { var vals = [historyScoreCalc, examScoreCalc, mdmScoreCalc]; vals.sort(); $('#'+encounterType+'_overall_'+vals[1] ).addClass('overall-highlight'); switch (vals[1]) { case 1: componentCode = '99231'; break; case 2: componentCode = '99232'; break; case 3: componentCode = '99233'; break; } componentLevel = vals[1]; } break; case 'consult': if (historyScoreCalc>0) { if (historyScoreCalc==4) historyScoreCalc = 5; $('#'+encounterType+'_history_'+historyScoreCalc ).addClass('overall-highlight'); } if (examScoreCalc>0) { if (examScoreCalc==4) examScoreCalc = 5; $('#'+encounterType+'_exam_'+examScoreCalc ).addClass('overall-highlight'); } if (mdmScoreCalc>0) { mdmScoreCalc++; $('#'+encounterType+'_mdm_'+mdmScoreCalc ).addClass('overall-highlight'); } if (overallCalc) { min = Math.min(historyScoreCalc, examScoreCalc, mdmScoreCalc); $('#'+encounterType+'_overall_'+min ).addClass('overall-highlight'); switch (min) { case 1: componentCode = '99241'; break; case 2: componentCode = '99242'; break; case 3: componentCode = '99243'; break; case 4: componentCode = '99244'; break; case 5: componentCode = '99245'; break; } componentLevel = min; } break; } // check against em_code_reported to see if it was under, over or correct (or incorrect for the type of encounter selected) if (componentCode != 'N/A') { componentResults = componentCode; componentResultsText = 'Method: Component | Calculated: '+componentCode; } var emCodeReported = $('#em_code_reported').val(); if (emCodeReported && validCode == 'yes' && componentCode != 'N/A') { componentResultsText += ' | Reported: '+emCodeReported; var codeInt = parseInt(emCodeReported); var codeCalculated = parseInt(componentCode); var backgroudColor = ''; var textColor = ''; var codeStatus = ''; if (codeInt > codeCalculated) { backgroundColor = 'red'; textColor = 'white'; codeStatus = 'is overcoded.'; componentOverUnder = 'overcoded'; componentResults += ' [overcoded as '+emCodeReported+']'; componentResultsText += ' [overcoded]'; } else if (codeInt == codeCalculated) { backgroundColor = 'green'; textColor = 'white'; codeStatus = 'is coded correctly.'; componentResults += ' (correct)'; } else { backgroundColor = 'yellow'; textColor = 'black'; codeStatus = 'is undercoded.'; componentOverUnder = 'undercoded'; componentResults += ' [undercoded as '+emCodeReported+']'; componentResultsText += ' [undercoded]'; } componentStatus = 'Reported code '+emCodeReported+' '+codeStatus; $('#em_code_over_under2').html(' '+componentStatus+' ') .css('background-color', backgroundColor) .css('color', textColor) .show(); } else if (emCodeReported) { $('#em_code_over_under2').hide(); backgroundColor = 'red'; textColor = 'white'; codeStatus = 'Reported Code is INCORRECT.'; componentOverUnder = 'incorrect reported code'; componentResults += ' [incorrectly coded as '+emCodeReported+']'; componentResultsText += ''; } else { $('#em_code_over_under2').hide(); } $('#component_code_display').html(componentCode); $('#component_code').val(componentCode); $('#component_status').val(componentStatus); // save values $('#hpi_score').val(hpi); $('#ros_score').val(ros); $('#pfsh_score').val(pfsh); $('#history_score').val(historyScore); $('#exam_score').val(examScore); $('#dxtx_score').val(dxtxScore); $('#data_review_score').val(dataReviewScore); $('#risk_score').val(riskScore); $('#mdm_score').val(mdmScore); $('#component_level').val(componentLevel); $('#component_over_under').val(componentOverUnder); $('#component_results').val(componentResults); $('#component_results_text').val(componentResultsText); // if this function is not being called solo, pass on the work if (!solo) { // update overall result updateOverallResult(); } } // end function calcOverall function updateOverallResult() // no "solo" parameter on this one { // update overall result var timeCode = $('#time_code').val(); var timeOverUnder = $('#time_over_under').val(); var timeResults = $('#time_results').val(); var timeResultsText = $('#time_results_text').val(); var componentCode = $('#component_code').val(); var componentOverUnder = $('#component_over_under').val(); var componentResults = $('#component_results').val(); var componentResultsText = $('#component_results_text').val(); var overrideCode = $('#override_code').val(); var emCodeReported = $('#em_code_reported').val(); var results = ''; var resultsText = ''; var emResult = ''; // initialize override values $('#override_over_under').val(''); $('#override_results_text').val(''); $('#override_results').val(overrideCode); // determine which calculation to use var useResult = ''; if ($('#use_time_result').is(':checked')) { useResult = 'time'; } if ($('#use_component_result').is(':checked')) { useResult = 'component'; } if ($('#use_override_result').is(':checked')) { useResult = 'override'; } // build the results text if (timeResults) { if (!useResult) { useResult = 'time'; } resultsText = timeResultsText; $('#use_time_result').prop('disabled', false); $('#time_results_text_display').html(timeResults); } else { $('#use_time_result').prop('disabled', true); $('#time_results_text_display').html('N/A'); } if (componentResults) { if (!useResult) { useResult = 'component'; } if (resultsText) resultsText += "\n"; resultsText = componentResultsText; $('#use_component_result').prop('disabled', false); $('#component_results_text_display').html(componentResults); } else { $('#use_component_result').prop('disabled', true); $('#component_results_text_display').html('N/A'); } // if both are calculated figure out the higher value if (timeCode && componentCode && parseInt(timeCode)>parseInt(componentCode) && !useResult) { useResult = 'time'; $("input[name=use_result][value=time]").prop('checked', true); } if (timeCode && componentCode && parseInt(timeCode)<=parseInt(componentCode) && !useResult) { useResult = 'component'; $("input[name=use_result][value=component]").prop('checked', true); } // set final results switch (useResult) { case 'time': results = timeResults; emResult = timeOverUnder; break; case 'component': results = componentResults; emResult = componentOverUnder; break; case 'override': // calculate and assign values var overrideOverUnder = ''; var overrideResults = overrideCode; var overrideResultsText = 'Method: Assigned by Auditor | Code: '+overrideCode; if (emCodeReported) { componentResultsText += ' | Reported: '+emCodeReported; } if (validCode == 'no') { overrideResults += ' (INCORRECT)'; } else if (parseInt(emCodeReported) > parseInt(overrideCode)) { overrideOverUnder = 'overcoded'; overrideResults += ' [overcoded as '+emCodeReported+']'; overrideResultsText += ' [overcoded]'; } else if (parseInt(emCodeReported) == parseInt(overrideCode)) { overrideResults += ' (correct)'; } else { overrideOverUnder = 'undercoded'; overrideResults += ' [undercoded as '+emCodeReported+']'; overrideResultsText += ' [undercoded]'; } results = overrideResults; $('#override_results_text_display').html(overrideResults); emResult = overrideOverUnder; $('#override_over_under').val(overrideOverUnder); $('#override_results_text').val(overrideResultsText); $('#override_results').val(overrideResults); if (resultsText) resultsText += "\n"; resultsText = overrideResultsText; break; } // write values $('#results').val(results); $('#results_text').val(resultsText); $('#em_result').val(emResult); } // end function updateOverallResult function gradeSOSExam(init=false) { // get current selected SOS exam var selected_exam = $('#sel_sos').val(); var exam_container = '#sos_' + selected_exam + '_container'; $('.sos_container').hide(); $(exam_container).show(); // set grading defaults var sos_header = 'SOS'; var bullet_score = 0; var level_1 = 0; var level_2 = 0; var level_3 = 0; var level_4 = 0; var sos_level = 0; var comprehensive_ok = true; switch (selected_exam) { case 'car': sos_header = 'Cardiovascular'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 27; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'ear': sos_header = 'Ear, Nose and Throat'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 27; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'eye': sos_header = 'Eye'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 9; level_4 = 14; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'gen': sos_header = 'Genitourinary'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 36; var gender = $('#sos_gen_gender').val(); var gender_count = 0; // calculate total bullets with only male or female var total_bullets = $(exam_container + " [type='checkbox']:checked").length; var minus_malefemale = total_bullets - $(".esos_gen_genit:checked").length; if(gender == 'male') { level_4 = 25; $('#sos_gen_female').hide(); $('#sos_gen_male').show(); gender_count = $("#sos_gen_male [type='checkbox']:checked").length; bullet_score = minus_malefemale + gender_count; } else { level_4 = 23; $('#sos_gen_female').show(); $('#sos_gen_male').hide(); gender_count = $("#sos_gen_female [type='checkbox']:checked").length; if(gender_count < 7){ comprehensive_ok = false; } else{ comprehensive_ok = true; } bullet_score = minus_malefemale + gender_count; } break; case 'hem': sos_header = 'Hematologic/Lymphatic/Immunologic'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 21; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'mus': sos_header = 'Musculoskeletal'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 40; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'neu': sos_header = 'Neurological'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 25; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'psy': sos_header = 'Psychiatric'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 9; level_4 = 15; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'res': sos_header = 'Respiratory'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 24; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; case 'ski': sos_header = 'Skin'; // set grading rules level_1 = 5; level_2 = 6; level_3 = 12; level_4 = 25; bullet_score = $(exam_container + " [type='checkbox']:checked").length; break; } $('.sos_header').html(sos_header); $('#sos_result_1').html('1-' + level_1 + ' bulleted elements'); $('#sos_result_2').html(level_2 + '-' + (level_3 - 1) + ' bulleted elements'); $('#sos_result_3').html(level_3 + '-' + (level_4 - 1) + ' bulleted elements'); // $('#sos_result_4').html('All bulleted elements'); // Calculate sos exam level if(bullet_score >= level_4 // && $('#sos_document_checkbox').is(":checked") && comprehensive_ok) { sos_level = 4 } else if(bullet_score >= level_3) { sos_level = 3 } else if(bullet_score >= level_2) { sos_level = 2 } else if(bullet_score <= level_1 && bullet_score > 0) { sos_level = 1 } else { sos_level = '0' } // Don't grade on initialize if(!init) { $("input[name=exam97sos]").val([sos_level]); $("#examCalcSOS").html(bullet_score); } calcExam(); } function in_array(needle, haystack) { for(var i in haystack) { if (haystack[i] == needle) return true; } return false; } // public functions (exported) return { initPage : initPage , changeCodeReported : changeCodeReported , changeEncounter : changeEncounter , calcTimeBased : calcTimeBased , showNotes : showNotes , calcHPI : calcHPI , calcROS : calcROS , calcPFSH : calcPFSH , calcExam : calcExam , calcExamCalc95 : calcExamCalc95 , calcExamCalc97 : calcExamCalc97 , calcDxTx : calcDxTx , calcDataReviewed : calcDataReviewed , calcRisk : calcRisk , gradeSOSExam : gradeSOSExam , updateOverallResult : updateOverallResult }; })(jQuery); function validateMinMax(value, min, max) { if(parseInt(value) < min || isNaN(parseInt(value))) return min; else if(parseInt(value) > max) return max; else return value; }