patbef-ServiceOutside/ServiceShared/HL7/Parser.cs

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;
}
}
}