대손 경험률(Roll-rate) 통합 관리 — 매출채권 연령 이동 행렬에서 경험 손실률 · 충당금 설정 전표 · 대손 제각 · 대사 · 사후 검증까지 한 앱에서
연령 구간 전이 행렬(열지도) · 사슬 곱 경험 손실률 · 관찰 기간 · 미래전망 가정 바꿔 보기 · 경험률 확정 → 충당금 설정 전표 → 대손 제각 월말 일괄 실행 · 1억 원 이상 2인 승인과 직무 분리 · 대사 7규칙과 예외 조치 · 칸에서 송장까지 드릴스루 · 충당금 차이 요인분해 · 예측 대비 실제 제각 사후 검증 — 소개 영상과 실제 화면 38종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
결산 때 대손충당금을 맡은 담당자가 가장 자주 받는 질문은 세 가지입니다. 이 손실률은 어디서 나왔나, 지난 분기와 충당금이 왜 이만큼 달라졌나, 작년에 잡은 충당금이 실제 대손과 얼마나 맞았나. 지금은 연령 분석 보고서를 내려받아 엑셀에서 구간별 이동을 손으로 이어 붙이고, 손실률을 계산해 전표를 따로 입력하며, 감사 때마다 같은 표를 다시 만듭니다.
이 앱은 그 흐름을 한 화면에 잇습니다. 송장 라인마다 다음 달 이월 · 회수 · 제각을 붙인 월말 연령 스냅샷에서 Roll-rate 와 사슬 곱 경험 손실률이 계산되고, 그 결과가 확정 스냅샷 → 충당금 설정 전표 → 승인 → 전기로 이어집니다. 표준 채권 평가와 전기는 SAP 표준 T-code 가 담당하고, 이 화면은 경험률 산정 · 승인 · 대사 · 사후 검증 관점을 더해 확장합니다.
핵심 포인트 아홉 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 연령 이동 행렬과 사슬 손실률 | 이번 달 구간 → 다음 달 구간 전이 비율을 열지도로 보여 주고, 경험 손실률 = Roll-rate × 다음 구간 손실률(B6 = 100%)의 사슬 곱으로 계산합니다. 구간마다 잔액 · 송장 수 · 관찰 개월이 근거로 붙습니다. | 연령 보고서를 매달 내려받아 엑셀에서 구간 이동을 손으로 잇습니다. |
| ② 가정 바꿔 보기 | 관찰 기간 · 미래전망 조정을 바꾸면 저장 없이 다시 계산해 설정값과 비교합니다(예: 12개월 · 25% → 84,575,686원 vs 66,606,075원). 관리자는 채택한 가정을 포트폴리오 설정에 반영합니다. | 가정을 바꿀 때마다 시트 사본을 만들어 비교합니다. |
| ③ 표본 보정과 단조성 점검 | 송장이 30건 미만인 구간은 회사 전체 Roll-rate 와 표본 비율로 섞고, 깊은 구간 손실률이 앞 구간보다 낮아지면 대사 R6 이 예외로 알립니다. | 표본이 적은 구간의 튀는 손실률을 감사 때 지적받습니다. |
| ④ 월말 3단계 일괄 실행 | 경험률 확정 → 충당금 설정 전표 → 대손 제각을 미리보기와 실행으로 나눕니다. 미리보기 합계 = 실행 합계이고, 같은 조건의 재실행은 서비스가 거절합니다. | 계산 시트와 전표 입력이 따로 놀아 숫자가 어긋납니다. |
| ⑤ 2인 승인 · 직무 분리 · 연계 문서 | 1억 원 이상은 서로 다른 승인자 2명이 승인하고, 작성자는 자기 전표를 승인할 수 없습니다. 전기하면 결산 반영 · 사후관리 문서가 생기고 역분개하면 함께 되돌려집니다. | 승인 기록이 메일에 흩어지고 제각 후 추심 대상이 따로 관리됩니다. |
| ⑥ 대사 7규칙과 예외 조치 | 연령 스냅샷 = 외상매출금 G/L, 충당금 G/L = 산정 충당금, 흐름 보존, 손실률 단조성, 제각 ≤ 기초 충당금 등을 점검하고, 충당금 차이는 조정 전표로, 나머지는 보류 · 허용 종결로 정리합니다. | 마감 때 엑셀로 원장과 연령표를 맞추고 차이 사유를 메일로 모읍니다. |
| ⑦ 사후 검증 | 과거 기준 월의 예측 충당금과 이후 실제 제각 · 회수 · 미결을 송장 단위로 추적합니다(실현 + 회수 + 미결 = 기준 잔액). 관찰을 마친 9개월의 실현/예측 합계는 107.8% 였습니다. | 손실률이 맞았는지 확인할 방법 없이 매년 같은 가정을 씁니다. |
| ⑧ 칸에서 송장까지, 차이는 요인으로 | 분석 표의 칸을 누르면 그 금액을 만든 연령 라인(송장)이 열리고, 충당금 차이를 잔액 규모 · 연령 구성 · 손실률 효과로 나눠 합계를 검산합니다. | 숫자를 의심할 때마다 고객 라인 항목 화면에서 조건을 다시 넣습니다. |
| ⑨ 감시와 할 일 | 91일 이상 연체 비중 · 1~30일 → 31~60일 전이율 상승 · 충당금 과부족 · 승인 대기 · 미해결 예외를 하루 한 번 점검해 역할별 보고와 할 일로 올립니다. | 연체가 나빠진 것을 분기 결산 때서야 압니다. |
사례로 보는 효과
검증용 샘플 데이터의 2026년 9월 충당금은 계획 대비 29,351,119원 많았습니다(분석 화면 기준, 9월 경험률 확정 뒤). 이 앱은 그 차이를 요인으로 가릅니다. 채권 잔액이 늘어난 잔액 규모 효과는 3,584,423원, 깊은 구간 비중이 늘어난 연령 구성 효과는 9,310,301원, 경험률 · 미래전망 변화에서 온 손실률 효과가 16,456,394원으로 가장 컸고, 대리점 포트폴리오의 B6 · B4 구간이 대부분이었습니다. 세 요인을 더하면 총차이와 정확히 같습니다. 같은 데이터에서 대사식 25개를 전수로 돌린 결과 차이는 13건이었고, 13건 모두 대사가 잡아내는지 보려고 일부러 넣은 예외였습니다. “충당금이 왜 늘었나” 가 “대리점의 연체 전이가 언제부터 빨라졌나” 로 회의의 질문이 바뀝니다.
도입하면 달라지는 것
- 손실률 근거 — 전이 행렬 · 사슬 손실률 표 한 장으로 손실률이 어디서 나왔는지 설명됩니다.
- 결산 일정 — 경험률 확정 → 충당금 전표 → 제각이 미리보기 합계 그대로 전표가 되어 계산과 입력이 어긋나지 않습니다.
- 감사 대응 — 확정 스냅샷 · 승인 이력 · 대사 결과 · 사후 검증이 같은 화면에 남아 매년 같은 표를 다시 만들지 않습니다.
- 조기 경보 — 연체 전이율이 오르면 분기 결산 전에 보고와 할 일로 올라옵니다.
이런 회사에 맞습니다
거래처가 수십 곳 이상이고 결제 조건 · 연체 양상이 다른 고객군(대형 유통 · 중소 · 대리점 · 공공)을 함께 가진 회사, 매출채권 충당금을 충당금 설정표(구간별 손실률)로 잡는 회사에 맞습니다. 손실률 근거와 사후 검증을 감사인에게 매년 설명해야 하는 회사, 대리점처럼 연체 전이가 빠른 채널을 따로 보고 싶은 회사에 특히 맞습니다. 법정 결산 숫자는 표준 거래와 표준 보고서에 두고, 이 앱은 산정 · 점검 · 설명에 씁니다.
실행 화면
사용 방법
- 조회조건 입력 — 오른쪽 위에서 회사(기본 전체) · 기간(기본 2026-10) · 사용자를 고릅니다. 경험률 워크벤치는 회사 · 포트폴리오 · 기준 월이 필수이고 관찰 기간 · 미래전망 조정은 가정으로 바꿔 볼 수 있습니다. 전표 화면의 조건(전기일 부터 · 까지, 상태, 업무 구분, 포트폴리오, 생성 경로, 헤더 텍스트, 내가 만든 것)은 모두 선택이고, 분석 화면은 기간과 지표가 필수입니다.
- 조회 버튼 · Enter — 조회 버튼은 조회 조건 영역 오른쪽 끝에 있고, 조건 칸에서 Enter 를 눌러도 조회됩니다. 개요 타일에서 넘어오거나 자동 조회 레이아웃으로 열면 바로 조회된 상태로 시작합니다.
- 요약 확인 — 개요 타일(미결 채권 · 연체 비중 · 91일 이상 연체 · 산정 충당금 · 충당금 과부족 · 경험률 확정 필요 · 승인 대기 · 전기 대기 · 미해결 예외 · 안 읽은 보고)과 연령 구간 분포 · 포트폴리오별 충당률을 먼저 봅니다.
- 월말 순서 — 일괄 실행에서 ① 경험률 확정 → ② 충당금 설정 전표 → 전표 화면에서 검토 요청 · 승인 · 전기 → ③ 다음 달 대손 제각 순서로 진행하고, 각 단계는 미리보기로 대상과 금액을 먼저 봅니다.
- 탭 · 축 이동 — 전표 상세는 분개 항목 → 상태 이력 → 연계 문서 → 감사 로그 탭, 분석 화면은 차원을 행 · 열로 끌어다 놓아 축을 바꿉니다.
- 행 · 칸 클릭 상세 — 전표 목록의 행을 누르면 상세 창이, 분석 표의 칸을 누르면 그 금액을 만든 연령 라인(송장)이 열립니다.
- 내보내기 — 목록은 엑셀 · CSV, 워크벤치는 손실률 표 엑셀, 분석 결과는 표 CSV · PPT 보고서로 받습니다. 수기 전표 여러 건은 엑셀 업로드 양식으로 한 번에 올립니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 | OpenUI5 표준 컨트롤(셸 · 사이드 메뉴 · 표 · 대화 상자)과 직접 그린 SVG 차트 · 열지도 | 외부 라이브러리 반입 심사 없이 사내망에서 그대로 돌아가도록 했습니다. |
| 판정 로직 | Roll-rate · 사슬 손실률 · 표본 보정 · 미래전망 조정, 경험률 확정 · 충당금 · 제각 실행, 상태 전이, 2인 승인 · 직무 분리, 대사 7규칙, 요인분해, 사후 검증을 서비스 쪽에서 판정 | 화면은 서비스 결과를 보여 주기만 하므로, 요청을 직접 보내도 같은 규칙이 적용되고 어느 화면에서 열어도 같은 숫자가 나옵니다. |
| 데이터 서비스 | OData V2 서비스 한 개(엔티티셋 39개, 펑션 14개). 기본 모델 하나가 서비스에 붙고, 조회 조건은 서버 쪽 필터와 정렬로 보내며 목록은 건수와 함께 가져옵니다. 사용자 역할은 요청 머리 하나로 서비스가 판정합니다. | 운영 전환 시 서비스 주소만 바꾸면 화면은 그대로 쓸 수 있습니다. |
| 분석 큐브 | 연령 라인 9,798행을 차원 8개(기간 · 회사 · 포트폴리오 · 지역 · 사업부 · 신용 등급 · 연령 구간 · 다음 달 이동)로 미리 집계한 큐브 18,939행과 계획 6,968행 | 어떤 축으로 바꿔도 합계가 큐브 총합과 같도록 한 곳에서만 집계합니다. |
| 테마 | sap_horizon | SAP 표준 화면과 같은 모양이라 사용자가 따로 배울 것이 없습니다. |
| 앱 정보 | |
|---|---|
| 영역 | 재무 — 채권 → 대손충당금 (통합 관리 · 영업 청구 · 자금 사후관리 · 결산 문서 연계) |
| 업무 흐름 범위 | 월말 연령 스냅샷 → Roll-rate · 경험 손실률 산정 → 경험률 확정 → 충당금 설정 전표 → 승인 → 전기 → 대손 제각 → 대사 → 분석 · 사후 검증 |
| 모듈 구성 | M1 개요 · 할 일 · M2 기준정보 · 경험률 워크벤치 · M3 문서 처리 · M4 일괄 실행 · M5 대사 · 예외 · M6 충당금 분석 · M7 영역 간 연계 · M8 이력 · 감사 · 권한 |
| 관련 기준서 · 대상 영역 | K-IFRS 제1109호 금융상품 — 매출채권 기대신용손실 간편법과 충당금 설정표 / 대상 영역: 재무 · 영업 · 자금 · 결산 |
| SAP 표준 T-code | FBL5N · FD10N · S_ALR_87012178 · F104 · F-02 · FB08 · FAGLB03 |
| 화면 성격 | 업무 처리 + 분석 통합 화면 |
| 테마 | sap_horizon |
처음 열었을 때 — 이번 달 충당금 상태와 할 일이 한곳에

