[86] | 1 | # This module is based on the UML,
|
---|
| 2 | # http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_76d0249_1118674798473_6021_0Report.html
|
---|
| 3 | # Ticket refs #45
|
---|
[361] | 4 | include OpenEHR::RM::Common::Archetyped
|
---|
| 5 |
|
---|
[6] | 6 | module OpenEHR
|
---|
| 7 | module RM
|
---|
[361] | 8 | module Demographic
|
---|
| 9 | class Address < Locatable
|
---|
[87] | 10 | attr_reader :details
|
---|
| 11 |
|
---|
| 12 | def as_string
|
---|
| 13 |
|
---|
| 14 | end
|
---|
| 15 |
|
---|
| 16 | def type
|
---|
| 17 |
|
---|
| 18 | end
|
---|
| 19 | end
|
---|
| 20 |
|
---|
[361] | 21 | class Capability < Locatable
|
---|
[87] | 22 | attr_reader :credentials, :time_validity
|
---|
| 23 |
|
---|
| 24 | end
|
---|
| 25 |
|
---|
[361] | 26 | class Party < Locatable
|
---|
| 27 | attr_reader :uid, :identities, :contacts, :relationships,
|
---|
| 28 | :reverse_relationships
|
---|
| 29 | attr_accessor :details
|
---|
| 30 | alias :type :name
|
---|
| 31 |
|
---|
| 32 | def initialize(args = { })
|
---|
| 33 | super(args)
|
---|
| 34 | self.uid = args[:uid]
|
---|
| 35 | self.identities = args[:identities]
|
---|
| 36 | self.contacts = args[:contacts]
|
---|
| 37 | self.relationships = args[:relationships]
|
---|
| 38 | self.reverse_relationships =
|
---|
| 39 | args[:reverse_relationships]
|
---|
| 40 | self.details = args[:details]
|
---|
[8] | 41 | end
|
---|
[361] | 42 |
|
---|
[9] | 43 | def uid=(uid)
|
---|
[361] | 44 | raise ArgumentError, 'uid is mandatory' if uid.nil?
|
---|
[9] | 45 | @uid = uid
|
---|
| 46 | end
|
---|
[361] | 47 |
|
---|
[9] | 48 | def identities=(identities)
|
---|
[361] | 49 | if identities.nil? || identities.empty?
|
---|
| 50 | raise ArgumentError, 'identities are mandatory'
|
---|
| 51 | end
|
---|
[9] | 52 | @identities = identities
|
---|
[361] | 53 | end
|
---|
| 54 |
|
---|
[9] | 55 | def contacts=(contacts)
|
---|
[361] | 56 | if !contacts.nil? && contacts.empty?
|
---|
| 57 | raise ArgumentError, 'contacts should not be empty'
|
---|
| 58 | end
|
---|
[9] | 59 | @contacts = contacts
|
---|
| 60 | end
|
---|
[361] | 61 |
|
---|
[8] | 62 | def parent=(parent)
|
---|
| 63 | @parent = nil
|
---|
| 64 | end
|
---|
[361] | 65 |
|
---|
| 66 | def relationships=(relationships)
|
---|
| 67 | unless relationships.nil?
|
---|
| 68 | if relationships.empty?
|
---|
| 69 | raise ArgumentError, 'relationships should not be empty?'
|
---|
| 70 | else
|
---|
| 71 | relationships.each do |rel|
|
---|
| 72 | if rel.source.id.value != @uid.value
|
---|
| 73 | raise ArgumentError, 'invalid source of relationships'
|
---|
| 74 | end
|
---|
| 75 | end
|
---|
| 76 | end
|
---|
| 77 | end
|
---|
| 78 | @relationships = relationships
|
---|
[8] | 79 | end
|
---|
[361] | 80 |
|
---|
| 81 | def reverse_relationships=(reverse_relationships)
|
---|
| 82 | if !reverse_relationships.nil? && reverse_relationships.empty?
|
---|
| 83 | raise ArgumentError, 'reverse_relationships should not be empty'
|
---|
[9] | 84 | end
|
---|
[361] | 85 | @reverse_relationships = reverse_relationships
|
---|
[9] | 86 | end
|
---|
[7] | 87 | end
|
---|
[87] | 88 |
|
---|
[361] | 89 | class PartyIdentity < Locatable
|
---|
[87] | 90 | attr_reader :details
|
---|
| 91 |
|
---|
| 92 | end
|
---|
| 93 |
|
---|
[361] | 94 | class PartyRelationship < Locatable
|
---|
[87] | 95 |
|
---|
| 96 | end
|
---|
| 97 |
|
---|
[361] | 98 | class VersionedParty < Locatable
|
---|
[87] | 99 |
|
---|
| 100 | end
|
---|
| 101 |
|
---|
| 102 | class Role < Party
|
---|
| 103 |
|
---|
| 104 | end
|
---|
| 105 |
|
---|
[86] | 106 | class Actor < Party
|
---|
[51] | 107 | LEAGAL_IDENTITY = 'leagal identity'
|
---|
| 108 | attr_reader :languages, :rules
|
---|
[361] | 109 |
|
---|
[51] | 110 | def initialize(uid, archetype_node_id, name, archetype_details,
|
---|
| 111 | feeder_audit, links, identities, contacts,
|
---|
| 112 | relationships, reverse_relationships, details,
|
---|
| 113 | languages, rules)
|
---|
| 114 | super(uid, archetype_node_id, name, archetype_details,
|
---|
| 115 | feeder_audit, links, relationships, reverse_relationships,
|
---|
| 116 | details)
|
---|
| 117 | has_legal_identity?
|
---|
| 118 | set_languages(languages)
|
---|
| 119 | set_rules(rules)
|
---|
| 120 | end
|
---|
[361] | 121 |
|
---|
[51] | 122 | def has_legal_identity?
|
---|
| 123 | @identities.each {|identity|
|
---|
| 124 | if (identity.purpose.value == LEAGAL_IDENTITY)
|
---|
| 125 | return true
|
---|
| 126 | end
|
---|
| 127 | }
|
---|
| 128 | false
|
---|
| 129 | end
|
---|
[361] | 130 |
|
---|
[51] | 131 | def languages=(languages)
|
---|
| 132 | set_languages(languages)
|
---|
| 133 | end
|
---|
[361] | 134 |
|
---|
[51] | 135 | def values=(values)
|
---|
| 136 | set_values(values)
|
---|
| 137 | end
|
---|
| 138 | private
|
---|
| 139 | def set_languages(languages)
|
---|
| 140 | if languages.nil?
|
---|
| 141 | raise ArgumentError, "languages should not be nil."
|
---|
| 142 | elsif languages.empty?
|
---|
| 143 | raise ArgumentError, "languages shouldnot be empty."
|
---|
| 144 | end
|
---|
| 145 | @languages = languages
|
---|
| 146 | end
|
---|
[361] | 147 |
|
---|
[51] | 148 | def set_values(values)
|
---|
| 149 | if values.nil?
|
---|
| 150 | raise ArgumentError, "values should not be nil."
|
---|
| 151 | elsif values.empty?
|
---|
| 152 | raise ArgumentError, "values should not be nil."
|
---|
| 153 | end
|
---|
| 154 | @values = values
|
---|
[361] | 155 | end
|
---|
[10] | 156 | end
|
---|
[361] | 157 |
|
---|
| 158 | class Contact < Locatable
|
---|
[51] | 159 | attr_accessor :time_validity
|
---|
| 160 | attr_reader :addresses
|
---|
| 161 | def initialize(uid, archetype_node_id, name, archetype_details,
|
---|
| 162 | feeder_audit, links, parent, time_validity, addresses)
|
---|
| 163 | super(uid, archetype_node_id, name, archetype_details,
|
---|
| 164 | feeder_audit, links, parent)
|
---|
| 165 | address_exists?(addresses)
|
---|
| 166 | @addresses = addresses
|
---|
| 167 | @time_validity = time_validity
|
---|
| 168 | end
|
---|
[361] | 169 |
|
---|
[51] | 170 | def purpose
|
---|
| 171 | @name
|
---|
| 172 | end
|
---|
[361] | 173 |
|
---|
[51] | 174 | def purpose=(purpose)
|
---|
| 175 | @name = purpose
|
---|
| 176 | end
|
---|
[361] | 177 |
|
---|
[51] | 178 | def addresses=(addresses)
|
---|
| 179 | address_exists?(addresses)
|
---|
| 180 | @addresses = addresses
|
---|
| 181 | end
|
---|
| 182 | private
|
---|
[361] | 183 |
|
---|
[51] | 184 | def address_exists?(addresses)
|
---|
| 185 | if addresses.nil?
|
---|
| 186 | raise ArgumentError, "address must not be nil"
|
---|
| 187 | elsif addresses.empty?
|
---|
| 188 | raise ArgumentError, "address must not be empty"
|
---|
| 189 | end
|
---|
| 190 | end
|
---|
| 191 | end
|
---|
[86] | 192 |
|
---|
| 193 | class Agent < Actor
|
---|
| 194 |
|
---|
| 195 | end
|
---|
| 196 |
|
---|
| 197 | class Organisation < Actor
|
---|
| 198 |
|
---|
| 199 | end
|
---|
| 200 |
|
---|
| 201 | class Person < Actor
|
---|
| 202 |
|
---|
| 203 | end
|
---|
| 204 |
|
---|
| 205 | class Group < Actor
|
---|
| 206 |
|
---|
| 207 | end
|
---|
[6] | 208 | end # of Demographic
|
---|
| 209 | end # of RM
|
---|
| 210 | end # of OpenEHR
|
---|