Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: draw.io diagram "Volaris LC User Registration Container.drawio" edited
Page Properties

Submitted

Approved

Status

Status
titleDraft

Impact

Status
colourBlue
titlemedium

Arch Ticket

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

Prod ticket

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

Context

Patron registration data flows to FOLIO from a web-based patron registration form into the Users app to create new User records. These Users will be considered distance patrons and will have no or limited circulation privileges. When these patrons come onsite, their patron group may change, enabling access to circulation privileges, Reading Rooms, and physical card issuing that features a profile picture.

Getting a library account starts with "reader registration".  The first step is filling out online form (current form). FOLIO needs to collect the data from pre-registration form and create limited User records for new patrons. Many people (from researchers to tourists) want a physical Library of Congress library card.  A card is not required to visit the Library, but it is needed to enter the public reading rooms and is a souvenir.

Library of Congress need this feature but it will likely be useful for other libraries (especially public and national).  The solution should be designed in such a way that it would be useful to any library with this need.

Requirements

Functional Requirements

As described in prod ticket:

Jira Legacy
serverSystem JIRA
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

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:
    post:
      description: Create Patron Account
      operationId: createPatron
      tags:
        - patron
      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'


components:
  schemas:
    PatronAccount:
      type: object
      description: Information for patron registration for web-form
      required:
        - generalInfo
        - address0
        - contactInfo
        - preferences
        - userType
      properties:
        generalInfo:
          description: General info
          type: object
          required:
            - firstName
            - lastName
          properties:
            title:
              description: Title
              type: string
            firstName:
              description: First Name
              type: string
            middleName:
              description: Middle Name
              type: string
            lastName:
              description: Last Name
              type: string

        address0:
          description: Current address/Address 0
          type: object
          properties:
            addressLine0:
              description: Current Address/Address line 0
              type: string
            addressLine1:
              description: Current Address/Address line 1
              type: string
            city:
              description: City
              type: string
            province:
              description: State/Province
              type: string
            zip:
              description: Zip/Postal Code
              type: string
            country:
              description: Country
              type: string

        address1:
          description: Address on Photo ID/Address 1 (optional)
          type: object
          properties:
            addressLine0:
              description: Current Address/Address line 0
              type: string
            addressLine1:
              description: Current Address/Address line 1
              type: string
            city:
              description: City
              type: string
            province:
              description: State/Province
              type: string
            zip:
              description: Zip/Postal Code
              type: string
            country:
              description: Country
              type: string

        contactInfo:
          description: Contact info
          type: object
          required:
            - homePhone
            - email
          properties:
            homePhone:
              description: Home Phone
              type: string
            mobilePhone:
              description: Mobile Phone
              type: string
            localPhone:
              description: Local Phone
              type: string
            email:
              description: Email Address
              type: string

        preferences:
          type: object
          description: Preferences
          properties:
            serviceEmailAlertsEnabled:
              description: I would like to receive email communications from the Library of Congress about service requests and alerts, research information, and surveys related to doing research at the Library.
              type: boolean
              default: false
            programEmailAlertsEnabled:
              description: I would 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: boolean
              default: false
            supportEmailAlertsEnabled:
              description: I would like to receive email communications from the Library of Congress about how I might support the Library.
              type: boolean
              default: false

        userType:
          description: User Type
          type: object
          required:
            - age
            - use
          properties:
            age:
              description: Age
              type: integer
            use:
              default: Use (Academic/personal)
              type: string
              enum: [ "ACADEMIC", "PERSONAL" ]
            academicStatus:
              description: Academic Status (required if "use" is ACADEMIC)
            institution:
              description: Academic Institution (required if "use" is ACADEMIC)

    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 JIRA
      serverId01505d01-b853-3c2e-90f1-ee9b165564fc
      keyUXPROD-4663