2026-09 월말 기준 미결 채권 60.8억 · 연체 비중 8.2% · 91일 이상 연체 2.16% · 산정 충당금 180백만 · 충당금 과부족 +14백만 · 경험률 확정 필요 4 · 승인 대기 2 · 미해결 대사 예외 10 타일과, 연령 구간별 잔액 · 포트폴리오별 충당률(대리점 13.58% 등)이 나옵니다. 타일 숫자는 상단에서 고른 회사 · 기간 기준이며, 기간이 스냅샷보다 늦으면 가장 최근 월말을 씁니다. 타일을 누르면 해당 화면으로 이동합니다.

역할에 맞는 할 일(대사 예외 조치 · 승인 대기 · 반려 수정 · 경험률 확정 · 충당금 설정)과 하루 한 번 자동 점검한 에이전트 보고(1~30일 → 31~60일 전이율 3.34%p 상승 · 충당금 과부족 38,250,459원 · 미해결 예외 11건)가 나옵니다. 보고는 하루 한 번만 만들어지고, 같은 날 다시 눌러도 건너뛴 기록만 남습니다. 할 일을 누르면 해당 전표 · 예외 · 실행 화면으로 이동합니다.
기준정보 — 고객 · 포트폴리오 설정

고객 104곳의 회사 · 포트폴리오 · 지역 · 사업부 · 신용 등급 · 결제일 · 여신 한도와 최근 월말 미결 · 연체 · 송장 수를 봅니다. 포트폴리오와 등급은 다음 월말 스냅샷부터 손실률 계산에 반영됩니다. 고객명 칸은 코드 · 이름 포함 검색이며, 미결과 연체는 최근 월말 연령 라인을 고객별로 합친 값입니다.

회사 · 고객명 · 포트폴리오 · 지역 · 사업부 · 신용 등급 · 여신 한도 · 결제 조건을 넣어 고객을 만듭니다. 같은 회사 안의 같은 이름은 서비스가 거절합니다. 처리자 이상만 저장할 수 있고, 저장하면 감사 로그에 생성 기록이 남습니다. 고객 코드는 비어 있는 다음 번호로 자동 부여됩니다.

생성 · 수정(대기업 → 중소, 등급 A → C) · 사용 중지가 사용자 · 일시 · 이전 값 → 이후 값과 함께 감사 로그로 남습니다. 사용 중지는 삭제가 아니라 상태 변경이라 과거 연령 라인의 고객 이름은 그대로 보입니다.

포트폴리오 4개(대리점 · 대기업 · 공공 · 중소)의 관찰 기간(6 · 6 · 12 · 6개월) · 미래전망 조정(10 · 0 · 0 · 5%) · 정상 구간 최소 손실률 · 제각 구간과 최근 월말 잔액 · 산정 충당금을 봅니다. 수정은 관리자만 할 수 있습니다. 설정을 바꿔도 이미 확정한 경험률과 전기한 전표는 그대로이고, 다음 확정부터 새 설정이 쓰입니다.
경험률 워크벤치 — 손실률이 어디서 나왔는지

1000 한결식품 · 대리점 · 2026-09 · 관찰 6개월을 고르면 이번 달 구간(행) → 다음 달 구간(열) 전이 비율이 열지도로 나옵니다. B1 → B2 50.8% · B4 → B5 55.1% · B5 → B6 84.1% 처럼 진할수록 악화입니다. 대각선 오른쪽(더 깊은 구간)으로 갈수록 붉게, 회수 열은 녹색으로 칠합니다. 같은 구간에 머문 칸은 회색입니다.

구간마다 월말 잔액 · 송장 수 · Roll-rate · 회수율 · 경험 손실률 · 미래전망 · 적용 손실률 · 산정 충당금이 나오고, 경험 손실률 = Roll-rate × 다음 구간 손실률(B6 = 100%)의 사슬 곱이 7구간 모두 맞습니다. 산정 합계 66,606,075원. 비고 열에 현재 적용 손실률(확정 또는 실시간)이 함께 나와, 계산값과 지금 쓰는 값을 나란히 봅니다.

관찰 기간을 12개월, 미래전망 조정을 25%로 바꾸고 계산하면 산정 충당금이 84,575,686원으로 다시 계산되고 설정값 66,606,075원과의 차이(+17,969,611원)가 함께 보입니다. 저장하지 않는 계산입니다. 가정을 바꾼 상태에서는 위쪽 조건 줄 끝에 "(가정)" 이 붙고, 충당금 전표 만들기는 현재 설정값으로만 만듭니다.

구간별 Roll-rate 월별 추이와, 과거 기준 월의 예측 충당금 대비 이후 실제 제각을 비교한 사후 검증이 나옵니다. 관찰을 마친 9개월의 실현/예측 합계는 107.8% 입니다. 관찰 완료 전인 최근 월은 비율 대신 "아직 결과 확정 전" 으로 표시해 합계에서 뺍니다.
월말 일괄 실행 — 경험률 확정 → 충당금 전표 → 제각

1000 한결식품 · 2026-09 경험률 확정 미리보기 결과 포트폴리오 4건 · 합계 110,864,148원이 관찰 개월 · 미래전망 · 정상 구간 손실률 · 종착 직전 손실률과 함께 나옵니다. 저장되지 않습니다. 미리보기는 저장하지 않으므로 몇 번이든 눌러 볼 수 있습니다. 이미 확정한 포트폴리오는 대상에서 빠집니다.

