Hallo,
ich denke man muss sich überlegen, welchen Aufwand man betreiben muss und wie viele Dinge man "umstellen" muss. Manche Sachen kann man ja einfacher lösen als andere... Wir haben das Recall-System aus Impfdoc z.B. bisher nicht genutzt... Werde ich aber glaube ich mal anstoßen. Prinzipiell ja sowieso eine gute Sache, für vieles fehlt leider nur oft die Zeit bzw. die innere Motivation, sich eingehend mit etwas zu beschäftigen, einfach nur weil es ganz gut ist... So ist der Anreiz etwas größer. Dafür braucht man aber den Überblick. Ich war z.B. der Meinung Impfquote erreichen wir locker... stimmt auch im 4. Quartal... jetzt sieht es vielleicht anders aus... mal sehen ;-)
Ihren Vorschlag hat die KI jedenfalls umsetzen können... Ich hätte es nicht gekonnt ;-)
DROP TABLE IF EXISTS tempLeistungsSummen;
CREATE TEMPORARY TABLE tempLeistungsSummen AS
SELECT
SUM(CASE WHEN e.code IN ('01410','01411','01412','01413','01415','01721','03062','03063','38100','38105') THEN l.anzahl ELSE 0 END) AS hausbesuche,
SUM(CASE WHEN e.code IN ('30980','30984','03360','03362','03370','03371','03372','03373','37300','37302','37305','37306','37314','37317') THEN l.anzahl ELSE 0 END) AS geri_palli,
SUM(CASE WHEN e.code IN ('37100','37102','37105','37113','37120') THEN l.anzahl ELSE 0 END) AS kooperation_pflegeheim,
SUM(CASE WHEN e.code LIKE '891%' OR e.code LIKE '883%' THEN l.anzahl ELSE 0 END) AS impfungen,
SUM(CASE WHEN e.code IN ('02300','02301','02302','02310','02311','02312','31600') THEN l.anzahl ELSE 0 END) AS chirurgie,
SUM(CASE WHEN e.code IN ('33012','33042') THEN l.anzahl ELSE 0 END) AS ultraschall,
SUM(CASE WHEN e.code IN ('03241','03321','03322','03324','03330') THEN l.anzahl ELSE 0 END) AS apparative_diagnostik,
SUM(CASE WHEN e.code = '01450' THEN l.anzahl ELSE 0 END) AS videosprechstunde,
SUM(CASE WHEN e.code IN ('03001','03002','03003','03004','03005') THEN l.anzahl ELSE 0 END) AS anzahl_03000
FROM leistung l
JOIN kvschein s ON l.invkvschein_ident = s.ident
JOIN patientendetailsrelationen_kvscheine pdr_s ON s.ident = pdr_s.kvscheine_ident
JOIN patientendetails pd ON pdr_s.patientendetailsrelationen_ident = pd.patientendetailsrelationen_ident
JOIN patient p ON pd.ident = p.patientendetails_ident
JOIN ebmkatalogeintrag e ON l.ebmkatalogeintrag_ident = e.ident
WHERE
s.jahr = EXTRACT(YEAR FROM CURRENT_DATE)::int
AND s.quartal = EXTRACT(QUARTER FROM CURRENT_DATE)::int
AND l.visible = true
AND s.visible = true
AND l.dtype = 'EBMLeistung';
DROP TABLE IF EXISTS tempLeistungsSummenVorjahr;
CREATE TEMPORARY TABLE tempLeistungsSummenVorjahr AS
SELECT
SUM(CASE WHEN e.code IN ('03001','03002','03003','03004','03005') THEN l.anzahl ELSE 0 END) AS anzahl_03000_vorjahr
FROM leistung l
JOIN kvschein s ON l.invkvschein_ident = s.ident
JOIN patientendetailsrelationen_kvscheine pdr_s ON s.ident = pdr_s.kvscheine_ident
JOIN patientendetails pd ON pdr_s.patientendetailsrelationen_ident = pd.patientendetailsrelationen_ident
JOIN patient p ON pd.ident = p.patientendetails_ident
JOIN ebmkatalogeintrag e ON l.ebmkatalogeintrag_ident = e.ident
WHERE
s.jahr = (EXTRACT(YEAR FROM CURRENT_DATE)::int - 1)
AND s.quartal = EXTRACT(QUARTER FROM CURRENT_DATE)::int
AND l.visible = true
AND s.visible = true
AND l.dtype = 'EBMLeistung';
DROP TABLE IF EXISTS tempZielwerte;
CREATE TEMPORARY TABLE tempZielwerte AS
SELECT
5 AS hausbesuche,
12 AS geri_palli,
1 AS kooperation_pflegeheim,
CASE WHEN EXTRACT(QUARTER FROM CURRENT_DATE) IN (1,2,3) THEN 7 ELSE 25 END AS impfungen,
3 AS chirurgie,
2 AS ultraschall,
3 AS apparative_diagnostik,
1 AS videosprechstunde;
SELECT
'Absolut' AS kategorie,
t.hausbesuche::text AS "Haus-/Heimbesuche",
t.geri_palli::text AS "Geri / Palli",
t.kooperation_pflegeheim::text AS "Kooperation Pflegeheim",
t.impfungen::text AS "Impfungen",
t.chirurgie::text AS "Chirurgie",
t.ultraschall::text AS "Ultraschall",
t.apparative_diagnostik::text AS "apparative Diagnostik",
t.videosprechstunde::text AS "Videosprechstunde",
t.anzahl_03000::text AS "Anzahl 03000",
v.anzahl_03000_vorjahr::text AS "Anzahl 03000 Vorjahr"
FROM tempLeistungsSummen t
CROSS JOIN tempLeistungsSummenVorjahr v
UNION ALL
SELECT
'Prozent zu 03000 aktuell',
ROUND((t.hausbesuche::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.geri_palli::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.kooperation_pflegeheim::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.impfungen::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.chirurgie::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.ultraschall::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.apparative_diagnostik::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
ROUND((t.videosprechstunde::numeric / NULLIF(t.anzahl_03000,0)) * 100,1)::text,
NULL,
NULL
FROM tempLeistungsSummen t
UNION ALL
SELECT
'Prozent zu 03000 Vorjahr',
ROUND((t.hausbesuche::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.geri_palli::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.kooperation_pflegeheim::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.impfungen::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.chirurgie::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.ultraschall::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.apparative_diagnostik::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
ROUND((t.videosprechstunde::numeric / NULLIF(v.anzahl_03000_vorjahr,0)) * 100,1)::text,
NULL,
NULL
FROM tempLeistungsSummen t
CROSS JOIN tempLeistungsSummenVorjahr v
UNION ALL
SELECT
'Ziel',
z.hausbesuche::text,
z.geri_palli::text,
z.kooperation_pflegeheim::text,
z.impfungen::text,
z.chirurgie::text,
z.ultraschall::text,
z.apparative_diagnostik::text,
z.videosprechstunde::text,
NULL,
NULL
FROM tempZielwerte z
UNION ALL
SELECT
'Ziel erreicht?',
CASE WHEN ROUND((t.hausbesuche::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.hausbesuche THEN '' ELSE '' END,
CASE WHEN ROUND((t.geri_palli::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.geri_palli THEN '' ELSE '' END,
CASE WHEN ROUND((t.kooperation_pflegeheim::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.kooperation_pflegeheim THEN '' ELSE '' END,
CASE WHEN ROUND((t.impfungen::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.impfungen THEN '' ELSE '' END,
CASE WHEN ROUND((t.chirurgie::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.chirurgie THEN '' ELSE '' END,
CASE WHEN ROUND((t.ultraschall::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.ultraschall THEN '' ELSE '' END,
CASE WHEN ROUND((t.apparative_diagnostik::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.apparative_diagnostik THEN '' ELSE '' END,
CASE WHEN ROUND((t.videosprechstunde::numeric / NULLIF(t.anzahl_03000,0)) * 100,1) >= z.videosprechstunde THEN '' ELSE '' END,
NULL,
NULL
FROM tempLeistungsSummen t
CROSS JOIN tempZielwerte z
UNION ALL
SELECT
'fehlende Leistungen (akt / Vorjahr)',
'(' || GREATEST(CEIL(z.hausbesuche/100.0 * t.anzahl_03000) - t.hausbesuche,0)::int || ' / ' || GREATEST(CEIL(z.hausbesuche/100.0 * v.anzahl_03000_vorjahr) - t.hausbesuche,0)::int || ')',
'(' || GREATEST(CEIL(z.geri_palli/100.0 * t.anzahl_03000) - t.geri_palli,0)::int || ' / ' || GREATEST(CEIL(z.geri_palli/100.0 * v.anzahl_03000_vorjahr) - t.geri_palli,0)::int || ')',
'(' || GREATEST(CEIL(z.kooperation_pflegeheim/100.0 * t.anzahl_03000) - t.kooperation_pflegeheim,0)::int || ' / ' || GREATEST(CEIL(z.kooperation_pflegeheim/100.0 * v.anzahl_03000_vorjahr) - t.kooperation_pflegeheim,0)::int || ')',
'(' || GREATEST(CEIL(z.impfungen/100.0 * t.anzahl_03000) - t.impfungen,0)::int || ' / ' || GREATEST(CEIL(z.impfungen/100.0 * v.anzahl_03000_vorjahr) - t.impfungen,0)::int || ')',
'(' || GREATEST(CEIL(z.chirurgie/100.0 * t.anzahl_03000) - t.chirurgie,0)::int || ' / ' || GREATEST(CEIL(z.chirurgie/100.0 * v.anzahl_03000_vorjahr) - t.chirurgie,0)::int || ')',
'(' || GREATEST(CEIL(z.ultraschall/100.0 * t.anzahl_03000) - t.ultraschall,0)::int || ' / ' || GREATEST(CEIL(z.ultraschall/100.0 * v.anzahl_03000_vorjahr) - t.ultraschall,0)::int || ')',
'(' || GREATEST(CEIL(z.apparative_diagnostik/100.0 * t.anzahl_03000) - t.apparative_diagnostik,0)::int || ' / ' || GREATEST(CEIL(z.apparative_diagnostik/100.0 * v.anzahl_03000_vorjahr) - t.apparative_diagnostik,0)::int || ')',
'(' || GREATEST(CEIL(z.videosprechstunde/100.0 * t.anzahl_03000) - t.videosprechstunde,0)::int || ' / ' || GREATEST(CEIL(z.videosprechstunde/100.0 * v.anzahl_03000_vorjahr) - t.videosprechstunde,0)::int || ')',
NULL,
NULL
FROM tempLeistungsSummen t
CROSS JOIN tempLeistungsSummenVorjahr v
CROSS JOIN tempZielwerte z;
Das ganze sieht dann so aus:

Einfach Wahnsinn was Tomedo in Verbindung mit KI da ermöglicht! ich bin jedenfalls schwer beeindruckt. :-)
lg
Sebastian Mai
PS: nur als kleines Rechenbeispiel: 12,74 cent ist der Orientierungswert. 20 Punkte bringen also bei 1000 Scheinen also 2548 Euro im Quartal bzw. rund 10.100 Euro aufs Jahr. Da die 03040 auch unbudgetiert vergütet wird, kann sich z.B. der Besuch eines Qualitätszirkel zur Erfüllung einer der Vorgaben durchaus lohnen ;-)