5 * Copyright (C) 2010 Garden State Health Systems <http://www.gshsys.com/>
7 * LICENSE: This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 3
10 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
19 * @author Garden State Health Systems <http://www.gshsys.com/>
20 * @link http://www.open-emr.org
24 if($_POST['ccrAction'] == 'generate'){
25 if(isset($_POST['show_date'])){
27 $start = $_POST['Start'];
28 $start = $start." 00:00:00";
30 $end = $end." 23:59:59";
34 function getHeaderData()
37 // Reserved for future use
41 function getMedicationData()
43 global $pid,$set,$start,$end;
46 SELECT prescriptions.date_added ,
47 prescriptions.patient_id,
48 prescriptions.start_date,
49 prescriptions.quantity,
50 prescriptions.interval,
53 prescriptions.medication,
54 IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
55 prescriptions.provider_id,
57 prescriptions.rxnorm_drugcode,
58 IFNULL(prescriptions.refills,0) AS refills,
62 LEFT JOIN list_options AS lo
63 ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id AND lo.activity = 1
64 LEFT JOIN list_options AS lo2
65 ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id AND lo2.activity = 1
66 WHERE prescriptions.patient_id = ?
67 AND prescriptions.date_added BETWEEN ? AND ?
70 DATE(DATE) AS date_added,
72 begdate AS start_date,
78 IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
81 '' AS rxnorm_drugcode,
87 WHERE `type` = 'medication'
89 AND `date` BETWEEN ? AND ?";
90 $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
93 SELECT prescriptions.date_added ,
94 prescriptions.patient_id,
95 prescriptions.start_date,
96 prescriptions.quantity,
97 prescriptions.interval,
100 prescriptions.medication,
101 IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
102 prescriptions.provider_id,
104 prescriptions.rxnorm_drugcode,
105 IFNULL(prescriptions.refills,0) AS refills,
109 LEFT JOIN list_options AS lo
110 ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id AND lo.activity = 1
111 LEFT JOIN list_options AS lo2
112 ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id AND lo2.activity = 1
113 WHERE prescriptions.patient_id = ?
116 DATE(DATE) AS date_added,
118 begdate AS start_date,
124 IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
127 '' AS rxnorm_drugcode,
133 WHERE `type` = 'medication'
135 $result = sqlStatement($sql, array($pid,$pid) );
140 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' AND immunizations.added_erroneously = 0
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 immunizations.added_erroneously = 0 AND code_types.ct_key = 'CVX'";
171 $result = sqlStatement($sql, array($pid) );
177 function getProcedureData()
180 global $pid,$set,$start,$end;
184 lists.title as proc_title,
185 lists.date as `date`,
186 list_options.title as outcome,
189 lists.type as `type`,
190 lists.diagnosis as `code`,
191 IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
194 LEFT JOIN issue_encounter
195 ON issue_encounter.list_id = lists.id
196 LEFT JOIN form_encounter
197 ON form_encounter.encounter = issue_encounter.encounter
199 ON form_encounter.facility_id = facility.id
201 ON form_encounter.provider_id = users.id
202 LEFT JOIN list_options
203 ON lists.outcome = list_options.option_id
204 AND list_options.list_id = 'outcome' AND list_options.activity = 1
205 WHERE lists.type = 'surgery'
207 AND lists.date BETWEEN ? AND ?
210 pt.name as proc_title,
213 ptt.laterality as laterality,
214 ptt.body_site as body_site,
215 'Lab Order' as `type`,
216 ptt.standard_code as `code`,
217 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
219 procedure_result AS prs
220 LEFT JOIN procedure_report AS prp
221 ON prs.procedure_report_id = prp.procedure_report_id
222 LEFT JOIN procedure_order AS po
223 ON prp.procedure_order_id = po.procedure_order_id
224 LEFT JOIN procedure_order_code AS poc
225 ON poc.procedure_order_id = po.procedure_order_id
226 AND poc.procedure_order_seq = prp.procedure_order_seq
227 LEFT JOIN procedure_type AS pt
228 ON pt.lab_id = po.lab_id
229 AND pt.procedure_code = prs.result_code
230 AND pt.procedure_type = 'res'
231 LEFT JOIN procedure_type AS ptt
232 ON pt.parent = ptt.procedure_type_id
233 AND ptt.procedure_type = 'ord'
234 LEFT JOIN list_options AS lo
235 ON lo.list_id = 'proc_unit'
236 AND pt.units = lo.option_id AND lo.activity = 1
237 WHERE po.patient_id = ?
238 AND prs.date BETWEEN ? AND ?";
240 $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
244 lists.title as proc_title,
245 lists.date as `date`,
246 list_options.title as outcome,
249 lists.type as `type`,
250 lists.diagnosis as `code`,
251 IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
254 LEFT JOIN issue_encounter
255 ON issue_encounter.list_id = lists.id
256 LEFT JOIN form_encounter
257 ON form_encounter.encounter = issue_encounter.encounter
259 ON form_encounter.facility_id = facility.id
261 ON form_encounter.provider_id = users.id
262 LEFT JOIN list_options
263 ON lists.outcome = list_options.option_id
264 AND list_options.list_id = 'outcome' AND list_options.activity = 1
265 WHERE lists.type = 'surgery'
269 pt.name as proc_title,
272 ptt.laterality as laterality,
273 ptt.body_site as body_site,
274 'Lab Order' as `type`,
275 ptt.standard_code as `code`,
276 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
278 procedure_result AS prs
279 LEFT JOIN procedure_report AS prp
280 ON prs.procedure_report_id = prp.procedure_report_id
281 LEFT JOIN procedure_order AS po
282 ON prp.procedure_order_id = po.procedure_order_id
283 LEFT JOIN procedure_order_code AS poc
284 ON poc.procedure_order_id = po.procedure_order_id
285 AND poc.procedure_order_seq = prp.procedure_order_seq
286 LEFT JOIN procedure_type AS pt
287 ON pt.lab_id = po.lab_id
288 AND pt.procedure_code = prs.result_code
289 AND pt.procedure_type = 'res'
290 LEFT JOIN procedure_type AS ptt
291 ON pt.parent = ptt.procedure_type_id
292 AND ptt.procedure_type = 'ord'
293 LEFT JOIN list_options AS lo
294 ON lo.list_id = 'proc_unit'
295 AND pt.units = lo.option_id AND lo.activity = 1
296 WHERE po.patient_id = ? ";
298 $result = sqlStatement($sql, array($pid,$pid) );
304 function getProblemData()
307 # Note we are hard-coding (only allowing) problems that have been coded to ICD9. Would
308 # be easy to upgrade this to other codesets in future (ICD10,SNOMED) by using already
309 # existant flags in the code_types table.
310 # Additionally, only using problems that have one diagnosis code set in diagnosis field.
311 # Note OpenEMR allows multiple codes set per problem, but will limit to showing only
312 # problems with one diagnostic code set in order to maintain previous behavior
313 # (this will likely need to be dealt with at some point; ie. support multiple dx codes per problem).
315 global $pid,$set,$start,$end;
318 SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
319 fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
320 l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
322 LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
323 LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
324 LEFT JOIN facility AS f ON fe.facility_id = f.id
325 LEFT JOIN users AS u ON fe.provider_id = u.id
326 WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
327 AND l.diagnosis NOT LIKE '%;%'
328 AND l.date BETWEEN ? AND ?";
329 $result = sqlStatement($sql, array($pid,$start,$end) );
332 SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
333 fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
334 l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
336 LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
337 LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
338 LEFT JOIN facility AS f ON fe.facility_id = f.id
339 LEFT JOIN users AS u ON fe.provider_id = u.id
340 WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
341 AND l.diagnosis NOT LIKE '%;%'";
342 $result = sqlStatement($sql, array($pid) );
348 function getAlertData()
351 global $pid,$set,$start,$end;
354 select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
355 ie.list_id, l.pid, l.title as alert_title, l.outcome,
356 l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
357 l.reaction , l.comments ,
358 f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
360 left join issue_encounter as ie
362 left join form_encounter as fe
363 on fe.encounter = ie.encounter
364 left join facility as f
365 on fe.facility_id = f.id
367 on fe.provider_id = u.id
368 left join codes as cd
369 on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
370 where l.type = 'allergy' and l.pid=?
371 AND l.date BETWEEN ? AND ?";
373 $result = sqlStatement($sql, array($pid,$start,$end) );
376 select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
377 ie.list_id, l.pid, l.title as alert_title, l.outcome,
378 l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
379 l.reaction , l.comments ,
380 f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
382 left join issue_encounter as ie
384 left join form_encounter as fe
385 on fe.encounter = ie.encounter
386 left join facility as f
387 on fe.facility_id = f.id
389 on fe.provider_id = u.id
390 left join codes as cd
391 on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
392 where l.type = 'allergy' and l.pid=?";
394 $result = sqlStatement($sql, array($pid) );
400 function getResultData()
403 global $pid,$set,$start,$end;
407 prs.procedure_result_id as `pid`,
409 pt.procedure_type_id as `type`,
411 concat_ws(' ',prs.result,lo.title) as `result`,
412 prs.range as `range`,
413 prs.abnormal as `abnormal`,
414 prs.comments as `comments`,
417 procedure_result AS prs
418 LEFT JOIN procedure_report AS prp
419 ON prs.procedure_report_id = prp.procedure_report_id
420 LEFT JOIN procedure_order AS po
421 ON prp.procedure_order_id = po.procedure_order_id
422 LEFT JOIN procedure_order_code AS poc
423 ON poc.procedure_order_id = po.procedure_order_id
424 AND poc.procedure_order_seq = prp.procedure_order_seq
425 LEFT JOIN procedure_type AS pt
426 ON pt.lab_id = po.lab_id
427 AND pt.procedure_code = prs.result_code
428 AND pt.procedure_type = 'res'
429 LEFT JOIN procedure_type AS ptt
430 ON pt.parent = ptt.procedure_type_id
431 AND ptt.procedure_type = 'ord'
432 LEFT JOIN list_options AS lo
433 ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id AND lo.activity = 1
434 WHERE po.patient_id=?
435 AND prs.date BETWEEN ? AND ?";
437 $result = sqlStatement($sql, array($pid,$start,$end) );
441 prs.procedure_result_id as `pid`,
443 pt.procedure_type_id as `type`,
445 concat_ws(' ',prs.result,lo.title) as `result`,
446 prs.range as `range`,
447 prs.abnormal as `abnormal`,
448 prs.comments as `comments`,
451 procedure_result AS prs
452 LEFT JOIN procedure_report AS prp
453 ON prs.procedure_report_id = prp.procedure_report_id
454 LEFT JOIN procedure_order AS po
455 ON prp.procedure_order_id = po.procedure_order_id
456 LEFT JOIN procedure_order_code AS poc
457 ON poc.procedure_order_id = po.procedure_order_id
458 AND poc.procedure_order_seq = prp.procedure_order_seq
459 LEFT JOIN procedure_type AS pt
460 ON pt.lab_id = po.lab_id
461 AND pt.procedure_code = prs.result_code
462 AND pt.procedure_type = 'res'
463 LEFT JOIN procedure_type AS ptt
464 ON pt.parent = ptt.procedure_type_id
465 AND ptt.procedure_type = 'ord'
466 LEFT JOIN list_options AS lo
467 ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id AND lo.activity = 1
468 WHERE po.patient_id=?";
470 $result = sqlStatement($sql, array($pid) );
476 function getActorData()
481 select fname, lname, DOB, sex, pid, street, city, state, postal_code, phone_contact
485 $result[0] = sqlStatement($sql, array($pid) );
488 SELECT * FROM users AS u LEFT JOIN facility AS f ON u.facility_id = f.id WHERE u.id=?";
490 $result[1] = sqlStatement($sql2, array($_SESSION['authUserID']) );
494 u.ppid AS id, u.name AS lname, '' AS fname, '' AS city, '' AS state, '' AS zip, '' AS phone
496 procedure_order AS po
498 ON f.form_id = po.procedure_order_id
499 AND f.formdir = 'procedure_order'
500 LEFT JOIN list_options AS lo
501 ON lo.title = f.form_name AND lo.activity = 1
502 LEFT JOIN procedure_providers AS u
503 ON po.lab_id = u.ppid
505 AND lo.list_id = 'proc_type'
506 AND lo.option_id = 'ord'
509 $result[2] = sqlStatement($sql3, array($pid) );
515 function getReportFilename()
520 select fname, lname, pid
524 $result = sqlQuery($sql, array($pid) );
525 $result_filename = $result['lname']."-".$result['fname']."-".$result['pid']."-".date("mdY",time());
527 return $result_filename;