Ich möchte von einer Text Variable nur die ersten 8 Zeichen haben. Es geht darum, die Seitenbezeichnung eines OPS Codes, sofern vorhanden, zu entfernen.

Also aus 5-787.12L soll 5-787.12 werden und 5-888.55 soll so bleiben.

Hintergrund ist, dass ich über meinen OPS Code wissen möchte welcher EBM Kategorie (D1 - D5) er zugehört. Dazu habe ich 5 Variablen mit leerzeichensepariert allen OPS Codes einer Gruppe gegen die ich dann meinen Code über zs_contains teste - das wird aber nur was, wenn die Seitenbezeichnung weg ist.

Der Regex Code ist vermutlich ^.{1,8}

Aber mein Befehl $[regex ^.{1,8} $[v1]$]$  ist irgendwie syntaktisch falsch, leider...
Gefragt in Frage von (980 Punkte)
0 Punkte

3 Antworten

bin leider ken großer regex Experte, aber hier hilft stackoverflow sehr häufig, zB könnte das Ihnen helfen?

https://stackoverflow.com/questions/12737941/how-to-regex-a-string-length-8-first-character-letter-and-remaining-numeric
Beantwortet von (3.1k Punkte)
0 Punkte

Vielen Dank für die Antwort. Den regex Befehl habe ich schon über ChatGPT und https://regex101.com/ vermutlich korrekt ermittelt: ^.{1,8}

Es fehlt mir aber an der tomedo Syntax, wie ich diesen Befehl konkret zu formulieren habe.

Die Alternative, die EBM Kategorie per SQL Abfrage aus tomedo direkt heraus zu kitzeln, ist mir leider vollständig zu hoch...

 

Kennen Sie das Kommando $[bisZeichen]$. Ich habe das in einer Abfrage für Text allerdings benutzt. Evtl. hilft das?

Sonst scheint hier im Forum ein regex Experte aktiv zu sein - fragen Sie mal Herrn Klaproth, wer das ist. Ich meine mich an einen Post in den le Tagen bis 2 Wo zu erinnern, wo der Kollege mit regex Wissen brilliert hat.

Da ich Ihre genaue Konstellation nicht kenne hier die Bedingung als Beispiel bei mir. Ich frage hier im AU-Formular die ersten 6 Zeichen des Eintrages im ersten Feld des Formulares.

ja, mit bisZeichen hatte ich auch herumprobiert, wird aber scheinbar im CKE nicht interpretiert. Wenn ich das programmiere:

kommt das als Ergebnis raus:

Moin Herr Gunstmann

ich kann Ihnen mit Regex wenig helfen, da ist Herr Baumann Spezialist.#Was machen Sie wenn der OPS Code nur 7-stellig ist, dann würde die Seitenbezeichnung immer mit übernommen.

Soviel ich weiß wird immer das ausgelesen, was zwischen ([_____]) steht. Hier wundert mich bei Ihrem Beispiel die geschweifte Klammer.

Zum Testen, was beim String ausgelesen wird eignet sich https://regex101.com. Ich muss mich da immer wieder mühsam reinfummeln und bin froh wenn ich es irgendwie hinbekomme.

Was die OPS Ziffern angeht, generiere ich die selbst mit Hilfe eines CKE, das funktioniert in begrenzten Fachgebieten wie Unserem relativ gut.

Wenn Interesse besteht, gern PN, mich würde interessieren, wie Sie Chat GPT einesetzen um die regex kommandos zu bekommen.

Das Kommando an sich schon

aber die CKE-Variable "v1" akzeptiert tomedo hier nicht...  Ein Bug in tomedo? Oder - wie ich vermute - haben das die Zollsoft-Entwickler gar nicht hierfür vorgesehen = umgesetzt

Das Problem hat mich angefixt :-) und ich habe etwas rungetüftelt:

1. im CKE direkt funzt das mit $[bisZeichen]$ nur wenn es sich nicht auf Variablen DIESES CKEs bezieht (s. Bild oben mit dem Datum)

2. Aber es funzt außerhalb des CKEs - mit $[bisZeichen 4 karteiEintragValue_withArgs hb-test_001  customKarteiEintragEntries.v1 _ N]$ bekomme ich es zumindest hin

Weiter komme ich auch nicht. Aber evtl. hilft es Ihnen...

Mich interessiert das auch, daher habe ich auch ein bisschen ausprobiert:

Die Briefkommandos $[abZeichen]$ und $[bisZeichen]$ funktionieren auch innerhalb des CKE, aber nur in der Form:

$[abZeichen 3 karteiEintragValue_withArgs test_parser customKarteiEintragEntries.v1 _ N]$

Leider wird dann das berechnende Feld nicht aktualisiert, wenn ein Eintrag im Feld der Variablen erfolgt. Wenn man den CKE beendet und erneut öffnet wird richtig berechnet. Bei anderen Kommandos innerhalb von CKE kann man als Argument direkt einen Variablennamen des CKE setzten, der dann direkt neu berechnet wird. Ich würde erwarten, dass 

