Licenses Data Mapping Guide: FOLIO to Alma

Purpose: This page describes data mapping from the FOLIO Licenses app to Alma.  During the Alma implementation phase beginning in the fall of 2023, these pages serve as working documents for decision-making about data migration.  Once the migration to Alma is complete, these guides will be retained for reference.


Overview

This page defines the requirements to create a file of FOLIO licenses in the format defined by Ex Libris for loading to Alma. This process will happen twice: once during the Test Load in December 2023 and once during the cutover period in June/July 2024.

FOLIO

There are 716 license records in FOLIO as of 11/28/23. Each license contains a URL link to the core license document on Box, can optionally link to one or more organization records, contain multiple amendment records, multiple notes, multiple terms of use, and multiple URL links to Box for supplementary documents. There are no links to orders or inventory in FOLIO license records. This is a screenshot from FOLIO of an example license record:


Alma

There are some differences in how license data is structured in Alma.

  • Amendments: The license migration file format requires each amendment to be loaded as a separate record with a link to the parent license. By contrast, the FOLIO licenses API contains all of the amendments as part of the parent license record.

  • License Code: Alma requires a unique License Code value which doesn’t exist in FOLIO.

  • License Status: Alma has two status values - a license status and a review status, while FOLIO has only one status.

  • Organizations/Vendors: Alma supports a link to one Licensor organization and a Licensing agent organization. These must exist as vendors in Alma. FOLIO supports unlimited relationships with organizations.

  • License Terms: Alma has many license terms already defined and we can map our FOLIO terms to several of them; however, some of our license term definitions don’t exist in Alma. We can set those up in Alma Configurations > Acquisitions > Manage License Terms. Those must be created in the Test environment before the load.

Screenshot of Alma License example:

Assumptions

  1. Loading the license data to Alma will be completed by Ex Libris. They will load the license file that we provide (we won’t be using Alma APIs to do this migration).

Completion Criteria

  • Jan 2024: All FOLIO License records exist in the Alma Test environment.

  • July 2024: A fresh extract of FOLIO License records is run and are loaded to the Alma Production environment

Data Sources

The data needed for this FOLIO License extract is available from the following APIs:

  1. FOLIO Licenses API Most of the data for the license file is stored here.

  2. FOLIO Organizations API We need data from the organization record to populate the Alma license_details/licensor_code.

  3. FOLIO Notes API We need to query the Notes API to pull any notes associated with the licenses. It looks like there are 51 note records associated with the license domain.

Extract and Transformation Requirements

Mapping for each data element that we need to send to Alma is documented in this spreadsheet on Box: FOLIO to Alma Data Mapping Excel Sheet. The following section gives a fuller explanation of some of the requirements for this extract.

Ownered Entity

This is a mandatory field in the Alma XSD layout and we’ve been instructed to send either the institution code or the library code for owner of the license. Crosswalk of values from FOLIO to Alma:

FOLIO License type/label

Alma: license_details > ownered_entity

Duke University Libraries

PERKN

Ford Library

FORD

Goodson Law Library

LAW

Medical Center Library

MCL

License Code

FOLIO doesn’t have a unique license code value. So we need to create a unique license_codevalue for each record following the format “LICENSE”'n' where ‘n' is a sequential number (Ex: LICENSE32).

If possible, for each amendment that is created (see the next section about amendments), setup the license_code using the format parent_code“ AMENDMENT”’n' to make it easier to spot that this is an amendment (Ex: GALE AMENDMENT1). Use the start date value of the amendment to determine the sequential order and no leading zeros are needed.

License Status and License Review Status

FOLIO only captures one status value, but Alma has two so we will map FOLIO’s status value to both fields using the following crosswalk of values:

FOLIO status/value and amendment/statusAlma license_details > license_status

active

ACTIVE

expired

EXPIRED

in_negotiation

DRAFT

not_yet_active

DRAFT

rejected

DELETED

FOLIO status/value and amendment/statusAlma license_details > review_status

active

ACCEPTED

expired

ACCEPTED

in_negotiation

INREVIEW

not_yet_active

PENDING

rejected

REJECTED

Start Date

FOLIO doesn’t require users to add a start date to licenses or amendments, but Alma does. When the value is null in FOLIO use ‘19000101’ as the default date.

Amendments

If the FOLIO license contains a value in amendments/0/id then create an additional separate license record in the Alma file for that amendment. Each will need to have a unique license_code value assigned and the parent_code value will need to contain the license_code value that was created and assigned to the original record.

Repeat for all amendments associated with a license by checking all of the amendments/n/id fields which run from amendments/0/id to amendments/55/id.

Mapping of individual fields is listed in the mapping spreadsheet. I’m not sure if any of the license amendments contain separate terms of use values, so I haven’t indicated specific mapping for those yet.

The license containing the most amendments (56) is ProQuest: Electronic Products License Agreement: 2001, so the last amendment id value is stored in amendments/55/id.


View of License list in Alma highlighting how the Amendment License Code looks to users:

Licensor Code

We need data from the FOLIO organization record to populate the Alma license_details/licensor_code.

If the FOLIO orgs/0/primaryOrg = TRUE, use the UUID value in orgs/0/org/orgsUuid to query the FOLIO organizations API to determine the appropriate vendor code to populate the Alma license_details/licensor_code using the following logic:


  • If any of the following fields for that organization contain the string, “Aleph vendor code” with no other subsequent text in the string, pull the value from the corresponding aliases/n/value to populate the Alma license_details/licensor_code. 


