Super wäre es natürlich, wenn tomedo einem vorschlagen würde: Hey der Patient war schon 3 mal in diesem Quartal mit dieser Diagnose da, willst Du nicht Ziffer xxxx verschlüssen.
Hier die genaue Anleitung, wie man das umsetzt.
Man erstellt eine Aktionskette, die den gewünschten Hinweis-Text liefert oder eine Ziffer setzt.
Anschließend den Aktionsketten-Auslöser definieren: Die Aktionskette soll beim Anlegen des Besuchs ausgleöst werden. Als Bedingung wird eine SQL-Abfrage erstellt.
Die SQL-Abfrage soll prüfen:
a) Gab es für diesen Patienten in diesem Quartal bereits einen x.Besuch (= x.APK)?
(Will man ab dem 3.Besuch auslösen, dann muss hier nach dem 2.APK gefragt werden.)
b) Hat der Patient auf einem Schein im aktuellen Quartal die Diagnose ZZZ?
c) Hat der Patient auf einem Schein im aktuellen Quartal die Ziffer YYY noch nicht ?
Dafür kann folgendes Skript als Vorlage dienen.
create temporary table tempnAPKStat1 as
select KE.ident, KE.datum, KE.text from patient P
join patientendetails PD
on (P.ident = $[patientident]$ and PD.ident = P.patientendetails_ident)
join patientendetailsrelationen PDR
on (PDR.ident = PD.patientendetailsrelationen_ident )
join patientendetailsrelationen_karteieintraege JT1
on (JT1.patientendetailsrelationen_ident = PDR.ident)
join Karteieintrag KE
on (KE.ident = JT1.karteieintraege_ident)
join Karteieintragtyp KET
on (KE.karteieintragtyp_ident = KET.ident)
where KET.kuerzel = 'BES'
and KE.visible = true
and KE.datum > (CAST(date_trunc('quarter', now() ) AS date) + '00:00:00'::time)
and text ilike 'GKV(x. APK%';
create temporary table tempnAPKStat2 as
select S.ident from patient P
join patientendetails PD
on (P.ident = $[patientident]$ and PD.ident = P.patientendetails_ident)
join patientendetailsrelationen PDR
on (PDR.ident = PD.patientendetailsrelationen_ident )
join patientendetailsrelationen_kvscheine JT1
on (JT1.patientendetailsrelationen_ident = PDR.ident)
left join KVSchein S
on (S.ident = JT1.kvscheine_ident and S.visible = true)
left join Leistung L
on (L.invkvschein_ident = S.ident)
left join EBMKatalogEintrag EBM
on (EBM.ident = L.ebmkatalogeintrag_ident)
where
EBM.code = 'ZZZ' and
L.visible = true and
S.jahr = CAST(EXTRACT(YEAR from now()) as integer) and
S.quartal = CAST(EXTRACT(QUARTER from now()) as integer)
group by S.ident;
create temporary table tempnAPKStat3 as
select S.ident from patient P
join patientendetails PD
on (P.ident = $[patientident]$ and PD.ident = P.patientendetails_ident)
join patientendetailsrelationen PDR
on (PDR.ident = PD.patientendetailsrelationen_ident )
join patientendetailsrelationen_kvscheine JT1
on (JT1.patientendetailsrelationen_ident = PDR.ident)
left join KVSchein S
on (S.ident = JT1.kvscheine_ident)
left join kvschein_quartalsdiagnosen JT2
on (JT2.kvschein_ident = S.ident)
left join Diagnose D
on (D.ident = JT2.quartalsdiagnosen_ident)
left join ICDKatalogeintrag ICD
on (ICD.ident = D.icdkatalogeintrag_ident)
where
S.visible= true and
D.visible = true and
ICD.code ilike 'YYY' and
S.jahr = CAST(EXTRACT(YEAR from now()) as integer) and
S.quartal = CAST(EXTRACT(QUARTER from now()) as integer)
group by S.ident;
select * from tempnAPKStat3 A
left join tempnAPKStat2 B
on (A.ident = B.ident )
join tempnAPKStat1 C -- wenn C (xter APK) leer ist kommt auch leeres Ergebnis
on true
where B.ident is null;