Altschaden

Was im laufe der Zeit alles mit gegnerischen Versicherungen erlebt habe, von nicht leisten wollen, weil der Versicherungsnehmer die Versicherung nicht gezahlt hat, bis hin zu den wirtschaftlichen Totalschäden, alles irgendwie überschaubar, aber dass ist schon irgendwie lustig.

Also so zur Einordnung der folgenden Ereignisse

Die Ardetzenbergstraße ist eine kleine, idyllische Straße auf den Ardetzenberg, der eigentlich weniger Berg mehr Hügel ist, aber den Wildpark auf seinem Gipfel beheimatet. So weit so schön.
Nun gibt es nicht nur den Wildpark zu bewundern, sondern auch eine Schule – das ehrwürdige Institut St. Josef. Eigentlich ist die Ardetzenbergstraße eine Durchgangsstraße- Also wenn man von der einen Seite rauf fährt kommt man am anderen Ende wieder runter. Bei dem ganzen Verkehr auf der Ardetzenbergstraße gab es trotz des Interessenkonflikts auf der engen Straße zwischen Schülerinnen, Eltern die ihre Kinder in die Schule bringen müssen und Schülerinnen die bereits den Führerschein haben und selbst in die Schule fahren, bis vor kurzem wenige Probleme.

Bis ja bis die Stadt beschlossen hat die halbe Straße zu sperren um die Ill zu erweitern, damit Feldkirch vor einem 100jährigen Hochwasser geschützt ist. An das letzte 100jährige erinnert man sich nicht – also auf Nachfrage wusste das von der Stadt niemand – nicht mal der von der Wasserwirtschaft. Naja egal aber Gerüchten zu folge war es 1910. Wie jeder studierte Verkehrsplaner, gelernter Politiker und erfahrene Wasserexperte weiß ist, da ja über 100 Jahre her, Gefahr in Verzug und es muss auf der Stelle gesprengt werden. Zumal eine ein Wöchige Verkehrszählung ergeben hat das eh kein Verkehr ist. Naja außerdem dürfen die Anzahl der Autos die vom Bahnhof in die Ardetzenbergstraße fahren nicht mit der Anzahl der Autos die von der anderen Seite kommen zusammengezählt werden. Ja nicht – die was auf dem abgesprengten Teil der Ardetzenbergstraße ihre Kinder zur Schule bzw. Wildpark befeuern – fahren ja nicht mehr – weil ja keine Straße.

Also gut wir wissen – Ardetzenbergstraße eng, viel Verkehr unter anderem, ich traue es mich fast nicht zu sagen, weil Feldkirch einen ÖVP Bürgermeister hat und naja Fußgänger gibt es nicht, es ist auch die Spezies der Fußgängerin (Fußgänger sind mit gemeint) unterwegs.

Auf Grund dessen kann es schon vor kommen, das Abstände nicht richtig eingeschätzt werden und so mancher Seitenspiegel kaputt geht.

Auch in dieser Geschichte. Eine Dame für in meinen Spiegel und sie war so freundlich stehen zu bleiben. Wir tauschten die Daten aus und sie meldete den absoluten belanglosen Unfall ihrer Versicherung. Die ihren Namen einer Stadt aus einem Nachbarland im Westen verdankt.

Es war ein netter Brief, den ich dann von der Versicherung bekam.
Der erste Satz war gleich viel versprechend „Ihr Schadenfall rasch abwickeln“ stand da.

Da es Mitte November war und ich definitiv keine Lust hatte den Spiegel selbst zu tauschen und bei einer Ablöse die Versicherung der Gewinner ist, brachte ich das Auto in die Werkstatt meines Vertrauens. Der machte ein Gutachten – die Fotos halt und schickte das Ganze nach Zürich.

Ungefähr 2 Wochen danach bekam ich einen Anruf von der Werkstatt, Reparatur abgelehnt weil „Altschaden“. Naja der Schaden war ja schon einen Monat alt – deshalb will ich ihn ja so rasch wie möglich reparieren lassen, dachte ich.
Also mal angerufen bei der Nummer auf dem freundlichen Schreiben. Nach ungefähr 5 Versuchen und um 17 Uhr 01 nahm einer ab, der mir erklärte das das Leistung KFZ Team ab 17.00 nicht mehr da ist. Ich bat also um einen Rückruf.

