Benutzerdefiniertes Schema zum Parsen von HL7v2-Nachrichten verwenden

Auf dieser Seite wird erläutert, wie Sie ein benutzerdefiniertes Schema konfigurieren, um HL7v2-Nachrichten zu parsen, die nicht dem HL7v2-Standard entsprechen.

Wenn Sie HL7v2-Nachrichten in ein anderes Format wie FHIR oder OMOP konvertieren, müssen Sie zuerst in der Lage sein, Ihre HL7v2-Nachrichten zu parsen und in einen HL7v2-Speicher aufzunehmen. Verwenden Sie diese Anleitung, um sicherzustellen, dass Sie HL7v2-Nachrichten erfolgreich parsen und aufnehmen können.

Überblick

Manchmal entsprechen Ihre HL7v2-Nachrichten nicht den HL7v2-Standards. Beispiel: Ihre HL7v2-Nachrichten können Segmente enthalten, die nicht im HL7v2-Standard enthalten sind, oder die Segmente befinden sich in einer falschen Reihenfolge. Beim Versuch, nicht konforme Nachrichten aufzunehmen, können Fehler auftreten.

Zur Aufnahme der nicht konformen HL7v2-Nachrichten müssen Sie beim Erstellen oder Bearbeiten eines HL7v2-Speichers das Objekt ParserConfig ändern. In ParserConfig können Sie unter anderem ein schematisiertes Parsen basierend auf benutzerdefinierten Typen und Segmenten konfigurieren und festlegen, wie abgelehnte HL7v2-Nachrichten verarbeitet werden.

Bevor Sie ParserConfig konfigurieren, lesen Sie die folgenden Abschnitte, um mehr über HL7v2-Nachrichten, Typdefinitionen und Gruppendefinitionen zu erfahren.

HL7v2-Nachrichten

Dieser Abschnitt gibt einen kurzen Überblick über die Struktur von HL7v2-Nachrichten, der bei der Konfiguration des benutzerdefinierten Schemaparsers hilfreich ist.

HL7v2-Nachrichten sind ereignisbasiert und beschreiben Statusübergänge und Teilaktualisierungen von klinischen Datensätzen. Jede HL7v2-Nachricht hat einen Nachrichtentyp, der den Zweck der Nachricht definiert. Für Nachrichtentypen wird ein dreistelliger Code verwendet und sie werden im obligatorischen MSH (Main Segment Header) der Nachricht angegeben. Es gibt Dutzende von Nachrichtentypen, darunter:

  • ADT: wird verwendet, um Teile der Patientenverabreichungsdaten eines Patienten zu übertragen
  • ORU: zum Übertragen von Beobachtungsergebnissen
  • ORM: wird zum Übertragen von Informationen zu einer Bestellung verwendet

Sehen Sie sich die Struktur der HL7v2-Nachrichten an, die Segmente, Felder, Komponenten und Unterkomponenten umfassen:

Abbildung 1. Diagramm der Struktur einer HL7v2-Nachricht.

In Abbildung 1 sind die folgenden Teile der HL7v2-Nachricht gekennzeichnet: das Segment, der Segmentheader, die Felder und die Komponenten.

Standardmäßig verwenden HL7v2-Nachrichten die folgenden Zeichen, um Informationen zu trennen. Sie können die Trennzeichen und Abschlusszeichen einer HL7v2-Nachricht pro Nachricht im Segment MSH überschreiben.

Typ- und Gruppendefinitionen

Um den Schemaparser zu verstehen, müssen Typdefinitionen und Gruppendefinitionen verwendet werden.

Typdefinition

Der Begriff „Typen” umfasst Folgendes:

  • HL7v2-Segmenttypen wie MSH (Nachrichtensegment-Header), DG1 (Diagnose) und PID (Patientenidentifikation)

    Eine Liste aller HL7v2-Segmenttypen finden Sie unter Segmentdefinitionen.

  • HL7v2-Datentypen, z. B. ST (Stringdaten), TS (Zeitstempel) und SI (Sequenz-ID)

    Eine Liste aller HL7v2-Standarddatentypen finden Sie unter Datentypen.

Typen geben Sie im Feld name innerhalb des Type-Objekts an.

