SAP 지출증빙 적격요건 점검 — 3만원(경조사비 20만원) 넘는 지출, 증빙부터 맞춰본다
결제금액과 증빙유형을 기준금액과 대사해, 적격증빙 확인이 필요한 지출 건을 거래처별로 가려봤습니다
지출 결의를 처리하다 보면 3만원이 넘는 일반경비, 20만원이 넘는 경조사비 지출에는 세금계산서·계산서·신용카드매출전표·지출증빙용 현금영수증 같은 적격증빙을 갖춰야 한다는 원칙은 다들 알고 있지만, 막상 결산 전에 어느 건이 기준금액을 넘겼는지, 그 건에 적격증빙이 실제로 붙어 있는지를 전표 단위로 하나씩 대조하는 일은 번거롭습니다. 이 작업을 결산 전에 화면에서 바로 확인할 수 있도록 OpenUI5 화면으로 구현했습니다.
지출계정을 일반경비와 경조사비로 구분해 각각 3만원 · 20만원 기준금액을 매칭하고, 기준금액을 초과한 라인만 증빙유형이 적격증빙 4종에 해당하는지 대사합니다. 기준을 넘겼는데 일반영수증만 있거나 증빙이 아예 없는 건은 "점검 필요"로 가려내고, 나머지는 "정상"으로 분류합니다. 회사·기간 단위 요약 지표와 거래처별 집계를 함께 제공해, 어느 거래처에서 점검 필요 건이 몰려 있는지도 바로 확인할 수 있습니다. 실제 구동 화면 4종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 전표 조회 — 전표 조회(
FB03)로 계상된 지출 전표를 그대로 원천 데이터로 씁니다 - 계정별 원장 — 계정별 원장 조회(
FBL3N)의 라인아이템 구조를 지출증빙 명세 탭으로 이어받습니다 - 구매송장 검증 — 구매송장 검증(
MIRO) 처리 이후 시점에서 증빙유형 요건을 별도로 재확인하는 점검 관점을 더합니다
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 세무 대응 |
| 관련 기준서 | - · 세무 대응(지출증빙 적격요건) |
| Namespace | zui5.taxevidence |
| 셸 구조 | 조회조건 영역(우측 조회) + 요약 지표 4종 + 탭 2개, 행 클릭 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2개) + 상세 다이얼로그 |
| SAP 표준 T-code | FB03 · FBL3N · MIRO |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·점검형 — 최종 판단은 회사와 세무 대리인이 수행 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 4종 둘러보기
기본 조건으로 조회하면 지출증빙 명세가 뜹니다 → 판정결과를 점검 필요로 좁혀 보고 → 거래처별 집계 탭으로 거래처 단위 현황을 보고 → 행을 클릭해 상세를 봅니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
사용 방법
- 화면에 들어오면 서비스 정의가 로드되는 즉시 기본 조건(회사코드 1000, 2026년 007기)으로 자동 조회가 1회 실행됩니다.
- 조회조건 영역에서 회사코드 · 회계연도(필수)를 입력합니다.
- 기간 · 거래처명 · 증빙유형 · 판정결과(선택)로 범위를 좁힙니다. "전체"로 둔 조건은 조회 요청에서 빠집니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 필드에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 초기화 버튼은 조회 버튼 왼쪽에 있으며 기본 조건으로 되돌리고 다시 조회합니다.
- 요약 지표 4종(조회 건수 · 조회 금액 합계 · 점검 필요 건수 · 점검 필요 비율)으로 전체 상태를 먼저 봅니다.
- 탭을 옮겨 ① 지출증빙 명세 → ② 거래처별 집계 순으로 확인합니다. 거래처별 집계 탭 행을 클릭하면 그 거래처로 명세 탭이 자동 필터링됩니다.
- 명세 탭 행을 클릭하면 전표·거래처·금액·증빙유형·판정결과를 담은 상세 다이얼로그가 열립니다.
- 각 탭 오른쪽 위 CSV 내려받기(UTF-8 BOM)로 현재 탭의 결과를 저장합니다.
적격증빙 판정 로직
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 결제금액 > 기준금액(일반경비 3만원 / 경조사비 20만원) 이고 증빙유형이 적격증빙 4종 중 하나 | 정상 | 추가 조치 불필요 |
| 결제금액 > 기준금액 이고 증빙유형이 일반영수증 또는 증빙없음 | 점검 필요 | 적격증빙 재수취 가능 여부를 확인하고, 확인이 안 되면 세무 대리인과 처리 방법을 협의 |
| 결제금액 ≤ 기준금액 | 정상 | 기준금액 이하이므로 증빙유형과 무관하게 점검 대상에서 제외 |
이 판정은 결제금액과 증빙유형을 기계적으로 대사한 결과이며, 실제 손금 인정 여부에 대한 최종 판단은 회사와 세무 대리인이 개별 거래의 실질을 검토해 결정합니다.
지출증빙 점검 처리 단계
| 단계 | 내용 |
|---|---|
| 1단계 | 회사코드·회계연도·기간별 지출 전표 라인(거래처·지출계정·금액·증빙유형)을 모읍니다 |
| 2단계 | 지출계정 구분(일반경비/경조사비)에 따라 기준금액(3만원/20만원)을 매칭합니다 |
| 3단계 | 결제금액이 기준금액을 초과하는 라인만 증빙유형이 적격증빙 4종에 해당하는지 판정합니다 |
| 4단계 | 판정 결과를 거래처 단위로 묶어 점검 필요 건수·금액을 집계합니다 |
| 5단계 | 전체 조회 건수·금액과 점검 필요 건수·비율을 회사·기간 단위로 요약합니다 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 회사코드 | 필수 | 가상 회사코드 2개 중 선택 |
| 회계연도 | 필수 | 4자리 입력 |
| 기간 | 선택(기본 특정 기간) | 비우면(전체) 해당 조건을 제외하고 조회 |
| 거래처명 | 선택 | 부분 일치(포함) 검색 |
| 증빙유형 | 선택(기본 전체) | 세금계산서·계산서·신용카드매출전표·지출증빙용 현금영수증·일반영수증·증빙없음 |
| 판정결과 | 선택(기본 전체) | 정상 · 점검 필요 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| 전표번호 · 전기일자 · 거래처 · 지출계정 | ① 지출증빙 명세 탭 |
| 금액 · 증빙유형 · 판정결과 · 비고 | ① 지출증빙 명세 탭 |
| 거래처 · 총 건수 · 점검 필요 건수 · 점검필요 금액 | ② 거래처별 집계 탭 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 증빙유형 대사 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
FB03 | 전표 조회 | 전표 단위 조회를 증빙유형·기준금액 대사 결과와 함께 한 화면에서 제공 |
FBL3N | 계정별 원장(라인아이템) 조회 | 지출계정 라인을 점검 필요 여부로 바로 걸러볼 수 있게 확장 |
MIRO | 구매송장 검증 | 송장 처리 이후 시점에서 증빙유형 요건을 별도로 재확인하는 점검 관점 추가 |
분석 지표 정의표
| 지표 | 정의 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 기준금액 초과 여부 | 결제금액 > 유형별 기준금액(3만원/20만원) | 지출증빙 명세 탭 판정 기준 | 지출 전표 라인 | 기준금액 이하는 판정 대상 제외 |
| 점검 필요 건수·금액 | 기준금액 초과 & 비적격증빙 라인의 건수·금액 합 | 요약 지표 · 거래처별 집계 | 지출증빙 명세 집계 | 거래처·회사·기간 단위로 집계 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
BKPF | BUKRS · BELNR · GJAHR · BUDAT | 전표 헤더 — 전표번호·전기일자 |
BSEG | LIFNR · HKONT · DMBTR | 전표 라인 — 거래처·지출계정·결제금액 |
LFA1 | LIFNR · NAME1 | 거래처(공급업체) 마스터 — 거래처명 |
define view entity ZC_ExpenseEvidenceCheck
as select from bseg as item
inner join bkpf as header on header.bukrs = item.bukrs
and header.belnr = item.belnr
and header.gjahr = item.gjahr
association [0..1] to lfa1 as _Vendor on _Vendor.lifnr = item.lifnr
{
key item.bukrs as CompanyCode,
key item.gjahr as FiscalYear,
key item.belnr as DocNo,
key item.buzei as ItemNo,
header.budat as PostDate,
item.lifnr as VendorCode,
_Vendor.name1 as VendorName,
item.dmbtr as Amount
}
증빙유형 구분과 기준금액 판정에 쓰이는 필드는 전표 항목 확장 필드 또는 별도 관리 테이블에서 옵니다. 가상 계정체계로 구성한 스케치입니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · 요약 지표 4종 · IconTabBar 2개 탭 |
| 데이터 연동 | manifest.json dataSources.mainService(OData V2, 상대 경로)로 기본 모델을 만들고 defaultCountMode:"Inline" · defaultOperationMode:"Server" · useBatch:false 로 구성합니다. 화면 블록마다 해당 엔티티셋에 직접 바인딩합니다 |
| 조회조건 | sap.ui.model.Filter 로 조립해 바인딩에 적용합니다. 전체를 고른 조건은 필터를 만들지 않습니다. 정렬은 Sorter로 고정 지정합니다 |
| 지출증빙 명세 | sap.ui.table.Table — 판정 상태를 표준 강조색으로 구분하고 cellClick 으로 상세를 엽니다 |
| 거래처별 집계 | sap.m.Table — 점검필요금액 내림차순 정렬 |
| 요약 지표 | 회사·기간 요약 엔티티를 단건으로 읽어 지표 4종을 표시합니다. 금액은 문자열로 오는 Decimal 을 숫자로 바꿔 표시합니다 |
| 예외 메시지 | 메타데이터 실패·요청 실패를 구분해 안내하는 전용 처리기 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 모델 초기화, 예외 메시지 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.taxevidence · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 요약 지표 · 2개 탭 |
view/DetailDialog.fragment.xml | 지출증빙 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 요약 지표 · 다이얼로그 · CSV |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/formatter.js · model/ErrorHandler.js | 표시 서식·판정 상태 · 예외 메시지 처리 |
i18n/i18n_ko.properties | 화면 문구 |
검증 결과
검증용 샘플 데이터(가상 2개 회사 · 3개 기간, 지출 전표 라인 231건)를 기준으로 판정 로직과 집계 대사식을 전수 검증했습니다.
| 검증 항목 | 결과 |
|---|---|
| 판정 로직 재계산 일치(231건) | 통과(불일치 0건) |
| 회사·기간 요약 vs 거래처별 집계 합계 대사(건수·금액) | 통과(불일치 0건) |
| 점검 기능 확인용 의도적 예외 샘플 | 1건 — 기준금액 이하 저증빙 건으로, 정상 처리 로직이 예외 없이 동작함을 확인 |
| 화면 요약 지표 = 검증 스크립트 결과 | 일치 |
| 조회 조건 전달 — 거래처명·증빙유형·판정결과 필터 · 정렬 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 | 0건 |
화면 렌더링 — 조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 안내 메시지 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다. 적격증빙 확인과 손금 인정 여부에 대한 최종 판단은 회사와 세무 대리인이 수행합니다.
자주 묻는 질문
기준금액(3만원 / 20만원)은 언제부터, 어떤 거래에 적용되나요?
이 화면은 일반경비 거래는 건당 3만원 초과, 경조사비 거래는 20만원 초과 시 적격증빙 수취 여부를 점검 대상으로 삼습니다. 구체적인 시행 시기와 적용 범위, 예외 규정은 세법 원문과 개정 연혁을 확인해야 하며, 이 화면만으로 판단하지 않습니다.
"점검 필요"로 표시되면 바로 손금불산입 대상인가요?
아닙니다. 이 화면은 결제금액과 증빙유형을 기계적으로 대사해 확인이 필요한 건을 가려주는 조회·점검 도구입니다. 실제 손금 인정 여부에 대한 최종 판단은 회사와 세무 대리인이 개별 거래의 실질을 검토해 결정합니다.
증빙유형은 어떻게 구분하나요?
세금계산서 · 계산서 · 신용카드매출전표 · 지출증빙용 현금영수증 4종을 적격증빙으로 보고, 일반영수증과 증빙없음은 점검 대상 후보로 분류합니다.
거래처별 집계 탭의 숫자는 명세 탭과 항상 일치하나요?
네. 거래처별 집계는 명세 탭의 라인 데이터를 같은 조회 조건(회사코드·회계연도·기간)으로 다시 묶어 집계한 값이며, 검증 스크립트로 합계 대사를 전수 확인했습니다.