Added support for procedure-specific claim notes.
[openemr.git] / library / sql-ccr.inc
blob8942fd041f1ec0328a3c1baed37170180be2a12b
1 <?php
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.                                      //
11 //                                                                           //
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.                                      //
16 //                                                                           //
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.                             //
21 //                                                                           //
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'])){
29     $set = "on";
30     $start = $_POST['Start'];
31     $start = $start." 00:00:00";
32     $end = $_POST['End'];
33     $end = $end." 23:59:59";
34   }
37 function getHeaderData() {
39 // Reserved for future use
40         
43 function getMedicationData() {
44         global $pid,$set,$start,$end;
45   if($set == "on"){
46     $sql = " 
47       SELECT prescriptions.date_added ,
48         prescriptions.patient_id,
49         prescriptions.start_date,
50         prescriptions.quantity,
51         prescriptions.interval,
52         prescriptions.note,
53         prescriptions.drug,
54         prescriptions.medication,
55         IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
56         prescriptions.provider_id,
57         prescriptions.size,
58         prescriptions.rxnorm_drugcode,
59         IFNULL(prescriptions.refills,0) AS refills,
60         lo2.title AS form,
61         lo.title
62       FROM prescriptions 
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 ?
69       UNION
70       SELECT 
71         DATE(DATE) AS date_added,
72         pid AS patient_id,
73         begdate AS start_date,
74         '' AS quantity,
75         '' AS `interval`,
76         comments AS note,
77         title AS drug,
78         '' AS medication,
79         IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
80         '' AS provider_id,
81         '' AS size,
82 '' AS rxnorm_drugcode,
83         0 AS refills,
84         '' AS form,
85         '' AS title 
86       FROM
87         lists 
88       WHERE `type` = 'medication' 
89         AND pid = ?
90         AND `date` BETWEEN ? AND ?";
91     $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
92   }else{
93     $sql = " 
94       SELECT prescriptions.date_added ,
95         prescriptions.patient_id,
96         prescriptions.start_date,
97         prescriptions.quantity,
98         prescriptions.interval,
99         prescriptions.note,
100         prescriptions.drug,
101         prescriptions.medication,
102         IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
103         prescriptions.provider_id,
104         prescriptions.size,
105         prescriptions.rxnorm_drugcode,
106         IFNULL(prescriptions.refills,0) AS refills,
107         lo2.title AS form,
108         lo.title
109       FROM prescriptions 
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 = ?
115       UNION
116       SELECT 
117         DATE(DATE) AS date_added,
118         pid AS patient_id,
119         begdate AS start_date,
120         '' AS quantity,
121         '' AS `interval`,
122         comments AS note,
123         title AS drug,
124         '' AS medication,
125         IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
126         '' AS provider_id,
127         '' AS size,
128         '' AS rxnorm_drugcode,
129         0 AS refills,
130         '' AS form,
131         '' AS title 
132       FROM
133         lists 
134       WHERE `type` = 'medication' 
135         AND pid = ?";
136     $result = sqlStatement($sql, array($pid,$pid) );
137   }
138         return $result;
141 function getImmunizationData() {
142         global $pid,$set,$start,$end;
143   if($set == "on"){
144     $sql = "SELECT
145       immunizations.administered_date,
146       immunizations.patient_id,
147       immunizations.vis_date,
148       immunizations.note,
149       immunizations.immunization_id,
150       immunizations.manufacturer,
151       codes.code_text AS title
152     FROM immunizations 
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) );
158   }else{
159     $sql = "SELECT
160       immunizations.administered_date,
161       immunizations.patient_id,
162       immunizations.vis_date,
163       immunizations.note,
164       immunizations.immunization_id,
165       immunizations.manufacturer,
166       codes.code_text AS title
167     FROM immunizations 
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) );
172   }
173         return $result;
177 function getProcedureData() {
179         global $pid,$set,$start,$end;
180   if($set == "on"){
181     $sql = " 
182     SELECT 
183       lists.title as proc_title,
184       lists.date as `date`,
185       list_options.title as outcome,
186       '' as laterality,
187       '' as body_site,
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
191     FROM
192       lists 
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 
197       LEFT JOIN facility 
198         ON form_encounter.facility_id = facility.id 
199       LEFT JOIN users 
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' 
205       AND lists.pid = ?
206       AND lists.date BETWEEN ? AND ?
207     UNION
208     SELECT 
209       pt.name as proc_title,
210       prs.date as `date`,
211       '' as outcome,
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
217     FROM
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 ?";
233   
234     $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
235   }else{
236     $sql = " 
237     SELECT 
238       lists.title as proc_title,
239       lists.date as `date`,
240       list_options.title as outcome,
241       '' as laterality,
242       '' as body_site,
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
246     FROM
247       lists 
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 
252       LEFT JOIN facility 
253         ON form_encounter.facility_id = facility.id 
254       LEFT JOIN users 
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' 
260       AND lists.pid = ? 
261     UNION
262     SELECT 
263       pt.name as proc_title,
264       prs.date as `date`,
265       '' as outcome,
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
271     FROM
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 = ? ";
286   
287     $result = sqlStatement($sql, array($pid,$pid) );
288   }
289         return $result;
293 function getProblemData() {
295         global $pid,$set,$start,$end;
296   if($set == "on"){
297     $sql = " 
298     SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname, 
299       fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis, 
300       l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date, cd.code_text
301     FROM lists AS l 
302     LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
303     LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
304     LEFT JOIN facility AS f ON fe.facility_id = f.id
305     LEFT JOIN users AS u ON fe.provider_id = u.id
306     LEFT JOIN codes AS cd ON cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
307     LEFT JOIN code_types AS ct ON ct.ct_id = cd.code_type
308     WHERE l.type = 'medical_problem' AND l.pid=? AND ct.ct_key = SUBSTRING(l.diagnosis, 1, LOCATE(':',l.diagnosis)-1)
309     AND l.date BETWEEN ? AND ?";
310     $result = sqlStatement($sql, array($pid,$start,$end) );
311   }else{
312     $sql = " 
313     SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname, 
314       fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis, 
315       l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date, cd.code_text
316     FROM lists AS l 
317     LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
318     LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
319     LEFT JOIN facility AS f ON fe.facility_id = f.id
320     LEFT JOIN users AS u ON fe.provider_id = u.id
321     LEFT JOIN codes AS cd ON cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
322     LEFT JOIN code_types AS ct ON ct.ct_id = cd.code_type
323     WHERE l.type = 'medical_problem' AND l.pid=? AND ct.ct_key = SUBSTRING(l.diagnosis, 1, LOCATE(':',l.diagnosis)-1)";
324     $result = sqlStatement($sql, array($pid) );
325   }
326         return $result;
330 function getAlertData() {
332         global $pid,$set,$start,$end;
333   if($set == "on"){
334         $sql = " 
335     select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
336       ie.list_id, l.pid, l.title as alert_title, l.outcome, 
337       l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
338       l.reaction , l.comments ,
339         f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
340     from lists as l 
341     left join issue_encounter as ie
342     on ie.list_id = l.id
343     left join form_encounter as fe
344     on fe.encounter = ie.encounter
345     left join facility as f
346     on fe.facility_id = f.id
347     left join users as u
348     on fe.provider_id = u.id
349     left join codes as cd
350     on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
351     where l.type = 'allergy' and l.pid=?
352     AND l.date BETWEEN ? AND ?";
353     
354     $result = sqlStatement($sql, array($pid,$start,$end) );
355   }else{
356     $sql = " 
357     select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
358       ie.list_id, l.pid, l.title as alert_title, l.outcome, 
359       l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
360       l.reaction , l.comments ,
361         f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
362     from lists as l 
363     left join issue_encounter as ie
364     on ie.list_id = l.id
365     left join form_encounter as fe
366     on fe.encounter = ie.encounter
367     left join facility as f
368     on fe.facility_id = f.id
369     left join users as u
370     on fe.provider_id = u.id
371     left join codes as cd
372     on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
373     where l.type = 'allergy' and l.pid=?";
374       
375     $result = sqlStatement($sql, array($pid) );
376   }
377         return $result;
381 function getResultData() {
383         global $pid,$set,$start,$end;
384   if($set == "on"){
385     $sql = "
386       SELECT 
387         prs.procedure_result_id as `pid`,
388         pt.name as `name`,
389         pt.procedure_type_id as `type`,
390         prs.date as `date`,
391         concat_ws(' ',prs.result,lo.title) as `result`,
392         prs.range as `range`,
393         prs.abnormal as `abnormal`,
394         prs.comments as `comments`,
395         ptt.lab_id AS `lab`
396       FROM
397         procedure_result AS prs 
398         LEFT JOIN procedure_report AS prp 
399           ON prs.procedure_report_id = prp.procedure_report_id 
400         LEFT JOIN procedure_order AS po 
401           ON prp.procedure_order_id = po.procedure_order_id
402         LEFT JOIN procedure_type AS pt 
403           ON prs.procedure_type_id = pt.procedure_type_id
404           LEFT JOIN procedure_type AS ptt 
405           ON pt.parent = ptt.procedure_type_id
406           AND ptt.procedure_type = 'ord'
407         LEFT JOIN list_options AS lo
408           ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
409       WHERE po.patient_id=?
410       AND prs.date BETWEEN ? AND ?";
411                 
412     $result = sqlStatement($sql, array($pid,$start,$end) );
413   }else{
414     $sql = "
415       SELECT 
416         prs.procedure_result_id as `pid`,
417         pt.name as `name`,
418         pt.procedure_type_id as `type`,
419         prs.date as `date`,
420         concat_ws(' ',prs.result,lo.title) as `result`,
421         prs.range as `range`,
422         prs.abnormal as `abnormal`,
423         prs.comments as `comments`,
424         ptt.lab_id AS `lab`
425       FROM
426         procedure_result AS prs 
427         LEFT JOIN procedure_report AS prp 
428           ON prs.procedure_report_id = prp.procedure_report_id 
429         LEFT JOIN procedure_order AS po 
430           ON prp.procedure_order_id = po.procedure_order_id
431         LEFT JOIN procedure_type AS pt 
432           ON prs.procedure_type_id = pt.procedure_type_id
433           LEFT JOIN procedure_type AS ptt 
434           ON pt.parent = ptt.procedure_type_id
435           AND ptt.procedure_type = 'ord'
436         LEFT JOIN list_options AS lo
437           ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
438       WHERE po.patient_id=?";
439                 
440     $result = sqlStatement($sql, array($pid) );
441   }
442         return $result;
446 function getActorData() {
447         global $pid;
449         $sql = " 
450         select fname, lname, DOB, sex, pid, street, city, state, postal_code, phone_contact
451         from patient_data
452         where pid=?";
453                 
454         $result[0] = sqlStatement($sql, array($pid) );
455   
456   $sql2 = " 
457         SELECT * FROM users AS u LEFT JOIN facility AS f ON u.facility_id = f.id WHERE u.id=?";
458                 
459         $result[1] = sqlStatement($sql2, array($_SESSION['authUserID']) );
460   
461   $sql3 = "
462   SELECT 
463     u.*
464   FROM
465     procedure_type AS pt 
466     LEFT JOIN procedure_order AS po 
467       ON po.procedure_type_id = pt.procedure_type_id 
468     LEFT JOIN forms AS f 
469       ON f.form_id = po.procedure_order_id 
470     LEFT JOIN list_options AS lo 
471       ON lo.title = f.form_name
472     LEFT JOIN users AS u
473     ON pt.lab_id = u.id
474   WHERE f.pid = ? 
475     AND lo.list_id = 'proc_type' 
476     AND lo.option_id = 'ord'
477     GROUP BY u.id";
478                 
479         $result[2] = sqlStatement($sql3, array($pid) );
480   
481         return $result;
485 function getReportFilename() {
486   global $pid;
488   $sql = "
489     select fname, lname, pid
490     from patient_data
491     where pid=?";
493   $result = sqlQuery($sql, array($pid) );
494         $result_filename = $result['lname']."-".$result['fname']."-".$result['pid']."-".date("mdY",time());
496   return $result_filename;