SAP 수출 관세 환급 다차원 분석 — 신청·수령·미환급 잔액과 계획 대비 차이 요인까지 한 화면에서
열 개 차원 피벗 · 칸에서 환급 문서까지의 드릴스루 · 계획 대비 차이와 일곱 요인분해 · 행에 남는 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면 31종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
수출 관세 환급 담당이 매달 받는 질문은 비슷합니다. 돌려받을 관세가 얼마인가, 그 가운데 얼마를 신청했고 얼마가 들어왔나, 왜 계획과 다른가. 지금 이 세 답은 표준 문서 화면 · 관세사 자료 · 입금 내역 · 엑셀로 흩어져 있습니다. 이 앱은 세 답을 한 화면에 붙여 잔액이 어디에 묶였는지 바로 보이게 합니다. 수출용 원재료 관세 환급 관리 업무의 신청 준비와 잔액 점검에 쓰는 도구입니다.
핵심 포인트 일곱 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| ① 축을 바꿔도 숫자가 갈라지지 않는 피벗 | 선적월·원재료·세번·제품·사업부·플랜트·원산지·통화·신청 세관 열 개 차원을 끌어다 놓아 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다. | 축마다 리포트를 따로 만들고, 합계가 다르면 리포트를 맞추는 회의를 엽니다. |
| ② 칸에서 환급 문서까지 한 번에 | 숫자를 누르면 그 칸을 이룬 환급 문서와 품목이 열리고, 줄 합계가 칸 금액과 같은지 그 자리에서 보입니다. | 리포트를 닫고 표준 화면을 다시 열어 조건을 손으로 맞춥니다. |
| ③ 신청·수령·미환급 잔액을 한 줄에 | 환급 대상 대비 신청, 수령, 감액·불인정, 미환급 잔액이 같은 표에 놓여 어디서 막혔는지 바로 보입니다. | 관세사 자료와 입금 내역을 엑셀로 붙여 잔액을 따로 맞춥니다. |
| ④ 계획 대비 차이를 일곱 요인으로 | 수출 물량, 소요량, 과세가격 단가, 관세율, 환율, 미계획 대상, 계획 미이행으로 차이를 가르고 합계가 총차이와 같은지 매번 검산합니다. | 총차이만 보고 원인은 담당자 설명에 의존합니다. |
| ⑤ 차이 사유가 행에 남는다 | 사유는 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 새로 고쳐도 그 행에 따라옵니다. | 같은 질문을 다시 하고 지난 답은 메일에서 찾습니다. |
| ⑥ 열지 않아도 도는 점검 | 다섯 가지 감시 규칙에 임계값과 받을 역할이 붙어 있고, 걸리면 받은 보고로 올라갑니다. | 기한 경과 미신청 금액은 누가 열어 봐야만 드러납니다. |
| ⑦ 결재용 보고서를 바로 | 보고 있는 범위의 표와 차트를 담은 PowerPoint 보고서가 브라우저에서 바로 만들어집니다. | 화면을 캡처해 숫자를 옮겨 적습니다. |
사례로 보는 효과 — 총차이 562만 원 속의 일곱 요인
전체 기간(2026-01~2026-09)을 계획과 견주면 환급 대상 실적은 37억 5,490만 원, 연초 확정 계획은 37억 4,927만 원으로 총차이가 562만 원(0.15%)뿐입니다. 표준 리포트로 보면 “계획대로 갔다”로 끝납니다. 그런데 일곱 요인으로 가르면 미계획 대상 +2억 8,368만 원, 관세율 −2억 1,803만 원, 환율 +1억 749만 원, 수출 물량 −8,619만 원, 계획 미이행 −7,364만 원, 소요량 −3,049만 원, 과세가격 단가 +2,279만 원이 서로 상쇄하고 있었습니다. 합은 정확히 +562만 원이고, 화면의 검산 줄이 오차 0을 보여 줍니다.
잔액 쪽도 같습니다. 환급 대상 대비 미환급 잔액은 9억 9,949만 원(26.6%)으로 계획의 잔액 3억 원(8.0%)보다 크고, 그 가운데 기한 경과 미신청(LATE) 500줄이 3억 733만 원입니다. 이 500줄은 점검 화면이 무엇을 보여 주는지 확인하려고 검증용 샘플 데이터에 일부러 넣은 예외 목록입니다.
검산 조건
일곱 요인의 합은 총차이와 어긋나면 안 됩니다. 화면이 매번 그 등식을 검산해 보여 주고, 같은 숫자를 원천 줄까지 내려가 확인할 수 있습니다.
도입하면 달라지는 것
- 마감·점검 준비 — 신청·수령·잔액 표, 요인분해, 사유, 보고서가 한 화면에서 나오므로 엑셀 취합과 캡처가 줄어듭니다.
- 회의의 주제 — “어느 숫자가 맞나”보다 “어느 요인을 누가 확인하나”를 이야기하게 됩니다.
- 기한 관리 — 기한 경과 미신청 금액이 세관별로 모여 보이므로 신청 준비 순서를 정하기 쉽습니다.
- 기록 — 사유와 레이아웃이 남아 같은 설명을 처음부터 다시 하지 않습니다.
이런 회사에 맞습니다
원재료를 수입해 가공한 뒤 수출하면서 관세 환급을 관리하는 제조·수출 기업, 환급 신청과 수령을 엑셀로 관리하고 있어 잔액이 어디에 묶였는지 한눈에 보기 어려운 관세·경영지원 조직, 통화가 여러 개라 환율이 환급 대상에 주는 영향을 따로 보고 싶은 재무 조직에 맞습니다. 환급 요건과 신청 가능 여부는 회사와 관세사가 판단하며, 이 화면은 그 판단 전에 숫자를 점검하는 도구입니다.
실행 화면
실제로 돌아가는 화면 31종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리인지 아래에 적었습니다. 숫자는 모두 같은 검증용 샘플 데이터에서 나온 것이라 화면끼리 맞춰 보셔도 됩니다.
사용 방법
- 조회조건 입력 — 필수는 회사코드와 시작·종료 기간(선적월)입니다. 선택인 비교 기준은 연초 확정 환급 대상 계획입니다.
- 조회 실행 — 조건 영역 오른쪽 끝의 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다. 레이아웃에 “열 때 자동 조회”를 켜 두면 화면을 열 때 바로 조회됩니다.
- 요약 확인 — 역할별 요약(CEO·CFO·구매·관세 담당)과 표 위 요약에서 환급 대상, 수령액, 미환급 잔액, 잔액률을 먼저 읽습니다.
- 축 이동 — 차원 칩을 끌어 행·열·사용 안 함 칸으로 옮기고, 칩 메뉴로 값 선택과 순서 변경을 합니다. 열 조합은 최대 36개입니다.
- 항목·기준 대비 — 분석 항목과 계산 항목을 고르고 기준 대비를 켜면 차이와 요인분해가 열립니다.
- 행·칸 클릭 — 행을 누르면 차트(항목 비교·차이 분해)가, 숫자 칸을 누르면 원천 줄 창이 열립니다.
- 내보내기 — CSV 버튼으로 현재 표를, 보고서(PPTX)로 분석 결과를 내려받습니다.
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 화면 컨트롤 | OpenUI5 표준 컨트롤(TreeTable·Dialog·SegmentedButton 등)과 직접 그린 SVG 차트 | 외부 차트 라이브러리를 들이지 않아 반입 심사가 필요 없고, 테마(sap_horizon)와 접근성을 표준 그대로 따릅니다. |
| 집계·판정 로직 | 큐브 재집계(브라우저)와 요인분해·해설·에이전트(서비스 쪽 계산 로직) 한 벌 | 같은 로직 파일을 서비스와 검증 환경이 함께 쓰므로 두 곳의 숫자가 갈라지지 않습니다. |
| OData 서비스 구성 | 읽기용 집합(집계 큐브·계획·차원·항목·기간·원천 줄·대사)과 쓰기용 집합(사유·레이아웃·규칙) 하나의 V2 서비스 | 화면은 manifest 에 선언한 서비스 하나만 부르고, 날짜 조건은 서비스가 직접 해석합니다. |
| 데이터 모델 | 조회 시 읽은 큐브를 JSON 모델에 담아 표·차트에 바인딩 | 축을 바꿀 때 서버 요청이 늘지 않게 하려는 구조입니다. |
| 테마 | sap_horizon | SAP 표준 화면과 같은 톤으로 보입니다. |
앱 정보
| 항목 | 내용 |
|---|---|
| 솔루션 | 수출 |
| 업무 영역 | 수출 관세 환급 · 다차원 분석 |
| 관련 기준서·대상 영역 | 수출용 원재료 관세 환급 관리(법령·기준서 원문은 싣지 않음) |
| SAP 표준 T-code | VA03 · VL03N · VF03 · FBL5N · KE30 |
| Namespace | zui5.drawback |
| 화면 성격 | 다차원 분석 리포트(조회 + 사유·레이아웃 저장) |
| 데이터 연동 | OData V2 |
| 테마 | sap_horizon |
처음 열었을 때 — 조건 하나로 시작
조회조건부터 표까지가 한 화면에 쌓입니다. 필수는 회사코드와 기간뿐이고, 조회는 버튼이나 Enter 키로 실행합니다.

