Skip to content

가격 조정: 할인과 할증 ​

정가를 바꾸는 모든 것 — 쿠폰 할인, 직접 할인, 할증, 단가 대체 — 의 공통 규칙입니다. 가격 규칙의 ②층입니다.

상태

  • 규칙: 2026-09-22 KST 오너 확정.
  • 구현: 단가 대체만 leyve-center-proto의 프로토타입 계산기에 있습니다. 정률·정액 조정, 중복 제한, 상한, 유지 기간은 아직 구현되지 않았습니다.

한눈에 ​

  • 할인과 할증은 같은 구조입니다. 방향만 다릅니다.
  • 쿠폰 할인과 직접 할인은 할인의 종류가 아니라 전달 경로입니다. 종류는 형태(정률·정액·단가 대체)로 나눕니다.
  • 조정은 항목 수준 → 주문 수준 순서로 적용하고, 같은 수준 안에서는 합산합니다. 목록 순서 규칙이 없습니다.
  • 대상은 제외 목록이 아니라 허용 목록으로 정합니다.
  • 결제수단에 따라 달라지는 할증은 만들지 않습니다.

조정 공통 규칙 ​

A1. 조정의 정의 ​

속성값
방향할인 · 할증
형태정률(%) · 정액(원) · 단가 대체(방향 없음)
기준단가(부과 단위당) · 항목 금액 · 주문 합계
경로쿠폰 · 직접 · 자동 규칙
대상적용할 요금 규칙(과 대상)의 허용 목록
상한이 조정 하나의 최대 금액
조건최소 금액, 신규만, 특정 고객·요금제·채널, 횟수·수량 한도
중복단독 여부, 그룹
등록 기한시작일·종료일
유지 기간1회 · N개월 · 계속
부담 주체본사 · 파트너
정책 버전필수

자동 규칙의 예는 연납·약정, 묶음 구매, 기간 프로모션, 공공·비영리, 수량 할인입니다. 무료 기간은 별도 형태가 아니라 정률 100% + 유지 기간이고, 무료 수량은 요율 함수의 기본 제공입니다.

A2. 두 수준 ​

항목 수준 조정을 먼저 적용하고, 주문 수준 조정은 그 결과의 합계에 적용합니다.

A3. 같은 수준 안에서는 합산합니다 ​

각 조정의 금액을 그 수준의 기준 금액으로 따로 계산해 더합니다. 어떤 순서로 적용해도 결과가 같고, 조정마다 금액을 따로 적을 수 있고, 조정별 상한이 분명해집니다.

가상의 예: 정가 1,200원 × 100 = 120,000원. 단기 할증 +20%(+24,000), 쿠폰 −10%(−12,000), 단위당 −300원(−30,000) → 순액 102,000원. 세 조정의 순서를 바꿔도 같습니다.

합산은 남은 금액에 차례로 적용하는 방식보다 할인이 깊어지고 50% + 50%가 100%가 됩니다. 그래서 A4의 그룹 제한은 필수입니다.

A4. 중복 제한 ​

조정은 단독 여부와 그룹을 가집니다. 단독 조정은 같은 항목에 다른 조정과 함께 쓸 수 없습니다. 같은 그룹에서는 하나만 허용합니다(예: 정률 쿠폰 그룹). 조합이 안 되면 하나를 조용히 빼지 않고 사유와 함께 거부합니다.

A5. 상한과 하한 ​

조정마다 최대 금액을 둘 수 있습니다. 항목의 순액은 0원보다 작아지지 않습니다. 정액 할인에서 남는 금액은 소멸합니다. 남은 금액이 이월되는 것은 조정이 아니라 유상 · 무상 크레딧입니다.

A6. 단가 대체가 있는 항목에는 다른 조정을 적용하지 않습니다 ​

합의한 금액이 최종 금액입니다.

A7. 끝수 ​

정률 조정액의 최소 단위 미만은 고객에게 유리한 쪽으로 처리합니다. 할인액은 올리고 할증액은 버립니다. 조정마다 정수 금액이 나오므로 항목의 순액은 정가 금액 + 할증액 합 − 할인액 합으로 정확히 맞습니다. 정률은 정수 만분율(1250 = 12.5%)로 계산합니다.

A8. 주문 수준 조정의 배분 ​

대상 항목의 금액에 비례해 나누고 항목마다 기록합니다. 끝수는 금액이 가장 큰 항목에 둡니다. 부분 환불, 세금계산서, 대상별 회계 배분이 모두 이 기록에서 나옵니다.

A9. 조정 비대상 ​

대상은 허용 목록으로 정하므로 새 요금 규칙이 생겨도 실수로 할인되지 않습니다. 일할 계산 항목, 음수 항목, 외부 실사용료, 보증금, 세금은 어떤 조정의 대상도 될 수 없습니다. 유상 · 무상 크레딧에서 차감하는 요금(선결제 차감형)도 조정 대상이 아닙니다.

A10. 정의는 불변입니다 ​

조정 정의는 이름과 메모만 고칠 수 있습니다. 조건을 바꾸려면 새 버전을 만듭니다. 정의를 삭제하거나 등록 기한이 지나도 이미 적용된 조정은 유지됩니다.

A11. 기록 ​

청구 항목에 정가 단가, 수량, 정가 금액, 조정별 금액, 순액을 남깁니다. 요금 규칙의 식별자와 청구 식별자는 조정으로 바뀌지 않으며, 이미 기록한 청구의 금액이 달라지면 정정이 필요합니다. 조정의 추가·변경·삭제는 사유와 함께 감사 기록에 남깁니다.

A12. 미정 정책은 조정으로 확정되지 않습니다 ​

요금표의 단가나 정책이 미정인 규칙은 조정이 있어도 보류 상태입니다.

