HL7v2 메시지를 파싱할 커스텀 스키마 사용

이 페이지에서는 HL7v2 표준을 준수하지 않는 HL7v2 메시지를 파싱하도록 커스텀 스키마를 구성하는 방법을 설명합니다.

HL7v2 메시지를 FHIR 또는 OMOP와 같은 다른 형식으로 변환하는 경우 HL7v2 메시지를 HL7v2 저장소로 파싱하고 수집할 수 있어야 합니다. 이 가이드의 안내에 따라 HL7v2 메시지를 성공적으로 파싱하고 수집할 수 있는지 확인하세요.

개요

일부 경우에는 HL7v2 메시지가 HL7v2 표준을 준수하지 않을 수 있습니다. 예를 들어 HL7v2 메시지에 HL7v2 표준에 포함되지 않은 세그먼트가 포함되거나 세그먼트가 오래 되었을 수 있습니다. 규칙을 준수하지 않는 메시지를 수집하려고 하면 오류가 발생할 수 있습니다.

규칙을 준수하지 않는 HL7v2 메시지를 수집하려면 HL7v2 저장소를 만들거나 수정할 때 ParserConfig 객체를 수정해야 합니다. ParserConfig 내에서 커스텀 유형 및 세그먼트를 기준으로 스키마가 적용된 파싱을 구성하고, 거부된 HL7v2 메시지의 처리 방법 등을 결정할 수 있습니다.

ParserConfig를 구성하기 전 다음 섹션을 읽고 HL7v2 메시지, 유형 정의, 그룹 정의를 이해하세요.

HL7v2 메시지

이 섹션에서는 커스텀 스키마 파서를 구성할 때 유용한 HL7v2 메시지의 구조에 대해 간단한 개요를 설명합니다.

HL7v2 메시지는 이벤트를 기반으로 하며 의료 레코드에 대한 상태 전환 및 부분 업데이트를 설명합니다. 각 HL7v2 메시지에는 메시지 목적을 정의하는 메시지 유형이 포함되어 있습니다. 메시지 유형에 3개의 문자 코드가 사용되며, 메시지의 필수 기본 세그먼트 헤더(MSH)에 지정됩니다. 다음을 포함하여 수십 개의 메시지 유형이 있습니다.

  • ADT: 환자의 환자 관리 데이터 부분을 전송하기 위해 사용됩니다.
  • ORU: 관찰 결과를 전송하는 데 사용됩니다.
  • ORM: 주문에 대한 정보를 전송하는 데 사용됩니다.

세그먼트, 필드, 구성요소, 하위 구성요소를 구성하는 HL7v2 메시지 구조를 검토합니다.

그림 1. HL7v2 메시지 구조의 다이어그램.

그림 1에서는 세그먼트, 세그먼트 헤더, 필드, 구성요소 등 HL7v2 메시지의 여러 부분에 라벨이 지정됩니다.

기본적으로 HL7v2 메시지는 다음 문자를 사용하여 정보를 구분합니다. MSH 세그먼트에서 메시지별 기준에 따라 HL7v2 메시지의 구분자, 구분 기호, 종료자를 재정의할 수 있습니다.

  • 세그먼트 종료자: \r

    HL7v2 메시지가 다른 세그먼트 구분 기호를 사용하는 경우 커스텀 세그먼트 종료자 및 커스텀 필드 예시를 참조하세요.

  • 필드 구분자: |

  • 구성요소 구분 기호: ^

  • 하위 구성요소 구분 기호: &

  • 반복 구분 기호: ~

  • 이스케이프 문자: \

유형 및 그룹 정의

스키마 파서를 이해하려면 유형 정의그룹 정의를 사용해야 합니다.

유형 정의

'유형'이라는 용어는 다음을 포괄합니다.

  • MSH(메시지 세그먼트 헤더), DG1(진단), PID(환자 식별)와 같은 HL7v2 세그먼트 유형

    모든 HL7v2 세그먼트 유형의 목록은 세그먼트 정의를 참조하세요.

  • ST(문자열 데이터), TS(타임스탬프), SI(시퀀스 ID)와 같은 HL7v2 데이터 유형

    모든 HL7v2 기본 데이터 유형의 목록은 데이터 유형을 참조하세요.

Type 객체 내의 name 필드에 유형을 지정합니다.

유형에는 세그먼트 및 세그먼트의 필드, 구성요소, 하위 구성요소로 구성되는 모듈식 형식이 사용됩니다. Type 객체의 정보는 세그먼트 파싱 또는 해석하는 방법을 나타내고 다음과 같은 질문에 답변합니다.

  • 세그먼트에 있는 필드는 무엇인가요?
  • 필드의 데이터 유형은 무엇인가요?

