1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Virtual Medical Record (vMR) for Clinical Decision Support – GELLO Implementation Guide Document Editor Andrew McIntyre MBBS, FRACP; Medical-Objects Kensaku Kawamoto, MD, PhD; University of Utah Peter R. Tattam; Tattam Software Enterprises Pty Ltd David E. Shields; University of Utah Peter Scott, MBBS; Medical-Objects Project Sponsor HL7 Clinical Decision Support HL7 Project #184 Draft Standard for Trial Use September 2011 24 Table of Contents 25 Table of Contents ............................................................................................................... 2 26 1 Executive Summary..................................................................................................... 3 27 2 GELLO implementation guide for VMR .................................................................... 3 28 29 30 1 Executive Summary 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 A Virtual Medical Record (vMR) for Clinical Decision Support (CDS) is a data model for representing clinical information inputs and outputs that can be used by CDS engines and local clinical information systems, through mechanisms such as CDS services, or execution of standardized clinical decision support logic by a GELLO execution engine. A vMR for CDS is needed to enable the design and development of scalable CDS resources that can be used across multiple healthcare institutions and health information systems. Existing clinical data, from any source, is virtualized to present a façade compliant with the vMR class model. Clinical logic can then be executed against the data represented in the vMR model. GELLO is one standard language that can be used with the vMR model, but other languages can use the vMR model. GELLO is intended to be a standard query and expression language for decision support. The clinical usage of the GELLO language depends on an object-oriented data model. The objective of the HL7 CDS Work Group’s vMR GELLO Implementation Guide is to define a BNF (Backus-Naur Form) for defining a vMR which allows tight integration of a vMR model with a GELLO compiler or any other rule execution engine or authoring environment, ensuring good interoperability of CDS logic between institutions. This guide describes a grammar for defining the vMR classes and data types. It does not attempt to define the final structure of the vMR, but defines a standard mechanism for defining vMR classes and data types. The final VMR would be encoded in this format allowing compilers access to a standard, rigorously defined VMR model. This format will be identical to the semantics of a UML XMI representation, but is compiler friendly and more human readable. While GELLO has been defined by HL7 CDS Workgroup for encoding standards based decision support logic, the vMR as defined by this format could be used in any execution or authoring environment to tightly define data types, class structures and methods. The classes and data types defined by this format are built on the base GELLO types which are based on the OCL types used in UML. The format is designed to be language neutral, and should be useable to any object based execution environment that supports the base UML data types. This is the first DSTU ballot for this material. Input is sought on the format rather than the content, as a normative vMR model will be defined elsewhere using this grammar. It is envisaged that all elements of the final vMR, when this is finalised, will be represented in both UML (.xmi files), class diagrams, and this format. As this format is both human and machine readable it is intended to make this format a more readily understandable form of the vMR standard. It would be possible, by the use of this format, to define a class model which represents a concrete instance of a DCM (Detailed Clinical Model). A package containing the required classes to represent data conformant to a DCM could then be used to extend the available classes in a vMR execution environment. 74 2 GELLO implementation Guide for VMR 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 2.1 Grammar for GELLO class definitions (Normative) This is the GELLO class BNF which uses the Extended BNF syntax as used in the GELLO standard. This BNF is the normative part of this standard. GelloPackage::= PackageStatement PackageStatement::= <PACKAGE> NameOrLiteral ImportsStatement? PackageElement* <ENDPACKAGE> ImportsStatement::= <IMPORTS> ImportName ("," ImportName)* ImportName::= NameOrLiteral PackageElement::= PackageStatement | ClassDefinition ClassDefinition::= <CLASS> ClassDefName (<EXTENDS> ClassRef)? ClassMember* | <CLASS> ClassDefName <EQUAL> ClassRef | <CLASS> ClassName EnumerationType ClassDefName::= NameOrLiteral | NameOrLiteral "(" ClassDefParams ")" ClassDefParams::= ClassRefOrParam ("," ClassRefOrParam)* ClassRefOrParam::= ClassRef | Name ":" ClassRef ClassRef::= ClassName | ClassName "(" ClassRef ")" | <TUPLE> ClassMember::= ClassRef NameOrLiteral ( "(" ClassFormalParams? ")" )? ":" ClassFormalParams::= ClassFormalParam ("," ClassFormalParam )* ClassFormalParam::= Name ":" ClassRef EnumerationType::= EnumLiteral::= <ENUM> "(" (EnumLiteral ( "," EnumLiteral )*) ")" NameOrLiteral NameOrLiteral::= Name | <STRING_LITERAL> ClassName::= NameWithPath::= Name::= NameWithPath | <STRING_LITERAL> Name ("::" Name)* <ID> ("." <ID>)* 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 <STRING_LITERAL: ('\"' (~[ '\"' , "\n", "\r"])* '\"' | "\'" (~[ "\'" , "\n", "\r"])* "\'" ) > <ID: ["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","0"-"9"] | "_"(["a"-"z","A"-"Z","0""9"])+)* > <ENUM: "Enum"> <TUPLE: "Tuple" > <EQUAL: "=" > <ENDPACKAGE: "endPackage" | "EndPackage" | "endpackage"> <CLASS: "class"| "Class"> <EXTENDS: "extends" > <IMPORTS: "Imports" | "imports"> <PACKAGE: "Package" | "package"> 2.2 GELLO base types class definition (Informative) These are the base GELLO types which are enhanced OCL types. They are used by the ISO 21090 data types and are included as an example of the use of the grammar for informative purposes. Package System Class Any "="(o: Any): Boolean "<>"(o: Any): Boolean oclIsDefined(): Boolean oclAsType(t: T): T oclIsTypeOf(t: T): Boolean oclIsKindOf(typename: String): Boolean oclIsInState(statename: String): Boolean allInstances(): Set(T) Class Real extends Any "-"(): Real "+"(rhs: Real): Real "-"(rhs: Real): Real "*"(rhs: Real): Real "/"(rhs: Real): Real abs(): Real floor(): Integer round(): Integer "max"(rhs: Real): Real "min"(rhs: Real): Real "="(rhs: Real): Boolean "<>"(rhs: Real): Boolean "<"(rhs: Real): Boolean "<="(rhs: Real): Boolean ">"(rhs: Real): Boolean ">="(rhs: Real): Boolean toChar():String toCharFormat(decimalplaces:Integer): String Class Integer extends Real 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 "-"(): Integer "+"(rhs: Integer): Integer "-"(rhs: Integer): Integer "*"(rhs: Integer): Integer "div"(rhs: Integer): Integer "mod"(rhs: Integer): Integer "max"(rhs: Integer): Integer "min"(rhs: Integer): Integer abs(): Integer toChar():String Class String extends Any "="(rhs: String): Boolean "<>"(rhs: String): Boolean size(): Integer concat(rhs: String): String substring(lower:Integer, upper: Integer): String toInteger(): Integer toReal(): Real toUpper(): String toLower():String lpad(size:Integer, padChar:String):String rpad(size:Integer, padChar:String):String ltrim(trimChars:String):String rtrim(trimChars:String):String replace(replaceThis:String, withThis:String):String Class Boolean extends Any "="(rhs: Boolean): Boolean "<>"(rhs: Boolean): Boolean "or"(rhs: Boolean): Boolean "xor"(rhs: Boolean): Boolean "and"(rhs: Boolean): Boolean "not"(): Boolean implies(rhs: Boolean): Boolean Class Collection extends Any count(o: T): Integer excludes(o: T): Boolean excludesAll(c: Collection): Boolean includes(o: T): Boolean includesAll(c: Collection): Boolean isEmpty(): Boolean notEmpty(): Boolean size(): Integer sum(): T "max"(): T "min"(): T "="(s: Collection): Boolean "<>"(s: Collection): Boolean asSet(): Set(T) asBag(): Bag(T) asSequence(): Sequence(T) exists(e: Boolean): Boolean forAll(e: Any): Boolean collect(e: Any): Bag(T) sortedBy(e: Any): Sequence(T) Average():Real Stdev():Real Variance():Real Median():Real Mode():Real 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 Join(): Collection(Tuple) Like(): Collection(String) NotLike(): Collection(String) Between(string1: String, String2: String): Collection(String) Distinct(): Set(T) Class "Set" extends Collection "-"(S: Set(T)): Set(T) union(c: Bag(T)): Bag(T) union(s: Set(T)): Set(T) intersection(b: Bag(T)): Bag(T) intersection(s: Set(T)): Set(T) including(o: T): Set(T) excluding(o: T): Set(T) symmetricDifference(s: Set(T)): Set(T) flatten(): Set(T) select(e: Boolean): Set(T) reject(e: Boolean): Set(T) Class "Bag" extends Collection union(b: Bag(T)): Bag(T) union(s: Set(T)): Bag(T) intersection(b: Bag(T)): Bag(T) intersection(s: Set(T)): Bag(T) including(o: T): Bag(T) excluding(o: T): Bag(T) flatten(): Bag(T) select(e: Boolean): Bag(T) reject(e: Boolean): Bag(T) Class "Sequence" extends Collection union(s: Sequence(T)): Sequence(T) including(o: T): Sequence(T) excluding(o: T): Sequence(T) append(o: T): Sequence(T) at(i: Integer): T first(): T flatten(): Sequence(T) indexOf(o: T): Integer insertAt(i: Integer, o: T): Sequence(T) last(): T prepend(o: T): Sequence(T) subSequence(lower: Integer, upper: Integer): Sequence(T) select(e: Boolean): Sequence(T) reject(e: Boolean): Sequence(T) lastN(number:Integer): Sequence(T) firstN(number:Integer): Sequence(T) Reverse(): Sequence(T) EndPackage 2.3 ISO21090 Data Types Definition (Informative) These data types are a concrete implementation of the HL7 V3 Release 2 data types which are likely to be used for the final VMR model. They were originally imported from the ISO21090 xml schema file (source: http://gforge.hl7.org/svn/hl7v3/trunk/dt/iso/iso- 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 21090-datatypes.xsd) but also define operations. This is included as an example and the definition as represented here is indicative of the use of the grammar and is informative. The HL7 V3 Release 2 data type specification is abstract and cannot be used directly. The ISO21090 xml schema files define content, but not operations. Data types defined in this manner could be used by an execution engine or authoring environment. The data types in the final vMR may be simplified further. Package iso_21090_datatypes -- Imported from iso-21090-datatypes.xsd class HXIT controlInformationExtension: String controlInformationRoot: Uid validTimeHigh: String validTimeLow: String class NullFlavor Enum("NI", "INV", "OTH", "NINF", "PINF", "UNC", "DER", "UNK", "ASKU", "NAV", "NASK", "QS", "TRC", "MSK", "NA") class UpdateMode Enum("A", "D", "R", "AR", "N", "U", "K") class ANY extends HXIT flavorId: String nullFlavor: NullFlavor updateMode: UpdateMode --operations equals(other : ANY):BL class XP code: String codeSystem: String codeSystemVersion: String2 language: Code nullFlavor: NullFlavor value: String class AddressPartType Enum("AL", "ADL", "UNID", "UNIT", "DAL", "DINST", "DINSTA", "DINSTQ", "DMOD", "DMODID", "SAL", "BNR", "BNN", "BNS", "STR", "STB", "STTYP", "DIR", "INT", "CAR", "CEN", "CNT", "CPA", "CTY", "DEL", "POB", "PRE", "STA", "ZIP", "DPID") class ADXP extends XP type: AddressPartType class PostalAddressUse Enum("H", "HP", "HV", "WP", "DIR", "PUB", "BAD", "PHYS", "PST", "TMP", "ABC", "IDE", "SYL", "SRCH", "SNDX", "PHON") class AD extends ANY isNotOrdered: Boolean part: Sequence(ADXP) use: Set(PostalAddressUse) useablePeriod: QSET_TS class BL extends ANY value: Boolean --operations "and"(other : BL) : BL "or"(other : BL) : BL "xor"(other : BL) : BL implies(other : BL) : BL "not"() : BL class CodingRationale Enum("O", "P", "R", "OR", "PR") class CD extends ANY 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 code: String codeSystem: Uid codeSystemName: String codeSystemVersion: String codingRationale: CodingRationale displayName: ST id: String originalText: ED source: XReference translation: Sequence(CD) valueSet: Uid valueSetVersion: String --operations implies(other : CS) : BL implies(other : CD) : BL class CO extends QTY code: CD value: Decimal --operations "+"(other : CO) : CO "-"(other : CO) : CO "min"(other : CO) : CO "max"(other : CO) : CO class CS extends ANY code: String --operations codeSystem : Uid codeSystemName : String codeSystemVersion : String implies(other : CS) : BL implies(other : CD) : BL class Decimal extends Real class Compression Enum("DF", "GZ", "ZL", "Z", "BZ", "Z7") class Code extends String class IntegrityCheckAlgorithm Enum("SHA1", "SHA256") class ED extends ANY charset: Code compression: Compression data: String description: ST integrityCheck: String integrityCheckAlgorithm: IntegrityCheckAlgorithm language: Code mediaType: String reference: TEL thumbnail: ED translation: Sequence(ED) value: String xml: Any class TimingEvent Enum("HS", "WAKE", "AC", "ACM", "ACD", "ACV", "IC", "ICM", "ICD", "ICV", "PC", "PCM", "PCD", "PCV", "C", "CM", "CD", "CV") class EIVL_TS extends QSET_TS event: TimingEvent offset: IVL_PQ class EntityNamePartQualifier Enum("LS", "AC", "NB", "PR", "HON", "BR", 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 "AD", "SP", "MID", "CL", "IN", "PFX", "SFX") class EntityNamePartType Enum("FAM", "GIV", "TITLE", "DEL") class ENXP extends XP qualifier: Set(EntityNamePartQualifier) type: EntityNamePartType class EntityNameUse Enum("ABC", "SYL", "IDE", "C", "OR", "T", "I", "P", "ANON", "A", "R", "OLD", "DN", "M", "SRCH", "PHON") class EN extends ANY part: Sequence(ENXP) use: set_EntityNameUse --operations canonical() : EN class GLIST_PQ extends ANY denominator: Integer head: PQ increment: QTY period: Integer class GLIST_REAL extends ANY denominator: Integer head: REAL increment: QTY period: Integer class GLIST_TS extends ANY denominator: Integer head: TS increment: QTY period: Integer class IdentifierReliability Enum("ISS", "VRF", "UNV") class IdentifierScope Enum("BUSN", "OBJ", "VER", "VW") class II extends ANY displayable: Boolean extension: String identifierName: String reliability: IdentifierReliability root: Uid scope: IdentifierScope class INT extends QTY value: Integer --operations "+"(other : INT) : INT "-"(other : INT) : INT "*"(other : INT) : INT "/"(other : INT) : REAL "/"(other : REAL) : REAL abs() : INT "div"(other : INT) : INT "mod"(other : INT) : INT "min"(other : INT) : INT "max"(other : INT) : INT class IVL_CO extends QSET_CO any: CO high: CO highClosed: Boolean low: CO 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 lowClosed: Boolean width: QTY class IVL_INT extends QSET_INT any: INT high: INT highClosed: Boolean low: INT lowClosed: Boolean width: QTY class IVL_MO extends QSET_MO any: MO high: MO highClosed: Boolean low: MO lowClosed: Boolean width: QTY class IVL_PQ extends QSET_PQ any: PQ high: PQ highClosed: Boolean low: PQ lowClosed: Boolean width: QTY class IVL_QTY extends QSET_QTY any: QTY high: QTY highClosed: Boolean low: QTY lowClosed: Boolean width: QTY class IVL_REAL extends QSET_REAL any: REAL high: REAL highClosed: Boolean low: REAL lowClosed: Boolean width: QTY class IVL_TS extends QSET_TS any: TS high: TS highClosed: Boolean low: TS lowClosed: Boolean width: QTY class MO extends QTY currency: Code value: Decimal --operations "+"(other : MO) : MO "-"(other : MO) : MO "*"(other : REAL) : MO "/"(other : REAL) : MO "min"(other : MO) : MO "max"(other : MO) : MO class CalendarCycle Enum("CY", "MY", "CM", "CW", "WM", "WY", "DM", "CD", "DY", "DW", "HD", "CH", "NH", "CN", "SN", "CS") class PIVL_TS extends QSET_TS 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 alignment: CalendarCycle count: INT frequency: RTO isFlexible: Boolean period: PQ phase: IVL_TS class PQ extends QTY codingRationale: CodingRationale translation: Sequence(PQR) unit: Code value: Decimal --operations canonical : PQ "+"(other : PQ) : PQ "-"(other : PQ) : PQ "-"() : PQ "*"(other : PQ) : PQ "*"(other : Real) : PQ "*"(other : Real) : PQ "*"(other : Integer) : PQ "/"(other : PQ) : PQ "/"(other : Real) : PQ "/"(other : Real) : PQ "/"(other : Integer) : PQ inverted() : PQ abs() : PQ "min"(other : PQ) : PQ "max"(other : PQ) : PQ toInterval() : IVL_PQ convert(unit: Code):PQ class PQR extends CD value: Decimal class QSC_TS extends QSET_TS code: CD class QSD_PQ extends QSET_PQ minuend: QSET_PQ subtrahend: QSET_PQ class QSD_TS extends QSET_TS minuend: QSET_TS subtrahend: QSET_TS class QSET_CO extends ANY originalText: ED class QSET_INT extends ANY originalText: ED class QSET_MO extends ANY originalText: ED class QSET_PQ extends ANY originalText: ED class QSET_QTY extends ANY originalText: ED class QSET_REAL extends ANY originalText: ED 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 class QSET_TS extends ANY originalText: ED class QSI_PQ extends QSET_PQ term: Sequence(QSET_PQ) class QSI_TS extends QSET_TS term: Sequence(QSET_TS) class QSP_PQ extends QSET_PQ high: QSET_PQ low: QSET_PQ class QSP_TS extends QSET_TS high: QSET_TS low: QSET_TS class QSS_PQ extends QSET_PQ term: Sequence(PQ) class QSS_TS extends QSET_TS term: Sequence(TS) class QSU_PQ extends QSET_PQ term: Sequence(QSET_PQ) class QSU_TS extends QSET_TS term: Sequence(QSET_TS) class UncertaintyType Enum("U", "N", "LN", "G", "E", "X2", "T", "F", "B") class QTY extends ANY expression: ED originalText: ED uncertainRange: IVL_QTY uncertainty: QTY uncertaintyType: UncertaintyType --operations "<"(other : QTY) : BL "<="(other : QTY) : BL ">="(other : QTY) : BL ">"(other : QTY) : BL "-"(other : QTY) : QTY "+"(other : QTY) : QTY comparable(other : QTY) : Boolean isDifference(other : QTY) : Boolean class REAL extends QTY value: Decimal --operations "+"(other : REAL) : REAL "-"(other : REAL) : REAL "*"(other : REAL) : REAL "/"(other : REAL) : REAL "min"(other : REAL) : REAL "max"(other : REAL) : REAL "-"() : REAL abs() : REAL ceiling() : INT floor() : INT round() : INT inverted() : REAL power(other : REAL) : REAL toInterval() : IVL_REAL class RTO extends QTY 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 denominator: QTY numerator: QTY class SC extends ST code: CD class SD_TEXT extends ANY ID: String language: Code mediaType: String styleCode: set_Code class SD_TITLE extends ANY ID: String language: Code mediaType: String styleCode: set_Code class SLIST_INT extends ANY digit: Sequence(INT) origin: INT scale: QTY class SLIST_PQ extends ANY digit: Sequence(INT) origin: PQ scale: QTY class SLIST_REAL extends ANY digit: Sequence(INT) origin: REAL scale: QTY class SLIST_TS extends ANY digit: Sequence(INT) origin: TS scale: QTY class ST extends ANY language: Code translation: Sequence(ST) value: String --operations mediaType() : String size() : Integer concat(other : ST) : ST substring(lower : INT, upper : INT) : ST toInteger() : INT toReal() : REAL toTimestamp() : TS class TelecommunicationCapability Enum("voice", "fax", "data", "tty", "sms") class TelecommunicationAddressUse Enum("H", "HP", "HV", "WP", "DIR", "PUB", "BAD", "TMP", "AS", "EC", "MC", "PG") class TEL extends ANY capabilities: Set(TelecommunicationCapability) use: Set(TelecommunicationAddressUse) useablePeriod: QSET_TS value: String --operations canonical() : TEL class TS extends QTY value: String 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 --operations "+"(other : PQ) : TS "-"(other : PQ) : TS "-"(other : TS) : PQ "min"(other : TS) : TS "max"(other : TS) : TS toInterval() : IVL_TS precision() : Integer class UVP_AD extends ANY probability: Decimal value: AD class UVP_BL extends ANY probability: Decimal value: BL class UVP_CD extends ANY probability: Decimal value: CD class UVP_CO extends ANY probability: Decimal value: CO class UVP_CS extends ANY probability: Decimal value: CS class UVP_ED extends ANY probability: Decimal value: ED class UVP_EN extends ANY probability: Decimal value: EN class UVP_II extends ANY probability: Decimal value: II class UVP_INT extends ANY probability: Decimal value: INT class UVP_MO extends ANY probability: Decimal value: MO class UVP_PQ extends ANY probability: Decimal value: PQ class UVP_REAL extends ANY probability: Decimal value: REAL class UVP_RTO extends ANY probability: Decimal value: RTO class UVP_SC extends ANY probability: Decimal value: SC 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 class UVP_ST extends ANY probability: Decimal value: ST class UVP_TEL extends ANY probability: Decimal value: TEL class UVP_TS extends ANY probability: Decimal value: TS class Uid extends String class Uri extends String class XReference xref: String class XmlID extends String class XmlIDREF extends String class set_Code value: Set(Code) class set_CodingRationale value: Set(CodingRationale) class set_EntityNamePartQualifier value: Set(EntityNamePartQualifier) class set_EntityNameUse value: Set(EntityNameUse) class set_IDREF value: Set(XmlIDREF) class set_TelecommunicationAddressUse value: Set(TelecommunicationAddressUse) class set_TelecommunicationCapability value: Set(TelecommunicationCapability) class COLL_AD extends ANY class COLL_BL extends ANY class COLL_CD extends ANY class COLL_CO extends ANY class COLL_CS extends ANY class COLL_ED extends ANY class COLL_EN extends ANY class COLL_II extends ANY class COLL_INT extends ANY class COLL_MO extends ANY class COLL_PQ extends ANY 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 class COLL_REAL extends ANY class COLL_RTO extends ANY class COLL_SC extends ANY class COLL_ST extends ANY class COLL_TEL extends ANY class COLL_TS extends ANY class BAG_AD extends COLL_AD value: Bag(AD) class BAG_BL extends COLL_BL value: Bag(BL) class BAG_CD extends COLL_CD value: Bag(CD) class BAG_CO extends COLL_CO value: Bag(CO) class BAG_CS extends COLL_CS value: Bag(CS) class BAG_ED extends COLL_ED value: Bag(ED) class BAG_EN extends COLL_EN value: Bag(EN) class BAG_II extends COLL_II value: Bag(II) class BAG_INT extends COLL_INT value: Bag(INT) class BAG_MO extends COLL_MO value: Bag(MO) class BAG_PQ extends COLL_PQ value: Bag(PQ) class BAG_REAL extends COLL_REAL value: Bag(REAL) class BAG_RTO extends COLL_RTO value: Bag(RTO) class BAG_SC extends COLL_SC value: Bag(SC) class BAG_ST extends COLL_ST value: Bag(ST) class BAG_TEL extends COLL_TEL value: Bag(TEL) class BAG_TS extends COLL_TS value: Bag(TS) class DSET_AD extends COLL_AD value: Sequence(AD) 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 class DSET_BL extends COLL_BL value: Sequence(BL) class DSET_CD extends COLL_CD value: Sequence(CD) class DSET_CO extends COLL_CO value: Sequence(CO) class DSET_CS extends COLL_CS value: Sequence(CS) class DSET_ED extends COLL_ED value: Sequence(ED) class DSET_EN extends COLL_EN value: Sequence(EN) class DSET_II extends COLL_II value: Sequence(II) class DSET_INT extends COLL_INT value: Sequence(INT) class DSET_MO extends COLL_MO value: Sequence(MO) class DSET_PQ extends COLL_PQ value: Sequence(PQ) class DSET_REAL extends COLL_REAL value: Sequence(REAL) class DSET_RTO extends COLL_RTO value: Sequence(RTO) class DSET_SC extends COLL_SC value: Sequence(SC) class DSET_ST extends COLL_ST value: Sequence(ST) class DSET_TEL extends COLL_TEL value: Sequence(TEL) class DSET_TS extends COLL_TS value: Sequence(TS) class HIST_AD extends LIST_AD class HIST_BL extends LIST_BL class HIST_CD extends LIST_CD class HIST_CO extends LIST_CO class HIST_CS extends LIST_CS class HIST_ED extends LIST_ED class HIST_EN extends LIST_EN class HIST_II extends LIST_II class HIST_INT extends LIST_INT 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 class HIST_MO extends LIST_MO class HIST_PQ extends LIST_PQ class HIST_REAL extends LIST_REAL class HIST_RTO extends LIST_RTO class HIST_SC extends LIST_SC class HIST_ST extends LIST_ST class HIST_TEL extends LIST_TEL class HIST_TS extends LIST_TS class LIST_AD extends COLL_AD value: Sequence(AD) class LIST_BL extends COLL_BL value: Sequence(BL) class LIST_CD extends COLL_CD value: Sequence(CD) class LIST_CO extends COLL_CO value: Sequence(CO) class LIST_CS extends COLL_CS value: Sequence(CS) class LIST_ED extends COLL_ED value: Sequence(ED) class LIST_EN extends COLL_EN value: Sequence(EN) class LIST_II extends COLL_II value: Sequence(II) class LIST_INT extends COLL_INT value: Sequence(INT) class LIST_MO extends COLL_MO value: Sequence(MO) class LIST_PQ extends COLL_PQ value: Sequence(PQ) class LIST_REAL extends COLL_REAL value: Sequence(REAL) class LIST_RTO extends COLL_RTO value: Sequence(RTO) class LIST_SC extends COLL_SC value: Sequence(SC) class LIST_ST extends COLL_ST value: Sequence(ST) class LIST_TEL extends COLL_TEL value: Sequence(TEL) class LIST_TS extends COLL_TS value: Sequence(TS) 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 class NPPD_AD extends ANY value: Sequence(UVP_AD) class NPPD_BL extends ANY value: Sequence(UVP_BL) class NPPD_CD extends ANY value: Sequence(UVP_CD) class NPPD_CO extends ANY value: Sequence(UVP_CO) class NPPD_CS extends ANY value: Sequence(UVP_CS) class NPPD_ED extends ANY value: Sequence(UVP_ED) class NPPD_EN extends ANY value: Sequence(UVP_EN) class NPPD_II extends ANY value: Sequence(UVP_II) class NPPD_INT extends ANY value: Sequence(UVP_INT) class NPPD_MO extends ANY value: Sequence(UVP_MO) class NPPD_PQ extends ANY value: Sequence(UVP_PQ) class NPPD_REAL extends ANY value: Sequence(UVP_REAL) class NPPD_RTO extends ANY value: Sequence(UVP_RTO) class NPPD_SC extends ANY value: Sequence(UVP_SC) class NPPD_ST extends ANY value: Sequence(UVP_ST) class NPPD_TEL extends ANY value: Sequence(UVP_TEL) class NPPD_TS extends ANY value: Sequence(UVP_TS) class StrucDoc_Align Enum("left", "center", "right", "justify", "char") class StrucDoc_Br class StrucDoc_CMTitle br: StrucDoc_Br content: StrucDoc_CMTitle footnote: StrucDoc_TitleFootnote footnoteRef: StrucDoc_FootnoteRef linkHtml: StrucDoc_LinkHtml sub: StrucDoc_Sub sup: StrucDoc_Sup class StrucDoc_Caption 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 class StrucDoc_Captioned caption: StrucDoc_Caption class StrucDoc_CellScope Enum("row", "col", "rowgroup", "colgroup") class StrucDoc_Col extends StrucDoc_ColItem class StrucDoc_ColGroup extends StrucDoc_ColItem col: Sequence(StrucDoc_Col) class StrucDoc_ColItem extends StrucDoc_TableItem span: Integer width: StrucDoc_Length class StrucDoc_Content revised: StrucDoc_Revised class StrucDoc_Footnote class StrucDoc_FootnoteRef IDREF: String class StrucDoc_Frame Enum("void", "above", "below", "hsides", "lhs", "rhs", "vsides", "box", "border") class StrucDoc_Item extends StrucDoc_Captioned class StrucDoc_Length extends String class StrucDoc_LinkHtml href: String name: String rel: String rev: String title: String class StrucDoc_List extends StrucDoc_Captioned value: Sequence(StrucDoc_Item) listType: StrucDoc_ListType class StrucDoc_ListType Enum("ordered", "unordered") class StrucDoc_Paragraph extends StrucDoc_Captioned class StrucDoc_RenderMultiMedia caption: StrucDoc_Caption referencedObject: set_IDREF class StrucDoc_Revised Enum("insert", "delete") class StrucDoc_Rules Enum("none", "groups", "rows", "cols", "all") class StrucDoc_Sub class StrucDoc_Sup class StrucDoc_TCell extends StrucDoc_TableItem abbr: String axis: String colspan: Integer headers: set_IDREF rowspan: Integer scope: StrucDoc_CellScope class StrucDoc_TRow extends StrucDoc_TableItem 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 class StrucDoc_TRowGroup extends StrucDoc_TableItem tr: Sequence(StrucDoc_TRow) class StrucDoc_Table extends StrucDoc_Captioned border: StrucDoc_Length cellpadding: StrucDoc_Length cellspacing: StrucDoc_Length col: Sequence(StrucDoc_Col) colgroup: Sequence(StrucDoc_ColGroup) frame: StrucDoc_Frame rules: StrucDoc_Rules summary: String tbody: Sequence(StrucDoc_TRowGroup) tfoot: StrucDoc_TRowGroup thead: StrucDoc_TRowGroup width: StrucDoc_Length class StrucDoc_TableItem align: StrucDoc_Align char: String charoff: StrucDoc_Length valign: StrucDoc_VAlign class StrucDoc_TitleFootnote class StrucDoc_VAlign Enum("top", "middle", "bottom", "baseline") EndPackage 2.4 vMR Definition example (Informative) A sample of a mock vMR is represented below to indicate how a vMR would be defined using the grammar and imports the ISO21090 package. This example is based on an import of a Green CDA schema and is not representative of the final vMR but is an informative example of the use of the grammar. In this example the Context classes (classes extending ContextClass), and Factory are specific to a GELLO execution environment. Package GreenVMR --example only and not normative imports iso_21090_datatypes, HL7V3Rim class addr city: String nullFlavor: nullFlavorType postalCode: String state: String streetAddressLine: String class admissionTiming extends pivlTs class advanceDirective documentCustodian: organizationInformation effectiveDate: IVL_TS status: CE type: CD class allergy adverseEventDate: IVL_TS 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 adverseEventType: CD product: Sequence(CD) reaction: Sequence(CD) severity: Sequence(CD) class author address: addr authorId: II authorName: pnm authorTime: TS reference: Sequence(reference) telecom: tele class birthPlace extends addr name: String class causeOfDeath ageAtDeath: Integer timeOfDeath: TS class condition asAct: Act ageAtOnset: Integer causeOfDeath: causeOfDeath diagnosisPriority: Integer problemCode: CD problemDate: IVL_TS problemName: String problemStatus: CE problemType: CD treatingProvider: Sequence(treatingProvider) class confidentialityType Enum("N", "R", "V") class contactType contactAddress: Sequence(addr) contactMothersMaidenName: onm contactName: Sequence(pnm) contactTelecom: Sequence(tele) relationship: relationshipType type: supportType class currencyType Enum("ARS", "AUD", "BRL", "CAD", "CHF", "CLF", "CNY", "DEM", "ESP", "EUR", "FIM", "FRF", "GBP", "ILS", "INR", "JPY", "KRW", "MXN", "NLG", "NZD", "PHP", "RUR", "THB", "TRL", "TWD", "USD", "ZAR") class custodian custodianAddress: addr custodianID: Sequence(II) custodianName: onm custodianTelecom: tele class doseRestriction denominator: PQ numerator: PQ class encounter asAct: Act admissionType: CD dischargeDisposition: String encounterDateTime: IVL_TS encounterID: Sequence(II) encounterProvider: Sequence(organizationInformation) encounterType: encounterType facilityLocation: facilityLocation reasonForVisit: reasonForVisit 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 class encounterType extends CD class facilityLocation locationDuration: IVL_TS class FamilyHistory extends Any ClinicalGenomicChoice: Sequence(ClinicalGenomicChoice) Informant: informationSource PatientID: ST PedigreeAnalysisResults: Sequence(result) Relatives: Sequence(Relative) class ClinicalGenomicChoice extends Any ClinicalObservation: ClinicalObservation GeneticLoci: Sequence(result) Relative: Relative class ClinicalObservation extends Any causeOfDeath: BL code: CD DataEstimatedAge: IVL_REAL negationInd: BL class fillNumber nullFlavor: nullFlavorType value: String class fills value: String class fillStatus value: statusType class fulfillmentHistory dispenseDate: IVL_TS dispensingPharmacyLocation: addr fillNumber: fillNumber fillStatus: fillStatus prescriptionNumber: II provider: organizationInformation quantityDispensed: PQ class guarantorInformation partyAddress: Sequence(addr) partyName: pnm partyPhone: Sequence(tele) responsibilityEffectiveDate: IVL_TS class header confidentiality: CD custodian: custodian documentID: II documentTimestamp: TS healthcareProviders: healthcareProviders informationSource: informationSource language: CD languagesSpoken: Sequence(languageSpoken) personalInformation: personalInformation supports: Sequence(support) title: String version: version class healthcareProvider dateRange: IVL_TS patientID: II 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 providerEntity: providerInformation role: CD class healthcareProviders careProvisionDateRange: IVL_TS healthcareProvider: Sequence(healthcareProvider) class immunization administeredDate: TS medicationInformation: Sequence(medicationInformation) medicationSeriesNumber: PQ performer: organizationInformation reaction: Sequence(CD) refusalInd: String refusalReason: String class indication extends CD freeTextRef: String status: statusType class informationSource author: author informationSourceName: informationSourceName class informationSourceName organizationName: onm personName: pnm relatedPersonName: pnm class ContextClass extends Any Factory: Factory dataRange: IVL_TS advanceDirectives: Sequence(advanceDirective) allergies: Sequence(allergy) conditions: Sequence(condition) encounters: Sequence(encounter) immunizations: Sequence(immunization) informationSource: informationSource insuranceProviders: Sequence(insuranceProvider) medications: Sequence(medication) planOfCare: planOfCare pregnancies: Sequence(pregnancy) procedures: Sequence(procedure) provider: organizationInformation qualifier: qualifier results: results vitalSigns: vitalSignsOrganizer class SinglePatient extends ContextClass FamilyHistory: FamilyHistory Patient: personInformation class Population extends ContextClass FamilyHistory: Sequence(FamilyHistory) Patients: Sequence(SinglePatient) class Template extends SinglePatient TemplateID: String RootAct: Act FocusAct: Act LocalVariable(VarName: String): Any class eMeasure extends Template class insuranceProvider 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 financialResponsibilityPartyType: CD guarantorInformation: Sequence(guarantorInformation) healthInsuranceType: CD healthPlanName: String memberInformation: memberInformation payer: organizationInformation resultID: II subscriberInformation: subscriberInformation class languageSpoken languageCode: CS modeCode: CE preferenceInd: preferenceInd class medication admissionTiming: Sequence(admissionTiming) deliveryMethod: Sequence(CD) dose: PQ doseIndicator: String doseRestriction: doseRestriction fulfillmentHistory: Sequence(fulfillmentHistory) fulfillmentInstructions: String indicateMedicationStopped: IVL_TS indication: Sequence(indication) medicationInformation: Sequence(medicationInformation) orderInformation: Sequence(orderInformation) patientInstructions: String productForm: CD reaction: CD route: CD site: Sequence(CD) statusOfMedication: statusOfMedication typeOfMedication: CD vehicle: Sequence(vehicle) class medicationInformation codedBrandName: CD codedProductName: CD drugManufacturer: organizationInformation class memberInformation healthPlanCoverageDates: IVL_TS memberID: II patientAddress: Sequence(addr) patientDateOfBirth: TS patientName: pnm patientPhone: Sequence(tele) patientRelationshipToSubscriber: CD class nullFlavorType Enum("NP", "NI", "MSK", "NA", "OTH", "NINF", "PINF", "UNK", "NASK", "TRC", "ASKU", "NAV") class onm nullFlavor: nullFlavorType class orderInformation fills: fills orderDateTime: IVL_TS orderExpirationDateTime: TS orderNumber: II quantityOrdered: PQ class organizationInformation organizationAddress: Sequence(addr) organizationID: Sequence(II) 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 organizationName: onm organizationTelecom: Sequence(tele) class patientInformation personAddress: Sequence(addr) personID: II personInformation: Sequence(personInformation) personPhone: Sequence(tele) class personalInformation patientInformation: patientInformation class personInformation birthPlace: birthPlace ethnicity: CD gender: CD maritalStatus: Sequence(CD) personDateOfBirth: TS personName: Sequence(pnm) race: Sequence(CD) religiousAffiliation: CD class pivlTs alignment: String institutionSpecified: Boolean nullFlavor: nullFlavorType operator: String period: PQ phase: IVL_TS value: String class plannedEvent planFreeText: String planId: II plannedTime: IVL_TS planType: CD class planOfCare plannedAct: plannedEvent plannedObservation: plannedEvent plannedProcedure: plannedEvent class pnm family: String given: String nullFlavor: nullFlavorType prefix: String suffix: String class preferenceInd nullFlavor: nullFlavorType value: String class pregnancy extends CD class procedure bodySite: CD procedureDateTime: IVL_TS procedureFreeTextType: String procedureID: Sequence(II) procedureProvider: Sequence(organizationInformation) procedureType: CD class providerInformation providerAddress: Sequence(addr) 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 providerID: II providerName: pnm providerOrganizationName: onm providerTelecom: Sequence(tele) providerType: CD class qualifier name: CD value: ANY class reasonForVisit reason: CD class reference referenceDocumentID: II referenceDocumentURL: String class relationshipType Enum("CHILD", "SON", "HUSB") class Relative extends Any ClinicalGenomicChoice: Sequence(ClinicalGenomicChoice) deceasedEstimatedAge: REAL livingEstimatedAge: REAL naturalFatherID: ST naturalMotherID: ST patientID: ST person: pnm Relationship: CD class result resultDateTime: IVL_TS resultID: Sequence(II) resultInterpretation: CD resultReferenceRange: Sequence(resultReferenceRange) resultStatus: CS resultType: CD resultValue: ANY class resultReferenceRange class results resultsOrganizer: resultsOrganizer class resultsOrganizer code: CD effectiveTime: IVL_TS result: Sequence(result) class simpleCode code: String codeSystem: String codeSystemName: String displayName: String nullFlavor: nullFlavorType class statusOfMedication extends CD status: statusType class statusType Enum("normal", "active", "cancelled", "pending", "suspended", "terminated", "nullified", "completed") class subscriberInformation subscriberAddress: addr subscriberDateOfBirth: TS subscriberID: II 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 subscriberName: pnm subscriberPhone: Sequence(tele) class support contact: Sequence(contactType) date: IVL_TS guardian: contactType class supportType Enum("GUARD", "AGNT") class tele nullFlavor: nullFlavorType use: String useablePeriod: Sequence(useablePeriod) value: String class translation code: String codeSystem: String codeSystemName: String codeSystemVersion: String displayName: String nullFlavor: nullFlavorType originalText: ED translation: String value: String class treatingProvider treatingProviderID: II class useablePeriod nullFlavor: nullFlavorType operator: String value: String class valueType Enum("CE", "BL", "BN", "BIN", "CR", "UUID", "II", "URL", "AD", "BL", "EN", "QTY", "PQR", "RTO") class vehicle extends CD name: String class version number: String setID: II class vitalSignsOrganizer code: CD effectiveTime: IVL_TS vitalSign: Sequence(result) EndPackage 2.5 Detailed Clinical Model Example (Informative) A mock urine laboratory report is used to illustrate how the grammar could be used to define a detailed clinical model for use in clinical decision support. The content is informative and is included to provide example usage of the grammar for defining a class structure that is based on a detailed clinical model. A DCM could also be incorporated by using the generic information structure included in the base vMR, but this template constrains the structure to be semantically equivalent to the DCM and makes writing logic against a DCM easier. Package PKG_CEN_UrineCulture_V1 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 imports VMR class DipStick Blood: Observation Glucose: Observation Protein: Observation PH: Observation SpecificGravity: Observation class Microscopy WhiteCells: Observation RedCells: Observation EpithelialCells: Observation OtherCells: Observation Other: Observation class Pathogen Organism: Observation Number: Observation Ampicillin: Observation Augmentin: Observation Trimethoprim: Observation Co_Trimoxazole: Observation Nitrofurantoin: Observation Norfloxacin: Observation Cephalexin: Observation Gentamicin: Observation class Isolate Growth: Observation Pathogen: Pathogen class Culture Isolate: Sequence(Isolate) class NonReportableItems WorkingNotes: Observation class CEN_UrineCulture_V1 SpecimenType: Observation OtherSpecimenType: Observation DipStick: DipStick Microscopy: Microscopy Culture: Culture Comments: Observation NonReportableItems: NonReportableItems EndPackage