$[abZeichen 3 $[v1]$ ]$

funktioniert, tut es aber leider nicht.

 

Hier das Beispiel:

 

ergibt erst: 

bei erneutem Öffen des CKE dann

Das liegt daran, dass der Variableinhalt erst ausgewertet werden kann, wenn er als Karteieintrag gespeichert ist.

Guten Abend, 

freut mich sehr, wenn ich hier schon als regex-"Experte" gehandelt werde, vor allem wenn dies Lob von so ausgewiesenen Experten, kommt blush, von denen ich auch immer sehr gerne und viel lerne. 

Da helfe ich natürlich gern.

Eigentlich ist es gar nicht so schwierig. Man muss per regex in den Klammern (  ) nur jeweils die Buchstabentypen aufführen, die zum Muster passen. Das ist bei solchen Zahlencodes meist viel einfacher als im freien Text, da es da ja keine so feste Struktur gibt. Für den vorliegenden Fall wollen wir eine Zahl   [\d]    , dann das "-"       \-     , dann zwei Zahlen (übersetze ich hier in 1 oder mehrere)        [\d]+     , dann einen "."             \.         und zuletzt wieder 2 Zahlen (wiederum als 1 oder mehrere)          [\d]+       . So mit kommen nur die gewünschten Zahlen mit den jeweiligen Trennzeichen aber ohne Buchstaben heraus. 

Der regex lautet dann:

([\d]+\-[\d]+\.[\d]+)

Die Erfahrung, dass bestimmte regex-Ausdrücke, die man sich per ChatGPT (nutze ich auch gerne dafür) oder in regex101 gebastelt hat, dann in tomedo nicht funktionieren, habe ich auch schon gemacht. Gerade wenn man über die allereinfachsten Dinge hinausgehen will (da geht in regex eigentlich noch einiges), wird es unübersichtlich. Es gibt verschiedene "Geschmacksrichtungen" der regex-Syntax, die durchaus unterschiedliche Ergebnisse bieten. Ich wähle da "Python" aus, bin mir aber auch nicht sicher, ob das die perfekte Lösung ist. Vielleicht können die Zollsoft-Kollegen zu diesem Punkt eine Auskunft geben. 

Beantwortet von (2.6k Punkte)
+1 Punkt
Hallo Christian,

ChatGPT zum Erstellen von regex kannst Du ganz so nutzen, dass Du Deinen Wunsch (hier z.B. "Schreibe mir einen regex, der aus dem Text 5-787.12L alles extrahiert abgesehen vom letzten Buchstaben") als Auftrag formulierst. Meistens muss man die Antworten dann noch mit Änderungswünschen dahin bringen, dass das gewünschte Ergebnis herauskommt (auch Fehler / Halluzinationen kommen gerne mal vor). Gerade das Problem mit den o.g. Syntax-Varianzen (tomedo-regex vs. diejenige, die ChatGPT als Grundlage nimmt) führt recht leicht dazu, dass bei ChatGPT Ergebnisse herauskommen, die in tomedo dann nicht genau so funktionieren. Ich sehe ChatGPT daher eher als Inspiration, denn als Vollautomatik. Nich selten ist eine Anfrage ins Forum vermutlich die einfachere Lösung...

Vielen Dank für die Herleitung des regex Code. Ich hatte ChatGPT einfach gefragt: "Erstelle mir einen regex Code für tomedo um nur die ersten 8 Zeichen eines String zu erzeigen, also zB aus 5-787.11L soll bitte 5-787.11 werden und zB 5-787.12 soll so bleiben"

Das Ergebnis hatte ich dann mit  https://regex101.com/  erfolgreich getestet.

Die Herleitung von Herrn Baumann programmiert die Fragestellung allerdings genauer.

Was ich aber immer noch nicht verstehe, ist die Anwendung in tomedo, ich verstehe das X Kommando an der Stelle nicht. Ich habe meinen zu kürzenden OPS Code im CKE in der Variable v1 und den möchte ich nun in v2 gekürzt haben. Mein Versuch mit

$[regex ([\d]+\-[\d]+\.[\d]+) $[v1]$]$

scheitert kläglich.

Moin Herr Gunstmann,

dazu müssen Sie im regex Kommando noch angeben, welchen Karteieintrag das Kommando berücksichtigen soll.

So in etwa sollte es funktionieren - CKE steht für Ihren Karteieintrag und v1 für das Variablefeld ihres Karteieintrag. Der Befehl kann erst ausgeführt werden, wenn der Karteieintrag als Text gespeichert ist. 

Wenn Sie außerhalb des Karteieintrags sind, dann müssen Sie im Befehl auf den Karteieintrag = Text und nicht auch das Variablefeld verweisen, denn das kann auch in jedem beliebigen anderen Karteieintrag so heißen. Es hängt auch davon ab, was sonst noch im Karteieintrag steht.

$[regex ([\d]+\-[\d]+\.[\d]+) x CKE ]$

Chat GPT liefert dazu folgende Erkärung:

