Enhanced Package Metadata and Search Capabilities for eHoldings App (UXPROD-5543)

Enhanced Package Metadata and Search Capabilities for eHoldings App (UXPROD-5543)

Link: UXPROD-5543: eholdings app > Enhanced Package metadata and search capabilitiesIn Refinement
Status: Analysis Complete | Priority: P3 | Reporter: Khalilah Gambrell
Labels: EFPM273, EFPM3, SI1, erm, resourcemanagement


Overview

EBSCO KB has been enhanced with more package metadata and search capabilities.
To take advantage of these, the team needs to upgrade applicable Package API endpoints in mod-kb-ebsco-java,
then expose these capabilities in the eHoldings UI.


Full Requirements (from UXPROD-5543)

1. Metadata Enhancements

  • Granular visibility — Replace "Show titles in package to patrons" with three separate checkboxes:

    • Hide/Exclude in Publication Finder (PF)

    • Hide/Exclude in Full Text Finder (FTF)

    • Exclude from MARC export

  • Managed description — Read-only field surfacing KB-managed description (markdown supported)

  • Custom description — Editable WYSIWYG field (HTML supported, 2000 char limit, no script tags)

  • Managed Alternate names — Read-only list of KB-managed alternate package names

  • Custom Alternate names — Up to 10 user-defined alternate names (300 char limit each, plain text)

  • Custom display name (Package Display Name) — Custom label for a package (300 char limit, plain text)

  • Package Free Access — Read-only field: Public = True / Controlled = False

2. Search Enhancements

  • Advanced search — Support new HoldingsIQ v2 advanced search capabilities

  • Filter: Publication Finder — Show in / Hide in Publication Finder

  • Filter: Full Text Finder — Show in / Hide in Full Text Finder

  • Filter: MARC export — Include in / Exclude from MARC export

  • Filter: Package Access — Public / Controlled

  • Search by alternate & display names — Package search/sort should consider Custom Display Name and Custom/Managed Alternate Names (behavior driven by HoldingsIQ API)

3. Additional Updates

  • Package Search Results list — Show Package Display Name in italics in parentheses next to package name; indicate hidden status

  • Export — Add new fields (Display Name, Managed/Custom Alt Names, Managed/Custom Description, Package Access, Hide flags); remove "Show to patrons" field

  • Create Custom Package — Support new fields (custom description, custom alt names) on the create form

  • Multi-KB access (Non-ECS) — Allow users to access and switch between multiple KBs without changing Settings assignment


Tickets by Scope

✅ Done / Spike

Ticket

Summary

Notes

Ticket

Summary

Notes

AE-3

SPIKE: Investigate updating package endpoints

Closed. Findings drive all BE stories.


🏗️ Foundation / Infrastructure BE Stories

These must be completed first — all other BE and UI work is blocked on them.

Ticket

Repo

Summary

Status

Ticket

Repo

Summary

Status

FHIQC-49

folio-holdingsiq-client (library)

Migrate Package Endpoints to HoldingsIQ v2 API

Open

MODKBEKBJ-804

mod-kb-ebsco-java

Migrate Package Endpoints to HoldingsIQ v2 API

Open

Dependency chain:

FHIQC-49 ──► MODKBEKBJ-804 ──► AE-8 ──► AE-9, AE-10, AE-11, AE-12, AE-13, AE-14, AE-15, AE-17, AE-19, AE-20 (library) (module) (new fields) (all UI & export stories)

🔵 Backend (BE) Stories

Ticket

Summary

Status

Requires UI?

Ticket

Summary

Status

Requires UI?

AE-8

Add additional fields to POST /eholdings/packages

In Refinement

Yes — UI create form depends on these fields being accepted

AE-17

eHoldings export: Add additional package fields

In Refinement

Partially — export logic is BE but export UI may need minor updates

AE-7

Non-ECS: allow user to access multiple KBs

In Refinement

Yes — switching KBs needs UI affordance (KB selector, sticky selection)


🟢 Frontend (UI) Stories

Ticket

Summary

Status

Requires BE?

Ticket

Summary

Status

Requires BE?

AE-9

View/Edit Package: Custom alternate package names

In Refinement

Yes — GET/PUT endpoints must return/accept customAltNames

AE-10

Package record: Show additional visibility fields

In Refinement

Yes — endpoints must expose granular visibility flags

AE-11

View/Edit Managed Package: Add Managed fields

In Refinement

Yes — endpoints must return managed description, managed alt names, package access

AE-12

View/Edit Package: Add Package Display Name field

Draft

YescustomDisplayName must be supported by GET/PUT (AE-8 covers POST)

AE-13

View/Edit Package: Add Custom description

In Refinement

YescustomDescription must be returned/accepted via GET/PUT

AE-14

Create Custom Package: Add Custom alternate package names

In Refinement

Yes — depends on AE-8 (POST endpoint)

AE-15

Create Custom Package: Add Custom description

In Refinement

Yes — depends on AE-8 (POST endpoint)

AE-16

⚠️ Testing only — Search returns results by Display Name & Alt Names

In Refinement

No — driven by HoldingsIQ API behavior, UI/BE pass-through

AE-19

Package Search Results list display

In Refinement

Partially — needs BE to return packageDisplayName in search results

AE-20

Package Search & Filter updates

In Refinement

Yes — filters must be passed through to HoldingsIQ by BE


🎨 UX / Design Stories

Ticket

Summary

Status

Ticket

Summary

Status

UX-577

UX: Edit/View Package — Display additional fields

In Progress

UX-579

UX: Package Search Results list display

Open


Work Split Summary

Stories requiring both BE and UI teams

