Exemples d'analyseur de schéma personnalisé

Cette page contient des exemples de cas d'utilisation, allant du simple au complexe, qui montrent quand et comment configurer un analyseur de schéma personnalisé sur un store HL7v2. Chaque cas d'utilisation contient un message HL7v2 sur lequel se base l'analyseur de schéma personnalisé.

Terminateur de segment personnalisé et champ personnalisé

Les exemples de cette section utilisent un exemple de message non standard comme suit :

  • Les délimiteurs de segments de l'exemple de message sont de nouvelles lignes (\n) au lieu d'être des retours chariot standards (\r).
  • L'exemple de message comporte un segment logiciel (SFT) avec un sous-champ supplémentaire : un champ personnalisé qui spécifie l'URL https://example.com/healthcare-api/.
MSH|^~\&|My EHR|My Test Facility||My EHR Facility|20150926140551||ORU^R01^ORU_R01|My-LOI_5.0_1.1-NG|T|2.5.1|||AL|AL|||||\n
SFT|Google^D|v1|Healthcare API|1||20190601|https://example.com/healthcare-api/\n
PID|1||PATID5421^^^My MPI^MR||Zhang^Sally^Brian^^^^L||19840611|F||2106-3^White^HL70005|123 Main Street^^Mountain Springs^CO^80439^^H||^PRN^PH^^^203^2290210|||||||||N^Not Hispanic or Latino^HL70189\n
ORC|RE|833582639|3266238193||CM||||20101234567890\n
OBR|1|833582639|3266238193|us-0005^Vital Signs^WinPath^^||20101234567890|20101234567890|||||||20101234567890||||||||20101234567890|||F||1\n
OBX|1|NM|tt-0005-07^MDC_PULS_RATE_NON_INV^MDC^^||52.31|MDC_DIM_BEAT_PER_MIN|50-200||||F|||20101234567890||\n
OBX|2|NM|tt-0005-12^PAIN LEVEL^L^^||1.71|/10|1-10||||F|||20101234567890||\n
OBX|3|NM|tt-0005-09^MDC_TEMP^MDC^^||36.22|MDC_DIM_DEGC|36-38||||F|||20101234567890||\n

Mettre à jour un store HL7v2 avec le terminateur de segment personnalisé

Vous devez spécifier le terminateur de segment si vos messages utilisent un terminateur non standard, comme dans l'exemple de message fourni dans la section Terminateur de segment personnalisé et champ personnalisé. L'exemple de message utilise le caractère non standard \n comme terminateur de segment.

Les exemples suivants montrent comment configurer segmentTerminator dans ParserConfig lorsque vous créez un magasin HL7v2. Le terminateur de segment est défini sur Cg==, qui correspond à l'encodage en base64 de \n.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "parserConfig": {
    "segmentTerminator": "Cg==""
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

Mettre à jour un store HL7v2 avec le schéma personnalisé

Vous pouvez mettre à jour un store HL7v2 avec un schéma personnalisé défini au format JSON. Après avoir configuré un schéma personnalisé incluant le champ supplémentaire dans le segment SFT, vous pouvez ingérer l'exemple de message. Pour plus d'informations sur la spécification d'un champ personnalisé, consultez la section SchemaPackage.

La configuration spécifiée dans cet exemple se comporte comme suit :

  • Réécrit la définition du segment SFT de sorte que le champ d'URL devienne 7.
  • Le filtre version détermine les messages entrants auxquels le schéma personnalisé s'applique en fonction d'un champ situé dans l'en-tête du segment de message (MSH). Si vous ne fournissez pas de filtre version, le schéma est appliqué à tous les messages HL7v2 du store HL7v2. Dans cet exemple, le segment personnalisé SFT s'applique lorsque le champ de l'application d'envoi contient My EHR.
  • Le champ du champ supplémentaire est nommé 7 pour assurer la cohérence avec le reste de la spécification. Vous pouvez également le nommer URL pour qu'il soit plus descriptif.

Pour mettre à jour le magasin avec le schéma personnalisé, utilisez la méthode projects.locations.datasets.hl7V2Stores.patch.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

