Difference between revisions of "Active Projects"
From OpenEMR Project Wiki
Bradymiller (talk | contribs) |
Bradymiller (talk | contribs) |
||
Line 121: | Line 121: | ||
:''Awaiting Developer to fully analyze and implement this.'' | :''Awaiting Developer to fully analyze and implement this.'' | ||
=== Integrate RXNorm | === Integrate RXNorm === | ||
:''Awaiting Developer to fully analyze and implement this.'' | :''Awaiting Developer to fully analyze and implement this.'' |
Revision as of 23:02, 7 February 2012
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.
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.
- Awaiting a Developer to fix this bug.
Recurring appointment bugs
- This problem is discussed in this forum thread and this forum thread.
- Bug described in good detail by Gayll in this bug tracker item: http://sourceforge.net/tracker/?func=detail&aid=2963714&group_id=60081&atid=493001
- Awaiting a Developer to fix this bug.
Clinical Decision Rules (CDR) Engine
Integrate Plans into the Admin GUI
- 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).
- 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.
Provider bug fix for per-provider reporting
- This is fully discussed at Description_AMC#Patient.28s.29_selection and Description_AMC#Potential_Issues (Issue #1).
- Also need to ensure then the encounters are getting properly populated with the practitioner, so need to fix the bug described here: http://sourceforge.net/projects/openemr/forums/forum/202505/topic/4741479
- Awaiting Developer to fix this bug.
Improve Performance
- A page tracking this project can be found at CDR Performance.
- Awaiting Further Testing/Reporting.
Diagnostic Coding
Integrating ICD10
- See ICD10 Diagnostic Codes Development for details.
- Awaiting Developer to fully analyze and implement this.
Integrating SNOMED
- See SNOMED Diagnostic Codes Development for details.
- Awaiting Developer to fully analyze and implement this.
Integrating DSMIV
- See DSMIV Diagnostic Codes Development for details.
- Awaiting Developer to fully analyze and implement this.
Documentation
API
- Document the SOAP APIs for the third party portals.
Access Controls
- Finish the Access Controls Listing page.
Insurance Eligibility Check
- Finish the Insurance Eligibility Check page
Lists
- Finish the OpenEMR Lists page.
Settings
- Finish the OpenEMR Settings page.
Forms
Datafield Max Length Bug
- Currently many fields in the Layouts engine (includes the LBF forms) are validated to not go over a set length. Plan to have this max length be dependent on the underlying mysql field and/or make more manual and have it set in the max_length setting for each element in the layout editor(then, the admin will be responsible for ensuring the max_length is consistent with the underlying sql field. This is discussed in this forum: http://sourceforge.net/projects/openemr/forums/forum/202505/topic/4775993
- Awaiting developer to implement this.
Internationalization
Date formatting
- Still work to do in order to support date formats across multiple languages. Here's the forum thread discussing this.
- Awaiting a Analyzer to figure out a good plan for 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. ADD 'xla' and 'xlt' to the constant collection script
- 2. 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 this.
Medications
Integrate medications and prescriptions
- Awaiting Developer to fully analyze and implement this.
Integrate RXNorm
- Awaiting Developer to fully analyze and implement this.
Miscellaneous
Assigned Provider ID and Referring Provider ID conflict bug
- 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:
- providerID
- referrer
- 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.
- A grep (grep is a search method) for referrerID in the codebase showed it really isn't used anywhere.
- A grep for providerID in the codebase pulls out a lot of stuff:
/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']) ));
- 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.
- Proposal (these are just some quick thoughts to start discussion on implementing a solution):
- Create a new 'referrer_providerID' sql column
- Fix codebase for referral code to use this
- 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.
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
- Ask experts for list of needed feature
- Awaiting Developer to fully analyze and implement this.