할인 규칙 ​

#항목규칙
1중복 허용A4. 단독 조정이 하나라도 있으면 그것만. 같은 그룹은 하나만. 위반은 사유와 함께 거부
2정률·정액A1의 형태. 정액은 기준(단위당·항목 금액·주문 합계)을 반드시 함께 정합니다
3최대 적용 금액A5. 조정별 최대 금액, 항목 순액 하한 0원, 초과분 소멸. 구독은 청구 1회 기준
4유지 기간1회·N개월·계속. 처음 적용된 청구부터 달력 기준으로 셉니다. 일시정지 중에도 흐릅니다
5등록 기한기한은 새 등록만 막습니다. 이미 적용된 할인은 유지 기간을 채웁니다. 종료일 포함, KST 기준
6제외 항목A9. 허용 목록 방식
7적용 순서A2·A3. 항목 → 주문. 같은 수준 안에서는 순서가 없습니다
8정률 + 정률A3. 같은 수준이면 합산. 100% 방지는 A4의 그룹과 A5의 하한
9배분과 환불A8. 부분 환불은 그 항목에 배분된 할인을 뺀 순액 기준. 1회용 조정은 전액 취소일 때만 복원
10사용 조건·수량 한도등록 시점에만 검사합니다. 수량 한도는 예약 → 확정/복원으로 초과를 막습니다
11요금제 변경·일할요금제를 바꿔도 조정은 유지됩니다. 일할 항목은 조정이 반영된 금액으로 계산하고 다시 조정하지 않습니다
12부가세 기준조정은 공급가에 적용하고 부가세는 조정 후 금액에 계산합니다. 쿠폰 금액의 표기도 공급가 기준입니다
13부담 주체조정마다 본사·파트너를 기록합니다. 파트너 정산의 기준 금액은 부담 주체가 본사면 할인 전, 파트너면 할인 후입니다
14악용 방지코드는 추측할 수 없게 발급하고 고객당 횟수를 제한합니다

직접 조정의 형태는 단가 대체와 정률입니다.

할증 규칙 ​

S1. 할증은 할인과 대칭입니다 ​

정률(+%)과 정액(+원)이고 A1–A12를 똑같이 따릅니다. 1차에는 실제 할증 항목을 두지 않고 구조만 둡니다.

S2. 할증과 추가 요금을 구분합니다 ​

구분판단 기준예위치
할증어떤 가격에 연동해 그 가격을 올린다단기·월납 할증, 긴급·시간외 처리 할증②층
추가 요금자기 수량과 단가를 가진 독립 금액도입비, 외부 실사용료, 배송비, 초과 사용①층
최소 요금합계가 기준에 못 미칠 때의 차액월 최소 이용료①층 — 1차 범위 밖
연체료청구가 확정된 뒤 미납에 붙는다지연손해금④층 — 범위 밖

S3. 결제수단 할증은 금지입니다 ​

카드 결제를 이유로 고객을 불리하게 대우하거나 가맹점수수료를 회원에게 부담시키는 것은 여신전문금융업법 제19조 제1항·제4항 위반입니다(벌칙 제70조 제4항). 결제수단에 따라 달라지는 조정은 만들지 않습니다. 출처: 법제처 찾기쉬운 생활법령정보 — 신용카드 가맹점 (새 탭), 2026-09-22 KST 확인. 실제 적용 전에 법무 확인을 거칩니다.

S4. 연체료는 조정이 아닙니다 ​

확정된 청구는 고치지 않으므로 연체료는 다음 청구의 별도 항목이거나 별도 청구입니다. 이율과 약관은 법무 검토가 필요하며 이번 범위 밖입니다.

S5. 할증은 고지가 전제입니다 ​

항목에 할인과 똑같이 따로 표시하고, 직접 적용한 할증은 사유를 필수로 받아 감사 기록에 남깁니다. 계약자 화면에도 같은 금액이 보여야 합니다.

S6. 할인과 할증이 함께 있으면 합산합니다 ​

정률 할인은 할증이 붙은 금액이 아니라 정가 금액을 기준으로 계산합니다. 같은 수준의 조정은 서로의 기준을 바꾸지 않습니다.

S7. 할증에도 상한을 둘 수 있습니다 ​

법이나 계약이 정한 한도는 A5의 조정별 최대 금액으로 표현합니다.

자료 구조 (스케치) ​

구현 계약이 아니라 속성을 한눈에 보기 위한 스케치입니다.

ts
interface PriceAdjustment {
  id: string;
  direction: "OFF" | "ON" | null; // 단가 대체는 방향이 없습니다
  form: "PERCENT" | "AMOUNT" | "SET";
  basis: "UNIT" | "LINE" | "ORDER";
  /** AMOUNT·SET은 통화 최소 단위의 정수, PERCENT는 정수 만분율 */
  value: number;
  source: "COUPON" | "DIRECT" | "AUTOMATIC";
  /** 허용 목록. targetIds가 없으면 그 규칙의 모든 대상 */
  appliesTo: { ruleId: string; targetIds?: string[] }[];
  maxAmount?: number;
  exclusive: boolean;
  group?: string;
  redeemFrom?: string;
  redeemBy?: string;
  /** REPEATING만 months를 가집니다 */
  duration: { kind: "ONCE" | "REPEATING" | "FOREVER"; months?: number };
  bearer: "HQ" | "PARTNER";
  policyVersion: string;
}

1차 구현은 항목 수준(UNIT·LINE), 경로 COUPON(직원이 고르는 프리셋)·DIRECT, 유지 기간 FOREVER만 계산합니다. 실제 청구 주기가 생기기 전에는 1회·N개월을 계산할 기준이 없습니다. 쿠폰 코드의 발급·검증·소진은 구현 범위 밖입니다.