{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/pyungyo-com/json-schema/pyungyo-com-plan-schema.json",
  "title": "Plan",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/pyungyo-com-openapi.json#/components/schemas/Plan",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "요금제 id"
    },
    "type": {
      "type": "string",
      "description": "lifetime=평생 할인 · flat=정가 · limited=한정 가입 · period=기간 할인 · nodate=종료일 없는 할인"
    },
    "brand": {
      "type": "string",
      "description": "알뜰폰 통신사"
    },
    "name": {
      "type": "string",
      "description": "요금제 이름(통신사 표기 그대로)"
    },
    "mno": {
      "type": "string",
      "description": "통신망 SKT·KT·LGU"
    },
    "network": {
      "type": "string",
      "description": "LTE·5G"
    },
    "fee": {
      "type": "number",
      "description": "월 요금(원, VAT 포함)"
    },
    "listFee": {
      "type": "number",
      "description": "정가"
    },
    "promoMonths": {
      "type": [
        "number",
        "null"
      ],
      "description": "기간 할인 개월"
    },
    "afterFee": {
      "type": [
        "number",
        "null"
      ],
      "description": "기간 할인 뒤 요금"
    },
    "dataGb": {
      "type": [
        "number",
        "null"
      ],
      "description": "기본 데이터 GB"
    },
    "dailyDataGb": {
      "type": "number",
      "description": "매일 데이터 GB"
    },
    "dataUnlimited": {
      "type": "boolean",
      "description": "데이터 무제한"
    },
    "qosKbps": {
      "type": "number",
      "description": "다 쓴 뒤 속도 kbps"
    },
    "voiceMin": {
      "type": [
        "number",
        "null"
      ],
      "description": "통화 분"
    },
    "voiceUnlimited": {
      "type": "boolean",
      "description": "통화 무제한"
    },
    "smsCount": {
      "type": [
        "number",
        "null"
      ],
      "description": "문자 건"
    },
    "smsUnlimited": {
      "type": "boolean",
      "description": "문자 무제한"
    },
    "extraCallKind": {
      "type": [
        "string",
        "null"
      ],
      "description": "부가통화 구분(separate=따로 제공, included=기본통화 내, none=과금)"
    },
    "extraCallMin": {
      "type": [
        "number",
        "null"
      ],
      "description": "부가통화 별도 제공 분"
    },
    "usimFree": {
      "type": "boolean",
      "description": "요금제 원문 유심 무료 여부"
    },
    "tetheringGb": {
      "type": "number",
      "description": "테더링 가능 한도 GB (0=미표시·불가)"
    },
    "bundleInternet": {
      "type": "boolean",
      "description": "인터넷 결합 혜택 표시 여부"
    },
    "bundleMobile": {
      "type": "boolean",
      "description": "가족·모바일 결합 혜택 표시 여부"
    },
    "dataSharing": {
      "type": "boolean",
      "description": "데이터 쉐어링 가능 표시 여부"
    },
    "noCondition": {
      "type": "boolean",
      "description": "의무사용·유지기간 등 가입 조건 없음 여부"
    },
    "signupUntil": {
      "type": [
        "string",
        "null"
      ],
      "description": "가입 기한(한정)"
    },
    "feeSince": {
      "type": "string",
      "description": "지금 요금이 시작된 날"
    },
    "evidence": {
      "type": "string",
      "description": "통신사 화면 원문 근거"
    },
    "sourceUrl": {
      "type": "string",
      "description": "통신사 공식 주소"
    },
    "pageUrl": {
      "type": "string",
      "description": "평생요금제닷컴 상세 주소"
    },
    "checkedAt": {
      "type": "string",
      "description": "확인 시각"
    },
    "verification": {
      "type": "object",
      "description": "기계 대조 결과 — 매일 10:30 게시 직후 PC 가 통신사 공식 화면을 열어 게시값과 한 글자씩 대조한 결과. status: match(대조한 칸 전부 일치) · mismatch(불일치 칸 있음, 원인 확인 중이거나 소비자에게 덜 유리한 값을 실은 경우) · partial(일치 칸은 있으나 못 찾은 칸도 있음) · unchecked(기계 미확인 — 대조 기록이 없거나 3일 넘게 오래됨). 요금제 하나 조회에서만 제공.",
      "properties": {
        "status": {
          "type": "string",
          "description": "match | mismatch | partial | unchecked"
        },
        "label": {
          "type": "string",
          "description": "사람이 읽는 한 줄 (예: \"기계 대조 일치 (10칸)\", \"기계 미확인\")"
        },
        "checkedAt": {
          "type": [
            "string",
            "null"
          ],
          "description": "대조 시각(ISO)"
        },
        "matched": {
          "type": "integer",
          "description": "일치한 칸 수"
        },
        "mismatched": {
          "type": "integer",
          "description": "불일치 칸 수"
        },
        "notFound": {
          "type": "integer",
          "description": "화면에서 못 찾은 칸 수"
        },
        "method": {
          "type": "string",
          "description": "대조 방법"
        },
        "detail": {
          "type": "string",
          "description": "대조 방법·결과 공개 페이지 주소"
        }
      }
    }
  }
}