CKM Release 1.16.0

CKM Release 1.16.0

Date: February 2021

New & Improved Functionality

Key

Summary

Description

Key

Summary

Description

CKM-374

Ability to directly open the archetypes after bulk-upload

When an editor bulk-uploads archetypes to CKM, the uploaded archetypes should directly be accessible afterwards. Therefore, after completion of the bulk-upload, the report of the successfully updated/imported archetypes now supports opening the archetypes directly from this report.

CKM-854

Reactivation of review rounds directly by editors (if e.g. closed accidentally)

Editors can now reactivate a recently closed Review Round directly from CKM. Reactivating a review round re-enables review submission by reviewers. This is occasionally useful if a review round was closed accidentally or further reviews are expected.

Reactivating a review round was previously only possibly by contacting Ocean. Even now, reactivating a review round should remain an exception: On closing a review round, all active review invitations have expired, and need to be reinstated on reactivating the review round.

To reactivate a review round, right-click on a review round in the Review Round Overview and select Reactivate Review Round.

CKM-1099

DV_SCALE support in archetypes

Add support for the new data type DV_SCALE as per https://openehr.atlassian.net/browse/SPECRM-19 for archetypes uploaded to CKM.

The data type is nearly identical to DV_ORDINAL but enables unconventional scales such as the BORG CR10 scale which allows non-integer values, e.g.

0.5 Very Very Slight (Just Noticeable)

DV_SCALE may replace DV_ORDINAL over time since it offers a superset of functionality. The most important difference is that REAL numbers are allowed and not only INTEGER. See https://specifications.openehr.org/releases/RM/latest/data_types.html#_dv_scale_class for details on DV_SCALE.

To support DV_SCALE in CKM archetypes, changes are required in the parsing, the canonical hash calculation, various display scripts, the comparison report, validation reporting, the new Data points reports, etc.

Also cp. CKM-1321: “DV_SCALE support in Templates”.

CKM-1209

Template Upload: Ability to download all current archetypes with warnings or errors to support editors in updating the template locally

On uploading a new or updated template to CKM: If there are archetypes with errors or warnings (such a that the canonical hash is not found or refers to an older revision of an archetype), it is now possible to conveniently download all available archetypes with warnings or errors in one zip-file. This is so that editors can more easily update the template with the latest or latest published archetypes.

For this purpose, it is possible to download either the latest published (i.e. stable whenever available) revisions or the latest (i.e. potentially unstable) revisions of these archetypes.

CKM-1238

Comprehensive Display of FHIR®Value Sets provided by an external Terminology Server and referenced in CKM archetypes in CKM

In CKM 1.15.0, we introduced support to connect to an external Terminology Server with a FHIR® API to display FHIR® Value Sets inline in the various archetype and template displays ( CKM-1216 Resolved - Connect to External Terminology Server to show value sets inline in the various archetype and template displays).

In addition to this, we now introduce a more comprehensive display of FHIR® Value Sets that have been registered with an external Terminology Server and are referenced in CKM archetypes.

In the display of an archetype in CKM, whenever an element links to a value set of the (configurable) external terminology server, a button will now displayed to open the value set in a new CKM tab. There, the Value Set is presented in more detail than this is possible inline.

Example DV_CODED_TEXT constraint_bindings in an archetype:

constraint_bindings = <
["SNOMED-CT"] = <
items = <
["ac0001"] = <terminology://fhir.hl7.org/ValueSet/$expand?url=http://hl7.org/fhir/vs/snomed-example-vs>
["ac0002"] = <terminology://fhir.hl7.org/ValueSet/$expand?url=http://hl7.org/fhir/ValueSet/example-hierarchical>
["ac0003"] = terminology://fhir.hl7.org/ValueSet/example-hierarchical>
["ac0004"] = terminology://fhir.hl7.org/ValueSet/SARS-CoV-2-symptoms/$expand>

>
>
>

Example Rule in an oet template:

<Rule path="/data[at0001]/events[at0002]/state[at0014]/items[at0016]">
<constraint xsi:type="textConstraint">
<termQueryId terminologyID="//fhir.hl7.org/ValueSet" queryName="$expand?url=http://hl7.org/fhir/vs/snomed-example-vs" />
</constraint>
</Rule>

CKM can only display information that is provided by the terminology server for the value set in its expanded form and using “includeDefinition=true”. Not all investigated Terminology Servers currently honour this parameter of the ValueSet $expand operation, cp. https://www.hl7.org/fhir/valueset-operation-expand.html

