Benutzerdefiniertes Schema zum Parsen von HL7v2-Nachrichten verwenden

Auf dieser Seite wird erläutert, wie Sie ein benutzerdefiniertes Schema zum Parsen von HL7v2-Nachrichten konfigurieren, die nicht dem HL7v2-Standard entsprechen.

Wenn Sie HL7v2-Nachrichten in ein anderes Format, z. B. FHIR oder OMOP, konvertieren, müssen Sie Ihre HL7v2-Nachrichten zuerst parsen und in einen HL7v2-Speicher aufnehmen können. In dieser Anleitung erfahren Sie, wie Sie HL7v2-Nachrichten erfolgreich parsen und aufnehmen.

Überblick

Manchmal entsprechen Ihre HL7v2-Nachrichten nicht den HL7v2-Standards. Ihre HL7v2-Nachrichten enthalten beispielsweise möglicherweise Segmente, die nicht im HL7v2-Standard enthalten sind, oder die Segmente sind nicht in der richtigen Reihenfolge. Wenn Sie versuchen, nicht konforme Nachrichten zu importieren, kann es zu Fehlern kommen.

Wenn Sie nicht konforme HL7v2-Nachrichten aufnehmen möchten, müssen Sie das Objekt ParserConfig beim Erstellen oder Bearbeiten eines HL7v2-Speichers ändern. In ParserConfig können Sie unter anderem das schematisierte Parsen basierend auf benutzerdefinierten Typen und Segmenten konfigurieren und festlegen, wie abgelehnte HL7v2-Nachrichten verarbeitet werden.

Lesen Sie sich die folgenden Abschnitte durch, bevor Sie ParserConfig konfigurieren, um mehr über HL7v2-Nachrichten, Typdefinitionen und Gruppendefinitionen zu erfahren.

HL7v2-Nachrichten

In diesem Abschnitt erhalten Sie einen kurzen Überblick über die Struktur von HL7v2-Nachrichten. Diese Informationen sind hilfreich, wenn Sie den benutzerdefinierten Schema-Parser konfigurieren.

HL7v2-Nachrichten sind ereignisbasiert und beschreiben Statusübergänge und teilweise Aktualisierungen von Patientenakten. Jede HL7v2-Nachricht hat einen Nachrichtentyp, der den Zweck der Nachricht definiert. Nachrichtentypen werden mit einem dreistelligen Code angegeben und im obligatorischen Header des Hauptsegments (MSH) der Nachricht festgelegt. Es gibt Dutzende von Nachrichtentypen, darunter:

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

Sehen Sie sich die Struktur von HL7v2-Nachrichten an, die aus Segmenten, Feldern, Komponenten und Unterkomponenten bestehen:

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.

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

Typ- und Gruppendefinitionen

Zum Verständnis des Schema-Parsers sind Typdefinitionen und Gruppendefinitionen erforderlich.

Typdefinition

Der Begriff „Typen” umfasst Folgendes:

  • HL7v2-Segmenttypen, z. B. 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.

Sie geben die Typen im Feld name innerhalb des Objekts Type 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 sind im Segment enthalten?
  • 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 ZCD-Segment zwei Felder mit den Namen 1 und 2. Der Datentyp für 1 ist ST, ein primitiver Stringdatentyp. Der Datentyp für 2 ist A, ein benutzerdefinierter Datentyp.

Die folgende Typdefinition für den benutzerdefinierten Datentyp A zeigt, dass er auch einen anderen 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 zu den Segment- und 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 enthalten Informationen dazu, welche Segmenttypen in jeder HL7v2-Nachricht vorkommen können.

Sie geben Gruppen im Array groups innerhalb des Objekts GroupOrSegment an.

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

  • Die erste segment im members-Array ist MSH (Message Segment Header), da MSH in jeder HL7v2-Nachricht erforderlich ist.
  • Eine group mit dem Namen Group 1.

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

    Normalerweise enthält ein 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 für einen 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 kennen, können Sie eine Typkonfiguration für einen HL7v2-Speicher angeben. Fügen Sie zum Angeben der Konfiguration ein Array von types und ein version-Array hinzu.

Das folgende Beispiel zeigt, wie Sie die Konfiguration für die Typen angeben, die in der Typdefinition in einem HL7v2-Speicher angezeigt werden.

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

Das von Ihnen angegebene types-Array gilt nur für Nachrichten mit einem MSH-Segment, das den Werten für mshField und value im version-Array entspricht. So 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"
            }
          ]
        }
      ]
    }
  ]
}

Konfiguration der HL7v2-Speichergruppe

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.

Ähnlich wie bei einer Typkonfiguration wird bei einer Gruppenkonfiguration ein version-Filter verwendet, um HL7v2-Nachrichten mit unterschiedlichen Versionen in denselben HL7v2-Speicher aufzunehmen.

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

{
  "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 Konfiguration des Typs und die Konfiguration der Gruppe kombinieren, können Sie die vollständige Konfiguration des benutzerdefinierten Schemas im HL7v2-Speicher ermitteln. 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 für den HL7v2-Speicher zu sehen. 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

Wenn Sie einen HL7v2-Speicher erstellen möchten, der das vollständige benutzerdefinierte Schema verwendet, lesen Sie diesen Abschnitt.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • 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 ist die HL7v2-Speicher-ID

JSON-Text der Anfrage:

{
  "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 eine JSON-Antwort ähnlich wie diese erhalten:

HL7v2-Nachricht mit dem benutzerdefinierten Schema aufnehmen und parsen

Wenn Sie eine base64-codierte Version der HL7v2-Nachricht aufnehmen möchten, lesen Sie diesen Abschnitt.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • 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 der Anfrage:

{
  "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 eine JSON-Antwort ähnlich wie diese erhalten:

Kardinalität des Felds 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 vorhanden sein oder wiederholt werden 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. Das bedeutet, dass eine Nachricht nicht abgelehnt wird, wenn erforderliche Gruppen, Segmente, Felder, Komponenten oder Unterkomponenten fehlen.

Wenn Sie keine HL7v2-Nachrichten aufnehmen können, weil die Nachrichten erforderliche Felder fehlen, empfehlen wir, ignoreMinOccurs auf true festzulegen.

Platzhalterfeldtyp

Das Platzhalterzeichen * ist ein spezieller Typ, der für Felder verwendet wird. Mit * wird dem HL7v2-Parser mitgeteilt, dass das Feld anhand 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 des Felds dem HL7v2-Standard entspricht, kann die Cloud Healthcare API die HL7v2-Nachricht parsen.

Betrachten Sie beispielsweise die folgende Typdefinition. Für das Feld 2 wird ein Platzhalterzeichen anstelle eines Felddatentyps verwendet. Die Definition entspricht der ersten Definition unter Typdefinition und 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