Drei Tage verstrichen – kein Rückruf. Ich versuche es nochmal siehe da eine Dame hob ab und erklärte mir Altschaden – auf die Frage was das heißt meinte sie keine Ahnung das weis nur der Sachbearbeiter.

Ich war schon etwas von der Sache genervt.

Die Tage verstrichen kein Sachbearbeiter weit und breit – dann ein neuerlicher Anruf bzw. Mail usw. Keine Reaktion.

Dann ja irgendwie Feiertage – so Erholung muss auch sein – vor allem für überarbeitete Sachbearbeiter. Dann mal wieder eine Mail, Anrufe beim letzten Anruf legte die Dame einfach auf. Also ein Mail an das Service Center – war ziemlich böse von mir. Und siehe da nach 3 Monaten bekam ich eine Mail.
In der wurde einem Herrn (der Name tut nichts zur Sache, nennen wir ihn Noname) – wer immer das auch sein möge – mittgeteilt wurde das zu keiner Schadenserweiterung gekommen ist.

Das ist total schön für unseren Herr Noname, das er weiß, das es keine Schadenserweiterung bei meinem Auto gab. Irgendwie wäre es vielleicht sinnvoll gewesen mir das auch mitzuteilen.

Am nächsten Tag – also in affenartiger Geschwindigkeit – Die Bits sind nur so geflutscht, die Finger haben geglüht kam ein Einzeiler – „Ich schreibe den Altschaden habe ich behoben ob ich ihnen eine Rechnung schicken kann“.

Also schicke ich ihnen Fotos und eine Rechnung. Ich habe das auch eingekringelt auf den Fotos was der Schaden war und was er ist. siehe unten.

Und wieder, ganz untypisch für das Land aus dem die Versicherung stammt, am nächsten Werktag kommt wieder ein Einzeiler.

„Wir sprechen von einem Altschaden vom 9.8.2023“.

Zuerst dachte ich, das der „Pluralis Majestatis“ nicht mehr so gebräuchlich ist – aber es kann ja sein das Versicherungen sich vielleicht so fühlen – hat ja auch was stehen wir zu unserer Leistung, oder nicht – hat ja schon was von Herrschen.
Außerdem war mir nicht bewusst, das ich im August einen Schaden hatte – Also ist ja auch schon lang her. Also fragte ich Woher er die Information hätte. Da er offensichtlich jedoch sein Pensum für den heutigen Tag erledigt hatte, musste ich auf eine Antwort warten.

Da viel mir ein woher. Irgendwann im Juli 2023 fuhr ein Taxler viel zu schnell die Ardetzenbergstraße runter und sein Rückspiegel kollidierte mit meinem. ein kleines Stück brach ab und der Taxler führ weiter. Da ich nur damals das Taxi sah aber keine Nummer und die Stadtpolizei daher meinte eine Anzeige ist sinnlos, weil eh nix passiert. Auf Grund der polizeilichen Ablehnung eine Anzeige zu machen, habe ich ein Photo gemacht und es auf meinem Instagramm Account gestellt. So weit so gut oder eigentlich schlecht.

Also hat die Versicherung meine Sozialen Medien durchforstet und festgestellt ah da gibt es einen Vorschaden.

Das ist echt ein Wahnsinn – ich hoffe nur das es wenigstens eine Software war, die das herausgefunden hat und kein Mensch. Wenn ein Mensch dann Hut ab die Kostenrechnung der Versicherung möchte ich nicht wissen, Schaden laut Werkstatt 1.300
Werkstatt, Sachbearbeiter, Gutachter, meine Zeit und die Zeit irgendeines armen Menschen, der sich Soziale Medien von vollkommen „normalen“ Menschen wie mir – naja a paar Fotos sind schon lustig, ansonsten eher für die große Rundablage, anschauen muss zusammenrechnet – sind wir locker beim 3 oder 4 fachen des Schaden. Wenn ich den Schaden ablösen wollen würde wären wir beim 5 bis 6 fachen.
Der Materialwert des Schadens ist im übrigen 100€.

Das war der Schaden von dem ich dachte, die Versicherung meint Altschaden – mit 700€ abgelöst – von einer Versicherung aus Wien die das auch im Namen trägt.

Der Schaden vom Taxler, mit der Fahrerflucht:

Und der jüngste Schaden

Wer zwischen den Schäden keine Veränderung sieht, kann sich sicher mit dieser Referenz bei Versicherungen als Gutachter bewerben oder mir einen Rückspiegel schenken.

