fixing substr warning on fldtype, take 2.
[openemr.git] / custom / qrda_functions.php
blob61dd1f00ab0cde6b297835681ed425b213539c50
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.ins_type_code 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['ins_type_code'] == 8){//Self Pay (Private Insurance)
62 $payerCheckArr['Private Health Insurance']++;
63 }else if($insRow['ins_type_code'] == 2){//Medicare
64 $payerCheckArr['Medicare']++;
65 }else if($insRow['ins_type_code'] == 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.ins_type_code 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['ins_type_code'] == 8){//Self Pay (Private Insurance)
155 $payer = 'Private Health Insurance';
156 }else if($insRow['ins_type_code'] == 2){//Medicare
157 $payer = 'Medicare';
158 }else if($insRow['ins_type_code'] == 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 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 ?)";
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 allOrderMedsPat($patient_id,$from_date,$to_date){
190 $medArr = array();
191 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 0 AND (DATE(date_added) BETWEEN ? AND ?)";
192 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
193 while( $medRow = sqlFetchArray($medRes) ){
194 $medArr[] = $medRow;
197 return $medArr;
200 function allActiveMedsPat($patient_id,$from_date,$to_date){
201 $medArr = array();
202 $medQry = "SELECT * FROM prescriptions where patient_id = ? AND active = 1 AND (DATE(date_added) BETWEEN ? AND ?)";
203 $medRes = sqlStatement($medQry, array($patient_id, $from_date, $to_date));
204 while( $medRow = sqlFetchArray($medRes) ){
205 $medArr[] = $medRow;
208 return $medArr;
211 function allProcPat($proc_type = "Procedure", $patient_id, $from_date, $to_date){
212 $procArr = array();
213 $procQry = "SELECT poc.procedure_code, poc.procedure_name, po.date_ordered, fe.encounter,fe.date FROM form_encounter fe ".
214 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'procedure_order' ".
215 "INNER JOIN procedure_order po ON po.encounter_id = f.encounter ".
216 "INNER JOIN procedure_order_code poc ON poc.procedure_order_id = po.procedure_order_id ".
217 "WHERE poc.procedure_order_title = ? AND po.patient_id = ? ".
218 "AND (po.date_ordered BETWEEN ? AND ?)";
219 $procRes = sqlStatement($procQry, array($proc_type, $patient_id, $from_date, $to_date));
220 while( $procRow = sqlFetchArray($procRes ) ){
221 $procArr[] = $procRow;
224 return $procArr;
227 function allVitalsPat($patient_id, $from_date, $to_date){
228 $vitArr = array();
229 $vitQry = "SELECT fe.encounter, v.bps, v.date,v.bpd,v.BMI as bmi FROM form_encounter fe ".
230 "INNER JOIN forms f ON f.encounter = fe.encounter AND f.deleted != 1 AND f.formdir = 'vitals' ".
231 "INNER JOIN form_vitals v ON v.id = f.form_id ".
232 "WHERE v.pid = ? ".
233 "AND (v.date BETWEEN ? AND ?)";
234 $vitRes = sqlStatement($vitQry, array($patient_id, $from_date, $to_date));
235 while( $vitRow = sqlFetchArray($vitRes ) ){
236 $vitArr[] = $vitRow;
239 return $vitArr;
242 function allImmuPat($patient_id, $from_date, $to_date){
243 $immArr = array();
244 $immQry = "SELECT * FROM immunizations ".
245 "WHERE patient_id = ? ".
246 "AND (administered_date BETWEEN ? AND ?)";
247 $immRes = sqlStatement($immQry, array($patient_id, $from_date, $to_date));
248 while( $immRow = sqlFetchArray($immRes ) ){
249 $immArr[] = $immRow;
252 return $immArr;
254 function getPatData($patient_id){
255 $patientRow = sqlQuery("SELECT * FROM patient_data WHERE pid= ?", array($patient_id));
256 return $patientRow;
259 function getUsrDataCheck($provider_id){
260 $userRow = array();
261 if($provider_id != ""){
262 $userRow = sqlQuery("SELECT facility, facility_id, federaltaxid, npi, phone,fname, lname FROM users WHERE id= ?", array($provider_id));
264 return $userRow;
267 function getFacilDataChk($facility_id){
268 $facilResRow = sqlQuery("SELECT name, street,city,state,postal_code, country_code, phone from facility WHERE id = ?", array($facility_id));
269 return $facilResRow;
272 function patientQRDAHistory($patient_id){
273 $patientHistRow = sqlQuery("SELECT tobacco, date FROM history_data WHERE pid= ? ORDER BY id DESC LIMIT 1", array($patient_id));
274 return $patientHistRow;