public void CleanDatabase() { if (!StartCleaning) { Thread.Yield(); while (!StartCleaning) { Thread.Sleep(10000); } } try { OpenTestLogDb(); using (var gateway = new TcpClient(GatewayAddress, GatewayPort)) { using (var stream = gateway.GetStream()) { // Delete Rxs var RxList = GetTestLogRecords(RecordType.Prescription); foreach (var rx in RxList) { var RxToDelete = new MotPrescriptionRecord("Delete") { RxSys_RxNum = rx.Name }; RxToDelete.Write(stream); } // Delete Drugs var DrugList = GetTestLogRecords(RecordType.Drug); foreach (var drug in DrugList) { var DrugToDelete = new MotDrugRecord("Delete") { DrugID = drug.RecordId.ToString() }; DrugToDelete.Write(stream); } // Delete Patients var PatientList = GetTestLogRecords(RecordType.Patient); foreach (var patient in PatientList) { var PatientToDelete = new MotPatientRecord("Delete") { PatientID = patient.RecordId.ToString() }; PatientToDelete.Write(stream); } // Delete Facilities var FacilityList = GetTestLogRecords(RecordType.Facility); foreach (var facility in FacilityList) { var FacilityToDelete = new MotFacilityRecord("Delete") { LocationID = facility.RecordId.ToString() }; FacilityToDelete.Write(stream); } // Delete Prescribers var PrescriberList = GetTestLogRecords(RecordType.Prescriber); foreach (var prescriber in PrescriberList) { var PrescriberToDelete = new MotPrescriberRecord("Delete") { PrescriberID = prescriber.RecordId.ToString() }; PrescriberToDelete.Write(stream); } // Delete Stores if (!useLegacy) { var StoreList = GetTestLogRecords(RecordType.Store); foreach (var store in StoreList) { var StoreToDelete = new MotStoreRecord("Delete") { StoreID = store.RecordId.ToString() }; StoreToDelete.Write(stream); } } } } } catch (Exception ex) { Assert.Fail($"Failed to clean database: {ex.Message}"); } }
public void RandomDataCycle() { try { string StoreId = "1081"; OpenTestLogDb(); using (var gateway = new TcpClient(GatewayAddress, GatewayPort)) { using (var stream = gateway.GetStream()) { for (var s = 0; s < 3; s++) { if (!useLegacy) { var Store = new MotStoreRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, StoreID = Guid.NewGuid().ToString(), StoreName = $"{DateTime.Now.ToLongTimeString()}{RandomData.String()}", Address1 = RandomData.TrimString(), Address2 = RandomData.TrimString(), City = RandomData.TrimString(), State = "NH", Zipcode = $"{RandomData.Integer(0, 100000).ToString("D5")}-{RandomData.Integer(0, 100000).ToString("D4")}", DEANum = RandomData.ShortDEA(), Phone = RandomData.USPhoneNumber(), Fax = RandomData.USPhoneNumber() }; Store.Write(stream); WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = new Guid(Store.StoreID).ToString(), RecordType = RecordType.Store, Name = Store.StoreName, TimeStamp = DateTime.UtcNow }); StoreId = Store.StoreID; } for (var i = 0; i < MaxLoops; i++) { var Facility = new MotFacilityRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, LocationID = Guid.NewGuid().ToString(), StoreID = StoreId, LocationName = RandomData.String(), Address1 = RandomData.TrimString(), Address2 = RandomData.TrimString(), City = RandomData.TrimString(), State = "NH", Zipcode = $"0{RandomData.Integer(1000, 10000)}", Phone = RandomData.USPhoneNumber(), CycleDays = RandomData.Integer(1, 32), CycleType = RandomData.Bit(), Comments = RandomData.String(2048) }; Facility.Write(stream); WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = new Guid(Facility.LocationID).ToString(), RecordType = RecordType.Facility, Name = Facility.LocationName, TimeStamp = DateTime.UtcNow }); var Prescriber = new MotPrescriberRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, RxSys_DocID = Guid.NewGuid().ToString(), LastName = RandomData.TrimString(), FirstName = RandomData.TrimString(), MiddleInitial = RandomData.TrimString(1), Address1 = RandomData.TrimString(), Address2 = RandomData.TrimString(), City = RandomData.TrimString(), State = "NH", Zipcode = $"0{RandomData.Integer(1000, 10000)}", DEA_ID = RandomData.ShortDEA(), TPID = RandomData.Integer(100000).ToString(), Phone = RandomData.USPhoneNumber(), Comments = RandomData.String(2048), Fax = RandomData.USPhoneNumber() }; Prescriber.Write(stream); WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = new Guid(Prescriber.PrescriberID).ToString(), RecordType = RecordType.Prescriber, Name = $"{Prescriber.LastName}, {Prescriber.FirstName}, {Prescriber.MiddleInitial}", TimeStamp = DateTime.UtcNow }); for (var f = 0; f < MaxLoops; f++) { var rxId = Guid.NewGuid().ToString(); var drugId = Guid.NewGuid().ToString(); var Patient = new MotPatientRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, PatientID = Guid.NewGuid().ToString(), LocationID = Facility.LocationID, PrimaryPrescriberID = Prescriber.PrescriberID, LastName = RandomData.TrimString(), FirstName = RandomData.TrimString(), MiddleInitial = RandomData.TrimString(1), Address1 = RandomData.TrimString(), Address2 = RandomData.TrimString(), City = RandomData.TrimString(), State = "NH", Zipcode = $"0{RandomData.Integer(1000, 10000)}", Gender = RandomData.TrimString(1), CycleDate = RandomData.Date(DateTime.Now.Year), CycleDays = RandomData.Integer(0, 32), CycleType = RandomData.Bit(), AdmitDate = RandomData.Date(), ChartOnly = RandomData.Bit().ToString(), Phone1 = RandomData.USPhoneNumber(), Phone2 = RandomData.USPhoneNumber(), WorkPhone = RandomData.USPhoneNumber(), DOB = RandomData.Date(), SSN = RandomData.SSN(), Allergies = RandomData.String(1024), Diet = RandomData.String(1024), DxNotes = RandomData.String(1024), InsName = RandomData.String(), InsPNo = RandomData.Integer().ToString(), AltInsName = RandomData.String(), AltInsPNo = RandomData.Integer().ToString() }; Patient.Write(stream); WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = new Guid(Patient.PatientID).ToString(), RecordType = RecordType.Patient, Name = $"{Patient.LastName}, {Patient.FirstName}, {Patient.MiddleInitial}", TimeStamp = DateTime.UtcNow }); for (var rx = 0; rx < 8; rx++) { var Drug = new MotDrugRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, DrugID = Guid.NewGuid().ToString(), DrugName = RandomData.TrimString(), NDCNum = RandomData.TrimString().ToUpper(), ProductCode = RandomData.TrimString().ToUpper(), LabelCode = RandomData.TrimString().ToUpper(), TradeName = RandomData.TrimString(), DrugSchedule = RandomData.Integer(2, 8), Strength = RandomData.Double(100), Route = RandomData.TrimString(), RxOTC = RandomData.Bit() == 1 ? "R" : "O", VisualDescription = $"{RandomData.TrimString(3)}/{RandomData.TrimString(3)}/{RandomData.TrimString(3)}", DoseForm = RandomData.TrimString(), DefaultIsolate = RandomData.Bit(), ShortName = RandomData.TrimString(), ConsultMsg = RandomData.String() }; WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = new Guid(Drug.DrugID).ToString(), RecordType = RecordType.Drug, Name = $"{Drug.TradeName}", TimeStamp = DateTime.UtcNow }); Drug.Write(stream); var Rx = new MotPrescriptionRecord("Add") { AutoTruncate = AutoTruncate, logRecords = true, UseAscii = UseAscii, PatientID = Patient.PatientID, PrescriberID = Prescriber.PrescriberID, DrugID = Drug.DrugID, RxSys_RxNum = RandomData.Integer(1, 1000000000).ToString(), RxStartDate = RandomData.Date(DateTime.Now.Year), RxStopDate = RandomData.Date(DateTime.Now.Year), DoseScheduleName = RandomData.TrimString().ToUpper(), QtyPerDose = RandomData.Double(10), QtyDispensed = RandomData.Integer(1, 120), RxType = RandomData.Integer(1, 21), DoseTimesQtys = RandomData.DoseTimes(RandomData.Integer(1, 25)), Isolate = RandomData.Bit().ToString(), Refills = RandomData.Integer(1, 100), Sig = RandomData.String() }; WriteTestLogRecord(new TestRecord() { Id = Guid.NewGuid().ToString(), RecordId = Guid.NewGuid().ToString(), RecordType = RecordType.Prescription, Name = $"{Rx.RxSys_RxNum}", TimeStamp = DateTime.UtcNow }); Rx.Write(stream); } } } } } } CloseTestLogDb(); } catch (Exception ex) { Assert.Fail(ex.Message); } finally { StartCleaning = true; } }
// Missing DEA for Pharmacy and Prescribers // NDC-9 with the Manufacturer a short name public void Go() { try { var workingData = Data.Split('\n'); var writeQueue = new MotWriteQueue { SendEof = false, // Has to be off so we don't lose the socket. DebugMode = DebugMode }; string lastPatId = string.Empty; foreach (var line in workingData) { switch (line.Substring(0, 1)) { case "P": var s1 = line.Substring(1); var f1 = s1.Split(','); var store = new MotStoreRecord("Add", AutoTruncate) { LocalWriteQueue = writeQueue, QueueWrites = true, StoreID = f1[0].Replace(" ", ""), StoreName = f1[0], Address1 = f1[1], Address2 = f1[2], City = f1[3], Zipcode = f1[4], Phone = f1[5] }; store.AddToQueue(); break; case "F": var s2 = line.Substring(1); var f2 = s2.Split(','); var patient = new MotPatientRecord("Add", AutoTruncate) { LocalWriteQueue = writeQueue, QueueWrites = true, PatientID = lastPatId = f2[0], LastName = f2[1], FirstName = f2[2], Address1 = f2[5], Address2 = f2[6], City = f2[7], State = f2[8], Zipcode = f2[9], Phone1 = f2[10], CycleDays = Convert.ToInt16(f2[12]), Room = f2[14] }; patient.CycleDate = patient.TransformDate(f2[11] ?? ""); patient.DOB = patient.TransformDate(f2[4] ?? ""); patient.AddToQueue(); break; case "M": var s3 = line.Substring(1); var f3 = s3.Split(','); var rx = new MotPrescriptionRecord("Add", AutoTruncate); var doc = new MotPrescriberRecord("Add", AutoTruncate); var drug = new MotDrugRecord("Add", AutoTruncate); rx.LocalWriteQueue = doc.LocalWriteQueue = drug.LocalWriteQueue = writeQueue; rx.QueueWrites = doc.QueueWrites = drug.QueueWrites = true; doc.PrescriberID = f3[15]?.Substring(0, 3) + f3[16]?.Substring(0, 3); doc.FirstName = f3[15]; doc.LastName = f3[16]; doc.MiddleInitial = f3[17]; doc.Address1 = f3[18]; doc.Address2 = f3[19]; doc.City = f3[20]; doc.State = f3[21]; doc.Zipcode = f3[22]; doc.Phone = f3[23]; // M8880338,DECADRON TAB .75 MG 100,TAB,,30,TAKE 1 TABLET DAILY|TOME 1 TABLET DAILY,JACK GERARD,00;00;01;00,000060063,4,,,,,,JACK,GERARD,,599 SO.FEDERAL HWY,,CHICAGO,IL,60601,773-222-9999,, drug.DrugID = f3[8]; if (f3[8].Length > 9) { drug.NDCNum = f3[8]; // Unlikely, but the NDC is already 11 } else if (f3[8].Length == 9) { drug.NDCNum = f3[8] + "00"; // Accepted conversion to NDC11 } else { drug.NDCNum = "00000000000"; } drug.DrugName = f3[1]; drug.DoseForm = f3[2]; drug.VisualDescription = f3[3]; drug.TradeName = f3[12]; rx.PrescriptionID = f3[0]; rx.DrugID = drug.DrugID; rx.PrescriberID = doc.PrescriberID; rx.PatientID = lastPatId; rx.Sig = f3[5]; rx.QtyDispensed = Convert.ToDouble(f3[4] ?? "0.00"); rx.Refills = Convert.ToInt32(f3[9] ?? "0"); rx.RxStopDate = rx.TransformDate(f3[14] ?? ""); // Actually the Expire Date // Intake Code - 00,00,00,00 = 0800[q], 1200[q], 1800[q], 2100[q] var dq = f3[7].Split(';'); string[] time = // Need to get the actual dose times from the RxSystem or User, for now just use defaults { "0800", "1200", "1800", "2100" }; var i = 0; foreach (var d in dq) { if (d != "00") { rx.DoseTimesQtys = $"{time[i]}{Convert.ToDouble(d):00.00}"; } i++; } rx.DoseScheduleName = "Dispill"; doc.AddToQueue(); drug.AddToQueue(); rx.AddToQueue(); break; } } if (workingData.Length > 0) { writeQueue.Write(GatewaySocket); } } catch (Exception ex) { EventLogger.Error("Failed to parse Dispill file: {0}", ex.Message); throw; } }