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:
          $ref: '#/components/responses/BadRequest'
        500:
          $ref: '#/components/responses/InternalServerError'
  /patron/account:
    postget:
      description: CreateGet PatronExpired Accountrecords
      operationId: createPatron getExpiredRecords
      tags:
        - patron
      tagsparameters:
        - patronin: query
     requestBody:     name: expired
  $ref: "#/components/requestBodies/PatronAccountRequest"       responsesdescription: flag to fetch expired records
   201:       required: true
  $ref: "#/components/requestBodies/PatronAccountRequest"   responses:
     404:    201:
      $ref: '#/components/responses/NotFound'   description: A JSON array of user 400:names
          $refcontent:
'#/components/responses/BadRequest'         500:   application/json:
       $ref: '#/components/responses/InternalServerError'   components:   schemasschema:
    PatronAccount:       type: object       descriptiontype: Informationarray
for patron registration for web-form       required:       items:
 - generalInfo         - address0      $ref: "#/components/schemas/ExpiredPatronAccount"
 - contactInfo      404:
  - preferences       $ref:  - userType'#/components/responses/NotFound'
        properties400:
        generalInfo  $ref: '#/components/responses/BadRequest'
         description500:
General info         $ref:  type: object'#/components/responses/InternalServerError'
    post:
       requireddescription: Create Patron Account
      operationId: createPatron
 - firstName    tags:
        - lastNamepatron
      requestBody:
   properties:     $ref: "#/components/requestBodies/PatronAccountRequest"
      titleresponses:
        201:
     description: Title    $ref: "#/components/requestBodies/PatronAccountRequest"
         type404:
string             firstName$ref:  '#/components/responses/NotFound'
        400:
   description: First Name     $ref: '#/components/responses/BadRequest'
        type500:
string             middleName$ref: '#/components/responses/InternalServerError'


components:
  schemas:
       descriptionExpiredPatronAccount:
Middle Name     type: object
        typedescription: stringInformation on expired patron accoun
      properties:
 lastName:       externalSystemId:
       description: Last Name description: External System ID
          type: string
         address0firstName:
          description: Current address/Address 0First Name
          type: objectstring
          propertiespreferredFirstName:
          description: Preferred addressLine0:First Name
          type: string
 description: Current Address/Address line 0   middleName:
           typedescription: stringMiddle Name
           addressLine1type: string
        lastName:
    description: Current Address/Address line 1  description: Last Name
          type: string
            city:
 email:
            description: CityEmail    Address
          type: string
            provinceexpirationDate:
              description: State/Province
  Expiration 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: AddressGeneral oninfo
Photo ID/Address 1 (optional)
          type: object
          propertiesrequired:
            addressLine0:- firstName
            - description:lastName
Current Address/Address line 0               type: stringproperties:
            addressLine1externalSystemId:
              description: Current Address/Address line 1External System ID
              type: string
            cityfirstName:
              description: First CityName
              type: string
            provincepreferredFirstName:
              description: State/Province Preferred First Name
              type: string
            zipmiddleName:
              description: Zip/PostalMiddle CodeName
              type: string
            countrylastName:
              description: Last CountryName
              type: string

        contactInfoaddress:
          description: ContactCurrent infoaddress/Address
          type: object
          requiredproperties:
            addressLine0:
   -     homePhone      description: Current Address/Address line 0
  - email           propertiestype: string
           homePhone addressLine1:
              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: Email AddressZip/Postal Code
              type: string
            country:
         type: string    description:  Country
   preferences:           type: objectstring

         descriptioncontactInfo: Preferences
          propertiesdescription: Contact info
          serviceEmailAlertsEnabledtype: object
             descriptionrequired:
I would like to receive email communications from the Library of Congress about- servicephone
requests and alerts, research information, and surveys related to doing research at the Library.
   - email
          typeproperties:
boolean            phone:
  default: false           description: Phone programEmailAlertsEnabled:Number
              descriptiontype: string
I would like to receive email communications from the Library of Congress aboutmobilePhone:
other Library programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to thedescription: generalMobile public.Phone
              type: boolean
 string
            defaultemail:
false              supportEmailAlertsEnableddescription: Email Address
             description type: Istring
would
like to receive email communications from the Library ofpreferences:
Congress about how I might support the Library.   type: object
          typedescription: booleanPreferences
            properties:
 default: false          userTypeserviceEmailAlertsEnabled:
          description: User Type  description: I would like to receive email communications  type:from objectthe Library of Congress about service requests and alerts, research information, required:and surveys related to doing research at the Library.
    - age         type: boolean
  - use           propertiesdefault: false
           age programEmailAlertsEnabled:
              description: AgeI would like to receive email communications from the Library of Congress about other Library type: integer
            use:programs (concerts, exhibits, lectures, etc.), customer surveys, and other services available to the general public.
              defaulttype: Useboolean
(Academic/personal)               typedefault: stringfalse
              enumsupportEmailAlertsEnabled:
[ "ACADEMIC", "PERSONAL" ]             academicStatusdescription: I would like to receive email communications from       description: Academic Status (required if "use" is ACADEMIC)
  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