using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; using static ServiceShared.Models.Database.Results; using static ServiceShared.Models.Response.Notification; namespace ServiceShared.HL7 { public static class Parser { public static Models.HL7.MDM GetMDM(string filename) { Models.HL7.MDM result = null; try { if(!string.IsNullOrEmpty(filename) && File.Exists(filename)) { string[] lines = File.ReadAllLines(filename); if(lines != null && lines.Length > 0) { result = new Models.HL7.MDM(); result.TimeStamp = DateTime.Now; string base64Content = ""; foreach (string line in lines) { string[] values = line.Split('|'); if(values != null && values.Length > 0) { string segment = values[0].ToLower(); if(segment == "evn") { if (values.Length > 2 && !string.IsNullOrEmpty(values[2])) { DateTime outTimestamp = default(DateTime); if (DateTime.TryParseExact(values[2], "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.None, out outTimestamp) && outTimestamp != default(DateTime)) { result.TimeStamp = outTimestamp; } } if (values.Length > 3 && !string.IsNullOrEmpty(values[3])) { string results_status = values[3]; ResultsStatus outResultsStatus = ResultsStatus.NONE; if (!string.IsNullOrEmpty(results_status) && Enum.TryParse(results_status, out outResultsStatus)) { result.ResultsStatus = outResultsStatus; } } } else if(segment == "pid") { result.PatId = (values.Length > 2 ? values[2] : null); result.Birthday = (values.Length > 3 ? values[3] : null); result.Zip = (values.Length > 4 ? values[4] : null); result.UDID = (values.Length > 5 ? values[5] : null); } else if (segment == "txa") { result.SampleId = (values.Length > 2 ? values[2] : null); result.PGSInitial = (values.Length > 3 ? values[3] : null); } else if(segment == "obx" && values.Length > 5) { base64Content += values[5].Replace("^Application^PDF^Base64^", ""); } else if(segment != "msh" && segment != "evn" && segment != "pid" && segment != "txa" && segment != "obx") { base64Content += line; } } } if(!string.IsNullOrEmpty(base64Content)) { result.Base64Content = base64Content; } } } } catch (Exception ex) { Log.Error(ex, "ServiceShared.HL7.Parser", "GetMDM"); } if(result != null && (string.IsNullOrEmpty(result.Zip) || string.IsNullOrEmpty(result.UDID) || string.IsNullOrEmpty(result.Birthday) || string.IsNullOrEmpty(result.SampleId) || result.ResultsStatus == ResultsStatus.NONE)) { result = null; } return result; } } }