부과예고의 계산방법 및 함수 정리중...

javascript 계산 위험도 발생.. 백엔드로 처리 예정...
dev
박성영 3 months ago
parent 2c572ae316
commit d36859da50

@ -4,6 +4,87 @@
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>
<!--
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■ 부과예고 이행강제금 산출조사서 계산 로직 상세 명세서 (VO 컬럼명 기준)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
1. 건축물과세시가(bdstTxtnMprc) 계산
- 공식: bldgCrtrMprcAmt × strctIdx × usgIdx × pstnIdx × elpsYrRdvlrt × bscsCstrnRt
- 설명: 건물신축가격기준액 × 구조지수 × 용도지수 × 위치지수 × 경과년수별잔가율 × 기초공사율
- 반올림: 소수점 없이 반올림 (RoundingMode.HALF_UP)
- 처리위치: CrdnLevyPrvntcController.calculateTaxableMarketPrice()
2. 시가표준액(mprcStdAmt) 계산
- 공식: Math.floor(bdstTxtnMprc / 1000) × 1000
- 설명: 건축물과세시가에서 1,000원 미만 절사
- 처리위치: JavaScript calculateAuto()
3. 가감산시행령률(adsbmtnEnfcRt) 계산
- 기본값: 100%
- 가산 적용 시: 100 + adtnRt (가산율)
- 감산 적용 시: 100 - sbtrRt (감산율)
- 가감산율 범위: 0 ≤ rate ≤ 100
- 처리위치: JavaScript 팝업을 통한 수동 설정
4. 산정률(cmpttnRt) / 산정률 비율값(cmpttnRtRate)
- 표시용 값(cmpttnRt): 행위유형별 고정값 (예: 40.00%)
- 계산용 값(cmpttnRtRate): 소수점 비율 (예: 0.40)
- 변환: cmpttnRtRate = cmpttnRt ÷ 100
- 데이터 출처: 행위정보에서 자동 설정
5. 산정률2(cmpttnRt2) / 산정률2 비율값(cmpttnRt2Rate)
- 표시용 값(cmpttnRt2): 위반사항별 값 (예: 50.00%)
- 계산용 값(cmpttnRt2Rate): 소수점 비율 (예: 0.50)
- 변환: cmpttnRt2Rate = cmpttnRt2 ÷ 100
- 선택: 담당자가 드롭다운에서 선택
6. 산정액(cmpttnAmt) 계산
- 공식: Math.floor(mprcStdAmt × vltnArea × (adsbmtnEnfcRt ÷ 100) × cmpttnRtRate × cmpttnRt2Rate)
- 설명: 시가표준액 × 위반면적 × 가감산시행령률(%) × 산정률(비율) × 산정률2(비율)
- 반올림: 소수점 버림 (Math.floor)
- 처리위치: JavaScript calculateLevyAmount()
7. 부과총액(levyWholAmt) 계산
- 공식: Math.floor(cmpttnAmt ÷ 10) × 10
- 설명: 산정액에서 1의 자리 절사 (10원 단위 버림)
- 예시: 1,234,567원 → 1,234,560원
- 처리위치: JavaScript calculateLevyAmount()
8. 이행강제금(impltCpsrAmt) 계산
- 공식: SUM(levyWholAmt) WHERE crdnYr = ? AND crdnNo = ? AND impltTaskSeCd = ?
- 설명: 해당 단속의 모든 행위정보별 부과총액 합계
- 조건: 모든 행위정보에 대한 부과정보가 등록된 경우에만 계산
- 처리위치: CrdnLevyPrvntcServiceImpl.updateImpltCpsrAmt()
■ 주요 VO 컬럼 설명
- bldgCrtrMprcAmt: 건물신축가격기준액 (BigDecimal)
- strctIdx: 구조지수 (BigDecimal)
- usgIdx: 용도지수 (BigDecimal)
- pstnIdx: 위치지수 (BigDecimal)
- elpsYrRdvlrt: 경과년수별잔가율 (BigDecimal)
- bscsCstrnRt: 기초공사율 (BigDecimal)
- bdstTxtnMprc: 건축물과세시가 (BigDecimal)
- mprcStdAmt: 시가표준액 (BigDecimal)
- vltnArea: 위반면적 (BigDecimal)
- adsbmtnEnfcRt: 가감산시행령률 (BigDecimal)
- cmpttnRt: 산정률 (BigDecimal)
- cmpttnRt2: 산정률2 (BigDecimal)
- cmpttnRtRate: 산정률 비율값 (BigDecimal)
- cmpttnRt2Rate: 산정률2 비율값 (BigDecimal)
- cmpttnAmt: 산정액 (BigDecimal)
- levyWholAmt: 부과총액 (BigDecimal)
- impltCpsrAmt: 이행강제금 (BigDecimal)
■ 계산 처리 흐름
1단계: 서버 API로 건축물과세시가 계산 (CrdnLevyPrvntcController)
2단계: JavaScript로 시가표준액 자동 설정 (calculateAuto)
3단계: JavaScript로 산정액/부과총액 계산 (calculateLevyAmount)
4단계: 서버에서 모든 행위별 부과총액 합산하여 이행강제금 계산 (Service Layer)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
-->
<!-- 부과예고 관리 팝업 -->
<div class="popup_wrap">
<div class="popup_inner">
@ -272,17 +353,36 @@
(function(window, $) {
'use strict';
/**
* 부과예고 이행강제금 산출조사서 팝업 관리 네임스페이스
* 중요로직: 부과예고 관련 행위정보 목록 조회, 이행강제금 산출 및 저장 기능을 제공합니다.
*/
var LevyPrvntcPopup = {
// 팝업 모드 및 기본 정보
// ========================================
// 1. 기본 속성 및 상태 관리
// ========================================
/**
* 팝업 모드 및 기본 정보
*/
mode: '${mode}',
crdnYr: '${crdnYr}',
crdnNo: '${crdnNo}',
impltTaskSeCd: '${impltTaskSeCd}',
impltTaskSeCdNm: '${impltTaskSeCdNm}',
/**
* 선택된 데이터 관리
*/
levyInfoIdSelect: null,
actInfoIdSelect: null,
isAllLevyInfoCompleted: false,
// ========================================
// 2. 그리드 관리 객체
// ========================================
/**
* 그리드 관련 객체
*/
@ -294,6 +394,7 @@
/**
* 그리드 설정 초기화
* 중요로직: TOAST UI Grid 초기화를 위한 컬럼, 데이터소스, 페이징 등 전체 설정을 구성합니다.
* @returns {Object} 그리드 설정 객체
*/
initConfig: function() {
@ -318,6 +419,7 @@
/**
* 그리드 컬럼 정의
* 중요로직: 부과예고 행위정보 그리드의 컬럼 구조를 정의합니다. 이행강제금산출 여부, 행위정보, 위치정보, 산정률 등을 표시합니다.
* @returns {Array} 그리드 컬럼 배열
*/
getGridColumns: function() {
@ -384,6 +486,7 @@
/**
* 데이터 소스 생성
* 중요로직: 그리드 데이터 로딩을 위한 AJAX 설정 및 파라미터 직렬화 로직을 구성합니다.
* @returns {Object} 데이터 소스 설정 객체
*/
createDataSource: function() {
@ -747,8 +850,13 @@
},
// ========================================
// 3. 초기화 및 이벤트 관리
// ========================================
/**
* 초기화
* 팝업 초기화
* 중요로직: 그리드 생성, 이벤트 바인딩, 탭 설정 등 팝업의 전체 초기화를 수행합니다.
*/
init: function() {
// 그리드 생성
@ -760,7 +868,8 @@
},
/**
* 이벤트 초기화
* 이벤트 바인딩
* 중요로직: 버튼 클릭, 탭 전환, 폼 필드 변경 등 모든 UI 이벤트를 바인딩합니다.
*/
eventBindEvents: function() {
var self = this;
@ -866,9 +975,13 @@
$(document).on('change', calculationInputs, calculateAuto);
},
// ========================================
// 4. 탭 및 팝업 관리
// ========================================
/**
* 팝업 취소 처리
* 중요한 로직 주석: 팝업창을 닫는 기능을 제공합니다.
* 중요로직: 팝업창을 닫는 기능을 제공합니다.
*/
cancel: function () {
window.close();
@ -876,6 +989,7 @@
/**
* 탭 전환 처리
* 중요로직: 이행강제금 산출조사서와 이행정보 탭 간 전환을 처리하며, 완료 상태에 따라 접근을 제어합니다.
* @param {string} tabType - 전환할 탭 타입 ('levy' 또는 'implt')
*/
switchTab: function(tabType) {
@ -916,6 +1030,11 @@
}
},
/**
* 가감산 팝업 열기
* 중요로직: 가산 또는 감산 설정을 위한 팝업을 열어 관련 정보를 설정합니다.
* @param {string} type - 가감산 타입 ('add' 또는 'minus')
*/
openAddMinusPopup: function (type) {
var adsbmtnRtCd = "";
if( type === '1' ){
@ -932,9 +1051,13 @@
openPopup(url, 800, 700, 'LevyAddMinusPopup');
},
// ========================================
// 5. 데이터 처리 (CRUD)
// ========================================
/**
* 저장
* 중요한 로직 주석: 폼 데이터와 그리드에서 선택된 이행 대상자 정보를 수집하여 저장 요청을 보냅니다.
* 부과정보 저장
* 중요로직: 폼 데이터와 그리드에서 선택된 행위정보를 수집하여 부과정보 저장 요청을 처리합니다.
*/
save: function() {
var self = this;
@ -967,7 +1090,8 @@
/**
* 폼 데이터 수집
* 중요한 로직 주석: 부과예고 등록/수정에 필요한 폼 데이터를 수집합니다.
* 중요로직: 부과예고 등록/수정에 필요한 모든 폼 데이터를 수집하여 객체로 반환합니다.
* @returns {Object} 수집된 폼 데이터 객체
*/
collectFormData: function() {
return {
@ -1012,6 +1136,8 @@
/**
* 폼 유효성 검증
* 중요로직: 필수 입력 필드 및 데이터 유효성을 검증하여 저장 가능 여부를 판단합니다.
* @returns {boolean} 유효성 검증 결과
*/
validateForm: function() {
// 필수 필드 검증
@ -1043,8 +1169,8 @@
},
/**
* 저장
* 중요한 로직 주석: 폼 데이터와 그리드에서 선택된 이행 대상자 정보를 수집하여 저장 요청을 보냅니다.
* 부과정보 삭제
* 중요로직: 선택된 부과정보를 삭제하고 관련 데이터를 초기화합니다.
*/
del: function() {
var self = this;
@ -1075,11 +1201,16 @@
};
// ========================================
// 6. 계산 관련 유틸리티 함수들
// ========================================
/**
* 중요로직: 이행강제금 산정액 및 부과총액 자동 계산
* @description 시가표준액, 위반면적, 가감산시행령률, 산정률, 산정률2가 모두 입력되었을 때 산정액과 부과총액을 자동으로 계산합니다.
* - 산정액 = 시가표준액 * 위반면적 * (가감산시행령률 / 100) * 산정률(비율) * 산정률2(비율)
* - 부과총액 = 산정액의 1의 자리 절사 (10원 단위 버림)
* 이행강제금 산정액 및 부과총액 계산
* 중요로직: 시가표준액, 위반면적, 가감산시행령률, 산정률, 산정률2가 모두 입력되었을 때 산정액과 부과총액을 자동으로 계산합니다.
* @description
* - 산정액 = 시가표준액 * 위반면적 * (가감산시행령률 / 100) * 산정률(비율) * 산정률2(비율)
* - 부과총액 = 산정액의 1의 자리 절사 (10원 단위 버림)
*/
function calculateLevyAmount() {
var standardMarketPrice = parseFloat($('#standardMarketPrice_top').inputmask('unmaskedvalue')) || 0;
@ -1118,10 +1249,11 @@
}
/**
* 자동 계산 (서버 API 호출)
* @description 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다.
* - 건축물과세시가 = 서버 API를 통해 계산
* - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사
* 건축물과세시가 자동 계산 (서버 API 호출)
* 중요로직: 각 항목의 값을 서버로 보내 건축물과세시가를 계산하고, 그 결과를 받아 시가표준액을 계산합니다.
* @description
* - 건축물과세시가 = 서버 API를 통해 계산
* - 시가표준액 = 건축물과세시가에서 1,000원 미만 절사
*/
function calculateAuto() {
var bldgNewPrcCrtrAmt = $('#bldgNewPrcCrtrAmt').inputmask('unmaskedvalue') || '0'; // 건물기준시가액
@ -1206,7 +1338,14 @@
}
};
// 초기화 실행
// ========================================
// 7. 초기화 실행
// ========================================
/**
* DOM Ready 이벤트
* 중요로직: 페이지 로드 완료 후 LevyPrvntcPopup 객체를 초기화합니다.
*/
$(document).ready(function() {
LevyPrvntcPopup.init();
});

Loading…
Cancel
Save