-
Notifications
You must be signed in to change notification settings - Fork 0
/
주택공제계산.m
306 lines (259 loc) · 12.3 KB
/
주택공제계산.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
//2013년 연말정산 주택공제 계산 로직
/*
create : hernardo@gmail.com
date : 2013-11-7
*/
/*
houseRentLoanPrincipalRepaymentAmt_LoanOrganization
houseRentLoanPrincipalRepaymentAmt_Liver
houseMonthlyRentAmt
houseOfferSavings
houseOfferTotalSavings
houseWorkersSave
houseLongtermLoanAmt15Under
houseLongtermLoanAmt15to29
houseLongtermLoanAmt30Over
houseFixedInterestRateNonDeferredRepaymentLoan
houseEtcLoan
*/
//입력받은 금액
long houseRentLoanPrincipalRepaymentAmt_LoanOrganization //주택임차차입금원리금상환액_대출기관
long houseRentLoanPrincipalRepaymentAmt_Liver //주택임차차입금원리금상환액_거주자
long houseMonthlyRentAmt //월세액
long houseLongtermLoanAmt15Under //(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년미만
long houseLongtermLoanAmt15to29 //(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년~29년
long houseLongtermLoanAmt30Over //(2011년 이전 차입분) 장기주택저당차입금이자상환액_30년이상
long houseFixedInterestRateNonDeferredRepaymentLoan //(2012년 이후 차입분 15년 이상) 고정금리비거치식 상환대출
long houseEtcLoan //(2012년 이후 차입분 15년 이상) 기타대출
long houseOfferSavings//청약저축
long houseOfferTotalSavings//주택청약종합저축
long houseWorkersSave//근로자주택마련저축
//한도 계산 후 연말정산에 사용할 금액
long calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization //주택임차차입금원리금상환액_대출기관
long calculatedHouseRentLoanPrincipalRepaymentAmtLiver //주택임차차입금원리금상환액_거주자
long calculatedHouseMonthlyRentAmt //월세액
long calculatedHouseLongtermLoanAmt15Under //(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년미만
long calculatedHouseLongtermLoanAmt15to29 //(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년~29년
long calculatedHouseLongtermLoanAmt30Over //(2011년 이전 차입분) 장기주택저당차입금이자상환액_30년이상
long calculatedHouseFixedInterestRateNonDeferredRepaymentLoan //(2012년 이후 차입분 15년 이상) 고정금리비거치식 상환대출
long calculatedHouseEtcLoan //(2012년 이후 차입분 15년 이상) 기타대출
long calculatedHouseOfferSavings//청약저축
long calculatedHouseOfferTotalSavings//주택청약종합저축
long calculatedHouseWorkersSave//근로자주택마련저축
//한도 금액들
long maxLimitAmt
long totalSalary
long calculatedSumAmt
long limit6000000
long limit10000000
long limit15000000
long limit5000000
long limit3000000
long limit480000
long limit720000
//본격적인 계산
totalSalary = getFromDB('totalSalary')
limit6000000 = 6000000
limit10000000 = 10000000
limit15000000 = 15000000
limit5000000 = 5000000
limit3000000 = 3000000
limit480000 = 480000
limit720000 = 720000
maxLimitAmt = 3000000
//변수 init
calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization = 0
calculatedHouseRentLoanPrincipalRepaymentAmtLiver = 0
calculatedHouseMonthlyRentAmt = 0
calculatedHouseOfferSavings = 0
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
//DB 값 매핑
//1. check sum(all) == 0 then return
long inputTotalSum ;
inputTotalSum = houseRentLoanPrincipalRepaymentAmt_LoanOrganization + houseRentLoanPrincipalRepaymentAmt_Liver + houseMonthlyRentAmt + houseLongtermLoanAmt15Under + houseLongtermLoanAmt15to29 + houseLongtermLoanAmt30Over + houseFixedInterestRateNonDeferredRepaymentLoan + houseEtcLoan + houseOfferSavings + houseOfferTotalSavings + houseWorkersSave
if ( inputTotalSum == 0 ) {
calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization = 0
calculatedHouseRentLoanPrincipalRepaymentAmtLiver = 0
calculatedHouseMonthlyRentAmt = 0
calculatedHouseOfferSavings = 0
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
return 0;
}
//한도 계산
if ( houseLongtermLoanAmt15Under > 0 ) maxLimitAmt = max( maxLimitAmt , limit6000000)
if ( houseLongtermLoanAmt15to29 > 0 ) maxLimitAmt = max ( maxLimitAmt, limit10000000)
if ( houseLongtermLoanAmt30Over > 0 ) maxLimitAmt = max ( maxLimitAmt, limit15000000)
if ( houseFixedInterestRateNonDeferredRepaymentLoan > 0 ) maxLimitAmt = max ( maxLimitAmt, limit15000000)
if ( houseEtcLoan > 0 ) maxLimitAmt = max ( maxLimitAmt, limit5000000)
//주택임차차입금 원리금 상환액 대출기간 한도 계산
if ( houseRentLoanPrincipalRepaymentAmt_LoanOrganization > 0 && calculatedSumAmt < maxLimitAmt){
calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization = min( truncate( houseRentLoanPrincipalRepaymentAmt_LoanOrganization * 0.4 ,0) , limit3000000)
if ( calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization >= maxLimitAmt ) {
calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization = maxLimitAmt
calculatedHouseRentLoanPrincipalRepaymentAmtLiver = 0
calculatedHouseMonthlyRentAmt = 0
calculatedHouseOfferSavings = 0
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedHouseRentLoanPrincipalRepaymentAmtLoanOrganization
}
//주택임차차입금 원리금 상환액 거주자 한도 계산
if( houseRentLoanPrincipalRepaymentAmt_Liver > 0 && calculatedSumAmt < maxLimitAmt)
{
if ( totalSalary <= 50000000)
{
calculatedHouseRentLoanPrincipalRepaymentAmtLiver = min( truncate( houseRentLoanPrincipalRepaymentAmt_Liver * 0.4 ,0) , limit3000000)
if ( calculatedSumAmt + calculatedHouseRentLoanPrincipalRepaymentAmtLiver >= maxLimitAmt ){
calculatedHouseRentLoanPrincipalRepaymentAmtLiver = maxLimitAmt - calculatedSumAmt
calculatedHouseMonthlyRentAmt = 0
calculatedHouseOfferSavings = 0
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseRentLoanPrincipalRepaymentAmtLiver
}
}
//월세한도 계산
if ( houseMonthlyRentAmt > 0 && calculatedSumAmt < maxLimitAmt)
{
if (totalSalary <= 50000000)
{
calculatedHouseMonthlyRentAmt = min(truncate( houseMonthlyRentAmt* 0.5 ,0) , limit3000000)
if (calculatedSumAmt + calculatedHouseMonthlyRentAmt >= maxLimitAmt) {
calculatedHouseMonthlyRentAmt = maxLimitAmt - calculatedSumAmt
calculatedHouseOfferSavings = 0
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseMonthlyRentAmt
}
}
//저축 마련 저축 소득공제 - 청약저축 한도계산
if( houseOfferSavings > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseOfferSavings = min( truncate( houseOfferSavings * 0.4 ,0 ) , limit480000 )
if ( calculatedSumAmt + calculatedHouseOfferSavings >= maxLimitAmt)
{
calculatedHouseOfferSavings = maxLimitAmt - calculatedSumAmt
calculatedHouseOfferTotalSavings = 0
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseOfferSavings
}
//저축 마련 저축 소득공제 - 주택청약종합저축
if( houseOfferTotalSavings > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseOfferTotalSavings = min( truncate( houseOfferTotalSavings * 0.4 ,0) , limit480000 )
if ( calculatedSumAmt + calculatedHouseOfferTotalSavings >= maxLimitAmt)
{
calculatedHouseOfferTotalSavings = maxLimitAmt - calculatedSumAmt
calculatedHouseWorkersSave = 0
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseOfferTotalSavings
}
//저축 마련 저축 소득공제 - 근로자주택마련저축
if( houseWorkersSave > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseWorkersSave = min( truncate( houseWorkersSave * 0.4 ,0) , limit720000)
if ( calculatedSumAmt + calculatedHouseWorkersSave >= maxLimitAmt)
{
calculatedHouseWorkersSave = maxLimitAmt - calculatedSumAmt
calculatedHouseLongtermLoanAmt15Under = 0
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseWorkersSave
}
//(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년미만 한도계산
if( houseLongtermLoanAmt15Under > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseLongtermLoanAmt15Under = min(houseLongtermLoanAmt15Under , limit6000000)
if ( calculatedSumAmt + calculatedHouseLongtermLoanAmt15Under >= maxLimitAmt)
{
calculatedHouseLongtermLoanAmt15Under = maxLimitAmt - calculatedSumAmt
calculatedHouseLongtermLoanAmt15to29 = 0
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseLongtermLoanAmt15Under
}
//(2011년 이전 차입분) 장기주택저당차입금이자상환액_15년~29년 한도계산
if( houseLongtermLoanAmt15to29 > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseLongtermLoanAmt15to29 = min(houseLongtermLoanAmt15to29, limit10000000)
if ( calculatedSumAmt + calculatedHouseLongtermLoanAmt15to29 >= maxLimitAmt )
{
calculatedHouseLongtermLoanAmt15to29 = maxLimitAmt - calculatedSumAmt
calculatedHouseLongtermLoanAmt30Over = 0
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseLongtermLoanAmt15to29
}
//(2011년 이전 차입분) 장기주택저당차입금이자상환액_30년이상 한도계산
if( houseLongtermLoanAmt30Over > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseLongtermLoanAmt30Over = min(houseLongtermLoanAmt30Over , limit15000000)
if ( calculatedSumAmt + calculatedHouseLongtermLoanAmt30Over >= maxLimitAmt )
{
calculatedHouseLongtermLoanAmt30Over = maxLimitAmt - calculatedSumAmt
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = 0
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseLongtermLoanAmt30Over
}
//(2012년 이후 차입분 15년 이상) 고정금리비거치식 상환대출
if( houseFixedInterestRateNonDeferredRepaymentLoan > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = min(houseFixedInterestRateNonDeferredRepaymentLoan , limit15000000)
if ( calculatedSumAmt + calculatedHouseFixedInterestRateNonDeferredRepaymentLoan >= maxLimitAmt )
{
calculatedHouseFixedInterestRateNonDeferredRepaymentLoan = maxLimitAmt - calculatedSumAmt
calculatedHouseEtcLoan = 0
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseFixedInterestRateNonDeferredRepaymentLoan
}
//(2012년 이후 차입분 15년 이상) 기타대출
if( houseEtcLoan > 0 && calculatedSumAmt < maxLimitAmt ){
calculatedHouseEtcLoan = min (houseEtcLoan , limit5000000)
if ( calculatedSumAmt + calculatedHouseEtcLoan >= maxLimitAmt )
{
calculatedHouseEtcLoan = maxLimitAmt - calculatedHouseEtcLoan
}
calculatedSumAmt = calculatedSumAmt + calculatedHouseEtcLoan
}
return calculatedSumAmt // 주택공제 금액