#----------------------------------------------------#
#                                                    #
#  Navigator 2.1.6                                   #
#  2013-2017, Laurel Bridge Software                #
#                                                    #
#  Version History                                   #
#                                                    #
#----------------------------------------------------#


Changes in 2.1.6 (2017-03-30):

 - An indicator is now displayed next to the ID of a Study Move Request that is "linked" to another Study Move Request.


 - Fixed a problem where the custom matching script ignored the results of the GUI-based conditions for choosing a Study Rule.  This meant that the conditions might not choose the rule but the script would choose the rule.  This behavior has been corrected.

NOTE that this may cause different behavior depending on your Navigator configuration.  Contact Laurel Bridge Software for assistance if you have questions.


 - Fixed a problem where Navigator's behavior was uncertain when "number to get" was not -1.
 - Fixed a problem where the servers appeared to be offline after restarting priors processing.
 - Added a button to the Device's tab to initiate the DICOM ping test for all devices.
 - Fixed a problem where the Calling IP Address was being ignored in C-Echo-Requests.
 - Fixed a problem where the Study Move Request jobs Status was not being correctly color-coded in Internet Explorer.




===============================================================================
Changes in 2.1.5 (2017-02-27):

 - A new sample script was added to scripts/match_conditions to demonstrate selecting a study rule if the scheduled study date is less than a fixed number of days in the future. This can be used to select between a high and a low priority study rule, so that pre-fetching for studies further in the future happens at a lower priority than nearby studies.


 - The defaults for various DICOM query and move related timeout settings have been changed to more appropriate values. In certain cases previously, a C-Move operation might hang forever if the source device left the DICOM association open but never returned even a pending C-Move-Response message.

Certain settings can be changed by modifying the application configuration file
(/cfg/apps/defaults/Navigator).
The value of query-timeout-seconds (from the General-Settings configuration) is stored in the
configuration attribute java_lib/DSS/default_session_cfg/query_timeout_seconds.

For the following attributes:

java_lib/DCS/default_session_cfg/pdu_read_timeout_seconds
java_lib/DCS/default_session_cfg/pdu_write_timeout_seconds
java_lib/DCS/default_session_cfg/receive_dimse_timeout_seconds
java_lib/DSS/default_session_cfg/progress_timeout_seconds

If the value read from the configuration for any of these is the default
value of -1 (meaning wait forever), the value will be changed to the value
of query-timeout-seconds.

If the value read from the configuration file for the attribute:
   java_lib/DSS/default_session_cfg/max_returned_results
is any number less than or equal to 100, the value will be changed to 5000.




 - Navigator now provides support for multiple priorities for both Worklist Item Jobs and Study Move Request Jobs. In the 2.1.5 release, jobs can have one of 3 priorities. Numerically, priority can be 0, 1 or 2, 0 being the highest priority and 2 being the lowest.

The priority for a Worklist Item Job determines the order in which it will execute in the presence of other jobs. A Worklist Item Job gets its priority from the Study Rule that it has matched, if any. The Study Rule create/edit pages now allow the selection of priority. A Study Rule might be created that matches emergency department studies. That Study Rule could have a priority of HIGH, where other rules select MEDIUM or LOW. When an order matches the emergency Study Rule, queries and study moves relating to that order will run before lower priority operations.

When a Worklist Item Job runs, it queries source devices and creates 0 or more Study Move Request Jobs. By default the created Study Move Request Jobs will inherit the priority of the Worklist Item Job that created them. A custom result list filter script might choose to modify the priority of various Worklist Item Jobs. For example, a Study Rule might specify that corresponding Worklist Item and Study Move Request Jobs run at MEDIUM priority; a custom script might examine the modality or study-description field from a selected prior exam and change the priority to LOW for exams that are expected to be very large.

In addition to job priorities, the order of execution of Worklist Item and Study Move Request Jobs is affected by the max-threads setting for a given device. In the Configuration -> Devices -> edit/create pages there is a new setting called "max threads". For Worklist Item Jobs, the maximum allowed number of concurrently running jobs that are querying a particular source device is determined by that device's max-threads setting. For Study Move Request Jobs, a job will only be eligible to run if both the source and destination devices have not had their max-threads count exceeded by other running jobs.  The number-of-threads setting on the Configuration -> General Settings page determines the number of threads that will be available to run eligible Worklist Item Job and Study Move Request Jobs. Each of the two job types has its own set of priority queues and its own thread pool.

