# This module is based on the UML, # http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_76d0249_1118674798473_6021_0Report.html # Ticket refs #45 include OpenEHR::RM::Common::Archetyped module OpenEHR module RM module Demographic class Address < Locatable attr_reader :details def as_string end def type end end class Capability < Locatable attr_reader :credentials, :time_validity end class Party < Locatable attr_reader :uid, :identities, :contacts, :relationships, :reverse_relationships attr_accessor :details alias :type :name def initialize(args = { }) super(args) self.uid = args[:uid] self.identities = args[:identities] self.contacts = args[:contacts] self.relationships = args[:relationships] self.reverse_relationships = args[:reverse_relationships] self.details = args[:details] end def uid=(uid) raise ArgumentError, 'uid is mandatory' if uid.nil? @uid = uid end def identities=(identities) if identities.nil? || identities.empty? raise ArgumentError, 'identities are mandatory' end @identities = identities end def contacts=(contacts) if !contacts.nil? && contacts.empty? raise ArgumentError, 'contacts should not be empty' end @contacts = contacts end def parent=(parent) @parent = nil end def relationships=(relationships) unless relationships.nil? if relationships.empty? raise ArgumentError, 'relationships should not be empty?' else relationships.each do |rel| if rel.source.id.value != @uid.value raise ArgumentError, 'invalid source of relationships' end end end end @relationships = relationships end def reverse_relationships=(reverse_relationships) if !reverse_relationships.nil? && reverse_relationships.empty? raise ArgumentError, 'reverse_relationships should not be empty' end @reverse_relationships = reverse_relationships end end class PartyIdentity < Locatable attr_reader :details end class PartyRelationship < Locatable end class VersionedParty < Locatable end class Role < Party end class Actor < Party LEAGAL_IDENTITY = 'leagal identity' attr_reader :languages, :rules def initialize(uid, archetype_node_id, name, archetype_details, feeder_audit, links, identities, contacts, relationships, reverse_relationships, details, languages, rules) super(uid, archetype_node_id, name, archetype_details, feeder_audit, links, relationships, reverse_relationships, details) has_legal_identity? set_languages(languages) set_rules(rules) end def has_legal_identity? @identities.each {|identity| if (identity.purpose.value == LEAGAL_IDENTITY) return true end } false end def languages=(languages) set_languages(languages) end def values=(values) set_values(values) end private def set_languages(languages) if languages.nil? raise ArgumentError, "languages should not be nil." elsif languages.empty? raise ArgumentError, "languages shouldnot be empty." end @languages = languages end def set_values(values) if values.nil? raise ArgumentError, "values should not be nil." elsif values.empty? raise ArgumentError, "values should not be nil." end @values = values end end class Contact < Locatable attr_accessor :time_validity attr_reader :addresses def initialize(uid, archetype_node_id, name, archetype_details, feeder_audit, links, parent, time_validity, addresses) super(uid, archetype_node_id, name, archetype_details, feeder_audit, links, parent) address_exists?(addresses) @addresses = addresses @time_validity = time_validity end def purpose @name end def purpose=(purpose) @name = purpose end def addresses=(addresses) address_exists?(addresses) @addresses = addresses end private def address_exists?(addresses) if addresses.nil? raise ArgumentError, "address must not be nil" elsif addresses.empty? raise ArgumentError, "address must not be empty" end end end class Agent < Actor end class Organisation < Actor end class Person < Actor end class Group < Actor end end # of Demographic end # of RM end # of OpenEHR