다음 예시는 커스텀 ZCD 세그먼트의 유형 정의를 보여줍니다.

{
  "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
      }
    ]
  }
}

이 예시에서 ZCD 세그먼트에는 12라는 2개의 필드가 포함됩니다. 1의 데이터 유형은 기본 문자열 데이터 유형인 ST입니다. 2의 데이터 유형은 커스텀 데이터 유형인 A입니다.

A 커스텀 데이터 유형에 대한 다음 유형 정의는 또한 B라는 다른 커스텀 데이터 유형을 포함하는 것을 보여줍니다.

{
  "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
      }
    ]
  }
}

다음 예시는 B 커스텀 데이터 유형의 유형 정의를 보여줍니다. 이 유형에는 데이터 유형이 ST1 필드와 데이터 유형이 ST로 반복되는 2 필드가 있습니다.

{
  "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
      }
    ]
  }
}

세그먼트 및 데이터 유형에 대한 정보를 알고 있으면 원본 HL7v2 메시지에서 ZCD 세그먼트가 어떻게 보이는지 예상할 수 있습니다. 이 예시에서는 A 필드가 한 번 반복되는 HL7v2 메시지를 보여줍니다. 이것은 maxOccursA 필드에 설정되지 않았기 때문에 허용됩니다.

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
그림 2. 유형 정의 다이어그램.

그림 2에서 유형 정의의 각 부분은 세그먼트, 세그먼트 헤더, 필드, 구성요소, 하위 구성요소, 반복과 같은 라벨로 지정됩니다.

그룹 정의

그룹은 세그먼트 수준에서 정의되며, 각 HL7v2 메시지에 표시할 수 있는 세그먼트 유형에 대한 정보를 알려줍니다.

GroupOrSegment 객체 내에 groups 배열로 그룹을 지정합니다.

ADT_A01 HL7v2 메시지에 대한 다음의 그룹 구조 스니펫을 생각해 보세요.

  • members 배열의 첫 번째 segmentMSH(메시지 세그먼트 헤더)입니다. MSH는 모든 HL7v2 메시지에 필요하기 때문입니다.
  • 이름이 Group 1group입니다.

    이 그룹은 최대 2회까지만 발생할 수 있으며 커스텀 ZCD 세그먼트를 포함합니다.

    일반적으로 group에는 논리적으로 그룹화된 중첩된 여러 개의 세그먼트와 기타 그룹이 포함되어 있지만 이 예시에서 Group 1은 단일 세그먼트인 ZCD만 포함합니다.

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

그룹에 대한 정보를 알고 있으면 HL7v2 메시지에서 ZCD가 두 번 발생할 경우 원래 HL7v2 메시지가 어떻게 보이는지 예상할 수 있습니다. 이것은 Group 1에서 maxOccurs2로 설정되었기 때문에 허용됩니다. ZCD 세그먼트의 나머지 정보는 유형 정의를 모르면 알 수 없습니다.

MSH|^~\&|||||20100308000000||ADT^A01|23701|1|2.3||
ZCD|ZCD_CONTENT
ZCD|ZCD_CONTENT
그림 3. 그룹 정의 다이어그램.

그림 3에서는 그룹 정의의 일부인 세그먼트와 세그먼트 헤더가 라벨로 지정됩니다.

HL7v2 저장소에서 커스텀 스키마 구성

다음 섹션에서는 커스텀 스키마의 구성요소와 HL7v2 저장소에서 스키마를 구성하는 방법을 설명합니다.

HL7v2 저장소 유형 구성

HL7v2 메시지의 유형 정의를 이해한 후에는 HL7v2 저장소에 유형 구성을 지정할 수 있습니다. 구성을 지정하려면 types의 배열 및 version 배열을 추가합니다.

다음 예시는 HL7v2 저장소에서 유형 정의에 표시된 유형의 구성을 지정하는 방법을 보여줍니다.

이 구성에서는 version 배열을 사용하여 mshFieldvalue 필드를 지정합니다. 이러한 필드는 MSH 세그먼트의 필드 및 구성요소에 해당합니다.

사용자가 지정하는 types 배열은 version 배열에서 mshFieldvalue의 값에 해당하는 MSH 세그먼트가 있는 메시지에만 적용됩니다. 이렇게 하면 다른 버전의 HL7v2 메시지를 동일한 HL7v2 저장소로 수집할 수 있습니다.

