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, | Comments | Contact person, | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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. | ||||||||||||||||||||||||||||||||||||
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. |
| |||||||||||||||||||||||||||||||||||||||
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 (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. |
|
| ||||||||||||||||||||||||||||||||||||||
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) | 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. | |||||||||||||||||||||||||||||||||||||||
Acquisitions | This is only relevant for people directly using the mod-finance or mod-finance-storage transaction API. | Replace deprecated calls if needed, before Ramsons. | 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). | 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). |
| Data export | Re-test existing scripts against Quesnelia version of mod-data-export to ensure no updates are needed |
| Requests, Staff slips |
| 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) | Inventory (mod-inventory-storage) | |||||||||||||||||||||||||
Code Block | ||
---|---|---|
| ||
{
"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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
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.
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.
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).
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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:
/data-export/quick-export “fileName” property in the request is no longer used.
/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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
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.
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:
Code Block | ||
---|---|---|
| ||
{
"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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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:
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Settings > Service interaction > number generators
If number generators will be used loading reference data should be considered (mod-service-interaction).
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Status | ||||
---|---|---|---|---|
|
Status | ||||
---|---|---|---|---|
|
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
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.
Status | ||||
---|---|---|---|---|
|
Status | ||||
---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Acquisitions
This is only relevant for people directly using the mod-finance or mod-finance-storage transaction API.
Replace deprecated calls if needed, before Ramsons.
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.
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.
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.
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).
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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:
/data-export/quick-export “fileName” property in the request is no longer used.
/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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
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.
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:
Code Block | ||
---|---|---|
| ||
{
"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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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:
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Settings > Service interaction > number generators
If number generators will be used loading reference data should be considered (mod-service-interaction).
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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.
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|
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
Jira Legacy | ||||||
---|---|---|---|---|---|---|
|