feat(channel-donation-calculate): 채널 후원 정산 조회 기능을 추가한다
This commit is contained in:
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user