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
data/lib/openehr.rb ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ module OpenEHR
4
+ VERSION = '1.0.3'
5
+ autoload :AssumedLibraryTypes, 'openehr/assumed_library_types'
6
+ autoload :RM, 'openehr/rm'
7
+ autoload :AM, 'openehr/am'
8
+ autoload :Terminology, 'openehr/terminology'
9
+ autoload :Serializer, 'openehr/serializer'
10
+ autoload :Parser, 'openehr/parser'
11
+ end
data/lib/openehr/am.rb ADDED
@@ -0,0 +1,8 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ module OpenEHR
4
+ module AM
5
+ autoload :Archetype, 'am/archetype'
6
+ autoload :OpenEHRProfile, 'am/openehr_profile'
7
+ end
8
+ end
@@ -0,0 +1,133 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+ include OpenEHR::RM::Common::Resource
3
+
4
+ module OpenEHR
5
+ module AM
6
+ module Archetype
7
+ autoload :Assertion, 'archetype/assertion'
8
+ autoload :ConstraintModel, 'archetype/constraint_model'
9
+ autoload :Ontology, 'archetype/ontology'
10
+
11
+ module ADLDefinition
12
+ include OpenEHR::RM::Support::Terminology
13
+ # include OpenEHR::RM::Support::Terminology::OpenEHR_Code_Set_Identifier
14
+ CURRENT_ADL_VERSION = "1.4"
15
+ end
16
+
17
+ class Archetype < AuthoredResource
18
+ include ADLDefinition
19
+ attr_reader :archetype_id, :concept, :definition, :ontology
20
+ attr_accessor :uid, :adl_version, :parent_archetype_id, :invariants
21
+
22
+ def initialize(args = {})
23
+ super(args)
24
+ self.adl_version = args[:adl_version]
25
+ self.archetype_id = args[:archetype_id]
26
+ self.uid = args[:uid]
27
+ self.concept = args[:concept]
28
+ self.parent_archetype_id = args[:parent_archetype_id]
29
+ self.definition = args[:definition]
30
+ self.ontology = args[:ontology]
31
+ self.invariants = args[:invariants]
32
+ end
33
+
34
+ def archetype_id=(archetype_id)
35
+ if archetype_id.nil?
36
+ raise ArgumentError, 'archetype_id is mandatory'
37
+ end
38
+ @archetype_id = archetype_id
39
+ end
40
+
41
+ def concept=(concept)
42
+ if concept.nil?
43
+ raise ArgumentError, 'concept is mandatory'
44
+ end
45
+ @concept = concept
46
+ end
47
+
48
+ def definition=(definition)
49
+ if definition.nil?
50
+ raise ArgumentError, 'definition is mandatory'
51
+ end
52
+ @definition = definition
53
+ end
54
+
55
+ def ontology=(ontology)
56
+ if ontology.nil?
57
+ raise ArgumentError, 'ontology is mandatory'
58
+ end
59
+ @ontology = ontology
60
+ end
61
+
62
+ def version
63
+ return @archetype_id.version_id
64
+ end
65
+
66
+ def short_concept_name
67
+ return @archetype_id.concept_name
68
+ end
69
+
70
+ def concept_name(a_lang)
71
+ return @ontology.term_definition(:lang => a_lang, :code => @concept).items[:text]
72
+ end
73
+
74
+ def constraint_references_valid?
75
+ end
76
+
77
+ def internal_references_valid?
78
+ end
79
+
80
+ def is_specialised?
81
+ end
82
+
83
+ def is_valid?
84
+ end
85
+
86
+ def logical_paths(a_lang)
87
+ end
88
+
89
+ def node_ids_vaild?
90
+ end
91
+
92
+ def physical_paths
93
+ end
94
+
95
+ def previous_version
96
+ end
97
+
98
+ def specialisation_depth
99
+ end
100
+
101
+ def self.create(args ={}, &block)
102
+ archetype = new(args)
103
+ if block_given?
104
+ yield archetype
105
+ end
106
+ return archetype
107
+ end
108
+
109
+ end # end of Archetype
110
+ # original file:
111
+ # ref_imple_eiffel/components/adl_parser/src/interface/adl_definition.e
112
+
113
+ class ValidityKind
114
+ attr_reader :value
115
+
116
+ MANDATORY = 1001
117
+ OPTIONAL = 1002
118
+ DISALLOWED = 1003
119
+
120
+ def initialize(args = { })
121
+ self.value = args[:value]
122
+ end
123
+
124
+ def value=(value)
125
+ unless [MANDATORY, OPTIONAL, DISALLOWED].include? value
126
+ raise ArgumentError, 'invalid value'
127
+ end
128
+ @value = value
129
+ end
130
+ end
131
+ end # of Archetype
132
+ end # of AM
133
+ end # of OpenEHR
@@ -0,0 +1,190 @@
1
+ module OpenEHR
2
+ module AM
3
+ module Archetype
4
+ module Assertion
5
+ class Assertion
6
+ attr_reader :expression, :tag
7
+ attr_accessor :string_expression, :variables
8
+
9
+ def initialize(args = { })
10
+ self.expression = args[:expression]
11
+ self.tag = args[:tag]
12
+ self.string_expression = args[:string_expression]
13
+ self.variables = args[:variables]
14
+ end
15
+
16
+ def expression=(expression)
17
+ if expression.nil? or expression.type.upcase != 'BOOLEAN'
18
+ raise ArgumentError, 'invalid expression'
19
+ end
20
+ @expression = expression
21
+ end
22
+
23
+ def tag=(tag)
24
+ if !tag.nil? && tag.empty?
25
+ raise ArgumentError, 'tag should not be empty'
26
+ end
27
+ @tag = tag
28
+ end
29
+ end
30
+
31
+ class ExprItem
32
+ attr_reader :type
33
+
34
+ def initialize(args = { })
35
+ self.type = args[:type]
36
+ end
37
+
38
+ def type=(type)
39
+ if type.nil? or type.empty?
40
+ raise ArgumentError, 'type is mandatory'
41
+ end
42
+ @type = type
43
+ end
44
+ end
45
+
46
+ class ExprLeaf < ExprItem
47
+ attr_reader :item, :reference_type
48
+
49
+ def initialize(args = { })
50
+ super
51
+ self.item = args[:item]
52
+ self.reference_type = args[:reference_type]
53
+ end
54
+
55
+ def item=(item)
56
+ if item.nil?
57
+ raise ArgumentError, 'item is mandatory'
58
+ end
59
+ @item = item
60
+ end
61
+
62
+ def reference_type=(reference_type)
63
+ if reference_type.nil?
64
+ raise ArgumentError, 'reference_type is mandatory'
65
+ end
66
+ @reference_type = reference_type
67
+ end
68
+ end
69
+
70
+ class ExprOperator < ExprItem
71
+ attr_accessor :operator, :precedence_overridden
72
+
73
+ def initialize(args = { })
74
+ super
75
+ self.operator = args[:operator]
76
+ self.precedence_overridden = args[:precedence_overridden]
77
+ end
78
+ end
79
+
80
+ class ExprUnaryOperator < ExprOperator
81
+ attr_reader :operand
82
+
83
+ def initialize(args = { })
84
+ super
85
+ self.operand = args[:operand]
86
+ end
87
+
88
+ def operand=(operand)
89
+ if operand.nil?
90
+ raise ArgumentError, 'operand is mandatory'
91
+ end
92
+ @operand = operand
93
+ end
94
+ end
95
+
96
+ class ExprBinaryOperator < ExprOperator
97
+ attr_reader :right_operand, :left_operand
98
+
99
+ def initialize(args = { })
100
+ super
101
+ self.right_operand = args[:right_operand]
102
+ self.left_operand = args[:left_operand]
103
+ end
104
+
105
+ def right_operand=(right_operand)
106
+ if right_operand.nil?
107
+ raise ArgumentError, 'right_operand is mandatory'
108
+ end
109
+ @right_operand = right_operand
110
+ end
111
+
112
+ def left_operand=(left_operand)
113
+ if left_operand.nil?
114
+ raise ArgumentError, 'left_operand is mandatory'
115
+ end
116
+ @left_operand = left_operand
117
+ end
118
+ end
119
+
120
+ class AssertionVariable
121
+ attr_reader :name, :definition
122
+
123
+ def initialize(args = { })
124
+ self.name = args[:name]
125
+ self.definition = args[:definition]
126
+ end
127
+
128
+ def name=(name)
129
+ if name.nil?
130
+ raise ArgumentError, 'name is mandatory'
131
+ end
132
+ @name = name
133
+ end
134
+
135
+ def definition=(definition)
136
+ if definition.nil?
137
+ raise ArgumentError, 'definition is mandatory'
138
+ end
139
+ @definition = definition
140
+ end
141
+ end
142
+
143
+ class OperatorKind
144
+ OP_EQ = 2001
145
+ OP_NE = 2002
146
+ OP_LE = 2003
147
+ OP_LT = 2004
148
+ OP_GE = 2005
149
+ OP_GT = 2006
150
+ OP_MATCHES = 2007
151
+
152
+ OP_NOT = 2010
153
+ OP_AND = 2011
154
+ OP_OR = 2012
155
+ OP_XOR = 2013
156
+ OP_IMPLIES = 2014
157
+ OP_FOR_ALL = 2015
158
+ OP_EXISTS = 2016
159
+
160
+ OP_PLUS = 2020
161
+ OP_MINUS = 2021
162
+ OP_MULTIPLY = 2022
163
+ OP_DIVIDE = 2023
164
+ OP_EXP = 2024
165
+
166
+ attr_reader :value
167
+
168
+ def initialize(args = { })
169
+ self.value = args[:value]
170
+ end
171
+
172
+ def value=(value)
173
+ unless OperatorKind.valid_operator? value
174
+ raise ArgumentError, 'invalid value'
175
+ end
176
+ @value = value
177
+ end
178
+
179
+ def self.valid_operator?(value)
180
+ if value >= OP_EQ && value <= OP_EXP
181
+ return true
182
+ else
183
+ return false
184
+ end
185
+ end
186
+ end
187
+ end # of Assetion
188
+ end # of Archtype
189
+ end #of AM
190
+ end # of OpenEHR
@@ -0,0 +1,328 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+ module OpenEHR
3
+ module AM
4
+ module Archetype
5
+ module ConstraintModel
6
+
7
+ autoload :Primitive, 'constraint_model/primitive'
8
+
9
+ class ArchetypeConstraint
10
+ attr_reader :path
11
+ attr_accessor :parent
12
+
13
+ def initialize(args = { })
14
+ self.path = args[:path]
15
+ self.parent = args[:parent]
16
+ end
17
+
18
+ def path=(path)
19
+ if path.nil?
20
+ raise ArgumentError, 'path is mandatory'
21
+ end
22
+ @path = path
23
+ end
24
+
25
+ def has_path?(path)
26
+ return @path.include?(path)
27
+ end
28
+
29
+ def congruent?
30
+ if @path.index(@parent.path) == 0
31
+ return true
32
+ else
33
+ return false
34
+ end
35
+ end
36
+
37
+ alias is_congruent? congruent?
38
+
39
+ def node_conforms_to?(other)
40
+ if @path.index(other.path) == 0
41
+ return true
42
+ else
43
+ return false
44
+ end
45
+ end
46
+ end
47
+
48
+ class Cardinality
49
+ attr_accessor :interval, :is_ordered, :is_unique
50
+
51
+ def initialize(args = { })
52
+ @interval = args[:interval]
53
+ @is_ordered = args[:is_ordered]
54
+ @is_unique = args[:is_unique]
55
+ end
56
+
57
+ def is_ordered?
58
+ return @is_ordered
59
+ end
60
+
61
+ alias ordered? is_ordered?
62
+
63
+ def is_unique?
64
+ return @is_unique
65
+ end
66
+
67
+ alias unique? is_unique?
68
+
69
+ def is_set?
70
+ return !@is_ordered && @is_unique
71
+ end
72
+
73
+ alias set? is_set?
74
+
75
+ def is_list?
76
+ return @is_ordered && !@is_unique
77
+ end
78
+
79
+ alias list? is_list?
80
+
81
+ def is_bag?
82
+ return !@is_ordered && !@is_unique
83
+ end
84
+
85
+ alias bag? is_bag?
86
+ end
87
+
88
+ class CObject < ArchetypeConstraint
89
+ attr_reader :rm_type_name, :node_id, :occurrences
90
+
91
+ def initialize(args = { })
92
+ super
93
+ self.rm_type_name = args[:rm_type_name]
94
+ self.node_id = args[:node_id]
95
+ self.occurrences = args[:occurrences]
96
+ end
97
+
98
+ def rm_type_name=(rm_type_name)
99
+ if rm_type_name.nil? || rm_type_name.empty?
100
+ raise ArgumentError, 'invalid rm_type_name'
101
+ end
102
+ @rm_type_name = rm_type_name
103
+ end
104
+
105
+ def node_id=(node_id)
106
+ if !node_id.nil? && node_id.empty?
107
+ raise ArgumentError, 'invalid node_id'
108
+ end
109
+ @node_id = node_id
110
+ end
111
+
112
+ def occurrences=(occurrences)
113
+ if occurrences.nil?
114
+ raise ArgumentError, 'invaild occurrences'
115
+ end
116
+ @occurrences = occurrences
117
+ end
118
+
119
+ def self.create(args = { }, &block)
120
+ c_object = new(args)
121
+ if block_given?
122
+ yield c_object
123
+ end
124
+ return c_object
125
+ end
126
+ end
127
+
128
+ class CAttribute < ArchetypeConstraint
129
+ attr_reader :rm_attribute_name, :existence
130
+ attr_accessor :children
131
+
132
+ def initialize(args = { })
133
+ super(args)
134
+ self.rm_attribute_name = args[:rm_attribute_name]
135
+ self.existence = args[:existence]
136
+ self.children = args[:children]
137
+ end
138
+
139
+ def rm_attribute_name=(rm_attribute_name)
140
+ if rm_attribute_name.nil? or rm_attribute_name.empty?
141
+ raise ArgumentError, 'invalid rm_attribute_name'
142
+ end
143
+ @rm_attribute_name = rm_attribute_name
144
+ end
145
+
146
+ def existence=(existence)
147
+ if !existence.nil? && (existence.lower < 0 || existence.upper > 1)
148
+ raise ArgumentError, 'invalid existence'
149
+ end
150
+ @existence = existence
151
+ end
152
+ end
153
+
154
+ class CDefinedObject < CObject
155
+ attr_accessor :assumed_value
156
+
157
+ def initialize(args = { })
158
+ super
159
+ self.assumed_value = args[:assumed_value]
160
+ end
161
+
162
+ def has_assumed_value?
163
+ return !@assumed_value.nil?
164
+ end
165
+
166
+ def default_value
167
+ raise NotImplementedError, 'subclass should implement this method'
168
+ end
169
+
170
+ def valid_value?(value)
171
+ raise NotImplementedError, 'subclass should implement this method'
172
+ end
173
+
174
+ def any_allowed?
175
+ raise NotImplementedError, 'subclass should implement this method'
176
+ end
177
+ end
178
+
179
+ class CPrimitiveObject < CDefinedObject
180
+ attr_accessor :item
181
+
182
+ def initialize(args = { })
183
+ super
184
+ self.item = args[:item]
185
+ end
186
+
187
+ def any_allowed?
188
+ return item.nil?
189
+ end
190
+ end
191
+
192
+ class CComplexObject < CDefinedObject
193
+ attr_accessor :attributes
194
+
195
+ def initialize(args = { })
196
+ super
197
+ self.attributes = args[:attributes]
198
+ end
199
+
200
+ def any_allowed?
201
+ return (@attributes.nil? or @attributes.empty?)
202
+ end
203
+
204
+ def self.create(args = { }, &block)
205
+ c_complex_object = new(args)
206
+ if block_given?
207
+ yield c_complex_object
208
+ end
209
+ return c_complex_object
210
+ end
211
+ end
212
+
213
+ class CDomainType < CDefinedObject
214
+ def standard_equivalent
215
+ raise NotImplementedError, 'subclass should be defined'
216
+ end
217
+ end
218
+
219
+ class CReferenceObject < CObject
220
+
221
+ end
222
+
223
+ class ArchetypeInternalRef < CReferenceObject
224
+ attr_reader :target_path
225
+
226
+ def initialize(args = { })
227
+ super
228
+ self.target_path = args[:target_path]
229
+ end
230
+
231
+ def target_path=(target_path)
232
+ if target_path.nil? or target_path.empty?
233
+ raise ArgumentError, 'target_path is mandatory'
234
+ end
235
+ @target_path = target_path
236
+ end
237
+ end
238
+
239
+ class ArchetypeSlot < CReferenceObject
240
+ attr_reader :includes, :excludes
241
+
242
+ def initialize(args = { })
243
+ super
244
+ self.includes = args[:includes]
245
+ self.excludes = args[:excludes]
246
+ end
247
+
248
+ def includes=(includes)
249
+ if !includes.nil? && includes.empty?
250
+ raise ArgumentError, 'includes should not be empty'
251
+ end
252
+ @includes = includes
253
+ end
254
+
255
+ def excludes=(excludes)
256
+ if !excludes.nil? && excludes.empty?
257
+ raise ArgumentError, 'excludes should not be empty'
258
+ end
259
+ @excludes = excludes
260
+ end
261
+
262
+ def any_allowed?
263
+ return includes.nil? && excludes.nil?
264
+ end
265
+
266
+ def self.create(args = { }, &block)
267
+ archetype_slot = new(args)
268
+ archetype_slot.includes = args[:includes]
269
+ archetype_slot.excludes = args[:excludes]
270
+ if block_given?
271
+ yield archetype_slot
272
+ end
273
+ return archetype_slot
274
+ end
275
+ end
276
+
277
+ class ConstraintRef < CReferenceObject
278
+ attr_reader :reference
279
+
280
+ def initialize(args = { })
281
+ super
282
+ self.reference = args[:reference]
283
+ end
284
+
285
+ def reference=(reference)
286
+ if reference.nil?
287
+ raise ArgumentError, 'reference is mandatory'
288
+ end
289
+ @reference = reference
290
+ end
291
+
292
+ def self.create(args = { }, &block)
293
+ constraint_ref = new(args)
294
+ constraint_ref.reference = args[:reference]
295
+ if block_given?
296
+ yield constraint_ref
297
+ end
298
+ return constraint_ref
299
+ end
300
+ end
301
+
302
+ class CSingleAttribute < CAttribute
303
+ attr_reader :alternatives
304
+
305
+ def initialize(args = { })
306
+ super
307
+ self.alternatives = args[:alternatives]
308
+ end
309
+
310
+ def alternatives=(alternatives)
311
+ @alternatives = alternatives
312
+ end
313
+ end
314
+
315
+ class CMultipleAttribute < CAttribute
316
+ attr_accessor :members, :cardinality
317
+
318
+ def initialize(args = { })
319
+ super
320
+ self.members = args[:members]
321
+ self.cardinality = args[:cardinality]
322
+ end
323
+ end
324
+ end # of ConstraintModel
325
+ end # of Archetype
326
+ end # of AM
327
+ end # of OpenEHR
328
+