Raw schema
{
"type": "object",
"properties": {
"deal": {
"type": "object",
"properties": {
"deal_id": {
"description": "사용자 견적 식별자. 고객 이름·전화번호·계약번호 금지.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"subsidy_type": {
"type": "string",
"enum": [
"public_subsidy",
"contract_discount",
"unsubsidized",
"unknown"
],
"description": "지원방식: 공시지원금, 선택약정, 무지원, 미확인. 추측 금지."
},
"device_sale_price": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "지원금 반영 후 단말 전체 판매가/원금, 원(KRW). 월 할부금이 아님. 지원금을 다시 차감하지 마세요."
},
"retail_price": {
"description": "확인된 출고가, 원(KRW). 판매가 대신 사용하지 않음.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"public_subsidy": {
"description": "확인된 공시지원금, 원(KRW). device_sale_price에서 중복 차감하지 않음.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"seller_subsidy": {
"description": "확인된 판매자 지원금, 원(KRW). device_sale_price에서 중복 차감하지 않음.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"cash_gift_amount": {
"description": "현금 사은품 총액, 원(KRW). 기본 총비용에서 차감하지 않고 별도 표시.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"cash_gift_payout_policy": {
"description": "현금 사은품 지급 조건: 익월 말 또는 7일 이내. 지급 완료 보증 아님.",
"type": "string",
"enum": [
"next_month_end",
"within_7_days"
]
},
"initial_plan_monthly_fee": {
"description": "초기 요금제 월정액, 원(KRW). 선택약정 할인 적용 전 금액.",
"type": "number",
"minimum": 0,
"maximum": 100000000
},
"post_hold_plan_monthly_fee": {
"description": "유지기간 이후 요금제 월정액, 원(KRW). 선택약정 할인 적용 전 금액.",
"type": "number",
"minimum": 0,
"maximum": 100000000
},
"plan_hold_type": {
"default": "none",
"type": "string",
"enum": [
"none",
"days",
"months",
"m_plus",
"date",
"unknown"
],
"description": "유지조건: none=없음, days=일수, months=개월, m_plus=개통월 이후 N개월, date=변경 가능일, unknown=미확인. 해당 기간 필드를 함께 제공."
},
"plan_hold_days": {
"description": "days 유형의 요금제 유지 일수. 해당 유형에서는 1 이상.",
"type": "integer",
"minimum": 0,
"maximum": 3660
},
"plan_hold_months": {
"description": "months 또는 m_plus 유형의 유지 개월 수. 해당 유형에서는 1 이상.",
"type": "integer",
"minimum": 0,
"maximum": 120
},
"change_allowed_at": {
"description": "요금제 변경 가능일 YYYY-MM-DD. date 유형이면 activationDate도 제공.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"plan_hold_original_text": {
"description": "확인된 유지조건 원문. 개인정보 제외.",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"selection_discount_policy": {
"description": "contract_discount의 확인된 요금 할인 정책. 임의로 25%를 채우지 마세요.",
"type": "object",
"properties": {
"rate": {
"description": "확인된 공통 요금 할인율. 25%는 0.25. 개별 기간 할인율보다 우선하지 않음.",
"type": "number",
"minimum": 0,
"maximum": 1
},
"initial_rate": {
"description": "초기 요금제 할인율. 생략 시 rate 사용.",
"type": "number",
"minimum": 0,
"maximum": 1
},
"post_hold_rate": {
"description": "유지기간 이후 요금 할인율. 생략 시 rate 사용.",
"type": "number",
"minimum": 0,
"maximum": 1
},
"eligible_months": {
"description": "할인 적용 개월 수. 생략 시 installment_months 또는 24 사용. 실제 약정 확인 필요.",
"type": "integer",
"minimum": 0,
"maximum": 60
},
"source": {
"description": "사용자가 확인한 할인 정책 근거. 개인정보를 넣지 마세요.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"policy_id": {
"description": "확인된 할인 정책 식별자. 미확인이면 생략.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"effective_at": {
"description": "정책 적용일 YYYY-MM-DD. 조회·검증 사실을 의미하지 않음.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"additionalProperties": false
},
"addons": {
"description": "부가서비스 최대 20개. 없음이 확인된 경우 빈 배열. 미확인 비용을 없다고 단정하지 마세요.",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"addon_name": {
"description": "부가서비스 이름. 개인정보 제외.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"mandatory": {
"description": "false이면 의무비용에서 제외. 생략 시 의무 서비스로 취급.",
"type": "boolean"
},
"monthly_price": {
"description": "부가서비스 월 비용, 원(KRW). 미확인을 0으로 넣지 마세요.",
"type": "number",
"minimum": 0,
"maximum": 100000000
},
"hold_type": {
"type": "string",
"enum": [
"none",
"days",
"months",
"m_plus",
"date",
"unknown"
],
"description": "유지조건: none=없음, days=일수, months=개월, m_plus=개통월 이후 N개월, date=변경 가능일, unknown=미확인. 해당 기간 필드를 함께 제공."
},
"hold_days": {
"description": "hold_type=days일 때 필요한 유지 일수. 해당 유형에서는 1 이상.",
"type": "integer",
"minimum": 0,
"maximum": 3660
},
"hold_months": {
"description": "months 또는 m_plus일 때 필요한 유지 개월 수. 해당 유형에서는 1 이상.",
"type": "integer",
"minimum": 0,
"maximum": 120
},
"cancel_allowed_at": {
"description": "해지 가능일 YYYY-MM-DD. date 유형이면 activationDate도 필요.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"source_text": {
"description": "유지조건 원문. 개인정보를 제거한 확인 자료만 입력.",
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"additionalProperties": false
}
},
"installment_interest": {
"description": "amount이면 전체 할부이자 원(KRW), apr이면 연이율 소수(5.9%=0.059, 0~1). 월 납입액이 아님.",
"type": "number",
"minimum": 0,
"maximum": 1000000000
},
"installment_interest_type": {
"description": "이자 방식. none=무이자 확인, amount=전체 이자 확정액, apr=연이율 추정. apr이면 installment_months도 필요.",
"type": "string",
"enum": [
"none",
"amount",
"apr"
]
},
"installment_months": {
"description": "할부 개월 수. 비교 기간 horizonMonths와 별개.",
"type": "integer",
"minimum": 1,
"maximum": 60
},
"mandatory_costs": {
"description": "추가 의무비용 전체 금액 목록. 월 비용은 해당 기간 총액으로 제공. 최대 20개.",
"maxItems": 20,
"type": "array",
"items": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "확정 총액, 원(KRW). 할인 배열의 숫자는 확정 할인으로 차감되므로 미확정 혜택은 숫자로 넣지 마세요."
},
{
"type": "object",
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "항목 전체 금액, 원(KRW). 월 금액이 아님."
},
"guaranteed": {
"description": "할인이 확정됐으면 true. 객체형 할인은 true일 때만 차감 후보.",
"type": "boolean"
},
"conditional": {
"description": "조건부 할인이면 true. guaranteed=true여도 차감하지 않음.",
"type": "boolean"
},
"mandatory": {
"description": "의무비용 배열에서 false이면 제외. 할인 배열에는 적용하지 않음.",
"type": "boolean"
}
},
"required": [
"amount"
],
"additionalProperties": false
}
]
}
},
"confirmed_discounts": {
"description": "중복되지 않는 확정 할인 총액 목록. 숫자는 확정으로 간주하며 객체는 guaranteed=true, conditional!=true일 때만 차감.",
"maxItems": 20,
"type": "array",
"items": {
"anyOf": [
{
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "확정 총액, 원(KRW). 할인 배열의 숫자는 확정 할인으로 차감되므로 미확정 혜택은 숫자로 넣지 마세요."
},
{
"type": "object",
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"maximum": 1000000000,
"description": "항목 전체 금액, 원(KRW). 월 금액이 아님."
},
"guaranteed": {
"description": "할인이 확정됐으면 true. 객체형 할인은 true일 때만 차감 후보.",
"type": "boolean"
},
"conditional": {
"description": "조건부 할인이면 true. guaranteed=true여도 차감하지 않음.",
"type": "boolean"
},
"mandatory": {
"description": "의무비용 배열에서 false이면 제외. 할인 배열에는 적용하지 않음.",
"type": "boolean"
}
},
"required": [
"amount"
],
"additionalProperties": false
}
]
}
},
"card_required": {
"description": "카드 조건 존재 여부. true가 할인 자격 충족을 뜻하지 않음.",
"type": "boolean"
},
"trade_in_required": {
"description": "기기 반납 조건 존재 여부. 실제 반납가를 보장하지 않음.",
"type": "boolean"
},
"bundle_required": {
"description": "결합 조건 존재 여부. 실제 승인·할인 자격을 보장하지 않음.",
"type": "boolean"
}
},
"required": [
"subsidy_type",
"device_sale_price"
],
"additionalProperties": false,
"description": "사용자가 확인한 판매 조건. 필수 device_sale_price는 단말 전체 금액이며 월 할부금이 아닙니다."
},
"horizonMonths": {
"default": 24,
"description": "총비용 비교 기간, 12~36개월. 기본 24. 할부 원금을 기간 비율로 축소하지 않음.",
"type": "integer",
"minimum": 12,
"maximum": 36
},
"activationDate": {
"description": "개통 기준일 YYYY-MM-DD. 날짜형 유지조건 계산에 필요. 미확인이면 생략하고 경고 확인.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"userPlanMonthlyFee": {
"description": "사용자가 원래 선택할 기준 요금제 월정액, 원(KRW). 조건 추가부담 비교용이며 실제 청구액이 아님.",
"type": "number",
"minimum": 0,
"maximum": 100000000
}
},
"required": [
"deal"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}