couple very minor fixes to prior commit
[openemr.git] / custom / qrda_functions.php
blobc30381af9f1b5b2b39f104f9c66b472e688bb206
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 // Functions for QRDA Category I (or) III 2014 XML format.
26 //function for Stratification data getting for NQF# 0024 Rule
27 function getQRDAStratumInfo($patArr, $begin_date){
28 $startumArr = array();
29 if(count($patArr) > 0){
30 //Age Between 3 and 11
31 $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) ";
32 $stratumOneRes = sqlStatement($stratumOneQry);
33 $stratumOneRows = sqlNumRows($stratumOneRes);
35 //Age Between 12 and 17
36 $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) ";
37 $stratumTwoRes = sqlStatement($stratumTwoQry);
38 $stratumTwoRows = sqlNumRows($stratumTwoRes);
39 $startumArr[1] = $stratumOneRows;
40 $startumArr[2] = $stratumTwoRows;
41 }else{
42 $startumArr[1] = 0;
43 $startumArr[2] = 0;
45 return $startumArr;
48 //function for getting Payer(Insurance Type) Information for Export QRDA
49 function getQRDAPayerInfo($patArr){
50 $payerCheckArr = array();
51 $payerCheckArr['Medicare'] = 0;
52 $payerCheckArr['Medicaid'] = 0;
53 $payerCheckArr['Private Health Insurance'] = 0;
54 $payerCheckArr['Other'] = 0;
55 if(count($patArr) > 0){
56 $insQry = "SELECT insd.*, ic.freeb_type FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd ".
57 "INNER JOIN insurance_companies ic ON insd.provider = ic.id ".
58 "WHERE insd.pid IN (".add_escape_custom(implode(",", $patArr)).")";
59 $insRes = sqlStatement($insQry);
60 while($insRow = sqlFetchArray($insRes)){
61 if($insRow['freeb_type'] == 8){//Self Pay (Private Insurance)
62 $payerCheckArr['Private Health Insurance']++;
63 }else if($insRow['freeb_type'] == 2){//Medicare
64 $payerCheckArr['Medicare']++;
65 }else if($insRow['freeb_type'] == 3){//Self Pay (Private Insurance)
66 $payerCheckArr['Medicaid']++;
67 }else{//Other
68 $payerCheckArr['Other']++;
73 return $payerCheckArr;
76 //function for getting Race, Ethnicity and Gender Information for Export QRDA
77 function getQRDAPatientNeedInfo($patArr){
78 //Defining Array elements
79 //Gender
80 $genderArr = array();
81 $genderArr['Male'] = 0;
82 $genderArr['Female'] = 0;
83 $genderArr['Unknown'] = 0;
84 //Race
85 $raceArr = array();
86 $raceArr['American Indian or Alaska Native'] = 0;
87 $raceArr['Asian'] = 0;
88 $raceArr['Black or African American'] = 0;
89 $raceArr['Native Hawaiian or Other Pacific Islander'] = 0;
90 $raceArr['White'] = 0;
91 $raceArr['Other'] = 0;
92 //Ethnicity
93 $ethincityArr = array();
94 $ethincityArr['Not Hispanic or Latino'] = 0;
95 $ethincityArr['Hispanic or Latino'] = 0;
97 $mainArr = array();
98 if(count($patArr) > 0){
99 $patRes = sqlStatement("SELECT pid, sex, race, ethnicity FROM patient_data WHERE pid IN (".add_escape_custom(implode(",", $patArr)).")");
100 while($patRow = sqlFetchArray($patRes)){
101 //Gender Collection
102 if($patRow['sex'] == "Male"){
103 $genderArr['Male']++;
104 }else if($patRow['sex'] == "Female"){
105 $genderArr['Female']++;
106 }else{
107 $genderArr['Unknown']++;
110 //Race Section
111 if($patRow['race'] == "amer_ind_or_alaska_native"){
112 $raceArr['American Indian or Alaska Native']++;
113 }else if($patRow['race'] == "Asian"){
114 $raceArr['Asian']++;
115 }else if($patRow['race'] == "black_or_afri_amer"){
116 $raceArr['Black or African American']++;
117 }else if($patRow['race'] == "native_hawai_or_pac_island"){
118 $raceArr['Native Hawaiian or Other Pacific Islander']++;
119 }else if($patRow['race'] == "white"){
120 $raceArr['White']++;
121 }else if($patRow['race'] == "Asian_Pacific_Island"){
122 $raceArr['Other']++;
123 }else if($patRow['race'] == "Black_not_of_Hispan"){
124 $raceArr['Other']++;
125 }else if($patRow['race'] == "Hispanic"){
126 $raceArr['Other']++;
127 }else if($patRow['race'] == "White_not_of_Hispan"){
128 $raceArr['Other']++;
129 }else{
130 $raceArr['Other']++;
133 if($patRow['ethnicity'] == "hisp_or_latin"){
134 $ethincityArr['Hispanic or Latino']++;
135 }else if($patRow['ethnicity'] == "not_hisp_or_latin"){
136 $ethincityArr['Not Hispanic or Latino']++;
140 $mainArr['gender'] = $genderArr;
141 $mainArr['race'] = $raceArr;
142 $mainArr['ethnicity'] = $ethincityArr;
144 return $mainArr;
147 function payerPatient($patient_id){
148 $payer = 'Other';
149 $insQry = "SELECT insd.*, ic.freeb_type FROM (SELECT pid, provider FROM insurance_data WHERE type = 'primary' ORDER BY id DESC) insd ".
150 "INNER JOIN insurance_companies ic ON insd.provider = ic.id ".
151 "WHERE insd.pid = ?";
152 $insRes = sqlStatement($insQry, array($patient_id));
153 while($insRow = sqlFetchArray($insRes)){
154 if($insRow['freeb_type'] == 8){//Self Pay (Private Insurance)
155 $payer = 'Private Health Insurance';
156 }else if($insRow['freeb_type'] == 2){//Medicare
157 $payer = 'Medicare';
158 }else if($insRow['freeb_type'] == 3){//Self Pay (Private Insurance)
159 $payer = 'Medicaid';
160 }else{//Other
161 $payer = 'Other';
164 return $payer;
167 function allEncPat($patient_id, $from_date, $to_date){
168 $encArr = array();
169 $patQry = "SELECT encounter, date FROM form_encounter WHERE pid = ? AND (DATE(date) BETWEEN ? AND ?)";
170 $patRes = sqlStatement($patQry, array($patient_id, $from_date, $to_date));
171 while( $patRow = sqlFetchArray($patRes ) ){
172 $encArr[] = $patRow;
175 return $encArr;
178 function allListsPat($type, $patient_id, $from_date, $to_date){
179 $diagArr = array();
180 $diagQry = "SELECT * FROM lists WHERE TYPE = ? AND pid = ? AND (DATE(date) BETWEEN ? AND ?)";
181 $diagRes = sqlStatement($diagQry, array($type, $patient_id, $from_date, $to_date));
182 while( $diagRow = sqlFetchArray($diagRes) ){
183 $diagArr[] = $diagRow;
186 return $diagArr;
189 function allProcPat($proc_type = "Procedure", $patient_id, $from_date, $to_date){
190 $procArr = array();
191 $procQry = "SELECT poc.procedure_code, poc.procedure_name, po.date_ordered, fe.encounter FROM form_encounter fe ".
192 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'procedure_order_oemr' ".
193 "INNER JOIN procedure_order po ON po.procedure_order_id = f.form_id ".
194 "INNER JOIN procedure_order_code poc ON poc.procedure_order_id = po.procedure_order_id ".
195 "WHERE poc.procedure_order_title = ? AND po.patient_id = ? ".
196 "AND (po.date_ordered BETWEEN ? AND ?)";
197 $procRes = sqlStatement($procQry, array($proc_type, $patient_id, $from_date, $to_date));
198 while( $procRow = sqlFetchArray($procRes ) ){
199 $procArr[] = $procRow;
202 return $procArr;
205 function allVitalsPat($patient_id, $from_date, $to_date){
206 $vitArr = array();
207 $vitQry = "SELECT fe.encounter, v.bps, v.date FROM form_encounter fe ".
208 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'vitals' ".
209 "INNER JOIN form_vitals v ON v.id = f.form_id ".
210 "WHERE v.pid = ? ".
211 "AND (v.date BETWEEN ? AND ?)";
212 $vitRes = sqlStatement($vitQry, array($patient_id, $from_date, $to_date));
213 while( $vitRow = sqlFetchArray($vitRes ) ){
214 $vitArr[] = $vitRow;
217 return $vitArr;
220 function allImmuPat($patient_id, $from_date, $to_date){
221 $immArr = array();
222 $immQry = "SELECT * FROM immunizations ".
223 "WHERE patient_id = ? ".
224 "AND (administered_date BETWEEN ? AND ?)";
225 $immRes = sqlStatement($immQry, array($patient_id, $from_date, $to_date));
226 while( $immRow = sqlFetchArray($immRes ) ){
227 $immArr[] = $immRow;
230 return $immArr;
232 function getPatData($patient_id){
233 $patientRow = sqlQuery("SELECT * FROM patient_data WHERE pid= ?", array($patient_id));
234 return $patientRow;
237 function getUsrDataCheck($provider_id){
238 $userRow = array();
239 if($provider_id != ""){
240 $userRow = sqlQuery("SELECT facility, facility_id, federaltaxid, npi, phone,fname, lname FROM users WHERE id= ?", array($provider_id));
242 return $userRow;
245 function getFacilDataChk($facility_id){
246 $facilResRow = sqlQuery("SELECT name, street,city,state,postal_code, country_code, phone from facility WHERE id = ?", array($facility_id));
247 return $facilResRow;
250 function patientQRDAHistory($patient_id){
251 $patientHistRow = sqlQuery("SELECT tobacco, date FROM history_data WHERE pid= ? ORDER BY id DESC LIMIT 1", array($patient_id));
252 return $patientHistRow;