조회 전에도 빈 화면을 주지 않습니다. 회사코드와 시작·종료 기간(선적월)이 기본값으로 채워져 있고, 조회 버튼은 조건 영역 오른쪽 끝에 있습니다. 비교 기준은 연초에 확정한 환급 대상 계획 하나뿐이라 따로 고를 것이 없습니다.

조회를 누르면 요약과 표가 함께 뜹니다. 기본 배치는 행이 선적월, 열이 원산지이고 항목은 환급 대상 관세, 수령액, 미환급 잔액, 미환급 잔액률입니다. 합계 줄의 미환급 잔액이 9억 9,949만 원, 대상 대비 26.6%로 나오며, 모든 칸은 같은 큐브에서 나오므로 합계가 어긋나지 않습니다.

선적월을 열로 옮긴 모습입니다. 이미 읽어 온 큐브를 브라우저에서 다시 집계하므로 서버를 다시 부르지 않고, 총합도 그대로입니다. 칩을 누르면 같은 일을 메뉴로도 할 수 있습니다.

접은 한 줄에는 회사·기간·행·열·항목·기준 대비 여부·필터 수가 담깁니다. 축을 짜는 동안에는 펼쳐 두고, 숫자를 들여다볼 때는 접어 두는 식으로 씁니다.
경영 요약 — 역할마다 먼저 볼 숫자
같은 큐브를 CEO·CFO·구매·관세 담당이 각자 먼저 읽는 순서로 요약합니다.

같은 숫자라도 보는 사람마다 먼저 읽는 순서가 다릅니다. CEO 요약은 규모가 큰 제품그룹과 원재료그룹을 앞에 세우고, 미환급 잔액이 회수 계획에 주는 영향을 짧은 문장으로 알려 줍니다. 역할을 바꿔도 서버를 다시 부르지 않습니다.

CFO 요약은 시간 축입니다. 선적월마다 신청과 수령이 얼마나 따라왔는지, 계획 대비 미환급 잔액이 어디서 벌어졌는지를 한 줄씩 보여 줍니다. 회수 속도를 점검하는 용도이며 확정 수치가 아닙니다.

구매 담당은 계획에는 있었는데 실제로는 생기지 않은 환급 대상(계획 미이행)에 관심이 있습니다. 원산지와 원재료 그룹으로 나눠 어디서 계획이 비었는지 보여 줍니다.

관세 담당 요약은 목표 신청 기한이 지났는데 신청하지 않은 금액을 세관별로 모아 보여 줍니다. 실제로 신청이 가능한지, 어떤 서류가 필요한지는 관세 담당과 관세사가 확인할 일입니다.
축 전환과 범위 — 끌고, 고르고, 맞춘다
열 개 차원을 행·열·사용 안 함 칸으로 옮기며 같은 숫자를 다른 각도로 봅니다.

