Optinomic / apps

Optinomic applications
1 stars 2 forks source link

Zugriff ohne ODBC-Schnittstelle #182

Closed schoenenb closed 6 years ago

schoenenb commented 6 years ago

Wenn du schon so zackig am Antworten bist, hätte ich nochmals etwas: Im Confing-File ist doch festgehalten, wer worauf Zugriff hat?! Ich weiss grad nicht mehr, wo ich das einsehen könnte… Bisher hattest du’s mir immer als File geschickt.

Fall Sonja: Sie hat anscheinend keinen Zugriff auf einen Patienten, bei dem sie als Fallführende eingetragen ist. (http://optinomic.suedhang.ch/client.new/#/patient/474/stay/5633)

Weiter sollten die Fallverantwortlichen auf alle Patienten Ihres Teams zugreifen können. Ist das ohne die Polypoint-Schnittstelle überhaupt möglich?

ottigerb commented 6 years ago

Die Patientengruppen Zugriff: * steuern den Zugriff.

Beispiel:

http://optinomic.suedhang.ch/client.new/#/patients/group/27/edit

Ist aktuell wie folgt definiert:

LEFT JOIN stay ON(p.id = stay.patient) 
LEFT JOIN (SELECT *, cast(value as json) AS json FROM annotations) AS ann ON ann.patient_id = p.id AND ann.module = 'com.optinomic.init.poly_stay' 

WHERE 
    (ann.json#>>'{aktuell_letzter,bel_selector,org_current}' = 'QuEA') 
OR  (ann.json#>>'{aktuell_letzter,bel_selector,org_current}' = 'PTS') 
AND (stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()

=> Diese Fallgruppen basieren auf Belegung von Polypoint (com.optinomic.init.poly_stay) und sind somit durch den fehlenden ODBC betroffen!

Solution

Eine einfache Lösung wäre es m.E. diese Zugriff: * Fallgruppen diesbezüglich zu entflechten. Bsp.:

LEFT JOIN stay ON(p.id = stay.patient) 
WHERE 
(stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()

Dies führt jedoch dazu dass der Zugriff sehr erweitert wird - doch m.E. ist dies i.O.!

Die Erstellung von solchen Fallgruppen SQL kann in der SQL-Toolbox getestet/erarbeitet werden:

SELECT p.* FROM patient AS p

LEFT JOIN stay ON(p.id = stay.patient) 
WHERE 
(stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()

Du kannst gerne die Zugriff: * Fallgruppen bearbeiten. Halte jedoch eine COPY des "aktuellen Stands" - allenfalls als "PASTE" hier. ODBC sollte hoffentlich bald kommen - Erne hat zugesichert. Maaaaan!

schoenenb commented 6 years ago

Vielen lieben Dank – habe die SQL-Box folgendermassen angepasst:

LEFT JOIN stay ON(p.id = stay.patient) 
WHERE 
(stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()
AND stay.class = 'S3'

bisheriger Code siehe https://github.com/Optinomic/apps/issues/182#issuecomment-396560813

ottigerb commented 6 years ago

Dies sollte für alle Zugriff: * Patientengruppen vorgenommen werden - or?

schoenenb commented 6 years ago

Nur für QuEA & PTS, da habe ich die gleiche Abfrage reingespielt.

Für die TK habe ich's nun auch angepasst: alt:

LEFT JOIN stay ON(p.id = stay.patient) 
LEFT JOIN (SELECT *, cast(value as json) AS json FROM annotations) AS ann ON ann.patient_id = p.id AND ann.module = 'com.optinomic.init.poly_stay' 

WHERE 
    (ann.json#>>'{aktuell_letzter,bel_selector,bel_id}' = '4') 
AND (stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()

neu:

LEFT JOIN stay ON(p.id = stay.patient) 
WHERE 
(stay.stop is null OR stay.stop >= (now() - interval '15 day'))
AND stay.start <= now()
AND stay.class = 'T3'