Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Page Properties

Submitted

Approved

Status

Status
colourGreen
titleDraftin progress

Impact

Status
colourBlueRed
titlemediumhigh

Arch Ticket

Jira Legacy
serverSystem JIRAJira
serverId01505d01-b853-3c2e-90f1-ee9b165564fc
keyUXPROD-4663

Prod ticket

Jira Legacy
serverSystem JIRAJira
serverId01505d01-b853-3c2e-90f1-ee9b165564fc
keyARCH-178

...

As described in prod ticket:

Jira Legacy
serverSystem JIRAJira
serverId01505d01-b853-3c2e-90f1-ee9b165564fc
keyUXPROD-4663

Non-functional Requirements

  1. Manageability

    1. The solution should provide the ability to configure specific LoC fields without affecting other Libraries

  2. Interoperability

    1. The solution should provide external API for 3rd party applications to create patrons in FOLIO

  3. Security

    1. The solution should provide an authorization mechanism through FOLIO edge module API keys mechanism

Target Architecture

Context Diagram

...

Workflow diagram

Drawio
mVer2
zoom1
simple0
inComment0
custContentId30146609150962206
pageId30244892
lbox1
diagramDisplayNameVolaris LC User Registration Ctx-LCUserRegistration-Workflow.drawio
contentVer42
revision42
baseUrlhttps://folio-org.atlassian.net/wiki
diagramNameVolaris LC User Registration-LCUserRegistration-Workflow.drawio
pCenter0
width6911206.5
links
tbstyle
height621

Container Diagram

...

766.5

Swimlane diagram (V2)

The process of remote registration for LC is based on the interaction of a patron with a pre-registration form through Locate UI. To support the flow Locate should be able to verify the patron’s email address.

Expand
titleSwimlane V1
Drawio
mVer2
zoom1
simple0
inComment0
custContentId

...

151453729
pageId30244892
lbox1
diagramDisplayNameVolaris

...

-LCRegistration-Swimlane.drawio
contentVer

...

2
revision

...

2
baseUrlhttps://folio-org.atlassian.net/wiki
diagramNameVolaris

...

-LCRegistration-Swimlane.drawio
pCenter0
width

...

1340.

...

5
links
tbstyle
height

...

2360.9999999999995
  1. Edge API Contract

...

Drawio
mVer2
zoom1
simple0
inComment0
custContentId371392524
pageId30244892
lbox1
diagramDisplayNameVolaris-LoC-preregistration-V2.drawio
contentVer1
revision1
baseUrlhttps://folio-org.atlassian.net/wiki
diagramNameVolaris-LoC-preregistration-V2.drawio
pCenter0
width1240
links
tbstyle
height2381

Non-functional Requirements

  1. Manageability

    1. The solution should provide the ability to configure specific LoC fields without affecting other Libraries

  2. Interoperability

    1. The solution should provide external API for 3rd party applications to create patrons in FOLIO

  3. Security

    1. The solution should provide an authorization mechanism through FOLIO edge module API keys mechanism

Assumptions

  • Locate verifies the patron’s email address before starting pre-registration in FOLIO

  • Locate can define and represent in UI the current status of patron’s registration in FOLIO (expired or not)

Target Architecture

Context Diagram

Drawio
mVer2
zoom1
simple0
inComment0
custContentId30146609
pageId30244892
lbox1
diagramDisplayNameVolaris LC User Registration Ctx.drawio
contentVer4
revision4
baseUrlhttps://folio-org.atlassian.net/wiki
diagramNameVolaris LC User Registration.drawio
pCenter0
width691
links
tbstyle
height621

Container Diagram

The solution should be imlemented as new edge-API in edge-patron module to provide access for external application.

Drawio
mVer2
zoom1
simple0
inComment0
custContentId30081103
pageId30244892
lbox1
diagramDisplayNameVolaris LC User Registration Container.drawio
contentVer3
revision3
baseUrlhttps://folio-org.atlassian.net/wiki
diagramNameVolaris LC User Registration Container.drawio
pCenter0
width1030.9999999999998
links
tbstyle
height1210.9999999999995

  1. Edge API Contract

