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;