Customers that have access to a terminology server FHIR® API and would like to configure this terminology server for use with CKM, please contact Ocean.

CKM-1239

Related Resources tab of a template: Differentiate between directly and indirectly embedded templates and finetune display

The related resources view tab of a template lists all directly and indirectly embedded templates. However no indication is given if the embedding is only indirect. This is useful especially when updating a cascade of embedded templates:

Assume that Template C is embedded in Template B which in turn is embedded in Template A. If Template C is now updated, then Template B and - subsequently - Template A must be updated as well for the change to be picked up in the next revision of Template A.

If CKM detects that a template has an embedded template which itself has an embedded template, CKM will now split the embedded templates into directly and indirectly embedded templates and present them under different headings on the Related Resources Tab.

CKM-1258

Archetype Data Points Report for all or selected projects / with certain states

New report available from the Reports/Archetype Data Points Menu: Report on the frequency of ELEMENT data types in archetypes.

Can report on data points in all or selected subdomains/projects as well as for archetypes with certain states (e.g. only PUBLISHED archetypes).

CKM-1261

FHIR® Value Sets - If a 'designation' exists without a specific use for the requested language, display this as the main display and then the normal display value in brackets

This is only relevant for CKMs where a terminology server with a FHIR® API has been configured for use by CKM.

If a FHIR Value Set is referenced by an archetype or template in CKM and this value set contains designations for the various concepts without a specific use for the requested language, display this and then the normal display value in brackets when displaying this inline (when displaying an archetype or template).

For displaying inline this is useful because otherwise a Snomed value set that has been translated for, say, German by providing the German translation as a 'designation' would just display the English Snomed codes.

Example Value Set extract:

   <system value="http://snomed.info/sct" />    <concept>       <code value="21522001" />       <display value="Abdominal pain (finding)" />       <designation>           <language value="de-DE" />           <value value="Bauchschmerzen" />      </designation>    </concept>  

Whenever there is a designation in the requested main language (without region/variant), this is used as main inline display by CKM. The original display value from the value set is added afterwards in brackets.

Assumptions/restrictions:

  • The value set must carry the designation in the expansion (not just in the compose section). Terminology servers such as Ontoserver may enable this via “includeDesignations=true”.

  • For archetypes: this is relevant for the current display language of the archetype

  • For (oet) templates: The template must be in the server’s resource display language

CKM-1273

Improve warning on missing parent archetype when publishing a specialised archetype

On publishing a specialised archetype:

If the parent archetype is missing, the WRANF error message should be clearer, and explain that the v0 major version is updated to v1 when the parent archetype is published.

On publishing a specialised archetype, the parent (assuming it is already published) is not updated in the ADL except as a manual process.
Example:

  1. CLUSTER.tnm is created as v0.

  2. CLUSTER.tnm-pathological is created as a specialisation v0.

  3. The content is reviewed.

  4. CLUSTER.tnm is published. Now v1

  5. CLUSTER.tnm-pathological is now published as well BUT the ADL may still contain a reference to the unpublished v0 parent in its specialise clause

In this case, a WRANF error with a warning like this should be displayed:

This archetype specialises the parent archetype {0}, which cannot be found in CKM. Please note that on initial publication of the parent archetype, its archetype id changes from .v0 to .v1. This may need to be updated in any specialised archetypes as well.

CKM-1282

Remove number of different languages spoken from the community dashboard widget

Remove number of different languages spoken by users from the community dashboard widget. This is not very informative and could be misunderstood as the number of distinct translation languages for archetypes.

CKM-1283

Report on number of archetype languages as dashboard widget

Report on the number of translation languages for archetypes on the Dashboard as part of the “Our CKM Community in Action” widget.

Number of active archetypes → Number of different translation languages in these archetypes.

When clicking on this, open the detailed archetype translation details report.

CKM-1285

Create new user via REST API

Enable user creation via CKM’s REST API.

The Create User API operation accepts the following data elements:

  • username

  • password

  • firstName

  • lastName

  • emailAddress

  • organization

  • availableAsReviewer

  • countryCode

  • availableAsTranslator

  • secondaryEmail

  • hasToActivate

A successful request of this operation creates the CKM user and may activate the user account immediately, depending on hasToActivate. A welcome email to the new user using the email address provided in the request will be sent as part of the successful request.

