vielleicht wollen wir noch ein wenig mehr funktionierenden Content sammeln? -
HYPOENDE soll die Patienten zeigen, die im aktuellen Quartal nicht zur Hypo erschienen sind (exklusive der Patienten, die die Hypo erfolgreich abgeschlossen haben (=91130). (damit kann man fehlende 30130 oder fehlende 99130 finden, bzw die Abbrecher isolieren/ anschreiben)
Ziffer 30130 ODER 30130T auf dem Schein im letzten Quartal und nicht im aktuellen Quartal abgerechnet. Zeige die entsprechende Ziffer in einer separaten Spalte. Exkludiere vom Ergebnis alle Patienten, die in diesem oder vergangenen Quartal die Ziffer 91130 eingetragen bekamen
/* =========================================================
Patienten mit Leistung 30130 ODER 30130T im letzten Quartal,
aber NICHT im aktuellen Quartal
EXKLUSION: Patienten mit 91130 im aktuellen ODER im letzten Quartal
+ Ausgabe: welche Ziffer(n) im Vorquartal (30130/30130T)
========================================================= */
drop table if exists tmp_q;
create temporary table tmp_q as
select
extract(year from current_date)::int as y_now,
extract(quarter from current_date)::int as q_now,
case when extract(quarter from current_date)::int = 1
then extract(year from current_date)::int - 1
else extract(year from current_date)::int
end as y_prev,
case when extract(quarter from current_date)::int = 1
then 4
else extract(quarter from current_date)::int - 1
end as q_prev;
/* Vorquartal: Patienten + welche Codes (30130/30130T) */
drop table if exists tmp_patients_codes_prev;
create temporary table tmp_patients_codes_prev as
select
p.ident as patientid,
string_agg(distinct e.code, ',' order by e.code) as ziffern_vorquartal
from tmp_q t
join kvschein s
on (s.visible = true
and s.jahr = t.y_prev
and s.quartal = t.q_prev)
join patientendetailsrelationen_kvscheine pdr_s
on (pdr_s.kvscheine_ident = s.ident)
join patientendetails pd
on (pd.patientendetailsrelationen_ident = pdr_s.patientendetailsrelationen_ident)
join patient p
on (p.patientendetails_ident = pd.ident)
join leistung l
on (l.invkvschein_ident = s.ident and l.visible = true)
join ebmkatalogeintrag e
on (e.ident = l.ebmkatalogeintrag_ident)
where
e.code in ('30130', '30130T')
group by
p.ident;
/* Aktuelles Quartal: Patienten mit 30130/30130T */
drop table if exists tmp_patients_now_30130;
create temporary table tmp_patients_now_30130 as
select distinct
p.ident as patientid
from tmp_q t
join kvschein s
on (s.visible = true
and s.jahr = t.y_now
and s.quartal = t.q_now)
join patientendetailsrelationen_kvscheine pdr_s
on (pdr_s.kvscheine_ident = s.ident)
join patientendetails pd
on (pd.patientendetailsrelationen_ident = pdr_s.patientendetailsrelationen_ident)
join patient p
on (p.patientendetails_ident = pd.ident)
join leistung l
on (l.invkvschein_ident = s.ident and l.visible = true)
join ebmkatalogeintrag e
on (e.ident = l.ebmkatalogeintrag_ident)
where
e.code in ('30130', '30130T');
/* EXKLUSION: Patienten mit 91130 im aktuellen ODER letzten Quartal */
drop table if exists tmp_patients_excl_91130;
create temporary table tmp_patients_excl_91130 as
select distinct
p.ident as patientid
from tmp_q t
join kvschein s
on (s.visible = true
and (
(s.jahr = t.y_now and s.quartal = t.q_now)
or
(s.jahr = t.y_prev and s.quartal = t.q_prev)
))
join patientendetailsrelationen_kvscheine pdr_s
on (pdr_s.kvscheine_ident = s.ident)
join patientendetails pd
on (pd.patientendetailsrelationen_ident = pdr_s.patientendetailsrelationen_ident)
join patient p
on (p.patientendetails_ident = pd.ident)
join leistung l
on (l.invkvschein_ident = s.ident and l.visible = true)
join ebmkatalogeintrag e
on (e.ident = l.ebmkatalogeintrag_ident)
where
e.code = '91130';
/* Ergebnis: im Vorquartal ja, im aktuellen Quartal nein, minus 91130 */
drop table if exists tmp_result_patients;
create temporary table tmp_result_patients as
select
prev.patientid,
prev.ziffern_vorquartal
from tmp_patients_codes_prev prev
left join tmp_patients_now_30130 nowq
on nowq.patientid = prev.patientid
left join tmp_patients_excl_91130 excl
on excl.patientid = prev.patientid
where
nowq.patientid is null
and excl.patientid is null;
/* Ausgabe */
select
p.ident as patientid,
p.nachname,
p.vorname,
cast(p.geburtsdatum as date) as geburtsdatum,
r.ziffern_vorquartal
from tmp_result_patients r
join patient p
on p.ident = r.patientid
order by
p.nachname, p.vorname, p.geburtsdatum;