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,408 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
# This module is an implementation of this UML:
|
3
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109331021343_528780_2066Report.html
|
4
|
+
# Ticket refs #39
|
5
|
+
module OpenEHR
|
6
|
+
module RM
|
7
|
+
module Support
|
8
|
+
module Identification
|
9
|
+
class ObjectID
|
10
|
+
attr_reader :value
|
11
|
+
|
12
|
+
def initialize(args = {})
|
13
|
+
self.value=args[:value]
|
14
|
+
end
|
15
|
+
|
16
|
+
def value=(value)
|
17
|
+
raise ArgumentError, "empty value" if value.nil? or value.empty?
|
18
|
+
@value = value
|
19
|
+
end
|
20
|
+
|
21
|
+
def ==(object_id)
|
22
|
+
self.value == object_id.value
|
23
|
+
end
|
24
|
+
end # of ObjectID
|
25
|
+
|
26
|
+
class ObjectRef
|
27
|
+
attr_reader :namespace, :type, :id
|
28
|
+
|
29
|
+
def initialize(args = {})
|
30
|
+
self.namespace = args[:namespace]
|
31
|
+
self.type = args[:type]
|
32
|
+
self.id = args[:id]
|
33
|
+
end
|
34
|
+
|
35
|
+
def namespace=(namespace)
|
36
|
+
if namespace.nil? or namespace.empty? or
|
37
|
+
!(/^[a-zA-Z][a-zA-Z0-9_\-\:\/\&\+\?]*$/ =~ namespace)
|
38
|
+
raise ArgumentError
|
39
|
+
end
|
40
|
+
@namespace = namespace
|
41
|
+
end
|
42
|
+
|
43
|
+
def type=(type)
|
44
|
+
raise ArgumentError if type.nil? or type.empty?
|
45
|
+
@type = type
|
46
|
+
end
|
47
|
+
|
48
|
+
def id=(id)
|
49
|
+
raise ArgumentError if id.nil?
|
50
|
+
@id = id
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class ArchetypeID < ObjectID
|
55
|
+
attr_reader :rm_originator, :rm_name, :rm_entity,
|
56
|
+
:concept_name, :specialisation, :version_id
|
57
|
+
|
58
|
+
def initialize(args = {})
|
59
|
+
if args[:value].nil?
|
60
|
+
self.rm_originator = args[:rm_originator]
|
61
|
+
self.rm_name = args[:rm_name]
|
62
|
+
self.rm_entity = args[:rm_entity]
|
63
|
+
self.concept_name = args[:concept_name]
|
64
|
+
self.version_id = args[:version_id]
|
65
|
+
self.specialisation = args[:specialisation]
|
66
|
+
else
|
67
|
+
super(args)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def value=(value)
|
72
|
+
if /([a-zA-Z]\w+)-([a-zA-Z]\w+)-([a-zA-Z]\w+)\.([a-zA-Z]\w+)(-([a-zA-Z]\w+))?\.(v[1-9]\d*)/ =~ value
|
73
|
+
self.rm_originator = $1
|
74
|
+
self.rm_name = $2
|
75
|
+
self.rm_entity = $3
|
76
|
+
self.concept_name = $4
|
77
|
+
self.specialisation = $6
|
78
|
+
self.version_id = $7
|
79
|
+
else
|
80
|
+
raise ArgumentError, 'invalid archetype id form'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def qualified_rm_entity
|
85
|
+
return @rm_originator + '-' + @rm_name + '-' + @rm_entity
|
86
|
+
end
|
87
|
+
|
88
|
+
def domain_concept
|
89
|
+
if @specialisation.nil?
|
90
|
+
return @concept_name
|
91
|
+
else
|
92
|
+
return @concept_name + '-' + @specialisation
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def value
|
97
|
+
return self.qualified_rm_entity + '.' +
|
98
|
+
self.domain_concept + '.' + @version_id
|
99
|
+
end
|
100
|
+
|
101
|
+
def concept_name=(concept_name)
|
102
|
+
if concept_name.nil? or concept_name.empty?
|
103
|
+
raise ArgumentError, 'concept_name is mandatory'
|
104
|
+
end
|
105
|
+
@concept_name = concept_name
|
106
|
+
end
|
107
|
+
|
108
|
+
def domain_concept=(domain_concept)
|
109
|
+
if domain_concept.nil? or domain_concept.empty?
|
110
|
+
raise ArgumentError, "domain concept not valid"
|
111
|
+
end
|
112
|
+
if /([a-zA-Z]\w+)(-([a-zA-Z]\w))?/ =~ domain_concept
|
113
|
+
self.concept_name = $1
|
114
|
+
self.specialisation = $3
|
115
|
+
else
|
116
|
+
raise ArgumentError, 'invalid domain concept form'
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def rm_name=(rm_name)
|
121
|
+
raise ArgumentError, "rm_name not valid" if rm_name.nil? or rm_name.empty?
|
122
|
+
@rm_name = rm_name
|
123
|
+
end
|
124
|
+
|
125
|
+
def rm_entity=(rm_entity)
|
126
|
+
if rm_entity.nil? or rm_entity.empty?
|
127
|
+
raise ArgumentError, "rm_entity is mandatory"
|
128
|
+
end
|
129
|
+
@rm_entity = rm_entity
|
130
|
+
end
|
131
|
+
|
132
|
+
def rm_originator=(rm_originator)
|
133
|
+
if rm_originator.nil? or rm_originator.empty?
|
134
|
+
raise ArgumentError, "rm_originator not valid"
|
135
|
+
end
|
136
|
+
@rm_originator = rm_originator
|
137
|
+
end
|
138
|
+
|
139
|
+
def specialisation=(specialisation)
|
140
|
+
if !specialisation.nil? and specialisation.empty?
|
141
|
+
raise ArgumentError, "rm_specialisation not valid"
|
142
|
+
end
|
143
|
+
@specialisation = specialisation
|
144
|
+
end
|
145
|
+
|
146
|
+
def version_id=(version_id)
|
147
|
+
raise ArgumentError, "version_id not valid" if version_id.nil? or version_id.empty?
|
148
|
+
@version_id = version_id
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class TerminologyID < ObjectID
|
153
|
+
attr_reader :name, :version_id
|
154
|
+
|
155
|
+
def initialize(args = {})
|
156
|
+
if args[:value].nil?
|
157
|
+
self.name = args[:name]
|
158
|
+
self.version_id = args[:version_id]
|
159
|
+
else
|
160
|
+
super(args)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def value
|
165
|
+
if @version_id.empty?
|
166
|
+
@name
|
167
|
+
else
|
168
|
+
@name + '(' + @version_id + ')'
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
173
|
+
def value=(value)
|
174
|
+
raise ArgumentError, "value not valid" if value.nil? or value.empty?
|
175
|
+
if /(.*)\((.*)\)/ =~ value
|
176
|
+
self.name = $1
|
177
|
+
self.version_id = $2
|
178
|
+
else
|
179
|
+
self.name = value
|
180
|
+
self.version_id = ''
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def name=(name)
|
185
|
+
raise ArgumentError, "name not valid" if name.nil? or name.empty?
|
186
|
+
@name = name
|
187
|
+
end
|
188
|
+
|
189
|
+
def version_id=(version_id)
|
190
|
+
if version_id.nil?
|
191
|
+
@version_id = ''
|
192
|
+
else
|
193
|
+
@version_id = version_id
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end # of Terminology_ID
|
197
|
+
|
198
|
+
class GenericID < ObjectID
|
199
|
+
attr_reader :scheme
|
200
|
+
|
201
|
+
def initialize(args)
|
202
|
+
super(args)
|
203
|
+
self.scheme = args[:scheme]
|
204
|
+
end
|
205
|
+
|
206
|
+
def scheme=(scheme)
|
207
|
+
if scheme.nil? or scheme.empty?
|
208
|
+
raise ArgumentError, "scheme not valid"
|
209
|
+
end
|
210
|
+
@scheme = scheme
|
211
|
+
end
|
212
|
+
end # of Generic_ID
|
213
|
+
|
214
|
+
class TemplateID < ObjectID
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
class UIDBasedID < ObjectID
|
219
|
+
attr_reader :root, :extension
|
220
|
+
|
221
|
+
def initialize(args = {})
|
222
|
+
super(args)
|
223
|
+
end
|
224
|
+
|
225
|
+
def value=(value)
|
226
|
+
super(value)
|
227
|
+
if /(\S+)::(\S+)/ =~ value
|
228
|
+
@root = UID.new(:value => $1)
|
229
|
+
@extension = $2
|
230
|
+
else
|
231
|
+
@root = UID.new(:value => value)
|
232
|
+
@extension = ''
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
def has_extension?
|
237
|
+
return !@extension.empty?
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
class ObjectVersionID < UIDBasedID
|
242
|
+
attr_reader :object_id, :creating_system_id, :version_tree_id
|
243
|
+
|
244
|
+
def initialize(args= {})
|
245
|
+
super(args)
|
246
|
+
end
|
247
|
+
|
248
|
+
def value=(value)
|
249
|
+
if /^(\S+)::(\S+)::((\d|\.)+)$/ =~ value
|
250
|
+
self.object_id = UID.new(:value => $1)
|
251
|
+
self.creating_system_id = UID.new(:value => $2)
|
252
|
+
self.version_tree_id = VersionTreeID.new(:value => $3)
|
253
|
+
else
|
254
|
+
raise ArgumentError, 'invalid format'
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
def value
|
259
|
+
return @object_id.value + '::' +
|
260
|
+
@creating_system_id.value + '::' +
|
261
|
+
@version_tree_id.value
|
262
|
+
end
|
263
|
+
|
264
|
+
def object_id=(object_id)
|
265
|
+
raise ArgumentError, 'object_id is mandatory' if object_id.nil?
|
266
|
+
@object_id = object_id
|
267
|
+
end
|
268
|
+
|
269
|
+
def creating_system_id=(creating_system_id)
|
270
|
+
if creating_system_id.nil?
|
271
|
+
raise ArgumentError, 'creating_system_id is mandatory'
|
272
|
+
end
|
273
|
+
@creating_system_id = creating_system_id
|
274
|
+
end
|
275
|
+
|
276
|
+
def version_tree_id=(version_tree_id)
|
277
|
+
if version_tree_id.nil?
|
278
|
+
raise ArgumentError, 'version_tree_id is mandatory'
|
279
|
+
end
|
280
|
+
@version_tree_id = version_tree_id
|
281
|
+
end
|
282
|
+
|
283
|
+
def is_branch?
|
284
|
+
return @version_tree_id.is_branch?
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
class LocatableRef < ObjectRef
|
289
|
+
attr_reader :path
|
290
|
+
|
291
|
+
def initialize(args = {})
|
292
|
+
super(args)
|
293
|
+
self.path = args[:path]
|
294
|
+
end
|
295
|
+
|
296
|
+
def path=(path)
|
297
|
+
raise ArgumentError if path.nil? or path.empty?
|
298
|
+
@path = path
|
299
|
+
end
|
300
|
+
|
301
|
+
def as_uri
|
302
|
+
'ehr://' + @id.value + '/' + @path
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
class PartyRef < ObjectRef
|
307
|
+
def type=(type)
|
308
|
+
parties = %w[PERSON ORGANISATION GROUP AGENT ROLE PARTY ACTOR]
|
309
|
+
raise ArgumentError, 'type invalid' unless parties.include? type
|
310
|
+
@type = type
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
class AccessGroupRef < ObjectRef
|
315
|
+
def initialize(args = {})
|
316
|
+
super(args)
|
317
|
+
@type = 'ACCESS_GROUP'
|
318
|
+
end
|
319
|
+
|
320
|
+
def type=(type)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
class HierObjectID < UIDBasedID
|
325
|
+
|
326
|
+
end
|
327
|
+
|
328
|
+
class VersionTreeID
|
329
|
+
attr_reader :trunk_version, :branch_number, :branch_version
|
330
|
+
|
331
|
+
def initialize(args = {})
|
332
|
+
self.value = args[:value]
|
333
|
+
end
|
334
|
+
|
335
|
+
def value=(value)
|
336
|
+
raise ArgumentError, 'value invalid' if value.nil? or value.empty?
|
337
|
+
(trunk_version, branch_number, branch_version) = value.split '.'
|
338
|
+
self.trunk_version = trunk_version
|
339
|
+
self.branch_number = branch_number
|
340
|
+
self.branch_version = branch_version
|
341
|
+
end
|
342
|
+
|
343
|
+
def value
|
344
|
+
@value = trunk_version
|
345
|
+
@value = @value + '.' + @branch_number unless @branch_number.nil?
|
346
|
+
@value = @value + '.' + @branch_version unless @branch_version.nil?
|
347
|
+
return @value
|
348
|
+
end
|
349
|
+
|
350
|
+
def trunk_version=(trunk_version)
|
351
|
+
if trunk_version.nil? || (trunk_version.to_i < 1)
|
352
|
+
raise ArgumentError, 'trunk_version invalid'
|
353
|
+
end
|
354
|
+
@trunk_version = trunk_version
|
355
|
+
end
|
356
|
+
|
357
|
+
def branch_number=(branch_number)
|
358
|
+
unless branch_number.nil? or branch_number.to_i >= 1
|
359
|
+
raise ArgumentError, 'branch number invalid'
|
360
|
+
end
|
361
|
+
@branch_number = branch_number
|
362
|
+
end
|
363
|
+
|
364
|
+
def branch_version=(branch_version)
|
365
|
+
if (!branch_version.nil? and !(branch_version.to_i >= 1)) or
|
366
|
+
(!branch_version.nil? and @branch_number.nil?)
|
367
|
+
raise ArgumentError, 'branch version invalid'
|
368
|
+
end
|
369
|
+
@branch_version = branch_version
|
370
|
+
end
|
371
|
+
|
372
|
+
def is_branch?
|
373
|
+
!@branch_version.nil? and !@branch_number.nil?
|
374
|
+
end
|
375
|
+
|
376
|
+
def is_first?
|
377
|
+
trunk_version == '1'
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
class UID
|
382
|
+
attr_reader :value
|
383
|
+
|
384
|
+
def initialize(args = {})
|
385
|
+
self.value = args[:value]
|
386
|
+
end
|
387
|
+
|
388
|
+
def value=(value)
|
389
|
+
raise ArgumentError if value.nil? or value.empty?
|
390
|
+
@value = value
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
class UUID < UID
|
395
|
+
|
396
|
+
end
|
397
|
+
|
398
|
+
class InternetID <UID
|
399
|
+
|
400
|
+
end
|
401
|
+
|
402
|
+
class IsoOID <UID
|
403
|
+
|
404
|
+
end
|
405
|
+
end # of Identification
|
406
|
+
end # of Support
|
407
|
+
end # of RM
|
408
|
+
end # of OpenEHR
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module OpenEHR
|
2
|
+
module RM
|
3
|
+
module Support
|
4
|
+
module Measurement
|
5
|
+
class MeasurementService
|
6
|
+
end
|
7
|
+
module ExternalEnvironmentAccess
|
8
|
+
def eea_terminology_svc
|
9
|
+
end
|
10
|
+
|
11
|
+
def eea_measurement_svc
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end # of Measurment
|
15
|
+
end # of Support
|
16
|
+
end # of RM
|
17
|
+
end # of OpenEHR
|
@@ -0,0 +1,135 @@
|
|
1
|
+
|
2
|
+
module OpenEHR
|
3
|
+
module RM
|
4
|
+
module Support
|
5
|
+
module Terminology
|
6
|
+
class CodeSetAccess
|
7
|
+
def all_codes
|
8
|
+
raise NotImplementedError, "all_codes must be implemented"
|
9
|
+
end
|
10
|
+
|
11
|
+
def has_code(a_code)
|
12
|
+
raise NotImplementedError, "has_code must be implemented"
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_lang(a_lang)
|
16
|
+
raise NotImplementedError, "has_lang must be implemented"
|
17
|
+
end
|
18
|
+
|
19
|
+
def id
|
20
|
+
raise NotImplementedError, "id must be returned"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module OpenEHRCodeSetIdentifier
|
25
|
+
CODE_SET_ID_CHARACER_SETS = "character sets".freeze
|
26
|
+
CODE_SET_ID_COMPRESSION_ALGORITHMS = "compression algorithms".freeze
|
27
|
+
CODE_SET_ID_COUNTRIES = "countries".freeze
|
28
|
+
CODE_SET_ID_INTEGRITY_CHECK_ALGORITHMS = "integrity check algorithms".freeze
|
29
|
+
CODE_SET_ID_LANGUAGES = "languages".freeze
|
30
|
+
CODE_SET_ID_MEDIA_TYPES = "media types".freeze
|
31
|
+
def valid_code_set_id(an_id)
|
32
|
+
!@an_id.nil?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module OpenEHRTerminologyGroupIdentifiers
|
37
|
+
GROUP_ID_ATTESTATION_REASON = "attestation reason".freeze
|
38
|
+
GROUP_ID_AUDIT_CHANGE_TYPE = "audit change type".freeze
|
39
|
+
GROUP_ID_COMPOSITION_CATEGORY = "composition category".freeze
|
40
|
+
GROUP_ID_MATH_FUNCTION = "event math function".freeze
|
41
|
+
GROUP_ID_INSTRUCTION_STATES = "instruction states".freeze
|
42
|
+
GROUP_ID_INSTRUCTION_TRANSITIONS = "instruction transitions".freeze
|
43
|
+
GROUP_ID_NULL_FLAVOURS = "null flavours".freeze
|
44
|
+
GROUP_ID_PARTICIPATION_FUNCTION = "participation function".freeze
|
45
|
+
GROUP_ID_PARTICIPATION_MODE = "participation mode".freeze
|
46
|
+
GROUP_ID_PROPERTY = "property".freeze
|
47
|
+
GROUP_ID_SETTING = "setting".freeze.freeze
|
48
|
+
GROUP_ID_SUBJECT_RELATIONSHIP = "subject relationship".freeze
|
49
|
+
GROUP_ID_TERM_MAPPING_PURPOSE = "term mapping purpose".freeze
|
50
|
+
GROUP_ID_VERSION_LIFECYCLE_STATE = "version lifecycle state".freeze
|
51
|
+
TERMINOLOGY_ID = "openehr".freeze
|
52
|
+
end
|
53
|
+
|
54
|
+
class TerminologyAccess
|
55
|
+
attr_reader :id
|
56
|
+
|
57
|
+
def initialize(args = {})
|
58
|
+
self.id = args[:id]
|
59
|
+
end
|
60
|
+
|
61
|
+
def all_codes
|
62
|
+
raise NotImplementedError, "all_codes is not implemented"
|
63
|
+
end
|
64
|
+
|
65
|
+
def codes_for_group_id(group_id)
|
66
|
+
raise NotImplementedError, "codes_for_group_id is not implemented"
|
67
|
+
end
|
68
|
+
|
69
|
+
def codes_for_group_name(name, lang)
|
70
|
+
raise NotImplementedError, "codes_for_group_name is not implemented"
|
71
|
+
end
|
72
|
+
|
73
|
+
def has_code_for_group_id(group_id, a_code)
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
def id=(id)
|
78
|
+
@terminology = Terminology.find_all_by_name(id)
|
79
|
+
@id = id
|
80
|
+
end
|
81
|
+
|
82
|
+
def rubric_for_code(code, lang)
|
83
|
+
return Terminology.find(:first, :conditions => {:code => code,
|
84
|
+
:lang => lang})
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
def id_exists
|
89
|
+
if id.nil?
|
90
|
+
raise ArgumentError, "id must not be nil"
|
91
|
+
elsif id.empty?
|
92
|
+
raise ArgumentError, "id must not be empty"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class TerminologyService
|
98
|
+
include OpenEHRCodeSetIdentifier, OpenEHRTerminologyGroupIdentifiers
|
99
|
+
|
100
|
+
def code_set(name)
|
101
|
+
raise NotImplementedError, "code_set is not implemented"
|
102
|
+
end
|
103
|
+
|
104
|
+
def code_set_for_id(id)
|
105
|
+
raise NotImplementedError, "code_set_for_id is not implemented"
|
106
|
+
end
|
107
|
+
|
108
|
+
def code_set_identifiers
|
109
|
+
raise NotImplementedError, "code_set_for_identifiers is not implemented"
|
110
|
+
end
|
111
|
+
|
112
|
+
def has_code_set(name)
|
113
|
+
raise NotImplementedError, "has_code_set is not implemented"
|
114
|
+
end
|
115
|
+
|
116
|
+
def has_terminology?(name)
|
117
|
+
raise NotImplementedError, "has_terminology is not implemented"
|
118
|
+
end
|
119
|
+
|
120
|
+
def openehr_code_sets
|
121
|
+
raise NotImplementedError, "openehr_code_set is not implemented"
|
122
|
+
end
|
123
|
+
|
124
|
+
def terminology(name)
|
125
|
+
return TerminologyAccess.new(:id => name)
|
126
|
+
end
|
127
|
+
|
128
|
+
def terminology_identifiers
|
129
|
+
raise NotImplementedError, "terminology_identiferes is not implemented"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end # of Terminology
|
133
|
+
end # of Support
|
134
|
+
end # of RM
|
135
|
+
end # of 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 Support
|
7
|
+
autoload :AssumedTypes, 'support/assumed_types'
|
8
|
+
autoload :Definition, 'support/definition'
|
9
|
+
autoload :Identification, 'support/identification'
|
10
|
+
autoload :Measurement, 'support/measurement'
|
11
|
+
autoload :Terminology, 'support/terminology'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/open_ehr/rm.rb
ADDED
@@ -0,0 +1,16 @@
|
|
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
|
+
autoload :Common, 'rm/common'
|
7
|
+
autoload :Composition, 'rm/composition'
|
8
|
+
autoload :DataStructures, 'rm/data_structures'
|
9
|
+
autoload :DataTypes, 'rm/data_types'
|
10
|
+
autoload :Demographic, 'rm/demographic'
|
11
|
+
autoload :EHR, 'rm/ehr'
|
12
|
+
autoload :Integration, 'rm/integration'
|
13
|
+
autoload :Security, 'rm/security'
|
14
|
+
autoload :Support, 'rm/support'
|
15
|
+
end
|
16
|
+
end
|