--- /dev/null
+Bibliographic Search Enhancements
+---------------------------------
+
+Enhancements to the bibliographic search function enable you to search for records that were created, edited, or deleted within a date range. You can use the catalog interface or the record feed to search for records with specific date ranges.
+
+Note that all dates should be formatted as YYYY-MM-DD and should be included in parentheses.
+
+
+Use the Catalog to Retrieve Records with Specified Date Ranges:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+Search by Create Date or Range
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+To find records that were created on or after a specific date, enter the term, create_date, and the date in the catalog search field. For example, to find records that were created on or after April 1, 2013, enter the following into the catalog search field:
+
+
+create_date(2013-04-01)
+
+
+To find records that were created within a specific date range, enter the term, create_date, followed by comma-separated dates in parentheses. For example, to find records that were created between April 1, 2013 and April 8, 2013, enter the following into the catalog search field:
+
+
+create_date(2013-04-01,2013-04-08)
+
+
+
+
+Search by Edit Date or Range
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+
+To find records that were edited on or before a specific date, enter the term, edit-date, and the date in the catalog search field. The date should be preceded by a comma. For example, to find records that were edited on or before April 1, 2013, enter the following into the catalog search field:
+
+
+edit_date(,2013-04-01)
+
+
+To find records that were edited on or after a specific date, enter the term, edit_date, and the date in the catalog search field. For example, to find records that were edited on or after April 1, 2013, enter the following into the catalog search field:
+
+
+edit_date(2013-04-01)
+
+
+To find records that were edited within a specific range, enter the term, edit_date, followed by comma-separated dates in parentheses. For example, to find records that were edited between April 1, 2013 and April 8, 2013, enter the following into the catalog search field:
+
+
+edit_date(2013-04-01,2013-04-08)
+
+
+
+
+Search by Deleted Status
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+
+To search for deleted records, enter in your catalog search field the term, edit_date, the date that you want to search, and the term, #deleted. For example, to find records that were deleted on or after April 1, 2013, enter the following into the catalog search field:
+
+edit_date(2013-04-01)#deleted
+
+
+
+To find records that were deleted within a specific range, enter the term, edit_date, followed by comma-separated dates in parentheses. For example, to find records that were deleted between April 1, 2013 and April 8, 2013, enter the following into the catalog search field:
+
+
+edit_date(2013-04-01,2013-04-08)#deleted
+
+
+
+Use a Feed to Retrieve Records with Specified Date Ranges:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can use a feed to retrieve records that were created, edited, or deleted within specific date ranges by adding the dates to the catalog's URL. You can do this manually, or you can write a script that would automatically retrieve this information.
+
+To manually retrieve records that were created, edited, or deleted within a specific date, enter the terms and dates as specified above within the search terms in the URL. For example, to retrieve records created on or after April 1, 2013, enter the following in your URL:
+
+
+http://test.esilibrary.com/opac/extras/opensearch/1.1/-/html-full?searchTerms=create_date(2013-04-01)&searchClass=keyword
+
+
+NOTE: To retrieve deleted records, replace the # with %23 in your URL.
+
+
+Binary MARC21 Feeds
+-------------------
+Evergreen's OpenSearch service can return search results in many formats, including HTML, MARCXML, and MODS. As of version 2.4, it can also return results in binary MARC21 format.
+
+When making an HTTP request to an Evergreen system using the OpenSearch API, you must include the term "marc21" in the appropriate location within the URL to retrieve a feed of MARC21 records in a binary format. The following example demonstrates the appropriate form of the URL:
+
+http://test.esilibrary.com/opac/extras/opensearch/1.1/-/marc21?searchTerms=create_date%282013-04-01%29&searchClass=keyword
+
+You can add this term manually to the URL produced by a catalog search, or you can create a script that would retrieve this information automatically.
+
+
+
+
+
--- /dev/null
+Using Supercat
+==============
+
+Introduction
+------------
+
+You can use SuperCat to get data about ISBNs, metarecords, bibliographic
+records, and authority records.
+
+Throughout this section, replace `<hostname>` with the domain or subdomain
+of your Evergreen installation to try these examples on your own system.
+
+ISBNs
+-----
+
+Given one ISBN, Evergreen can return a list of related records and ISBNs,
+including alternate editions and translations. To use the Supercat
+oISBN tool, use http or https to access the following URL.
+
+----
+http://<hostname>/opac/extras/oisbn/<ISBN_to_query>
+----
+
+For example, the URL http://gapines.org/opac/extras/oisbn/0439136350 returns
+the following list of catalog record IDs and ISBNs:
+
+[source,xml]
+----------------------------------------------------------------------------
+<?xml version='1.0' encoding='UTF-8' ?>
+<idlist metarecord='436139'>
+ <isbn record='5652044'>9780606323475</isbn>
+ <isbn record='5767568'>9780780673809</isbn>
+ <isbn record='1350528'>9780807286029</isbn>
+ <isbn record='5708164'>9780780669642</isbn>
+ <isbn record='2372013'>043965548X</isbn>
+ <isbn record='5804511'>8498386969</isbn>
+ <isbn record='4132282'>9780786222742</isbn>
+ <isbn record='1530458'>9788478885190</isbn>
+ <isbn record='2003291'>0736650962</isbn>
+ <isbn record='1993002'>8478885196</isbn>
+ <isbn record='1187595'>9780439554923</isbn>
+ <isbn record='4591175'>8478885196</isbn>
+ <isbn record='5676282'>0807282324</isbn>
+ <isbn record='2363352'>8478885196</isbn>
+ <isbn record='2315122'>1480614998</isbn>
+ <isbn record='2304130'>8478886559</isbn>
+ <isbn record='2012565'>9780613371063</isbn>
+ <isbn record='5763645'>9782070528189</isbn>
+ <isbn record='2383286'>0786222743</isbn>
+ <isbn record='2489670'>9780329232696</isbn>
+ <isbn record='1681685'>9780807282311</isbn>
+ <isbn record='2160095'>0807286028</isbn>
+ <isbn record='2219885'>9789500421157</isbn>
+ <isbn record='1934218'>9780613359580</isbn>
+ <isbn record='5682871'>9781594130021</isbn>
+ <isbn record='1281164'>0807283150</isbn>
+ <isbn record='1666656'>0747542155</isbn>
+ <isbn record='4717734'>8478886559</isbn>
+</idlist>
+----------------------------------------------------------------------------
+
+Records
+-------
+
+Record formats
+~~~~~~~~~~~~~~
+
+First, determine which format you'd like to receive data in. To see the
+available formats for bibliographic records, visit
+----
+http://<hostname>/opac/extras/supercat/formats/record
+----
+
+Similarly, authority record formats can be found at
+http://libcat.linnbenton.edu/opac/extras/supercat/formats/authority
+and metarecord formats can be found at
+http://libcat.linnbenton.edu/opac/extras/supercat/formats/metarecord
+
+For example, http://gapines.org/opac/extras/supercat/formats/authority
+shows that the Georgia Pines catalog can return authority records in the
+formats _opac_, _marc21_, _marc21-full_, and _marc21-uris_. Supercat
+also includes the MIME type of each format, and sometimes also refers
+to the documentation for a particular format.
+
+[source,xml]
+----------------------------------------------------------------------------
+<?xml version='1.0' encoding='UTF-8' ?>
+<formats>
+ <format>
+ <name>opac</name>
+ <type>text/html</type>
+ </format>
+ <format>
+ <name>marc21</name>
+ <type>application/xml</type>
+ <docs>http://www.loc.gov/marc/</docs>
+ </format>
+ <format>
+ <name>marc21-full</name>
+ <type>application/xml</type>
+ <docs>http://www.loc.gov/marc/</docs>
+ </format>
+ <format>
+ <name>marc21-uris</name>
+ <type>application/xml</type>
+ <docs>http://www.loc.gov/marc/</docs>
+ </format>
+</formats>
+----------------------------------------------------------------------------
+
+[NOTE]
+============================================================================
+atom-full is currently the only format that includes holdings and availability
+data for a given bibliographic record.
+============================================================================
+
+
+Retrieve records
+~~~~~~~~~~~~~~~~
+
+You can retrieve records using URLs in the following format:
+----
+http://<hostname>/opac/extras/supercat/retrieve/<format>/<record-type>/<record-ID>
+----
+
+For example, http://gapines.org/opac/extras/supercat/retrieve/mods/record/33333
+returns the following record.
+
+[source,xml]
+----------------------------------------------------------------------------
+<?xml version="1.0"?>
+<modsCollection xmlns="http://www.loc.gov/mods/" xmlns:mods="http://www.loc.gov/mods/" version="3.0">
+ <mods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mods="http://www.loc.gov/mods/" xsi:schemaLocation="http://www.loc.gov/mods/ http://www.loc.gov/standards/mods/mods.xsd">
+ <titleInfo>
+ <title>Words and pictures /</title>
+ </titleInfo>
+ <name type="personal">
+ <namePart xmlns:xlink="http://www.w3.org/TR/xlink">Dodd, Siobhan</namePart>
+ <role>
+ <text>creator</text>
+ </role>
+ </name>
+ <typeOfResource xmlns:xlink="http://www.w3.org/TR/xlink">text</typeOfResource>
+ <originInfo xmlns:xlink="http://www.w3.org/TR/xlink">
+ <place>
+ <code authority="marc">mau</code>
+ </place>
+ <place>
+ <text>Cambridge, Mass</text>
+ </place>
+ <publisher>Candlewick Press</publisher>
+ <dateIssued>1992</dateIssued>
+ <edition>1st U.S. ed.</edition>
+ <issuance>monographic</issuance>
+ </originInfo>
+ <language authority="iso639-2b">eng</language>
+ <physicalDescription>
+ <form authority="marcform">print</form>
+ <extent>1 v. (unpaged) : col. ill. ; 26 cm.</extent>
+ </physicalDescription>
+ <abstract>Simple text with picture cues accompany illustrations depicting scenes of everyday life familiar to children, such as getting dressed, attending a party, playing in the park, and taking a bath.</abstract>
+ <targetAudience>juvenile</targetAudience>
+ <note type="statement of responsibility">Siobhan Dodds.</note>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcshac">
+ <topic>Family life</topic>
+ <topic>Fiction</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Vocabulary</topic>
+ <topic>Juvenile fiction</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Rebuses</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Picture puzzles</topic>
+ <topic>Juvenile literature</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Picture books for children</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Picture dictionaries, English</topic>
+ <topic>Juvenile literature</topic>
+ </subject>
+ <subject xmlns:xlink="http://www.w3.org/TR/xlink" authority="lcsh">
+ <topic>Vocabulary</topic>
+ <topic>Juvenile literature</topic>
+ </subject>
+ <classification authority="lcc">PZ7.D66275 Wo 1992</classification>
+ <classification authority="lcc">PN6371.5 .D63 1992x</classification>
+ <classification authority="ddc" edition="20">793.73</classification>
+ <identifier type="isbn">1564020428 :</identifier>
+ <identifier type="isbn">9781564020420</identifier>
+ <identifier type="lccn">91071817</identifier>
+ <recordInfo xmlns:xlink="http://www.w3.org/TR/xlink">
+ <recordContentSource>DLC</recordContentSource>
+ <recordCreationDate encoding="marc">920206</recordCreationDate>
+ <recordChangeDate encoding="iso8601">20110608231047.0</recordChangeDate>
+ <recordIdentifier source="GaAaGPL">33333</recordIdentifier>
+ </recordInfo>
+ </mods>
+</modsCollection>
+----------------------------------------------------------------------------
+
+Recent records
+~~~~~~~~~~~~~~
+
+SuperCat can return feeds of recently edited or created authority and bibliographic records:
+
+----
+http://<hostname>/opac/extras/feed/freshmeat/<feed-type>/<record-type>/<import-or-edit>/<limit>/<date>
+----
+
+Note the following features:
+
+* The limit records imported or edited following the supplied date will be returned. If you do not supply a date, then the most recent limit records will be returned.
+* If you do not supply a limit, then up to 10 records will be returned.
+* feed-type can be one of atom, html, htmlholdings, marcxml, mods, mods3, or rss2.
+
+Example: http://gapines.org/opac/extras/feed/freshmeat/atom/biblio/import/10/2008-01-01
+
+Filtering by Org Unit
+^^^^^^^^^^^^^^^^^^^^^
+
+You can generate a similar list, with the added ability to limit by Org Unit, using the item-age browse axis.
+
+To produce an RSS feed by item date rather than bib date, and to restrict it to a particular system within a consortium:
+
+Example: http://gapines.org/opac/extras/browse/atom/item-age/ARL-BOG/1/10
+
+Note the following:
+
+* ARL-BOG should be the short name of the org unit you're interested in
+* 1 is the page (since you are browsing through pages of results)
+* 10 is the number of results to return per page
+
+Modifying the 'atom' portion of the URL to 'atom-full' will include catalog links in the results:
+
+Example: http://gapines.org/opac/extras/browse/atom-full/item-age/ARL-BOG/1/10
+
+Modifying the 'atom' portion of the URL to 'html-full' will produce an HTML page that is minimally formatted:
+
+Example: http://gapines.org/opac/extras/browse/html-full/item-age/ARL-BOG/1/10
+
+
--- /dev/null
+Using UnAPI
+===========
+
+Evergreen's unAPI support includes access to many
+record types. For example, the following URL would fetch
+bib 267 in MODS32 along with holdings, volume, copy,
+and record attribute information:
+
+https://example.org/opac/extras/unapi?id=tag::U2@bre/267{holdings_xml,acn,acp,mra}&format=mods32
+
+To access the new unAPI features, the unAPI ID should have the
+following form:
+
+ * +tag::U2@+
+ * followed by class name, which may be
+ * +bre+ (bibs)
+ * +biblio_record_entry_feed+ (multiple bibs)
+ * +acl+ (copy locations)
+ * +acn+ (volumes)
+ * +acnp+ (call number prefixes)
+ * +acns+ (call number suffixes)
+ * +acp+ (copies)
+ * +acpn+ (copy notes)
+ * +aou+ (org units)
+ * +ascecm+ (copy stat cat entries)
+ * +auri+ (located URIs)
+ * +bmp+ (monographic parts)
+ * +cbs+ (bib sources)
+ * +ccs+ (copy statuses)
+ * +circ+ (loan checkout and due dates)
+ * +holdings_xml+ (holdings)
+ * +mmr+ (metarecords)
+ * +mmr_holdings_xml+ (metarecords with holdings)
+ * +mmr_mra+ (metarecords with record attributes)
+ * +mra+ (record attributes)
+ * +sbsum+ (serial basic summaries)
+ * +sdist+ (serial distributions)
+ * +siss+ (serial issues)
+ * +sisum+ (serial index summaries)
+ * +sitem+ (serial items)
+ * +sssum+ (serial supplement summaries)
+ * +sstr+ (serial streams)
+ * +ssub+ (serial subscriptions)
+ * +sunit+ (serial units)
+ * followed by +/+
+ * followed by a record identifier (or in the case of
+ the +biblio_record_entry_feed+ class, multiple IDs separated
+ by commas)
+ * followed, optionally, by limit and offset in square brackets
+ * followed, optionally, by a comma-separated list of "includes"
+ enclosed in curly brackets. The list of includes is
+ the same as the list of classes with the following addition:
+ * +bre.extern+ (information from the non-MARC parts of a bib
+ record)
+ * followed, optionally, by +/+ and org unit; "-" signifies
+ the top of the org unit tree
+ * followed, optionally, by +/+ and org unit depth
+ * followed, optionally, by +/+ and a path. If the path
+ is +barcode+ and the class is +acp+, the record ID is taken
+ to be a copy barcode rather than a copy ID; for example, in
+ +tag::U2@acp/ACQ140{acn,bre,mra}/-/0/barcode+, +ACQ140+ is
+ meant to be a copy barcode.
+ * followed, optionally, by +&format=+ and the format in which the record
+ should be retrieved. If this part is omitted, the list of available
+ formats will be retrieved.
+
+
--- /dev/null
+Adding OpenSearch to Firefox browser
+------------------------------------
+
+OpenSearch is a collection of simple formats for the sharing of search results.
+More information about OpenSearch can be found on their
+http://www.opensearch.org[website].
+
+The following example illustrates how to add an OpenSearch source to the list
+of search sources in a Firefox browser:
+
+. Navigate to any catalog page in your Firefox browser and click on the top
+ right box's dropdown and select the option for *Add "Example Consortium OpenSearch"*.
+ The label will match the current scope.
++
+image::media/opensearch1.png[opensearch1]
+
+. At this point, it will add a new search option for the location the catalog
+ is currently using. In this example, that is CONS (searching the whole
+ consortium).
++
+image::media/opensearch2.png[opensearch2]
+
+. Enter search terms to begin a keyword search using this source. The next
+ image illustrates an example search for "mozart" using the sample bib
+ record set.
++
+image::media/opensearch3.png[opensearch3]
+
+. You can select which search source to use by clicking on the dropdown
+ picker.
++
+image::media/opensearch4.png[opensearch4]
--- /dev/null
+Phonelist.pm Module
+===================
+
+PhoneList.pm is a mod_perl module for Apache that works with Evergreen
+to generate callings lists for patron holds or overdues. It outputs a csv file
+that can be fed into an auto-dialer script to call patrons with little
+or no staff intervention. It is accessed and configured via a special
+URL and passing any parameters as a ``Query String'' on the URL. The
+parameters are listed in the table below.
+
+.Parameters for the phonelist program:
+|=====================================
+| user | Your Evergreen login. Typically your library's circ account. If you leave this off, you will be prompted to login.
+| passwd | The password for your Evergreen login. If you leave this off you will be prompted to login.
+| ws_ou | The ID of the system or branch you want to generate the list for (optional). If your account does not have the appropriate permissions for the location whose ID number you have entered, you will get an error.
+| skipemail | If present, skip patrons with email notification (optional).
+| addcount | Add a count of items on hold (optional). Only makes sense for holds.
+| overdue | Makes a list of patrons with overdues instead of holds. If an additional, numeric parameter is supplied, it will be used as the number of days overdue. If no such extra parameter is supplied, then the default of 14 days is used.
+|=====================================
+
+The URL is
+
+`https://your.evergreen-server.tld/phonelist`
+
+A couple of examples follow:
+
+`https://your.evergreen-server.tld/phonelist?user=circuser&passwd=password&skipemail
+
+The above example would sign in as user circuser with password of
+``password'' and get a list of patrons with holds to call who do not
+have email notification turned on. It would run at whatever branch is
+normally associated with circuser.
+
+`https://your.evergreen-server.tld/phonelist?skipemail`
+
+The above example would do more or less the same, but you would be
+prompted by your browser for the user name and password.
+
+If your browser or download script support it, you may also use
+conventional HTTP authentication parameters.
+
+`https://user:password@your.evergreen-server.tld/phonelist?overdue&ws_ou=2`
+
+The above logs in as ``user'' with ``password'' and runs overdues for location ID 2.
+
+The following sections provide more information on getting what you want in your output.
+
+Adding Parameters
+-----------------
+
+If you are not familiar with HTTP/URL query strings, the format is
+quite simple.
+
+You add parameters to the end of the URL, the first parameter is
+separated from the URL page with a question mark (``?'') character. If
+the parameter is to be given an extra value, then that value follows
+the parameter name after an equals sign (``=''). Subsequent parameters
+are separated from the previous parameter by an ampersand (``&'').
+
+Here is an example with 1 parameter that has no value:
+
+`https://your.evergreen-server.tld/phonelist?skipemail`
+
+An example of 1 argument with a value:
+
+`https://your.evergreen-server.tld/phonelist?overdue=21`
+
+An example of 2 arguments, 1 with a value and 1 without:
+
+`https://your.evergreen-server.tld/phonelist?overdue=21&skipemail`
+
+Any misspelled or parameters not listed in the table above will be
+ignored by the program.
+
+Output
+------
+
+On a successful run, the program will return a CSV file named
+phone.csv. Depending on your browser or settings you will alternately
+be prompted to open or save the file. Your browser may also
+automatically save the file in your Downloads or other designated
+folder. You should be able to open this CSV file in Excel, LibreOffice
+Base, any other spread sheet program, or a text editor.
+
+If you have made a mistake and have mistyped your user name or
+password, or if you supply a ws_ou parameter with an ID where your
+user name does not have permission to look up holds or overdue
+information, then you will get an error returned in your browser.
+
+Should your browser appear to do absolutely nothing at all. This is
+normal. When there is no information for you to download, the server
+will return a 200 NO CONTENT message to your browser. Most browsers
+respond to this message by doing nothing at all. It is possible for
+there to be no information for you to retrieve if you added the
+`skipemail` option and all of your notices for that day were sent via
+email, or if you ran this in the morning and then again in the
+afternoon and there was no new information to gather.
+
+The program does indicate that it has already looked at a particular
+hold or overdue and will skip it on later runs. This prevents
+duplicates to the same patron in the same run. It will, however,
+create a ``duplicate'' for the same patron if a different copy is put
+on hold for that patron in between two runs.
+
+The specific content of the CSV file will vary if you are looking at
+holds or overdues. The specific contents are described in the
+appropriate sections below.
+
+Holds
+-----
+
+The `phonelist` program will return a list of patrons with copies on
+hold by default, so long as you do not use the `overdue`
+parameter. You may optionally get a number of items that patron
+currently has on hold by adding the `addcount` parameter.
+
+As always, you can add the skipemail parameter to skip patrons with
+email notifications of their overdues, [#0.5.Skipping patrons with
+email notification of holds|outline as described below].
+
+.Columns in the holds CSV file:
+|=====================================
+| Name | Patron's name first and last.
+| Phone | Patron's phone number.
+| Barcode | Patron's barcode.
+| Count | Number of copies on hold, if `addcount` parameter is used, otherwise this column is not present in the file.
+|=====================================
+
+Overdues
+--------
+
+If you add the `overdue` parameter, you can get a list of patrons with
+overdue copies instead of a list of patrons with copies on the hold
+shelf. By default, this will give you a list of patrons with copies
+that are 14 days overdue. If you'd like to specify a different number
+of days you can add the number after the parameter with an equals
+sign:
+
+`https://your.evergreen-server.tld/phonelist?overdue=21&ws_ou=2`
+
+The above will retrieve a list of patrons who have items that are 21
+days overdue at the location with ID of 2.
+
+The number of days is an exact lookup. This means that the program
+will look only at patrons who have items exactly 14 days or exactly
+the number of days specified overdue. It does not pull up any that are
+less than or greater than the number of days specified.
+
+As always, you can add the skipemail parameter to skip patrons with
+email notifications of their overdues, [#0.5.Skipping patrons with
+email notification of holds|outline as described below].
+
+.Columns in the overdues CSV file:
+|=================================
+| Name | Patron's name first and last.
+| Phone | Patron's phone number.
+| Barcode | Patron's barcode.
+| Titles | A colon-separated list of titles that the patron has overdue.
+|=================================
+
+Skipping patrons with email notification of holds
+-------------------------------------------------
+
+Skipping patrons who have email notification for their holds or
+overdues is very simple. You just need to add the `skipemail`
+parameter on the URL query string. Doing so will produce the list
+without the patrons who have email notification for overdues, or for
+all of their holds. Please note that if a patron has multiple holds
+available, and even one of these holds requests a phone-only
+notification, then that patron will still show on the list. For this
+option to exclude a patron from the holds list, the patron must
+request email notification on all of their current holds. In practice,
+we find that this is usually the case.
+
+Using the ws_ou parameter
+-------------------------
+
+Generally, you will not need to use the ws_ou parameter when using the
+phonelist program. The phonelist will look up the branch where your
+login account works and use that location when generating the list.
+However, if you are part of a multi-branch systems in a consortium,
+then the ws_ou parameter will be of interest to you. You can use it
+to specify which branch, or the whole system, you wish to search when
+running the program.
+
+Automating the download
+-----------------------
+
+If you'd like to automate the download of these files, you should be
+able to do so using any HTTP programming toolkit. Your client must
+accept cookies and follow any redirects in order to function.
--- /dev/null
+RFID Product Integration
+========================
+
+Evergreen Integration with PV Supa GoodStuff RFID Reader
+--------------------------------------------------------
+
+This feature enables the Evergreen staff client to "talk" to the PV Supa Goodstuff RFID reader so that libraries can utilize PV Supa Goodstuff's RFID technology when checking items in and out.
+
+*Administration*
+
+
+To use PV Supa Goodstuff, you must add code to the Admin module that Evergreen can use to identify the reader.
+
+
+. Click *Admin* -> *Workstation Admin* -> *Server Add-ons*.
+
+. Enter the code, pv_supa_goodstuff, to identify PV Supa Goodstuff in the *Active Server Add-Ons* field.
+
+. Click *Update Active Add-Ons*.
+
+. Look at the next field, *Add-on Preferences*. Enter information in the *GoodStuff* tab.
+
+. Check the *Enabled* check box to enable this add-on.
+
+. Enter the *IP/Hostname* of the hardware.
+
+. Enter the *port*.
+
+. Click *Update*.
+
+
+
+*Using RFID at the Circulation Desk*
+
+RFID functionality is available in the Circulation module via the check-out interface, the check-out function in the patron account, and the check-in interface.
+
+
+From the *Check-Out* interface (F1):
+
+. Check the RFID checkbox if your library cards have embedded RFID chips that Evergreen can use to retrieve the patron barcode. RFID check boxes appear only if appropriate code words have been added in the Server Add-Ons.
+
+. Place the patron's library card and/or item(s) on the PV Supa Goodstuff Reader. Evergreen will take you to the patron's account. If item(s) with RFID chips have also been placed on the reader, and the corresponding checkbox is checked, then Evergreen will scan the item(s) into the patron's account.
+
+NOTE: RFID check boxes are sticky, so if you have checked an RFID box once, then it will continue to be checked when you re-open the interface.
+
+NOTE: If you do not use RFID chips to retrieve patrons' accounts, then leave the RFID box unchecked. You can scan a patron barcode with a barcode scanner, and Evergreen will retrieve the patron data without using the RFID feature. From the patron's account, Evergreen can check out items using the RFID reader. See the next section for details.
+
+. Click *Done* to complete the transaction, or close the window.
+
+
+
+
+From the Check-Out tab in a patron's record:
+
+
+. Open a patron's record, and stack the item(s) to be checked out on the RFID reader. To retrieve item data using the RFID chips embedded in the item barcodes, click the *RFID* check box at the bottom of the patron account. When this box is checked, Evergreen will read the item(s) that are stacked on the RFID reader, check out the item(s), and disable the security bits.
+
+
+. Click *Done* to complete the transaction, or close the window.
+
+NOTE: Evergreen pop-up messages, such as an Alert Message or Item Already Circulating may appear during transactions. Two new dialogs specific to PV Supa Goodstuff may also appear. One dialog, Incomplete Sets, allows you to continue checking out an incomplete set, such as a CD collection, or you can ask the hardware to rescan the RFID tags to look again for a full set. The second dialog allows you to manually attempt to set or unset the security bit on an item if the automatic attempt failed.
+
+
+
+
+From the *Check In* interface:
+
+. Click the *RFID* check box.
+
+. Place the items on the PV Supa Goodstuff Reader.
+
+. Evergreen will tell the reader to check in the item(s) and enable the security bits. The item(s) appear in a list on the screen.
+
--- /dev/null
+Adding an Evergreen search form to a web page
+=============================================
+
+To enable users to quickly search your Evergreen catalog, you can add a
+simple search form to any HTML page. The following code demonstrates
+how to create a quick search box suitable for the header of your web
+site:
+
+Simple search form
+------------------
+
+[source,html]
+------------------------------------------------------------------------------
+<form action="http://example.com/eg/opac/results" method="get" accept-charset="UTF-8"> <!-- <1> -->
+ <input type="search" alt="Catalog Search" maxlength="200"
+ size="20" name="query"
+ placeholder="Search catalog for..." />
+ <input type="hidden" name="qtype" value="keyword" /> <!-- <2> -->
+ <input type="hidden" name="locg" value="4" /> <!-- <3> -->
+ <input type="submit" value="Search" />
+</form>
+------------------------------------------------------------------------------
+<1> Replace ''example.com'' with the hostname for your catalog. To link to
+ the Kid's OPAC instead of the TPAC, replace ''opac'' with ''kpac''.
+<2> Replace ''keyword'' with ''title'', ''author'', ''subject'', or ''series''
+ if you want to provide more specific searches. You can even specify
+ ''identifier|isbn'' for an ISBN search.
+<3> Replace ''4'' with the ID number of the organizational unit at which you
+ wish to anchor your search. This is the value of the ''locg'' parameter in
+ your normal search.
+
+Advanced search form
+--------------------
+
+[source,html]
+--------------------------------------------------------------------------------
+<form role="search" id="searchForm" method="get" class="searchform" action="http://your_catalog/eg/opac/results" accept-charset="UTF-8">
+ <label id="searchLabel" for="search"><b>Search the Catalog: </b></label>
+ <input type="search" value="" name="query" id="search" size="30">
+ <label id="search_qtype_label"><b>Type:</b>
+ <select name="qtype" id="qtype" aria-label="Select query type:">
+ <option value='keyword' selected="selected">Keyword</option>
+ <option value='title'>Title</option>
+ <option value='jtitle'>Journal Title</option>
+ <option value='author'>Author</option>
+ <option value='subject'>Subject</option>
+ <option value='series'>Series</option>
+ </select>
+ </label>
+
+ <label id="search_itype_label"><b>Format: </b>
+ <select id='item_type_selector' name='fi:item_type' aria-label="Select item type:">
+ <option value=''>All Formats</option>
+ <option value='a'>Books and Journals</option>
+ <option value='i'>Nonmusical Sound Recording</option>
+ <option value='j'>Musical Sound Recording</option>
+ <option value='g'>Video</option>
+ </select>
+ </label>
+
+ <label id="search_locg_label"><b>Library: </b>
+ <select aria-label='Select search library' name='locg'>
+ <option value='1' class="org_unit">
+ All Libraries
+ </option>
+ <option value='2' selected="selected" class="org_unit">
+ Central Library
+ </option>
+ <option value='10' class="org_unit">
+ Little Library
+ </option>
+ </select>
+ </label>
+ <input class="searchbutton" type="submit" value="SEarch" />
+</form>
+--------------------------------------------------------------------------------
+
+Encoding
+--------
+
+For non English characters it is vital to set the attribute `accept-charset="UTF-8"` in the form tag (as in the examples above). If the parameter is not set, records with non English characters will not be retrieved.
+
+Setting the document type
+-------------------------
+
+You can set the document types to be searched using the attribute `option value=` in the form. For the value use MARC 21 code defining the type of record (i.e. https://www.loc.gov/marc/bibliographic/bdleader.html[Leader, position 06]).
+
+For example, for musical recordings you could use `<option value='j'>Musical Sound Recording</option>`
+
+Setting the library
+-------------------
+
+Instead of searching the entire consortium, you can set the Library to be searched in using the attribute `option value=` in the form. For the value use Evergreen database.organization unit ID.
+
+
--- /dev/null
+SIP Server
+----------
+
+indexterm:[Automated Circulation System]
+indexterm:[SelfCheck]
+indexterm:[Automated Material Handling]
+
++SIP+, standing for +Standard Interchange Protocol+, was developed by the +3M corporation+ to be a common
+protocol for data transfer between ILS' (referred to in +SIP+ as an _ACS_, or _Automated Circulation System_) and a
+third party device. Originally, the protocol was developed for use with _3M SelfCheck_ (often abbreviated SC, not to
+be confused with Staff Client) systems, but has since expanded to other companies and devices. It is now common
+to find +SIP+ in use in several other vendors' SelfCheck systems, as well as other non-SelfCheck devices. Some
+examples include:
+
+* Patron Authentication (computer access, subscription databases)
+* Automated Material Handling (AMH)
+** The automated sorting of items, often to bins or book carts, based on shelving location or other programmable
+criteria
+
+Installing the SIP Server
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+
+This is a rough intro to installing the +SIP+ server for Evergreen.
+
+Getting the code
+^^^^^^^^^^^^^^^^
+
+Current +SIP+ server code lives at in the Evergreen git repository:
+
+ cd /opt
+ git clone git://git.evergreen-ils.org/SIPServer.git SIPServer
+
+
+Configuring the Server
+^^^^^^^^^^^^^^^^^^^^^^
+
+indexterm:[configuration files, oils_sip.xml]
+
+. Type the following commands from the command prompt:
+
+ $ sudo su opensrf
+ $ cd /openils/conf
+ $ cp oils_sip.xml.example oils_sip.xml
+
+. Edit oils_sip.xml. Change the commented out <server-params> section to this:
+
+ <server-params
+ min_spare_servers='1'
+ max_spare_servers='2'
+ min_servers='3'
+ max_servers='25'
+ />
+
+. max_servers will directly correspond to the number of allowed +SIP+ clients. Set the number accordingly, but
+bear in mind that too many connections can exhaust memory. On a 4G RAM/4 CPU server (that is also running
+evergreen), it is not recommended to exceed 100 +SIP+ client connections.
+
+Adding SIP Users
+^^^^^^^^^^^^^^^^
+
+indexterm:[configuration files, oils_sip.xml]
+
+. Type the following commands from the command prompt:
+
+ $ sudo su opensrf
+ $ cd /openils/conf
+
+. In the +<accounts>+ section, add +SIP+ client login information. Make sure that all +<logins>+ use the same
+institution attribute, and make sure the institution is listed in +<institutions>+. All attributes in the
++<login>+ section will be used by the +SIP+ client.
+
+. In Evergreen, create a new profile group called +SIP+. This group should be a sub-group of +Users+ (not +Staff+
+or +Patrons+). Set _Editing Permission_ as *group_application.user.sip_client* and give the group the following
+permissions:
++
+ COPY_CHECKIN
+ COPY_CHECKOUT
+ CREATE_PAYMENT
+ RENEW_CIRC
+ VIEW_CIRCULATIONS
+ VIEW_COPY_CHECKOUT_HISTORY
+ VIEW_PERMIT_CHECKOUT
+ VIEW_USER
+ VIEW_USER_FINES_SUMMARY
+ VIEW_USER_TRANSACTIONS
++
+OR use SQL like:
++
+
+ INSERT INTO permission.grp_tree (name,parent,description,application_perm)
+ VALUES ('SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client');
+
+ INSERT INTO
+ permission.grp_perm_map (grp, perm, depth, grantable)
+ SELECT
+ g.id, p.id, 0, FALSE
+ FROM
+ permission.grp_tree g,
+ permission.perm_list p
+ WHERE
+ g.name = 'SIP' AND
+ p.code IN (
+ 'COPY_CHECKIN',
+ 'COPY_CHECKOUT',
+ 'RENEW_CIRC',
+ 'VIEW_CIRCULATIONS',
+ 'VIEW_COPY_CHECKOUT_HISTORY',
+ 'VIEW_PERMIT_CHECKOUT',
+ 'VIEW_USER',
+ 'VIEW_USER_FINES_SUMMARY',
+ 'VIEW_USER_TRANSACTIONS'
+ );
++
+Verify:
++
+
+ SELECT *
+ FROM permission.grp_perm_map pgpm
+ INNER JOIN permission.perm_list ppl ON pgpm.perm = ppl.id
+ INNER JOIN permission.grp_tree pgt ON pgt.id = pgpm.grp
+ WHERE pgt.name = 'SIP';
+
+
+
+. For each account created in the +<login>+ section of oils_sip.xml, create a user (via the staff client user
+editor) that has the same username and password and put that user into the +SIP+ group.
+
+[NOTE]
+===================
+The expiration date will affect the +SIP+ users' connection so you might want to make a note of this
+somewhere.
+===================
+
+Running the server
+^^^^^^^^^^^^^^^^^^
+
+To start the +SIP+ server type the following commands from the command prompt:
+
+
+ $ sudo su opensrf
+
+ $ oils_ctl.sh -a [start|stop|restart]_sip
+
+indexterm:[SIP]
+
+
+Logging-SIP
+^^^^^^^^^^^
+
+Syslog
+++++++
+
+indexterm:[syslog]
+
+
+It is useful to log +SIP+ requests to a separate file especially during initial setup by modifying your syslog config file.
+
+. Edit syslog.conf.
+
+ $ sudo vi /etc/syslog.conf # maybe /etc/rsyslog.conf
+
+
+. Add this:
+
+ local6.* -/var/log/SIP_evergreen.log
+
+. Syslog expects the logfile to exist so create the file.
+
+ $ sudo touch /var/log/SIP_evergreen.log
+
+. Restart sysklogd.
+
+ $ sudo /etc/init.d/sysklogd restart
+
+
+Syslog-NG
++++++++++
+
+indexterm:[syslog-NG]
+
+. Edit logging config.
+
+ sudo vi /etc/syslog-ng/syslog-ng.conf
+
+. Add:
+
+ # +SIP2+ for Evergreen
+ filter f_eg_sip { level(warn, err, crit) and facility(local6); };
+ destination eg_sip { file("var/log/SIP_evergreen.log"); };
+ log { source(s_all); filter(f_eg_sip); destination(eg_sip); };
+
+. Syslog-ng expects the logfile to exist so create the file.
+
+ $ sudo touch /var/log/SIP_evergreen.log
+
+. Restart syslog-ng
+
+ $ sudo /etc/init.d/syslog-ng restart
+
+
+indexterm:[SIP]
+
+
+Testing Your SIP Connection
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* In the root directory of the SIPServer code:
+
+ $ cd SIPServer/t
+
+* Edit SIPtest.pm, change the $instid, $server, $username, and $password variables. This will be
+enough to test connectivity. To run all tests, you'll need to change all the variables in the _Configuration_ section.
+
+ $ PERL5LIB=../ perl 00sc_status.t
++
+This should produce something like:
++
+
+ 1..4
+ ok 1 - Invalid username
+ ok 2 - Invalid username
+ ok 3 - login
+ ok 4 - SC status
+
+* Don't be dismayed at *Invalid Username*. That's just one of the many tests that are run.
+
+More Testing
+^^^^^^^^^^^^
+
+Once you have opened up either the +SIP+ OR +SIP2+ ports to be accessible from outside you can do some testing
+via +telnet+. In the following tests:
+
+* Replace +$server+ with your server hostname (or +localhost+ if you want to
+ skip testing external access for now);
+* Replace +$username+, +$password+, and +$instid+ with the corresponding values
+ in the +<accounts>+ section of your SIP configuration file;
+* Replace the +$user_barcode+ and +$user_password+ variables with the values
+ for a valid user.
+* Replace the +$item_barcode+ variable with the values for a valid item.
+
+///////////////
+Comments because we don't want to indent these numbered bullets!
+///////////////
+
+. Start by testing your ability to log into the SIP server:
++
+[NOTE]
+======================
+We are using 6001 here which is associated with +SIP2+ as per our configuration.
+======================
++
+ $ telnet $server 6001
+ Connected to $server.
+ Escape character is '^]'.
+ 9300CN$username|CO$password|CP$instid
++
+If successful, the SIP server returns a +941+ result. A result of +940+,
+however, indicates an unsuccessful login attempt. Check the +<accounts>+
+section of your SIP configuration and try agin.
+
+. Once you have logged in successfully, replace the variables in the following
+line and paste it into the telnet session:
++
+ 2300120080623 172148AO$instid|AA$user_barcode|AC$password|AD$user_password
++
+If successful, the SIP server returns the patron information for $user_barcode,
+similar to the following:
++
+ 24 Y 00120100113 170738AEFirstName MiddleName LastName|AA$user_barcode|BLY|CQY
+ |BHUSD|BV0.00|AFOK|AO$instid|
++
+The response declares it is a valid patron BLY with a valid password CQY and shows the user's +$name+.
+
+. To test the SIP server's item information response, issue the following request:
++
+ 1700120080623 172148AO$instid|AB$item_barcode|AC$password
++
+If successful, the SIP server returns the item information for $item_barcode,
+similar to the following:
++
+ 1803020120160923 190132AB30007003601852|AJRégion de Kamouraska|CK001|AQOSUL|APOSUL|BHCAD
+ |BV0.00|BGOSUL|CSCA2 PQ NR46 73R
++
+The response declares it is a valid item, with the title, owning library,
+permanent and current locations, and call number.
+
+indexterm:[SIP]
+
+SIP Communication
+~~~~~~~~~~~~~~~~~
+
+indexterm:[SIP Server, SIP Communication]
+
++SIP+ generally communicates over a +TCP+ connection (either raw sockets or over +telnet+), but can also
+communicate via serial connections and other methods. In Evergreen, the most common deployment is a +RAW+ socket
+connection on port 6001.
+
++SIP+ communication consists of strings of messages, each message request and response begin with a 2-digit
+``command'' - Requests usually being an odd number and responses usually increased by 1 to be an even number. The
+combination numbers for the request command and response is often referred to as a _Message Pair_ (for example,
+a 23 command is a request for patron status, a 24 response is a patron status, and the message pair 23/24 is patron
+status message pair). The table in the next section shows the message pairs and a description of them.
+
+For clarification, the ``Request'' is from the device (selfcheck or otherwise) to the ILS/ACS. The response is… the
+response to the request ;).
+
+Within each request and response, a number of fields (either a fixed width or separated with a | [pipe symbol] and
+preceded with a 2-character field identifier) are used. The fields vary between message pairs.
+
+|===========================================================================
+| *Pair* | *Name* | *Supported?* |*Details*
+| 01 | Block Patron | Yes |<<sip_01_block_patron, 01/Block_Patron>> - ACS responds with 24 Patron Status Response
+| 09-10 | Checkin | Yes (with extensions) |<<sip_09-10_checkin, 09/10_Checkin>>
+| 11-12 | Checkout | Yes (no renewals) |<<sip_11-12_checkout, 11/12_Checkout>>
+| 15-16 | Hold | Partially supported |<<sip_15-16_hold, 15/16_Hold>>
+| 17-18 | Item Information | Yes (no extensions) |<<sip_17-18_item_information, 17/18_Item_Information>>
+| 19-20 | Item Status Update | No |<<sip_19-20_item_status_update, 19/20_Item_Status_Update>> - Returns Patron Enable response, but doesn't make any changes in EG
+| 23-24 | Patron Status | Yes |<<sip_23-24_patron_status, 23/24_Patron_Status>> - 63/64 ``Patron Information'' preferred
+| 25-26 | Patron Enable | No |<<sip_25-26_patron_enable, 25/26_Patron_Enable>> - Used during system testing and validation
+| 29-30 | Renew | Yes |<<sip_29-30_renew, 29/30_Renew>>
+| 35-36 | End Session | Yes |<<sip_35-36_end_session, 35/36_End_Session>>
+| 37-38 | Fee Paid | Yes |<<sip_37-38_fee_paid, 37/38_Fee_Paid>>
+| 63-64 | Patron Information | Yes (no extensions) |<<sip_63-64_patron_information, 63/64_Patron_Information>>
+| 65-66 | Renew All | Yes |<<sip_65-66_renew_all, 65/66_Renew_All>>
+| 93-94 | Login | Yes |<<sip_93-94_login, 93/94_Login>> - Must be first command to Evergreen ACS (via socket) or +SIP+ will terminate
+| 97-96 | Resend last message | Yes |<<sip_97-96_resend, 97/96_Resend>>
+| 99-98 | SC-ACS Status | Yes |<<sip_99-98_sc_and_acs_status, 99/98_SC_and_ACS_Status>>
+|===========================================================================
+
+anchor:sip_01_block_patron[]
+
+01 Block Patron
+^^^^^^^^^^^^^^^
+
+indexterm:[SelfCheck]
+
+A selfcheck will issue a *Block Patron* command if a patron leaves their card in a selfcheck machine or if the
+selfcheck detects tampering (such as attempts to disable multiple items during a single item checkout, multiple failed
+pin entries, etc).
+
+In Evergreen, this command does the following:
+
+* User alert message: _CARD BLOCKED BY SELF-CHECK MACHINE_ (this is independent of the AL _Blocked
+Card Message_ field).
+
+* Card is marked inactive.
+
+The request looks like:
+
+ 01<card retained><date>[fields AO, AL, AA, AC]
+
+_Card Retained_: A single character field of Y or N - tells the ACS whether the SC has retained the card (ex: left in
+the machine) or not.
+
+_Date_: An 18 character field for the date/time when the block occurred.
+
+_Format_: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, ``Z'' (3 blanks and a Z)
+represents UTC(GMT/Zulu)
+
+_Fields_: See <<fields, Fields>> for more details.
+
+The response is a 24 ``Patron Status Response'' with the following:
+
+* Charge privileges denied
+* Renewal privileges denied
+* Recall privileges denied (hard-coded in every 24 or 64 response)
+* hold privileges denied
+* Screen Message 1 (AF): _blocked_
+* Patron
+
+anchor:sip_09-10_checkin[]
+
+09/10 Checkin
+^^^^^^^^^^^^^
+
+~The request looks like:
+
+ 09<No block (Offline)><xact date><return date>[Fields AP,AO,AB,AC,CH,BI]
+
+_No Block (Offline)_: A single character field of _Y_ or _N_ - Offline transactions are not currently supported so send _N_.
+
+_xact date_: an 18 character field for the date/time when the checkin occurred. Format:
+YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, ``Z'' (3 blanks and a Z) represents
+UTC(GMT/Zulu)
+
+_Fields_: See <<fields, Fields>> for more details.
+
+The response is a 10 ``Checkin Response'' with the following:
+
+ 10<resensitize><magnetic media><alert><xact date>[Fields AO,AB,AQ,AJ,CL,AA,CK,CH,CR,CS,CT,CV,CY,DA,AF,AG]
+
+Example (with a remote hold):
+
+ 09N20100507 16593720100507 165937APCheckin Bin 5|AOBR1|AB1565921879|ACsip_01|
+
+ 101YNY20100623 165731AOBR1|AB1565921879|AQBR1|AJPerl 5 desktop reference|CK001|CSQA76.73.P33V76 1996
+ |CTBR3|CY373827|DANicholas Richard Woodard|CV02|
+
+Here you can see a hold alert for patron CY _373827_, named DA _Nicholas Richard Woodard_, to be picked up at CT
+``BR3''. Since the transaction is happening at AO ``BR1'', the alert type CV is 02 for _hold at remote library_. The
+possible values for CV are:
+
+* 00: unknown
+
+* 01: local hold
+
+* 02: remote hold
+
+* 03: ILL transfer (not used by EG)
+
+* 04: transfer
+
+* 99: other
+
+indexterm:[magnetic media]
+
+[NOTE]
+===============
+The logic for Evergreen to determine whether the content is magnetic_media comes from either legacy circ
+scripts or search_config_circ_modifier. The default is non-magnetic. The same is true for media_type (default
+001). Evergreen does not populate the collection_code because it does not really have any, but it will provide
+the call_number where available.
+
+Unlike the +item_id+ (barcode), the +title_id+ is actually a title string, unless the configuration forces the
+return of the bib ID.
+
+Don't be confused by the different branches that can show up in the same response line.
+
+* AO is where the transaction took place,
+
+* AQ is the ``permanent location'', and
+
+* CT is the _destination location_ (i.e., pickup lib for a hold or target lib for a transfer).
+================
+
+anchor:sip_11-12_checkout[]
+
+11/12 Checkout
+^^^^^^^^^^^^^^
+
+
+anchor:sip_15-16_hold[]
+
+15/16 Hold
+^^^^^^^^^^
+
+Evergreen supports the Hold message for the purpose of canceling
+holds. It does not currently support creating hold requests via SIP2.
+
+
+anchor:sip_17-18_item_information[]
+
+17/18 Item Information
+^^^^^^^^^^^^^^^^^^^^^^
+
+The request looks like:
+
+ 17<xact_date>[fields: AO,AB,AC]
+
+The request is very terse. AC is optional.
+
+The following response structure is for +SIP2+. (Version 1 of the protocol had only 6 total fields.)
+
+ 18<circulation_status><security_marker><fee_type><xact_date>
+ [fields: CF,AH,CJ,CM,AB,AJ,BG,BH,BV,CK,AQ,AP,CH,AF,AG,+CT,+CS]
+
+Example:
+
+ 1720060110 215612AOBR1|ABno_such_barcode|
+
+ 1801010120100609 162510ABno_such_barcode|AJ|
+
+ 1720060110 215612AOBR1|AB1565921879|
+
+ 1810020120100623 171415AB1565921879|AJPerl 5 desktop reference|CK001|AQBR1|APBR1|BGBR1
+ |CTBR3|CSQA76.73.P33V76 1996|
+
+The first case is with a bogus barcode. The latter shows an item with a circulation_status of _10_ for _in transit between
+libraries_. The known values of +circulation_status+ are enumerated in the spec.
+
+indexterm:[Automated Material Handling (AMH)]
+
+EXTENSIONS: The CT field for _destination location_ and CS _call number_ are used by Automated Material Handling
+systems.
+
+
+anchor:sip_19-20_item_status_update[]
+
+19/20 Item Status Update
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+
+anchor:sip_23-24_patron_status[]
+
+23/24 Patron Status
+^^^^^^^^^^^^^^^^^^^
+
+Example:
+
+ 2300120060101 084235AOUWOLS|AAbad_barcode|ACsip_01|ADbad_password|
+
+ 24YYYY 00120100507 013934AE|AAbad_barcode|BLN|AOUWOLS|
+
+ 2300120060101 084235AOCONS|AA999999|ACsip_01|ADbad_password|
+
+ 24 Y 00120100507 022318AEDoug Fiander|AA999999|BLY|CQN|BHUSD|BV0.00|AFOK|AOCONS|
+
+ 2300120060101 084235AOCONS|AA999999|ACsip_01|ADuserpassword|LY|CQN|BHUSD|BV0.00|AFOK|AOCONS|
+
+ 24 Y 00120100507 022803AEDoug Fiander|AA999999|BLY|CQY|BHUSD|BV0.00|AFOK|AOCONS|
+
+. The BL field (+SIP2+, optional) is _valid patron_, so the _N_ value means _bad_barcode_ doesn't match a patron, the
+_Y_ value means 999999 does.
+
+. The CQ field (+SIP2+, optional) is _valid password_, so the _N_ value means _bad_password_ doesn't match 999999's
+password, the _Y_ means _userpassword_ does.
+
+So if you were building the most basic +SIP2+ authentication client, you would check for _|CQY|_ in the response to
+know the user's barcode and password are correct (|CQY| implies |BLY|, since you cannot check the password
+unless the barcode exists). However, in practice, depending on the application, there are other factors to consider in
+authentication, like whether the user is blocked from checkout, owes excessive fines, reported their card lost, etc.
+These limitations are reflected in the 14-character _patron status_ string immediately following the _24_ code. See the
+field definitions in your copy of the spec.
+
+
+anchor:sip_25-26_patron_enable[]
+
+25/26 Patron Enable
+^^^^^^^^^^^^^^^^^^^
+
+Not yet supported.
+
+
+anchor:sip_29-30_renew[]
+
+29/30 Renew
+^^^^^^^^^^^
+
+Evergreen supports the Renew message.
+
+
+anchor:sip_35-36_end_session[]
+
+35/36 End Session
+^^^^^^^^^^^^^^^^^
+
+ 3520100505 115901AOBR1|AA999999|
+
+ 36Y20100507 161213AOCONS|AA999999|AFThank you!|
+
+The _Y/N_ code immediately after the 36 indicates _success/failure_. Failure is not particularly meaningful or important
+in this context, and for evergreen it is hardcoded _Y_.
+
+
+
+anchor:sip_37-38_fee_paid[]
+
+37/38 Fee Paid
+^^^^^^^^^^^^^^
+
+Evergreen supports the Fee Paid message.
+
+
+anchor:sip_63-64_patron_information[]
+
+63/64 Patron Information
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Attempting to retrieve patron info with a bad barcode:
+
+ 6300020060329 201700 AOBR1|AAbad_barcode|
+
+ 64YYYY 00020100623 141130000000000000000000000000AE|AAbad_barcode|BLN|AOBR1|
+
+Attempting to retrieve patron info with a good barcode (but bad patron password):
+
+ 6300020060329 201700 AOBR1|AA999999|ADbadpwd|
+
+ 64 Y 00020100623 141130000000000000000000000000AA999999|AEDavid J. Fiander|BHUSD|BV0.00
+ |BD2 Meadowvale Dr. St Thomas, ON Canada
+
+ 90210|BEdjfiander@somemail.com|BF(519) 555 1234|AQBR1|BLY|CQN|PB19640925|PCPatrons
+ |PIUnfiltered|AFOK|AOBR1|
+
+See <<sip_23-24_patron_status, 23/24 Patron Status>> for info on +BL+ and +CQ+ fields.
+
+
+
+anchor:sip_65-66_renew_all[]
+
+65/66 Renew All
+^^^^^^^^^^^^^^^
+
+Evergreen supports the Renew All message.
+
+
+anchor:sip_93-94_login[]
+
+93/94 Login
+^^^^^^^^^^^
+
+Example:
+
+ 9300CNsip_01|CObad_value|CPBR1|
+
+ [Connection closed by foreign host.]
+ ...
+
+ 9300CNsip_01|COsip_01|CPBR1|
+
+ 941
+
+_941_ means successful terminal login. _940_ or getting dropped means failure.
+
+
+anchor:sip_97-96_resend[]
+
+97/96 Resend
+^^^^^^^^^^^^
+
+
+anchor:sip_99-98_sc_and_acs_status[]
+
+99/98 SC and ACS Status
+^^^^^^^^^^^^^^^^^^^^^^^
+
+ 99<status code><max print width><protocol version>
+
+All 3 fields are required:
+
+* 0: SC is OK
+
+* 1: SC is out of paper
+
+* 2: SC shutting down
+
+* status code - 1 character
+
+* max print width - 3 characters - the integer number of characters the client can print
+
+* protocol version - 4 characters - x.xx
+
+ 98<on-line status><checkin ok><checkout ok><ACS renewal policy>
+ <status update ok><offline ok><timeout period>
+
+ <retries allowed><date/time sync><protocol version><institution id>
+ <library name><supported messages><terminal
+
+ location><screen message><print line>
+
+Example:
+
+ 9910302.00
+
+ 98YYYYNN60000320100510 1717202.00AOCONS|BXYYYYYYYYYNYNNNYN|
+
+The Supported Messages field +BX+ appears only in +SIP2+, and specifies whether 16 different +SIP+ commands are
+supported by the +ACS+ or not.
+
+
+anchor:fields[]
+
+Fields
+^^^^^^
+
+All fixed-length fields in a communication will appear before the first variable-length field. This allows for simple
+parsing. Variable-length fields are by definition delimited, though there will not necessarily be an initial delimiter
+between the last fixed-length field and the first variable-length one. It would be unnecessary, since you should know
+the exact position where that field begins already.