curl -X PATCH \
-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?updateMask=parser_config.schema"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "types": [
        {
          "version": [
            {
              "mshField": "3.1",
              "value": "My EHR"
            }
          ],
          "type": [
            {
              "name": "SFT",
              "fields": [
                {
                  "name": "1",
                  "type": "XON",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "2",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "3",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "4",
                  "type": "ST",
                  "minOccurs": 1,
                  "maxOccurs": 1
                },
                {
                  "name": "5",
                  "type": "TX",
                  "maxOccurs": 1
                },
                {
                  "name": "6",
                  "type": "DTM",
                  "maxOccurs": 1
                },
                {
                  "name": "7",
                  "type": "ST",
                  "maxOccurs": 1
                }
              ]
            }
          ]
        }
      ]
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Invoke-WebRequest `
-Method PATCH `
-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?updateMask=parser_config.schema" | Select-Object -Expand Content
L'exemple utilise la version V3 recommandée de l'analyseur.

Ingérer et analyser le message HL7v2 à l'aide du schéma personnalisé

Les exemples suivants montrent comment ingérer une version encodée en base64 du message HL7v2 de la section Terminateur de segment personnalisé et champ personnalisé. Pour ingérer le message HL7v2, utilisez la méthode projects.locations.datasets.hl7V2Stores.messages.ingest.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "message": {
    "data": "TVNIfF5+XCZ8TXkgRUhSfE15IFRlc3QgRmFjaWxpdHl8fE15IEVIUiBGYWNpbGl0eXwyMDE1MDkyNjE0MDU1MXx8T1JVXlIwMV5PUlVfUjAxfE15LUxPSV81LjBfMS4xLU5HfFR8Mi41LjF8fHxBTHxBTHx8fHx8ClNGVHxHb29nbGVeRHx2MXxIZWFsdGhjYXJlIEFQSXwxfHwyMDE5MDYwMXxodHRwczovL2V4YW1wbGUuY29tL2hlYWx0aGNhcmUvClBJRHwxfDQwOTAzMzEzMjBeXl5TSU1VTEFUT1IgTVJOXk1STnw0MDkwMzMxMzIwXl5eU0lNVUxBVE9SIE1STl5NUk5+Mjg4ODUyNzE1NF5eXk5IU05CUl5OSFNOTUJSfHxEYXZpc15DaGVsc2VhXl5eTWlzc15eQ1VSUkVOVHx8MjAwOTEwMTcwMDAwMDB8Rnx8fDE4MSBUcmFuc21pc3Npb24gUm9hZF5eTG9uZG9uXl5LRzIyIDlIWF5HQlJeSE9NRXx8MDIwIDgxMjIgOTk0N15IT01FfHx8fHx8fHx8SF5Bc2lhbiBvciBBc2lhbiBCcml0aXNoIC0gSW5kaWFuXl5efHx8fHx8fHwKUFYxfDF8SXxPdGhlcldhcmReTWFpblJvb21eQmVkIDFeU2ltdWxhdGVkIEhvc3BpdGFsXl5CRUReTWFpbiBCdWlsZGluZ140fDI4Ynx8fEMwMDNeQ3VkZHleS2V2aW5eXl5Ecl5eXkRSTkJSXlBSU05MXl5eT1JHRFJ8fHxVUk98fHx8fHx8fHwxMjUxMzI0NzIzMjIzODk0ODc4M15eXl52aXNpdGlkfHx8fHx8fHx8fHx8fHx8fHx8fHx8fEFSUklWRUR8fHwyMDIwMDUwNjE3MDgyMnx8Ck9SQ3xSRXw4MzM1ODI2Mzl8MzI2NjIzODE5M3x8Q018fHx8MjAyMDA1MDYxNzA4MjIKT0JSfDF8ODMzNTgyNjM5fDMyNjYyMzgxOTN8dXMtMDAwNV5WaXRhbCBTaWduc15XaW5QYXRoXl58fDIwMjAwNTA2MTcwODIyfDIwMjAwNTA2MTcwODIyfHx8fHx8fDIwMjAwNTA2MTcwODIyfHx8fHx8fHwyMDIwMDUwNjE3MDgyMnx8fEZ8fDEKT0JYfDF8VFh8dHQtMDAwNS0xMV5PeHlnZW5EZXZeV2VsY2hBbGx5bl5efHxWZW50dXJpfHx8fHx8Rnx8fDIwMjAwNTA2MTcwODIyfHwK"
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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
Étant donné que le schéma du message HL7v2 correspond au schéma du store HL7v2, la réponse contient une chaîne JSON avec l'URL personnalisée dans le champ ORU_R01.SFT.7.

Heuristique de l'analyseur utilisant un segment personnalisé

L'exemple suivant montre comment l'analyseur HL7v2 utilise l'heuristique pour analyser un message avec une configuration mineure sur le store HL7v2.

L'exemple utilise le message HL7v2 suivant :

MSH|^~\&$|||||||ADT^A01|||2.1
EVN|\P\\L\\H\\N\
PID|1
ZCD|1

Le message HL7v2 n'est pas standard, car le segment ZCD n'est pas défini dans la norme HL7v2.

Créer un store HL7v2 avec le schéma personnalisé

Pour créer un store HL7v2 avec le schéma personnalisé, utilisez la méthode projects.locations.datasets.hl7V2Stores.create.

Notez que la configuration n'utilise que les trois champs suivants, sans tableau schemas ou types :

  • "unexpectedSegmentHandling": "PARSE"
  • "ignoreMinOccurs": "true"
  • "schematizedParsingType": "HARD_FAIL"

Si vous ne spécifiez aucune autre information sur la définition ou les types de message, l'analyseur HL7v2 détermine que le message est un message ADT_A01 et analyse les segments MSH, EVN et PID, ainsi que le segment personnalisé ZCD.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "parserConfig": {
    "schema": {
      "unexpectedSegmentHandling": "PARSE",
      "ignoreMinOccurs": "true",
      "schematizedParsingType": "HARD_FAIL"
    }
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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

Vous devriez recevoir une réponse JSON de ce type :

Ingérer et analyser le message HL7v2 à l'aide du schéma personnalisé

Ingérez la version encodée en base 64 du message HL7v2.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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

Vous devriez recevoir une réponse JSON de ce type :

Analyseur utilisant un message HL7v2 avec des champs manquants

L'exemple suivant montre comment utiliser des définitions de type et de groupe pour analyser ce message HL7v2 :

MSH|^~\&|||||20100101000000||ORM^O01^O01|23701|1|2.3||
PID|11|SMITH
PV1|11
PID|22|JOHN
PV1|22
ORC|3
OBX|4
NTE|5
NTE|6
OBX|7
NTE|8

Le message HL7v2 n'est pas standard, car il n'utilise que quelques champs (un seul champ dans certains cas) dans tous les segments, à l'exception de MSH. Par exemple, la norme HL7v2 nécessite que le segment PID contienne des champs tels que la langue principale, l'adresse et la date de naissance du patient, mais que les segments PID de l'exemple de message ne contiennent que l'ID du patient, ainsi que son prénom ou son nom.

Le message HL7v2 suit la syntaxe HL7, mais est presque entièrement personnalisé.

Créer un store HL7v2 avec le schéma personnalisé

Avant de créer un store HL7v2 avec le schéma personnalisé, consultez les propriétés suivantes de l'objet ParserConfig utilisé dans le schéma :

Tableau schemas :

  • mshField est défini sur le 12e champ (séparé par une barre verticale |) du premier segment du message. La valeur du champ est 2.3. Par conséquent, le schema que vous fournissez au store HL7v2 s'appliquera à tous les messages HL7v2 correspondant à mshField et value.
  • Le type de message ORM est spécifié avec un tableau members contenant les informations suivantes :
    • Le type de segment du message ORM correspond à l'en-tête du segment de message ou MSH.
    • Un groupe nommé "Patient" dont la valeur maxOccurs est égale à deux.
      • Un autre groupe members imbriqué sous le groupe "Patient" contenant le type de segment correspondant au groupe "Patient". Ce type de segment est PID.
      • Un autre groupe nommé "Visite du patient". Tout comme "Patient", un segment correspond à "Visite du patient". Ce type de segment est PV1.
    • Un groupe nommé "Ordonnance" n'ayant pas de nombre maximal ou minimal d'occurrences.
      • Un autre groupe members imbriqué sous le groupe "Ordonnance" contenant le type de segment correspondant au groupe "Ordonnance". Ce type de segment est ORC.
      • Un autre groupe nommé "Observation" qui possède son propre tableau members.
        • Le tableau members contient deux segments correspondant à "Observation" : OBX et NTE. OBX a une valeur maxOccurs de 1.

Tableau types :

  • Comme pour le tableau schemas, mshField est défini sur le 12e champ (par une barre verticale |) du premier segment du message. La valeur du champ est 2.3. Par conséquent, le types que vous fournissez au store HL7v2 s'appliquera à tous les messages HL7v2 correspondant à mshField et value.
  • Les types de données ST et SI sont déclarés en tant que primitives STRING. Étant donné que seuls ST et SI sont déclarés, vous pouvez constater que le message ne comporte aucun type personnalisé.
  • Le groupe Patient possède une valeur maxOccurs de 2 et un type de segment de PID. Deux types sont donc déclarés dans les champs PID. Les deux types sont SI.
  • Les autres types de segments sont répertoriés avec leurs champs et types correspondants. Tous les segments restants ont une seule occurrence et utilisent le type SI.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "parserConfig": {
    "schema": {
      "schematizedParsingType": "HARD_FAIL",
      "unexpectedSegmentHandling": "PARSE",
      "schemas": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "messageSchemaConfigs": {
            "ORM_O01": {
              "name": "ORM_O01",
              "members": [
                {
                  "segment": {
                    "type": "MSH"
                  }
                },
                {
                  "group": {
                    "name": "Patient",
                    "maxOccurs": 2,
                    "members": [
                      {
                        "segment": {
                          "type": "PID"
                        }
                      },
                      {
                        "group": {
                          "name": "Patient Visit",
                          "members": [
                            {
                              "segment": {
                                "type": "PV1"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "group": {
                    "name": "Order",
                    "members": [
                      {
                        "segment": {
                          "type": "ORC"
                        }
                      },
                      {
                        "group": {
                          "name": "Observation",
                          "members": [
                            {
                              "segment": {
                                "type": "OBX",
                                "maxOccurs": 1
                              }
                            },
                            {
                              "segment": {
                                "type": "NTE"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ],
      "types": [
        {
          "version": [
            {
              "mshField": "12",
              "value": "2.3"
            }
          ],
          "type": [
            {
              "name": "ST",
              "primitive": "STRING"
            },
            {
              "name": "SI",
              "primitive": "STRING"
            },
            {
              "name": "PID",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                },
                {
                  "name": "2",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "PV1",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "ORC",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "OBX",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            },
            {
              "name": "NTE",
              "fields": [
                {
                  "name": "1",
                  "type": "SI"
                }
              ]
            }
          ]
        }
      ],
    },
    "version": "V3"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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

Vous devriez recevoir une réponse JSON de ce type :

Ingérer et analyser le message HL7v2 à l'aide du schéma personnalisé

Ingérez une version encodée en base 64 du message HL7v2.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données parent
  • DATASET_ID : ensemble de données parent du magasin HL7v2
  • HL7V2_STORE_ID : ID du datastore HL7v2

Corps JSON de la requête :

{
  "message": {
    "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxPUk1eTzAxXk8wMXwyMzcwMXwxfDIuM3x8DVBJRHwxMXxTTUlUSA1QVjF8MTENUElEfDIyfEpPSE4NUFYxfDIyDU9SQ3wzDU9CWHw0DU5URXw1DU5URXw2DU9CWHw3DU5URXw4"
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

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

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

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

Exécutez ensuite la commande suivante pour envoyer votre requête REST :

$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

Vous devriez recevoir une réponse JSON de ce type :

Pour obtenir une version plus lisible du champ data dans la réponse, développez la section suivante :

Développer

{
  "data": {
    "ORM_O01": [
      {
        "MSH": [
          {
            "0": "MSH",
            "1": "|",
            "2": "^~\\\\\\u0026",
            "3": null,
            "4": null,
            "5": null,
            "6": null,
            "7": "20100101000000",
            "8": null,
            "9": {
              "1": "ORM",
              "2": "O01",
              "3": "O01"
            },
            "10": "23701",
            "11": {
              "1": "1"
            },
            "12": {
              "1": "2.3"
            },
            "13": null,
            "14": null
          }
        ],
        "Order": [
          {
            "ORC": [
              {
                "0": "ORC",
                "1": [
                  "3"
                ]
              }
            ],
            "Observation": [
              {
                "NTE": [
                  {
                    "0": "NTE",
                    "1": [
                      "5"
                    ]
                  },
                  {
                    "0": "NTE",
                    "1": [
                      "6"
                    ]
                  }
                ],
                "OBX": {
                  "0": "OBX",
                  "1": [
                    "4"
                  ]
                }
              },
              {
                "NTE": [
                  {
                    "0": "NTE",
                    "1": [
                      "8"
                    ]
                  }
                ],
                "OBX": {
                  "0": "OBX",
                  "1": [
                    "7"
                  ]
                }
              }
            ]
          }
        ],
        "Patient": [
          {
            "PID": [
              {
                "0": "PID",
                "1": [
                  "11"
                ],
                "2": [
                  "SMITH"
                ]
              }
            ],
            "Patient Visit": [
              {
                "PV1": [
                  {
                    "0": "PV1",
                    "1": [
                      "11"
                    ]
                  }
                ]
              }
            ]
          },
          {
            "PID": [
              {
                "0": "PID",
                "1": [
                  "22"
                ],
                "2": [
                  "JOHN"
                ]
              }
            ],
            "Patient Visit": [
              {
                "PV1": [
                  {
                    "0": "PV1",
                    "1": [
                      "22"
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}