# Logical Record Architecture for Health and Social Care
## Discharge Summary Release 0.02

Contents
The content of this release is not comprehensive and is not fully validated and must not be used in live system implementations.
# Reference Model Class: IVL
This class is used in ISO 21090 to specify a range of consecutive values of any ordered base data type (this is therefore parameterised to quantities - QTY). Its instantiations such as IVL(TS) should be used for specifying a continuous range between two definable, realisable ends. It is not intended to be used to represent a single unknown value within an interval (for which use URG uncertain range). IVL should only be used to represent the existence of a continuous state between two delimiters. An example of IVL(TS) would include the timing of a medication infusion, or an admission period. There are possible grey areas in the implementation of IVL compared with URG - an example being 'take 2-4 tablets' could be modelled as an IVL(PQV) but the statement 'he took between 12 and 24 tables' clearly should only be modelled as URG(PQV). The guidance for the LRA is that if a statement could theoretically be decomposed to a set of unitary statements separated by 'or' the choice should be an URG, whereas if it can be broken down as 'and' it should be an IVL. Thus both tablet related examples here should be modelled with URG (i.e. take 2 tablets OR take 3 tablets OR take 4 tablets). The use of IVL with coded ordinals is explicitly prohibited. ## Specializes ## QSET ## Attributes
Name | Data type | Occurs | Description
--- | --- | --- | ---
any | T | 1..1 | In ISO 21090 it is possible to also specify an IVL as a range that contains a specific point. So the IVL<INT> with attribute any=10 and width=5 represents all the intervals 5-10, 6-11, 7-12, 8-13, 9-14 and 10-15. This appears represent a specific type of uncertain interval which is different from uncertain range (URG). Within the LRA, as in ISO 21090, the use of IVL with only IVL.any and IVL.width attributes defined is allowable, and should be used with caution for the specification of loosely constrained time intervals. It is not however appropriate to use it for loosely defined time points for which URG<TS> is an appropriate choice. This is implemented as described in ISO 21090.
high | T | 0..1 | This is implemented as described in ISO 21090.
highClosed | Boolean | 0..1 | This is implemented as described in ISO 21090.
low | T | 0..1 | This is implemented as described in ISO 21090.
lowClosed | Boolean | 0..1 | This is implemented as described in ISO 21090.
width | QTY | 0..1 | IVL start and end may be underspecified in ISO 21090 to allow for ranges of known size (using IVL.width) but undefined low and high end points. NB: It does not appear to be allowable to specify IVL.width and IVL.low, and leave IVL.high as implicitly defined. This is implemented as described in ISO 21090.
## Constraints
Type | Name | Specification
--- | --- | ---
closed attributes only if limited | Invariant | inv: (not low.isNotNull implies lowClosed.oclIsUndefined) and (not high.isNotNull implies highClosed.oclIsUndefined)
co-occurence rules | Invariant | inv: (any_.isNotNull implies not (hasBounds or width.isNotNull)) and (any_.isNull implies (hasBounds xor width.isNotNull))
no coded ordinal IVL in LRA | LRA Invariant | inv: (not low.oclIsTypeOf(CO)) and (not high.oclIsTypeOf(CO)) and (not any.oclIsTypeOf(CO)) and (not width.oclIsTypeOf(CO))
no updateMode or History on IVL attributes | Invariant | inv: noUpdateOrHistory(low) and noUpdateOrHistory(high) and noUpdateOrHistory(width)
null rules | Invariant | inv: isNull xor (hasBounds or any_.isNotNull or width.isNotNull)
unnamed constraint | Invariant | def: hasBounds : Boolean = low.isNotNull or high.isNotNull