{
  "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 저장소 그룹 구성

그룹을 사용하여 '멤버십' 수준에서 중첩된 구조를 구성할 수 있습니다. 그룹은 세그먼트 수준에서 members 배열에 지정됩니다. 세그먼트의 구조는 예측 가능하며 일반적으로 필드, 구성요소 및 하위 구성요소를 포함하지만 세그먼트 자체가 HL7v2 메시지의 모든 수준에 있을 수 있습니다.

유형 구성과 마찬가지로 그룹 구성은 version 필터를 사용하여 다른 버전의 HL7v2 메시지를 동일한 HL7v2 저장소로 수집할 수 있게 합니다.

다음 예시는 HL7v2 저장소에서 그룹 정의에 표시된 그룹의 구성을 지정하는 방법을 보여줍니다.

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

HL7v2 저장소 구성 완료

유형 구성과 그룹 구성을 조합하면 HL7v2 저장소에서 전체 커스텀 스키마 구성이 어떻게 되는지 확인할 수 있습니다. 또한 커스텀 스키마가 다음과 비슷한 HL7v2 메시지와 일치하는지 확인할 수 있습니다.

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

다음 섹션을 펼쳐 HL7v2 저장소에서 전체 커스텀 스키마를 확인한 다음, 계속해서 커스텀 스키마를 사용하는 HL7v2 저장소를 만듭니다.

펼치기

{
  "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 저장소 만들기

전체 커스텀 스키마를 사용하는 HL7v2 저장소를 만들려면 다음 섹션을 완료합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID
  • LOCATION: 데이터 세트 위치
  • DATASET_ID: HL7v2 저장소의 상위 데이터 세트
  • HL7V2_STORE_ID: HL7v2 저장소 ID

JSON 요청 본문:

{
  "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"
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

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

그런 후 다음 명령어를 실행하여 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

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

@'
{
  "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

그런 후 다음 명령어를 실행하여 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

다음과 비슷한 JSON 응답이 표시됩니다.

커스텀 스키마를 사용하여 HL7v2 메시지 수집 및 파싱

HL7v2 메시지의 base64 인코딩 버전을 수집하려면 이 섹션을 완료합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID
  • LOCATION: 상위 데이터 세트의 위치
  • DATASET_ID: HL7v2 저장소의 상위 데이터 세트
  • HL7V2_STORE_ID: HL7v2 저장소 ID

JSON 요청 본문:

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

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

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

그런 후 다음 명령어를 실행하여 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

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

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

그런 후 다음 명령어를 실행하여 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

다음과 비슷한 JSON 응답이 표시됩니다.

필드 카디널리티 확인

HL7v2 저장소에서 다음 필드를 설정하여 HL7v2 메시지에서 필드 카디널리티를 확인할 수 있습니다.

  • minOccurs: 수신되는 HL7v2 메시지에서 그룹, 세그먼트, 필드, 구성요소, 하위 구성요소를 제공하거나 반복해야 하는 최소 횟수를 결정합니다.
  • maxOccurs: 수신되는 HL7v2 메시지에서 그룹, 세그먼트, 필드, 구성요소, 하위 구성요소를 제공하거나 반복할 수 있는 최대 횟수를 결정합니다.

누락된 요소 무시

누락된 요소에 관계없이 HL7v2 API가 모든 수신되는 HL7v2 메시지를 수락하도록 하려면 ignoreMinOccurstrue로 설정합니다. 즉, 필수 그룹, 세그먼트, 필드, 구성요소, 하위 구성요소가 누락된 경우에도 메시지가 거부되지 않습니다.

메시지에 필수 필드가 누락되었기 때문에 HL7v2 메시지를 수집할 수 없는 경우 ignoreMinOccurstrue로 설정하는 것이 좋습니다.

와일드 카드 필드 유형

와일드 카드 문자인 *는 필드에 사용되는 특수 유형입니다. *를 사용하면 HL7v2 파서에서 HL7v2 메시지의 구조에 따라 필드가 파싱됩니다. 필드 데이터 유형을 엄격하게 적용하지 않으려는 경우에는 필드 값 대신 *를 사용하는 것이 유용합니다. 필드 콘텐츠가 HL7v2 표준을 준수하는 한 Cloud Healthcare API가 HL7v2 메시지를 파싱할 수 있습니다.

예를 들어 다음 유형 정의를 고려해 보세요. 2 필드는 필드 데이터 유형 대신 와일드 카드 문자를 사용합니다. 정의는 유형 정의의 첫 번째 정의와 동일하고 사용자가 AB 유형을 지정할 필요가 없습니다.

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

다음 단계

커스텀 스키마 파서 예시로 커스텀 스키마 파서 구성에 대해 자세히 알아보세요.