aliases/0/description

aliases/1/description

aliases/2/description

aliases/3/description

aliases/4/description

aliases/5/description

aliases/6/description

aliases/7/description


Example list of multiple Alias names on an organization record: 1de4e1e1-c779-4f02-b320-46b0a6d727a6

Another example: 0b66713f-a65b-41bd-b186-a5cbb7b6bca8

  • If any of the alias 1 -7 value fields contain the string “No aleph vendor code”, use the code value from the organization record to populate the Alma license_details/licensor_code

aliases/0/value….aliases/7/value


Example with no Aleph vendor code 74fbf439-7736-4386-97a6-1c6f87dea3dd


Notes

Since Alma doesn’t have fields available for all the data we’ve captured in FOLIO, we’d like to migrate 4 pieces of data into Alma notes so that it’s still available. Here are the four types of FOLIO data to move to notes:

  1. FOLIO License Notes: First, create notes for any license notes that exist in FOLIO. Use the FOLIO notes API https://s3.amazonaws.com/foliodocs/api/mod-notes/s/notes.html - the license UUID will be in the links.id element if a note exists for that license.

  2. FOLIO Organizations: We also want to make a separate note to store information about each organization from the FOLIO license for reference since we can’t store those directly in Alma.


String definition example - this is how we want the text in the note to look:

Consortium: NERL Aleph vendor: PYALE UNIV NERL FOLIO organization: EYALE_UNIV_NERL

Here are the fields involved in creating that string:

Consortium FOLIO organization role label from the license- orgs/0/roles/0/role/label (or orgs1, orgs2, etc)

NERL FOLIO organization name - orgs/0/org/name

PYALE UNIV NERL "Aleph vendor "Alias value

EYALE_UNIV_NERL "FOLIO Organization "FOLIO organization code

3. Supplementary URLs: ExLibris advised us on 12/11/23 to use license notes to store our Supplementary Document URLs.


String definition:

“Supplementary Document Name: “ + supplementaryDocs/0/name + ". " + “ Category: ” supplementaryDocs/0/atType/label+ “ Note: “ + supplementaryDocs/0/note + “ URL: “ + supplementaryDocs/0/url

String definition examples:

Example #1: d14e911c-6477-4e2c-82b8-cad03cd1fd70

Supplementary Document Name: VPATs. Category: Note: All of Gale/Cangage’s VPAT documents are accessible at the URL; separated out by product. URL: https://support.gale.com/vpats/


Example #2: 2979e09b-7644-4854-8d73-a82a8254ac06

Supplementary Document Name: Authorization. Category: Consortial Authorization Letter Note: URL: https://support.gale.com/vpats/ .


4. License and Amendment Description: Alma doesn’t have a target field to store a license or amendment description, so to retain that information we need to send notes to store the description for the license and all amendments.


String definition:

license code + " " + name + " description: " + description

Example #1: 6bfef526-3043-4930-a5a6-becd7da19e42

ELSEVIER_AMENDMENT9 Elsevier: First Amendment: 2013 description: Contract no. 1-16337290003, adds on access to GeoRef (American Geological Institute) 2019-2021"

Location Code

The Alma UI includes a “license location” value (see screenshot below). Our FOLIO licenses are all stored digitally in Box, so we will add a new license location with a code value = ‘BOX.’ Send ‘BOX’ as the location code value on all records.


Terms of Use

See the mapping spreadsheet for the set of terms of use mapping. Some FOLIO values map directly to Alma, but others that don’t already exist in Alma will be added manually as new custom terms by ExLibris staff.

Most terms of use entries in FOLIO contain an internal note; however, some customProperties/{term}/0/value/label are set to "Yes", but have a null customProperties/{term}/0/note value. In that case, send the text, "Yes" as the note value.


Reference documentation

Resolved Questions

  1. We need to create some new custom license terms in Alma. How do we set those up in the Test environment prior to the load of licenses? Answer: ExLibris staff will manually create those for us to enable the load to run without errors

  2. The 11/21 meeting with ExLibris experts raised questions about how to migrate our URLs for the supplementary documents. Answer: After review and testing, they reported that we can’t send in those URLs in the attachment section and recommended that we map them as a note.

  3. Alma has fields in the UI for a Licensor organization and a Licensing agent organization.

    1. There isn’t a licensing agent element in the XSD definition - should there be? Answer: ExLibris and they suggested we could request this and they’d need to check on how long that would take.

    2. We decided to map organizations as a note since there wasn’t time to make changes to the ExLibris generic vendor load XSD.

Action Items

  1. Resolve Attachments question - how to map FOLIO supplementary document URLs to Alma? Julie posted a question on the ExL Basecamp message board on 12/5. Still waiting for guidance as of 12/7. Update 12/11: Marie tested and couldn’t successfully send in a URL as an attachment, so the team recommends we send them in as a note value. Julie added that note string definition above. - Complete

  2. Add field-level amendments mapping to the spreadsheet in a new column (green) (Julie) - Complete

  3. Ask end users which order the amendments naming convention should follow (Julie) - use start date - Complete

  4. Get info from Virginia about how to handle null start dates in FOLIO - is there a date we can use for all of them such as 1/1/1950. Reply received 12/11/23 - use date ‘1/1/1900’. Complete.

  5. Confusion about how to format ampersands - open conversation on basecamp 12/18. Chana confirmed that we need to send &. Complete.