247 lines
12 KiB
C#
247 lines
12 KiB
C#
using BS.Shared.DataContracts;
|
|
using DevExpress.Pdf;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BeWo.Service.Import.Perseh
|
|
{
|
|
public class PersehReader
|
|
{
|
|
public HilfeplanImportDC ReadPdfDocument(byte[] daten)
|
|
{
|
|
HilfeplanImportDC result = new HilfeplanImportDC();
|
|
result.Gruppen = new List<HilfeplanImportItemDC>();
|
|
|
|
//var gruppe1 = new HilfeplanImportItemDC { Label = "Leistungssuchende oder leistungsberechtigte Person", Items = new List<HilfeplanImportItemDC>() };
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
|
|
|
|
//result.Gruppen.Add(gruppe1);
|
|
|
|
//gruppe1 = new HilfeplanImportItemDC { Label = "Gruppe 2", Items = new List<HilfeplanImportItemDC>() };
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Name", Content = "Bäurle", FieldName = "LastName" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Vorname", Content = "Christian", FieldName = "FirstName" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Geburtsdatum", Content = "08.04.1972", FieldName = "Birthdate" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Nationalität", Content = "deutsch" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Beruf", Content = "Wirt" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "GP-Nummer/Az", Content = "73.20-2100009313-01" });
|
|
//gruppe1.Items.Add(new HilfeplanImportItemDC { Label = "Erstellt von der\nleistungssuchenden oder\nleistungsberechtigten Person\nmit Behinderung unter", Content = "Max Mustermann (Bezugsbetreuer)\nMaria Musterfrau (Sozialarbeiterin)" });
|
|
|
|
//result.Gruppen.Add(gruppe1);
|
|
|
|
|
|
|
|
result.Ziele = new List<HilfeplanImportZielDC>();
|
|
|
|
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
|
|
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Lernen und Wissensanwendung", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
|
|
|
|
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 1", ZielBeschreibung = "Herr Sowieso hat eine seinen Bedürfnissen entsprechende und ihn stabilisierende Tagesstruktur mit einer regelmäßigen, genesungsfördernden Beschäftigung(z.B.Ergotherapie) entwickelt." });
|
|
//result.Ziele.Add(new HilfeplanImportZielDC { Bereich = "Allgemeine Aufgaben und Anforderungen", ZielName = "Ziel 2", ZielBeschreibung = "Herr Sowieso hat Angstbewältigungsstrategien sowie Stabilisierungstechniken erlernt und kann diese in Alltagssituationen anwenden" });
|
|
|
|
using (var processor = new PdfDocumentProcessor())
|
|
{
|
|
using (var ms = new MemoryStream(daten))
|
|
{
|
|
processor.LoadDocument(ms);
|
|
|
|
var pdfText = processor.Text;
|
|
|
|
var customerGruppe = ErstelleKlientenStammdatenGruppe(pdfText);
|
|
|
|
if (customerGruppe != null)
|
|
{
|
|
result.Gruppen.Add(customerGruppe);
|
|
}
|
|
|
|
|
|
result.Ziele = ErstelleAlleZiele(pdfText);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
private IList<HilfeplanImportZielDC> ErstelleAlleZiele(string pdfText)
|
|
{
|
|
var ziele = new List<HilfeplanImportZielDC>();
|
|
//Suche Zeile "Zielplanung". So beginnt hinten im Dokument der Bereich mit der Zusammenfassung der Ziele
|
|
|
|
var zeilen = pdfText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
|
var startIdx = -1;
|
|
var endIdx = -1;
|
|
StringBuilder gesamtTextMitZielen = new StringBuilder();
|
|
|
|
for (int i = zeilen.Length - 1; i >= 0; i--)
|
|
{
|
|
var z = zeilen[i];
|
|
|
|
if (z == "Zielplanung")
|
|
{
|
|
startIdx = i;
|
|
}
|
|
if (z.StartsWith("Übersicht der Leistungsplanung "))
|
|
{
|
|
endIdx = i;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (startIdx >= 0)
|
|
{
|
|
for (int i = startIdx; i < endIdx; i++)
|
|
{
|
|
gesamtTextMitZielen.AppendLine(zeilen[i]);
|
|
}
|
|
zeilen = gesamtTextMitZielen.ToString().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
startIdx = 0;
|
|
while (startIdx >= 0)
|
|
{
|
|
var ta = TextAbschnittReader.LeseBisText(zeilen, startIdx, "Lebensbereich ", true, false, false);
|
|
if (ta.Success)
|
|
{
|
|
ziele.AddRange(ErstelleBereichMitZielen(zeilen, ta));
|
|
startIdx = ta.ZeilenIndex + 1;
|
|
}
|
|
else
|
|
{
|
|
startIdx = -1;
|
|
}
|
|
|
|
}
|
|
}
|
|
return ziele;
|
|
|
|
}
|
|
|
|
private IList<HilfeplanImportZielDC> ErstelleBereichMitZielen(string[] zeilen, TextAbschnitt ta)
|
|
{
|
|
var ziele = new List<HilfeplanImportZielDC>();
|
|
|
|
String bereich = zeilen[ta.ZeilenIndex];
|
|
int idxBereichStart = ta.ZeilenIndex + 1;
|
|
int idxBereichtEnde = zeilen.Length;
|
|
|
|
var taEnde = TextAbschnittReader.LeseBisText(zeilen, ta.ZeilenIndex + 1, "Lebensbereich ", true, false, false);
|
|
if (taEnde.Success)
|
|
{
|
|
idxBereichtEnde = taEnde.ZeilenIndex;
|
|
}
|
|
|
|
HilfeplanImportZielDC ziel = null;
|
|
for (int i = idxBereichStart; i < idxBereichtEnde; i++)
|
|
{
|
|
String zeile = zeilen[i];
|
|
if (zeile.StartsWith("Ziele • ") || zeile.StartsWith("• "))
|
|
{
|
|
ziel = new HilfeplanImportZielDC();
|
|
ziel.Bereich = bereich;
|
|
ziel.ZielName = zeile.Replace("Ziele • ", "").Replace("• ", "").Trim();
|
|
|
|
ziele.Add(ziel);
|
|
}
|
|
else if (ziel != null)
|
|
{
|
|
if (!IgnoriereZeile(zeile))
|
|
{
|
|
ziel.ZielName += " " + zeile.Trim();
|
|
}
|
|
|
|
}
|
|
}
|
|
return ziele;
|
|
}
|
|
|
|
private bool IgnoriereZeile(string zeile)
|
|
{
|
|
if (zeile.StartsWith("(c) Landschaftsverband") || zeile.StartsWith("Gesprächsleitfaden - "))
|
|
{
|
|
return true;
|
|
}
|
|
if (zeile.StartsWith("V1") || zeile.StartsWith("V2") || zeile.StartsWith("V3"))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private HilfeplanImportItemDC ErstelleKlientenStammdatenGruppe(string pdfText)
|
|
{
|
|
if (pdfText.Contains("Individuelle Bedarfsermittlung - Element Basisdaten"))
|
|
{
|
|
var customerGruppe = new HilfeplanImportItemDC { Label = "Stammdaten", Items = new List<HilfeplanImportItemDC>() };
|
|
customerGruppe.Items = LeseKlientenStammdaten(pdfText);
|
|
|
|
return customerGruppe;
|
|
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private List<HilfeplanImportItemDC> LeseKlientenStammdaten(string pdfText)
|
|
{
|
|
var liste = new List<HilfeplanImportItemDC>();
|
|
var zeilen = pdfText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
var ta = TextAbschnittReader.LeseBisText(zeilen, 0, "BEI_NRW für den Zeitraum vom ", true, false, false);
|
|
|
|
if (ta.Success)
|
|
{
|
|
var idx = ta.ZeilenIndex;
|
|
liste.Add(ErstelleStammdatenFeld("BEI_NRW für den Zeitraum vom", "ApprovalPeriod", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("GP-Nummer/Az", "CustomerReferenceNumber", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Name", "Lastname", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Vorname", "Firstname", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Titel", "Titel", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Geburtsdatum", "Birthdate", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Geschlecht", "Sex", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Nationalität", "Nationality", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Beruf", "Job", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Familienstand", "FamilyStatus", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Anzahl und Alter der Kinder", "Children", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("PLZ", "PostalCode", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Ort", "Town", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Straße", "Street", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Telefon", "Phone", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("Fax", "Fax", zeilen, idx, out idx));
|
|
liste.Add(ErstelleStammdatenFeld("E-Mail", "EMail", zeilen, idx, out idx));
|
|
}
|
|
|
|
|
|
|
|
return liste;
|
|
}
|
|
|
|
private HilfeplanImportItemDC ErstelleStammdatenFeld(string label, string fieldname, string[] zeilen, int startIndex, out int foundIdx)
|
|
{
|
|
var item = new HilfeplanImportItemDC { Label = label, FieldName = fieldname };
|
|
|
|
var ta = TextAbschnittReader.LeseBisText(zeilen, startIndex, label, true, false, false);
|
|
foundIdx = 0;
|
|
if (ta.Success)
|
|
{
|
|
item.Content = zeilen[ta.ZeilenIndex].Replace(label, "").Trim();
|
|
if (item.Label.Contains("_"))
|
|
{
|
|
item.Label = label.Replace("_", "__");
|
|
}
|
|
foundIdx = ta.ZeilenIndex;
|
|
}
|
|
return item;
|
|
}
|
|
|
|
}
|
|
}
|