openehr 1.1.0

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 (384) hide show
  1. data/.document +5 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +3 -0
  4. data/Gemfile +23 -0
  5. data/Guardfile +12 -0
  6. data/History.txt +36 -0
  7. data/PostInstall.txt +9 -0
  8. data/README.rdoc +82 -0
  9. data/Rakefile +44 -0
  10. data/VERSION +1 -0
  11. data/doc/openehr_terminology.xml +2700 -0
  12. data/lib/openehr.rb +11 -0
  13. data/lib/openehr/am.rb +8 -0
  14. data/lib/openehr/am/archetype.rb +133 -0
  15. data/lib/openehr/am/archetype/assertion.rb +190 -0
  16. data/lib/openehr/am/archetype/constraint_model.rb +328 -0
  17. data/lib/openehr/am/archetype/constraint_model/primitive.rb +327 -0
  18. data/lib/openehr/am/archetype/ontology.rb +126 -0
  19. data/lib/openehr/am/openehr_profile.rb +9 -0
  20. data/lib/openehr/am/openehr_profile/data_types.rb +13 -0
  21. data/lib/openehr/am/openehr_profile/data_types/basic.rb +114 -0
  22. data/lib/openehr/am/openehr_profile/data_types/quantity.rb +67 -0
  23. data/lib/openehr/am/openehr_profile/data_types/text.rb +22 -0
  24. data/lib/openehr/assumed_library_types.rb +691 -0
  25. data/lib/openehr/parser.rb +23 -0
  26. data/lib/openehr/parser/adl.rb +57 -0
  27. data/lib/openehr/parser/adl_grammar.tt +245 -0
  28. data/lib/openehr/parser/adl_parser.rb +52 -0
  29. data/lib/openehr/parser/cadl_grammar.tt +1527 -0
  30. data/lib/openehr/parser/cadl_node.rb +44 -0
  31. data/lib/openehr/parser/dadl.rb +13 -0
  32. data/lib/openehr/parser/dadl_grammar.tt +358 -0
  33. data/lib/openehr/parser/exception.rb +68 -0
  34. data/lib/openehr/parser/shared_token_grammar.tt +1229 -0
  35. data/lib/openehr/parser/validator.rb +19 -0
  36. data/lib/openehr/parser/xml_perser.rb +13 -0
  37. data/lib/openehr/rm.rb +15 -0
  38. data/lib/openehr/rm/common.rb +14 -0
  39. data/lib/openehr/rm/common/archetyped.rb +182 -0
  40. data/lib/openehr/rm/common/change_control.rb +332 -0
  41. data/lib/openehr/rm/common/directory.rb +29 -0
  42. data/lib/openehr/rm/common/generic.rb +216 -0
  43. data/lib/openehr/rm/common/resource.rb +154 -0
  44. data/lib/openehr/rm/composition.rb +103 -0
  45. data/lib/openehr/rm/composition/content.rb +22 -0
  46. data/lib/openehr/rm/composition/content/entry.rb +253 -0
  47. data/lib/openehr/rm/composition/content/navigation.rb +31 -0
  48. data/lib/openehr/rm/data_structures.rb +25 -0
  49. data/lib/openehr/rm/data_structures/history.rb +117 -0
  50. data/lib/openehr/rm/data_structures/item_structure.rb +218 -0
  51. data/lib/openehr/rm/data_structures/item_structure/representation.rb +63 -0
  52. data/lib/openehr/rm/data_types.rb +14 -0
  53. data/lib/openehr/rm/data_types/basic.rb +108 -0
  54. data/lib/openehr/rm/data_types/charset.lst +818 -0
  55. data/lib/openehr/rm/data_types/charset_extract.rb +24 -0
  56. data/lib/openehr/rm/data_types/encapsulated.rb +98 -0
  57. data/lib/openehr/rm/data_types/quantity.rb +402 -0
  58. data/lib/openehr/rm/data_types/quantity/date_time.rb +256 -0
  59. data/lib/openehr/rm/data_types/text.rb +169 -0
  60. data/lib/openehr/rm/data_types/time_specification.rb +75 -0
  61. data/lib/openehr/rm/data_types/uri.rb +83 -0
  62. data/lib/openehr/rm/demographic.rb +269 -0
  63. data/lib/openehr/rm/ehr.rb +162 -0
  64. data/lib/openehr/rm/integration.rb +27 -0
  65. data/lib/openehr/rm/security.rb +12 -0
  66. data/lib/openehr/rm/support.rb +14 -0
  67. data/lib/openehr/rm/support/definition.rb +15 -0
  68. data/lib/openehr/rm/support/identification.rb +412 -0
  69. data/lib/openehr/rm/support/measurement.rb +17 -0
  70. data/lib/openehr/rm/support/terminology.rb +135 -0
  71. data/lib/openehr/serializer.rb +272 -0
  72. data/lib/openehr/terminology.rb +7 -0
  73. data/lib/openehr/terminology/open_ehr_terminology.rb +41 -0
  74. data/lib/openehr/writer.rb +12 -0
  75. data/openehr.gemspec +472 -0
  76. data/spec/lib/openehr/am/archetype/archetype_spec.rb +103 -0
  77. data/spec/lib/openehr/am/archetype/assertion/assertion_spec.rb +60 -0
  78. data/spec/lib/openehr/am/archetype/assertion/assertion_variable_spec.rb +30 -0
  79. data/spec/lib/openehr/am/archetype/assertion/expr_binary_operator.rb +40 -0
  80. data/spec/lib/openehr/am/archetype/assertion/expr_item_spec.rb +28 -0
  81. data/spec/lib/openehr/am/archetype/assertion/expr_leaf_spec.rb +34 -0
  82. data/spec/lib/openehr/am/archetype/assertion/expr_operator_spec.rb +25 -0
  83. data/spec/lib/openehr/am/archetype/assertion/expr_unary_operator_spec.rb +26 -0
  84. data/spec/lib/openehr/am/archetype/assertion/operator_kind_spec.rb +114 -0
  85. data/spec/lib/openehr/am/archetype/constraint_model/archetype_constraint_spec.rb +56 -0
  86. data/spec/lib/openehr/am/archetype/constraint_model/archetype_internal_ref_spec.rb +36 -0
  87. data/spec/lib/openehr/am/archetype/constraint_model/archetype_slot_spec.rb +61 -0
  88. data/spec/lib/openehr/am/archetype/constraint_model/c_attribute_spec.rb +59 -0
  89. data/spec/lib/openehr/am/archetype/constraint_model/c_complex_object_spec.rb +39 -0
  90. data/spec/lib/openehr/am/archetype/constraint_model/c_defined_object_spec.rb +53 -0
  91. data/spec/lib/openehr/am/archetype/constraint_model/c_domain_type_spec.rb +25 -0
  92. data/spec/lib/openehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +23 -0
  93. data/spec/lib/openehr/am/archetype/constraint_model/c_object_spec.rb +61 -0
  94. data/spec/lib/openehr/am/archetype/constraint_model/c_primitive_object_spec.rb +33 -0
  95. data/spec/lib/openehr/am/archetype/constraint_model/c_reference_object_spec.rb +17 -0
  96. data/spec/lib/openehr/am/archetype/constraint_model/c_single_attribute_spec.rb +22 -0
  97. data/spec/lib/openehr/am/archetype/constraint_model/cardinality_spec.rb +68 -0
  98. data/spec/lib/openehr/am/archetype/constraint_model/constraint_ref_spec.rb +29 -0
  99. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +57 -0
  100. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_date_spec.rb +52 -0
  101. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +136 -0
  102. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +41 -0
  103. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +67 -0
  104. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +41 -0
  105. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_real_spec.rb +19 -0
  106. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_string_spec.rb +73 -0
  107. data/spec/lib/openehr/am/archetype/constraint_model/primitive/c_time_spec.rb +104 -0
  108. data/spec/lib/openehr/am/archetype/ontology/archetype_ontology_spec.rb +97 -0
  109. data/spec/lib/openehr/am/archetype/ontology/archetype_term_spec.rb +43 -0
  110. data/spec/lib/openehr/am/archetype/validity_kind_spec.rb +42 -0
  111. data/spec/lib/openehr/am/openehr_profile/data_types/basic/c_dv_state_spec.rb +34 -0
  112. data/spec/lib/openehr/am/openehr_profile/data_types/basic/non_terminal_state_spec.rb +36 -0
  113. data/spec/lib/openehr/am/openehr_profile/data_types/basic/state_machine_spec.rb +34 -0
  114. data/spec/lib/openehr/am/openehr_profile/data_types/basic/state_spec.rb +26 -0
  115. data/spec/lib/openehr/am/openehr_profile/data_types/basic/terminal_state_spec.rb +18 -0
  116. data/spec/lib/openehr/am/openehr_profile/data_types/basic/transition_spec.rb +62 -0
  117. data/spec/lib/openehr/am/openehr_profile/data_types/quantity/c_dv_ordinal_spec.rb +41 -0
  118. data/spec/lib/openehr/am/openehr_profile/data_types/quantity/c_dv_quantity_spec.rb +50 -0
  119. data/spec/lib/openehr/am/openehr_profile/data_types/quantity/c_quantity_item_spec.rb +46 -0
  120. data/spec/lib/openehr/am/openehr_profile/data_types/text/c_code_phrase_spec.rb +34 -0
  121. data/spec/lib/openehr/assumed_library_types/interval_spec.rb +145 -0
  122. data/spec/lib/openehr/assumed_library_types/iso8601_date_spec.rb +236 -0
  123. data/spec/lib/openehr/assumed_library_types/iso8601_date_time_spec.rb +47 -0
  124. data/spec/lib/openehr/assumed_library_types/iso8601_duration_spec.rb +150 -0
  125. data/spec/lib/openehr/assumed_library_types/iso8601_time_spec.rb +234 -0
  126. data/spec/lib/openehr/assumed_library_types/iso8601_timezone_spec.rb +57 -0
  127. data/spec/lib/openehr/assumed_library_types/time_definitions_spec.rb +136 -0
  128. data/spec/lib/openehr/assumed_library_types/timezone_spec.rb +42 -0
  129. data/spec/lib/openehr/parser/adl14/adl-test-ENTRY.assumed_types.v1.adl +88 -0
  130. data/spec/lib/openehr/parser/adl14/adl-test-ENTRY.basic_types.v1.adl +143 -0
  131. data/spec/lib/openehr/parser/adl14/adl-test-ENTRY.basic_types_fail.v1.adl +50 -0
  132. data/spec/lib/openehr/parser/adl14/adl-test-ENTRY.most_minimal.v1.adl +27 -0
  133. data/spec/lib/openehr/parser/adl14/adl-test-ENTRY.structure_test1.v1.adl +46 -0
  134. data/spec/lib/openehr/parser/adl14/adl-test-SOME_TYPE.generic_type_basic.draft.adl +56 -0
  135. data/spec/lib/openehr/parser/adl14/adl-test-SOME_TYPE.generic_type_use_node.draft.adl +63 -0
  136. data/spec/lib/openehr/parser/adl14/adl-test-car.paths.test.adl +80 -0
  137. data/spec/lib/openehr/parser/adl14/adl-test-car.use_node.test.adl +87 -0
  138. data/spec/lib/openehr/parser/adl14/adl-test-composition.dv_coded_text.test.adl +29 -0
  139. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_bindings.test.adl +47 -0
  140. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_desc_missing_purpose.test.adl +45 -0
  141. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_description.test.adl +61 -0
  142. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_description2.test.adl +45 -0
  143. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_identification.test.adl +26 -0
  144. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_internal_ref.test.adl +36 -0
  145. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_internal_ref2.test.adl +36 -0
  146. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_language.test.adl +47 -0
  147. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_language_no_accreditation.test.adl +38 -0
  148. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_language_order_of_translation_details.test.adl +40 -0
  149. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_ontology.test.adl +25 -0
  150. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_slot.test.adl +40 -0
  151. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_slot.test2.adl +37 -0
  152. data/spec/lib/openehr/parser/adl14/adl-test-entry.archetype_uncommonkeys.test.adl +29 -0
  153. data/spec/lib/openehr/parser/adl14/adl-test-entry.basic_types.test.adl +272 -0
  154. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_code_phrase.test.adl +77 -0
  155. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_ordinal.test.adl +66 -0
  156. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_empty.test.adl +46 -0
  157. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_full.test.adl +64 -0
  158. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_full2.test.adl +64 -0
  159. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_full3.test.adl +64 -0
  160. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_item_units_only.test.adl +55 -0
  161. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_list.test.adl +58 -0
  162. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_property.test.adl +47 -0
  163. data/spec/lib/openehr/parser/adl14/adl-test-entry.c_dv_quantity_reversed.test.adl +59 -0
  164. data/spec/lib/openehr/parser/adl14/adl-test-entry.constraint_binding.test.adl +37 -0
  165. data/spec/lib/openehr/parser/adl14/adl-test-entry.constraint_ref.test.adl +43 -0
  166. data/spec/lib/openehr/parser/adl14/adl-test-entry.datetime.test.adl +183 -0
  167. data/spec/lib/openehr/parser/adl14/adl-test-entry.domain_types.test.adl +97 -0
  168. data/spec/lib/openehr/parser/adl14/adl-test-entry.durations.test.adl +109 -0
  169. data/spec/lib/openehr/parser/adl14/adl-test-entry.empty_other_contributors.test.adl +42 -0
  170. data/spec/lib/openehr/parser/adl14/adl-test-entry.missing_language.test.adl +23 -0
  171. data/spec/lib/openehr/parser/adl14/adl-test-entry.mixed_node_types.draft.adl +61 -0
  172. data/spec/lib/openehr/parser/adl14/adl-test-entry.most_minimal.test.adl +23 -0
  173. data/spec/lib/openehr/parser/adl14/adl-test-entry.multi_language.test.adl +52 -0
  174. data/spec/lib/openehr/parser/adl14/adl-test-entry.special_string.test.adl +88 -0
  175. data/spec/lib/openehr/parser/adl14/adl-test-entry.structure_test1.test.adl +45 -0
  176. data/spec/lib/openehr/parser/adl14/adl-test-entry.structure_test2.test.adl +45 -0
  177. data/spec/lib/openehr/parser/adl14/adl-test-entry.term_binding.test.adl +37 -0
  178. data/spec/lib/openehr/parser/adl14/adl-test-entry.term_binding2.test.adl +32 -0
  179. data/spec/lib/openehr/parser/adl14/adl-test-entry.testtranslations.test.adl +83 -0
  180. data/spec/lib/openehr/parser/adl14/adl-test-entry.translations_author_language.test.adl +34 -0
  181. data/spec/lib/openehr/parser/adl14/adl-test-entry.translations_language_author.test.adl +34 -0
  182. data/spec/lib/openehr/parser/adl14/adl-test-entry.unicode_BOM_support.test.adl +41 -0
  183. data/spec/lib/openehr/parser/adl14/adl-test-entry.unicode_support.test.adl +41 -0
  184. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ACTION.imaging.v1.adl +275 -0
  185. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ACTION.referral.v1.adl +351 -0
  186. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.auscultation-chest.v1.adl +765 -0
  187. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.auscultation.v1.adl +48 -0
  188. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.dimensions-circumference.v1.adl +134 -0
  189. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.dimensions.v1.adl +241 -0
  190. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-abdomen.v1.adl +321 -0
  191. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-chest.v1.adl +379 -0
  192. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-fetus.v1.adl +577 -0
  193. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-generic-joint.v1.adl +146 -0
  194. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-generic-lymphnode.v1.adl +176 -0
  195. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-generic-mass.v1.adl +221 -0
  196. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-generic.v1.adl +139 -0
  197. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl +116 -0
  198. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-uterine_cervix.v1.adl +420 -0
  199. data/spec/lib/openehr/parser/adl14/openEHR-EHR-CLUSTER.exam-uterus.v1.adl +293 -0
  200. data/spec/lib/openehr/parser/adl14/openEHR-EHR-COMPOSITION.discharge.v1draft.adl +53 -0
  201. data/spec/lib/openehr/parser/adl14/openEHR-EHR-COMPOSITION.encounter.v1draft.adl +45 -0
  202. data/spec/lib/openehr/parser/adl14/openEHR-EHR-EVALUATION.adverse.v1.adl +411 -0
  203. data/spec/lib/openehr/parser/adl14/openEHR-EHR-EVALUATION.columna_vertebral.v1.adl +85 -0
  204. data/spec/lib/openehr/parser/adl14/openEHR-EHR-INSTRUCTION.medication.v1.adl +88 -0
  205. data/spec/lib/openehr/parser/adl14/openEHR-EHR-INSTRUCTION.referral.v1.adl +84 -0
  206. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl +492 -0
  207. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.follow_up.v1draft.adl +94 -0
  208. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.imaging.v1.adl +127 -0
  209. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.medication-formulation.v1.adl +457 -0
  210. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.medication.v1.adl +869 -0
  211. data/spec/lib/openehr/parser/adl14/openEHR-EHR-ITEM_TREE.referral.v1.adl +494 -0
  212. data/spec/lib/openehr/parser/adl14/openEHR-EHR-OBSERVATION.apgar.v1.adl +545 -0
  213. data/spec/lib/openehr/parser/adl14/openEHR-EHR-OBSERVATION.blood_pressure.v1.adl +673 -0
  214. data/spec/lib/openehr/parser/adl14/openEHR-EHR-OBSERVATION.body_mass_index.v1.adl +166 -0
  215. data/spec/lib/openehr/parser/adl14/openEHR-EHR-OBSERVATION.lab_test.v1.adl +376 -0
  216. data/spec/lib/openehr/parser/adl14/openEHR-EHR-OBSERVATION.testassumedvalue.v1.adl +99 -0
  217. data/spec/lib/openehr/parser/adl14/openEHR-EHR-SECTION.findings.v1.adl +47 -0
  218. data/spec/lib/openehr/parser/adl14/openEHR-EHR-SECTION.reason_for_encounter.v1.adl +51 -0
  219. data/spec/lib/openehr/parser/adl14/openEHR-EHR-SECTION.summary.v1.adl +52 -0
  220. data/spec/lib/openehr/parser/adl14/openEHR-EHR-SECTION.vital_signs.v1.adl +54 -0
  221. data/spec/lib/openehr/parser/adl_archetype_internal_ref2_spec.rb +42 -0
  222. data/spec/lib/openehr/parser/adl_archetype_internal_ref_spec.rb +125 -0
  223. data/spec/lib/openehr/parser/adl_archetype_internal_ref_with_generics_spec.rb +258 -0
  224. data/spec/lib/openehr/parser/adl_archetype_ontology_binding_spec.rb +98 -0
  225. data/spec/lib/openehr/parser/adl_archetype_ontology_spec.rb +42 -0
  226. data/spec/lib/openehr/parser/adl_archetype_slot_cluster_spec.rb +101 -0
  227. data/spec/lib/openehr/parser/adl_archetype_slot_spec.rb +193 -0
  228. data/spec/lib/openehr/parser/adl_archetype_uncommon_term_keys_spec.rb +25 -0
  229. data/spec/lib/openehr/parser/adl_description_spec.rb +164 -0
  230. data/spec/lib/openehr/parser/adl_identification_spec.rb +18 -0
  231. data/spec/lib/openehr/parser/adl_language_no_accreditation_spec.rb +66 -0
  232. data/spec/lib/openehr/parser/adl_language_order_spec.rb +68 -0
  233. data/spec/lib/openehr/parser/adl_language_spec.rb +119 -0
  234. data/spec/lib/openehr/parser/adl_language_translation_author_language_spec.rb +50 -0
  235. data/spec/lib/openehr/parser/adl_language_translation_language_author_spec.rb +46 -0
  236. data/spec/lib/openehr/parser/adl_parser_spec.rb +347 -0
  237. data/spec/lib/openehr/parser/adl_path_spec.rb +176 -0
  238. data/spec/lib/openehr/parser/base_spec.rb +19 -0
  239. data/spec/lib/openehr/parser/basic_generic_type_spec.rb +18 -0
  240. data/spec/lib/openehr/parser/basic_type_spec.rb +2922 -0
  241. data/spec/lib/openehr/parser/c_dv_quantity_any_allowed_spec.rb +34 -0
  242. data/spec/lib/openehr/parser/c_dv_quantity_shared_example_for_lacked_items_spec.rb +36 -0
  243. data/spec/lib/openehr/parser/c_dv_quantity_shared_example_spec.rb +146 -0
  244. data/spec/lib/openehr/parser/cdv_ordinal_parse_spec.rb +231 -0
  245. data/spec/lib/openehr/parser/code_phrase_spec.rb +96 -0
  246. data/spec/lib/openehr/parser/constraint_binding_spec.rb +26 -0
  247. data/spec/lib/openehr/parser/constraint_ref_spec.rb +32 -0
  248. data/spec/lib/openehr/parser/date_time_spec.rb +1953 -0
  249. data/spec/lib/openehr/parser/duration_spec.rb +475 -0
  250. data/spec/lib/openehr/parser/dv_coded_text_parse_spec.rb +27 -0
  251. data/spec/lib/openehr/parser/empty_other_contributors_spec.rb +19 -0
  252. data/spec/lib/openehr/parser/lab_test_parser_spec.rb +14 -0
  253. data/spec/lib/openehr/parser/missing_language_spec.rb +20 -0
  254. data/spec/lib/openehr/parser/missing_purpose_spec.rb +23 -0
  255. data/spec/lib/openehr/parser/mixed_node_types_spec.rb +16 -0
  256. data/spec/lib/openehr/parser/most_minimal_adl_spec.rb +19 -0
  257. data/spec/lib/openehr/parser/multi_language_spec.rb +58 -0
  258. data/spec/lib/openehr/parser/parser_spec_helper.rb +7 -0
  259. data/spec/lib/openehr/parser/path_based_terminology_binding_spec.rb +30 -0
  260. data/spec/lib/openehr/parser/special_string_spec.rb +20 -0
  261. data/spec/lib/openehr/parser/structure_comment_spec.rb +21 -0
  262. data/spec/lib/openehr/parser/structure_nested_comments_spec.rb +22 -0
  263. data/spec/lib/openehr/parser/structure_spec.rb +202 -0
  264. data/spec/lib/openehr/parser/term_binding_spec.rb +54 -0
  265. data/spec/lib/openehr/parser/unicode_bom_spec.rb +17 -0
  266. data/spec/lib/openehr/parser/unicode_support_spec.rb +46 -0
  267. data/spec/lib/openehr/rm/common/archetyped/archetyped_spec.rb +50 -0
  268. data/spec/lib/openehr/rm/common/archetyped/feeder_audit_details_spec.rb +60 -0
  269. data/spec/lib/openehr/rm/common/archetyped/feeder_audit_spec.rb +51 -0
  270. data/spec/lib/openehr/rm/common/archetyped/link_spec.rb +42 -0
  271. data/spec/lib/openehr/rm/common/archetyped/locatable_spec.rb +89 -0
  272. data/spec/lib/openehr/rm/common/archetyped/pathable_spec.rb +42 -0
  273. data/spec/lib/openehr/rm/common/change_control/contribution_spec.rb +56 -0
  274. data/spec/lib/openehr/rm/common/change_control/imported_version_spec.rb +62 -0
  275. data/spec/lib/openehr/rm/common/change_control/original_version_spec.rb +71 -0
  276. data/spec/lib/openehr/rm/common/change_control/version_spec.rb +91 -0
  277. data/spec/lib/openehr/rm/common/change_control/versioned_object_spec.rb +284 -0
  278. data/spec/lib/openehr/rm/common/directory/folder_spec.rb +26 -0
  279. data/spec/lib/openehr/rm/common/generic/attestation_spec.rb +62 -0
  280. data/spec/lib/openehr/rm/common/generic/audit_details_spec.rb +51 -0
  281. data/spec/lib/openehr/rm/common/generic/participation_spec.rb +36 -0
  282. data/spec/lib/openehr/rm/common/generic/party_identified_spec.rb +64 -0
  283. data/spec/lib/openehr/rm/common/generic/party_proxy_spec.rb +18 -0
  284. data/spec/lib/openehr/rm/common/generic/party_related_spec.rb +24 -0
  285. data/spec/lib/openehr/rm/common/generic/revision_history_item_spec.rb +43 -0
  286. data/spec/lib/openehr/rm/common/generic/revision_history_spec.rb +45 -0
  287. data/spec/lib/openehr/rm/common/resource/authored_resource_spec.rb +68 -0
  288. data/spec/lib/openehr/rm/common/resource/resource_description_item_spec.rb +105 -0
  289. data/spec/lib/openehr/rm/common/resource/resource_description_spec.rb +74 -0
  290. data/spec/lib/openehr/rm/common/resource/translation_details_spec.rb +35 -0
  291. data/spec/lib/openehr/rm/composition/composition_spec.rb +92 -0
  292. data/spec/lib/openehr/rm/composition/content/content_item_spec.rb +14 -0
  293. data/spec/lib/openehr/rm/composition/content/entry/action_spec.rb +69 -0
  294. data/spec/lib/openehr/rm/composition/content/entry/activity_spec.rb +61 -0
  295. data/spec/lib/openehr/rm/composition/content/entry/admin_entry_spec.rb +38 -0
  296. data/spec/lib/openehr/rm/composition/content/entry/care_entry_spec.rb +37 -0
  297. data/spec/lib/openehr/rm/composition/content/entry/entry_spec.rb +98 -0
  298. data/spec/lib/openehr/rm/composition/content/entry/evaluation_spec.rb +37 -0
  299. data/spec/lib/openehr/rm/composition/content/entry/instruction_details_spec.rb +51 -0
  300. data/spec/lib/openehr/rm/composition/content/entry/instruction_spec.rb +62 -0
  301. data/spec/lib/openehr/rm/composition/content/entry/ism_transition_spec.rb +46 -0
  302. data/spec/lib/openehr/rm/composition/content/entry/observation_spec.rb +45 -0
  303. data/spec/lib/openehr/rm/composition/content/navigation/section_spec.rb +32 -0
  304. data/spec/lib/openehr/rm/composition/event_context_spec.rb +88 -0
  305. data/spec/lib/openehr/rm/data_structures/data_structure_spec.rb +21 -0
  306. data/spec/lib/openehr/rm/data_structures/history/event_spec.rb +44 -0
  307. data/spec/lib/openehr/rm/data_structures/history/history_spec.rb +67 -0
  308. data/spec/lib/openehr/rm/data_structures/history/interval_event_spec.rb +43 -0
  309. data/spec/lib/openehr/rm/data_structures/item_structure/item_list_spec.rb +53 -0
  310. data/spec/lib/openehr/rm/data_structures/item_structure/item_single_spec.rb +29 -0
  311. data/spec/lib/openehr/rm/data_structures/item_structure/item_table_spec.rb +147 -0
  312. data/spec/lib/openehr/rm/data_structures/item_structure/item_tree_spec.rb +48 -0
  313. data/spec/lib/openehr/rm/data_structures/item_structure/representation/cluster_spec.rb +26 -0
  314. data/spec/lib/openehr/rm/data_structures/item_structure/representation/element_spec.rb +22 -0
  315. data/spec/lib/openehr/rm/data_types/basic/data_value_spec.rb +17 -0
  316. data/spec/lib/openehr/rm/data_types/basic/dv_boolean_spec.rb +29 -0
  317. data/spec/lib/openehr/rm/data_types/basic/dv_identifier_spec.rb +108 -0
  318. data/spec/lib/openehr/rm/data_types/basic/dv_state_spec.rb +44 -0
  319. data/spec/lib/openehr/rm/data_types/encapsulated/dv_encapsulated_spec.rb +42 -0
  320. data/spec/lib/openehr/rm/data_types/encapsulated/dv_multimedia_spec.rb +79 -0
  321. data/spec/lib/openehr/rm/data_types/encapsulated/dv_parsable_spec.rb +34 -0
  322. data/spec/lib/openehr/rm/data_types/quantity/date_time/dv_date_spec.rb +64 -0
  323. data/spec/lib/openehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb +26 -0
  324. data/spec/lib/openehr/rm/data_types/quantity/date_time/dv_duration_spec.rb +44 -0
  325. data/spec/lib/openehr/rm/data_types/quantity/date_time/dv_temporal_spec.rb +25 -0
  326. data/spec/lib/openehr/rm/data_types/quantity/date_time/dv_time_spec.rb +41 -0
  327. data/spec/lib/openehr/rm/data_types/quantity/dv_absolute_quantity_spec.rb +35 -0
  328. data/spec/lib/openehr/rm/data_types/quantity/dv_amount_spec.rb +105 -0
  329. data/spec/lib/openehr/rm/data_types/quantity/dv_count_spec.rb +12 -0
  330. data/spec/lib/openehr/rm/data_types/quantity/dv_interval_spec.rb +17 -0
  331. data/spec/lib/openehr/rm/data_types/quantity/dv_ordered_spec.rb +60 -0
  332. data/spec/lib/openehr/rm/data_types/quantity/dv_ordinal_spec.rb +74 -0
  333. data/spec/lib/openehr/rm/data_types/quantity/dv_proportion_spec.rb +162 -0
  334. data/spec/lib/openehr/rm/data_types/quantity/dv_quantified_spec.rb +36 -0
  335. data/spec/lib/openehr/rm/data_types/quantity/dv_quantity_spec.rb +78 -0
  336. data/spec/lib/openehr/rm/data_types/quantity/proportion_kind_spec.rb +24 -0
  337. data/spec/lib/openehr/rm/data_types/quantity/reference_range_spec.rb +43 -0
  338. data/spec/lib/openehr/rm/data_types/text/code_phrase_spec.rb +23 -0
  339. data/spec/lib/openehr/rm/data_types/text/dv_paragraph_spec.rb +13 -0
  340. data/spec/lib/openehr/rm/data_types/text/dv_text_spec.rb +79 -0
  341. data/spec/lib/openehr/rm/data_types/text/term_mapping_spec.rb +59 -0
  342. data/spec/lib/openehr/rm/data_types/uri/dv_ehr_uri_spec.rb +21 -0
  343. data/spec/lib/openehr/rm/data_types/uri/dv_uri_spec.rb +36 -0
  344. data/spec/lib/openehr/rm/demographic/actor_spec.rb +79 -0
  345. data/spec/lib/openehr/rm/demographic/address_spec.rb +33 -0
  346. data/spec/lib/openehr/rm/demographic/capability_spec.rb +37 -0
  347. data/spec/lib/openehr/rm/demographic/contact_spec.rb +45 -0
  348. data/spec/lib/openehr/rm/demographic/party_identity_spec.rb +32 -0
  349. data/spec/lib/openehr/rm/demographic/party_relationship_spec.rb +84 -0
  350. data/spec/lib/openehr/rm/demographic/party_spec.rb +131 -0
  351. data/spec/lib/openehr/rm/demographic/role_spec.rb +58 -0
  352. data/spec/lib/openehr/rm/ehr/ehr_access_spec.rb +33 -0
  353. data/spec/lib/openehr/rm/ehr/ehr_spec.rb +139 -0
  354. data/spec/lib/openehr/rm/ehr/ehr_status_spec.rb +52 -0
  355. data/spec/lib/openehr/rm/ehr/versioned_composition_spec.rb +33 -0
  356. data/spec/lib/openehr/rm/integration/generic_entry_spec.rb +31 -0
  357. data/spec/lib/openehr/rm/support/identification/access_group_ref_spec.rb +19 -0
  358. data/spec/lib/openehr/rm/support/identification/archetype_id_spec.rb +152 -0
  359. data/spec/lib/openehr/rm/support/identification/generic_id_spec.rb +33 -0
  360. data/spec/lib/openehr/rm/support/identification/hier_object_id_spec.rb +12 -0
  361. data/spec/lib/openehr/rm/support/identification/internet_id_spec.rb +12 -0
  362. data/spec/lib/openehr/rm/support/identification/iso_oid_spec.rb +12 -0
  363. data/spec/lib/openehr/rm/support/identification/locatable_ref_spec.rb +34 -0
  364. data/spec/lib/openehr/rm/support/identification/object_id_spec.rb +24 -0
  365. data/spec/lib/openehr/rm/support/identification/object_ref_spec.rb +33 -0
  366. data/spec/lib/openehr/rm/support/identification/object_version_id_spec.rb +59 -0
  367. data/spec/lib/openehr/rm/support/identification/party_ref_spec.rb +29 -0
  368. data/spec/lib/openehr/rm/support/identification/template_id_spec.rb +12 -0
  369. data/spec/lib/openehr/rm/support/identification/terminology_id_spec.rb +33 -0
  370. data/spec/lib/openehr/rm/support/identification/uid_based_id_spec.rb +50 -0
  371. data/spec/lib/openehr/rm/support/identification/uid_spec.rb +29 -0
  372. data/spec/lib/openehr/rm/support/identification/version_tree_id_spec.rb +104 -0
  373. data/spec/lib/openehr/rm/support/measurement_service_spec.rb +7 -0
  374. data/spec/lib/openehr/rm/support/terminology_service_spec.rb +24 -0
  375. data/spec/lib/openehr/serializer/adl-test-entry.most_minimal.test.adl +20 -0
  376. data/spec/lib/openehr/serializer/adl_serializer_spec.rb +47 -0
  377. data/spec/lib/openehr/serializer/openEHR-EHR-SECTION.test.v1.adl +38 -0
  378. data/spec/lib/openehr/serializer/openEHR-EHR-SECTION.test.v1.xml +58 -0
  379. data/spec/lib/openehr/serializer/sample_archetype_spec.rb +44 -0
  380. data/spec/lib/openehr/serializer/xml_serializer_spec.rb +49 -0
  381. data/spec/lib/openehr/terminology/open_ehr_terminology_spec.rb +40 -0
  382. data/spec/spec.opts +6 -0
  383. data/spec/spec_helper.rb +58 -0
  384. metadata +631 -0
