Hallo Herr Gareis,
nun hat es mich doch gereizt, Ihr Problem zu lösen, da ich mich gerade mit einem ähnlichen Thema beschäftigen musste. Eigentlich müsste man dazu eine SQL-Abfrage schreiben (oder sich von Zollsoft gegen Gebühr schreiben lassen). Das wäre die korrekte Art der Datenbankabfrage. Diese Fähigkeit ist mir aber (auch mit ChatGPT-Hilfe) bisher nicht gegeben.
Daher habe ich eine Lösung gebastelt, die mittels Statistik und darauf angewandte Aktionsketten bzw. AppleScripte funktioniert. Sie ist mehrschrittig, vermeidet aber das für mich nicht beherrschbare SQL-Abfragen-Erstellen. Am Ende kommt Ihr gewünschtes Ergebnis heraus. Bei dem Aufwand, den ich für mich betrieben habe, hoffe ich, dass nicht ein begabterer tomedo-Nutzer mit einer Lösung um die Ecke kommt, die den von mir gezeigten Prozess mit drei Klicks hinbekommt.
So geht es:
1. Statistik anlegen mit den auszuwertenden Patienten. Hier können Sie mit "Aktionen" unten rechts im Statistikfenster für jeden Patienten in Ihrer Liste Aktionen wie einzelne Aktionsketten auslösen.
2. Für jeden Patienten in der Statistik per AK einen Karteieintrag (ich habe ihn SAMMLER genannt) anlegen, der alle Befunde (in Ihrem Fall SONO) eines Patienten enthält inkl. des Merkmals, nach dem Sie die einzelnen Befunde auswählen wollen (in Ihrem Fall Arztname, in meinem Beispiel das Wort "Medikation").
3. Für jeden Patienten in der Statistik per AK aus dem zuvor angelegten Karteieintrag SAMMLER per AppleScript und regex-Auswertung die Textblöcke extrahieren, die den gesuchten Begriff enthalten. Um diese Informationen an einer Stelle zu sammeln, habe ich die Zwischenablage ausgewählt. Bevor Sie diese AK starten, sollten Sie also die Zwischenablage "leeren", z.B. in dem Sie ein Leerzeichen per CMD-C hineinkopieren.
4. Wenn die beiden AK über die Statistik "gelaufen" sind, enthält die Zwischenablage Ihre gewünschte Sammlung von Befunden. Sie können Sie dann per CMD-V in das Textprogramm Ihrer Wahl einfügen und dort weiterbearbeiten/ausdrucken.
Fertig.
Sie benötigen für den o.g. Ablauf also folgende Bausteine:
A) Karteieintrag SAMMLER
Für Ihren Anwendungsfall müssen Sie dann in der Vorauswahl das bei mir genutzte PROC durch den Karteieintrag ersetzen, um den es bei Ihnen geht (als SONO o.ä.).
B) Aktionskette zum automatischen Anlegen des Karteieintrags SAMMLER
C) ein AppleScript, welches die Suche im Text vornimmt (wird bei mir KE-SAMMLER genannt). Dies können Sie unter Admin > Skripte anlegen. Dieses Skript macht folgendes: Schaue in letzten Karteieintrag SAMMLER des gerade geöffneten Patienten, ob dort ein durch Leerzeilen getrennter Textblock zu finden ist, der 1.) mit dem Inhalt der Variable SplitText beginnt und 2.) den Inhalt der Variable Suchbegriff enthält. Wenn dies zutrifft, wird der gesamte Textblock zwischen den Leerzeilen extrahiert und an den Inhalt der Zwischenablage angehängt. Diese wächst also langsam an.
Um das Skript für Ihren Anwendungsfall anzupassen, müssen Sie in den ersten drei Zeilen beachten, dass der 1. ) gewünschte Karteieintrag ausgewählt wird (hier SAMMLER mit dem CKE-Feld Sammlung, 2.) der Suchbegriff korrekt angegeben wird (bei mir "Medikation", bei Ihnen der gewünschte Arztname) und 3.) der passende Beginn des Blocks als Variable SplitText genannt ist (bei mir "Procedere", bei Ihnen der Name des Sonokarteieintrags).
Falls Sie für Ihren Fall noch im Ergebnistext aufgeführt haben wollten, bei welchem Patienten die Textblöcke extrahiert wurden, könnte man dies noch einbauen. So erhalten Sie zunächst einmal eine Liste der Textblöcke ohne Patientennamen, was für viele Zwecke aufgrund der Anonymität sinnvoll ist.
set karteiEintrag to "$[karteiEintragValue_withArgs SAMMLER customKarteiEintragEntries.Sammlung _ N]$"
set Suchbegriff to "Medikation"
set SplitText to "Procedere"
set pythonScript to "
import re
import sys
text = '''" & karteiEintrag & "'''
suchtext = '''" & Suchbegriff & "'''
splittext = '''" & SplitText & "'''
# Split the text into blocks using the specified split text
blocks = text.split(splittext)
# Add the split text back to each block (except the first which is empty)
blocks = [splittext + block for block in blocks if block.strip()]
# Filter blocks to include only those containing the search text
filtered_blocks = [block for block in blocks if suchtext in block]
if filtered_blocks:
print('\\n\\n'.join(filtered_blocks).strip())
else:
print('Kein passender Text gefunden.')
"
set escapedPythonScript to quoted form of pythonScript
set result to do shell script "python3 -c " & escapedPythonScript
set the clipboard to (the clipboard) & result
D) Aktionskette, die das AppleScript aufruft