Typen verwenden ein modulares Format, das aus einem Segment und den Feldern, Komponenten und Unterkomponenten des Segments besteht. Die Informationen in einem Type-Objekt geben an, wie ein Segment zu parsen oder zu interpretieren ist, und beantworten Fragen wie die folgenden:

  • Welche Felder enthält das Segment?
  • Welche Datentypen haben die Felder?

Das folgende Beispiel zeigt die Typdefinition für ein benutzerdefiniertes ZCD-Segment:

{
  "type": {
    "name": "ZCD", // Segment type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "A", // Custom data type
        "minOccurs": 1 // Repeated, because maxOccurs is not defined
      }
    ]
  }
}

In diesem Beispiel enthält das Segment ZCD zwei Felder, 1 und 2. Der Datentyp für 1 ist ST, was ein primitiver String-Datentyp ist. Der Datentyp für 2 ist A. Dies ist ein benutzerdefinierter Datentyp.

Die folgende Typdefinition für den benutzerdefinierten Datentyp A zeigt, dass er auch einen weiteren benutzerdefinierten Datentyp namens B enthält.

{
  "type": {
    "name": "A", // Custom data type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "B", // Custom data type
        "minOccurs": 1,
        "maxOccurs": 1
      }
    ]
  }
}

Das folgende Beispiel zeigt die Typdefinition für den benutzerdefinierten Datentyp B, der ein Feld namens 1 mit dem Datentyp ST und ein Feld namens 2 mit einem Datentyp von ST hat, das sich wiederholt:

{
  "type": {
    "name": "B", // Custom data type
    "fields": [
      {
        "name": "1",
        "type": "ST", // Primitive string data type
        "minOccurs": 1, // Must occur at least once
        "maxOccurs": 1 // Not repeated, because it can only occur once
      },
      {
        "name": "2",
        "type": "ST"
        "minOccurs": 1,
        "maxOccurs": 1
      }
    ]
  }
}

Anhand der Informationen zum Segment und den Datentypen können Sie schätzen, wie das ZCD-Segment in der ursprünglichen HL7v2-Nachricht aussieht. Dieses Beispiel zeigt die HL7v2-Nachricht mit dem Feld A, das einmal wiederholt wird, was zulässig ist, da maxOccurs nicht im Feld A festgelegt ist:

ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2
Abbildung 2: Diagramm einer Typdefinition.

In Abbildung 2 sind die folgenden Teile der Typdefinition beschriftet: das Segment, der Segmentheader, die Felder, die Komponenten, die Unterkomponenten und die Wiederholungen.

Gruppendefinition

Gruppen werden auf Segmentebene definiert und geben Ihnen Informationen darüber, welche Arten von Segmenten in jeder HL7v2-Nachricht vorkommen können.

Gruppen werden im groups-Array innerhalb des GroupOrSegment-Objekts angegeben.

Betrachten Sie das folgende Snippet einer Gruppenstruktur für eine ADT_A01-HL7v2-Nachricht:

  • Die erste segment im members-Array ist MSH (Nachrichtensegment-Header), da MSH in jeder HL7v2-Nachricht erforderlich ist.
  • Ein group namens Group 1.

    Diese Gruppe kann maximal 2-mal vorkommen und enthält das benutzerdefinierte ZCD-Segment.

    In der Regel enthält eine group mehrere logisch gruppierte verschachtelte Segmente und andere Gruppen. In diesem Beispiel enthält Group 1 jedoch nur ein einzelnes Segment: ZCD.

{
  "ADT_A01": {
    "members": [
      {
        "segment": {
          "type": "MSH"
        }
      },
      {
        "group": {
          "name": "Group 1",
          "minOccurs": 1,
          "maxOccurs": "2",
          "members": [
            {
              "segment": {
                "type": "ZCD"
              }
            }
          ]
        }
      }
    ]
  }
}

Anhand der Informationen zu den Gruppen können Sie schätzen, wie die ursprüngliche HL7v2-Nachricht aussieht, wenn ZCD zweimal in der HL7v2-Nachricht auftritt, was zulässig ist, weil maxOccurs in Group 1 auf 2 festgelegt ist. Der Rest des ZCD-Segments ist unbekannt, ohne die Typdefinition zu kennen.

MSH|^~\&|||||20100308000000||ADT^A01|23701|1|2.3||
ZCD|ZCD_CONTENT
ZCD|ZCD_CONTENT
Abbildung 3: Diagramm einer Gruppendefinition.

In Abbildung 3 sind die folgenden Teile der Gruppendefinition beschriftet: das Segment und die Segmentüberschrift.