A job will only be eligible to run if there are no higher priority jobs that are eligible, and if the max-threads settings of devices that are used by that job have not been exceeded.




 - The web UI for the Study Move Request table view will now display the C-Move sub-operation counters while a Move operation is in progress. The fields that are returned by intermediate C-Move-Response messages (number of completed/remaining/failed/warning sub-operations) will be displayed as the job progresses. This can be valuable to monitor progress of very large or very slow study moves. 




 - The "remove duplicate accession number" filtering stage for the prior study relevancy process now runs before the list of potential studies to fetch has been sorted by study-date in the newest to oldest order. A problem existed when multiple source devices returned the same study. In certain cases, the preferred source was not selected resulting in unneeded study moves.




 - The Worklist Item table display on the web UI now will display a status of COMPLETED_PARTIAL for worklist items that have completed with some successful study move requests and some failed study move requests.
Since status is a sortable or searchable field it is now easy to isolate partially failed worklist item jobs so they may be deleted or retried.




 - Worklist Item Jobs and Study Move Request Jobs are now loaded from the DB at system initialization time.
Previously, this happened only after the "start" button was clicked (or after an auto-start if that was configured in the general settings).

Also, all jobs are loaded from the DB and re-queued in priority order prior to starting of the Spooler thread pools which will execute them. This may result in a significant performance improvement during startup if the number of jobs is large.




 - A script can now be configured to manipulate the C-Find-Request messages that is sent to a Modality Worklist server.

In the Configuration -> Worklist Readers create/edit pages you can now select a script for both web/HL7 and MWL worklist reader types. For an HL7 reader, the script is used to manipulate the worklist item that will result from a received HL7 message. For a MWL reader, the script is used to manipulate the C-Find-Request that will be sent to the configured modality worklist server devices. An example script is provided.




 - Navigator now displays a small blinking icon if it cannot confirm that the HL7 Service is running.
 - Fixed a problem where the devices were not appearing correctly when creating a Study Rule or Worklist Reader from scratch.


 - UI enhancements


===============================================================================
Changes in 2.1.4 (2016-12-09):

 - The WorklistItemJob and StudyMoveRequestJob classes now have 2 numeric and 2 string user definable variables that are static - that is global to all instances of those job types. Custom scripts might make use of these data items to provide ways for jobs to interact with one another. Thread safe accessors for get/set and atomic numeric adjust are available. Contact Laurel Bridge support for information regarding this.


 - UI enhancements
 - The script Example_CreateNewWorklistItem.groovy has been updated to show how a single HL7 trigger event (e.g. ORM message) can be cloned into multiple events, allowing different studyRules to be applied to a single order.


 - All string values that are interpolated into HL7 templates via the SimpleHL7Sender class are now trimmed of all leading and trailing whitespace (java.lang.String.trim()). If previous logic expected DICOM pad characters on odd length fields for example, adjustments may need to be made.


 - To enable certain behavior where custom scripts might affect the execution order of WorklistItem or StudyMoveRequest Jobs, the logic of how custom on-job-start and on-job-stop scripts are invoked has been changed.
On-start scripts for both types of jobs will now be invoked when the job status is changed to either RUNNING or QUEUED.
On-stop scripts for both types of jobs will now be invoked when the job status is changed to either COMPLETED, FAILED or WAITING.
This behavior is subject to change in future releases. Contact Laurel Bridge technical support if you plan to implement any of these scripts.


 - Text that describes which priors were or were not selected and why has been improved.
 - The utility to change the SQL credentials has been modified in case you are in a clustered environment and do not have SQLCMD.EXE on the specific machine - you can now uncheck a box if you don't want the utility to verify that the new credentials work.


 - Per-Job log file names now include both accession-number and study-instance-uid.
This addresses an issue where systems that are HL7 triggered, and do not get a study-instance-uid in the order may not generate unique file names for the per-worklist-item-job log files. In some cases, this was fixed by copying the accession-number into the study-instance-uid in an HL7 input processing script.


 - Sample scripts were renamed to all start with Example_
 - Installer has been modified so that its utilities now have permissions set to Run as Administrator.
 - The option to perform a SERIES level query for each result returned by the initial STUDY level query has been removed from the StudyRule configuration page.
A new option has been added to the advanced options section of the Device configuration page.
By selecting the "Query for Series Information" option a series level query will be performed for each study level result returned by this device. The modality fields contained in each series query response will be combined into a modalities-in-study attribute in the study response. This feature allows study rule logic to filter potential prior studies based on the modalities-in-study attribute even if one of the source PACS devices does not support that attribute.




