MEDICAL OFFICE Forum

Forum-Navigation
ForumAktivität

PHP Skript in der Briefschreibung

Du musst dich anmelden um Beiträge und Themen zu erstellen.

PHP Skript in der Briefschreibung

Hallo,

ich habe mir in Zusammenarbeit mit ChatGPT ein Skript erstellen lassen, was im Brieftext je nach Alter und Geschlecht die passende Ausgabe wie z.B. 15 Tage altes männliches Neugeborenes oder 7 Wochen alter männlicher Säugling ausgeben soll. Leider führt der Aufruf der Briefschreibung mit einem Testbrief immer zum Absturz der Briefschreibung, also der Brief wird nicht angezeigt. Wo genau liegt der Fehler?

Edit: Nach Bearbeitung stürzt jetzt die interne Briefschreibung nicht ab, es erfolgt aber keine Ausgabe. Also es wird kein Abschlußtext ausgegeben… ????

 

Danke für die Hilfe

 

{PHP}

// Umwandlung des Geburtsdatums in ein DateTime-Objekt
$geburtsdatum = DateTime::createFromFormat(‚d.m.Y‘, {Patient.Geburtsdatum});
$heute = new DateTime();
$diff = $geburtsdatum->diff($heute);
$tage = (int)$heute->diff($geburtsdatum)->format(‚%a‘);

// Alterseinheit berechnen
if ($tage < 14) {
$alterswert = „$tage Tage“;
} elseif ($tage < 56) { // bis 8 Wochen
$wochen = floor($tage / 7);
$alterswert = „$wochen Wochen“;
} elseif ($diff->y < 2) { // bis unter 2 Jahre
$monate = $diff->y * 12 + $diff->m;
$alterswert = „$monate Monate“;
} else {
$jahre = $diff->y;
$alterswert = „$jahre Jahre“;
}

// Altersgruppe bestimmen
if ($tage < 28) {
$altersgruppe = ‚Neugeborenes‘;
} elseif ($tage < 365) {
$altersgruppe = ‚Säugling‘;
} elseif ($diff->y < 6) {
$altersgruppe = ‚Kleinkind‘;
} elseif ($diff->y < 12) {
$altersgruppe = ‚Schulkind‘;
} else {
$altersgruppe = ‚Jugendlicher‘;
}

// Genus (grammatisches Geschlecht der Altersgruppe)
switch ($altersgruppe) {
case ‚Neugeborenes‘:
case ‚Kleinkind‘:
case ‚Schulkind‘: // neutral
$genus = ’neutral‘;
break;
case ‚Säugling‘:
case ‚Jugendlicher‘: // maskulin
$genus = ‚maskulin‘;
break;
default:
$genus = ‚maskulin‘;
}

// Geschlecht des Patienten
$geschlecht = {Patient.Geschlecht};

// Adjektive korrekt setzen
if ($genus === ’neutral‘) {
$altersAdjektiv = ‚altes‘;
$geschlechtsText = ($geschlecht == 1) ? ‚männliches‘ : ‚weibliches‘;
} else {
$altersAdjektiv = ‚alter‘;
$geschlechtsText = ($geschlecht == 1) ? ‚männlicher‘ : ‚weiblicher‘;
}

// Gesamtausgabe
echo „$alterswert $altersAdjektiv $geschlechtsText $altersgruppe“;
{/PHP}

 

So, ich habe jetzt gemerkt, der Code funktiert gut mit php 8 aber nicht mit php 5.6. Also habe ich ihn nochmal auf php 5.6 umschreiben lassen. Aber selbst damit kommt keine Ausgabe… in der PHp Sandbox funktioniert die Ausgabe perfekt. wo genau liegt der Fehler?

Edit 2: Habe gelesen, die Variablen von MO müssen in Anführungszeichen, damit der Wert übernommen wird. Mache ich das, stürzt die Briefschreibung wieder ab…

{PHP}
// Zeitzone setzen
date_default_timezone_set(‚Europe/Berlin‘);

