Difference between revisions of "Active Projects"

From OpenEMR Project Wiki
 
(494 intermediate revisions by 13 users not shown)
Line 2: Line 2:


== Overview ==
== Overview ==
:This is a listing of currently important active projects. This is a place to see what's going on, and also a place to see where help is needed by other developers and testers.
:'''Notice''': before exploring these projects, please consider checking out our [[Roadmaps#OpenEMR_Project_Roadmap|OpenEMR Project Roadmap]] which contains the highest priority requests as noted by our community and users. Thank you!
 
: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:
<br>
:1. ACL access controls to reports, which is discussed here:
::*https://sourceforge.net/p/openemr/discussion/202504/thread/80ae203d/?limit=25#d8d6
:(mentor - Brady, email:brady.g.miller@gmail.com)
:(volunteer - Stephen Waite, aka the Dragon Slayer)
:STATUS: RESTARTED (10-7-2016)
<br>
:2. Security fixes
:(mentor - Brady, email:brady.g.miller@gmail.com)
:(contributor - Roberto)
:STATUS: ONGOING at [[Active_Projects#Security_Vulnerability_Assessment_and_Fixing]]
<br>
 
== API ==
===Codebase Refactor===
PROJECT PAGE: http://open-emr.org/wiki/index.php/Codebase_Refactor
 
===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 (currently stale). An old unfinished code review of the [[Medmasterpro API Review|Medmasterpro API Review can be found here]].
:''Awaiting developer to analyze and work on this''
 
== Billing ==
===Accounting Work Flow aka Billing Upgrade===
OpenEMR's practice management and accounting processes need to be reworked to meet more industry standards and [http://en.wikipedia.org/wiki/Generally_accepted_accounting_principles 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]]
 
Forum threads:
*[https://sourceforge.net/p/openemr/discussion/202504/thread/ea6efc26/ OpenEMR Accounting Upgrade Project]
 
:''Awaiting developer to analyze and work on this''


== Calendar ==
== Calendar ==
Line 19: Line 61:


:Currently linked to this [http://sourceforge.net/tracker/?func=detail&aid=2885694&group_id=60081&atid=493001 tracker item] and this [http://sourceforge.net/projects/openemr/forums/forum/202505/topic/3437162 forum thread].
:Currently linked to this [http://sourceforge.net/tracker/?func=detail&aid=2885694&group_id=60081&atid=493001 tracker item] and this [http://sourceforge.net/projects/openemr/forums/forum/202505/topic/3437162 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.''
:''Awaiting a Developer to fix this bug.''


=== Recurring appointment bugs ===
=== Facility level calendar management (working hours) ===
:This problem is discussed in this [http://sourceforge.net/projects/openemr/forums/forum/202505/topic/3387146 forum thread] and this [http://sourceforge.net/projects/openemr/forums/forum/202505/topic/3379881 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 work on this.''


:''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 ==
== 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/dev/OpenEMR/_library---clinical_rules.php.html 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.''


===Integrate Plans into the Admin GUI===
===Add mechanism to track items in LBF forms===
:Implement plan/rule mapping in the Admin GUI for CDR. 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).
: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.''
:''Awaiting Developer to fully analyze and implement this.''
Line 38: Line 110:
===Integrate Procedures into the Admin GUI===
===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.
: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.
:As of OpenEMR version 4.3.1, this becomes a bit more complicated. To support MU2 a mechanism was added to support procedures in the CDR GUI by simply using the custom database feature and using the 'procedure_result' table; the engine will then automatically query the procedure tables correctly; note that to work with HL7 imported data, it was necessary to remove the procedure_type table from this query. Note that the original procedure feature in the CDR engine, however, still uses the procedure_type table query, thus will need to test and possibly fix this in the future.


:''Awaiting Developer to fully analyze and implement this.''
:''Awaiting Developer to fully analyze and implement this.''


===Provider bug fix for per-provider reporting===
===Integrate support for custom issue categories into the Admin GUI===
:This is fully discussed at [[Description_AMC#Patient.28s.29_selection]] and [[Description_AMC#Potential_Issues]] (Issue #1).
: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 fix this bug.''
:''Awaiting Developer to fully analyze and implement this.''


===Improve Performance===
===Improve Performance===
:A page tracking this project can be found at [[CDR Performance]].
:A page tracking this project can be found at [[CDR Performance]].


:''Awaiting Further Testing/Reporting.''
:''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:
:*http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5355691
:*http://www.oemr.org/phpBB3/viewtopic.php?f=5&t=151
 
:''Awaiting somebody to continue this''
 
== Database ==
 
===Support STRICT SQL===
:OpenEMR currently disables STRICT SQL, since this is turned on by default in MySQL 5.7 and later MySQL version. The commit that disabled STRICT SQL within OpenEMR can be found here:
:*https://github.com/openemr/openemr/commit/e7aa71059534321b660eaa9a8e5fda994914c574
 
:In the future, goal is for OpenEMR to be fully compliant with STRICT SQL in addition to the other settings that are on by default in MySQL. After do this, can then revert the above commit or place these settings in the sql_mode setting in OpenEMR.
 
:''Awaiting Developer to fully analyze and implement this.''
 
=== Database Fields Meta Dictionary ===
 
:Database fields meta-dictionary artifact for users new and old. Consider adding foreign keys for further information.
 
:''(Awaiting team to form)''
 
=== Data Versioning ===
 
:Data versioning as audit tool (i.e. store versions of data)
 
:''(Awaiting team to form)''
 
=== Indexes ===
 
:Add indexes for commonly queried fields for performance improvements.
 
:''(Awaiting team to form)''
 
== 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.''
 
:For more of David's plans, go to [[David Eschelbacher OpenEMR Improvement Projects]].
 
== Development ==
 
===Eclipse===
:Offer a generic OpenEmr eclipse project that will allow future dev's a quick start. This would be an ideal project for the interns/integrators and done right, would make git management far easier for those not as fluent with git.
 
:''Awaiting developer to take on this project.''


== Diagnostic Coding ==
== Diagnostic Coding ==
:Some things todo are listed in the [[Diagnostic_Codes_Development#TODO|Diagnostic Coding TODO list]].


===Integrating ICD10===
===Integrating DSMIV===
:See [[Diagnostic_Codes_Development#ICD10| ICD10 Diagnostic Codes Development]] for details.
:See [[Diagnostic_Codes_Development#DSMIV| DSMIV Diagnostic Codes Development]] for details.
:It turns out this is likely not helpful since these are basically just ICD codes.


:''Awaiting Developer to fully analyze and implement this.''
:''Awaiting Developer to fully analyze and implement this.''


===Integrating SNOMED===
== Diagnostic/Utility Testing ==
:See [[Diagnostic_Codes_Development#SNOMED| SNOMED Diagnostic Codes Development]] for details.
 
=== 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 to fully analyze and implement this.''
''Awaiting developer for further analysis and coding''


== Documentation ==
== Documentation ==


=== Upgrading ===
=== Codebase Documentation ===
:Integrate the [[OpenEMR_Upgrade_Guides|generic upgrade instructions]] with the [[OpenEMR_Multiple_Sites_Module#Upgrading|multisite upgrade instructions]].
: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 [[Administration_Lists|OpenEMR Lists]] page.
 
=== Offsite Patient Portal SOAP API ===
:Document the SOAP APIs for the third party portals.
 
=== Settings ===
:Finish the [[Administration_Globals|OpenEMR Settings]] page.
 
=== Curated Documentation Opportunities ===
: https://community.open-emr.org/t/technical-writer-opportunities/8726
 
== 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 was working on this; this project has gone stale.''
 
=== Microsoft Office Document Templates ===
 
: Support for Microsoft Office document format based templates
 
:''Awaiting developer to analyze and implement 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 ==
== Internationalization ==
Line 72: Line 295:
=== Date formatting ===
=== Date formatting ===


:Still work to do in order to support date formats across multiple languages. Here's the [http://sourceforge.net/projects/openemr/forums/forum/202506/topic/3472404 forum thread] discussing this.
: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 a Analyzer to figure out a good plan for this.''
:''Awaiting developer to do this.''


=== Translation database maintenance/improvement ===
=== Translation database maintenance/improvement ===
Line 85: Line 309:


::'''TO DO:'''
::'''TO DO:'''
:1. Build mechanism to import most recent translations in the Administration->Language->Manage Translation Screen.
: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.
::*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.
::*Should use the 'standardized_tables_track' table to keep track of what is imported.
:''Awaiting developer to implement this.''
 
:''Awaiting developer to implement TODO number four through five.''
 
=== Allow different Insurance models ===
 
:''Awaiting developer to do 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
 
:*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. Status of this project is unknown.''
 
===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. Status of this project is unknown.''
 
===Laboratory Information system(LIS)===
 
:Discussed here:
:*http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5488338
 
:''Dr. Samuel Bowen is sponsoring Visolve to work on this. Status of this project is unknown.''
 
== Medications ==
 
=== Integrate medications and prescriptions ===
:Also add ability to record and show if a medication is "Scheduled" or "As Needed" (ie. PRN).
 
:''Awaiting developer to work on this.''
 
=== Integrate RXNorm ===
:Actually, isn't RXNorm in place ?
 
: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
 
:''Awaiting developer to work on this.''
 
== Messages ==
 
=== Direct ===
:The Direct Project is a simple, secure, scalable, standards-based way for participants to send authenticated, encrypted health information directly to known, trusted recipients over the Internet. More information on Direct can be found here: http://www.healthit.gov/policy-researchers-implementers/direct-project.
:EMRDirect has integrated Direct into OpenEMR.
:Details of using Direct in OpenEMR can be found on the [[Direct]] wiki page.
:Recommended improvement(s):
:*Integrate a directory lookup. Note that EMRDirect supports this (lookup by name, organization name, state, and zip code), so would need to create a simple gui(at places where offer a Direct transmission) and utilize EMRDirect's api. This would not be too tough to incorporate. Would contain the input elements that are shown in below screenshots:
[[File:Directory screen shot.png]]
 
 
:''Awaiting Developer to complete this.''
 
=== 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 was working on this; this project has gone stale.''


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


=== Assigned Provider ID and Referring Provider ID conflict bug ===
:''Awaiting Developer to fully analyze and fix/implement this.''
:The same field appears to be used in OpenEMR to track the assigned provider at a clinic and the referring provider.


:The patient_data mysql table also has the following columns:
=== Magic Quotes Bugs===
::*providerID
: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:
::*referrer
:*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).
::*referrerID


:The above referrer* are not included in the demographics layout while the providerID is populated by the 'Provider' label, which has 'Referring Provider' in the details.
:''Awaiting Developer to fix/implement this.''


:A grep (grep is a search method) for referrerID in the codebase showed it really isn't used anywhere.
=== Timezone ===
:There has been some discussion to allow setting of the timezone in globals. See here for discussion and proposed soultion.
:*http://sourceforge.net/projects/openemr/forums/forum/202506/topic/5816549


:A grep for providerID in the codebase pulls out a lot of stuff:
:''ZH Healthcare was currently working on this; this project has gone stale.''
<pre>
/var/www/openemr/contrib/util/import_mi2xml.php:      '',                          // providerID
/var/www/openemr/library/clinical_rules.php:        "WHERE providerID=?", array($provider) );
/var/www/openemr/library/amc.php:      "WHERE providerID=?", array($provider) );
/var/www/openemr/library/freeb/Procedure.class.php:                            $pkey = $results->fields['providerID'];
/var/www/openemr/library/patient.inc:function getProviderInfo($providerID = "%", $providers_only = true, $facility = '' ) {
/var/www/openemr/library/patient.inc:    if ($providerID == "%") {
/var/www/openemr/library/patient.inc:        mysql_real_escape_string($providerID) . "' " . $param1 . $param2;
/var/www/openemr/library/patient.inc:function getCalendarProviderInfo($providerID = "%", $providers_only = true) {
/var/www/openemr/library/patient.inc:    if ($providerID == "%") {
/var/www/openemr/library/patient.inc:        mysql_real_escape_string($providerID) . "' " . $param1;
/var/www/openemr/library/patient.inc:function getProviderName($providerID) {
/var/www/openemr/library/patient.inc:    $pi = getProviderInfo($providerID, 'any');
/var/www/openemr/library/patient.inc:function getPatientLnames($lname = "%", $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:function getPatientId($pid = "%", $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:function getByPatientDemographics($searchTerm = "%", $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:  $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS",
/var/www/openemr/library/patient.inc:// orig function getPatientPID($pid = "%", $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:    $given = "pid, id, lname, fname, mname, providerID, DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS";
/var/www/openemr/library/patient.inc:function getPatientSSN($ss = "%", $given = "pid, id, lname, fname, mname, providerID", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:function getPatientPhone($phone = "%", $given = "pid, id, lname, fname, mname, providerID", $orderby = "lname ASC, fname ASC", $limit="all", $start="0")
/var/www/openemr/library/patient.inc:                $providerID = "",
/var/www/openemr/library/patient.inc:        providerID = '$providerID',
/var/www/openemr/library/custom_template/custom_template.php:                                            if($row['providerID']){
/var/www/openemr/library/custom_template/custom_template.php:                                                $val=sqlQuery("SELECT CONCAT(lname,',',fname) AS name FROM users WHERE id='".$row['providerID']."'");
/var/www/openemr/library/classes/Patient.class.php:                    $res = sqlQuery("SELECT providerID,fname,lname,mname ".
/var/www/openemr/library/classes/Patient.class.php:                            $this->provider = new Provider($res['providerID']);
/var/www/openemr/library/Claim.class.php:      $this->patient_data['providerID'] : $provider_id;
/var/www/openemr/custom/export_labworks.php:  "p.pubpid, p.fname, p.mname, p.lname, p.DOB, p.providerID, " .
/var/www/openemr/custom/export_labworks.php: if ($row['providerID']) {
/var/www/openemr/custom/export_labworks.php:  $query .= " AND id = " . $row['providerID'];
/var/www/openemr/custom/import_xml.php:  $olddata['providerID'],
/var/www/openemr/custom/export_xml.php:  "p.pubpid, p.fname, p.mname, p.lname, p.DOB, p.providerID, " .
/var/www/openemr/custom/export_xml.php: if ($row['providerID']) {
/var/www/openemr/custom/export_xml.php:  $query .= " AND id = " . $row['providerID'];
/var/www/openemr/interface/new/new_patient_save.php:    "", // providerID
/var/www/openemr/interface/reports/collections_report.php:      "LEFT OUTER JOIN users AS u ON u.id = p.providerID " .
/var/www/openemr/interface/reports/collections_report.php:        "LEFT OUTER JOIN users AS u ON u.id = pd.providerID " .
/var/www/openemr/interface/patient_file/pos_checkout.php:  $patdata = getPatientData($patient_id, 'fname,mname,lname,pubpid,street,city,state,postal_code,providerID');
/var/www/openemr/interface/patient_file/pos_checkout.php:      } else if (isset($patdata['providerID'])){
/var/www/openemr/interface/patient_file/pos_checkout.php:        $encprovider = $patdata['providerID'];
/var/www/openemr/interface/patient_file/encounter/cash_receipt.php: $titleres = getPatientData($pid, "fname,lname,providerID");
/var/www/openemr/interface/patient_file/encounter/cash_receipt.php: //$provider = getProviderName($titleres['providerID']);
/var/www/openemr/interface/patient_file/report/print_custom_report.php: $titleres = getPatientData($pid, "fname,lname,providerID");
/var/www/openemr/interface/patient_file/report/print_custom_report.php: //$provider = getProviderName($titleres['providerID']);
/var/www/openemr/interface/patient_file/report/custom_report.php:  $titleres = getPatientData($pid, "fname,lname,providerID");
/var/www/openemr/interface/patient_file/report/custom_report.php:  $titleres = getPatientData($pid, "fname,lname,providerID,DATE_FORMAT(DOB,'%m/%d/%Y') as DOB_TS");
/var/www/openemr/interface/main/calendar/find_patient.php:    $iterproviderid = $iter['providerID'];
/var/www/openemr/interface/main/calendar/modules/PostCalendar/pnuserapi.php:  if(!empty($providerID)) { $ruserid = $providerID; }
/var/www/openemr/interface/main/calendar/modules/PostCalendar/pnuserapi.php:        $a = array('start'=>$start_date,'end'=>$end_date,'s_keywords'=>$s_keywords,'s_category'=>$s_category,'s_topic'=>$s_topic,'viewtype'=>$viewtype, "sort" => "pc_startTime ASC, a.pc_duration ASC ",'providerID' => $providerID, 'provider_id' => $provider_id);
/var/www/openemr/interface/main/calendar/modules/PostCalendar/pnuser.php:                'end'=>$sdate, 'stime' => $stime, 'etime' => $etime,'providerID'=>$event_userid,
/var/www/openemr/interface/main/authorizations/authorizations.php:    $providerID = sqlFetchArray(sqlStatement(
/var/www/openemr/interface/main/authorizations/authorizations.php:      "select providerID from patient_data where pid=?", array($ppid) ));
/var/www/openemr/interface/main/authorizations/authorizations.php:    $userID=$providerID{"providerID"};
/var/www/openemr/interface/main/authorizations/authorizations.php:      "select lname from users where id = ?", array($name['providerID']) ));
</pre>


:It appears on first glance on above 'providerID' grep that this is being used in cases as the referring provider and as the assigned provider ID.
== Patient Portal ==
===Onsite Portal===
:Implement features to make it MU2 compliant.
:*Secure messaging
:*Logging
:*and guessing a couple more items


:''Awaiting developer to analyze and complete this project''


:'''Proposal (these are just some quick thoughts to start discussion on implementing a solution)''':
===API===
::*Create a new 'referrer_providerID' sql column
:Meaningful Use 3 will require an API to allow patient's apps to connect and collect a patient's data.
:::*Fix codebase for referral code to use this
:*EMRDirect is planning to offer a secure method of doing this by having patient's apps going through their service (the OpenEMR instance would connect to EMRDirect via SSL tunneling, thus would not need to place the OpenEMR instance on the web).
:::*On upgrade, simply copy over the providerID to this field (note, the same data will then be in both for the upgraders, which is the safest way to implement in upgrades)


:''Awaiting Developer to fully analyze and implement this.''
:''EMRDirect plans to contribute help and code in order to integrate this in OpenEMR''


== Security ==
== Security ==


=== Security Vulnerability Assessment and Fixing ===
=== Security Vulnerability Assessment and Fixing ===
:This project is active and has been moved to its own wiki tracking page at [[Codebase Security]].
:This project is active and details of it can be found on the wiki tracking page at [[Codebase Security]].
 
:Ongoing items that Roberto is working on:
:*91980563 (committed solution to codebase; need to verify vulnerability no longer exists)
:*95739714
:*99332614
:*97313189
:*98492231
 
:''Roberto is working on this project.''
 
=== Smartcard Single Sign On ===
 
:''Awaiting developer.''
 
== Specialties ==
 
=== Mental Health ===
:Seems to be a very large demand for this.
::*[[Active_Projects#Integrating_DSMIV|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.''
::
::Active development of features needed by a Behavioral Health practice
:::* Semi automated billing feature that fills portions of the fee sheet by selecting appointment category.
:::* When patient is checked out billing is automatically entered based on appointment
:::* Supervisor can be alerted that the documentation is ready for review.
:::* Patients can be checked out at the eSigning of the encounter
:::* Interactive Complexity: If selected will be auto entered into the fee sheet
:::* New PDF templating engine that enables in-browser editing of document
:::* Auto upload of documents into patient record via cron job
:::* And many more features
:::https://omp.openmedpractice.com/dev/mindfulemr4
:::Looking for additional sponsors
 
== Testing ==
 
=== Manual Tests ===
In order to verify that code changes pass certification tests, contributors must execute the relevant test cases via the test mapping document. This document is currently being built up (''project page:'' http://open-emr.org/wiki/index.php/Manual_Tests) and will live in openemr/Tests/certification_tests.md.
 
Note that unit tests are being introduced in the code base to cover the more fine-grained functionality.
 
=== Unit Testing ===
Unit tests are being introduced per http://open-emr.org/wiki/index.php?title=Modernization_Roadmap#Codebase_Refactor
 
== 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 Bootstrap 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.
:*[https://sourceforge.net/p/openemr/discussion/202506/thread/5ddd6d1e/ Source Forge Forum Discussion]
 
::''Robert Down is currently working on this.''
 
=== Views ===
:Customizing Frames View, Adding Tabs, Move Tab/Frame to New Window.
:*See below '''Frame Removal''' project.
 
=== Frame Removal ===
:Remove frames (ie. convert to iframe).
:*This is currently in the codebase (as of OpenEMR 5.0.0)
::*Can turn on/off the tabs layout at Adminstration->Appearance->Tabs Layout Style
 
:TODO:
:#Use the json structure to also build the left_nav menu.
:#Finish the support for storing the menu in the database:
:#*Could use the json, which could store the json in the database in a TEXT field, which would allow maintaining history of changes and supporting completely different menu structures for different user types. And could also have a gui editor that simply reads and writes to the json.
:#*For the menu editor gui, could store the elements (title, id, paths) in the lists engine.
:#*There is also some database code that could be used/leveraged:
:#:*https://github.com/bradymiller/openemr/commit/9a747871a2565b8123c00e820eef61e158addab2
 
::MD Support Suggested:
::#Create a menu.inc.php which will provide a common php array to left_nav and the default menu handler. The array should contain merged information from the master list (found at the top of left_nav) and the json used by Kevin - as a php array.
::#Add keys from common array into a standard list that can be modified by local administrators.
::#Modify left_nav to map the common array into master list to ensure no impact on rest of left_nav code. Since left_nav has lot of complex logic, it could have the standard mapping except possibly using the list.title for menu text.
::#Default menu will be created using the order and the active status from the list. If a site wants to add 'Favorites' as a collection of menu items, they will have full control. We should also strongly look at using the notes field to allow control over menu actions - e.g. acl groups, post parameters etc.
::#Zend has a very capable menu class. Once the new menu behavior is stable, we should look at that as a long term solution.
 
:*Related forum thread: [https://sourceforge.net/p/openemr/discussion/202506/thread/e3356721 Tabs Based interface with IFRAMES]
 
:''The community is currently working on this.''
 
=== Centralize and organize all front-end assets  ===
 
:http://open-emr.org/wiki/index.php/Bower
 
:''The community is currently working on this.''
 
=== Migrate the legacy smarty code from 2.x to 3.x  ===
 
:''Awaiting developer.''


:''Awaiting Developers to continue implementing this project.''
== 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:
:*https://sourceforge.net/p/openemr/discussion/202506/thread/d50e7631/


:''Roberto was working on this; this project has gone stale.''


[[Category:Developer Guide]]
<br>
<br>
<br>

Latest revision as of 04:25, 7 November 2021

Overview

Notice: before exploring these projects, please consider checking out our OpenEMR Project Roadmap which contains the highest priority requests as noted by our community and users. Thank you!
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)
STATUS: RESTARTED (10-7-2016)


2. Security fixes
(mentor - Brady, email:brady.g.miller@gmail.com)
(contributor - Roberto)
STATUS: ONGOING at Active_Projects#Security_Vulnerability_Assessment_and_Fixing


API

Codebase Refactor

PROJECT PAGE: http://open-emr.org/wiki/index.php/Codebase_Refactor

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 (currently stale). An old unfinished code review of the Medmasterpro API Review can be found here.
Awaiting developer to analyze and work on this

Billing

Accounting Work Flow aka Billing Upgrade

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

Forum threads:

Awaiting developer to analyze and work 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.

Facility level calendar management (working hours)

Awaiting a Developer to work on this.

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.
As of OpenEMR version 4.3.1, this becomes a bit more complicated. To support MU2 a mechanism was added to support procedures in the CDR GUI by simply using the custom database feature and using the 'procedure_result' table; the engine will then automatically query the procedure tables correctly; note that to work with HL7 imported data, it was necessary to remove the procedure_type table from this query. Note that the original procedure feature in the CDR engine, however, still uses the procedure_type table query, thus will need to test and possibly fix this in the future.
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

Support STRICT SQL

OpenEMR currently disables STRICT SQL, since this is turned on by default in MySQL 5.7 and later MySQL version. The commit that disabled STRICT SQL within OpenEMR can be found here:
In the future, goal is for OpenEMR to be fully compliant with STRICT SQL in addition to the other settings that are on by default in MySQL. After do this, can then revert the above commit or place these settings in the sql_mode setting in OpenEMR.
Awaiting Developer to fully analyze and implement this.

Database Fields Meta Dictionary

Database fields meta-dictionary artifact for users new and old. Consider adding foreign keys for further information.
(Awaiting team to form)

Data Versioning

Data versioning as audit tool (i.e. store versions of data)
(Awaiting team to form)

Indexes

Add indexes for commonly queried fields for performance improvements.
(Awaiting team to form)

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.
For more of David's plans, go to David Eschelbacher OpenEMR Improvement Projects.

Development

Eclipse

Offer a generic OpenEmr eclipse project that will allow future dev's a quick start. This would be an ideal project for the interns/integrators and done right, would make git management far easier for those not as fluent with git.
Awaiting developer to take on this project.

Diagnostic Coding

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

Integrating DSMIV

See DSMIV Diagnostic Codes Development for details.
It turns out this is likely not helpful since these are basically just ICD codes.
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.

Curated Documentation Opportunities

https://community.open-emr.org/t/technical-writer-opportunities/8726

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 was working on this; this project has gone stale.

Microsoft Office Document Templates

Support for Microsoft Office document format based templates
Awaiting developer to analyze and implement 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

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.

Allow different Insurance models

Awaiting developer to do 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 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. Status of this project is unknown.

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. Status of this project is unknown.

Laboratory Information system(LIS)

Discussed here:
Dr. Samuel Bowen is sponsoring Visolve to work on this. Status of this project is unknown.

Medications

Integrate medications and prescriptions

Also add ability to record and show if a medication is "Scheduled" or "As Needed" (ie. PRN).
Awaiting developer to work on this.

Integrate RXNorm

Actually, isn't RXNorm in place ?
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
Awaiting developer to work on this.

Messages

Direct

The Direct Project is a simple, secure, scalable, standards-based way for participants to send authenticated, encrypted health information directly to known, trusted recipients over the Internet. More information on Direct can be found here: http://www.healthit.gov/policy-researchers-implementers/direct-project.
EMRDirect has integrated Direct into OpenEMR.
Details of using Direct in OpenEMR can be found on the Direct wiki page.
Recommended improvement(s):
  • Integrate a directory lookup. Note that EMRDirect supports this (lookup by name, organization name, state, and zip code), so would need to create a simple gui(at places where offer a Direct transmission) and utilize EMRDirect's api. This would not be too tough to incorporate. Would contain the input elements that are shown in below screenshots:

Directory screen shot.png


Awaiting Developer to complete this.

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 was working on this; this project has gone stale.

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 was currently working on this; this project has gone stale.

Patient Portal

Onsite Portal

Implement features to make it MU2 compliant.
  • Secure messaging
  • Logging
  • and guessing a couple more items
Awaiting developer to analyze and complete this project

API

Meaningful Use 3 will require an API to allow patient's apps to connect and collect a patient's data.
  • EMRDirect is planning to offer a secure method of doing this by having patient's apps going through their service (the OpenEMR instance would connect to EMRDirect via SSL tunneling, thus would not need to place the OpenEMR instance on the web).
EMRDirect plans to contribute help and code in order to integrate this in OpenEMR

Security

Security Vulnerability Assessment and Fixing

This project is active and details of it can be found on the wiki tracking page at Codebase Security.
Ongoing items that Roberto is working on:
  • 91980563 (committed solution to codebase; need to verify vulnerability no longer exists)
  • 95739714
  • 99332614
  • 97313189
  • 98492231
Roberto is working on this project.

Smartcard Single Sign On

Awaiting developer.

Specialties

Mental Health

Seems to be a very large demand for this.
Awaiting Developer to fully analyze and implement this.
Active development of features needed by a Behavioral Health practice
  • Semi automated billing feature that fills portions of the fee sheet by selecting appointment category.
  • When patient is checked out billing is automatically entered based on appointment
  • Supervisor can be alerted that the documentation is ready for review.
  • Patients can be checked out at the eSigning of the encounter
  • Interactive Complexity: If selected will be auto entered into the fee sheet
  • New PDF templating engine that enables in-browser editing of document
  • Auto upload of documents into patient record via cron job
  • And many more features
https://omp.openmedpractice.com/dev/mindfulemr4
Looking for additional sponsors

Testing

Manual Tests

In order to verify that code changes pass certification tests, contributors must execute the relevant test cases via the test mapping document. This document is currently being built up (project page: http://open-emr.org/wiki/index.php/Manual_Tests) and will live in openemr/Tests/certification_tests.md.

Note that unit tests are being introduced in the code base to cover the more fine-grained functionality.

Unit Testing

Unit tests are being introduced per http://open-emr.org/wiki/index.php?title=Modernization_Roadmap#Codebase_Refactor

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 Bootstrap 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.
  • See below Frame Removal project.

Frame Removal

Remove frames (ie. convert to iframe).
  • This is currently in the codebase (as of OpenEMR 5.0.0)
  • Can turn on/off the tabs layout at Adminstration->Appearance->Tabs Layout Style
TODO:
  1. Use the json structure to also build the left_nav menu.
  2. Finish the support for storing the menu in the database:
    • Could use the json, which could store the json in the database in a TEXT field, which would allow maintaining history of changes and supporting completely different menu structures for different user types. And could also have a gui editor that simply reads and writes to the json.
    • For the menu editor gui, could store the elements (title, id, paths) in the lists engine.
    • There is also some database code that could be used/leveraged:
MD Support Suggested:
  1. Create a menu.inc.php which will provide a common php array to left_nav and the default menu handler. The array should contain merged information from the master list (found at the top of left_nav) and the json used by Kevin - as a php array.
  2. Add keys from common array into a standard list that can be modified by local administrators.
  3. Modify left_nav to map the common array into master list to ensure no impact on rest of left_nav code. Since left_nav has lot of complex logic, it could have the standard mapping except possibly using the list.title for menu text.
  4. Default menu will be created using the order and the active status from the list. If a site wants to add 'Favorites' as a collection of menu items, they will have full control. We should also strongly look at using the notes field to allow control over menu actions - e.g. acl groups, post parameters etc.
  5. Zend has a very capable menu class. Once the new menu behavior is stable, we should look at that as a long term solution.
The community is currently working on this.

Centralize and organize all front-end assets

http://open-emr.org/wiki/index.php/Bower
The community is currently working on this.

Migrate the legacy smarty code from 2.x to 3.x

Awaiting developer.

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 was working on this; this project has gone stale.