===============================================================================
Changes in 2.1.2 (2016-08-11):

 - Code in the WorklistQueryService has been refactored to provide significantly increased performance when the number of items retrieved from each poll of a modality worklist server becomes large (1000's or more)


 - The script scripts/result_list_processing/multi_part_study_select.groovy performs several prior filtering operations.
The most significant of these is sorting the results from a previous application of the BodyPartResultListFilter into graded categories and selecting a defined number of priors from each grade.


 - The script scripts/result_list_processing/skip_studies_with_specific_terms_in_description can be used along with a configuration file in the form of scripts/result_list_processing/terms_to_skip.cfg to reject priors that contain certain keywords in the study-description


 - Custom scripts can now access com.LaurelBridge.Navigator.SimpleHL7Sender to generate and send HL7 messages to other applications or devices.
Contact Laurel Bridge support for more information about generating HL7 messages as part of a custom workflow configuration.



 - Users can now view the web server log files through the UI.
 - Navigator now installs the correct Java as one of its components.
 - Users can now set the labels to be displayed for the MWL and SMR User specific tags.
 - Users can now run custom scripts when a Worklist Item Job or a Study Move Request Job starts or stops.


 - Navigator now supports remote license activation and has a utility to activate licenses.
 - GUI enhancements.
 - A member variable: relevance_quality has been added to the PriorStudyInfo object which is passed to custom result list filters for each prior study under consideration. The higher the number, the greater the relevance of a prior study. Filters and custom scripts can communicate more information with this. In particular, the enhanced BodyPartResultListFilter sets this value to 1 for an adjacent body part match, and to 2 for a direct body part match.
The example custom result list filter script "select_studies_based_on_relevance_quality.groovy" uses this data. 


 - To support more advanced prior study relevancy filtering, the BodyPartResultListFilter (accesed via the study-rules config dialog) has been extended to allow linking of body-part synonym groups.

For example, with an updated configuration file like this:

[ LUMBAR ]
eq = LUMBAR
eq = L-SPine 
eq = LSPINE
include = THORACIC

[ THORACIC ]
eq = T-SPINE
eq = THORACIC  
eq = TSPINE
include = CERVICAL
include = LUMBAR

[ CERVICAL ]
eq = CERVICAL
eq = C-SPINE
eq = CSPINE
include = THORACIC



The filter can now be configured to fetch exams from adjacent body parts. For example, for a new exam for the lower back (e.q. L-SPINE) the customer may want both LUMBAR related exams as well as middle-back (THORACIC) related exams to be fetched. For a CERVICAL exam, perhaps CERVICAL and again THORACIC exams may be considered relevant. For a THORACIC exam, with this configuration, all three groups of back related description keywords would indicate relevancy.

If the "include" attribute is not present in the config file, the filter behaves as in earlier releases.


 - The Navigator Service Manager now logs to the Windows Event Log when it is used to start or stop the Navigator service or its HL7 service.
The Windows Event Log can be found via Control Panel->Administrative Tools->Event Viewer.  The logs from Navigator are found under Windows Logs->Application.




===============================================================================
Changes in 2.1.1 (2016-05-03):

 - UI enhancements.


===============================================================================
Changes in 2.1.0 (2016-04-22):

 - There is a configuration attribute: 
apps/defaults/Navigator/java_app/Navigator/enable_study_move_request_job_linking

It is true by default (if not present).

If set to true, study-move-request jobs will check for equivalent jobs that are running or have completed before running. This can reduce the duplication of c-move requests for a particular study from the same source to the same destination.

Navigator remembers what StudyMoveRequests have been completed for as long as it remembers the related WorklistItems. You may want to consider adjusting the retention period in the WorklistReader configuration to take advantage of this feature.

Note also that this logic does not take into account the fact that the destination device may have deleted a previously moved study.


 - On the WorklistReader configuration screen multiple Modality Worklist devices (marked with the "Trigger" attribute in the Device configuration) can now be selected for a single WorklistReader. This allows orders from a collection of MWL servers to be combined before applying the StudyRule logic.


 - Odd length patient names that have one or more trailing spaces after the first name (and do not contain a middle name or suffix) are properly trimmed by the special functions that generate fuzzy match queries.
For example, the name "Doe^Joe " would have previously been sent as "Doe^Joe *" if the Last-Name-First-Four-Chars-In-First-Name function was selected. Now, the query string will be "Doe^Joe*".


 - Two significant changes to the policy for deleting completed WorklistItemJobs have been implemented:

1) The retention period for COMPLETED jobs can now be configured in days and hours. Previously the period was configured only in days. These parameters are entered in the WorklistReader configuration page.