열에 제품그룹과 선적월·원산지처럼 차원을 쌓으면 열이 조합 수만큼 늘어납니다. 조합이 36개를 넘으면 표를 그리지 않고 안내하므로 화면이 끝없이 넓어지는 일은 없습니다.

칩의 메뉴에서 값 선택을 열면 그 차원의 값과 줄 수가 목록으로 나옵니다. 고른 값만 남기는 필터는 서버를 부르지 않고 이미 읽은 큐브에서 걸러냅니다.

원산지를 몇 곳만 남긴 모습입니다. 합계가 선택값의 큐브 합과 같은지는 자동 시험으로 매번 확인합니다. 필터 수는 접은 머리 한 줄에도 표시됩니다.

표를 넓게 보고 싶을 때와 차트를 크게 보고 싶을 때가 다릅니다. 손잡이를 끌어 비율을 바꾸면 다음에 열어도 같은 너비로 돌아옵니다.
칸에서 환급 문서까지
표의 숫자는 눌러서 내려갈 수 있습니다. 원천 줄이 칸 금액과 맞는지 그 자리에서 확인합니다.

숫자를 의심하는 순간 다른 화면을 열 필요가 없습니다. 칸을 누르면 그 칸의 조건(선적월·원산지 등)을 그대로 들고 원천 줄 창이 열립니다.

줄마다 환급 문서와 품목, 수출·수입 신고 번호, 선적일, 신청일, 수령일, 환급 대상·신청·수령·감액·미환급 금액이 보입니다. 창 위의 합계가 눌렀던 칸의 금액과 같은지 바로 비교됩니다. 줄이 많으면 더 보기로 이어 읽습니다.

선적월 아홉 달을 한 장으로 모은 요약입니다. 라인 수, 원산지 수, 수량, 환급 대상, 신청, 수령, 감액, 미환급 잔액에 계획 대비 대상과 잔액이 나란히 놓입니다.
계산 항목 — 비율과 미수령을 표에 얹는다
금액 항목 위에 산식을 얹어 수령률과 미환급 잔액률 같은 비율을 같은 표에서 봅니다.

계산 항목은 분석 항목 위에 얹는 산식입니다. 신청 후 미수령, 수령률, 미환급 잔액률, 감액·불인정률, 신청률, 수출 단위당 환급 대상을 고를 수 있고, 분모가 0이면 칸을 비워 둡니다.
기준 대비 차이와 요인분해 — 같은 표가 점검 자료가 된다
연초 확정 계획과 견주면 같은 표가 차이 점검표가 되고, 차이를 일곱 요인으로 가를 수 있습니다.

기준 대비를 켜면 칸마다 실적과 함께 기준 값, 차이 금액, 차이율이 붙습니다. 색은 금액과 비율 두 임계를 모두 넘을 때만 입혀서 작은 차이로 화면이 알록달록해지지 않습니다.

차이가 큰 행의 사유 칸을 누르면 사유 구분(환율·기타 등)과 내용을 적는 창이 열립니다. 사유는 조회 범위와 행 경로에 묶여 저장되어, 새로 고친 뒤에도 같은 행에 남습니다.

행을 누르면 오른쪽에 계획 대비 환급 대상 차이를 일곱 요인으로 가른 워터폴이 나옵니다. 총차이는 작아도 요인끼리 서로 상쇄하는 경우가 많아, 계단을 보면 무엇이 무엇을 가렸는지 드러납니다.

요인은 수출 물량, 소요량, 과세가격 단가, 관세율, 환율, 미계획 대상, 계획 미이행입니다. 표 아래 검산 줄이 요인 합계와 총차이를 나란히 적고 오차를 보여 주며, 이 앱의 모든 범위에서 오차는 0입니다.
AI 분석과 보고서
숫자는 서비스가 계산하고 문장은 그 숫자를 읽어 만듭니다. 근거 수치와 보고서까지 한 흐름입니다.

AI 분석은 현재 보고 있는 범위의 금액을 서비스가 먼저 계산한 뒤 그 숫자로 문장을 만듭니다. 모델을 쓰지 않는 규칙 기반 해설이 기본이라 같은 범위에서는 늘 같은 문장이 나옵니다.

근거 수치는 대상, 환급 대상 실적과 계획, 미계획 대상, 계획 미이행, 대상 차이, 등록된 사유로 이뤄집니다. 해설을 믿을지 말지는 이 표와 대조해 판단합니다.

지금 보는 범위의 표와 차트, 해설을 담은 보고서가 브라우저 안에서 만들어집니다. 서버에 파일을 남기지 않으며 열어 보면 장 수와 숫자가 화면과 같습니다.
AI 에이전트 — 열지 않아도 도는 점검
감시 규칙에 걸린 금액을 받을 역할 앞으로 올려 줍니다.

규칙은 계획 대비 환급 대상 차이 금액, 계획 미이행 금액, 미환급 잔액률 상한, 기한 경과 미신청 금액, 환율 영향 임계 다섯 가지입니다. 규칙마다 기준값과 받는 역할, 사용 여부를 고칠 수 있습니다.

첫 실행에서 규칙에 걸린 17건이 역할별 받은 보고로 올라왔습니다. 받는 사람의 눈으로 다시 적은 제목과 본문, 금액, 행 경로가 붙어 있어 눌러서 해당 자리로 갈 수 있습니다.

지금 실행은 언제든 누를 수 있고, 타이머는 화면이 열려 있는 동안 하루 한 번만 점검합니다. 같은 날 두 번째 실행은 건너뛰었다고 기록에 남습니다.
레이아웃 저장과 복원
한번 짠 배치는 이름을 붙여 저장하고 다음에 그대로 꺼냅니다.

축 배치와 항목, 보기 방식, 기준 대비 여부를 이름을 붙여 저장합니다. 기본 레이아웃으로 지정하거나 열 때 자동 조회를 켤 수도 있습니다.

