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,82 @@
|
|
1
|
+
# This module is implemented from this UML:
|
2
|
+
#http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109701308832_384250_6986Report.html
|
3
|
+
# Ticket refs #46
|
4
|
+
require 'uri/generic'
|
5
|
+
|
6
|
+
module URI
|
7
|
+
class EHR < ::URI::Generic
|
8
|
+
COMPONENT = [
|
9
|
+
:scheme, :path, :fragment, :query
|
10
|
+
].freeze
|
11
|
+
|
12
|
+
def self.build(args)
|
13
|
+
tmp = Util::make_components_hash(self, args)
|
14
|
+
super(tmp)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(*arg)
|
18
|
+
super(*arg)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.use_registry
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
@@schemes['EHR'] = EHR
|
26
|
+
end
|
27
|
+
|
28
|
+
module OpenEHR
|
29
|
+
module RM
|
30
|
+
module DataTypes
|
31
|
+
module URI
|
32
|
+
class DvUri < OpenEHR::RM::DataTypes::Basic::DataValue
|
33
|
+
def initialize(args = {})
|
34
|
+
self.value = args[:value]
|
35
|
+
end
|
36
|
+
|
37
|
+
def value
|
38
|
+
@value.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def fragment_id
|
42
|
+
@value.fragment
|
43
|
+
end
|
44
|
+
|
45
|
+
def path
|
46
|
+
@value.path
|
47
|
+
end
|
48
|
+
|
49
|
+
def query
|
50
|
+
@value.query
|
51
|
+
end
|
52
|
+
|
53
|
+
def scheme
|
54
|
+
@value.scheme
|
55
|
+
end
|
56
|
+
|
57
|
+
def value=(value)
|
58
|
+
raise ArgumentError, "value is empty" if value.nil?
|
59
|
+
parse(value)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def parse(value)
|
65
|
+
@value = ::URI.parse(value)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class DvEhrUri < DvUri
|
70
|
+
def initialize(value)
|
71
|
+
super(value)
|
72
|
+
end
|
73
|
+
|
74
|
+
def value=(value)
|
75
|
+
raise ArgumentError, "scheme must be ehr" if !(value =~ /^ehr/i)
|
76
|
+
@value = parse(value)
|
77
|
+
end
|
78
|
+
end # of DV_EHR_URI
|
79
|
+
end # of URI
|
80
|
+
end # of DataTypes
|
81
|
+
end # of RM
|
82
|
+
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
|
+
module OpenEHR
|
4
|
+
module RM
|
5
|
+
module DataTypes
|
6
|
+
autoload :Basic, 'data_types/basic'
|
7
|
+
autoload :Encapsulated, 'data_types/encapsulated'
|
8
|
+
autoload :Quantity, 'data_types/quantity'
|
9
|
+
autoload :Text, 'data_types/text'
|
10
|
+
autoload :TimeSpecification, 'data_types/time_specification'
|
11
|
+
autoload :URI, 'data_types/uri'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,269 @@
|
|
1
|
+
# This module is based on the UML,
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_76d0249_1118674798473_6021_0Report.html
|
3
|
+
# Ticket refs #45
|
4
|
+
include OpenEHR::RM::Common::Archetyped
|
5
|
+
|
6
|
+
module OpenEHR
|
7
|
+
module RM
|
8
|
+
module Demographic
|
9
|
+
class Party < Locatable
|
10
|
+
attr_reader :uid, :identities, :contacts, :relationships,
|
11
|
+
:reverse_relationships
|
12
|
+
attr_accessor :details
|
13
|
+
alias :type :name
|
14
|
+
|
15
|
+
def initialize(args = { })
|
16
|
+
super(args)
|
17
|
+
self.uid = args[:uid]
|
18
|
+
self.identities = args[:identities]
|
19
|
+
self.contacts = args[:contacts]
|
20
|
+
self.relationships = args[:relationships]
|
21
|
+
self.reverse_relationships =
|
22
|
+
args[:reverse_relationships]
|
23
|
+
self.details = args[:details]
|
24
|
+
end
|
25
|
+
|
26
|
+
def uid=(uid)
|
27
|
+
raise ArgumentError, 'uid is mandatory' if uid.nil?
|
28
|
+
@uid = uid
|
29
|
+
end
|
30
|
+
|
31
|
+
def identities=(identities)
|
32
|
+
if identities.nil? || identities.empty?
|
33
|
+
raise ArgumentError, 'identities are mandatory'
|
34
|
+
end
|
35
|
+
@identities = identities
|
36
|
+
end
|
37
|
+
|
38
|
+
def contacts=(contacts)
|
39
|
+
if !contacts.nil? && contacts.empty?
|
40
|
+
raise ArgumentError, 'contacts should not be empty'
|
41
|
+
end
|
42
|
+
@contacts = contacts
|
43
|
+
end
|
44
|
+
|
45
|
+
def parent=(parent)
|
46
|
+
@parent = nil
|
47
|
+
end
|
48
|
+
|
49
|
+
def relationships=(relationships)
|
50
|
+
unless relationships.nil?
|
51
|
+
if relationships.empty?
|
52
|
+
raise ArgumentError, 'relationships should not be empty?'
|
53
|
+
else
|
54
|
+
relationships.each do |rel|
|
55
|
+
if rel.source.id.value != @uid.value
|
56
|
+
raise ArgumentError, 'invalid source of relationships'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
@relationships = relationships
|
62
|
+
end
|
63
|
+
|
64
|
+
def reverse_relationships=(reverse_relationships)
|
65
|
+
if !reverse_relationships.nil? && reverse_relationships.empty?
|
66
|
+
raise ArgumentError, 'reverse_relationships should not be empty'
|
67
|
+
end
|
68
|
+
@reverse_relationships = reverse_relationships
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class PartyIdentity < Locatable
|
73
|
+
attr_reader :details
|
74
|
+
|
75
|
+
def initialize(args = { })
|
76
|
+
super(args)
|
77
|
+
self.details = args[:details]
|
78
|
+
end
|
79
|
+
|
80
|
+
def details=(details)
|
81
|
+
if details.nil?
|
82
|
+
raise ArgumentError, 'details are mandatory'
|
83
|
+
end
|
84
|
+
@details = details
|
85
|
+
end
|
86
|
+
|
87
|
+
def purpose
|
88
|
+
return @name
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class Contact < Locatable
|
93
|
+
attr_accessor :time_validity
|
94
|
+
attr_reader :addresses
|
95
|
+
|
96
|
+
def initialize(args = { })
|
97
|
+
super(args)
|
98
|
+
self.addresses = args[:addresses]
|
99
|
+
self.time_validity = args[:time_validity]
|
100
|
+
end
|
101
|
+
|
102
|
+
def purpose
|
103
|
+
return @name
|
104
|
+
end
|
105
|
+
|
106
|
+
def addresses=(addresses)
|
107
|
+
if addresses.nil? || addresses.empty?
|
108
|
+
raise ArgumentError, 'address is mandatory'
|
109
|
+
end
|
110
|
+
@addresses = addresses
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class Address < Locatable
|
115
|
+
attr_reader :details
|
116
|
+
|
117
|
+
def initialize(args = { })
|
118
|
+
super(args)
|
119
|
+
self.details = args[:details]
|
120
|
+
end
|
121
|
+
|
122
|
+
def details=(details)
|
123
|
+
if details.nil?
|
124
|
+
raise ArgumentError, 'details are mandatory'
|
125
|
+
end
|
126
|
+
@details = details
|
127
|
+
end
|
128
|
+
|
129
|
+
def type
|
130
|
+
return @name
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
class Actor < Party
|
135
|
+
LEAGAL_IDENTITY = 'legal identity'
|
136
|
+
attr_reader :languages, :roles
|
137
|
+
|
138
|
+
def initialize(args = { })
|
139
|
+
super(args)
|
140
|
+
self.roles = args[:roles]
|
141
|
+
self.languages = args[:languages]
|
142
|
+
end
|
143
|
+
|
144
|
+
def roles=(roles)
|
145
|
+
if !roles.nil? && roles.empty?
|
146
|
+
raise ArgumentError, 'roles should not be empty'
|
147
|
+
end
|
148
|
+
@roles = roles
|
149
|
+
end
|
150
|
+
|
151
|
+
def has_legal_identity?
|
152
|
+
@identities.each do |identity|
|
153
|
+
if identity.purpose.value == LEAGAL_IDENTITY
|
154
|
+
return true
|
155
|
+
end
|
156
|
+
end
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
|
160
|
+
def languages=(languages)
|
161
|
+
if !languages.nil? && languages.empty?
|
162
|
+
raise ArgumentError, 'languages should not be empty.'
|
163
|
+
end
|
164
|
+
@languages = languages
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
class Person < Actor
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
class Organisation < Actor
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
class Group < Actor
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
class Agent < Actor
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
class Role < Party
|
185
|
+
attr_reader :performer, :capabilities
|
186
|
+
attr_accessor :time_validity
|
187
|
+
|
188
|
+
def initialize(args = { })
|
189
|
+
super(args)
|
190
|
+
self.performer = args[:performer]
|
191
|
+
self.capabilities = args[:capabilities]
|
192
|
+
self.time_validity = args[:time_validity]
|
193
|
+
end
|
194
|
+
|
195
|
+
def performer=(performer)
|
196
|
+
if performer.nil?
|
197
|
+
raise ArgumentError, 'performer is mandatory'
|
198
|
+
end
|
199
|
+
@performer = performer
|
200
|
+
end
|
201
|
+
|
202
|
+
def capabilities=(capabilities)
|
203
|
+
if !capabilities.nil? && capabilities.empty?
|
204
|
+
raise ArgumentError, 'capability should not be empty'
|
205
|
+
end
|
206
|
+
@capabilities = capabilities
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
class Capability < Locatable
|
211
|
+
attr_reader :credentials
|
212
|
+
attr_accessor :time_validity
|
213
|
+
|
214
|
+
def initialize(args = { })
|
215
|
+
super(args)
|
216
|
+
self.credentials = args[:credentials]
|
217
|
+
self.time_validity = args[:time_validity]
|
218
|
+
end
|
219
|
+
|
220
|
+
def credentials=(credentials)
|
221
|
+
if credentials.nil?
|
222
|
+
raise ArgumentError, 'credentials are mandatory'
|
223
|
+
end
|
224
|
+
@credentials = credentials
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
class PartyRelationship < Locatable
|
229
|
+
attr_accessor :details, :time_validity
|
230
|
+
attr_reader :source, :target
|
231
|
+
alias :type :name
|
232
|
+
|
233
|
+
def initialize(args = { })
|
234
|
+
super(args)
|
235
|
+
self.uid = args[:uid]
|
236
|
+
self.details = args[:details]
|
237
|
+
self.time_validity = args[:time_validity]
|
238
|
+
self.source = args[:source]
|
239
|
+
self.target = args[:target]
|
240
|
+
end
|
241
|
+
|
242
|
+
def uid=(uid)
|
243
|
+
if uid.nil?
|
244
|
+
raise ArgumentError, 'uid is mandatory'
|
245
|
+
end
|
246
|
+
@uid = uid
|
247
|
+
end
|
248
|
+
|
249
|
+
def source=(source)
|
250
|
+
if source.nil? or source.id.value != @uid.value
|
251
|
+
raise ArgumentError, 'source is invalid'
|
252
|
+
end
|
253
|
+
@source = source
|
254
|
+
end
|
255
|
+
|
256
|
+
def target=(target)
|
257
|
+
if target.nil?
|
258
|
+
raise ArgumentError, 'taraget is invalid'
|
259
|
+
end
|
260
|
+
@target = target
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
264
|
+
class VersionedParty < Locatable
|
265
|
+
|
266
|
+
end
|
267
|
+
end # of Demographic
|
268
|
+
end # of RM
|
269
|
+
end # of OpenEHR
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# rm::ehr
|
2
|
+
# ehr module
|
3
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109004889781_854011_47Report.html
|
4
|
+
# refs #44
|
5
|
+
include OpenEHR::RM::Common::ChangeControl
|
6
|
+
include OpenEHR::RM::Common::Archetyped
|
7
|
+
include OpenEHR::RM::Security
|
8
|
+
|
9
|
+
module OpenEHR
|
10
|
+
module RM
|
11
|
+
module EHR
|
12
|
+
class EHR
|
13
|
+
attr_reader :system_id, :ehr_id, :time_created, :contributions,
|
14
|
+
:ehr_access, :ehr_status, :compositions, :directory
|
15
|
+
|
16
|
+
def initialize(args = { })
|
17
|
+
self.system_id = args[:system_id]
|
18
|
+
self.ehr_id = args[:ehr_id]
|
19
|
+
self.time_created = args[:time_created]
|
20
|
+
self.contributions = args[:contributions]
|
21
|
+
self.ehr_access = args[:ehr_access]
|
22
|
+
self.ehr_status = args[:ehr_status]
|
23
|
+
self.compositions = args[:compositions]
|
24
|
+
self.directory = args[:directory]
|
25
|
+
end
|
26
|
+
|
27
|
+
def system_id=(system_id)
|
28
|
+
if system_id.nil?
|
29
|
+
raise ArgumentError, 'system_id is mandatory'
|
30
|
+
end
|
31
|
+
@system_id = system_id
|
32
|
+
end
|
33
|
+
|
34
|
+
def ehr_id=(ehr_id)
|
35
|
+
if ehr_id.nil?
|
36
|
+
raise ArgumentError, 'ehr_id is mandatory'
|
37
|
+
end
|
38
|
+
@ehr_id = ehr_id
|
39
|
+
end
|
40
|
+
|
41
|
+
def time_created=(time_created)
|
42
|
+
if time_created.nil?
|
43
|
+
raise ArgumentError, 'time_created is mandatory'
|
44
|
+
end
|
45
|
+
@time_created = time_created
|
46
|
+
end
|
47
|
+
|
48
|
+
def contributions=(contributions)
|
49
|
+
unless contributions.nil?
|
50
|
+
contributions.each do |contrib|
|
51
|
+
unless contrib.type == 'CONTRIBUTION'
|
52
|
+
raise ArgumentError, 'contribution type should be CONTRIBUTION'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
@contributions = contributions
|
56
|
+
else
|
57
|
+
raise ArgumentError, 'contributions are mandatory'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def ehr_access=(ehr_access)
|
62
|
+
if ehr_access.nil? || ehr_access.type != 'VERSIONED_EHR_ACCESS'
|
63
|
+
raise ArgumentError, 'ehr_access is invalid'
|
64
|
+
end
|
65
|
+
@ehr_access = ehr_access
|
66
|
+
end
|
67
|
+
|
68
|
+
def ehr_status=(ehr_status)
|
69
|
+
if ehr_status.nil? || ehr_status.type != 'VERSIONED_EHR_STATUS'
|
70
|
+
raise ArgumentError, 'ehr_status is invalid'
|
71
|
+
end
|
72
|
+
@ehr_status = ehr_status
|
73
|
+
end
|
74
|
+
|
75
|
+
def compositions=(compositions)
|
76
|
+
unless compositions.nil?
|
77
|
+
compositions.each do |compo|
|
78
|
+
unless compo.type == 'VERSIONED_COMPOSITION'
|
79
|
+
raise ArgumentError, 'composition type should be VERSIONED_COMPOSITION'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
@compositions = compositions
|
83
|
+
else
|
84
|
+
raise ArgumentError, 'compositions are mandatory'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def directory=(directory)
|
89
|
+
if !directory.nil? && directory.type != 'VERSIONED_FOLDER'
|
90
|
+
raise ArgumentError, 'invalid directory'
|
91
|
+
end
|
92
|
+
@directory = directory
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class VersionedEHRAccesss < VersionedObject
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
class EHRAccess < Locatable
|
101
|
+
attr_accessor :settings
|
102
|
+
attr_reader :scheme
|
103
|
+
|
104
|
+
def initialize(args = { })
|
105
|
+
super(args)
|
106
|
+
self.settings = args[:settings]
|
107
|
+
self.scheme = args[:scheme]
|
108
|
+
end
|
109
|
+
|
110
|
+
def scheme=(scheme)
|
111
|
+
if scheme.nil? || scheme.empty?
|
112
|
+
raise ArgumentError, 'scheme is mandatory'
|
113
|
+
end
|
114
|
+
@scheme = scheme
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
class VersionedEHRStatus < VersionedObject
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
class EHRStatus < Locatable
|
123
|
+
attr_reader :subject
|
124
|
+
attr_accessor :is_modifiable, :is_queryable, :other_details
|
125
|
+
|
126
|
+
def initialize(args = { })
|
127
|
+
super(args)
|
128
|
+
self.subject = args[:subject]
|
129
|
+
self.is_queryable = args[:is_queryable]
|
130
|
+
self.is_modifiable = args[:is_modifiable]
|
131
|
+
self.other_details = args[:other_details]
|
132
|
+
end
|
133
|
+
|
134
|
+
def subject=(subject)
|
135
|
+
raise ArgumentError, 'subject is mandatory' if subject.nil?
|
136
|
+
@subject = subject
|
137
|
+
end
|
138
|
+
|
139
|
+
def is_queryable?
|
140
|
+
return @is_queryable
|
141
|
+
end
|
142
|
+
|
143
|
+
def is_modifiable?
|
144
|
+
return @is_modifiable
|
145
|
+
end
|
146
|
+
|
147
|
+
def parent=(parent)
|
148
|
+
unless parent.nil?
|
149
|
+
raise ArgumentError, 'parent should be nil'
|
150
|
+
end
|
151
|
+
@parent = parent
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
class VersionedComposition < VersionedObject
|
156
|
+
def is_persistent?
|
157
|
+
return @all_versions.first.data.is_persistent?
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end # of EHR
|
161
|
+
end # of RM
|
162
|
+
end # of OpenEHR
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# rm::integration
|
2
|
+
# integration module
|
3
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_1_76d0249_1140530578205_529440_4046Report.html
|
4
|
+
# refs #42
|
5
|
+
include OpenEHR::RM::Composition::Content
|
6
|
+
|
7
|
+
module OpenEHR
|
8
|
+
module RM
|
9
|
+
module Integration
|
10
|
+
class GenericEntry < ContentItem
|
11
|
+
attr_reader :data
|
12
|
+
|
13
|
+
def initialize(args = { })
|
14
|
+
super(args)
|
15
|
+
self.data = args[:data]
|
16
|
+
end
|
17
|
+
|
18
|
+
def data=(data)
|
19
|
+
if data.nil?
|
20
|
+
raise ArgumentError, 'data are mandatory'
|
21
|
+
end
|
22
|
+
@data = data
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end # of Integration
|
26
|
+
end # of RM
|
27
|
+
end # of OpenEHR
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This module is based on the UML,
|
2
|
+
# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_1_76d0249_1155650882301_836618_5314Report.html
|
3
|
+
# Ticket refs #41
|
4
|
+
module OpenEHR
|
5
|
+
module RM
|
6
|
+
module Security
|
7
|
+
class AccessControlSettings
|
8
|
+
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# Because his module utilise common methods in both rm
|
2
|
+
# and am, I will integrated to /lib/models/assumed_types.rb.
|
3
|
+
# By Shinji KOBAYASHI, 2008-07-20
|
4
|
+
module OpenEhr
|
5
|
+
module RM
|
6
|
+
module Support
|
7
|
+
module AssumedTypes
|
8
|
+
class Interval
|
9
|
+
attr_accessor :lower, :upper
|
10
|
+
# attr_accessor :lower_included, :lower_unbounded
|
11
|
+
# attr_accessor :upper_included, :upper_unbounded
|
12
|
+
def initialize(lower, upper,
|
13
|
+
lower_included = nil, upper_included = nil)
|
14
|
+
if ((lower !=nil) && (upper !=nil)) && lower>upper
|
15
|
+
raise ArgumentError, "upper < lower"
|
16
|
+
end
|
17
|
+
@lower = lower
|
18
|
+
@upper = upper
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class List
|
23
|
+
attr_reader :content
|
24
|
+
|
25
|
+
def initialize(arg)
|
26
|
+
@content = arg
|
27
|
+
end
|
28
|
+
|
29
|
+
def first
|
30
|
+
@content.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def last
|
34
|
+
@content.last
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class TIME_DEFINITIONS
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
class ISO8601_DATE < TIME_DEFINITIONS
|
43
|
+
end
|
44
|
+
|
45
|
+
class ISO8601_TIME < TIME_DEFINITIONS
|
46
|
+
end
|
47
|
+
|
48
|
+
class ISO8601_DURATION < TIME_DEFINITIONS
|
49
|
+
end
|
50
|
+
|
51
|
+
class ISO8601_DATE_TIME < TIME_DEFINITIONS
|
52
|
+
end
|
53
|
+
|
54
|
+
class ISO8601_TIMEZONE < TIME_DEFINITIONS
|
55
|
+
end
|
56
|
+
|
57
|
+
class String
|
58
|
+
attr_reader :content
|
59
|
+
def initialize(arg)
|
60
|
+
@content = arg
|
61
|
+
end
|
62
|
+
|
63
|
+
def as_integer
|
64
|
+
is_integer if is_integer
|
65
|
+
end
|
66
|
+
|
67
|
+
def is_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
def is_integer
|
71
|
+
begin
|
72
|
+
Integer(@content)
|
73
|
+
rescue
|
74
|
+
false
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|