2 // ------------------------------------------------------------------------ //
3 // Garden State Health Systems //
4 // Copyright (c) 2010 gshsys.com //
5 // <http://www.gshsys.com/> //
6 // ------------------------------------------------------------------------ //
7 // This program is free software; you can redistribute it and/or modify //
8 // it under the terms of the GNU General Public License as published by //
9 // the Free Software Foundation; either version 2 of the License, or //
10 // (at your option) any later version. //
12 // You may not change or alter any portion of this comment or credits //
13 // of supporting developers from this source code or any supporting //
14 // source code which is considered copyrighted (c) material of the //
15 // original comment or credit authors. //
17 // This program is distributed in the hope that it will be useful, //
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
20 // GNU General Public License for more details. //
22 // You should have received a copy of the GNU General Public License //
23 // along with this program; if not, write to the Free Software //
24 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
25 // ------------------------------------------------------------------------ //
27 if($_POST['ccrAction'] == 'generate'){
28 if(isset($_POST['show_date'])){
30 $start = $_POST['Start'];
31 $start = $start." 00:00:00";
33 $end = $end." 23:59:59";
37 function getHeaderData() {
39 // Reserved for future use
43 function getMedicationData() {
44 global $pid,$set,$start,$end;
47 SELECT prescriptions.date_added ,
48 prescriptions.patient_id,
49 prescriptions.start_date,
50 prescriptions.quantity,
51 prescriptions.interval,
54 prescriptions.medication,
55 IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
56 prescriptions.provider_id,
58 prescriptions.rxnorm_drugcode,
59 IFNULL(prescriptions.refills,0) AS refills,
63 LEFT JOIN list_options AS lo
64 ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id
65 LEFT JOIN list_options AS lo2
66 ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id
67 WHERE prescriptions.patient_id = ?
68 AND prescriptions.date_added BETWEEN ? AND ?
71 DATE(DATE) AS date_added,
73 begdate AS start_date,
79 IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
82 '' AS rxnorm_drugcode,
88 WHERE `type` = 'medication'
90 AND `date` BETWEEN ? AND ?";
91 $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
94 SELECT prescriptions.date_added ,
95 prescriptions.patient_id,
96 prescriptions.start_date,
97 prescriptions.quantity,
98 prescriptions.interval,
101 prescriptions.medication,
102 IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
103 prescriptions.provider_id,
105 prescriptions.rxnorm_drugcode,
106 IFNULL(prescriptions.refills,0) AS refills,
110 LEFT JOIN list_options AS lo
111 ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id
112 LEFT JOIN list_options AS lo2
113 ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id
114 WHERE prescriptions.patient_id = ?
117 DATE(DATE) AS date_added,
119 begdate AS start_date,
125 IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
128 '' AS rxnorm_drugcode,
134 WHERE `type` = 'medication'
136 $result = sqlStatement($sql, array($pid,$pid) );
141 function getImmunizationData() {
142 global $pid,$set,$start,$end;
145 immunizations.administered_date,
146 immunizations.patient_id,
147 immunizations.vis_date,
149 immunizations.immunization_id,
150 immunizations.manufacturer,
151 codes.code_text AS title
153 LEFT JOIN codes ON immunizations.cvx_code = codes.code
154 LEFT JOIN code_types ON codes.code_type = code_types.ct_id
155 WHERE immunizations.patient_id = ? AND code_types.ct_key = 'CVX'
156 AND create_date BETWEEN ? AND ?" ;
157 $result = sqlStatement($sql, array($pid,$start,$end) );
160 immunizations.administered_date,
161 immunizations.patient_id,
162 immunizations.vis_date,
164 immunizations.immunization_id,
165 immunizations.manufacturer,
166 codes.code_text AS title
168 LEFT JOIN codes ON immunizations.cvx_code = codes.code
169 LEFT JOIN code_types ON codes.code_type = code_types.ct_id
170 WHERE immunizations.patient_id = ? AND code_types.ct_key = 'CVX'";
171 $result = sqlStatement($sql, array($pid) );
177 function getProcedureData() {
179 global $pid,$set,$start,$end;
183 lists.title as proc_title,
184 lists.date as `date`,
185 list_options.title as outcome,
188 lists.type as `type`,
189 lists.diagnosis as `code`,
190 IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
193 LEFT JOIN issue_encounter
194 ON issue_encounter.list_id = lists.id
195 LEFT JOIN form_encounter
196 ON form_encounter.encounter = issue_encounter.encounter
198 ON form_encounter.facility_id = facility.id
200 ON form_encounter.provider_id = users.id
201 LEFT JOIN list_options
202 ON lists.outcome = list_options.option_id
203 AND list_options.list_id = 'outcome'
204 WHERE lists.type = 'surgery'
206 AND lists.date BETWEEN ? AND ?
209 pt.name as proc_title,
212 ptt.laterality as laterality,
213 ptt.body_site as body_site,
214 'Lab Order' as `type`,
215 ptt.standard_code as `code`,
216 IF(SUBSTRING(ptt.standard_code,1,LOCATE(':',ptt.standard_code)-1) = 'ICD9','ICD9-CM',SUBSTRING(ptt.standard_code,1,LOCATE(':',ptt.standard_code)-1)) AS coding
218 procedure_result AS prs
219 LEFT JOIN procedure_report AS prp
220 ON prs.procedure_report_id = prp.procedure_report_id
221 LEFT JOIN procedure_order AS po
222 ON prp.procedure_order_id = po.procedure_order_id
223 LEFT JOIN procedure_type AS pt
224 ON prs.procedure_type_id = pt.procedure_type_id
225 LEFT JOIN procedure_type AS ptt
226 ON pt.parent = ptt.procedure_type_id
227 AND ptt.procedure_type = 'ord'
228 LEFT JOIN list_options AS lo
229 ON lo.list_id = 'proc_unit'
230 AND pt.units = lo.option_id
231 WHERE po.patient_id = ?
232 AND prs.date BETWEEN ? AND ?";
234 $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
238 lists.title as proc_title,
239 lists.date as `date`,
240 list_options.title as outcome,
243 lists.type as `type`,
244 lists.diagnosis as `code`,
245 IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
248 LEFT JOIN issue_encounter
249 ON issue_encounter.list_id = lists.id
250 LEFT JOIN form_encounter
251 ON form_encounter.encounter = issue_encounter.encounter
253 ON form_encounter.facility_id = facility.id
255 ON form_encounter.provider_id = users.id
256 LEFT JOIN list_options
257 ON lists.outcome = list_options.option_id
258 AND list_options.list_id = 'outcome'
259 WHERE lists.type = 'surgery'
263 pt.name as proc_title,
266 ptt.laterality as laterality,
267 ptt.body_site as body_site,
268 'Lab Order' as `type`,
269 ptt.standard_code as `code`,
270 IF(SUBSTRING(ptt.standard_code,1,LOCATE(':',ptt.standard_code)-1) = 'ICD9','ICD9-CM',SUBSTRING(ptt.standard_code,1,LOCATE(':',ptt.standard_code)-1)) AS coding
272 procedure_result AS prs
273 LEFT JOIN procedure_report AS prp
274 ON prs.procedure_report_id = prp.procedure_report_id
275 LEFT JOIN procedure_order AS po
276 ON prp.procedure_order_id = po.procedure_order_id
277 LEFT JOIN procedure_type AS pt
278 ON prs.procedure_type_id = pt.procedure_type_id
279 LEFT JOIN procedure_type AS ptt
280 ON pt.parent = ptt.procedure_type_id
281 AND ptt.procedure_type = 'ord'
282 LEFT JOIN list_options AS lo
283 ON lo.list_id = 'proc_unit'
284 AND pt.units = lo.option_id
285 WHERE po.patient_id = ? ";
287 $result = sqlStatement($sql, array($pid,$pid) );
293 function getProblemData() {
295 # Note we are hard-coding (only allowing) problems that have been coded to ICD9. Would
296 # be easy to upgrade this to other codesets in future (ICD10,SNOMED) by using already
297 # existant flags in the code_types table.
298 # Additionally, only using problems that have one diagnosis code set in diagnosis field.
299 # Note OpenEMR allows multiple codes set per problem, but will limit to showing only
300 # problems with one diagnostic code set in order to maintain previous behavior
301 # (this will likely need to be dealt with at some point; ie. support multiple dx codes per problem).
303 global $pid,$set,$start,$end;
306 SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
307 fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
308 l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
310 LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
311 LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
312 LEFT JOIN facility AS f ON fe.facility_id = f.id
313 LEFT JOIN users AS u ON fe.provider_id = u.id
314 WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
315 AND l.diagnosis NOT LIKE '%;%'
316 AND l.date BETWEEN ? AND ?";
317 $result = sqlStatement($sql, array($pid,$start,$end) );
320 SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
321 fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
322 l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
324 LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
325 LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
326 LEFT JOIN facility AS f ON fe.facility_id = f.id
327 LEFT JOIN users AS u ON fe.provider_id = u.id
328 WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
329 AND l.diagnosis NOT LIKE '%;%'";
330 $result = sqlStatement($sql, array($pid) );
336 function getAlertData() {
338 global $pid,$set,$start,$end;
341 select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
342 ie.list_id, l.pid, l.title as alert_title, l.outcome,
343 l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
344 l.reaction , l.comments ,
345 f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
347 left join issue_encounter as ie
349 left join form_encounter as fe
350 on fe.encounter = ie.encounter
351 left join facility as f
352 on fe.facility_id = f.id
354 on fe.provider_id = u.id
355 left join codes as cd
356 on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
357 where l.type = 'allergy' and l.pid=?
358 AND l.date BETWEEN ? AND ?";
360 $result = sqlStatement($sql, array($pid,$start,$end) );
363 select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
364 ie.list_id, l.pid, l.title as alert_title, l.outcome,
365 l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
366 l.reaction , l.comments ,
367 f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
369 left join issue_encounter as ie
371 left join form_encounter as fe
372 on fe.encounter = ie.encounter
373 left join facility as f
374 on fe.facility_id = f.id
376 on fe.provider_id = u.id
377 left join codes as cd
378 on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
379 where l.type = 'allergy' and l.pid=?";
381 $result = sqlStatement($sql, array($pid) );
387 function getResultData() {
389 global $pid,$set,$start,$end;
393 prs.procedure_result_id as `pid`,
395 pt.procedure_type_id as `type`,
397 concat_ws(' ',prs.result,lo.title) as `result`,
398 prs.range as `range`,
399 prs.abnormal as `abnormal`,
400 prs.comments as `comments`,
403 procedure_result AS prs
404 LEFT JOIN procedure_report AS prp
405 ON prs.procedure_report_id = prp.procedure_report_id
406 LEFT JOIN procedure_order AS po
407 ON prp.procedure_order_id = po.procedure_order_id
408 LEFT JOIN procedure_type AS pt
409 ON prs.procedure_type_id = pt.procedure_type_id
410 LEFT JOIN procedure_type AS ptt
411 ON pt.parent = ptt.procedure_type_id
412 AND ptt.procedure_type = 'ord'
413 LEFT JOIN list_options AS lo
414 ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
415 WHERE po.patient_id=?
416 AND prs.date BETWEEN ? AND ?";
418 $result = sqlStatement($sql, array($pid,$start,$end) );
422 prs.procedure_result_id as `pid`,
424 pt.procedure_type_id as `type`,
426 concat_ws(' ',prs.result,lo.title) as `result`,
427 prs.range as `range`,
428 prs.abnormal as `abnormal`,
429 prs.comments as `comments`,
432 procedure_result AS prs
433 LEFT JOIN procedure_report AS prp
434 ON prs.procedure_report_id = prp.procedure_report_id
435 LEFT JOIN procedure_order AS po
436 ON prp.procedure_order_id = po.procedure_order_id
437 LEFT JOIN procedure_type AS pt
438 ON prs.procedure_type_id = pt.procedure_type_id
439 LEFT JOIN procedure_type AS ptt
440 ON pt.parent = ptt.procedure_type_id
441 AND ptt.procedure_type = 'ord'
442 LEFT JOIN list_options AS lo
443 ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
444 WHERE po.patient_id=?";
446 $result = sqlStatement($sql, array($pid) );
452 function getActorData() {
456 select fname, lname, DOB, sex, pid, street, city, state, postal_code, phone_contact
460 $result[0] = sqlStatement($sql, array($pid) );
463 SELECT * FROM users AS u LEFT JOIN facility AS f ON u.facility_id = f.id WHERE u.id=?";
465 $result[1] = sqlStatement($sql2, array($_SESSION['authUserID']) );
472 LEFT JOIN procedure_order AS po
473 ON po.procedure_type_id = pt.procedure_type_id
475 ON f.form_id = po.procedure_order_id
476 LEFT JOIN list_options AS lo
477 ON lo.title = f.form_name
481 AND lo.list_id = 'proc_type'
482 AND lo.option_id = 'ord'
485 $result[2] = sqlStatement($sql3, array($pid) );
491 function getReportFilename() {
495 select fname, lname, pid
499 $result = sqlQuery($sql, array($pid) );
500 $result_filename = $result['lname']."-".$result['fname']."-".$result['pid']."-".date("mdY",time());
502 return $result_filename;