카드 정산 불변식 표 (Card Settlement Invariants)
범위: card-settlement-migration
1. 브랜드 정산 (Brand Settlement) 불변식
| ID |
설명 |
수식 |
영향 클래스 |
보존 주의사항 |
| BRAND_SETTLEMENT_NON_NEGATIVE |
브랜드 정산금은 0 이상 |
settlementAmount >= 0 |
SettlementCalculator |
음수 시 0 보정 |
| BRAND_SETTLEMENT_FORMULA |
정산금 = 승인금액 - 취소금액 - 수수료 |
settlementAmount = approved - cancelled - commission |
SettlementCalculator |
계산 순서 준수 |
| BRAND_COMMISSION_FORMULA |
수수료 = 승인금액 * 정산요율 |
commission = approvedAmount * rate |
SettlementCalculator |
2자리 반올림 |
| BRAND_COMMISSION_RATE_DEFAULT |
미지정 시 기본값 0.02(2%) |
rate = 0.02 when null |
SettlementCalculator |
DEFAULT_COMMISSION_RATE |
2. IRD (Interchange Reimbursement Fee) 불변식
| ID |
설명 |
수식 |
영향 클래스 |
보존 주의사항 |
| IRD_NON_NEGATIVE |
IRD는 0 이상 |
ird >= 0 |
SettlementCalculator |
음수 시 0 보정 |
| IRD_FORMULA |
IRD = 승인금액 * IRD율 |
ird = approvedAmount * rate |
SettlementCalculator |
2자리 반올림 |
| IRD_RATE_DEFAULT |
미지정 시 기본값 0.015(1.5%) |
rate = 0.015 when null |
SettlementCalculator |
DEFAULT_IRD_RATE |
3. 발급사 수수료 (Issuer Fee) 불변식
| ID |
설명 |
수식 |
영향 클래스 |
보존 주의사항 |
| ISSUER_FEE_NON_NEGATIVE |
발급사 수수료는 0 이상 |
issuerFee >= 0 |
SettlementCalculator |
음수 시 0 보정 |
| ISSUER_FEE_FORMULA |
발급사 수수료 = IRD * 발급사 수수료율 |
issuerFee = ird * rate |
SettlementCalculator |
2자리 반올림 |
| ISSUER_FEE_RATE_DEFAULT |
미지정 시 기본값 0.005(0.5%) |
rate = 0.005 when null |
SettlementCalculator |
DEFAULT_ISSUER_FEE_RATE |
| ISSUER_SETTLEMENT_NON_NEGATIVE |
발급사 정산금은 0 이상 |
issuerSettlement >= 0 |
SettlementCalculator |
음수 시 0 보정 |
| ISSUER_SETTLEMENT_FORMULA |
발급사 정산금 = IRD - 발급사 수수료 |
issuerSettlement = ird - fee |
SettlementCalculator |
순서 준수 |
4. 공통 금액 검증 불변식
| ID |
설명 |
수식 |
영향 클래스 |
보존 주의사항 |
| AMOUNT_NOT_NULL |
금액은 null 불가 |
amount != null |
SettlementCalculator |
IllegalArgumentException |
| AMOUNT_NON_NEGATIVE |
금액은 0 이상 |
amount >= 0 |
SettlementCalculator |
IllegalArgumentException |
| AMOUNT_MAX_LIMIT |
최대 한도 이하여야 함 |
amount <= 999999999999.99 |
SettlementCalculator |
IllegalArgumentException |
5. 금액 정밀도 불변식
| ID |
설명 |
수식 |
영향 클래스 |
보존 주의사항 |
| AMOUNT_SCALE |
소수점 2자리 표현 |
scale(amount) = 2 |
SettlementCalculator |
setScale(2, HALF_UP) |
| ROUNDING_MODE |
HALF_UP 반올림 |
RoundingMode.HALF_UP |
SettlementCalculator |
반올림 정책 준수 |
6. 계산 흐름도
승인요청
│
▼
┌─────────────────────────────┐
│ SettlementCalculator │
│ ───────────────────────── │
│ [브랜드 정산 계산] │
│ 1. 승인금액 검증 (NOT_NULL, │
│ NON_NEGATIVE, MAX_LIMIT)│
│ 2. 수수료 = 승인금액 * 요율 │
│ 3. IRD = 승인금액 * IRD율 │
│ 4. 정산금 = 승인 - 취소 - 수수료│
│ 5. 음수 보정 (>= 0) │
│ ───────────────────────── │
│ [발급사 수수료 계산] │
│ 6. 발급사수수료 = IRD * 요율│
│ 7. 발급사정산 = IRD - 수수료│
│ 8. 음수 보정 (>= 0) │
└─────────────────────────────┘
│
▼
정산 결과 출력
7. Spring 전환 시 체크리스트
8. 불변식 요약
| 카테고리 |
불변식 수 |
| 브랜드 정산 |
4 |
| IRD |
3 |
| 발급사 수수료 |
5 |
| 공통 금액 검증 |
3 |
| 금액 정밀도 |
2 |
| 총계 |
17 |