Difference between revisions of "Active Projects"

From OpenEMR Project Wiki
Line 59: Line 59:
== Clinical Decision Rules (CDR) Engine ==
== Clinical Decision Rules (CDR) Engine ==
:Lots of room for improvement in this module. To learn about the engine, check out [[CDR Engine]]. Also have an API for the main library file of the engine here: [http://www.open-emr.org/apidocs/OpenEMR/_library---clinical_rules.php.html clinical_rules.php.html]
:Lots of room for improvement in this module. To learn about the engine, check out [[CDR Engine]]. Also have an API for the main library file of the engine here: [http://www.open-emr.org/apidocs/OpenEMR/_library---clinical_rules.php.html clinical_rules.php.html]
===Out of memory bug fix===
:When running the AMC/CQM/Standard reports (and Patient Reminders) on large databases (>40000 patients) getting an out of memory bug which has been localized to following in library/clinical_rules.php:
<pre>    // convert the sql query results into an array
    for($iter=0; $row=sqlFetchArray($rez); $iter++) {
    $patientData[$iter]=$row;
    }
</pre>
:Options to fix are to try the sql resource instead of creating an array (this will require some work since array is used multiple times and is also mimicked when only checking one patient) or to use batching (this sidesteps the memory issue, should improve overall performance and shouldn't take too much work). Currently working on non-ajax batching which is working well and also markedly improves the performance of the reports. Most recent code is here: http://github.com/bradymiller/openemr/commits/out-of-memoery-cdr-fix_3
:''Brady is working on this (almost done).''


===Progress meter during long scripts===
===Progress meter during long scripts===

Revision as of 07:38, 20 September 2012

Overview

This is a listing of important projects. Almost all of these projects need a developer (or sponsorship of a developer) to get completed. If you are interested in helping or contributing to the project but don't have time/skills to develop, then recommend sponsoring a professional to work on one of these projects. Recommend hiring a 'Certified OpenEMR Contributors', whom are listed here: http://open-emr.org/wiki/index.php/Category:Certified_OpenEMR_Contributor (also recommend asking the developer to contribute the code to OpenEMR)

API

There is currently a SOAP API for patient portal functionality, which is at openemr/myportal (note there is very minimal documentation). The next step is to develop a more comprehensive and well documented set of APIs. Need to determine whether to use SOAP vs. REST vs. another type and need to determine what APIs to build. This is a nice mechanism to force modularization of vitals pieces of the codebase.
Awaiting Developer to fully analyze and implement this.

Access Control

Upgrading Access Controls

Need a mechanism akin to the sql upgrade script to allow specific version related access control upgrades (in order to ensure, the upgrade script does not reverse customization)
Awaiting Developer to fully analyze and implement this.

Return Values Bug Fix

Currently OpenEMR does not support the return values feature (such as write, addonly, etc.), which has actually never been supported. We are unable to use the gacl function acl_return_value(), because it only will return one return value (from the ACL that has been most recently modified); this is a serious issue, because need to check with all possible ACL's that are hits for the user and ensure allowed (and not denied in any). This will likely need to be done, by creating a wrapper of the function acl_return_value() with a new parameter that brings in the return value you want to check (or blank if just checking if has access like current use) and then feed this in through a new parameter through gacl's acl_query() function that would instruct it to return all ACL hits rather than just the most recently modified one.
  • Discussed here:
  • Here is code that should fix this, but will need to modify acl_check functions within codebase that need to query the return value. Since the new function takes the return value in as a parameter rather than trying to return it:
Brady is working on this (almost done).

Billing

Multi-page paper claims

Need to have ability to bill more than service 4 codes on the HCFA forms (ie. automatically create more than 1 page when printing out billing, since it now basically breaks if there are more than 4 service codes).
Awaiting Developer to fully analyze and implement this.

Calendar

Multi-facility bugs

Description of bugs:
  1. Things work great with one facility
  2. With two facility the bugs appear (different bugs happen with the $GLOBALS['restrict_user_facility'] turned off(default) and on)
  3. When $GLOBALS['restrict_user_facility'] is turned off get following behavior. In essence the calendar only shows what is set as 'default facility' in the users settings. If you choose the facility then that user won't be available. By choosing all facilities, it will actually show all appointments from all facilities, however the scrollbar display is confusing (shows the top item), and unable to schedule an appt at anything but in the scroll bar; this also screws up what you see when scrolling through new days.
  4. When $GLOBALS['restrict_user_facility'] is turned on, then only seems to work right if you place all facilities in the users settings 'Schedule facilities'. Then everything seems to work fine, but there is no option to view all facilities, which seems like should be an option. If you don' t place all facilities in the users 'schedule facilities', then you'll see other appointments at other disallowed facilties like they are on the selected on (not much of a bug since appointments shouldn' be scheduled on disallowed facilities anyways), however can only add to the allowed facility, which is good.
Seems like the bug(s) really stem from three mechanisms:
  1. When choose all facilities, don't then highlight the item below it; highlight them all and that have this supported when click other buttons (moving days or adding appt)
  2. With global restrict_user_facility off (default) allow users to be scheduled at all facilities.
  3. With global restrict_user_facility on give option to show all facilties in calendar.
Currently linked to this tracker item and this forum thread.
Awaiting a Developer to fix this bug.

Recurring appointment bugs

This problem is discussed in this forum thread and this forum thread.
Bug described in good detail by Gayll in this bug tracker item: http://sourceforge.net/tracker/?func=detail&aid=2963714&group_id=60081&atid=493001
Awaiting a Developer to fix this bug.

Clinical Decision Rules (CDR) Engine

Lots of room for improvement in this module. To learn about the engine, check out CDR Engine. Also have an API for the main library file of the engine here: clinical_rules.php.html

Progress meter during long scripts

Some of the CDR reports and Adminsitraiton->Patient Reminder gui can actually take up to an hour or more to complete. So, makes sense to let the user know this. An actual accurate progress meter will be tough, since reports are not using ajax/javascript at this time, but at least could add a 'activity wheel' that shows when click submit and hides when done. Additionally the Adminstration->Patient Reminders is way to aggressive on running the clinic wide update and will make sense to not update when start the page (instead, have a button to do this), and not update when paginate, and also show an Activity wheel when things are going.
Awaiting Developer to fully analyze and implement this.'

Add mechanism to allow patient specific rules and plans

Implement a mechanism to allow patient specific rules and plans. There is currently a mechanism in place that allows per-patient turning off/on of rules, however am not able to customize the rules. A potential way to allow full rule customization per patient:
  • Add a patient_specific column in the clinical_rules tables (if a patient_specific rule, then hold string id of the base template there). Place a key/index on this sql column.
  • Populate the rules tables with templates (for clinical_rules id, use a naming like template_appt etc. and make the pid 0). Then if a patient wants to use the template, clones the template from the rules tables with a unique id in clinical_rules(and other tables), sets the pid to the patient id and places the template id into patient_specific).
  • Modify the resolve_rules_sql() function in library/clinical_rules.php to 1) ignore rules with a pid of 0 and a populated patient_specific column and 2) collect the patient_specific rules also.
  • Modify reports algorithm to have a setting to show these per-patient customized rules and enumerate rule data by the id in the patient_specific column (and ignore pid of 0 rule) rather than the actual id.
  • Create/modify gui to allow addition of these custom rules.
  • If needed, can follow same approach as above for plans (may not be needed, though)
  • organize templates into groups of plans, if needed (essentially equivalent to treatment plans)
Awaiting Developer to fully analyze and implement this.

Integrate Plans into the Admin GUI

Implement plan/rule mapping in the Admin GUI for CDR (At Administration->Rules). Note this simply involves creating a screen that allows mapping of rules to plans via the 'clinical_plans_rules' mysql table (as the other rules, do not show or allow mods of the cqm rules and plans)(also, note that a rule can be in multiple plans). This would be an extremely useful feature for little time, and allows physicians to view rules by plans in the Patient Summary Clinical Reminder widget Edit button (Plans tab).
Awaiting Developer to fully analyze and implement this.

Integrate clinic appointments into the CDR engine and Admin GUI

Add a mechanism to check for clinic appts in the CDR engine (for example, if a patient needs to be seen in clinic every 3 months). To avoid confusion, there is a function appointment_check() in library/clinical_rules.php that is planned to use targets with target_appt, but this function is meant for appt reminders (for example, if a patient has an appt coming up, is reminded) and is not yet complete. (ensure it works with recurring appts and can be modified/added in the rules editor gui)
Awaiting Developer to fully analyze and implement this.

Integrate Procedures into the Admin GUI

Implement procedure filter/target creation in the Admin GUI for CDR. Note the CDR engine currently supports this (see the Coumadin rule for an example) and this feature is gonna be in high demand for users that want to create rules via the Admin GUI that involve procedures.
Awaiting Developer to fully analyze and implement this.

Integrate support for custom issue categories into the Admin GUI

Issue categories are stored in the library/lists.inc file and can be customized. Customized issue categories are already supported in the CDR engine(lists_check() function in library/clinical_rules.php), however they are not fully supported in the admin GUI(pertinent code found in the interface/super/rules/library/RuleCriteria* scripts).
Awaiting Developer to fully analyze and implement this.

Improve Performance

A page tracking this project can be found at CDR Performance.
Awaiting Developer to fully analyze and implement this.

Rules Editor Bugs

  • Do not think there should be a frequency setting in the Filter settings (Custom Table and Custom)
  • Unable to add a new Action item/category in the Set Target Custom section.
  • When adding a new Target, will silently overwrite settings if the target already exists for other rules (need to populate the fields after set a target).
Awaiting Developer to fully analyze and fix these bugs.

Code

Attribution, licensing and copyright clarification

First step here is to systematically go through the codebase and previously released packages and repository changelogs and try to ascertain the copyrights of the blank scripts(contain no header with license/copyright statement). Here are some pertinent files and previous repo changelogs:
Intial thoughts after looking at above material:
  • Synitech 2.0 release on 6/30/2003
  • CVS repo at Pennington from 1/5/2004 until at least 2/6/2004 (this is last date in changelog; I am guessing goes longer):
  • original import appears to be just 2.0 version files (need to confirm this)
  • brought in postnuke
  • brought in phpmyadmin
  • SVN repo at Pennington from 11/1/2004 until at least 2/8/2005 (this is last date in changelog; could go longer):
  • Note that the Smarty,controller,library/classes stuff was part of 11/1/2004 import, which is why I think the previous CVS repo had more changes not placed in the changelog(only goes until 2/6/2004)
  • Imported to sourceforge CVS on 3/28/2005
Regarding the blank scripts(contain no header with license/copyright statement), perhaps where this is going is to identify all of Synitechs scripts (which is actually rather minimal) and then other blank scripts that have no origin in Sourceforge's repo could become copyrighted by referencing a modified copyright statement that was in original Sourceforge repo (so, Pennington Firm, Andres Paglayan, GATMAN, James Buchmiller, Sunset Systems and Tekkno Genius). Additionally, whomever takes this on could try to contact all of the above players to see if they have copies of the original repos (then would be able to easily identify whom contributed what). For example, the working directory of Pennington's SVN was obtained from Rod(although he didn't have a full copy of the repo).
Pertinent forum threads are:
Awaiting somebody to continue this

Database

Convert to InnoDB

This has been discussed on this thread:
Awaiting Developer to fully analyze and implement this.

Diagnostic Coding

Integrating DSMIV

See DSMIV Diagnostic Codes Development for details.
Awaiting Developer to fully analyze and implement this.

Documentation

Codebase Documentation

Document the codebase via DocBlocks to allow creation of an OpenEMR API.
  • This project is ongoing and further details can be found on the OpenEMR API wiki page.

Access Controls

Finish the Access Controls Listing page.

Insurance Eligibility Check

Finish the Insurance Eligibility Check page

Lists

Finish the OpenEMR Lists page.

Offsite Patient Portal SOAP API

Document the SOAP APIs for the third party portals.

Settings

Finish the OpenEMR Settings page.

Forms

Ability to Sign Notes

This has been requested numerous times.
A possibility includes the following mechanism. A form has a 'Save' and 'Sign' button. When saved, then content is saved, a md5sum of the content is saved and a current_revision flag is marked as active(this then allows saving each revision in case need to go back to a previous revision etc.). When Signed, same as Save except the signature is marked in a signature tracking table (and form can no longer be modified after this). However, a user can add an addendum(s) to a signed form, which can also be Save/Signed like above.
Awaiting developer to analyze and implement this.

Ability to view all notes from one screen

Currently, need to go into each individual encounter to view notes. Need to have a screen that allows straightforward listing/viewing of notes (for the physician to read) in at least chronological order (could also order by physician, type of note, etc.).
Awaiting developer to analyze and implement this.

XMLFormGen script upgrade

Can be found at contrib/forms/xmlformgen/
Documentation at OpenEMR Xml Form Generator
Discussed here: http://sourceforge.net/projects/openemr/forums/forum/202504/topic/5393338
  • Think of a way to avoid lists conflicts in list_options table. Options include:
  • hard-coding the lists instead in the form (as with the layout)
  • add a new lists table for each form
  • add a new element in the list_options sql table to categorize
  • Such as a new sql-column
  • Or just prepend formname(dir) to the list id with || separator (I am leaning towards this, since can then use the lists across forms and can then be a mechanism to categorize/subcategorize lists)
  • Upgrade to new security model
  • Support all datatypes
  • Get it to work with just the xml file (ie. create the files on the fly via xlst like the ccr/ccd stuff)
Awaiting developer to analyze and implement this.

Internationalization

Date formatting

Functions in th openemr/library/formatting.inc.ph library are used to support internationalization of dates, which are controlled by Administration->Locale->'Date Display' settings. Still work to do in order to support this throughout entire codebase.
Awaiting a Developer to finish analyzing this and incorporating throughout entire codebase.

Translation database maintenance/improvement

We currently have a stable collaborative system in place to allow translation of any language. The translations are entered into a OpenEMR Translation Google Doc Spreadsheet. These instructions and scripts (README files describes the pipeline in detail) then allows conversions of the translation spreadsheet to mysql tables and allow detection and insertion of new english constants into the translation spreadsheet.
A new set of official translation tables are created daily.
Bradymiller is maintaining this.


TO DO:
1. Manually add '-- All --' and '--Select Role--' to the next translations adding constants cycle.
2. Fix following broken/untranslated constants: 'Your Clinic Name Here', 'Graphic Pain Map', 'Administrative', 'Clinical', which were described to be located here:
  • The name is for the forms in the top tab used by the screen. GOTO Administration=> Forms => most left column of optional to be included Forms If included the words do not change for translations AND Dummy.
3. Remove some bad constants (such as ., 1, 2 etc.)
4. Continue placing comments in confusing constants (via {{<comment>}} strings)
5. Consider migrating to transifex, which is discussed here: http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5254742
6. Build mechanism to import most recent translations in the Administration->Language->Manage Translation Screen.
  • Can leverage mechanism used to bring in the most recent translation set into the development demo.
  • Should use the 'standardized_tables_track' table to keep track of what is imported.
Awaiting developer to implement TODO number three through six.

Issues

Migrate issue categories into the database

This is rather important especially with the existence of the Multisite Module. Just need to do what was done to the code_types which were also migrated from hard-coding to the database, which will then allow easy and practice specific customization. The current issue categories are hard-coded at library/lists.inc.
Awaiting developer to fully analyze and implement this

Labs

There is currently a lot of potential activity in this area (and actual funding). OpenEMR currently supports labs with a relatively rudimentary administrative and user gui.
  • Administrative gui is at Procedures->Configuration
  • User gui elements are at
  • Procedures->Pending Review
  • Procedures->Patient Results
  • Procedures->Batch Results
  • While in an encounter, at Administrative->Procedure Order
  • MySql tables involved are:
  • procedure_order
  • procedure_report
  • procedure_result
  • procedure_type

Laboratory Configuration

  • Mechanism to import and update lab Compendiums
  • Work for different labs in same OpenEMR instance
  • Configuration gui to simplify ordering for physicians
  • For example, mapping CBC lab order codes so physician just selects CBC
Rod has been sponsored to work on this.

Laboratory Viewing

  • Allow trending,graphing,date ranges etc when viewing labs
  • Mechanism to comment and print out labs in a letter format for patients.
Awaiting Developer to fully analyze and implement this.

Laboratory CPOE

  • Option to simplify the ordering of labs (While in an encounter, at Administrative->Procedure Order); for example, using checkboxes or pull downs to select common labs (customizable).
  • Interface for the actual ordering of labs from an outside lab.
Awaiting Developer to fully analyze and implement this.

Laboratory Information system(LIS)

Discussed here:
Dr. Samuel Bowen is sponsoring this.

Medications

Integrate medications and prescriptions

Awaiting Developer to fully analyze and implement this.

Integrate RXNorm

There is currently a mechanism to import the RXNorm codes, however it has not been yet implemented in OpenEMR.
Awaiting Developer to fully analyze and implement this.

Messages

Message Center

Fully integrate Messages, dated reminders and authorization within the same screen.
  • Improvements needed for Message module
  1. Include counting of uncompleted messages in the Messages link counter also. (DONE and committed 4/28/12)
  2. Refresh every 30-60 seconds (same mechanism as the dated reminders module)
  3. Place a patient to link directly from the messages (as the reminder does) (DONE and committed 4/28/12)
  4. Consider not requiring a patient linking
  5. Make the 'Done'(from Message gui) and inactive (from pnote gui) consistent (DONE and committed 4/28/12)
  • Bring in authorizations into the Message Center
  • Integrate all into a nice consistent style
  • Add a automated forwarding mechanism (for example, when a clinic member is on vacation)
  • Consider adding a flag to user table to show that they should receive local messages/reminders (if can't figure out a way to figure this out with current scheme)
Awaiting Developer to finish implementing this.

Appointment Reminders

There is currently a mechanism in OpenEMR, which is broken: Sms and Email Notification Howtos. This needs to be fixed and/or can try to leverage the Reminders features in the CDR engine.
Awaiting Developer to fully analyze and implement this.

Miscellaneous

Command Line PHP Scripts

The command line php scripts since version 4.1.0 do not work since a site needs to be assigned. See the following sourceforge thread for issue (and a temporary work-around): http://sourceforge.net/projects/openemr/forums/forum/202505/topic/3514602
Awaiting Developer to fully analyze and fix/implement this.

Erroneously html escaping strings within javascript/jquery

Specific issue in the Titles displayed in the Administration->Rules module. Involves the function getLabel() (in interface/super/rules/include/ui.php), which calls generate_display_field()(in library/options.inc.php) on the title that is displayed, which is escaped for html output. This would be ok if this string went directly to html output; the problem is that it is getting populated via a javascript/ajax call. This fix will require a bit of careful analysis to figure out the best way to deal with this; initial thought is that the best way to fix this is to have a parameter in the generate_display_field() function to give option to get (or not get) a escaped string (default it to escaped). See posts 43-48 in following thread for more details: http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5116417
Awaiting Developer to fully analyze and fix/implement this.

Magic Quotes Bugs

Newer versions of php are not supporting magic quotes. The majority of the OpenEMR codebase supports this but suspect bugs will begin to arise, which will track and fix here:
  • If you are in the EOB Posting-search screen to put in a payment and you search for a patient who has an apostrophe in their name ( something like O'Donnell) you get a sql error message. Need to convert this script/module to the new security method (which will resolve this bug).
Awaiting Developer to fix/implement this.

Reports

Correctly output multi-page pdf documents in Patient Report

Currently the Patient Report (Report link in patient summary screen) does not correctly output multi-page pdf's (it actually joins them all into one huge jpeg image). Would be nice to have several potential methods such as breaking up the jpeg into each page and printed it as so or consider just producing a pdf(and html print format) with everything in it.
Awaiting Developer to fully analyze and implement this.

Security

Security Vulnerability Assessment and Fixing

This project is active and has been moved to its own wiki tracking page at Codebase Security.
Awaiting Developers to continue implementing this project.

Specialties

Mental Health

Seems to be a very large demand for this.
Awaiting Developer to fully analyze and implement this.