Original Ticket

BE Work

UI Work

Original Ticket

BE Work

UI Work

AE-8 + AE-14 + AE-15

Extend POST /eholdings/packages to accept customDescription, customDisplayName, customAltNames, packageFreeAccess

UI create form — add new fields with validation and error handling

AE-8/AE-12 + AE-9 + AE-13

Extend GET/PUT package endpoints to return and accept new custom fields

UI view/edit form — render and update new fields

AE-10

Update visibility model in GET/PUT endpoints (replace showTitles with three granular flags)

Replace "Show titles to patrons" with three checkboxes; update view display

AE-11

Return managedDescription, managedAltNames, packageAccess from GET endpoint

Render read-only managed fields on view/edit; move Package Access to Package Information accordion

AE-7

Support multi-KB assignment; store sticky KB selection

KB selector dropdown in app header; persist selection

AE-20

Pass new filter params (Publication Finder, Full Text Finder, MARC, Package Access) to HoldingsIQ search

Add 4 new filter options to Package search pane

AE-19

Return packageDisplayName in search results payload

Display name in italics in parentheses next to package name in results list

AE-17

Add new fields to export logic; remove showTitles field

Minor: update any export-trigger UI if applicable

Stories BE-only

(No UI changes required beyond what's driven by data availability)

  • AE-8 — New fields on POST /eholdings/packages endpoint (the UI create-form stories AE-14, AE-15 consume this)

Stories UI-only / Testing-only

  • AE-16 — Testing-only story: validates HoldingsIQ search behavior by display name/alt names. No code change required, just test coverage.


BE Requirements Detail

FHIQC-49 — HoldingsIQ Client Library: v2 Migration (folio-holdingsiq-client)

Blocking dependency for all downstream BE work.

  • Migrate endpoint URLs to /v2/ prefix; replace packages path segment with lists

  • Update individual package operations: retrievePackage(), retrievePackages(), updatePackage(), deletePackage() in PackagesHoldingsIQServiceImpl

  • Handle new listId parameter (was {vendorid}/{packageid}, now {packageid} = listId); maintain backward-compat mapping in PackageData

  • Refactor visibility model:

    • Remove: VisibilityInfo visibilityData

    • Add: List<VisibilityItem> visibility where VisibilityItem has:

      • VisibilityCategory category — enum: PF, FTF, MARC

      • Boolean hidden

      • String reason

  • Update PackagesFilterableUrlBuilder to support v2 patterns

  • Bump major version of the library (breaking changes)

  • Update unit tests; add tests for new visibility structure

MODKBEKBJ-804 — mod-kb-ebsco-java: Integrate Updated HoldingsIQ Client

Blocked by FHIQC-49. Blocking dependency for AE-8 and all field-level BE stories.

  • Update PackagesHoldingsIQService usage for v2 endpoints

  • Implement data transformation between v2 models and existing FOLIO package representations

  • Handle packageIdlistId mapping transparently throughout the module

  • Handle new List<VisibilityItem> visibility array structure in package processing

  • Preserve FOLIO-specific filtering (tags, access types), existing validation and error handling

  • Bump major version of the module interface; keep changes in a feature branch to avoid breaking consumers


AE-8 — POST /eholdings/packages new fields

  • customDescription — string, max 2000 chars, HTML/markdown supported (no script tags)

  • customDisplayName — string, max 300 chars, plain text only

  • customAltNames — array of strings, max 10 items, each max 300 chars, plain text only

  • packageFreeAccess — boolean (true = Public, false = Controlled)

AE-17 — Export additions

Remove from export:

  • Show to patrons field

Add to export:

Field

Export Label

Format

Field

Export Label

Format

customDisplayName

Display name

plain string

managedAltNames

Managed alternative names

semicolon-separated string

customAltNames

Custom alternative names

semicolon-separated string

managedDescription

Managed description

plain text (strip markup)

customDescription

Custom description

plain text (strip markup)

packageFreeAccess

Package access

Public / Controlled / null

Hide in PF

Hide in Publication Finder

TBD

Hide in FTF

Hide in Full Text Finder

TBD

Exclude from MARC

Exclude from MARC export

TBD

AE-7 — Multi-KB (Non-ECS)

  • Allow multiple EBSCO KBs to be assigned to a user

  • No Settings reassignment required to switch KB

  • KB selection must be sticky (persisted)

  • App must display which KB is currently active

  • Define permission model for secondary KBs


UI Requirements Detail

AE-9 + AE-14 — Custom Alternate Package Names (View/Edit/Create)

  • Section: Package Settings accordion

  • Field type: Repeatable text box

  • Max entries: 10; disable add button + show tooltip when limit reached

  • Character limit: 300 per entry; inline error if exceeded

  • Validation: No HTML/markdown; inline error if detected

  • View mode: Semi-colon separated list; dash if empty

AE-10 — Granular Visibility (View/Edit)

  • Replace "Show titles in package to patrons" with header "Hide/exclude all titles in the package"

  • Checkboxes:

    • In Publication Finder

    • In Full Text Finder

    • In MARC export

  • Action applies to all titles in the package

  • Applies to: Managed Package edit/view, Custom Package edit/view

AE-11 — Managed Fields (View/Edit Managed Package only)

  • Package Information accordion:

    • Package access — read-only; always has a value (Public/Controlled); shown last; dash if empty

  • Package Settings accordion:

    • Managed alternate names — read-only; semicolon-separated; dash if empty

    • Managed description — read-only; markdown rendered; dash if empty

  • These fields must not appear on Custom Package records

AE-12 — Package Display Name (View/Edit)