Files
BeWoPlaner/Data/ICD10/ICD10DAO.cs
Lyndon 9ffcf8ed62 Views in Partials aufgeteilt
Intervallfinder hinzugefügt
2022-02-10 11:06:03 +01:00

175 lines
6.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net.Mime;
using System.Text;
using System.Xml.Linq;
using BS.Shared.Core;
namespace BeWo.Data.ICD10
{
public static class ICD10DAO
{
private static readonly Dictionary<string, string> _Codes2Diagnosis;
private static readonly Dictionary<string, string> test;
private static readonly XDocument _File;
private static readonly Dictionary<string, List<Dictionary<string, string>>> aussen = new Dictionary<string, List<Dictionary<string, string>>>();
static ICD10DAO()
{
try
{
var s = DateTime.Now;
_Codes2Diagnosis = new Dictionary<string, string>();
//_File = XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"bin\ICD10\icd10gm2009syst_claml_20080929.xml"));
//_File = XDocument.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"bin\ICD10\icd10gm2012syst_claml_20110923.xml"));
string file = ConfigurationManager.AppSettings.Get("ICD10File");
if (String.IsNullOrEmpty(file) ||
!File.Exists(BS.Shared.Core.Utils.CreateSavePath(AppDomain.CurrentDomain.BaseDirectory, @"bin\ICD10\" + file)))
{
file = "icd10.xml";
}
file = BS.Shared.Core.Utils.CreateSavePath(AppDomain.CurrentDomain.BaseDirectory, @"bin\ICD10\" + file);
_File = XDocument.Load(file);
var classes = _File.Root.Descendants("Class").Where(n => n.Attribute("kind").Value.Equals("category"));
var modifier2ModifierClasses = new Dictionary<String, IList<XElement>>();
foreach (var mc in _File.Root.Descendants("ModifierClass"))
{
String code = mc.Attribute("modifier").Value;
if (!String.IsNullOrEmpty(code))
{
IList<XElement> elements = null;
if (!modifier2ModifierClasses.ContainsKey(code))
{
elements = new List<XElement>();
modifier2ModifierClasses.Add(code, elements);
}
else
{
elements = modifier2ModifierClasses[code];
}
elements.Add(mc);
}
}
foreach (var c in classes)
{
String classCode = c.Attribute("code").Value;
var diagnosis = c.Descendants()
.Single(m => m.Attribute("kind") != null && m.Attribute("kind").Value.Equals("preferred"))
.Descendants().First().Value;
_Codes2Diagnosis.Add(classCode, diagnosis);
var modifiedBy = c.Descendants("ModifiedBy").FirstOrDefault();
if (modifiedBy != null)
{
String code = modifiedBy.Attribute("code").Value;
if (modifier2ModifierClasses.ContainsKey(code))
{
var modifierList = modifier2ModifierClasses[code];
foreach (var xElement in modifierList)
{
String modifierCode = xElement.Attribute("code").Value;
var modifiedDiagnosis = xElement.Descendants()
.Single(m => m.Attribute("kind") != null && m.Attribute("kind").Value.Equals("preferred"))
.Descendants().First().Value;
_Codes2Diagnosis.Add(classCode + modifierCode, diagnosis + ": " + modifiedDiagnosis);
}
}
}
}
//_Codes2Diagnosis = _File.Root.Descendants("Class").Where(n => n.Attribute("kind").Value.Equals("category"))
// .ToDictionary(n => n.Attribute("code").Value, n => n.Descendants().Single(m => m.Attribute("kind") != null && m.Attribute("kind").Value.Equals("preferred")).Descendants().First().Value);
try
{
// Codes ohne Punkt kann man ignorieren
// E10.2 "Mit Nierenkomplikationen" -> .2 = code, "Mit Nierenkomplikationen" = val
// Zusammenhang (E10, E11 etc.) über ModifiedBy der Class in _Codes2Diagnosis
// ModifiedBy ist der Modifier in ModifierClass
var modifierClasses = _File.Root.Descendants("ModifierClass").ToList();
foreach (var modifierClass in modifierClasses)
{
var modifier = modifierClass.Attribute("modifier").Value;
var code = modifierClass.Attribute("code").Value;
if (!code.StartsWith("."))
continue;
var val = modifierClass.Descendants().Single(m => m.Attribute("kind") != null && m.Attribute("kind").Value.Equals("preferred")).Descendants().First().Value;
var innen = new Dictionary<string, string> { { code, val } };
if (aussen.ContainsKey(modifier))
{
aussen[modifier].Add(innen);
}
else
{
aussen.Add(modifier, new List<Dictionary<string, string>> { innen });
}
}
}
catch (Exception ex)
{
}
var e = DateTime.Now - s;
}
catch (Exception)
{
}
}
public static string GetCompressedString()
{
var sr = new StringBuilder();
if (_Codes2Diagnosis != null)
{
foreach (var kvp in _Codes2Diagnosis)
{
sr.AppendLine(kvp.Key + ";" + kvp.Value);
}
}
return BS.Shared.Core.Utils.Compress(sr.ToString());
}
public static string GetDiagnosisForCode(string code)
{
while ((code = code.Replace(" ", string.Empty)).Contains(" "))
{
;
}
if (_Codes2Diagnosis.ContainsKey(code))
{
return _Codes2Diagnosis[code];
}
return null;
}
}
}