Skip to content

Instantly share code, notes, and snippets.

@mradmacher
Last active August 23, 2016 23:39
Show Gist options
  • Save mradmacher/1e8846e2c82c1ce3ba1c to your computer and use it in GitHub Desktop.
Save mradmacher/1e8846e2c82c1ce3ba1c to your computer and use it in GitHub Desktop.
require 'socket'
require 'date'
require 'securerandom'
host = '127.0.0.1'
port = 2575
def send_messages(host, port, facilities, count)
names = ['Swaniawski Lavonne', 'Blick Melyssa', 'Schiller Dorothea', 'Lemke Malinda', 'Fahey Margot', 'Fritsch Muhammad', 'Connelly Elena', 'Stiedemann Declan', 'Leffler Logan', 'Hermiston Theodora', 'Koelpin Edwardo', 'Walter Jaren', 'Schuster Delaney', 'Lubowitz Melisa', 'Langosh Murl', 'Mraz Marina', 'Hamill Ardella', 'Gerhold Tabitha', 'Schaden Enola', 'Farrell Mohammed', 'Kassulke Bobby', 'Crist Kurtis', 'Heller Alexys', 'McKenzie Eloy', 'Nikolaus Gianni', 'Littel Rebecca', 'Schuster Lucy', 'Mayer Zella', 'Reilly Phoebe', 'Auer Colton', 'Hessel Emerson', 'Schuppe Jordan', 'Goodwin Paolo', 'King Guy', 'Heathcote Pietro', 'Spencer Laurence', 'Heathcote Selina', 'Brown Reginald', 'Quitzon Orpha', 'Howe Otho', 'Hansen Desiree', 'Feil Marley', 'Casper Bryana', 'Schmeler Royce', 'Auer Enrique', 'Hilll Liliana', 'Kiehn Lisandro', 'Eichmann Jerrold', 'Wuckert Eloisa', 'Schimmel Lucius', 'Koch Leonie', 'Kris Amya', 'Thompson Davon', 'Lebsack Tyrell', 'Waelchi Jakayla', 'Monahan Bryana', 'Schuster Wilhelm', 'Swift Euna', 'Rath Ernest', 'Mosciski Paolo', 'Hettinger Jackeline', 'Carroll Dennis', 'Schaden Daija', 'Cartwright Marco', 'Hoeger Hester', 'Collier Mozelle', 'Lang Cecil', 'Schumm Durward', 'Vandervort Ruth', 'Welch Camille', 'Jenkins Sterling', 'Hickle Simeon', 'Predovic Adelle', 'Beatty Moises', 'Skiles Kylie', 'Stokes Sharon', 'Kautzer Finn', 'Macejkovic Florine', 'Dietrich Kevon', 'Hintz Shannon', 'Ward Cindy', 'Schumm Guillermo', 'Hammes Effie', 'Ondricka Ward', 'Eichmann Dawn', 'McGlynn Connor', 'Senger Janick', 'Jenkins Darrick', 'Rice Kris', 'Ortiz Elsa', 'Kemmer Burdette', 'Stiedemann Hermann', 'Corwin Marcelo', 'Goldner Nelda', 'Grimes Ford', 'Deckow Ashlynn', 'Abbott Barry', 'Huel Bernard', 'Schmidt Elroy', 'Kunde Lowell']
template = <<-HL7MSG
MSH|^~\&|NES|SENDING_FACILITY_HERE|TESTSYSTEM|TESTFACILITY|TIMESTAMP_HERE||MESSAGE_TYPE_HERE|MESSAGE_ID_HERE|P|2.3
EVN|A04|20010101000000|||^KOOPA^BOWSER
PID|1||MRN_HERE|0123456789^AA^^JP|PATIENT_NAME_HERE||PATIENT_DOB_HERE|M|||123 FAKE STREET^MARIO \T\ LUIGI BROS PLACE^TOADSTOOL KINGDOM^NES^A1B2C3^JP^HOME^^1234|1234|(555)PHONE_HERE^HOME^JP:555|||S|MSH|12345678|||||||0|||||N
NK1|1|PEACH^PRINCESS|SO|ANOTHER CASTLE^^TOADSTOOL KINGDOM^NES^^JP|(123)555-1234|(123)555-2345|NOK
NK1|2|TOADSTOOL^PRINCESS|SO|YET ANOTHER CASTLE^^TOADSTOOL KINGDOM^NES^^JP|(123)555-3456|(123)555-4567|EMC
PV1|1|O|ABCD^EFGH||||123456^DINO^YOSHI^^^^^^MSRM^CURRENT^^^NEIGHBOURHOOD DR NBR|^DOG^DUCKHUNT^^^^^^^CURRENT||CRD|||||||123456^DINO^YOSHI^^^^^^MSRM^CURRENT^^^NEIGHBOURHOOD DR NBR|AO|ENCOUNTER_ID_HERE|1|||||||||||||||||||MSH||A|||20010101000001
OBX|1|ST|Language||English||||||X
OBX|2|ST|Allergy||NO KNOWN DRUG ALLERGIES||||||X
OBX|3|ST|HEADER1||HEALTH HOME PATIENT||||||X
OBX|4|ST|HealthFirst_BL||HealthFirst BLHC||||||X
AL1|1||No Known Allergies^^^^^Multum|Unknown
ZAL||||AL
DG1|1|ICD9|780.52^Insomnia^ICD9|Insomnia|20130713|Behavioral Dx||||||||||||||||||||U
DG1|2|ICD9|V49.89^At risk for noncompliance^ICD9|At risk for noncompliance|20121227|Behavioral Dx||||||||||||||||||||U
DG1|3|ICD9|799.9^Diagnosis deferred^ICD9|Diagnosis deferred|20120607|Problem List||||||||||||||||||||U
DG1|4|ICD9|799.9^Deferred diagnosis on axis II^ICD9|Deferred diagnosis on axis II||Behavioral Dx||||||||||||||||||||U
DG1|5|ICD9|295.70^Schizoaffective disorder^ICD9|Schizoaffective disorder|20140108|Admit Dx||||||||||||||||||||U
DG1|6|ICD9|564.00^Constipation^ICD9|Constipation|20120613|Problem List||||||||||||||||||||U
DG1|7|ICD9|295.90^Schizophrenia^ICD9|Schizophrenia|20140320|Admit Dx||||||||||||||||||||U
DG1|8|ICD9|295.90^Schizophrenia^ICD9|Schizophrenia|20141031|Behavioral Dx||||||||||||||||||||U
ROL|1|AD|AT|789797^TEST^PIERRE^^^^^^ADELI&2.16.840.1.113883.3.31.2.2&ISO^^^^ADELI|20070101080000|20070101160000
ROL|2|AD|AT|565654^YOYO^JEAN^^^^^^ADELI&2.16.840.1.113883.3.31.2.2&ISO^^^^ADELI|20070101080000|20070101160000
ROL|3|AD|PP|565654^YOYO^JEAN^^^^^^ADELI&2.16.840.1.113883.3.31.2.2&ISO^^^^ADELI|20070101080000|20070101160000
IN1|1|PAR^PARENT||||LUIGI
IN1|2|FRI^FRIEND||||PRINCESS
ZEP|N
HL7MSG
s = TCPSocket.open(host, port)
count.times do
timestamp = Time.now.strftime('%Y%m%d%H%M%S')
message_id = SecureRandom.hex
message_type = 'ADT^A' + sprintf('%02d', (0..31).to_a.sample)
name = names.sample.split(' ').join('^')
dob = Date.new((1950..2000).to_a.sample, (1..12).to_a.sample, (1..28).to_a.sample).strftime('%Y%m%d')
mrn = name.bytes.reduce(:+).to_s
phone = "555#{mrn}#{mrn}"
encounter_id = timestamp
msg = template.
sub('TIMESTAMP_HERE', timestamp).
sub('MESSAGE_ID_HERE', message_id).
sub('PATIENT_NAME_HERE', name).
sub('PATIENT_DOB_HERE', dob).
sub('MRN_HERE', mrn).
sub('PHONE_HERE', phone).
sub('ENCOUNTER_ID_HERE', encounter_id).
sub('SENDING_FACILITY_HERE', facilities.sample).
sub('MESSAGE_TYPE_HERE', message_type).split("\n")
s.puts "\v" + msg.join("\r") + "\x1c\r"
p s.recv(1024)
sleep Random.new.rand(1..4)
end
s.close
end
facility_count = 3
message_count = 10
threads = facility_count.times.map do |i|
Thread.new { send_messages(host, port, ["Tester#{i}"], message_count) }
end
threads.each { |t| t.join }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment