재무회계

SAP 사용권자산 손상 점검 — IFRS 16·IAS 36, 회수가능액과 손상차손·손상 후 상각액이 장부와 맞는지 결산 전에 다시 계산해 대조한다

손상 징후 자산 선별 · 순공정가치와 사용가치 중 큰 금액 · 사용가치 현금흐름과 리스료 제외 · 손상 후 상각액 · 점검 코드 I01~I05 · 정합성 대사 — 소개 영상과 실제 화면 7종을 싣습니다.

소개 영상0분 48초9개 장면첫 화면 → 점검 필요 건 → 산출·장부 비교 → 사용가치 현금흐름 → 상세 → 유형별 집계 → 대사 결과

도입 포인트 — 이 앱을 사용해야 하는 이유

리스로 들여온 사무실·창고·차량·설비는 장부에 사용권자산으로 남습니다. 그런데 영업소를 닫기로 했거나 창고가 비었거나 사업장을 분리하기로 하면, 이 자산도 일반 자산처럼 손상 징후를 봐야 합니다. 결산 때마다 같은 세 질문이 돌아옵니다. 징후가 있는 자산은 어느 것인가, 회수가능액은 얼마로 잡았나, 그래서 손상차손과 이후 상각액은 장부와 맞나. 이 앱은 세 답을 한 화면에 모아 장부와 나란히 놓습니다.

한 줄 요약 — 징후 판단과 현금흐름 추정은 회사의 몫이고 이 앱은 건드리지 않습니다. 대신 그 입력값으로 계산하면 손상차손과 월 상각액이 얼마여야 하는지를 다시 구해 장부와 견주고, 어긋나면 이유를 코드(I01~I05)로 알려 줍니다.

핵심 포인트 여섯 가지

포인트고객이 얻는 것지금 방식이라면
① 징후 자산만 골라 다시 계산징후가 있는 자산에 대해서만 순공정가치·사용가치·회수가능액을 구하고 손상차손을 산출합니다.자산 목록에서 징후 건을 눈으로 고르고 엑셀로 옮겨 계산합니다.
② 산출값과 장부값을 나란히산출 손상차손과 장부 손상차손, 산출 월 상각액과 장부 월 상각액의 차이가 한 줄에 보입니다.장부 값을 따로 뽑아 붙이고 차이는 사람이 찾습니다.
③ 어긋난 이유를 코드로검사 기록 누락, 리스료 혼입, 회수가능액 선택 오류, 상각 미조정, 징후 없는 손상 인식을 I01~I05 로 가릅니다.“뭔가 다르다”에서 멈추고 원인 추적이 길어집니다.
④ 사용가치 계산 과정이 보임연차별 현금흐름·할인계수·현재가치를 표로 펼쳐 합계의 출처를 설명할 수 있습니다.결과 금액만 남고 과정은 파일 안에 묻힙니다.
⑤ 스스로 검산정합성 대사 7종과 장부 점검 대사 3종의 좌변·우변·차이 건수를 화면에 보입니다.검산이 담당자의 기억에 맡겨집니다.
⑥ 사내망·보안 친화OpenUI5 표준 컨트롤만 쓰고 외부 차트 라이브러리가 없습니다. 서비스는 OData V2 로 분리되어 있습니다.라이브러리 반입 심사부터 거칩니다.

사례로 보는 효과 — 25건 중 9건, 장부 손상차손이 9.4억 많다

가상 리스 계약 25건(건물·부동산 12, 차량 4, 설비·장비 9)과 사용가치 현금흐름 76행으로 돌렸습니다. 산출 손상차손 합계는 34.2억, 장부 손상차손 합계는 43.6억이라 차이가 +9.4억입니다. 점검 필요 9건은 모두 이 자료에 의도적으로 넣은 예외이며, 어떻게 걸리는지를 보여 주기 위한 것입니다.

코드점검 내용건수사례(검증용 샘플)
I01손상 징후가 있는데 손상검사 기록이 없음2징후 자산 R017 — 산출 손상차손 2.85억, 장부는 0
I02사용가치 현금흐름에 리스료 지급이 포함됨2R019 — 장부 사용가치 9.62억, 리스료를 뺀 산출 14.82억
I03회수가능액을 큰 금액이 아닌 값으로 잡음2R021 — 장부는 순공정가치 10.82억, 사용가치 16.25억이 더 큼
I04손상차손은 같은데 월 상각액이 다름2R023 — 장부 월 1,167만원, 손상 후 기준 산출 873만원
I05징후 없음인데 손상차손이 인식됨1R025 — 징후 없음, 장부 손상차손 2,143만원

R019 를 풀어 보면 이렇습니다. 장부금액 17.25억, 순공정가치 10.35억, 리스료 지급을 뺀 현금흐름의 사용가치 14.82억입니다. 회수가능액은 둘 중 큰 14.82억이라 손상차손은 2.43억이어야 하는데, 장부는 리스료가 섞인 현금흐름으로 사용가치를 9.62억으로 낮춰 구한 뒤 순공정가치를 회수가능액으로 잡아 6.90억을 인식했습니다. 합계만 보면 “손상이 났다”로 끝나지만, 구성 요소를 펼치면 이 차이가 리스료 한 줄에서 나왔다는 것이 보입니다.

도입하면 달라지는 것

  • 결산 전 점검 — 징후 자산 선별, 회수가능액 재계산, 장부 대조가 한 화면에서 끝나 엑셀 취합이 줄어듭니다.
  • 감사 대응 — 사용가치의 연차별 현금흐름과 할인계수가 그대로 남아 “이 금액은 어떻게 나왔나”에 바로 답합니다.
  • 손상 후 상각 — 손상차손만 맞추고 상각액을 그대로 두는 실수를 I04 로 잡습니다.
  • 검사 기록 관리 — 징후는 있는데 검사한 기록이 없는 자산이 목록에 남지 않습니다.

이런 회사에 맞습니다

사무실·창고·차량·설비를 다수 리스하고 사용권자산을 자산 서브원장으로 관리하는 회사, 폐쇄·분리·유휴 같은 징후가 생길 때마다 엑셀로 손상 계산을 새로 짜던 재무회계팀, 그리고 손상 입력값(공정가치·할인율·현금흐름)을 통제된 숫자로 남겨야 하는 결산 조직에 맞습니다.

숫자를 믿을 수 있는가 — 검증 결과

점검 도구에서 가장 비싼 질문은 “이 계산 맞아?” 입니다. 그래서 대사식을 먼저 세우고 샘플 데이터 전체에 돌렸습니다. 앞쪽 일곱 가지는 앱 안의 계산이 서로 맞는지를 보는 정합성 대사, 뒤쪽 세 가지는 장부와 견주는 장부 점검 대사입니다. 두 묶음은 건수를 따로 셉니다.

대사식검사 건수차이 건수최대 차이
01 장부금액 = 취득원가 − 상각누계액 − 손상누계액2500
02 순공정가치 = 공정가치 − 처분부대원가1500
03 사용가치 = Σ 연차별 현금흐름 × 할인계수1500
04 회수가능액 = 순공정가치와 사용가치 중 큰 금액1500
05 손상차손 = 장부금액 − 회수가능액(0 미만이면 0)1500
06 유형별 손상차손 합계 = 명세 합계300
07 월 상각액 = (장부금액 − 손상차손) ÷ 잔여 상각개월2500
사용가치 현재가치 = 현금흐름 × 할인계수(6자리) 반올림7600
08 장부 손상차손 = 산출 손상차손257542,911,939
09 장부 월 상각액 = 산출 월 상각액2596,205,419
10 손상 징후 자산 건수 = 손상검사 실시 건수1522

정합성 대사는 모두 차이 0 이고, 08~10 의 차이가 곧 점검 필요 9건에서 나온 숫자입니다. 화면 쪽은 브라우저 자동화로 따로 확인했습니다 — 조회조건마다 요청이 실제로 걸러지는지, 검토 기준일의 날짜 필터가 맞게 먹는지, 서비스 연결이 끊겼을 때 사용자 메시지가 뜨는지를 확인했습니다.

사용 방법

  1. 기준 연월(보고기간말 6자리)을 입력하고 필요하면 자산 유형·손상 징후·산출 회수가능액 기준·검토 기준일·점검 코드·점검 결과로 좁힙니다. 화면을 처음 열면 기본 조건으로 한 번 자동 조회됩니다.
  2. 위쪽 KPI 여섯 가지 — 자산 건수, 점검 필요 건수, 산출·장부 손상차손 합계, 차이, 정합성 대사 차이 건수 — 가 같은 조건으로 다시 계산됩니다.
  3. 사용권자산 명세에서 점검 결과가 ‘점검 필요’인 줄을 찾고, 행을 눌러 장부금액부터 회수가능액·손상차손·월 상각액과 연차별 현금흐름을 한 창에서 봅니다.
  4. 사용가치 현금흐름 탭에서 징후 자산의 연차별 현금흐름·참고용 리스료·할인계수·현재가치를 확인합니다.
  5. 유형별 집계로 건물·차량·설비 단위의 차이를 보고, 대사 결과에서 정합성과 장부 점검이 각각 몇 건 어긋났는지 확인합니다.
  6. 보고 있는 탭은 CSV로 내려받아 검토 자료에 붙이고, 검토 요청용 .pptx 는 이 글 왼쪽의 ‘검토용 자료 다운로드’로 받습니다.

실행 화면

실제 브라우저에서 sap_horizon 테마로 렌더링한 화면 7종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있습니다. 숫자는 모두 같은 검증용 샘플 자료에서 나온 것이라 화면끼리 맞춰 보셔도 됩니다.

처음 연 화면 — 조건·KPI·명세가 한 화면에

처음 연 화면 — 조건·KPI·명세가 한 화면에
처음 연 화면 — 조건·KPI·명세가 한 화면에 — 기준 연월과 조회조건, 요약 KPI 여섯 가지, 사용권자산 명세 표가 한 화면에 보입니다. 조회 버튼은 조건 영역의 오른쪽 끝에 있고 Enter 로도 조회됩니다.

화면을 열자마자 기본 조건으로 한 번 조회하므로 빈 표를 보고 시작하지 않습니다. 기준 연월은 필수라 모든 탭이 같은 보고기간말로 읽히고, 위쪽 KPI 는 지금 걸린 조건으로 다시 계산됩니다. 결산 담당자가 가장 먼저 보는 건 ‘점검 필요 몇 건, 차이 얼마’ 한 줄이기 때문에 표보다 위에 두었습니다.

점검 필요만 보기 — 9건

점검 필요만 보기 — 9건
점검 필요만 보기 — 9건 — 점검 결과를 ‘점검 필요’로 좁힌 모습입니다. 25건 중 9건이 남고 KPI 도 같은 조건으로 다시 계산됩니다.

필터는 서비스에 $filter 로 넘어가고 KPI 도 같은 필터로 다시 읽습니다. 그래서 표와 KPI 가 서로 다른 범위를 말할 일이 없습니다. 점검 코드까지 좁히면 같은 유형의 어긋남만 모아 볼 수 있습니다.

산출과 장부 — 손상차손·월 상각액 비교

산출과 장부 — 손상차손·월 상각액 비교
산출과 장부 — 손상차손·월 상각액 비교 — 표를 오른쪽으로 옮기면 산출 회수가능액 기준, 산출·장부 손상차손, 차이, 월 상각액 비교가 보입니다.

장부와 산출이 다른 칸은 값을 바로 읽을 수 있게 같은 줄에 나란히 두었습니다. 회수가능액 기준은 순공정가치·사용가치·산정 불요(징후 없음) 세 값으로 표시해 I03 이 왜 걸렸는지 눈으로 따라갈 수 있습니다.

사용가치 현금흐름 — 합계의 출처

사용가치 현금흐름 — 합계의 출처
사용가치 현금흐름 — 합계의 출처 — 징후 자산의 연차별 사용 현금흐름, 참고용 리스료 지급, 할인계수, 현재가치를 봅니다.

사용가치는 ‘현금흐름 × 할인계수’의 합이라, 어느 해의 어느 숫자가 들어갔는지 펼쳐 두지 않으면 설명할 수 없습니다. 리스료 지급은 참고용 열로 따로 보여 주되 합계에는 넣지 않습니다. 현재가치는 원 단위로 반올림해 대사식이 1원도 어긋나지 않도록 했습니다.

유형별 집계 — 건물·차량·설비

유형별 집계 — 건물·차량·설비
유형별 집계 — 건물·차량·설비 — 건물·차량·설비로 묶은 장부금액, 회수가능액, 산출·장부 손상차손, 점검 필요 건수입니다.

합계를 유형으로 묶어 보면 차이가 어디에 몰려 있는지가 보입니다. 이 자료에서는 건물에서 +7.3억, 설비에서 +2.2억이 나고 차량은 차이가 없습니다. 유형별 합계는 명세 합계와 같아야 해서 대사 06 으로 매번 확인합니다.

대사 결과 — 정합성과 장부 점검 분리

대사 결과 — 정합성과 장부 점검 분리
대사 결과 — 정합성과 장부 점검 분리 — 정합성 대사 7종과 장부 점검 대사 3종의 좌변·우변·차이 건수를 보입니다.

‘계산이 맞는가’와 ‘장부가 맞는가’를 한 숫자로 섞으면 어느 쪽 문제인지 알 수 없어서 건수를 따로 셉니다. 앞 묶음이 0 이어야 뒤 묶음의 차이를 믿고 읽을 수 있습니다.

자산 상세 — 한 건을 끝까지

자산 상세 — 한 건을 끝까지
자산 상세 — 한 건을 끝까지 — 자산 행을 누르면 열리는 상세입니다. 장부금액부터 순공정가치·사용가치·회수가능액·손상차손·월 상각액과 연차별 현금흐름을 함께 봅니다.

감사인이 묻는 순서대로 위에서 아래로 읽히게 두었습니다. 장부금액에서 시작해 어느 쪽 값이 회수가능액이 되었는지, 손상차손은 얼마인지, 손상 후 월 상각액은 얼마인지를 같은 창에서 확인합니다.

화면 뒤에서 일어나는 일

여기부터는 목차에 올리지 않은 상세입니다. 화면이 어떤 규칙으로 판정하고 계산하는지를 적었습니다.

점검 코드 — 위에서 아래로 먼저 걸리는 하나

코드판정 조건상태사용자 조치
I00산출값과 장부값이 모두 일치정상조치 없음
I01손상 징후가 있는데 손상검사 기록이 없음점검 필요징후 판단 근거와 검사 수행 여부 확인
I02장부 사용가치를 구한 현금흐름에 리스료 지급이 포함됨점검 필요리스료는 리스부채로 이미 인식한 재무활동 흐름이므로 사용가치 현금흐름에서 제외했는지 확인
I03손상차손이 다른데 위 사유가 아님점검 필요순공정가치와 사용가치 중 큰 금액을 썼는지 확인
I04손상차손은 같은데 월 상각액이 다름점검 필요손상 후 장부금액을 잔여 기간에 나눠 상각 기준을 바꿨는지 확인
I05징후 없음으로 판단했는데 손상차손이 인식됨점검 필요징후 판단 기록 또는 손상차손 인식 근거 확인

화면은 ‘오류’나 ‘위반’으로 단정하지 않고 점검 필요로만 표시합니다. 판단은 회사와 감사인이 하고, 이 화면은 어디를 다시 보라는 신호만 줍니다.

산출 순서

  1. 장부금액(손상 전) = 취득원가 − 상각누계액 − 손상누계액(전기말)
  2. 순공정가치 = 공정가치 − 처분부대원가 (징후 자산만)
  3. 사용가치 = Σ(연차별 사용 현금흐름 × 할인계수). 할인계수는 1 ÷ (1 + 세전 할인율)연차 을 소수 여섯 자리로 둔 값이고 현재가치는 원 단위로 반올림합니다. 리스료 지급은 넣지 않습니다.
  4. 회수가능액 = 순공정가치와 사용가치 중 큰 금액 (같으면 사용가치)
  5. 손상차손 = 장부금액 − 회수가능액, 0 미만이면 0. 징후가 없는 자산은 0
  6. 손상 후 월 상각액 = (장부금액 − 손상차손) ÷ 잔여 상각개월, 원 단위 반올림

조회조건과 $filter 대응

조회조건프로퍼티연산필수비고
기준 연월Periodeq필수모든 탭 공통
자산 유형AssetClasseq선택건물·부동산 / 차량 / 설비·장비
손상 징후IndYneq선택예 / 아니오
산출 회수가능액 기준RecBasisExpeq선택순공정가치 / 사용가치 / 산정 불요
검토 기준일 시작·종료ReviewDatege · le · BT선택둘 다 있으면 BT 하나, 날짜 리터럴은 datetime
점검 코드CheckCodeeq선택I00~I05
점검 결과CheckStatuseq선택정상 / 점검 필요

현금흐름·유형별 집계·대사 결과 탭은 기준 연월만 조건으로 걸립니다. 정렬은 컬럼 머리글이 $orderby 로, 총건수는 $inlinecount 로 전달됩니다.

파일 구성

구분내용
앱 본체Component · manifest · 화면(view) · 컨트롤러 · 포매터 · 오류 처리기 · 스타일 · 번역
서비스 계약odata/rouimp_srv/ — 메타데이터, service.js, 엔티티셋별 json 4개
설명서·영상readme · 소개 영상(48초, 장면 9개)
검증 전용test/ — 검증용 샘플 서버와 데이터. 앱 본체는 참조하지 않습니다

SAP 표준 기능 확장 포인트

이 앱은 SAP 표준을 대체하지 않습니다. 장부를 만드는 일은 표준이 하고, 그 장부가 손상 요구사항과 맞는지 조회·점검하는 자리만 이어 붙이는 쪽으로 만들었습니다. 어디까지가 표준이고 어디서부터 이 앱인지를 먼저 적습니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일SAP 표준표준에서 걸리는 자리이 앱이 하는 일
자산별 취득원가·상각누계 확인AW01N · AS03자산 한 건씩 열어 보는 구조라 25건을 한 번에 견주기 어렵습니다자산 값을 한 표에 모아 산출값과 나란히 둡니다
손상차손 전기ABAA(비계획 상각)전기는 하지만 그 금액이 회수가능액에서 나왔는지는 검증하지 않습니다회수가능액을 다시 구해 전기 금액과 견줍니다
상각 실행AFAB손상 후 잔여 기간 상각액이 바뀌었는지는 사람이 확인합니다손상 후 월 상각액을 산출해 I04 로 대조합니다
자산 이력 대사S_ALR_87011963기초·증감·기말은 보이지만 손상 요구사항 관점의 점검은 없습니다같은 장부금액을 대사 01 로 맞춰 봅니다
사용가치 계산—표준에 없습니다. 보통 엑셀로 만듭니다연차별 현금흐름·할인계수·현재가치를 펼쳐 합계를 검산합니다
손상검사 수행 기록—징후와 검사 수행 여부를 함께 점검하는 표준 화면이 없습니다I01·I05 로 징후와 검사 기록의 어긋남을 잡습니다

T-code 별 연계 지점

운영에 올릴 때 “기존 거래를 없애야 하느냐”는 질문이 꼭 나옵니다. 대부분 없애지 않고 둡니다 — 전기와 감사 대응은 표준 거래가 맡는 편이 안전하고, 이 앱은 그 앞에서 점검만 합니다.

T-code이름연계
AW01N자산 탐색기사용권자산의 취득원가·상각누계·비계획 상각을 자산별로 확인하고 이 화면의 장부금액과 맞춰 봅니다.
AS03자산 마스터 조회자산 유형·상각 개시일·내용연수 등 마스터 정보를 확인합니다. 잔여 상각개월의 기준이 됩니다.
AFAB감가상각 실행손상 후 월 상각액이 전기되는 기간 처리와 맞춰 봅니다.
ABAA비계획 상각 전기손상차손을 비계획 상각으로 전기한 내역을 확인하고 장부 손상차손과 대조합니다.
S_ALR_87011963자산 이력 시트기초·증감·기말 이력을 이 화면의 장부금액과 대사합니다.

리스 계약을 별도 리스 회계 기능으로 관리하는 경우의 전용 거래는 환경에 따라 달라 확인 필요입니다. 이 글은 사용권자산이 자산 서브원장의 자산으로 관리되는 경우를 기준으로 합니다.

기준서 요구사항과 이 앱의 대응

기준서요구사항대응 기능원천 데이터비고
IFRS 16 리스(K-IFRS 제1116호)사용권자산의 손상은 IAS 36 에 따라 판단징후 자산 선별, 손상차손 재계산자산 마스터·자산 값사용권자산을 자산 단위로 확인
IAS 36 자산손상(K-IFRS 제1036호)손상 징후 평가징후 칸과 손상검사 실시 여부 점검(I01·I05)자산 마스터, 회사 판단 기록징후 판단은 회사가 입력
IAS 36회수가능액은 순공정가치와 사용가치 중 큰 금액회수가능액 산출(I03)공정가치 평가 기록, 현금흐름 추정현금창출단위 단위 검사는 확인 필요
IAS 36사용가치 현금흐름에서 재무활동 흐름 제외리스료 지급 제외 여부 점검(I02)리스료 지급 계획, 현금흐름 추정회사 정책·감사인 의견 확인 필요
IAS 36손상 후 상각액은 수정된 장부금액을 잔여 기간에 배분손상차손·월 상각액 비교(I03·I04)자산 값, 상각 영역

확장 포인트 — 운영에서 실제로 손대는 자리

자리손대는 일난이도
평가 기록 원천순공정가치·할인율·연차별 현금흐름을 담을 회사 테이블 또는 평가 도구 연결중 — 입력 책임자 합의가 먼저
징후 판단 필드징후 여부와 검사 수행 여부를 자산 마스터 확장 필드 또는 별도 테이블에 보관중
현금창출단위독립 현금흐름이 없는 자산을 묶는 단위가 있다면 그 키를 점검 단위로 올림상 — 확인 필요
장부 손상차손 원천비계획 상각 누계의 증가분을 기간별로 읽는 방식중 — 환경별 확인 필요
권한회사코드·자산 유형별 조회 권한을 CDS 접근 제어로 부여하

CDS 구성

이 사례의 화면은 검증용 샘플 25건을 OData 서비스에서 받아 그립니다. 운영으로 올릴 때는 그 서비스를 CDS 뷰 위에 세웁니다. 아래는 그때 만드는 뷰를 레이어 순서대로 적은 것입니다.

코드는 스케치입니다. 필드 이름과 표준 뷰 이름은 릴리스·환경에 따라 다르므로 그대로 붙여 넣기 전에 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 확인 필요로 적었습니다.

뷰 레이어 구성

레이어객체하는 일왜 나누나
자산 기준ZI_RouAsset자산 마스터·상각 영역·연도별 값을 한 행으로장부금액 계산을 한 곳에만 둡니다
평가 입력ZI_RouEval공정가치·처분부대원가·할인율·검사 수행 여부회사 입력값과 SAP 자산 값을 분리합니다
현금흐름ZI_RouCf · ZTF_RouDisc연차별 현금흐름에 할인계수를 곱해 현재가치CDS 에는 거듭제곱이 없어 할인계수는 테이블 함수로 뺍니다
회수가능액ZI_RouRec사용가치 합계와 순공정가치 중 큰 금액대사 03·04 가 이 뷰 하나를 봅니다
점검 판정ZC_RouCheck손상차손·상각액 산출과 I00~I05 판정판정 순서를 한 곳에서 정의합니다
권한ZI_ROUASSET (DCL)회사코드·자산 유형 단위 접근 제어집계를 읽는 자리에 걸어야 합계로 새지 않습니다

① 자산 기준 뷰

가장 아래 뷰입니다. 장부금액을 여기서 한 번만 계산하고 위의 모든 뷰가 이 값을 씁니다. S/4HANA 에서 연도별 값 테이블이 호환 뷰인지는 환경마다 달라 확인이 필요합니다.

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '사용권자산 기준'
define view entity ZI_RouAsset
  as select from anla as a
    inner join anlc as c on  c.bukrs = a.bukrs
                         and c.anln1 = a.anln1
                         and c.anln2 = a.anln2
{
  key a.bukrs,
  key a.anln1,
  key a.anln2,
  key c.gjahr,
      a.anlkl                        as AssetClass,   // 자산 분류 → 건물/차량/설비 매핑은 확인 필요
      c.kansw                        as CostAmt,      // 누적 취득원가
      c.knafa                        as AccDep,       // 누적 정상 상각
      c.kaafa                        as AccImp,       // 누적 비계획 상각(전기말 손상)
      c.kansw - c.knafa - c.kaafa    as CarryAmt      // 대사 01
}

② 평가 입력 뷰

공정가치·처분부대원가·할인율·검사 수행 여부는 SAP 표준 필드에 없습니다. 회사가 입력한 평가 기록을 읽는 뷰이고, 누가 언제 입력했는지를 함께 남기는 것을 권합니다.

@EndUserText.label: '손상 평가 입력'
define view entity ZI_RouEval
  as select from zrou_eval
{
  key bukrs, key anln1, key anln2, key gjahr,
      ind_yn      as IndYn,        // 손상 징후 여부 — 회사 판단
      test_yn     as TestYn,       // 손상검사 실시 여부
      fair_val    as FairVal,      // 공정가치
      disp_cost   as DispCost,     // 처분부대원가
      rate        as Rate,         // 세전 할인율(%)
      rem_months  as RemMonths,    // 잔여 상각개월 — 상각 영역에서 산출할지는 확인 필요
      pay_incl_yn as PayInclYn,    // 장부 현금흐름에 리스료 포함 여부
      changed_by  as ChangedBy,
      changed_at  as ChangedAt
}

③ 할인계수 — 테이블 함수

할인계수 1 ÷ (1+r)n 에는 거듭제곱이 필요한데 CDS 뷰에는 그 함수가 없습니다. 그래서 SQLScript 로 구현한 테이블 함수로 뺍니다. 소수 여섯 자리로 자르는 이유는 화면의 반올림 규칙과 맞추기 위해서입니다.

define table function ZTF_RouDisc
  with parameters p_clnt : abap.clnt
  returns {
    mandt : abap.clnt; bukrs : bukrs; anln1 : anln1; anln2 : anln2;
    year_no : abap.int1; disc : abap.dec(9,6);
  }
  implemented by method zcl_rou_disc=>get;

" AMDP 구현 스케치
METHOD get BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT
  OPTIONS READ-ONLY USING zrou_cf zrou_eval.
  RETURN SELECT cf.mandt, cf.bukrs, cf.anln1, cf.anln2, cf.year_no,
         ROUND( 1 / POWER( 1 + ev.rate / 100, cf.year_no ), 6 ) AS disc
         FROM zrou_cf AS cf
         INNER JOIN zrou_eval AS ev
            ON ev.bukrs = cf.bukrs AND ev.anln1 = cf.anln1 AND ev.anln2 = cf.anln2
         WHERE cf.mandt = :p_clnt;
ENDMETHOD.

④ 현금흐름·현재가치 뷰

현금흐름에 할인계수를 곱해 현재가치를 만듭니다. 리스료 지급은 열로만 두고 합계에는 넣지 않습니다. 반올림은 행 단위로 원 단위까지 하고, 합계는 반올림된 행의 합입니다.

define view entity ZI_RouCf
  as select from zrou_cf as cf
    inner join ZTF_RouDisc( p_clnt: $session.client ) as d
      on  d.bukrs = cf.bukrs and d.anln1 = cf.anln1
      and d.anln2 = cf.anln2 and d.year_no = cf.year_no
{
  key cf.bukrs, key cf.anln1, key cf.anln2, key cf.year_no,
      cf.op_cash                                  as OpCash,     // 사용 현금흐름(리스료 제외)
      cf.lease_pay                                as LeasePay,   // 참고용 — 합계에 넣지 않음
      d.disc                                      as DiscFactor,
      cast( round( cf.op_cash * d.disc, 0 ) as abap.dec(18,0) ) as PvAmt
}

⑤ 회수가능액 뷰

순공정가치와 사용가치 중 큰 금액을 고릅니다. 같으면 사용가치로 표시합니다. 징후가 없는 자산은 이 뷰에서 값을 만들지 않습니다.

define view entity ZI_RouRec
  as select from ZI_RouAsset as a
    inner join ZI_RouEval as e on e.bukrs = a.bukrs and e.anln1 = a.anln1
                              and e.anln2 = a.anln2 and e.gjahr = a.gjahr
    left outer join ( select from ZI_RouCf
                      { key bukrs, key anln1, key anln2,
                        sum( PvAmt ) as ViuAmt }
                      group by bukrs, anln1, anln2 ) as v
      on v.bukrs = a.bukrs and v.anln1 = a.anln1 and v.anln2 = a.anln2
{
  key a.bukrs, key a.anln1, key a.anln2, key a.gjahr,
      a.CarryAmt,
      e.FairVal - e.DispCost                               as FvlcdAmt, // 대사 02
      v.ViuAmt,                                                          // 대사 03
      case when ( e.FairVal - e.DispCost ) > v.ViuAmt
           then ( e.FairVal - e.DispCost ) else v.ViuAmt end as RecAmt,  // 대사 04
      e.IndYn, e.TestYn, e.RemMonths
}
where e.IndYn = 'Y'   // 징후 자산만. 징후 없는 자산 합류 방식은 확인 필요

⑥ 점검 판정 쿼리

손상차손과 손상 후 월 상각액을 산출하고 I00~I05 를 위에서 아래 순서로 먼저 걸리는 하나만 붙입니다. 장부 손상차손의 원천(비계획 상각 증가분)은 환경별로 달라 확인 필요입니다.

define view entity ZC_RouCheck
  as select from ZI_RouRec as r
{
  key r.bukrs, key r.anln1, key r.anln2, key r.gjahr,
      r.CarryAmt,
      r.RecAmt,
      case when r.CarryAmt > r.RecAmt
           then r.CarryAmt - r.RecAmt else 0 end                       as ImpExp,   // 대사 05
      division( r.CarryAmt - case when r.CarryAmt > r.RecAmt
           then r.CarryAmt - r.RecAmt else 0 end, r.RemMonths, 0 )    as DepExp,   // 대사 07
      case
        when r.IndYn = 'Y' and r.TestYn = 'N'        then 'I01'
        // I02: 장부 현금흐름에 리스료 포함 — 평가 입력의 PayInclYn 과 장부 사용가치 비교
        // I03: 손상차손 불일치(위 사유 아님)
        // I04: 손상차손 일치, 월 상각액 불일치
        // I05: 징후 없음인데 장부 손상차손 > 0  (징후 없는 자산 합류 후 판정)
        else 'I00'
      end                                                              as CheckCode
}

⑦ 접근 제어(DCL)

손상 점검 결과는 회사코드별로 담당이 갈립니다. 집계를 읽는 뷰에도 접근 제어를 걸어야 합계로 다른 회사 숫자가 새지 않습니다.

@EndUserText.label: '사용권자산 접근 제어'
@MappingRole: true
define role ZI_ROUASSET {
  grant select on ZI_RouAsset
    where ( bukrs ) = aspect pfcg_auth( F_ANLA_BUK, BUKRS, ACTVT = '03' );
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다. 아래 표의 왼쪽은 대부분 코딩이 아니라 합의입니다.

해야 할 일무엇을 정하나정하지 않으면누가
평가 기록 원천 확정순공정가치·할인율·현금흐름을 누가 어디에 입력하는지입력값이 파일로 돌아다니고 점검 대상이 매번 달라집니다재무회계팀·평가 담당
징후 판단 기록징후 여부와 검사 수행 여부를 어느 필드에 남길지I01·I05 를 판정할 수 없습니다재무회계팀
현금창출단위 범위자산 단위로 충분한지, 단위 구성이 따로 있는지일부 자산의 손상검사 단위가 어긋납니다재무회계팀·감사인 협의
리스료 처리 기준사용가치 현금흐름에서 리스료를 제외하는 기준과 예외I02 가 회사 정책과 어긋나게 울립니다재무회계팀·감사인 협의
잔여 상각개월 원천상각 영역에서 계산할지 입력할지I04 비교 기준이 모호해집니다자산회계 담당
장부 손상차손 원천비계획 상각 누계의 증가분을 읽는 방식장부 손상차손이 환경마다 다르게 잡힙니다자산회계 담당·개발
권한 설계회사코드·자산 유형 중 무엇으로 자를지다른 회사 자산 정보가 노출됩니다권한 담당·보안
조회 주기결산 며칠 전부터 돌리는지, 분기 중간에도 보는지결산 막바지에 처음 열어 보게 됩니다재무회계팀
전송(TR) 순서테이블 → 기준 뷰 → 테이블 함수 → 판정 뷰 → DCL → 서비스 바인딩이송 중 활성화 오류가 납니다개발

운영 데이터로 갈 때 — 자산이 수만 건이면

이 사례는 자산 25건, 현금흐름 76행입니다. 운영에서는 자산 수가 늘어도 사용가치를 다시 구하는 대상은 징후 자산뿐입니다. 대부분의 자산은 징후가 없으므로 계산량은 전체 자산 수가 아니라 징후 자산 수를 따라갑니다.

구간어떻게 되나무엇을 손보나
자산 수백 건지금 방식 그대로 — 한 번에 받아 화면에서 묶어도 걸리지 않습니다손볼 것 없음
자산 수천 건표 렌더링과 KPI 계산이 눈에 띄게 늘어납니다KPI 를 서비스에서 집계해 내려받고 표는 페이징으로 바꿉니다
자산 수만 건한 번에 받으면 응답이 커집니다$top·$skip 으로 나누고 건수는 $inlinecount 로 받습니다
현금흐름 수십만 행연차별 행을 모두 내려받을 수 없습니다현금흐름 탭은 자산을 고른 뒤에만 읽습니다

한 가지 더. 검토 기준일처럼 날짜 조건은 서비스 쪽에서 실제로 걸러야 합니다. 이 앱의 샘플 서비스는 날짜 $filter 를 직접 처리하도록 만들었고, 운영 서비스에서도 같은 조건을 CDS 쪽 where 로 내려야 화면이 받는 행 수가 줄어듭니다.

자주 묻는 질문

도입 상담과 검토 자리에서 자주 나오는 질문을 네 묶음으로 정리했습니다.

숫자와 산식

회수가능액은 어떻게 정합니까?

순공정가치와 사용가치 중 큰 금액입니다. 순공정가치는 공정가치에서 처분부대원가를 뺀 값이고, 사용가치는 연차별 현금흐름에 할인계수를 곱해 더한 값입니다. 이 앱은 두 값을 모두 구한 뒤 큰 쪽을 고르고, 같으면 사용가치로 표시합니다.

모든 자산의 회수가능액을 구합니까?

아닙니다. 손상 징후가 있는 자산만 구합니다. 징후가 없으면 회수가능액 기준은 ‘산정 불요’로 표시되고 손상차손은 0 입니다. 징후 판단 자체는 회사가 입력한 값을 그대로 씁니다.

사용가치에서 리스료 지급을 빼는 이유는 무엇입니까?

리스료 지급은 이미 리스부채로 인식한 재무활동 성격의 현금흐름이기 때문에, 사용권자산을 쓰며 생기는 영업 현금흐름에는 넣지 않는 것으로 점검합니다. 다만 리스부채를 함께 비교하는 방식을 쓰는 회사도 있으므로 회사 정책과 감사인 의견을 따라 확인해야 합니다. 이 앱은 기준을 단정하지 않고 I02 로 ‘혼입 여부’만 알려 줍니다.

할인계수는 어떻게 계산합니까?

1 ÷ (1 + 세전 할인율)연차 를 소수 여섯 자리로 둔 값입니다. 현재가치는 현금흐름에 할인계수를 곱해 원 단위로 반올림합니다. 행마다 반올림하고 합계는 반올림된 행의 합이라, 화면의 합계와 대사식이 1원도 어긋나지 않습니다.

손상차손은 어떻게 계산합니까?

장부금액에서 회수가능액을 뺀 값이고 0 미만이면 0 입니다. 장부금액은 취득원가에서 상각누계액과 손상누계액(전기말)을 뺀 값입니다.

손상 후 월 상각액은 어떻게 구합니까?

손상 후 장부금액, 즉 장부금액에서 손상차손을 뺀 값을 잔여 상각개월로 나눕니다. 손상차손을 인식하고도 상각액을 예전 그대로 두면 장부 월 상각액이 산출보다 커져 I04 로 걸립니다.

검증용 샘플에서 차이가 +9.4억인 이유는 무엇입니까?

장부 손상차손 합계가 산출보다 많기 때문입니다. 건물에서 +7.3억, 설비에서 +2.2억이 나고 차량은 차이가 없습니다. 이 숫자는 샘플에 의도적으로 넣은 예외 9건에서 나온 것이며 실제 고객사의 금액이 아닙니다.

화면과 조작

점검 필요로 나온 자산은 오류입니까?

아닙니다. 이 화면은 분류·집계·대조를 돕는 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 점검 필요는 장부 근거를 다시 확인하라는 뜻입니다.

점검 코드가 여러 개 해당하면 어떻게 나옵니까?

I01 → I02 → I03 → I04 → I05 순서로 보고 먼저 걸리는 하나만 붙입니다. 하나를 해결한 뒤 다시 조회하면 다음 사유가 드러날 수 있습니다.

조회조건은 어떻게 서비스에 전달됩니까?

각 조건이 sap.ui.model.Filter 로 만들어져 $filter 로 전달됩니다. 검토 기준일의 시작·종료가 둘 다 있으면 BT 하나로 묶습니다. ‘전체’를 고르면 그 조건은 만들지 않습니다.

탭마다 조건이 다릅니까?

사용권자산 명세만 모든 조건을 받고, 사용가치 현금흐름·유형별 집계·대사 결과 탭은 기준 연월만 받습니다. 대사 결과를 조건과 상관없이 같은 기준으로 보기 위해서입니다.

CSV 로 내려받을 수 있습니까?

네. 지금 보고 있는 탭의 조회 결과를 UTF-8 BOM CSV 로 내려받습니다. 엑셀에서 한글이 깨지지 않도록 BOM 을 붙였습니다.

서비스가 응답하지 않으면 어떻게 됩니까?

오류 처리기가 메타데이터 로드 실패, 요청 실패, 빈 응답을 구분해 사용자 메시지로 안내합니다. 샘플 데이터로 조용히 대체하지 않습니다.

기준서와 범위

이 화면의 적용 시기와 범위는 어떻게 됩니까?

IFRS 16 과 IAS 36 은 이미 적용 중인 기준서이며 이 화면은 신규 시행 대응이 아니라 기존 요구사항의 점검입니다. 개정 시행일이나 경과규정은 다루지 않으며 원문 확인 후 판단해야 합니다.

여러 자산이 함께 현금을 만들 때도 됩니까?

이 화면은 자산 단위로 단순화했습니다. 자산이 독립적인 현금흐름을 만들지 못하면 현금창출단위 기준으로 손상검사를 해야 하며, 그 경우 입력값 구성은 확인 필요입니다.

영업권이나 공통자산 배분도 다룹니까?

다루지 않습니다. 사용권자산 단독 점검에 한정했습니다. 공통자산이나 영업권이 걸린 단위의 손상검사는 별도 판단이 필요합니다.

손상차손환입은 점검합니까?

이 버전은 손상 인식과 손상 후 상각만 봅니다. 환입 요건과 한도 계산은 포함하지 않았으며 필요하면 확장 대상입니다.

감사인에게 어떤 자료를 줄 수 있습니까?

자산별 상세(장부금액부터 회수가능액·손상차손·월 상각액), 연차별 현금흐름과 할인계수·현재가치, 대사 결과 표입니다. 모두 CSV 로 내려받을 수 있습니다. 징후 판단과 현금흐름 추정의 근거 문서는 별도로 갖춰야 합니다.

도입과 운영

SAP 표준 화면만으로는 안 됩니까?

자산 값 확인과 손상차손 전기는 표준 거래로 됩니다. 다만 회수가능액을 다시 구해 전기 금액과 견주는 일, 손상검사 기록의 누락을 찾는 일은 표준에 없어 보통 엑셀로 합니다. 이 앱은 그 엑셀 단계를 대체합니다.

입력값(공정가치·할인율·현금흐름)은 어디서 가져옵니까?

SAP 표준 필드에 없는 값이라 회사가 입력한 평가 기록이 원천입니다. 이 사례에서는 검증용 샘플이고, 운영에서는 평가 기록을 담을 테이블 또는 평가 도구 연결이 필요합니다. 원천 위치는 확인 필요입니다.

유지보수는 무엇을 하게 됩니까?

정기적으로 손이 가는 곳은 평가 입력값과 징후 기록입니다. 판정 로직은 코드 여섯 개를 한 곳에서 정의해 두어 기준서 해석이 바뀌어도 한 곳만 고칩니다.

S/4HANA 와 ECC 모두 됩니까?

원천 테이블 구성이 다릅니다. S/4HANA 에서는 연도별 값 테이블이 호환 뷰일 수 있어 비계획 상각 누계를 읽는 방식을 확인해야 합니다. ECC 는 테이블을 직접 읽는 방식이 됩니다. 어느 쪽이든 서비스 계약(엔티티셋 4개)은 같아 화면은 바뀌지 않습니다.

숫자가 기존 엑셀과 다르면 어떻게 확인합니까?

순서가 있습니다. ① 기준 연월과 자산 범위가 같은지, ② 징후 여부 입력이 같은지, ③ 사용가치에 리스료가 들어갔는지, ④ 할인계수 자릿수와 반올림 방식이 같은지 봅니다. 대부분 ③과 ④에서 갈립니다.

데모는 어디서 볼 수 있습니까?

왼쪽 ‘데모 열기’로 열 수 있습니다. 로그인이 필요한 환경이면 문의하기로 요청해 주세요. 샘플 데이터로 동작합니다.