security fix in master branch
[openemr.git] / library / classes / ClinicalTypes / LabResult.php
blob20026ce7813cbe4eb5a95b4325e8a987c58a70d0
1 <?php
2 // Copyright (C) 2011 Ken Chapple <ken@mi-squared.com>
3 //
4 // This program is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU General Public License
6 // as published by the Free Software Foundation; either version 2
7 // of the License, or (at your option) any later version.
8 //
9 require_once('ClinicalType.php');
11 class LabResult extends ClinicalType
13 const OPTION_RANGE = 'range';
15 const HB1AC_TEST = 'lab_hb1ac_test';
16 const LDL_TEST = 'lab_ldl_test';
17 const STREPTOCOCCUS_TEST = 'lab_streptococcus_test';
18 public function getListId()
20 return 'Clinical_Rules_Lab_Res_Types';
23 public function doPatientCheck(RsPatient $patient, $beginDate = null, $endDate = null, $options = null)
25 $data = Codes::lookup($this->getOptionId());
27 $range = new Range(Range::NEG_INF, Range::POS_INF);
28 if (isset($options[self::OPTION_RANGE]) &&
29 is_a($options[self::OPTION_RANGE], 'Range') ) {
30 $range = $options[self::OPTION_RANGE];
33 foreach ($data as $codeType => $codes) {
34 foreach ($codes as $code) {
35 // search through vitals to find the most recent lab result in the date range
36 // if the result value is within range using Range->test(val), return true
37 $sql = "SELECT procedure_result.result, procedure_result.date " .
38 "FROM " .
39 "procedure_type, " .
40 "procedure_order, " .
41 "procedure_order_code, " .
42 "procedure_report, " .
43 "procedure_result " .
44 "WHERE " .
45 "procedure_type.lab_id = procedure_order.lab_id AND " .
46 "procedure_type.procedure_type = 'ord' AND " .
47 "procedure_type.procedure_code = procedure_order_code.procedure_code AND " .
48 "( procedure_type.standard_code = ? OR procedure_type.procedure_code = ? ) AND " .
49 "procedure_order_code.procedure_order_id = procedure_order.procedure_order_id AND " .
50 "procedure_order_code.procedure_order_seq = procedure_report.procedure_order_seq AND " .
51 "procedure_order.procedure_order_id = procedure_report.procedure_order_id AND " .
52 "procedure_report.procedure_report_id = procedure_result.procedure_report_id AND " .
53 "procedure_report.date_collected >= ? AND " .
54 "procedure_report.date_collected <= ? AND " .
55 "procedure_order.patient_id = ? ";
57 if ($range->lowerBound != Range::NEG_INF) {
58 $sql .= "AND procedure_result.result >= ? ";
61 if ($range->upperBound != Range::POS_INF) {
62 $sql .= "AND procedure_result.result < ? ";
65 $bindings = array( $codeType.':'.$code, $code, $beginDate, $endDate, $patient->id );
66 if ($range->lowerBound != Range::NEG_INF) {
67 $bindings []= $range->lowerBound;
70 if ($range->upperBound != Range::POS_INF) {
71 $bindings []= $range->upperBound;
74 $result = sqlStatement($sql, $bindings);
76 $number = sqlNumRows($result);
77 if ($number > 0) {
78 return true;
83 return false;