increment v_database for prior commit
[openemr.git] / custom / qrda_functions.php
blob3b8ce458c682b5293d4b4871262128d760a46624
1 <?php
3 /**
5 * QRDA Functions
7 * Copyright (C) 2015 Ensoftek, Inc
9 * LICENSE: This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
20 * @package OpenEMR
21 * @author Ensoftek
22 * @link http://www.open-emr.org
25 use OpenEMR\Services\FacilityService;
27 $facilityService = new FacilityService();
29 // Functions for QRDA Category I (or) III 2014 XML format.
31 //function for Stratification data getting for NQF# 0024 Rule
32 function getQRDAStratumInfo($patArr, $begin_date)
34 $startumArr = array();
35 if (count($patArr) > 0) {
36 //Age Between 3 and 11
37 $stratumOneQry = "SELECT FLOOR( DATEDIFF( '" . add_escape_custom($begin_date) . "' , DOB ) /365 ) as pt_age FROM patient_data WHERE pid IN (" . add_escape_custom(implode(",", $patArr)) . ") HAVING (pt_age BETWEEN 1 AND 10) ";
38 $stratumOneRes = sqlStatement($stratumOneQry);
39 $stratumOneRows = sqlNumRows($stratumOneRes);
41 //Age Between 12 and 17
42 $stratumTwoQry = "SELECT FLOOR( DATEDIFF( '" . add_escape_custom($begin_date) . "' , DOB ) /365 ) as pt_age FROM patient_data WHERE pid IN (" . add_escape_custom(implode(",", $patArr)) . ") HAVING (pt_age BETWEEN 11 AND 16) ";
43 $stratumTwoRes = sqlStatement($stratumTwoQry);
44 $stratumTwoRows = sqlNumRows($stratumTwoRes);
45 $startumArr[1] = $stratumOneRows;
46 $startumArr[2] = $stratumTwoRows;
47 } else {
48 $startumArr[1] = 0;
49 $startumArr[2] = 0;
52 return $startumArr;
55 //function for getting Payer(Insurance Type) Information for Export QRDA
56 function getQRDAPayerInfo($patArr)
58 $payerCheckArr = array();
59 $payerCheckArr['Medicare'] = 0;
60 $payerCheckArr['Medicaid'] = 0;
61 $payerCheckArr['Private Health Insurance'] = 0;
62 $payerCheckArr['Other'] = 0;
63 if (count($patArr) > 0) {
64 $insQry = "SELECT insd.*, ic.ins_type_code FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd " .
65 "INNER JOIN insurance_companies ic ON insd.provider = ic.id " .
66 "WHERE insd.pid IN (" . add_escape_custom(implode(",", $patArr)) . ")";
67 $insRes = sqlStatement($insQry);
68 while ($insRow = sqlFetchArray($insRes)) {
69 if ($insRow['ins_type_code'] == 8) {//Self Pay (Private Insurance)
70 $payerCheckArr['Private Health Insurance']++;
71 } elseif ($insRow['ins_type_code'] == 2) {//Medicare
72 $payerCheckArr['Medicare']++;
73 } elseif ($insRow['ins_type_code'] == 3) {//Self Pay (Private Insurance)
74 $payerCheckArr['Medicaid']++;
75 } else {//Other
76 $payerCheckArr['Other']++;
81 return $payerCheckArr;
84 //function for getting Race, Ethnicity and Gender Information for Export QRDA
85 function getQRDAPatientNeedInfo($patArr)
87 //Defining Array elements
88 //Gender
89 $genderArr = array();
90 $genderArr['Male'] = 0;
91 $genderArr['Female'] = 0;
92 $genderArr['Unknown'] = 0;
93 //Race
94 $raceArr = array();
95 $raceArr['American Indian or Alaska Native'] = 0;
96 $raceArr['Asian'] = 0;
97 $raceArr['Black or African American'] = 0;
98 $raceArr['Native Hawaiian or Other Pacific Islander'] = 0;
99 $raceArr['White'] = 0;
100 $raceArr['Other'] = 0;
101 //Ethnicity
102 $ethincityArr = array();
103 $ethincityArr['Not Hispanic or Latino'] = 0;
104 $ethincityArr['Hispanic or Latino'] = 0;
106 $mainArr = array();
107 if (count($patArr) > 0) {
108 $patRes = sqlStatement("SELECT pid, sex, race, ethnicity FROM patient_data WHERE pid IN (" . add_escape_custom(implode(",", $patArr)) . ")");
109 while ($patRow = sqlFetchArray($patRes)) {
110 //Gender Collection
111 if ($patRow['sex'] == "Male") {
112 $genderArr['Male']++;
113 } elseif ($patRow['sex'] == "Female") {
114 $genderArr['Female']++;
115 } else {
116 $genderArr['Unknown']++;
119 //Race Section
120 if ($patRow['race'] == "amer_ind_or_alaska_native") {
121 $raceArr['American Indian or Alaska Native']++;
122 } elseif ($patRow['race'] == "Asian") {
123 $raceArr['Asian']++;
124 } elseif ($patRow['race'] == "black_or_afri_amer") {
125 $raceArr['Black or African American']++;
126 } elseif ($patRow['race'] == "native_hawai_or_pac_island") {
127 $raceArr['Native Hawaiian or Other Pacific Islander']++;
128 } elseif ($patRow['race'] == "white") {
129 $raceArr['White']++;
130 } elseif ($patRow['race'] == "Asian_Pacific_Island") {
131 $raceArr['Other']++;
132 } elseif ($patRow['race'] == "Black_not_of_Hispan") {
133 $raceArr['Other']++;
134 } elseif ($patRow['race'] == "Hispanic") {
135 $raceArr['Other']++;
136 } elseif ($patRow['race'] == "White_not_of_Hispan") {
137 $raceArr['Other']++;
138 } else {
139 $raceArr['Other']++;
142 if ($patRow['ethnicity'] == "hisp_or_latin") {
143 $ethincityArr['Hispanic or Latino']++;
144 } elseif ($patRow['ethnicity'] == "not_hisp_or_latin") {
145 $ethincityArr['Not Hispanic or Latino']++;
150 $mainArr['gender'] = $genderArr;
151 $mainArr['race'] = $raceArr;
152 $mainArr['ethnicity'] = $ethincityArr;
154 return $mainArr;
157 function payerPatient($patient_id)
159 $payer = 'Other';
160 $insQry = "SELECT insd.*, ic.ins_type_code FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd " .
161 "INNER JOIN insurance_companies ic ON insd.provider = ic.id " .
162 "WHERE insd.pid = ?";
163 $insRes = sqlStatement($insQry, array($patient_id));
164 while ($insRow = sqlFetchArray($insRes)) {
165 if ($insRow['ins_type_code'] == 8) {//Self Pay (Private Insurance)
166 $payer = 'Private Health Insurance';
167 } elseif ($insRow['ins_type_code'] == 2) {//Medicare
168 $payer = 'Medicare';
169 } elseif ($insRow['ins_type_code'] == 3) {//Self Pay (Private Insurance)
170 $payer = 'Medicaid';
171 } else {//Other
172 $payer = 'Other';
176 return $payer;
179 function allEncPat($patient_id, $from_date, $to_date)
181 $encArr = array();
182 $patQry = "SELECT fe.encounter, fe.date,fe.pc_catid,opc.pc_catname FROM form_encounter fe inner join openemr_postcalendar_categories opc on opc.pc_catid = fe.pc_catid WHERE fe.pid = ? AND (DATE(fe.date) BETWEEN ? AND ?)";
183 $patRes = sqlStatement($patQry, array($patient_id, $from_date, $to_date));
184 while ($patRow = sqlFetchArray($patRes)) {
185 $encArr[] = $patRow;
188 return $encArr;
191 function allListsPat($type, $patient_id, $from_date, $to_date)
193 $diagArr = array();
194 $diagQry = "SELECT * FROM lists WHERE TYPE = ? AND pid = ? AND (DATE(date) BETWEEN ? AND ?)";
195 $diagRes = sqlStatement($diagQry, array($type, $patient_id, $from_date, $to_date));
196 while ($diagRow = sqlFetchArray($diagRes)) {
197 $diagArr[] = $diagRow;
200 return $diagArr;
203 function allOrderMedsPat($patient_id, $from_date, $to_date)
205 $medArr = array();
206 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 0 AND (DATE(date_added) BETWEEN ? AND ?)";
207 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
208 while ($medRow = sqlFetchArray($medRes)) {
209 $medArr[] = $medRow;
212 return $medArr;
215 function allActiveMedsPat($patient_id, $from_date, $to_date)
217 $medArr = array();
218 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 1 AND (DATE(date_added) BETWEEN ? AND ?)";
219 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
220 while ($medRow = sqlFetchArray($medRes)) {
221 $medArr[] = $medRow;
224 return $medArr;
227 function allProcPat(string $proc_type = null, $patient_id, $from_date, $to_date)
229 if (!$proc_type) {
230 $proc_type = "Procedure";
232 $procArr = array();
233 $procQry = "SELECT poc.procedure_code, poc.procedure_name, po.date_ordered, fe.encounter,fe.date FROM form_encounter fe " .
234 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'procedure_order' " .
235 "INNER JOIN procedure_order po ON po.encounter_id = f.encounter " .
236 "INNER JOIN procedure_order_code poc ON poc.procedure_order_id = po.procedure_order_id " .
237 "WHERE poc.procedure_order_title = ? AND po.patient_id = ? " .
238 "AND (po.date_ordered BETWEEN ? AND ?)";
239 $procRes = sqlStatement($procQry, array($proc_type, $patient_id, $from_date, $to_date));
240 while ($procRow = sqlFetchArray($procRes)) {
241 $procArr[] = $procRow;
244 return $procArr;
247 function allVitalsPat($patient_id, $from_date, $to_date)
249 $vitArr = array();
250 $vitQry = "SELECT fe.encounter, v.bps, v.date,v.bpd,v.BMI as bmi FROM form_encounter fe " .
251 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'vitals' " .
252 "INNER JOIN form_vitals v ON v.id = f.form_id " .
253 "WHERE v.pid = ? " .
254 "AND (v.date BETWEEN ? AND ?)";
255 $vitRes = sqlStatement($vitQry, array($patient_id, $from_date, $to_date));
256 while ($vitRow = sqlFetchArray($vitRes)) {
257 $vitArr[] = $vitRow;
260 return $vitArr;
263 function allImmuPat($patient_id, $from_date, $to_date)
265 $immArr = array();
266 $immQry = "SELECT * FROM immunizations " .
267 "WHERE patient_id = ? " .
268 "AND (administered_date BETWEEN ? AND ?)";
269 $immRes = sqlStatement($immQry, array($patient_id, $from_date, $to_date));
270 while ($immRow = sqlFetchArray($immRes)) {
271 $immArr[] = $immRow;
274 return $immArr;
276 function getPatData($patient_id)
278 $patientRow = sqlQuery("SELECT * FROM patient_data WHERE pid= ?", array($patient_id));
279 return $patientRow;
282 function getUsrDataCheck($provider_id)
284 $userRow = array();
285 if ($provider_id != "") {
286 $userRow = sqlQuery("SELECT facility, facility_id, federaltaxid, npi, phone,fname, lname FROM users WHERE id= ?", array($provider_id));
289 return $userRow;
292 function getFacilDataChk($facility_id)
294 global $facilityService;
295 return $facilityService->getById($facility_id);
298 function patientQRDAHistory($patient_id)
300 $patientHistRow = sqlQuery("SELECT tobacco, date FROM history_data WHERE pid= ? ORDER BY id DESC LIMIT 1", array($patient_id));
301 return $patientHistRow;