Macro openapi
sourceTypeMacroBody
attachmentPageId
syntaxSwagger / OpenAPI
attachmentId
url
openapi: 3.0.3
info:
  title: Patron creation
  description: Edge API for creation of patron account through web-form
  version: 1.0.0
servers:
  - url: 'https://github.com/folio-org/mod-patron'
paths:
  /patron/account/{email}:
    get:
      description: Get patron account by email
      tags:
        - patron
      parameters:
        - in: path
          name: email
          schema:
            type: string
          required: true
      responses:
        201:
          $ref: "#/components/requestBodies/PatronAccountRequest"
        404:
          $ref: '#/components/responses/NotFound'
    put:
      description: Update Patron Account by email
      operationId: updatePatronByEmail
      tags:
        - patron
      parameters:
        - in: path
          name: email
          schema:
            type: string
          required: true
      requestBody:
        $ref: "#/components/requestBodies/PatronAccountRequest"
      responses:
        201:
          $ref: "#/components/requestBodies/PatronAccountRequest"
        404:
          $ref: '#/components/responses/NotFound'
        400:
      description: Create Patron Account    $ref: '#/components/responses/BadRequest'
        500:
 operationId:  createPatron       tags$ref: '#/components/responses/InternalServerError'
  /patron/account:
    -get:
patron       requestBodydescription: Get Expired records
     $ref operationId: "#/components/requestBodies/PatronAccountRequest"getExpiredRecords
      responsestags:
        201:- patron
         $ref: "#/components/requestBodies/PatronAccountRequest"parameters:
        404- in: query
         $ref name: '#/components/responses/NotFound' expired
          400description: flag to fetch expired records
        $ref  required: '#/components/responses/BadRequest'true
      responses:
  500:      201:
      $ref: '#/components/responses/InternalServerError'   componentsdescription: A  schemas:
JSON array of user names
   PatronAccount:       typecontent:
 object           descriptionapplication/json:
Information for patron registration for web-form       required:  schema:
      - generalInfo         -type: address0array
        - contactInfo       items:
 - preferences         - userType       properties:$ref: "#/components/schemas/ExpiredPatronAccount"
        generalInfo404:
          description$ref: General info'#/components/responses/NotFound'
        400:
  type: object       $ref: '#/components/responses/BadRequest'
  required:      500:
      - firstName   $ref: '#/components/responses/InternalServerError'
    post:
    - lastName description: Create Patron Account
      propertiesoperationId: createPatron
         tags:
 title:       - patron
      descriptionrequestBody:
Title        $ref: "#/components/requestBodies/PatronAccountRequest"
      typeresponses:
string        201:
    firstName:      $ref: "#/components/requestBodies/PatronAccountRequest"
       description 404:
First Name         $ref: '#/components/responses/NotFound'
     type: string  400:
          middleName$ref:  '#/components/responses/BadRequest'
        500:
   description: Middle Name     $ref: '#/components/responses/InternalServerError'


components:
     typeschemas:
string    ExpiredPatronAccount:
        lastNametype: object
      description: Information on expired patron accoun
 description: Last Name   properties:
           typeexternalSystemId:
string          address0description: External System  ID
      description: Current address/Address 0 type: string
        typefirstName:
object           propertiesdescription: First Name
          addressLine0type: string
        preferredFirstName:
     description: Current Address/Address line 0 description: Preferred First Name
          type: string
        middleName:
    addressLine1:      description: Middle Name
      description: Current Address/Address line 1type: string
        lastName:
    type: string     description: Last Name
     city:     type: string
        descriptionemail:
City          description: Email Address
  type: string       type: string
    province:    expirationDate:
          description: State/ProvinceExpiration Date
             type: string
          format: date
zip:    PatronAccount:
      type: object
  description: Zip/Postal Code  description: Information for patron registration for web-form
      typerequired:
