-- This is copied from https://www.loc.gov/z3950/agency/asn1.html#RecordSyntax-opac and tidied up

RecordSyntax-opac {Z39-50-recordSyntax opac (102)} DEFINITIONS ::=
BEGIN 

IMPORTS InternationalString  FROM Z39-50-APDU-1995;

OPACRecord ::= SEQUENCE {
   bibliographicRecord    [1] IMPLICIT EXTERNAL OPTIONAL,
   holdingsData           [2] IMPLICIT SEQUENCE OF HoldingsRecord OPTIONAL
}

HoldingsRecord ::=  CHOICE {
   marcHoldingsRecord     [1] IMPLICIT EXTERNAL,
   holdingsAndCirc        [2] IMPLICIT HoldingsAndCircData
}

HoldingsAndCircData ::=  SEQUENCE {
   -- The following elements are required to display holdings in conformance with NISO standards.
   typeOfRecord       [1]    IMPLICIT InternationalString OPTIONAL, -- LDR 06
   encodingLevel      [2]    IMPLICIT InternationalString OPTIONAL, -- LDR 017
   format             [3]    IMPLICIT InternationalString OPTIONAL, -- 007 00-01
   receiptAcqStatus   [4]    IMPLICIT InternationalString OPTIONAL, -- 008 06
   generalRetention   [5]    IMPLICIT InternationalString OPTIONAL, -- 008 12
   completeness       [6]    IMPLICIT InternationalString OPTIONAL, -- 008 16
   dateOfReport       [7]    IMPLICIT InternationalString OPTIONAL, -- 008 26-31
   nucCode            [8]    IMPLICIT InternationalString OPTIONAL, -- 852 $a
   localLocation      [9]    IMPLICIT InternationalString OPTIONAL, -- 852 $b
   shelvingLocation   [10]   IMPLICIT InternationalString OPTIONAL, -- 852 $c
   callNumber         [11]   IMPLICIT InternationalString OPTIONAL, -- 852 $h and $i
   shelvingData       [12]   IMPLICIT InternationalString OPTIONAL, -- 852 $j thru $m
   copyNumber         [13]   IMPLICIT InternationalString OPTIONAL, -- 852 $t
   publicNote         [14]   IMPLICIT InternationalString OPTIONAL, -- 852 $z
   reproductionNote   [15]   IMPLICIT InternationalString OPTIONAL, -- 843
   termsUseRepro      [16]   IMPLICIT InternationalString OPTIONAL, -- 845
   enumAndChron       [17]   IMPLICIT InternationalString OPTIONAL, -- all 85x, 86x
   volumes            [18]   IMPLICIT SEQUENCE OF Volume OPTIONAL, -- repeats for each volume held
   circulationData    [19]   IMPLICIT SEQUENCE OF CircRecord OPTIONAL -- repeats for each circulating item.
}

Volume ::=  SEQUENCE {
   enumeration        [1]    IMPLICIT InternationalString OPTIONAL,
   chronology         [2]    IMPLICIT InternationalString OPTIONAL,
   enumAndChron       [3]    IMPLICIT InternationalString OPTIONAL
}

CircRecord ::=  SEQUENCE {
   availableNow       [1]    IMPLICIT BOOLEAN,
   availablityDate    [2]    IMPLICIT InternationalString OPTIONAL,
   availableThru      [3]    IMPLICIT InternationalString OPTIONAL,
   restrictions       [4]    IMPLICIT InternationalString OPTIONAL,
   itemId             [5]    IMPLICIT InternationalString OPTIONAL,
   renewable          [6]    IMPLICIT BOOLEAN,
   onHold             [7]    IMPLICIT BOOLEAN,
   enumAndChron       [8]    IMPLICIT InternationalString OPTIONAL,
   midspine           [9]    IMPLICIT InternationalString OPTIONAL,
   temporaryLocation  [10]   IMPLICIT InternationalString OPTIONAL
}

END