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,182 @@
|
|
1
|
+
# This module is based on the UML,
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109318114715_211173_0Report.html
|
3
|
+
# Ticket refs #65
|
4
|
+
module OpenEHR
|
5
|
+
module RM
|
6
|
+
module Common
|
7
|
+
module Archetyped
|
8
|
+
module LocaterConstants
|
9
|
+
CURRENT_TRANSACTION_ID = "current"
|
10
|
+
FRAGMENT_SEPARATOR = "#"
|
11
|
+
CONTENT_PATH_SEPARATOR = "|"
|
12
|
+
ORGANIZER_PATH_SEPARATOR = "/"
|
13
|
+
MULTIPART_ID_DELIMITER = "::"
|
14
|
+
end
|
15
|
+
|
16
|
+
class Pathable
|
17
|
+
attr_accessor :parent
|
18
|
+
|
19
|
+
def initialize(args = { })
|
20
|
+
self.parent = args[:parent]
|
21
|
+
end
|
22
|
+
|
23
|
+
def item_at_path(path)
|
24
|
+
raise NotImplementedError, "item_at_path must be implemented"
|
25
|
+
end
|
26
|
+
|
27
|
+
def items_at_path(path)
|
28
|
+
raise NotImplementedError, "items_at_path must be implemented"
|
29
|
+
end
|
30
|
+
|
31
|
+
def path_exists?(path)
|
32
|
+
raise NotImplementedError, "path_exists? must be implemented"
|
33
|
+
end
|
34
|
+
|
35
|
+
def path_of_item(item)
|
36
|
+
raise NotImplementedError, "path_of_item must be implemented"
|
37
|
+
end
|
38
|
+
|
39
|
+
def path_unique?(path)
|
40
|
+
raise NotImplementedError, "path_unique? must be implemented"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class Locatable < Pathable
|
45
|
+
include LocaterConstants
|
46
|
+
attr_reader :archetype_node_id, :name, :links
|
47
|
+
attr_accessor :uid, :archetype_details, :feeder_audit
|
48
|
+
|
49
|
+
def initialize(args = { })
|
50
|
+
super(args)
|
51
|
+
self.archetype_node_id = args[:archetype_node_id]
|
52
|
+
self.name = args[:name]
|
53
|
+
self.links = args[:links]
|
54
|
+
self.uid = args[:uid]
|
55
|
+
self.archetype_details = args[:archetype_details]
|
56
|
+
self.feeder_audit = args[:feeder_audit]
|
57
|
+
end
|
58
|
+
|
59
|
+
def archetype_node_id=(archetype_node_id)
|
60
|
+
if archetype_node_id.nil? or archetype_node_id.empty?
|
61
|
+
raise ArgumentError, 'archetype_node_id should not be nil'
|
62
|
+
end
|
63
|
+
@archetype_node_id = archetype_node_id
|
64
|
+
end
|
65
|
+
|
66
|
+
def name=(name)
|
67
|
+
if name.nil? or name.value.empty?
|
68
|
+
raise ArgumentError, 'name should not be empty'
|
69
|
+
end
|
70
|
+
@name = name
|
71
|
+
end
|
72
|
+
|
73
|
+
def links=(links)
|
74
|
+
if !links.nil? and links.empty?
|
75
|
+
raise ArgumentError, "links shoud not be empty"
|
76
|
+
end
|
77
|
+
@links = links
|
78
|
+
end
|
79
|
+
|
80
|
+
def concept
|
81
|
+
if self.is_archetype_root?
|
82
|
+
return DvText.new(:value =>
|
83
|
+
@archetype_details.archetype_id.concept_name)
|
84
|
+
else
|
85
|
+
raise ArgumentError, 'this is not root'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def is_archetype_root?
|
90
|
+
!archetype_details.nil?
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class Archetyped
|
95
|
+
attr_reader :archetype_id, :rm_version
|
96
|
+
attr_accessor :template_id
|
97
|
+
|
98
|
+
def initialize(args = { })
|
99
|
+
self.archetype_id = args[:archetype_id]
|
100
|
+
self.rm_version = args[:rm_version]
|
101
|
+
self.template_id = args[:template_id]
|
102
|
+
end
|
103
|
+
|
104
|
+
def archetype_id=(archetype_id)
|
105
|
+
raise ArgumentError, "invalid archetype_id" if archetype_id.nil?
|
106
|
+
@archetype_id = archetype_id
|
107
|
+
end
|
108
|
+
|
109
|
+
def rm_version=(rm_version)
|
110
|
+
if rm_version.nil? or rm_version.empty?
|
111
|
+
raise ArgumentError, "invalid rm_version"
|
112
|
+
end
|
113
|
+
@rm_version = rm_version
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class Link
|
118
|
+
attr_reader :meaning, :target, :type
|
119
|
+
def initialize(args = { })
|
120
|
+
self.meaning = args[:meaning]
|
121
|
+
self.target = args[:target]
|
122
|
+
self.type = args[:type]
|
123
|
+
end
|
124
|
+
def meaning=(meaning)
|
125
|
+
raise ArgumentError, "meaning should not be nil" if meaning.nil?
|
126
|
+
@meaning = meaning
|
127
|
+
end
|
128
|
+
def target=(target)
|
129
|
+
raise ArgumentError, "target should not be nil" if target.nil?
|
130
|
+
@target = target
|
131
|
+
end
|
132
|
+
def type=(type)
|
133
|
+
raise ArgumentError, "type should not be nil" if type.nil?
|
134
|
+
@type = type
|
135
|
+
end
|
136
|
+
end # of Link
|
137
|
+
|
138
|
+
class FeederAudit
|
139
|
+
attr_reader :originating_system_audit
|
140
|
+
attr_accessor :originating_system_item_ids, :feeder_system_audit,
|
141
|
+
:feeder_system_item_ids, :original_content
|
142
|
+
|
143
|
+
def initialize(args = { })
|
144
|
+
self.originating_system_audit = args[:originating_system_audit]
|
145
|
+
self.originating_system_item_ids = args[:originating_system_item_ids]
|
146
|
+
self.feeder_system_audit = args[:feeder_system_audit]
|
147
|
+
self.feeder_system_item_ids = args[:feeder_system_item_ids]
|
148
|
+
self.original_content = args[:original_content]
|
149
|
+
end
|
150
|
+
|
151
|
+
def originating_system_audit=(originating_system_audit)
|
152
|
+
if originating_system_audit.nil?
|
153
|
+
raise ArgumentError, 'originating_system_audit must be not nil'
|
154
|
+
end
|
155
|
+
@originating_system_audit = originating_system_audit
|
156
|
+
end
|
157
|
+
end # of FeederAudit
|
158
|
+
|
159
|
+
class FeederAuditDetails
|
160
|
+
attr_reader :system_id
|
161
|
+
attr_accessor :provider, :location, :time, :subject, :version_id
|
162
|
+
|
163
|
+
def initialize(args = { })
|
164
|
+
self.system_id = args[:system_id]
|
165
|
+
self.provider = args[:provider]
|
166
|
+
self.location = args[:location]
|
167
|
+
self.time = args[:time]
|
168
|
+
self.subject = args[:subject]
|
169
|
+
self.version_id = args[:version_id]
|
170
|
+
end
|
171
|
+
|
172
|
+
def system_id=(system_id)
|
173
|
+
if system_id.nil? or system_id.empty?
|
174
|
+
raise ArgumentError, 'system_id invalid'
|
175
|
+
end
|
176
|
+
@system_id = system_id
|
177
|
+
end
|
178
|
+
end # of FeederAudit_Details
|
179
|
+
end # of Archetyped
|
180
|
+
end # of Common
|
181
|
+
end # of RM
|
182
|
+
end # OpenEHR
|
@@ -0,0 +1,332 @@
|
|
1
|
+
# This module is based on the UML,
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109326589721_134411_997Report.html
|
3
|
+
# Ticket refs #64
|
4
|
+
include OpenEHR::RM::Common::Generic
|
5
|
+
module OpenEHR
|
6
|
+
module RM
|
7
|
+
module Common
|
8
|
+
module ChangeControl
|
9
|
+
class Contribution
|
10
|
+
attr_reader :uid, :versions, :audit
|
11
|
+
|
12
|
+
def initialize(args = { })
|
13
|
+
self.uid = args[:uid]
|
14
|
+
self.versions = args[:versions]
|
15
|
+
self.audit = args[:audit]
|
16
|
+
end
|
17
|
+
|
18
|
+
def uid=(uid)
|
19
|
+
if uid.nil?
|
20
|
+
raise ArgumentError, "uid should not be nil."
|
21
|
+
end
|
22
|
+
@uid = uid
|
23
|
+
end
|
24
|
+
|
25
|
+
def versions=(versions)
|
26
|
+
unless versions.nil?
|
27
|
+
if versions.empty?
|
28
|
+
raise ArgumentError, 'versions shoud not be nil or empty.'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
@versions = versions
|
32
|
+
end
|
33
|
+
|
34
|
+
def audit=(audit)
|
35
|
+
if audit.nil?
|
36
|
+
raise ArgumentError, 'audit should not be nil.'
|
37
|
+
end
|
38
|
+
if audit.description.nil?
|
39
|
+
raise ArgumentError, 'audit.description should not be nil.'
|
40
|
+
end
|
41
|
+
@audit = audit
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Version
|
46
|
+
attr_reader :uid, :preceding_version_uid, :lifecycle_state,
|
47
|
+
:commit_audit, :contribution
|
48
|
+
attr_accessor :data, :signature
|
49
|
+
|
50
|
+
def initialize(args = { })
|
51
|
+
self.uid = args[:uid]
|
52
|
+
self.preceding_version_uid = args[:preceding_version_uid]
|
53
|
+
self.data = args[:data]
|
54
|
+
self.lifcycle_state = args[:lifecycle_state]
|
55
|
+
self.commit_audit = args[:commit_audit]
|
56
|
+
self.contribution = args[:contribution]
|
57
|
+
self.signature = args[:signature]
|
58
|
+
end
|
59
|
+
|
60
|
+
def uid=(uid)
|
61
|
+
raise ArgumentError, "uid should not be nil" if uid.nil?
|
62
|
+
@uid = uid
|
63
|
+
end
|
64
|
+
|
65
|
+
def preceding_version_uid=(preceding_version_uid)
|
66
|
+
if (!preceding_version_uid.nil?) == @uid.version_tree_id.is_first?
|
67
|
+
raise ArgumentError, 'preceding version is invalid'
|
68
|
+
end
|
69
|
+
@preceding_version_uid = preceding_version_uid
|
70
|
+
end
|
71
|
+
|
72
|
+
# remove hard coding of lifecycle
|
73
|
+
def lifcycle_state=(lifecycle_state)
|
74
|
+
if lifecycle_state.nil? ||
|
75
|
+
!%w[532 553 523].include?(
|
76
|
+
lifecycle_state.defining_code.code_string)
|
77
|
+
raise ArgumentError, 'invalid lifecycle_state'
|
78
|
+
end
|
79
|
+
@lifecycle_state = lifecycle_state
|
80
|
+
end
|
81
|
+
|
82
|
+
def commit_audit=(commit_audit)
|
83
|
+
if commit_audit.nil?
|
84
|
+
raise ArgumentError,'commit_audit is mandatory'
|
85
|
+
end
|
86
|
+
@commit_audit = commit_audit
|
87
|
+
end
|
88
|
+
|
89
|
+
def contribution=(contribution)
|
90
|
+
if contribution.nil? or contribution.type.empty?
|
91
|
+
raise ArgumentError, "contribution is invalid"
|
92
|
+
end
|
93
|
+
if contribution.type == 'CONTRIBUTION'
|
94
|
+
@contribution = contribution
|
95
|
+
else
|
96
|
+
raise ArgumentError, 'contribution is invalid'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def owner_id
|
101
|
+
return HierObjectID.new(:value => @uid.value)
|
102
|
+
end
|
103
|
+
|
104
|
+
def is_branch?
|
105
|
+
return @uid.is_branch?
|
106
|
+
end
|
107
|
+
|
108
|
+
def canonical_form
|
109
|
+
raise NotImplementedError, 'canonical form is not determined'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
class ImportedVersion < Version
|
114
|
+
attr_reader :item
|
115
|
+
|
116
|
+
def initialize(args = { })
|
117
|
+
self.item = args[:item]
|
118
|
+
super(:uid => @item.uid,
|
119
|
+
:preceding_version_uid => @item.preceding_version_uid,
|
120
|
+
:data => @item.data, :commit_audit=> args[:commit_audit],
|
121
|
+
:commit_audit => args[:commit_audit],
|
122
|
+
:contribution => args[:contribution],
|
123
|
+
:lifecycle_state => @item.lifecycle_state,
|
124
|
+
:signature => args[:signature])
|
125
|
+
end
|
126
|
+
|
127
|
+
def item=(item)
|
128
|
+
raise ArgumentError, 'item is mandatory' if item.nil?
|
129
|
+
@item = item
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
class OriginalVersion < Version
|
134
|
+
attr_reader :attestations, :other_input_version_uids
|
135
|
+
|
136
|
+
def initialize(args = { })
|
137
|
+
super(args)
|
138
|
+
self.attestations = args[:attestations]
|
139
|
+
self.other_input_version_uids = args[:other_input_version_uids]
|
140
|
+
end
|
141
|
+
|
142
|
+
def attestations=(attestations)
|
143
|
+
if attestations.nil? || attestations.empty?
|
144
|
+
raise ArgumentError, 'attestations is mandatory'
|
145
|
+
end
|
146
|
+
@attestations = attestations
|
147
|
+
end
|
148
|
+
|
149
|
+
def other_input_version_uids=(other_input_version_uids)
|
150
|
+
if !other_input_version_uids.nil? && other_input_version_uids.empty?
|
151
|
+
raise ArgumentError, 'invaild other_input_version_uids'
|
152
|
+
end
|
153
|
+
@other_input_version_uids = other_input_version_uids
|
154
|
+
end
|
155
|
+
|
156
|
+
def is_merged?
|
157
|
+
return !other_input_version_uids.nil?
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
class VersionedObject
|
162
|
+
attr_reader :uid, :owner_id, :time_created, :all_versions
|
163
|
+
|
164
|
+
def initialize(args = { })
|
165
|
+
self.uid = args[:uid]
|
166
|
+
self.owner_id = args[:owner_id]
|
167
|
+
self.time_created = args[:time_created]
|
168
|
+
self.all_versions = args[:all_versions]
|
169
|
+
end
|
170
|
+
|
171
|
+
def uid=(uid)
|
172
|
+
raise ArgumentError, 'uid is mandatory' if uid.nil?
|
173
|
+
@uid = uid
|
174
|
+
end
|
175
|
+
|
176
|
+
def owner_id=(owner_id)
|
177
|
+
raise ArgumentError, 'owner_id is mandatory' if owner_id.nil?
|
178
|
+
@owner_id = owner_id
|
179
|
+
end
|
180
|
+
|
181
|
+
def time_created=(time_created)
|
182
|
+
if time_created.nil?
|
183
|
+
raise ArgumentError, 'time_created is mandatory'
|
184
|
+
end
|
185
|
+
@time_created = time_created
|
186
|
+
end
|
187
|
+
|
188
|
+
def all_versions=(all_versions)
|
189
|
+
if all_versions.nil? || all_versions.size < 0
|
190
|
+
raise ArgumentError, 'version count invalid'
|
191
|
+
end
|
192
|
+
@all_versions = all_versions
|
193
|
+
end
|
194
|
+
|
195
|
+
def all_version_ids
|
196
|
+
ids = []
|
197
|
+
@all_versions.each{|id| ids << id.uid}
|
198
|
+
return ids
|
199
|
+
end
|
200
|
+
|
201
|
+
def version_count
|
202
|
+
return all_versions.size
|
203
|
+
end
|
204
|
+
|
205
|
+
def has_version_id?(a_ver_id)
|
206
|
+
raise ArgumentError, 'argument is mandatory' if a_ver_id.nil?
|
207
|
+
return self.all_version_ids.include?(a_ver_id)
|
208
|
+
end
|
209
|
+
|
210
|
+
def is_original_version?(a_ver_id)
|
211
|
+
if a_ver_id.nil? || !self.has_version_id?(a_ver_id)
|
212
|
+
raise ArgumentError, 'invalid a_ver_id'
|
213
|
+
end
|
214
|
+
return @all_versions[self.all_version_ids.index(a_ver_id)].instance_of? OriginalVersion
|
215
|
+
end
|
216
|
+
|
217
|
+
def has_version_at_time?(a_time)
|
218
|
+
raise ArgumentError, 'argument mandatory' if a_time.nil?
|
219
|
+
@all_versions.each do |ver|
|
220
|
+
if ver.commit_audit.time_committed == a_time
|
221
|
+
return true
|
222
|
+
end
|
223
|
+
end
|
224
|
+
return false
|
225
|
+
end
|
226
|
+
|
227
|
+
def version_with_id(a_ver_id)
|
228
|
+
if a_ver_id.nil? || !self.has_version_id?(a_ver_id)
|
229
|
+
raise ArgumentError, 'argument invalid'
|
230
|
+
end
|
231
|
+
return @all_versions[self.all_version_ids.index(a_ver_id)]
|
232
|
+
end
|
233
|
+
|
234
|
+
def version_at_time(a_time)
|
235
|
+
if a_time.nil? || !self.has_version_at_time?(a_time)
|
236
|
+
raise ArgumentError, 'argument invalid'
|
237
|
+
end
|
238
|
+
@all_versions.each do |ver|
|
239
|
+
if ver.commit_audit.time_committed == a_time
|
240
|
+
return ver
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def latest_version
|
246
|
+
time_sorted_version = @all_versions.sort do |a,b|
|
247
|
+
a.commit_audit.time_committed <=> b.commit_audit.time_committed
|
248
|
+
end
|
249
|
+
return time_sorted_version.last
|
250
|
+
end
|
251
|
+
|
252
|
+
def latest_trunk_version
|
253
|
+
trunk_versions = [ ]
|
254
|
+
@all_versions.each do |ver|
|
255
|
+
if ver.uid.version_tree_id.trunk_version == '1'
|
256
|
+
trunk_versions << ver
|
257
|
+
end
|
258
|
+
end
|
259
|
+
sorted_trunk_version = trunk_versions.sort do |a,b|
|
260
|
+
a.commit_audit.time_committed <=> b.commit_audit.time_committed
|
261
|
+
end
|
262
|
+
return sorted_trunk_version.last
|
263
|
+
end
|
264
|
+
|
265
|
+
def trunk_lifecycle_state
|
266
|
+
return self.latest_trunk_version.lifecycle_state
|
267
|
+
end
|
268
|
+
|
269
|
+
def revision_history
|
270
|
+
revision_history_items = [ ]
|
271
|
+
@all_versions.each do |ver|
|
272
|
+
audits = [ ]
|
273
|
+
if ver.instance_of? OriginalVersion
|
274
|
+
audits << ver.attestations
|
275
|
+
end
|
276
|
+
audits << ver.commit_audit
|
277
|
+
revision_history_items << RevisionHistoryItem.new(
|
278
|
+
:audits => audits,
|
279
|
+
:version_id => ver.uid)
|
280
|
+
end
|
281
|
+
return RevisionHistory.new(:items => revision_history_items)
|
282
|
+
end
|
283
|
+
|
284
|
+
def commit_original_version(args={ })
|
285
|
+
if has_version_id?(args[:preceding_version_uid]) or self.version_count == 0
|
286
|
+
@all_versions << OriginalVersion.new(:uid => args[:uid],
|
287
|
+
:preceding_version_uid => args[:preceding_version_uid],
|
288
|
+
:contribution => args[:contribution],
|
289
|
+
:commit_audit => args[:commit_audit],
|
290
|
+
:lifecycle_state => args[:lifecycle_state],
|
291
|
+
:data => args[:data],
|
292
|
+
:attestations => args[:attestations],
|
293
|
+
:signature => args[:signature])
|
294
|
+
else
|
295
|
+
raise ArgumentError, 'invalid preceding uid'
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
def commit_original_merged_version(args = { })
|
300
|
+
@all_versions << OriginalVersion.new(:uid => args[:uid],
|
301
|
+
:contribution => args[:contribution],
|
302
|
+
:preceding_version_uid => args[:preceding_version_uid],
|
303
|
+
:commit_audit => args[:commit_audit],
|
304
|
+
:lifecycle_state => args[:lifecycle_state],
|
305
|
+
:data => args[:data],
|
306
|
+
:attestations => args[:attestations],
|
307
|
+
:other_input_version_uids => args[:other_input_version_uids],
|
308
|
+
:signature => args[:signature])
|
309
|
+
end
|
310
|
+
|
311
|
+
def commit_imported_version(args = { })
|
312
|
+
@all_versions << ImportedVersion.new(:item => args[:item],
|
313
|
+
:contribution => args[:contribution],
|
314
|
+
:commit_audit => args[:commit_audit])
|
315
|
+
end
|
316
|
+
|
317
|
+
def commit_attestation(args = { })
|
318
|
+
if args[:attestation].nil?
|
319
|
+
raise ArgumentError, 'attestation is mandatory'
|
320
|
+
end
|
321
|
+
if self.has_version_id?(args[:uid]) && self.is_original_version?(args[:uid])
|
322
|
+
self.version_with_id(args[:uid]).attestations << args[:attestation]
|
323
|
+
self.version_with_id(args[:uid]).signature = args[:signature]
|
324
|
+
else
|
325
|
+
raise ArgumentError, 'uid invalid'
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end # of ChangeControl
|
330
|
+
end # of Common
|
331
|
+
end # of RM
|
332
|
+
end # of OpenEHR
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# This module is based on the UML,
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_1_76d0249_1140536622627_218703_7149Report.html
|
3
|
+
# Ticket refs #63
|
4
|
+
include OpenEHR::RM::DataTypes::Text
|
5
|
+
module OpenEHR
|
6
|
+
module RM
|
7
|
+
module Common
|
8
|
+
module Directory
|
9
|
+
class Folder < OpenEHR::RM::Common::Archetyped::Locatable
|
10
|
+
attr_accessor :items
|
11
|
+
attr_reader :folders
|
12
|
+
|
13
|
+
def initialize(args = { })
|
14
|
+
super(args)
|
15
|
+
self.folders = args[:folders]
|
16
|
+
self.items = args[:items]
|
17
|
+
end
|
18
|
+
|
19
|
+
def folders=(folders)
|
20
|
+
raise ArgumentError, "empty subfolder" if !folders.nil? and folders.empty?
|
21
|
+
@folders = folders
|
22
|
+
end
|
23
|
+
end
|
24
|
+
class VersionedFolder < OpenEHR::RM::Common::ChangeControl::VersionedObject
|
25
|
+
end
|
26
|
+
end # of Directory
|
27
|
+
end # of Common
|
28
|
+
end # of RM
|
29
|
+
end # of OpenEHR
|