Benutzerdefiniertes Schema in einem HL7v2-Speicher konfigurieren

In den folgenden Abschnitten werden die Komponenten eines benutzerdefinierten Schemas und die Konfiguration des Schemas in einem HL7v2-Speicher erläutert.

Konfiguration des HL7v2-Speichertyps

Nachdem Sie die Typdefinition einer HL7v2-Nachricht verstanden haben, können Sie eine Typkonfiguration für einen HL7v2-Speicher angeben. Fügen Sie ein types-Array und ein version-Array hinzu, um die Konfiguration anzugeben.

Das folgende Beispiel zeigt, wie die Konfiguration für die unter Typdefinition gezeigten Typen in einem HL7v2-Speicher angegeben wird.

In der Konfiguration wird das Array version verwendet, um die Felder mshField und value anzugeben. Diese Felder entsprechen Feldern und Komponenten im MSH-Segment.

Das von Ihnen angegebene Array types gilt nur für Nachrichten mit einem MSH-Segment, das den Werten für mshField und value im Array version entspricht. Auf diese Weise können Sie HL7v2-Nachrichten mit unterschiedlichen Versionen in denselben HL7v2-Speicher aufnehmen.

{
  "types": [
    {
      "version": [
        {
          "mshField": "12",
          "value": "2.3"
        }
      ],
      "type": [
        {
          "name": "ZCD", // Segment type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "A",
              "minOccurs": 1
            }
          ]
        },
        {
          "name": "A", // Data type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "B",
              "minOccurs": 1,
              "maxOccurs": 1
            }
          ]
        },
        {
          "name": "B", // Data type
          "fields": [
            {
              "name": "1",
              "type": "ST",
              "minOccurs": 1,
              "maxOccurs": 1
            },
            {
              "name": "2",
              "type": "ST"
            }
          ]
        }
      ]
    }
  ]
}

HL7v2-Speichergruppenkonfiguration

Sie können mit Gruppen eine verschachtelte Struktur auf der Ebene einer „Mitgliedschaft” konfigurieren. Gruppen werden in einem members-Array auf Segmentebene angegeben. Die Struktur eines Segments ist vorhersehbar und enthält in der Regel Felder, Komponenten und Unterkomponenten. Das Segment selbst kann sich jedoch auf jeder Ebene der HL7v2-Nachricht befinden.

Wie bei einer Typkonfiguration verwendet eine Gruppenkonfiguration den Filter version, damit Sie HL7v2-Nachrichten mit verschiedenen Versionen in denselben HL7v2-Speicher aufnehmen können.

Das folgende Beispiel zeigt, wie Sie die Konfiguration für die in der Gruppendefinition gezeigte Gruppe in einem HL7v2-Speicher angeben:

{
  "version": [
    {
      "mshField": "12",
      "value": "2.3"
    }
  ],
  "messageSchemaConfigs": {
    "ADT_A01": {
      "members": [
        {
          "segment": {
            "type": "MSH"
          }
        },
        {
          "group": {
            "name": "Group 1",
            "maxOccurs": "2",
            "members": [
              "segment": {
                "type": "ZCD"
              }
            ]
          }
        }
      ]
    }
  }
}

Vollständige HL7v2-Speicherkonfiguration

Wenn Sie die type-Konfiguration und die group-Konfiguration kombinieren, können Sie festlegen, wie die vollständige benutzerdefinierte Schemakonfiguration im HL7v2-Speicher aussieht. Sie können auch feststellen, dass das benutzerdefinierte Schema mit einer HL7v2-Nachricht übereinstimmt, was in etwa so aussieht:

MSH|^~\&|||||20100101000000||ADT^A01^A01|23701|1|2.3||
ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2

Maximieren Sie den folgenden Abschnitt, um das vollständige benutzerdefinierte Schema im HL7v2-Speicher anzusehen. Fahren Sie dann mit dem Erstellen eines HL7v2-Speichers fort, der das benutzerdefinierte Schema verwendet:

Maximieren

