openapi: 3.2.0
info:
    title: KOS OpenAPI
    version: 1.0.1
    description: |
        KOS OpenAPI는 KOS 솔루션을 사용하는 병원들의 개발팀만 사용 가능합니다.

        자세한 사항은 해당 병원의 KOS 영업 담당자를 통해 문의 바랍니다.

        이 문서는 [OpenAPI Spec](/openapi.yaml) 파일을 통해 확인할 수 있습니다.

        ### API 요청 방법

        1. KOS OpenAPI는 조회, 수정, 삭제 등 모두 POST 방식으로 요청합니다.

        2. 인증 관련을 제외한 모든 요청은 `Authorization` 헤더에 인증 토큰(Auth Token)이 포함되어야 합니다. 자세한 내용은 [인증 방법](/docs/openapi/authorization)을 참고하세요.

        3. 모든 에러 응답은 종류와 무관하게 `400` 상태 코드를 반환합니다. 에러 응답의 상세 내용을 통해 에러 원인을 확인할 수 있습니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.

        ### 날짜 및 시간 형식

        날짜나 시간을 전달하는 필드는 각 필드 설명에 명시된 형식을 따릅니다.

        `format: date-time`으로 문서화된 필드는 [ISO 8601](https://ko.wikipedia.org/wiki/ISO_8601) date-time 문자열을 사용합니다. UTC가 명시된 필드는 UTC 시간대 값을 전달합니다.

        ### 국가 코드 형식

        상품과 타겟 국가 조회에서 사용하는 국가 코드는 [ISO 3166-1 alpha-2](https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2) 문자열을 사용합니다.

        전화번호의 국가번호는 전화번호 스키마의 `countryCode` 설명을 따릅니다.

        <Callout type="caution">
        <p>단, 국가별로 보여줄 상품을 지정할 수 있고, 해당 국가에 맞는 수가를 설정하기 위한, '타겟 국가'의 <strong>'그 외 국가'는 <code>ETC</code></strong> 로 표기합니다.</p>
        <p>자세한 설명은 <a href="/docs/openapi/targetcountry">타겟 국가</a>를 확인하세요.</p>
        </Callout>

        ### 에러 응답

        조회 혹은 명령을 정상적으로 처리할 수 없는 경우, `400` HTTP 상태 코드와 함께 아래와 같은 에러 응답이 돌아옵니다.

        ```json
        {
          "status": 400,
          "message": "InvalidCommandException",
          "className": "InvalidCommandException",
          "errorProperties": [
            {
              "key": "{{ Key }}",
              "reason": "{{ ErrorReason }}"
            }
          ]
        }
        ```

        - `key`: 누락된 필드명 혹은 잘못된 값을 가진 필드명
        - `reason`: 에러 원인
          - `TooShort`: 문자열이 너무 짧음
          - `TooLong`: 문자열이 너무 길음
          - `Required`: 필수 항목이 누락됨
          - `Duplicated`: 중복됨
          - `InvalidTimeRange`: 시간 범위 유효성 검사 실패
          - `NotAvailable`: 사용 불가
          - `NotFound`: 대상이 없음
          - `TooSmall`: 너무 작은 값
          - `TooBig`: 너무 큰 값
servers:
    - description: 운영 환경
      url: https://open-api.kos-solution.com
    - description: 개발 환경
      url: https://open-api.kos-solution.dev
tags:
    - description: |
        ## 인증 방법

        인증 관련을 제외한 모든 API 요청은 인증 토큰(Auth Token)을 필요로 합니다.

        인증 토큰은 HTTP Header에 포함되어야 합니다.

        ```http request
        Authorization: {{Auth Token}}
        ```

        _\* `Bearer` 와 같은 접두사는 필요하지 않습니다._

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>API Key</dt>
        <dd><strong>정의:</strong> KOS 팀이 병원에 발급하는 서버용 인증 키입니다.<br /><strong>설명:</strong> 인증 토큰을 발급받기 위한 입력값이며, 클라이언트에 노출하지 않고 서버 사이드에서만 사용해야 합니다.</dd>
        <dt>인증 토큰(Auth Token)</dt>
        <dd><strong>정의:</strong> API 요청 시 <code>Authorization</code> 헤더에 담아 전송하는 토큰입니다.<br /><strong>설명:</strong> 인증 관련 API를 제외한 모든 요청에 필요합니다. 일정 시간이 지나면 만료될 수 있으며, 만료된 토큰으로 호출하면 <code>401</code> 응답이 반환됩니다.</dd>
        <dt>인증 토큰 교환</dt>
        <dd><strong>정의:</strong> API Key를 인증 토큰으로 바꾸는 서버 사이드 절차입니다.<br /><strong>설명:</strong> 클라이언트에서 수행하면 API Key가 노출될 수 있으므로 반드시 서버에서만 호출해야 합니다.</dd>
        <dt>Authorization 헤더</dt>
        <dd><strong>정의:</strong> 인증 토큰을 전달하는 HTTP 헤더입니다.<br /><strong>설명:</strong> 값에는 인증 토큰만 넣으며, <code>Bearer</code> 같은 접두사는 붙이지 않습니다.</dd>
        </dl>
        </details>

        <Callout type="danger">
        <p><strong>절대로 API Key와 인증 토큰을 클라이언트 노출하지 마세요.</strong></p>
        <p>클라이언트에 노출되거나, 클라이언트에서 저장되지 않도록 주의해야 합니다.</p>
        <p>인증 토큰 교환 또한 절대로 클라이언트에서 이루어지면 안됩니다.</p>
        <p>노출된다면 악의적인 사용자가 인증 토큰을 획득하여 API를 사용할 수 있습니다.</p>
        <p>만약, 노출되었다면 즉시 KOS 팀을 통해 새로운 API Key를 발급 받아야 합니다.</p>
        </Callout>

        인증 토큰을 발급 받기 위해선, KOS 팀으로 부터 전달 받은 API Key가 필요합니다.

        [인증 토큰 교환](/docs/openapi/exchange-token) API를 통해 인증 토큰을 발급 받을 수 있습니다.

        ## 인증 흐름

        1. KOS 팀으로부터 API Key를 발급받습니다.
        2. 서버 사이드에서 [인증 토큰 교환](/docs/openapi/exchange-token) API에 API Key를 전달하여 인증 토큰을 발급받습니다.
        3. 발급받은 인증 토큰을 이후 API 요청의 `Authorization` 헤더에 담아 호출합니다.

        <Callout type="info">
        <p>API Key 발급과 인증 토큰 교환, 인증 토큰을 사용하는 모든 호출은 서버 사이드에서만 이루어져야 합니다.</p>
        </Callout>

        ## 토큰 유효 기간

        인증 토큰은 일정 시간이 지나면 만료됩니다. 유효 기간은 KOS 정책에 따라 달라질 수 있습니다.

        ## 토큰 만료 처리

        토큰이 만료된 상태에서 API를 호출하면 `401` 상태 코드가 반환됩니다.

        이 경우, [인증 토큰 교환](/docs/openapi/exchange-token) API를 다시 호출하여 새로운 토큰을 발급받은 뒤 요청을 재시도하세요.

        ## 토큰 관리 전략

        매 요청마다 토큰을 새로 교환하지 않고, 다음 전략으로 관리하기를 권장합니다.

        - **재사용**: 발급받은 토큰을 서버 사이드의 메모리나 캐시에 보관하고 재사용합니다.
        - **401 대응**: API 요청이 `401` 응답을 반환하면 토큰을 다시 교환하여 갱신하고 실패한 요청을 재시도합니다.

        토큰 값을 직접 파싱해 만료 여부를 판단하지 말고, API의 `401` 응답으로 만료를 처리하세요.

        ## API Key 관리

        - API Key는 서버 환경 변수나 시크릿 저장소에 보관하며, 코드 저장소나 클라이언트에 포함하지 않습니다.
        - API Key가 유출되었거나 유출이 의심되면 즉시 KOS 팀을 통해 새 API Key를 발급받습니다.
      name: Authorization
      x-displayName: 인증
    - description: |
        이미지 관련 API입니다.

        업로드 URL 생성과 내원객 이미지 등록 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>presigned URL</dt>
        <dd><strong>정의:</strong> 이미지 파일을 업로드할 수 있도록 발급되는 임시 업로드 URL입니다.<br /><strong>설명:</strong> KOS API로 파일을 직접 보내는 것이 아니라, 응답의 URL에 이미지 바이너리를 <code>PUT</code> 요청으로 업로드합니다. 발급된 URL은 5분 동안 유효합니다.</dd>
        <dt>내원객 이미지</dt>
        <dd><strong>정의:</strong> 내원객에게 연결해 관리하는 이미지 파일 정보입니다.<br /><strong>설명:</strong> 파일 업로드 후 파일 이름, 내원객 ID, 이미지 출처, 촬영 일시 등을 전달해 내원객 이미지로 등록합니다.</dd>
        <dt>이미지 출처</dt>
        <dd><strong>정의:</strong> 이미지가 어디에서 생성되었는지 구분하는 값입니다.<br /><strong>설명:</strong> 원내 촬영, 내원객 촬영, 동의서, 펜 차트처럼 이미지의 발생 맥락을 표시합니다.</dd>
        <dt>촬영 장비 코드</dt>
        <dd><strong>정의:</strong> 이미지를 촬영한 장비를 나타내는 코드입니다.<br /><strong>설명:</strong> 병원에서 관리하는 장비 코드와 연결해 이미지의 촬영 장비를 구분할 때 사용합니다.</dd>
        <dt>이미지 분류 코드</dt>
        <dd><strong>정의:</strong> 이미지를 업무 기준으로 분류하는 코드입니다.<br /><strong>설명:</strong> 경과 사진, 상담 자료처럼 병원에서 정의한 이미지 분류 체계에 맞춰 이미지를 정리할 때 사용합니다.</dd>
        <dt>이미지 폴더 경로</dt>
        <dd><strong>정의:</strong> 이미지가 속한 폴더 위치를 나타내는 경로입니다.<br /><strong>설명:</strong> 슬래시(<code>/</code>)로 하위 폴더를 구분해 내원객 이미지를 폴더 구조로 관리할 수 있습니다.</dd>
        </dl>
        </details>
      name: Image
      x-displayName: 이미지
    - description: |
        선불카드 관련 API입니다.

        내원객의 선불카드 잔액, 선불카드 목록, 선불카드 충전 이벤트 조회 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>선불카드</dt>
        <dd><strong>정의:</strong> 내원객이 병원에서 사용할 수 있도록 미리 충전해 둔 금액 또는 포인트 단위의 카드입니다.<br /><strong>설명:</strong> 선불카드 목록 조회에서는 카드 이름, 잔액, 연결 내원객, 만료일 같은 정보를 확인합니다.</dd>
        <dt>선불카드 잔액</dt>
        <dd><strong>정의:</strong> 내원객이 사용할 수 있는 남은 선불카드 금액입니다.<br /><strong>설명:</strong> 현금 잔액과 포인트 잔액이 구분되어 제공될 수 있으며, 내원객 기준 잔액 조회에서 확인합니다.</dd>
        <dt>충전 이벤트</dt>
        <dd><strong>정의:</strong> 선불카드 금액이 변동된 이력입니다.<br /><strong>설명:</strong> 충전, 사용, 사용 취소, 환불, 만료, 차감 같은 이벤트를 통해 잔액 변화의 원인을 추적합니다.</dd>
        <dt>카드 소유자</dt>
        <dd><strong>정의:</strong> 선불카드를 수납한 내원객입니다. 선불카드당 소유자는 한 명만 존재합니다.<br /><strong>설명:</strong> 하나의 선불카드를 여러 내원객이 공유하여 사용할 수 있으므로, 목록에서 각 내원객이 해당 선불카드의 소유자인지 확인할 수 있습니다.</dd>
        <dt>금액 유형</dt>
        <dd><strong>정의:</strong> 선불카드 이벤트 금액이 현금 잔액인지 포인트인지 구분하는 값입니다.<br /><strong>설명:</strong> 잔액과 포인트가 별도로 관리되는 경우 이벤트 금액을 올바르게 해석하는 데 필요합니다.</dd>
        </dl>
        </details>
      name: PrepaidCard
      x-displayName: 선불카드
    - description: |
        상품, 상품 옵션, 상품 카테고리 관련 API입니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>상품</dt>
        <dd><strong>정의:</strong> 병원이 내원객에게 판매하거나 예약 대상으로 노출하는 상위 항목입니다.<br /><strong>설명:</strong> 하나의 상품은 여러 상품 옵션을 포함할 수 있으며, 상품 목록과 상품 상세 조회의 기본 단위입니다.</dd>
        <dt>상품 옵션</dt>
        <dd><strong>정의:</strong> 내원객이 실제로 선택하는 시술 구성과 가격 정보를 담은 항목입니다.<br /><strong>설명:</strong> 예약의 희망 시술, 구매 항목, 시술권은 보통 상품 옵션 단위로 연결됩니다.</dd>
        <dt>상품 카테고리</dt>
        <dd><strong>정의:</strong> 상품을 분류하기 위한 값입니다.<br /><strong>설명:</strong> 상품 목록을 카테고리별로 필터링하거나 화면에서 상품을 묶어 보여줄 때 사용합니다. 하나의 상품에 여러 카테고리를 설정할 수 있습니다.</dd>
        <dt>진료 항목</dt>
        <dd><strong>정의:</strong> 병원이 제공하는 진료 또는 시술의 기준 항목입니다.<br /><strong>설명:</strong> 상품 옵션이 어떤 진료 항목과 연결되는지 확인하면 예약, 수납, 시술권에서 같은 시술 개념을 일관되게 다룰 수 있습니다.</dd>
        <dt>시술 구성</dt>
        <dd><strong>정의:</strong> 상품 옵션에 포함된 시술, 장비, 약물, 수량, 단위 정보입니다.<br /><strong>설명:</strong> 단일 옵션은 하나의 시술 구성을 가질 수 있고, 그룹 옵션은 여러 구성을 포함할 수 있습니다.</dd>
        <dt>타겟 국가</dt>
        <dd><strong>정의:</strong> 상품을 노출하거나 가격을 적용할 대상 국가입니다.<br /><strong>설명:</strong> 국가별로 보여줄 상품이나 가격이 달라질 수 있으므로 상품 조회와 필터링에 함께 사용됩니다.</dd>
        </dl>
        </details>
      name: Product
      x-displayName: 상품
    - description: |
        수납 관련 API입니다.

        수납 조회와 내원객 기준 수납 조회 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>수납</dt>
        <dd><strong>정의:</strong> 내원객에게 발생한 결제 또는 청구 내역을 관리하는 단위입니다.<br /><strong>설명:</strong> 수납 목록에서는 내원객, 수납 일시, 담당자, 결제 금액, 연결 스케줄 정보를 확인할 수 있습니다.</dd>
        <dt>구매 항목</dt>
        <dd><strong>정의:</strong> 하나의 수납 안에서 내원객이 무엇을 샀는지를 나타내는 개별 항목입니다.<br /><strong>설명:</strong> 상품 옵션, 기타 상품, 선불카드 상품 같은 구성이 구매 항목으로 포함될 수 있습니다.</dd>
        <dt>거래</dt>
        <dd><strong>정의:</strong> 수납에서 금전이 오간 내역입니다.<br /><strong>설명:</strong> 거래의 지불 유형, 금액, 상태를 통해 구매 항목이 어떤 방식으로 지불되었는지 확인합니다.</dd>
        <dt>내원객 기준 수납</dt>
        <dd><strong>정의:</strong> 특정 내원객에게 연결된 수납 내역입니다.<br /><strong>설명:</strong> 내원객 ID로 조회하면 해당 내원객의 결제 및 청구 이력을 모아 확인할 수 있습니다.</dd>
        <dt>스케줄 연결</dt>
        <dd><strong>정의:</strong> 수납이 특정 내원 일정과 연결되는 관계입니다.<br /><strong>설명:</strong> 스케줄과 연결된 수납은 어떤 방문이나 예약에서 발생한 비용인지 파악하는 데 사용합니다.</dd>
        </dl>
        </details>
      name: Purchase
      x-displayName: 수납
    - description: |
        예약과 스케줄 관련 API입니다.

        예약 생성, 예약 변경, 예약 취소, 예약 슬롯 조회, 예약 그룹, 구역, 스케줄 조회 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>예약</dt>
        <dd><strong>정의:</strong> 내원객이 특정 시간에 병원에 방문하도록 등록한 일정 요청입니다.<br /><strong>설명:</strong> 예약 생성, 변경, 취소 API의 중심 대상입니다. 요청 시 내원객 정보, 예약 그룹, 구역, 시작/종료 시각, 희망 시술 정보를 함께 전달합니다.</dd>
        <dt>스케줄</dt>
        <dd><strong>정의:</strong> 예약을 바탕으로 병원 운영 흐름에서 관리되는 내원 일정 정보입니다.<br /><strong>설명:</strong> 스케줄 조회 API에서는 내원객, 예약, 수납, 시술 진행 정보처럼 실제 내원 관리에 필요한 정보를 함께 확인합니다.</dd>
        <dt>예약 슬롯</dt>
        <dd><strong>정의:</strong> 예약을 생성할 수 있는 시간 구간입니다.<br /><strong>설명:</strong> 상품, 예약 그룹, 기존 스케줄 조건에 따라 가능한 시간대를 조회한 뒤 예약 생성 요청에 사용합니다.</dd>
        <dt>예약 그룹</dt>
        <dd><strong>정의:</strong> 예약 가능 시간, 구역, 리소스, 정책을 묶어 관리하는 예약 단위입니다.<br /><strong>설명:</strong> 어떤 예약 그룹으로 예약하느냐에 따라 조회되는 슬롯과 예약 가능한 시간이 달라질 수 있습니다.</dd>
        <dt>구역</dt>
        <dd><strong>정의:</strong> 예약이나 스케줄이 배정되는 병원 내 영역입니다.<br /><strong>설명:</strong> 예약 생성과 슬롯 조회에서 내원객이 방문하거나 리소스가 점유될 공간을 지정할 때 사용합니다.</dd>
        <dt>점유 시간</dt>
        <dd><strong>정의:</strong> 특정 시간대를 예약 가능 범위에서 제외하거나 리소스 사용 시간으로 표시하는 정보입니다.<br /><strong>설명:</strong> 점유 시간을 생성하면 해당 시간에는 예약을 받지 않도록 제어할 수 있습니다.</dd>
        <dt>내원 단계</dt>
        <dd><strong>정의:</strong> 스케줄이 현재 어떤 내원 단계에 있는지를 나타내는 단계입니다.<br /><strong>설명:</strong> 예약, 접수, 상담, 시술 등 내원 과정 기준으로 스케줄을 조회할 때 사용합니다.</dd>
        </dl>
        </details>
      name: Schedule
      x-displayName: 예약
    - description: |
        병원 운영 데이터를 항목별로 조회하는 API입니다.

        <details>
        <summary>커서 기반 페이지네이션</summary>

        정의: 대량 데이터를 순서대로 나누어 조회하는 방식

        `limit`을 지정하면 응답에 `nextCursor`가 포함됩니다. 다음 페이지 요청 시 `cursor` 값을 그대로 전달합니다. `cursor` 없이 요청한 첫 응답에만 `totalCount`가 반환됩니다.
        </details>
      name: Statistics
      x-displayName: 통계
    - description: |
        타겟 국가 관련 API입니다.

        상품에서 사용하는 타겟 국가 목록을 조회합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>타겟 국가</dt>
        <dd><strong>정의:</strong> 상품을 노출하거나 가격을 설정할 대상 국가입니다.<br /><strong>설명:</strong> 국가별로 다른 상품 구성이나 가격 정책을 적용할 때 사용합니다.</dd>
        <dt>국가 코드</dt>
        <dd><strong>정의:</strong> 국가를 식별하는 ISO 3166-1 alpha-2 형식의 코드입니다.<br /><strong>설명:</strong> 예를 들어 한국은 <code>KR</code>, 일본은 <code>JP</code>처럼 두 글자 코드로 표현합니다.</dd>
        <dt>그 외 국가(ETC)</dt>
        <dd><strong>정의:</strong> 개별 국가 코드로 분리하지 않은 나머지 국가를 나타내는 값입니다.<br /><strong>설명:</strong> 특정 국가별 설정이 없을 때 공통 적용 대상처럼 사용할 수 있습니다.</dd>
        <dt>상품 연결</dt>
        <dd><strong>정의:</strong> 상품이 어떤 국가를 대상으로 하는지 나타내는 관계입니다.<br /><strong>설명:</strong> 타겟 국가 목록을 먼저 조회하면 이후 상품 응답에서 국가 관련 값을 해석하기 쉽습니다.</dd>
        </dl>
        </details>
      name: TargetCountry
      x-displayName: 타겟 국가
    - description: |
        시술권 관련 API입니다.

        내원객의 시술권 묶음 조회 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>시술권</dt>
        <dd><strong>정의:</strong> 내원객이 구매한 상품 옵션을 실제 시술에 사용할 수 있도록 관리하는 권리 단위입니다.<br /><strong>설명:</strong> 사용 가능, 사용됨, 취소됨 같은 상태를 가지며 시술 진행과 연결됩니다.</dd>
        <dt>시술권 묶음</dt>
        <dd><strong>정의:</strong> 같은 구매 항목에서 생성된 여러 시술권을 함께 묶은 단위입니다.<br /><strong>설명:</strong> 내원객의 사용 가능한 시술권을 조회할 때 상품 옵션, 구매 정보, 개별 시술권 목록을 함께 확인합니다.</dd>
        <dt>상품 옵션 연결</dt>
        <dd><strong>정의:</strong> 시술권이 어떤 상품 옵션에서 생성되었는지 나타내는 정보입니다.<br /><strong>설명:</strong> 상품명, 옵션명, 프로모션 정보를 통해 시술권의 판매 구성을 확인할 수 있습니다.</dd>
        <dt>진료 항목</dt>
        <dd><strong>정의:</strong> 시술권으로 받을 수 있는 진료 또는 시술의 기준 항목입니다.<br /><strong>설명:</strong> 시술권이 어떤 시술에 사용되는지 이해하고 스케줄의 시술 정보와 연결할 때 사용합니다.</dd>
        <dt>시술권 상태</dt>
        <dd><strong>정의:</strong> 시술권의 현재 사용 가능 여부를 나타내는 값입니다.<br /><strong>설명:</strong> 사용 가능한 시술권만 예약이나 시술 진행에 활용할 수 있으므로 상태 확인이 필요합니다.</dd>
        </dl>
        </details>
      name: Ticket
      x-displayName: 시술권
    - description: |
        내원객 관련 API입니다.

        내원객 조회, 중복 내원객 조회, 내원객 검색, 초진지 조회와 제출 기능을 제공합니다.

        <details>
        <summary>주요 개념</summary>
        <dl>
        <dt>내원객</dt>
        <dd><strong>정의:</strong> 병원에 방문하거나 예약을 진행하는 사람의 고객 정보입니다.<br /><strong>설명:</strong> 이름, 전화번호, 차트 번호, 생년월일, 성별, 국적 같은 정보를 기준으로 조회하거나 검색합니다.</dd>
        <dt>내원객 ID</dt>
        <dd><strong>정의:</strong> 내원객을 식별하는 고유 ID입니다.<br /><strong>설명:</strong> 예약, 수납, 시술권, 선불카드처럼 다른 도메인의 데이터를 특정 내원객과 연결할 때 사용합니다.</dd>
        <dt>중복 내원객</dt>
        <dd><strong>정의:</strong> 같은 사람일 가능성이 있는 기존 내원객 후보입니다.<br /><strong>설명:</strong> 이름, 전화번호, 여권 정보, 생년월일, SNS 정보 등을 기준으로 이미 등록된 내원객이 있는지 확인할 때 사용합니다.</dd>
        <dt>초진 문진표</dt>
        <dd><strong>정의:</strong> 내원객이 첫 방문 전에 작성하는 문진 정보입니다.<br /><strong>설명:</strong> 문진표 조회 API로 작성 항목을 확인하고, 제출 API로 내원객의 응답을 전달합니다.</dd>
        <dt>연동 정보</dt>
        <dd><strong>정의:</strong> 외부 채널에서 내원객을 식별하기 위한 연결 정보입니다.<br /><strong>설명:</strong> LINE, 강남언니 같은 채널의 사용자 정보를 내원객과 연결해 중복 확인이나 예약 생성에 활용할 수 있습니다.</dd>
        <dt>마케팅 수신 동의</dt>
        <dd><strong>정의:</strong> 내원객의 마케팅 연락 수신 여부와 관련된 동의 정보입니다.<br /><strong>설명:</strong> 공개 API에서는 전화번호를 기준으로 마케팅 수신 동의를 해제할 수 있습니다.</dd>
        </dl>
        </details>
      name: Visitor
      x-displayName: 내원객
paths:
    /image/open/v1/commands/generate-uploading-url:
        post:
            tags:
                - Image
            operationId: generateUploadingImageUrl
            summary: 이미지 업로드 URL 발급
            description: |
                이 API는 이미지 파일을 직접 업로드하지 않고, 이미지 파일을 업로드할 수 있는 presigned URL을 발급합니다.

                업로드 흐름은 다음과 같습니다.

                1. 이 API에 병원별로 유니크한 `fileName`을 전달해 presigned URL을 발급받습니다.
                2. 응답의 `data` URL로 이미지 파일 바이너리를 `PUT` 요청으로 업로드합니다.
                3. 발급된 URL은 5분 동안 유효합니다. URL이 만료되면 다시 발급받아 업로드합니다.

                아래 예시에서 `{이 API로 발급받은 presigned URL}`은 응답의 `data` 값입니다.

                ```bash
                curl -X PUT "{이 API로 발급받은 presigned URL}" \
                  -H "Content-Type: image/jpeg" \
                  --data-binary "@./image.jpg"
                ```

                `Content-Type`은 업로드할 이미지 파일 형식에 맞춰 지정합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GenerateUploadingImageUrl'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GenerateUploadingImageUrlResponse'
    /image/open/v1/commands/register-visitor-images:
        post:
            tags:
                - Image
            operationId: registerVisitorImages
            summary: 내원객 이미지 등록
            description: 내원객 이미지를 등록합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.RegisterVisitorImages'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/RegisterVisitorImagesMemoTooLongError'
                                    - $ref: '#/components/schemas/RegisterVisitorImagesPathSegmentTooLongError'
                                    - $ref: '#/components/schemas/RegisterVisitorImagesPathNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/RegisterVisitorImagesMemoTooLongError'
                                                - $ref: '#/components/schemas/RegisterVisitorImagesPathSegmentTooLongError'
                                                - $ref: '#/components/schemas/RegisterVisitorImagesPathNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`memo`는 150자 이하여야 합니다.'
                                    summary: 메모가 150자를 초과한 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: memo
                                              reason: TooLong
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`path`의 각 폴더명은 200자 이하여야 합니다.'
                                    summary: 폴더명이 200자를 초과한 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: path
                                              reason: TooLong
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`path`에 `*` 또는 `?`를 포함할 수 없습니다.'
                                    summary: 경로에 허용되지 않는 문자가 포함된 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: path
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /open/authorization/commands/exchange-token:
        post:
            tags:
                - Authorization
            operationId: exchangeToken
            summary: 인증 토큰 교환
            description: |-
                발급받은 API Key를 인증 토큰으로 교환합니다.

                전체 인증 흐름은 [인증 방법](/docs/openapi/authorization) 문서를 참고하세요. 인증 토큰 교환은 인증이 필요 없는 유일한 요청입니다.
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.ExchangeTokenCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.ExchangeTokenResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ExchangeTokenApiKeyNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ExchangeTokenApiKeyNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 전달한 `key`에 해당하는 API Key를 찾을 수 없습니다.
                                    summary: API Key가 유효하지 않은 경우
                                    value:
                                        className: InternalServiceException
                                        errorProperties:
                                            - key: apiKey
                                              reason: NotFound
                                        message: InternalServiceException
                                        status: 400
    /procedure-menu/open/categories/queries/get-categories:
        post:
            tags:
                - Product
            operationId: getCategories
            summary: 상품 카테고리 목록 조회
            description: 상품 카테고리 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetCategoriesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.GetCategoriesQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetCategoriesInvalidSortCriteriaError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetCategoriesInvalidSortCriteriaError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 정렬 가능한 필드는 `order`입니다.
                                    summary: 정렬 기준이 올바르지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties: []
                                        message: sort is invalid
                                        status: 400
    /procedure-menu/open/products/queries/get-product:
        post:
            tags:
                - Product
            operationId: getProduct
            summary: 상품 조회
            description: |-
                상품 상세 정보를 조회합니다.

                요청한 API Key에 해당하는 채널에 노출 가능한 상품 옵션만 반환됩니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetProductQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.OpenProductDetailContract'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetProductProductNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetProductProductNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 상품을 찾을 수 없는 경우
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: 채널에 노출 가능한 옵션이 없는 경우
                                    summary: 채널에 노출 가능한 옵션이 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /procedure-menu/open/products/queries/get-products:
        post:
            tags:
                - Product
            operationId: getProducts
            summary: 상품 목록 조회
            description: |-
                상품 목록을 조회합니다.

                요청한 API Key에 해당하는 채널에 노출 가능한 상품만 반환됩니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetProductsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.GetOpenProductsQueryResponse'
    /procedure-menu/open/products/queries/search-product-option-summaries:
        post:
            tags:
                - Product
            operationId: searchProductOptionSummaries
            summary: 상품 옵션 검색
            description: |-
                상품 옵션을 검색합니다.

                요청한 API Key에 해당하는 채널에 노출 가능한 상품 옵션만 검색합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.SearchProductOptionSummariesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesQueryResponse'
    /procedure-menu/open/target-countries/queries/get-target-countries:
        post:
            tags:
                - TargetCountry
            operationId: getTargetCountries
            summary: 타겟 국가 목록 조회
            description: 병원에 설정된 타겟 국가 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.Empty'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.GetTargetCountriesQueryResponse'
    /procedure-menu/open/v1/machines/queries/get-machines:
        post:
            tags:
                - Product
            operationId: getMachines
            summary: 기기 목록 조회
            description: 삭제되지 않은 기기 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetMachinesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetMachinesQueryResponse'
    /procedure-menu/open/v1/medical-services/queries/get-medical-services:
        post:
            tags:
                - Product
            operationId: getMedicalServices
            summary: 진료항목 목록 조회
            description: 삭제되지 않은 진료항목 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetMedicalServicesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetMedicalServicesQueryResponse'
    /procedure-menu/open/v1/medicines/queries/get-medicines:
        post:
            tags:
                - Product
            operationId: getMedicines
            summary: 약물 목록 조회
            description: 삭제되지 않은 약물 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetMedicinesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetMedicinesQueryResponse'
    /procedure-menu/open/v1/procedures/queries/get-procedures:
        post:
            tags:
                - Product
            operationId: getProcedures
            summary: 시술 목록 조회
            description: 삭제되지 않은 시술 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetProceduresQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetProceduresQueryResponse'
    /procedure-menu/open/v1/product-options/queries/get-product-options:
        post:
            tags:
                - Product
            operationId: getProductOptions
            summary: 상품 옵션 목록 조회
            description: 상품 옵션 상세 정보를 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.procedure.GetProductOptionsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.procedure.GetProductOptionsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetProductOptionsOptionIdsRequiredError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetProductOptionsOptionIdsRequiredError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`optionIds`는 최소 한 개 이상 필요합니다.'
                                    summary: 상품 옵션 ID 목록이 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: optionIds
                                              reason: Required
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/add-product-option:
        post:
            tags:
                - Product
            operationId: addProductOption
            summary: 상품 옵션 추가
            description: 상품에 옵션을 추가합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenAddProductOptionCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/AddProductOptionProductNotFoundError'
                                    - $ref: '#/components/schemas/AddProductOptionMedicalServiceNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/AddProductOptionProductNotFoundError'
                                                - $ref: '#/components/schemas/AddProductOptionMedicalServiceNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: 옵션 구성에 포함된 `medicalServiceId`가 존재하지 않습니다.
                                    summary: 진료항목을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: medicalServiceId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/create-product:
        post:
            tags:
                - Product
            operationId: createProduct
            summary: 상품 생성
            description: 상품을 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenCreateProductCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenCreateProductCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/CreateProductCategoryNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/CreateProductCategoryNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`categoryIds`에 존재하지 않는 카테고리 ID가 포함된 경우입니다.'
                                    summary: 카테고리를 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: categoryIds
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/delete-product:
        post:
            tags:
                - Product
            operationId: deleteProduct
            summary: 상품 삭제
            description: 상품을 삭제합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenDeleteProductCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/DeleteProductProductNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/DeleteProductProductNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/remove-product-option:
        post:
            tags:
                - Product
            operationId: removeProductOption
            summary: 상품 옵션 삭제
            description: 상품 옵션을 삭제합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenRemoveProductOptionCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/RemoveProductOptionProductNotFoundError'
                                    - $ref: '#/components/schemas/RemoveProductOptionProductOptionNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/RemoveProductOptionProductNotFoundError'
                                                - $ref: '#/components/schemas/RemoveProductOptionProductOptionNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`id`에 해당하는 상품 옵션이 존재하지 않습니다.'
                                    summary: 상품 옵션을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: id
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/update-product-information:
        post:
            tags:
                - Product
            operationId: updateProductInformation
            summary: 상품 정보 수정
            description: 상품 정보를 수정합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenUpdateProductInformationCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/UpdateProductInformationProductNotFoundError'
                                    - $ref: '#/components/schemas/UpdateProductInformationCategoryNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/UpdateProductInformationProductNotFoundError'
                                                - $ref: '#/components/schemas/UpdateProductInformationCategoryNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`id`에 해당하는 상품이 존재하지 않습니다.'
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: id
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`categoryIds`에 존재하지 않는 카테고리 ID가 포함된 경우입니다.'
                                    summary: 카테고리를 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: categoryIds
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /procedure-menu/open/v1/products/commands/update-product-option:
        post:
            tags:
                - Product
            operationId: updateProductOption
            summary: 상품 옵션 수정
            description: 상품 옵션을 수정합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/UpdateProductOptionProductNotFoundError'
                                    - $ref: '#/components/schemas/UpdateProductOptionProductOptionNotFoundError'
                                    - $ref: '#/components/schemas/UpdateProductOptionMedicalServiceNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/UpdateProductOptionProductNotFoundError'
                                                - $ref: '#/components/schemas/UpdateProductOptionProductOptionNotFoundError'
                                                - $ref: '#/components/schemas/UpdateProductOptionMedicalServiceNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
                                    summary: 상품을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: productId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`id`에 해당하는 상품 옵션이 존재하지 않습니다.'
                                    summary: 상품 옵션을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: id
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: 옵션 구성에 포함된 `medicalServiceId`가 존재하지 않습니다.
                                    summary: 진료항목을 찾을 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: medicalServiceId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
    /purchase/open/prepaid-card/v1/queries/get-prepaid-card-charging-events:
        post:
            tags:
                - PrepaidCard
            operationId: getPrepaidCardChargingEvents
            summary: 선불카드 이벤트 조회
            description: |-
                선불카드의 충전, 사용, 사용 취소, 환불, 만료, 차감 이벤트를 조회합니다.

                ID에 해당하는 선불카드가 없으면, 빈 목록이 반환됩니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.purchase.GetPrepaidCardChargingEventsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.purchase.GetPrepaidCardChargingEventsQueryResponse'
    /purchase/open/prepaid-card/v1/queries/get-prepaid-card-summaries:
        post:
            tags:
                - PrepaidCard
            operationId: getPrepaidCardSummaries
            summary: 선불카드 목록 조회
            description: 내원객의 선불카드 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.purchase.GetPrepaidCardSummariesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.purchase.GetPrepaidCardSummariesQueryResponse'
    /purchase/open/prepaid-card/v1/queries/get-visitor-prepaid-card-balance:
        post:
            tags:
                - PrepaidCard
            operationId: getVisitorPrepaidCardBalance
            summary: 내원객 선불카드 합산 잔액 조회
            description: 내원객이 보유한 사용 가능한 선불카드의 현금 잔액과 포인트 잔액을 합산해 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.purchase.GetVisitorPrepaidCardBalanceQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.purchase.GetVisitorPrepaidCardBalanceQueryResponse'
    /purchase/open/v1/queries/get-purchase-summaries:
        post:
            tags:
                - Purchase
            operationId: getPurchaseSummaries
            summary: 수납 목록 조회
            description: 수납 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetPurchaseSummariesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetPurchaseSummariesQueryResponse'
    /purchase/open/v1/queries/get-purchase-summaries-by-visitor-id:
        post:
            tags:
                - Purchase
            operationId: getPurchaseSummariesByVisitor
            summary: 내원객 수납 목록 조회
            description: 내원객의 수납 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.purchase.GetPurchaseSummariesQueryByVisitorId'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.purchase.GetPurchaseSummariesQueryByVisitorIdResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetPurchaseSummariesByVisitorVisitorIdNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetPurchaseSummariesByVisitorVisitorIdNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 내원객 ID가 비어 있는 경우
                                    summary: 내원객 ID가 비어 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/commands/cancel-reservation:
        post:
            tags:
                - Schedule
            operationId: cancelReservation
            summary: 예약 취소
            description: |-
                기존 예약을 취소합니다.

                예약 상태와 병원 예약 취소 정책에 따라 취소가 제한될 수 있습니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.CancelReservationCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/CancelReservationScheduleNotFoundError'
                                    - $ref: '#/components/schemas/CancelReservationReservationStatusNotAvailableError'
                                    - $ref: '#/components/schemas/CancelReservationReservationNotAllowedByPolicyError'
                                    - $ref: '#/components/schemas/CancelReservationCancelReasonUnspecifiedError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/CancelReservationScheduleNotFoundError'
                                                - $ref: '#/components/schemas/CancelReservationReservationStatusNotAvailableError'
                                                - $ref: '#/components/schemas/CancelReservationReservationNotAllowedByPolicyError'
                                                - $ref: '#/components/schemas/CancelReservationCancelReasonUnspecifiedError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄이 삭제된 경우 취소할 수 없습니다.'
                                    summary: 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: 예약 상태가 `RESERVED`가 아니면 취소할 수 없습니다.
                                    summary: 예약 상태가 취소할 수 없는 상태인 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: status
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_3:
                                    description: 병원 예약 취소 정책에 따라 예약 취소가 허용되지 않거나 취소 가능 시간이 지난 경우 발생합니다.
                                    summary: 예약 취소 정책으로 취소할 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: cancellationPolicy
                                              reason: NotAvailable
                                        message: ReservationNotAllowedByPolicy
                                        status: 400
                                error_4:
                                    description: '`CANCEL_RESERVATION_REASON_UNSPECIFIED`는 일반적인 예약 취소 요청에서 사용하지 않는 기본값입니다.'
                                    summary: 예약 취소 사유가 기본값인 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties: []
                                        message: ""
                                        status: 400
    /schedule/open/v1/commands/change-flow-step:
        post:
            tags:
                - Schedule
            operationId: changeFlowStep
            summary: 내원흐름단계 변경
            description: 스케줄의 내원흐름단계를 변경합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenChangeFlowStepCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ChangeFlowStepScheduleNotFoundError'
                                    - $ref: '#/components/schemas/ChangeFlowStepCounselorNotFoundError'
                                    - $ref: '#/components/schemas/ChangeFlowStepProceduresNotFoundError'
                                    - $ref: '#/components/schemas/ChangeFlowStepProceduresNotCompletedError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ChangeFlowStepScheduleNotFoundError'
                                                - $ref: '#/components/schemas/ChangeFlowStepCounselorNotFoundError'
                                                - $ref: '#/components/schemas/ChangeFlowStepProceduresNotFoundError'
                                                - $ref: '#/components/schemas/ChangeFlowStepProceduresNotCompletedError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
                                    summary: 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: '`step`을 `CONSULTATION`으로 변경할 때 상담 담당자가 지정되어 있지 않습니다.'
                                    summary: 상담 진행 단계로 변경 시 상담 담당자가 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: counselor
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_3:
                                    description: '`step`을 `PROCEDURE_WAITING` 또는 `PROCEDURE`로 변경할 때 시술 목록이 없습니다.'
                                    summary: 시술 대기·진행 단계로 변경 시 시술 목록이 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: procedures
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_4:
                                    description: '`step`을 `COMPLETED`로 변경할 때 완료되지 않은 시술이 남아 있습니다.'
                                    summary: 귀가 단계로 변경 시 완료되지 않은 시술이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: procedures
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/commands/create-occupied-time:
        post:
            tags:
                - Schedule
            operationId: createOccupiedTime
            summary: 시간 점유 생성
            description: 시간 점유를 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenCreateOccupiedTimeCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenCreateOccupiedTimeCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/CreateOccupiedTimeStartDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/CreateOccupiedTimeEndDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/CreateOccupiedTimeInvalidTimeRangeError'
                                    - $ref: '#/components/schemas/CreateOccupiedTimeZoneNotFoundError'
                                    - $ref: '#/components/schemas/CreateOccupiedTimeReservationGroupNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/CreateOccupiedTimeStartDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/CreateOccupiedTimeEndDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/CreateOccupiedTimeInvalidTimeRangeError'
                                                - $ref: '#/components/schemas/CreateOccupiedTimeZoneNotFoundError'
                                                - $ref: '#/components/schemas/CreateOccupiedTimeReservationGroupNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 점유 시작 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: startDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 점유 종료 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이후여야 하며, 두 일시는 같은 날짜 안에서 24시간 미만이어야 합니다.'
                                    summary: 점유 시간 범위가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: InvalidTimeRange
                                        message: InvalidCommandException
                                        status: 400
                                error_4:
                                    description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
                                    summary: 구역을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_5:
                                    description: '`reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
                                    summary: 예약 그룹을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationGroupId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/commands/reschedule-by-time-slot:
        post:
            tags:
                - Schedule
            operationId: rescheduleByTimeSlot
            summary: 예약 시간 슬롯 기반 예약 일시 변경
            description: 예약 시간 슬롯을 기준으로 기존 스케줄의 예약 일시를 변경합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.RescheduleByTimeSlotCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/RescheduleByTimeSlotScheduleNotFoundError'
                                    - $ref: '#/components/schemas/RescheduleByTimeSlotReservationNotAllowedByPolicyError'
                                    - $ref: '#/components/schemas/RescheduleByTimeSlotReservationTimeNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/RescheduleByTimeSlotScheduleNotFoundError'
                                                - $ref: '#/components/schemas/RescheduleByTimeSlotReservationNotAllowedByPolicyError'
                                                - $ref: '#/components/schemas/RescheduleByTimeSlotReservationTimeNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄이 없습니다.'
                                    summary: '`scheduleId`에 해당하는 스케줄이 존재하지 않는 경우'
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: 예약 변경 마감 시간 초과 등 예약 변경 정책에 의해 일시 변경이 허용되지 않습니다.
                                    summary: 예약 변경 정책에 의해 변경이 허용되지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: modificationPolicy
                                              reason: NotAvailable
                                        message: ReservationNotAllowedByPolicy
                                        status: 400
                                error_3:
                                    description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
                                    summary: 해당 시간이 예약 불가능한 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationDateTimeRange
                                              reason: NotAvailable
                                        message: ReservationTimeNotAvailable
                                        status: 400
    /schedule/open/v1/commands/reserve:
        post:
            tags:
                - Schedule
            operationId: reserveCommand
            summary: 새로운 예약 생성
            description: |-
                신규 예약을 생성합니다.

                내원객 정보로 기존 내원객을 검색합니다. 일치하는 내원객이 있으면 해당 내원객으로 예약을 생성하고, 일치하는 내원객이 없으면 새 내원객을 생성한 뒤 예약을 생성합니다.

                이 API는 deprecated입니다. 신규 개발 시 [V2 예약 생성](/docs/openapi/reserve-v-2)을 사용하세요.
            deprecated: true
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.ReserveCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.ReserveCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveCommandVisitorNameNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveCommandVisitorPhoneNumberNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveCommandVisitorPhoneCountryCodeNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveCommandVisitorPhoneNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveCommandVisitorNotFoundError'
                                    - $ref: '#/components/schemas/ReserveCommandOverlappingReservationError'
                                    - $ref: '#/components/schemas/ReserveCommandReservationCapacityExceededError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveCommandVisitorNameNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveCommandVisitorPhoneNumberNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveCommandVisitorPhoneCountryCodeNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveCommandVisitorPhoneNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveCommandVisitorNotFoundError'
                                                - $ref: '#/components/schemas/ReserveCommandOverlappingReservationError'
                                                - $ref: '#/components/schemas/ReserveCommandReservationCapacityExceededError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorName`은 앞뒤에 공백을 포함할 수 없습니다.'
                                    summary: 내원객 이름이 앞뒤에 공백을 포함하는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: visitorName
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: 내원객 중복 조회 또는 생성 단계에서 `visitorPhone.phoneNumber`가 유효하지 않으면 발생합니다.
                                    summary: 내원객 전화번호가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phoneNumber
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: 내원객 생성 단계에서 `visitorPhone.countryCode`가 유효하지 않으면 발생합니다.
                                    summary: 내원객 전화번호 국가 코드가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: countryCode
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_4:
                                    description: 내원객 생성 단계에서 `visitorPhone`을 유효한 전화번호로 해석할 수 없으면 발생합니다.
                                    summary: 내원객 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phone
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_5:
                                    description: 내원객 조회 또는 생성 후 재조회 단계에서 예약에 사용할 내원객을 찾을 수 없습니다.
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_6:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_7:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
    /schedule/open/v1/commands/reserve-by-time-slot:
        post:
            tags:
                - Schedule
            operationId: reserveByTimeSlot
            summary: 예약 시간 슬롯 기반 새로운 예약 생성
            description: |-
                예약 시간 슬롯을 기준으로 새 예약을 생성합니다.

                내원객 정보를 기준으로 기존 내원객을 검색하고, 일치하는 내원객이 없으면 새 내원객을 생성한 뒤 예약을 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.ReserveByTimeSlotCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.ReserveByTimeSlotCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveByTimeSlotInvalidVisitorNameError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotReservationRuleNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotReservationRuleNotActivatedError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotReservationTimeNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotDuplicatedReservationError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveByTimeSlotInvalidVisitorNameError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotReservationRuleNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotReservationRuleNotActivatedError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotReservationTimeNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotDuplicatedReservationError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorName`은 공백만으로 구성될 수 없으며, 앞뒤 공백이 허용되지 않습니다.'
                                    summary: '`visitorName`이 빈 문자열이거나 앞뒤에 공백이 있는 경우'
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: visitorName
                                              reason: NotAvailable
                                        message: InvalidVisitorName
                                        status: 400
                                error_2:
                                    description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
                                    summary: 예약 규칙이 존재하지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotFound
                                        message: ReservationRuleNotFound
                                        status: 400
                                error_3:
                                    description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
                                    summary: 예약 규칙이 활성화되지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotAvailable
                                        message: ReservationRuleNotActivated
                                        status: 400
                                error_4:
                                    description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
                                    summary: 해당 시간이 예약 불가능한 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationDateTimeRange
                                              reason: NotAvailable
                                        message: ReservationTimeNotAvailable
                                        status: 400
                                error_5:
                                    description: '`reservationDateTimeRange`와 시간이 겹치는 예약이 해당 내원객에게 이미 존재합니다.'
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 이미 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationDateTimeRange
                                              reason: Duplicated
                                        message: DuplicatedReservation
                                        status: 400
    /schedule/open/v1/commands/reserve-by-time-slot-with-visitor-id:
        post:
            tags:
                - Schedule
            operationId: reserveByTimeSlotWithVisitorId
            summary: 예약 시간 슬롯 기반 새로운 예약 생성 (내원객 ID 기반)
            description: 기존 내원객 ID와 예약 시간 슬롯을 기준으로 새 예약을 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.ReserveByTimeSlotWithVisitorIdCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.ReserveByTimeSlotWithVisitorIdCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdVisitorNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationRuleNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationRuleNotActivatedError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationTimeNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdDuplicatedReservationError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdVisitorNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationRuleNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationRuleNotActivatedError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdReservationTimeNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveByTimeSlotWithVisitorIdDuplicatedReservationError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorId`에 해당하는 내원객이 없습니다.'
                                    summary: '`visitorId`에 해당하는 내원객이 존재하지 않는 경우'
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: VisitorNotFound
                                        status: 400
                                error_2:
                                    description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
                                    summary: 예약 규칙이 존재하지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotFound
                                        message: ReservationRuleNotFound
                                        status: 400
                                error_3:
                                    description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
                                    summary: 예약 규칙이 활성화되지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotAvailable
                                        message: ReservationRuleNotActivated
                                        status: 400
                                error_4:
                                    description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
                                    summary: 해당 시간이 예약 불가능한 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationDateTimeRange
                                              reason: NotAvailable
                                        message: ReservationTimeNotAvailable
                                        status: 400
                                error_5:
                                    description: '`reservationDateTimeRange`와 시간이 겹치는 예약이 해당 내원객에게 이미 존재합니다.'
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 이미 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationDateTimeRange
                                              reason: Duplicated
                                        message: DuplicatedReservation
                                        status: 400
    /schedule/open/v1/commands/reserve-by-visitor-id:
        post:
            tags:
                - Schedule
            operationId: reserveByVisitorId
            summary: 기존 내원객 예약 생성
            description: |-
                기존 내원객 ID로 예약을 생성합니다.

                이 API는 deprecated입니다. 신규 개발 시 [V2 API](/docs/openapi/reserve-by-visitor-id-v-2)를 사용하세요.
            deprecated: true
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.ReserveByVisitorIdCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.ReserveCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveByVisitorIdOverlappingReservationError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdVisitorNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdReservationCapacityExceededError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveByVisitorIdOverlappingReservationError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdVisitorNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdReservationCapacityExceededError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_3:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
    /schedule/open/v1/commands/update-reservation:
        post:
            tags:
                - Schedule
            operationId: updateReservation
            summary: 예약 정보 수정
            description: |-
                기존 스케줄의 예약 정보를 수정합니다.

                이 API는 deprecated입니다. 신규 개발 시 [V2 예약 일정 수정](/docs/openapi/update-reservation-v-2)을 사용하세요.

                스케줄에 연결된 예약 일정이 두 개 이상이면 V1 API로 수정할 수 없습니다.
            deprecated: true
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.UpdateReservationCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/UpdateReservationScheduleNotFoundError'
                                    - $ref: '#/components/schemas/UpdateReservationScheduleIdEmptyError'
                                    - $ref: '#/components/schemas/UpdateReservationReservationGroupNotFoundError'
                                    - $ref: '#/components/schemas/UpdateReservationReservationGroupIdEmptyError'
                                    - $ref: '#/components/schemas/UpdateReservationZoneNotFoundError'
                                    - $ref: '#/components/schemas/UpdateReservationStartDateTimeEmptyError'
                                    - $ref: '#/components/schemas/UpdateReservationEndDateTimeEmptyError'
                                    - $ref: '#/components/schemas/UpdateReservationZoneIdEmptyError'
                                    - $ref: '#/components/schemas/UpdateReservationMultipleOccupiedResourcesError'
                                    - $ref: '#/components/schemas/UpdateReservationModificationNotAllowedByPolicyError'
                                    - $ref: '#/components/schemas/UpdateReservationReservationCapacityExceededError'
                                    - $ref: '#/components/schemas/UpdateReservationOverlappingReservationError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/UpdateReservationScheduleNotFoundError'
                                                - $ref: '#/components/schemas/UpdateReservationScheduleIdEmptyError'
                                                - $ref: '#/components/schemas/UpdateReservationReservationGroupNotFoundError'
                                                - $ref: '#/components/schemas/UpdateReservationReservationGroupIdEmptyError'
                                                - $ref: '#/components/schemas/UpdateReservationZoneNotFoundError'
                                                - $ref: '#/components/schemas/UpdateReservationStartDateTimeEmptyError'
                                                - $ref: '#/components/schemas/UpdateReservationEndDateTimeEmptyError'
                                                - $ref: '#/components/schemas/UpdateReservationZoneIdEmptyError'
                                                - $ref: '#/components/schemas/UpdateReservationMultipleOccupiedResourcesError'
                                                - $ref: '#/components/schemas/UpdateReservationModificationNotAllowedByPolicyError'
                                                - $ref: '#/components/schemas/UpdateReservationReservationCapacityExceededError'
                                                - $ref: '#/components/schemas/UpdateReservationOverlappingReservationError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
                                    summary: 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_10:
                                    description: 예약 변경 정책 또는 변경 마감 시간 조건으로 인해 예약을 변경할 수 없습니다.
                                    summary: 예약 변경 정책으로 변경할 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: modificationPolicy
                                              reason: NotAvailable
                                        message: ReservationNotAllowedByPolicy
                                        status: 400
                                error_11:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
                                error_12:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: 스케줄 ID가 비어 있는 경우
                                    summary: 스케줄 ID가 비어 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: streamId
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_3:
                                    description: '`reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
                                    summary: 예약 그룹을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: id
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_4:
                                    description: 예약 그룹 ID가 비어 있는 경우
                                    summary: 예약 그룹 ID가 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: groupId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_5:
                                    description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
                                    summary: 예약 구역을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_6:
                                    description: 예약 시작 일시가 비어 있는 경우
                                    summary: 예약 시작 일시가 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_7:
                                    description: 예약 종료 일시가 비어 있는 경우
                                    summary: 예약 종료 일시가 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTime
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_8:
                                    description: 예약 구역 ID가 비어 있는 경우
                                    summary: 예약 구역 ID가 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: InvalidCommandException
                                        status: 400
                                error_9:
                                    description: 스케줄에 여러 예약 일정이 있으면 V1 API로 예약 일정을 수정할 수 없습니다.
                                    summary: 여러 예약 일정이 있는 스케줄을 V1에서 수정하려는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources
                                              reason: NotAvailable
                                        message: MultipleOccupiedResources
                                        status: 400
    /schedule/open/v1/commands/update-schedule-consultation-info:
        post:
            tags:
                - Schedule
            operationId: updateScheduleConsultationInfo
            summary: 스케줄 상담 정보 수정
            description: 스케줄의 상담 정보를 수정합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenUpdateScheduleConsultationInfoCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/UpdateScheduleConsultationInfoScheduleNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/UpdateScheduleConsultationInfoScheduleNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
                                    summary: 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/linked-products/queries/get-linked-products:
        post:
            tags:
                - Schedule
            operationId: getLinkedProducts
            summary: 예약 그룹 연결 상품 조회
            description: 예약 그룹에 연결된 상품 및 옵션 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetLinkedProductsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetLinkedProductsQueryResponse'
    /schedule/open/v1/queries/find-schedule-by-purchase-id:
        post:
            tags:
                - Schedule
            operationId: findScheduleByPurchaseId
            summary: 수납 ID로 스케줄 조회
            description: 수납에 연결된 스케줄 상세 정보를 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.FindScheduleByPurchaseIdQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.FindScheduleByPurchaseIdQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/FindScheduleByPurchaseIdPurchaseIdNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/FindScheduleByPurchaseIdPurchaseIdNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 수납 ID에 해당하는 스케줄을 찾을 수 없는 경우
                                    summary: 수납 ID에 해당하는 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: purchaseId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/queries/get-reschedulable-time-slots:
        post:
            tags:
                - Schedule
            operationId: getReschedulableTimeSlots
            summary: 스케줄 ID로 예약 일정 변경 가능한 예약 시간 슬롯 조회
            description: 기존 스케줄의 예약 일시를 변경할 수 있는 시간 슬롯을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReschedulableTimeSlotsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReschedulableTimeSlotsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReschedulableTimeSlotsScheduleNotFoundError'
                                    - $ref: '#/components/schemas/GetReschedulableTimeSlotsReservationNotAllowedByPolicyError'
                                    - $ref: '#/components/schemas/GetReschedulableTimeSlotsInvalidDateTimeRangeError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReschedulableTimeSlotsScheduleNotFoundError'
                                                - $ref: '#/components/schemas/GetReschedulableTimeSlotsReservationNotAllowedByPolicyError'
                                                - $ref: '#/components/schemas/GetReschedulableTimeSlotsInvalidDateTimeRangeError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄이 없습니다.'
                                    summary: '`scheduleId`에 해당하는 스케줄이 존재하지 않는 경우'
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: ScheduleNotFound
                                        status: 400
                                error_2:
                                    description: 예약 변경 마감 시간 초과 등 예약 변경 정책에 의해 일시 변경이 허용되지 않습니다.
                                    summary: 예약 변경 정책에 의해 변경이 허용되지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: modificationPolicy
                                              reason: NotAvailable
                                        message: ReservationNotAllowedByPolicy
                                        status: 400
                                error_3:
                                    description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
                                    summary: '`dateTimeRange`의 형식이 올바르지 않은 경우'
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: dateTimeRange
                                              reason: NotAvailable
                                        message: InvalidDateTimeRange
                                        status: 400
    /schedule/open/v1/queries/get-reservation-groups:
        post:
            tags:
                - Schedule
            operationId: getReservationGroups
            summary: 예약 그룹 목록 조회
            description: 예약 그룹 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.Empty'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationGroupsQueryResponse'
    /schedule/open/v1/queries/get-reservation-rule-summaries:
        post:
            tags:
                - Schedule
            operationId: getReservationRuleSummaries
            summary: 예약 규칙 목록 조회
            description: 예약 규칙 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationRuleSummariesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationRuleSummariesQueryResponse'
    /schedule/open/v1/queries/get-reservation-slots-by-group:
        post:
            tags:
                - Schedule
            operationId: getReservationSlotsByGroup
            summary: 예약 그룹으로 예약 슬롯 조회
            description: 예약 그룹을 기준으로 예약 가능한 슬롯을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationSlotsByGroupQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationSlotsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationSlotsByGroupTimezoneNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationSlotsByGroupTimezoneNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`timezone`이 올바른 IANA time zone database 이름이 아닙니다.'
                                    summary: 시간대가 올바르지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: timezone
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v1/queries/get-reservation-slots-by-product:
        post:
            tags:
                - Schedule
            operationId: getReservationSlotsByProduct
            summary: 상품 옵션으로 예약 슬롯 조회
            description: |-
                상품 옵션 ID를 기준으로 예약 가능한 슬롯을 조회합니다.

                상품 옵션에 연결된 예약 그룹이 없으면 기본 예약 그룹을 기준으로 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationSlotsByProductQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationSlotsQueryResponse'
    /schedule/open/v1/queries/get-reservation-slots-by-schedule-id:
        post:
            tags:
                - Schedule
            operationId: getReservationSlotsByScheduleId
            summary: 스케줄 ID로 예약 슬롯 조회
            description: |-
                스케줄 ID를 기준으로 예약 슬롯을 조회합니다.

                기존 예약 시간을 변경하기 전에 사용할 수 있는 예약 슬롯을 확인할 때 사용합니다. 신규 개발에는 `getReservationSlotsByScheduleIdV2`를 사용합니다.
            deprecated: true
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationSlotsByScheduleIdQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationSlotsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdStartDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdEndDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdScheduleIdNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdStartDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdEndDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdScheduleIdNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 시작 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: startDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 종료 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`scheduleId`가 빈 문자열이면 이 오류가 발생합니다.'
                                    summary: 스케줄 ID가 빈 문자열인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /schedule/open/v1/queries/get-reservation-time-slots:
        post:
            tags:
                - Schedule
            operationId: getReservationTimeSlots
            summary: 예약 규칙으로 예약 시간 슬롯 조회
            description: 예약 규칙과 조회 조건에 맞는 예약 시간 슬롯을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationTimeSlotsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationTimeSlotsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsReservationRuleNotFoundError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsReservationRuleNotActivatedError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsInvalidDateTimeRangeError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsOccupancyPlanNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsReservationRuleNotFoundError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsReservationRuleNotActivatedError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsInvalidDateTimeRangeError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsOccupancyPlanNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
                                    summary: 예약 규칙이 존재하지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotFound
                                        message: ReservationRuleNotFound
                                        status: 400
                                error_2:
                                    description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
                                    summary: 예약 규칙이 활성화되지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotAvailable
                                        message: ReservationRuleNotActivated
                                        status: 400
                                error_3:
                                    description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
                                    summary: '`dateTimeRange`의 형식이 올바르지 않은 경우'
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: dateTimeRange
                                              reason: NotAvailable
                                        message: InvalidDateTimeRange
                                        status: 400
                                error_4:
                                    description: 예약 규칙에 따른 점유 계획을 생성할 수 없습니다.
                                    summary: 예약 규칙에 따른 점유 계획이 성립되지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupancyPlan
                                              reason: NotFound
                                        message: OccupancyPlanNotFound
                                        status: 400
    /schedule/open/v1/queries/get-reservation-time-slots-by-visitor-id:
        post:
            tags:
                - Schedule
            operationId: getReservationTimeSlotsByVisitorId
            summary: 내원객 ID로 예약 규칙 기반 예약 시간 슬롯 조회
            description: 내원객 ID를 기준으로 내원객 속성을 반영해 예약 시간 슬롯을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationTimeSlotsByVisitorIdQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationTimeSlotsByVisitorIdQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdVisitorNotFoundError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdReservationRuleNotFoundError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdReservationRuleNotActivatedError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdInvalidDateTimeRangeError'
                                    - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdOccupancyPlanNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdVisitorNotFoundError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdReservationRuleNotFoundError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdReservationRuleNotActivatedError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdInvalidDateTimeRangeError'
                                                - $ref: '#/components/schemas/GetReservationTimeSlotsByVisitorIdOccupancyPlanNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorId`에 해당하는 내원객이 없습니다.'
                                    summary: '`visitorId`에 해당하는 내원객이 존재하지 않는 경우'
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
                                    summary: 예약 규칙이 존재하지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotFound
                                        message: ReservationRuleNotFound
                                        status: 400
                                error_3:
                                    description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
                                    summary: 예약 규칙이 활성화되지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: reservationRuleId
                                              reason: NotAvailable
                                        message: ReservationRuleNotActivated
                                        status: 400
                                error_4:
                                    description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
                                    summary: '`dateTimeRange`의 형식이 올바르지 않은 경우'
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: dateTimeRange
                                              reason: NotAvailable
                                        message: InvalidDateTimeRange
                                        status: 400
                                error_5:
                                    description: 예약 규칙에 따른 점유 계획을 생성할 수 없습니다.
                                    summary: 예약 규칙에 따른 점유 계획이 성립되지 않는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupancyPlan
                                              reason: NotFound
                                        message: OccupancyPlanNotFound
                                        status: 400
    /schedule/open/v1/queries/get-schedule-detail:
        post:
            tags:
                - Schedule
            operationId: getScheduleDetail
            summary: 스케줄 상세 조회
            description: 스케줄 상세 정보를 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.schedule.GetScheduleDetailQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.schedule.schedule.GetScheduleDetailQueryResponse'
    /schedule/open/v1/queries/get-schedules-by-flow-step:
        post:
            tags:
                - Schedule
            operationId: getSchedulesByFlowStep
            summary: 내원 단계와 예약 시작 일시 범위로 스케줄 조회
            description: 내원 단계와 예약 시작 일시 범위로 스케줄 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetSchedulesByFlowStepQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetSchedulesByFlowStepQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetSchedulesByFlowStepFlowStepNotAvailableError'
                                    - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeUtcFromNotAvailableError'
                                    - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeUtcToNotAvailableError'
                                    - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeRangeInvalidError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetSchedulesByFlowStepFlowStepNotAvailableError'
                                                - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeUtcFromNotAvailableError'
                                                - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeUtcToNotAvailableError'
                                                - $ref: '#/components/schemas/GetSchedulesByFlowStepReservationStartDateTimeRangeInvalidError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 내원 단계가 올바르지 않은 경우
                                    summary: 내원 단계가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: flowSteps
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`reservationStartDateTimeUtcFrom`이 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 시작 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: startDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`reservationStartDateTimeUtcTo`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 종료 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_4:
                                    description: '`reservationStartDateTimeUtcTo`가 `reservationStartDateTimeUtcFrom`보다 이전입니다.'
                                    summary: 조회 범위 종료 일시가 시작 일시보다 이전인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: InvalidTimeRange
                                        message: InvalidCommandException
                                        status: 400
    /schedule/open/v1/queries/get-schedules-by-visitor:
        post:
            tags:
                - Schedule
            operationId: getSchedulesByVisitor
            summary: 내원객의 스케줄 목록 조회
            description: 내원객의 스케줄 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.schedule.GetSchedulesByVisitorQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.schedule.schedule.GetSchedulesByVisitorQueryResponse'
    /schedule/open/v1/queries/get-schedules-summarized-by-tasks:
        post:
            tags:
                - Schedule
            operationId: getSchedulesSummarizedByTask
            summary: 내원객 시술 내역 조회
            description: 내원객이 병원에서 받은 시술 내역을 스케줄별로 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.schedule.GetSchedulesSummarizedByTaskQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.schedule.schedule.GetSchedulesSummarizedByTaskQueryResponse'
    /schedule/open/v2/commands/reserve:
        post:
            tags:
                - Schedule
            operationId: reserveV2
            summary: 새로운 예약 생성
            description: |-
                여러 예약 일정으로 새로운 예약을 생성합니다.

                내원객 정보로 기존 내원객을 검색합니다. 일치하는 내원객이 있으면 해당 내원객으로 예약을 생성하고, 없으면 새 내원객을 생성한 뒤 예약을 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenReserveCommandV2'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenReserveCommandV2Response'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveV2VisitorNameNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveV2VisitorPhoneNumberNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveV2VisitorPhoneCountryCodeNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveV2VisitorPhoneNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveV2VisitorNotFoundError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourcesRequiredError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourcesDifferentDateError'
                                    - $ref: '#/components/schemas/ReserveV2ZoneNotFoundError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourceZoneNotInGroupError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourceReservationGroupIdNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourceReservationGroupNotFoundError'
                                    - $ref: '#/components/schemas/ReserveV2OccupiedResourceConfigurationRequiredError'
                                    - $ref: '#/components/schemas/ReserveV2OverlappingReservationError'
                                    - $ref: '#/components/schemas/ReserveV2ReservationCapacityExceededError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveV2VisitorNameNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveV2VisitorPhoneNumberNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveV2VisitorPhoneCountryCodeNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveV2VisitorPhoneNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveV2VisitorNotFoundError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourcesRequiredError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourcesDifferentDateError'
                                                - $ref: '#/components/schemas/ReserveV2ZoneNotFoundError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourceZoneNotInGroupError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourceReservationGroupIdNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourceReservationGroupNotFoundError'
                                                - $ref: '#/components/schemas/ReserveV2OccupiedResourceConfigurationRequiredError'
                                                - $ref: '#/components/schemas/ReserveV2OverlappingReservationError'
                                                - $ref: '#/components/schemas/ReserveV2ReservationCapacityExceededError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorName`은 앞뒤에 공백을 포함할 수 없습니다.'
                                    summary: 내원객 이름 앞뒤에 공백이 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: visitorName
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_10:
                                    description: '`occupiedResources[].reservationGroup.reservationGroupId`가 올바른 object-id 형식이 아닙니다.'
                                    summary: 예약 일정의 예약 그룹 ID 형식이 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[].reservationGroup.reservationGroupId
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_11:
                                    description: '`occupiedResources[].reservationGroup.reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
                                    summary: 예약 일정의 예약 그룹을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[].reservationGroup.reservationGroupId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_12:
                                    description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
                                    summary: 예약 일정 설정이 누락된 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[0].configuration
                                              reason: Required
                                        message: MissingOccupiedResourceConfiguration
                                        status: 400
                                error_13:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_14:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
                                error_2:
                                    description: 내원객 중복 조회 또는 생성 단계에서 `visitorPhone.phoneNumber`가 유효하지 않으면 발생합니다.
                                    summary: 내원객 전화번호가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phoneNumber
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: 내원객 생성 단계에서 `visitorPhone.countryCode`가 유효하지 않으면 발생합니다.
                                    summary: 내원객 전화번호 국가 코드가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: countryCode
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_4:
                                    description: 내원객 생성 단계에서 `visitorPhone`을 유효한 전화번호로 해석할 수 없으면 발생합니다.
                                    summary: 내원객 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phone
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_5:
                                    description: 내원객 조회 또는 생성 후 재조회 단계에서 예약에 사용할 내원객을 찾을 수 없습니다.
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_6:
                                    description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
                                    summary: 예약 일정이 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources
                                              reason: Required
                                        message: InvalidCommandException
                                        status: 400
                                error_7:
                                    description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
                                    summary: 예약 일정의 날짜가 서로 다른 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[1].reservationTime.startDateTimeUtc
                                              reason: NotAvailable
                                        message: DifferentDateInOccupiedResources
                                        status: 400
                                error_8:
                                    description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
                                    summary: zoneId에 해당하는 구역이 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: NotFoundZone
                                        status: 400
                                error_9:
                                    description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
                                    summary: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].zoneId
                                              reason: NotFound
                                        message: ZoneNotInReservationGroup
                                        status: 400
    /schedule/open/v2/commands/reserve-by-visitor-id:
        post:
            tags:
                - Schedule
            operationId: reserveByVisitorIdV2
            summary: 기존 내원객 예약 생성
            description: 기존 내원객 ID로 여러 예약 일정을 포함한 예약을 생성합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenReserveByVisitorIdCommandV2'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenReserveCommandV2Response'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2VisitorNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourcesRequiredError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourcesDifferentDateError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2ZoneNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceZoneNotInGroupError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceReservationGroupIdNotAvailableError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceReservationGroupNotFoundError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceConfigurationRequiredError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2OverlappingReservationError'
                                    - $ref: '#/components/schemas/ReserveByVisitorIdV2ReservationCapacityExceededError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2VisitorNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourcesRequiredError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourcesDifferentDateError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2ZoneNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceZoneNotInGroupError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceReservationGroupIdNotAvailableError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceReservationGroupNotFoundError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OccupiedResourceConfigurationRequiredError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2OverlappingReservationError'
                                                - $ref: '#/components/schemas/ReserveByVisitorIdV2ReservationCapacityExceededError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_10:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
                                error_2:
                                    description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
                                    summary: 예약 일정이 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources
                                              reason: Required
                                        message: OccupiedResourcesEmpty
                                        status: 400
                                error_3:
                                    description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
                                    summary: 예약 일정의 날짜가 서로 다른 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[1].reservationTime.startDateTimeUtc
                                              reason: NotAvailable
                                        message: DifferentDateInOccupiedResources
                                        status: 400
                                error_4:
                                    description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
                                    summary: zoneId에 해당하는 구역이 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: NotFoundZone
                                        status: 400
                                error_5:
                                    description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
                                    summary: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].zoneId
                                              reason: NotFound
                                        message: ZoneNotInReservationGroup
                                        status: 400
                                error_6:
                                    description: '`occupiedResources[].reservationGroup.reservationGroupId`가 올바른 object-id 형식이 아닙니다.'
                                    summary: 예약 일정의 예약 그룹 ID 형식이 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[].reservationGroup.reservationGroupId
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_7:
                                    description: '`occupiedResources[].reservationGroup.reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
                                    summary: 예약 일정의 예약 그룹을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[].reservationGroup.reservationGroupId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_8:
                                    description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
                                    summary: 예약 일정 설정이 누락된 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[0].configuration
                                              reason: Required
                                        message: MissingOccupiedResourceConfiguration
                                        status: 400
                                error_9:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v2/commands/update-reservation:
        post:
            tags:
                - Schedule
            operationId: updateReservationV2
            summary: 예약 일정 수정
            description: |-
                기존 예약의 접수 구역과 예약 일정 목록을 변경합니다.

                예약 변경 정책을 검증한 뒤 변경합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenUpdateReservationCommandV2'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/UpdateReservationV2ScheduleNotFoundError'
                                    - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourcesRequiredError'
                                    - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourcesDifferentDateError'
                                    - $ref: '#/components/schemas/UpdateReservationV2ZoneNotFoundError'
                                    - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourceZoneNotInGroupError'
                                    - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourceConfigurationRequiredError'
                                    - $ref: '#/components/schemas/UpdateReservationV2ModificationNotAllowedByPolicyError'
                                    - $ref: '#/components/schemas/UpdateReservationV2ReservationCapacityExceededError'
                                    - $ref: '#/components/schemas/UpdateReservationV2OverlappingReservationError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/UpdateReservationV2ScheduleNotFoundError'
                                                - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourcesRequiredError'
                                                - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourcesDifferentDateError'
                                                - $ref: '#/components/schemas/UpdateReservationV2ZoneNotFoundError'
                                                - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourceZoneNotInGroupError'
                                                - $ref: '#/components/schemas/UpdateReservationV2OccupiedResourceConfigurationRequiredError'
                                                - $ref: '#/components/schemas/UpdateReservationV2ModificationNotAllowedByPolicyError'
                                                - $ref: '#/components/schemas/UpdateReservationV2ReservationCapacityExceededError'
                                                - $ref: '#/components/schemas/UpdateReservationV2OverlappingReservationError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
                                    summary: 스케줄을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: NotFoundSchedule
                                        status: 400
                                error_2:
                                    description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
                                    summary: 예약 일정이 비어 있는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources
                                              reason: Required
                                        message: OccupiedResourcesEmpty
                                        status: 400
                                error_3:
                                    description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
                                    summary: 예약 일정의 날짜가 서로 다른 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[1].reservationTime.startDateTimeUtc
                                              reason: NotAvailable
                                        message: DifferentDateInOccupiedResources
                                        status: 400
                                error_4:
                                    description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
                                    summary: zoneId에 해당하는 구역이 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: zoneId
                                              reason: NotFound
                                        message: NotFoundZone
                                        status: 400
                                error_5:
                                    description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
                                    summary: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].zoneId
                                              reason: NotFound
                                        message: ZoneNotInReservationGroup
                                        status: 400
                                error_6:
                                    description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
                                    summary: 예약 일정 설정이 누락된 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: occupiedResources[0].configuration
                                              reason: Required
                                        message: MissingOccupiedResourceConfiguration
                                        status: 400
                                error_7:
                                    description: 예약 변경 정책 또는 변경 마감 시간 조건으로 인해 예약을 변경할 수 없습니다.
                                    summary: 예약 변경 정책으로 변경할 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: modificationPolicy
                                              reason: NotAvailable
                                        message: ReservationNotAllowedByPolicy
                                        status: 400
                                error_8:
                                    description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
                                    summary: 슬롯 정원이 초과된 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: occupiedResources[0].reservationTime
                                              reason: NotAvailable
                                        message: ReservationCapacityExceeded
                                        status: 400
                                error_9:
                                    description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
                                    summary: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTime
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
    /schedule/open/v2/queries/get-reservation-slots-by-groups:
        post:
            tags:
                - Schedule
            operationId: getReservationSlotsByGroupsV2
            summary: 여러 예약 그룹의 예약 슬롯 조회
            description: 여러 예약 그룹의 예약 슬롯을 한 번에 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationSlotsByGroupsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationSlotsByGroupsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2ReservationGroupIdsRequiredError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2StartDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2EndDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2InvalidTimeRangeError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2ReservationGroupIdsRequiredError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2StartDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2EndDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByGroupsV2InvalidTimeRangeError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`reservationGroupIds`는 최소 한 개 이상 필요합니다.'
                                    summary: 예약 그룹 ID 목록이 비어 있는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: reservationGroupIds
                                              reason: Required
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 시작 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: startDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_3:
                                    description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 종료 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidRequestException
                                        status: 400
                                error_4:
                                    description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이전일 수 없습니다.'
                                    summary: 종료 일시가 시작 일시보다 이전인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: InvalidTimeRange
                                        message: InvalidCommandException
                                        status: 400
    /schedule/open/v2/queries/get-reservation-slots-by-schedule-id:
        post:
            tags:
                - Schedule
            operationId: getReservationSlotsByScheduleIdV2
            summary: 스케줄 기반 예약 슬롯 조회
            description: 특정 스케줄의 예약 일정별 가용 슬롯을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetReservationSlotsByScheduleIdQueryV2'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetReservationSlotsByScheduleIdQueryV2Response'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2ScheduleIdEmptyError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2StartDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2EndDateTimeNotAvailableError'
                                    - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2InvalidTimeRangeError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2ScheduleIdEmptyError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2StartDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2EndDateTimeNotAvailableError'
                                                - $ref: '#/components/schemas/GetReservationSlotsByScheduleIdV2InvalidTimeRangeError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`scheduleId`가 빈 문자열이면 이 오류가 발생합니다.'
                                    summary: 스케줄 ID가 빈 문자열인 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: scheduleId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 시작 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: startDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
                                    summary: 조회 범위 종료 일시가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_4:
                                    description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이전일 수 없습니다.'
                                    summary: 조회 범위 종료 일시가 시작 일시보다 이전인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: endDateTimeUtc
                                              reason: InvalidTimeRange
                                        message: InvalidCommandException
                                        status: 400
    /schedule/open/zone/v1/queries/get-zone:
        post:
            tags:
                - Schedule
            operationId: getZone
            summary: 구역 조회
            description: 특정 구역 정보를 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.schedule.zone.GetZoneQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.schedule.zone.GetZoneQueryResponse'
    /schedule/open/zone/v1/queries/get-zones:
        post:
            tags:
                - Schedule
            operationId: getZones
            summary: 구역 전체 조회
            description: 병원에 등록된 구역 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.Empty'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.schedule.zone.GetZonesResponse'
    /statistics/open/v1/queries/get-prepaid-card-charging-event-statistics:
        post:
            tags:
                - Statistics
            operationId: getPrepaidCardChargingEventStatistics
            summary: 선불카드 내역 통계 조회
            description: 선불카드 내역 통계 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetPrepaidCardChargingEventStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetPrepaidCardChargingEventStatisticsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsLimitTooSmallError'
                                    - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsCursorWithoutLimitError'
                                    - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsCursorNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsLimitTooSmallError'
                                                - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsCursorWithoutLimitError'
                                                - $ref: '#/components/schemas/GetPrepaidCardChargingEventStatisticsCursorNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`limit`은 1 이상이어야 합니다.'
                                    summary: limit이 0 이하인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: limit
                                              reason: TooSmall
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`cursor`는 `limit`과 함께 사용해야 합니다.'
                                    summary: limit 없이 cursor만 전송한 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: limit
                                              reason: Required
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`cursor` 값이 유효하지 않습니다.'
                                    summary: cursor가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: cursor
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /statistics/open/v1/queries/get-procedure-task-statistics:
        post:
            tags:
                - Statistics
            operationId: getProcedureTaskStatistics
            summary: 시술 태스크 통계 조회
            description: |
                시술 태스크 통계 데이터를 조회합니다.

                **오류**

                | 키 | 사유 | 설명 |
                | --- | --- | --- |
                | `limit` | `TooSmall` | `limit`이 1 미만인 경우 |
                | `limit` | `Required` | `cursor` 전송 시 `limit`이 없는 경우 |
                | `cursor` | `NotAvailable` | `cursor`가 유효하지 않은 경우 |
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetProcedureTaskStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetProcedureTaskStatisticsQueryResponse'
    /statistics/open/v1/queries/get-purchase-item-statistics:
        post:
            tags:
                - Statistics
            operationId: getPurchaseItemStatistics
            summary: 구매 항목 통계 조회
            description: |
                구매 항목 통계 데이터를 조회합니다.

                **오류**

                | 키 | 사유 | 설명 |
                | --- | --- | --- |
                | `limit` | `TooSmall` | `limit`이 1 미만인 경우 |
                | `limit` | `Required` | `cursor` 전송 시 `limit`이 없는 경우 |
                | `cursor` | `NotAvailable` | `cursor`가 유효하지 않은 경우 |
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetPurchaseItemStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetPurchaseItemStatisticsQueryResponse'
    /statistics/open/v1/queries/get-schedule-statistics:
        post:
            tags:
                - Statistics
            operationId: getScheduleStatistics
            summary: 예약 통계 조회
            description: |
                예약 통계 데이터를 조회합니다.

                `reservationStartDateTimeUtc` 범위와 `reservedDateTimeUtc` 범위 중 하나 이상은 반드시 전송해야 합니다.

                **오류**

                | 키 | 사유 | 설명 |
                | --- | --- | --- |
                | `limit` | `TooSmall` | `limit`이 1 미만인 경우 |
                | `limit` | `Required` | `cursor` 전송 시 `limit`이 없는 경우 |
                | `cursor` | `NotAvailable` | `cursor`가 유효하지 않은 경우 |
                | `reservationDate` | `Required` | 예약 일시 범위와 예약 생성 일시 범위가 모두 없는 경우 |
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetScheduleStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetScheduleStatisticsQueryResponse'
    /statistics/open/v1/queries/get-transaction-statistics:
        post:
            tags:
                - Statistics
            operationId: getTransactionStatistics
            summary: 결제 통계 조회
            description: 결제 통계 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetTransactionStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetTransactionStatisticsQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetTransactionStatisticsLimitTooSmallError'
                                    - $ref: '#/components/schemas/GetTransactionStatisticsCursorWithoutLimitError'
                                    - $ref: '#/components/schemas/GetTransactionStatisticsCursorNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetTransactionStatisticsLimitTooSmallError'
                                                - $ref: '#/components/schemas/GetTransactionStatisticsCursorWithoutLimitError'
                                                - $ref: '#/components/schemas/GetTransactionStatisticsCursorNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`limit`은 1 이상이어야 합니다.'
                                    summary: limit이 0 이하인 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: limit
                                              reason: TooSmall
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: '`cursor`는 `limit`과 함께 사용해야 합니다.'
                                    summary: limit 없이 cursor만 전송한 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: limit
                                              reason: Required
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: '`cursor` 값이 유효하지 않습니다.'
                                    summary: cursor가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: cursor
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /statistics/open/v1/queries/get-visitor-statistics:
        post:
            tags:
                - Statistics
            operationId: getVisitorStatistics
            summary: 내원객 통계 조회
            description: |
                내원객 통계 데이터를 조회합니다.

                **오류**

                | 키 | 사유 | 설명 |
                | --- | --- | --- |
                | `limit` | `TooSmall` | `limit`이 1 미만인 경우 |
                | `limit` | `Required` | `cursor` 전송 시 `limit`이 없는 경우 |
                | `cursor` | `NotAvailable` | `cursor`가 유효하지 않은 경우 |
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.OpenGetVisitorStatisticsQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.OpenGetVisitorStatisticsQueryResponse'
    /ticket/open/v1/queries/get-ticket-bundles:
        post:
            tags:
                - Ticket
            operationId: getTicketBundlesQuery
            summary: 내원객의 사용 가능한 시술권 묶음 목록 조회
            description: 내원객의 사용 가능한 시술권 묶음 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetTicketBundlesQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.ticket.GetTicketBundlesQueryResponse'
    /visitor/open/v1/commands/disable-advertising-agreement-to-visitors:
        post:
            tags:
                - Visitor
            operationId: disableAdvertisingAgreementToVisitors
            summary: 마케팅 수신 동의 해제
            description: |-
                전화번호로 내원객을 조회해 광고성 마케팅 수신 동의를 해제합니다.

                조건에 맞는 내원객이 없어도 성공 응답을 반환합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.DisableAdvertisingAgreementToVisitorsCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.Empty'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/DisableAdvertisingAgreementToVisitorsInvalidPhoneNumberError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/DisableAdvertisingAgreementToVisitorsInvalidPhoneNumberError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 요청의 `phoneNumber`는 한국 전화번호만 가능합니다.
                                    summary: 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phone
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /visitor/open/v1/commands/submit-visitor-questionnaire:
        post:
            tags:
                - Visitor
            operationId: submitVisitorQuestionnaire
            summary: 내원객 초진 설문지 제출
            description: 설문 응답을 저장하고, 설문 응답 내용을 기반으로 내원객의 기본 정보 일부를 갱신합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.SubmitVisitorQuestionnaireCommand'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.SubmitVisitorQuestionnaireCommandResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/SubmitVisitorQuestionnairePhoneNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/SubmitVisitorQuestionnairePhoneNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`phone`으로 전달된 국가번호와 휴대폰 번호 조합을 파싱할 수 없습니다.'
                                    summary: 휴대폰 번호를 파싱할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: countryCode
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /visitor/open/v1/queries/find-duplicated-visitor-id:
        post:
            tags:
                - Visitor
            operationId: findDuplicatedVisitorId
            summary: 이미 등록된 내원객 ID 조회
            description: |-
                입력한 식별 정보와 일치하는 이미 등록된 내원객 ID를 조회합니다.

                중복 조회는 `name` + `phone`, `passportNumber`, `snsInfo`, `email`, `name` + `birthDateUtc` 순서로 수행됩니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.FindDuplicatedVisitorId'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.FindDuplicatedVisitorIdResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/FindDuplicatedVisitorIdQueryNotAvailableError'
                                    - $ref: '#/components/schemas/FindDuplicatedVisitorIdPhoneNumberNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/FindDuplicatedVisitorIdQueryNotAvailableError'
                                                - $ref: '#/components/schemas/FindDuplicatedVisitorIdPhoneNumberNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 요청 필드가 없는 경우
                                    summary: 요청 필드가 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: query
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: 전화번호를 해석할 수 없는 경우
                                    summary: 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phoneNumber
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /visitor/open/v1/queries/find-visitor:
        post:
            tags:
                - Visitor
            operationId: findVisitor
            summary: 내원객 검색
            description: |-
                내원객 이름과 전화번호로 삭제되지 않은 내원객 정보를 조회합니다.

                Deprecated API입니다.
            deprecated: true
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.FindVisitor'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.FindVisitorResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/FindVisitorPhoneNumberNotAvailableError'
                                    - $ref: '#/components/schemas/FindVisitorPhoneNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/FindVisitorPhoneNumberNotAvailableError'
                                                - $ref: '#/components/schemas/FindVisitorPhoneNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 전화번호가 유효하지 않은 경우
                                    summary: 전화번호가 유효하지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phoneNumber
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: 전화번호를 해석할 수 없는 경우
                                    summary: 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phone
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
    /visitor/open/v1/queries/get-questionnaire-agreements:
        post:
            tags:
                - Visitor
            operationId: getQuestionnaireAgreements
            summary: 초진 설문지 동의항목 조회
            description: 병원에서 설정한 초진 설문지 동의항목 목록을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.Empty'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetQuestionnaireAgreementsQueryResponse'
    /visitor/open/v1/queries/get-questionnaire-submit:
        post:
            tags:
                - Visitor
            operationId: getQuestionnaireSubmit
            summary: 제출된 초진 설문지 조회
            description: 내원객이 제출한 초진 설문지 응답을 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetQuestionnaireSubmitQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetQuestionnaireSubmitQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetQuestionnaireSubmitVisitorNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetQuestionnaireSubmitVisitorNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
                                error_2:
                                    description: 해당 내원객의 제출된 초진 설문지 응답이 존재하지 않습니다.
                                    summary: 제출된 설문지를 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /visitor/open/v1/queries/get-visitor-questionnaire:
        post:
            tags:
                - Visitor
            operationId: getVisitorQuestionnaire
            summary: 내원객 초진 설문지 조회
            description: 내원객의 초진 설문지 입력에 필요한 정보를 조회합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.GetVisitorQuestionnaireQuery'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.GetVisitorQuestionnaireQueryResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/GetVisitorQuestionnaireVisitorNotFoundError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/GetVisitorQuestionnaireVisitorNotFoundError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
                                    summary: 내원객을 찾을 수 없는 경우
                                    value:
                                        className: InvalidRequestException
                                        errorProperties:
                                            - key: visitorId
                                              reason: NotFound
                                        message: InvalidRequestException
                                        status: 400
    /visitor/open/v1/queries/search-visitors:
        post:
            tags:
                - Visitor
            operationId: searchVisitors
            summary: 내원객 정보 검색
            description: 조건에 맞는 내원객 정보를 검색합니다.
            security:
                - auth_token: []
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/protos.open.SearchVisitors'
            responses:
                "200":
                    description: OK
                    content:
                        application/json:
                            schema:
                                $ref: '#/components/schemas/protos.open.SearchVisitorsResponse'
                "400":
                    description: Bad Request
                    content:
                        application/json:
                            schema:
                                oneOf:
                                    - $ref: '#/components/schemas/SearchVisitorsDateOfBirthNotAvailableError'
                                    - $ref: '#/components/schemas/SearchVisitorsEmailNotAvailableError'
                                    - $ref: '#/components/schemas/SearchVisitorsPhoneNotAvailableError'
                                    - allOf:
                                        - $ref: '#/components/schemas/KosErrorResponse'
                                        - not:
                                            anyOf:
                                                - $ref: '#/components/schemas/SearchVisitorsDateOfBirthNotAvailableError'
                                                - $ref: '#/components/schemas/SearchVisitorsEmailNotAvailableError'
                                                - $ref: '#/components/schemas/SearchVisitorsPhoneNotAvailableError'
                                      description: 여기에 명시되지 않은 에러입니다. 공통 에러 응답 형식을 따릅니다. 자세한 내용은 [에러 응답](#에러-응답)을 참고하세요.
                                      title: 알 수 없는 에러
                            examples:
                                error_1:
                                    description: 생년월일이 올바르지 않은 경우
                                    summary: 생년월일이 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: dateOfBirth
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_2:
                                    description: 이메일 주소가 올바르지 않은 경우
                                    summary: 이메일 주소가 올바르지 않은 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: email
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
                                error_3:
                                    description: 전화번호를 해석할 수 없는 경우
                                    summary: 전화번호를 해석할 수 없는 경우
                                    value:
                                        className: InvalidCommandException
                                        errorProperties:
                                            - key: phone
                                              reason: NotAvailable
                                        message: InvalidCommandException
                                        status: 400
components:
    securitySchemes:
        auth_token:
            name: Authorization
            description: '[인증 토큰 교환](/docs/openapi/exchange-token) 을 통해 받아온 Auth Token'
            type: apiKey
            in: header
    schemas:
        AddProductOptionMedicalServiceNotFoundError:
            title: 진료항목을 찾을 수 없는 경우
            description: 옵션 구성에 포함된 `medicalServiceId`가 존재하지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: medicalServiceId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        AddProductOptionProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: productId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CancelReservationCancelReasonUnspecifiedError:
            title: 예약 취소 사유가 기본값인 경우
            description: '`CANCEL_RESERVATION_REASON_UNSPECIFIED`는 일반적인 예약 취소 요청에서 사용하지 않는 기본값입니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CancelReservationReservationNotAllowedByPolicyError:
            title: 예약 취소 정책으로 취소할 수 없는 경우
            description: 병원 예약 취소 정책에 따라 예약 취소가 허용되지 않거나 취소 가능 시간이 지난 경우 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: cancellationPolicy
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationNotAllowedByPolicy
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CancelReservationReservationStatusNotAvailableError:
            title: 예약 상태가 취소할 수 없는 상태인 경우
            description: 예약 상태가 `RESERVED`가 아니면 취소할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: status
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CancelReservationScheduleNotFoundError:
            title: 스케줄을 찾을 수 없는 경우
            description: '`scheduleId`에 해당하는 스케줄이 삭제된 경우 취소할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ChangeFlowStepCounselorNotFoundError:
            title: 상담 진행 단계로 변경 시 상담 담당자가 없는 경우
            description: '`step`을 `CONSULTATION`으로 변경할 때 상담 담당자가 지정되어 있지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: counselor
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ChangeFlowStepProceduresNotCompletedError:
            title: 귀가 단계로 변경 시 완료되지 않은 시술이 있는 경우
            description: '`step`을 `COMPLETED`로 변경할 때 완료되지 않은 시술이 남아 있습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: procedures
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ChangeFlowStepProceduresNotFoundError:
            title: 시술 대기·진행 단계로 변경 시 시술 목록이 없는 경우
            description: '`step`을 `PROCEDURE_WAITING` 또는 `PROCEDURE`로 변경할 때 시술 목록이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: procedures
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ChangeFlowStepScheduleNotFoundError:
            title: 스케줄을 찾을 수 없는 경우
            description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateOccupiedTimeEndDateTimeNotAvailableError:
            title: 점유 종료 일시가 올바르지 않은 경우
            description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateOccupiedTimeInvalidTimeRangeError:
            title: 점유 시간 범위가 올바르지 않은 경우
            description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이후여야 하며, 두 일시는 같은 날짜 안에서 24시간 미만이어야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: InvalidTimeRange
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateOccupiedTimeReservationGroupNotFoundError:
            title: 예약 그룹을 찾을 수 없는 경우
            description: '`reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationGroupId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateOccupiedTimeStartDateTimeNotAvailableError:
            title: 점유 시작 일시가 올바르지 않은 경우
            description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateOccupiedTimeZoneNotFoundError:
            title: 구역을 찾을 수 없는 경우
            description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        CreateProductCategoryNotFoundError:
            title: 카테고리를 찾을 수 없는 경우
            description: '`categoryIds`에 존재하지 않는 카테고리 ID가 포함된 경우입니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: categoryIds
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        DeleteProductProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: productId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        DisableAdvertisingAgreementToVisitorsInvalidPhoneNumberError:
            title: 전화번호를 해석할 수 없는 경우
            description: 요청의 `phoneNumber`는 한국 전화번호만 가능합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ErrorReason:
            type: string
            enum:
                - ErrorReason_UNKNOWN
                - TooShort
                - TooLong
                - Required
                - InvalidLevel1
                - InvalidLevel2
                - InvalidLevel3
                - InvalidLevel4
                - Duplicated
                - InvalidTimeRange
                - NotAvailable
                - NotFound
                - TooSmall
                - TooBig
                - MutuallyExclusive
        ExchangeTokenApiKeyNotFoundError:
            title: API Key가 유효하지 않은 경우
            description: 전달한 `key`에 해당하는 API Key를 찾을 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InternalServiceException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: apiKey
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InternalServiceException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        FindDuplicatedVisitorIdPhoneNumberNotAvailableError:
            title: 전화번호를 해석할 수 없는 경우
            description: 전화번호를 해석할 수 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phoneNumber
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        FindDuplicatedVisitorIdQueryNotAvailableError:
            title: 요청 필드가 없는 경우
            description: 요청 필드가 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: query
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        FindScheduleByPurchaseIdPurchaseIdNotFoundError:
            title: 수납 ID에 해당하는 스케줄을 찾을 수 없는 경우
            description: 수납 ID에 해당하는 스케줄을 찾을 수 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: purchaseId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        FindVisitorPhoneNotAvailableError:
            title: 전화번호를 해석할 수 없는 경우
            description: 전화번호를 해석할 수 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        FindVisitorPhoneNumberNotAvailableError:
            title: 전화번호가 유효하지 않은 경우
            description: 전화번호가 유효하지 않은 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phoneNumber
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetCategoriesInvalidSortCriteriaError:
            title: 정렬 기준이 올바르지 않은 경우
            description: 정렬 가능한 필드는 `order`입니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    message:
                        type: string
                        const: sort is invalid
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetPrepaidCardChargingEventStatisticsCursorNotAvailableError:
            title: cursor가 유효하지 않은 경우
            description: '`cursor` 값이 유효하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: cursor
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetPrepaidCardChargingEventStatisticsCursorWithoutLimitError:
            title: limit 없이 cursor만 전송한 경우
            description: '`cursor`는 `limit`과 함께 사용해야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: limit
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetPrepaidCardChargingEventStatisticsLimitTooSmallError:
            title: limit이 0 이하인 경우
            description: '`limit`은 1 이상이어야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: limit
                                reason:
                                    type: string
                                    const: TooSmall
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetProductOptionsOptionIdsRequiredError:
            title: 상품 옵션 ID 목록이 비어 있는 경우
            description: '`optionIds`는 최소 한 개 이상 필요합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: optionIds
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetProductProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: 상품을 찾을 수 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: productId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetPurchaseSummariesByVisitorVisitorIdNotAvailableError:
            title: 내원객 ID가 비어 있는 경우
            description: 내원객 ID가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetQuestionnaireSubmitVisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReschedulableTimeSlotsInvalidDateTimeRangeError:
            title: '`dateTimeRange`의 형식이 올바르지 않은 경우'
            description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: dateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidDateTimeRange
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReschedulableTimeSlotsReservationNotAllowedByPolicyError:
            title: 예약 변경 정책에 의해 변경이 허용되지 않은 경우
            description: 예약 변경 마감 시간 초과 등 예약 변경 정책에 의해 일시 변경이 허용되지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: modificationPolicy
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationNotAllowedByPolicy
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReschedulableTimeSlotsScheduleNotFoundError:
            title: '`scheduleId`에 해당하는 스케줄이 존재하지 않는 경우'
            description: '`scheduleId`에 해당하는 스케줄이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ScheduleNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByGroupTimezoneNotAvailableError:
            title: 시간대가 올바르지 않은 경우
            description: '`timezone`이 올바른 IANA time zone database 이름이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: timezone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByGroupsV2EndDateTimeNotAvailableError:
            title: 조회 범위 종료 일시가 올바르지 않은 경우
            description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByGroupsV2InvalidTimeRangeError:
            title: 종료 일시가 시작 일시보다 이전인 경우
            description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이전일 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: InvalidTimeRange
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByGroupsV2ReservationGroupIdsRequiredError:
            title: 예약 그룹 ID 목록이 비어 있는 경우
            description: '`reservationGroupIds`는 최소 한 개 이상 필요합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationGroupIds
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByGroupsV2StartDateTimeNotAvailableError:
            title: 조회 범위 시작 일시가 올바르지 않은 경우
            description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdEndDateTimeNotAvailableError:
            title: 조회 범위 종료 일시가 올바르지 않은 경우
            description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdScheduleIdNotAvailableError:
            title: 스케줄 ID가 빈 문자열인 경우
            description: '`scheduleId`가 빈 문자열이면 이 오류가 발생합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdStartDateTimeNotAvailableError:
            title: 조회 범위 시작 일시가 올바르지 않은 경우
            description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdV2EndDateTimeNotAvailableError:
            title: 조회 범위 종료 일시가 올바르지 않은 경우
            description: '`endDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdV2InvalidTimeRangeError:
            title: 조회 범위 종료 일시가 시작 일시보다 이전인 경우
            description: '`endDateTimeUtc`는 `startDateTimeUtc`보다 이전일 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: InvalidTimeRange
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdV2ScheduleIdEmptyError:
            title: 스케줄 ID가 빈 문자열인 경우
            description: '`scheduleId`가 빈 문자열이면 이 오류가 발생합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationSlotsByScheduleIdV2StartDateTimeNotAvailableError:
            title: 조회 범위 시작 일시가 올바르지 않은 경우
            description: '`startDateTimeUtc`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsByVisitorIdInvalidDateTimeRangeError:
            title: '`dateTimeRange`의 형식이 올바르지 않은 경우'
            description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: dateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidDateTimeRange
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsByVisitorIdOccupancyPlanNotFoundError:
            title: 예약 규칙에 따른 점유 계획이 성립되지 않는 경우
            description: 예약 규칙에 따른 점유 계획을 생성할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupancyPlan
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: OccupancyPlanNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsByVisitorIdReservationRuleNotActivatedError:
            title: 예약 규칙이 활성화되지 않은 경우
            description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationRuleNotActivated
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsByVisitorIdReservationRuleNotFoundError:
            title: 예약 규칙이 존재하지 않는 경우
            description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ReservationRuleNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsByVisitorIdVisitorNotFoundError:
            title: '`visitorId`에 해당하는 내원객이 존재하지 않는 경우'
            description: '`visitorId`에 해당하는 내원객이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsInvalidDateTimeRangeError:
            title: '`dateTimeRange`의 형식이 올바르지 않은 경우'
            description: '[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 형식이 아니거나, 시작시간이 종료시간보다 뒤에 위치한 경우 등'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: dateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidDateTimeRange
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsOccupancyPlanNotFoundError:
            title: 예약 규칙에 따른 점유 계획이 성립되지 않는 경우
            description: 예약 규칙에 따른 점유 계획을 생성할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupancyPlan
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: OccupancyPlanNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsReservationRuleNotActivatedError:
            title: 예약 규칙이 활성화되지 않은 경우
            description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationRuleNotActivated
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetReservationTimeSlotsReservationRuleNotFoundError:
            title: 예약 규칙이 존재하지 않는 경우
            description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ReservationRuleNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetSchedulesByFlowStepFlowStepNotAvailableError:
            title: 내원 단계가 올바르지 않은 경우
            description: 내원 단계가 올바르지 않은 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: flowSteps
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetSchedulesByFlowStepReservationStartDateTimeRangeInvalidError:
            title: 조회 범위 종료 일시가 시작 일시보다 이전인 경우
            description: '`reservationStartDateTimeUtcTo`가 `reservationStartDateTimeUtcFrom`보다 이전입니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: InvalidTimeRange
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetSchedulesByFlowStepReservationStartDateTimeUtcFromNotAvailableError:
            title: 조회 범위 시작 일시가 올바르지 않은 경우
            description: '`reservationStartDateTimeUtcFrom`이 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetSchedulesByFlowStepReservationStartDateTimeUtcToNotAvailableError:
            title: 조회 범위 종료 일시가 올바르지 않은 경우
            description: '`reservationStartDateTimeUtcTo`가 올바른 date-time 값이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetTransactionStatisticsCursorNotAvailableError:
            title: cursor가 유효하지 않은 경우
            description: '`cursor` 값이 유효하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: cursor
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetTransactionStatisticsCursorWithoutLimitError:
            title: limit 없이 cursor만 전송한 경우
            description: '`cursor`는 `limit`과 함께 사용해야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: limit
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetTransactionStatisticsLimitTooSmallError:
            title: limit이 0 이하인 경우
            description: '`limit`은 1 이상이어야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: limit
                                reason:
                                    type: string
                                    const: TooSmall
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        GetVisitorQuestionnaireVisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        KosErrorProperties:
            type: object
            required:
                - key
                - reason
            properties:
                key:
                    description: 에러 필드 경로
                    type: string
                reason:
                    description: 에러 사유
                    allOf:
                        - $ref: '#/components/schemas/ErrorReason'
        KosErrorResponse:
            type: object
            required:
                - status
                - message
                - className
            properties:
                properties:
                    description: 에러 속성 목록
                    type: array
                    items:
                        type: string
                className:
                    description: 에러 클래스 이름
                    type: string
                errorProperties:
                    description: 필드별 에러 속성 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/KosErrorProperties'
                message:
                    description: 에러 메시지
                    type: string
                status:
                    description: HTTP 상태 코드
                    type: integer
        RegisterVisitorImagesMemoTooLongError:
            title: 메모가 150자를 초과한 경우
            description: '`memo`는 150자 이하여야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: memo
                                reason:
                                    type: string
                                    const: TooLong
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RegisterVisitorImagesPathNotAvailableError:
            title: 경로에 허용되지 않는 문자가 포함된 경우
            description: '`path`에 `*` 또는 `?`를 포함할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: path
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RegisterVisitorImagesPathSegmentTooLongError:
            title: 폴더명이 200자를 초과한 경우
            description: '`path`의 각 폴더명은 200자 이하여야 합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: path
                                reason:
                                    type: string
                                    const: TooLong
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RemoveProductOptionProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: productId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RemoveProductOptionProductOptionNotFoundError:
            title: 상품 옵션을 찾을 수 없는 경우
            description: '`id`에 해당하는 상품 옵션이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: id
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RescheduleByTimeSlotReservationNotAllowedByPolicyError:
            title: 예약 변경 정책에 의해 변경이 허용되지 않은 경우
            description: 예약 변경 마감 시간 초과 등 예약 변경 정책에 의해 일시 변경이 허용되지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: modificationPolicy
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationNotAllowedByPolicy
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RescheduleByTimeSlotReservationTimeNotAvailableError:
            title: 해당 시간이 예약 불가능한 경우
            description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationDateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationTimeNotAvailable
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        RescheduleByTimeSlotScheduleNotFoundError:
            title: '`scheduleId`에 해당하는 스케줄이 존재하지 않는 경우'
            description: '`scheduleId`에 해당하는 스케줄이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotDuplicatedReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 이미 있는 경우
            description: '`reservationDateTimeRange`와 시간이 겹치는 예약이 해당 내원객에게 이미 존재합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationDateTimeRange
                                reason:
                                    type: string
                                    const: Duplicated
                    message:
                        type: string
                        const: DuplicatedReservation
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotInvalidVisitorNameError:
            title: '`visitorName`이 빈 문자열이거나 앞뒤에 공백이 있는 경우'
            description: '`visitorName`은 공백만으로 구성될 수 없으며, 앞뒤 공백이 허용되지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorName
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidVisitorName
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotReservationRuleNotActivatedError:
            title: 예약 규칙이 활성화되지 않은 경우
            description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationRuleNotActivated
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotReservationRuleNotFoundError:
            title: 예약 규칙이 존재하지 않는 경우
            description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ReservationRuleNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotReservationTimeNotAvailableError:
            title: 해당 시간이 예약 불가능한 경우
            description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationDateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationTimeNotAvailable
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotWithVisitorIdDuplicatedReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 이미 있는 경우
            description: '`reservationDateTimeRange`와 시간이 겹치는 예약이 해당 내원객에게 이미 존재합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationDateTimeRange
                                reason:
                                    type: string
                                    const: Duplicated
                    message:
                        type: string
                        const: DuplicatedReservation
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotWithVisitorIdReservationRuleNotActivatedError:
            title: 예약 규칙이 활성화되지 않은 경우
            description: 활성화 상태가 아닌 예약 규칙은 슬롯 조회에 사용할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationRuleNotActivated
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotWithVisitorIdReservationRuleNotFoundError:
            title: 예약 규칙이 존재하지 않는 경우
            description: '`reservationRuleId`에 해당하는 예약 규칙이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationRuleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ReservationRuleNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotWithVisitorIdReservationTimeNotAvailableError:
            title: 해당 시간이 예약 불가능한 경우
            description: '`reservationDateTimeRange`에 해당하는 시간에 예약을 생성할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: reservationDateTimeRange
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationTimeNotAvailable
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByTimeSlotWithVisitorIdVisitorNotFoundError:
            title: '`visitorId`에 해당하는 내원객이 존재하지 않는 경우'
            description: '`visitorId`에 해당하는 내원객이 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: VisitorNotFound
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdOverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourceConfigurationRequiredError:
            title: 예약 일정 설정이 누락된 경우
            description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].configuration
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: MissingOccupiedResourceConfiguration
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourceReservationGroupIdNotAvailableError:
            title: 예약 일정의 예약 그룹 ID 형식이 올바르지 않은 경우
            description: '`occupiedResources[].reservationGroup.reservationGroupId`가 올바른 object-id 형식이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[].reservationGroup.reservationGroupId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourceReservationGroupNotFoundError:
            title: 예약 일정의 예약 그룹을 찾을 수 없는 경우
            description: '`occupiedResources[].reservationGroup.reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[].reservationGroup.reservationGroupId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourceZoneNotInGroupError:
            title: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
            description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ZoneNotInReservationGroup
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourcesDifferentDateError:
            title: 예약 일정의 날짜가 서로 다른 경우
            description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[1].reservationTime.startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: DifferentDateInOccupiedResources
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OccupiedResourcesRequiredError:
            title: 예약 일정이 비어 있는 경우
            description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: OccupiedResourcesEmpty
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2OverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2ReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2VisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdV2ZoneNotFoundError:
            title: zoneId에 해당하는 구역이 없는 경우
            description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: NotFoundZone
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveByVisitorIdVisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: '`visitorId`에 해당하는 내원객을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandOverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandVisitorNameNotAvailableError:
            title: 내원객 이름이 앞뒤에 공백을 포함하는 경우
            description: '`visitorName`은 앞뒤에 공백을 포함할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorName
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandVisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: 내원객 조회 또는 생성 후 재조회 단계에서 예약에 사용할 내원객을 찾을 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandVisitorPhoneCountryCodeNotAvailableError:
            title: 내원객 전화번호 국가 코드가 유효하지 않은 경우
            description: 내원객 생성 단계에서 `visitorPhone.countryCode`가 유효하지 않으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: countryCode
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandVisitorPhoneNotAvailableError:
            title: 내원객 전화번호를 해석할 수 없는 경우
            description: 내원객 생성 단계에서 `visitorPhone`을 유효한 전화번호로 해석할 수 없으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveCommandVisitorPhoneNumberNotAvailableError:
            title: 내원객 전화번호가 유효하지 않은 경우
            description: 내원객 중복 조회 또는 생성 단계에서 `visitorPhone.phoneNumber`가 유효하지 않으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phoneNumber
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourceConfigurationRequiredError:
            title: 예약 일정 설정이 누락된 경우
            description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].configuration
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: MissingOccupiedResourceConfiguration
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourceReservationGroupIdNotAvailableError:
            title: 예약 일정의 예약 그룹 ID 형식이 올바르지 않은 경우
            description: '`occupiedResources[].reservationGroup.reservationGroupId`가 올바른 object-id 형식이 아닙니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[].reservationGroup.reservationGroupId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourceReservationGroupNotFoundError:
            title: 예약 일정의 예약 그룹을 찾을 수 없는 경우
            description: '`occupiedResources[].reservationGroup.reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[].reservationGroup.reservationGroupId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourceZoneNotInGroupError:
            title: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
            description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ZoneNotInReservationGroup
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourcesDifferentDateError:
            title: 예약 일정의 날짜가 서로 다른 경우
            description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[1].reservationTime.startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: DifferentDateInOccupiedResources
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OccupiedResourcesRequiredError:
            title: 예약 일정이 비어 있는 경우
            description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2OverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2ReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2VisitorNameNotAvailableError:
            title: 내원객 이름 앞뒤에 공백이 있는 경우
            description: '`visitorName`은 앞뒤에 공백을 포함할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorName
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2VisitorNotFoundError:
            title: 내원객을 찾을 수 없는 경우
            description: 내원객 조회 또는 생성 후 재조회 단계에서 예약에 사용할 내원객을 찾을 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: visitorId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2VisitorPhoneCountryCodeNotAvailableError:
            title: 내원객 전화번호 국가 코드가 유효하지 않은 경우
            description: 내원객 생성 단계에서 `visitorPhone.countryCode`가 유효하지 않으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: countryCode
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2VisitorPhoneNotAvailableError:
            title: 내원객 전화번호를 해석할 수 없는 경우
            description: 내원객 생성 단계에서 `visitorPhone`을 유효한 전화번호로 해석할 수 없으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2VisitorPhoneNumberNotAvailableError:
            title: 내원객 전화번호가 유효하지 않은 경우
            description: 내원객 중복 조회 또는 생성 단계에서 `visitorPhone.phoneNumber`가 유효하지 않으면 발생합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phoneNumber
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        ReserveV2ZoneNotFoundError:
            title: zoneId에 해당하는 구역이 없는 경우
            description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: NotFoundZone
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        SearchVisitorsDateOfBirthNotAvailableError:
            title: 생년월일이 올바르지 않은 경우
            description: 생년월일이 올바르지 않은 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: dateOfBirth
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        SearchVisitorsEmailNotAvailableError:
            title: 이메일 주소가 올바르지 않은 경우
            description: 이메일 주소가 올바르지 않은 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: email
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        SearchVisitorsPhoneNotAvailableError:
            title: 전화번호를 해석할 수 없는 경우
            description: 전화번호를 해석할 수 없는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: phone
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        SubmitVisitorQuestionnairePhoneNotAvailableError:
            title: 휴대폰 번호를 파싱할 수 없는 경우
            description: '`phone`으로 전달된 국가번호와 휴대폰 번호 조합을 파싱할 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: countryCode
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateProductInformationCategoryNotFoundError:
            title: 카테고리를 찾을 수 없는 경우
            description: '`categoryIds`에 존재하지 않는 카테고리 ID가 포함된 경우입니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: categoryIds
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateProductInformationProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: '`id`에 해당하는 상품이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: id
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateProductOptionMedicalServiceNotFoundError:
            title: 진료항목을 찾을 수 없는 경우
            description: 옵션 구성에 포함된 `medicalServiceId`가 존재하지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: medicalServiceId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateProductOptionProductNotFoundError:
            title: 상품을 찾을 수 없는 경우
            description: '`productId`에 해당하는 상품이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: productId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateProductOptionProductOptionNotFoundError:
            title: 상품 옵션을 찾을 수 없는 경우
            description: '`id`에 해당하는 상품 옵션이 존재하지 않습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: id
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationEndDateTimeEmptyError:
            title: 예약 종료 일시가 비어 있는 경우
            description: 예약 종료 일시가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: endDateTime
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationModificationNotAllowedByPolicyError:
            title: 예약 변경 정책으로 변경할 수 없는 경우
            description: 예약 변경 정책 또는 변경 마감 시간 조건으로 인해 예약을 변경할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: modificationPolicy
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationNotAllowedByPolicy
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationMultipleOccupiedResourcesError:
            title: 여러 예약 일정이 있는 스케줄을 V1에서 수정하려는 경우
            description: 스케줄에 여러 예약 일정이 있으면 V1 API로 예약 일정을 수정할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: MultipleOccupiedResources
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationOverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationReservationGroupIdEmptyError:
            title: 예약 그룹 ID가 비어 있는 경우
            description: 예약 그룹 ID가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: groupId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationReservationGroupNotFoundError:
            title: 예약 그룹을 찾을 수 없는 경우
            description: '`reservationGroupId`에 해당하는 예약 그룹을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: id
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationScheduleIdEmptyError:
            title: 스케줄 ID가 비어 있는 경우
            description: 스케줄 ID가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: streamId
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationScheduleNotFoundError:
            title: 스케줄을 찾을 수 없는 경우
            description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationStartDateTimeEmptyError:
            title: 예약 시작 일시가 비어 있는 경우
            description: 예약 시작 일시가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2ModificationNotAllowedByPolicyError:
            title: 예약 변경 정책으로 변경할 수 없는 경우
            description: 예약 변경 정책 또는 변경 마감 시간 조건으로 인해 예약을 변경할 수 없습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: modificationPolicy
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationNotAllowedByPolicy
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2OccupiedResourceConfigurationRequiredError:
            title: 예약 일정 설정이 누락된 경우
            description: 각 `occupiedResources` 항목에는 예약 그룹 설정이 필요합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].configuration
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: MissingOccupiedResourceConfiguration
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2OccupiedResourceZoneNotInGroupError:
            title: 예약 일정의 구역이 예약 그룹에 속하지 않는 경우
            description: 예약 일정의 `zoneId`가 해당 예약 그룹에 속하지 않습니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: ZoneNotInReservationGroup
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2OccupiedResourcesDifferentDateError:
            title: 예약 일정의 날짜가 서로 다른 경우
            description: 모든 `occupiedResources`의 예약 시작 일시는 같은 날짜여야 합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[1].reservationTime.startDateTimeUtc
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: DifferentDateInOccupiedResources
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2OccupiedResourcesRequiredError:
            title: 예약 일정이 비어 있는 경우
            description: '`occupiedResources`는 최소 한 개 이상 필요합니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources
                                reason:
                                    type: string
                                    const: Required
                    message:
                        type: string
                        const: OccupiedResourcesEmpty
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2OverlappingReservationError:
            title: 동일한 내원객에 대해 시간이 겹치는 예약이 있는 경우
            description: 동일한 내원객에게 시간이 겹치는 예약이 이미 존재합니다.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: startDateTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2ReservationCapacityExceededError:
            title: 슬롯 정원이 초과된 경우
            description: 병원 정책 또는 Feature Flag가 적용된 경우에만 발생합니다. 적용이 필요하면 KOS에 문의하세요.
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: occupiedResources[0].reservationTime
                                reason:
                                    type: string
                                    const: NotAvailable
                    message:
                        type: string
                        const: ReservationCapacityExceeded
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2ScheduleNotFoundError:
            title: 스케줄을 찾을 수 없는 경우
            description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: NotFoundSchedule
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationV2ZoneNotFoundError:
            title: zoneId에 해당하는 구역이 없는 경우
            description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: NotFoundZone
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationZoneIdEmptyError:
            title: 예약 구역 ID가 비어 있는 경우
            description: 예약 구역 ID가 비어 있는 경우
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidCommandException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidCommandException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateReservationZoneNotFoundError:
            title: 예약 구역을 찾을 수 없는 경우
            description: '`zoneId`에 해당하는 구역을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: zoneId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        UpdateScheduleConsultationInfoScheduleNotFoundError:
            title: 스케줄을 찾을 수 없는 경우
            description: '`scheduleId`에 해당하는 스케줄을 찾을 수 없습니다.'
            allOf:
                - $ref: '#/components/schemas/KosErrorResponse'
                - properties:
                    className:
                        type: string
                        const: InvalidRequestException
                    errorProperties:
                        type: array
                        minItems: 1
                        items:
                            type: object
                            properties:
                                key:
                                    type: string
                                    const: scheduleId
                                reason:
                                    type: string
                                    const: NotFound
                    message:
                        type: string
                        const: InvalidRequestException
                    status:
                        type: integer
                        const: 400
                  required:
                    - status
                    - message
                    - className
                    - errorProperties
                  type: object
        protos.DateTimeRangeUtc:
            type: object
            required:
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                endDateTimeUtc:
                    description: |-
                        범위 종료 일시

                        이 값은 범위에 포함되지 않습니다.
                    type: string
                    format: date-time
                startDateTimeUtc:
                    description: |-
                        범위 시작 일시

                        이 값은 범위에 포함됩니다.
                    type: string
                    format: date-time
        protos.Empty:
            type: object
        protos.Money:
            type: object
            required:
                - currency
                - value
            properties:
                value:
                    type: integer
                    format: int64
                currency:
                    type: string
        protos.Phone:
            type: object
            required:
                - countryCode
                - phoneNumber
            properties:
                countryCode:
                    description: |-
                        국제전화 국가번호

                        `+` 접두사 없이 숫자만 전달합니다. 국가번호 목록은 [국제전화 국가 번호](https://ko.wikipedia.org/wiki/%EA%B5%AD%EC%A0%9C%EC%A0%84%ED%99%94_%EA%B5%AD%EA%B0%80_%EB%B2%88%ED%98%B8)를 참고하세요.
                    type: string
                phoneNumber:
                    description: |-
                        전화번호

                        하이픈이나 구분자 없이 숫자만 전달합니다. 형식 판단은 [libphonenumber](https://github.com/google/libphonenumber)를 참고합니다.
                    type: string
        protos.Sort:
            type: object
            required:
                - by
                - order
            properties:
                by:
                    description: 정렬 기준 필드
                    type: string
                order:
                    description: |
                        정렬 방향

                        | 값 | 의미 |
                        | --- | --- |
                        | `Order_UNKNOWN` | 알 수 없음 |
                        | `ASC` | 오름차순 |
                        | `DESC` | 내림차순 |
                    type: string
                    enum:
                        - Order_UNKNOWN
                        - ASC
                        - DESC
        protos.Transls:
            type: object
            properties:
                translation:
                    description: |-
                        언어별 번역 맵

                        키는 언어 코드, 값은 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        type: string
        protos.account.AccountRoleV2Contract:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 역할 이름
                    type: string
                id:
                    description: 역할 ID
                    type: string
                roleTags:
                    description: |
                        역할 태그 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `ROLE_TAG_UNSPECIFIED` | 알 수 없음 |
                        | `ADMIN` | 관리자 |
                        | `DOCTOR` | 의사 |
                        | `COUNSELOR` | 상담사 |
                        | `NURSE` | 간호사 |
                        | `SKINCARE` | 스킨케어 |
                        | `CALL_COUNSELOR` | 콜 상담사 |
                        | `COORDINATOR` | 코디네이터 |
                    type: array
                    items:
                        type: string
                        enum:
                            - ROLE_TAG_UNSPECIFIED
                            - ADMIN
                            - DOCTOR
                            - COUNSELOR
                            - NURSE
                            - SKINCARE
                            - CALL_COUNSELOR
                            - COORDINATOR
        protos.image.RegisterVisitorImageConfiguration:
            type: object
            required:
                - fileName
                - visitorId
                - source
                - shootingDateTimeUtc
            properties:
                category:
                    description: 이미지 분류 코드
                    allOf:
                        - $ref: '#/components/schemas/protos.tenant.Code'
                equipment:
                    description: 촬영 장비 코드
                    allOf:
                        - $ref: '#/components/schemas/protos.tenant.Code'
                fileName:
                    description: 이미지 파일 이름
                    type: string
                memo:
                    description: |-
                        이미지 메모

                        150자 이하여야 합니다.
                    type: string
                    maxLength: 150
                path:
                    description: |-
                        이미지 폴더 경로

                        슬래시(`/`)로 하위 폴더를 구분합니다. 각 폴더명은 200자 이하여야 하며, `*`와 `?`는 사용할 수 없습니다.
                    type: string
                    pattern: ^[^*?]*$
                scheduleId:
                    description: 연결된 스케줄 ID
                    type: string
                    format: uuid
                shootingDateTimeUtc:
                    description: |-
                        이미지 촬영 일시

                        오프셋이 포함된 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 문자열을 전달합니다.
                    type: string
                    format: date-time
                source:
                    description: |
                        이미지 출처

                        | 값 | 의미 |
                        | --- | --- |
                        | `VISITOR_IMAGE_SOURCE_UNSPECIFIED` | 알 수 없음 |
                        | `HOSPITAL` | 원내 촬영 |
                        | `VISITOR` | 내원객 촬영 |
                        | `AGREEMENT` | 동의서 |
                        | `PEN_CHART` | 펜 차트 |
                    type: string
                    enum:
                        - VISITOR_IMAGE_SOURCE_UNSPECIFIED
                        - HOSPITAL
                        - VISITOR
                        - AGREEMENT
                        - PEN_CHART
                visitorId:
                    description: 이미지를 연결할 내원객 ID
                    type: string
                    format: object-id
        protos.open.CreateReservationFunnel:
            type: object
            properties:
                funnelCategoryName:
                    description: |-
                        유입 채널 카테고리 이름

                        기존 코드 이름이면 해당 코드를 사용하고, 없으면 코드를 생성합니다. 비활성화된 코드에 매칭되면 무시됩니다.
                    type: string
                funnelDetail:
                    description: 상세 유입 경로
                    type: string
                funnelName:
                    description: |-
                        유입 채널 이름

                        기존 코드 이름이면 해당 코드를 사용하고, 없으면 코드를 생성합니다. 비활성화된 코드에 매칭되면 무시됩니다.
                    type: string
        protos.open.CreateReservationRequestedProcedure:
            type: object
            oneOf:
                - properties:
                    ticket:
                        description: 티켓 기반 희망 시술
                        allOf:
                            - $ref: '#/components/schemas/protos.open.CreateReservationRequestedProcedure.ReservationRequestedTicketConfiguration'
                  required:
                    - ticket
                  title: 티켓 기반 희망 시술
                  type: object
                - properties:
                    option:
                        description: 상품 옵션 기반 희망 시술
                        allOf:
                            - $ref: '#/components/schemas/protos.open.CreateReservationRequestedProcedure.ReservationRequestedOptionConfiguration'
                  required:
                    - option
                  title: 상품 옵션 기반 희망 시술
                  type: object
        protos.open.CreateReservationRequestedProcedure.ReservationRequestedOptionConfiguration:
            type: object
            required:
                - optionId
            properties:
                optionId:
                    description: 예약 희망 상품 옵션 ID
                    type: string
                    format: object-id
                visitorTypeId:
                    description: 내원객 유형 ID
                    type: string
                    format: object-id
        protos.open.CreateReservationRequestedProcedure.ReservationRequestedTicketConfiguration:
            type: object
            required:
                - ticketId
            properties:
                ticketId:
                    description: 예약 희망 티켓 ID
                    type: string
                    format: object-id
        protos.open.DisableAdvertisingAgreementToVisitorsCommand:
            type: object
            required:
                - phoneNumber
            properties:
                phoneNumber:
                    description: |-
                        마케팅 수신 동의를 해제할 내원객 전화번호

                        * 한국 전화번호만 가능합니다.
                    type: string
        protos.open.ExchangeTokenCommand:
            type: object
            required:
                - key
            properties:
                key:
                    description: |-
                        API Key

                        인증 토큰으로 교환할 API Key입니다. KOS팀에서 발급받은 값을 사용하며, 클라이언트에 노출하지 않고 서버 사이드에서만 사용합니다.
                    type: string
                    format: uuid
        protos.open.ExchangeTokenResponse:
            type: object
            required:
                - token
            properties:
                token:
                    description: |-
                        인증 토큰

                        API 요청 시 `Authorization` 헤더에 담아 전송하는 토큰입니다. 일정 시간이 지나면 만료되며, 만료된 토큰으로 호출하면 `401` 응답이 반환됩니다.
                    type: string
                    format: uuid
        protos.open.FindDuplicatedVisitorId:
            type: object
            properties:
                name:
                    description: |-
                        중복 조회에 사용할 내원객 이름

                        `phone` 또는 `birthDateUtc`와 함께 전달할 때 조회 조건으로 사용됩니다. `phone`과 함께 전달하면 내원객 이름 또는 발음명과 일치하는 내원객을 조회합니다.
                    type: string
                birthDateUtc:
                    description: |-
                        중복 조회에 사용할 생년월일

                        `name`과 함께 전달할 때 조회 조건으로 사용됩니다. 오프셋이 포함된 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 문자열을 전달합니다.
                    type: string
                    format: date-time
                email:
                    description: |-
                        중복 조회에 사용할 이메일 주소

                        저장된 이메일 주소와 일치하는 내원객을 조회합니다.
                    type: string
                passportGivenNames:
                    description: |-
                        여권 이름

                        이 엔드포인트의 중복 조회 조건으로 사용되지 않습니다.
                    type: string
                passportNumber:
                    description: |-
                        중복 조회에 사용할 여권 번호

                        저장된 여권 번호와 일치하는 내원객을 조회합니다.
                    type: string
                passportSurname:
                    description: |-
                        여권 성

                        이 엔드포인트의 중복 조회 조건으로 사용되지 않습니다.
                    type: string
                phone:
                    description: |-
                        중복 조회에 사용할 전화번호

                        `name`과 함께 전달할 때 조회 조건으로 사용됩니다. `countryCode`와 `phoneNumber`가 모두 일치해야 합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                snsInfo:
                    description: |-
                        중복 조회에 사용할 SNS 계정 정보

                        `snsType`과 `accountId`가 모두 일치하는 내원객을 조회합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.SnsInfo'
        protos.open.FindDuplicatedVisitorIdResponse:
            type: object
            properties:
                data:
                    description: |-
                        중복 내원객 ID

                        일치하는 삭제되지 않은 내원객이 없으면 응답에 포함되지 않습니다.
                    type: string
                    format: object-id
        protos.open.FindScheduleByPurchaseIdQuery:
            type: object
            required:
                - purchaseId
            properties:
                purchaseId:
                    description: 스케줄을 조회할 수납 ID
                    type: string
        protos.open.FindScheduleByPurchaseIdQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 수납 ID에 연결된 스케줄 상세 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleContract'
        protos.open.FindVisitor:
            type: object
            required:
                - visitorName
            properties:
                phone:
                    description: |-
                        검색 조건으로 사용할 전화번호

                        `visitorName`과 함께 조회 조건으로 사용됩니다. `countryCode`와 `phoneNumber`가 모두 일치해야 합니다. `phone`이 없으면 조회하지 않고 빈 응답을 반환합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                visitorName:
                    description: |-
                        내원객 이름

                        `phone`과 함께 조회 조건으로 사용됩니다. 내원객 이름 또는 발음명과 일치하는 내원객을 조회합니다.
                    type: string
        protos.open.FindVisitorResponse:
            type: object
            properties:
                data:
                    description: |-
                        조회된 내원객 정보

                        일치하는 삭제되지 않은 내원객 정보입니다. `phone`이 없거나 조건에 맞는 내원객이 없으면 응답에 포함되지 않습니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.VisitorInformation'
        protos.open.GenerateUploadingImageUrl:
            type: object
            required:
                - fileName
            properties:
                fileName:
                    description: |-
                        업로드할 이미지 파일 이름

                        병원별로 유니크해야 합니다.
                    type: string
        protos.open.GenerateUploadingImageUrlResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        이미지 파일을 업로드할 presigned URL

                        이 URL로 이미지 파일 바이너리를 `PUT` 요청으로 업로드합니다. 발급된 URL은 5분 동안 유효합니다.
                    type: string
                    format: uri
        protos.open.GetPurchaseSummariesQuery:
            type: object
            required:
                - purchaseIds
            properties:
                purchaseIds:
                    description: |-
                        조회할 수납 ID 목록

                        존재하지 않거나 삭제된 수납 ID는 응답에 포함되지 않습니다.
                    type: array
                    items:
                        type: string
        protos.open.GetPurchaseSummariesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        수납 목록

                        삭제되지 않은 수납만 포함합니다. 존재하지 않거나 삭제된 `purchaseIds`는 응답에 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseSummary'
        protos.open.GetQuestionnaireAgreementsQueryResponse:
            type: object
            properties:
                data:
                    description: 초진 설문지 동의항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.QuestionnaireAgreement'
        protos.open.GetQuestionnaireSubmitQuery:
            type: object
            required:
                - visitorId
            properties:
                visitorId:
                    description: 제출된 초진 설문지를 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.open.GetQuestionnaireSubmitQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        제출된 초진 설문지 조회 결과

                        내원객 기본 정보, 제출된 설문 응답, 동의항목 등을 포함합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.GetQuestionnaireSubmitLegacyQueryResponse'
        protos.open.GetReschedulableTimeSlotsQuery:
            type: object
            required:
                - scheduleId
                - dateTimeRangeUtc
            properties:
                available:
                    description: |-
                        슬롯 가용 여부 필터

                        `true`이면 가용한 슬롯만 조회하고, `false`이면 가용하지 않은 슬롯만 조회합니다. 생략하면 모든 슬롯을 조회합니다.
                    type: boolean
                dateTimeRangeUtc:
                    description: 예약 일시 변경 가능 슬롯을 조회할 시간 범위
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                scheduleId:
                    description: 스케줄 ID
                    type: string
                    format: object-id
        protos.open.GetReschedulableTimeSlotsQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 일시 변경 가능 슬롯 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.reservation_time_slot.ReservationTimeSlot'
        protos.open.GetReservationGroupsQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        예약 그룹 목록

                        Open API에서는 삭제되지 않은 예약 그룹만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationGroupContract'
        protos.open.GetReservationRuleSummariesQuery:
            type: object
            properties:
                isActive:
                    description: |-
                        활성화 여부 필터

                        `true`이면 활성화된 예약 규칙만 조회하고, `false`이면 비활성화된 예약 규칙만 조회합니다. 생략하면 전체 예약 규칙을 조회합니다.
                    type: boolean
        protos.open.GetReservationRuleSummariesQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 규칙 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRuleSummary'
        protos.open.GetReservationSlotsByGroupQuery:
            type: object
            required:
                - reservationGroupId
                - startDate
                - endDate
                - timezone
            properties:
                endDate:
                    description: |-
                        조회 범위 종료일

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date 형식입니다. `timezone` 기준 조회 범위의 종료일로 사용됩니다.
                    type: string
                    format: date
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                startDate:
                    description: |-
                        조회 범위 시작일

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date 형식입니다. `timezone` 기준 조회 범위의 시작일로 사용됩니다.
                    type: string
                    format: date
                timezone:
                    description: |-
                        조회 기준 시간대

                        [IANA time zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) 이름입니다.
                    type: string
        protos.open.GetReservationSlotsByGroupsQuery:
            type: object
            required:
                - reservationGroupIds
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                endDateTimeUtc:
                    description: |-
                        조회 범위 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                reservationGroupIds:
                    description: |-
                        조회할 예약 그룹 ID 목록

                        하나 이상의 예약 그룹 ID가 필요합니다.
                    type: array
                    minItems: 1
                    items:
                        type: string
                        format: object-id
                startDateTimeUtc:
                    description: |-
                        조회 범위 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.open.GetReservationSlotsByGroupsQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        예약 그룹·구역별 슬롯 목록

                        예약 그룹의 활성화된 각 구역마다 항목이 생성됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.ReservationGroupSlots'
        protos.open.GetReservationSlotsByProductQuery:
            type: object
            required:
                - startDateUtc
                - endDateUtc
            properties:
                endDateUtc:
                    description: |-
                        조회 범위 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                requestedProductOptionIds:
                    description: |-
                        조회할 상품 옵션 ID 목록

                        상품 옵션이 연결된 예약 그룹 중 대표 예약 그룹을 선택하는 데 사용됩니다. 이 목록에서 연결된 예약 그룹을 찾지 못하고 `requestedProductOptionIdsOfPromotion`에서도 연결된 예약 그룹을 찾지 못하면 기본 예약 그룹을 사용합니다.
                    type: array
                    items:
                        type: string
                        format: object-id
                requestedProductOptionIdsOfPromotion:
                    description: |-
                        프로모션 시술 옵션 ID 목록

                        Deprecated. 대체 필드: `requestedProductOptionIds`. 이 목록에서 연결된 예약 그룹을 찾지 못하고 `requestedProductOptionIds`에서도 연결된 예약 그룹을 찾지 못하면 기본 예약 그룹을 사용합니다.
                    deprecated: true
                    type: array
                    items:
                        type: string
                        format: object-id
                startDateUtc:
                    description: |-
                        조회 범위 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.open.GetReservationSlotsByScheduleIdQuery:
            type: object
            required:
                - scheduleId
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                endDateTimeUtc:
                    description: |-
                        조회 범위 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                scheduleId:
                    description: 스케줄 ID
                    type: string
                    format: uuid
                startDateTimeUtc:
                    description: |-
                        조회 범위 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.open.GetReservationSlotsByScheduleIdQueryV2:
            type: object
            required:
                - scheduleId
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                endDateTimeUtc:
                    description: |-
                        조회 범위 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                scheduleId:
                    description: 슬롯을 조회할 스케줄 ID
                    type: string
                    format: uuid
                startDateTimeUtc:
                    description: |-
                        조회 범위 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.open.GetReservationSlotsByScheduleIdQueryV2Response:
            type: object
            properties:
                data:
                    description: |-
                        예약 일정별 슬롯 목록

                        스케줄에 여러 예약 일정이 있으면 예약 일정마다 항목이 생성됩니다. 점유 리소스가 없는 기존 예약은 기존 예약 정보 기준으로 한 개 항목이 생성됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.ReservationGroupOccupiedResourceSlot'
        protos.open.GetReservationSlotsQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 예약 슬롯 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.ReservationSlot'
        protos.open.GetReservationTimeSlotsByVisitorIdQuery:
            type: object
            required:
                - dateTimeRangeUtc
                - visitorId
            properties:
                available:
                    description: |-
                        슬롯 가용 여부 필터

                        `true`이면 가용한 슬롯만 조회하고, `false`이면 가용하지 않은 슬롯만 조회합니다. 생략하면 모든 슬롯을 조회합니다.
                    type: boolean
                dateTimeRangeUtc:
                    description: 슬롯을 조회할 시간 범위
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                requestedProcedureOptionIds:
                    description: 예약 희망 시술 옵션 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                requestedProcedureTicketIds:
                    description: 예약 희망 시술 티켓 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                reservationConsultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                reservationRuleId:
                    description: |-
                        예약 규칙 ID

                        생략하면 기본 예약 규칙을 평가하여 슬롯을 조회합니다.
                    type: string
                    format: object-id
                reservationSedationRequired:
                    description: 수면마취 필요 여부
                    type: boolean
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
        protos.open.GetReservationTimeSlotsByVisitorIdQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 시간 슬롯 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.reservation_time_slot.ReservationTimeSlot'
        protos.open.GetReservationTimeSlotsQuery:
            type: object
            required:
                - dateTimeRangeUtc
            properties:
                available:
                    description: |-
                        슬롯 가용 여부 필터

                        `true`이면 가용한 슬롯만 조회하고, `false`이면 가용하지 않은 슬롯만 조회합니다. 생략하면 모든 슬롯을 조회합니다.
                    type: boolean
                dateTimeRangeUtc:
                    description: 슬롯을 조회할 시간 범위
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                requestedProcedureOptionIds:
                    description: 예약 희망 시술 옵션 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                requestedProcedureTicketIds:
                    description: 예약 희망 시술 티켓 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                reservationConsultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                reservationRuleId:
                    description: |-
                        예약 규칙 ID

                        생략하면 기본 예약 규칙을 평가하여 슬롯을 조회합니다.
                    type: string
                    format: object-id
                reservationSedationRequired:
                    description: 수면마취 필요 여부
                    type: boolean
                visitorCategoryIds:
                    description: 내원객 고객 분류 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorIsNew:
                    description: 내원객 신환 여부
                    type: boolean
                visitorLanguageCode:
                    description: |-
                        내원객 언어 코드

                        locale code를 사용합니다.
                    type: string
                visitorNationalityCode:
                    description: |-
                        내원객 국적 코드

                        ISO 3166-1 alpha-2 국가 코드입니다.
                    type: string
        protos.open.GetReservationTimeSlotsQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 시간 슬롯 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.reservation_time_slot.ReservationTimeSlot'
        protos.open.GetSchedulesByFlowStepQuery:
            type: object
            required:
                - flowStep
                - reservationStartDateTimeUtcFrom
                - reservationStartDateTimeUtcTo
            properties:
                flowStep:
                    description: |
                        조회할 내원 단계

                        `FLOW_STATUS_UNSPECIFIED`는 조회 조건으로 사용할 수 없습니다.

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `RESERVED` | 예약됨 |
                        | `RECEPTION` | 접수 |
                        | `CONSULTATION_WAITING` | 상담 대기 |
                        | `CONSULTATION` | 상담 |
                        | `PROCEDURE_WAITING` | 시술 대기 |
                        | `PROCEDURE` | 시술 |
                        | `PROCEDURE_DONE` | 귀가 대기 |
                        | `COMPLETED` | 귀가 |
                    type: string
                    enum:
                        - FLOW_STATUS_UNSPECIFIED
                        - RESERVED
                        - RECEPTION
                        - CONSULTATION_WAITING
                        - CONSULTATION
                        - PROCEDURE_WAITING
                        - PROCEDURE
                        - PROCEDURE_DONE
                        - COMPLETED
                reservationStartDateTimeUtcFrom:
                    description: |-
                        예약 시작 일시 조회 범위 시작

                        UTC 기준 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다. 이 일시 이후에 시작되는 스케줄을 조회합니다.
                    type: string
                    format: date-time
                reservationStartDateTimeUtcTo:
                    description: |-
                        예약 시작 일시 조회 범위 종료

                        UTC 기준 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다. 이 일시 이전에 시작되는 스케줄을 조회합니다.
                    type: string
                    format: date-time
        protos.open.GetSchedulesByFlowStepQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 조건에 맞는 삭제되지 않은 스케줄 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleContract'
        protos.open.GetTicketBundlesQuery:
            type: object
            required:
                - visitorId
            properties:
                visitorId:
                    description: 시술권 묶음을 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.open.GetVisitorQuestionnaireQuery:
            type: object
            required:
                - visitorId
            properties:
                visitorId:
                    description: 초진 설문지를 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.open.GetVisitorQuestionnaireQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        초진 설문지 조회 결과

                        내원객 기본 정보와 설문지 페이지 목록을 포함합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.GetQuestionnaireLagacyQueryResponse'
        protos.open.OccupiedReservationGroupResource:
            type: object
            required:
                - reservationGroupId
                - zoneId
            properties:
                doctor:
                    description: |-
                        담당 의사

                        현재 공개 예약 생성·수정 요청에서는 이 값을 사용하지 않습니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Doctor'
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                zoneId:
                    description: 점유할 구역 ID
                    type: string
                    format: object-id
        protos.open.OccupiedResource:
            type: object
            required:
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                endDateTimeUtc:
                    description: |-
                        점유 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                startDateTimeUtc:
                    description: |-
                        점유 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
            oneOf:
                - properties:
                    reservationGroup:
                        description: 예약 그룹 기반 예약 일정 설정
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OccupiedReservationGroupResource'
                  required:
                    - reservationGroup
                  title: 예약 그룹 기반 예약 일정 설정
                  type: object
        protos.open.OpenAddProductOptionCommand:
            oneOf:
                - $ref: '#/components/schemas/protos.open.OpenAddProductOptionCommand.SINGLE'
                - $ref: '#/components/schemas/protos.open.OpenAddProductOptionCommand.GROUP'
                - $ref: '#/components/schemas/protos.open.OpenAddProductOptionCommand.CONSULTATION'
            discriminator:
                mapping:
                    CONSULTATION: '#/components/schemas/protos.open.OpenAddProductOptionCommand.CONSULTATION'
                    GROUP: '#/components/schemas/protos.open.OpenAddProductOptionCommand.GROUP'
                    SINGLE: '#/components/schemas/protos.open.OpenAddProductOptionCommand.SINGLE'
                propertyName: type
        protos.open.OpenAddProductOptionCommand.CONSULTATION:
            title: CONSULTATION
            description: '`type` = `CONSULTATION`'
            type: object
            required:
                - productId
                - title
                - description
                - type
                - consultationOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: CONSULTATION
                    enum:
                        - CONSULTATION
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    consultationOptionConfiguration:
                        description: |-
                            상담 옵션 구성

                            `type`이 `CONSULTATION`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionConsultationConfiguration'
                  required:
                    - consultationOptionConfiguration
                  title: |-
                    상담 옵션 구성

                    `type`이 `CONSULTATION`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - singleOptionConfiguration
                    properties:
                        singleOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - groupOptionConfiguration
                    properties:
                        groupOptionConfiguration: {}
        protos.open.OpenAddProductOptionCommand.GROUP:
            title: GROUP
            description: '`type` = `GROUP`'
            type: object
            required:
                - productId
                - title
                - description
                - type
                - groupOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    groupOptionConfiguration:
                        description: |-
                            그룹 옵션 구성

                            `type`이 `GROUP`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionGroupConfiguration'
                  required:
                    - groupOptionConfiguration
                  title: |-
                    그룹 옵션 구성

                    `type`이 `GROUP`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - singleOptionConfiguration
                    properties:
                        singleOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - consultationOptionConfiguration
                    properties:
                        consultationOptionConfiguration: {}
        protos.open.OpenAddProductOptionCommand.SINGLE:
            title: SINGLE
            description: '`type` = `SINGLE`'
            type: object
            required:
                - productId
                - title
                - description
                - type
                - singleOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    singleOptionConfiguration:
                        description: |-
                            단일 옵션 구성

                            `type`이 `SINGLE`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionSingleConfiguration'
                  required:
                    - singleOptionConfiguration
                  title: |-
                    단일 옵션 구성

                    `type`이 `SINGLE`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - groupOptionConfiguration
                    properties:
                        groupOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - consultationOptionConfiguration
                    properties:
                        consultationOptionConfiguration: {}
        protos.open.OpenChangeFlowStepCommand:
            type: object
            required:
                - scheduleId
                - step
            properties:
                scheduleId:
                    description: 스케줄 ID
                    type: string
                    format: object-id
                step:
                    description: |
                        변경할 진료 단계

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `RESERVED` | 예약됨 |
                        | `RECEPTION` | 접수 |
                        | `CONSULTATION_WAITING` | 상담 대기 |
                        | `CONSULTATION` | 상담 |
                        | `PROCEDURE_WAITING` | 시술 대기 |
                        | `PROCEDURE` | 시술 |
                        | `PROCEDURE_DONE` | 귀가 대기 |
                        | `COMPLETED` | 귀가 |
                    type: string
                    enum:
                        - FLOW_STATUS_UNSPECIFIED
                        - RESERVED
                        - RECEPTION
                        - CONSULTATION_WAITING
                        - CONSULTATION
                        - PROCEDURE_WAITING
                        - PROCEDURE
                        - PROCEDURE_DONE
                        - COMPLETED
        protos.open.OpenCreateOccupiedTimeCommand:
            type: object
            required:
                - startDateTimeUtc
                - endDateTimeUtc
                - zoneId
                - reservationGroupId
            properties:
                endDateTimeUtc:
                    description: |-
                        점유 종료 일시

                        오프셋이 포함된 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 문자열을 전달합니다. `startDateTimeUtc`보다 이후여야 하며, 같은 날짜 안에서 24시간 미만이어야 합니다.
                    type: string
                    format: date-time
                memo:
                    description: |-
                        시간 점유 메모

                        생성된 시간 점유에 저장되는 메모입니다.
                    type: string
                reservationGroupId:
                    description: |-
                        시간을 점유할 예약 그룹 ID

                        존재하는 예약 그룹 ID여야 합니다.
                    type: string
                    format: object-id
                startDateTimeUtc:
                    description: |-
                        점유 시작 일시

                        오프셋이 포함된 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 문자열을 전달합니다.
                    type: string
                    format: date-time
                zoneId:
                    description: |-
                        시간을 점유할 구역 ID

                        존재하는 구역 ID여야 합니다.
                    type: string
                    format: object-id
        protos.open.OpenCreateOccupiedTimeCommandResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        시간 점유 생성 결과

                        생성된 시간 점유 ID를 포함합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenCreateOccupiedTimeCommandResponseData'
        protos.open.OpenCreateOccupiedTimeCommandResponseData:
            type: object
            required:
                - occupiedTimeId
            properties:
                occupiedTimeId:
                    description: 생성된 시간 점유 ID
                    type: string
                    format: object-id
        protos.open.OpenCreateProductCommand:
            type: object
            required:
                - title
                - description
                - closed
            properties:
                title:
                    description: 상품 이름
                    type: string
                description:
                    description: 상품 설명
                    type: string
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        뱃지 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `NEW` | 신규 |
                        | `POPULAR` | 인기 |
                        | `RECOMMENDED` | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                categoryIds:
                    description: 상품 카테고리 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                caution:
                    description: 주의사항
                    type: string
                closed:
                    description: |-
                        판매 중단 여부

                        `true`이면 판매가 중단된 상태입니다.
                    type: boolean
                contentImageUrl:
                    description: 내용 이미지 URL
                    type: string
                    format: uri
                coverImageUrl:
                    description: 커버 이미지 URL
                    type: string
                    format: uri
                displayPeriod:
                    description: |-
                        상품 노출 기간

                        설정하지 않으면 상시 노출됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                isEvent:
                    description: |-
                        이벤트 여부

                        `true`이면 이벤트 상품으로 표시됩니다.
                    type: boolean
                offeringPeriod:
                    description: |-
                        상품 제공 기간

                        설정하지 않으면 상시 제공됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                targetCountryCodes:
                    description: |-
                        노출 대상 국가 코드 목록

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 그 외 국가는 `ETC`로 전달합니다.
                    type: array
                    items:
                        type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`, `caution`, `coverImageUrl`, `contentImageUrl`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.open.OpenCreateProductCommandResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 생성된 상품 ID
                    type: string
                    format: object-id
        protos.open.OpenDeleteProductCommand:
            type: object
            required:
                - productId
            properties:
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
        protos.open.OpenGetCategoriesQuery:
            type: object
            properties:
                opened:
                    description: |-
                        노출 여부

                        Open API에서는 요청값과 관계없이 노출되는 카테고리만 조회합니다.
                    type: boolean
                sort:
                    description: |-
                        정렬 기준

                        정렬 가능한 필드는 `order`입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Sort'
        protos.open.OpenGetLinkedProductsQuery:
            type: object
            required:
                - reservationGroupId
            properties:
                reservationGroupId:
                    description: 연결된 상품을 조회할 예약 그룹 ID
                    type: string
        protos.open.OpenGetLinkedProductsQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 그룹에 연결된 상품 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenLinkableProductContract'
        protos.open.OpenGetMachinesQuery:
            type: object
            properties:
                name:
                    description: |-
                        이름 검색 키워드

                        기기 이름으로 부분 검색합니다. 생략하면 전체를 조회합니다.
                    type: string
        protos.open.OpenGetMachinesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        기기 목록

                        삭제된 항목은 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenMachine'
        protos.open.OpenGetMedicalServicesQuery:
            type: object
            properties:
                title:
                    description: |-
                        이름 검색 키워드

                        진료항목 이름으로 부분 검색합니다. 생략하면 전체를 조회합니다.
                    type: string
        protos.open.OpenGetMedicalServicesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        진료항목 목록

                        삭제된 항목은 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenMedicalService'
        protos.open.OpenGetMedicinesQuery:
            type: object
            properties:
                name:
                    description: |-
                        이름 검색 키워드

                        약물 이름으로 부분 검색합니다. 생략하면 전체를 조회합니다.
                    type: string
        protos.open.OpenGetMedicinesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        약물 목록

                        삭제된 항목은 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenMedicine'
        protos.open.OpenGetPrepaidCardChargingEventStatisticsQuery:
            type: object
            required:
                - chargedDateTimeUtcFrom
                - chargedDateTimeUtcTo
            properties:
                amountTypes:
                    description: 금액 유형 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - PrepaidCardChargingEventAmountType_UNKNOWN
                            - BALANCE
                            - POINT
                assigneeIds:
                    description: 담당자 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                chargedDateTimeUtcFrom:
                    description: |-
                        선불카드 내역 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                chargedDateTimeUtcTo:
                    description: |-
                        선불카드 내역 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                chargingEventTypes:
                    description: 내역 유형 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - PrepaidCardChargingEventType_UNKNOWN
                            - PAYMENT
                            - PAYMENT_CANCEL
                            - REFUND
                            - CHARGE
                            - EXPIRATION
                            - SUBTRACT
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                ownerId:
                    description: 선불카드 소유자 내원객 ID 필터
                    type: string
                    format: object-id
                visitorId:
                    description: 내원객 ID 필터
                    type: string
                    format: object-id
        protos.open.OpenGetPrepaidCardChargingEventStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 선불카드 내역 통계 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenPrepaidCardChargingEventStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenGetProcedureTaskStatisticsQuery:
            type: object
            required:
                - completedDateTimeUtcFrom
                - completedDateTimeUtcTo
            properties:
                assigneeIds:
                    description: 담당자 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                completedDateTimeUtcFrom:
                    description: |-
                        시술 완료 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                completedDateTimeUtcTo:
                    description: |-
                        시술 완료 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                doctorIds:
                    description: 의사 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                medicineAndMachineIds:
                    description: 약품·기기 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                procedureIds:
                    description: 시술 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                productCategoryIds:
                    description: 상품 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                productIds:
                    description: 상품 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                productOptionIds:
                    description: 상품 옵션 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorCategoryIds:
                    description: 내원객 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorId:
                    description: 내원객 ID 필터
                    type: string
                    format: object-id
        protos.open.OpenGetProcedureTaskStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 시술 태스크 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenProcedureTaskStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenGetProceduresQuery:
            type: object
            properties:
                name:
                    description: |-
                        이름 검색 키워드

                        시술 이름으로 부분 검색합니다. 생략하면 전체를 조회합니다.
                    type: string
        protos.open.OpenGetProceduresQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        시술 목록

                        삭제된 항목은 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenProcedure'
        protos.open.OpenGetProductQuery:
            type: object
            required:
                - id
            properties:
                id:
                    description: 상품 ID
                    type: string
                    format: object-id
        protos.open.OpenGetProductsQuery:
            type: object
            properties:
                title:
                    description: 상품 이름 검색 키워드
                    type: string
                categoryId:
                    description: 상품 카테고리 ID
                    type: string
                    format: object-id
                deleted:
                    description: |-
                        삭제 여부 요청값

                        Open API에서는 요청값과 관계없이 삭제되지 않은 상품만 조회합니다.
                    type: boolean
                includePromotions:
                    description: |-
                        프로모션 포함 여부

                        Deprecated.
                    deprecated: true
                    type: boolean
                isEvent:
                    description: |-
                        이벤트 상품 필터

                        `true`면 이벤트 상품만, `false`면 이벤트 상품이 아닌 상품만 조회합니다. 값을 생략하면 이벤트 여부로 필터링하지 않습니다.
                    type: boolean
                optionIds:
                    description: |-
                        필터링할 상품 옵션 ID 목록

                        전달하면 요청한 상품 옵션 ID를 하나 이상 포함한 상품만 조회합니다. 생략하거나 빈 목록으로 전달하면 상품 옵션 ID 조건을 적용하지 않습니다.
                    type: array
                    items:
                        type: string
                        format: object-id
                targetCountryCode:
                    description: |-
                        타겟 국가 코드

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 그 외 국가는 `ETC`로 전달합니다.
                    type: string
        protos.open.OpenGetPurchaseItemStatisticsQuery:
            type: object
            required:
                - createdDateTimeUtcFrom
                - createdDateTimeUtcTo
            properties:
                assigneeIds:
                    description: 담당자 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                createdDateTimeUtcFrom:
                    description: |-
                        구매 항목 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                createdDateTimeUtcTo:
                    description: |-
                        구매 항목 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                productCategoryIds:
                    description: 상품 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                productIds:
                    description: 상품 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                productOptionIds:
                    description: 상품 옵션 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                purchaseItemTypes:
                    description: 구매 항목 유형 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - PurchaseItemType_UNSPECIFIED
                            - PRODUCT_OPTION
                            - ETCETRA_PRODUCT
                            - PREPAID_CARD_PRODUCT
                purchaseStatuses:
                    description: 구매 상태 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - PURCHASE_STATUS_UNSPECIFIED
                            - REFUNDED
                            - PARTIALLY_REFUNDED
                            - ACCEPTED
                            - PAID
                            - INITIALIZED
                taxCharged:
                    description: 세금 부과 여부 필터
                    type: boolean
                visitorCategoryIds:
                    description: 내원객 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorId:
                    description: 내원객 ID 필터
                    type: string
                    format: object-id
        protos.open.OpenGetPurchaseItemStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenPurchaseItemStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenGetScheduleStatisticsQuery:
            type: object
            properties:
                consultationDoctorIds:
                    description: 상담 의사 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                counselorIds:
                    description: 상담사 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                nationalities:
                    description: 국적 목록 필터
                    type: array
                    items:
                        type: string
                reservationStartDateTimeUtcFrom:
                    description: |-
                        예약 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                reservationStartDateTimeUtcTo:
                    description: |-
                        예약 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                reservationStatuses:
                    description: 예약 상태 목록 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - RESERVATION_STATUS_UNSPECIFIED
                            - RESERVED
                            - CANCELED
                            - NO_SHOW
                            - IN_PROGRESS
                            - COMPLETED
                reservedDateTimeUtcFrom:
                    description: |-
                        예약 생성 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                reservedDateTimeUtcTo:
                    description: |-
                        예약 생성 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                visitorCategoryIds:
                    description: 내원객 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorIds:
                    description: 내원객 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
        protos.open.OpenGetScheduleStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 예약 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenScheduleStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenGetTransactionStatisticsQuery:
            type: object
            required:
                - createdTimeUtcFrom
                - createdTimeUtcTo
            properties:
                createdTimeUtcFrom:
                    description: |-
                        결제 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                createdTimeUtcTo:
                    description: |-
                        결제 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                paymentAmountFrom:
                    description: 결제금액 조회 최솟값 필터
                    type: integer
                    format: int32
                paymentAmountTo:
                    description: 결제금액 조회 최댓값 필터
                    type: integer
                    format: int32
                paymentType:
                    description: 결제 수단 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - TransactionPaymentType_UNSPECIFIED
                            - CASH
                            - CARD
                            - PREPAID_CARD
                            - PLATFORM
                            - TRANSFER
                            - EASY_PAY
                            - MEDICAL_LOAN
                purchaseAssigneeIds:
                    description: 담당자 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                statuses:
                    description: 결제 상태 필터
                    type: array
                    items:
                        type: string
                        enum:
                            - TransactionStatus_UNSPECIFIED
                            - REQUESTED
                            - APPROVED
                            - CANCELED
                            - SPENT
                            - FAILED
                taxCharged:
                    description: 과세 여부 필터
                    type: boolean
                visitorCategoryIds:
                    description: 내원객 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorId:
                    description: 내원객 ID 필터
                    type: string
                    format: object-id
        protos.open.OpenGetTransactionStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 결제 통계 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenTransactionStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenGetVisitorStatisticsQuery:
            type: object
            properties:
                cursor:
                    description: |-
                        다음 페이지 커서

                        이전 응답의 `nextCursor` 값을 전달합니다. `limit` 없이 단독으로 전송할 수 없습니다.
                    type: string
                firstVisitedDateTimeUtcFrom:
                    description: |-
                        최초 내원 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                firstVisitedDateTimeUtcTo:
                    description: |-
                        최초 내원 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                isCompletedProcedureTask:
                    description: 시술 태스크 완료 여부 필터
                    type: boolean
                isCompletedPurchase:
                    description: 구매 완료 여부 필터
                    type: boolean
                lastVisitedDateTimeUtcFrom:
                    description: |-
                        최근 내원 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                lastVisitedDateTimeUtcTo:
                    description: |-
                        최근 내원 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                limit:
                    description: |-
                        페이지당 최대 행 수

                        1 이상이어야 합니다. 최대값은 5000입니다. 미전송 시 전체를 반환합니다.
                    type: integer
                    format: int32
                    minimum: 1
                    maximum: 5000
                visitorCategoryIds:
                    description: 내원객 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorCreatedDateTimeUtcFrom:
                    description: |-
                        내원객 등록 일시 조회 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                visitorCreatedDateTimeUtcTo:
                    description: |-
                        내원객 등록 일시 조회 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T23:59:59Z`
                    type: string
                    format: date-time
                visitorFunnelCategoryIds:
                    description: 내원객 유입 경로 카테고리 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorFunnelIds:
                    description: 내원객 유입 경로 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorIds:
                    description: 내원객 ID 목록 필터
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorNationalities:
                    description: 내원객 국적 목록 필터
                    type: array
                    items:
                        type: string
        protos.open.OpenGetVisitorStatisticsQueryResponse:
            type: object
            properties:
                data:
                    description: 내원객 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenVisitorStatisticsItem'
                nextCursor:
                    description: |-
                        다음 페이지 커서

                        마지막 페이지이면 반환되지 않습니다.
                    type: string
                totalCount:
                    description: |-
                        전체 행 수

                        첫 페이지(`cursor` 미전송)에서만 반환됩니다.
                    type: integer
                    format: int32
        protos.open.OpenLinkableProductContract:
            type: object
            required:
                - productId
                - title
            properties:
                title:
                    description: 상품명
                    type: string
                categoryNames:
                    description: 상품이 속한 카테고리명 목록
                    type: array
                    items:
                        type: string
                linkedReservationGroupId:
                    description: 현재 연결된 예약 그룹 ID. 연결된 예약 그룹이 없으면 반환되지 않습니다.
                    type: string
                options:
                    description: 상품 옵션 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenLinkableProductOptionContract'
                productId:
                    description: 상품 ID
                    type: string
        protos.open.OpenLinkableProductOptionContract:
            type: object
            required:
                - productId
                - productTitle
                - optionId
                - optionName
            properties:
                categoryNames:
                    description: 상품이 속한 카테고리명 목록
                    type: array
                    items:
                        type: string
                linkedReservationGroupId:
                    description: 현재 연결된 예약 그룹 ID. 연결된 예약 그룹이 없으면 반환되지 않습니다.
                    type: string
                optionId:
                    description: 상품 옵션 ID
                    type: string
                optionName:
                    description: 상품 옵션명
                    type: string
                productId:
                    description: 상품 ID
                    type: string
                productTitle:
                    description: 상품명
                    type: string
        protos.open.OpenMachine:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 기기 이름
                    type: string
                id:
                    description: 기기 ID
                    type: string
                    format: object-id
        protos.open.OpenMedicalService:
            type: object
            required:
                - id
                - title
                - status
                - configuration
                - draftedDateTimeUtc
                - updatedDateTimeUtc
            properties:
                title:
                    description: 진료항목 이름
                    type: string
                description:
                    description: 진료항목 설명
                    type: string
                caution:
                    description: 주의사항
                    type: string
                configuration:
                    description: |-
                        진료항목 설정

                        코드, 시술, 기기, 약물, 단위, 급여 여부, 과세 유형이 포함됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceConfiguration'
                contributionConstant:
                    description: 기여 상수
                    type: integer
                    format: int32
                draftedDateTimeUtc:
                    description: |-
                        임시 저장 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                durationTime:
                    description: |-
                        소요 시간

                        단위는 분(minute)입니다.
                    type: number
                    format: double
                id:
                    description: 진료항목 ID
                    type: string
                    format: object-id
                priceAmount:
                    description: 가격 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                recommendedInterval:
                    description: |-
                        권장 간격

                        단위는 일(day)입니다.
                    type: integer
                    format: int32
                status:
                    description: |
                        진료항목 상태

                        진료항목 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `DRAFT` | 임시 저장 |
                        | `PUBLISHED` | 게시됨 |
                    type: string
                    enum:
                        - MedicalServiceStatus_UNKNOWN
                        - DRAFT
                        - PUBLISHED
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                updatedDateTimeUtc:
                    description: |-
                        수정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.open.OpenMedicine:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 약물 이름
                    type: string
                id:
                    description: 약물 ID
                    type: string
                    format: object-id
        protos.open.OpenPrepaidCardChargingEventStatisticsItem:
            type: object
            required:
                - chargingId
                - chargingType
                - chargingAmountType
                - chargedDateTimeUtc
                - ownerId
                - ownerChartNumber
                - prepaidCardId
                - prepaidCardTitle
                - visitorId
                - visitorChartNumber
            properties:
                assignees:
                    description: 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenStatisticsAssignee'
                chargedDateTimeUtc:
                    description: 선불카드 내역 발생 일시
                    type: string
                    format: date-time
                chargingAmountType:
                    description: 선불카드 금액 유형
                    type: string
                    enum:
                        - PrepaidCardChargingEventAmountType_UNKNOWN
                        - BALANCE
                        - POINT
                chargingAmountV2:
                    description: 내역 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                chargingId:
                    description: 선불카드 내역 식별자
                    type: string
                chargingType:
                    description: 선불카드 내역 유형
                    type: string
                    enum:
                        - PrepaidCardChargingEventType_UNKNOWN
                        - PAYMENT
                        - PAYMENT_CANCEL
                        - REFUND
                        - CHARGE
                        - EXPIRATION
                        - SUBTRACT
                memo:
                    description: 메모
                    type: string
                ownerChartNumber:
                    description: 선불카드 소유자 차트 번호
                    type: string
                ownerId:
                    description: 선불카드 소유자 내원객 ID
                    type: string
                    format: object-id
                prepaidCardId:
                    description: 선불카드 ID
                    type: string
                    format: object-id
                prepaidCardTitle:
                    description: 선불카드 이름
                    type: string
                purchaseItems:
                    description: 관련 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenPrepaidCardChargingEventStatisticsPurchaseItem'
                purchaseMemo:
                    description: 결제 메모
                    type: string
                referrerAccount:
                    description: 소개자 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerAccount'
                referrerUnregisteredName:
                    description: 미등록 추천인명
                    type: string
                referrerVisitor:
                    description: 추천 내원객 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerVisitor'
                totalPurchaseItemPriceV2:
                    description: 구매 항목 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                visitorAgreementAdvertisements:
                    description: 내원객 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 내원객 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorNationality:
                    description: 내원객 국적
                    type: string
        protos.open.OpenPrepaidCardChargingEventStatisticsPurchaseItem:
            type: object
            required:
                - itemId
                - title
            properties:
                title:
                    description: 구매 항목 이름
                    type: string
                itemId:
                    description: 구매 항목 ID
                    type: string
                    format: object-id
        protos.open.OpenProcedure:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 시술 이름
                    type: string
                id:
                    description: 시술 ID
                    type: string
                    format: object-id
        protos.open.OpenProcedureTaskStatisticsItem:
            type: object
            required:
                - scheduleId
                - taskSequence
                - completedDateTimeUtc
                - paymentRequired
                - visitorId
                - visitorChartNumber
            properties:
                title:
                    description: 시술 태스크 제목
                    type: string
                anesthesiaType:
                    description: |
                        마취 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SEDATION` | 수면 마취 |
                        | `SPRAY` | 스프레이 마취 |
                        | `CREAM` | 크림 마취 |
                        | `DENTAL` | 치과 마취 |
                        | `GAS` | 가스 마취 |
                        | `ICE` | 얼음 마취 |
                        | `CREAM_DENTAL` | 크림+치과 복합 마취 |
                    type: string
                    enum:
                        - ANESTHESIA_TYPE_UNSPECIFIED
                        - SEDATION
                        - SPRAY
                        - CREAM
                        - DENTAL
                        - GAS
                        - ICE
                        - CREAM_DENTAL
                assigneeNames:
                    description: 담당자 이름 목록
                    type: array
                    items:
                        type: string
                completedDateTimeUtc:
                    description: |-
                        시술 완료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                counselorNames:
                    description: 상담사 이름 목록
                    type: array
                    items:
                        type: string
                doctorAssignedDateTimeUtc:
                    description: 의사 배정 일시
                    type: string
                    format: date-time
                doctorCallDateTimeUtc:
                    description: 의사 호출 일시
                    type: string
                    format: date-time
                doctorNames:
                    description: 의사 이름 목록
                    type: array
                    items:
                        type: string
                isFirstProcedureSchedule:
                    description: 첫 시술 예약 여부
                    type: boolean
                machineNames:
                    description: 기기 이름 목록
                    type: array
                    items:
                        type: string
                medicalServiceCode:
                    description: 진료항목 코드
                    type: string
                medicalServiceContributionConstant:
                    description: 진료항목 기여 상수
                    type: integer
                    format: int32
                medicalServiceDurationTime:
                    description: 진료항목 소요 시간(분)
                    type: integer
                    format: int32
                medicalServiceName:
                    description: 진료항목 이름
                    type: string
                medicalServiceUnit:
                    description: 진료항목 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
                medicineNames:
                    description: 약품 이름 목록
                    type: array
                    items:
                        type: string
                paymentRequired:
                    description: 결제 필요 여부
                    type: boolean
                procedureName:
                    description: 시술 이름
                    type: string
                procedureTaskId:
                    description: |-
                        시술 태스크 ID

                        `{scheduleId}:{taskSequence}` 형식의 고유 식별자입니다.
                    type: string
                productCategoryNames:
                    description: 상품 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                productOptionTitle:
                    description: 상품 옵션 제목
                    type: string
                productTitle:
                    description: 상품 제목
                    type: string
                referrerAccount:
                    description: 소개자 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerAccount'
                roomAssignedDateTimeUtc:
                    description: 시술실 배정 일시
                    type: string
                    format: date-time
                roomTitle:
                    description: 시술실 제목
                    type: string
                scheduleId:
                    description: 예약 ID
                    type: string
                    format: object-id
                taskSequence:
                    description: 시술 태스크 순번
                    type: integer
                    format: int32
                ticketPriceV2:
                    description: 시술권 결제액
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                unit:
                    description: 시술 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
                visitorAgreementAdvertisements:
                    description: 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorNationality:
                    description: 내원객 국적
                    type: string
                zoneTitle:
                    description: 구역 제목
                    type: string
        protos.open.OpenProductOptionConsultationConfiguration:
            type: object
            properties:
                displayChannels:
                    description: |
                        노출 채널 목록

                        노출 채널

                        | 값 | 의미 |
                        | --- | --- |
                        | `HOMEPAGE` | 병원 홈페이지 채널 |
                        | `GANGNAMUNNI` | 강남언니 채널 |
                        | `KOS_CONNECT` | KOS Connect 채널 |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
        protos.open.OpenProductOptionGroupComposition:
            type: object
            required:
                - medicalServiceId
                - price
                - count
            properties:
                count:
                    description: 횟수
                    type: integer
                    format: int32
                medicalServiceId:
                    description: 진료항목 ID
                    type: string
                    format: object-id
                price:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
        protos.open.OpenProductOptionGroupConfiguration:
            type: object
            required:
                - compositions
                - frequentlyUsedOption
                - price
            properties:
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        뱃지 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `NEW` | 신규 |
                        | `POPULAR` | 인기 |
                        | `RECOMMENDED` | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                compositions:
                    description: |-
                        구성 목록

                        하나 이상의 진료항목 구성이 필요합니다.
                    type: array
                    minItems: 1
                    items:
                        $ref: '#/components/schemas/protos.open.OpenProductOptionGroupComposition'
                displayChannels:
                    description: |
                        노출 채널 목록

                        노출 채널

                        | 값 | 의미 |
                        | --- | --- |
                        | `HOMEPAGE` | 병원 홈페이지 채널 |
                        | `GANGNAMUNNI` | 강남언니 채널 |
                        | `KOS_CONNECT` | KOS Connect 채널 |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 사용하는 옵션 여부
                    type: boolean
                price:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
        protos.open.OpenProductOptionSingleConfiguration:
            type: object
            required:
                - medicalServiceId
                - price
                - count
                - frequentlyUsedOption
            properties:
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        뱃지 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `NEW` | 신규 |
                        | `POPULAR` | 인기 |
                        | `RECOMMENDED` | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                count:
                    description: 횟수
                    type: integer
                    format: int32
                displayChannels:
                    description: |
                        노출 채널 목록

                        노출 채널

                        | 값 | 의미 |
                        | --- | --- |
                        | `HOMEPAGE` | 병원 홈페이지 채널 |
                        | `GANGNAMUNNI` | 강남언니 채널 |
                        | `KOS_CONNECT` | KOS Connect 채널 |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 사용하는 옵션 여부
                    type: boolean
                medicalServiceId:
                    description: 진료항목 ID
                    type: string
                    format: object-id
                price:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
        protos.open.OpenPurchaseItemCost:
            type: object
            required:
                - totalAmount
                - suppliedPriceAmount
                - vatAmount
            properties:
                suppliedPriceAmount:
                    description: 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalAmount:
                    description: 잔존 가치 금액 또는 최종가
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                vatAmount:
                    description: 부가세
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
        protos.open.OpenPurchaseItemStatisticsItem:
            type: object
            required:
                - purchaseId
                - createdDateTimeUtc
                - purchaseItemType
                - purchaseStatus
                - taxCharged
                - visitorId
                - visitorChartNumber
            properties:
                assignees:
                    description: 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenStatisticsAssignee'
                basePriceAmountV2:
                    description: 할인 기준가
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                cost:
                    description: 구매 비용
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenPurchaseItemCost'
                counselorNames:
                    description: 상담사 이름 목록
                    type: array
                    items:
                        type: string
                createdDateTimeUtc:
                    description: |-
                        구매 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                etceteraProductCategoryName:
                    description: 기타 상품 카테고리 이름
                    type: string
                etceteraProductName:
                    description: 기타 상품 이름
                    type: string
                firstPriceAmount:
                    description: 정상가
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                prepaidCardName:
                    description: 선불카드 상품 이름
                    type: string
                procedureConfigurations:
                    description: 시술 구성 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenPurchaseProcedureConfiguration'
                productCategoryNames:
                    description: 상품 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                productOptionMachineNames:
                    description: 상품 옵션의 기기 이름 목록
                    type: array
                    items:
                        type: string
                productOptionMedicineNames:
                    description: 상품 옵션의 약품 이름 목록
                    type: array
                    items:
                        type: string
                productOptionProcedureNames:
                    description: 상품 옵션의 시술 이름 목록
                    type: array
                    items:
                        type: string
                productOptionTitle:
                    description: 상품 옵션 제목
                    type: string
                productTitle:
                    description: 상품 제목
                    type: string
                purchaseId:
                    description: 구매 ID
                    type: string
                    format: object-id
                purchaseItemType:
                    description: |
                        구매 항목 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PRODUCT_OPTION` | 일반 상품 옵션 |
                        | `ETCETRA_PRODUCT` | 기타 상품 |
                        | `PREPAID_CARD_PRODUCT` | 선불카드 상품 |
                    type: string
                    enum:
                        - PurchaseItemType_UNSPECIFIED
                        - PRODUCT_OPTION
                        - ETCETRA_PRODUCT
                        - PREPAID_CARD_PRODUCT
                purchaseStatus:
                    description: |
                        구매 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `REFUNDED` | 환불 |
                        | `PARTIALLY_REFUNDED` | 부분 환불 |
                        | `ACCEPTED` | 수납 완료 |
                        | `PAID` | 지불 수납 |
                        | `INITIALIZED` | 미수납 |
                    type: string
                    enum:
                        - PURCHASE_STATUS_UNSPECIFIED
                        - REFUNDED
                        - PARTIALLY_REFUNDED
                        - ACCEPTED
                        - PAID
                        - INITIALIZED
                referrerAccount:
                    description: 소개자 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerAccount'
                reservationFunnelCategoryName:
                    description: 예약 유입 경로 카테고리명
                    type: string
                reservationFunnelDetail:
                    description: 예약 유입 경로 상세
                    type: string
                reservationFunnelName:
                    description: 예약 유입 경로명
                    type: string
                taxCharged:
                    description: 세금 부과 여부
                    type: boolean
                visitorAgreementAdvertisements:
                    description: 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFirstPaymentDateTimeUtc:
                    description: 내원객 최초 결제 일시
                    type: string
                    format: date-time
                visitorFirstReservationDateTimeUtc:
                    description: 내원객 최초 예약 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorNationality:
                    description: 내원객 국적
                    type: string
                zoneName:
                    description: 구역명
                    type: string
        protos.open.OpenPurchaseMedicalService:
            type: object
            required:
                - name
                - code
            properties:
                name:
                    description: 진료항목 이름
                    type: string
                code:
                    description: 진료항목 코드
                    type: string
                contributionConstant:
                    description: 시술 기여 상수
                    type: integer
                    format: int32
                durationTime:
                    description: 시술 소요 시간(분)
                    type: integer
                    format: int32
                price:
                    description: 상품 옵션 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                unit:
                    description: 시술 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.open.OpenPurchaseProcedureConfiguration:
            type: object
            properties:
                finalUnit:
                    description: 최종 시술 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
                medicalService:
                    description: 진료항목 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenPurchaseMedicalService'
        protos.open.OpenRemoveProductOptionCommand:
            type: object
            required:
                - id
                - productId
            properties:
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
        protos.open.OpenReserveByVisitorIdCommandV2:
            type: object
            required:
                - visitorId
                - zoneId
                - occupiedResources
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                funnelDetail:
                    description: |-
                        상세 유입 경로

                        자유 텍스트로 전달합니다.
                    type: string
                occupiedResources:
                    description: |-
                        예약 일정 목록

                        하나 이상의 예약 일정이 필요합니다. 모든 항목의 예약 시작 일시는 같은 날짜여야 합니다.
                    type: array
                    minItems: 1
                    items:
                        $ref: '#/components/schemas/protos.open.OccupiedResource'
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure'
                reservationMemo:
                    description: 예약 메모
                    type: string
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                visitorId:
                    description: 예약을 생성할 기존 내원객 ID
                    type: string
                    format: object-id
                zoneId:
                    description: |-
                        접수 구역 ID

                        내원객이 방문할 구역의 ID입니다.
                    type: string
                    format: object-id
        protos.open.OpenReserveCommandV2:
            type: object
            required:
                - visitorName
                - zoneId
                - occupiedResources
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                funnelDetail:
                    description: |-
                        상세 유입 경로

                        자유 텍스트로 전달합니다.
                    type: string
                occupiedResources:
                    description: |-
                        예약 일정 목록

                        하나 이상의 예약 일정이 필요합니다. 모든 항목의 예약 시작 일시는 같은 날짜여야 합니다.
                    type: array
                    minItems: 1
                    items:
                        $ref: '#/components/schemas/protos.open.OccupiedResource'
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure'
                reservationMemo:
                    description: 예약 메모
                    type: string
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                visitorBirthDayUtc:
                    description: |-
                        예약할 내원객 생년월일

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다. 기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                    format: date-time
                visitorConnectedInformation:
                    description: |-
                        내원객 연동 정보

                        LINE 또는 강남언니 연동 정보입니다. 기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation'
                visitorEmail:
                    description: |-
                        예약할 내원객 이메일

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                    format: email
                visitorLanguage:
                    description: |-
                        예약할 내원객 언어

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다. 지원 목록: ko, ja, en, zh-CN, zh-yue, es, th, ru, id, ms, vi, mn, uz, nl, de, pt 등
                    type: string
                visitorName:
                    description: |-
                        예약할 내원객 이름

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                visitorNationality:
                    description: |-
                        예약할 내원객 국적

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPassportGivenNames:
                    description: |-
                        예약할 내원객 여권 영문 이름

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPassportNumber:
                    description: |-
                        예약할 내원객 여권 번호

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                visitorPassportSurname:
                    description: |-
                        예약할 내원객 여권 영문 성

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPhone:
                    description: |-
                        예약할 내원객 휴대폰 번호

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                visitorSnsInfo:
                    description: |-
                        예약할 내원객 SNS 정보

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.SnsInfo'
                zoneId:
                    description: |-
                        접수 구역 ID

                        내원객이 방문할 구역의 ID입니다.
                    type: string
                    format: object-id
        protos.open.OpenReserveCommandV2Response:
            type: object
            required:
                - scheduleId
            properties:
                scheduleId:
                    description: 생성된 스케줄 ID
                    type: string
                    format: uuid
        protos.open.OpenScheduleStatisticsItem:
            type: object
            required:
                - scheduleId
                - reservationStartDateTimeUtc
                - zoneTitle
                - reservationStatus
                - isFirstProcedureSchedule
                - reservationGroupTitle
                - visitorId
                - visitorChartNumber
            properties:
                consultationDoctorNames:
                    description: 상담 의사 이름 목록
                    type: array
                    items:
                        type: string
                consultationDwellTimeMinute:
                    description: 상담 진행 단계 체류 시간(분)
                    type: integer
                    format: int32
                consultationWaitingDwellTimeMinute:
                    description: 상담 대기 단계 체류 시간(분)
                    type: integer
                    format: int32
                counselorNames:
                    description: 상담사 이름 목록
                    type: array
                    items:
                        type: string
                durationMinute:
                    description: 예약 소요 시간(분)
                    type: integer
                    format: int32
                isFirstProcedureSchedule:
                    description: 첫 시술 예약 여부
                    type: boolean
                optionItemTotalPriceV2:
                    description: 내원 시 시술 결제 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                paymentTotalAmountV2:
                    description: 내원 시 실결제 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                procedureDoneDwellTimeMinute:
                    description: 귀가 대기 단계 체류 시간(분)
                    type: integer
                    format: int32
                procedureDwellTimeMinute:
                    description: 시술 진행 단계 체류 시간(분)
                    type: integer
                    format: int32
                procedureWaitingDwellTimeMinute:
                    description: 시술 대기 단계 체류 시간(분)
                    type: integer
                    format: int32
                receptionDateTimeUtc:
                    description: 접수 일시
                    type: string
                    format: date-time
                receptionDwellTimeMinute:
                    description: 접수 단계 체류 시간(분)
                    type: integer
                    format: int32
                referrerAccount:
                    description: 소개자 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerAccount'
                requestedCounselorName:
                    description: 요청 상담사 이름
                    type: string
                requestedDoctorName:
                    description: 요청 의사 이름
                    type: string
                requestedDoctorNames:
                    description: 요청 의사 이름 목록
                    type: array
                    items:
                        type: string
                requestedOptionProcedureNames:
                    description: 요청 시술 이름 목록
                    type: array
                    items:
                        type: string
                requestedOptionTitles:
                    description: 요청 상품 옵션 제목 목록
                    type: array
                    items:
                        type: string
                requestedProductCategoryNames:
                    description: 요청 상품 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                requestedProductOptionTotalPriceV2:
                    description: 희망시술 옵션 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                requestedProductTitles:
                    description: 요청 상품 제목 목록
                    type: array
                    items:
                        type: string
                reservationAssigneeName:
                    description: 담당 접수자 이름
                    type: string
                reservationFunnelCategoryName:
                    description: 예약 유입 경로 카테고리명
                    type: string
                reservationFunnelDetail:
                    description: 예약 유입 경로 상세
                    type: string
                reservationFunnelName:
                    description: 예약 유입 경로명
                    type: string
                reservationGroupOccupiedResources:
                    description: 예약 그룹 점유 리소스 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.OpenScheduleStatisticsReservationGroupOccupiedResource'
                reservationGroupTitle:
                    description: 예약 그룹 제목
                    type: string
                reservationMemo:
                    description: 예약 메모
                    type: string
                reservationStartDateTimeUtc:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다. 예: `2026-05-31T09:00:00Z`
                    type: string
                    format: date-time
                reservationStatus:
                    description: |
                        예약 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVED` | 예약됨 |
                        | `CANCELED` | 취소됨 |
                        | `NO_SHOW` | 노쇼 |
                        | `IN_PROGRESS` | 진행 중 |
                        | `COMPLETED` | 완료 |
                    type: string
                    enum:
                        - RESERVATION_STATUS_UNSPECIFIED
                        - RESERVED
                        - CANCELED
                        - NO_SHOW
                        - IN_PROGRESS
                        - COMPLETED
                reservedDateTimeUtc:
                    description: 예약 생성 일시
                    type: string
                    format: date-time
                scheduleId:
                    description: 예약 ID
                    type: string
                    format: object-id
                visitorAgreementAdvertisements:
                    description: 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorMemo:
                    description: 내원객 메모
                    type: string
                visitorNationality:
                    description: 내원객 국적
                    type: string
                zoneTitle:
                    description: 구역 제목
                    type: string
        protos.open.OpenScheduleStatisticsReservationGroupOccupiedResource:
            type: object
            required:
                - reservationGroupTitle
                - zoneTitle
            properties:
                reservationGroupTitle:
                    description: 예약 그룹 제목
                    type: string
                zoneTitle:
                    description: 점유 구역 제목
                    type: string
        protos.open.OpenStatisticsAssignee:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 담당자 이름
                    type: string
                id:
                    description: 담당자 ID
                    type: string
                    format: object-id
        protos.open.OpenStatisticsReferrerAccount:
            type: object
            required:
                - accountId
                - accountName
            properties:
                accountId:
                    description: 소개자 직원 ID
                    type: string
                    format: object-id
                accountName:
                    description: 소개자 직원 이름
                    type: string
        protos.open.OpenStatisticsReferrerVisitor:
            type: object
            required:
                - visitorId
                - chartNumber
            properties:
                chartNumber:
                    description: 추천 내원객 차트 번호
                    type: string
                visitorId:
                    description: 추천 내원객 ID
                    type: string
                    format: object-id
        protos.open.OpenTransactionStatisticsCost:
            type: object
            required:
                - totalAmount
                - suppliedAmount
                - vatAmount
            properties:
                suppliedAmount:
                    description: 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalAmount:
                    description: 결제금액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                vatAmount:
                    description: VAT
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
        protos.open.OpenTransactionStatisticsItem:
            type: object
            required:
                - purchaseId
                - assigneeName
                - paymentType
                - taxCharged
                - status
                - visitorId
                - visitorChartNumber
            properties:
                acquirerName:
                    description: 매입사명
                    type: string
                assigneeName:
                    description: 담당자명
                    type: string
                cardApprovalNumber:
                    description: 카드 승인 번호
                    type: string
                cardCompanyName:
                    description: 카드사명. `paymentType`이 `CARD`인 경우에만 반환됩니다.
                    type: string
                cardInstallmentMonths:
                    description: 카드 할부 개월 수. `paymentType`이 `CARD`인 경우에만 반환됩니다.
                    type: integer
                    format: int32
                cost:
                    description: 결제 금액 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenTransactionStatisticsCost'
                easyPayApprovalNumber:
                    description: 간편결제 승인 번호. `paymentType`이 `EASY_PAY`인 경우에만 반환됩니다.
                    type: string
                easyPayProviderName:
                    description: 간편결제 제공사명. `paymentType`이 `EASY_PAY`인 경우에만 반환됩니다.
                    type: string
                incomeTaxDeductionNumber:
                    description: 현금영수증 승인 번호
                    type: string
                issuerName:
                    description: 발급사명
                    type: string
                lastUpdatedPaymentDateTimeUtc:
                    description: 마지막 결제 상태 변경 일시
                    type: string
                    format: date-time
                medicalLoanCompanyName:
                    description: 의료론 회사명. `paymentType`이 `MEDICAL_LOAN`인 경우에만 반환됩니다.
                    type: string
                paymentType:
                    description: 결제 수단
                    type: string
                    enum:
                        - TransactionPaymentType_UNSPECIFIED
                        - CASH
                        - CARD
                        - PREPAID_CARD
                        - PLATFORM
                        - TRANSFER
                        - EASY_PAY
                        - MEDICAL_LOAN
                platformName:
                    description: 플랫폼명. `paymentType`이 `PLATFORM`인 경우에만 반환됩니다.
                    type: string
                purchaseAssigneeNames:
                    description: 담당자명 목록
                    type: array
                    items:
                        type: string
                purchaseId:
                    description: 구매 ID
                    type: string
                    format: object-id
                purchaseMemo:
                    description: 결제 메모
                    type: string
                referrerAccount:
                    description: 추천 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenTransactionStatisticsReferrerAccount'
                referrerUnregisteredName:
                    description: 미등록 추천인명
                    type: string
                referrerVisitor:
                    description: 추천 내원객 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenTransactionStatisticsReferrerVisitor'
                reservationFunnelCategoryName:
                    description: 예약 유입 경로 카테고리명
                    type: string
                reservationFunnelDetail:
                    description: 예약 유입 경로 상세
                    type: string
                reservationFunnelName:
                    description: 예약 유입 경로명
                    type: string
                status:
                    description: 결제 상태
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                taxCharged:
                    description: 과세 여부
                    type: boolean
                visitorAgreementAdvertisements:
                    description: 내원객 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 내원객 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorNationality:
                    description: 내원객 국적
                    type: string
        protos.open.OpenTransactionStatisticsReferrerAccount:
            type: object
            required:
                - accountId
                - accountName
            properties:
                accountId:
                    description: 추천 직원 ID
                    type: string
                    format: object-id
                accountName:
                    description: 추천 직원명
                    type: string
        protos.open.OpenTransactionStatisticsReferrerVisitor:
            type: object
            required:
                - visitorId
                - chartNumber
            properties:
                chartNumber:
                    description: 추천 내원객 차트 번호
                    type: string
                visitorId:
                    description: 추천 내원객 ID
                    type: string
                    format: object-id
        protos.open.OpenUpdateProductInformationCommand:
            type: object
            required:
                - id
                - title
                - description
                - closed
            properties:
                title:
                    description: 상품 이름
                    type: string
                description:
                    description: 상품 설명
                    type: string
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        뱃지 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `NEW` | 신규 |
                        | `POPULAR` | 인기 |
                        | `RECOMMENDED` | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                categoryIds:
                    description: 상품 카테고리 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                caution:
                    description: 주의사항
                    type: string
                closed:
                    description: |-
                        판매 중단 여부

                        `true`이면 판매가 중단된 상태입니다.
                    type: boolean
                contentImageUrl:
                    description: 내용 이미지 URL
                    type: string
                    format: uri
                coverImageUrl:
                    description: 커버 이미지 URL
                    type: string
                    format: uri
                displayPeriod:
                    description: |-
                        상품 노출 기간

                        설정하지 않으면 상시 노출됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                id:
                    description: 상품 ID
                    type: string
                    format: object-id
                isEvent:
                    description: |-
                        이벤트 여부

                        `true`이면 이벤트 상품으로 표시됩니다.
                    type: boolean
                offeringPeriod:
                    description: |-
                        상품 제공 기간

                        설정하지 않으면 상시 제공됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                targetCountryCodes:
                    description: |-
                        노출 대상 국가 코드 목록

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 그 외 국가는 `ETC`로 전달합니다.
                    type: array
                    items:
                        type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`, `caution`, `coverImageUrl`, `contentImageUrl`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.open.OpenUpdateProductOptionCommand:
            oneOf:
                - $ref: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.SINGLE'
                - $ref: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.GROUP'
                - $ref: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.CONSULTATION'
            discriminator:
                mapping:
                    CONSULTATION: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.CONSULTATION'
                    GROUP: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.GROUP'
                    SINGLE: '#/components/schemas/protos.open.OpenUpdateProductOptionCommand.SINGLE'
                propertyName: type
        protos.open.OpenUpdateProductOptionCommand.CONSULTATION:
            title: CONSULTATION
            description: '`type` = `CONSULTATION`'
            type: object
            required:
                - id
                - productId
                - title
                - description
                - type
                - consultationOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: CONSULTATION
                    enum:
                        - CONSULTATION
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    consultationOptionConfiguration:
                        description: |-
                            상담 옵션 구성

                            `type`이 `CONSULTATION`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionConsultationConfiguration'
                  required:
                    - consultationOptionConfiguration
                  title: |-
                    상담 옵션 구성

                    `type`이 `CONSULTATION`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - singleOptionConfiguration
                    properties:
                        singleOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - groupOptionConfiguration
                    properties:
                        groupOptionConfiguration: {}
        protos.open.OpenUpdateProductOptionCommand.GROUP:
            title: GROUP
            description: '`type` = `GROUP`'
            type: object
            required:
                - id
                - productId
                - title
                - description
                - type
                - groupOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    groupOptionConfiguration:
                        description: |-
                            그룹 옵션 구성

                            `type`이 `GROUP`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionGroupConfiguration'
                  required:
                    - groupOptionConfiguration
                  title: |-
                    그룹 옵션 구성

                    `type`이 `GROUP`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - singleOptionConfiguration
                    properties:
                        singleOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - consultationOptionConfiguration
                    properties:
                        consultationOptionConfiguration: {}
        protos.open.OpenUpdateProductOptionCommand.SINGLE:
            title: SINGLE
            description: '`type` = `SINGLE`'
            type: object
            required:
                - id
                - productId
                - title
                - description
                - type
                - singleOptionConfiguration
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `SINGLE` | 단일 옵션 — 진료항목 1개로 구성 |
                        | `GROUP` | 그룹 옵션 — 여러 진료항목 조합으로 구성 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                productId:
                    description: 상품 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        다국어 지원 대상 필드: `title`, `description`
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            oneOf:
                - properties:
                    singleOptionConfiguration:
                        description: |-
                            단일 옵션 구성

                            `type`이 `SINGLE`인 경우 필수입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.open.OpenProductOptionSingleConfiguration'
                  required:
                    - singleOptionConfiguration
                  title: |-
                    단일 옵션 구성

                    `type`이 `SINGLE`인 경우 필수입니다.
                  type: object
            allOf:
                - not:
                    type: object
                    required:
                        - groupOptionConfiguration
                    properties:
                        groupOptionConfiguration: {}
                - not:
                    type: object
                    required:
                        - consultationOptionConfiguration
                    properties:
                        consultationOptionConfiguration: {}
        protos.open.OpenUpdateReservationCommandV2:
            type: object
            required:
                - scheduleId
                - zoneId
                - occupiedResources
            properties:
                occupiedResources:
                    description: |-
                        변경할 예약 일정 목록

                        하나 이상의 예약 일정이 필요합니다. 모든 항목의 예약 시작 일시는 같은 날짜여야 합니다.
                    type: array
                    minItems: 1
                    items:
                        $ref: '#/components/schemas/protos.open.OccupiedResource'
                scheduleId:
                    description: 수정할 예약 스케줄 ID
                    type: string
                    format: uuid
                zoneId:
                    description: |-
                        접수 구역 ID

                        예약의 접수 구역으로 설정할 구역의 ID입니다.
                    type: string
                    format: object-id
        protos.open.OpenUpdateScheduleConsultationInfoCommand:
            type: object
            required:
                - scheduleId
            properties:
                consultationMemo:
                    description: |-
                        상담 메모

                        전달하지 않으면 변경되지 않습니다.
                    type: string
                scheduleId:
                    description: 수정할 스케줄 ID
                    type: string
                    format: uuid
        protos.open.OpenVisitorStatisticsItem:
            type: object
            required:
                - visitorId
                - visitorChartNumber
                - visitorCreatedDateTimeUtc
                - isCompletedPurchase
                - isCompletedProcedureTask
                - totalCompletedScheduleCount
                - totalTicketCount
                - totalAvailableTicketCount
                - totalCompletedProcedureTaskCount
            properties:
                firstCompletedProcedureTaskDateTimeUtc:
                    description: 최초 시술 태스크 완료 일시
                    type: string
                    format: date-time
                firstCompletedPurchaseDateTimeUtc:
                    description: 최초 구매 완료 일시
                    type: string
                    format: date-time
                firstReservationDateTimeUtc:
                    description: 최초 예약 일시
                    type: string
                    format: date-time
                firstVisitedDateTimeUtc:
                    description: 최초 내원 일시
                    type: string
                    format: date-time
                firstVisitedTotalTransactionAmountV2:
                    description: 최초 내원 시 수납 매출
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                isCompletedProcedureTask:
                    description: 시술 태스크 완료 여부
                    type: boolean
                isCompletedPurchase:
                    description: 구매 완료 여부
                    type: boolean
                lastVisitedDateTimeUtc:
                    description: 최근 내원 일시
                    type: string
                    format: date-time
                referrerAccount:
                    description: 소개자 직원 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.OpenStatisticsReferrerAccount'
                totalAvailableTicketAmountV2:
                    description: 잔여 시술권 부채 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                totalAvailableTicketCount:
                    description: 잔여 시술권 수
                    type: integer
                    format: int32
                totalCompletedProcedureTaskCount:
                    description: 완료된 시술 태스크 수
                    type: integer
                    format: int64
                totalCompletedScheduleCount:
                    description: 완료된 예약 수
                    type: integer
                    format: int32
                totalPrepaidCardBalanceV2:
                    description: 누적 선불카드 현금 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalPrepaidCardPointV2:
                    description: 누적 선불카드 포인트 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalPrepaidCardRemainBalanceV2:
                    description: 잔여 선불카드 현금 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalPrepaidCardRemainPointV2:
                    description: 잔여 선불카드 포인트 총액
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalTicketAmountV2:
                    description: 누적 시술 수납 매출
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                totalTicketCount:
                    description: 발급된 시술권 수
                    type: integer
                    format: int32
                totalTransactionAmountV2:
                    description: 누적 수납 매출
                    allOf:
                        - $ref: '#/components/schemas/protos.Money'
                totalUsedTicketAmountV2:
                    description: 누적 시술 실현 매출
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                visitorAgreementAdvertisements:
                    description: 광고성 정보 수신 동의 여부
                    type: boolean
                visitorAgreementInformationalNotification:
                    description: 정보성 알림 수신 동의 여부
                    type: boolean
                visitorCategoryNames:
                    description: 내원객 카테고리 이름 목록
                    type: array
                    items:
                        type: string
                visitorChartNumber:
                    description: 내원객 차트 번호
                    type: string
                visitorCreatedDateTimeUtc:
                    description: 내원객 등록 일시
                    type: string
                    format: date-time
                visitorFunnelCategoryId:
                    description: 내원객 유입 경로 카테고리 ID
                    type: string
                    format: object-id
                visitorFunnelCategoryName:
                    description: 내원객 유입 경로 카테고리명
                    type: string
                visitorFunnelDetail:
                    description: 내원객 유입 경로 상세
                    type: string
                visitorFunnelId:
                    description: 내원객 유입 경로 ID
                    type: string
                    format: object-id
                visitorFunnelName:
                    description: 내원객 유입 경로명
                    type: string
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorMemo:
                    description: 내원객 메모
                    type: string
                visitorNationality:
                    description: 내원객 국적
                    type: string
        protos.open.RegisterVisitorImages:
            type: object
            properties:
                images:
                    description: |-
                        등록할 내원객 이미지 목록

                        각 항목은 하나의 내원객 이미지로 등록됩니다. 등록된 이미지는 삭제되지 않은 상태로 생성됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.image.RegisterVisitorImageConfiguration'
        protos.open.RescheduleByTimeSlotCommand:
            type: object
            required:
                - scheduleId
                - reservationDateTimeRange
            properties:
                reservationDateTimeRange:
                    description: |-
                        변경할 예약 시간

                        `getReschedulableTimeSlots`로 조회한 예약 일시 변경 가능 슬롯의 시간 범위를 전달합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                scheduleId:
                    description: 스케줄 ID
                    type: string
                    format: object-id
        protos.open.ReservationGroupOccupiedResourceSlot:
            type: object
            required:
                - occupiedResourceId
                - reservationGroupId
                - zoneId
            properties:
                occupiedResourceId:
                    description: |-
                        예약 일정 식별 ID

                        스케줄 내 점유 리소스를 식별합니다. 점유 리소스가 없는 기존 예약은 호환용 ID를 반환합니다.
                    type: string
                reservationGroupId:
                    description: 해당 예약 일정의 예약 그룹 ID
                    type: string
                    format: object-id
                slots:
                    description: |-
                        해당 예약 일정의 예약 가능한 슬롯 목록

                        정원, 예약 정책, 휴무일, 예약 그룹 시작일 조건을 통과한 슬롯만 포함합니다. 조회 범위에서 예약 가능한 슬롯이 없으면 빈 배열입니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.ReservationSlot'
                zoneId:
                    description: 해당 예약 일정의 구역 ID
                    type: string
                    format: object-id
        protos.open.ReservationGroupSlots:
            type: object
            required:
                - reservationGroupId
                - zoneId
            properties:
                reservationGroupId:
                    description: 슬롯이 속한 예약 그룹 ID
                    type: string
                    format: object-id
                slots:
                    description: |-
                        해당 예약 그룹과 구역의 예약 가능한 슬롯 목록

                        정원, 예약 정책, 휴무일, 예약 그룹 시작일 조건을 통과한 슬롯만 포함합니다. 조회 범위에서 예약 가능한 슬롯이 없으면 빈 배열입니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.ReservationSlot'
                zoneId:
                    description: 슬롯이 속한 구역 ID
                    type: string
                    format: object-id
        protos.open.ReservationSlot:
            type: object
            required:
                - reservationGroupId
                - zone
                - startDateTimeUtc
                - endDateTimeUtc
                - capacity
                - reservationCount
            properties:
                capacity:
                    description: 해당 슬롯의 최대 예약 가능 인원
                    type: integer
                    format: int32
                endDateTimeUtc:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                reservationCount:
                    description: 현재 예약된 인원 수
                    type: integer
                    format: int32
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                startDateTimeUtc:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                zone:
                    description: 구역 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.ReservationSlotZoneConfiguration'
        protos.open.ReservationSlotZoneConfiguration:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 구역 이름
                    type: string
                id:
                    description: 구역 ID
                    type: string
                    format: object-id
        protos.open.ReserveByTimeSlotCommand:
            type: object
            required:
                - reservationDateTimeRange
                - visitorName
                - visitorPhone
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                funnel:
                    description: |-
                        유입 채널 정보

                        생략하거나 유입 채널 카테고리, 유입 채널, 상세 유입 경로이 모두 비어 있으면(비활성화되어 무시된 경우 포함) 채널에 따른 기본 유입 경로가 설정됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.CreateReservationFunnel'
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.CreateReservationRequestedProcedure'
                reservationDateTimeRange:
                    description: |-
                        예약 시간

                        조회한 예약 가능 시간 슬롯의 시간 범위를 전달합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                reservationMemo:
                    description: 예약 메모
                    type: string
                reservationRuleId:
                    description: |-
                        예약 규칙 ID

                        슬롯 조회 시 전달한 `reservationRuleId`와 동일한 값을 전달합니다. 생략하면 기본 예약 규칙을 사용합니다.
                    type: string
                    format: object-id
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                visitorBirthDayUtc:
                    description: 내원객 생년월일
                    type: string
                    format: date-time
                visitorCategoryIds:
                    description: 내원객 고객 분류 ID 목록
                    type: array
                    items:
                        type: string
                        format: object-id
                visitorConnectedInformation:
                    description: 내원객 연동 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation'
                visitorEmail:
                    description: 내원객 이메일
                    type: string
                    format: email
                visitorGender:
                    description: 내원객 성별
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                visitorIsNew:
                    description: 내원객 신환 여부
                    type: boolean
                visitorLanguageCode:
                    description: |-
                        내원객 언어 코드

                        locale code를 사용합니다.
                    type: string
                visitorName:
                    description: 내원객 이름
                    type: string
                visitorNationality:
                    description: |-
                        내원객 국적

                        ISO 3166-1 alpha-2 국가 코드입니다.
                    type: string
                visitorPassportGivenNames:
                    description: 내원객 여권 영문 이름
                    type: string
                visitorPassportNumber:
                    description: 내원객 여권번호
                    type: string
                visitorPassportSurname:
                    description: 내원객 여권 영문 성
                    type: string
                visitorPhone:
                    description: 내원객 전화번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                visitorRequest:
                    description: 내원객 요청사항
                    type: string
                visitorSnsInfo:
                    description: 내원객 SNS 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.SnsInfo'
        protos.open.ReserveByTimeSlotCommandResponse:
            type: object
            required:
                - scheduleId
            properties:
                scheduleId:
                    description: 생성된 스케줄 ID
                    type: string
                    format: uuid
        protos.open.ReserveByTimeSlotWithVisitorIdCommand:
            type: object
            required:
                - reservationDateTimeRange
                - visitorId
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                funnel:
                    description: |-
                        유입 채널 정보

                        생략하거나 유입 채널 카테고리, 유입 채널, 상세 유입 경로이 모두 비어 있으면(비활성화되어 무시된 경우 포함) 채널에 따른 기본 유입 경로가 설정됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.CreateReservationFunnel'
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.CreateReservationRequestedProcedure'
                reservationDateTimeRange:
                    description: |-
                        예약 시간

                        조회한 예약 가능 시간 슬롯의 시간 범위를 전달합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                reservationMemo:
                    description: 예약 메모
                    type: string
                reservationRuleId:
                    description: |-
                        예약 규칙 ID

                        슬롯 조회 시 전달한 `reservationRuleId`와 동일한 값을 전달합니다. 생략하면 기본 예약 규칙을 사용합니다.
                    type: string
                    format: object-id
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                visitorConnectedInformation:
                    description: 내원객 연동 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation'
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorRequest:
                    description: 내원객 요청사항
                    type: string
        protos.open.ReserveByTimeSlotWithVisitorIdCommandResponse:
            type: object
            required:
                - scheduleId
            properties:
                scheduleId:
                    description: 생성된 스케줄 ID
                    type: string
                    format: uuid
        protos.open.ReserveByVisitorIdCommand:
            type: object
            required:
                - visitorId
                - reservationGroupId
                - zoneId
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                endDateTimeUtc:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                funnelDetail:
                    description: |-
                        상세 유입 경로

                        자유 텍스트로 전달합니다.
                    type: string
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure'
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                reservationMemo:
                    description: 예약 메모
                    type: string
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                startDateTimeUtc:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                visitorId:
                    description: 기존 내원객 ID
                    type: string
                    format: object-id
                zoneId:
                    description: |-
                        예약 구역 ID

                        예약이 생성될 구역의 ID입니다.
                    type: string
                    format: object-id
        protos.open.ReserveCommand:
            type: object
            required:
                - visitorName
                - reservationGroupId
                - zoneId
                - startDateTimeUtc
                - endDateTimeUtc
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                endDateTimeUtc:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                funnelDetail:
                    description: |-
                        상세 유입 경로

                        자유 텍스트로 전달합니다.
                    type: string
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure'
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                reservationMemo:
                    description: 예약 메모
                    type: string
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                startDateTimeUtc:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                visitorBirthDayUtc:
                    description: |-
                        예약할 내원객 생년월일

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다. 기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                    format: date-time
                visitorConnectedInformation:
                    description: |-
                        내원객 연동 정보

                        LINE 또는 강남언니 연동 정보입니다. 기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation'
                visitorEmail:
                    description: |-
                        예약할 내원객 이메일

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                    format: email
                visitorLanguage:
                    description: |-
                        예약할 내원객 언어

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다. 지원 목록: ko, ja, en, zh-CN, zh-yue, es, th, ru, id, ms, vi, mn, uz, nl, de, pt 등
                    type: string
                visitorName:
                    description: |-
                        예약할 내원객 이름

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                visitorNationality:
                    description: |-
                        예약할 내원객 국적

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPassportGivenNames:
                    description: |-
                        예약할 내원객 여권 영문 이름

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPassportNumber:
                    description: |-
                        예약할 내원객 여권 번호

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    type: string
                visitorPassportSurname:
                    description: |-
                        예약할 내원객 여권 영문 성

                        새 내원객을 생성할 때 내원객 정보에 저장됩니다.
                    type: string
                visitorPhone:
                    description: |-
                        예약할 내원객 휴대폰 번호

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                visitorSnsInfo:
                    description: |-
                        예약할 내원객 SNS 정보

                        기존 내원객 중복 검색과 새 내원객 생성에 사용됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.SnsInfo'
                zoneId:
                    description: |-
                        예약 구역 ID

                        예약이 생성될 구역의 ID입니다.
                    type: string
                    format: object-id
        protos.open.ReserveCommandResponse:
            type: object
            required:
                - reservationId
            properties:
                reservationId:
                    description: 생성된 예약 ID
                    type: string
                    format: uuid
        protos.open.SearchProductOptionSummariesQuery:
            type: object
            required:
                - searchText
            properties:
                searchText:
                    description: 검색 키워드
                    type: string
                targetCountryCode:
                    description: |-
                        타겟 국가 코드

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. 그 외 국가는 `ETC`로 전달합니다.
                    type: string
        protos.open.SearchVisitors:
            type: object
            required:
                - offset
                - limit
            properties:
                chartNumber:
                    description: |-
                        검색 조건으로 사용할 차트 번호

                        저장된 차트 번호와 일치하는 내원객을 검색합니다.
                    type: string
                dateOfBirth:
                    description: |-
                        검색 조건으로 사용할 생년월일

                        오프셋이 포함된 [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 문자열 또는 `yyyy-MM-dd HH:mm:ss.SSS'Z'` 패턴의 문자열을 전달합니다. 저장된 생년월일과 일치하는 내원객을 검색합니다.
                    type: string
                email:
                    description: |-
                        검색 조건으로 사용할 이메일 주소

                        `phone`, `chartNumber`, `dateOfBirth` 중 하나와 함께 전달할 때 추가 검색 조건으로 사용됩니다. 저장된 이메일 주소와 일치하는 내원객을 검색합니다.
                    type: string
                    format: email
                limit:
                    description: 조회 개수
                    type: integer
                    format: int32
                offset:
                    description: 조회 시작 위치
                    type: integer
                    format: int32
                partOfVisitorName:
                    description: |-
                        내원객 이름 검색어

                        `phone`, `chartNumber`, `dateOfBirth` 중 하나와 함께 전달할 때 추가 검색 조건으로 사용됩니다. 내원객 이름 또는 발음명에 포함되는 문자열로 검색합니다.
                    type: string
                phone:
                    description: |-
                        검색 조건으로 사용할 전화번호

                        `countryCode`와 `phoneNumber`가 모두 일치하는 내원객을 검색합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
        protos.open.SearchVisitorsResponse:
            type: object
            properties:
                data:
                    description: |-
                        조회된 내원객 목록

                        삭제되지 않았고 조건에 맞는 내원객 목록입니다. 조건에 맞는 내원객이 없으면 빈 목록을 반환합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.open.VisitorInformation'
        protos.open.SubmitVisitorQuestionnaireCommand:
            type: object
            required:
                - visitorId
                - name
                - dateOfBirth
                - gender
            properties:
                name:
                    description: 설문 응답에 저장할 내원객 이름
                    type: string
                address:
                    description: |-
                        설문 응답에 저장할 내원객 주소

                        전달하면 설문 응답에 저장됩니다. 기존 내원객 주소 정보가 있을 때만 내원객 정보에도 반영됩니다.
                    type: string
                addressDetail:
                    description: |-
                        설문 응답에 저장할 내원객 상세 주소

                        전달하면 설문 응답에 저장됩니다. 기존 내원객 주소 정보가 있을 때만 내원객 정보에도 반영됩니다.
                    type: string
                agreements:
                    description: |-
                        제출할 약관 동의 항목 목록

                        항목의 `type`이 있으면 해당 유형의 내원객 동의 정보에 반영됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.SubmittedQuestionnaireAgreement'
                answers:
                    description: 제출할 설문 응답 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.SelectedAnswer'
                dateOfBirth:
                    description: |-
                        내원객 생년월일

                        초진 설문지 제출 요청에서는 8자리 `yyyyMMdd` 패턴의 문자열로 전달합니다.
                    type: string
                gender:
                    description: |
                        내원객 성별

                        | 값 | 의미 |
                        | --- | --- |
                        | `GENDER_UNSPECIFIED` | 미지정 |
                        | `MALE` | 남성 |
                        | `FEMALE` | 여성 |
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                phone:
                    description: |-
                        설문 응답에 저장할 내원객 휴대폰 번호

                        전달하면 내원객 정보의 휴대폰 번호도 갱신됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                phoneticName:
                    description: |-
                        설문 응답에 저장할 내원객 발음명

                        전달하면 내원객 정보에도 반영됩니다.
                    type: string
                registrationNumber:
                    description: |-
                        설문 응답에 저장할 주민등록번호

                        전달하면 내원객 정보에도 반영됩니다.
                    type: string
                visitorId:
                    description: 설문지를 제출할 내원객 ID
                    type: string
                    format: object-id
        protos.open.SubmitVisitorQuestionnaireCommandResponse:
            type: object
            required:
                - questionnaireId
            properties:
                questionnaireId:
                    description: 생성된 설문 응답 ID
                    type: string
                    format: object-id
        protos.open.VisitorConnectedInformation:
            type: object
            oneOf:
                - properties:
                    line:
                        description: LINE 연동 정보
                        allOf:
                            - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation.Line'
                  required:
                    - line
                  title: LINE 연동 정보
                  type: object
                - properties:
                    unni:
                        description: 강남언니 연동 정보
                        allOf:
                            - $ref: '#/components/schemas/protos.open.VisitorConnectedInformation.Unni'
                  required:
                    - unni
                  title: 강남언니 연동 정보
                  type: object
        protos.open.VisitorConnectedInformation.Line:
            type: object
            required:
                - id
                - channelId
                - liffId
                - displayName
            properties:
                channelId:
                    description: LINE 채널 ID
                    type: string
                displayName:
                    description: LINE 표시 이름
                    type: string
                id:
                    description: LINE 사용자 ID
                    type: string
                liffId:
                    description: LINE LIFF ID
                    type: string
        protos.open.VisitorConnectedInformation.Unni:
            type: object
            required:
                - id
                - nickname
            properties:
                id:
                    description: 강남언니 사용자 ID
                    type: string
                nickname:
                    description: 강남언니 닉네임
                    type: string
        protos.open.VisitorInformation:
            type: object
            required:
                - id
                - chartNumber
                - name
            properties:
                name:
                    description: 내원객 이름
                    type: string
                additionalPhoneNumber:
                    description: 추가 전화번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                chartNumber:
                    description: 차트 번호
                    type: string
                dateOfBirth:
                    description: 생년월일
                    type: string
                gender:
                    description: |
                        성별

                        | 값 | 의미 |
                        | --- | --- |
                        | `GENDER_UNSPECIFIED` | 미지정 |
                        | `MALE` | 남성 |
                        | `FEMALE` | 여성 |
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                id:
                    description: 내원객 ID
                    type: string
                    format: object-id
                nationality:
                    description: 국적
                    type: string
                passportGivenNames:
                    description: 여권 이름
                    type: string
                passportSurname:
                    description: 여권 성
                    type: string
                phoneNumber:
                    description: 전화번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
        protos.procedure.Category:
            type: object
            required:
                - id
                - name
                - order
                - deleted
                - opened
            properties:
                name:
                    description: 상품 카테고리 이름
                    type: string
                deleted:
                    description: 삭제 여부
                    type: boolean
                id:
                    description: 상품 카테고리 ID
                    type: string
                    format: object-id
                opened:
                    description: 노출 여부
                    type: boolean
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                translsMap:
                    description: 다국어 번역 맵
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.procedure.CommonProcedureConfiguration:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 공통 시술 이름
                    type: string
                id:
                    description: 공통 시술 ID
                    type: string
                    format: object-id
        protos.procedure.GetCategoriesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        노출되는 상품 카테고리 목록

                        Open API에서는 요청값과 관계없이 노출되는 카테고리만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.Category'
        protos.procedure.GetOpenProductsQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        상품 상세 정보 목록

                        요청한 API Key에 해당하는 채널에 노출 가능한 상품만 포함합니다. 응답 상품의 `options`에는 해당 채널에 노출 가능한 삭제되지 않은 상품 옵션만 포함됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.OpenProductDetailContract'
        protos.procedure.GetProductOptionsQuery:
            type: object
            required:
                - optionIds
                - includePromotions
            properties:
                includePromotions:
                    description: |-
                        프로모션 포함 여부

                        Deprecated.
                    deprecated: true
                    type: boolean
                optionIds:
                    description: |-
                        조회할 상품 옵션 ID 목록

                        최소 한 개 이상 전달해야 합니다.
                    type: array
                    minItems: 1
                    items:
                        type: string
                        format: object-id
                refOptionIds:
                    description: |-
                        참조 옵션 ID 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        type: string
        protos.procedure.GetProductOptionsQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        상품 옵션 상세 정보 목록

                        요청한 `optionIds` 중 삭제되지 않고 사용 중인 상품에 속한 삭제되지 않은 상품 옵션만 포함합니다. 삭제된 상품, 사용 중지된 상품, 삭제된 상품 옵션, 존재하지 않는 `optionIds`는 응답에 포함되지 않습니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductOptionDetail'
        protos.procedure.GetTargetCountriesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        타겟 국가 목록

                        `order` 오름차순으로 정렬됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.TargetCountryContract'
        protos.procedure.MedicineAndMachine:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 기기/약물 이름
                    type: string
                id:
                    description: 기기/약물 ID
                    type: string
                    format: object-id
        protos.procedure.OpenProductDetailContract:
            type: object
            required:
                - id
                - title
                - description
                - deleted
                - closed
            properties:
                title:
                    description: 상품 이름
                    type: string
                description:
                    description: 상품 설명
                    type: string
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                categories:
                    description: 카테고리 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductCategory'
                caution:
                    description: 유의사항
                    type: string
                cautions:
                    description: |-
                        유의사항 목록

                        Deprecated. 대체 필드: `caution`.
                    deprecated: true
                    type: array
                    items:
                        type: string
                closed:
                    description: |-
                        상품 사용 중지 여부

                        `false`는 사용 중, `true`는 사용 안 함을 의미합니다.
                    type: boolean
                contentImageUrl:
                    description: 콘텐츠 이미지 URL
                    type: string
                coverImageUrl:
                    description: 커버 이미지 URL
                    type: string
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayPeriod:
                    description: |-
                        상품 노출 기간

                        미설정 시 상시 노출됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                endDateTimeUtc:
                    description: |-
                        상품 판매 종료 일시

                        Deprecated. `offeringPeriod` 또는 `displayPeriod`를 사용합니다. 하위 호환성을 위해 유지되며 `offeringPeriod`의 종료 일시에 해당하는 값이 전달됩니다. UTC [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 값입니다.
                    deprecated: true
                    type: string
                id:
                    description: 상품 ID
                    type: string
                    format: object-id
                isEvent:
                    description: 이벤트 상품 여부
                    type: boolean
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                offeringPeriod:
                    description: |-
                        상품 예약/수납 가능 기간

                        미설정 시 상시 제공됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                options:
                    description: 상품 옵션 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.OpenProductOptionDetail'
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                startDateTimeUtc:
                    description: |-
                        상품 판매 시작 일시

                        Deprecated. `offeringPeriod` 또는 `displayPeriod`를 사용합니다. 하위 호환성을 위해 유지되며 `offeringPeriod`의 시작 일시에 해당하는 값이 전달됩니다. UTC [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) 값입니다.
                    deprecated: true
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`, `caution`, `coverImageUrl`, `contentImageUrl`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.procedure.OpenProductGroupOptionComposition:
            type: object
            required:
                - refSingleOptionId
                - price
                - title
                - unit
                - count
                - procedure
            properties:
                title:
                    description: 구성 이름
                    type: string
                count:
                    description: 시술 횟수
                    type: integer
                    format: int32
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenProductOptionPrice'
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                refSingleOptionId:
                    description: 참조 단일 옵션 ID
                    deprecated: true
                    type: string
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.procedure.OpenProductOptionDetail:
            oneOf:
                - $ref: '#/components/schemas/protos.procedure.OpenProductOptionDetail.SINGLE'
                - $ref: '#/components/schemas/protos.procedure.OpenProductOptionDetail.GROUP'
                - $ref: '#/components/schemas/protos.procedure.OpenProductOptionDetail.CONSULTATION'
            discriminator:
                mapping:
                    CONSULTATION: '#/components/schemas/protos.procedure.OpenProductOptionDetail.CONSULTATION'
                    GROUP: '#/components/schemas/protos.procedure.OpenProductOptionDetail.GROUP'
                    SINGLE: '#/components/schemas/protos.procedure.OpenProductOptionDetail.SINGLE'
                propertyName: type
        protos.procedure.OpenProductOptionDetail.CONSULTATION:
            title: CONSULTATION
            description: '`type` = `CONSULTATION`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: CONSULTATION
                    enum:
                        - CONSULTATION
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - price
                    properties:
                        price: {}
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.OpenProductOptionDetail.GROUP:
            title: GROUP
            description: '`type` = `GROUP`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
                - price
                - compositions
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                compositions:
                    description: |-
                        그룹 옵션의 시술 구성 목록

                        `type`이 `GROUP`인 옵션에서 사용됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.OpenProductGroupOptionComposition'
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenProductOptionPrice'
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.OpenProductOptionDetail.SINGLE:
            title: SINGLE
            description: '`type` = `SINGLE`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
                - price
                - medicalService
                - count
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                count:
                    description: 시술 횟수
                    type: integer
                    format: int32
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenProductOptionPrice'
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
            allOf:
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
        protos.procedure.OpenProductOptionPrice:
            type: object
            required:
                - amount
            properties:
                additional:
                    description: 고객 유형별 특별 가격 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductOptionSpecialPrice'
                amount:
                    description: 정가
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxation:
                    description: |
                        과세 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `Taxation_UNKNOWN` | 알 수 없음 |
                        | `TAXABLE` | 과세 |
                        | `TAX_FREE` | 면세 |
                        | `MIXED` | 혼합 과세 |
                    type: string
                    enum:
                        - Taxation_UNKNOWN
                        - TAXABLE
                        - TAX_FREE
                        - MIXED
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.procedure.OpenSearchProductOptionSummariesContract:
            oneOf:
                - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.SINGLE'
                - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.GROUP'
                - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.CONSULTATION'
            discriminator:
                mapping:
                    CONSULTATION: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.CONSULTATION'
                    GROUP: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.GROUP'
                    SINGLE: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.SINGLE'
                propertyName: type
        protos.procedure.OpenSearchProductOptionSummariesContract.CONSULTATION:
            title: CONSULTATION
            description: '`type` = `CONSULTATION`'
            type: object
            required:
                - id
                - title
                - type
                - productId
                - productTitle
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: CONSULTATION
                    enum:
                        - CONSULTATION
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                productConfiguration:
                    description: 상품 구성 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.ProductConfiguration'
                productId:
                    description: |-
                        상품 ID

                        Deprecated. 대체 필드: `productConfiguration.id`.
                    deprecated: true
                    type: string
                    format: object-id
                productIsEvent:
                    description: |-
                        이벤트 상품 여부

                        Deprecated. 대체 필드: `productConfiguration.isEvent`.
                    deprecated: true
                    type: boolean
                productTitle:
                    description: |-
                        상품 이름

                        Deprecated. 대체 필드: `productConfiguration.title`.
                    deprecated: true
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `productTitle`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - price
                    properties:
                        price: {}
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.OpenSearchProductOptionSummariesContract.GROUP:
            title: GROUP
            description: '`type` = `GROUP`'
            type: object
            required:
                - id
                - title
                - type
                - productId
                - productTitle
                - price
                - compositions
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                compositions:
                    description: |-
                        그룹 옵션의 시술 구성 목록

                        `type`이 `GROUP`인 옵션에서 사용됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductGroupOptionComposition'
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                productConfiguration:
                    description: 상품 구성 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.ProductConfiguration'
                productId:
                    description: |-
                        상품 ID

                        Deprecated. 대체 필드: `productConfiguration.id`.
                    deprecated: true
                    type: string
                    format: object-id
                productIsEvent:
                    description: |-
                        이벤트 상품 여부

                        Deprecated. 대체 필드: `productConfiguration.isEvent`.
                    deprecated: true
                    type: boolean
                productTitle:
                    description: |-
                        상품 이름

                        Deprecated. 대체 필드: `productConfiguration.title`.
                    deprecated: true
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `productTitle`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.OpenSearchProductOptionSummariesContract.ProductConfiguration:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 상품 이름
                    type: string
                displayPeriod:
                    description: |-
                        상품 노출 기간

                        미설정 시 상시 노출됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                id:
                    description: 상품 ID
                    type: string
                    format: object-id
                isEvent:
                    description: 이벤트 상품 여부
                    type: boolean
                offeringPeriod:
                    description: |-
                        상품 예약/수납 가능 기간

                        미설정 시 상시 제공됩니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.procedure.OpenSearchProductOptionSummariesContract.SINGLE:
            title: SINGLE
            description: '`type` = `SINGLE`'
            type: object
            required:
                - id
                - title
                - type
                - productId
                - productTitle
                - price
                - medicalService
                - count
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                count:
                    description: 시술 횟수
                    type: integer
                    format: int32
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                productConfiguration:
                    description: 상품 구성 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract.ProductConfiguration'
                productId:
                    description: |-
                        상품 ID

                        Deprecated. 대체 필드: `productConfiguration.id`.
                    deprecated: true
                    type: string
                    format: object-id
                productIsEvent:
                    description: |-
                        이벤트 상품 여부

                        Deprecated. 대체 필드: `productConfiguration.isEvent`.
                    deprecated: true
                    type: boolean
                productTitle:
                    description: |-
                        상품 이름

                        Deprecated. 대체 필드: `productConfiguration.title`.
                    deprecated: true
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `productTitle`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
            allOf:
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
        protos.procedure.OpenSearchProductOptionSummariesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        검색된 상품 옵션 요약 목록

                        요청한 API Key에 해당하는 채널에 노출 가능한 상품 옵션만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.OpenSearchProductOptionSummariesContract'
        protos.procedure.Price:
            type: object
            required:
                - amount
            properties:
                amount:
                    description: 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxation:
                    description: |
                        과세 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `Taxation_UNKNOWN` | 알 수 없음 |
                        | `TAXABLE` | 과세 |
                        | `TAX_FREE` | 면세 |
                        | `MIXED` | 혼합 과세 |
                    type: string
                    enum:
                        - Taxation_UNKNOWN
                        - TAXABLE
                        - TAX_FREE
                        - MIXED
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.procedure.PriceAmount:
            type: object
            required:
                - value
                - currency
            properties:
                value:
                    description: 금액
                    type: integer
                    format: int32
                currency:
                    description: |-
                        통화 코드

                        [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 표준 통화 코드입니다. 예: `KRW`
                    type: string
        protos.procedure.Procedure:
            type: object
            required:
                - id
                - name
                - createDate
            properties:
                name:
                    description: 시술 이름
                    type: string
                commonProcedureConfiguration:
                    description: 공통 시술 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.CommonProcedureConfiguration'
                createDate:
                    description: 생성 일시
                    type: string
                deleted:
                    description: 삭제 여부
                    type: boolean
                id:
                    description: 시술 ID
                    type: string
                    format: object-id
                searchPhoneticName:
                    description: 검색용 발음 이름
                    type: string
        protos.procedure.ProductCategory:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 카테고리 이름
                    type: string
                id:
                    description: 카테고리 ID
                    type: string
                    format: object-id
                translsMap:
                    description: 다국어 번역 맵
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.procedure.ProductGroupOptionComposition:
            type: object
            required:
                - price
                - title
                - procedure
            properties:
                title:
                    description: |-
                        구성 이름

                        Deprecated. 2024-10-11부터 사용되지 않으며 항상 빈 문자열이 전달됩니다.
                    type: string
                count:
                    description: 시술 횟수
                    type: integer
                    format: int32
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                refSingleOptionId:
                    description: |-
                        참조 단일 옵션 ID

                        Deprecated. 2024-10-11부터 사용되지 않으며 항상 빈 값이 전달됩니다.
                    type: string
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.procedure.ProductOptionDetail:
            oneOf:
                - $ref: '#/components/schemas/protos.procedure.ProductOptionDetail.SINGLE'
                - $ref: '#/components/schemas/protos.procedure.ProductOptionDetail.GROUP'
                - $ref: '#/components/schemas/protos.procedure.ProductOptionDetail.CONSULTATION'
            discriminator:
                mapping:
                    CONSULTATION: '#/components/schemas/protos.procedure.ProductOptionDetail.CONSULTATION'
                    GROUP: '#/components/schemas/protos.procedure.ProductOptionDetail.GROUP'
                    SINGLE: '#/components/schemas/protos.procedure.ProductOptionDetail.SINGLE'
                propertyName: type
        protos.procedure.ProductOptionDetail.CONSULTATION:
            title: CONSULTATION
            description: '`type` = `CONSULTATION`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: CONSULTATION
                    enum:
                        - CONSULTATION
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - price
                    properties:
                        price: {}
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.ProductOptionDetail.GROUP:
            title: GROUP
            description: '`type` = `GROUP`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
                - price
                - compositions
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                compositions:
                    description: |-
                        그룹 옵션의 시술 구성 목록

                        `type`이 `GROUP`인 옵션에서 사용됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductGroupOptionComposition'
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
        protos.procedure.ProductOptionDetail.SINGLE:
            title: SINGLE
            description: '`type` = `SINGLE`'
            type: object
            required:
                - id
                - title
                - description
                - type
                - deleted
                - price
                - medicalService
                - count
            properties:
                title:
                    description: 상품 옵션 이름
                    type: string
                description:
                    description: 상품 옵션 설명
                    type: string
                type:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                badges:
                    description: |
                        뱃지 목록

                        정수 값으로 전달됩니다.

                        | 값 | rawValue | 의미 |
                        | --- | ---: | --- |
                        | `Badge_UNKNOWN` | 0 | 알 수 없음 |
                        | `NEW` | 1 | 신규 |
                        | `POPULAR` | 2 | 인기 |
                        | `RECOMMENDED` | 3 | 추천 |
                    type: array
                    items:
                        type: integer
                        format: int32
                count:
                    description: 시술 횟수
                    type: integer
                    format: int32
                deleted:
                    description: 삭제 여부
                    type: boolean
                displayChannels:
                    description: |
                        노출 채널 목록

                        | 값 | 의미 |
                        | --- | --- |
                        | `DisplayChannel_UNKNOWN` | 알 수 없음 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: array
                    items:
                        type: string
                        enum:
                            - DisplayChannel_UNKNOWN
                            - HOMEPAGE
                            - GANGNAMUNNI
                            - KOS_CONNECT
                frequentlyUsedOption:
                    description: 자주 찾는 시술 여부
                    type: boolean
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: |-
                        기기 및 약물 목록

                        Deprecated. 진료 항목의 기기 및 약물 목록을 사용합니다.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                procedure:
                    description: |-
                        시술 정보

                        Deprecated. 진료 항목의 시술 정보를 사용합니다.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                promotionConfigurations:
                    description: |-
                        프로모션 설정 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.PromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: |-
                        단위

                        Deprecated. 진료 항목의 단위를 사용합니다.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
            allOf:
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
        protos.procedure.ProductOptionPrice:
            type: object
            required:
                - amount
            properties:
                additional:
                    description: 고객 수가 유형별 가격 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.ProductOptionSpecialPrice'
                amount:
                    description: 정가
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxation:
                    description: |
                        과세 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `Taxation_UNKNOWN` | 알 수 없음 |
                        | `TAXABLE` | 과세 |
                        | `TAX_FREE` | 면세 |
                        | `MIXED` | 혼합 과세 |
                    type: string
                    enum:
                        - Taxation_UNKNOWN
                        - TAXABLE
                        - TAX_FREE
                        - MIXED
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.procedure.ProductOptionPriceVisitorType:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 고객 수가 유형 이름
                    type: string
                id:
                    description: 고객 수가 유형 ID
                    type: string
        protos.procedure.ProductOptionSpecialPrice:
            type: object
            required:
                - amount
                - visitorType
            properties:
                amount:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxation:
                    description: |
                        과세 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `Taxation_UNKNOWN` | 알 수 없음 |
                        | `TAXABLE` | 과세 |
                        | `TAX_FREE` | 면세 |
                        | `MIXED` | 혼합 과세 |
                    type: string
                    enum:
                        - Taxation_UNKNOWN
                        - TAXABLE
                        - TAX_FREE
                        - MIXED
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                visitorType:
                    description: 고객 수가 유형 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPriceVisitorType'
        protos.procedure.PromotionConfiguration:
            type: object
            required:
                - id
                - title
                - startDate
                - endDate
                - optionId
                - discountedPrice
            properties:
                title:
                    description: 프로모션 제목
                    type: string
                discountedPrice:
                    description: 할인 적용 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                endDate:
                    description: 프로모션 종료일
                    type: string
                id:
                    description: 프로모션 ID
                    type: string
                optionId:
                    description: 프로모션 옵션 ID
                    type: string
                startDate:
                    description: 프로모션 시작일
                    type: string
        protos.procedure.TargetCountryContract:
            type: object
            required:
                - code
                - order
            properties:
                code:
                    description: |-
                        타겟 국가 코드

                        [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) 국가 코드입니다. `ETC`는 그 외 국가를 의미합니다.
                    type: string
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                suggestingVisitorTypeId:
                    description: |-
                        추천 내원객 유형 ID

                        값이 없으면 기본 수가 유형인 `정상가`를 사용합니다.
                    type: string
        protos.procedure.Unit:
            type: object
            required:
                - type
                - value
            properties:
                type:
                    description: |
                        단위 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `UnitType_UNKNOWN` | 알 수 없음 |
                        | `UNIT` | 개 |
                        | `CC` | cc |
                        | `VIAL` | 바이알 |
                        | `PEN` | 펜 |
                        | `STRING` | 실 |
                        | `SHOT` | 샷 |
                        | `PAD` | 패드 |
                        | `MINUTE` | 분 |
                        | `KJ` | kJ |
                        | `QUANTITY` | 수량 |
                        | `DOT` | 도트 |
                        | `J` | J |
                        | `MG` | mg |
                        | `G` | g |
                        | `PULSE` | 펄스 |
                        | `BOTTLE` | 병 |
                        | `SYRINGE` | 시린지 |
                        | `PASS` | 패스 |
                        | `IU` | IU |
                        | `KHZ` | kHz |
                        | `MHZ` | MHz |
                    type: string
                    enum:
                        - UnitType_UNKNOWN
                        - UNIT
                        - CC
                        - VIAL
                        - PEN
                        - STRING
                        - SHOT
                        - PAD
                        - MINUTE
                        - KJ
                        - QUANTITY
                        - DOT
                        - J
                        - MG
                        - G
                        - PULSE
                        - BOTTLE
                        - SYRINGE
                        - PASS
                        - IU
                        - KHZ
                        - MHZ
                value:
                    description: 단위 값
                    type: number
                    format: double
        protos.procedure.medical_service.MedicalService:
            type: object
            required:
                - id
                - title
                - status
                - deleted
                - configuration
                - draftedDateTimeUtc
                - updatedDateTimeUtc
            properties:
                title:
                    description: 진료항목 이름
                    type: string
                description:
                    description: 진료항목 설명
                    type: string
                caution:
                    description: 주의사항
                    type: string
                configuration:
                    description: 진료항목 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceConfiguration'
                contributionConstant:
                    description: 기여 상수
                    type: integer
                    format: int32
                deleted:
                    description: 삭제 여부
                    type: boolean
                draftedDateTimeUtc:
                    description: 임시 저장 일시
                    type: string
                durationTime:
                    description: 소요 시간
                    type: number
                    format: double
                id:
                    description: 진료항목 ID
                    type: string
                    format: object-id
                priceAmount:
                    description: 가격 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                recommendedInterval:
                    description: 권장 간격
                    type: integer
                    format: int32
                status:
                    description: |
                        진료항목 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `MedicalServiceStatus_UNKNOWN` | 알 수 없음 |
                        | `DRAFT` | 임시 저장 |
                        | `PUBLISHED` | 게시됨 |
                    type: string
                    enum:
                        - MedicalServiceStatus_UNKNOWN
                        - DRAFT
                        - PUBLISHED
                translsMap:
                    description: 진료항목 다국어 번역 맵
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                updatedDateTimeUtc:
                    description: 수정 일시
                    type: string
        protos.procedure.medical_service.MedicalServiceConfiguration:
            type: object
            required:
                - code
                - procedure
                - healthcareReimbursement
                - taxation
            properties:
                code:
                    description: 진료항목 코드
                    type: string
                healthcareReimbursement:
                    description: |
                        급여 여부

                        | 값 | 의미 |
                        | --- | --- |
                        | `HealthcareReimbursement_UNKNOWN` | 알 수 없음 |
                        | `REIMBURSABLE` | 급여 |
                        | `NON_REIMBURSABLE` | 비급여 |
                    type: string
                    enum:
                        - HealthcareReimbursement_UNKNOWN
                        - REIMBURSABLE
                        - NON_REIMBURSABLE
                machines:
                    description: 장비 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceMachine'
                medicines:
                    description: 약품 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceMedicine'
                procedure:
                    description: 진료 행위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceProcedure'
                taxation:
                    description: |
                        과세 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `Taxation_UNKNOWN` | 알 수 없음 |
                        | `TAXABLE` | 과세 |
                        | `TAX_FREE` | 면세 |
                        | `MIXED` | 혼합 과세 |
                    type: string
                    enum:
                        - Taxation_UNKNOWN
                        - TAXABLE
                        - TAX_FREE
                        - MIXED
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.procedure.medical_service.MedicalServiceMachine:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 장비 이름
                    type: string
                id:
                    description: 장비 ID
                    type: string
                    format: object-id
                searchPhoneticName:
                    description: 검색용 발음 이름
                    type: string
        protos.procedure.medical_service.MedicalServiceMedicine:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 약품 이름
                    type: string
                id:
                    description: 약품 ID
                    type: string
                    format: object-id
                searchPhoneticName:
                    description: 검색용 발음 이름
                    type: string
        protos.procedure.medical_service.MedicalServiceProcedure:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 진료 행위 이름
                    type: string
                id:
                    description: 진료 행위 ID
                    type: string
                    format: object-id
                searchPhoneticName:
                    description: 검색용 발음 이름
                    type: string
        protos.purchase.BusinessCashReceiptConfiguration:
            type: object
            required:
                - businessNumber
            properties:
                businessNumber:
                    description: 사업자등록번호
                    type: string
        protos.purchase.CardCompany:
            type: object
            required:
                - name
            properties:
                name:
                    description: 카드사
                    type: string
        protos.purchase.CardTransactionConfiguration:
            type: object
            required:
                - cardCompany
            properties:
                acquirerName:
                    description: 카드 매입사명
                    type: string
                approvalNumber:
                    description: 승인번호
                    type: string
                cardCompany:
                    description: 카드사
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CardCompany'
                cardNumber:
                    description: 카드 번호
                    type: string
                installmentConfiguration:
                    description: 할부 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.InstallmentConfiguration'
                issuerName:
                    description: 카드 발급사명
                    type: string
        protos.purchase.CashReceiptConfiguration:
            oneOf:
                - $ref: '#/components/schemas/protos.purchase.CashReceiptConfiguration.PERSONAL'
                - $ref: '#/components/schemas/protos.purchase.CashReceiptConfiguration.BUSINESS'
                - $ref: '#/components/schemas/protos.purchase.CashReceiptConfiguration.VOLUNTARY'
            discriminator:
                mapping:
                    BUSINESS: '#/components/schemas/protos.purchase.CashReceiptConfiguration.BUSINESS'
                    PERSONAL: '#/components/schemas/protos.purchase.CashReceiptConfiguration.PERSONAL'
                    VOLUNTARY: '#/components/schemas/protos.purchase.CashReceiptConfiguration.VOLUNTARY'
                propertyName: type
        protos.purchase.CashReceiptConfiguration.BUSINESS:
            title: BUSINESS
            description: '`type` = `BUSINESS`'
            type: object
            required:
                - type
                - businessConfiguration
            properties:
                type:
                    description: |
                        현금영수증 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CASH_RECEIPT_TYPE_UNKNOWN` | 알 수 없음 |
                        | `PERSONAL` | 개인소득공제 |
                        | `BUSINESS` | 사업자지출증빙 |
                        | `VOLUNTARY` | 자진발급 |
                    type: string
                    const: BUSINESS
                    enum:
                        - BUSINESS
                businessConfiguration:
                    description: 사업자 현금영수증 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.BusinessCashReceiptConfiguration'
            allOf:
                - not:
                    type: object
                    required:
                        - personalConfiguration
                    properties:
                        personalConfiguration: {}
        protos.purchase.CashReceiptConfiguration.PERSONAL:
            title: PERSONAL
            description: '`type` = `PERSONAL`'
            type: object
            required:
                - type
                - personalConfiguration
            properties:
                type:
                    description: |
                        현금영수증 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CASH_RECEIPT_TYPE_UNKNOWN` | 알 수 없음 |
                        | `PERSONAL` | 개인소득공제 |
                        | `BUSINESS` | 사업자지출증빙 |
                        | `VOLUNTARY` | 자진발급 |
                    type: string
                    const: PERSONAL
                    enum:
                        - PERSONAL
                personalConfiguration:
                    description: 개인 현금영수증 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PersonalCashReceiptConfiguration'
            allOf:
                - not:
                    type: object
                    required:
                        - businessConfiguration
                    properties:
                        businessConfiguration: {}
        protos.purchase.CashReceiptConfiguration.VOLUNTARY:
            title: VOLUNTARY
            description: '`type` = `VOLUNTARY`'
            type: object
            required:
                - type
            properties:
                type:
                    description: |
                        현금영수증 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CASH_RECEIPT_TYPE_UNKNOWN` | 알 수 없음 |
                        | `PERSONAL` | 개인소득공제 |
                        | `BUSINESS` | 사업자지출증빙 |
                        | `VOLUNTARY` | 자진발급 |
                    type: string
                    const: VOLUNTARY
                    enum:
                        - VOLUNTARY
            allOf:
                - not:
                    type: object
                    required:
                        - personalConfiguration
                    properties:
                        personalConfiguration: {}
                - not:
                    type: object
                    required:
                        - businessConfiguration
                    properties:
                        businessConfiguration: {}
        protos.purchase.CashTransactionConfiguration:
            type: object
            properties:
                cashReceiptConfiguration:
                    description: 현금영수증 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CashReceiptConfiguration'
                incomeTaxDeductionNumber:
                    description: 현금영수증 승인번호
                    type: string
        protos.purchase.EasyPayProvider:
            type: object
            required:
                - name
            properties:
                name:
                    description: 간편결제사
                    type: string
        protos.purchase.EasyPayTransactionConfiguration:
            type: object
            required:
                - easyPayProvider
            properties:
                approvalNumber:
                    description: 승인번호
                    type: string
                easyPayProvider:
                    description: 간편결제사
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.EasyPayProvider'
                incomeTaxDeductionNumber:
                    description: 현금영수증 승인번호
                    type: string
                installmentConfiguration:
                    description: 할부 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.InstallmentConfiguration'
        protos.purchase.GetPrepaidCardChargingEventsQuery:
            type: object
            required:
                - id
            properties:
                id:
                    description: 선불카드 ID
                    type: string
        protos.purchase.GetPrepaidCardChargingEventsQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        선불카드 이벤트 목록

                        해당 선불카드가 없으면 빈 목록입니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PrepaidCardChargingEvent'
        protos.purchase.GetPrepaidCardSummariesQuery:
            type: object
            required:
                - visitorId
            properties:
                available:
                    description: |-
                        사용 가능 여부 필터

                        값을 생략하면 사용 가능 여부와 관계없이 조회합니다. `true`이면 만료되지 않았고 현금 잔액 또는 포인트 잔액이 남아 있는 선불카드만 조회합니다. `false`이면 만료되었거나 현금 잔액과 포인트 잔액이 모두 남아 있지 않은 선불카드만 조회합니다.
                    type: boolean
                visitorId:
                    description: 선불카드 목록을 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.purchase.GetPrepaidCardSummariesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        선불카드 목록

                        삭제되지 않은 선불카드만 포함합니다. `available`을 전달하면 해당 사용 가능 여부 조건을 만족하는 선불카드만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PrepaidCardSummaryContract'
        protos.purchase.GetPurchaseSummariesQueryByVisitorId:
            type: object
            required:
                - visitorId
            properties:
                visitorId:
                    description: 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.purchase.GetPurchaseSummariesQueryByVisitorIdResponse:
            type: object
            properties:
                data:
                    description: |-
                        수납 목록

                        삭제되지 않은 수납만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseSummary'
        protos.purchase.GetVisitorPrepaidCardBalanceQuery:
            type: object
            required:
                - visitorId
            properties:
                visitorId:
                    description: 잔액을 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.purchase.GetVisitorPrepaidCardBalanceQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        사용 가능한 선불카드의 합산 잔액 정보

                        만료되지 않았고 현금 잔액 또는 포인트 잔액이 남아 있으며 삭제되지 않은 선불카드만 합산합니다. 조회 대상 선불카드가 없으면 합산 잔액은 0입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.VisitorPrepaidCardBalanceContract'
        protos.purchase.InstallmentConfiguration:
            type: object
            required:
                - month
            properties:
                month:
                    description: 할부 개월 수
                    type: integer
                    format: int32
        protos.purchase.MedicalLoanCompany:
            type: object
            required:
                - name
            properties:
                name:
                    description: 의료론 제공사
                    type: string
        protos.purchase.MedicalLoanTransactionConfiguration:
            type: object
            required:
                - medicalLoanCompany
            properties:
                medicalLoanCompany:
                    description: 의료론 제공사
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.MedicalLoanCompany'
        protos.purchase.PersonalCashReceiptConfiguration:
            type: object
            required:
                - phoneNumber
            properties:
                phoneNumber:
                    description: 개인 현금영수증 휴대폰 번호
                    type: string
        protos.purchase.PlatformTransactionConfiguration:
            type: object
            required:
                - platform
            properties:
                platform:
                    description: 플랫폼
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPlatform'
        protos.purchase.PrepaidCardAmount:
            type: object
            required:
                - balance
                - total
            properties:
                balance:
                    description: 남아 있는 잔액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                total:
                    description: 총 충전 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.purchase.PrepaidCardChargingEvent:
            type: object
            required:
                - type
                - createdDateTimeUtc
                - amount
                - chargingId
            properties:
                type:
                    description: |
                        선불카드 이벤트 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PrepaidCardChargingEventType_UNKNOWN` | 알 수 없음 |
                        | `PAYMENT` | 사용 |
                        | `PAYMENT_CANCEL` | 사용 취소 |
                        | `REFUND` | 환불 |
                        | `CHARGE` | 충전 |
                        | `EXPIRATION` | 만료 |
                        | `SUBTRACT` | 차감 |
                    type: string
                    enum:
                        - PrepaidCardChargingEventType_UNKNOWN
                        - PAYMENT
                        - PAYMENT_CANCEL
                        - REFUND
                        - CHARGE
                        - EXPIRATION
                        - SUBTRACT
                amount:
                    description: 이벤트 금액 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardChargingEventAmount'
                chargingId:
                    description: 중복 방지 식별자
                    type: string
                createdDateTimeUtc:
                    description: 선불카드 이벤트 생성 일시
                    type: string
                    format: date-time
                memo:
                    description: 메모
                    type: string
                visitor:
                    description: 이벤트 관련 내원객 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardVisitor'
        protos.purchase.PrepaidCardChargingEventAmount:
            type: object
            required:
                - type
                - amount
            properties:
                type:
                    description: |
                        선불카드 금액 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PrepaidCardChargingEventAmountType_UNKNOWN` | 알 수 없음 |
                        | `BALANCE` | 현금 잔액 |
                        | `POINT` | 포인트 |
                    type: string
                    enum:
                        - PrepaidCardChargingEventAmountType_UNKNOWN
                        - BALANCE
                        - POINT
                amount:
                    description: 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.purchase.PrepaidCardSummaryContract:
            type: object
            required:
                - id
                - title
                - remainingBalance
                - expirationDateTimeUtc
                - createdDateTimeUtc
            properties:
                title:
                    description: 선불카드 이름
                    type: string
                description:
                    description: 선불카드 설명
                    type: string
                createdDateTimeUtc:
                    description: 선불카드 생성 일시
                    type: string
                    format: date-time
                expirationDateTimeUtc:
                    description: 선불카드 만료 일시
                    type: string
                    format: date-time
                id:
                    description: 선불카드 ID
                    type: string
                ownerId:
                    description: 소유자 내원객 ID
                    type: string
                    format: object-id
                remainingBalance:
                    description: 현금 잔액
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardAmount'
                remainingPoint:
                    description: 포인트 잔액
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardAmount'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        번역 대상: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                updatedDateTimeUtc:
                    description: 선불카드 수정 일시
                    type: string
                    format: date-time
        protos.purchase.PrepaidCardTransactionConfiguration:
            type: object
            required:
                - prepaidCardId
                - chargingId
                - prepaidCardName
            properties:
                chargingId:
                    description: 선불카드 충전 ID
                    type: string
                prepaidCardId:
                    description: 선불카드 ID
                    type: string
                prepaidCardName:
                    description: 선불카드 이름
                    type: string
        protos.purchase.PrepaidCardVisitor:
            type: object
            required:
                - visitorId
                - name
                - chartNumber
                - owner
            properties:
                name:
                    description: 내원객 이름
                    type: string
                chartNumber:
                    description: 차트 번호
                    type: string
                owner:
                    description: 선불카드 소유자 여부
                    type: boolean
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
        protos.purchase.PriceAdjustment:
            type: object
            required:
                - method
                - value
            properties:
                value:
                    description: 가격 조정 값
                    type: number
                    format: double
                method:
                    description: |
                        가격 조정 방식

                        | 값 | 의미 |
                        | --- | --- |
                        | `PriceAdjustmentMethod_UNSPECIFIED` | 알 수 없음 |
                        | `FIXED_AMOUNT` | 정액 |
                        | `PERCENTAGE` | 정률 |
                    type: string
                    enum:
                        - PriceAdjustmentMethod_UNSPECIFIED
                        - FIXED_AMOUNT
                        - PERCENTAGE
        protos.purchase.PurchaseAssignee:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 담당자 이름
                    type: string
                id:
                    description: 담당자 ID
                    type: string
        protos.purchase.PurchaseConversion:
            type: object
            required:
                - type
                - refConversionId
            properties:
                type:
                    description: |
                        수납 전환 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PURCHASE_CONVERSION_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `PREPAID_CARD_CONVERSION` | 선불카드 전환 |
                    type: string
                    enum:
                        - PURCHASE_CONVERSION_TYPE_UNSPECIFIED
                        - PREPAID_CARD_CONVERSION
                refConversionId:
                    description: 참조 전환 ID
                    type: string
        protos.purchase.PurchaseItem:
            oneOf:
                - $ref: '#/components/schemas/protos.purchase.PurchaseItem.PRODUCT_OPTION'
                - $ref: '#/components/schemas/protos.purchase.PurchaseItem.ETCETRA_PRODUCT'
                - $ref: '#/components/schemas/protos.purchase.PurchaseItem.PREPAID_CARD_PRODUCT'
            discriminator:
                mapping:
                    ETCETRA_PRODUCT: '#/components/schemas/protos.purchase.PurchaseItem.ETCETRA_PRODUCT'
                    PREPAID_CARD_PRODUCT: '#/components/schemas/protos.purchase.PurchaseItem.PREPAID_CARD_PRODUCT'
                    PRODUCT_OPTION: '#/components/schemas/protos.purchase.PurchaseItem.PRODUCT_OPTION'
                propertyName: type
        protos.purchase.PurchaseItem.ETCETRA_PRODUCT:
            title: ETCETRA_PRODUCT
            description: '`type` = `ETCETRA_PRODUCT`'
            type: object
            required:
                - id
                - price
                - type
                - etceteraConfiguration
            properties:
                type:
                    description: |
                        구매 항목 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PurchaseItemType_UNSPECIFIED` | 알 수 없음 |
                        | `PRODUCT_OPTION` | 상품 옵션 |
                        | `ETCETRA_PRODUCT` | 기타 상품 |
                        | `PREPAID_CARD_PRODUCT` | 선불카드 상품 |
                    type: string
                    const: ETCETRA_PRODUCT
                    enum:
                        - ETCETRA_PRODUCT
                adjustPriceV2:
                    description: 조정 후 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                adjustedPrice:
                    description: |-
                        조정 금액

                        Deprecated. `adjustPriceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                basePrice:
                    description: 가격 조정 기준 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                etceteraConfiguration:
                    description: |-
                        기타 상품 설정

                        조건: `type` = `ETCETRA_PRODUCT`
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemEtceteraConfiguration'
                id:
                    description: 구매 항목 ID
                    type: string
                migratedDateTimeUtc:
                    description: 마이그레이션 일시
                    type: string
                price:
                    description: |-
                        금액

                        Deprecated. `priceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                priceAdjustments:
                    description: 구매 항목 단위 가격 조정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItemPriceAdjustment'
                priceV2:
                    description: 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
            allOf:
                - not:
                    type: object
                    required:
                        - optionConfiguration
                    properties:
                        optionConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
        protos.purchase.PurchaseItem.PREPAID_CARD_PRODUCT:
            title: PREPAID_CARD_PRODUCT
            description: '`type` = `PREPAID_CARD_PRODUCT`'
            type: object
            required:
                - id
                - price
                - type
                - prepaidCardConfiguration
            properties:
                type:
                    description: |
                        구매 항목 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PurchaseItemType_UNSPECIFIED` | 알 수 없음 |
                        | `PRODUCT_OPTION` | 상품 옵션 |
                        | `ETCETRA_PRODUCT` | 기타 상품 |
                        | `PREPAID_CARD_PRODUCT` | 선불카드 상품 |
                    type: string
                    const: PREPAID_CARD_PRODUCT
                    enum:
                        - PREPAID_CARD_PRODUCT
                adjustPriceV2:
                    description: 조정 후 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                adjustedPrice:
                    description: |-
                        조정 금액

                        Deprecated. `adjustPriceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                basePrice:
                    description: 가격 조정 기준 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                id:
                    description: 구매 항목 ID
                    type: string
                migratedDateTimeUtc:
                    description: 마이그레이션 일시
                    type: string
                prepaidCardConfiguration:
                    description: |-
                        선불카드 상품 설정

                        조건: `type` = `PREPAID_CARD_PRODUCT`
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemPrepaidCardConfiguration'
                price:
                    description: |-
                        금액

                        Deprecated. `priceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                priceAdjustments:
                    description: 구매 항목 단위 가격 조정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItemPriceAdjustment'
                priceV2:
                    description: 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
            allOf:
                - not:
                    type: object
                    required:
                        - optionConfiguration
                    properties:
                        optionConfiguration: {}
                - not:
                    type: object
                    required:
                        - etceteraConfiguration
                    properties:
                        etceteraConfiguration: {}
        protos.purchase.PurchaseItem.PRODUCT_OPTION:
            title: PRODUCT_OPTION
            description: '`type` = `PRODUCT_OPTION`'
            type: object
            required:
                - id
                - price
                - type
                - optionConfiguration
            properties:
                type:
                    description: |
                        구매 항목 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PurchaseItemType_UNSPECIFIED` | 알 수 없음 |
                        | `PRODUCT_OPTION` | 상품 옵션 |
                        | `ETCETRA_PRODUCT` | 기타 상품 |
                        | `PREPAID_CARD_PRODUCT` | 선불카드 상품 |
                    type: string
                    const: PRODUCT_OPTION
                    enum:
                        - PRODUCT_OPTION
                adjustPriceV2:
                    description: 조정 후 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                adjustedPrice:
                    description: |-
                        조정 금액

                        Deprecated. `adjustPriceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                basePrice:
                    description: 가격 조정 기준 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                id:
                    description: 구매 항목 ID
                    type: string
                migratedDateTimeUtc:
                    description: 마이그레이션 일시
                    type: string
                optionConfiguration:
                    description: |-
                        상품 옵션 설정

                        조건: `type` = `PRODUCT_OPTION`
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionConfiguration'
                price:
                    description: |-
                        금액

                        Deprecated. `priceV2`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                priceAdjustments:
                    description: 구매 항목 단위 가격 조정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItemPriceAdjustment'
                priceV2:
                    description: 최종 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
            allOf:
                - not:
                    type: object
                    required:
                        - etceteraConfiguration
                    properties:
                        etceteraConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
        protos.purchase.PurchaseItemEtceteraConfiguration:
            type: object
            required:
                - id
                - title
                - price
            properties:
                title:
                    description: 기타 상품 제목
                    type: string
                id:
                    description: 기타 상품 ID
                    type: string
                price:
                    description: 기타 상품 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.purchase.PurchaseItemOptionComposition:
            type: object
            required:
                - procedure
                - count
                - price
            properties:
                count:
                    description: 구성 수량
                    type: integer
                    format: int32
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 구성별 기기/약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                price:
                    description: 구성 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.ProductOptionPrice'
                procedure:
                    description: 구성 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemProcedure'
                unit:
                    description: 구성 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.purchase.PurchaseItemOptionConfiguration:
            oneOf:
                - $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionConfiguration.SINGLE'
                - $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionConfiguration.GROUP'
            discriminator:
                mapping:
                    GROUP: '#/components/schemas/protos.purchase.PurchaseItemOptionConfiguration.GROUP'
                    SINGLE: '#/components/schemas/protos.purchase.PurchaseItemOptionConfiguration.SINGLE'
                propertyName: optionType
        protos.purchase.PurchaseItemOptionConfiguration.GROUP:
            title: GROUP
            description: '`optionType` = `GROUP`'
            type: object
            required:
                - id
                - title
                - productTitle
                - optionType
                - price
                - compositions
            properties:
                title:
                    description: 상품 옵션 제목
                    type: string
                compositions:
                    description: |-
                        상품 옵션 구성 목록

                        `optionType`이 `GROUP`인 경우에 존재합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionComposition'
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                optionType:
                    description: 상품 옵션 유형
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                price:
                    description: 첫 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                productTitle:
                    description: 상품 제목
                    type: string
                promotionConfiguration:
                    description: 프로모션 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionPromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `productTitle`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - medicineAndMachines
                    properties:
                        medicineAndMachines: {}
                - not:
                    type: object
                    required:
                        - procedure
                    properties:
                        procedure: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
                - not:
                    type: object
                    required:
                        - unit
                    properties:
                        unit: {}
        protos.purchase.PurchaseItemOptionConfiguration.SINGLE:
            title: SINGLE
            description: '`optionType` = `SINGLE`'
            type: object
            required:
                - id
                - title
                - productTitle
                - optionType
                - price
                - medicineAndMachines
                - procedure
                - count
                - unit
            properties:
                title:
                    description: 상품 옵션 제목
                    type: string
                count:
                    description: |-
                        수량

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    type: integer
                    format: int32
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: |-
                        기기/약물 목록

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                optionType:
                    description: 상품 옵션 유형
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                price:
                    description: 첫 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                procedure:
                    description: |-
                        시술 정보

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemProcedure'
                productTitle:
                    description: 상품 제목
                    type: string
                promotionConfiguration:
                    description: 프로모션 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseItemOptionPromotionConfiguration'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `productTitle`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: |-
                        단위

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
            allOf:
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
        protos.purchase.PurchaseItemOptionPromotionConfiguration:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 프로모션 제목
                    type: string
                id:
                    description: 프로모션 ID
                    type: string
        protos.purchase.PurchaseItemPrepaidCardConfiguration:
            type: object
            required:
                - id
                - title
                - price
                - balance
                - point
                - expirationDateTimeUtc
                - prepaidCardId
            properties:
                title:
                    description: 선불카드 상품 제목
                    type: string
                description:
                    description: 선불카드 설명
                    type: string
                balance:
                    description: 선불카드 상품 잔액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                expirationDateTimeUtc:
                    description: 선불카드 만료 일시
                    type: string
                expirationDurationInDays:
                    description: 선불카드 상품 사용기간
                    type: integer
                    format: int32
                id:
                    description: 선불카드 상품 ID
                    type: string
                point:
                    description: 선불카드 상품 포인트
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                prepaidCardId:
                    description: 선불카드 ID
                    type: string
                price:
                    description: 선불카드 상품 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                translsMap:
                    description: |-
                        다국어 번역 맵

                        지원 대상 필드: `title`, `description`.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.purchase.PurchaseItemPriceAdjustment:
            type: object
            required:
                - id
                - priceAdjustment
                - source
            properties:
                id:
                    description: 구매 항목 가격 조정 ID
                    type: string
                priceAdjustment:
                    description: 구매 항목 가격 조정 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PriceAdjustment'
                source:
                    description: |
                        구매 항목 가격 조정 출처

                        | 값 | 의미 |
                        | --- | --- |
                        | `PriceAdjustmentSource_UNSPECIFIED` | 알 수 없음 |
                        | `DIRECT` | 직접 적용 |
                        | `DISTRIBUTED` | 장바구니 가격 조정에서 분배 |
                    type: string
                    enum:
                        - PriceAdjustmentSource_UNSPECIFIED
                        - DIRECT
                        - DISTRIBUTED
        protos.purchase.PurchaseItemProcedure:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 시술 이름
                    type: string
                id:
                    description: 시술 ID
                    type: string
                    format: object-id
        protos.purchase.PurchasePriceAdjustment:
            type: object
            required:
                - id
                - priceAdjustment
                - status
            properties:
                id:
                    description: 가격 조정 ID
                    type: string
                priceAdjustment:
                    description: 가격 조정 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PriceAdjustment'
                status:
                    description: |
                        가격 조정 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `PriceAdjustmentStatus_UNSPECIFIED` | 알 수 없음 |
                        | `PENDING` | 분배 대기 |
                        | `DISTRIBUTED` | 분배됨 |
                    type: string
                    enum:
                        - PriceAdjustmentStatus_UNSPECIFIED
                        - PENDING
                        - DISTRIBUTED
        protos.purchase.PurchaseSummary:
            type: object
            required:
                - id
                - status
                - lastUpdatedDateTimeUtc
                - createdDateTimeUtc
                - process
                - visitorId
            properties:
                items:
                    description: 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItem'
                assignee:
                    description: |-
                        담당자

                        Deprecated. `assignees`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                assignees:
                    description: 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                conversion:
                    description: 수납 전환 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseConversion'
                createdDateTimeUtc:
                    description: |-
                        생성 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                id:
                    description: 수납 ID
                    type: string
                lastUpdatedDateTimeUtc:
                    description: |-
                        마지막 수정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                migratedDateTimeUtc:
                    description: |-
                        마이그레이션 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                pendingItems:
                    description: 추가 대기 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItem'
                priceAdjustments:
                    description: 수납 단위 가격 조정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchasePriceAdjustment'
                process:
                    description: |
                        수납 프로세스 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `PURCHASE_PROCESS_UNSPECIFIED` | 알 수 없음 |
                        | `NOT_IN_PROCESS` | 진행 중인 프로세스 없음 |
                        | `PENDING` | 수납 추가 진행 중 |
                        | `REVOKING` | 수납 구매변경 진행 중 |
                        | `REFUNDING` | 수납 환불 진행 중 |
                        | `PREPAID_CARD_ITEM_SUBSTITUTING` | 다른 선불카드로 변경 진행 중 |
                    type: string
                    enum:
                        - PURCHASE_PROCESS_UNSPECIFIED
                        - NOT_IN_PROCESS
                        - PENDING
                        - REVOKING
                        - REFUNDING
                        - PREPAID_CARD_ITEM_SUBSTITUTING
                purchaseMemo:
                    description: 수납 메모
                    type: string
                refundingItems:
                    description: 환불 중인 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.RefundingPurchaseItem'
                revokingItems:
                    description: 변경 취소 중인 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.RevokingPurchaseItem'
                status:
                    description: |
                        수납 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `PURCHASE_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `REFUNDED` | 전체 환불 |
                        | `PARTIALLY_REFUNDED` | 부분 환불 |
                        | `ACCEPTED` | 수납 확정 |
                        | `PAID` | 결제 완료 |
                        | `INITIALIZED` | 초기화됨 |
                    type: string
                    enum:
                        - PURCHASE_STATUS_UNSPECIFIED
                        - REFUNDED
                        - PARTIALLY_REFUNDED
                        - ACCEPTED
                        - PAID
                        - INITIALIZED
                transactions:
                    description: 거래 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction'
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
        protos.purchase.PurchaseSummaryTransaction:
            oneOf:
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.CARD'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.CASH'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.TRANSFER'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.PLATFORM'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.PREPAID_CARD'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.EASY_PAY'
                - $ref: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.MEDICAL_LOAN'
            discriminator:
                mapping:
                    CARD: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.CARD'
                    CASH: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.CASH'
                    EASY_PAY: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.EASY_PAY'
                    MEDICAL_LOAN: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.MEDICAL_LOAN'
                    PLATFORM: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.PLATFORM'
                    PREPAID_CARD: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.PREPAID_CARD'
                    TRANSFER: '#/components/schemas/protos.purchase.PurchaseSummaryTransaction.TRANSFER'
                propertyName: paymentType
        protos.purchase.PurchaseSummaryTransaction.CARD:
            title: CARD
            description: '`paymentType` = `CARD`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - cardConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                cardConfiguration:
                    description: |-
                        카드 거래 설정

                        `paymentType`이 `CARD`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CardTransactionConfiguration'
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: CARD
                    enum:
                        - CARD
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.CASH:
            title: CASH
            description: '`paymentType` = `CASH`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - cashConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                cashConfiguration:
                    description: |-
                        현금 거래 설정

                        `paymentType`이 `CASH`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CashTransactionConfiguration'
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: CASH
                    enum:
                        - CASH
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.EASY_PAY:
            title: EASY_PAY
            description: '`paymentType` = `EASY_PAY`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - easyPayConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                easyPayConfiguration:
                    description: |-
                        간편결제 설정

                        `paymentType`이 `EASY_PAY`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.EasyPayTransactionConfiguration'
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: EASY_PAY
                    enum:
                        - EASY_PAY
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.MEDICAL_LOAN:
            title: MEDICAL_LOAN
            description: '`paymentType` = `MEDICAL_LOAN`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - medicalLoanConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                medicalLoanConfiguration:
                    description: |-
                        의료론 거래 설정

                        `paymentType`이 `MEDICAL_LOAN`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.MedicalLoanTransactionConfiguration'
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: MEDICAL_LOAN
                    enum:
                        - MEDICAL_LOAN
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.PLATFORM:
            title: PLATFORM
            description: '`paymentType` = `PLATFORM`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - platformConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: PLATFORM
                    enum:
                        - PLATFORM
                platformConfiguration:
                    description: |-
                        플랫폼 거래 설정

                        `paymentType`이 `PLATFORM`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PlatformTransactionConfiguration'
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.PREPAID_CARD:
            title: PREPAID_CARD
            description: '`paymentType` = `PREPAID_CARD`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - prepaidCardConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: PREPAID_CARD
                    enum:
                        - PREPAID_CARD
                prepaidCardConfiguration:
                    description: |-
                        선불카드 거래 설정

                        `paymentType`이 `PREPAID_CARD`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardTransactionConfiguration'
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.PurchaseSummaryTransaction.TRANSFER:
            title: TRANSFER
            description: '`paymentType` = `TRANSFER`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - transferConfiguration
            properties:
                assignee:
                    description: 거래 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PurchaseAssignee'
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: TRANSFER
                    enum:
                        - TRANSFER
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                transferConfiguration:
                    description: |-
                        계좌이체 거래 설정

                        `paymentType`이 `TRANSFER`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransferTransactionConfiguration'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.RefundingPurchaseItem:
            type: object
            required:
                - targetItemId
            properties:
                adjustedPrice:
                    description: 환불 조정 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Price'
                targetItemId:
                    description: 환불 대상 구매 항목 ID
                    type: string
        protos.purchase.RevokingPurchaseItem:
            type: object
            required:
                - targetItemId
            properties:
                targetItemId:
                    description: 변경 취소 대상 구매 항목 ID
                    type: string
        protos.purchase.Transaction:
            oneOf:
                - $ref: '#/components/schemas/protos.purchase.Transaction.CARD'
                - $ref: '#/components/schemas/protos.purchase.Transaction.CASH'
                - $ref: '#/components/schemas/protos.purchase.Transaction.TRANSFER'
                - $ref: '#/components/schemas/protos.purchase.Transaction.PLATFORM'
                - $ref: '#/components/schemas/protos.purchase.Transaction.PREPAID_CARD'
                - $ref: '#/components/schemas/protos.purchase.Transaction.EASY_PAY'
                - $ref: '#/components/schemas/protos.purchase.Transaction.MEDICAL_LOAN'
            discriminator:
                mapping:
                    CARD: '#/components/schemas/protos.purchase.Transaction.CARD'
                    CASH: '#/components/schemas/protos.purchase.Transaction.CASH'
                    EASY_PAY: '#/components/schemas/protos.purchase.Transaction.EASY_PAY'
                    MEDICAL_LOAN: '#/components/schemas/protos.purchase.Transaction.MEDICAL_LOAN'
                    PLATFORM: '#/components/schemas/protos.purchase.Transaction.PLATFORM'
                    PREPAID_CARD: '#/components/schemas/protos.purchase.Transaction.PREPAID_CARD'
                    TRANSFER: '#/components/schemas/protos.purchase.Transaction.TRANSFER'
                propertyName: paymentType
        protos.purchase.Transaction.CARD:
            title: CARD
            description: '`paymentType` = `CARD`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - cardConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                cardConfiguration:
                    description: |-
                        카드 거래 설정

                        `paymentType`이 `CARD`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CardTransactionConfiguration'
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: CARD
                    enum:
                        - CARD
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.Transaction.CASH:
            title: CASH
            description: '`paymentType` = `CASH`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - cashConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                cashConfiguration:
                    description: |-
                        현금 거래 설정

                        `paymentType`이 `CASH`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CashTransactionConfiguration'
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: CASH
                    enum:
                        - CASH
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.Transaction.EASY_PAY:
            title: EASY_PAY
            description: '`paymentType` = `EASY_PAY`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - easyPayConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                easyPayConfiguration:
                    description: |-
                        간편결제 설정

                        `paymentType`이 `EASY_PAY`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.EasyPayTransactionConfiguration'
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: EASY_PAY
                    enum:
                        - EASY_PAY
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.Transaction.MEDICAL_LOAN:
            title: MEDICAL_LOAN
            description: '`paymentType` = `MEDICAL_LOAN`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - medicalLoanConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                medicalLoanConfiguration:
                    description: |-
                        의료론 거래 설정

                        `paymentType`이 `MEDICAL_LOAN`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.MedicalLoanTransactionConfiguration'
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: MEDICAL_LOAN
                    enum:
                        - MEDICAL_LOAN
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
        protos.purchase.Transaction.PLATFORM:
            title: PLATFORM
            description: '`paymentType` = `PLATFORM`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - platformConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: PLATFORM
                    enum:
                        - PLATFORM
                platformConfiguration:
                    description: |-
                        플랫폼 거래 설정

                        `paymentType`이 `PLATFORM`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PlatformTransactionConfiguration'
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.Transaction.PREPAID_CARD:
            title: PREPAID_CARD
            description: '`paymentType` = `PREPAID_CARD`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - prepaidCardConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: PREPAID_CARD
                    enum:
                        - PREPAID_CARD
                prepaidCardConfiguration:
                    description: |-
                        선불카드 거래 설정

                        `paymentType`이 `PREPAID_CARD`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardTransactionConfiguration'
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - transferConfiguration
                    properties:
                        transferConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.Transaction.TRANSFER:
            title: TRANSFER
            description: '`paymentType` = `TRANSFER`'
            type: object
            required:
                - id
                - price
                - status
                - paymentType
                - transferConfiguration
            properties:
                assigneeId:
                    description: 거래 담당자 ID
                    type: string
                canceledRefId:
                    description: 취소 참조 ID
                    type: string
                createdDateTimeUtc:
                    description: |-
                        거래 생성 일시

                        Deprecated. `paymentDateTime.lastUpdatedDateTimeUtc`를 사용하세요.
                    deprecated: true
                    type: string
                id:
                    description: 거래 ID
                    type: string
                paymentDateTime:
                    description: |-
                        거래 지불 일시 정보

                        `paymentDateTime.lastUpdatedDateTimeUtc`가 없다면 하위 호환을 위해 `createdDateTimeUtc`를 사용하세요.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPaymentDateTime'
                paymentType:
                    description: |
                        거래 지불 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionPaymentType_UNSPECIFIED` | 알 수 없음 |
                        | `CASH` | 현금 |
                        | `CARD` | 카드 |
                        | `PREPAID_CARD` | 선불카드 |
                        | `PLATFORM` | 앱 결제 |
                        | `TRANSFER` | 계좌이체 |
                        | `EASY_PAY` | 간편결제 |
                        | `MEDICAL_LOAN` | 의료론 |
                    type: string
                    const: TRANSFER
                    enum:
                        - TRANSFER
                price:
                    description: 거래 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                primaryData:
                    description: 거래 원본 데이터
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransactionPrimaryData'
                status:
                    description: |
                        거래 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TransactionStatus_UNSPECIFIED` | 알 수 없음 |
                        | `REQUESTED` | 요청됨 |
                        | `APPROVED` | 승인됨 |
                        | `CANCELED` | 취소 거래 |
                        | `SPENT` | 반환 거래 |
                        | `FAILED` | 처리 실패 |

                        `CANCELED`는 거래가 취소된 상태가 아니라 취소 거래를 뜻합니다. `SPENT`는 거래가 승인된 상태가 아니며, 금액이 음수인 거래입니다. 내원객에게 거래 취소 없이 돈을 돌려줄 때 사용됩니다. `FAILED`는 요청된 거래 처리 실패를 뜻합니다. 외부 결제 연동사 실패나 리더기 인식 실패 등으로 발생할 수 있습니다.
                    type: string
                    enum:
                        - TransactionStatus_UNSPECIFIED
                        - REQUESTED
                        - APPROVED
                        - CANCELED
                        - SPENT
                        - FAILED
                suppliedAmount:
                    description: 과세 공급가액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                taxFreeAmount:
                    description: 면세 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                transferConfiguration:
                    description: |-
                        계좌이체 거래 설정

                        `paymentType`이 `TRANSFER`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.TransferTransactionConfiguration'
                vatAmount:
                    description: 부가가치세
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
            allOf:
                - not:
                    type: object
                    required:
                        - cardConfiguration
                    properties:
                        cardConfiguration: {}
                - not:
                    type: object
                    required:
                        - cashConfiguration
                    properties:
                        cashConfiguration: {}
                - not:
                    type: object
                    required:
                        - platformConfiguration
                    properties:
                        platformConfiguration: {}
                - not:
                    type: object
                    required:
                        - prepaidCardConfiguration
                    properties:
                        prepaidCardConfiguration: {}
                - not:
                    type: object
                    required:
                        - easyPayConfiguration
                    properties:
                        easyPayConfiguration: {}
                - not:
                    type: object
                    required:
                        - medicalLoanConfiguration
                    properties:
                        medicalLoanConfiguration: {}
        protos.purchase.TransactionPaymentDateTime:
            type: object
            required:
                - lastUpdatedDateTimeUtc
            properties:
                approvedDateTimeUtc:
                    description: 승인 일시
                    type: string
                canceledDateTimeUtc:
                    description: 취소 일시
                    type: string
                failedDateTimeUtc:
                    description: 실패 일시
                    type: string
                lastUpdatedDateTimeUtc:
                    description: 마지막 결제 상태 변경 일시
                    type: string
                requestedDateTimeUtc:
                    description: 요청 일시
                    type: string
                spentDateTimeUtc:
                    description: 반환 일시
                    type: string
        protos.purchase.TransactionPlatform:
            type: object
            required:
                - name
            properties:
                name:
                    description: 플랫폼
                    type: string
        protos.purchase.TransactionPrimaryData:
            type: object
            required:
                - vendor
                - terminalTransactionId
            properties:
                acquirerName:
                    description: 카드 매입사명
                    type: string
                approvalNumber:
                    description: 승인번호
                    type: string
                cardCompanyName:
                    description: 카드사 이름
                    type: string
                cardNumber:
                    description: 카드 번호
                    type: string
                easyPayProviderCode:
                    description: 간편결제사 코드
                    type: string
                failureReasonMessage:
                    description: 실패 사유 메시지
                    type: string
                installmentConfiguration:
                    description: 할부 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.InstallmentConfiguration'
                issuerName:
                    description: 발급사명
                    type: string
                merchantId:
                    description: 가맹점 ID
                    type: string
                paymentUrl:
                    description: 결제 URL
                    type: string
                rawData:
                    description: 결제 단말기 원본 응답
                    type: string
                terminalId:
                    description: 단말기 ID
                    type: string
                terminalTransactionId:
                    description: 단말기 거래 ID
                    type: string
                vatAmount:
                    description: |-
                        부가가치세

                        Deprecated. `Transaction.vatAmount`를 사용하세요.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                vendor:
                    description: |
                        결제 단말기 업체

                        | 값 | 의미 |
                        | --- | --- |
                        | `PaymentTerminalVendor_UNSPECIFIED` | 알 수 없음 |
                        | `KOVAN` | KOVAN |
                        | `KSNET` | KSNET |
                        | `STRIPE` | Stripe |
                        | `KPN` | KPN |
                    type: string
                    enum:
                        - PaymentTerminalVendor_UNSPECIFIED
                        - KOVAN
                        - KSNET
                        - STRIPE
                        - KPN
        protos.purchase.TransferTransactionConfiguration:
            type: object
            properties:
                cashReceiptConfiguration:
                    description: 계좌이체 현금영수증 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.CashReceiptConfiguration'
                incomeTaxDeductionNumber:
                    description: 현금영수증 승인번호
                    type: string
        protos.purchase.VisitorPrepaidCardBalanceContract:
            type: object
            required:
                - remainingBalance
                - remainingPoint
            properties:
                lastBalanceChargedDateTimeUtc:
                    description: |-
                        가장 최근 현금 충전 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time입니다. `BALANCE` 금액 유형의 `CHARGE` 이벤트가 없으면 응답에 포함되지 않습니다.
                    type: string
                    format: date-time
                lastPointChargedDateTimeUtc:
                    description: |-
                        가장 최근 포인트 충전 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time입니다. `POINT` 금액 유형의 `CHARGE` 이벤트가 없으면 응답에 포함되지 않습니다.
                    type: string
                    format: date-time
                remainingBalance:
                    description: |-
                        사용 가능한 선불카드의 합산 현금 잔액

                        `balance`는 남아 있는 현금 잔액 합계, `total`은 총 현금 충전 금액입니다. 조회 대상 선불카드가 없으면 금액은 0입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardAmount'
                remainingPoint:
                    description: |-
                        사용 가능한 선불카드의 합산 포인트 잔액

                        `balance`는 남아 있는 포인트 잔액 합계, `total`은 총 포인트 충전 금액입니다. 조회 대상 선불카드가 없으면 금액은 0입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.purchase.PrepaidCardAmount'
        protos.schedule.BreaktimeContract:
            type: object
            required:
                - startTime
                - endTime
            properties:
                endTime:
                    description: |-
                        휴게 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                startTime:
                    description: |-
                        휴게 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
        protos.schedule.CancelReservationCommand:
            type: object
            required:
                - scheduleId
                - reason
            properties:
                reason:
                    description: |
                        예약 취소 사유

                        | 값 | 의미 |
                        | --- | --- |
                        | `CANCEL_RESERVATION_REASON_UNSPECIFIED` | 알 수 없음 |
                        | `CANCELED` | 예약 취소 |
                        | `NO_SHOW` | 노쇼 |

                        `CANCEL_RESERVATION_REASON_UNSPECIFIED`는 일반적인 예약 취소 요청에서 사용하지 않는 기본값입니다.
                    type: string
                    enum:
                        - CANCEL_RESERVATION_REASON_UNSPECIFIED
                        - CANCELED
                        - NO_SHOW
                scheduleId:
                    description: 취소할 스케줄 ID
                    type: string
                    format: uuid
        protos.schedule.Counselor:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 상담사 계정 이름
                    type: string
                id:
                    description: 상담사 계정 ID
                    type: string
                    format: object-id
        protos.schedule.Doctor:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 계정 이름
                    type: string
                id:
                    description: 계정 ID
                    type: string
                    format: object-id
        protos.schedule.EventInitiator:
            type: object
            oneOf:
                - properties:
                    account:
                        description: 계정 주체
                        allOf:
                            - $ref: '#/components/schemas/protos.schedule.EventInitiator.Account'
                  required:
                    - account
                  title: 계정 주체
                  type: object
                - properties:
                    system:
                        description: 시스템 주체
                        allOf:
                            - $ref: '#/components/schemas/protos.schedule.EventInitiator.System'
                  required:
                    - system
                  title: 시스템 주체
                  type: object
        protos.schedule.EventInitiator.Account:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 계정 이름
                    type: string
                id:
                    description: 계정 ID
                    type: string
        protos.schedule.EventInitiator.System:
            type: object
        protos.schedule.IntervalCapacityContract:
            type: object
            required:
                - enabled
                - intervalCapacity
                - zoneId
            properties:
                enabled:
                    description: 해당 구역 활성화 여부
                    type: boolean
                intervalCapacity:
                    description: 단위 시간당 예약 정원
                    type: integer
                    format: int32
                zoneId:
                    description: 구역 ID
                    type: string
                    format: object-id
        protos.schedule.OccupiedResource:
            type: object
            required:
                - id
                - type
                - reservationTime
            properties:
                type:
                    description: |
                        예약 일정 리소스 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `OccupiedResourceType_UNSPECIFIED` | 알 수 없음 |
                        | `RESERVATION_GROUP` | 예약 그룹 |
                    type: string
                    enum:
                        - OccupiedResourceType_UNSPECIFIED
                        - RESERVATION_GROUP
                id:
                    description: 예약 일정 리소스 ID
                    type: string
                reservationTime:
                    description: 예약 일정 시간 범위
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
            oneOf:
                - properties:
                    reservationGroup:
                        description: 예약 그룹 리소스
                        allOf:
                            - $ref: '#/components/schemas/protos.schedule.ReservationGroupResource'
                  required:
                    - reservationGroup
                  title: 예약 그룹 리소스
                  type: object
        protos.schedule.OperationTimeContract:
            type: object
            required:
                - enabled
            properties:
                breaktime:
                    description: 휴게 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.BreaktimeContract'
                enabled:
                    description: 운영 여부
                    type: boolean
                endTime:
                    description: |-
                        운영 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                startTime:
                    description: |-
                        운영 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
        protos.schedule.OperationTimetableContract:
            type: object
            required:
                - monday
                - tuesday
                - wednesday
                - thursday
                - friday
                - saturday
                - sunday
            properties:
                friday:
                    description: 금요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                monday:
                    description: 월요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                saturday:
                    description: 토요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                sunday:
                    description: 일요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                thursday:
                    description: 목요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                tuesday:
                    description: 화요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
                wednesday:
                    description: 수요일 운영 시간
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimeContract'
        protos.schedule.ReservationAssignee:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 담당자 이름
                    type: string
                id:
                    description: 담당자 ID
                    type: string
        protos.schedule.ReservationFunnel:
            type: object
            required:
                - funnel
                - funnelDetail
            properties:
                funnel:
                    description: 예약 유입 경로 코드
                    allOf:
                        - $ref: '#/components/schemas/protos.tenant.Code'
                funnelCategory:
                    description: 예약 유입 경로 카테고리 코드
                    allOf:
                        - $ref: '#/components/schemas/protos.tenant.Code'
                funnelDetail:
                    description: |-
                        상세 유입 경로

                        자유 텍스트로 전달합니다.
                    type: string
        protos.schedule.ReservationGroupContract:
            type: object
            required:
                - id
                - title
                - memo
                - startDate
                - intervalMinutes
                - intervalCapacities
                - isDefault
                - operationTimetable
                - order
            properties:
                title:
                    description: 예약 그룹 이름
                    type: string
                id:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                intervalCapacities:
                    description: 구역별 예약 정원 설정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.IntervalCapacityContract'
                intervalMinutes:
                    description: 예약 단위 시간(분)
                    type: integer
                    format: int32
                isDefault:
                    description: 기본 예약 그룹 여부
                    type: boolean
                memo:
                    description: 예약 그룹 메모
                    type: string
                operationTimetable:
                    description: 운영 시간표
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.OperationTimetableContract'
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                reservationPolicy:
                    description: |-
                        예약 정책

                        세부 필드값이 없으면 병원 기본 운영 정책을 사용합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy'
                sameDayCloseBufferMinutes:
                    description: |-
                        당일 예약 마감 버퍼(분)

                        Deprecated 필드입니다.
                    deprecated: true
                    type: integer
                    format: int32
                startDate:
                    description: |-
                        예약 시작 가능 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
        protos.schedule.ReservationGroupResource:
            type: object
            required:
                - reservationGroupId
                - zoneId
            properties:
                doctors:
                    description: 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.Doctor'
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                zoneId:
                    description: 구역 ID
                    type: string
                    format: object-id
        protos.schedule.ReservationPolicy:
            type: object
            properties:
                cancel:
                    description: 예약 취소 가능 마감 규칙
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy.ClosingRule'
                reschedule:
                    description: 예약 변경 가능 마감 규칙
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy.ClosingRule'
                reservation:
                    description: 예약 생성 규칙
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy.ReservationRule'
        protos.schedule.ReservationPolicy.ClosingRule:
            type: object
            required:
                - allowed
                - minimumAdvance
            properties:
                allowed:
                    description: 허용 여부
                    type: boolean
                minimumAdvance:
                    description: 최소 마감 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy.MinimumAdvanceConfiguration'
        protos.schedule.ReservationPolicy.MinimumAdvanceConfiguration:
            type: object
            oneOf:
                - properties:
                    minReservationStartDateTimeLeadMinutes:
                        description: 예약 시작 일시 기준 최소 마감 시간(분)
                        type: integer
                        format: int32
                  required:
                    - minReservationStartDateTimeLeadMinutes
                  title: 예약 시작 일시 기준 최소 마감 시간(분)
                  type: object
                - properties:
                    minReservationStartDateLeadDays:
                        description: 예약일 기준 최소 마감 일수
                        type: integer
                        format: int32
                  required:
                    - minReservationStartDateLeadDays
                  title: 예약일 기준 최소 마감 일수
                  type: object
        protos.schedule.ReservationPolicy.ReservationRule:
            type: object
            properties:
                maxAdvanceDays:
                    description: |-
                        선택 가능한 최대 예약 일수

                        현재 날짜를 기준으로 계산합니다.
                    type: integer
                    format: int32
                minimumAdvance:
                    description: 예약 최소 마감 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationPolicy.MinimumAdvanceConfiguration'
        protos.schedule.ReservationRequestedOptionConfiguration:
            type: object
            required:
                - optionId
                - optionTitle
                - price
            properties:
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                optionId:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                optionTitle:
                    description: 상품 옵션 이름
                    type: string
                price:
                    description: 가격 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationRequestedOptionPrice'
                productTitle:
                    description: 상품 이름
                    type: string
                promotionTitle:
                    description: 프로모션 이름
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.schedule.ReservationRequestedOptionPrice:
            type: object
            required:
                - amount
                - currency
                - reason
            properties:
                amount:
                    description: 가격 금액
                    type: integer
                    format: int32
                currency:
                    description: |-
                        통화 코드

                        [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 표준 통화 코드입니다. 예: `KRW`
                    type: string
                reason:
                    description: 가격 사유
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationRequestedOptionPriceReason'
        protos.schedule.ReservationRequestedOptionPriceReason:
            oneOf:
                - $ref: '#/components/schemas/protos.schedule.ReservationRequestedOptionPriceReason.GENERAL'
                - $ref: '#/components/schemas/protos.schedule.ReservationRequestedOptionPriceReason.VISITOR_TYPE'
            discriminator:
                mapping:
                    GENERAL: '#/components/schemas/protos.schedule.ReservationRequestedOptionPriceReason.GENERAL'
                    VISITOR_TYPE: '#/components/schemas/protos.schedule.ReservationRequestedOptionPriceReason.VISITOR_TYPE'
                propertyName: type
        protos.schedule.ReservationRequestedOptionPriceReason.GENERAL:
            title: GENERAL
            description: '`type` = `GENERAL`'
            type: object
            required:
                - type
            properties:
                type:
                    description: |
                        요청 시술 가격 사유 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVATION_REQUESTED_OPTION_PRICE_REASON_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `GENERAL` | 일반 가격 |
                        | `PROMOTION` | 프로모션 가격 (Deprecated) |
                        | `VISITOR_TYPE` | 내원객 유형별 가격 |
                    type: string
                    const: GENERAL
                    enum:
                        - GENERAL
            allOf:
                - not:
                    type: object
                    required:
                        - promotionId
                    properties:
                        promotionId: {}
                - not:
                    type: object
                    required:
                        - visitorTypeId
                    properties:
                        visitorTypeId: {}
        protos.schedule.ReservationRequestedOptionPriceReason.VISITOR_TYPE:
            title: VISITOR_TYPE
            description: '`type` = `VISITOR_TYPE`'
            type: object
            required:
                - type
                - visitorTypeId
            properties:
                type:
                    description: |
                        요청 시술 가격 사유 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVATION_REQUESTED_OPTION_PRICE_REASON_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `GENERAL` | 일반 가격 |
                        | `PROMOTION` | 프로모션 가격 (Deprecated) |
                        | `VISITOR_TYPE` | 내원객 유형별 가격 |
                    type: string
                    const: VISITOR_TYPE
                    enum:
                        - VISITOR_TYPE
                visitorTypeId:
                    description: 내원객 유형 ID
                    type: string
            allOf:
                - not:
                    type: object
                    required:
                        - promotionId
                    properties:
                        promotionId: {}
        protos.schedule.ReservationRequestedProcedure:
            oneOf:
                - $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure.OPTION'
                - $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure.TICKET'
            discriminator:
                mapping:
                    OPTION: '#/components/schemas/protos.schedule.ReservationRequestedProcedure.OPTION'
                    TICKET: '#/components/schemas/protos.schedule.ReservationRequestedProcedure.TICKET'
                propertyName: type
        protos.schedule.ReservationRequestedProcedure.OPTION:
            title: OPTION
            description: '`type` = `OPTION`'
            type: object
            required:
                - type
                - optionConfiguration
            properties:
                type:
                    description: |
                        요청 시술 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVATION_REQUESTED_PROCEDURE_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `OPTION` | 상품 옵션 |
                        | `TICKET` | 시술권 |
                    type: string
                    const: OPTION
                    enum:
                        - OPTION
                optionConfiguration:
                    description: |-
                        상품 옵션 설정

                        `type`이 `OPTION`인 요청 시술의 설정입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationRequestedOptionConfiguration'
            allOf:
                - not:
                    type: object
                    required:
                        - ticketConfiguration
                    properties:
                        ticketConfiguration: {}
        protos.schedule.ReservationRequestedProcedure.TICKET:
            title: TICKET
            description: '`type` = `TICKET`'
            type: object
            required:
                - type
                - ticketConfiguration
            properties:
                type:
                    description: |
                        요청 시술 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVATION_REQUESTED_PROCEDURE_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `OPTION` | 상품 옵션 |
                        | `TICKET` | 시술권 |
                    type: string
                    const: TICKET
                    enum:
                        - TICKET
                ticketConfiguration:
                    description: |-
                        시술권 설정

                        `type`이 `TICKET`인 요청 시술의 설정입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationRequestedTicketConfiguration'
            allOf:
                - not:
                    type: object
                    required:
                        - optionConfiguration
                    properties:
                        optionConfiguration: {}
        protos.schedule.ReservationRequestedTicketConfiguration:
            type: object
            required:
                - ticketId
                - ticketTitle
                - optionTitle
            properties:
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                optionTitle:
                    description: 옵션 이름
                    type: string
                productTitle:
                    description: 상품 이름
                    type: string
                ticketId:
                    description: 시술권 ID
                    type: string
                ticketTitle:
                    description: 시술권 이름
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.schedule.ReservationRuleSummary:
            type: object
            required:
                - id
                - title
                - isActive
                - isDefault
                - lastModifiedBy
                - updatedDateTimeUtc
                - createdDateTimeUtc
            properties:
                title:
                    description: 예약 규칙 이름
                    type: string
                createdDateTimeUtc:
                    description: |-
                        생성 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                id:
                    description: 예약 규칙 ID
                    type: string
                isActive:
                    description: 예약 규칙 활성화 여부
                    type: boolean
                isDefault:
                    description: 기본 예약 규칙 여부
                    type: boolean
                lastModifiedBy:
                    description: 최종 수정한 주체
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.EventInitiator'
                updatedDateTimeUtc:
                    description: |-
                        최종 수정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
        protos.schedule.RoomContract:
            type: object
            required:
                - id
                - zoneId
                - title
                - order
            properties:
                title:
                    description: 방 이름
                    type: string
                id:
                    description: 방 ID
                    type: string
                    format: object-id
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                zoneId:
                    description: 구역 ID
                    type: string
                    format: object-id
        protos.schedule.UpdateReservationCommand:
            type: object
            required:
                - scheduleId
                - reservationGroupId
                - startDateTime
                - endDateTime
                - zoneId
            properties:
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                counselor:
                    description: 희망 상담사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Counselor'
                doctor:
                    description: 희망 의사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Doctor'
                endDateTime:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                funnel:
                    description: 예약 유입 경로 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationFunnel'
                reservationAssignee:
                    description: 예약 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationAssignee'
                reservationGroupId:
                    description: 예약 그룹 ID
                    type: string
                    format: object-id
                reservationMemo:
                    description: 예약 메모
                    type: string
                scheduleId:
                    description: 수정할 스케줄 ID
                    type: string
                    format: uuid
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                startDateTime:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                zoneId:
                    description: 예약 구역 ID
                    type: string
                    format: object-id
        protos.schedule.VisitorLocation:
            type: object
            required:
                - zoneId
            properties:
                zoneId:
                    description: 접수 구역 ID
                    type: string
                    format: object-id
        protos.schedule.consultation.ConsultationContent:
            type: object
            required:
                - text
            properties:
                text:
                    description: 상담 내용 텍스트
                    type: string
        protos.schedule.consultation.ConsultationContract:
            type: object
            required:
                - id
                - visitor
                - consultationStartedDateTimeUtc
                - content
                - createdDateTimeUtc
                - updatedDateTimeUtc
            properties:
                consultationDoctors:
                    description: 상담 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.Doctor'
                consultationProcedures:
                    description: 상담 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.consultation.ConsultationProcedure'
                consultationStartedDateTimeUtc:
                    description: 상담 시작 일시
                    type: string
                content:
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationContent'
                    description: 상담 내용
                counselors:
                    description: 상담사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.Counselor'
                createdDateTimeUtc:
                    description: 생성 일시
                    type: string
                id:
                    description: 상담 ID
                    type: string
                result:
                    description: 상담 결과
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationResult'
                scheduleId:
                    description: |-
                        연결된 스케줄 ID

                        비대면 상담에는 포함되지 않을 수 있습니다.
                    type: string
                    format: uuid
                updatedDateTimeUtc:
                    description: 수정 일시
                    type: string
                visitor:
                    description: 상담 내원객 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationVisitor'
        protos.schedule.consultation.ConsultationOptionComposition:
            type: object
            required:
                - count
                - price
            properties:
                count:
                    description: 구성 수량
                    type: integer
                    format: int32
                medicalService:
                    description: 구성 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                price:
                    description: 구성 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
        protos.schedule.consultation.ConsultationOptionConfiguration:
            oneOf:
                - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationOptionConfiguration.SINGLE'
                - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationOptionConfiguration.GROUP'
            discriminator:
                mapping:
                    GROUP: '#/components/schemas/protos.schedule.consultation.ConsultationOptionConfiguration.GROUP'
                    SINGLE: '#/components/schemas/protos.schedule.consultation.ConsultationOptionConfiguration.SINGLE'
                propertyName: optionType
        protos.schedule.consultation.ConsultationOptionConfiguration.GROUP:
            title: GROUP
            description: '`optionType` = `GROUP`'
            type: object
            required:
                - id
                - title
                - productTitle
                - optionType
                - price
                - compositions
            properties:
                title:
                    description: 상품 옵션 제목
                    type: string
                compositions:
                    description: |-
                        상품 옵션 구성 목록

                        `optionType`이 `GROUP`인 경우에 존재합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.consultation.ConsultationOptionComposition'
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                optionType:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: GROUP
                    enum:
                        - GROUP
                price:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                productTitle:
                    description: 상품 제목
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - medicalService
                    properties:
                        medicalService: {}
                - not:
                    type: object
                    required:
                        - count
                    properties:
                        count: {}
        protos.schedule.consultation.ConsultationOptionConfiguration.SINGLE:
            title: SINGLE
            description: '`optionType` = `SINGLE`'
            type: object
            required:
                - id
                - title
                - productTitle
                - optionType
                - price
                - medicalService
                - count
            properties:
                title:
                    description: 상품 옵션 제목
                    type: string
                count:
                    description: |-
                        수량

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    type: integer
                    format: int32
                id:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                medicalService:
                    description: |-
                        진료 항목

                        `optionType`이 `SINGLE`인 경우에 존재합니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                optionType:
                    description: |
                        상품 옵션 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ProductOptionType_UNKNOWN` | 알 수 없음 |
                        | `SINGLE` | 단일 옵션 |
                        | `GROUP` | 그룹 옵션 |
                        | `CONSULTATION` | 상담 옵션 |
                    type: string
                    const: SINGLE
                    enum:
                        - SINGLE
                price:
                    description: 가격
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.PriceAmount'
                productTitle:
                    description: 상품 제목
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - compositions
                    properties:
                        compositions: {}
        protos.schedule.consultation.ConsultationProcedure:
            type: object
            required:
                - type
            properties:
                type:
                    description: |
                        상담 시술 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CONSULTATION_PROCEDURE_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `OPTION` | 상품 옵션 |
                        | `TICKET` | 시술권 |
                    type: string
                    enum:
                        - CONSULTATION_PROCEDURE_TYPE_UNSPECIFIED
                        - OPTION
                        - TICKET
            oneOf:
                - properties:
                    optionConfiguration:
                        description: |-
                            상품 옵션 설정

                            `type`이 `OPTION`인 상담 시술의 설정입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationOptionConfiguration'
                  required:
                    - optionConfiguration
                  title: |-
                    상품 옵션 설정

                    `type`이 `OPTION`인 상담 시술의 설정입니다.
                  type: object
                - properties:
                    ticketConfiguration:
                        description: |-
                            시술권 설정

                            `type`이 `TICKET`인 상담 시술의 설정입니다.
                        allOf:
                            - $ref: '#/components/schemas/protos.schedule.consultation.ConsultationTicketConfiguration'
                  required:
                    - ticketConfiguration
                  title: |-
                    시술권 설정

                    `type`이 `TICKET`인 상담 시술의 설정입니다.
                  type: object
        protos.schedule.consultation.ConsultationResult:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 상담 결과 이름
                    type: string
                color:
                    description: 상담 결과 색상
                    type: string
                    enum:
                        - CodeColor_UNSPECIFIED
                        - RED
                        - LAVA
                        - ORANGE
                        - GREEN
                        - CYAN
                        - BLUE
                        - PURPLE
                        - MAGENTA
                        - GRAY
                id:
                    description: 상담 결과 ID
                    type: string
        protos.schedule.consultation.ConsultationTicketConfiguration:
            type: object
            required:
                - ticketId
                - ticketTitle
                - optionTitle
                - medicalService
                - productTitle
            properties:
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                optionTitle:
                    description: 옵션 이름
                    type: string
                productTitle:
                    description: 상품 이름
                    type: string
                ticketId:
                    description: 시술권 ID
                    type: string
                ticketTitle:
                    description: 시술권 이름
                    type: string
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.schedule.consultation.ConsultationVisitor:
            type: object
            required:
                - id
                - name
                - isNew
            properties:
                name:
                    description: 상담 내원객 이름
                    type: string
                id:
                    description: 상담 내원객 ID
                    type: string
                isNew:
                    description: 상담 생성 시점의 신규 내원객 여부
                    type: boolean
        protos.schedule.flow.FlowTask:
            oneOf:
                - $ref: '#/components/schemas/protos.schedule.flow.FlowTask.PROCEDURE'
                - $ref: '#/components/schemas/protos.schedule.flow.FlowTask.ETCETERA'
            discriminator:
                mapping:
                    ETCETERA: '#/components/schemas/protos.schedule.flow.FlowTask.ETCETERA'
                    PROCEDURE: '#/components/schemas/protos.schedule.flow.FlowTask.PROCEDURE'
                propertyName: type
        protos.schedule.flow.FlowTask.ETCETERA:
            title: ETCETERA
            description: '`type` = `ETCETERA`'
            type: object
            required:
                - type
                - sequence
                - title
                - status
                - paymentRequired
                - anesthesiaType
                - etceteraConfiguration
            properties:
                title:
                    description: 태스크 이름
                    type: string
                type:
                    description: |
                        태스크 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_TASK_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `PROCEDURE` | 시술 |
                        | `ETCETERA` | 기타 |
                    type: string
                    const: ETCETERA
                    enum:
                        - ETCETERA
                anesthesiaType:
                    description: |
                        마취 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ANESTHESIA_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `SEDATION` | 수면 마취 |
                        | `SPRAY` | 스프레이 마취 |
                        | `CREAM` | 크림 마취 |
                        | `DENTAL` | 덴탈 마취 |
                        | `GAS` | 가스 마취 |
                        | `ICE` | 아이스 마취 |
                        | `CREAM_DENTAL` | 크림+덴탈 마취 |
                    type: string
                    enum:
                        - ANESTHESIA_TYPE_UNSPECIFIED
                        - SEDATION
                        - SPRAY
                        - CREAM
                        - DENTAL
                        - GAS
                        - ICE
                        - CREAM_DENTAL
                assigneeMemo:
                    description: 담당자 메모
                    type: string
                assignees:
                    description: 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskAssignee'
                calledDoctors:
                    description: 호출된 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskCalledDoctor'
                completedDateTimeUtc:
                    description: |-
                        태스크 완료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                doctorAssignedDateTimeUtc:
                    description: |-
                        의사 배정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                doctorCallDateTime:
                    description: 의사 호출 일시
                    type: string
                doctorMemo:
                    description: 의사 메모
                    type: string
                doctors:
                    description: 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskDoctor'
                doctorsCalledZone:
                    description: 의사 호출 구역
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskZone'
                etceteraConfiguration:
                    description: |-
                        기타 태스크 구성

                        `type`이 `ETCETERA`인 태스크의 구성입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskEtceteraConfiguration'
                memo:
                    description: 메모
                    type: string
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                paymentRequired:
                    description: 수납 필요 여부
                    type: boolean
                purchaseId:
                    description: 수납 ID
                    type: string
                readyDateTimeUtc:
                    description: |-
                        태스크 준비 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                responsibleDoctor:
                    description: 책임 의사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskResponsibleDoctor'
                room:
                    description: 배정된 방
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.RoomContract'
                roomAssignedDateTimeUtc:
                    description: |-
                        방 배정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                sequence:
                    description: 태스크 순번
                    type: integer
                    format: int32
                signed:
                    description: 서명 여부
                    type: boolean
                signedDateTimeUtc:
                    description: |-
                        서명 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                status:
                    description: |
                        태스크 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_TASK_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `WAITING` | 대기 |
                        | `READY` | 준비 |
                        | `DONE` | 완료 |
                        | `NOT_STARTED` | 시작 전 |
                        | `CANCELED` | 취소 |

                        `FLOW_TASK_STATUS_UNSPECIFIED`는 문제 상황이 아니면 사용하지 않는 기본값입니다.
                    type: string
                    enum:
                        - FLOW_TASK_STATUS_UNSPECIFIED
                        - WAITING
                        - READY
                        - DONE
                        - NOT_STARTED
                        - CANCELED
                translsMap:
                    description: |-
                        다국어 필드 번역 맵

                        `title`의 언어별 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - procedureConfiguration
                    properties:
                        procedureConfiguration: {}
        protos.schedule.flow.FlowTask.PROCEDURE:
            title: PROCEDURE
            description: '`type` = `PROCEDURE`'
            type: object
            required:
                - type
                - sequence
                - title
                - status
                - paymentRequired
                - anesthesiaType
                - procedureConfiguration
            properties:
                title:
                    description: 태스크 이름
                    type: string
                type:
                    description: |
                        태스크 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_TASK_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `PROCEDURE` | 시술 |
                        | `ETCETERA` | 기타 |
                    type: string
                    const: PROCEDURE
                    enum:
                        - PROCEDURE
                anesthesiaType:
                    description: |
                        마취 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `ANESTHESIA_TYPE_UNSPECIFIED` | 알 수 없음 |
                        | `SEDATION` | 수면 마취 |
                        | `SPRAY` | 스프레이 마취 |
                        | `CREAM` | 크림 마취 |
                        | `DENTAL` | 덴탈 마취 |
                        | `GAS` | 가스 마취 |
                        | `ICE` | 아이스 마취 |
                        | `CREAM_DENTAL` | 크림+덴탈 마취 |
                    type: string
                    enum:
                        - ANESTHESIA_TYPE_UNSPECIFIED
                        - SEDATION
                        - SPRAY
                        - CREAM
                        - DENTAL
                        - GAS
                        - ICE
                        - CREAM_DENTAL
                assigneeMemo:
                    description: 담당자 메모
                    type: string
                assignees:
                    description: 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskAssignee'
                calledDoctors:
                    description: 호출된 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskCalledDoctor'
                completedDateTimeUtc:
                    description: |-
                        태스크 완료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                doctorAssignedDateTimeUtc:
                    description: |-
                        의사 배정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                doctorCallDateTime:
                    description: 의사 호출 일시
                    type: string
                doctorMemo:
                    description: 의사 메모
                    type: string
                doctors:
                    description: 의사 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTaskDoctor'
                doctorsCalledZone:
                    description: 의사 호출 구역
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskZone'
                memo:
                    description: 메모
                    type: string
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
                paymentRequired:
                    description: 수납 필요 여부
                    type: boolean
                procedureConfiguration:
                    description: |-
                        시술 태스크 구성

                        `type`이 `PROCEDURE`인 태스크의 구성입니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskProcedureConfiguration'
                purchaseId:
                    description: 수납 ID
                    type: string
                readyDateTimeUtc:
                    description: |-
                        태스크 준비 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                responsibleDoctor:
                    description: 책임 의사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskResponsibleDoctor'
                room:
                    description: 배정된 방
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.RoomContract'
                roomAssignedDateTimeUtc:
                    description: |-
                        방 배정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                sequence:
                    description: 태스크 순번
                    type: integer
                    format: int32
                signed:
                    description: 서명 여부
                    type: boolean
                signedDateTimeUtc:
                    description: |-
                        서명 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                status:
                    description: |
                        태스크 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_TASK_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `WAITING` | 대기 |
                        | `READY` | 준비 |
                        | `DONE` | 완료 |
                        | `NOT_STARTED` | 시작 전 |
                        | `CANCELED` | 취소 |

                        `FLOW_TASK_STATUS_UNSPECIFIED`는 문제 상황이 아니면 사용하지 않는 기본값입니다.
                    type: string
                    enum:
                        - FLOW_TASK_STATUS_UNSPECIFIED
                        - WAITING
                        - READY
                        - DONE
                        - NOT_STARTED
                        - CANCELED
                translsMap:
                    description: |-
                        다국어 필드 번역 맵

                        `title`의 언어별 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
            allOf:
                - not:
                    type: object
                    required:
                        - etceteraConfiguration
                    properties:
                        etceteraConfiguration: {}
        protos.schedule.flow.FlowTaskAssignee:
            type: object
            required:
                - id
                - name
                - role
            properties:
                name:
                    description: 담당자 이름
                    type: string
                id:
                    description: 담당자 계정 ID
                    type: string
                role:
                    description: 담당자 역할
                    allOf:
                        - $ref: '#/components/schemas/protos.account.AccountRoleV2Contract'
        protos.schedule.flow.FlowTaskCalledDoctor:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 호출된 의사 이름
                    type: string
                id:
                    description: 호출된 의사 계정 ID
                    type: string
        protos.schedule.flow.FlowTaskDoctor:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 의사 이름
                    type: string
                id:
                    description: 의사 계정 ID
                    type: string
        protos.schedule.flow.FlowTaskEtceteraConfiguration:
            type: object
            required:
                - etceteraTaskId
                - name
            properties:
                name:
                    description: 기타 태스크 이름
                    type: string
                etceteraTaskId:
                    description: 기타 태스크 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 필드 번역 맵

                        `name`의 언어별 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.schedule.flow.FlowTaskProcedureConfiguration:
            type: object
            properties:
                medicalServiceConfiguration:
                    description: 진료 항목 구성
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskProcedureConfiguration.MedicalServiceConfiguration'
                productOptionConfiguration:
                    description: 상품 옵션 구성
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskProcedureConfiguration.ProductOptionConfiguration'
                ticketConfiguration:
                    description: 시술권 구성
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.FlowTaskProcedureConfiguration.TicketConfiguration'
        protos.schedule.flow.FlowTaskProcedureConfiguration.MedicalServiceConfiguration:
            type: object
            required:
                - id
                - code
                - title
            properties:
                title:
                    description: 진료 항목 이름
                    type: string
                code:
                    description: 진료 항목 코드
                    type: string
                id:
                    description: 진료 항목 ID
                    type: string
                    format: object-id
                machines:
                    description: 장비 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceMachine'
                medicines:
                    description: 약품 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.medical_service.MedicalServiceMedicine'
                translsMap:
                    description: |-
                        다국어 필드 번역 맵

                        `title`의 언어별 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.schedule.flow.FlowTaskProcedureConfiguration.ProductOptionConfiguration:
            type: object
            required:
                - optionId
                - optionTitle
                - procedure
            properties:
                medicineAndMachines:
                    description: 기기 및 약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                optionId:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                optionTitle:
                    description: 상품 옵션 이름
                    type: string
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                productTitle:
                    description: 상품 이름
                    type: string
                translsMap:
                    description: |-
                        다국어 필드 번역 맵

                        `optionTitle`과 `productTitle`의 언어별 번역 문자열입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.schedule.flow.FlowTaskProcedureConfiguration.TicketConfiguration:
            type: object
            properties:
                round:
                    description: 시술권 회차
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.flow.ProcedureRound'
                ticketId:
                    description: 시술권 ID
                    type: string
        protos.schedule.flow.FlowTaskResponsibleDoctor:
            type: object
            required:
                - id
                - name
                - realName
            properties:
                name:
                    description: 책임 의사 이름
                    type: string
                id:
                    description: 책임 의사 계정 ID
                    type: string
                realName:
                    description: 책임 의사 실명
                    type: string
        protos.schedule.flow.FlowTaskZone:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 구역 이름
                    type: string
                id:
                    description: 구역 ID
                    type: string
                    format: object-id
        protos.schedule.flow.ProcedureRound:
            type: object
            required:
                - total
                - current
            properties:
                current:
                    description: 현재 회차
                    type: integer
                    format: int32
                total:
                    description: 전체 회차
                    type: integer
                    format: int32
        protos.schedule.reservation_time_slot.ReservationTimeSlot:
            type: object
            required:
                - dateTimeRangeUtc
                - available
            properties:
                available:
                    description: 슬롯 가용 여부
                    type: boolean
                dateTimeRangeUtc:
                    description: 슬롯 시간 범위
                    allOf:
                        - $ref: '#/components/schemas/protos.DateTimeRangeUtc'
        protos.schedule.schedule.EtceteraWorkConfiguration:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 기타 업무 제목
                    type: string
                id:
                    description: 기타 업무 설정 ID
                    type: string
                    format: object-id
                translsMap:
                    description: |-
                        다국어 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.schedule.schedule.GetScheduleDetailQuery:
            type: object
            required:
                - scheduleId
            properties:
                scheduleId:
                    description: 조회할 스케줄 ID
                    type: string
                    format: uuid
        protos.schedule.schedule.GetScheduleDetailQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 스케줄 상세 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleContract'
        protos.schedule.schedule.GetSchedulesByVisitorQuery:
            type: object
            required:
                - visitorId
            properties:
                deleted:
                    description: |-
                        삭제된 스케줄 포함 여부

                        응답에는 삭제되지 않은 스케줄만 포함됩니다.
                    type: boolean
                endDateTimeUtc:
                    description: |-
                        조회 범위 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                startDateTimeUtc:
                    description: |-
                        조회 범위 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                visitorId:
                    description: 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.schedule.schedule.GetSchedulesByVisitorQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        스케줄 목록

                        삭제되지 않은 스케줄만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleContract'
        protos.schedule.schedule.GetSchedulesSummarizedByTaskQuery:
            type: object
            required:
                - visitorId
            properties:
                deleted:
                    description: |-
                        삭제된 스케줄 포함 여부

                        응답에는 삭제되지 않은 스케줄만 포함됩니다.
                    type: boolean
                paymentRequired:
                    description: |-
                        수납 필요 여부 필터

                        설정하면 시술 태스크 목록을 같은 수납 필요 여부 값으로 필터링합니다. 설정하지 않으면 모든 시술 태스크를 반환합니다.
                    type: boolean
                visitorId:
                    description: 조회할 내원객 ID
                    type: string
                    format: object-id
        protos.schedule.schedule.GetSchedulesSummarizedByTaskQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        스케줄별 시술 태스크 요약 목록

                        삭제되지 않은 스케줄만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleSummarizedByTask'
        protos.schedule.schedule.Reaction:
            type: object
            required:
                - id
            properties:
                id:
                    description: 반응 ID
                    type: string
        protos.schedule.schedule.ScheduleContract:
            type: object
            required:
                - id
                - visitor
                - flowStep
                - reservation
                - createdDateTimeUtc
                - tasks
                - purchaseIds
                - prescriptionIds
                - etceteraWorks
                - occupiedResources
            properties:
                consultation:
                    description: |-
                        상담 정보

                        Deprecated. 단건 상담 정보입니다. 다건 상담 정보는 `consultations`를 사용합니다.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleDetailConsultationContract'
                consultations:
                    description: 상담 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.consultation.ConsultationContract'
                createdDateTimeUtc:
                    description: |-
                        생성 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                deleted:
                    description: 삭제 여부
                    type: boolean
                etceteraWorks:
                    description: 기타 업무 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleEtceteraWork'
                flowStep:
                    description: |
                        현재 내원 단계

                        | 값 | 의미 |
                        | --- | --- |
                        | `FLOW_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `RESERVED` | 예약됨 |
                        | `RECEPTION` | 접수 |
                        | `CONSULTATION_WAITING` | 상담 대기 |
                        | `CONSULTATION` | 상담 |
                        | `PROCEDURE_WAITING` | 시술 대기 |
                        | `PROCEDURE` | 시술 |
                        | `PROCEDURE_DONE` | 귀가 대기 |
                        | `COMPLETED` | 귀가 |
                    type: string
                    enum:
                        - FLOW_STATUS_UNSPECIFIED
                        - RESERVED
                        - RECEPTION
                        - CONSULTATION_WAITING
                        - CONSULTATION
                        - PROCEDURE_WAITING
                        - PROCEDURE
                        - PROCEDURE_DONE
                        - COMPLETED
                flowStepUpdatedDateTimeUtc:
                    description: |-
                        내원 단계 변경 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                id:
                    description: 스케줄 ID
                    type: string
                    format: uuid
                occupiedResources:
                    description: 예약 일정 리소스 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.OccupiedResource'
                orderMemo:
                    description: 오더 메모
                    type: string
                prescriptionIds:
                    description: 처방전 ID 목록
                    type: array
                    items:
                        type: string
                purchaseIds:
                    description: 수납 ID 목록
                    type: array
                    items:
                        type: string
                purchases:
                    description: |-
                        수납 목록

                        Deprecated.
                    deprecated: true
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleDetailPurchaseContract'
                reactions:
                    description: 반응 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleReaction'
                receptionDateTimeUtc:
                    description: |-
                        접수 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                receptionNumber:
                    description: 접수 번호
                    type: integer
                    format: int32
                reservation:
                    description: 예약 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleDetailReservationContract'
                tasks:
                    description: 시술 태스크 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTask'
                updatedDateTimeUtc:
                    description: |-
                        수정 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                visitor:
                    description: 내원객 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleVisitorContract'
                visitorLocation:
                    description: 내원객 위치
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.VisitorLocation'
                visitorRequest:
                    description: 내원객 요청사항
                    type: string
                zone:
                    description: 접수 구역 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ZoneSummaryContract'
        protos.schedule.schedule.ScheduleDetailConsultationContract:
            type: object
            properties:
                consultationMemo:
                    description: 상담 메모
                    type: string
                counselor:
                    description: 상담사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Counselor'
                doctor:
                    description: 의사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Doctor'
        protos.schedule.schedule.ScheduleDetailPurchaseContract:
            type: object
            required:
                - id
                - status
                - lastUpdatedDateTimeUtc
            properties:
                items:
                    description: 구매 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.PurchaseItem'
                id:
                    description: 수납 ID
                    type: string
                lastUpdatedDateTimeUtc:
                    description: 마지막 수정 일시
                    type: string
                status:
                    description: |-
                        수납 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `SCHEDULE_DETAIL_PURCHASE_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `REFUNDED` | 전체 환불 |
                        | `PARTIALLY_REFUNDED` | 부분 환불 |
                        | `APPROVED` | 승인됨 |


                        Deprecated.
                    type: string
                    enum:
                        - SCHEDULE_DETAIL_PURCHASE_STATUS_UNSPECIFIED
                        - REFUNDED
                        - PARTIALLY_REFUNDED
                        - APPROVED
                transactions:
                    description: 거래 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.purchase.Transaction'
        protos.schedule.schedule.ScheduleDetailReservationContract:
            type: object
            required:
                - reservationGroupId
                - startDateTime
                - endDateTime
                - zoneId
                - status
                - requestedProcedures
                - connectedChannel
            properties:
                connectedChannel:
                    description: |
                        유입 채널

                        | 값 | 의미 |
                        | --- | --- |
                        | `Channel_UNSPEICIFED` | 알 수 없음 |
                        | `GANGNAMUNNI` | 강남언니 |
                        | `HOMEPAGE` | 홈페이지 |
                        | `KOS_CONNECT` | KOS Connect |
                    type: string
                    enum:
                        - Channel_UNSPEICIFED
                        - GANGNAMUNNI
                        - HOMEPAGE
                        - KOS_CONNECT
                consultationRequired:
                    description: 상담 필요 여부
                    type: boolean
                counselor:
                    description: 희망 상담사
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Counselor'
                desiredDischargeDateTimeUtc:
                    description: |-
                        귀가 희망 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                doctor:
                    description: |-
                        희망 의사

                        Deprecated.
                    deprecated: true
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.Doctor'
                endDateTime:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                funnel:
                    description: 예약 경로
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationFunnel'
                requestedProcedures:
                    description: 희망 시술 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.ReservationRequestedProcedure'
                reservationAssignee:
                    description: 예약 담당자
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.ReservationAssignee'
                reservationGroupId:
                    description: |-
                        예약 그룹 ID

                        Deprecated.
                    deprecated: true
                    type: string
                    format: object-id
                reservationMemo:
                    description: 예약 메모
                    type: string
                sedationRequired:
                    description: 수면 마취 필요 여부
                    type: boolean
                startDateTime:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                status:
                    description: |
                        예약 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `RESERVATION_STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `RESERVED` | 예약됨 |
                        | `CANCELED` | 예약 취소 |
                        | `NO_SHOW` | 노쇼 |
                        | `IN_PROGRESS` | 진행 중 |
                        | `COMPLETED` | 완료 |
                    type: string
                    enum:
                        - RESERVATION_STATUS_UNSPECIFIED
                        - RESERVED
                        - CANCELED
                        - NO_SHOW
                        - IN_PROGRESS
                        - COMPLETED
                zoneId:
                    description: |-
                        구역 ID

                        Deprecated.
                    deprecated: true
                    type: string
                    format: object-id
        protos.schedule.schedule.ScheduleEtceteraWork:
            type: object
            required:
                - sequence
                - status
                - memo
                - etceteraWorkConfiguration
            properties:
                assignees:
                    description: 기타 업무 담당자 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleEtceteraWorkAssignee'
                etceteraWorkConfiguration:
                    description: 기타 업무 설정
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.EtceteraWorkConfiguration'
                memo:
                    description: 기타 업무 메모
                    type: string
                sequence:
                    description: 기타 업무 순서
                    type: integer
                    format: int32
                status:
                    description: |
                        기타 업무 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `STATUS_UNSPECIFIED` | 알 수 없음 |
                        | `WAITING` | 대기 |
                        | `COMPLETED` | 완료 |
                        | `CANCELED` | 취소 |
                    type: string
                    enum:
                        - STATUS_UNSPECIFIED
                        - WAITING
                        - COMPLETED
                        - CANCELED
        protos.schedule.schedule.ScheduleEtceteraWorkAssignee:
            type: object
            required:
                - id
                - name
                - role
            properties:
                name:
                    description: 기타 업무 담당자 이름
                    type: string
                id:
                    description: 기타 업무 담당자 계정 ID
                    type: string
                role:
                    description: 기타 업무 담당자 역할
                    allOf:
                        - $ref: '#/components/schemas/protos.account.AccountRoleV2Contract'
        protos.schedule.schedule.ScheduleReaction:
            type: object
            required:
                - reaction
            properties:
                accounts:
                    description: 반응한 계정 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleReactionAccount'
                reaction:
                    description: 반응 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.Reaction'
        protos.schedule.schedule.ScheduleReactionAccount:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 계정 이름
                    type: string
                id:
                    description: 계정 ID
                    type: string
        protos.schedule.schedule.ScheduleSummarizedByTask:
            type: object
            required:
                - scheduleId
                - startDateTimeUtc
                - endDateTimeUtc
                - tasks
            properties:
                endDateTimeUtc:
                    description: |-
                        예약 종료 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                scheduleId:
                    description: 스케줄 ID
                    type: string
                    format: uuid
                startDateTimeUtc:
                    description: |-
                        예약 시작 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                tasks:
                    description: |-
                        시술 태스크 목록

                        `paymentRequired`를 전달하면 같은 수납 필요 여부 값을 가진 시술 태스크만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.flow.FlowTask'
        protos.schedule.schedule.ScheduleVisitorCategoryContract:
            type: object
            required:
                - id
                - name
                - order
            properties:
                name:
                    description: 내원객 카테고리 이름
                    type: string
                color:
                    description: 색상
                    type: string
                    enum:
                        - CodeColor_UNSPECIFIED
                        - RED
                        - LAVA
                        - ORANGE
                        - GREEN
                        - CYAN
                        - BLUE
                        - PURPLE
                        - MAGENTA
                        - GRAY
                id:
                    description: 내원객 카테고리 ID
                    type: string
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
        protos.schedule.schedule.ScheduleVisitorContract:
            type: object
            required:
                - id
                - name
                - chartNumber
            properties:
                name:
                    description: 내원객 이름
                    type: string
                categories:
                    description: 내원객 카테고리 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.schedule.ScheduleVisitorCategoryContract'
                chartNumber:
                    description: 차트 번호
                    type: string
                dateOfBirth:
                    description: 생년월일
                    type: string
                gender:
                    description: |
                        성별

                        | 값 | 의미 |
                        | --- | --- |
                        | `GENDER_UNSPECIFIED` | 미지정 |
                        | `MALE` | 남성 |
                        | `FEMALE` | 여성 |
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                id:
                    description: 내원객 ID
                    type: string
                    format: object-id
                isNew:
                    description: 신규 내원객 여부
                    type: boolean
                memo:
                    description: 메모
                    type: string
                nationality:
                    description: 국적
                    type: string
                phone:
                    description: 전화번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                phoneticName:
                    description: 발음 표기 이름
                    type: string
                snsInfo:
                    description: SNS 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.visitor.SnsInfo'
                visitorType:
                    description: 내원객 유형
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.schedule.ScheduleVisitorTypeContract'
        protos.schedule.schedule.ScheduleVisitorTypeContract:
            type: object
            required:
                - id
                - name
            properties:
                name:
                    description: 내원객 유형 이름
                    type: string
                id:
                    description: 내원객 유형 ID
                    type: string
        protos.schedule.schedule.ZoneSummaryContract:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 접수 구역 이름
                    type: string
                id:
                    description: 접수 구역 ID
                    type: string
                    format: object-id
        protos.schedule.zone.GetZoneQuery:
            type: object
            required:
                - zoneId
            properties:
                zoneId:
                    description: 조회할 구역 ID
                    type: string
                    format: object-id
        protos.schedule.zone.GetZoneQueryResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: 구역 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.schedule.zone.ZoneContract'
        protos.schedule.zone.GetZonesResponse:
            type: object
            required:
                - data
            properties:
                data:
                    description: |-
                        구역 목록

                        `order` 오름차순으로 정렬됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.schedule.zone.ZoneContract'
        protos.schedule.zone.ZoneContract:
            type: object
            required:
                - id
                - title
                - order
                - isDefault
            properties:
                title:
                    description: 구역 이름
                    type: string
                id:
                    description: 구역 ID
                    type: string
                    format: object-id
                isDefault:
                    description: 기본 구역 여부
                    type: boolean
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
        protos.tenant.Code:
            type: object
            required:
                - id
                - category
                - name
                - order
                - closed
            properties:
                name:
                    description: 코드 이름
                    type: string
                category:
                    description: |
                        코드 분류

                        | 값 | 의미 |
                        | --- | --- |
                        | `CODE_CATEGORY_UNSPECIFIED` | 알 수 없음 |
                        | `FUNNEL` | 유입 경로 |
                        | `EXPOSURE_CHANNEL` | 노출 채널 |
                        | `ETCETRA_PRODUCT_CATEGORY` | 기타 상품 분류 |
                        | `IMAGE_EQUIPMENT` | 이미지 장비 |
                        | `CALL_CONSULTATION_RESULT` | 전화 상담 결과 |
                        | `IMAGE_CATEGORY` | 이미지 분류 |
                        | `FUNNEL_CATEGORY` | 유입 경로 분류 |
                        | `VISITOR_CATEGORY` | 내원객 분류 |
                        | `ACCOUNT_STATUS` | 계정 상태 |
                        | `CONSULTATION_RESULT` | 상담 결과 |
                    type: string
                    enum:
                        - CODE_CATEGORY_UNSPECIFIED
                        - FUNNEL
                        - EXPOSURE_CHANNEL
                        - ETCETRA_PRODUCT_CATEGORY
                        - IMAGE_EQUIPMENT
                        - CALL_CONSULTATION_RESULT
                        - IMAGE_CATEGORY
                        - FUNNEL_CATEGORY
                        - VISITOR_CATEGORY
                        - ACCOUNT_STATUS
                        - CONSULTATION_RESULT
                closed:
                    description: 비활성화 여부
                    type: boolean
                color:
                    description: |
                        코드 색상

                        | 값 | 의미 |
                        | --- | --- |
                        | `CodeColor_UNSPECIFIED` | 알 수 없음 |
                        | `RED` | 빨강 |
                        | `LAVA` | 라바 |
                        | `ORANGE` | 주황 |
                        | `GREEN` | 초록 |
                        | `CYAN` | 시안 |
                        | `BLUE` | 파랑 |
                        | `PURPLE` | 보라 |
                        | `MAGENTA` | 마젠타 |
                        | `GRAY` | 회색 |
                    type: string
                    enum:
                        - CodeColor_UNSPECIFIED
                        - RED
                        - LAVA
                        - ORANGE
                        - GREEN
                        - CYAN
                        - BLUE
                        - PURPLE
                        - MAGENTA
                        - GRAY
                default:
                    description: 기본 선택 여부
                    type: boolean
                id:
                    description: 코드 ID
                    type: string
                order:
                    description: 정렬 순서
                    type: integer
                    format: int32
        protos.ticket.GetTicketBundlesQueryResponse:
            type: object
            properties:
                data:
                    description: |-
                        사용 가능한 시술권 묶음 목록

                        삭제되지 않았고, 포함된 시술권 중 `AVAILABLE` 상태가 하나 이상 있는 묶음만 포함합니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.ticket.TicketBundleContract'
        protos.ticket.PriceAmount:
            type: object
            required:
                - value
                - currency
            properties:
                value:
                    description: 금액
                    type: number
                    format: double
                currency:
                    description: |-
                        통화 코드

                        [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 표준 통화 코드입니다. 예: `KRW`
                    type: string
        protos.ticket.ReferenceOptionConfiguration:
            type: object
            required:
                - optionId
                - optionTitle
                - productTitle
            properties:
                optionId:
                    description: 상품 옵션 ID
                    type: string
                    format: object-id
                optionTitle:
                    description: 상품 옵션 제목
                    type: string
                productTitle:
                    description: 상품 제목
                    type: string
                promotionConfiguration:
                    description: 프로모션 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.ReferenceOptionPromotionConfiguration'
                translsMap:
                    description: |-
                        상품 옵션과 상품 제목의 다국어 번역 맵

                        키는 번역 대상 필드명, 값은 언어별 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.ticket.ReferenceOptionPromotionConfiguration:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 프로모션 제목
                    type: string
                id:
                    description: 프로모션 ID
                    type: string
                    format: object-id
        protos.ticket.TicketBundleContract:
            type: object
            required:
                - purchaseId
                - purchaseItemId
                - optionConfiguration
                - price
            properties:
                title:
                    description: 시술권 묶음 제목
                    type: string
                optionConfiguration:
                    description: 상품 옵션 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.ReferenceOptionConfiguration'
                price:
                    description: |-
                        시술권 묶음 금액

                        `CANCELED` 상태인 시술권 금액은 합산하지 않습니다.
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                purchaseId:
                    description: 수납 ID
                    type: string
                    format: object-id
                purchaseItemId:
                    description: 구매 항목 ID
                    type: string
                    format: object-id
                ticketSets:
                    description: 시술권 세트 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.ticket.TicketSetContract'
                translsMap:
                    description: |-
                        시술권 묶음 제목의 다국어 번역 맵

                        키는 번역 대상 필드명, 값은 언어별 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
        protos.ticket.TicketContract:
            type: object
            required:
                - id
                - status
                - price
                - createdDateTimeUtc
            properties:
                createdDateTimeUtc:
                    description: |-
                        시술권 생성 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time 형식입니다.
                    type: string
                    format: date-time
                id:
                    description: |-
                        시술권 ID

                        UUID 형식입니다.
                    type: string
                    format: uuid
                price:
                    description: 시술권 금액
                    allOf:
                        - $ref: '#/components/schemas/protos.ticket.PriceAmount'
                status:
                    description: |
                        시술권 상태

                        | 값 | 의미 |
                        | --- | --- |
                        | `TicketStatus_UNSPECIFIED` | 알 수 없음 |
                        | `AVAILABLE` | 사용 가능 |
                        | `USED` | 사용 완료 |
                        | `CANCELED` | 취소됨 |
                        | `IN_USE` | 사용 중 |
                    type: string
                    enum:
                        - TicketStatus_UNSPECIFIED
                        - AVAILABLE
                        - USED
                        - CANCELED
                        - IN_USE
        protos.ticket.TicketSetContract:
            type: object
            required:
                - procedure
                - ticketGroupId
            properties:
                title:
                    description: 시술권 세트 제목
                    type: string
                medicalService:
                    description: 진료 항목
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.medical_service.MedicalService'
                medicineAndMachines:
                    description: 시술에 사용되는 기기/약물 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.procedure.MedicineAndMachine'
                procedure:
                    description: 시술 정보
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Procedure'
                ticketGroupId:
                    description: 시술권 그룹 ID
                    type: string
                    format: object-id
                tickets:
                    description: 시술권 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.ticket.TicketContract'
                translsMap:
                    description: |-
                        시술권 세트 제목의 다국어 번역 맵

                        키는 번역 대상 필드명, 값은 언어별 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
                unit:
                    description: 시술 단위
                    allOf:
                        - $ref: '#/components/schemas/protos.procedure.Unit'
        protos.visitor.Answers:
            type: object
            required:
                - answerId
                - title
                - inputType
                - isSubText
                - subText
            properties:
                title:
                    description: 보기 제목
                    type: string
                answerId:
                    description: 설문지 보기 ID
                    type: string
                inputType:
                    description: |
                        보기 입력 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CHECK_BOX` | 체크박스 |
                        | `SELECT_BOX` | 선택 상자 |
                        | `INPUT_BOX` | 입력 상자 |
                        | `DISCOUNT_SELECT_BOX` | 할인 선택 상자 |

                        `DISCOUNT_SELECT_BOX`는 현재 사용하지 않는 값입니다.
                    type: string
                    enum:
                        - CHECK_BOX
                        - SELECT_BOX
                        - INPUT_BOX
                        - DISCOUNT_SELECT_BOX
                isSubText:
                    description: 추가 입력 사용 여부
                    type: boolean
                subText:
                    description: |-
                        추가 입력 텍스트

                        값이 있으면 placeholder로 사용됩니다.
                    type: string
                translsMap:
                    description: |-
                        보기 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.visitor.GetQuestionnaireLagacyQueryResponse:
            type: object
            required:
                - name
                - phoneNumber
                - address
                - addressDetail
                - dateOfBirth
                - gender
            properties:
                name:
                    description: 내원객 이름
                    type: string
                address:
                    description: 내원객 주소
                    type: string
                addressDetail:
                    description: 내원객 상세 주소
                    type: string
                agreements:
                    description: 약관 동의 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.SubmittedQuestionnaireAgreement'
                dateOfBirth:
                    description: |-
                        내원객 생년월일

                        문자열로 반환됩니다.
                    type: string
                gender:
                    description: |
                        내원객 성별

                        | 값 | 의미 |
                        | --- | --- |
                        | `GENDER_UNSPECIFIED` | 미지정 |
                        | `MALE` | 남성 |
                        | `FEMALE` | 여성 |
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                pages:
                    description: |-
                        설문지 페이지 목록

                        페이지는 `id` 기준으로 정렬됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.Pages'
                phone:
                    description: 내원객 휴대폰 번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                phoneNumber:
                    description: |-
                        내원객 휴대폰 번호

                        Deprecated: `phone` 필드를 사용합니다.
                    deprecated: true
                    type: string
                phoneticName:
                    description: 내원객 발음명
                    type: string
        protos.visitor.GetQuestionnaireSubmitLegacyQueryResponse:
            type: object
            required:
                - id
                - visitorId
                - visitorName
                - phoneNumber
                - dateOfBirth
                - gender
            properties:
                address:
                    description: 내원객 주소
                    type: string
                addressDetail:
                    description: 내원객 상세 주소
                    type: string
                agreements:
                    description: 약관 동의 항목 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.SubmittedQuestionnaireAgreement'
                answers:
                    description: 설문 응답 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.QuestionnaireSubmitAnswer'
                createdDateTimeUtc:
                    description: |-
                        초진 설문지 제출 일시

                        [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) UTC date-time 형식입니다.
                    type: string
                    format: date-time
                dateOfBirth:
                    description: |-
                        내원객 생년월일

                        `yyyyMMdd` 형식의 8자리 문자열입니다.
                    type: string
                gender:
                    description: |
                        내원객 성별

                        | 값 | 의미 |
                        | --- | --- |
                        | `GENDER_UNSPECIFIED` | 미지정 |
                        | `MALE` | 남성 |
                        | `FEMALE` | 여성 |
                    type: string
                    enum:
                        - GENDER_UNSPECIFIED
                        - MALE
                        - FEMALE
                id:
                    description: 제출된 초진 설문지 ID
                    type: string
                    format: object-id
                phone:
                    description: 내원객 휴대폰 번호
                    allOf:
                        - $ref: '#/components/schemas/protos.Phone'
                phoneNumber:
                    description: |-
                        내원객 전화번호

                        `phone` 필드가 존재하는 경우 이 필드 대신 `phone`을 사용합니다.
                    type: string
                phoneticName:
                    description: 내원객 발음명
                    type: string
                visitorId:
                    description: 내원객 ID
                    type: string
                    format: object-id
                visitorName:
                    description: 내원객 이름
                    type: string
        protos.visitor.Pages:
            type: object
            required:
                - id
                - title
            properties:
                title:
                    description: 설문지 페이지 제목
                    type: string
                id:
                    description: 설문지 페이지 ID
                    type: string
                questions:
                    description: |-
                        페이지의 질문 목록

                        질문은 `sequence` 기준으로 정렬됩니다.
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.Questions'
                translsMap:
                    description: |-
                        페이지 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.visitor.QuestionnaireAgreement:
            type: object
            required:
                - id
                - title
                - required
            properties:
                title:
                    description: 약관 제목
                    type: string
                type:
                    description: |
                        약관 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PERSONAL_INFORMATION` | 개인정보 수집 및 이용 동의 |
                        | `ADVERTISEMENT` | 광고성 메시지 정보 수신 동의 |
                        | `INFORMATIONAL_NOTIFICATION` | 정보성 메시지 정보 수신 동의 |
                    type: string
                    enum:
                        - PERSONAL_INFORMATION
                        - ADVERTISEMENT
                        - INFORMATIONAL_NOTIFICATION
                required:
                    description: 필수 동의 여부
                    type: boolean
                id:
                    description: 약관 ID
                    type: string
                link:
                    description: 약관 링크
                    type: string
                translsMap:
                    description: |-
                        약관 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.visitor.QuestionnaireSubmitAnswer:
            type: object
            required:
                - seq
                - questionId
                - questionTitle
                - answerId
                - answerTitle
                - memo
            properties:
                answerId:
                    description: 선택된 답변 ID
                    type: string
                answerTitle:
                    description: 선택된 답변 제목
                    type: string
                memo:
                    description: 직접 입력 텍스트
                    type: string
                questionId:
                    description: 질문 ID
                    type: string
                questionTitle:
                    description: 질문 제목
                    type: string
                seq:
                    description: 뷰 노출 순서
                    type: string
        protos.visitor.Questions:
            type: object
            required:
                - questionId
                - title
                - sequence
            properties:
                title:
                    description: 질문 제목
                    type: string
                answers:
                    description: 질문의 보기 목록
                    type: array
                    items:
                        $ref: '#/components/schemas/protos.visitor.Answers'
                questionId:
                    description: 설문지 질문 ID
                    type: string
                sequence:
                    description: 질문 순서
                    type: integer
                    format: int32
                translsMap:
                    description: |-
                        질문 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
        protos.visitor.SelectedAnswer:
            type: object
            required:
                - id
                - title
                - subText
                - inputText
                - parentQuestionId
                - parentQuestionTitle
                - inputType
            properties:
                title:
                    description: 선택한 선택지 제목
                    type: string
                id:
                    description: 선택한 선택지 ID
                    type: string
                inputText:
                    description: |-
                        직접 입력 답변

                        `inputType`이 `INPUT_BOX`이면 설문 응답의 memo로 저장됩니다.
                    type: string
                inputType:
                    description: |
                        선택지 입력 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `CHECK_BOX` | 체크박스 |
                        | `SELECT_BOX` | 선택 상자 |
                        | `INPUT_BOX` | 입력 상자 |
                        | `DISCOUNT_SELECT_BOX` | 할인 선택 상자 |

                        `DISCOUNT_SELECT_BOX`는 현재 사용하지 않는 값입니다.
                    type: string
                    enum:
                        - CHECK_BOX
                        - SELECT_BOX
                        - INPUT_BOX
                        - DISCOUNT_SELECT_BOX
                parentQuestionId:
                    description: 부모 질문 ID
                    type: string
                parentQuestionTitle:
                    description: 부모 질문 제목
                    type: string
                subText:
                    description: |-
                        선택한 선택지의 추가 입력 내용

                        `inputType`이 `INPUT_BOX`가 아니면 설문 응답의 memo로 저장됩니다.
                    type: string
        protos.visitor.SnsInfo:
            type: object
            required:
                - snsType
                - accountId
            properties:
                accountId:
                    description: SNS 계정 ID
                    type: string
                snsType:
                    description: |
                        SNS 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `etc` | 기타 |
                        | `kakaotalk` | 카카오톡 |
                        | `line` | LINE |
                        | `instagram` | Instagram |
                        | `whatsapp` | WhatsApp |
                        | `wechat` | WeChat |
                    type: string
                    enum:
                        - etc
                        - kakaotalk
                        - line
                        - instagram
                        - whatsapp
                        - wechat
        protos.visitor.SubmittedQuestionnaireAgreement:
            type: object
            required:
                - id
                - title
                - required
                - agreed
            properties:
                title:
                    description: 약관 제목
                    type: string
                type:
                    description: |
                        약관 유형

                        | 값 | 의미 |
                        | --- | --- |
                        | `PERSONAL_INFORMATION` | 개인정보 수집 및 이용 동의 |
                        | `ADVERTISEMENT` | 광고성 메시지 정보 수신 동의 |
                        | `INFORMATIONAL_NOTIFICATION` | 정보성 메시지 정보 수신 동의 |
                    type: string
                    enum:
                        - PERSONAL_INFORMATION
                        - ADVERTISEMENT
                        - INFORMATIONAL_NOTIFICATION
                required:
                    description: 필수 동의 여부
                    type: boolean
                agreed:
                    description: 동의 여부
                    type: boolean
                id:
                    description: 약관 ID
                    type: string
                link:
                    description: 약관 링크
                    type: string
                translsMap:
                    description: |-
                        약관 번역 맵

                        키는 언어 코드, 값은 번역 데이터입니다.
                    type: object
                    additionalProperties:
                        $ref: '#/components/schemas/protos.Transls'
