healthcare_phony 0.6.0 → 0.7s.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/gem-push.yml +42 -42
  3. data/.github/workflows/ruby.yml +33 -33
  4. data/.gitignore +63 -63
  5. data/.rdoc_options +23 -23
  6. data/.rubocop.yml +10 -10
  7. data/CODE_OF_CONDUCT.md +84 -84
  8. data/Gemfile +8 -8
  9. data/LICENSE.txt +21 -21
  10. data/README.md +365 -351
  11. data/Rakefile +12 -12
  12. data/VERSION +1 -1
  13. data/examples/bigger_csv_example.erb +4 -0
  14. data/examples/phony_adt_sender.rb +111 -111
  15. data/examples/phony_adt_sender.yml +12 -10
  16. data/examples/phony_csv.yml +5 -0
  17. data/healthcare_phony.gemspec +36 -36
  18. data/lib/healthcare_phony.rb +139 -113
  19. data/lib/healthcare_phony/address.rb +89 -89
  20. data/lib/healthcare_phony/assigning_authority.rb +6 -6
  21. data/lib/healthcare_phony/cell_phone_number.rb +20 -20
  22. data/lib/healthcare_phony/data_files/address_type.yml +7 -7
  23. data/lib/healthcare_phony/data_files/adt_event_types.yml +59 -59
  24. data/lib/healthcare_phony/data_files/degree.yml +9 -9
  25. data/lib/healthcare_phony/data_files/discharge_disposition.yml +15 -15
  26. data/lib/healthcare_phony/data_files/ethnic_group.yml +9 -9
  27. data/lib/healthcare_phony/data_files/hl7_message_types.yml +4 -4
  28. data/lib/healthcare_phony/data_files/language.yml +7 -7
  29. data/lib/healthcare_phony/data_files/marital_status.yml +49 -49
  30. data/lib/healthcare_phony/data_files/mdm_event_types.yml +12 -12
  31. data/lib/healthcare_phony/data_files/oru_event_types.yml +2 -2
  32. data/lib/healthcare_phony/data_files/race.yml +13 -13
  33. data/lib/healthcare_phony/data_files/religion.yml +250 -250
  34. data/lib/healthcare_phony/data_files/tele_equipment_type.yml +10 -10
  35. data/lib/healthcare_phony/data_files/tele_use_code.yml +9 -9
  36. data/lib/healthcare_phony/diagnosis.rb +12 -12
  37. data/lib/healthcare_phony/doctor.rb +26 -26
  38. data/lib/healthcare_phony/email.rb +25 -25
  39. data/lib/healthcare_phony/ethnic_group.rb +34 -34
  40. data/lib/healthcare_phony/gender.rb +22 -22
  41. data/lib/healthcare_phony/helper.rb +72 -72
  42. data/lib/healthcare_phony/hl7_message.rb +159 -159
  43. data/lib/healthcare_phony/home_phone_number.rb +20 -20
  44. data/lib/healthcare_phony/identifier.rb +23 -23
  45. data/lib/healthcare_phony/insurance.rb +6 -6
  46. data/lib/healthcare_phony/language.rb +30 -30
  47. data/lib/healthcare_phony/marital_status.rb +31 -31
  48. data/lib/healthcare_phony/patient.rb +114 -114
  49. data/lib/healthcare_phony/patient_visit.rb +97 -97
  50. data/lib/healthcare_phony/person_name.rb +104 -104
  51. data/lib/healthcare_phony/phone_number.rb +85 -85
  52. data/lib/healthcare_phony/procedure.rb +6 -6
  53. data/lib/healthcare_phony/race.rb +31 -31
  54. data/lib/healthcare_phony/religion.rb +32 -32
  55. data/lib/healthcare_phony/templates/csv_example.erb +3 -3
  56. data/lib/healthcare_phony/version.rb +5 -5
  57. data/lib/healthcare_phony/visit_admission.rb +53 -53
  58. data/lib/healthcare_phony/visit_discharge.rb +62 -62
  59. data/lib/healthcare_phony/visit_doctors.rb +19 -19
  60. data/lib/healthcare_phony/visit_location.rb +106 -106
  61. data/lib/healthcare_phony/visit_type.rb +8 -8
  62. data/lib/healthcare_phony/work_phone_number.rb +20 -20
  63. metadata +9 -7
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- module HealthcarePhony
4
- class Procedure
5
- end
6
- end
1
+ # frozen_string_literal: true
2
+
3
+ module HealthcarePhony
4
+ class Procedure
5
+ end
6
+ end
@@ -1,31 +1,31 @@
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
-
10
- # Public: Initializes an Address. Pass in hash of different parameters, currently this includes:
11
- # race_data_file - Location of YAML file containing a list of potential degrees to choose from. By default the
12
- # 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].
13
- def initialize(init_args = {})
14
- # TODO: allow a way for caller to pass in % blank
15
- # TODO: set coding system
16
-
17
- data_file = if !init_args[:race_data_file].nil?
18
- init_args[:race_data_file]
19
- else
20
- "#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/race.yml"
21
- end
22
- race_array = Psych.load_file(data_file)
23
-
24
- random_race = race_array.nil? ? '' : race_array.sample
25
-
26
- @code = random_race[:code]
27
- @description = random_race[:description]
28
- @coding_system = ''
29
- end
30
- end
31
- end
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
+
10
+ # Public: Initializes an Address. Pass in hash of different parameters, currently this includes:
11
+ # race_data_file - Location of YAML file containing a list of potential degrees to choose from. By default the
12
+ # 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].
13
+ def initialize(init_args = {})
14
+ # TODO: allow a way for caller to pass in % blank
15
+ # TODO: set coding system
16
+
17
+ data_file = if !init_args[:race_data_file].nil?
18
+ init_args[:race_data_file]
19
+ else
20
+ "#{::File.expand_path(::File.join("..", "data_files"), __FILE__)}/race.yml"
21
+ end
22
+ race_array = Psych.load_file(data_file)
23
+
24
+ random_race = race_array.nil? ? '' : race_array.sample
25
+
26
+ @code = random_race[:code]
27
+ @description = random_race[:description]
28
+ @coding_system = ''
29
+ end
30
+ end
31
+ end
@@ -1,32 +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
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
@@ -1,4 +1,4 @@
1
- <% if write_header %>
2
- MRN,FIRST_NAME,LAST_NAME
3
- <% end %>
1
+ <% if write_header %>
2
+ MRN,FIRST_NAME,LAST_NAME
3
+ <% end %>
4
4
  "<%= patient.medical_record_number.identifier %>","<%= patient.names[0].given_name %>","<%= patient.names[0].family_name %>"
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module HealthcarePhony
4
- VERSION = File.read(File.expand_path('../../VERSION', __dir__)).strip.freeze
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module HealthcarePhony
4
+ VERSION = File.read(File.expand_path('../../VERSION', __dir__)).strip.freeze
5
+ end
@@ -1,53 +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
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
@@ -1,62 +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
- # visit_type - VisitType of this patient's visit
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[:visit_type] == HealthcarePhony::VisitType::DISCHARGE # 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[:visit_type] != HealthcarePhony::VisitType::DISCHARGE # 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
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
+ # visit_type - VisitType of this patient's visit
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[:visit_type] == HealthcarePhony::VisitType::DISCHARGE # 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[:visit_type] != HealthcarePhony::VisitType::DISCHARGE # 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
@@ -1,19 +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(init_args = {})
13
- @attending = Doctor.new(init_args)
14
- @referring = Doctor.new(init_args)
15
- @consulting = Doctor.new(init_args)
16
- @admitting = Doctor.new(init_args)
17
- end
18
- end
19
- end
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(init_args = {})
13
+ @attending = Doctor.new(init_args)
14
+ @referring = Doctor.new(init_args)
15
+ @consulting = Doctor.new(init_args)
16
+ @admitting = Doctor.new(init_args)
17
+ end
18
+ end
19
+ end
@@ -1,106 +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
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