healthcare_phony 0.3.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.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.github/workflows/gem-push.yml +42 -0
- data/.github/workflows/ruby.yml +33 -0
- data/.gitignore +64 -0
- data/.rdoc_options +23 -0
- data/.rubocop.yml +10 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +285 -0
- data/Rakefile +12 -0
- data/VERSION +1 -0
- data/healthcare_phony.gemspec +36 -0
- data/lib/healthcare_phony.rb +88 -0
- data/lib/healthcare_phony/address.rb +89 -0
- data/lib/healthcare_phony/assigning_authority.rb +6 -0
- data/lib/healthcare_phony/cell_phone_number.rb +20 -0
- data/lib/healthcare_phony/data_files/address_type.yml +7 -0
- data/lib/healthcare_phony/data_files/adt_event_types.yml +59 -0
- data/lib/healthcare_phony/data_files/degree.yml +9 -0
- data/lib/healthcare_phony/data_files/discharge_disposition.yml +15 -0
- data/lib/healthcare_phony/data_files/ethnic_group.yml +10 -0
- data/lib/healthcare_phony/data_files/hl7_message_types.yml +4 -0
- data/lib/healthcare_phony/data_files/language.yml +7 -0
- data/lib/healthcare_phony/data_files/marital_status.yml +49 -0
- data/lib/healthcare_phony/data_files/mdm_event_types.yml +12 -0
- data/lib/healthcare_phony/data_files/oru_event_types.yml +2 -0
- data/lib/healthcare_phony/data_files/race.yml +13 -0
- data/lib/healthcare_phony/data_files/religion.yml +250 -0
- data/lib/healthcare_phony/data_files/tele_equipment_type.yml +10 -0
- data/lib/healthcare_phony/data_files/tele_use_code.yml +9 -0
- data/lib/healthcare_phony/diagnosis.rb +12 -0
- data/lib/healthcare_phony/doctor.rb +25 -0
- data/lib/healthcare_phony/email.rb +25 -0
- data/lib/healthcare_phony/ethnic_group.rb +34 -0
- data/lib/healthcare_phony/gender.rb +22 -0
- data/lib/healthcare_phony/helper.rb +72 -0
- data/lib/healthcare_phony/hl7_message.rb +136 -0
- data/lib/healthcare_phony/home_phone_number.rb +20 -0
- data/lib/healthcare_phony/identifier.rb +23 -0
- data/lib/healthcare_phony/insurance.rb +6 -0
- data/lib/healthcare_phony/language.rb +30 -0
- data/lib/healthcare_phony/marital_status.rb +31 -0
- data/lib/healthcare_phony/patient.rb +114 -0
- data/lib/healthcare_phony/patient_visit.rb +96 -0
- data/lib/healthcare_phony/person_name.rb +104 -0
- data/lib/healthcare_phony/phone_number.rb +85 -0
- data/lib/healthcare_phony/procedure.rb +6 -0
- data/lib/healthcare_phony/race.rb +30 -0
- data/lib/healthcare_phony/religion.rb +32 -0
- data/lib/healthcare_phony/templates/adt_example.erb +6 -0
- data/lib/healthcare_phony/templates/csv_example.erb +4 -0
- data/lib/healthcare_phony/version.rb +5 -0
- data/lib/healthcare_phony/visit_admission.rb +53 -0
- data/lib/healthcare_phony/visit_discharge.rb +62 -0
- data/lib/healthcare_phony/visit_doctors.rb +19 -0
- data/lib/healthcare_phony/visit_location.rb +106 -0
- data/lib/healthcare_phony/work_phone_number.rb +20 -0
- metadata +185 -0
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Randomly generates a patient name.
|
5
|
+
class PersonName
|
6
|
+
attr_accessor :family_name,
|
7
|
+
:given_name,
|
8
|
+
:middle_name,
|
9
|
+
:suffix,
|
10
|
+
:prefix,
|
11
|
+
:degree
|
12
|
+
|
13
|
+
# Public: Initializes an Address. Pass in hash of different parameters, currently this includes:
|
14
|
+
# blank - An integer representing the % of times PatientName components should be blank.
|
15
|
+
# gender - A Gender object which will be used to generate a Male or Female name if specified.
|
16
|
+
# degree_data_file - Location of YAML file containing a list of potential degrees to choose from. By default the
|
17
|
+
# gem supplied file will be used. The default file {degree.yml}[https://github.com/austinmoody/healthcare_phony/blob/main/lib/healthcare_phony/data_files/degree.yml].
|
18
|
+
def initialize(**init_args)
|
19
|
+
@set_blank = !init_args[:blank].nil? && Helper.random_with_blank('X', init_args[:blank]) == ''
|
20
|
+
@gender = init_args[:gender]
|
21
|
+
@degree_data_file = get_degree_data_file(init_args)
|
22
|
+
@given_name = define_given_name
|
23
|
+
@family_name = define_family_name
|
24
|
+
@middle_name = define_middle_name
|
25
|
+
@suffix = define_suffix
|
26
|
+
@prefix = define_prefix
|
27
|
+
@degree = define_degree(init_args)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Private: Boolean set during initialization if Address components should be set to blank.
|
33
|
+
attr_accessor :set_blank
|
34
|
+
attr_accessor :degree_data_file
|
35
|
+
|
36
|
+
def get_degree_data_file(**init_args)
|
37
|
+
if !init_args[:degree_data_file].nil?
|
38
|
+
init_args[:degree_data_file]
|
39
|
+
else
|
40
|
+
"#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/degree.yml"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_given_name
|
45
|
+
if @set_blank
|
46
|
+
''
|
47
|
+
elsif !@gender.nil? && @gender.code == 'M'
|
48
|
+
Faker::Name.male_first_name
|
49
|
+
elsif !@gender.nil? && @gender.code == 'F'
|
50
|
+
Faker::Name.female_first_name
|
51
|
+
else
|
52
|
+
Faker::Name.first_name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def define_family_name
|
57
|
+
if @set_blank
|
58
|
+
''
|
59
|
+
else
|
60
|
+
Faker::Name.last_name
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def define_middle_name
|
65
|
+
if @set_blank
|
66
|
+
''
|
67
|
+
else
|
68
|
+
Faker::Name.middle_name
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def define_suffix
|
73
|
+
if @set_blank
|
74
|
+
''
|
75
|
+
else
|
76
|
+
Faker::Name.suffix
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def define_prefix
|
81
|
+
if @set_blank
|
82
|
+
''
|
83
|
+
else
|
84
|
+
Faker::Name.prefix
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def define_degree(**init_args)
|
89
|
+
if @set_blank
|
90
|
+
''
|
91
|
+
elsif !init_args[:degree].nil?
|
92
|
+
degree_choices = Helper.get_array(init_args[:degree])
|
93
|
+
degree_choices.sample unless degree_choices.empty?
|
94
|
+
else
|
95
|
+
degrees_from_file
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def degrees_from_file
|
100
|
+
degrees = Psych.load_file(@degree_data_file)
|
101
|
+
degrees.nil? ? '' : degrees.sample
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Generates a fake phone number
|
5
|
+
class PhoneNumber
|
6
|
+
attr_accessor :number,
|
7
|
+
:country_code,
|
8
|
+
:area_code,
|
9
|
+
:exchange_code,
|
10
|
+
:subscriber_number,
|
11
|
+
:use_code,
|
12
|
+
:equipment_type
|
13
|
+
|
14
|
+
def initialize(**init_args)
|
15
|
+
# Public: Initializes a home phone number. Pass in hash of different parameters, currently this includes:
|
16
|
+
# blank - An integer representing the % of times phone number components should be blank.
|
17
|
+
# use_code_data_file - YAML file containing use codes to randomly choose from. If not specified then values from
|
18
|
+
# {tele_use_code.yml}[https://github.com/austinmoody/healthcare_phony/blob/main/lib/healthcare_phony/data_files/tele_use_code.yml] are used.
|
19
|
+
# equipment_type_data_file - YAML file containing equipment type codes to randomly choose from. If not specified
|
20
|
+
# then values {tele_equipment_type}[https://github.com/austinmoody/healthcare_phony/blob/main/lib/healthcare_phony/data_files/tele_equipment_type.yml] will be used.
|
21
|
+
@set_blank = !init_args[:blank].nil? && Helper.random_with_blank('X', init_args[:blank]) == ''
|
22
|
+
@use_code_data_file = init_args[:use_code_data_file]
|
23
|
+
@equipment_type_data_file = init_args[:equipment_type_data_file]
|
24
|
+
define_country_code
|
25
|
+
define_area_code
|
26
|
+
define_exchange_code
|
27
|
+
define_subscriber_number
|
28
|
+
define_use_code
|
29
|
+
define_equipment_type
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# Private: Boolean set during initialization if Address components should be set to blank.
|
35
|
+
attr_accessor :set_blank
|
36
|
+
|
37
|
+
# Private: Location of data file of use codes
|
38
|
+
attr_accessor :use_code_data_file
|
39
|
+
|
40
|
+
# Private: Location of data file of equipment types
|
41
|
+
attr_accessor :equipment_type_data_file
|
42
|
+
|
43
|
+
def define_country_code
|
44
|
+
@country_code = Faker::PhoneNumber.country_code
|
45
|
+
@country_code = '' unless @set_blank == false
|
46
|
+
end
|
47
|
+
|
48
|
+
def define_area_code
|
49
|
+
@area_code = Faker::PhoneNumber.area_code
|
50
|
+
@area_code = '' unless @set_blank == false
|
51
|
+
end
|
52
|
+
|
53
|
+
def define_exchange_code
|
54
|
+
@exchange_code = Faker::PhoneNumber.exchange_code
|
55
|
+
@exchange_code = '' unless @set_blank == false
|
56
|
+
end
|
57
|
+
|
58
|
+
def define_subscriber_number
|
59
|
+
@subscriber_number = Faker::PhoneNumber.subscriber_number
|
60
|
+
@subscriber_number = '' unless @set_blank == false
|
61
|
+
end
|
62
|
+
|
63
|
+
def define_use_code
|
64
|
+
data_file = if !@use_code_data_file.nil?
|
65
|
+
@use_code_data_file
|
66
|
+
else
|
67
|
+
"#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/tele_use_code.yml"
|
68
|
+
end
|
69
|
+
use_codes = Psych.load_file(data_file)
|
70
|
+
@use_code = use_codes.nil? ? '' : use_codes.sample
|
71
|
+
@use_code = '' unless @set_blank == false
|
72
|
+
end
|
73
|
+
|
74
|
+
def define_equipment_type
|
75
|
+
data_file = if !@equipment_type_data_file.nil?
|
76
|
+
@equipment_type_data_file
|
77
|
+
else
|
78
|
+
"#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/tele_equipment_type.yml"
|
79
|
+
end
|
80
|
+
equipment_types = Psych.load_file(data_file)
|
81
|
+
@equipment_type = equipment_types.nil? ? '' : equipment_types.sample
|
82
|
+
@equipment_type = '' unless @set_blank == false
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Creates a Race by randomly choosing values from a YAML file.
|
5
|
+
class Race
|
6
|
+
attr_accessor :code,
|
7
|
+
:description,
|
8
|
+
:coding_system
|
9
|
+
# Public: Initializes an Address. Pass in hash of different parameters, currently this includes:
|
10
|
+
# race_data_file - Location of YAML file containing a list of potential degrees to choose from. By default the
|
11
|
+
# gem supplied file will be used. The default file {race.yml}[https://github.com/austinmoody/healthcare_phony/blob/main/lib/healthcare_phony/data_files/race.yml].
|
12
|
+
def initialize(**init_args)
|
13
|
+
# TODO: allow a way for caller to pass in % blank
|
14
|
+
# TODO: set coding system
|
15
|
+
|
16
|
+
data_file = if !init_args[:race_data_file].nil?
|
17
|
+
init_args[:race_data_file]
|
18
|
+
else
|
19
|
+
"#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/race.yml"
|
20
|
+
end
|
21
|
+
race_array = Psych.load_file(data_file)
|
22
|
+
|
23
|
+
random_race = race_array.nil? ? '' : race_array.sample
|
24
|
+
|
25
|
+
@code = random_race[:code]
|
26
|
+
@description = random_race[:description]
|
27
|
+
@coding_system = ''
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Creates a Religion object for a Patient by randomly choosing a value from a YAML file.
|
5
|
+
class Religion
|
6
|
+
attr_accessor :code,
|
7
|
+
:description,
|
8
|
+
:coding_system
|
9
|
+
|
10
|
+
# Public: Initializes an EthnicGroup. Pass in hash of different parameters, currently this includes:
|
11
|
+
# religion_data_file - YAML file containing religion information to randomly choose from if different options than
|
12
|
+
# those that come with gem are desired. See {religion.yml}[https://github.com/austinmoody/healthcare_phony/blob/main/lib/healthcare_phony/data_files/religion.yml]
|
13
|
+
# for default values.
|
14
|
+
def initialize(**init_args)
|
15
|
+
# TODO: allow a way for caller to pass in a custom set of codes to choose from
|
16
|
+
# TODO: allow a way for caller to pass in % blank
|
17
|
+
|
18
|
+
data_file = if !init_args[:religion_data_file].nil?
|
19
|
+
init_args[:religion_data_file]
|
20
|
+
else
|
21
|
+
"#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/religion.yml"
|
22
|
+
end
|
23
|
+
r_array = Psych.load_file(data_file)
|
24
|
+
|
25
|
+
random_religion = r_array.nil? ? '' : r_array.sample
|
26
|
+
|
27
|
+
@code = random_religion[:code]
|
28
|
+
@description = random_religion[:description]
|
29
|
+
@coding_system = random_religion[:coding_system]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
MSH|^~\&|<%= hl7.sending_application %>|<%= hl7.sending_facility %>|<%= hl7.receiving_application %>|<%= hl7.receiving_facility %>|<%= hl7.message_datetime.to_hl7datetime() %>||<%= hl7.message_type %>^<%= hl7.trigger_event %>|<%= hl7.message_control_id %>|<%= hl7.processing_id %>|<%= hl7.version %>
|
2
|
+
EVN|<%= hl7.trigger_event %>|<%= hl7.message_datetime.to_hl7datetime() %>
|
3
|
+
PID|||<%= patient.medical_record_number.identifier %>||<%= patient.names[0].family_name %>^<%= patient.names[0].given_name %>^<%= patient.names[0].middle_name%>^||<%= patient.date_of_birth.to_hl7date %>|<%= patient.gender.code %>||<%= patient.races[0].code %>|<%= patient.addresses[0].address_line1 %>^<%= patient.addresses[0].address_line2 %>^<%= patient.addresses[0].city %>^<%= patient.addresses[0].state %>^<%= patient.addresses[0].postal_code %>||(<%= patient.home_phone.area_code %>)<%= patient.home_phone.exchange_code %>-<%= patient.home_phone.subscriber_number %>~(<%= patient.cell_phone.area_code %>)<%= patient.cell_phone.exchange_code %>-<%= patient.cell_phone.subscriber_number %>|(<%= patient.work_phone.area_code %>)<%= patient.work_phone.exchange_code %>-<%= patient.work_phone.subscriber_number %>||||<%= patient.account_number.identifier %>|<%= patient.ssn %>
|
4
|
+
PV1||<%= visit.patient_class %>
|
5
|
+
|
6
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Creates admission information for a patient visit.
|
5
|
+
class VisitAdmission
|
6
|
+
attr_accessor :type, :datetime, :source, :reason
|
7
|
+
|
8
|
+
# Public: Initializes an EthnicGroup. Pass in hash of different parameters, currently this includes:
|
9
|
+
# admit_source - Array of Admit Source codes (PV1.14) to randomly choose from. Specified as comma separated
|
10
|
+
# String or Ruby array. Otherwise default HL7 v2.5.1 Table 0023 values are used.
|
11
|
+
# admission_type - Array of Admission Type (PV1.4) to randomly choose from. Specified as comma separated String or
|
12
|
+
# Ruby array. Otherwise default HL7 v2.5.1. Table 0007 values are used.
|
13
|
+
# admit_reason - Array of values to use as Admit Reason (PV2.3) to randomly choose from. Specified as comma
|
14
|
+
# separated String or Ruby array. Otherwise a string of data is generated with Faker::Lorem.sentence
|
15
|
+
def initialize(**init_args)
|
16
|
+
@source = define_source(init_args)
|
17
|
+
@type = define_type(init_args)
|
18
|
+
@datetime = Faker::Time.backward(days: Faker::Number.number(digits: 1))
|
19
|
+
@reason = define_reason(init_args)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def define_source(**init_args)
|
25
|
+
standard_admit_source = '123456789'.split('')
|
26
|
+
as_choices = Helper.get_array(init_args[:admit_source])
|
27
|
+
if !as_choices.empty?
|
28
|
+
as_choices.sample
|
29
|
+
else
|
30
|
+
standard_admit_source.sample
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def define_type(**init_args)
|
35
|
+
standard_admission_types = %w[A C E L N R U]
|
36
|
+
at_choices = Helper.get_array(init_args[:admission_type])
|
37
|
+
if !at_choices.empty?
|
38
|
+
at_choices.sample
|
39
|
+
else
|
40
|
+
standard_admission_types.sample
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_reason(**init_args)
|
45
|
+
ar_choices = Helper.get_array(init_args[:admit_reason])
|
46
|
+
if !ar_choices.empty?
|
47
|
+
ar_choices.sample
|
48
|
+
else
|
49
|
+
Faker::Lorem.sentence
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Creates discharge information for a patient visit.
|
5
|
+
class VisitDischarge
|
6
|
+
attr_accessor :disposition,
|
7
|
+
:location,
|
8
|
+
:datetime
|
9
|
+
|
10
|
+
# Public: Initializes an EthnicGroup. Pass in hash of different parameters, currently this includes:
|
11
|
+
# event_type - The HL7 trigger event type that this visit is associated with.
|
12
|
+
# discharge_disposition - Array of discharge disposition codes (PV1.36) to randomly choose from. Specified as comma
|
13
|
+
# separated String or Ruby array. Otherwise default HL7 v2.5.1 Table 0112 values are used.
|
14
|
+
# discharge_location - Array of discharge locations to randomly choose from. Specified as comma separated String or
|
15
|
+
# Ruby array. Otherwise a string of data is generated with Faker::Lorem.sentence
|
16
|
+
# admit_datetime - The admit date/time associated with this visit. If not specified the current date/time is used.
|
17
|
+
def initialize(**init_args)
|
18
|
+
if init_args[:event_type] == 'A03'
|
19
|
+
@disposition = define_discharge_disposition(init_args)
|
20
|
+
@location = define_discharge_location(init_args)
|
21
|
+
@datetime = define_discharge_datetime(init_args)
|
22
|
+
else
|
23
|
+
@disposition = ''
|
24
|
+
@location = ''
|
25
|
+
@datetime = nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def define_discharge_disposition(**init_args)
|
32
|
+
dd_choices = Helper.get_array(init_args[:discharge_disposition])
|
33
|
+
if init_args[:event_type] != 'A03'
|
34
|
+
''
|
35
|
+
elsif !dd_choices.empty?
|
36
|
+
dd_choices.sample
|
37
|
+
else
|
38
|
+
data_file = "#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/discharge_disposition.yml"
|
39
|
+
file_based_choices = Psych.load_file(data_file)
|
40
|
+
file_based_choices.nil? ? '' : file_based_choices.sample
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_discharge_location(**init_args)
|
45
|
+
dl_choices = Helper.get_array(init_args[:discharge_location])
|
46
|
+
if !dl_choices.empty?
|
47
|
+
dl_choices.sample
|
48
|
+
else
|
49
|
+
Faker::Lorem.sentence
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def define_discharge_datetime(**init_args)
|
54
|
+
from_datetime = if init_args[:admit_datetime].nil?
|
55
|
+
Time.now
|
56
|
+
else
|
57
|
+
init_args[:admit_datetime]
|
58
|
+
end
|
59
|
+
Faker::Time.between(from: from_datetime, to: DateTime.now)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Creates providers associated with visit. Attending (PV1.7), Referring (PV1.8), Consulting (PV1.9), and
|
5
|
+
# Admitting (PV1.17)
|
6
|
+
class VisitDoctors
|
7
|
+
attr_accessor :attending,
|
8
|
+
:referring,
|
9
|
+
:consulting,
|
10
|
+
:admitting
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@attending = Doctor.new
|
14
|
+
@referring = Doctor.new
|
15
|
+
@consulting = Doctor.new
|
16
|
+
@admitting = Doctor.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HealthcarePhony
|
4
|
+
# Public: Generates various location information associated with a visit.
|
5
|
+
class VisitLocation
|
6
|
+
attr_accessor :point_of_care,
|
7
|
+
:room,
|
8
|
+
:bed,
|
9
|
+
:facility,
|
10
|
+
:status,
|
11
|
+
:type,
|
12
|
+
:building,
|
13
|
+
:floor,
|
14
|
+
:description
|
15
|
+
|
16
|
+
# Public: Initializes an Address. Pass in hash of different parameters, currently this includes:
|
17
|
+
# point_of_care - Array of potential points of care (PV1.3.1) to randomly choose from. Specified as comma separated
|
18
|
+
# String or Ruby array. Otherwise random example generated.
|
19
|
+
# room - Array of potential rooms (PV1.3.2) to randomly choose from. Specified as comma separated String or Ruby
|
20
|
+
# array. Otherwise a random 3 digit number is generated.
|
21
|
+
# bed - Array of potential beds (PV1.3.3) to randomly choose from. Specified as comma separated String or Ruby
|
22
|
+
# array. Otherwise a 3 character sequence is created.
|
23
|
+
# facility - Array of potential facility names (PV1.3.4) to randomly choose from. Specified as comma separated
|
24
|
+
# String or Ruby array. Otherwise a random string is generated.
|
25
|
+
# location_status - Array of potential location statuses (PV1.3.5) to randomly choose from. Specified as comma
|
26
|
+
# separated String or Ruby array. Otherwise a random uppercase letter is generated to use.
|
27
|
+
# person_location_type - Array of potential person location types (PV1.3.6) to randomly choose from. Specified as
|
28
|
+
# comma separated String or Ruby array. Otherwise values from HL7 v2.5.1 Table 0305 will be used.
|
29
|
+
# building - Array of potential building information (PV1.3.7) to randomly choose from. Specified as a comma
|
30
|
+
# separated String or Ruby array. Otherwise a random digit 1-9 is used.
|
31
|
+
# floor - Array of potential floor information (PV1.3.8) to randomly choose from. Specified as a comma separated
|
32
|
+
# String or Ruby array. Otherwise a random 2 digit number is used.
|
33
|
+
# location_description - Array of potential location descriptions (PV1.3.9) to randomly choose from. Specified as
|
34
|
+
# a comma separated String or Ruby array. Otherwise a random string is generated.
|
35
|
+
def initialize(**init_args)
|
36
|
+
@point_of_care = define_point_of_care(init_args)
|
37
|
+
@room = define_room(init_args)
|
38
|
+
@bed = define_bed(init_args)
|
39
|
+
@facility = define_facility(init_args)
|
40
|
+
@status = define_status(init_args)
|
41
|
+
@type = define_type(init_args)
|
42
|
+
@building = define_building(init_args)
|
43
|
+
@floor = define_floor(init_args)
|
44
|
+
@description = define_description(init_args)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def define_point_of_care(**init_args)
|
50
|
+
poc_choices = Helper.get_array(init_args[:point_of_care])
|
51
|
+
!poc_choices.empty? ? poc_choices.sample : /[A-Z]{10}/.random_example
|
52
|
+
end
|
53
|
+
|
54
|
+
def define_room(**init_args)
|
55
|
+
room_choices = Helper.get_array(init_args[:room])
|
56
|
+
if !room_choices.empty?
|
57
|
+
room_choices.sample
|
58
|
+
else
|
59
|
+
Faker::Alphanumeric.alphanumeric(number: 3, min_alpha: 0, min_numeric: 3)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def define_bed(**init_args)
|
64
|
+
bed_choices = Helper.get_array(init_args[:bed])
|
65
|
+
if !bed_choices.empty?
|
66
|
+
bed_choices.sample
|
67
|
+
else
|
68
|
+
Faker::Alphanumeric.alphanumeric(number: 3, min_alpha: 1, min_numeric: 2)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def define_facility(**init_args)
|
73
|
+
fac_choices = Helper.get_array(init_args[:facility])
|
74
|
+
!fac_choices.empty? ? fac_choices.sample : Faker::Lorem.sentence
|
75
|
+
end
|
76
|
+
|
77
|
+
def define_status(**init_args)
|
78
|
+
ls_choices = Helper.get_array(init_args[:location_status])
|
79
|
+
!ls_choices.empty? ? ls_choices.sample : /[A-Z]/.random_example
|
80
|
+
end
|
81
|
+
|
82
|
+
def define_type(**init_args)
|
83
|
+
plt_choices = Helper.get_array(init_args[:person_location_type])
|
84
|
+
!plt_choices.empty? ? plt_choices.sample : %w[C D H N O P S].sample
|
85
|
+
end
|
86
|
+
|
87
|
+
def define_building(**init_args)
|
88
|
+
building_choices = Helper.get_array(init_args[:building])
|
89
|
+
!building_choices.empty? ? building_choices.sample : /[1-9]/.random_example
|
90
|
+
end
|
91
|
+
|
92
|
+
def define_floor(**init_args)
|
93
|
+
floor_choices = Helper.get_array(init_args[:floor])
|
94
|
+
!floor_choices.empty? ? floor_choices.sample : /[0-9]{2}/.random_example
|
95
|
+
end
|
96
|
+
|
97
|
+
def define_description(**init_args)
|
98
|
+
ld_choices = Helper.get_array(init_args[:location_description])
|
99
|
+
if !ld_choices.empty?
|
100
|
+
ld_choices.sample
|
101
|
+
else
|
102
|
+
Faker::Lorem.sentence
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|