open_ehr 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +43 -0
- data/Guardfile +9 -0
- data/History.txt +4 -0
- data/Manifest.txt +16 -0
- data/PostInstall.txt +9 -0
- data/README.rdoc +66 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/doc/README_rdoc.html +148 -0
- data/doc/created.rid +2 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +54 -0
- data/doc/js/darkfish.js +116 -0
- data/doc/js/jquery.js +32 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/openehr_terminology.xml +2700 -0
- data/doc/rdoc.css +706 -0
- data/lib/#open_ehr.rb# +11 -0
- data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +21 -0
- data/lib/open_ehr/am/archetype/assertion.rb +190 -0
- data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +296 -0
- data/lib/open_ehr/am/archetype/constraint_model.rb +340 -0
- data/lib/open_ehr/am/archetype/ontology.rb +97 -0
- data/lib/open_ehr/am/archetype.rb +134 -0
- data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +29 -0
- data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +19 -0
- data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +12 -0
- data/lib/open_ehr/am.rb +8 -0
- data/lib/open_ehr/assumed_library_types.rb +627 -0
- data/lib/open_ehr/parser/xml_perser.rb +13 -0
- data/lib/open_ehr/parser.rb +19 -0
- data/lib/open_ehr/rm/common/archetyped.rb +182 -0
- data/lib/open_ehr/rm/common/change_control.rb +332 -0
- data/lib/open_ehr/rm/common/directory.rb +29 -0
- data/lib/open_ehr/rm/common/generic.rb +216 -0
- data/lib/open_ehr/rm/common/resource.rb +154 -0
- data/lib/open_ehr/rm/common.rb +14 -0
- data/lib/open_ehr/rm/composition/content/entry.rb +246 -0
- data/lib/open_ehr/rm/composition/content/navigation.rb +31 -0
- data/lib/open_ehr/rm/composition/content.rb +22 -0
- data/lib/open_ehr/rm/composition.rb +103 -0
- data/lib/open_ehr/rm/data_structures/history.rb +117 -0
- data/lib/open_ehr/rm/data_structures/item_structure/representation.rb +63 -0
- data/lib/open_ehr/rm/data_structures/item_structure.rb +216 -0
- data/lib/open_ehr/rm/data_structures.rb +25 -0
- data/lib/open_ehr/rm/data_types/basic.rb +108 -0
- data/lib/open_ehr/rm/data_types/charset.lst +818 -0
- data/lib/open_ehr/rm/data_types/charset_extract.rb +24 -0
- data/lib/open_ehr/rm/data_types/encapsulated.rb +98 -0
- data/lib/open_ehr/rm/data_types/quantity/date_time.rb +229 -0
- data/lib/open_ehr/rm/data_types/quantity.rb +403 -0
- data/lib/open_ehr/rm/data_types/text.rb +168 -0
- data/lib/open_ehr/rm/data_types/time_specification.rb +75 -0
- data/lib/open_ehr/rm/data_types/uri.rb +82 -0
- data/lib/open_ehr/rm/data_types.rb +14 -0
- data/lib/open_ehr/rm/demographic.rb +269 -0
- data/lib/open_ehr/rm/ehr.rb +162 -0
- data/lib/open_ehr/rm/integration.rb +27 -0
- data/lib/open_ehr/rm/security.rb +12 -0
- data/lib/open_ehr/rm/support/assumed_types.rb +81 -0
- data/lib/open_ehr/rm/support/definition.rb +15 -0
- data/lib/open_ehr/rm/support/identification.rb +408 -0
- data/lib/open_ehr/rm/support/measurement.rb +17 -0
- data/lib/open_ehr/rm/support/terminology.rb +135 -0
- data/lib/open_ehr/rm/support.rb +14 -0
- data/lib/open_ehr/rm.rb +16 -0
- data/lib/open_ehr/serializer.rb +272 -0
- data/lib/open_ehr/terminology/open_ehr_terminology.rb +41 -0
- data/lib/open_ehr/terminology.rb +7 -0
- data/lib/open_ehr/writer.rb +12 -0
- data/lib/open_ehr.rb +11 -0
- data/spec/lib/open_ehr/am/archetype/archetype_spec.rb +98 -0
- data/spec/lib/open_ehr/am/archetype/assertion/assertion_spec.rb +60 -0
- data/spec/lib/open_ehr/am/archetype/assertion/assertion_variable_spec.rb +30 -0
- data/spec/lib/open_ehr/am/archetype/assertion/expr_binary_operator.rb +40 -0
- data/spec/lib/open_ehr/am/archetype/assertion/expr_item_spec.rb +28 -0
- data/spec/lib/open_ehr/am/archetype/assertion/expr_leaf_spec.rb +34 -0
- data/spec/lib/open_ehr/am/archetype/assertion/expr_operator_spec.rb +25 -0
- data/spec/lib/open_ehr/am/archetype/assertion/expr_unary_operator_spec.rb +26 -0
- data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +110 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_constraint_spec.rb +56 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_internal_ref_spec.rb +36 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_slot_spec.rb +61 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_attribute_spec.rb +59 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_complex_object_spec.rb +39 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_defined_object_spec.rb +53 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_domain_type_spec.rb +25 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +29 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_object_spec.rb +61 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_primitive_object_spec.rb +33 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_reference_object_spec.rb +17 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/c_single_attribute_spec.rb +28 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/cardinality_spec.rb +68 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/constraint_ref_spec.rb +29 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +52 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +80 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +106 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +69 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +62 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +39 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_real_spec.rb +14 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +69 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +79 -0
- data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +59 -0
- data/spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb +43 -0
- data/spec/lib/open_ehr/am/archetype/validity_kind_spec.rb +42 -0
- data/spec/lib/open_ehr/assumed_library_types/interval_spec.rb +140 -0
- data/spec/lib/open_ehr/assumed_library_types/iso8601_date_spec.rb +236 -0
- data/spec/lib/open_ehr/assumed_library_types/iso8601_date_time_spec.rb +47 -0
- data/spec/lib/open_ehr/assumed_library_types/iso8601_duration_spec.rb +150 -0
- data/spec/lib/open_ehr/assumed_library_types/iso8601_time_spec.rb +234 -0
- data/spec/lib/open_ehr/assumed_library_types/iso8601_timezone_spec.rb +57 -0
- data/spec/lib/open_ehr/assumed_library_types/time_definitions_spec.rb +136 -0
- data/spec/lib/open_ehr/rm/common/archetyped/archetyped_spec.rb +50 -0
- data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_details_spec.rb +60 -0
- data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_spec.rb +51 -0
- data/spec/lib/open_ehr/rm/common/archetyped/link_spec.rb +42 -0
- data/spec/lib/open_ehr/rm/common/archetyped/locatable_spec.rb +89 -0
- data/spec/lib/open_ehr/rm/common/archetyped/pathable_spec.rb +42 -0
- data/spec/lib/open_ehr/rm/common/change_control/contribution_spec.rb +56 -0
- data/spec/lib/open_ehr/rm/common/change_control/imported_version_spec.rb +63 -0
- data/spec/lib/open_ehr/rm/common/change_control/original_version_spec.rb +71 -0
- data/spec/lib/open_ehr/rm/common/change_control/version_spec.rb +92 -0
- data/spec/lib/open_ehr/rm/common/change_control/versioned_object_spec.rb +285 -0
- data/spec/lib/open_ehr/rm/common/directory/folder_spec.rb +26 -0
- data/spec/lib/open_ehr/rm/common/generic/attestation_spec.rb +62 -0
- data/spec/lib/open_ehr/rm/common/generic/audit_details_spec.rb +51 -0
- data/spec/lib/open_ehr/rm/common/generic/participation_spec.rb +36 -0
- data/spec/lib/open_ehr/rm/common/generic/party_identified_spec.rb +64 -0
- data/spec/lib/open_ehr/rm/common/generic/party_proxy_spec.rb +18 -0
- data/spec/lib/open_ehr/rm/common/generic/party_related_spec.rb +24 -0
- data/spec/lib/open_ehr/rm/common/generic/revision_history_item_spec.rb +43 -0
- data/spec/lib/open_ehr/rm/common/generic/revision_history_spec.rb +45 -0
- data/spec/lib/open_ehr/rm/common/resource/authored_resource_spec.rb +68 -0
- data/spec/lib/open_ehr/rm/common/resource/resource_description_item_spec.rb +105 -0
- data/spec/lib/open_ehr/rm/common/resource/resource_description_spec.rb +74 -0
- data/spec/lib/open_ehr/rm/common/resource/translation_details_spec.rb +35 -0
- data/spec/lib/open_ehr/rm/composition/composition_spec.rb +92 -0
- data/spec/lib/open_ehr/rm/composition/content/content_item_spec.rb +14 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/action_spec.rb +69 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/activity_spec.rb +61 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/admin_entry_spec.rb +38 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/care_entry_spec.rb +37 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/entry_spec.rb +88 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/evaluation_spec.rb +37 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/instruction_details_spec.rb +51 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/instruction_spec.rb +62 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/ism_transition_spec.rb +46 -0
- data/spec/lib/open_ehr/rm/composition/content/entry/observation_spec.rb +45 -0
- data/spec/lib/open_ehr/rm/composition/content/navigation/section_spec.rb +32 -0
- data/spec/lib/open_ehr/rm/composition/event_context_spec.rb +88 -0
- data/spec/lib/open_ehr/rm/data_structures/data_structure_spec.rb +21 -0
- data/spec/lib/open_ehr/rm/data_structures/history/event_spec.rb +44 -0
- data/spec/lib/open_ehr/rm/data_structures/history/history_spec.rb +67 -0
- data/spec/lib/open_ehr/rm/data_structures/history/interval_event_spec.rb +43 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/item_list_spec.rb +53 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/item_single_spec.rb +29 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/item_table_spec.rb +147 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/item_tree_spec.rb +48 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/cluster_spec.rb +26 -0
- data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/element_spec.rb +22 -0
- data/spec/lib/open_ehr/rm/data_types/basic/data_value_spec.rb +17 -0
- data/spec/lib/open_ehr/rm/data_types/basic/dv_boolean_spec.rb +29 -0
- data/spec/lib/open_ehr/rm/data_types/basic/dv_identifier_spec.rb +108 -0
- data/spec/lib/open_ehr/rm/data_types/basic/dv_state_spec.rb +44 -0
- data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_encapsulated_spec.rb +42 -0
- data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_multimedia_spec.rb +79 -0
- data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_parsable_spec.rb +34 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_spec.rb +64 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb +25 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_tempral_spec.rb +24 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +37 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_absolute_quantity_spec.rb +35 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_amount_spec.rb +105 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_count_spec.rb +12 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_interval_spec.rb +17 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordered_spec.rb +60 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordinal_spec.rb +74 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_proportion_spec.rb +162 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantified_spec.rb +36 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantity_spec.rb +78 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/proportion_kind_spec.rb +24 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/reference_range_spec.rb +43 -0
- data/spec/lib/open_ehr/rm/data_types/text/code_phrase_spec.rb +23 -0
- data/spec/lib/open_ehr/rm/data_types/text/dv_paragraph_spec.rb +13 -0
- data/spec/lib/open_ehr/rm/data_types/text/dv_text_spec.rb +57 -0
- data/spec/lib/open_ehr/rm/data_types/text/term_mapping_spec.rb +59 -0
- data/spec/lib/open_ehr/rm/data_types/uri/dv_ehr_uri_spec.rb +21 -0
- data/spec/lib/open_ehr/rm/data_types/uri/dv_uri_spec.rb +36 -0
- data/spec/lib/open_ehr/rm/demographic/actor_spec.rb +79 -0
- data/spec/lib/open_ehr/rm/demographic/address_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/demographic/capability_spec.rb +37 -0
- data/spec/lib/open_ehr/rm/demographic/contact_spec.rb +45 -0
- data/spec/lib/open_ehr/rm/demographic/party_identity_spec.rb +32 -0
- data/spec/lib/open_ehr/rm/demographic/party_relationship_spec.rb +84 -0
- data/spec/lib/open_ehr/rm/demographic/party_spec.rb +133 -0
- data/spec/lib/open_ehr/rm/demographic/role_spec.rb +58 -0
- data/spec/lib/open_ehr/rm/ehr/ehr_access_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/ehr/ehr_spec.rb +139 -0
- data/spec/lib/open_ehr/rm/ehr/ehr_status_spec.rb +52 -0
- data/spec/lib/open_ehr/rm/ehr/versioned_composition_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/integration/generic_entry_spec.rb +31 -0
- data/spec/lib/open_ehr/rm/support/identification/access_group_ref_spec.rb +19 -0
- data/spec/lib/open_ehr/rm/support/identification/archetype_id_spec.rb +152 -0
- data/spec/lib/open_ehr/rm/support/identification/generic_id_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/support/identification/hier_object_id_spec.rb +12 -0
- data/spec/lib/open_ehr/rm/support/identification/internet_id_spec.rb +12 -0
- data/spec/lib/open_ehr/rm/support/identification/iso_oid_spec.rb +12 -0
- data/spec/lib/open_ehr/rm/support/identification/locatable_ref_spec.rb +34 -0
- data/spec/lib/open_ehr/rm/support/identification/object_id_spec.rb +24 -0
- data/spec/lib/open_ehr/rm/support/identification/object_ref_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/support/identification/object_version_id_spec.rb +60 -0
- data/spec/lib/open_ehr/rm/support/identification/party_ref_spec.rb +29 -0
- data/spec/lib/open_ehr/rm/support/identification/template_id_spec.rb +12 -0
- data/spec/lib/open_ehr/rm/support/identification/terminology_id_spec.rb +33 -0
- data/spec/lib/open_ehr/rm/support/identification/uid_based_id_spec.rb +50 -0
- data/spec/lib/open_ehr/rm/support/identification/uid_spec.rb +29 -0
- data/spec/lib/open_ehr/rm/support/identification/version_tree_id_spec.rb +104 -0
- data/spec/lib/open_ehr/rm/support/measurement_service_spec.rb +7 -0
- data/spec/lib/open_ehr/rm/support/terminology_service_spec.rb +24 -0
- data/spec/lib/open_ehr/serializer/adl-test-entry.most_minimal.test.adl +20 -0
- data/spec/lib/open_ehr/serializer/adl_serializer_spec.rb +47 -0
- data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.adl +38 -0
- data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.xml +58 -0
- data/spec/lib/open_ehr/serializer/sample_archetype_spec.rb +44 -0
- data/spec/lib/open_ehr/serializer/xml_serializer_spec.rb +49 -0
- data/spec/lib/open_ehr/terminology/open_ehr_terminology_spec.rb +40 -0
- data/spec/rcov.opts +1 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +54 -0
- metadata +401 -0
@@ -0,0 +1,216 @@
|
|
1
|
+
# This module is a implementation of the bellow UML
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_1_76d0249_1140169202660_257304_813Report.html
|
3
|
+
# Related to the ticket #62
|
4
|
+
include OpenEHR::RM::Support::Identification
|
5
|
+
include OpenEHR::RM::DataTypes::Basic
|
6
|
+
module OpenEHR
|
7
|
+
module RM
|
8
|
+
module Common
|
9
|
+
module Generic
|
10
|
+
class AuditDetails
|
11
|
+
attr_reader :system_id, :committer, :time_committed, :change_type
|
12
|
+
attr_accessor :description
|
13
|
+
|
14
|
+
def initialize(args = { })
|
15
|
+
self.system_id = args[:system_id]
|
16
|
+
self.committer = args[:committer]
|
17
|
+
self.time_committed = args[:time_committed]
|
18
|
+
self.change_type = args[:change_type]
|
19
|
+
self.description = args[:description]
|
20
|
+
end
|
21
|
+
|
22
|
+
def system_id=(system_id)
|
23
|
+
if system_id.nil? or system_id.empty?
|
24
|
+
raise ArgumentError, 'system_id is mandatory'
|
25
|
+
end
|
26
|
+
@system_id = system_id
|
27
|
+
end
|
28
|
+
|
29
|
+
def committer=(committer)
|
30
|
+
raise ArgumentError, 'committer is mandatory' if committer.nil?
|
31
|
+
@committer = committer
|
32
|
+
end
|
33
|
+
|
34
|
+
def time_committed=(time_committed)
|
35
|
+
if time_committed.nil?
|
36
|
+
raise ArgumentError, 'time_committed is mandatory'
|
37
|
+
end
|
38
|
+
@time_committed = time_committed
|
39
|
+
end
|
40
|
+
|
41
|
+
def change_type=(change_type)
|
42
|
+
raise ArgumentError, 'change_type is mandatory' if change_type.nil?
|
43
|
+
@change_type = change_type
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class RevisionHistory
|
48
|
+
attr_reader :items
|
49
|
+
|
50
|
+
def initialize(args = { })
|
51
|
+
self.items = args[:items]
|
52
|
+
end
|
53
|
+
|
54
|
+
def items=(items)
|
55
|
+
if items.nil? or items.empty?
|
56
|
+
raise ArgumentError, 'item(s) is/are mandatory'
|
57
|
+
end
|
58
|
+
@items = items
|
59
|
+
end
|
60
|
+
|
61
|
+
def most_recent_version
|
62
|
+
return @items.last.version_id.value
|
63
|
+
end
|
64
|
+
|
65
|
+
def most_recent_version_time_committed
|
66
|
+
return @items.last.audits.first.time_committed.value
|
67
|
+
end
|
68
|
+
end # of RevisionHistory
|
69
|
+
|
70
|
+
class RevisionHistoryItem
|
71
|
+
attr_reader :version_id, :audits
|
72
|
+
|
73
|
+
def initialize(args = { })
|
74
|
+
self.version_id = args[:version_id]
|
75
|
+
self.audits = args[:audits]
|
76
|
+
end
|
77
|
+
|
78
|
+
def audits=(audits)
|
79
|
+
if audits.nil? or audits.empty?
|
80
|
+
raise ArgumentError, 'audits is mandatory'
|
81
|
+
end
|
82
|
+
@audits = audits
|
83
|
+
end
|
84
|
+
|
85
|
+
def version_id=(version_id)
|
86
|
+
raise ArgumentError, 'version_id is mandatory' if version_id.nil?
|
87
|
+
@version_id = version_id
|
88
|
+
end
|
89
|
+
end # of RevisionHistory_Item
|
90
|
+
|
91
|
+
class PartyProxy
|
92
|
+
attr_accessor :external_ref
|
93
|
+
|
94
|
+
def initialize(args = { })
|
95
|
+
self.external_ref = args[:external_ref]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class PartySelf < PartyProxy
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
class PartyIdentified < PartyProxy
|
104
|
+
attr_reader :name, :identifier
|
105
|
+
|
106
|
+
def initialize(args = { })
|
107
|
+
if args[:external_ref].nil? && args[:name].nil? &&
|
108
|
+
args[:identifier].nil?
|
109
|
+
raise ArgumentError, 'cannot identified'
|
110
|
+
end
|
111
|
+
self.name = args[:name]
|
112
|
+
self.identifier = args[:identifier]
|
113
|
+
super(args)
|
114
|
+
end
|
115
|
+
|
116
|
+
def name=(name)
|
117
|
+
if name.nil? && @external_ref.nil? && @identifier.nil?
|
118
|
+
raise ArgumentError, 'cannot identified'
|
119
|
+
end
|
120
|
+
raise ArgumentError, 'invaild name' unless name.nil? || !name.empty?
|
121
|
+
@name = name
|
122
|
+
end
|
123
|
+
|
124
|
+
def identifier=(identifier)
|
125
|
+
if @name.nil? && @external_ref.nil? && identifier.nil?
|
126
|
+
raise ArgumentError, 'cannot identified'
|
127
|
+
end
|
128
|
+
if !identifier.nil? && identifier.empty?
|
129
|
+
raise ArgumentError, 'invaild identifier'
|
130
|
+
end
|
131
|
+
@identifier = identifier
|
132
|
+
end
|
133
|
+
|
134
|
+
def external_ref=(external_ref)
|
135
|
+
if @name.nil? && @identifier.nil? && external_ref.nil?
|
136
|
+
raise ArgumentError, 'invalid external_ref'
|
137
|
+
end
|
138
|
+
@external_ref = external_ref
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
class PartyRelated < PartyIdentified
|
143
|
+
attr_reader :relationship
|
144
|
+
def initialize(args = { })
|
145
|
+
super(args)
|
146
|
+
self.relationship = args[:relationship]
|
147
|
+
end
|
148
|
+
|
149
|
+
def relationship=(relationship)
|
150
|
+
if relationship.nil?
|
151
|
+
raise ArgumentError, 'relationship must not be nil'
|
152
|
+
end
|
153
|
+
@relationship = relationship
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
class Participation
|
158
|
+
attr_reader :performer, :function, :mode
|
159
|
+
attr_accessor :time
|
160
|
+
|
161
|
+
def initialize(args ={ })
|
162
|
+
self.performer = args[:performer]
|
163
|
+
self.function = args[:function]
|
164
|
+
self.mode = args[:mode]
|
165
|
+
self.time = args[:time]
|
166
|
+
end
|
167
|
+
|
168
|
+
def performer=(performer)
|
169
|
+
raise ArgumentError, 'performer is mandatory' if performer.nil?
|
170
|
+
@performer = performer
|
171
|
+
end
|
172
|
+
|
173
|
+
def function=(function)
|
174
|
+
raise ArgumentError, 'function is mandatory' if function.nil?
|
175
|
+
@function = function
|
176
|
+
end
|
177
|
+
|
178
|
+
def mode=(mode)
|
179
|
+
raise ArgumentError, 'mode is mandatory' if mode.nil?
|
180
|
+
@mode = mode
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
class Attestation < AuditDetails
|
185
|
+
attr_reader :reason
|
186
|
+
attr_accessor :proof, :attested_view, :is_pending, :items
|
187
|
+
|
188
|
+
def initialize(args = { })
|
189
|
+
super(args)
|
190
|
+
self.reason = args[:reason]
|
191
|
+
self.proof = args[:proof]
|
192
|
+
self.items = args[:items]
|
193
|
+
self.attested_view = args[:attested_view]
|
194
|
+
self.is_pending = args[:is_pending]
|
195
|
+
end
|
196
|
+
|
197
|
+
def reason=(reason)
|
198
|
+
raise ArgumentError, 'reason is mandatory' if reason.nil?
|
199
|
+
@reason = reason
|
200
|
+
end
|
201
|
+
|
202
|
+
def items=(items)
|
203
|
+
if !items.nil? && items.empty?
|
204
|
+
raise ArgumentError, 'items should not be empty'
|
205
|
+
end
|
206
|
+
@items = items
|
207
|
+
end
|
208
|
+
|
209
|
+
def is_pending?
|
210
|
+
return is_pending
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end # of Generic
|
214
|
+
end # of Common
|
215
|
+
end # of RM
|
216
|
+
end # of OpenEHR
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'set'
|
2
|
+
module OpenEHR
|
3
|
+
module RM
|
4
|
+
module Common
|
5
|
+
module Resource
|
6
|
+
class AuthoredResource
|
7
|
+
attr_reader :original_language, :translations
|
8
|
+
attr_accessor :description, :revision_history
|
9
|
+
|
10
|
+
def initialize(args = { })
|
11
|
+
self.original_language = args[:original_language]
|
12
|
+
self.translations = args[:translations]
|
13
|
+
self.revision_history = args[:revision_history]
|
14
|
+
self.description = args[:description]
|
15
|
+
end
|
16
|
+
|
17
|
+
def original_language=(original_language)
|
18
|
+
if original_language.nil?
|
19
|
+
raise ArgumentError, 'original language is mandatory'
|
20
|
+
end
|
21
|
+
@original_language = original_language
|
22
|
+
end
|
23
|
+
|
24
|
+
def translations=(translations)
|
25
|
+
if !translations.nil? && translations.empty?
|
26
|
+
raise ArgumentError, 'translation is empty'
|
27
|
+
end
|
28
|
+
@translations = translations
|
29
|
+
end
|
30
|
+
|
31
|
+
def current_revision
|
32
|
+
@revision_history.most_recent_version
|
33
|
+
end
|
34
|
+
|
35
|
+
def languages_available
|
36
|
+
return Set.new(@translations.keys) << original_language.code_string
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_controlled?
|
40
|
+
return !@revision_history.nil?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class TranslationDetails
|
45
|
+
attr_reader :language, :author
|
46
|
+
attr_accessor :accreditation, :other_details
|
47
|
+
|
48
|
+
def initialize(args = {})
|
49
|
+
self.language = args[:language]
|
50
|
+
self.author = args[:author]
|
51
|
+
self.accreditation = args[:accreditation]
|
52
|
+
self.other_details = args[:other_details]
|
53
|
+
end
|
54
|
+
|
55
|
+
def language=(language)
|
56
|
+
raise ArgumentError, 'language is mandatory' if language.nil?
|
57
|
+
@language = language
|
58
|
+
end
|
59
|
+
|
60
|
+
def author=(author)
|
61
|
+
raise ArgumentError, 'author is mandatory' if author.nil?
|
62
|
+
@author = author
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class ResourceDescription
|
67
|
+
attr_reader :original_author, :lifecycle_state, :details
|
68
|
+
attr_accessor :other_contributors, :resource_package_uri,
|
69
|
+
:other_details, :parent_resource
|
70
|
+
|
71
|
+
def initialize(args = {})
|
72
|
+
self.original_author = args[:original_author]
|
73
|
+
self.lifecycle_state = args[:lifecycle_state]
|
74
|
+
self.details = args[:details]
|
75
|
+
self.other_contributors = args[:other_contributors]
|
76
|
+
self.resource_package_uri = args[:resource_package_uri]
|
77
|
+
self.other_details = args[:other_details]
|
78
|
+
self.parent_resource = args[:parent_resource]
|
79
|
+
end
|
80
|
+
|
81
|
+
def original_author=(original_author)
|
82
|
+
if original_author.nil? || original_author.empty?
|
83
|
+
raise ArgumentError, 'original_author is mandatory'
|
84
|
+
end
|
85
|
+
@original_author = original_author
|
86
|
+
end
|
87
|
+
|
88
|
+
def lifecycle_state=(lifecycle_state)
|
89
|
+
if lifecycle_state.nil? || lifecycle_state.empty?
|
90
|
+
raise ArgumentError, 'lifecycle_state is malformatted'
|
91
|
+
end
|
92
|
+
@lifecycle_state = lifecycle_state
|
93
|
+
end
|
94
|
+
|
95
|
+
def details=(details)
|
96
|
+
if details.nil? || details.empty?
|
97
|
+
raise ArgumentError, 'nil or empty details'
|
98
|
+
end
|
99
|
+
@details = details
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class ResourceDescriptionItem
|
104
|
+
attr_reader :language, :purpose, :use, :misuse, :copyright
|
105
|
+
attr_accessor :keywords, :original_resource_uri, :other_details
|
106
|
+
|
107
|
+
def initialize(args = { })
|
108
|
+
self.language = args[:language]
|
109
|
+
self.purpose = args[:purpose]
|
110
|
+
self.keywords = args[:keywords]
|
111
|
+
self.use = args[:use]
|
112
|
+
self.misuse = args[:misuse]
|
113
|
+
self.copyright = args[:copyright]
|
114
|
+
self.original_resource_uri = args[:original_resource_uri]
|
115
|
+
self.other_details = args[:other_details]
|
116
|
+
end
|
117
|
+
|
118
|
+
def language=(language)
|
119
|
+
raise ArgumentError, 'language is mandatory' if language.nil?
|
120
|
+
@language = language
|
121
|
+
end
|
122
|
+
|
123
|
+
def purpose=(purpose)
|
124
|
+
if purpose.nil? || purpose.empty?
|
125
|
+
raise ArgumentError, 'purpose is mandatory'
|
126
|
+
end
|
127
|
+
@purpose = purpose
|
128
|
+
end
|
129
|
+
|
130
|
+
def use=(use)
|
131
|
+
if !use.nil? && use.empty?
|
132
|
+
raise ArgumentError, 'use is invalid'
|
133
|
+
end
|
134
|
+
@use = use
|
135
|
+
end
|
136
|
+
|
137
|
+
def misuse=(misuse)
|
138
|
+
if !misuse.nil? && misuse.empty?
|
139
|
+
raise ArgumentError, 'misuse is invalid'
|
140
|
+
end
|
141
|
+
@misuse = misuse
|
142
|
+
end
|
143
|
+
|
144
|
+
def copyright=(copyright)
|
145
|
+
if !copyright.nil? && copyright.empty?
|
146
|
+
raise ArgumentError, 'copyright is invalid'
|
147
|
+
end
|
148
|
+
@copyright = copyright
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end # end of Resouce
|
152
|
+
end # end of module Common
|
153
|
+
end # end of module RM
|
154
|
+
end # end of module OpenEHR
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
module OpenEHR
|
5
|
+
module RM
|
6
|
+
module Common
|
7
|
+
autoload :Archetyped, 'common/archetyped'
|
8
|
+
autoload :ChangeControl, 'common/change_control'
|
9
|
+
autoload :Directory, 'common/directory'
|
10
|
+
autoload :Generic, 'common/generic.rb'
|
11
|
+
autoload :Resource, 'common/resource'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,246 @@
|
|
1
|
+
# rm::composition::content::entry
|
2
|
+
# entry module
|
3
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109264528523_312165_346Report.html
|
4
|
+
# refs #56
|
5
|
+
include OpenEHR::RM::Composition::Content
|
6
|
+
|
7
|
+
module OpenEHR
|
8
|
+
module RM
|
9
|
+
module Composition
|
10
|
+
module Content
|
11
|
+
module Entry
|
12
|
+
class Entry < ContentItem
|
13
|
+
attr_reader :language, :encoding, :subject
|
14
|
+
attr_accessor :provider, :other_participations, :workflow_id
|
15
|
+
def initialize(args = { })
|
16
|
+
super(args)
|
17
|
+
self.language = args[:language]
|
18
|
+
self.encoding = args[:encoding]
|
19
|
+
self.subject = args[:subject]
|
20
|
+
self.provider = args[:provider]
|
21
|
+
self.other_participations = args[:other_participations]
|
22
|
+
self.workflow_id = args[:workflow_id]
|
23
|
+
end
|
24
|
+
|
25
|
+
def language=(language)
|
26
|
+
raise ArgumentError, 'language is mandatory' if language.nil?
|
27
|
+
@language = language
|
28
|
+
end
|
29
|
+
|
30
|
+
def encoding=(encoding)
|
31
|
+
raise ArgumentError, 'encoding is mandatory' if encoding.nil?
|
32
|
+
@encoding = encoding
|
33
|
+
end
|
34
|
+
|
35
|
+
def subject=(subject)
|
36
|
+
raise ArgumentError, 'subject is mandatory' if subject.nil?
|
37
|
+
@subject = subject
|
38
|
+
end
|
39
|
+
|
40
|
+
def subject_is_self?
|
41
|
+
return @subject.instance_of? PartySelf
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class AdminEntry < Entry
|
46
|
+
attr_reader :data
|
47
|
+
|
48
|
+
def initialize(args = { })
|
49
|
+
super(args)
|
50
|
+
self.data = args[:data]
|
51
|
+
end
|
52
|
+
|
53
|
+
def data=(data)
|
54
|
+
raise ArgumentError, 'data are mandatory' if data.nil?
|
55
|
+
@data = data
|
56
|
+
end
|
57
|
+
end
|
58
|
+
class CareEntry < Entry
|
59
|
+
attr_accessor :protocol, :guideline_id
|
60
|
+
|
61
|
+
def initialize(args = { })
|
62
|
+
super(args)
|
63
|
+
self.protocol = args[:protocol]
|
64
|
+
self.guideline_id = args[:guideline_id]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class Observation < CareEntry
|
69
|
+
attr_reader :data
|
70
|
+
attr_accessor :state
|
71
|
+
|
72
|
+
def initialize(args = { })
|
73
|
+
super(args)
|
74
|
+
self.data = args[:data]
|
75
|
+
self.state = args[:state]
|
76
|
+
end
|
77
|
+
|
78
|
+
def data=(data)
|
79
|
+
raise ArgumentError, 'data are mandatory' if data.nil?
|
80
|
+
@data = data
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class Evaluation < CareEntry
|
85
|
+
attr_reader :data
|
86
|
+
|
87
|
+
def initialize(args = { })
|
88
|
+
super(args)
|
89
|
+
self.data = args[:data]
|
90
|
+
end
|
91
|
+
|
92
|
+
def data=(data)
|
93
|
+
raise ArgumentError, 'data are mandatory' if data.nil?
|
94
|
+
@data = data
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class Instruction < CareEntry
|
99
|
+
attr_reader :narrative, :activities
|
100
|
+
attr_accessor :expiry_time, :wf_definition
|
101
|
+
|
102
|
+
def initialize(args = { })
|
103
|
+
super(args)
|
104
|
+
self.narrative = args[:narrative]
|
105
|
+
self.activities = args[:activities]
|
106
|
+
self.expiry_time = args[:expiry_time]
|
107
|
+
self.wf_definition = args[:wf_definition]
|
108
|
+
end
|
109
|
+
|
110
|
+
def narrative=(narrative)
|
111
|
+
if narrative.nil?
|
112
|
+
raise ArgumentError, 'narrative is mandatory'
|
113
|
+
end
|
114
|
+
@narrative = narrative
|
115
|
+
end
|
116
|
+
|
117
|
+
def activities=(activities)
|
118
|
+
if !activities.nil? && activities.empty?
|
119
|
+
raise ArgumentError, 'activities should not be empty'
|
120
|
+
end
|
121
|
+
@activities = activities
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class Activity < Locatable
|
126
|
+
attr_reader :description, :timing, :action_archetype_id
|
127
|
+
|
128
|
+
def initialize(args = { })
|
129
|
+
super(args)
|
130
|
+
self.description = args[:description]
|
131
|
+
self.timing = args[:timing]
|
132
|
+
self.action_archetype_id = args[:action_archetype_id]
|
133
|
+
end
|
134
|
+
|
135
|
+
def description=(description)
|
136
|
+
if description.nil?
|
137
|
+
raise ArgumentError, 'description is mandatory'
|
138
|
+
end
|
139
|
+
@description = description
|
140
|
+
end
|
141
|
+
|
142
|
+
def timing=(timing)
|
143
|
+
if timing.nil?
|
144
|
+
raise ArgumentError, 'timing is mandatory'
|
145
|
+
end
|
146
|
+
@timing = timing
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def action_archetype_id=(action_archetype_id)
|
151
|
+
if action_archetype_id.nil? || action_archetype_id.empty?
|
152
|
+
raise ArgumentError, 'action_archetype_id is mandatory'
|
153
|
+
end
|
154
|
+
@action_archetype_id = action_archetype_id
|
155
|
+
end
|
156
|
+
|
157
|
+
class Action < CareEntry
|
158
|
+
attr_reader :time, :description, :ism_transition
|
159
|
+
attr_accessor :instruction_details
|
160
|
+
|
161
|
+
def initialize(args = { })
|
162
|
+
super(args)
|
163
|
+
self.description = args[:description]
|
164
|
+
self.time = args[:time]
|
165
|
+
self.ism_transition = args[:ism_transition]
|
166
|
+
self.instruction_details = args[:instruction_details]
|
167
|
+
end
|
168
|
+
|
169
|
+
def time=(time)
|
170
|
+
if time.nil?
|
171
|
+
raise ArgumentError, 'time is mandatory'
|
172
|
+
end
|
173
|
+
@time = time
|
174
|
+
end
|
175
|
+
|
176
|
+
def description=(description)
|
177
|
+
if description.nil?
|
178
|
+
raise ArgumentError, 'description is mandatory'
|
179
|
+
end
|
180
|
+
@description = description
|
181
|
+
end
|
182
|
+
|
183
|
+
def ism_transition=(ism_transition)
|
184
|
+
if ism_transition.nil?
|
185
|
+
raise ArgumentError
|
186
|
+
end
|
187
|
+
@ism_transition = ism_transition
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
class InstructionDetails < Pathable
|
192
|
+
attr_reader :instruction_id, :activity_id
|
193
|
+
attr_accessor :wf_details
|
194
|
+
|
195
|
+
def initialize(args = { })
|
196
|
+
super(args)
|
197
|
+
self.instruction_id = args[:instruction_id]
|
198
|
+
self.activity_id = args[:activity_id]
|
199
|
+
self.wf_details = args[:wf_details]
|
200
|
+
end
|
201
|
+
|
202
|
+
def instruction_id=(instruction_id)
|
203
|
+
if instruction_id.nil?
|
204
|
+
raise ArgumentError, 'instruction_id is mandatory'
|
205
|
+
end
|
206
|
+
@instruction_id = instruction_id
|
207
|
+
end
|
208
|
+
|
209
|
+
def activity_id=(activity_id)
|
210
|
+
if activity_id.nil? || activity_id.empty?
|
211
|
+
raise ArgumentError, 'activity_id is mandatory'
|
212
|
+
end
|
213
|
+
@activity_id = activity_id
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
class IsmTransition < Pathable
|
218
|
+
attr_reader :current_state, :transition
|
219
|
+
attr_accessor :careflow_step
|
220
|
+
|
221
|
+
def initialize(args = { })
|
222
|
+
super(args)
|
223
|
+
self.current_state = args[:current_state]
|
224
|
+
self.transition = args[:transition]
|
225
|
+
self.careflow_step = args[:careflow_step]
|
226
|
+
end
|
227
|
+
|
228
|
+
def current_state=(current_state)
|
229
|
+
if current_state.nil?
|
230
|
+
raise ArgumentError, 'current_state is mandatory'
|
231
|
+
end
|
232
|
+
@current_state = current_state
|
233
|
+
end
|
234
|
+
|
235
|
+
def transition=(transition)
|
236
|
+
if transition.nil?
|
237
|
+
raise ArgumentError, 'transition is mandatory'
|
238
|
+
end
|
239
|
+
@transition = transition
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end # of Entry
|
243
|
+
end # of Content
|
244
|
+
end # of Composition
|
245
|
+
end # of RM
|
246
|
+
end # of OpenEHR
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# rm::composition::content::navigation
|
2
|
+
# navigation module
|
3
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109264528523_312165_346Report.html
|
4
|
+
# refs #56
|
5
|
+
include OpenEHR::RM::Composition::Content
|
6
|
+
|
7
|
+
module OpenEHR
|
8
|
+
module RM
|
9
|
+
module Composition
|
10
|
+
module Content
|
11
|
+
module Navigation
|
12
|
+
class Section < ContentItem
|
13
|
+
attr_reader :items
|
14
|
+
|
15
|
+
def initialize(args = { })
|
16
|
+
super(args)
|
17
|
+
self.items = args[:items]
|
18
|
+
end
|
19
|
+
|
20
|
+
def items=(items)
|
21
|
+
if !items.nil? && items.empty?
|
22
|
+
raise ArgumentError, 'items should not be empty'
|
23
|
+
end
|
24
|
+
@items = items
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end # end of Content
|
29
|
+
end # end of Composition
|
30
|
+
end # end of RM
|
31
|
+
end # end of OpenEHR
|
@@ -0,0 +1,22 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
# rm::composition::content
|
4
|
+
# content module
|
5
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_1_76d0249_1140524925046_706492_3290Report.html
|
6
|
+
# refs #58
|
7
|
+
include OpenEHR::RM::Common::Archetyped
|
8
|
+
|
9
|
+
module OpenEHR
|
10
|
+
module RM
|
11
|
+
module Composition
|
12
|
+
module Content
|
13
|
+
autoload :Navigation, 'content/navigation'
|
14
|
+
autoload :Entry, 'content/entry'
|
15
|
+
|
16
|
+
class ContentItem < Locatable
|
17
|
+
|
18
|
+
end
|
19
|
+
end # end of Content
|
20
|
+
end # end of Composition
|
21
|
+
end # end of RM
|
22
|
+
end # end of OpenEHR
|