Active Projects

From OpenEMR Project Wiki

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

SOAP

There is currently a SOAP API for patient portal functionality, which is at openemr/myportal (note there is very minimal documentation).
ZH Healthcare is maintaining this

REST

There is a REST API in development, which can be found here: http://github.com/medmasterpro/openemr-api . Work is currently underway to integrate it into the OpenEMR official codebase.
MedMaster is working on this

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.

Multi-provider event bugs

Turns out appt created with multiple provider global(Adminstration->Globals->Support Multi-Provider Events) on are not compatible with OpenEMR when turn this feature off. Need to sort out in interface/main/calendar/add_edit_event.php the relations between the select_multi_providers global and pc_multiple sql column (in openemr_postcalendar_events table) to ensure appts created in each mode(multiple provider global on or off) are compatible in the other mode(basically, when editing an appt, use whether pc_multiple is != 0 rather than the global to decide which mode to use).
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.

Certifications

Stage 2 Meaningful Use Certification

Ongoing project can be found on the OpenEMR Certification Stage II Meaningful Use wiki page.

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

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

Some things todo are listed in the Diagnostic Coding TODO list.

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.

Documents

Too Many Documents in Directories?

Now that OpenEMR (4.1.2+) can upload documents that are not mapped to patients, the question arises as to how many documents can be stored in each directory (since all unmapped documents are now stored in directory documents/00 or documents/direct at this point); note that this is not an issue when using the CouchDB option. This issue was brought up in the following forum: http://sourceforge.net/projects/openemr/forums/forum/202504/topic/6771962 . It is still not clear if having to many files in a directory is an issue, but there is a potential solution discussed in the above forum (if needed), which consists of:
  • If there was a concern of getting to many files in one directory, then could consider creating randomly creating a directory(if not existent yet) in documents/00/ or documents/direct/ (0-10000) and placing the file in it. Note for this to work then need to deal with the fact that the Documents class does not work for second-level directories in the documents folder(this fact is what plagues the scanning form); so would make sense to have a path_depth sql_column in documents (default to 1) in documents that simply gives the directory depth of the sql_column 'url' entry in documents table to find the file. For example, the depth is 1 currently (only the first item is popped off the path), but in the case of adding another level to the directory (direct/1010), then the depth would be 2. Note that some may say, well why not just take the directory to right of 'documents' in the 'url' field, but we can not rely on that (the documents directory may be configured to something else, which would then break). The nice thing about a depth descriptor is that even higher level document directory structure would then be supported.
Awaiting developer to analyze and implement this.

Scan/Fax

In order to fully support Documents (and CouchDB), should consider modifying the fax/scan scripts to utilize the Documents class directly when placing documents. See the following function in the direct_message_check.inc script for an example of this: phimail_store().
Awaiting developer to analyze and implement this.

Forms

Ability to Sign Notes

This has been requested numerous times.
  • Forms are free to be modified as currently implemented until "signed".
  • When Signed, a SHA1 hash code (or similar) of the content and a revision number is incremented. The signature is marked in a signature tracking table and form is locked and can no longer be modified after this.
  • Ability to verify the hash code of a form would be provided as an Admin feature
  • A user can add an addendum(s) to a signed form, which can also be Save/Signed like above.
    • Question: Is a Addendum, just a free text note appended to the locked form or a "copy" of the original created as a NEW form record referencing the previous.

The base classes for marking a form (or any table entry) as signed has already been done by mi-squared.com. At: https://github.com/tmccormi/openemr. Minor enhancements to include MD5 and revision # would be needed.

Enhancement to add a Globals to turn on Sign and Sign+Lock for forms that have had this feature added would be needed.

Documented/standardized method for adding this feature to interface/forms/* would be needed

Enhancements to LBF form tools would need to have this feature added.

Optional feature to save a 'signed' form as a PDF and attach it to the patient might be of interest as well.

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

Custom Report

The mechanism that creates a pdf report for patient custom report does not support internationalization. See the Html2pdf wiki page for plan to support internationalization of this in the future.
Awaiting a developer to do this

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.
Visolve is working on this.

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 completed and committed this project code to the codebase on 1/29/2012

Laboratory Viewing

  • Allow trending,graphing,date ranges etc when viewing labs
  • Mechanism to comment and print out labs in a letter format for patients.
Rod, Visolve and MI2 are working on 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.
Visolve is working on this.

Laboratory Information system(LIS)

Discussed here:
Dr. Samuel Bowen is sponsoring Visolve to work on this.

Medications

Integrate medications and prescriptions

Brady is currently working on this.

Integrate RXNorm

There is currently a mechanism to import the RXNorm codes, however it has not been yet implemented in OpenEMR. This project is in progress and can be following in this forum thread: http://sourceforge.net/projects/openemr/forums/forum/202506/topic/6166498
Brady is currently working on 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.

Timezone

There has been some discussion to allow setting of the timezone in globals. See here for discussion and proposed soultion.
Awaiting Developer to further 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.