klingt gut, aber da das schon so gut funktioniert, habe ich mich entschlossen es mit tastatureingaben zu lassen. Vielleicht hilft da auch was für sie:
-- Copyright Dr. Helmut M. Steinbrecher MSc. BSc. - office@praxis23.at
-- Alle Rechte vorbehalten - Verwenden nur auf eigene Gefahr und erst nach Erlaubnis durch den Autor
-- Variablen aus tomedo
set patname to "$[patient_id]$" --patientenid
set tagdatum to "$[d K MN]$" -- datum der kartei unten
set gkk to "$[kasse_name]$" -- Kassenname
set leistungen to "$[l %d;%nr]$" --Liste der Leistungen
set patalter to $[palter]$ -- Alter Patient
-- Liste der relevanten Leistungsnummern für "ÖGK"
set relevanteLeistungenOEGK to {"8a", "8b", "8c", "8d", "8e", "8f", "8g", "8h", "8i", "3", "4", "6", "9", "37", "58"}
-- Liste der relevanten Leistungsnummern für andere Kassen
set relevanteLeistungenAndere to {"A1", "B1", "A2", "B2"}
-- Hauptlogik
if gkk starts with "ÖGK" then
-- Logik für ÖGK
if leistungenAmTagdatumVorhanden(tagdatum, leistungen, relevanteLeistungenOEGK) then
display dialog "P23 Tally: erledigt"
else
set naechsteLeistung to findeNaechsteLeistungOEGK(leistungen, relevanteLeistungenOEGK)
if naechsteLeistung = "8a" then
display dialog "P23 Tally: Achtung - Es wird 17 und bei Kindern <6 auch 84 gesetzt. Bei Vertretungen dann bitte 17 löschen."
set_leistung("17", 1)
if patalter < 6 then
set_leistung("84", 1)
end if
end if
set_leistung(naechsteLeistung, 1)
end if
else
-- Logik für andere Kassen
if leistungenAmTagdatumVorhanden(tagdatum, leistungen, relevanteLeistungenAndere) then
display dialog "P23 Tally: erledigt"
else
set naechsteLeistung to findeNaechsteLeistungAndere(leistungen, relevanteLeistungenAndere)
set_leistung(naechsteLeistung, 1)
end if
end if
-- Funktion zum Überprüfen, ob eine relevante Leistung am Tagdatum vorhanden ist
on leistungenAmTagdatumVorhanden(tagdatum, leistungen, relevanteLeistungen)
set leistungenListe to paragraphs of leistungen
set vorhanden to false
repeat with einLeistung in leistungenListe
set {leistungsDatum, leistungsCode} to my splitLeistung(einLeistung)
if leistungsDatum is tagdatum and (leistungsCode is in relevanteLeistungen) then
set vorhanden to true
exit repeat
end if
end repeat
return vorhanden
end leistungenAmTagdatumVorhanden
-- Funktion zur Ermittlung der nächsten verfügbaren Leistung für ÖGK
on findeNaechsteLeistungOEGK(leistungen, relevanteLeistungen)
set vorhandeneBuchstaben to {}
set leistungenListe to paragraphs of leistungen
repeat with einLeistung in leistungenListe
set {leistungsDatum, leistungsCode} to my splitLeistung(einLeistung)
if leistungsCode is in relevanteLeistungen then
if leistungsCode starts with "8" then
try
set endeBuchstabe to character 2 of leistungsCode
set endeBuchstabe to my toLowerCase(endeBuchstabe)
if endeBuchstabe is in {"a", "b", "c", "d", "e", "f", "g", "h", "i"} then
set end of vorhandeneBuchstaben to endeBuchstabe
end if
end try
end if
end if
end repeat
set alleBuchstaben to {"a", "b", "c", "d", "e", "f", "g", "h", "i"}
repeat with buchstabe in alleBuchstaben
if buchstabe is not in vorhandeneBuchstaben then
return "8" & buchstabe
end if
end repeat
return "8i"
end findeNaechsteLeistungOEGK
-- Funktion zur Ermittlung der nächsten verfügbaren Leistung für andere Kassen
on findeNaechsteLeistungAndere(leistungen, relevanteLeistungen)
set vorhandenA1B1 to false
set leistungenListe to paragraphs of leistungen
repeat with einLeistung in leistungenListe
set {leistungsDatum, leistungsCode} to my splitLeistung(einLeistung)
if leistungsCode is "A1" or leistungsCode is "B1" then
set vorhandenA1B1 to true
end if
end repeat
if vorhandenA1B1 then
return "A2"
else
return "A1"
end if
end findeNaechsteLeistungAndere
-- Funktion zum Splitten einer Leistung in Datum und Code
on splitLeistung(leistung)
set AppleScript's text item delimiters to ";"
set leistungList to text items of leistung
set AppleScript's text item delimiters to ""
if (count of leistungList) ≥ 2 then
set leistungsDatum to my trimWhitespace(item 1 of leistungList)
set leistungsCode to my trimWhitespace(item 2 of leistungList)
set leistungsCode to my toLowerCase(leistungsCode)
else
set leistungsDatum to ""
set leistungsCode to ""
end if
return {leistungsDatum, leistungsCode}
end splitLeistung
-- Funktion zum Entfernen von führenden und nachfolgenden Leerzeichen
on trimWhitespace(s)
set s to s as string
repeat while s begins with " " or s begins with tab
set s to text 2 thru -1 of s
if s is "" then exit repeat
end repeat
repeat while s ends with " " or s ends with tab
set s to text 1 thru -2 of s
if s is "" then exit repeat
end repeat
return s
end trimWhitespace
-- Funktion zum Umwandeln eines Zeichens in Kleinbuchstaben
on toLowerCase(textToConvert)
return do shell script "echo " & quoted form of textToConvert & " | tr '[:upper:]' '[:lower:]'"
end toLowerCase
-- Funktion zum Fokussieren des Fensters mit "Kartei"
on focusKarteiWindow()
tell application "System Events"
tell application process "tomedo"
repeat with w in windows
if (name of w) starts with "Kartei" then
perform action "AXRaise" of w
exit repeat
end if
end repeat
end tell
end tell
end focusKarteiWindow
-- Angepasste set_leistung Funktion mit zwei Parametern
on set_leistung(leistungsnummer, anzahl)
focusKarteiWindow()
tell application "System Events"
-- Command + K drücken
keystroke "k" using command down
delay 0.2
-- Raute eingeben
keystroke "#"
delay 0.2
-- Leistungstext eingeben
keystroke leistungsnummer
delay 0.2
if anzahl > 1 then
-- Tab-Taste drücken, um zum Anzahlenfeld zu gelangen
keystroke tab
delay 0.2
-- Anzahl eingeben
keystroke (anzahl as string)
delay 0.2
end if
-- Enter-Taste drücken
keystroke return
delay 0.2
end tell
end set_leistung
-- Fokussiere das "Kartei"-Fenster
focusKarteiWindow()
-- Zum Abschluss Command+K und dann Escape drücken
tell application "System Events"
keystroke "k" using command down
delay 0.2
key code 53 -- Escape-Taste
end tell