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. Feel free to contact the mentor if you are interested:
- 1. ACL access controls to reports, which is discussed here:
- (mentor - Brady, email:brady.g.miller@gmail.com)
- (volunteer - Stephen Waite, aka the Dragon Slayer)
- 2. Fix SNOMED import to support newer SNOMED package (1/2015 SNOMED package no longer imports correctly)
- (mentor - Brady, email:brady.g.miller@gmail.com)
- (mentee - Aaron)
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:
- Things work great with one facility
- With two facility the bugs appear (different bugs happen with the $GLOBALS['restrict_user_facility'] turned off(default) and on)
- 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.
- 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:
- 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)
- With global restrict_user_facility off (default) allow users to be scheduled at all facilities.
- 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:
- Synitech OpenEMR 2.0 release - http://www.oemr.org/wiki/File:Openemr-2.0.0.tar.gz
- A working directory from Pennington Firms SVN repo right before it was migrated to sourceforge - http://www.oemr.org/wiki/File:Pennfirm-openemr.tar.gz
- A Changelog of first repo - http://openemr.cvs.sourceforge.net/viewvc/openemr/openemr/ChangeLog?revision=1.1.1.1&view=markup&pathrev=start
- A changelog of second repo - http://openemr.cvs.sourceforge.net/viewvc/openemr/openemr/ChangeLog.old.cvs?revision=1.1.1.1&view=markup&pathrev=start
- A copyright statement for code that was imported into third repo (ie. Sourceforge cvs repo) - http://openemr.cvs.sourceforge.net/viewvc/openemr/openemr/copyright_notice.html?revision=1.1.1.1&view=markup&pathrev=start
- 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.
- Here is reasoning and vote for deprecating mysql_connect by php: https://wiki.php.net/rfc/mysql_deprecation
- Here is vote to remove support for mysql_connect in PHP-7(note the vote was 28 to remove and 12 to not remove, which is definitely not a landslide...): https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
- Here is where it is estimated that php-7 will be released sometime in 2016 (ie. conversion needs to happen by then): http://www.phpclasses.org/blog/post/242-PHP-7-Features-and-Release-Date.html
- Discussed on this forum thread: http://sourceforge.net/p/openemr/discussion/202506/thread/17c040e9/#412d
- Option 1:
- 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
- Only current supported lab integration is unidirectional (results only) via Z&H/MI2 solution that is described on post number 15 in the following sourceforge forum: http://sourceforge.net/projects/openemr/forums/forum/202504/topic/4709788
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)
- 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
- Include counting of uncompleted messages in the Messages link counter also. (DONE and committed 4/28/12)
- Refresh every 30-60 seconds (same mechanism as the dated reminders module)
- Place a patient to link directly from the messages (as the reminder does) (DONE and committed 4/28/12)
- Consider not requiring a patient linking
- 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.
- Support DSMIV codes
- Certification process by Massachusetts for Behavioral Medicine EMR is discussed here: http://sourceforge.net/projects/openemr/forums/forum/202504/topic/5520982
- Ask experts for list of needed feature
- 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