liebe kollegen,

ich komme gerade mit einem feature nicht zurecht und bitte um hilfe:

ich suche alle patienten, die seit 10 jahren nicht mehr da waren, bzw. keinen karteieintrag erhalten haben. dafür habe ich die recall-liste genutzt und angegeben, dass der letzte karteieintrag vor dem 01.07.2007 gewesen sein soll (ausgeschlossen BES-einträge). Ich erhalte nun aber eine liste von 80tausend karteieinträgen, die alle vor 2007 liegen, aber diese pat. haben auch einträge nach 2007, aktuelle. es selektiert mir also nicht die "alten" patienten raus.

wo ist mein denkfehler?

ich danke!

liebe grüße. AW
Gefragt von (1.5k Punkte)
Bearbeitet von
0 Punkte

1 Antwort

Die Statistik Recall-Liste ist wirklich nicht besonders intuitiv und wird zum Quartalsupdate von uns angepasst werden. Der 'ACHTUNG!'-Hinweis in der Statistikerläuterung, dass man damit die 'abwesenden Patienten' nicht suchen kann, ist momentan noch ernst zu nehmen.

Für den von Ihnen beschriebenen Fall, gibt es eigentlich die Statistik 'Recall abwesender Patienten'. Dort kann man aber leider keine bestimmten Karteitypen (z.B. BES) auschliessen.

Ich kann Ihnen aber schon die Statistik, die wir nach dem Quartalsupdate anbieten werden vorab zur Verfügung stellen. Diese können Sie unter admin->Statistikverwaltung einspielen. Diese Statistik sollte das von Ihnen gewünschte Ergebnis liefern:

        drop table if exists tempRecallTable;

        create temporary table tempRecallTable as        
        select     A.ident,
                A.datum,
                A.text
        from (
            Karteieintrag A
            left join Karteieintragtyp C
            on (A.karteieintragtyp_ident = C.ident )
        )
        where
        <ZS:queryParameter14> STRING; Nur Karteieinträge einbeziehen, deren Text;A.text;and  </ZS>
        <ZS:queryParameter15> STRING; Nur Karteieinträge einbeziehen, deren Karteieintragstyp (Kürzel);C.kuerzel;and  </ZS>
        <ZS:queryParameter1> DATE;-1; letzter Karteieintrag zwischen (Anfang Intervall); A.datum >;and  </ZS>
        A.visible = true
        order by A.ident;
        
        drop table if exists tempRecallTable2;
        create temporary table tempRecallTable2 as    
        -- connection to Patient is established via different Relations
        -- this temporary table has the Kartei_ident - Patientendetails_ident mapping
        select
            PDRs.kartei_ident,
            PDRS.Karteitext,
            PDRS.datum,
            Greatest (PD.ident, CAVES.patientendetails_ident) as pd_ident,
            0 as isLatest
        from (
            select
                A.ident as kartei_ident,
                A.text as Karteitext,
                A.datum,
                GREATEST(G.patientendetailsrelationen_ident, H.patientendetailsrelationen_ident) as pdr_ident
            from (
                tempRecallTable A
                left join Patientendetailsrelationen_karteieintraege G
                on (G.karteieintraege_ident = A.ident)
                left join Patientendetailsrelationen_formulare H
                on (H.formulare_ident = A.ident)
            )
        ) PDRS
        left join Patientendetails PD
        on (PD.patientendetailsrelationen_ident = PDRS.pdr_ident )
        left join Patientendetails_caves CAVES
        on (CAVES.caves_ident = PDRS.kartei_ident)
        order by pd_ident, datum desc;
        
        
        -- da wir auch den Text des letzten Karteieintrag mit ausgeben wollen, müssen wir hier den jeweils letzten Karteieintrag per Hand markieren
        DROP index if exists "tempRecallIdx1";
        CREATE INDEX "tempRecallIdx1" ON tempRecallTable2 (kartei_ident ASC NULLS LAST);
        do $$
          declare
            row record;
            _lastPat bigint;
            _currentPat bigint;
            _currentKartei_ident bigint;
          begin
           _lastPat := -1;
            for row in
                    select * from tempRecallTable2
                for update loop
                   _currentPat :=   row.pd_ident;
                   _currentKartei_ident :=   row.kartei_ident;
                   if (_currentPat <> _lastPat ) then
                            _lastPat = _currentPat;
                              update tempRecallTable2 TT set isLatest = 1 where (TT.kartei_ident = _currentKartei_ident);
                   end if;
            end loop;
          end;
        $$;                
        
        drop table if exists tempRecallTable3;
        create temporary table tempRecallTable3 as    
        select * from tempRecallTable2
        where isLatest = 1;
        
        select
                A.datum as letzterKarteieintrag,
                A.Karteitext,
                A.kartei_ident as karteieintragid,
                J.ident as patientid,
                J.titel,
                H.namenszusatz,
                J.nachname as nachname,
                J.vorname as vorname,
                cast(J.geburtsdatum as Date) as geburtsdatum,
                H.geschlecht,
                E.strasse,
                E.plz,
                J.ort,    
                E.land,    
                D.telefon,
                D.handynummer as handy,
                D.email,
                H.freitext as patienteninfo,
                H.privatpatient,
                H.boolcol1 as ja_Nein_Patient1,
                H.boolcol2 as ja_Nein_Patient2,
                H.stringcol1 as freitext_Patient1,
                H.stringcol2 as freitext_Patient2
        from
                tempRecallTable3 A
                join Patient J
                on (J.patientendetails_ident = A.pd_ident )
                left join patientendetails H
                on (J.patientendetails_ident = H.ident)
                left join Kontaktdaten D
                on (H.kontaktdaten_ident = D.ident)
                left join Adresse E
                on (D.adresse_ident = E.ident)    
        where
        <ZS:queryParameter2> DATE; 1; und (Ende Intervall) ; A.datum  < ; and  </ZS>
        <ZS:queryParameterPrivat> SELECTION;0;Privatpatient;Ja; H.privatpatient = true and;Nein; H.privatpatient = false and</ZS>
        <ZS:queryParameter3> STRING;Patienteninfo;H.patienteninfo;and </ZS>
        true
        order by letzterKarteieintrag desc;
Beantwortet von (67.8k Punkte)
0 Punkte
16,080 Beiträge
23,847 Antworten
41,974 Kommentare
11,659 Nutzer