// Beispielwerte für Übergabe (diese ersetzen bei tatsächlicher Verwendung)
$Patient = new stdClass();
$Patient->Geburtsdatum = {Patient.Geburtsdatum}; // TT.MM.JJJJ
$Patient->Geschlecht = {Patient.Geschlecht}; // 1 = männlich, 2 = weiblich

// Geburtsdatum parsen
list($tag, $monat, $jahr) = explode(‚.‘, $Patient->Geburtsdatum);
$geburtsdatum = new DateTime($jahr . ‚-‚ . $monat . ‚-‚ . $tag);
$heute = new DateTime();
$diff = $heute->diff($geburtsdatum);
$tage = floor(($heute->getTimestamp() – $geburtsdatum->getTimestamp()) / 86400);

// Alterseinheit ermitteln
if ($tage < 14) {
$alterswert = $tage . ‚ Tage‘;
} elseif ($tage < 56) {
$wochen = floor($tage / 7);
$alterswert = $wochen . ‚ Wochen‘;
} elseif ($diff->y < 2) {
$monate = $diff->y * 12 + $diff->m;
$alterswert = $monate . ‚ Monate‘;
} else {
$jahre = $diff->y;
$alterswert = $jahre . ‚ Jahre‘;
}

// Altersgruppe bestimmen
if ($tage < 28) {
$altersgruppe = ‚Neugeborenes‘;
} elseif ($tage < 365) {
$altersgruppe = ‚Säugling‘;
} elseif ($diff->y < 6) {
$altersgruppe = ‚Kleinkind‘;
} elseif ($diff->y < 12) {
$altersgruppe = ‚Schulkind‘;
} else {
$altersgruppe = ‚Jugendlicher‘;
}

// Genus (grammatisches Geschlecht) ermitteln
$neutraleGruppen = array(‚Neugeborenes‘, ‚Kleinkind‘, ‚Schulkind‘);
if (in_array($altersgruppe, $neutraleGruppen)) {
$genus = ’neutral‘;
} else {
$genus = ‚maskulin‘;
}

// Geschlechtsspezifische Anpassung
$geschlecht = $Patient->Geschlecht;
if ($genus == ’neutral‘) {
$altersAdjektiv = ‚altes‘;
$geschlechtsText = ($geschlecht == 1) ? ‚männliches‘ : ‚weibliches‘;
} else {
$altersAdjektiv = ‚alter‘;
$geschlechtsText = ($geschlecht == 1) ? ‚männlicher‘ : ‚weiblicher‘;
}

// Ergebnis ausgeben
echo $alterswert . ‚ ‚ . $altersAdjektiv . ‚ ‚ . $geschlechtsText . ‚ ‚ . $altersgruppe;
{/PHP}

Hallo,
ich habe mir das Script jetzt nicht genau angeschaut, ich würde aber immer bei chatGPT mit erwähnen, dass das Script mit der PHP Version 5.2.16 erzeugt werden soll. 
Wenn dieses nicht erwähnt wird, dann versucht er immer die aktuellsten Befehle zu verwenden, die es mit dieser in MO integrierten PHP Version nicht gibt.

Burkhard Strauß hat auf diesen Beitrag reagiert.
Burkhard Strauß

Martin Weinreich
-INDAMED- Support

Darum hatte ich es ja extra auf die 5.6 umschreiben lassen. Und das habe ich auch online in einem Testumfeld so prüfen lassen, wo das Skript fehlerfrei durchläuft. Oder gibt es zwischen der 5.2.16 und der 5.6 noch relevante Unterschiede?

Ist denn die Variablen-Zuordnung richtig? Mit Anführungszeichen oder ohne?

Jetzt wo die ePA am Start ist würde ich mir ein Update auf die php 8 wünschen…

Hallo,
ich weiß nicht, ob die Variablen erkannt werden mit dem ‚ ‘
ich weiß nur, dass es mit Gänsefüßchen und Hochkommas funktioniert.

"test"
'test'

Martin Weinreich
-INDAMED- Support

Ok, wenn ich also 

$Patient->Geburtsdatum = „{Patient.Geburtsdatum}“;

schreibe, dann wird die Variable richtig übernommen?

Immer, wenn ich speichere hier, wird das erste Anführungszeichen nach unten gesetzt … -)))