실행 RS261019-001 이 4건 · 110,864,148원으로 미리보기 합계와 같게 끝나고 실행 이력 맨 위에 쌓입니다. 같은 조건으로 다시 실행하면 서비스가 거절합니다. 실행 로그에 포트폴리오별 확정 번호와 금액이 남고, 이전 확정은 "대체됨" 으로 바뀝니다.

확정 경험률로 산정 충당금 − 충당금 잔액을 계산해 대리점 +10,422,517 설정 · 대기업 −1,984,352 환입 · 공공 −4,185,514 환입 · 중소 +9,703,785 설정, 4건 합계 26,296,168원을 미리 봅니다. 차이가 1,000원 이하이거나 같은 포트폴리오에 처리 중인 충당금 전표가 있으면 대상에서 빠집니다.

실행 RN261019-001 이 전표 4건(100000146 ~ 100000149)을 임시저장으로 만들고 합계 26,296,168원이 미리보기와 같습니다. 만든 전표는 충당금 · 제각 전표 화면에서 검토 요청합니다. 만들어진 전표는 임시저장으로 시작해 같은 승인 흐름을 탑니다. 실행 번호를 누르면 로그가 열립니다.

2026-10 대손 제각 미리보기: 9월 월말 B6(151일 이상) 중 등급 D 또는 210일 이상 송장 12건이 포트폴리오별 3건 · 41,705,000원으로 묶이고, 충당금 잔액을 넘는 금액은 대손상각비로 처리됩니다. 제각은 최근 확정 이후 기간에만 실행할 수 있고, 이미 제각 전표에 들어간 송장은 다시 잡히지 않습니다.
문서 처리와 승인 — 승인 버튼은 승인자에게만 보인다

전기일 · 상태 · 업무 구분(충당금 설정 · 환입 · 대손 제각 · 수기) · 포트폴리오 · 생성 경로로 조회하면 2026-09 전표 16건이 금액 · 상태와 함께 나옵니다. 개요 타일에서 넘어오면 해당 조건이 미리 걸린 채 조회됩니다. 결과는 CSV(UTF-8 BOM)와 엑셀로 내려받습니다.

100000146 대리점 충당금 설정 10,422,517원의 분개(차변 64361010 대손상각비 / 대변 13160100 대손충당금), 산정 근거 메모, 경험률 확정 번호 RS261019-001 이 보이고 처리자에게는 수정 · 삭제 · 검토 요청 버튼이 보입니다. 현재 사용자가 할 수 있는 버튼만 보입니다. 산정 근거 메모는 서비스가 전표를 만들 때 남긴 값입니다.

처리자가 승인 요청을 직접 보내도 서비스가 "승인은 승인자 · 관리자 역할만 할 수 있습니다" 로 거절하고, 거절도 감사 로그에 남습니다. 화면 버튼만 막는 것이 아니라 서비스가 같은 규칙을 다시 확인하므로, 요청을 직접 보내도 결과가 같습니다.

승인자로 바꾸면 같은 전표에 승인 · 반려 · 전표 출력 버튼이 보입니다. 승인 단계 0/1 은 1억 원 미만이라 1인 승인 대상이라는 뜻입니다. 1억 원 이상 전표는 첫 승인 뒤 검토중에 머물고 승인 단계가 1/2 로 바뀝니다.

100000147 대기업 충당금 환입 1,984,352원을 역분개하면 반대 전표 100000150 이 생기고, 결산 반영 문서 C000000139 도 함께 되돌려집니다(연계 문서 탭). 역분개 사유는 필수이고, 원전표와 역분개 전표가 서로의 번호로 이동합니다.

조회자는 전표 출력 · 닫기만 보이고, 쓰기 요청은 서비스가 403 으로 거절합니다. 전기된 전표 100000146 의 승인 단계 1/1 · 작성 U02 · 승인 U03 · 전기 U02 가 보입니다. 데모에서는 오른쪽 위 사용자 전환으로 역할을 바꿉니다. 운영에서는 SAP 권한 객체와 역할로 바뀝니다.

개별 평가 추가 충당 같은 수기 전표를 헤더(회사 · 전기일 · 헤더 텍스트 · 포트폴리오)와 항목(차대 · G/L 계정 · 고객 · 포트폴리오 · 금액 · 적요)으로 입력합니다. 차변 4,800,000 / 대변 4,800,000 일치가 위에 보입니다. 대손충당금 라인에는 포트폴리오가, 외상매출금 라인에는 고객이 필요합니다. 계정 · 고객 · 차대 일치는 저장할 때 서비스가 검사합니다.

양식에 맞춘 4행을 올리면 정상 3행 · 오류 1행(차대는 D 또는 C)으로 검증되고, 정상 건만 반영해 수기 전표 1건(3항목)이 만들어집니다. 오류 행은 사유와 함께 빨갛게 표시되고, 반영 결과는 성공 · 실패 건수로 나옵니다.
대사와 예외 조치 — 어긋난 곳을 찾아 기록으로 남긴다

규칙 7개(차대 · 연령 스냅샷 = 외상매출금 G/L · 충당금 G/L = 산정 충당금 · 흐름 보존 · 이월 + 신규 = 잔액 · 손실률 단조성 · 제각 ≤ 기초 충당금)의 점검 건수 · 차이 건수 · 최대 차이와 예외 목록 11건이 나옵니다. 규칙마다 검사 건수 · 차이 건수 · 최대 차이가 나오고, 허용 오차를 넘은 건만 예외로 올라옵니다.

충당금 차이(R3) 예외는 조정 전표로 조치합니다(100000153 · 조치 중). 연령 스냅샷 차이(R2)는 원천 수정 대상이라 조정 전표 요청을 서비스가 거절하고 보류 · 허용 종결만 할 수 있습니다. 조정 전표는 일반 전표와 같은 승인 흐름을 거칩니다. 보류와 허용 종결은 사유가 필수입니다.

조정 전표를 승인 · 전기한 뒤 대사를 다시 실행하면 해당 예외가 해소로 바뀌고, 해소 건도 사유와 조정 전표 번호와 함께 남습니다. 해소된 예외도 지워지지 않고 처리 이력과 함께 남아, 다음 달 같은 대상이 다시 걸리면 지난 조치를 볼 수 있습니다.
분석 — 피벗에서 송장까지, 계획 대비 차이의 요인까지

2026-07 ~ 2026-09 · 포트폴리오별 월말 잔액 실적 6,081,678,000원 · 계획 대비 +70,743,028원, 충당금 179,783,613원 · 계획 대비 +29,351,119원이 표와 차트로 나옵니다. 월말 잔액 · 충당금 · 송장 수는 잔액형이라 기간을 더하지 않고 끝 기간 값을 씁니다. 증감률은 금액과 비율이 함께 기준을 넘을 때만 색칠됩니다.

열에 연령 구간을 끌어다 놓으면 포트폴리오 × 연령 구간 표로 바뀝니다. 받아 둔 큐브를 화면에서 다시 집계하므로 서버 요청이 생기지 않습니다. 행 수 상한을 넘는 조합은 안내와 함께 막습니다.

대기업 칸(3,048,480,000원)을 누르면 그 금액을 만든 2026-09 연령 라인 84건이 송장 · 고객 · 구간 · 연체일 · 다음 달 이동 · 손실률 · 충당금과 함께 열리고 합계가 칸 금액과 같습니다. 드릴스루 창 맨 위에 건수와 합계가 나오고, 고객 코드를 누르면 그 고객의 전표 목록으로 이동합니다.

충당금 계획 대비 차이 29,351,119원을 잔액 규모 효과 3,584,423 · 연령 구성 효과 9,310,301 · 손실률 효과 16,456,394로 나누고 워터폴로 보여 줍니다. 요인 합계가 전체 차이와 같습니다. 요인 합계 = 총차이 검산 줄이 함께 나오고, 요인마다 금액이 큰 포트폴리오 · 구간을 적어 둡니다.

행 · 열 배치 · 지표 · 필터를 이름을 붙여 저장하고 기본값과 열 때 자동 조회를 지정합니다. 자동 조회를 켠 기본 레이아웃은 화면을 열자마자 조회된 상태로 시작합니다.
AI 해설 — 숫자는 서비스가, 설명은 문장으로

서비스가 계산한 숫자만 인용해 "가장 큰 요인은 손실률 효과(16,456,394원)" 와 주요 포트폴리오 · 구간을 문장으로 설명하고 근거 표를 함께 붙입니다. 해설은 서비스가 계산한 숫자만 인용합니다. 모델 연결은 기본 꺼짐이며, 꺼도 규칙 기반 해설이 같은 근거로 나옵니다. PPT 보고서는 브라우저에서 만들어 내려받습니다.
영역 간 연계 — 청구 · 제각 · 사후관리 · 결산

제각 전표 200000053 을 기준으로 영업 청구(송장) 6건 → 회계 제각 전표 → 자금 상각채권 사후관리 T000000053 이 이어진 흐름을 영역별 열로 봅니다. 흐름의 상자를 누르면 그 문서의 상세가 열리고, 연결 종류별 건수와 금액이 아래 표로 나옵니다.

흐름의 상자를 누르면 영업 문서 V000000001(청구 · 2,699,000원)의 상세와 앞뒤 문서가 열립니다. 충당금 전표는 결산 반영 문서로 이어집니다. 다른 영역 문서는 이 앱에서 고치지 않습니다. 원천 처리는 해당 영역의 표준 화면에서 합니다.
이력 · 감사 · 역할 — 누가 무엇을 했는지

생성 · 상태 전이 · 일괄 실행 · 대사 · 예외 조치 · 레이아웃 저장까지 사용자 · 대상 · 이전 값 → 이후 값 · 결과가 남고, 거절된 예외 조정 시도도 사유와 함께 기록됩니다. 로그는 사용자 · 결과로 거르고 엑셀로 내려받습니다. 거절된 요청도 사유와 함께 남습니다.

조회자 · 처리자 · 승인자 · 관리자 6명의 쓰기 · 승인 · 실행 · 관리 권한과 직무 분리 규칙, 허용된 상태 전이표를 봅니다. 허용된 상태 전이표가 서비스가 판정에 쓰는 표와 같습니다. 관리자도 자기 전표는 승인할 수 없습니다.
좁은 화면 — 휴대폰에서도

390px 폭에서는 메뉴가 접히고 조회 조건이 세로로 쌓입니다. 조회 버튼은 조건 영역 끝에 그대로 있고, 차트는 표 아래로 내려갑니다.

