Mit KI auf die Schnelle generiert, ich übernehme keine Gewähr, vielleicht hilft es:
drop table if exists baseVerordnungen;
create temporary table baseVerordnungen as
select G.datum,
G.ident as verordnungident,
G.rezept_ident,
P.ident as PatientID,
P.vorname,
P.nachname,
CAST(P.geburtsdatum as date) as geburtsdatum,
E.geschlecht,
G.pzn as PharmaZentralNummer,
CASE WHEN (G.Anzahl > 0)
THEN G.anzahl
ELSE 1
END as anzahl,
((G.avpBeiVerordnung)/100.00)::numeric::money einzelkosten,
G.autIdem,
(G.eigenrezeptur_ident is not null) as eigenrezeptur,
CASE WHEN (G.eigenrezeptur_ident is not null)
THEN C.kurzname
ELSE '' -- wird vom client per postprocessing aufgefüllt, indem dieser seine lokale Medikamentendatenbank abfragt
END as name_katalog,
G.herstellerBeiVerordnung as hersteller,
CASE WHEN G.rezepttyp = 1 THEN 'Rot'
WHEN G.rezepttyp = 2 THEN 'Grün'
WHEN G.rezepttyp = 3 THEN 'Blau'
WHEN G.rezepttyp = 4 THEN 'BTM'
WHEN G.rezepttyp = 5 THEN 'Sprechstundenbedarf'
WHEN G.rezepttyp = 6 THEN 'BTM'
WHEN G.rezepttyp = 7 THEN 'T-Rezept'
WHEN G.rezepttyp = 11 THEN 'eRot'
WHEN G.rezepttyp = 12 THEN 'eGrün'
WHEN G.rezepttyp = 13 THEN 'eBlau'
ELSE 'unbekannt'
END
as rezepttyp
from medikamentenverordnung G
left join Eigenrezeptur C on (G.eigenrezeptur_ident = C.ident)
join patientendetailsrelationen_verordnungen D on (D.verordnungen_ident = G.ident)
join patientendetails E on (E.patientendetailsrelationen_ident = D.patientendetailsrelationen_ident)
join patient P on (P.patientendetails_ident = E.ident)
where
-- wenn an den query-parametern eine Änderung vorgenommen wird, muss höchstwahrscheinlich auch ZSBudgetWindowController.m am client angepasst werden
( G.datum >= '2026-01-01 00:00:00' and G.datum <= '2026-03-31 23:59:59' ) and
G.darreichungBeiVerordnung != 'DIGA' AND
G.visible = true;
drop table if exists kostenViaFormular;
create temporary table kostenViaFormular as
select A.*,
G.ident as formular_ident,
0 as karteieintragID,
G.kvschein_ident, -- hinzugefügt für Diagnosen-Join
N.kuerzel as verordner,
B.kuerzel as betriebsstaette,
CASE WHEN (G.abrechnungstyp = 4) THEN true
ELSE false
END as hzv,
S.abgeleiteterKostentraeger_ident as kk_ident
from baseVerordnungen A
join karteieintrag_medikVerordnung_bisher F on (F.medikverordnung_bisher_ident = A.verordnungident)
join karteieintrag G on (F.karteieintrag_ident = G.ident)
left join formulartyp H on (H.ident = G.formulartyp_ident)
left join Betriebsstaette B on (B.ident = G.betriebsstaette_ident)
left join Nutzer N on (N.ident = G.arzt_ident)
left join KVSchein S on (S.ident = G.kvschein_ident)
where
(H.musternummer = '16' or H.name = 'BTM-Rezept') and
G.visible = true and
G.abrechnungstyp in (1,4); -- KV + HZV
drop table if exists zsTempInstitutionskennzeichen;
create temporary table zsTempInstitutionskennzeichen as
select max(ident) as ident, code from institutionskennzeichen
group by code;
drop table if exists kostenViaErezept;
create temporary table kostenViaErezept as
select A.*,
0 as formular_ident,
G.ident as karteieintragID,
G.kvschein_ident, -- hinzugefügt für Diagnosen-Join
N.kuerzel as verordner,
B.kuerzel as betriebsstaette,
CASE WHEN (DER.hzvdetails_ident != null) THEN true
ELSE false
END as hzv,
J2.krankenkasse_ident as kk_ident
from baseVerordnungen A
join Rezept R on (R.ident = A.rezept_ident)
left join DERezept DER on (DER.ident = A.rezept_ident)
left join Karteieintrag G on (G.rezept_ident = R.ident)
left join Betriebsstaette B on (B.ident = R.betriebsstaette_ident)
left join Nutzer N on (N.ident = R.arzt_ident)
left join Kartendaten KD on (R.kartendaten_ident = KD.ident)
left join zsTempInstitutionskennzeichen IK on (IK.code = COALESCE(KD.kostentraeger, KD.abrechnenderKostentraeger) )
left join krankenkasse_institutionskennzeichen J2 on (J2.institutionskennzeichen_ident = IK.ident)
where
G.visible = true and
(DER.kostentraegertyp in ('', 'GKV', 'SKT', 'HZV_GKV') OR DER.kostentraegertyp is null);
drop table if exists kostenjoined;
create temporary table kostenjoined as
select * from kostenViaFormular
UNION ALL
select * from kostenViaErezept;
-- 1. Vorab-Aggregierung der KV-Schein-Diagnosen
drop table if exists zsTempScheinDiagnosen;
create temporary table zsTempScheinDiagnosen as
select
KSD.kvschein_ident,
string_agg(ICD.code, ', ' ORDER BY ICD.code) as diagnose,
string_agg(D.typ, ', ' ORDER BY ICD.code) as diagnosesicherheit
from kvschein_quartalsdiagnosen KSD
join diagnose D on (D.ident = KSD.quartalsdiagnosen_ident)
left join icdkatalogeintrag ICD on (ICD.ident = D.icdkatalogeintrag_ident)
where D.visible = true
group by KSD.kvschein_ident;
-- 2. Vorab-Aggregierung der Dauerdiagnosen des Patienten (als Fallback)
drop table if exists zsTempPatientDiagnosen;
create temporary table zsTempPatientDiagnosen as
select
P.ident as patientid,
string_agg(ICD.code, ', ' ORDER BY ICD.code) as diagnose,
string_agg(D.typ, ', ' ORDER BY ICD.code) as diagnosesicherheit
from diagnose D
join patientendetailsrelationen_diagnosen J on (J.diagnosen_ident = D.ident)
left join patientendetails PD on (PD.patientendetailsrelationen_ident = J.patientendetailsrelationen_ident)
left join patient P on (P.patientendetails_ident = PD.ident)
left join icdkatalogeintrag ICD on (ICD.ident = D.icdkatalogeintrag_ident)
where D.visible = true
group by P.ident;
-- FINALES SELECT MIT COALESCE (Zuerst Schein-Diagnose, dann Dauerdiagnose)
select A.datum,
A.PatientID,
A.vorname,
A.nachname,
A.geburtsdatum,
A.geschlecht,
A.PharmaZentralNummer,
A.anzahl,
A.einzelkosten,
(A.anzahl*A.einzelkosten) as gesamtkosten,
A.autIdem,
A.eigenrezeptur,
A.name_katalog,
A.hersteller,
A.rezepttyp,
A.formular_ident,
A.karteieintragID,
A.hzv,
A.verordner,
A.betriebsstaette,
KTG.code as kostentraegerGruppe,
KTG.bezeichnung as kostentraegerbezeichnung,
CASE WHEN (KTG.code = '01') THEN 'AOK'
WHEN (KTG.code = '02') THEN 'SVLFG'
WHEN (KTG.code = '03') THEN 'IKK'
WHEN (KTG.code = '04') THEN 'BKK'
WHEN (KTG.code = '05') THEN 'Knappschaft'
WHEN (KTG.code = '11') THEN 'VdEk'
WHEN (KTG.code = '12') THEN 'VdEk'
ELSE 'Sonstiger Kostenträger'
END as kostentraeger,
COALESCE(D.diagnose, PDG.diagnose) as diagnose, -- Nutzt Schein-Diagnose, sonst Dauerdiagnose
COALESCE(D.diagnosesicherheit, PDG.diagnosesicherheit) as diagnosesicherheit
from kostenjoined A
left join Krankenkasse KK on (KK.ident = A.kk_ident)
left join Kostentraegergruppe KTG on (KK.Kostentraegergruppe_ident = KTG.ident)
left join zsTempScheinDiagnosen D on (D.kvschein_ident = A.kvschein_ident)
left join zsTempPatientDiagnosen PDG on (PDG.patientid = A.PatientID)
where
true;