@@ -0,0 +1,256 @@
1
+ # This module is implementation of the UML:
2
+ # http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109696321450_28117_5362Report.html
3
+ # Ticket refs #49
4
+ require 'openehr/assumed_library_types'
5
+ require 'date'
6
+ require 'openehr/rm/data_types/quantity'
7
+
8
+ module OpenEHR
9
+ module RM
10
+ module DataTypes
11
+ module Quantity
12
+ module DateTime
13
+ include OpenEHR::RM::DataTypes::Quantity
14
+
15
+ class DvTemporal < DvAbsoluteQuantity
16
+ def initialize(args = {})
17
+ self.value = args[:value]
18
+ self.magnitude_status = args[:magnitude_status]
19
+ self.accuracy = args[:accuracy]
20
+ self.normal_range = args[:normal_range]
21
+ self.normal_status = args[:normal_status]
22
+ self.other_reference_ranges = args[:other_reference_ranges]
23
+ end
24
+
25
+ def value=(value)
26
+ if value.nil? or value.empty?
27
+ raise ArgumentError, 'invalid value'
28
+ end
29
+ @value = value
30
+ end
31
+
32
+ undef magnitude=
33
+ end
34
+
35
+ class DvDate < DvTemporal
36
+ include OpenEHR::AssumedLibraryTypes::ISO8601DateModule
37
+ include OpenEHR::AssumedLibraryTypes
38
+
39
+ DAYS_IN_MONTH = [0,31,28,31,30,31,30,31,31,30,31,30,31]
40
+
41
+ def value=(value)
42
+ super(value)
43
+ iso8601_date = ISO8601Date.new(value)
44
+ @year = iso8601_date.year
45
+ @month = iso8601_date.month
46
+ @day = iso8601_date.day
47
+ end
48
+
49
+ def magnitude
50
+ return Date.new(@year, @month, @day)-Date.new(0000,1,1)
51
+ end
52
+
53
+ def diff(other)
54
+ if self.magnitude > other.magnitude
55
+ past, future = other, self
56
+ else
57
+ past, future = self, other
58
+ end
59
+ year, month, day = 0, 0, 0
60
+ if (future.day >= past.day)
61
+ day = future.day - past.day
62
+ else
63
+ month = -1
64
+ previous_month = future.month - 1
65
+ if previous_month == 0
66
+ previous_month = 12
67
+ end
68
+ day = DAYS_IN_MONTH[previous_month] + future.day - past.day
69
+ if leapyear?(future.year) && (previous_month == 2)
70
+ day += 1
71
+ end
72
+ end
73
+ week = day / 7
74
+ if (future.month >= past.month)
75
+ month += future.month - past.month
76
+ else
77
+ year -= 1
78
+ month += future.month + 12 - past.month
79
+ end
80
+ if month < 0
81
+ year -= 1
82
+ month += 12
83
+ end
84
+ year += future.year - past.year
85
+ return DvDuration.new(:value =>
86
+ 'P' + year.to_s + 'Y' + month.to_s + 'M' +
87
+ week.to_s + 'W' + day.to_s + 'D')
88
+ end
89
+ end
90
+
91
+ class DvTime < DvTemporal
92
+ include OpenEHR::AssumedLibraryTypes
93
+ include ISO8601TimeModule
94
+
95
+ def value=(value)
96
+ super(value)
97
+ iso8601_time = ISO8601Time.new(value)
98
+ @hour = iso8601_time.hour
99
+ @minute = iso8601_time.minute
100
+ @second = iso8601_time.second
101
+ @fractional_second = iso8601_time.fractional_second
102
+ @timezone = iso8601_time.timezone
103
+ end
104
+
105
+ def magnitude
106
+ if @fractional_second.nil? && @second.nil? && @minute.nil?
107
+ return @hour * 60 * 60
108
+ elsif @fractional_second.nil? && @second.nil?
109
+ return @hour * 60 * 60 + @minute * 60
110
+ elsif @fractional_second.nil?
111
+ return @hour * 60 * 60 + @minute * 60 + @second
112
+ else
113
+ return @hour*60*60+@minute* 60 + @second + @fractional_second
114
+ end
115
+ end
116
+
117
+ def diff(other)
118
+ diff = (other.magnitude - self.magnitude).abs
119
+ hour = (diff / 60 / 60).to_i
120
+ minute = ((diff - hour*60*60)/60).to_i
121
+ second = (diff - hour * 60 *60 - minute * 60).to_i
122
+ fractional_second = ((diff - diff.to_i)*1000000.0).to_i/1000000.0
123
+ str = 'P0Y0M0W0DT' + hour.to_s + 'H' +
124
+ minute.to_s + 'M' + second.to_s
125
+ if @fractional_second.nil?
126
+ str += 'S'
127
+ else
128
+ str += fractional_second.to_s[1..-1] + 'S'
129
+ end
130
+ return DvDuration.new(:value => str)
131
+ end
132
+ end
133
+
134
+ class DvDateTime < DvTemporal
135
+ include OpenEHR::AssumedLibraryTypes::ISO8601DateTimeModule
136
+
137
+ def value=(value)
138
+ super(value)
139
+ iso8601date_time = AssumedLibraryTypes::ISO8601DateTime.new(value)
140
+ self.year = iso8601date_time.year
141
+ self.month = iso8601date_time.month
142
+ self.day = iso8601date_time.day
143
+ self.minute = iso8601date_time.minute
144
+ self.second = iso8601date_time.second
145
+ self.hour = iso8601date_time.hour
146
+ self.fractional_second = iso8601date_time.fractional_second
147
+ self.timezone = iso8601date_time.timezone
148
+ end
149
+
150
+ def magnitude
151
+ hour, minute = @hour, @minute
152
+ if @timezone
153
+ if @timezone.sign == -1
154
+ hour -= @timezone.hour
155
+ minute -= @timezone.minute
156
+ elsif @timezone.sign == +1
157
+ hour += @timezone.hour
158
+ minute += @timezone.minute
159
+ end
160
+ end
161
+ seconds = (((@year * 365.24 +
162
+ @month * 30.42 +
163
+ @day) * 24 +
164
+ hour) * 60 +
165
+ minute) * 60 + @second
166
+ if @fractional_second.nil?
167
+ return seconds
168
+ else
169
+ return seconds + @fractional_second
170
+ end
171
+ end
172
+
173
+ def diff(other)
174
+ if self.magnitude >= other.magnitude
175
+ past, future = other, self
176
+ else
177
+ past, future = self, other
178
+ end
179
+ past_date, past_time = split_date_time(past)
180
+ future_date, future_time = split_date_time(future)
181
+ time_diff = future_time.magnitude - past_time.magnitude
182
+ if future_time.magnitude < past_time.magnitude
183
+ future_date.day = future_date.day - 1
184
+ time_diff += 24 * 60 * 60
185
+ end
186
+ date_duration = past_date.diff(future_date)
187
+ hour = (time_diff / 60 / 60).to_i
188
+ minute = ((time_diff - hour*60*60)/60).to_i
189
+ second = (time_diff - hour * 60 *60 - minute * 60).to_i
190
+ str = date_duration.value + 'T' + hour.to_s + 'H' +
191
+ minute.to_s + 'M' + second.to_s
192
+ if @fractional_second.nil?
193
+ return DvDuration.new(:value => str +'S')
194
+ else
195
+ fractional_second =
196
+ ((time_diff - time_diff.to_i)*1000000.0).to_i/1000000.0
197
+ return DvDuration.new(:value => str +
198
+ fractional_second.to_s[1..-1] + 'S')
199
+ end
200
+ end
201
+
202
+ private
203
+ def split_date_time(date_time)
204
+ /^(.*)T(.*)$/ =~ date_time.as_string
205
+ return DvDate.new(:value => $1), DvTime.new(:value => $2)
206
+ end
207
+ end
208
+
209
+ class DvDuration < DvTemporal
210
+ include OpenEHR::AssumedLibraryTypes::ISO8601DurationModule
211
+ attr_reader :value
212
+
213
+ def initialize(args = { })
214
+ super
215
+ end
216
+
217
+ def value=(value)
218
+ raise ArgumentError, 'value must be not nil' if value.nil?
219
+ @value = value
220
+ iso8601_duration = AssumedLibraryTypes::ISO8601Duration.new(value)
221
+ self.years = iso8601_duration.years
222
+ self.months = iso8601_duration.months
223
+ self.weeks = iso8601_duration.weeks
224
+ self.days = iso8601_duration.days
225
+ self.hours = iso8601_duration.hours
226
+ self.minutes = iso8601_duration.minutes
227
+ self.seconds = iso8601_duration.seconds
228
+ self.fractional_second = iso8601_duration.fractional_second
229
+ end
230
+
231
+ def magnitude
232
+ months = 0
233
+ months += @months if @months
234
+ months += @years * MONTH_IN_YEAR if @years
235
+ days = 0
236
+ days += months * NOMINAL_DAYS_IN_MONTH if months
237
+ days += @weeks * DAYS_IN_WEEK if @weeks
238
+ days += @days if @days
239
+ hours = 0
240
+ hours += days * HOURS_IN_DAY if days
241
+ hours += @hours if @hours
242
+ minutes = 0
243
+ minutes += hours * MINUTES_IN_HOUR if hours
244
+ minutes += @minutes if @minutes
245
+ seconds = 0
246
+ seconds += @seconds if @seconds
247
+ seconds += @fractional_second if @fractional_second
248
+ seconds += minutes * SECONDS_IN_MINUTE if minutes
249
+ return seconds
250
+ end
251
+ end
252
+ end # of DateTime
253
+ end # of Quantity
254
+ end # of Data_Types
255
+ end # of RM
256
+ end # of OpenEHR
@@ -0,0 +1,169 @@
1
+ # This module implemented from this UML
2
+ # http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109067605961_209522_3179Report.html
3
+ # Ticket refs #48
4
+ include OpenEHR::RM::DataTypes::Basic
5
+
6
+ module OpenEHR
7
+ module RM
8
+ module DataTypes
9
+ module Text
10
+ class TermMapping
11
+ attr_reader :match, :purpose, :target
12
+
13
+ def initialize(args ={})
14
+ self.match = args[:match]
15
+ self.purpose = args[:purpose]
16
+ self.target = args[:target]
17
+ end
18
+
19
+ def match=(match)
20
+ unless TermMapping.is_valid_mach_code? match
21
+ raise ArgumentError, 'invalid match character'
22
+ end
23
+ @match = match
24
+ end
25
+
26
+ def purpose=(purpose)
27
+ # if !purpose.nil? and !purpose.instance_of?(DvCodedText)
28
+ # raise ArgumentError, "purpose is not valid"
29
+ # end
30
+ # should be settled after terminology service implemented
31
+ @purpose = purpose
32
+ end
33
+
34
+ def target=(target)
35
+ raise ArgumentError, "target must not be nil" if target.nil?
36
+ @target = target
37
+ end
38
+
39
+ def broader?
40
+ match == '>'
41
+ end
42
+
43
+ def equivalent?
44
+ match == '='
45
+ end
46
+
47
+ def narrower?
48
+ match == '<'
49
+ end
50
+
51
+ def unknown?
52
+ match == '?'
53
+ end
54
+
55
+ def TermMapping.is_valid_mach_code?(c)
56
+ c == '>' or c == '=' or c == '<' or c == '?'
57
+ end
58
+ end
59
+
60
+ class CodePhrase
61
+ attr_reader :terminology_id, :code_string
62
+
63
+ def initialize(args = {})
64
+ self.code_string = args[:code_string]
65
+ self.terminology_id = args[:terminology_id]
66
+ end
67
+
68
+ def terminology_id=(terminology_id)
69
+ if terminology_id.nil?
70
+ raise ArgumentError, "terminology_id should not be nil"
71
+ end
72
+ @terminology_id = terminology_id
73
+ end
74
+
75
+ def code_string=(code_string)
76
+ if code_string.nil? or code_string.empty?
77
+ raise ArgumentError, "code_string should not be empty"
78
+ end
79
+ @code_string = code_string
80
+ end
81
+ end # of CodePhrase
82
+
83
+ class DvText < OpenEHR::RM::DataTypes::Basic::DataValue
84
+ attr_reader :formatting, :hyperlink, :mappings,
85
+ :language, :encoding
86
+ attr_accessor :hyperlink
87
+
88
+ def initialize(args = {})
89
+ super(args)
90
+ self.formatting = args[:formatting]
91
+ self.encoding = args[:encoding]
92
+ self.mappings = args[:mappings]
93
+ self.language = args[:language]
94
+ self.hyperlink = args[:hyperlink]
95
+ end
96
+
97
+ def value=(value)
98
+ if value.nil? or value.empty? or
99
+ value.include? CR or value.include? LF
100
+ raise ArgumentError, "value is not valid"
101
+ # CR and LF are defined in Basic_Definition inherited DataValue.
102
+ end
103
+ @value = value
104
+ end
105
+
106
+ def formatting=(formatting)
107
+ if !formatting.nil? and formatting.empty?
108
+ raise ArgumentError, "formatting is not valid"
109
+ end
110
+ @formatting = formatting
111
+ end
112
+
113
+ def encoding=(encoding)
114
+ if !encoding.nil? and encoding.code_string.empty?
115
+ raise ArgumentError, "encoding is not valid"
116
+ end
117
+ @encoding = encoding
118
+ end
119
+
120
+ def mappings=(mappings)
121
+ if !mappings.nil? && mappings.empty?
122
+ raise ArgumentError, 'mappings should not be empty'
123
+ end
124
+ @mappings = mappings
125
+ end
126
+
127
+ def language=(language)
128
+ if !language.nil? and language.code_string.empty?
129
+ raise ArgumentError, "langage is not valid"
130
+ end
131
+ @language = language
132
+ end
133
+ end
134
+
135
+ class DvCodedText < DvText
136
+ attr_reader :defining_code
137
+
138
+ def initialize(args = {})
139
+ super(args)
140
+ self.defining_code = args[:defining_code]
141
+ end
142
+
143
+ def defining_code=(defining_code)
144
+ if defining_code.nil?
145
+ raise ArgumentError, 'defiining code is mandatory'
146
+ end
147
+ @defining_code = defining_code
148
+ end
149
+ end
150
+
151
+ class DvParagraph < OpenEHR::RM::DataTypes::Basic::DataValue
152
+ attr_reader :items
153
+
154
+ def initialize(args ={})
155
+ self.items = args[:items]
156
+ end
157
+
158
+ def items=(items)
159
+ if items.nil? or items.empty?
160
+ raise ArgumentError, "Items are not valid"
161
+ end
162
+ @items = items
163
+ end
164
+ end
165
+
166
+ end # of Text
167
+ end # of DataTypes
168
+ end # of RM
169
+ end # of OpenEHR
@@ -0,0 +1,75 @@
1
+ # This module is related to the ticket #47
2
+
3
+ module OpenEHR
4
+ module RM
5
+ module DataTypes
6
+ module TimeSpecification
7
+ class DvTimeSpecification < OpenEhr::RM::DataTypes::Basic::DataValue
8
+ attr_reader :value
9
+
10
+ def initialize(value)
11
+ self.value=(value)
12
+ end
13
+
14
+ def value=(value)
15
+ raise ArgumentError, 'value must be not nil' if value.nil?
16
+ @value = value
17
+ end
18
+
19
+ def calender_alignment
20
+ raise NotImlementedError, "calender_alignment must be implemented"
21
+ end
22
+
23
+ def event_alignment
24
+ raise NotImlementedError, "event_alignment must be implemented"
25
+ end
26
+
27
+ def institution_specified
28
+ raise NotImlementedError, "institution_specified must be implemented"
29
+ end
30
+ end
31
+
32
+ # I have not implemented two classes bellow,
33
+ # because I could not obtain HL7 specification related them.
34
+
35
+
36
+ class DvGeneralTimeSpecification < DvTimeSpecification
37
+ attr_reader :value
38
+ def initialize(value)
39
+ super(value)
40
+ end
41
+ def value=(value)
42
+ raise ArgumentError, "value is not valied" unless value.formalism.is_equal?('HL7:GTS')
43
+ @value = value
44
+ end
45
+ private
46
+ def value_valid(value)
47
+ end
48
+ end
49
+
50
+ class DvPeriodicTimeSpecification < DvTimeSpecification
51
+ attr_reader :value, :calender_alignment, :event_alingment, :period
52
+ def initialize(value)
53
+ value_valid(value)
54
+ super(value)
55
+ end
56
+ def value=(value)
57
+ unless value.formalism.is_equal('HL7:PIVL') or value.formalism.is_equal('HL7:EIVL')
58
+ raise ArgumentError, "value is not valid"
59
+ end
60
+ if value.formalism('HL7:PIVL')
61
+ /^\[(\d+)\;?(\d+)?\]\/\((\d+\w+)\)(@(\w+?))?(IST)?$/ =~ value
62
+ interval1, interval2, difference, allignment = $1, $2, $3, $5
63
+ end
64
+ if value
65
+ end
66
+ end
67
+
68
+ def institution_specified?
69
+
70
+ end
71
+ end
72
+ end
73
+ end # of Data_Type
74
+ end # of RM
75
+ end # of OpenEHR