Quesnelia (R1 2024) Changes and required actions

NOTE: Please do not merge cells in this table as it prevents sorting which is useful for navigating the table

Functional Area

Change or Additions

Considerations

Action timing,
Action required

Comments

Contact person,
Related JIRAs

Functional Area

Change or Additions

Considerations

Action timing,
Action required

Comments

Contact person,
Related JIRAs

Affected app or module

What has been changed or added that should be noted for this release

What challenges may arise related to this change or addition

When can the action be taken (before, during or after upgrade)?

If applicable, detail what action(s) must be taken here

Is this action required for the next release?

Name of user leaving comment: comment on what you encountered or ask a question @mention Contact person

User name of person that can provide additional detail.
Include issue link for bug fix, story or feature that applies

Authorities

Authority deletion moves authority records to the archive and marks MARC authorities as DELETED. By default, the retention policy for archived authorities is deletion after 7 days.
To enable tenants to have specific retention periods for authority archives, it's necessary to add a configuration in mod-settings. Details how to set the configuration is provided in module documentation.

 

runtime

Optional

 

@Pavlo Smahin @Khalilah Gambrell

Settings > Circulation > Fee/fine > Overdue fine  policies. Reminder Fees

Enhancement of the business logic for scheduling Reminder fees is implemented. Possible to set up and send reminders to patrons via as printed mails.

 

The print jobs are running once every 24 hours. This is set in the Okapi timer.

Access via the Users app to the Patron notice print jobs. Two new user permissions has been introduced

  • Users: View and remove patron notice print jobs

  • Users: View patron notice print jobs

@Charlotte Whitt @Florian Ruckelshausen

Users (Profile Pictures)

When enabled Profile pictures can be attached to user records, either with a link to an externally hosted image, or by uploading a local file. Images are stored in the database by default, but can be configured to use Object storage. 

Supported file formats: jpg, jpeg, png

To enable profile pictures functionality, set the maximum allowed file size, and for details on configuring Object storage, follow the instructions included in the mod-users readme documentation.

 

runtime

Optional

 

@Amelia Sutton UXPROD-36: Profile picturesClosed

Search, Inventory

To make mod-search consume all types of changes for instances, holdings, items, and changes related to bound-with functionality it has a consumer with a default Kafka topic pattern:

(${ENV}\.)(.*\.)inventory\.(instance|holdings-record|item|bound-with)
This pattern could be changed by setting KAFKA_EVENTS_CONSUMER_PATTERN environment variable.

If the library requires the default behavior of mod-search, please ensure that the KAFKA_EVENTS_CONSUMER_PATTERN is either omitted from the environment variables or is set to the same value as the default pattern.

 

 

@Pavlo Smahin

Acquisitions

See “Quesnelia changes to the transaction API“.

This is only relevant for people directly using the mod-finance or mod-finance-storage transaction API.

Replace deprecated calls if needed, before Ramsons.

 

@Damien UXPROD-4321

Acquisitions (Organizations)

Added Banking information as a separately permissioned component of the Organization record (vendor only.) Includes bank name, account number, transit number, account type and notes.

Added Setting to enable/disable banking information

Added Setting to configure banking account types

Address type references a category as entered in the “Addresses” fields of the Organization record.

 

 

@Joseph Reimers

UXPROD-4170

Acquisitions/Finance

Designate an Organization as a Donor.

Associate Donor organizations with funds and POLs

Added Privileged donor information as a separately-permissioned contact record for tracking sensitive donor contact info.

 

“Donor” field in the POL is no longer editable as of the Quesnelia release. The field will be removed in its entirety in a future (2025) release.

Libraries will need to create Organization records with the desired donor information if they wish to retain that info beyond 2025.

The Donor accordion is modular and can be incorporated into non-Acquisitions areas as well.

@Joseph Reimers

UXPROD-1018

Finance

Option to associate funds with one or more specific locations without requiring acquisition units at the point of ordering.

A new multiselect location search interface was created to support this.

Validation occurs only at the fund assignment level on the POL. There is no validation at the invoice level.

May potentially act in lieu of acquisition units under certain circumstances.

 

 

@Joseph Reimers

UXPROD-4510

