SAP 계약자산·계약부채 증감표 — IFRS 15, 청구와 수익인식의 시차를 원장으로 먼저 맞춰본다
계약자산·계약부채는 청구와 수행의무 이행 시점이 어긋날 때 생깁니다. 그 시차를 계약유형별로 증감 재구성하고, 수익인식 총액을 손익계산서 매출액과 함께 맞춰봅니다.
IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호)에 따르면, 수익은 고객에게 약속한 재화나 용역(수행의무)을 이전하는 대가로 받을 것으로 예상하는 금액을 반영해 인식합니다. 문제는 이 수행의무 이행 시점과 청구·대금회수 시점이 늘 같지 않다는 데 있습니다. 이행이 청구보다 앞서면 계약자산이, 청구·수령이 이행보다 앞서면 계약부채가 재무상태표에 남습니다.
이 시차를 결산 때마다 눈으로 다시 맞추는 대신, 계약유형별 증감표와 수익인식 대사를 한 화면에서 확인할 수 있도록 OpenUI5 화면으로 확장했습니다. 라이선스및설치·유지보수용역·구독형서비스·건설형용역·하드웨어공급 5개 계약유형의 계약자산·계약부채 증감표에, 당기 수익인식 총액을 손익계산서 매출액과 대사하는 표까지 더했습니다. 실제 구동 화면 3종을 함께 공개합니다.
이 화면이 더하는 부분
- 계약자산·계약부채 원장 데이터 — G/L 계정(
ACDOCA)의 계약자산·계약부채 계정을 계약유형별로 재구성 - 증감 산출 — 계약자산은 수익인식·매출채권대체·손상, 계약부채는 선수금·수익인식으로 분리해 기말잔액을 검증
- 수익인식 대사 — 계약자산 증가분·계약부채 감소분·즉시인식 매출을 더해 손익계산서 매출액과 일치 여부 확인
- 재무상태표 대사 — 계약유형 전체 합계를 재무상태표 계약자산·계약부채 계정잔액과 대사
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 결산 · 수익인식 |
| 관련 기준서 | IFRS 15 고객과의 계약에서 생기는 수익(K-IFRS 제1115호) |
| Namespace | zui5.contractbal |
| 셸 구조 | 조회조건(우측 조회) + 총괄 증감표 · 계약유형별 명세 · 수익인식 대사 · 재무상태표 대사, 계약유형별 월별 상세 Dialog |
| 화면 수 | 조회 화면 1개 + 월별 증감 상세 다이얼로그 |
| SAP 표준 T-code | FAGLL03 · FBL5N |
| 성격 | 조회·점검형 — 계약 등록·청구·수익인식 전기는 표준 프로세스가 담당 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
회계연도·회계기간을 넣고 조회하면 총괄 증감표부터 재무상태표 대사까지 한 번에 뜹니다 → 계약유형별 명세 행을 눌러 월별 증감 상세를 확인합니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- Company Code · 회계연도 · 회계기간을 선택합니다. 값을 바꾸면 즉시 재조회됩니다.
- 계약자산·계약부채 총괄 증감표에서 계약자산·계약부채 각각의 기초→증가→감소→기말 흐름과 검증 메시지를 확인합니다.
- 계약유형별 명세의 행을 클릭하면 해당 유형의 월별 계약자산·계약부채 증감 상세 다이얼로그가 열립니다.
- 수익인식 대사 표에서 당기 수익인식 총액이 손익계산서 매출액과 일치하는지 확인합니다.
- 재무상태표 대사 표에서 계약자산·계약부채 기말잔액 합계와 재무상태표 계정잔액의 일치 여부를 확인하고, CSV로 전체 표를 내려받습니다.
계약자산·계약부채 판정 규칙
IFRS 15는 수행의무 이행과 청구·대금회수의 시차에 따라 계약자산과 계약부채를 구분하도록 요구합니다. 이 화면은 그 시차를 계정 이동 규칙표로 정리합니다.
| 이행 vs 청구 | 계정 처리 | 화면 반영 |
|---|---|---|
| 이행이 청구보다 앞섬(청구 권리에 조건이 남음) | 계약자산 증가(수익인식) | 계약자산 증감표 "당기 수익인식" 행 |
| 청구 권리가 무조건적으로 확정 | 계약자산 → 매출채권 대체 | 계약자산 증감표 "당기 매출채권 대체" 행 |
| 청구·수령이 이행보다 앞섬 | 계약부채 증가(선수금) | 계약부채 증감표 "당기 선수금" 행 |
| 선수금 수령 후 이행 완료 | 계약부채 감소(수익인식) | 계약부채 증감표 "당기 수익인식" 행 |
| 청구와 이행이 동시에 발생 | 계약자산·부채 미경유, 즉시 수익인식 | 수익인식 대사 "즉시인식 매출" 행 |
공개한 검증용 데이터는 위 규칙에 따라 계약유형별로 계약자산·계약부채 증감을 재구성했으며, 회수가 어려운 것으로 판단되는 계약자산에는 기대신용손실 성격의 손상을 별도로 반영했습니다.
증감표에서 수익인식 대사까지 4단계 산출
| 단계 | 내용 |
|---|---|
| ① 계약유형별 증감 집계 | 계약자산·계약부채 관련 계정을 계약유형 5종별로 나눠 기초잔액과 당기 증감 요인을 합산 |
| ② 총괄 증감표 산출 | 계약자산은 "기초+수익인식-매출채권대체-손상", 계약부채는 "기초+선수금-수익인식" 항등식으로 재구성하고 기말잔액과 대사 |
| ③ 수익인식 대사 | 계약자산 증가분(수익인식)+계약부채 감소분(수익인식)+즉시인식 매출을 더해 당기 수익인식 총액을 산출하고 손익계산서 매출액과 대사 |
| ④ 재무상태표 대사 | 계약유형 전체의 계약자산·계약부채 기말잔액 합계를 재무상태표 계정잔액과 대사 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| Company Code | 필수 | 대상 회사코드 |
| 회계연도 | 필수 | 2025 / 2026 선택 |
| 회계기간(From~To) | 필수 | 001~012월 범위 선택 |
결과 컬럼
총괄 증감표 · 수익인식 대사 · 재무상태표 대사
| 컬럼 | 의미 · 표시 |
|---|---|
| 항목 | 계약자산·계약부채 기초/증가/감소/기말, 수익인식 원천별 금액, 재무상태표 계정잔액 |
| 금액(KRW) | 우측정렬, 천단위 콤마, 마이너스는 △ |
계약유형별 명세
| 컬럼 | 의미 · 표시 |
|---|---|
| 계약유형 | 라이선스및설치·유지보수용역·구독형서비스·건설형용역·하드웨어공급 |
| 계약자산 기초/기말 | 계약유형별 계약자산 잔액(행 클릭 시 월별 상세) |
| 계약부채 기초/기말 | 계약유형별 계약부채 잔액(행 클릭 시 월별 상세) |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code가 담당하고, 이 화면은 계약유형별 증감 재구성과 수익인식·재무상태표 대사 관점을 더해 확장합니다.
| SAP 표준 T-code | 역할 |
|---|---|
FAGLL03 | G/L 계정별 개별항목 조회 — 계약자산·계약부채 계정의 전표 라인아이템 확인 |
FBL5N | 고객(매출채권) 라인아이템 조회 — 계약자산의 매출채권 대체, 선수금 수령 내역 확인 |
IFRS 요구사항 매핑표
| 기준서 | 요구사항 | 이 화면의 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| IFRS 15(K-IFRS 제1115호) | 계약자산·계약부채의 인식과 표시 | 계약유형별 총괄 증감표 | ACDOCA(RACCT·RBUKRS·GJAHR·POPER·HSL) | 계약유형 구분은 관리회계 축 활용 전제(원문 확인 필요) |
| IFRS 15(K-IFRS 제1115호) | 수행의무 이행 기준 수익인식 금액·시점 | 수익인식 대사 | ACDOCA(수익 계정 대변 누계) | 즉시인식 매출 구분 기준은 회사 업무 규칙 확인 필요 |
| IFRS 9(K-IFRS 제1109호) | 계약자산 기대신용손실 손상 | 계약자산 증감표 "당기 손상" 행 | ACDOCA(대손충당금 관련 계정) | 손상 모형 세부 규칙은 IFRS 9 원문 별도 확인 필요 |
| IFRS 15(K-IFRS 제1115호) | 재무상태표 표시금액과의 일치 | 재무상태표 대사 | ACDOCA(기말잔액 누계) | - |
도입 시 확인이 필요한 부분
계약유형 구분(라이선스및설치·유지보수용역·구독형서비스·건설형용역·하드웨어공급)은 표준 계정과 관리회계 축 그룹핑을 전제로 한 것이라, 실제 도입 때는 회사의 계약·계정체계에 맞춰 그룹핑 기준을 다시 정의합니다. 즉시인식 매출 판정 기준도 계약유형별 업무 규칙을 따르므로 고정값으로 두지 않습니다.
참고 CDS 뷰
운영 서비스로 연결할 때를 가정한 참고 설계입니다(이번 화면은 mock 데이터 기반이며 아래 CDS 뷰는 구현되어 있지 않습니다).
@AbapCatalog.sqlViewName: 'ZICTBALRECON'
@EndUserText.label: '계약자산부채 증감 수익인식 대사(참고)'
define view ZI_ContractBalanceRecon
as select from acdoca
{
key rbukrs as CompanyCode,
key gjahr as FiscalYear,
key poper as FiscalPeriod,
key racct as GLAccount,
rfarea as FunctionalArea,
sum( hsl ) as AmountInCoCodeCrcy
}
where blart in ( 'SA', 'DR', 'DZ' )
group by rbukrs, gjahr, poper, racct, rfarea
계약유형 구분은 위 GLAccount를 관리회계 축(원가요소·이익센터 등) 기준으로 그룹핑하는 것을 전제로 합니다. 매핑 이해를 돕기 위한 참고용 설계이며, 실제 도입 시에는 운영 환경의 계정체계에 맞춰 조정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 영역 · 4개 결과 패널 |
| 조회조건 | sap.m.Input(비활성) · sap.m.Select — 우측 끝에 조회 버튼, 선택 변경 시 즉시 재조회 |
| 결과 표 | sap.m.Table — 계약유형별 명세는 itemPress로 상세 다이얼로그 연결 |
| 검증 메시지 | sap.m.MessageStrip — 표준 상태값(Success·Error)으로 대사 결과 강조 |
| 상세 다이얼로그 | sap.m.Dialog + Fragment — 계약유형별 월별 계약자산·계약부채 증감 상세 |
| 포맷 | 금액 · 검증 상태 포맷터, CSV 다운로드(UTF-8 BOM) |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon · lodash · moment |
Component.js | 조회조건 모델 · 결과 모델 초기화 |
manifest.json | 앱 디스크립터 — zui5.contractbal · ko 로케일 |
view/Main.view.xml | 조회화면 + 4개 결과 패널 |
view/DetailDialog.fragment.xml | 계약유형별 월별 증감 상세 다이얼로그 |
controller/Main.controller.js | 조회 · 검증 메시지 설정 · 상세 다이얼로그 · CSV |
model/ModelMock.js | localdata JSON 읽기(Promise) + 증감·대사 계산 로직 |
model/formatter.js | 금액 · 검증상태 포맷 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
localdata/contractbal.json | 계약유형별 월별 증감 · 재무상태표 잔액 · 손익 매출액 검증용 데이터 |
운영 전환 시에는 ModelMock 내부만 실제 서비스 호출로 바꾸면 화면과 검증 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 데이터는 계약유형 5종 × 24개월(2025.01~2026.12) 증감 레코드 120건, 재무상태표 잔액·손익 매출액 스냅샷 각 24건입니다.
| 검증 항목 | 결과 |
|---|---|
| 계약자산 : 기초+수익인식-매출채권대체-손상=기말 (120건 전수 + 6개 기간조합 총괄) | 전수 통과(차이 0) |
| 계약부채 : 기초+선수금-수익인식=기말 (120건 전수 + 6개 기간조합 총괄) | 전수 통과(차이 0) |
| 계약자산·계약부채 기말잔액 합계 = 재무상태표 계정잔액 (24개월 × 2계정) | 전수 통과(차이 0) |
| 수익인식 대사 : 계약자산 증가분+계약부채 감소분+즉시인식 매출=손익계산서 매출액 (24개월) | 전수 통과(차이 0) |
| 조회 버튼 위치(조회조건 영역 오른쪽 끝) · 적용 테마(sap_horizon) | 통과 |
| 화면 렌더링 — 실브라우저에서 조회 → 계약유형별 명세 클릭 → 상세 다이얼로그 실동작 후 캡처 | 3/3 |
회사코드·계정체계·계약유형명은 모두 검증용 가상 데이터입니다.
자주 묻는 질문
계약자산과 매출채권은 어떻게 구분하나요?
수행의무를 이행해 수익을 인식했지만 대금 청구 권리가 시간 경과 외의 조건에 걸려 있으면 계약자산으로, 청구 권리가 시간 경과만으로 무조건 발생하면 매출채권으로 봅니다. 화면에서는 청구 시점에 계약자산이 매출채권으로 대체되는 흐름으로 표시합니다.
계약부채는 회계상 어떤 성격의 계정인가요?
고객에게서 대가를 먼저 받았거나 청구했지만 아직 수행의무를 이행하지 못한 부분입니다. 수행의무를 이행하면 그만큼 계약부채가 줄고 수익으로 인식됩니다.
이 요구사항은 언제부터 적용되나요?
IFRS 15(K-IFRS 제1115호)는 이미 시행 중인 기준서로 별도의 도입 유예기간이 없으며, 이 화면은 기존 재무제표 작성 시점부터 참고할 수 있는 상시 점검 도구입니다.
이 화면의 대사 결과를 그대로 재무제표에 반영해도 되나요?
아니요. 이 화면은 계약자산·계약부채의 증감과 수익인식을 원장 데이터로 미리 대사해 보는 점검 도구이며, 최종 인식·측정·공시 판단은 기준서 원문에 따라 회사와 감사인이 결정합니다.