한국어
청구 기간 정책
계약 기간, 요금을 계산하는 기간, 청구서를 발행하는 날짜를 구분합니다. 청구 기간 정책은 이 규칙들의 묶음이고, 아래 세 가지 청구 기간 유형은 제품이 선택할 수 있는 조합입니다. 가격·요금의 종류인 기본료, 사용량 요금, 일회성 비용과는 다른 축입니다.
결정과 제공 상태 — 2026-10-13 KST
- 확정된 제품 방향: Leyve는 달력월(1일~말일)을 기준으로 매월 1일 청구하고, 정규 기간 전에 발생하는 최초 일할 이용료와 설치비 등의 첫 비용은 하나의 부속 계약에 담습니다.
- 검토안: 계약일 기준형과 계약 기간을 유지하는 달력월형을 공통 분류로 정리했습니다. 일반 B의 연간 총액 보정, 윤일·월말 예외는 아래 조건에 따라 별도로 확정해야 합니다.
- 검증 범위: 이 문서의 금액 예시와 달력 경계를 저장소의 계산 검증으로 확인합니다. 세 유형을 제공하는 공통 API·SDK·자동 청구 기능이 배포되었다는 뜻은 아닙니다.
- 공통 정의는 이 문서가 소유합니다. 제품별 채택·예외·구현 상태는 해당 제품 문서와 실행 저장소가 소유합니다. 기존 청구서나 가격 계산기를 이 문서만으로 변경하지 않습니다.
업계 용어와 분류 근거
Stripe의 billing cycle anchor는 주기의 기준 날짜입니다. 시작일부터 첫 정규 청구일까지의 부분 기간을 일할 청구할 수 있습니다. Chargebee의 Calendar Billing은 가입일과 다른 공통 청구일을 지정할 수 있습니다. Stripe 공식 문서 (새 탭), Chargebee 공식 문서 (새 탭)
Zuora는 부분 월 계산에서 실제 월 일수와 30일 기준 등 서로 다른 계산법을 선택하게 합니다. 달력월 정렬만으로 일할 금액이나 연간 합계가 정해지지는 않습니다. Zuora 공식 문서 (새 탭)
아래의 세 유형은 이 개념들과 사용자의 요구를 조합한 Leysys의 분류안입니다. 국제 표준에 같은 세 가지 유형명이나 코드가 정해져 있다는 의미는 아닙니다. 달력월 청구와 계약 분리는 회계 서비스의 제품 정책이며, 모든 회계 제품에 강제되는 규칙으로 소개하지 않습니다.
독립적으로 정할 값
| 값 | 의미 |
|---|---|
| 계약 체결일 | 계약을 합의한 날짜. 이용 시작일과 같다고 추정하지 않습니다 |
| 이용 시작일 | 실제 유상 이용이 시작되는 날짜. 아래 예시에서 말하는 ‘계약일’의 기준입니다 |
| 계약 기간 | 권리·의무가 유지되는 시작일과 종료일 |
| 정규 기간 시작일 | 12개월 등 정규 약정 기간을 세기 시작하는 날짜 |
| 청구 주기와 기준일 | 월/연 등의 주기와 매월 1일/이용 시작일 등의 기준일 |
| 청구 대상 기간 | 해당 청구서가 요금을 계산하는 서비스 기간 |
| 발행일·납부기한·결제 시도일 | 각각 다른 날짜. 기준일이 같아도 납부기한과 실제 결제를 자동으로 같게 만들지 않습니다 |
| 일할 기준 | 실제 일수/해당 월 일수, 30일 기준 등. 승인된 방법과 버전을 기록합니다 |
| 끝수 처리 | 처리 단위·방향·통화 최소 단위 |
| 계약 금액 보장 | 기간별 계산 합계인지, 약정 공급가 총액이 고정인지 |
| 최초 비용 | 설치·이관·교육 등의 일회성 항목. 이용 기간을 연장하지 않습니다 |
예시의 정규 이용료는 동일한 월 공급가 M을 월 선청구하는 경우입니다. 1년 약정과 연 1회 청구는 다른 조건이며, 연납·분기납은 발행 스케줄을 별도로 정합니다. 과세, 사용량 변동, 중도 변경·해지는 이 고정 월 정액 예시에 포함하지 않습니다.
내부 기간은 [시작일 포함, 종료일 제외)로 기록하고 화면에서는 마지막 포함 날짜를 보여줍니다. 사업 시간대의 날짜를 사용합니다. Leyve의 사업 시간대는 Asia/Seoul입니다.
세 유형 비교
유상 이용을 2026-01-05에 시작하고 ‘정규 이용 1년’을 약정하는 예시입니다.
| 사용자 구분 | 문서의 유형명 | 정규 이용 기간 | 최초·마지막 부분 기간 |
|---|---|---|---|
| 특수 — Leyve | 달력월 기준 + 선행 부속 계약 | 2026-02-01~2027-01-31 | 2026-01-05~01-31은 정규 계약 앞의 부속 계약 |
| 일반 A | 계약일 기준 | 2026-01-05~2027-01-04 | 매월 5일~다음 달 4일. 정상 만기에는 부분 월 없음 |
| 일반 B | 달력월 기준 + 계약 기간 유지 | 2026-01-05~2027-01-04 | 첫 1월의 5~31일과 마지막 1월의 1~4일이 부분 월 |
특수: 달력월 기준 + 선행 부속 계약
- 부속 계약: 2026-01-05~01-31 이용료와 최초 비용을 항목별로 담아 한 번 청구합니다.
- 정규 계약: 2026-02-01~2027-01-31, 매월 1일에 해당 월 1일~말일 이용료를 청구합니다.
정규 계약은 12개월·12회이고, 부속 계약은 1회입니다. 합쳐서 청구서는 13장입니다. 실제 이용 기간은 선행 부분 기간 + 정규 12개월로 안내합니다. ‘1.x년’으로 소수 환산하기보다 두 기간의 날짜를 보여줍니다. 설치비는 이 기간 계산에 더하지 않습니다.
부속 계약은 독립된 계약번호를 갖고 정규 계약을 참조합니다. 부속 청구서 한 장은 그 부속 계약에만 속하며, 정규 청구서는 정규 계약에만 속합니다. 두 계약의 금액을 한 청구서에 합치지 않습니다. 첫 비용만 있거나 일할 이용료만 있는 경우에도 같은 구조를 씁니다.
이용 시작일이 1일이면 정규 계약을 그날 시작할 수 있고 선행 일할 기간은 없습니다. 최초 비용까지 없으면 빈 부속 계약을 만들 필요가 없습니다.
일반 A: 계약일 기준
- 최초 비용 계약: 설치·이관비 등이 있을 때 한 번 청구합니다.
- 정규 계약: 2026-01-05~2027-01-04. 월별 대상 기간은 1월 5일~2월 4일, 2월 5일~3월 4일, …, 12월 5일~다음 해 1월 4일입니다.
정규 청구는 12회이며 동일 월 공급가라면 합계는 12 × M입니다. 이 예시의 월 선청구일은 매월 5일입니다. 월별 일수가 달라도 완전한 월 주기마다 M을 청구합니다. 최초 비용 계약이 있으면 그 한 번의 청구는 정규 12회와 별도로 셉니다.
일반 B: 달력월 기준 + 계약 기간 유지
- 최초 비용 계약: 설치·이관비 등이 있을 때 한 번 청구합니다.
- 정규 계약: 2026-01-05~2027-01-04라는 원래 만기를 유지합니다.
- 첫 청구: 2026-01-05~01-31의 부분 기간.
- 가운데 11회: 2026-02-01~12-31의 각 완전한 달력월.
- 마지막 청구: 2027-01-01~01-04의 부분 기간.
정규 계약은 12개월이지만 청구는 13회입니다. 첫 부분 기간은 이용 시작일, 이후는 매월 1일에 선청구하는 예시입니다. 최초 비용의 별도 계약까지 있으면 총 14장입니다. 1일 시작이면 양 끝 부분 기간이 없어 정규 청구는 12회입니다.
이 유형은 양 끝의 일할 계산을 정규 계약에 명시하므로, 청구 금액이 달라도 같은 정규 계약의 회차입니다. 선행 기간을 정규 계약 밖에 두는 특수 유형과 구분합니다.
일반 B: 양 끝 일할 합계 검증
월 공급가·수량·할인 조건이 같고 시작 날짜를 다음 해에도 그대로 쓸 수 있다고 가정합니다. 시작일이 d일, 첫 월 일수가 D1, 마지막 월 일수가 D2이면 끝수 처리 전 합계는 다음과 같습니다.
text
첫 부분 공급가 = M × (D1 - d + 1) / D1
마지막 부분 공급가 = M × (d - 1) / D2D1 = D2이면 두 비율의 합은 1입니다. 예를 들어 1월 5일 시작은 27/31 + 4/31 = 1입니다. 그러나 2월의 윤년 경계에서는 D1과 D2가 다르고, 각각 원 단위로 절사해도 합계가 달라집니다.
아래는 월 공급가 100,000원, 각 부분 항목 원 미만 절사, 부가세 제외 예시입니다.
| 정규 계약 기간 | 첫 부분 | 마지막 부분 | 양 끝 합계 | 월 공급가와 차이 |
|---|---|---|---|---|
| 2026-01-05~2027-01-04 | 87,096 | 12,903 | 99,999 | -1 |
| 2027-02-05~2028-02-04 | 85,714 | 13,793 | 99,507 | -493 |
| 2028-02-05~2029-02-04 | 86,206 | 14,285 | 100,491 | +491 |
이는 계산 오류라고 단정할 수 없습니다. 실제 월 일수 기준을 각각 적용한 결과입니다. 30일 기준으로 바꿔도 월말 처리와 끝수 규칙을 정해야 하므로 합계 일치의 자동 해결책은 아닙니다.
선택 1: 실제 월 일수 계산을 그대로 유지
첫·마지막 부분 기간을 각 월의 실제 일수로 계산합니다. 연간 합계는 계산된 청구 금액의 합이며 12 × M을 보장하지 않습니다. 견적에서 차이를 보여주고 ‘고정 연간 총액’이라고 안내하지 않습니다.
선택 2: 약정 공급가 총액 보장 — 권고 검토안
일반 B에서 연간 공급가가 정확히 12 × M이어야 한다면, 이를 별도 약정 조건으로 두고 마지막 청구에서 차액을 정산하는 방식을 권고합니다. 이는 업체 문서의 자동 보장 기능이 아니라 위 요구를 만족시키기 위한 Leysys 정책 제안입니다.
text
약정 공급가 총액 = 12 × M
마지막 청구 공급가 = 약정 공급가 총액 - 앞선 정규 회차의 확정 공급가 합계
기간 배분 정산액 = 마지막 청구 공급가 - 마지막 부분 기간의 실일수 계산 공급가가운데 11개월이 모두 M이면 마지막 청구는 M - 첫 부분 청구액입니다. 1월 예시에서는 12,904원이고, 그 안에 끝수 차이 1원이 포함됩니다. 2027년 2월 시작 예시에서는 14,286원으로, 실일수 계산 13,793원과의 차이 493원을 설명해야 합니다.
실일수 계산액, 정산액, 최종 공급가를 모두 보여주고 보존합니다. 이를 순수한 실일수 금액이라고 표시하거나 이미 발행한 첫 청구서를 고치지 않습니다. 가격 조정의 쿠폰·할증과도 다릅니다. 이 정산 규칙은 가격 조정의 일할 항목 제외 원칙을 우회하는 일반 할인·할증 기능이 아닙니다.
적용 조건
총액 보장은 동일 항목·수량·월 공급가·통화·할인 조건을 유지한 고정 기간 약정에 한정한 검토안입니다. 중도 가격 변경·해지·수량 변경·환불·미납은 원래 12 × M으로 임의 정산하지 않습니다. 변경된 약정과 정정 기록에 따라 다시 판단합니다. 마지막 공급가가 음수이거나 근거가 없으면 자동 발행하지 않고 검토합니다. 미납은 공급가를 다시 더 청구할 이유가 되지 않습니다.
공급가와 세금은 별도로 검증
위 합계 보장은 정규 이용료의 공급가 기준입니다. 최초 비용과 세금은 포함하지 않습니다. 문서별 세금 끝수, 세율 변경 또는 면세 조건 때문에 세금 포함 합계까지 월 결제액 × 12가 될 것이라고 추정하지 않습니다. 세금은 승인된 세금 정책으로 각각 계산하고 그 증거를 보존합니다. 합계를 맞추려고 세액이나 이미 발행한 문서를 임의로 바꾸지 않습니다.
날짜·회차 예외
- ‘1년’은 무조건 365일이 아니라 계약에서 정의한 달력상 12개월입니다.
- 29·30·31일 기준일의 짧은 달 처리는 명시해야 합니다. Stripe처럼 해당 월의 말일로 보정하더라도 원래 기준일을 보존해야 합니다. 예를 들어 1월 31일 → 2월 말일 → 3월 31일이며, 2월의 보정된 28일을 새 기준일로 삼아 3월도 28일이 되게 하지 않습니다.
- 2월 29일 시작의 연간 만기는 별도 계약 조건으로 확정합니다. 아래 문서 검증 예시에서는 다음 해 대응일이 없을 때 종료 경계를 2월 28일(제외)로 보정합니다. 즉 마지막 포함일은 2월 27일입니다. 이는 검증용 가정이며 전 제품의 확정 만기 규칙이 아닙니다.
- 이용 기간의 분할에는 누락·겹침·0일 구간이 없어야 합니다. 날짜가 같은 경계는 한 번만 셉니다.
- 약정 개월 수, 청구 회차 수, 결제 횟수는 다릅니다. 일반 B의 12개월·13회처럼 목록에 실제 생성된 청구 스케줄의 회차를 표시합니다. 결제 실패·재시도는 새 청구 회차를 만들지 않습니다.
- 계약과 청구 식별자 및 참조는 계약 참조와 청구번호를 따릅니다.
구현 채택 시 보존할 근거
정책 버전, 사업 시간대, 원래 기준일, 계약·이용·청구 기간, 확정 단가·수량·통화, 일할 분자·분모, 끝수 처리, 약정 총액 보장 여부, 정산 내역을 청구 시점의 근거로 남깁니다. 문서에서 새로운 공통 API나 enum을 확정하지 않습니다. 구현 정본이 실제 스키마와 이행을 소유합니다.
견적·계약 확인 단계에서 최초 청구, 정상 월 청구, 마지막 청구, 공급가 총액과 회차 수를 같은 스케줄로 확인할 수 있어야 합니다. 기간이나 조건이 미정이면 금액을 확정하지 않습니다.
저장소의 tests/billing-period-examples.test.mjs는 위 숫자 예시, 윤년·세기 윤년, 월말, 1일 시작과 400년 달력 순환의 날짜 분할을 검증합니다. 제품 런타임 테스트를 대체하지 않습니다.