Der Befehl "$[regex ([\d]+-[\d]+.[\d]+) x CKE ]$" verwendet reguläre Ausdrücke, um nach einem bestimmten Muster in einem Text zu suchen. Hier ist eine Aufschlüsselung:

  • "$[" und "]" markieren den Beginn und das Ende des regulären Ausdrucks.
  • "regex" zeigt an, dass es sich um einen regulären Ausdruck handelt.
  • "([\d]+-[\d]+.[\d]+)" ist der reguläre Ausdruck selbst und beschreibt das Muster, nach dem gesucht wird. Hier ist, was jedes Teil des regulären Ausdrucks bedeutet:
    • "[\d]+" bedeutet eine oder mehrere aufeinanderfolgende Ziffern.
    • "-" steht für das Zeichen "-".
    • "[\d]+" wiederholt sich für eine oder mehrere aufeinanderfolgende Ziffern.
    • "." steht für das Zeichen ".".
    • "[\d]+" wiederholt sich für eine oder mehrere aufeinanderfolgende Ziffern. Zusammen ergibt dies das Muster für eine Zahl mit einem Bindestrich und einer Dezimalstelle, z.B. "123-456.789".
  • "x CKE" ist der Text (Karteieintrag), der nach dem Muster gesucht wird.

Zusammengefasst sucht dieser Befehl nach einem Muster wie "123-456.789 x CKE" in einem Text, wobei "123-456.789" eine Zahl mit einem Bindestrich und einer Dezimalstelle ist, gefolgt von " x CKE".

 

Die Daten sind ja nur im CKE: Im CKE wird der OPS Code ermittelt in v1 (Durch Auswahl der ME Methode, der Lokalisation und des zu explantierenden Materials) und von diesem OPS möchte ich die EBM Kategorie ermittelt haben, dazu benötige ich den OPS ohne Seitenbezeichnung. RegEx soll sich auf den v1 Wert im selben Formular beziehen.
Das habe ich auch ausprobiert und keine Lösung gefunden. Ich ermittele auch den OPS Code bzw. generiere den nach einem Algorythmus und gehe dann via OPS gleich in die Abrechnung. Das erscheinzt mir viel einfacher. Wenn Interesse besteht gern PN, dann kann ich Ihnen das zeigen. Hier im Forum ist das zu komplex.
ViaOPS finde ich unschön, weil ich die Seite dann noch händisch eintragen muss. Außerdem habe ich oft Simultan-OPS, zB Bimalleolar Fraktur ME Fibula distal und ME Tibia distal. Dann wird es mit viaOPS schon wieder zur Handarbeit.

Das Problem die Kategorie zu identifizieren habe ich gelöst (wenn ich die Seitenbezeichnung eliminiert bekomme...)

Ich genriere den OPS Code während der OP den so erzeiugten Code setze ich als Vorefüllung in "via OPS"

dann werden alle Abrechnungsziffern einschließlich der kKategorie z.B. D1-5 vorgeschlagen.

Bei Simultaneingriffen wiederholt man den Vorgang lediglich, gewertet wird der Eingriff mit der höchsten Kategorie zzgl. Zeitzuschlag.

Hallo Herr Gunstmann,

Da gibt es verschieden Lösungswege. Entweder Sie verknüpfen die OPS mit dem Eingriff, den Sie aus einer Liste auswählen oder aber generieren den OPS selbst. In der regel genügen 3 Klicks. Allein im Bereich der Operationen an den Knochen gibt es bsetimmt 10.000 verscheidene OPS. Die ergeben sich aus der Art der Operation, dem material und der Lokalisation. Der OPS kann, weil er hierarchsich aufgebaut ist auch rückwärts generiert werden, das macht nur kaum jemand, ist aber effektiv. Bei Simaultan OP müssten Sie für zur Codierung jeder einzelnen  Prozedur nur 3 Klicks machen. Kann ich Ihnen erne demonstrieren, gern PN.

Nachteilig am OPS ist nur, dass die Codierung für die Lokalisation über die unterschiedichen Fachgebiete nicht einheitlich ist und stark differiert. Das bedeutet, dass die Lokalisation bei Knocheneingriffen andere Codierregeln hat, als beispielsweise in der plastischen Chirurgie.
Danke für die zahlreichen Hinweise!
Ich habe das regex-Kommando jetzt so angepasst, dass es einerseits auch ohne Gruppierung (capturing group, durch runde Klammern eingerahmter Bereich) funktioniert und auch nicht mehr zwingend ein auszuführendes Kommando erwartet (damit kann es dann auch beispielsweise in CustomKarteieinträgen auf Feldreferenzen losgelassen werden, so wie im angegebenen Beispiel).
Das Ganze kommt vermutlich mit der Version 144. Damit sollte dann der regex aus der Frage ein Ergebnis liefern.
Beantwortet von (22.1k Punkte)
0 Punkte
Hallo Herr Bürger,

und das Auswerten der abZeichen und bisZeichen Kommandos im CKE? Bleibt es dabei, dass diese dort nicht einzusetzen sind?
16,249 Beiträge
24,077 Antworten
42,483 Kommentare
12,252 Nutzer