2) Both WorklistItemJobs triggered by HL7/Web messages *and* Modality Worklist queries can now be retained for a configurable period after they reach the COMPLETED state. Previously MWL triggered jobs that were COMPLETED would be deleted as soon as they were no longer found on the worklist.


 - This release of Navigator requires that Java JRE or JDK  version 1.8.72 or later to be installed. 

The Tomcat application server has been upgraded to version 7.

LaurelBridge components DCF and HL7 have been upgraded to latest released version.

Other components used internally by Navigator have also been updated.


 - HL7 utilities now include a way to receive test HL7 messages, and other HL7 utilities are now provided.


 - The mechanism that checks for new versions of software has been updated to use HTTPS.


===============================================================================
Changes in 2.0.3 (2015-04-17):

 - Fixed problem introduced in v 2.0.2 where the study-date range for the Modality Worklist Query was being computed once at startup and then reused forever.
We now recompute the date range just before each query.




===============================================================================
Changes in 2.0.2 (2015-04-14):

 - The default body part configuration file now includes Mammography as a part.
 - The Max-Days-To-Keep-Completed-Jobs setting for Worklist Readers was lowered from 7 to 2, since testing in the field showed that the job list could get annoyingly long with 7 days of jobs in it.


 - When manually adding a Worklist Item Job, a user can now specify "ALL" for the Requested Procedure Description to skip the body part matching and filtering.


 - The body part configuration files will be be automatically reloaded if they are changed - you no longer need to restart Navigator.


 - Added new special function for Patient Name to match last name only.
 - Users can now select a range of worklist item via shift-clicking the checkboxes.
 - A user can now choose the name for Navigator's database and use a non-administrator user to access it.


 - The default value for max_job_retries was changed from 20 to 3.  20 was too high for initial configuration.




===============================================================================
Changes in 2.0.1 (2014-11-04):

 - Added a configuration option (in Study Rule) to let users decide what do if a source doesn't respond to the C-Find-RQ.


 - Fixed issue where aborts weren't reducing the counter of Active Associations.
 - Users can now select special functions for "fuzzy matching" of certain tags in the Query Element matching phase of a Study Rule.


 - Users can search the worklist entries.  Not all of the fields are searched, and date fields should be searched using DICOM's DT format, not as the dates are actually displayed.


 - Default polling time is now 60 seconds.
 - Users at User level and Admin level can now specify the parameters of a study whose priors should be moved.  The manual entry form is accessible on the main Worklist Entries page.


 - Admin users can now search the Audit Records.
 - Administrative users can now download the Audit Records into a CSV file.
 - Study Instance UID, Study Date, and Retrieve AE Title are now shown in the appropriate select lists for Study Rules.


 - Users can now filter Study Move Requests by status.


===============================================================================
Changes in 2.0.0 (2014-07-25):

 - Fixed problem with OEM logos not showing up well.  Note that OEM logos should not have transparent portions or should show up well against a white background.


 - Navigator can be configured to load an object that implements the MPIClient interface. This interface is used during the processing of Worklist Item Jobs. It is called once at the start of processing to perform any desired query for the job (perhaps to obtain a list of patient-id/location pairs for cross referencing). It is called again once before each query is sent to a source PACS to apply any translation that may have been discovered in the first phase. Contact Laurel Bridge for more information about this capability.


 - The GUI display for StudyMoveRequest jobs now shows the modality and study-description.
 - The StudyRule configuration GUI now allows for much more control in describing matching criterion for a potential Prior study that has been returned from a source query. This is now similar to how the initial rule matching configuration is done.


 - The General Configuration edit screen now allows the operator to enter values for max-job-retries and seconds-between-job-retries. The values are used for both the C-Find and C-Move operations.


 - Starting the navigator from the Web UI when there are large numbers of jobs in the DB is now significantly faster. 


 - The StudyRule configuration edit GUI now supports editing the content of the C-Find-Request sent to the sources. There are default values if none are specified. Scripts can still be used to override the contents of these messages. MPIClient plugins can also modify the C-Find messages on a per-source basis.


 - Improved the filtering GUI for status.
 - Added a utility to help users change the HL7 logging level and other configuration options.
 - When selecting a tag in a Study Rule, commonly used tags can be selected from a drop-down list.  Users can also specify custom tags if those are desired.


 - GUI enhancements


===============================================================================
Changes in 1.1.4 (2014-05-08):

 - The result-list custom processing script can indicate that certain studies can be moved to a subset of the destination devices that are configured for a study-rule.