An error response will be returned when the username or email address is the same for an existing user. Likewise, an error response will be returned if a user with a matching username who previously unregistered from CKM has contributed to CKM for example in review rounds or discussions. In this case, follow the process in the CKM user interface. An error response will also be returned if request data is invalid or causes integrity issues within CKM.

When an initial password is not provided in the Create User request, a password will be auto generated by CKM and the user will be required to use the Forgotten Password functionality to retrieve (reset) their password.

Administrators that have opted to receive new user notification emails are sent the new user notification email for each new user.

Example call:

curl -X POST "https://[ckm-domain]/ckm/rest/v1/users” -H "accept: application/xml" -H "Content-Type: application/json" -d "{ “username: “jane.doe“, "firstname": "Jane", "lastname": "Doe", “organisation”: “…” “available-as-reviewer”: ”true”, “email”: “…@…“, “country”: “CA”}"

CKM-1292

Add a configurable style tag to all ckm generated emails to support limited styling of ckm emails

CKM now supports the configuration of some limited CSS styling for emails sent out by CKM.

The following is an example configuration to customize font and font color, link color and style, and the also configurable email-suffix to be displayed in a different colour:

body, div, p, li, ul, span, * {font-family:tahoma,arial,helvetica,sans-serif; color:#555555;} a {color:#567ebc; font-weight:bold;} div.email-suffix, .email-suffix p {color:#A4A4A4; margin-top:15px;}

(The email suffix can also be configured and usually contains information on how to unregister.)

Note that not all email clients support all styling. This is beyond the control of CKM and it is therefore preferable that only simple styling is used for maximum display consistency across email clients.

Customers that would like to configure these styles are asked to contact Ocean with the configuration details.

CKM-1293

Internal: Add/improve sanity checks on creating/updating a review

Add additional internal sanity checks before a review can be submitted to better pick up any accidental problems (and resist malicious attacks):

  • Backend: When updating a review check that the username has not been changed and equals the username of the submitting user.

  • Backend: When creating a review check that the specified username is identical to the username of the submitting user.

  • Frontend: When creating / updating a review check that session username is still identical to the review username. If not a user has used (e.g.) a different tab to sign out and in again as another user or tampered with the current session in some way.

  • Frontend: At various occassions (when resetting the expiration timer that is reset after many server calls) as well as when extending the session via the Field Change Listener used on review: check the username is still identical to the session cookie username; if not: need to expire the session and enable the user to relogin.

CKM-1298

Minor display finetuning of various panels, tabs & windows

This issue includes various minor finetuning for the display of various panels, tabs & windows:

  • Password Reset Panel,

  • Confirmation Code Panel,

  • Data Points Panel,

  • Publication Report Panel,

  • Datatype Explanation popup,

  • Delete Project Confirmation window,

  • Improve Statistics and the generic Review Type icons

CKM-1302

Internal: Improve transaction handling of reverting archetypes, checking out resources and other services

Improve internal transaction handling to avoid some extremely rare circumstances where the following operations may fail to set some relationships (e.g. from a resource to its owning project or incubator):

  • Revert archetype

  • Check out resource

  • Reject resource branch

  • Delete template

  • Import or update template

  • Import or update archetype

  • Creating a reply to a comment

  • Change Request Create, Update, Delete

  • Change Request Note Create, Update, Delete

  • Project and subdomains Create, Update, Delete

  • Release set Create, Update, Delete & revert

Errors would only ever occur if the server fails at the exact time of the operation.

The one example where this is known to have occurred has caused a template no longer to be assigned to a project after updating. (This is easily fixed manually, but should obviously not occur).

CKM-1308

Set default search to AND and various minor display finetuning on the Find Resources tab

Inline with major search engines these days, set the default search to AND (=all words required). Also, various related minor display finetuning on the Find Resources tab, including:

  • font style/color, box widths,

  • add resource type icons,

  • explanatory text in results representation (all words required vs. at least one word required),

  • layout of project/incubators found → in separate (grey) box with white project/incubator icons, font size,

  • include alternative search text buttons (with suggested searches if no result) directly in the blue information box instead underneath

CKM-1311

Internal: Finetune use of async/defer to load the javascript files for faster initial rendering

Internal: Finetune use of async/defer to load the javascript files for faster initial loading and rendering.

CKM-1312

Internal: Support backend user creation with the help of a full name only (no username, no separate first + lastname) and with the possibility to generate a password if none is specified

Internal: Support backend user creation with the help of a full name only (no username, no separate first + lastname) and with the possibility to generate a password if none is specified. Simplifies some backend tasks.

CKM-1319

Add a more general frontend check to determine if the user session has changed/manually expired and if so enable user to relogin

Add a more general CKM frontend check to see if the user session has changed/manually expired and enable the user to relogin by displaying the login dialog.

This is important if the session cookie is deleted for whatever reason (by an addon or manually).

CKM-1321

DV_SCALE support in Templates

The new data type DV_SCALE needs to be supported within templates uploaded to CKM and thus by

  • the OPT generator,

  • the parser,

  • the canonical hash calculator,

  • various display scripts

as used by CKM.

The data type is nearly identical to DV_ORDINAL but enables unconventional scales such as the BORG CR10 scale which allows non-integer values, e.g.

0.5 Very Very Slight (Just Noticeable)

DV_SCALE may replace DV_ORDINAL over time since it offers a superset of functionality. The most important difference is that REAL numbers are allowed and not only INTEGER. See https://specifications.openehr.org/releases/RM/latest/data_types.html#_dv_scale_class for details on DV_SCALE.

CKM-1323

On the Related Resources tab of a template, archetypes of embedded templates should be sorted inline with archetypes directly used in the template

On the Related Resources tab of a template with embedded templates, the archetypes of the embedded template were listed underneath any archetypes that are directly used in the template.

These archetypes from embedded templates should simply be sorted inline with the directly used archetypes, because the other order is hard to understand.

Note that this change in sorting only makes a difference in templates that use embedded templates AND archetypes directly.

CKM-1324

Import Archetypes From Remote: Always display demographic archetypes below EHR archetypes

In the Import Archetypes From Remote Overview of importable archetypes, EHR archetypes should be separated from demographic archetypes, with demographic archetypes sorted underneath.

Currently, most archetypes are sorted per class, but there are DEMOGRAPHIC archetypes mixed in between EHR archetypes.

CKM-1325

Visualisation of "Qualified Real" in DV_QUANTITY: Remove the units from the archetype display completely if there is only one unit and that unit is “1” (and there are no other constraints such as on magnitude or precision)

The current display of the Qualified Real (non-)unit as

Units:

  •  

can only really be understood when you know the details of DV_QUANTITY.

Therefore, remove the units from the display completely if there is only one unit and that unit is “1”.
(This however means that we cannot differentiate between units unconstrained and a single unit of 1 just from the display here.)

CKM-1327

Hide empty protocol attribute in template display also for CARE_ENTRY-level templates

In CKM 1.15.0, CKM-1165: “In Template display: Automatically hide the attribute name (e.g. protocol) if there is nothing underneath (i.e. all elements are constrained out and only unfilled ARCHETYPE_SLOTs)” introduced the ability to automatically hide the attribute name (e.g. protocol) in template displays if there is nothing underneath (i.e. all elements are constrained out and only unfilled ARCHETYPE_SLOTs) for COMPOSITION and SECTION templates.

However, CARE_ENTRY-level templates require additional handling to specifically hide the special case of the two top-level attributes (data and protocol) as well when empty.

CKM-1333

For consistency, Archetype Statistics 'Remote vs Local' Donut Chart should show absolute numbers instead of percentages in the donut itself

For consistency, the Archetype Statistics Remote vs Local Donut Chart should show absolute numbers instead of percentages in the donut itself. On hovering, both is shown in the tooltip.

Available via Reports/Archetype Statistics.

CKM-1336

Internal: Add more convenient way for system admins to clear some database caches

Add system admin ability to clear the xodb object and xodb binary caches of the database system direclty from the frontend as system administrator.

CKM-1337

Internal: Ability to restrict opt regeneration service to the opts of one (oet) template in all revisions

Extend CKM backend services to regenerate operational templates of one (oet) template in all revisions.

Currently, when regenerating the opt cache and assets, we can only invalidate all or nothing.
It is however sometimes very convenient to be able to invalidate/regenerate only for one particular template instead of all and is especially useful when testing changes to the opt generator.

CKM-1338

Display concept name of archetypes in current archetype language (if available) when clicking on the Included/Excluded Buttons for a Slot; improve Slot icons

Display concept name of archetypes in current archetype language when clicking on the Included/Excluded Buttons for a Slot.

Use the actual concept names of the archetypes in the current language of the archetype (where available) and add the archetype id minus the - usually fixed - qualified rm type in brackets,

e.g. Medical Device (device.v1)

Also improve SLOT icons.

CKM-1340

Introduce a slight delay before prefetching additional images/icons (to ensure priorisation of more important requests)

Introduce a slight delay before prefetching additional images/icons. This is to ensure that more important requests are prioritised on initial startup.

CKM-1341

Shorten very long resource display names in context menu and tab title

Shorten very long resource display names in context menu, tab title and in the title of a resource when searching via the Find Resources tab.

Some CKM instances use very long resource names, especially for templates and this can otherwise cause (minor) layout problems.

CKM-1342

Cache User Report to increase loading speed, especially for the "Our CKM community in action" widget on the Dashboard

Especially when the server is very busy or the database is slow for whatever reason, the user report takes long to calculate. This shows as a significant delay on the Dashboard's Our CKM Community in Action widget.

Also, when the server is working normally, this is one of the biggest strains on the server and generally slows down startup.

Therefore, cache this for an hour (per locale) and then recalculate lazily.

CKM-1343

Cache Archetype Statistics to increase loading speed, especially for the "What we've been up to" widget on the Dashboard and the initial Archetype Statistics Report

Especially when the server is very busy or the database is slow for whatever reason, the archetype statics report on the Dashboard’s “What we’ve been up to widget” takes fairly long to calculate.

Also, when the server is working normally, this has previously been one of the biggest strains on the server and generally slows down startup.

Therefore, cache this for a few hours and then recalculate lazily. Also invalidate upon direct changes to the archetypes.

Similiarly, this cache is now used to increase the loading speed of the initial view of the default Archetype Statistics report.

CKM-1349

Add configurable prefix for all ckm generated emails to enable organisations to for example add the organisation name or logo etc. to the top of any CKM email

CKM now supports a configurable prefix for all ckm generated emails. This enables the customer organisation to add for example the organisation name, logo etc. to the top of any email, thus making it potentially more likely that recipients just dismiss the email.

Simple example configuration to display the CKM’s header logo at the top of the email with a little margin:

<div style=
"margin-top: 10px; margin-bottom: 15px;
"> <img src=\\"%{base-url}%/picture?assetname=logo-header
"> </div>

Customers that would like to configure such a prefix, please contact Ocean.

CKM-1351

Search for Projects (via Find Resources) should also yield results from partial matches

Search for Projects (via the normal search on the Find resources tab) should also yield results from partial matches of the project name for sufficiently long search texts.

E.g. searching for "report" will now find a project named "Common reporting".

CKM-1358

Add an instance-wide option to show the review round initiator in Review Round Overview Grids (Editor's review round on Dashboard & Reviews/Review Round Overview) by default

Add an instance-wide option to show the review round initiator in Review Round Overview Grids (Editor's review round on Dashboard & Reviews/Review Round Overview) by default.

This field is already available and can always be shown on demand by clicking on the grid header and selecting the appropriate column, however the requirement is to have this field displayed by default in some CKMs.

Customers that would like this field to be displayed by default, please advice.

CKM-1359

Extend and finetune User Overview List to include more details relevant for selecting reviewers

With a continually increasing number of users, making informed choices when inviting people to review rounds is becoming increasingly difficult.

Therefore, add the following information to the user overview lists:

  • Last login

  • Total completed reviews (including "never invited")

  • Completed reviews last year (included "not invited")

  • Active invitations

Also:

  • Enable grouping in the grid by clicking on the column headers and selecting the grouping.

  • Increase the grid width, space permitting

  • Cache the main “normal” user list and recalculate lazily if less than an hour old, recalculate immediately if > 4 days old. Also invalidate the cache immediately upon certain events (such as e.g. a new user).

  • Add an index for the username for quick access to last login time.

  • Also see “CKM-1365: Add search option to advanced user search tab to only find users/reviewers with a specified minimum login date (and finetune options form)”.

CKM-1362

Minor finetuning of the display for the process for new user registration, user reactivation and user details, especially email updating

Some minor finetuning of the display for the process for new user registration, user reactivation and user details, especially the process to update the user’s email address.

  • Disable the update user button in the User Panel when saving & show wait cursor

  • Do not show the User updated message if the user activation window is displayed because the email address needs to be activated

  • Trim whitespace of updated email address BEFORE checking for equality

  • Activation Window (for new user registration, user reactivation and email updating):

    • Use CKM panel header style

    • Collapse the Resend activation code Form panel (and use the paler style) so that the normal course of entering the activation code is more immediately visible

    • Slightly increase width and height of the panel and better align the textfield lengths

    • Finetune display of the instructions to the users

CKM-1363

Finetune some widths and columns of the Dashboards for signed-in and not-signed-in users

With the additional column of the initiator of a review round in the Active Review Round widget as introduced as a config option in CKM-1358 Resolved , especially this widget is too small to display the various columns well.

Therefore:

  • If there is sufficient space available, increase the width for the left column widgets in the Signed In Dashboards a bit.

  • Finetune the widths inside the Active Review rounds widgets, depending on this setting.

  • Increase maximum widths of the components of the first row of the dashboard accordingly.

CKM-1364

Update Git Connector to be able to use an access token because current authentication mechanism is being phased out by GitHub

Update CKM’s Git Connector to be able to use an access token.

This is required because the current authentification mechanism is being phased out by GitHub.

See https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for details.

CKM-1365

New search option on the advanced user search tab to only find users/reviewers with a specified minimum login date (and finetune options form)

Add a search option to the advanced user search (e.g. available for reviewer selection or via Manage Users) to only find users with a specified minimum login date. This can for example be useful to quickly exclude reviewers that haven’t logged in for a long period of time.

Also finetune the options form on the Advanced user search panel and the corresponding grid heights.

CKM-1402

Display user's local time for modification times in a resource's revision history

The Resource modification times in the resource’s Revision History Panel were displayed in Server Timezone.
For convenience, Resource Modification Times are now displayed in the user's timezone.

42 issues

Bug Fixes

Key

Summary

Description

Key

Summary

Description

CKM-1281

Archetype with VUNP (unknown path in use_node) errors should not be possible to be uploaded & should not cause a NullPointerException on display

The upload of archetypes with an invalid path (VUNP validation error) should be prevented so that the uploader can directly correct the archetype.

A comprehensive + meanigful display of such an archetype is otherwise not really possible and it should not be possible to upload an archetype with such a validation problem, neither as resource proposal nor as a new or updated archetype.

Invalid path: /items[at0020.1]/items[at0.10]/items[at0.1]/items[at0005.1] of archetype internal reference at /items[at0055]/items[at0.8]/items.

Use_node path validity: the path mentioned in a use_node statement must refer to an object node defined elsewhere in the same archetype or any of its specialisation parent archetypes, that is not itself an internal reference node, and which carries a node identifier if one is needed at the reference point.

For potentially already existing archetypes with this error, a Null Pointer Exception should be avoided and a best effort to display be made.

CKM-1288

Archetype displays fails with a ClassCastException if a term binding in the archetype contains a URI

A ClassCastException is causing the display of an archetype to fail if a binding in the archetype contains a URI.

In this case, a QueryBindingItem is constructed and not a TermBindingItem - leading to a ClassCastException and preventing the display of the archetype.

CKM-1290

Extreme sluggishness of some ckm servers after the system has been running fine for several days and even weeks in a row

Some CKM servers running on 1.15.0 have experienced extreme sluggishness usually after the system has been running fine for several days and sometimes weeks in a row.

Ocean has thoroughly investigated this issue and worked with the supplier of CKM’s asset management system on identifying the root cause of this problem and providing a solution for this problem that occurred under very specific circumstances.

CKM 1.16.0 version fixes the core of the problem by upgrading to the latest version of the asset management system.

Ocean has also worked together with the supplier of the asset management system to be able to implement a workaround for this problem in the meantime (i.e until deployment of CKM 1.16.0).

CKM-1291

Review invitation and review invitation summary emails: Completion Deadline is not properly embedded in enclosing tags (thus preventing some formatting)

The starting <p> tag was missing from the review invitation summary email sent out to reviewers.
This usually displays fine since the closing tag is simply ignored by email clients leniently interpreting the html. However, once styling is added to the email (for the p tag) as per CKM-1292, this styling is not honoured.

In the review invitation email:
This review round will be closed and results collated on 19 June 2020. You will be notified of the feedback by the editor.</p>

If you add some styling applicable to this paragraph, it is not applied to the completion deadline displayed in the email.

CKM-1294

Internal: Improve AtomicTransactions for various review related activities

Under some very rare circumstances, it may be theoretically possible that multiple users running the following services simultaneously (in the same split second) might run into problems when

  • (creating)/updating/deleting reviews,

  • closing review rounds,