string        - generalInfo
   country:     - address
        description:- CountrycontactInfo
        - userType
    type: string properties:
        address1generalInfo:
          description: Address on Photo ID/Address 1 (optional)General info
          type: object
          propertiesrequired:
            addressLine0:- firstName
            - description:lastName
Current Address/Address line 0               type: stringproperties:
            addressLine1externalSystemId:
              description: CurrentExternal Address/Address line 1System ID
              type: string
            cityfirstName:
              description: First CityName
              type: string
            provincepreferredFirstName:
              description: State/ProvincePreferred First Name
              type: string
            zipmiddleName:
              description: Zip/PostalMiddle CodeName
              type: string
            countrylastName:
              description: CountryLast Name
              type: string

        contactInfoaddress:
          description: ContactCurrent infoaddress/Address
          type: object
          requiredproperties:
            -addressLine0:
   homePhone           description:  - emailCurrent Address/Address line 0
              propertiestype: string
            homePhoneaddressLine1:
              description: Home Phone Current Address/Address line 1
              type: string
            mobilePhonecity:
              description: MobileCity
Phone               type: string
            localPhoneprovince:
              description: Local PhoneState/Province
              type: string
            emailzip:
              description: EmailZip/Postal AddressCode
              type: string
         preferences:   country:
       type: object      description: Country
   description: Preferences           propertiestype: string

        contactInfo:
 serviceEmailAlertsEnabled:         description: Contact info
   description: I would like to receive email communications fromtype: theobject
Library of Congress about service requests and alerts, research information, andrequired:
surveys related to doing research at the Library.     - phone
        type: boolean   - email
          defaultproperties:
false             programEmailAlertsEnabledphone:
              description: IPhone wouldNumber
like to receive email communications from the Library of Congress about other Library programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to the general public.type: string
            mobilePhone:
              typedescription: booleanMobile Phone
              defaulttype: falsestring
            supportEmailAlertsEnabledemail:
              description: Email IAddress
would like to receive email communications from the Library of Congress about how I mighttype: supportstring
the
Library.        preferences:
      type: boolean   type: object
          defaultdescription: Preferences
false          userTypeproperties:
          description: User TypeserviceEmailAlertsEnabled:
          type: object   description: I would like to receive email communications required:from the Library of Congress about service requests and alerts, research information, and -surveys agerelated to doing research at the Library.
      - use       type:  boolean
 properties:             agedefault: false
             descriptionprogramEmailAlertsEnabled: Age
              typedescription: integer I would like to receive email communications from the Library of Congress use:about other Library programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to default:the Use (Academic/personal)general public.
              type: stringboolean
              enumdefault: [ "ACADEMIC", "PERSONAL" ]false
            academicStatussupportEmailAlertsEnabled:
              description: Academic Status (required if "use" is ACADEMIC)
   I would like to receive email communications from the Library of Congress about how I might support the Library.
         institution:     type: boolean
        description: Academic Institution (required if "use" isdefault: ACADEMIC)false

    Error:
      description: "An error"
      type: object
      properties:
        message:
          type: string
          minLength: 1
          description: "Error message text"
        type:
          type: string
          description: "Error message type"
        code:
          type: string
          description: "Error message code"
      additionalProperties: false
      required:
        - message

  requestBodies:
    PatronAccountRequest:
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/PatronAccount"

  responses:
    PatronAccountResponse:
      description: SuccessfulResult
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/PatronAccount"

    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"

  1. Configuration Settings

    1. The solution should provide a UI screen to map values for externally created patron accounts to correct FOLIO values:

      1. Patron group: FOLIO User should be able to select existing patron group for new patrons

      2. Expiration date: FOLIO User should be able to select the existing patron group for new patrons

      3. For user type and status the solution should provide related defaults described in prod ticket

    2. The solution should provide a UI setting for the one-time operation to create LoC-required custom fields. The list of custom fields is attached to

      Jira Legacy
      serverSystem JIRAJira
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyUXPROD-4663