저장한 레이아웃이 목록으로 나오고 기본·자동 조회 여부를 바로 고칩니다. 이름 변경과 삭제도 이 창에서 합니다.

저장된 레이아웃을 고르면 행·열·항목이 그대로 돌아옵니다. 기본 레이아웃에 자동 조회를 켜 두면 화면을 여는 순간 조회된 채로 시작합니다.
좁은 화면과 한계
휴대폰 폭에서의 배치와 표를 그리지 않는 상한을 보여 줍니다.

휴대폰 폭에서는 표와 차트가 위아래로 쌓입니다. 표는 가로로 밀어 보고, 손잡이는 세로 배치에서는 쓰지 않습니다.

열 차원을 둘 이상 쌓아 조합이 72개가 되면 상한 36개를 넘었다고 알리고 표를 그리지 않습니다. 차트도 함께 멈추며 열 차원이나 선택값을 줄이라는 방법을 알려 줍니다.
화면 뒤에서 일어나는 일
조회를 누르면 서비스는 회사코드와 기간 조건으로 집계 큐브와 계획을 읽어 옵니다. 이후 행·열 이동, 값 선택, 계산 항목, 역할 전환은 모두 읽어 온 큐브를 브라우저에서 다시 집계하는 일이라 요청이 늘지 않습니다. 칸을 누를 때만 그 칸의 조건으로 원천 줄을 읽고, 사유·레이아웃·규칙을 저장할 때만 쓰기 요청이 나갑니다.
판정 로직 — 줄의 상태와 해야 할 일
원천 줄마다 환급 대상 관세를 구하고 신청·수령 진행에 따라 아래 상태로 나눕니다. 점검용 분류이며 확정이 아닙니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 수령일이 있고 수령액이 대상과 같음 | RCV 수령 완료 | 조치 없음 |
| 신청일은 있으나 수령일이 없음 | CLM 신청 후 미수령 | 미수령 계산 항목으로 규모를 보고 진행 상황 확인 |
| 신청일이 없고 목표 신청 기한 이내 | OPN 신청 전 | 기한 전에 신청 준비 |
| 신청일이 없고 목표 신청 기한이 지남 | LATE 기한 경과 미신청 | 세관별 규모를 보고 신청 가능 여부를 관세 담당이 확인 |
| 신청했으나 심사에서 감액·불인정 | RJT 감액·불인정 | 감액·불인정액으로 분리해 사유 확인 |
조회조건
| 조건 | 필수 여부 | 기본값 | 처리 |
|---|---|---|---|
| 회사코드 | 필수 | 1000 | Bukrs eq 서버 필터 |
| 시작 기간(선적월) | 필수 | 2026-01 | Period ge |
| 종료 기간(선적월) | 필수 | 2026-09 | Period le |
| 비교 기준 | 선택 | 환급 대상 계획(연초 확정) | 계획 집합을 같은 조건으로 함께 읽음 |
| 차원 값 선택 | 선택 | 전체 | 읽어 온 큐브에서 브라우저가 걸러냄 |
| 표시 행 수 | 선택 | 전체 | 브라우저 표시 개수 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 환급 대상 관세 | 수출품에 쓰인 원재료의 수입 관세 중 환급 대상(원화) | 수량 × 소요량 × 과세가격 단가 × 관세율 × 환율 |
| 환급 신청액 | 신청일이 있는 줄의 환급 대상 | 신청 데이터 합 — 원천 확인 필요 |
| 환급 수령액 | 입금된 환급금 | 입금 전표 합 — 원천 확인 필요 |
| 감액·불인정액 | 심사에서 줄거나 인정되지 않은 금액 | 확인 필요 |
| 미환급 잔액 | 아직 돌려받지 못했고 확정 감액도 아닌 금액 | 환급 대상 − 수령액 − 감액·불인정액 |
| 미환급 잔액률 | 대상 대비 잔액 비율 | 미환급 잔액 ÷ 환급 대상 × 100 |
| 요인 항목 7종 | 계획 대비 차이를 가른 몫 | 연쇄 대체 방식, 합 = 실적 − 계획 |
좁은 화면에서 달라지는 것
폭 390px 기준으로 표와 차트가 위아래로 쌓이고 표는 가로로 밀어 봅니다. 손잡이는 가로 배치에서만 쓰고, 칩 메뉴와 창은 화면 폭에 맞춰 좁아집니다.
파일 구성
index.html · Component.js · manifest.json
controller/ Main.controller.js
model/ cube.js · chart.js · pptx.js · layout.js · formatter.js
view/ Main.view.xml · fragments/(창 9종)
i18n/ 한국어 문구
css/ style.css
odata/ 서비스 로직 · 메타데이터 · 샘플 데이터 파일
media/ 소개 영상 · 포스터 · 재생 지점
SAP 표준 기능 확장 포인트 — 표준 T-code 와 어떻게 연계되는지
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. 표준이 잘하는 확인과 신고 대응은 표준에 두고, 끊기는 자리만 이어 붙입니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 표준에서 걸리는 자리 | 이 앱이 하는 일 |
|---|---|---|---|
| 수출 오더·납품 확인 | VA03 · VL03N | 리포트와 문서 화면을 오가며 조건을 다시 넣어야 합니다 | 원천 줄에서 선적일과 수량을 같은 조건으로 확인 |
| 수출 송장 금액 | VF03 | 송장 한 건씩 열어야 합니다 | 환급 줄의 수량·금액을 송장 기준으로 모아 보기 |
| 환급금 입금 확인 | FBL5N | 계정 항목을 따로 조회합니다 | 수령 금액과 수령일을 줄마다 나란히 보기 |
| 제품 수익성 관점 | KE30 | 수익성 보고서는 환급 흐름을 모릅니다 | 제품그룹 단위로 환급 대상·잔액을 같은 축으로 보기 |
| 계획 대비 차이의 원인 | 표준에 없음 | 표준 보고서에는 요인으로 가르는 자리가 없습니다 | 일곱 요인으로 가르고 합계를 검산 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| VA03 | 판매오더 조회 | 원천 줄의 수출 오더·품목 수량을 이어받고, 이 앱 결과에서 해당 오더를 열어 원천을 확인합니다. 두 화면의 수량 합이 같은지가 대사 지점입니다. |
| VL03N | 출고 납품 조회 | 선적월의 기준이 되는 출고일을 같은 납품 문서에서 이어받습니다. 선적일이 어긋나면 이 화면에서 납품 문서를 먼저 봅니다. |
| VF03 | 송장 조회 | 수출 송장의 수량·금액과 이 앱 원천 줄을 맞춰 보는 지점입니다. |
| FBL5N | 고객 계정 항목 조회 | 환급금 입금이 계정 항목으로 보이는지 확인합니다. 환급금을 어느 계정으로 받는지는 회사마다 달라 확인 필요입니다. |
| KE30 | 수익성 분석 보고 | 제품그룹별 수익성 보고서와 이 앱의 환급 대상을 같은 제품 축으로 견줘 볼 때 쓰는 출발점입니다. |
운영 전환 때 기존 리포트를 없앨 필요는 없습니다. 이 앱 결과에서 표준 T-code 로 원천을 확인하고, 표준 화면의 값을 이 앱에서 다시 보는 오가는 길이 열려 있는 상태로 함께 둡니다. 법정·감사·세무 신고 대응은 표준에 남겨 둡니다.
S/4HANA 분석 스택과의 자리
표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 는 정해진 보고 양식을 안정적으로 내는 데 강합니다. 이 앱은 그 옆에서 축을 바꿔 가며 신청·수령·잔액을 점검하고 계획 대비 차이를 요인으로 가르는 용도입니다. 특정 Fiori 앱과의 대응 관계는 확인하지 못해 적지 않았습니다.
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 무엇을 정하나 | 왜 중요한가 |
|---|---|---|
| 원재료 ↔ 수출제품 매핑 | 어느 원재료가 어느 수출제품에 쓰이는지(소요량 기준)를 정한 매핑 테이블 | 매핑이 틀리면 환급 대상 금액이 달라집니다 |
| 환급 신청 원천 | 신청·수령·감액을 읽어 올 원천 테이블 또는 뷰(확인 필요) | 회사마다 관리 방식이 다릅니다 |
| 환율 유형 | 과세가격 환산에 쓰는 환율 유형과 기준일 | 요인분해의 환율 요인에 그대로 반영됩니다 |
| 목표 신청 기한 규칙 | LATE 판정에 쓰는 기한 계산(기한 값은 확인 필요) | 잘못 두면 기한 경과 금액이 달라집니다 |
| 감시 규칙 기준값 | 다섯 규칙의 임계값과 받을 역할 | 업무 규모에 맞게 고칩니다 |
| 권한 | 회사코드·플랜트 단위 조회 권한 | 집계 단계에 걸어야 남의 숫자가 새지 않습니다 |
분석 지표 정의표
| 지표 | 산식·판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 환급 대상 관세 | 수량 × 소요량 × 과세가격 단가 × 관세율 × 환율 | 분석 항목 · 표 | 수출 송장·소요량·수입 관세 — 확인 필요 | 참고 값 |
| 환급 신청액 | 신청일이 있는 줄의 환급 대상 | 분석 항목 | 신청 데이터 — 확인 필요 | |
| 환급 수령액 | 입금된 환급금 | 분석 항목 | FBL5N 계정 항목 — 확인 필요 | |
| 미환급 잔액 | 환급 대상 − 수령액 − 감액·불인정액 | 분석 항목 · 감시 규칙 | 산출값 | |
| 미환급 잔액률 | 잔액 ÷ 환급 대상 | 계산 항목 · 감시 규칙 | 산출값 | 기본 임계 28% |
| 계획 대비 차이 7요인 | 연쇄 대체 방식 분해 | 기준 대비 · 워터폴 | 연초 확정 계획과 비교 | 합계 대사 |
CDS 구성 — 최대한 자세히
아래 코드는 구현 참고용 스케치입니다. 표준 테이블 이름은 확인한 것만 썼고, 회사마다 달라지는 원천은 “확인 필요”로 남겼습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | ZDRW_MATMAP · ZDRW_BASE | 원재료 ↔ 수출제품 매핑, 기준 값 | 업무 기준을 코드에서 떼어 테이블로 둡니다 |
| 원천 | ZI_ExportBillingItem · ZI_ExportDelivery · ZI_DrawbackClaim | 수출 송장·출고·환급 신청 문서를 읽습니다 | 표준 테이블 변경이 이 층에서 끝납니다 |
| 차원·큐브 | ZI_DrawbackItem · ZI_DrawbackPlan · ZI_DrawbackCube | 줄 단위 환급 대상과 상태, 계획, 집계 | 큐브가 모든 축의 단일 원천입니다 |
| 쿼리 | ZC_DrawbackQuery | 화면이 읽는 소비 뷰 | 화면용 이름과 필터를 이 층에서 정합니다 |
| 권한 | ZC_DrawbackQuery(DCL) | 회사코드 기준 접근 제어 | 집계 단계에 권한을 겁니다 |
| 서비스 | ZUI_Drawback | 서비스 정의와 바인딩 | 화면이 부르는 단일 서비스 |
① 매핑 테이블 — 원재료와 수출제품을 잇는 기준
환급 대상 금액은 수출제품 한 개에 원재료가 얼마나 들어갔는지(소요량)에서 출발합니다. 이 기준을 코드 안에 두면 바뀔 때마다 이송해야 하므로 테이블로 뺍니다. 테이블은 현업이 유지보수하고, 변경 이력이 남도록 변경자·변경일을 둡니다.
@EndUserText.label : '원재료-수출제품 소요량 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table zdrw_matmap {
key client : abap.clnt not null;
key bukrs : bukrs not null;
key matgroup : abap.char(3) not null; " 원재료 그룹
key prodgroup : abap.char(3) not null; " 수출제품 그룹
req_qty : abap.dec(13,4); " 제품 단위당 원재료 소요량
req_unit : meins;
changed_by : syuname;
changed_at : timestampl;
}② 수출 선적 기준 — 송장과 출고
선적월은 출고일 기준으로 잡고, 수량과 금액은 수출 송장 품목에서 가져옵니다. 두 뷰를 나눈 이유는 출고 문서와 송장이 일대일이 아닐 수 있기 때문입니다.
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '수출 송장 품목'
define view entity ZI_ExportBillingItem
as select from vbrk
inner join vbrp on vbrp.vbeln = vbrk.vbeln
{
key vbrk.vbeln as BillingDocument,
key vbrp.posnr as BillingItem,
vbrk.bukrs as CompanyCode,
vbrk.fkdat as BillingDate,
vbrp.matnr as Material,
@Semantics.quantity.unitOfMeasure: 'BaseUnit'
vbrp.fkimg as BillingQuantity,
vbrp.vrkme as BaseUnit,
vbrk.waerk as DocumentCurrency
}
" 출고일(LIKP-WADAT_IST)은 ZI_ExportDelivery 에서 읽는다. 수출 판별 조건(수출 송장 유형)은 확인 필요.③ 환급 신청 원천 — 원천 테이블은 확인 필요
환급 신청·수령·감액을 어디서 읽는지는 회사마다 다릅니다. 이 객체는 화면이 필요로 하는 모양만 정해 두고, 원천은 “확인 필요”로 남겨 도입 때 채웁니다.
@EndUserText.label: '환급 신청 문서 (원천 확인 필요)'
define view entity ZI_DrawbackClaim
as select from <확인 필요: 환급 신청 원천>
{
key DrawbackDocument,
key DrawbackItem,
ExportDeclaration,
ImportDeclaration,
ClaimDate,
ReceiptDate,
@Semantics.amount.currencyCode: 'Currency'
ClaimAmount,
ReceivedAmount,
ForfeitAmount,
Currency
}④ 환급 줄 큐브 — 줄 단위 대상과 상태
줄마다 환급 대상을 산출하고 상태(수령·신청 후 미수령·신청 전·기한 경과·감액)를 붙입니다. 상태 판정이 이 층에서 정해지므로 화면과 에이전트가 같은 기준을 씁니다.
@Analytics.dataCategory: #CUBE
@EndUserText.label: '환급 줄 큐브'
define view entity ZI_DrawbackItem
as select from ZI_ExportBillingItem as bill
association [0..1] to ZI_DrawbackClaim as _Claim
on _Claim.ExportDeclaration = $projection.ExportDeclaration
{
key bill.BillingDocument,
key bill.BillingItem,
bill.CompanyCode,
cast(substring(bill.BillingDate, 1, 6) as abap.char(6)) as ShipPeriod,
@Aggregation.default: #SUM
cast(bill.BillingQuantity as abap.dec(15,3)) as Qty,
/* 환급 대상 = 수량 × 소요량 × 과세가격 단가 × 관세율 × 환율 — 입력 원천은 확인 필요 */
@Aggregation.default: #SUM
cast(0 as abap.curr(15,0)) as EligibleDuty,
@Aggregation.default: #SUM
_Claim.ClaimAmount as ClaimAmount,
@Aggregation.default: #SUM
_Claim.ReceivedAmount as ReceivedAmount,
case
when _Claim.ReceiptDate is not initial then 'RCV'
when _Claim.ClaimDate is not initial then 'CLM'
else 'OPN'
end as DrawStatus,
_Claim.ExportDeclaration
}⑤ 계획 뷰 — 연초 확정 환급 대상
계획은 실적과 같은 차원 키를 갖고 있어야 기준 대비와 요인분해가 한 번에 맞습니다. 계획 원천은 회사의 계획 테이블이나 파일 업로드 등 다양해서 확인 필요로 둡니다.
@Analytics.dataCategory: #CUBE
@EndUserText.label: '환급 대상 계획'
define view entity ZI_DrawbackPlan
as select from <확인 필요: 연초 확정 계획 원천>
{
key CompanyCode,
key PlanVersion,
key ShipPeriod,
key MaterialGroup,
key ProductGroup,
key Origin,
key Customs,
@Aggregation.default: #SUM
PlannedEligibleDuty
}⑥ 분석 쿼리 — 화면이 읽는 소비 뷰
화면은 이 뷰 하나로 큐브를 읽습니다. 필터가 필요한 필드를 여기서 정해 두면 서비스 필터와 화면 조건이 같은 이름을 씁니다.
@Analytics.query: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '환급 다차원 분석 쿼리'
define view entity ZC_DrawbackQuery
as select from ZI_DrawbackItem
{
@Consumption.filter: { selectionType: #SINGLE, mandatory: true }
key CompanyCode,
@Consumption.filter: { selectionType: #INTERVAL, mandatory: true }
key ShipPeriod,
@AnalyticsDetails.query.axis: #ROWS
DrawStatus,
@AnalyticsDetails.query.axis: #COLUMNS
Qty, EligibleDuty, ClaimAmount, ReceivedAmount
}⑦ 권한 — 회사코드 단위 접근 제어
권한은 드릴스루에만 걸면 집계 합계의 뺄셈으로 새어 나갑니다. 집계를 만드는 쿼리에서 걸어야 합니다.
@EndUserText.label: '환급 분석 회사코드 권한'
define role ZC_DrawbackQuery {
grant select on ZC_DrawbackQuery
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}⑧ 서비스 정의 — 화면이 부르는 서비스
쿼리를 서비스로 노출하는 마지막 층입니다. 바인딩을 게시하고 화면 manifest 의 서비스 주소를 이 서비스로 바꾸면 운영 연결이 끝납니다.
@EndUserText.label: '환급 분석 서비스'
define service ZUI_Drawback {
expose ZC_DrawbackQuery as DrawbackQuery;
expose ZI_DrawbackPlan as DrawbackPlan;
}
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 원재료-수출제품 매핑 | 소요량 기준을 BOM 에서 가져올지 별도 테이블로 둘지 | 환급 대상 금액이 실제와 다르게 나옵니다 | 관세·생산관리 |
| 환급 신청 원천 | 신청·수령·감액을 읽을 테이블 또는 뷰 | 신청 이후 숫자가 비어 있습니다 | 관세·IT |
| 환율 유형과 기준일 | 과세가격 환산에 쓸 환율과 시점 | 환율 요인이 실제와 어긋납니다 | 재무 |
| 목표 신청 기한 | LATE 판정에 쓸 기한 계산 규칙(값은 확인 필요) | 기한 경과 금액이 달라집니다 | 관세·관세사 |
| 수출 판별 조건 | 어떤 송장 유형을 수출로 볼지 | 내수 송장이 섞입니다 | 영업·IT |
| 계획 원천과 버전 | 연초 확정 계획을 어디서 읽을지 | 기준 대비 차이를 믿을 수 없습니다 | 기획 |
| 차원 범위 | 쓸 차원을 열 개로 둘지 줄일지 | 나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다 | 현업·IT |
| 권한 설계 | 회사코드·플랜트 단위 조회 권한 | 집계 합계로 남의 숫자가 드러납니다 | 보안·권한 |
| 대사 체계 | VA03·VL03N·VF03·FBL5N 과 맞춰 볼 항목 | 숫자가 다를 때 확인 순서가 없습니다 | 회계·관세 |
| 전송(TR) 순서와 서비스 활성화 | 기준 테이블 → 뷰 → 권한 → 서비스 게시 순서와 화면 서비스 주소 교체 | 게시 순서가 어긋나면 화면이 비어 보입니다 | Basis·IT |
숫자를 믿을 수 있는가 — 검증 결과
검증용 샘플 데이터(원천 6,256줄, 환급 문서 1,048건)에서 대사식을 전수로 돌렸고 차이는 모두 0입니다. 도입 포인트의 사례와 같은 숫자입니다.
| 대사식 | 검사 건수 | 차이 건수 | 의도적 예외 |
|---|---|---|---|
| 큐브 합계 = 원천 줄 합계(금액·수량 13개 항목) | 13 | 0 | 0 |
| 축 배치 5종 총합 불변 | 5 | 0 | 0 |
| 칸 드릴스루 10칸 합계 일치 | 10 | 0 | 0 |
| 요인 합 = 총차이 | 1 | 0 | 0 |
| 값 필터 후 합계 = 선택값 큐브 합 | 1 | 0 | 0 |
| 계산 항목(신청−수령) 일치 | 1 | 0 | 0 |
| 기한 경과 미신청(LATE) | 500줄 | - | 500줄(일부러 넣은 예외 목록) |
운영 데이터로 갈 때
수천만 건 규모에서는 큐브 집계를 데이터베이스에서 하고, 회사코드와 기간을 필수 파라미터로 두며, 선적월·차원 키에 맞는 인덱스와 응답 시간 기준을 먼저 정해야 합니다. 이 샘플은 큐브 802행으로 전체를 읽어 오는 구조라 규모가 커지면 서버 쪽 집계로 옮기는 것이 맞고, 그 측정은 운영 데이터로 다시 해야 합니다.
자주 묻는 질문
숫자와 산식, 화면 조작, 분석 기능, 도입과 운영 순으로 모았습니다. 점검 도구이며 최종 판단은 회사와 감사인이, 세무 신고는 회사와 세무 대리인·관세사가 합니다.
숫자와 산식
이 앱의 숫자로 환급을 확정할 수 있습니까?
아닙니다. 이 화면은 점검 도구이며 최종 판단은 회사와 감사인이, 세무 신고는 회사와 세무 대리인·관세사가 합니다. 이 글에는 법령의 조문이나 요건을 적지 않았고, 확인하지 못한 값은 “확인 필요”로 표시했습니다. 화면의 숫자는 신청 준비와 잔액 점검을 돕는 참고 값입니다.
환급 대상 관세는 어떻게 계산합니까?
수출 수량에 제품 단위당 원재료 소요량, 과세가격 단가, 관세율, 환율을 차례로 곱해 원화로 만듭니다. 이 앱에서 쓰는 소요량과 단가는 검증용 샘플 값이고, 실제 환경에서는 매핑 테이블과 수입 신고 데이터에서 가져옵니다. 원천이 정해지기 전에는 “확인 필요”입니다.
미환급 잔액은 무엇입니까?
환급 대상에서 수령액과 감액·불인정액을 뺀 금액입니다. 아직 돌려받지 못했고 확정 감액도 아닌 몫이며, 대상 대비 비율을 미환급 잔액률로 함께 보여 줍니다. 신청 전, 신청 후 미수령, 기한 경과 미신청이 모두 여기에 들어갑니다.
기한 경과 미신청(LATE)은 어떻게 판정합니까?
신청일이 없고 목표 신청 기한이 이미 지난 줄입니다. 기한 계산 규칙은 회사마다 정해야 하므로 이 글에서는 값을 확정해 적지 않았고 “확인 필요”입니다. 신청이 실제로 가능한지는 관세 담당과 관세사가 확인합니다.
샘플 데이터의 LATE 500줄은 왜 있습니까?
점검 화면이 기한 경과 금액을 어떻게 보여 주는지 확인하려고 검증용 샘플 데이터에 일부러 넣은 예외 목록입니다. 미환급 잔액 중 약 3억 733만 원이 여기에 해당합니다. 운영 데이터의 비율을 뜻하지 않습니다.
차이 요인분해는 어떤 방식입니까?
요인을 계획 값에서 실적 값으로 한 번에 하나씩 바꿔 가며 변화분을 구하는 연쇄 대체 방식입니다. 그래서 일곱 요인의 합이 실적과 계획의 차이와 항상 같고, 화면의 검산 줄이 오차를 0으로 보여 줍니다. 요인의 순서를 바꾸면 요인별 금액은 달라질 수 있지만 합은 변하지 않습니다.
외화와 환율은 어떻게 처리합니까?
과세가격은 통화별 외화 값으로 두고 환율을 곱해 원화로 환산합니다. 환율이 달라서 생긴 몫은 요인분해의 환율 요인으로 따로 잡힙니다. 환율 유형과 기준일은 회사가 정할 일이라 “확인 필요”입니다.
화면과 조작
조회는 어떻게 실행합니까?
조건 영역 오른쪽 끝의 조회 버튼을 누르거나 조건 입력 칸에서 Enter 키를 누릅니다. 필수 조건은 회사코드와 시작·종료 기간입니다. 시작 기간이 종료 기간보다 늦으면 안내가 뜹니다.
축을 바꾸면 서버를 다시 부릅니까?
아닙니다. 조회 때 읽은 큐브를 브라우저에서 다시 집계하므로 행·열을 옮기고 값을 고르는 동안 요청이 늘지 않습니다. 총합이 바뀌지 않는지 자동 시험으로 확인합니다.
열은 몇 단계까지 쌓을 수 있습니까?
열 조합이 최대 36개까지 가능합니다. 넘으면 표를 그리지 않고 열 차원이나 선택값을 줄이라는 안내가 나옵니다. 행은 단계가 깊어져도 표시 행 수 상한 안에서 그립니다.
칸을 눌렀을 때 보이는 줄은 칸 금액과 같습니까?
같아야 하며, 자동 시험이 10개 칸의 합계를 비교해 모두 일치함을 확인했습니다. 창 위에는 칸 조건과 합계가 나오고 줄이 많으면 더 보기로 이어 읽습니다.
차이 사유는 어디에 저장됩니까?
서비스의 사유 집합에 조회 범위와 행 경로를 키로 저장됩니다. 새로 고쳐도 같은 행에 남고, AI 분석 근거와 CSV 에도 함께 실립니다. 검증용 환경에서는 샘플 파일에 기록됩니다.
모바일에서도 쓸 수 있습니까?
폭 390px 기준으로 표와 차트가 위아래로 쌓이고 표는 가로로 밀어 봅니다. 손잡이는 가로 배치에서만 씁니다. 큰 표를 편하게 보려면 태블릿 이상을 권합니다.
분석 기능
AI 분석은 숫자를 직접 만듭니까?
아닙니다. 금액과 비율은 서비스가 먼저 계산하고, 해설은 그 숫자를 읽어 문장으로 풀 뿐입니다. 근거 수치 표를 펼쳐 문장과 대조할 수 있고, 규칙 기반 해설이 기본이라 같은 범위에서는 같은 문장이 나옵니다.
AI 에이전트는 무엇을 점검합니까?
다섯 규칙입니다. 계획 대비 환급 대상 차이 금액, 계획했던 환급 대상 미발생 금액, 미환급 잔액률 상한, 목표 신청 기한 경과 미신청 금액, 환율 영향 임계입니다. 규칙마다 기준값과 받는 역할을 고칠 수 있습니다.
에이전트는 사람이 화면을 닫아도 돕니까?
이 샘플에서는 화면이 열려 있는 동안 하루 한 번 점검하는 타이머와 지금 실행 버튼으로 돕니다. 운영에서는 배치 잡으로 옮겨 화면과 무관하게 돌리는 것이 맞고, 그 구성은 도입 때 정합니다.
보고서(PPTX)는 서버에 남습니까?
남지 않습니다. 보고 있는 범위의 표와 차트가 브라우저 안에서 만들어져 바로 내려받아집니다. 만든 파일의 장 수와 숫자는 화면과 같습니다.
도입과 운영
표준 T-code 를 없애야 합니까?
아닙니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회·검증 관점을 더해 확장합니다. VA03·VL03N·VF03·FBL5N·KE30 은 원천 확인과 대사에 그대로 씁니다. 법정·감사·세무 신고 대응도 표준에 남겨 둡니다.
운영 데이터에 연결하려면 무엇을 합니까?
원천 뷰와 매핑 테이블을 만들고 쿼리·권한·서비스를 게시한 뒤 화면의 서비스 주소를 바꿉니다. 정할 일이 개발보다 많아서, 이 글 CDS 절의 운영 시점 표를 먼저 합의하는 것을 권합니다. 소요 기간은 원천 정리 정도에 달려 있어 확정해 말씀드리기 어렵습니다.
권한은 어떻게 겁니까?
회사코드·플랜트 단위의 표준 권한을 쿼리의 접근 제어로 겁니다. 드릴스루에만 걸면 집계 합계의 뺄셈으로 다른 회사 숫자가 드러날 수 있으므로 집계 단계에서 걸어야 합니다.
데이터가 아주 많아지면 어떻게 됩니까?
이 샘플의 원천은 6,256줄이라 큐브 전체를 읽어도 부담이 없습니다. 수천만 건 규모에서는 큐브 집계를 데이터베이스에서 하고, 기간과 회사코드를 필수 조건으로 두고, 인덱스와 응답 시간 기준을 정해야 합니다. 이 부분은 운영 데이터 기준으로 다시 측정해야 합니다.
계정·매핑이 바뀌면 어떻게 합니까?
원재료-수출제품 매핑은 테이블이므로 현업이 직접 고치면 됩니다. 매핑이 바뀐 기간의 비교는 요인분해의 소요량 요인으로 따로 드러납니다. 기준 변경 이력은 변경자와 변경일로 남깁니다.
적용 시기와 범위는 어떻게 됩니까?
확인된 사실만 말씀드리면, 이 글의 화면은 검증용 샘플 데이터(선적월 2026-01~2026-09, 환급 문서 1,048건)로 시연한 것입니다. 실제 회사에 적용할 시기와 범위는 원천 정리와 합의가 끝나야 정해지며 지금은 확인 필요입니다.
이 숫자가 틀리면 책임은 누구에게 있습니까?
점검 도구이며 최종 판단은 회사와 감사인이, 세무 신고는 회사와 세무 대리인·관세사가 합니다. 이 화면은 숫자가 어디서 났는지 줄까지 내려가 확인하게 도울 뿐입니다. 신고 숫자는 반드시 표준 문서와 대사해서 확정하십시오.