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.
Files changed (253) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +43 -0
  4. data/Guardfile +9 -0
  5. data/History.txt +4 -0
  6. data/Manifest.txt +16 -0
  7. data/PostInstall.txt +9 -0
  8. data/README.rdoc +66 -0
  9. data/Rakefile +49 -0
  10. data/VERSION +1 -0
  11. data/doc/README_rdoc.html +148 -0
  12. data/doc/created.rid +2 -0
  13. data/doc/images/brick.png +0 -0
  14. data/doc/images/brick_link.png +0 -0
  15. data/doc/images/bug.png +0 -0
  16. data/doc/images/bullet_black.png +0 -0
  17. data/doc/images/bullet_toggle_minus.png +0 -0
  18. data/doc/images/bullet_toggle_plus.png +0 -0
  19. data/doc/images/date.png +0 -0
  20. data/doc/images/find.png +0 -0
  21. data/doc/images/loadingAnimation.gif +0 -0
  22. data/doc/images/macFFBgHack.png +0 -0
  23. data/doc/images/package.png +0 -0
  24. data/doc/images/page_green.png +0 -0
  25. data/doc/images/page_white_text.png +0 -0
  26. data/doc/images/page_white_width.png +0 -0
  27. data/doc/images/plugin.png +0 -0
  28. data/doc/images/ruby.png +0 -0
  29. data/doc/images/tag_green.png +0 -0
  30. data/doc/images/wrench.png +0 -0
  31. data/doc/images/wrench_orange.png +0 -0
  32. data/doc/images/zoom.png +0 -0
  33. data/doc/index.html +54 -0
  34. data/doc/js/darkfish.js +116 -0
  35. data/doc/js/jquery.js +32 -0
  36. data/doc/js/quicksearch.js +114 -0
  37. data/doc/js/thickbox-compressed.js +10 -0
  38. data/doc/openehr_terminology.xml +2700 -0
  39. data/doc/rdoc.css +706 -0
  40. data/lib/#open_ehr.rb# +11 -0
  41. data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +21 -0
  42. data/lib/open_ehr/am/archetype/assertion.rb +190 -0
  43. data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +296 -0
  44. data/lib/open_ehr/am/archetype/constraint_model.rb +340 -0
  45. data/lib/open_ehr/am/archetype/ontology.rb +97 -0
  46. data/lib/open_ehr/am/archetype.rb +134 -0
  47. data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +29 -0
  48. data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +19 -0
  49. data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +12 -0
  50. data/lib/open_ehr/am.rb +8 -0
  51. data/lib/open_ehr/assumed_library_types.rb +627 -0
  52. data/lib/open_ehr/parser/xml_perser.rb +13 -0
  53. data/lib/open_ehr/parser.rb +19 -0
  54. data/lib/open_ehr/rm/common/archetyped.rb +182 -0
  55. data/lib/open_ehr/rm/common/change_control.rb +332 -0
  56. data/lib/open_ehr/rm/common/directory.rb +29 -0
  57. data/lib/open_ehr/rm/common/generic.rb +216 -0
  58. data/lib/open_ehr/rm/common/resource.rb +154 -0
  59. data/lib/open_ehr/rm/common.rb +14 -0
  60. data/lib/open_ehr/rm/composition/content/entry.rb +246 -0
  61. data/lib/open_ehr/rm/composition/content/navigation.rb +31 -0
  62. data/lib/open_ehr/rm/composition/content.rb +22 -0
  63. data/lib/open_ehr/rm/composition.rb +103 -0
  64. data/lib/open_ehr/rm/data_structures/history.rb +117 -0
  65. data/lib/open_ehr/rm/data_structures/item_structure/representation.rb +63 -0
  66. data/lib/open_ehr/rm/data_structures/item_structure.rb +216 -0
  67. data/lib/open_ehr/rm/data_structures.rb +25 -0
  68. data/lib/open_ehr/rm/data_types/basic.rb +108 -0
  69. data/lib/open_ehr/rm/data_types/charset.lst +818 -0
  70. data/lib/open_ehr/rm/data_types/charset_extract.rb +24 -0
  71. data/lib/open_ehr/rm/data_types/encapsulated.rb +98 -0
  72. data/lib/open_ehr/rm/data_types/quantity/date_time.rb +229 -0
  73. data/lib/open_ehr/rm/data_types/quantity.rb +403 -0
  74. data/lib/open_ehr/rm/data_types/text.rb +168 -0
  75. data/lib/open_ehr/rm/data_types/time_specification.rb +75 -0
  76. data/lib/open_ehr/rm/data_types/uri.rb +82 -0
  77. data/lib/open_ehr/rm/data_types.rb +14 -0
  78. data/lib/open_ehr/rm/demographic.rb +269 -0
  79. data/lib/open_ehr/rm/ehr.rb +162 -0
  80. data/lib/open_ehr/rm/integration.rb +27 -0
  81. data/lib/open_ehr/rm/security.rb +12 -0
  82. data/lib/open_ehr/rm/support/assumed_types.rb +81 -0
  83. data/lib/open_ehr/rm/support/definition.rb +15 -0
  84. data/lib/open_ehr/rm/support/identification.rb +408 -0
  85. data/lib/open_ehr/rm/support/measurement.rb +17 -0
  86. data/lib/open_ehr/rm/support/terminology.rb +135 -0
  87. data/lib/open_ehr/rm/support.rb +14 -0
  88. data/lib/open_ehr/rm.rb +16 -0
  89. data/lib/open_ehr/serializer.rb +272 -0
  90. data/lib/open_ehr/terminology/open_ehr_terminology.rb +41 -0
  91. data/lib/open_ehr/terminology.rb +7 -0
  92. data/lib/open_ehr/writer.rb +12 -0
  93. data/lib/open_ehr.rb +11 -0
  94. data/spec/lib/open_ehr/am/archetype/archetype_spec.rb +98 -0
  95. data/spec/lib/open_ehr/am/archetype/assertion/assertion_spec.rb +60 -0
  96. data/spec/lib/open_ehr/am/archetype/assertion/assertion_variable_spec.rb +30 -0
  97. data/spec/lib/open_ehr/am/archetype/assertion/expr_binary_operator.rb +40 -0
  98. data/spec/lib/open_ehr/am/archetype/assertion/expr_item_spec.rb +28 -0
  99. data/spec/lib/open_ehr/am/archetype/assertion/expr_leaf_spec.rb +34 -0
  100. data/spec/lib/open_ehr/am/archetype/assertion/expr_operator_spec.rb +25 -0
  101. data/spec/lib/open_ehr/am/archetype/assertion/expr_unary_operator_spec.rb +26 -0
  102. data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +110 -0
  103. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_constraint_spec.rb +56 -0
  104. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_internal_ref_spec.rb +36 -0
  105. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_slot_spec.rb +61 -0
  106. data/spec/lib/open_ehr/am/archetype/constraint_model/c_attribute_spec.rb +59 -0
  107. data/spec/lib/open_ehr/am/archetype/constraint_model/c_complex_object_spec.rb +39 -0
  108. data/spec/lib/open_ehr/am/archetype/constraint_model/c_defined_object_spec.rb +53 -0
  109. data/spec/lib/open_ehr/am/archetype/constraint_model/c_domain_type_spec.rb +25 -0
  110. data/spec/lib/open_ehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +29 -0
  111. data/spec/lib/open_ehr/am/archetype/constraint_model/c_object_spec.rb +61 -0
  112. data/spec/lib/open_ehr/am/archetype/constraint_model/c_primitive_object_spec.rb +33 -0
  113. data/spec/lib/open_ehr/am/archetype/constraint_model/c_reference_object_spec.rb +17 -0
  114. data/spec/lib/open_ehr/am/archetype/constraint_model/c_single_attribute_spec.rb +28 -0
  115. data/spec/lib/open_ehr/am/archetype/constraint_model/cardinality_spec.rb +68 -0
  116. data/spec/lib/open_ehr/am/archetype/constraint_model/constraint_ref_spec.rb +29 -0
  117. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +52 -0
  118. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +80 -0
  119. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +106 -0
  120. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +69 -0
  121. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +62 -0
  122. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +39 -0
  123. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_real_spec.rb +14 -0
  124. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +69 -0
  125. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +79 -0
  126. data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +59 -0
  127. data/spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb +43 -0
  128. data/spec/lib/open_ehr/am/archetype/validity_kind_spec.rb +42 -0
  129. data/spec/lib/open_ehr/assumed_library_types/interval_spec.rb +140 -0
  130. data/spec/lib/open_ehr/assumed_library_types/iso8601_date_spec.rb +236 -0
  131. data/spec/lib/open_ehr/assumed_library_types/iso8601_date_time_spec.rb +47 -0
  132. data/spec/lib/open_ehr/assumed_library_types/iso8601_duration_spec.rb +150 -0
  133. data/spec/lib/open_ehr/assumed_library_types/iso8601_time_spec.rb +234 -0
  134. data/spec/lib/open_ehr/assumed_library_types/iso8601_timezone_spec.rb +57 -0
  135. data/spec/lib/open_ehr/assumed_library_types/time_definitions_spec.rb +136 -0
  136. data/spec/lib/open_ehr/rm/common/archetyped/archetyped_spec.rb +50 -0
  137. data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_details_spec.rb +60 -0
  138. data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_spec.rb +51 -0
  139. data/spec/lib/open_ehr/rm/common/archetyped/link_spec.rb +42 -0
  140. data/spec/lib/open_ehr/rm/common/archetyped/locatable_spec.rb +89 -0
  141. data/spec/lib/open_ehr/rm/common/archetyped/pathable_spec.rb +42 -0
  142. data/spec/lib/open_ehr/rm/common/change_control/contribution_spec.rb +56 -0
  143. data/spec/lib/open_ehr/rm/common/change_control/imported_version_spec.rb +63 -0
  144. data/spec/lib/open_ehr/rm/common/change_control/original_version_spec.rb +71 -0
  145. data/spec/lib/open_ehr/rm/common/change_control/version_spec.rb +92 -0
  146. data/spec/lib/open_ehr/rm/common/change_control/versioned_object_spec.rb +285 -0
  147. data/spec/lib/open_ehr/rm/common/directory/folder_spec.rb +26 -0
  148. data/spec/lib/open_ehr/rm/common/generic/attestation_spec.rb +62 -0
  149. data/spec/lib/open_ehr/rm/common/generic/audit_details_spec.rb +51 -0
  150. data/spec/lib/open_ehr/rm/common/generic/participation_spec.rb +36 -0
  151. data/spec/lib/open_ehr/rm/common/generic/party_identified_spec.rb +64 -0
  152. data/spec/lib/open_ehr/rm/common/generic/party_proxy_spec.rb +18 -0
  153. data/spec/lib/open_ehr/rm/common/generic/party_related_spec.rb +24 -0
  154. data/spec/lib/open_ehr/rm/common/generic/revision_history_item_spec.rb +43 -0
  155. data/spec/lib/open_ehr/rm/common/generic/revision_history_spec.rb +45 -0
  156. data/spec/lib/open_ehr/rm/common/resource/authored_resource_spec.rb +68 -0
  157. data/spec/lib/open_ehr/rm/common/resource/resource_description_item_spec.rb +105 -0
  158. data/spec/lib/open_ehr/rm/common/resource/resource_description_spec.rb +74 -0
  159. data/spec/lib/open_ehr/rm/common/resource/translation_details_spec.rb +35 -0
  160. data/spec/lib/open_ehr/rm/composition/composition_spec.rb +92 -0
  161. data/spec/lib/open_ehr/rm/composition/content/content_item_spec.rb +14 -0
  162. data/spec/lib/open_ehr/rm/composition/content/entry/action_spec.rb +69 -0
  163. data/spec/lib/open_ehr/rm/composition/content/entry/activity_spec.rb +61 -0
  164. data/spec/lib/open_ehr/rm/composition/content/entry/admin_entry_spec.rb +38 -0
  165. data/spec/lib/open_ehr/rm/composition/content/entry/care_entry_spec.rb +37 -0
  166. data/spec/lib/open_ehr/rm/composition/content/entry/entry_spec.rb +88 -0
  167. data/spec/lib/open_ehr/rm/composition/content/entry/evaluation_spec.rb +37 -0
  168. data/spec/lib/open_ehr/rm/composition/content/entry/instruction_details_spec.rb +51 -0
  169. data/spec/lib/open_ehr/rm/composition/content/entry/instruction_spec.rb +62 -0
  170. data/spec/lib/open_ehr/rm/composition/content/entry/ism_transition_spec.rb +46 -0
  171. data/spec/lib/open_ehr/rm/composition/content/entry/observation_spec.rb +45 -0
  172. data/spec/lib/open_ehr/rm/composition/content/navigation/section_spec.rb +32 -0
  173. data/spec/lib/open_ehr/rm/composition/event_context_spec.rb +88 -0
  174. data/spec/lib/open_ehr/rm/data_structures/data_structure_spec.rb +21 -0
  175. data/spec/lib/open_ehr/rm/data_structures/history/event_spec.rb +44 -0
  176. data/spec/lib/open_ehr/rm/data_structures/history/history_spec.rb +67 -0
  177. data/spec/lib/open_ehr/rm/data_structures/history/interval_event_spec.rb +43 -0
  178. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_list_spec.rb +53 -0
  179. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_single_spec.rb +29 -0
  180. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_table_spec.rb +147 -0
  181. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_tree_spec.rb +48 -0
  182. data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/cluster_spec.rb +26 -0
  183. data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/element_spec.rb +22 -0
  184. data/spec/lib/open_ehr/rm/data_types/basic/data_value_spec.rb +17 -0
  185. data/spec/lib/open_ehr/rm/data_types/basic/dv_boolean_spec.rb +29 -0
  186. data/spec/lib/open_ehr/rm/data_types/basic/dv_identifier_spec.rb +108 -0
  187. data/spec/lib/open_ehr/rm/data_types/basic/dv_state_spec.rb +44 -0
  188. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_encapsulated_spec.rb +42 -0
  189. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_multimedia_spec.rb +79 -0
  190. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_parsable_spec.rb +34 -0
  191. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_spec.rb +64 -0
  192. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb +25 -0
  193. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_tempral_spec.rb +24 -0
  194. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +37 -0
  195. data/spec/lib/open_ehr/rm/data_types/quantity/dv_absolute_quantity_spec.rb +35 -0
  196. data/spec/lib/open_ehr/rm/data_types/quantity/dv_amount_spec.rb +105 -0
  197. data/spec/lib/open_ehr/rm/data_types/quantity/dv_count_spec.rb +12 -0
  198. data/spec/lib/open_ehr/rm/data_types/quantity/dv_interval_spec.rb +17 -0
  199. data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordered_spec.rb +60 -0
  200. data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordinal_spec.rb +74 -0
  201. data/spec/lib/open_ehr/rm/data_types/quantity/dv_proportion_spec.rb +162 -0
  202. data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantified_spec.rb +36 -0
  203. data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantity_spec.rb +78 -0
  204. data/spec/lib/open_ehr/rm/data_types/quantity/proportion_kind_spec.rb +24 -0
  205. data/spec/lib/open_ehr/rm/data_types/quantity/reference_range_spec.rb +43 -0
  206. data/spec/lib/open_ehr/rm/data_types/text/code_phrase_spec.rb +23 -0
  207. data/spec/lib/open_ehr/rm/data_types/text/dv_paragraph_spec.rb +13 -0
  208. data/spec/lib/open_ehr/rm/data_types/text/dv_text_spec.rb +57 -0
  209. data/spec/lib/open_ehr/rm/data_types/text/term_mapping_spec.rb +59 -0
  210. data/spec/lib/open_ehr/rm/data_types/uri/dv_ehr_uri_spec.rb +21 -0
  211. data/spec/lib/open_ehr/rm/data_types/uri/dv_uri_spec.rb +36 -0
  212. data/spec/lib/open_ehr/rm/demographic/actor_spec.rb +79 -0
  213. data/spec/lib/open_ehr/rm/demographic/address_spec.rb +33 -0
  214. data/spec/lib/open_ehr/rm/demographic/capability_spec.rb +37 -0
  215. data/spec/lib/open_ehr/rm/demographic/contact_spec.rb +45 -0
  216. data/spec/lib/open_ehr/rm/demographic/party_identity_spec.rb +32 -0
  217. data/spec/lib/open_ehr/rm/demographic/party_relationship_spec.rb +84 -0
  218. data/spec/lib/open_ehr/rm/demographic/party_spec.rb +133 -0
  219. data/spec/lib/open_ehr/rm/demographic/role_spec.rb +58 -0
  220. data/spec/lib/open_ehr/rm/ehr/ehr_access_spec.rb +33 -0
  221. data/spec/lib/open_ehr/rm/ehr/ehr_spec.rb +139 -0
  222. data/spec/lib/open_ehr/rm/ehr/ehr_status_spec.rb +52 -0
  223. data/spec/lib/open_ehr/rm/ehr/versioned_composition_spec.rb +33 -0
  224. data/spec/lib/open_ehr/rm/integration/generic_entry_spec.rb +31 -0
  225. data/spec/lib/open_ehr/rm/support/identification/access_group_ref_spec.rb +19 -0
  226. data/spec/lib/open_ehr/rm/support/identification/archetype_id_spec.rb +152 -0
  227. data/spec/lib/open_ehr/rm/support/identification/generic_id_spec.rb +33 -0
  228. data/spec/lib/open_ehr/rm/support/identification/hier_object_id_spec.rb +12 -0
  229. data/spec/lib/open_ehr/rm/support/identification/internet_id_spec.rb +12 -0
  230. data/spec/lib/open_ehr/rm/support/identification/iso_oid_spec.rb +12 -0
  231. data/spec/lib/open_ehr/rm/support/identification/locatable_ref_spec.rb +34 -0
  232. data/spec/lib/open_ehr/rm/support/identification/object_id_spec.rb +24 -0
  233. data/spec/lib/open_ehr/rm/support/identification/object_ref_spec.rb +33 -0
  234. data/spec/lib/open_ehr/rm/support/identification/object_version_id_spec.rb +60 -0
  235. data/spec/lib/open_ehr/rm/support/identification/party_ref_spec.rb +29 -0
  236. data/spec/lib/open_ehr/rm/support/identification/template_id_spec.rb +12 -0
  237. data/spec/lib/open_ehr/rm/support/identification/terminology_id_spec.rb +33 -0
  238. data/spec/lib/open_ehr/rm/support/identification/uid_based_id_spec.rb +50 -0
  239. data/spec/lib/open_ehr/rm/support/identification/uid_spec.rb +29 -0
  240. data/spec/lib/open_ehr/rm/support/identification/version_tree_id_spec.rb +104 -0
  241. data/spec/lib/open_ehr/rm/support/measurement_service_spec.rb +7 -0
  242. data/spec/lib/open_ehr/rm/support/terminology_service_spec.rb +24 -0
  243. data/spec/lib/open_ehr/serializer/adl-test-entry.most_minimal.test.adl +20 -0
  244. data/spec/lib/open_ehr/serializer/adl_serializer_spec.rb +47 -0
  245. data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.adl +38 -0
  246. data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.xml +58 -0
  247. data/spec/lib/open_ehr/serializer/sample_archetype_spec.rb +44 -0
  248. data/spec/lib/open_ehr/serializer/xml_serializer_spec.rb +49 -0
  249. data/spec/lib/open_ehr/terminology/open_ehr_terminology_spec.rb +40 -0
  250. data/spec/rcov.opts +1 -0
  251. data/spec/spec.opts +5 -0
  252. data/spec/spec_helper.rb +54 -0
  253. 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