See the example script: result_list_filter_with_per_destination_logic.groovy



 - The body part configuration file can now be edited through the script GUI.
 - GUI improvements
 - User changes to the data will be detected, and the user will be asked to confirm if those changes would be lost by changing pages.


 - The following attributes can be added to the Navigator
application configuration under the java_app/Navigator
group:

mwl_user001_tag = 0777,0001
mwl_user002_tag = 0777,0002
mwl_user003_tag = 0777,0003
mwl_user004_tag = 0777,0004
mwl_user005_tag = 0040,0100.0008,0060

These indicate the DICOM tag that will be used to populate the corresponding user001 .. user005 fields in the WorklistItem DB object.


 - GUI improvements


===============================================================================
Changes in 1.1.2 (2014-04-24):

 - Users can now set a value above which log files will not be parsed - this lets them see if there are errors in smaller files but not take a lot of time with bigger files.


 - Log Parsing is now turned off by default, since the log files can get big and it takes time to parse them.  A user can still choose to turn the parsing on.


 - Updated user manual.
 - A GUI is now available from the Start menu to edit the HL7 Configuration template file.
 - The body party configuration file will be reloaded when Navigator's priors processing is restarted.


===============================================================================
Changes in 1.1.1 (2014-03-19):

 - Fixed bug in JavaScript code.


===============================================================================
Changes in 1.1.0 (2014-03-17):

 - There are now Previous and Next links to log files with similar names.
 - GUI modifications
 - Administrative users can now set how much time Navigator can be inactive before the user is automatically logged out.  The maximum duration is 3600 seconds (1 hour).


 - To aid in using Navigator, the screens have been modified so that the dashboard will remain on top and the rest of the page can be scrolled.


 - GUI enhancements
 - Added the user viewonly - he can monitor Navigator's progress but cannot change anything.
 - GUI enhancements


===============================================================================
Changes in 1.0.7 (2014-01-15):

 - Clicking the Stop button from the main Navigator screen will now stop running worklist-item-jobs and study-move-request jobs more promptly. The stop process will still wait for any active DICOM associations to be completed.


 - Gui enhancements
 - The service names for Navigator and HL7 now start with "Navigator" - this makes them easier to find on the Control Panel's Services menu.


 - The problem was JavaScript code that FireFox didn't recognize - the code has been modified to use code that is not browser-specific.




===============================================================================
Changes in 1.0.6 (2013-12-19):

 - HL7 extractor template may need to populate procedureDescription element.
 - Modalities-In-Study is now included in study level query by default.
It will be populated with the value from the Modality element from the MWL C-Find-Response (or the equivalent HL7 message). If you don't want to include this tag - or you don't want a match-value in it, you can fix the query up in the custom query processing script.
Additionally, in the Study-Rule configuration screen,
there is a check-box to select whether the second level of queries at the series level should be performed.


 - Modalities-In-Study is now included in study level query by default.
It will be populated with the value from the Modality element from the MWL C-Find-Response (or the equivalent HL7 message). If you don't want to include this tag - or you don't want a match-value in it, you can fix the query up in the custom query processing script.


 - Enhanced the UI for creating and viewing Navigator users.
 - Custom scripts that are defined within Study-Rules will log output to the per job log files if the debug flag df_DISPLAY_SCRIPT_OUTPUT is set on the java_app/Navigator component. This is enabled for all but the "show-warnings" short-cut log settings in the GUI.


 - Both study and series level query results are processed to remove items with the same Study-Instance-UID. This happens prior to any date sorting, date filtering or total count filtering.

The individual result filtering happens before the duplicates are deleted. That means you can still select a particular Series level C-Find-Response based on modality for instance.

This case may be revisited if we decide to support C-Move's at the SERIES level.



 - Fixed issue where some value was needed for the storage-group-name field in a Device configuration. Two devices with no name were incorrectly considered to be in the same storage-group which meant a c-move between them would be suppressed.


 - If the source and destination device are the same, a StudyMoveRequestJob will still be created, but when it is run no C-Move-Request will be issued.  If the extended-data-2 (displayed as Storage-Group-Name in the Device configuration screen) for the source and destination are the same (e.g. for two devices that appear to be different, but that share the same backing DB) no C-Move will be issued.




===============================================================================
Changes in 1.0.5 (2013-11-20):

 - Display additional statistics
 - Pagination of Worklist Entries to reduce page size
 - GUI enhancements
 - Added configurable limit to DICOM worklist item query
 - Added custom attributes for DICOM devices.


===============================================================================
Changes in 1.0.0 (2013-10-17):

 - Initial Release