390px 폭에서는 사슬 손실률 표가 구간별 카드처럼 펼쳐져 송장 수 · 회수율 · 미래전망 · 현재 적용 손실률을 세로로 읽습니다. 좁은 화면에서는 툴바 버튼이 더보기 메뉴로 접힙니다.
화면 뒤에서 일어나는 일
화면의 버튼은 모두 서비스의 펑션 하나에 대응합니다. 워크벤치의 계산은 연령 라인에서 Roll-rate 와 사슬 손실률을 돌려주고(저장 안 함), 일괄 실행은 같은 계산으로 확정 스냅샷 · 충당금 전표 · 제각 전표를 만듭니다. 검토 요청 · 승인 · 전기 · 역분개는 상태 전이표와 역할 · 금액 규칙을 서비스가 다시 확인한 뒤 처리하고, 모든 시도는 성공이든 거절이든 감사 로그에 남습니다.
경험 손실률 판정 — 구간, 계산, 사용자 조치
| 구간 | 만기 후 경과 일수 | 손실률 계산 | 점검 · 사용자 조치 |
|---|---|---|---|
| B0 정상(미도래) | 만기 전 · 당월 만기 | Roll-rate × B1 손실률, 최소 손실률 하한 | 하한이 자주 걸리면 최소 손실률 가정을 다시 봅니다 |
| B1 1~30일 | 1 ~ 30 | Roll-rate × B2 손실률 | 1~30일 → 31~60일 전이율이 3%p 넘게 오르면 에이전트 보고 |
| B2 31~60일 | 31 ~ 60 | Roll-rate × B3 손실률 | 표본 30건 미만이면 회사 전체와 가중 |
| B3 61~90일 | 61 ~ 90 | Roll-rate × B4 손실률 | 앞 구간보다 낮으면 대사 R6 예외 |
| B4 91~120일 | 91 ~ 120 | Roll-rate × B5 손실률 | 91일 이상 비중 8% 초과 시 보고 |
| B5 121~150일 | 121 ~ 150 | Roll-rate × B6 손실률 | 고객별 개별 평가 대상인지 확인 |
| B6 151일 이상 | 151 ~ | 종착 구간 100% | 등급 D 또는 210일 이상이면 제각 대상 |
적용 손실률 = min(100, max(B0 최소 손실률, 경험 손실률 × (1 + 미래전망 조정%))) 이고, 산정 충당금은 송장 라인마다 잔액 × 적용 손실률을 원 단위로 반올림해 더합니다. 확정 스냅샷이 있으면 확정 경험률이 실시간 계산보다 우선합니다.
문서 상태 판정 — 승인과 전기
| 현재 상태 | 동작 | 다음 상태 | 필요 역할 | 조건 |
|---|---|---|---|---|
| 임시저장 · 반려 | 검토 요청 | 검토중 | 처리자 · 관리자(작성자) | 차변 = 대변, 헤더 텍스트 필수, 외상매출금 라인 고객 필수 |
| 검토중 | 승인 | 승인됨 | 승인자 · 관리자(작성자 제외) | 1억 원 이상은 서로 다른 2인 |
| 검토중 | 반려 | 반려 | 승인자 · 관리자(작성자 제외) | 사유 필수 |
| 승인됨 | 전기 | 전기됨 | 처리자 · 관리자 | 차대 일치 · 기간 열림 · 계정 사용 상태 |
| 전기됨 | 역분개 | 역분개됨 | 승인자 · 관리자 | 사유 필수, 반대 전표를 만들고 결산 · 사후관리 문서도 되돌림 |
허용되지 않는 전이(예: 임시저장 → 전기)는 400 으로, 역할이 맞지 않는 요청은 403 으로 서비스가 거절합니다.
처리 단계와 대사식
- 연령 스냅샷 — 연령 라인 합계 = 외상매출금 G/L (R2), 구간 잔액 = 다음 달 이월 + 회수 + 제각 (R4), 전월 이월 + 당월 신규 = 당월 잔액 (R5).
- 경험률 — 경험 손실률 = Roll-rate × 다음 구간 손실률, 깊을수록 높아야 함 (R6).
- 충당금 설정 — 설정액 = 산정 충당금 − 충당금 G/L, 전기 뒤 충당금 G/L = 산정 충당금 (R3, 허용 1,000원). 전표마다 차변 = 대변 (R1).
- 대손 제각 — 차변 대손충당금(기초 충당금 한도) + 넘는 금액 대손상각비 / 대변 외상매출금, 제각액 ≤ 기초 충당금 (R7).
- 분석 — 큐브 합계 = 연령 라인 합계, 요인 합 = 총차이.
조회조건
| 화면 | 필드 | 필수 | 기본값 | 서비스 필터 |
|---|---|---|---|---|
| 공통 | 회사 · 기간 · 사용자 | 선택 | 전체 · 2026-10 · 처리자 | Bukrs eq '1000' · Period eq '2026-09' |
| 경험률 워크벤치 | 회사 · 포트폴리오 · 기준 월 · 관찰 기간 · 미래전망 | 회사 · 포트폴리오 · 기준 월 | 1000 · 대리점 · 최근 월말 · 설정값 | Period eq '2026-09' and Bukrs eq '1000' and Segment eq 'DEALER' |
| 충당금 · 제각 전표 | 전기일 부터 · 까지 | 선택 | 기간 월 첫날 ~ 말일 | PostDate ge datetime'2026-09-01T00:00:00' and PostDate le datetime'2026-09-30T23:59:59' |
| 충당금 · 제각 전표 | 상태 · 업무 구분 · 포트폴리오 · 생성 경로 | 선택 | 전체 | Status eq 'REVIEW' · Kind eq 'PROV' · Segment eq 'DEALER' |
| 충당금 · 제각 전표 | 헤더 텍스트 · 내가 만든 것 | 선택 | 빈 값 | substringof('대리점',HeaderText) · CreatedBy eq 'U02' |
| 월말 일괄 실행 | 유형 · 회사 · 기간 | 유형 · 기간 | 경험률 확정 · 최근 월말 | 펑션 파라미터 |
| 대사 · 예외 | 상태 · 규칙 | 선택 | 전체 | Status eq 'OPEN' · RuleId eq 'R3' |
| 연령 · 충당금 분석 | 기간 · 기준 비교 · 지표 · 필터 7종 | 기간 · 지표 | 2026-07 ~ 2026-09 · 계획 대비 · 월말 잔액 · 충당금 | Period ge '2026-07' and Period le '2026-09' |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| Roll-rate | 다음 달 더 깊은 구간으로 넘어간 비율 | Σ 이월액 ÷ Σ 구간 월말 잔액(관찰 기간) |
| 회수율 | 다음 달 회수된 비율 | Σ 회수액 ÷ Σ 구간 월말 잔액 |
| 경험 손실률 | 해당 구간 채권이 결국 손실될 비율 | Roll-rate × 다음 구간 경험 손실률 |
| 적용 손실률 | 미래전망 조정과 하한을 반영한 비율 | min(100, max(하한, 경험 × (1 + 조정%))) |
| 산정 충당금 | 구간 잔액에 적용 손실률을 곱한 합 | Σ 라인 잔액 × 적용 손실률 |
| 과부족 | 전표로 맞춰야 할 금액 | 산정 충당금 − 충당금 G/L 잔액 |
| 실현/예측 | 사후 검증 비율 | 이후 실제 제각 ÷ 기준 월 예측 충당금 |
| 승인 단계 | 필요 승인 수 / 완료 승인 수 | 1억 원 이상 2, 그 밖 1 |
좁은 화면에서 달라지는 것
390px 폭에서는 사이드 메뉴가 접히고, 조회 조건이 세로로 쌓이며, 차트가 표 아래로 내려갑니다. 워크벤치의 사슬 손실률 표는 구간별로 세로 카드처럼 펼쳐지고, 행 · 열 축 조합이 상한을 넘으면 안내와 함께 막습니다.
파일 구성
(앱 폴더)
├─ index.html · Component.js · manifest.json · readme.html
├─ view/ Main · Home · Rate · Master · Docs · Batch · Recon · Analysis · Flow · Audit
├─ controller/ · i18n/ · css/
├─ model/ Api · ErrorHandler · formatter · cube · chart · pptx
├─ media/ 소개 영상 · 첫 장면
└─ odata/ metadata.xml · service.js · core.js · json/(엔티티셋별 샘플 데이터)
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 경험률 산정 · 승인 · 대사 · 사후 검증 관점을 더해 확장합니다. 같은 계정과 전표 구조를 쓰므로 이 앱에서 전기한 충당금 · 제각 전표는 표준 조회 화면에서 그대로 보입니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 이 앱이 더하는 것 |
|---|---|---|
| 고객 미결 · 연령 조회 | FBL5N · FD10N · S_ALR_87012178 로 충분히 됩니다 | 월말 스냅샷에 다음 달 이월 · 회수 · 제각을 붙여 구간 전이를 봅니다 |
| 구간별 비율로 충당금 | F104 — 구간별 고정 비율 | 비율을 과거 전이 금액으로 산정(Roll-rate · 사슬 곱)하고 근거를 보여 줍니다 |
| 미래전망 · 가정 비교 | 운영 절차에 달려 있습니다 | 관찰 기간 · 미래전망을 바꿔 저장 없이 다시 계산 |
| 충당금 · 제각 전기 | F-02 · 반제 화면 | 미리보기 = 실행 합계, 2인 승인 · 직무 분리, 재실행 거절 |
| 역분개 | FB08 | 사유 필수 · 결산 · 사후관리 연계 문서 함께 되돌림 |
| 원장 대사 | 보고서를 여러 개 열어 맞춤 | 대사 7규칙 · 예외 조치 · 재대사 기록 |
| 충당금 차이 원인 · 사후 검증 | 차이 금액까지 | 잔액 규모 · 연령 구성 · 손실률 효과로 나누고, 예측 대비 실제 제각을 추적 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| FBL5N | 고객 라인 항목 | 연령 라인(송장별 미결)의 원천입니다. 분석 드릴스루의 송장 목록을 같은 회사 · 키 날짜 조건으로 맞춰 봅니다. |
| FD10N | 고객 잔액 | 고객 화면의 미결 · 연체 금액과 대조합니다. |
| S_ALR_87012178 | 고객 미결 항목 만기 분석 | 연령 구간 집계와 같은 개념입니다. 구간 경계(30 · 60 · 90 · 120 · 150일)를 맞춰 두면 구간 잔액이 같습니다. |
| F104 | 채권 평가(대손충당금) | 표준은 구간별 고정 비율로 충당금을 잡습니다. 이 앱의 확정 경험률을 그 비율로 쓰거나, 이 앱이 만든 설정 전표로 대신할지 도입 때 정합니다. |
| F-02 · FB08 | 일반 전기 · 역분개 | 충당금 설정 · 환입 · 제각 · 수기 전표와 같은 전표 구조입니다. 역분개 전표 번호로 원전표와 서로 찾습니다. |
| FAGLB03 | G/L 계정 잔액 | 외상매출금(R2) · 대손충당금(R3) 잔액의 원천 화면입니다. |
법정 결산 · 공시에 쓰는 숫자는 표준 거래와 표준 보고서에 두고, 이 앱은 경험률 산정 · 점검 · 설명에 씁니다. 기존 보고서를 없앨 필요는 없습니다.
S/4HANA 분석 스택과의 자리
운영에서는 유니버설 저널(ACDOCA) 위의 표준 CDS 분석 쿼리, Fiori 분석 앱, Analysis for Office 가 채권 잔액 분석을 담당합니다. 이 앱은 그 사이 — 월말 연령 스냅샷의 구간 이동, 경험률 확정, 충당금 전표 승인 — 과 전기 직후의 대사를 맡고, 분석 화면은 포트폴리오 · 다음 달 이동처럼 표준 원장에 없는 차원을 더해 봅니다. 표준 분석 앱의 이름은 고객사 버전에 따라 다르므로 도입 때 확인합니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 바꾸나 | 방법 |
|---|---|---|
| 포트폴리오 · 구간 | 고객 묶음 · 구간 경계 · 관찰 기간 · 미래전망 · 최소 손실률 | 앱 기준정보 화면(관리자) 또는 설정 테이블 유지보수 뷰 |
| 월말 스냅샷 | 키 날짜 · 다음 달 이동 연결 | 월말 배치로 스냅샷 테이블에 적재 — 확인 필요 |
| 제각 기준 | 구간 · 경과 일수 · 등급 | 설정 테이블, 내부통제 기준과 맞춤 |
| 전기 연결 | 앱 전기를 표준 전기로 | 표준 BAPI(BAPI_ACC_DOCUMENT_POST) 또는 RAP 액션 — 확인 필요 |
| 권한 | 회사 코드별 쓰기 · 승인 | F_BKPF_BUK 권한 객체와 PFCG 역할 |
| 신용 정보 | 신용 등급 · 한도 | 신용 관리(FSCM) 데이터 연결 — 확인 필요 |
분석 지표 정의표
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| Roll-rate | Σ 이월액 ÷ Σ 구간 잔액(관찰 기간) | 워크벤치 · 일괄 실행 | 고객 미결 항목 월말 스냅샷 | 표본 30건 미만 가중 |
| 경험 손실률 | Roll-rate × 다음 구간 손실률, B6 = 100% | 워크벤치 | 확정 경험률 | R6 단조성 |
| 산정 충당금 | Σ 라인 잔액 × 적용 손실률 | 개요 · 워크벤치 · 분석 | 연령 라인 | R3 의 오른쪽 값 |
| 충당금 과부족 | 산정 충당금 − 충당금 G/L | 개요 · 충당금 전표 | ACDOCA 대손충당금 계정 | 양수 설정 · 음수 환입 |
| 91일 이상 연체 비중 | B4~B6 잔액 ÷ 전체 잔액 | 개요 · 에이전트 | 연령 라인 | 감시 기준 8% |
| 실현/예측 | 이후 실제 제각 ÷ 기준 월 예측 충당금 | 사후 검증 | 제각 이력 | 관찰 완료 월만 합계 |
CDS 구성 — 운영 데이터로 옮길 때의 뷰 설계
화면이 읽는 서비스는 하나지만, 운영 데이터로 옮길 때는 기준 테이블 → 월말 스냅샷 → 기본 뷰 → 전이 집계 → 큐브 → 쿼리 → 권한 → 서비스로 나눠 둡니다. 포트폴리오 가정과 확정 경험률은 회사가 정하고 감사 대상이 되므로 코드가 아니라 데이터로 둡니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZRR_SEGMENT (테이블) | 포트폴리오 · 관찰 기간 · 미래전망 · 최소 손실률 | 회사가 직접 바꾸는 가정이라 데이터로 둡니다. |
| 스냅샷 | ZRR_AGING (테이블) | 월말 송장별 잔액 · 구간 · 다음 달 이동 | 키 날짜 시점의 미결은 나중에 다시 만들기 어렵기 때문에 저장합니다. |
| 기본 | ZI_RrAgingLine | 스냅샷에 고객 · 포트폴리오를 붙임 | 모든 상위 뷰가 같은 원천을 써 합계가 갈라지지 않습니다. |
| 전이 | ZI_RrRollRate | 구간별 잔액 · 이월 · 회수 · 제각 집계 | 워크벤치와 경험률 확정이 같은 분자 · 분모를 씁니다. |
| 확정 | ZRR_RATESNAP (테이블) | 확정 경험률 스냅샷 | 감사 증적 — 확정 뒤에는 바뀌지 않습니다. |
| 큐브 | ZI_RrCube | 차원 8개 × 측정값 7개 집계 | 한 곳에서만 집계해 어떤 축으로 봐도 총합이 같습니다. |
| 쿼리 | ZC_RrQuery | 행 · 열 축, 필수 필터(기간), 계산 항목 | 화면과 보고서가 읽는 접점입니다. |
| 권한 | ZC_RrQuery (DCL) | 회사 코드 접근 제한 | 집계 단계에서 걸어야 다른 회사 숫자가 새지 않습니다. |
① 포트폴리오 가정 테이블
관찰 기간 · 미래전망 조정 · 최소 손실률은 회사가 정하고 감사인과 협의하는 가정입니다. 바뀐 이력이 남도록 변경자 · 변경일을 함께 둡니다.
" ─── ZRR_SEGMENT ──────────────────────────────────────────
" 역할 : 포트폴리오별 손실률 가정
" 나눈 이유 : 회계 정책 가정이라 코드가 아니라 데이터로 둔다
" ──────────────────────────────────────────────────────────
@EndUserText.label : '대손 경험률 포트폴리오'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zrr_segment {
key client : abap.clnt not null;
key segment : abap.char(10) not null; " LARGE · SME · DEALER · PUBLIC
seg_text : abap.char(40);
window_mon : abap.int1; " 관찰 기간(개월)
fl_adj_pct : abap.dec(5,2); " 미래전망 조정(%)
min_rate_pct : abap.dec(7,4); " 정상 구간 최소 손실률(%)
woff_bucket : abap.char(2); " 제각 구간
changed_by : syuname;
changed_at : timestampl;
}
② 월말 연령 스냅샷 테이블
키 날짜 기준 미결 송장과 다음 달 이동을 저장합니다. 다음 달 월말 스냅샷을 만들 때 직전 달 라인의 이월 · 회수 · 제각을 채웁니다.
" ─── ZRR_AGING ────────────────────────────────────────────
" 역할 : 월말 송장별 미결 · 구간 · 다음 달 이동
" ──────────────────────────────────────────────────────────
@EndUserText.label : '월말 매출채권 연령 스냅샷'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table zrr_aging {
key client : abap.clnt not null;
key bukrs : bukrs not null;
key keydate : abap.dats not null; " 월말
key belnr : belnr_d not null; " 송장
key gjahr : gjahr not null;
kunnr : kunnr;
netdt : netdt; " 순 만기일
days_past : abap.int4;
bucket : abap.char(2); " B0 ~ B6
waers : waers;
@Semantics.amount.currencyCode : 'zrr_aging.waers'
balance : abap.curr(23,2);
next_bucket : abap.char(2);
@Semantics.amount.currencyCode : 'zrr_aging.waers'
roll_amt : abap.curr(23,2); " 다음 달 더 깊은 구간
@Semantics.amount.currencyCode : 'zrr_aging.waers'
collect_amt : abap.curr(23,2);
@Semantics.amount.currencyCode : 'zrr_aging.waers'
writeoff_amt : abap.curr(23,2);
}
③ 연령 라인 기본 뷰
스냅샷에 고객 · 포트폴리오 · 지역을 붙입니다. 금액은 통화와 짝으로 선언해 집계 때 통화가 섞이지 않게 합니다.
" ─── ZI_RrAgingLine ───────────────────────────────────────
" 역할 : 스냅샷 + 고객 마스터 (모든 상위 뷰의 원천)
" ──────────────────────────────────────────────────────────
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '연령 라인 (기본)'
@ObjectModel.usageType : { serviceQuality : #C, sizeCategory : #XL, dataClass : #TRANSACTIONAL }
define view entity ZI_RrAgingLine
as select from zrr_aging as a
inner join kna1 as c on c.kunnr = a.kunnr
left outer join zrr_custseg as s on s.bukrs = a.bukrs
and s.kunnr = a.kunnr
{
key a.bukrs as CompanyCode,
key a.keydate as KeyDate,
key a.belnr as InvoiceNo,
key a.gjahr as FiscalYear,
a.kunnr as Customer,
c.regio as Region,
s.segment as Segment,
s.grade as CreditGrade,
a.bucket as Bucket,
a.next_bucket as NextBucket,
a.days_past as DaysPastDue,
@Semantics.currencyCode : true
a.waers as Currency,
@Semantics.amount.currencyCode : 'Currency'
a.balance as Balance,
@Semantics.amount.currencyCode : 'Currency'
a.roll_amt as RollAmount,
@Semantics.amount.currencyCode : 'Currency'
a.collect_amt as CollectAmount,
@Semantics.amount.currencyCode : 'Currency'
a.writeoff_amt as WriteOffAmount
}
④ 구간 전이 집계 뷰
Roll-rate 의 분자(이월액)와 분모(구간 잔액)를 같은 라인에서 함께 더합니다. 관찰 기간 필터는 쿼리 파라미터로 받습니다.
" ─── ZI_RrRollRate ────────────────────────────────────────
" 역할 : 회사 · 포트폴리오 · 구간 · 월말별 잔액 · 이월 · 회수 · 제각
" ──────────────────────────────────────────────────────────
@EndUserText.label : '구간 전이 집계'
define view entity ZI_RrRollRate
as select from ZI_RrAgingLine
{
key CompanyCode,
key Segment,
key Bucket,
key KeyDate,
Currency,
@Semantics.amount.currencyCode : 'Currency'
sum( Balance ) as Balance,
@Semantics.amount.currencyCode : 'Currency'
sum( RollAmount ) as RollAmount,
@Semantics.amount.currencyCode : 'Currency'
sum( CollectAmount ) as CollectAmount,
@Semantics.amount.currencyCode : 'Currency'
sum( WriteOffAmount ) as WriteOffAmount,
count( * ) as LineCount
}
group by CompanyCode, Segment, Bucket, KeyDate, Currency
⑤ 확정 경험률 테이블
일괄 실행의 경험률 확정 결과를 저장합니다. 확정 뒤에는 고치지 않고, 새로 확정하면 이전 행을 대체됨으로 바꿔 감사 증적으로 남깁니다.
" ─── ZRR_RATESNAP ─────────────────────────────────────────
" 역할 : 확정 경험률 스냅샷 (감사 증적)
" ──────────────────────────────────────────────────────────
@EndUserText.label : '확정 경험률'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table zrr_ratesnap {
key client : abap.clnt not null;
key snap_id : abap.char(12) not null;
key bukrs : bukrs not null;
key segment : abap.char(10) not null;
key bucket : abap.char(2) not null;
keydate : abap.dats;
obs_months : abap.int1;
roll_rate : abap.dec(9,4); " %
base_loss : abap.dec(9,4); " 경험 손실률 %
final_rate : abap.dec(9,4); " 적용 손실률 %
waers : waers;
@Semantics.amount.currencyCode : 'zrr_ratesnap.waers'
required : abap.curr(23,2);
snap_status : abap.char(1); " A 적용 · S 대체됨
created_by : syuname;
created_at : timestampl;
}
⑥ 큐브 — 잔액 · 충당금 · 흐름
분석 화면의 모든 숫자는 이 큐브 한 곳에서 나옵니다. 잔액 · 충당금은 잔액형이라 기간을 더하지 않도록 쿼리에서 끝 기간을 고릅니다.
" ─── ZI_RrCube ────────────────────────────────────────────
" 역할 : 차원 8개 × 측정값 집계 (기간 · 회사 · 포트폴리오 · 지역 · 등급 · 구간 · 이동)
" ──────────────────────────────────────────────────────────
@Analytics.dataCategory : #CUBE
@ObjectModel.modelingPattern : #ANALYTICAL_CUBE
@ObjectModel.supportedCapabilities : [ #ANALYTICAL_PROVIDER, #SQL_DATA_SOURCE ]
@EndUserText.label : '대손 경험률 큐브'
define view entity ZI_RrCube
as select from ZI_RrAgingLine as l
left outer join zrr_ratesnap as r on r.bukrs = l.CompanyCode
and r.segment = l.Segment
and r.bucket = l.Bucket
and r.keydate = l.KeyDate
and r.snap_status = 'A'
{
l.CompanyCode,
l.KeyDate,
l.Segment,
l.Region,
l.CreditGrade,
l.Bucket,
l.NextBucket,
l.Currency,
@Aggregation.default : #SUM
@Semantics.amount.currencyCode : 'Currency'
l.Balance,
@Aggregation.default : #SUM
@Semantics.amount.currencyCode : 'Currency'
cast( l.Balance * r.final_rate / 100 as abap.curr( 23, 2 ) ) as Allowance,
@Aggregation.default : #SUM
@Semantics.amount.currencyCode : 'Currency'
l.RollAmount,
@Aggregation.default : #SUM
@Semantics.amount.currencyCode : 'Currency'
l.CollectAmount,
@Aggregation.default : #SUM
cast( 1 as abap.int4 ) as LineCount
}
⑦ 분석 쿼리 — 축과 필수 필터
키 날짜를 필수 파라미터로 받아 전체 기간 집계가 실수로 돌지 않게 하고, 충당률을 계산 항목으로 둡니다.
" ─── ZC_RrQuery ───────────────────────────────────────────
" 역할 : 행 · 열 축, 필수 필터(키 날짜), 계산 항목
" ──────────────────────────────────────────────────────────
@Analytics.query : true
@EndUserText.label : '연령 · 충당금 분석'
define transient view entity ZC_RrQuery
provider contract analytical_query
with parameters
p_keydate : abap.dats
as projection on ZI_RrCube
{
@AnalyticsDetails.query.axis : #ROWS
Segment,
@AnalyticsDetails.query.axis : #COLUMNS
Bucket,
@AnalyticsDetails.query.axis : #FREE
Region,
@Consumption.filter : { selectionType : #SINGLE, multipleSelections : true }
CompanyCode,
Balance,
Allowance,
LineCount,
@EndUserText.label : '충당률(%)'
@Aggregation.default : #FORMULA
$projection.Allowance / $projection.Balance * 100 as CoverageRate
}
where KeyDate = $parameters.p_keydate
⑧ 권한 — 회사 코드
데모의 사용자 전환을 운영에서는 이 권한 정의와 PFCG 역할이 대신합니다. 집계 단계에서 걸어야 다른 회사 숫자가 합계로 새지 않습니다.
" ─── ZC_RrQuery (DCL) ─────────────────────────────────────
" 역할 : 회사 코드 단위 조회 권한
" ──────────────────────────────────────────────────────────
@EndUserText.label : '대손 경험률 분석 권한'
@MappingRole : true
define role ZC_RrQuery {
grant select on ZC_RrQuery
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 손실률 가정 | 관찰 기간 · 미래전망 조정 · 최소 손실률 · 표본 보정 기준과 근거 문서 | 감사 때 가정의 근거를 설명하지 못합니다 | 재무 책임자 · 감사인 협의 |
| 포트폴리오 분류 | 신용 위험 특성이 비슷한 고객 묶음(유형 · 지역 · 등급) | 성격이 다른 고객이 섞여 손실률이 흐려집니다 | 재무 · 여신 |
| 제각 기준 · 승인 한도 | 제각 대상(구간 · 경과 일수 · 등급), 2인 승인 금액(샘플 1억 원) | 제각 판단이 담당자마다 달라집니다 | 재무 책임자 · 내부통제 |
| 권한 역할 전환 | 데모 사용자 전환을 없애고 F_BKPF_BUK 권한 객체와 PFCG 역할로 | 데모 전환이 남아 권한이 열려 있게 됩니다 | 보안 · 권한 담당 |
| 월말 스냅샷 | 키 날짜 · 적재 시점 · 보관 기간, 다음 달 이동 연결 방식 | 과거 월 손실률을 다시 만들 수 없습니다 | 재무 · Basis |
| 전기 연결 | 앱 전기를 표준 BAPI 또는 RAP 액션과 연결, F104 와의 역할 분담 | 앱 상태와 원장 상태가 어긋날 수 있습니다 | 재무 · Basis |
| 대사 허용 오차 | 충당금 대사 허용(샘플 1,000원) 등 규칙별 허용 범위 | 정상 차이까지 예외로 올라옵니다 | 재무팀 |
| 서비스 활성화 · 배치 | 서비스 게시, manifest 의 서비스 주소 교체, 스냅샷 · 에이전트 점검 배치 등록 | 화면이 샘플 데이터를 계속 읽습니다 | IT · Basis |
숫자를 믿을 수 있는가 — 검증 결과
만드는 쪽에서 먼저 대사식을 세워 검증용 샘플 데이터 전체(연령 라인 9,798행 · 전표 197건 · 항목 432행)에 돌린 결과입니다.
| 대사식 | 검사 건수 | 차이 | 의도적 예외 |
|---|---|---|---|
| 전표마다 차변 = 대변(전기 · 역분개 전표) | 189 | 0 | 0 |
| 전표 금액 = 차변 합계(전체 전표) | 197 | 0 | 0 |
| 연령 구간 합계 = 고객별 미결 채권 합계(회사 × 월) | 42 | 0 | 0 |
| 채권 기초 + 신규 − 회수 − 제각 = 기말(회사 × 포트폴리오 × 월) | 160 | 0 | 0 |
| R1 전표별 차변 = 대변 | 189 | 0 | 0 |
| R2 연령 스냅샷 합계 = 외상매출금 G/L | 42 | 3 | 3 |
| R3 충당금 G/L = 경험률 산정 충당금 (2025-04 충당금 설정 시작 이후) | 144 | 8 | 8 |
| R4 구간 잔액 = 이월 + 회수 + 제각 | 618 | 0 | 0 |
| R5 전월 이월 + 당월 신규 = 당월 잔액 | 160 | 0 | 0 |
| R6 손실률 단조성(연체가 깊을수록 높음) (2025-04 충당금 설정 시작 이후) | 864 | 0 | 0 |
| R7 제각액 ≤ 기초 충당금 | 51 | 2 | 2 |
| 경험 손실률 = Roll-rate × 다음 구간 손실률(확정 경험률 전 구간) | 840 | 0 | 0 |
| 확정 산정 충당금 = 연령 라인별 충당금 합(적용 중 확정) | 140 | 0 | 0 |
| 상태별 건수 합계 = 전체 전표 수 | 197 | 0 | 0 |
| 상태 이력 마지막 값 = 현재 상태 | 197 | 0 | 0 |
| 감사 로그(성공한 상태 전이) = 상태 이력 전이 건수 | 611 | 0 | 0 |
| 역분개 전표 금액 = 원전표 금액 × (−1)(항목 방향 반대) | 1 | 0 | 0 |
| 일괄 실행으로 만든 전표 합계 = 실행 결과 합계(= 미리보기 합계) | 18 | 0 | 0 |
| 경험률 확정 실행 합계 = 확정 산정 충당금 합계 | 18 | 0 | 0 |
| 대사 예외 = 미해결 + 조치 중 + 해소(+보류 · 허용 종결) | 11 | 0 | 0 |
| 할 일 미완료 = 승인 대기 + 반려 + 전기 대기 + 미해결 예외 | 16 | 0 | 0 |
| 결산 반영(CL) · 사후관리(TR) 금액 = 원 전표 금액 | 188 | 0 | 0 |
| 큐브 합계 = 원천 라인 합계(측정값 7 × 축 3) | 189 | 0 | 0 |
| 요인 합 = 총차이(충당금 9월 계획 대비) | 1 | 0 | 0 |
| 요인 합 = 총차이(잔액 8월 대비) | 1 | 0 | 0 |
차이 13건(R2 3 · R3 8 · R7 2)은 대사가 실제로 잡아내는지 보려고 일부러 넣은 예외이며 — 외상매출금 G/L 수기 대체 · 미결 입금, 9월 충당금 미전기, 충당금 설정 첫 달의 기초 충당금 초과 제각 — 예기치 않은 차이는 0건입니다. 화면 쪽은 자동화로 따로 돌려 축을 다섯 가지로 바꿔도 총합(회수액 5,200,047,000원)이 같고, 드릴스루 칸 금액과 송장 합계가 같은지 매번 다시 잽니다.
운영 데이터로 갈 때
송장 라인이 월 수십만 건이면 전이 집계와 큐브는 데이터베이스가 하고, 화면은 기간 필수 필터로 범위를 좁혀 집계 결과만 받습니다. 경험률 계산은 회사 × 포트폴리오 × 구간 × 월 단위 집계(수백 행)만 읽으므로 라인 수와 상관없이 가볍고, 드릴스루는 칸 조건 그대로 송장을 페이지 단위로 읽습니다. 응답 시간 기준(예: 분석 조회 3초 안)은 도입 때 데이터 양을 보고 정합니다.
자주 묻는 질문 — 숫자, 화면, 산정과 점검, 도입과 운영
도입 검토에서 나올 만한 질문을 네 묶음으로 정리했습니다.
숫자와 산식
Roll-rate 는 정확히 어떻게 계산합니까?
구간 b 의 Roll-rate = 관찰 기간 동안 Σ(다음 달 더 깊은 구간으로 넘어간 금액) ÷ Σ(구간 b 월말 잔액)입니다. 월별 비율을 평균하지 않고 금액을 모아서 나누므로 잔액이 큰 달의 영향이 그만큼 큽니다.
송장 라인마다 다음 달 이월 · 회수 · 제각을 붙여 두기 때문에 분자와 분모가 같은 라인에서 나오고, 대사 R4(구간 잔액 = 이월 + 회수 + 제각)가 그 흐름이 빠짐없는지 확인합니다.
경험 손실률이 사슬 곱이라는 것은 무슨 뜻입니까?
정상 구간의 채권이 결국 손실이 되려면 B1 → B2 → … → B6 을 차례로 거쳐야 하므로, 각 단계의 Roll-rate 를 곱합니다. 경험 손실률(b) = Roll-rate(b) × 경험 손실률(b+1), 종착 구간 B6 은 100% 입니다.
워크벤치의 사슬 손실률 표에서 7구간 모두 이 곱이 맞는지 검산했습니다.
미래전망 조정은 어떻게 반영됩니까?
적용 손실률 = 경험 손실률 × (1 + 미래전망 조정%) 이며 100% 를 넘지 않습니다. 정상 구간(B0)에는 최소 손실률 하한을 둡니다.
조정 비율과 하한은 샘플 설정값이고, 실제 값은 경기 전망 · 업종 지표 등을 근거로 회사가 정합니다.
표본이 적은 구간은 왜 회사 전체와 섞습니까?
송장 몇 건의 움직임만으로 손실률이 크게 튀는 것을 막기 위해서입니다. 구간 표본이 30건 미만이면 Z = 표본 수 ÷ 30 의 비율로 포트폴리오 값과 회사 전체 값을 섞습니다.
워크벤치 머리에 "신뢰도 가중 N개 구간" 으로 몇 개 구간이 섞였는지 표시합니다.
충당금 차이 요인분해의 합은 왜 총차이와 정확히 같습니까?
잔액 규모 효과(전체 잔액 증감 × 기준 충당률), 연령 구성 효과(구간 비중 변화), 손실률 효과(구간 손실률 변화)를 순서대로 계산하고, 마지막 항이 나머지를 받도록 산식을 골랐기 때문입니다.
화면에 ‘요인 합계 = 총차이’ 검산 줄을 둡니다. 9월 충당금 계획 대비 29,351,119원도 세 요인의 합과 같습니다.
대사 예외 13건은 무엇입니까?
검증용 샘플 데이터에 일부러 넣은 예외입니다. 외상매출금 G/L 에 수기 대체 · 미결 입금이 있어 연령 스냅샷과 어긋난 3건(R2), 9월 충당금 전표가 아직 전기되지 않은 8건(R3), 충당금 설정 첫 달에 기초 충당금을 넘은 제각 2건(R7)입니다.
대사가 이런 차이를 실제로 잡아내는지 확인하려는 것이고, 그 밖의 예기치 않은 차이는 0건입니다.
화면과 조작
워크벤치에서 바꾼 가정이 바로 충당금에 반영됩니까?
아니요. 관찰 기간 · 미래전망을 바꿔 계산하면 저장하지 않고 설정값과 비교만 합니다. 관리자가 ‘가정 채택’ 을 눌러 포트폴리오 설정을 바꿔야 다음 경험률 확정부터 쓰입니다.
이미 확정한 경험률과 전기한 전표는 그대로 남습니다.
월말에는 어떤 순서로 누르면 됩니까?
월말 일괄 실행에서 ① 경험률 확정 → ② 충당금 설정 전표를 실행하고, 충당금 · 제각 전표 화면에서 검토 요청 → 승인 → 전기합니다. 다음 달에 ③ 대손 제각을 실행합니다.
각 단계는 미리보기로 대상과 금액을 먼저 확인하며, 미리보기는 저장하지 않으므로 몇 번이든 눌러 볼 수 있습니다.
수기 전표는 언제 씁니까?
개별 평가로 특정 고객에 충당금을 더 쌓거나, 포트폴리오를 재분류하거나, 상각채권을 회수했을 때처럼 일괄 실행이 다루지 않는 거래에 씁니다.
대손충당금 라인에는 포트폴리오, 외상매출금 라인에는 고객이 필요하고, 같은 승인 흐름을 거칩니다. 여러 건은 엑셀 업로드 양식으로 올립니다.
조회 버튼은 어디에 있습니까?
조회 조건 영역의 오른쪽 끝에 있습니다. 조건 칸에서 Enter 를 눌러도 조회되고, 개요 타일에서 넘어오면 해당 조건으로 자동 조회됩니다.
분석 화면은 레이아웃에 ‘열 때 자동 조회’ 를 켜 두면 화면을 열자마자 조회된 상태로 시작합니다.
분석 칸 금액과 드릴스루 합계가 정말 같습니까?
같습니다. 칸 금액은 큐브가 연령 라인을 더해 만든 값이고, 드릴스루는 같은 조건의 라인을 그대로 읽기 때문입니다. 잔액형 지표는 끝 기간 라인만 읽습니다.
만드는 쪽에서도 측정값 7개 × 축 3개 조합에서 큐브 합계와 라인 합계의 차이가 0인지 검증했습니다.
휴대폰에서도 쓸 수 있습니까?
390px 폭까지 맞춰 두었습니다. 메뉴가 접히고 조회 조건이 세로로 쌓이며, 사슬 손실률 표는 구간별로 세로로 펼쳐집니다.
승인과 조회는 휴대폰에서도 되지만, 열지도와 피벗은 넓은 화면을 권합니다.
산정과 점검 기능
사후 검증은 무엇을 보여 줍니까?
과거 기준 월에 산정한 충당금(예측)과, 그 월말 송장이 이후 실제로 제각 · 회수 · 미결로 어떻게 끝났는지를 비교합니다. 실현 + 회수 + 미결 = 기준 잔액이 전 월 일치합니다.
관찰을 마친 월만 비율을 합산하며, 샘플 대리점 포트폴리오의 실현/예측 합계는 107.8% 였습니다. 100% 를 크게 벗어나면 가정을 다시 보라는 신호입니다.
에이전트는 무엇을 감시합니까?
91일 이상 연체 비중, 1~30일 → 31~60일 전이율 상승 폭, 충당금 과부족, 승인 대기 전표, 미해결 대사 예외 다섯 가지입니다. 기준을 넘으면 받을 역할 앞으로 보고를 올립니다.
하루 한 번만 실행되도록 서비스가 판정하고, 걸린 것이 없어도 실행 기록을 남깁니다.
AI 해설이 숫자를 만들지는 않습니까?
만들지 않습니다. 해설은 서비스가 계산한 요인 · 집계 결과만 인용하고, 해설에 쓴 근거 표를 함께 펼쳐 보여 줍니다.
모델 연결은 기본 꺼짐이며, 꺼도 규칙 기반 해설이 같은 근거로 나옵니다.
같은 달 경험률 확정을 두 번 하면 어떻게 됩니까?
같은 회사 · 기간으로 이미 확정한 포트폴리오는 대상에서 빠지고, 대상이 없으면 ‘실행 대상이 없습니다’ 로 거절되어 로그에 남습니다.
가정을 바꿔 다시 확정하려면 관리자가 설정을 바꾼 뒤 정해진 절차로 실행하며, 이전 확정은 대체됨으로 남습니다.
대사 예외는 어떻게 정리합니까?
충당금 차이(R3)는 조정 전표로, 연령 스냅샷 차이(R2) 같은 원천 문제는 보류 · 허용 종결로 조치합니다. 조정 전표는 일반 전표와 같은 승인 · 전기를 거치고, 보류와 허용 종결은 사유가 필수입니다.
조치 뒤 대사를 다시 실행하면 차이가 없어진 예외가 해소로 바뀌고, 처리 이력은 지워지지 않고 남습니다.
도입과 운영
이 앱은 누구에게 맞습니까?
채권 · 결산 담당(처리자), 재무 책임자(승인자), 내부통제 · 감사 대응 담당이 함께 씁니다. 결제 조건과 연체 양상이 다른 고객군을 여럿 가진 회사에 효과가 큽니다.
손실률 근거는 한 화면으로 설명되고, 충당금 전표는 계산과 같은 숫자로 만들어지며, 사후 검증으로 가정을 매년 점검합니다.
적용 시기나 범위가 정해져 있습니까?
K-IFRS 제1109호의 매출채권 간편법 실무를 돕는 도구이며, 특정 시행일에 맞춘 기능은 없습니다. 샘플은 2025년 1월부터 2026년 9월까지의 연령 라인을 담고 있습니다.
실제 적용 범위(회사 코드 · 포트폴리오 · 관찰 기간 · 제각 기준)는 도입하는 회사가 정합니다.
표준 F104 를 없애야 합니까?
아니요. 같은 계정과 전표 구조를 쓰므로 표준 화면과 함께 씁니다. F104 의 구간 비율을 이 앱의 확정 경험률로 채우거나, 이 앱의 설정 전표로 대신할지 도입 때 정합니다.
결과는 FBL5N · FAGLB03 에서 그대로 확인할 수 있습니다.
데이터는 어디서 오고, 기존 보고서와 다르면 어떻게 확인합니까?
운영에서는 고객 미결 항목(키 날짜 기준)과 순 만기일, 고객 · 신용 마스터, 외상매출금 · 대손충당금 G/L 잔액을 읽습니다. 숫자가 다르면 먼저 키 날짜 · 회사 코드 · 구간 경계를 맞추고, 분석 칸을 드릴스루해 FBL5N 의 건수 · 합계와 대조합니다.
대사 R2 · R3 이 그 과정을 매달 자동으로 돌립니다.
외화 채권은 어떻게 처리합니까?
현재 샘플은 원화(KRW) 채권만 담고 있습니다. 큐브는 통화를 들고 있어 서로 다른 통화를 그대로 합산하지 않습니다.
외화 채권을 다루려면 회사 통화 환산 시점(월말 평가 후 금액)을 정해 스냅샷에 담도록 운영 전환 때 확장합니다(확인 필요).
운영 연결은 어떤 순서로 합니까?
① 손실률 가정 · 포트폴리오 · 제각 기준 같은 회계 정책을 확정하고, ② 월말 스냅샷 테이블과 CDS 뷰 · 서비스를 만들어 게시한 뒤, ③ 앱 전기를 표준 BAPI 또는 RAP 액션과 연결하고, ④ 권한을 PFCG 역할로 옮기고, ⑤ manifest 의 서비스 주소를 바꿉니다.
기간은 정책 합의에 가장 많이 듭니다. 기술 작업의 뼈대는 이 글의 CDS 코드로 공개해 두었습니다.
권한과 보안은 어떻게 됩니까?
데모에서는 오른쪽 위 사용자 전환과 요청 머리 하나로 역할을 판정합니다. 운영에서는 이것을 없애고 F_BKPF_BUK 권한 객체와 PFCG 역할로 바꿉니다.
쓰기 · 승인 · 실행 권한은 서비스가 판정하므로 화면 버튼을 숨기는 것만으로 끝나지 않고, 거절된 요청도 감사 로그에 남습니다.
이 앱의 계산을 충당금의 최종 판단으로 써도 됩니까?
아닙니다. 이 앱은 경험률 산정과 충당금 전표 처리, 대사를 돕는 점검 도구입니다. 손실률 가정과 충당금의 최종 판단은 회사와 감사인이 합니다.
점검 결과는 ‘점검 필요’ 로 보여 주며 원인을 단정하지 않습니다.