Natürlich ist dieser Text als Satire zu verstehen und hat ganz und gar nichts mit irgendwelchen realen Ereignissen zu tun.

OpenAI und PDF

Rambo sagte einmal „Das ist eine lange Geschichte“ und war damit eine kurze Zusammenfassung der ganzen Rambo Filme.

Mit Open AI soll das nun möglich sein.
Also los aus nostalgischen Gründen werde ich ein Ajax mit einem Webservice machen – quisi quasi fast ein Micoservice 🙂
Also machen wir mal das Upload.

using Google.Protobuf.WellKnownTypes;
using Org.BouncyCastle.Asn1.Ocsp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.Services.Description;
using System.Web.UI.WebControls;

namespace GPT3PDF
{
    /// <summary>
    /// Zusammenfassungsbeschreibung für AnaylseService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Wenn der Aufruf dieses Webdiensts aus einem Skript zulässig sein soll, heben Sie mithilfe von ASP.NET AJAX die Kommentarmarkierung für die folgende Zeile auf. 
    [System.Web.Script.Services.ScriptService]
    public class AnaylseService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]
        public PDFResponse Upload()
        {

            HttpFileCollection Files = HttpContext.Current.Request.Files;


            HttpPostedFile File = Files[0];
            byte[] pdfBytes;


            using (var binaryReader = new BinaryReader(File.InputStream))
            {
                pdfBytes = binaryReader.ReadBytes(File.ContentLength);
            }


            try
            {
                PDFAnalysis pDFAnalysis = new PDFAnalysis();
                string extract = pDFAnalysis.AnalyzePDF(pdfBytes);
              
                return new PDFResponse() { Message = extract };
                
            }
            catch (Exception ex)
            {
              //Error do something with it or leave it :)  

            }

            return new PDFResponse() { Message = "Error! " };

        }
    }

    public class PDFResponse
    {
        public string Message { get; set; } 
        
    }
}


Nun müssen wir nur noch den Text aus dem PDF bekommen. Zum Glück müssen wir das Rad nicht neu erfinden und können auf zum Beispiel PdfPig | Read and extract text and other content from PDFs in C# (port of PDFBox) (uglytoad.github.io) verwenden.
Das extrahieren geht ganz einfach:

  private string ExtractTextFromPDF(byte[] file)
        {

            string extractedText;
            using (var pdf = PdfDocument.Open(file))
            {
                var sb = new StringBuilder();
                for (var i = 0; i < pdf.NumberOfPages; i++)
                {
                    var page = pdf.GetPage(i + 1);
                    sb.Append(page.Text);
                }
                extractedText = sb.ToString();

            }
            return extractedText;
        }

Das File übergeben wir als Byte[] damit wir es nicht irgendwo auf dem Server zwischen speichern müssen.


Nostalgisches Upload und Text extrahieren ist doch einfach oder?

So als nächstes kommt der lustige Teil. Der Aufruf des OpenAI Api.

  private string AnalyzeTextWithChatGpt(string extractedText)
        {
            string responseContent = string.Empty;
            try
            {
                List<MessageObj> roles = new List<MessageObj>();
                roles.Add(new MessageObj() { role = "system", content = "Summarize the text" });
                roles.Add(new MessageObj() { role = "user", content = extractedText });
                //MessageObj[] msg;

                // Set up the OpenAI API client
                var content = new StringContent(
            JsonConvert.SerializeObject(new
            {
                model = "gpt-3.5-turbo",
                messages = roles


            }),
            Encoding.UTF8,
            "application/json");

                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + chatGptApiKey);
                //var response = client.PostAsync("https://api.openai.com/v1/engines/davinci-codex/completions", content).Result;

                var response = client.PostAsync("https://api.openai.com/v1/chat/completions", content).Result;

                responseContent = response.Content.ReadAsStringAsync().Result;

                var explanation = JsonConvert.DeserializeObject<dynamic>(responseContent).choices[0].message.content;
                return explanation;
            }
            catch (Exception ex)
            {

                Exception exception = new Exception(responseContent, ex);
                throw exception;
            }


        }

Der ganze Source ist unter gpiwonka/GPT3PDF (github.com). Es fehlen natürlich eine gescheite Fehlerbehandlung und auch ein Verfahren, wenn das PDF zu groß ist. Hierzu müsste das PDF gesplittet werden und dann jeder einzelne Teil zusammengefasst werden. Live anzuschauen unter: gpt3pdf20230526121655.azurewebsites.net