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)

Developer Starter Projects

Listing of nice starter projects for developers (both new and veteran) with mentors:
1. ACL access controls to reports, which is discussed here:
(mentor - Brady)


2. Fix SNOMED import to support newer SNOMED package (1/2015 SNOMED package no longer imports correctly)
(mentor - Brady)


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 . An active review is currently ongoing on the Medmasterpro API Review wiki page.
MedMaster is working on 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.
Visolve is working on this.

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.

Add mechanism to display the database values used in the rule

For example, actual last a1c level and date is was done for a1c rules.
Awaiting Developer to fully analyze and implement this.

Add mechanism to track items in LBF forms

On a more generic levels, need mechanism to track items stored in the vertical sql tables.
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).
  • If a rule does not have a frequency set (such as the colonoscopy rule), it appears the gui is making it every one month when save the rule.
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.

Convert connector to MySQLi or PDO

  • At some point, will need to convert from mysql_connect to MySQLi or PDO since php will not support mysql_connect in the future.
  • Since database calls are all centralized (library/sql.inc) can change to MySQLi and essentially run through ADODB.
  • Option 2:
  • Since Zend library is now used in OpenEMR, could leverage Zend database framework and use PDO.
  • Option 3:
  • Any other options? Place them there.
Awaiting Developer to fully analyze and implement this.

Demographics

Create A New Contact Management System

Create a new contact management system that centralizes phone/address management.
Addressbook, patients, secondary contacts, insurance companies, etc will all have their contact information in these new database tables.
Support for multiple addresses, multiple phone numbers, etc, in tables with 1 to many relationships.
David Eschelbacher is working on 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.

Diagnostic/Utility Testing

Administrative Diagnostic Testing

It would be very nice to have a diagnostic and utility testing module. Suggest having it work both as a visual GUI (in Adminstration menu) and also run as a service (via the currently supported bot/service mechanism in the current development codebase) with ability to email results. Also suggest placing results within the new reporting module that saves result runs in the database. Things to test include:
  • Ensure database encoding and collation is not heterogeneous. This is actually a big deal and can lead to database corruption over time.
  • Orphaned data/files.
  • Duplicate data.
  • Broken services.
  • etc.

Awaiting developer for further analysis and coding

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

FAX/Scan Scripts - Utilize Document Class

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 addNewDocument library/documents.php script for an example of this. Also, check out this code which has begun to convert the scan form to this (note it uses the addNewDocument() function): http://github.com/bradymiller/openemr/commit/b08d6eaa4214a9a2445896db9d3c9bc058cb74df
Awaiting developer to analyze and implement this.

FAX - Support Remote Fax Servers

Currently OpenEMR accesses hylafax to receive documents only if the documents are on the same server as the server that OpenEMR is being hosted on. You can get around this by sharing/mounting a remote hylafax directory on your local OpenEMR server. However, this is not elegant, and hylafax still needs to be on a local network.
This project would involve giving OpenEMR the ability to access a remote hylafax server over the internet. Hylafax has the ability to be accessed by clients remotely via ftp. However, this is not secure. For security reasons, this project would involve creating scripts in OpenEMR to issue commands to hylafax via FTP, then using sFTP to transfer the FAXes in an encrypted manner.
David Eschelbacher is working on this.

Forms

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.
A plan and code is discussed here (note that this code is basically ready and a code walk through is then needed): http://sourceforge.net/p/openemr/discussion/202506/thread/7f38b864
Awaiting developer to do 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. 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.
2. Remove some bad constants (such as ., 1, 2 etc.)
3. Continue placing comments in confusing constants (via {{<comment>}} strings)
4. Consider migrating to transifex, which is discussed here: http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5254742
5. 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 four through five.

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 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

Also add ability to record and show if a medication is "Scheduled" or "As Needed" (ie. PRN).
Jan will be working on this after integrate rxnorm.

Integrate RXNorm

There is currently a mechanism to import the RXNorm codes, however it has not been yet implemented in OpenEMR. This project can be following in this forum thread: https://sourceforge.net/p/openemr/discussion/202506/thread/3a37a57f
Most recent code by bradymiller, whom is no longer working on this project: http://github.com/bradymiller/openemr/commits/integrate-rxnorm_9
Jan is 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.
Open Med Practice is working on this.
Open Med Practice has taken up the task of building a new patient reminder system. We have begun the development work on a system that will make phone calls to remind patients of their upcoming appointment. This will be a paid service simply because it involves telephony services. The basic system should be rolled out as a patch by the 2nd week in September.
We are currently testing the system and all is going well. The system can make up to 100 simultaneous phone calls. The entire appointment list can be called in 5 minutes.
We will leave the code open in such away to invite others to develop processes that can tie in other parts of the system that needs to contact patients via telephony system. Right now we are developing the basic phone system but the underlying system is able to send SMS and emails.
UPDATE 8/26/2013
We are nearing the point of code review for inclusion as a patch for version 4.1.2. We are shooting for release around the second week in Sept.
UPDATE 09/02/2013
We are ahead of schedule and have submitted the code to be reviewed by Brady Miller to be included in next patch. This code will be to do the patient appointment reminders. We are now coding to connect this system to the clinical reminders.
Code can be downloaded from http://callback.openmedpractice.com/pacs/Call_Reminder_Patch.zip
Installation instructions are posted https://sourceforge.net/p/openemr/discussion/202504/thread/04c47fc7/
Open Med Practice is working on 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.
ZH Healthcare is currently working on this.

Modules

Module Mechanism

Ability to utilize modules. There is currently a project underway to allow use of modules within OpenEMR and is being built via the Zend2 Framework. See the Module Development wiki page for more information on this project.
ZH Healthcare is working on 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.

UI Improvement

UI Modernization

Working towards bringing the user interface to current standards using up-to-date jQuery, twitter bootstrap and knockoutJS or angularJS. (note this has been changed to incorporating the Foundation css)
Robert Down is currently working on this.

Modern Theme

A new theme that modernizes the look and feel of the app. Note this is different than the UI Modernization project as this is only a new theme whereas UI Modernization will be focused on standards and improvements.
Robert Down is currently working on this.

Views

Customizing Frames View, Adding Tabs, Move Tab/Frame to New Window.
  • For physicians, it is very important to review multiple pieces of information on the same patient, such as looking at lab or radiology results while composing a note. Or, comparing two different radiology reports.
  • Currently, OpenEMR supports this in a rudimentary manner -- with a top from and bottom frame.
  • This idea has been developed further by Kevin Yeh. On his Github site, he has code that creates side by side views and tabbed views.
  • Someone needs to finish this code and integrate it into OpenEMR.
Awaiting Developer to fully analyze and implement this.

Accounting Work Flow

OpenEMR's practice management and accounting processes need to be reworked to meet more industry standards and GAAP for use and practicality.

Here is formal Gap Analysis review done by MI2, Sam Bowen and Dr. Schaffer in 2010: File:OpenEMR-PracticeMgmt-Gap-Review.pdf

Here is formal Gap Analysis review updated with effort estimates, done by MI2 3/2014: File:OpenEMR-PracticeMgmt-Developement.pdf

Upgrading

The sql_upgrade.php manually requests the version to upgrade from. However, this can be automated simply by getting version information stored in the version sql table and using this instead.
  • To support legacy OpenEMR version upgrades, though, the older functionality will be used if the 'version' sql table does not yet exist to allow upgrades of legacy OpenEMR versions.
  • When a user is using a "dev" version, then need to figure out what the prior version is and use that.
Forum Thread:
Roberto is working on this

Zend

Ongoing project. See here for details: Zend
ZH Healthcare is working on this