Last active
August 23, 2016 23:39
-
-
Save mradmacher/1e8846e2c82c1ce3ba1c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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