Data export

Data export temporary uses file system to prepare export result before upload to remote storage (after file is uploaded it’s removed from local file system).

 

Make sure that there is enough space locally before file is uploaded to remote storage (S3/minio).
E.g. 8M records require ~14GB

For AWS ECS it’s not a case as instances usually have big volume and module have access to shared space (bugfest case - no actions were required).

UXPROD-4127: Improve Data export performance Closed

Data export

This is only relevant for libraries that custom scripts to export inventory data. In Quesnelia, Imod-data-export migrated from RMB to to spring and two contracts in API calls have been modified:

  1. /data-export/quick-export “fileName” property in the request is no longer used.

  2. /data-export/job-executions: “Progress” property in the response contains now following fields: "exported", "failed", "duplicatedSrs", "total", "readIds".

 

 

Re-test existing scripts against Quesnelia version of mod-data-export to ensure no updates are needed

 

@Viachaslau Khandramai

UXPROD-4127: Improve Data export performance Closed

Requests, Staff slips

  • New, optional Staff slip called "Search slip (Hold requests)".

  • For Requests meeting the following criteria: is Hold (item level) and is Open – Not yet filled, libraries will be able to print Requests in order for staff members to check libraries shelves for copies that can fill the request.

  • Libraries decide whether to use the new Staff slip in Settings > Circulation > Staff slips > Search slip (Hold requests).

  • For libraries using the functionality, Staff users will print Search slips in the Requests app. by selecting Actions > Print search slips for [insert service point here]. The report generates a single slip for every qualified Hold request.

 

 

 

@Anne Ekblad

UXPROD-4047

Lists

There is now a check that, by default, runs at mod-lists’s start-up to verify that S3/MinIO is accessible since this isn’t immediately obvious and may not be noticed for a while. If this check fails, the module will exit immediately.

 

If S3/MinIO are not available or list export functionality is not required, this check can be disabled by setting the environment variable (or system property) mod-lists.list-export.s3-startup-check.enabled to false before starting the module.

 

@Matt Weaver

Inventory (mod-inventory-storage)

Make default reference inventory data consistent, meaning that the same UUIDs values that are returned in inventory settings are used in populating inventory records. For example, if cancelled LCCN has following values defined:

{ "id": "c858e4f2-2b6b-4385-842b-60532ee34abb", "name": "Cancelled LCCN", "source": "folio" }

Then the same “id” and “name” values need to be used in all places that reference that data.

 

 

This can be done before and after the upgrade.

The referenced data identifiers and values are used, among others, in the data export default mapping profile, uploaded instance identifier types and default mapping rules ( https://github.com/folio-org/mod-data-export/blob/master/src/main/resources/rules/rulesDefault.json ) and they must be consistent with inventory storage repository: https://github.com/folio-org/mod-inventory-storage/tree/master/reference-data/identifier-types

@Siarhei Charniak

MODINVSTOR-1200: Actionable manual migration instruction for identifier typesClosed

MODINVSTOR-1201: Automate manual migration instruction for identifier typesClosed

Agreements Local KB

The default titleInstanceResolverService  has been changed to WorkSourceIdentifier

This change affects any systems populating the local knowledgebase from any source.

The use of the WorkSourceIdentifier titleInstanceResolverService  is now recommended and can result in both improved performance and more consistency between the local KB and any external data source used.

However it can also result in duplication of titles where many different data sources are used to populate the local KB, making searching titles harder and making some functionality (e.g. ERM Comparisons) less useful. So if a tenant is using many different data sources to populate the local KB it may be advisable to continue to use the previous titleInstanceResolverService 

If tenants are happy to use this new default, which is recommended, no additional actions are required.

Any tenants wishing to use the previous default (IdFirst ) will need to set the environment variable:

TIRS = IdFirst

This should be done before any data is added to the Local KB either by file import or by harvest

 

@Owen Stephens

UXPROD-3885: Allow external data sources to be authoritative about works in the Agreements Local KBClosed

ERM-3018: Implement GOKb Title UUID as primary match ID where availableClosed

Inventory, SRS, Data import

Default MARC-Instance mapping of 100, 111, and 110 fields updated by marking subfield $a of these rules as required subfield

Libraries should review and decide: 

  1. If this change should be applied to their default mapping

After upgrade follow the instructions to update the mapping rules.

Change is optional.

 

@Ryan Taylor, @Kateryna Senchenko

MODSOURMAN-1085: MARC record with a 100 tag without a $a is being discarded on import.Closed

Data Import Job Profiles

Modify action used as a standalone action or a first action after the match is not supported

 

Run script to identify Job Profiles that need to be reviewed and corrected.

More technical info on supported scenarios using Modify action can be found by the link

@Ryan Taylor, @Kateryna Senchenko

UXPROD-4709: Refine processing of Modify action for MARC Bib recordsClosed

FQM/Lists app

Added new record types:

  • Instances

  • Holdings

  • Organizations (contact info)

  • Organizations (vendor info)

  • Purchase order lines

Repeating fields can be queried via FQM but not via the Lists app (yet).

 

Organizations are split into different views based on the nature of the data required.

@Kathleen Moore

@Khalilah Gambrell

@Joseph Reimers

Settings > Service interaction > number generators

 

If number generators will be used loading reference data should be considered (mod-service-interaction).

 

 

@Martina Tumulla

Password reset link (mod-users-bl)

Token in the reset password link expires early.

Ensure that mod-users-bl’s RESET_PASSWORD_LINK_EXPIRATION_TIME (default: 24 hours) does not exceed mod-authtoken’s token.expiration.seconds (default: 10 minutes)

Before or after upgrade

 

@Steve Ellis , @Julian Ladisch

MODUSERBL-185: RESET_PASSWORD_* values may conflict with mod-authtoken configurationClosed

Circulation Storage

Migration from Poppy to Quenselia resets reference data: https://github.com/folio-org/mod-circulation-storage/tree/v17.2.0/reference-data

Other modules don’t touch existing reference data when migrating with parameter loadReference = true, but mod-circulation-storage does.
Most notable reference data that gets reset to default: Circulation rules.

If library has changed any reference data and migrates using loadReference = true: Make a backup of reference data (cancellation-reasons, circulation-rules-storage, loan-policies, patron-notice-policies, request-policies, staff-slips) before migration and restore afterwards.

 

@Stephanie Buck CIRCSTORE-496: Upgrading tenant resets reference and sample recordsClosed

Orders Storage

Migration from Poppy to Quesnelia resets reference data:

Only the records listed in the directories above are affected, other custum closure reasons and custom aquisition methods are unaffected.

Other modules don’t touch existing reference data when migrating with parameter loadReference = true, but mod-orders-storage does.

If you have deleted official reference data: Delete it again after the migration.

If you have kept the reference data with the official id but changed the name: Back up before migration and restore afterwards.

 

MODORDSTOR-408: Upgrading tenant resets reference and sample recordsClosed

Agreements

GIN indexes introduced in Poppy and Quesnalia were basic GIN indexes. This can cause issues when free text fields are filled with sufficiently large data, thanks to Postgres index keying behaviour.

With Quesnelia CSP 4 new migrations are added to implement n-gram GIN indexes that don’t suffer from the same limitation

This impacts only where you have very long strings in a free text field. Specifically we have seen this in the agreement description field.

If you have already got text that is too long for the index key to be created, this will prevent migration to Quesnelia.

If you haven’t got text that is too long, then migration will work fine, but you will find the text you can enter into the field is limited by the max index key length until the fix is applied

Existing GIN indexes affected need to be removed manually before applying CSP4

After CSP4 applied, check the migrations ,have created the indexes

The impacted cols/indexes are


Introduced in Poppy:

  • Col: alternate_resource_name.arn_name, Idx: arn_name_idx

  • Col: erm_resource.res_description, Idx: erm_resource_res_description_idx

  • Col: identifier.id_value, Idx: identifier_id_value_idx

  • Col: identifier_namespace.idns_value, Idx: identifier_namespace_value_idx

  • Col: refdata_category.rdc_description, Idx: refdata_category_rdc_description_idx

Introduced in Quesnalia:

  •  Col entitlement.ent_description, Idx: entitlement_description_idx

  • Col: entitlement.ent_note, Idx: entitlement_note_idx

  • Col: entitlement.ent_reference, Idx: entitlement_reference_idx

  • Col: platform.pt_name, Idx: platform_name_idx

  • Col: subscription_agreement.sa_description, Idx: subscription_agreement_description_idx

 

@Ethan Freestone

ERM-3321: Description can be too long for index, causing mod-agreements error when updating from 6.0.x to later versions or failure on saving agreements with a long descriptionClosed

Functional Area

Change or Additions

Considerations

Action timing,
Action required

Comments

Contact person,
Related JIRAs

Affected app or module

What has been changed or added that should be noted for this release

What challenges may arise related to this change or addition

When can the action be taken (before, during or after upgrade)?

If applicable, detail what action(s) must be taken here

Is this action required for the next release?

Name of user leaving comment: comment on what you encountered or ask a question @mention Contact person

User name of person that can provide additional detail.
Include issue link for bug fix, story or feature that applies

Authorities

Authority deletion moves authority records to the archive and marks MARC authorities as DELETED. By default, the retention policy for archived authorities is deletion after 7 days.
To enable tenants to have specific retention periods for authority archives, it's necessary to add a configuration in mod-settings. Details how to set the configuration is provided in module documentation.

 

runtime

Optional

 

@Pavlo Smahin@Khalilah Gambrell

Settings > Circulation > Fee/fine > Overdue fine  policies. Reminder Fees

Enhancement of the business logic for scheduling Reminder fees is implemented. Possible to set up and send reminders to patrons via as printed mails.

 

The print jobs are running once every 24 hours. This is set in the Okapi timer.

Access via the Users app to the Patron notice print jobs. Two new user permissions has been introduced

  • Users: View and remove patron notice print jobs

  • Users: View patron notice print jobs

@Charlotte Whitt@Florian Ruckelshausen

Users (Profile Pictures)

When enabled Profile pictures can be attached to user records, either with a link to an externally hosted image, or by uploading a local file. Images are stored in the database by default, but can be configured to use Object storage. 

Supported file formats: jpg, jpeg, png

To enable profile pictures functionality, set the maximum allowed file size, and for details on configuring Object storage, follow the instructions included in the mod-users readme documentation.

 

runtime

Optional

 

@Amelia SuttonUXPROD-36: Profile picturesClosed

Search, Inventory

To make mod-search consume all types of changes for instances, holdings, items, and changes related to bound-with functionality it has a consumer with a default Kafka topic pattern:

(${ENV}\.)(.*\.)inventory\.(instance|holdings-record|item|bound-with)
This pattern could be changed by setting KAFKA_EVENTS_CONSUMER_PATTERN environment variable.

If the library requires the default behavior of mod-search, please ensure that the KAFKA_EVENTS_CONSUMER_PATTERN is either omitted from the environment variables or is set to the same value as the default pattern.

 

 

@Pavlo Smahin

Acquisitions

See “Quesnelia changes to the transaction API“.

This is only relevant for people directly using the mod-finance or mod-finance-storage transaction API.

Replace deprecated calls if needed, before Ramsons.

 

@DamienUXPROD-4321

Acquisitions (Organizations)

Added Banking information as a separately permissioned component of the Organization record (vendor only.) Includes bank name, account number, transit number, account type and notes.

Added Setting to enable/disable banking information

Added Setting to configure banking account types

Address type references a category as entered in the “Addresses” fields of the Organization record.

 

 

@Joseph Reimers

UXPROD-4170

Acquisitions/Finance

Designate an Organization as a Donor.

Associate Donor organizations with funds and POLs

Added Privileged donor information as a separately-permissioned contact record for tracking sensitive donor contact info.

 

“Donor” field in the POL is no longer editable as of the Quesnelia release. The field will be removed in its entirety in a future (2025) release.

Libraries will need to create Organization records with the desired donor information if they wish to retain that info beyond 2025.

The Donor accordion is modular and can be incorporated into non-Acquisitions areas as well.

@Joseph Reimers

UXPROD-1018

Finance

Option to associate funds with one or more specific locations without requiring acquisition units at the point of ordering.

A new multiselect location search interface was created to support this.

Validation occurs only at the fund assignment level on the POL. There is no validation at the invoice level.

May potentially act in lieu of acquisition units under certain circumstances.

 

 

@Joseph Reimers

UXPROD-4510

Data export

Data export temporary uses file system to prepare export result before upload to remote storage (after file is uploaded it’s removed from local file system).

 

Make sure that there is enough space locally before file is uploaded to remote storage (S3/minio).
E.g. 8M records require ~14GB

For AWS ECS it’s not a case as instances usually have big volume and module have access to shared space (bugfest case - no actions were required).

UXPROD-4127: Improve Data export performance Closed

Data export

This is only relevant for libraries that custom scripts to export inventory data. In Quesnelia, Imod-data-export migrated from RMB to to spring and two contracts in API calls have been modified:

  1. /data-export/quick-export “fileName” property in the request is no longer used.

  2. /data-export/job-executions: “Progress” property in the response contains now following fields: "exported", "failed", "duplicatedSrs", "total", "readIds".

 

 

Re-test existing scripts against Quesnelia version of mod-data-export to ensure no updates are needed

 

@Viachaslau Khandramai

UXPROD-4127: Improve Data export performance Closed

Requests, Staff slips

  • New, optional Staff slip called "Search slip (Hold requests)".

  • For Requests meeting the following criteria: is Hold (item level) and is Open – Not yet filled, libraries will be able to print Requests in order for staff members to check libraries shelves for copies that can fill the request.

  • Libraries decide whether to use the new Staff slip in Settings > Circulation > Staff slips > Search slip (Hold requests).

  • For libraries using the functionality, Staff users will print Search slips in the Requests app. by selecting Actions > Print search slips for [insert service point here]. The report generates a single slip for every qualified Hold request.

 

 

 

@Anne Ekblad

UXPROD-4047

Lists

There is now a check that, by default, runs at mod-lists’s start-up to verify that S3/MinIO is accessible since this isn’t immediately obvious and may not be noticed for a while. If this check fails, the module will exit immediately.

 

If S3/MinIO are not available or list export functionality is not required, this check can be disabled by setting the environment variable (or system property) mod-lists.list-export.s3-startup-check.enabled to false before starting the module.

 

@Matt Weaver

Inventory (mod-inventory-storage)

Make default reference inventory data consistent, meaning that the same UUIDs values that are returned in inventory settings are used in populating inventory records. For example, if cancelled LCCN has following values defined:

{ "id": "c858e4f2-2b6b-4385-842b-60532ee34abb", "name": "Cancelled LCCN", "source": "folio" }

Then the same “id” and “name” values need to be used in all places that reference that data.

 

 

This can be done before and after the upgrade.

The referenced data identifiers and values are used, among others, in the data export default mapping profile, uploaded instance identifier types and default mapping rules ( https://github.com/folio-org/mod-data-export/blob/master/src/main/resources/rules/rulesDefault.json) and they must be consistent with inventory storage repository: https://github.com/folio-org/mod-inventory-storage/tree/master/reference-data/identifier-types

@Siarhei Charniak

MODINVSTOR-1200: Actionable manual migration instruction for identifier typesClosed

MODINVSTOR-1201: Automate manual migration instruction for identifier typesClosed

Agreements Local KB

The default titleInstanceResolverService  has been changed to WorkSourceIdentifier

This change affects any systems populating the local knowledgebase from any source.

The use of the WorkSourceIdentifiertitleInstanceResolverService  is now recommended and can result in both improved performance and more consistency between the local KB and any external data source used.

However it can also result in duplication of titles where many different data sources are used to populate the local KB, making searching titles harder and making some functionality (e.g. ERM Comparisons) less useful. So if a tenant is using many different data sources to populate the local KB it may be advisable to continue to use the previous titleInstanceResolverService 

If tenants are happy to use this new default, which is recommended, no additional actions are required.

Any tenants wishing to use the previous default (IdFirst ) will need to set the environment variable:

TIRS = IdFirst

This should be done before any data is added to the Local KB either by file import or by harvest

 

@Owen Stephens

UXPROD-3885: Allow external data sources to be authoritative about works in the Agreements Local KBClosed

ERM-3018: Implement GOKb Title UUID as primary match ID where availableClosed

Inventory, SRS, Data import

Default MARC-Instance mapping of 100, 111, and 110 fields updated by marking subfield $a of these rules as required subfield

Libraries should review and decide: 

  1. If this change should be applied to their default mapping

After upgrade follow the instructions to update the mapping rules.

Change is optional.

 

@Ryan Taylor, @Kateryna Senchenko

MODSOURMAN-1085: MARC record with a 100 tag without a $a is being discarded on import.Closed

Data Import Job Profiles

Modify action used as a standalone action or a first action after the match is not supported

 

Run script to identify Job Profiles that need to be reviewed and corrected.

More technical info on supported scenarios using Modify action can be found by the link

@Ryan Taylor, @Kateryna Senchenko

UXPROD-4709: Refine processing of Modify action for MARC Bib recordsClosed

FQM/Lists app

Added new record types:

  • Instances

  • Holdings

  • Organizations (contact info)

  • Organizations (vendor info)

  • Purchase order lines

Repeating fields can be queried via FQM but not via the Lists app (yet).

 

Organizations are split into different views based on the nature of the data required.

@Kathleen Moore

@Khalilah Gambrell

@Joseph Reimers

Settings > Service interaction > number generators

 

If number generators will be used loading reference data should be considered (mod-service-interaction).

 

 

@Martina Tumulla

Password reset link (mod-users-bl)

Token in the reset password link expires early.

Ensure that mod-users-bl’s RESET_PASSWORD_LINK_EXPIRATION_TIME(default: 24 hours) does not exceed mod-authtoken’s token.expiration.seconds (default: 10 minutes)

Before or after upgrade

 

@Steve Ellis, @Julian Ladisch

MODUSERBL-185: RESET_PASSWORD_* values may conflict with mod-authtoken configurationClosed

Circulation Storage

Migration from Poppy to Quenselia resets reference data: https://github.com/folio-org/mod-circulation-storage/tree/v17.2.0/reference-data

Other modules don’t touch existing reference data when migrating with parameter loadReference = true, but mod-circulation-storage does.
Most notable reference data that gets reset to default: Circulation rules.

If library has changed any reference data and migrates using loadReference = true: Make a backup of reference data (cancellation-reasons, circulation-rules-storage, loan-policies, patron-notice-policies, request-policies, staff-slips) before migration and restore afterwards.

 

@Stephanie BuckCIRCSTORE-496: Upgrading tenant resets reference and sample recordsClosed

Orders Storage

Migration from Poppy to Quesnelia resets reference data:

Only the records listed in the directories above are affected, other custum closure reasons and custom aquisition methods are unaffected.

Other modules don’t touch existing reference data when migrating with parameter loadReference = true, but mod-orders-storage does.

If you have deleted official reference data: Delete it again after the migration.

If you have kept the reference data with the official id but changed the name: Back up before migration and restore afterwards.

 

MODORDSTOR-408: Upgrading tenant resets reference and sample recordsClosed

Licenses

GIN indexes introduced in Quesnalia (mod-licenses 6.0.0) were basic GIN indexes. This can cause issues when free text fields are filled with sufficiently large data, thanks to Postgres index keying behaviour.

With Quesnelia CSP 6 new migrations are added to implement n-gram GIN indexes that don’t suffer from the same limitation

This impacts only where you have very long strings in a free text field. Specifically we have seen this in the license description field.

If you have already got text that is too long for the index key to be created, this will prevent migration to Quesnelia / mod-licenses 6.x.x

If you haven’t got text that is too long, then migration will work fine, but you will find the text you can enter into the field is limited by the max index key length until the fix is applied

Existing GIN indexes affected need to be removed manually before applying CSP6 / mod-licenses 6.0.4

After CSP6 / mod-licenses 6.0.4 applied, check the migrations ,have created the indexes

The impacted cols/indexes are

Affected indexes:

  • Col: alternate_name.an_name, Idx: alternate_name_name_idx

  • Col: license.lic_name, Idx: license_name_idx

  • Col: license.lic_description, Idx: license_description_idx

 

@Ethan Freestone

https://folio-org.atlassian.net/browse/ERM-3387