111 lines
4.6 KiB
C#
111 lines
4.6 KiB
C#
|
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<ResultsStatus>(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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|