feat(channel-donation-calculate): 채널 후원 정산 조회 기능을 추가한다

This commit is contained in:
2026-02-26 18:57:02 +09:00
parent dd9cd788ca
commit 19d3544c72
24 changed files with 1346 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
package kr.co.vividnext.sodalive.calculate.channelDonation
import java.math.BigDecimal
import java.math.RoundingMode
data class ChannelDonationSettlementAmount(
val krw: Int,
val fee: Int,
val settlementAmount: Int,
val withholdingTax: Int,
val depositAmount: Int
)
object ChannelDonationSettlementCalculator {
private val KRW_PER_CAN = BigDecimal("100")
private val FEE_RATE = BigDecimal("0.066")
private val SETTLEMENT_RATE = BigDecimal("0.85")
private val WITHHOLDING_TAX_RATE = BigDecimal("0.033")
fun calculate(totalCan: Int): ChannelDonationSettlementAmount {
// 원화 = 캔 * 100
val krw = BigDecimal(totalCan).multiply(KRW_PER_CAN).setScale(0, RoundingMode.HALF_UP).toInt()
// 수수료 = 원화 * 6.6%
val fee = BigDecimal(krw).multiply(FEE_RATE).setScale(0, RoundingMode.HALF_UP).toInt()
// 정산금액 = (원화 - 수수료) * 85%
val settlementAmount = BigDecimal(krw - fee)
.multiply(SETTLEMENT_RATE)
.setScale(0, RoundingMode.HALF_UP)
.toInt()
// 원천세 = 정산금액 * 3.3%
val withholdingTax = BigDecimal(settlementAmount)
.multiply(WITHHOLDING_TAX_RATE)
.setScale(0, RoundingMode.HALF_UP)
.toInt()
// 입금액 = 정산금액 - 원천세
val depositAmount = settlementAmount - withholdingTax
return ChannelDonationSettlementAmount(
krw = krw,
fee = fee,
settlementAmount = settlementAmount,
withholdingTax = withholdingTax,
depositAmount = depositAmount
)
}
}