PageRenderTime 69ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/library/sql-ccr.inc

https://bitbucket.org/astawiarski/openemr
PHP | 505 lines | 433 code | 40 blank | 32 comment | 15 complexity | 9a437b9ac29d2c34c8592439bf7b238b MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-1.0, GPL-2.0, MPL-2.0
  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. // ------------------------------------------------------------------------ //
  26. if($_POST['ccrAction'] == 'generate'){
  27. if(isset($_POST['show_date'])){
  28. $set = "on";
  29. $start = $_POST['Start'];
  30. $start = $start." 00:00:00";
  31. $end = $_POST['End'];
  32. $end = $end." 23:59:59";
  33. }
  34. }
  35. function getHeaderData() {
  36. // Reserved for future use
  37. }
  38. function getMedicationData() {
  39. global $pid,$set,$start,$end;
  40. if($set == "on"){
  41. $sql = "
  42. SELECT prescriptions.date_added ,
  43. prescriptions.patient_id,
  44. prescriptions.start_date,
  45. prescriptions.quantity,
  46. prescriptions.interval,
  47. prescriptions.note,
  48. prescriptions.drug,
  49. prescriptions.medication,
  50. IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
  51. prescriptions.provider_id,
  52. prescriptions.size,
  53. prescriptions.rxnorm_drugcode,
  54. IFNULL(prescriptions.refills,0) AS refills,
  55. lo2.title AS form,
  56. lo.title
  57. FROM prescriptions
  58. LEFT JOIN list_options AS lo
  59. ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id
  60. LEFT JOIN list_options AS lo2
  61. ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id
  62. WHERE prescriptions.patient_id = ?
  63. AND prescriptions.date_added BETWEEN ? AND ?
  64. UNION
  65. SELECT
  66. DATE(DATE) AS date_added,
  67. pid AS patient_id,
  68. begdate AS start_date,
  69. '' AS quantity,
  70. '' AS `interval`,
  71. comments AS note,
  72. title AS drug,
  73. '' AS medication,
  74. IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
  75. '' AS provider_id,
  76. '' AS size,
  77. '' AS rxnorm_drugcode,
  78. 0 AS refills,
  79. '' AS form,
  80. '' AS title
  81. FROM
  82. lists
  83. WHERE `type` = 'medication'
  84. AND pid = ?
  85. AND `date` BETWEEN ? AND ?";
  86. $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
  87. }else{
  88. $sql = "
  89. SELECT prescriptions.date_added ,
  90. prescriptions.patient_id,
  91. prescriptions.start_date,
  92. prescriptions.quantity,
  93. prescriptions.interval,
  94. prescriptions.note,
  95. prescriptions.drug,
  96. prescriptions.medication,
  97. IF(prescriptions.active=1,'Active','Prior History No Longer Active') AS active,
  98. prescriptions.provider_id,
  99. prescriptions.size,
  100. prescriptions.rxnorm_drugcode,
  101. IFNULL(prescriptions.refills,0) AS refills,
  102. lo2.title AS form,
  103. lo.title
  104. FROM prescriptions
  105. LEFT JOIN list_options AS lo
  106. ON lo.list_id = 'drug_units' AND prescriptions.unit = lo.option_id
  107. LEFT JOIN list_options AS lo2
  108. ON lo2.list_id = 'drug_form' AND prescriptions.form = lo2.option_id
  109. WHERE prescriptions.patient_id = ?
  110. UNION
  111. SELECT
  112. DATE(DATE) AS date_added,
  113. pid AS patient_id,
  114. begdate AS start_date,
  115. '' AS quantity,
  116. '' AS `interval`,
  117. comments AS note,
  118. title AS drug,
  119. '' AS medication,
  120. IF((isnull(enddate) OR enddate = '0000-00-00' OR enddate >= CURDATE()),'Active','Prior History No Longer Active') AS active,
  121. '' AS provider_id,
  122. '' AS size,
  123. '' AS rxnorm_drugcode,
  124. 0 AS refills,
  125. '' AS form,
  126. '' AS title
  127. FROM
  128. lists
  129. WHERE `type` = 'medication'
  130. AND pid = ?";
  131. $result = sqlStatement($sql, array($pid,$pid) );
  132. }
  133. return $result;
  134. }
  135. function getImmunizationData() {
  136. global $pid,$set,$start,$end;
  137. if($set == "on"){
  138. $sql = "SELECT
  139. immunizations.administered_date,
  140. immunizations.patient_id,
  141. immunizations.vis_date,
  142. immunizations.note,
  143. immunizations.immunization_id,
  144. immunizations.manufacturer,
  145. codes.code_text AS title
  146. FROM immunizations
  147. LEFT JOIN codes ON immunizations.cvx_code = codes.code
  148. LEFT JOIN code_types ON codes.code_type = code_types.ct_id
  149. WHERE immunizations.patient_id = ? AND code_types.ct_key = 'CVX'
  150. AND create_date BETWEEN ? AND ?" ;
  151. $result = sqlStatement($sql, array($pid,$start,$end) );
  152. }else{
  153. $sql = "SELECT
  154. immunizations.administered_date,
  155. immunizations.patient_id,
  156. immunizations.vis_date,
  157. immunizations.note,
  158. immunizations.immunization_id,
  159. immunizations.manufacturer,
  160. codes.code_text AS title
  161. FROM immunizations
  162. LEFT JOIN codes ON immunizations.cvx_code = codes.code
  163. LEFT JOIN code_types ON codes.code_type = code_types.ct_id
  164. WHERE immunizations.patient_id = ? AND code_types.ct_key = 'CVX'";
  165. $result = sqlStatement($sql, array($pid) );
  166. }
  167. return $result;
  168. }
  169. function getProcedureData() {
  170. global $pid,$set,$start,$end;
  171. if($set == "on"){
  172. $sql = "
  173. SELECT
  174. lists.title as proc_title,
  175. lists.date as `date`,
  176. list_options.title as outcome,
  177. '' as laterality,
  178. '' as body_site,
  179. lists.type as `type`,
  180. lists.diagnosis as `code`,
  181. IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
  182. FROM
  183. lists
  184. LEFT JOIN issue_encounter
  185. ON issue_encounter.list_id = lists.id
  186. LEFT JOIN form_encounter
  187. ON form_encounter.encounter = issue_encounter.encounter
  188. LEFT JOIN facility
  189. ON form_encounter.facility_id = facility.id
  190. LEFT JOIN users
  191. ON form_encounter.provider_id = users.id
  192. LEFT JOIN list_options
  193. ON lists.outcome = list_options.option_id
  194. AND list_options.list_id = 'outcome'
  195. WHERE lists.type = 'surgery'
  196. AND lists.pid = ?
  197. AND lists.date BETWEEN ? AND ?
  198. UNION
  199. SELECT
  200. pt.name as proc_title,
  201. prs.date as `date`,
  202. '' as outcome,
  203. ptt.laterality as laterality,
  204. ptt.body_site as body_site,
  205. 'Lab Order' as `type`,
  206. ptt.standard_code as `code`,
  207. 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
  208. FROM
  209. procedure_result AS prs
  210. LEFT JOIN procedure_report AS prp
  211. ON prs.procedure_report_id = prp.procedure_report_id
  212. LEFT JOIN procedure_order AS po
  213. ON prp.procedure_order_id = po.procedure_order_id
  214. LEFT JOIN procedure_type AS pt
  215. ON prs.procedure_type_id = pt.procedure_type_id
  216. LEFT JOIN procedure_type AS ptt
  217. ON pt.parent = ptt.procedure_type_id
  218. AND ptt.procedure_type = 'ord'
  219. LEFT JOIN list_options AS lo
  220. ON lo.list_id = 'proc_unit'
  221. AND pt.units = lo.option_id
  222. WHERE po.patient_id = ?
  223. AND prs.date BETWEEN ? AND ?";
  224. $result = sqlStatement($sql, array($pid,$start,$end,$pid,$start,$end) );
  225. }else{
  226. $sql = "
  227. SELECT
  228. lists.title as proc_title,
  229. lists.date as `date`,
  230. list_options.title as outcome,
  231. '' as laterality,
  232. '' as body_site,
  233. lists.type as `type`,
  234. lists.diagnosis as `code`,
  235. IF(SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1) = 'ICD9','ICD9-CM',SUBSTRING(lists.diagnosis,1,LOCATE(':',lists.diagnosis)-1)) AS coding
  236. FROM
  237. lists
  238. LEFT JOIN issue_encounter
  239. ON issue_encounter.list_id = lists.id
  240. LEFT JOIN form_encounter
  241. ON form_encounter.encounter = issue_encounter.encounter
  242. LEFT JOIN facility
  243. ON form_encounter.facility_id = facility.id
  244. LEFT JOIN users
  245. ON form_encounter.provider_id = users.id
  246. LEFT JOIN list_options
  247. ON lists.outcome = list_options.option_id
  248. AND list_options.list_id = 'outcome'
  249. WHERE lists.type = 'surgery'
  250. AND lists.pid = ?
  251. UNION
  252. SELECT
  253. pt.name as proc_title,
  254. prs.date as `date`,
  255. '' as outcome,
  256. ptt.laterality as laterality,
  257. ptt.body_site as body_site,
  258. 'Lab Order' as `type`,
  259. ptt.standard_code as `code`,
  260. 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
  261. FROM
  262. procedure_result AS prs
  263. LEFT JOIN procedure_report AS prp
  264. ON prs.procedure_report_id = prp.procedure_report_id
  265. LEFT JOIN procedure_order AS po
  266. ON prp.procedure_order_id = po.procedure_order_id
  267. LEFT JOIN procedure_type AS pt
  268. ON prs.procedure_type_id = pt.procedure_type_id
  269. LEFT JOIN procedure_type AS ptt
  270. ON pt.parent = ptt.procedure_type_id
  271. AND ptt.procedure_type = 'ord'
  272. LEFT JOIN list_options AS lo
  273. ON lo.list_id = 'proc_unit'
  274. AND pt.units = lo.option_id
  275. WHERE po.patient_id = ? ";
  276. $result = sqlStatement($sql, array($pid,$pid) );
  277. }
  278. return $result;
  279. }
  280. function getProblemData() {
  281. # Note we are hard-coding (only allowing) problems that have been coded to ICD9. Would
  282. # be easy to upgrade this to other codesets in future (ICD10,SNOMED) by using already
  283. # existant flags in the code_types table.
  284. # Additionally, only using problems that have one diagnosis code set in diagnosis field.
  285. # Note OpenEMR allows multiple codes set per problem, but will limit to showing only
  286. # problems with one diagnostic code set in order to maintain previous behavior
  287. # (this will likely need to be dealt with at some point; ie. support multiple dx codes per problem).
  288. global $pid,$set,$start,$end;
  289. if($set == "on"){
  290. $sql = "
  291. SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
  292. fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
  293. l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
  294. FROM lists AS l
  295. LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
  296. LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
  297. LEFT JOIN facility AS f ON fe.facility_id = f.id
  298. LEFT JOIN users AS u ON fe.provider_id = u.id
  299. WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
  300. AND l.diagnosis NOT LIKE '%;%'
  301. AND l.date BETWEEN ? AND ?";
  302. $result = sqlStatement($sql, array($pid,$start,$end) );
  303. }else{
  304. $sql = "
  305. SELECT fe.encounter, fe.reason, fe.provider_id, u.title, u.fname, u.lname,
  306. fe.facility_id, f.street, f.city, f.state, ie.list_id, l.pid, l.title AS prob_title, l.diagnosis,
  307. l.outcome, l.groupname, l.begdate, l.enddate, l.type, l.comments , l.date
  308. FROM lists AS l
  309. LEFT JOIN issue_encounter AS ie ON ie.list_id = l.id
  310. LEFT JOIN form_encounter AS fe ON fe.encounter = ie.encounter
  311. LEFT JOIN facility AS f ON fe.facility_id = f.id
  312. LEFT JOIN users AS u ON fe.provider_id = u.id
  313. WHERE l.type = 'medical_problem' AND l.pid=? AND l.diagnosis LIKE 'ICD9:%'
  314. AND l.diagnosis NOT LIKE '%;%'";
  315. $result = sqlStatement($sql, array($pid) );
  316. }
  317. return $result;
  318. }
  319. function getAlertData() {
  320. global $pid,$set,$start,$end;
  321. if($set == "on"){
  322. $sql = "
  323. select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
  324. ie.list_id, l.pid, l.title as alert_title, l.outcome,
  325. l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
  326. l.reaction , l.comments ,
  327. f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
  328. from lists as l
  329. left join issue_encounter as ie
  330. on ie.list_id = l.id
  331. left join form_encounter as fe
  332. on fe.encounter = ie.encounter
  333. left join facility as f
  334. on fe.facility_id = f.id
  335. left join users as u
  336. on fe.provider_id = u.id
  337. left join codes as cd
  338. on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
  339. where l.type = 'allergy' and l.pid=?
  340. AND l.date BETWEEN ? AND ?";
  341. $result = sqlStatement($sql, array($pid,$start,$end) );
  342. }else{
  343. $sql = "
  344. select fe.reason, fe.provider_id, fe.facility_id, fe.encounter,
  345. ie.list_id, l.pid, l.title as alert_title, l.outcome,
  346. l.groupname, l.begdate, l.enddate, l.type, l.diagnosis, l.date ,
  347. l.reaction , l.comments ,
  348. f.street, f.city, f.state, u.title, u.fname, u.lname, cd.code_text
  349. from lists as l
  350. left join issue_encounter as ie
  351. on ie.list_id = l.id
  352. left join form_encounter as fe
  353. on fe.encounter = ie.encounter
  354. left join facility as f
  355. on fe.facility_id = f.id
  356. left join users as u
  357. on fe.provider_id = u.id
  358. left join codes as cd
  359. on cd.code = SUBSTRING(l.diagnosis, LOCATE(':',l.diagnosis)+1)
  360. where l.type = 'allergy' and l.pid=?";
  361. $result = sqlStatement($sql, array($pid) );
  362. }
  363. return $result;
  364. }
  365. function getResultData() {
  366. global $pid,$set,$start,$end;
  367. if($set == "on"){
  368. $sql = "
  369. SELECT
  370. prs.procedure_result_id as `pid`,
  371. pt.name as `name`,
  372. pt.procedure_type_id as `type`,
  373. prs.date as `date`,
  374. concat_ws(' ',prs.result,lo.title) as `result`,
  375. prs.range as `range`,
  376. prs.abnormal as `abnormal`,
  377. prs.comments as `comments`,
  378. ptt.lab_id AS `lab`
  379. FROM
  380. procedure_result AS prs
  381. LEFT JOIN procedure_report AS prp
  382. ON prs.procedure_report_id = prp.procedure_report_id
  383. LEFT JOIN procedure_order AS po
  384. ON prp.procedure_order_id = po.procedure_order_id
  385. LEFT JOIN procedure_type AS pt
  386. ON prs.procedure_type_id = pt.procedure_type_id
  387. LEFT JOIN procedure_type AS ptt
  388. ON pt.parent = ptt.procedure_type_id
  389. AND ptt.procedure_type = 'ord'
  390. LEFT JOIN list_options AS lo
  391. ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
  392. WHERE po.patient_id=?
  393. AND prs.date BETWEEN ? AND ?";
  394. $result = sqlStatement($sql, array($pid,$start,$end) );
  395. }else{
  396. $sql = "
  397. SELECT
  398. prs.procedure_result_id as `pid`,
  399. pt.name as `name`,
  400. pt.procedure_type_id as `type`,
  401. prs.date as `date`,
  402. concat_ws(' ',prs.result,lo.title) as `result`,
  403. prs.range as `range`,
  404. prs.abnormal as `abnormal`,
  405. prs.comments as `comments`,
  406. ptt.lab_id AS `lab`
  407. FROM
  408. procedure_result AS prs
  409. LEFT JOIN procedure_report AS prp
  410. ON prs.procedure_report_id = prp.procedure_report_id
  411. LEFT JOIN procedure_order AS po
  412. ON prp.procedure_order_id = po.procedure_order_id
  413. LEFT JOIN procedure_type AS pt
  414. ON prs.procedure_type_id = pt.procedure_type_id
  415. LEFT JOIN procedure_type AS ptt
  416. ON pt.parent = ptt.procedure_type_id
  417. AND ptt.procedure_type = 'ord'
  418. LEFT JOIN list_options AS lo
  419. ON lo.list_id = 'proc_unit' AND pt.units = lo.option_id
  420. WHERE po.patient_id=?";
  421. $result = sqlStatement($sql, array($pid) );
  422. }
  423. return $result;
  424. }
  425. function getActorData() {
  426. global $pid;
  427. $sql = "
  428. select fname, lname, DOB, sex, pid, street, city, state, postal_code, phone_contact
  429. from patient_data
  430. where pid=?";
  431. $result[0] = sqlStatement($sql, array($pid) );
  432. $sql2 = "
  433. SELECT * FROM users AS u LEFT JOIN facility AS f ON u.facility_id = f.id WHERE u.id=?";
  434. $result[1] = sqlStatement($sql2, array($_SESSION['authUserID']) );
  435. $sql3 = "
  436. SELECT
  437. u.*
  438. FROM
  439. procedure_type AS pt
  440. LEFT JOIN procedure_order AS po
  441. ON po.procedure_type_id = pt.procedure_type_id
  442. LEFT JOIN forms AS f
  443. ON f.form_id = po.procedure_order_id
  444. LEFT JOIN list_options AS lo
  445. ON lo.title = f.form_name
  446. LEFT JOIN users AS u
  447. ON pt.lab_id = u.id
  448. WHERE f.pid = ?
  449. AND lo.list_id = 'proc_type'
  450. AND lo.option_id = 'ord'
  451. GROUP BY u.id";
  452. $result[2] = sqlStatement($sql3, array($pid) );
  453. return $result;
  454. }
  455. function getReportFilename() {
  456. global $pid;
  457. $sql = "
  458. select fname, lname, pid
  459. from patient_data
  460. where pid=?";
  461. $result = sqlQuery($sql, array($pid) );
  462. $result_filename = $result['lname']."-".$result['fname']."-".$result['pid']."-".date("mdY",time());
  463. return $result_filename;
  464. }
  465. ?>