{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1,
                    "maxOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "maxOccurs": "2",
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD", // Segment type
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A"
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "A", // Data type
              "fields": [
                {
                  "name": "1",
                  "type": "ST"
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B"
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B", // Data type
              "fields": [
                {
                  "name": "1",
                  "type": "ST"
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST"
                  "minOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

HL7v2-Speicher mit dem benutzerdefinierten Schema erstellen

Führen Sie diesen Abschnitt aus, um einen HL7v2-Speicher zu erstellen, der das vollständige benutzerdefinierte Schema verwendet.

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • LOCATION ist der Standort des Datasets
  • DATASET_ID ist das übergeordnete Dataset des HL7v2-Speichers
  • HL7V2_STORE_ID: die HL7v2-Speicher-ID

JSON-Text anfordern:

{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
EOF

Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

@'
{
  "parserConfig": {
    "schema": {
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ADT_A01": {
              "name": "ADT_A01",
              "members": [
                {
                  "segment": {
                    "type": "MSH",
                    "minOccurs": 1
                  }
                },
                {
                  "group": {
                    "name": "Group 1",
                    "minOccurs": 1,
                    "members": [
                      {
                        "segment": {
                          "type": "ZCD"
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ZCD",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "A",
                  "minOccurs": 1
                }
              ]
            },
            {
              "name": "A",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "B",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            },
            {
              "name": "B",
              "fields": [
                {
                  "name": "1",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content

Sie sollten in etwa folgende JSON-Antwort erhalten:

HL7v2-Nachricht mit dem benutzerdefinierten Schema aufnehmen und parsen

Führen Sie diesen Abschnitt aus, um eine base64-codierte Version der HL7v2-Nachricht aufzunehmen.

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID
  • LOCATION: der Speicherort des übergeordneten Datasets
  • DATASET_ID: das übergeordnete Dataset des HL7v2-Speichers
  • HL7V2_STORE_ID: die HL7v2-Speicher-ID

JSON-Text anfordern:

{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

cat > request.json << 'EOF'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}
EOF

Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"

PowerShell

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json. Führen Sie folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

@'
{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ=="
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Führen Sie dann folgenden Befehl aus, um Ihre REST-Anfrage zu senden:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content

Sie sollten in etwa folgende JSON-Antwort erhalten:

Feldkardinalität bestimmen

Sie können die Kardinalität eines Felds in einer HL7v2-Nachricht bestimmen, indem Sie die folgenden Felder im HL7v2-Speicher festlegen:

  • minOccurs: legt fest, wie oft eine Gruppe, ein Segment, ein Feld, eine Komponente oder eine Unterkomponente in eingehenden HL7v2-Nachrichten mindestens vorhanden sein oder wiederholt sein muss.
  • maxOccurs: Legt fest, wie oft eine Gruppe, ein Segment, ein Feld, eine Komponente oder eine Unterkomponente in eingehenden HL7v2-Nachrichten vorhanden sein oder wiederholt werden darf.

Fehlende Elemente ignorieren

Legen Sie ignoreMinOccurs auf true fest, wenn die HL7v2 API alle eingehenden HL7v2-Nachrichten unabhängig von fehlenden Elementen akzeptieren soll. Dies bedeutet, dass eine Nachricht nicht abgelehnt wird, wenn ihr erforderliche Gruppen, Segmente, Felder, Komponenten oder Unterkomponenten fehlen.

Wenn Sie HL7v2-Nachrichten nicht aufnehmen können, da in den Nachrichten Pflichtfelder fehlen, empfehlen wir, ignoreMinOccurs auf true zu setzen.

Platzhalterfeldtyp

Das Platzhalterzeichen * ist ein spezieller Typ für Felder. Die Verwendung von * zeigt dem HL7v2-Parser an, dass das Feld basierend auf der Struktur in der HL7v2-Nachricht geparst werden soll. Die Verwendung von * anstelle eines Werts für ein Feld ist nützlich, wenn Sie keinen strikten Felddatentyp erzwingen möchten. Solange der Inhalt im Feld dem HL7v2-Standard entspricht, kann die Cloud Healthcare API die HL7v2-Nachricht parsen.

Betrachten Sie beispielsweise die folgende Typdefinition. Das Feld 2 verwendet ein Platzhalterzeichen anstelle eines Felddatentyps. Die Definition entspricht der ersten Definition in der Typdefinition. Sie müssen die Typen A und B nicht angeben:

"type": {
  "name": "ZCD"
  "fields": [
    {
      "name": "1",
      "type": "ST"
    },
    {
      "name": "2",
      "type": "*"
    }
  ]
}

Nächste Schritte

Beispiele für benutzerdefinierte Schemaparser