2024-06-19 16:13:56 +02:00
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 > ( ) ;
2024-09-01 20:47:02 +02:00
//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)" });
2024-06-19 16:13:56 +02:00
2024-09-01 20:47:02 +02:00
//result.Gruppen.Add(gruppe1);
2024-06-19 16:13:56 +02:00
2024-09-01 20:47:02 +02:00
//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)" });
2024-06-19 16:13:56 +02:00
2024-09-01 20:47:02 +02:00
//result.Gruppen.Add(gruppe1);
2024-06-19 16:13:56 +02:00
2024-06-24 16:30:36 +02:00
result . Ziele = new List < HilfeplanImportZielDC > ( ) ;
2024-09-01 20:47:02 +02:00
//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" });
2024-06-19 16:13:56 +02:00
2024-09-01 20:47:02 +02:00
//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" });
2024-06-19 16:13:56 +02:00
2024-09-01 20:47:02 +02:00
using ( var processor = new PdfDocumentProcessor ( ) )
{
using ( var ms = new MemoryStream ( daten ) )
{
processor . LoadDocument ( ms ) ;
2024-06-24 16:30:36 +02:00
2024-09-01 20:47:02 +02:00
var pdfText = processor . Text ;
var customerGruppe = ErstelleKlientenStammdatenGruppe ( pdfText ) ;
if ( customerGruppe ! = null )
{
result . Gruppen . Add ( customerGruppe ) ;
}
2024-06-24 16:30:36 +02:00
2024-09-01 20:47:02 +02:00
result . Ziele = ErstelleAlleZiele ( pdfText ) ;
}
}
2024-06-19 16:13:56 +02:00
2024-09-18 21:50:00 +02:00
//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" });
2024-06-19 16:13:56 +02:00
return result ;
}
2024-09-01 20:47:02 +02:00
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 ;
}
}
}
2024-10-08 19:30:58 +02:00
ErstelleMassnahmen ( pdfText , startIdx , ziele ) ;
2024-09-01 20:47:02 +02:00
return ziele ;
}
2024-10-08 19:30:58 +02:00
private void ErstelleMassnahmen ( string pdfText , int endIndex , List < HilfeplanImportZielDC > ziele )
{
foreach ( var item in ziele )
{
item . Massnahmen = new List < HilfeplanImportZielDC > ( ) ;
}
}
2024-09-01 20:47:02 +02:00
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 ( ) ;
2024-09-18 21:50:00 +02:00
ziel . ZielBeschreibung = "Beschreibung:\n" + zeile ;
2024-09-01 20:47:02 +02:00
}
}
}
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 ;
}
2024-06-19 16:13:56 +02:00
}
}