Changing cqm/amc reporting to a pure OO design.
[openemr.git] / library / classes / rulesets / Cqm / reports / NFQ_0421 / Numerator1.php
blob2ff66c8e882dab8b03709d57734c3b7bc06b8959
1 <?php
2 class NFQ_0421_Numerator1 implements CqmFilterIF
4 public function getTitle()
6 return "Numerator 1";
9 public function test( CqmPatient $patient, $dateBegin, $dateEnd )
11 // Flow of control loop
12 $return = false;
13 do {
14 // See if BMI has been recorded between >=22kg/m2 and <30kg/m2 6 months before, or simultanious to the encounter
15 $query = "SELECT form_vitals.BMI " .
16 "FROM `form_vitals` " .
17 "LEFT JOIN `form_encounter` " .
18 "ON ( form_vitals.pid = form_encounter.pid ) " .
19 "LEFT JOIN `enc_category_map` " .
20 "ON (enc_category_map.main_cat_id = form_encounter.pc_catid) " .
21 "WHERE form_vitals.BMI IS NOT NULL " .
22 "AND form_vitals.BMI IS NOT NULL " .
23 "AND form_vitals.pid = ? AND form_vitals.BMI >= 22 AND form_vitals.BMI < 30 " .
24 "AND DATE( form_vitals.date ) >= DATE_ADD( form_encounter.date, INTERVAL -6 MONTH ) " .
25 "AND DATE( form_vitals.date ) <= DATE( form_encounter.date ) " .
26 "AND ( enc_category_map.rule_enc_id = 'enc_outpatient' )";
27 $res = sqlStatement( $query, array( $patient->id ) );
28 $number = sqlNumRows($res);
29 if ( $number >= 1 ) {
30 $return = true;
31 break;
34 // See if BMI has been recorded >=30kg/m2 6 months before, or simultanious to the encounter
35 // AND ÒCare goal: follow-up plan BMI managementÓ OR ÒCommunication provider to provider: dietary consultation orderÓ
36 $query = "SELECT form_vitals.BMI " .
37 "FROM `form_vitals` " .
38 "LEFT JOIN `form_encounter` " .
39 "ON ( form_vitals.pid = form_encounter.pid ) " .
40 "LEFT JOIN `enc_category_map` " .
41 "ON (enc_category_map.main_cat_id = form_encounter.pc_catid) " .
42 "WHERE form_vitals.BMI IS NOT NULL " .
43 "AND form_vitals.BMI IS NOT NULL " .
44 "AND form_vitals.pid = ? AND form_vitals.BMI >= 30 " .
45 "AND ( DATE( form_vitals.date ) >= DATE_ADD( form_encounter.date, INTERVAL -6 MONTH ) ) " .
46 "AND ( DATE( form_vitals.date ) <= DATE( form_encounter.date ) ) " .
47 "AND ( enc_category_map.rule_enc_id = 'enc_outpatient' )";
48 $res = sqlStatement( $query, array( $patient->id ) );
49 $number = sqlNumRows($res);
50 if ( $number >= 1 &&
51 ( Helper::check( ClinicalType::CARE_GOAL, CareGoal::FOLLOW_UP_PLAN_BMI_MGMT ) ||
52 Helper::check( ClinicalType::COMMUNICATION, Communication::DIET_CNSLT ) ) ) {
53 $return = true;
54 break;
57 // See if BMI has been recorded <22kg/m2 6 months before, or simultanious to the encounter
58 // AND ÒCare goal: follow-up plan BMI managementÓ OR ÒCommunication provider to provider: dietary consultation orderÓ
59 $query = "SELECT form_vitals.BMI " .
60 "FROM `form_vitals` " .
61 "LEFT JOIN `form_encounter` " .
62 "ON ( form_vitals.pid = form_encounter.pid ) " .
63 "LEFT JOIN `enc_category_map` " .
64 "ON (enc_category_map.main_cat_id = form_encounter.pc_catid) " .
65 "WHERE form_vitals.BMI IS NOT NULL " .
66 "AND form_vitals.BMI IS NOT NULL " .
67 "AND form_vitals.pid = ? AND form_vitals.BMI < 22 " .
68 "AND ( DATE( form_vitals.date ) >= DATE_ADD( form_encounter.date, INTERVAL -6 MONTH ) ) " .
69 "AND ( DATE( form_vitals.date ) <= DATE( form_encounter.date ) ) " .
70 "AND ( enc_category_map.rule_enc_id = 'enc_outpatient' )";
71 $res = sqlStatement( $query, array( $patient->id ) );
72 $number = sqlNumRows($res);
73 if ( $number >= 1 &&
74 ( Helper::check( ClinicalType::CARE_GOAL, CareGoal::FOLLOW_UP_PLAN_BMI_MGMT ) ||
75 Helper::check( ClinicalType::COMMUNICATION, Communication::DIET_CNSLT ) ) ) {
76 $return = true;
77 break;
79 } while( false );
81 return $return;