minor improvement to tabs style
[openemr.git] / custom / qrda_functions.php
blob68dce37019cd9af3ac6a8e64908d36977cfa1751
1 <?php
2 /**
4 * QRDA Functions
6 * Copyright (C) 2015 Ensoftek, Inc
8 * LICENSE: This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
19 * @package OpenEMR
20 * @author Ensoftek
21 * @link http://www.open-emr.org
24 $facilityService = new \services\FacilityService();
26 // Functions for QRDA Category I (or) III 2014 XML format.
28 //function for Stratification data getting for NQF# 0024 Rule
29 function getQRDAStratumInfo($patArr, $begin_date){
30 $startumArr = array();
31 if(count($patArr) > 0){
32 //Age Between 3 and 11
33 $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) ";
34 $stratumOneRes = sqlStatement($stratumOneQry);
35 $stratumOneRows = sqlNumRows($stratumOneRes);
37 //Age Between 12 and 17
38 $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) ";
39 $stratumTwoRes = sqlStatement($stratumTwoQry);
40 $stratumTwoRows = sqlNumRows($stratumTwoRes);
41 $startumArr[1] = $stratumOneRows;
42 $startumArr[2] = $stratumTwoRows;
43 }else{
44 $startumArr[1] = 0;
45 $startumArr[2] = 0;
47 return $startumArr;
50 //function for getting Payer(Insurance Type) Information for Export QRDA
51 function getQRDAPayerInfo($patArr){
52 $payerCheckArr = array();
53 $payerCheckArr['Medicare'] = 0;
54 $payerCheckArr['Medicaid'] = 0;
55 $payerCheckArr['Private Health Insurance'] = 0;
56 $payerCheckArr['Other'] = 0;
57 if(count($patArr) > 0){
58 $insQry = "SELECT insd.*, ic.ins_type_code FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd ".
59 "INNER JOIN insurance_companies ic ON insd.provider = ic.id ".
60 "WHERE insd.pid IN (".add_escape_custom(implode(",", $patArr)).")";
61 $insRes = sqlStatement($insQry);
62 while($insRow = sqlFetchArray($insRes)){
63 if($insRow['ins_type_code'] == 8){//Self Pay (Private Insurance)
64 $payerCheckArr['Private Health Insurance']++;
65 }else if($insRow['ins_type_code'] == 2){//Medicare
66 $payerCheckArr['Medicare']++;
67 }else if($insRow['ins_type_code'] == 3){//Self Pay (Private Insurance)
68 $payerCheckArr['Medicaid']++;
69 }else{//Other
70 $payerCheckArr['Other']++;
75 return $payerCheckArr;
78 //function for getting Race, Ethnicity and Gender Information for Export QRDA
79 function getQRDAPatientNeedInfo($patArr){
80 //Defining Array elements
81 //Gender
82 $genderArr = array();
83 $genderArr['Male'] = 0;
84 $genderArr['Female'] = 0;
85 $genderArr['Unknown'] = 0;
86 //Race
87 $raceArr = array();
88 $raceArr['American Indian or Alaska Native'] = 0;
89 $raceArr['Asian'] = 0;
90 $raceArr['Black or African American'] = 0;
91 $raceArr['Native Hawaiian or Other Pacific Islander'] = 0;
92 $raceArr['White'] = 0;
93 $raceArr['Other'] = 0;
94 //Ethnicity
95 $ethincityArr = array();
96 $ethincityArr['Not Hispanic or Latino'] = 0;
97 $ethincityArr['Hispanic or Latino'] = 0;
99 $mainArr = array();
100 if(count($patArr) > 0){
101 $patRes = sqlStatement("SELECT pid, sex, race, ethnicity FROM patient_data WHERE pid IN (".add_escape_custom(implode(",", $patArr)).")");
102 while($patRow = sqlFetchArray($patRes)){
103 //Gender Collection
104 if($patRow['sex'] == "Male"){
105 $genderArr['Male']++;
106 }else if($patRow['sex'] == "Female"){
107 $genderArr['Female']++;
108 }else{
109 $genderArr['Unknown']++;
112 //Race Section
113 if($patRow['race'] == "amer_ind_or_alaska_native"){
114 $raceArr['American Indian or Alaska Native']++;
115 }else if($patRow['race'] == "Asian"){
116 $raceArr['Asian']++;
117 }else if($patRow['race'] == "black_or_afri_amer"){
118 $raceArr['Black or African American']++;
119 }else if($patRow['race'] == "native_hawai_or_pac_island"){
120 $raceArr['Native Hawaiian or Other Pacific Islander']++;
121 }else if($patRow['race'] == "white"){
122 $raceArr['White']++;
123 }else if($patRow['race'] == "Asian_Pacific_Island"){
124 $raceArr['Other']++;
125 }else if($patRow['race'] == "Black_not_of_Hispan"){
126 $raceArr['Other']++;
127 }else if($patRow['race'] == "Hispanic"){
128 $raceArr['Other']++;
129 }else if($patRow['race'] == "White_not_of_Hispan"){
130 $raceArr['Other']++;
131 }else{
132 $raceArr['Other']++;
135 if($patRow['ethnicity'] == "hisp_or_latin"){
136 $ethincityArr['Hispanic or Latino']++;
137 }else if($patRow['ethnicity'] == "not_hisp_or_latin"){
138 $ethincityArr['Not Hispanic or Latino']++;
142 $mainArr['gender'] = $genderArr;
143 $mainArr['race'] = $raceArr;
144 $mainArr['ethnicity'] = $ethincityArr;
146 return $mainArr;
149 function payerPatient($patient_id){
150 $payer = 'Other';
151 $insQry = "SELECT insd.*, ic.ins_type_code FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd ".
152 "INNER JOIN insurance_companies ic ON insd.provider = ic.id ".
153 "WHERE insd.pid = ?";
154 $insRes = sqlStatement($insQry, array($patient_id));
155 while($insRow = sqlFetchArray($insRes)){
156 if($insRow['ins_type_code'] == 8){//Self Pay (Private Insurance)
157 $payer = 'Private Health Insurance';
158 }else if($insRow['ins_type_code'] == 2){//Medicare
159 $payer = 'Medicare';
160 }else if($insRow['ins_type_code'] == 3){//Self Pay (Private Insurance)
161 $payer = 'Medicaid';
162 }else{//Other
163 $payer = 'Other';
166 return $payer;
169 function allEncPat($patient_id, $from_date, $to_date){
170 $encArr = array();
171 $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 ?)";
172 $patRes = sqlStatement($patQry, array($patient_id, $from_date, $to_date));
173 while( $patRow = sqlFetchArray($patRes ) ){
174 $encArr[] = $patRow;
177 return $encArr;
180 function allListsPat($type, $patient_id, $from_date, $to_date){
181 $diagArr = array();
182 $diagQry = "SELECT * FROM lists WHERE TYPE = ? AND pid = ? AND (DATE(date) BETWEEN ? AND ?)";
183 $diagRes = sqlStatement($diagQry, array($type, $patient_id, $from_date, $to_date));
184 while( $diagRow = sqlFetchArray($diagRes) ){
185 $diagArr[] = $diagRow;
188 return $diagArr;
191 function allOrderMedsPat($patient_id,$from_date,$to_date){
192 $medArr = array();
193 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 0 AND (DATE(date_added) BETWEEN ? AND ?)";
194 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
195 while( $medRow = sqlFetchArray($medRes) ){
196 $medArr[] = $medRow;
199 return $medArr;
202 function allActiveMedsPat($patient_id,$from_date,$to_date){
203 $medArr = array();
204 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 1 AND (DATE(date_added) BETWEEN ? AND ?)";
205 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
206 while( $medRow = sqlFetchArray($medRes) ){
207 $medArr[] = $medRow;
210 return $medArr;
213 function allProcPat($proc_type = "Procedure", $patient_id, $from_date, $to_date){
214 $procArr = array();
215 $procQry = "SELECT poc.procedure_code, poc.procedure_name, po.date_ordered, fe.encounter,fe.date FROM form_encounter fe ".
216 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'procedure_order' ".
217 "INNER JOIN procedure_order po ON po.encounter_id = f.encounter ".
218 "INNER JOIN procedure_order_code poc ON poc.procedure_order_id = po.procedure_order_id ".
219 "WHERE poc.procedure_order_title = ? AND po.patient_id = ? ".
220 "AND (po.date_ordered BETWEEN ? AND ?)";
221 $procRes = sqlStatement($procQry, array($proc_type, $patient_id, $from_date, $to_date));
222 while( $procRow = sqlFetchArray($procRes ) ){
223 $procArr[] = $procRow;
226 return $procArr;
229 function allVitalsPat($patient_id, $from_date, $to_date){
230 $vitArr = array();
231 $vitQry = "SELECT fe.encounter, v.bps, v.date,v.bpd,v.BMI as bmi FROM form_encounter fe ".
232 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'vitals' ".
233 "INNER JOIN form_vitals v ON v.id = f.form_id ".
234 "WHERE v.pid = ? ".
235 "AND (v.date BETWEEN ? AND ?)";
236 $vitRes = sqlStatement($vitQry, array($patient_id, $from_date, $to_date));
237 while( $vitRow = sqlFetchArray($vitRes ) ){
238 $vitArr[] = $vitRow;
241 return $vitArr;
244 function allImmuPat($patient_id, $from_date, $to_date){
245 $immArr = array();
246 $immQry = "SELECT * FROM immunizations ".
247 "WHERE patient_id = ? ".
248 "AND (administered_date BETWEEN ? AND ?)";
249 $immRes = sqlStatement($immQry, array($patient_id, $from_date, $to_date));
250 while( $immRow = sqlFetchArray($immRes ) ){
251 $immArr[] = $immRow;
254 return $immArr;
256 function getPatData($patient_id){
257 $patientRow = sqlQuery("SELECT * FROM patient_data WHERE pid= ?", array($patient_id));
258 return $patientRow;
261 function getUsrDataCheck($provider_id){
262 $userRow = array();
263 if($provider_id != ""){
264 $userRow = sqlQuery("SELECT facility, facility_id, federaltaxid, npi, phone,fname, lname FROM users WHERE id= ?", array($provider_id));
266 return $userRow;
269 function getFacilDataChk($facility_id){
270 global $facilityService;
271 return $facilityService->getById($facility_id);
274 function patientQRDAHistory($patient_id){
275 $patientHistRow = sqlQuery("SELECT tobacco, date FROM history_data WHERE pid= ? ORDER BY id DESC LIMIT 1", array($patient_id));
276 return $patientHistRow;