Hallo,
ich kenne die Funktion -> nicht, deshalb weiß ich nicht, ob diese Funktioniert.
Wenn Sie aber alles weglassen und nur ein Script machen, mit:

$gd="{Patient.Geburtsdatum}";
echo $gd;

Dann sollte das Geburtsdatum ausgegeben werden.

Martin Weinreich
-INDAMED- Support

Ich habe jetzt die Variablennamen etwas vereinfacht und das Array entfernt. Dann habe ich es mir von ChatGPT nochmal auf php 5.2.16 umändern lassen und jetzt läuft es.

Wenn also ein kinderärztlicher Kollege auch häufig Arztbrief schreibt, kann er sich bei mir melden. Dann würde ich ihm das Skript selbst verständlich gerne zur Verfügung stellen.

Marcel Patzer und Martin Weinreich haben auf diesen Beitrag reagiert.
Marcel PatzerMartin Weinreich

oder hier posten mit 

diesem tollen Komma ding :D

 

ich habe mal das tutorial um diesen trick mit der Version erweitert 😀 https://portal.indamed.de/forum/topic/php-tutorial/#postid-2770

{PHP}
// Zeitzone setzen
date_default_timezone_set('Europe/Berlin');

// Beispielwerte für Übergabe – durch dein System befüllt

$gd = "{Patient.Geburtsdatum}"; // Format: TT.MM.JJJJ
$ge = "{Patient.Geschlecht}";
list($tag, $monat, $jahr) = explode('.', $gd);
$geburtsdatum = mktime(0, 0, 0, (int)$monat, (int)$tag, (int)$jahr);
$heute = time();
$tage = floor(($heute - $geburtsdatum) / 86400);
$alterText = '';
if ($tage < 14) {
    $alterText = $tage . ' Tage';
} elseif ($tage < 56) {
    $wochen = floor($tage / 7);
    $alterText = $wochen . ' Wochen';
} else {
    $geburtsdatumStr = $jahr . '-' . $monat . '-' . $tag;
    $geburtszeit = strtotime($geburtsdatumStr);
    $jahrJetzt = (int)date('Y');
    $monatJetzt = (int)date('n');
    $tagJetzt = (int)date('j');
    
    $jahre = $jahrJetzt - $jahr;
    $monate = $monatJetzt - $monat;
    if ($monate < 0) {
        $jahre--;
        $monate += 12;
    }
    if ($tagJetzt < $tag) {
        $monate--;
        if ($monate < 0) {
            $jahre--;
            $monate += 12;
        }
    }

    if ($jahre < 2) {
        $gesamtMonate = $jahre * 12 + $monate;
        $alterText = $gesamtMonate . ' Monate';
    } else {
        $alterText = $jahre . ' Jahre';
    }
}

if ($tage < 28) {
    $altersgruppe = 'Neugeborenes';
} elseif ($tage < 365) {
    $altersgruppe = 'Säugling';
} elseif ($jahre < 6) {
    $altersgruppe = 'Kleinkind';
} elseif ($jahre < 12) {
    $altersgruppe = 'Schulkind';
} else {
    $altersgruppe = 'Jugendlicher';
}

$neutraleGruppen = array('Neugeborenes', 'Kleinkind', 'Schulkind');
if (in_array($altersgruppe, $neutraleGruppen)) {
    $genus = 'neutral';
} else {
    $genus = 'maskulin';
}
$geschlecht = $ge;
if ($genus == 'neutral') {
    $altersAdjektiv = 'altes';
    $geschlechtsText = ($geschlecht == 1) ? 'männliches' : 'weibliches';
} else {
    $altersAdjektiv = 'alter';
    $geschlechtsText = ($geschlecht == 1) ? 'männlicher' : 'weiblicher';
}
echo $alterText . ' ' . $altersAdjektiv . ' ' . $geschlechtsText . ' ' . $altersgruppe;
{/PHP}
Franz Tonagel, Martin Weinreich und Burkhard Strauß haben auf diesen Beitrag reagiert.
Franz TonagelMartin WeinreichBurkhard Strauß