SAP 수입 관세·부가세 다차원 분석 — 예정 대비 세액 차이와 협정 미적용 감면 기회까지 한 화면에서 점검하는 수입 원가 분석
큐브 집계 · 드래그 앤 드롭 축 구성 · 칸에서 수입신고 품목 라인까지의 드릴스루 · 예정 대비 세액 차이와 여섯 요인 분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면 33종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
도입 포인트 — 이 앱을 사용해야 하는 이유
수입 관세와 수입 부가세는 구매오더 단계의 예정 값과 실제 수입신고 값이 어긋나면서 재고 취득원가에 그대로 반영됩니다. 합계 리포트는 세액이 늘었다는 사실까지만 알려 주고, 그 몫이 환율 때문인지 신고 방식 때문인지는 사람이 엑셀로 풀어야 합니다. 이 앱은 수입신고 품목 라인을 큐브로 묶어 그 질문을 한 화면 안에서 이어 가게 만듭니다.
화면은 SAP 표준 구매·입고·송장 흐름 위에서 쓰는 분석 확장입니다. 표준 T-code 가 하는 일을 대신하지 않고, 표준 데이터 구조를 그대로 이어받아 “어디서 얼마가 왜 늘었나” 를 보는 관점을 더합니다. 환급되지 않는 수입 관세는 재고 취득원가에 포함되고 환급 가능한 수입 부가세는 포함되지 않으므로(K-IFRS 제1002호 재고자산), 화면은 총 납부 세액과 원가 반영 세액을 나란히 보여 줍니다.
한 줄 요약 — 수입신고 품목 라인을 큐브로 묶어 11개 차원으로 세액을 돌려 보고, 예정 대비 차이를 여섯 요인으로 가르며, 협정세율을 쓰지 못한 신고의 감면 기회까지 한 화면에서 점검하는 수입 세액 분석 리포트입니다.
핵심 포인트 일곱 가지
| 핵심 포인트 | 고객이 얻는 것 | 지금 방식이라면 |
|---|---|---|
| 1. 축을 바꿔도 숫자가 갈라지지 않는 피벗 | 원산지 · 세번 그룹 · 세관 · 공급사 같은 11개 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모든 축이 같은 큐브에서 나와 합계가 어긋날 자리가 없습니다. | 관점마다 리포트를 따로 만들고, 합계가 다르면 어느 쪽이 맞는지부터 맞추는 일을 합니다. |
| 2. 칸에서 수입신고 품목 라인까지 | 숫자를 누르면 그 금액을 만든 수입신고 품목 라인이 열리고, 칸 값과 라인 합이 같은지 머리 줄에 바로 보입니다. | 리포트를 닫고 신고 자료를 따로 열어 조건을 손으로 다시 맞춥니다. |
| 3. 예정 대비 세액 차이를 여섯 요인으로 | 물량 · 외화 단가 · 환율 · 세율 변경 · 협정 적용 · 기타 세액으로 가르고, 합이 총차이와 정확히 같은지 화면이 매번 검산합니다. | 세액이 늘었다는 사실만 보이고, 환율 탓인지 신고 방식 탓인지는 엑셀로 따로 풀어야 합니다. |
| 4. 협정 미적용 감면 기회가 숫자로 드러남 | 협정 대상인데 기본세율로 신고된 건을 따로 세어 감면 기회 금액을 원산지별로 보여 줍니다. | 신고서를 일일이 열어 보기 전에는 어느 건이 협정세율을 놓쳤는지 알 수 없습니다. |
| 5. 차이 사유가 행에 남는다 | 사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음 달에도 따라옵니다. | 같은 질문을 매달 다시 하고, 지난달 답은 메일함에서 찾습니다. |
| 6. 사람이 열지 않아도 도는 점검 | 규칙마다 임계값과 받을 사람(CFO · 구매 · 물류 · 자금 책임자)이 붙어, 걸리면 그 사람의 눈으로 다시 적은 보고가 대기함에 올라갑니다. | 숫자가 나빠진 날 아무도 화면을 열지 않으면 그대로 지나갑니다. |
| 7. 숫자는 모델에 맡기지 않는 AI 분석과 보고서 | 금액 · 비율은 서비스가 큐브에서 계산하고 문장만 해설합니다. 읽은 내용은 표와 차트를 담은 PowerPoint 보고서로 바로 내려받습니다. | AI 가 만든 숫자를 보고에 써도 되는지부터 따져야 하고, 보고서는 화면을 옮겨 적어 다시 만듭니다. |
사례로 보는 효과
검증용 샘플 자료(2026년 1월~9월, 수입신고 2,088건, 품목 라인 5,257건)에서 총 납부 세액은 예정 1,559.1 백만원에서 실적 1,701.6 백만원으로 +142.5 백만원(+9.1%) 늘었습니다. 합계로는 여기까지입니다. 여섯 요인으로 가르면 몫이 갈립니다.
| 요인 | 차이(백만원) | 읽는 법 |
|---|---|---|
| 환율 | +55.7 | 가장 큰 몫입니다. 예정 환율보다 실제 적용 환율이 높았던 몫이라 자금 책임자가 환율 전제를 점검할 대상입니다. |
| 협정 적용 | +31.1 | 협정세율을 적용하기로 한 건 가운데 기본세율로 신고된 몫입니다. 사람이 손볼 수 있는 몫이라 구매 책임자에게 갑니다. |
| 외화 단가 | +26.6 | 공급사 단가가 예정보다 오른 몫입니다. |
| 물량 | +18.4 | 예정보다 많이 들여온 몫입니다. |
| 세율 변경 | +8.7 | 기본세율 · 협정세율 자체가 바뀐 몫입니다(샘플에서는 6월부터 철강 +2%p, 8월부터 유기화학 −1%p 로 가정). |
| 기타 세액 | +2.0 | 기타 세율의 변경분입니다. |
| 합계 | +142.5 | 여섯 요인의 합이 총차이와 정확히 같습니다. |
원가에 얹히는 세액(관세 + 기타 세액)만 보면 예정 264.4 에서 실적 326.8 백만원으로 +62.4 백만원이 늘었고, 실효 관세율은 1.94% 에서 2.27% 로 올랐습니다. 협정 대상인데 기본세율로 신고된 건은 신고 159건(품목 라인 402건)이며, 감면 기회는 약 3,708만원으로 계산됩니다. 이 숫자는 신고 방식을 점검할 후보를 좁혀 주는 것이고, 실제 협정 적용 요건은 회사와 관세사가 확인해야 합니다.
도입하면 달라지는 것
- 마감 후 점검 준비 — 차이 표 · 요인 분해 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합과 화면 캡처가 줄어듭니다.
- 회의의 주제 — “어느 숫자가 맞나” 가 아니라 “어느 건을 먼저 확인할까” 를 이야기합니다.
- 다음 달로 이어지는 기록 — 사유와 레이아웃이 남아 같은 설명을 다시 하지 않습니다.
- 놓치지 않는 점검 — 아무도 화면을 열지 않아도 규칙에 걸린 숫자가 대기함에 올라옵니다.
이런 회사에 맞습니다
- 구매오더 · 입고 · 송장 검증을 SAP 로 돌리면서 수입 관세 · 부가세 점검을 엑셀로 하고 있는 회사.
- 원산지 · 세번 · 세관별로 보는 관점이 많아 리포트가 여러 벌이고, 그 사이 숫자를 맞추는 데 시간을 쓰는 구매 · 관세 · 재무 담당 조직.
- AI 를 쓰고 싶지만 숫자의 출처를 통제해야 하는 경영지원 조직.
실행 화면
실제로 돌아가는 화면 33종을 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있고, 화면마다 무엇을 하는 자리이고 왜 그렇게 두었는지를 아래에 적었습니다. 숫자는 모두 같은 검증용 샘플 자료에서 나온 것이라 화면끼리 서로 맞춰 보셔도 됩니다.
사용 방법
- 조회 조건 — 회사코드(필수)와 시작·종료 기간을 고릅니다. 원산지 · 세번 그룹 · 세관 같은 차원 값 선택은 선택 사항이며 비우면 전체입니다.
- 조회 — 조회 조건 영역 오른쪽 끝의 조회 버튼을 누르거나 입력칸에서 Enter 키를 누릅니다.
- 임원 요약 — 역할(CFO · 구매 · 물류 · 자금 책임자)을 바꾸면 앞세우는 지표와 행 축이 함께 바뀝니다. 다시 조회하지 않습니다.
- 분석 축 — 사용 가능 칸의 칩을 행 축(최대 3) · 열 축(최대 2)으로 끌어다 놓거나 화살표 버튼으로 옮깁니다. 서버를 다시 부르지 않고 표와 차트가 바로 바뀝니다.
- 칸 눌러 품목 라인 — 값 칸을 누르면 그 금액을 만든 수입신고 품목 라인이 열립니다.
- 예정 대비 차이 — 비교를 ‘예정 대비 차이’ 로 바꾸면 칸마다 차이가 붙고 차트는 요인 워터폴이 됩니다. 행 이름을 누르면 그 행 범위의 요인으로 바뀝니다.
- 사유 쓰기 — 차이 모드의 사유 버튼에서 요인 구분과 내용을 저장 · 수정 · 삭제합니다.
- AI 분석 · AI 에이전트 · 레이아웃 — 화면 위쪽 버튼으로 엽니다. AI 분석은 PowerPoint 보고서를 내려받고, 에이전트는 규칙 임계를 고쳐 지금 실행하며, 레이아웃은 현재 화면을 이름 붙여 저장합니다.
- CSV — 피벗 표와 품목 라인 창에서 UTF-8 CSV 로 내려받습니다.
화면을 열면 조회 조건 · 분석 축 · 피벗 틀이 먼저 보입니다. 기본 레이아웃에 ‘열 때 자동 조회’ 를 지정해 두면 조회된 채로 시작합니다.
무엇으로 만들었나
화면은 OpenUI5(sap_horizon 테마)로 만들었고, 데이터는 OData V2 서비스 하나로만 주고받습니다. 서버가 큐브와 계산항목을 만들어 주면 화면은 합산과 배치만 하고, 축을 바꿀 때는 이미 읽어 둔 큐브를 브라우저에서 다시 묶습니다. 그래서 축을 바꿔도 서버를 다시 부르지 않고, 모든 합계가 같은 큐브에서 나옵니다.
| 영역 | 구성 | 설명 |
|---|---|---|
| 화면 프레임 | OpenUI5 · sap_horizon | 표준 컨트롤만 사용합니다. 외부 UI 라이브러리를 들이지 않아 반입 심사 부담이 없습니다. |
| 데이터 연결 | OData V2 서비스 1개 | 큐브 · 예정 · 수입신고 품목 라인 읽기, 사유 · 레이아웃 · 감시 규칙 쓰기, 요인분해 · 해설 · 에이전트 실행 호출이 한 서비스에 들어 있습니다. |
| 집계 | 서버 큐브 + 브라우저 재묶음 | 큐브가 긴 형태 자료로 오고, 피벗은 브라우저가 행 · 열 축 순서대로 다시 묶습니다. 비율은 합산한 뒤에 계산합니다. |
| 차트 | 직접 그린 SVG | 막대 차트와 요인 워터폴을 외부 차트 라이브러리 없이 그립니다. |
| AI 해설 | 규칙 기반 기본 · 모델 연결은 선택 | 금액과 비율은 서비스가 계산해 근거로 넘기고 문장만 해설합니다. 모델 연결은 서비스 설정에서만 켭니다. |
| 보고서 | 브라우저에서 PowerPoint 생성 | 표와 차트를 담은 .pptx 를 서버를 거치지 않고 바로 만들어 내려받습니다. |
| 에이전트 | 판단과 기록은 서비스 | 규칙 평가 · 하루 한 번 제한 · 실행 기록은 서버가 정하므로, 화면이 닫혀 있어도 같은 호출로 돌릴 수 있습니다. |
쓰기가 있는 화면입니다. 사유 · 레이아웃 · 규칙은 저장되고, 요인분해 · 에이전트 실행은 서비스 함수를 부릅니다. 그래서 운영 연결 시 쓰기 권한과 감사 기록 범위를 함께 정해야 합니다(아래 CDS 구성의 ‘운영 시점에 해야 할 일’ 참고).
처음 열었을 때
조회 조건·분석 축·임원 요약·피벗이 한 화면에 차례로 놓입니다. 회사코드와 기간만 확인하고 조회를 누르면 되고, 값 선택은 비워 두면 전체입니다.

회사코드는 필수이고 기본은 1000(샘플)입니다. 기간은 2026.01부터 2026.09까지 고르며, 시작이 종료보다 늦으면 안내 문구가 뜹니다. 조회 버튼은 조회 조건 영역 오른쪽 끝에 있고 입력칸에서 Enter 키로도 조회합니다.

위쪽 지표는 총 세액 1,701.6 백만원, 예정 1,559.1, 차이 +142.5 로 같은 큐브에서 나온 값입니다. 원가 반영 세액 326.8(예정 264.4), 실효 관세율 2.27%(예정 1.94%), 총 실효 세율 12.68%(예정 12.29%)가 함께 보입니다. 역할 선택은 CFO 가 기본이고, 아래에는 세번 그룹별 예정 초과 상위가 이어집니다.

기본 배치는 행 축 원산지 › 세번 그룹, 열 축 회계기간이고 칸 수는 833입니다. 막대는 독일 543.9, 인도네시아 248.2, 태국 242.0, 미국 212.6, 베트남 173.5, 호주 162.9, 중국 116.5, 일본 2.0(백만원)으로 합치면 총 세액 1,701.6 이 됩니다. 차트는 외부 라이브러리 없이 SVG 로 직접 그려 보안 심사 부담이 없고, 창이 좁으면 표 아래로 내려갑니다.
임원 요약 — 자리마다 다른 화면
같은 데이터를 CFO·구매·물류·자금 책임자가 서로 다른 눈으로 봅니다. 역할 선택만 바꾸고 다시 조회하지 않습니다.

CFO 는 세번 그룹 기준으로 총 납부 세액을 봅니다. 원가 반영 세액은 환급 가능한 수입 부가세를 뺀, 재고 취득원가에 더해지는 세액입니다. 오른쪽 위 숫자의 빨간색은 예정보다 늘었다는 뜻이며, 아래 목록은 예정보다 많이 늘어난 순서입니다.

구매 책임자는 어느 원산지에서 관세가 늘었는지와, 협정세율을 적용해 줄어든 금액을 함께 봅니다. 협정 대상인데 기본세율로 신고된 건이 있으면 감면 기회 금액으로 따로 보입니다. 역할을 바꿔도 같은 조회 결과를 다시 묶을 뿐이라 숫자는 같은 출처입니다.

물류 책임자는 부산항·인천항·평택항·인천공항 같은 세관별로 수입 부가세가 예정보다 얼마나 늘었는지 봅니다. 부가세는 과세가격에 관세를 더한 금액을 바탕으로 하므로, 환율이나 관세가 움직이면 함께 움직입니다. 샘플의 부가세율은 가정값입니다.

자금 책임자는 세액을 내기 위한 원화 자금이 얼마나 더 필요한지를 통화별로 봅니다. 외화 단가와 환율이 움직인 몫은 뒤에서 환율 요인으로 따로 나뉩니다. 이 화면은 자금 일정을 만드는 곳이 아니라 세액이 늘어난 이유를 확인하는 곳입니다.
축을 바꾸고 범위를 좁힌다
칩을 끌어다 놓거나 화살표로 옮겨 행 최대 3단계, 열 최대 2단계로 배치합니다. 서버를 다시 부르지 않고 같은 큐브를 브라우저에서 다시 묶습니다.

표 위의 접기·펼치기 버튼으로 펼침 단계를 한 번에 바꿉니다. 접힌 상태에서도 열 합계와 행 합계는 같은 큐브에서 나오므로 펼쳤을 때와 일치합니다. 많은 행을 훑기 전에 큰 덩어리부터 보는 용도입니다.

행·열 바꾸기 버튼은 두 축 묶음을 통째로 맞바꿉니다. 열이 많아지면 표가 옆으로 길어지므로 열 조합이 너무 많을 때는 범위를 좁히라는 안내가 나옵니다. 기본 축으로 돌아가려면 오른쪽의 기본 축 버튼을 누릅니다.

서버를 다시 부르지 않고 이미 읽어 둔 큐브를 브라우저에서 다시 묶으므로 바로 바뀝니다. 차트도 같은 기준으로 회계기간별 합계를 그립니다. 열 조합이 너무 많아지면 범위를 좁히라는 안내가 나옵니다.

적용 세율 구분은 협정세율 적용, 협정 대상이지만 기본세율 적용, 기본세율 적용 세 가지입니다. 샘플에서는 협정세율 적용 1,543.8 백만원, 협정 대상·기본세율 적용 155.7, 기본세율 적용 2.0 이며 합이 총 세액과 같습니다. 협정 대상인데 기본세율로 신고된 쪽을 눌러 내려가면 원인이 되는 신고 라인을 바로 찾을 수 있습니다.

회계기간부터 인코텀즈까지 11개 차원이 위에서 아래로 놓이고, 고르지 않은 차원은 전체입니다. 같은 차원 안에서는 or, 차원 사이에서는 and 로 묶입니다. 적용을 누르면 조회 조건 머리 줄에 고른 차원 수가 요약됩니다.

조회 조건 머리 줄에 현재 선택된 차원 수가 요약되어 접어 두어도 무엇으로 좁혔는지 알 수 있습니다. 조건을 바꾸면 서버를 다시 부르지 않고 이미 읽어 둔 큐브에서 즉시 다시 계산합니다. 요약 지표와 요인 분해 범위도 같은 조건을 따릅니다.

표와 차트, 임원 요약이 모두 같은 범위를 보여 줍니다. 열 합계와 행 합계는 선택한 값들만 더한 결과입니다. 막대 차트와 표 사이의 손잡이를 끌면 차트 폭을 바꿀 수 있습니다.
칸에서 수입신고 품목 라인까지
피벗 칸을 누르면 그 금액을 만든 수입신고 품목 라인이 열리고, 칸 값과 라인 합이 같은지 머리 줄이 알려 줍니다.

각 라인에는 수입신고번호·품목·신고일·공급사·자재·수량·환율·적용 세율·과세가격·관세·수입 부가세가 보입니다. 머리 줄은 칸의 값과 읽은 라인의 합을 비교하고, 일부만 읽었다면 모두 읽으면 맞춰 본다는 안내를 줍니다. 더 읽기·모두 읽기·CSV 로 이어서 쓰거나 내려받습니다.
계산항목 — 차원으로는 나오지 않는 행
측정값에 없는 비율과 합계를 서버가 정의한 계산식으로 보여 줍니다. 비율은 합산한 뒤에 계산해 평균의 평균 오류를 피합니다.

계산항목은 총 납부 세액, 원가 반영 세액, 세금 반영 취득가액, 실효 관세율, 총 실효 세율 다섯 가지이며 이름 옆 마름모로 구분됩니다. 실효 관세율은 칸마다 관세 합을 과세가격 합으로 나눈 값이라 행을 접어도 올바른 비율이 유지됩니다. 협정세율이 적용된 원산지는 비율이 낮고, 기본세율을 쓴 원산지는 높게 보입니다.
예정 대비 차이 — 같은 표가 세액 점검 리포트가 된다
비교를 예정 대비 차이로 바꾸면 칸마다 차이와 차이율이 붙고, 금액과 비율 임계를 모두 넘은 칸만 색을 입힙니다.

물량 +18.4, 외화 단가 +26.6, 환율 +55.7, 세율 변경 +8.7, 협정 적용 +31.1, 기타 세액 +2.0(백만원)이 차례로 쌓이며 합이 총차이 +142.5 와 같고, 위쪽 검산 줄이 요인 합과 총차이의 차이를 0원으로 보여 줍니다. 표의 붉은색은 예정보다 세액이 늘어난 칸, 초록색은 줄어든 칸이며 금액과 비율 임계를 둘 다 넘을 때만 색이 입혀집니다. 협정 감면액처럼 줄면 불리한 항목은 부호를 뒤집어 판정합니다.

창 위에는 대상 행과 예정 대비 차이가 요약되고, 주된 요인은 환율·세율·협정 적용 같은 구분에서 고릅니다. 내용은 500자까지 적을 수 있습니다. 저장·삭제 버튼으로 같은 행의 사유를 고치거나 지웁니다.

사유는 조회 범위와 행의 경로를 키로 서비스에 저장되어 축 배치를 바꿔도 같은 행이면 따라옵니다. 기간 범위를 바꾸면 다른 키라 지난 기간의 사유가 섞이지 않습니다. 한 행에는 사유가 하나만 남고 다시 적으면 바뀝니다.

차이가 큰 행 중 사유가 없는 곳이 어디인지 한눈에 찾을 수 있어 점검 회의 준비가 쉬워집니다. 사유는 CSV 와 AI 분석 근거에도 함께 실립니다. 사유 버튼은 차이 모드일 때만 나타납니다.
AI 분석과 보고서 — 숫자는 서비스가, 문장은 규칙이
선택한 범위를 읽어 요약·점검 대상·근거 표를 만듭니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 넘기고, 기본 설정에서는 외부 AI 서비스를 부르지 않습니다.

요약은 수입신고 2,088건·원천 라인 5,257건의 총 세액 17.02억원, 예정 15.59억원 대비 +1.43억원(+9.1%)이라고 적고, 가장 큰 요인으로 환율(+5,570만원)을 짚습니다. 협정 대상이나 기본세율을 적용한 신고는 159건, 감면 기회 약 3,708만원으로 점검 필요라고 표시합니다. 점검 대상 행에서 바로 사유를 쓰러 넘어갈 수 있습니다.

표지·요약·핵심 발견·기간별 세액·차트·표·근거 장으로 구성되며 서버를 거치지 않고 내려받습니다. 보고서의 숫자는 화면과 같은 큐브 값이라 보고용으로 다시 옮겨 적을 필요가 없습니다. 파일 이름에는 만든 날짜가 들어갑니다.
AI 에이전트 — 사람이 열지 않아도 돈다
감시 규칙마다 임계와 받을 사람이 붙어 있고, 규칙에 걸리면 받을 사람의 관점으로 숫자를 다시 적어 대기함에 올립니다.

규칙마다 지표·임계·대상 역할·사용 여부가 있고 임계는 화면에서 고쳐 저장합니다. 열어 둔 동안 한 시간마다 실행하는 옵션은 기본이 꺼져 있습니다. 실제 운영에서는 서버 쪽 배치가 같은 실행 호출을 부르도록 둘 수 있습니다.

샘플에서는 다섯 규칙이 모두 걸려 대기함에 올랐습니다. 실행 결과는 하루 한 번만 인정되며, 실행 시각과 호출자가 기록됩니다. 임계를 바꾸고 다시 실행하려면 다음 날을 기다려야 하므로 임계를 정할 때 신중하게 정합니다.

하루 한 번 제한은 화면이 아니라 서버 기록이 판정합니다. 두 번째 실행은 실행 기록에 한도로만 남고 대기함 건수는 그대로입니다. 사람이 여러 명 눌러도, 배치가 부르더라도 같은 기준이 적용됩니다.

각 보고는 제목·받을 사람·걸린 대상과 숫자를 담습니다. 예를 들면 실효 관세율 상한 초과는 CFO, 환율 영향 임계는 자금 책임자, 협정 미적용 감면 기회는 구매 책임자 앞으로 올라갑니다. 같은 날 같은 규칙의 보고는 중복해서 쌓이지 않습니다.

누가 언제 실행했는지와 결과가 한 줄씩 남아 감사 추적에 쓸 수 있습니다. 한도로 끝난 실행은 걸린 규칙이 0/0 으로 표시됩니다. 기록은 서비스에 저장되므로 화면을 닫아도 남습니다.
레이아웃 저장·복원
자주 쓰는 축·조회 조건·표시 항목·비교 설정을 이름 붙여 저장하고, 기본 레이아웃이나 열 때 자동 조회로 지정합니다.

기본으로 지정하면 다음에 열 때 그 배치로 시작하고, 열 때 자동 조회를 켜면 조회까지 마친 채 시작합니다. 레이아웃은 서비스에 저장되어 같은 사용자의 다른 브라우저에서도 이어집니다. 목록에서 적용·삭제·기본 지정을 합니다.

예를 들어 세번 그룹 월별처럼 업무에 맞는 이름을 붙입니다. 저장되는 것은 축 배치, 기간·차원 값 선택, 표시 항목·금액 단위·비교 설정, 행 수입니다. 같은 이름으로 다시 저장하면 덮어씁니다.

화면을 새로 열었는데도 비교가 예정 대비 차이로 되어 있고 금액·비율 임계가 저장한 값으로 채워집니다. 자동 조회를 켜 두었다면 조회 결과까지 이어집니다. 레이아웃은 개인의 작업 방식을 복원하는 장치입니다.
좁은 화면과 한계
창이 좁으면 차트를 감추지 않고 표 아래로 내리며, 큰 범위는 상한과 안내 문구로 한계를 알려 줍니다.

버튼이 모자란 폭에서는 툴바가 줄어 더보기 메뉴에 담깁니다. 입력칸과 선택 목록은 한 줄에 하나씩 쌓입니다. 가로 스크롤 없이 같은 기능을 쓸 수 있도록 맞췄습니다.

열이 많은 표는 표 안에서만 가로로 움직이고 페이지 전체가 옆으로 밀리지 않습니다. 같은 값과 같은 검산을 그대로 보여 줍니다. 큰 표를 깊게 분석할 때는 넓은 화면을 권합니다.

열 조합과 행 수가 상한을 넘으면 범위를 좁히라는 안내가 같은 방식으로 나옵니다. 상한을 넘은 부분을 조용히 잘라 합계를 틀리게 하지 않고 알려 줍니다. 샘플은 9개월 · 5,257 라인이라 상한에 걸리지 않지만 운영 규모에서는 범위 지정이 필수입니다.
화면 뒤에서 일어나는 일
숫자는 서비스가 계산하고 화면은 합산과 배치만 합니다. 판정 규칙과 산출 · 대사 순서는 아래와 같습니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 금액 차이 ≥ 금액 임계 그리고 차이율 ≥ 비율 임계, 세액 증가 | 붉은색(Error) | 요인 워터폴로 주된 요인을 확인하고 사유를 남깁니다 |
| 위와 같고 세액 감소 | 초록색(Success) | 감소 요인이 일회성인지 점검합니다 |
| 금액 임계만 넘고 세액 증가 | 주황색(Warning) | 비율이 작아 추세를 더 지켜봅니다 |
| 그 밖 | 표시 없음 | - |
| 협정 감면액처럼 줄면 불리한 항목 | 부호 반전 판정 | 감면액이 줄면 붉은색으로 보여 줍니다 |
| 큐브 합계와 품목 라인 합계가 다름 | 검산 차이 표시 | 운영 데이터에서는 적재 범위를 점검합니다 |
| 요인 합 − 총차이 ≠ 0 | 검산 줄 붉은색 | 요인 산식을 점검합니다 |
| 에이전트 실행이 같은 날 두 번째 | LIMITED(한도) | 내일 다시 실행합니다. 새 보고는 올라가지 않습니다 |
산출 · 대사 순서
- 과세가격 = 수량 × 외화 단가 × 환율 (원 미만 반올림)
- 관세 = 과세가격 × 적용 관세율 (협정세율을 적용한 신고는 협정세율, 아니면 기본세율)
- 기타 세액 = 과세가격 × 기타 세율
- 수입 부가세 = (과세가격 + 관세 + 기타 세액) × 10% — 샘플의 가정값이며 실제 과세표준은 확인이 필요합니다
- 총 납부 세액 = 관세 + 수입 부가세 + 기타 세액, 원가 반영 세액 = 관세 + 기타 세액(환급 가능한 수입 부가세는 제외)
- 협정 감면액 = 과세가격 × (기본세율 − 협정세율) — 협정세율을 적용한 신고 기준
- 요인 분해 — 품목 라인마다 예정 값을 물량 → 외화 단가 → 환율 → 세율 변경 → 협정 적용 → 기타 세액 순서로 하나씩 실적 값으로 바꿔 가며 총 세액 변화를 잽니다. 정수 원화로 계산하므로 여섯 요인의 합은 총차이와 정확히 같습니다
- 대사 — 큐브 합계 = 품목 라인 합계, 요인 합 = 실적 − 예정, 칸 금액 = 품목 라인 합, 피벗 합계는 축 조합이 달라도 같음
조회 조건
조회 조건은 서비스에 필터로 넘어갑니다. 값을 고르지 않은 차원은 필터에 넣지 않으므로 전체입니다.
| 조건 | 필수 | 기본값 | 조회 필터 |
|---|---|---|---|
| 회사코드 | 필수 | 1000(샘플) | Bukrs eq '1000' |
| 시작 기간 | 필수 | 2026.01 | Period ge '202601' |
| 종료 기간 | 필수 | 2026.09 | Period le '202609' |
| 원산지 · 세번 그룹 · 적용 세율 구분 · 세관 · 공급사 · 자재그룹 · 자재 · 통화 · 인코텀즈 | 선택 | 전체 | 차원별 eq 조건. 차원 안은 or, 차원 사이는 and (예: (Origin eq 'DE' or Origin eq 'ID') and HsGrp eq 'H84') |
| 행 축 / 열 축 | - | 원산지 › 세번 그룹 / 회계기간 | 행 최대 3 · 열 최대 2. 열 조합과 행 수가 상한을 넘으면 범위를 좁히라는 안내가 나옵니다 |
| 표시 항목 · 금액 단위 | - | 총 납부 세액 · 백만원 | 측정값 6종과 계산항목 5종 중 하나 |
| 비교 | - | 실적만 | ‘예정 대비 차이’ 를 고르면 금액 · 비율 임계를 입력합니다 |
결과 컬럼
피벗 표의 값은 큐브에서 오고, 칸을 누르면 아래 컬럼의 수입신고 품목 라인이 열립니다.
| 구분 | 컬럼 | 설명 |
|---|---|---|
| 피벗 행 · 열 | 선택한 차원 값(코드 + 이름) | 행은 트리로 접고 펼칩니다. 열 머리는 회계기간 또는 열 축 조합입니다 |
| 피벗 값 | 실적 · 예정 · 차이 · 차이율 · 사유 | 차이 모드에서만 예정 · 차이 · 차이율이 붙습니다 |
| 품목 라인 | 신고번호 · 품목 · 신고일 · 공급사 · 자재 · 수량 · 통화 · 적용 세율 · 과세가격 · 관세 · 부가세 · 기타 세액 | 머리 줄에 칸 값과 라인 합의 일치 여부, 읽은 건수가 표시됩니다. 더 읽기 · 모두 읽기 · CSV 를 씁니다 |
| 요인 워터폴 | 예정 · 물량 · 외화 단가 · 환율 · 세율 변경 · 협정 적용 · 기타 세액 · 실적 | 위쪽 검산 줄이 요인 합과 총차이의 차이를 표시합니다 |
| AI 분석 | 요약 · 점검 대상 · 근거 표 | 근거 표의 금액은 서비스가 큐브에서 계산한 값입니다 |
좁은 화면에서 달라지는 것
폭이 좁아지면 조회 조건 영역이 한 열로 쌓이고, 툴바 버튼 일부는 더보기 메뉴로 들어갑니다. 차트는 감추지 않고 표 아래로 내려오며, 분석 축 칩은 끌어다 놓기 대신 화살표 버튼으로 옮기는 편이 손가락으로 쓰기 쉽습니다. 390px 폭에서 가로 스크롤 없이 같은 기능을 쓰도록 맞췄습니다. 값이 많은 피벗은 표 안에서만 가로로 움직입니다.
파일 구성
앱 폴더는 아래처럼 나뉩니다. 서비스 구현과 화면이 분리되어 있어, 운영 연결 때 서비스 쪽만 CDS 기반 서비스로 바꾸면 화면은 그대로 씁니다.
(앱 폴더)
├─ index.html · Component.js · manifest.json · readme.html
├─ controller/ Main · Base
├─ view/ Main + 대화상자 5
├─ model/ cube · chart · layout · pptx · formatter · ErrorHandler
├─ css/ · i18n/ · media/ (소개 영상 · 포스터 · 재생 지점)
└─ odata/ 서비스 선언(metadata) · 서비스 구현 · 검증용 샘플 데이터
SAP 표준 기능 확장 포인트
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다. 구매오더 · 입고 · 송장 검증 · 전표 조회는 그대로 표준에서 하고, 그 문서들에 흩어져 있는 수입 세액을 한 큐브로 모아 “어디서 얼마가 왜 달라졌나” 를 보는 자리를 더합니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | SAP 표준 | 표준 화면의 범위 | 이 앱이 더하는 것 |
|---|---|---|---|
| 구매오더의 수량 · 단가 · 환율 확인 | ME23N | 오더 한 건씩 조회합니다 | 예정 세액의 원천으로 읽어 신고 값과 나란히 놓습니다 |
| 입고 수량과 입고 문서 | MIGO · MB51 | 입고 처리와 자재 문서 목록을 담당합니다 | 입고 문서를 신고 라인에 붙여 수량을 대조합니다 |
| 관세 · 부가세 청구 금액 | MIRO | 송장 단위로 검증합니다 | 세액을 신고 라인과 같은 차원으로 모아 봅니다 |
| 세액 전표 확인 | FB03 | 전표 한 건씩 조회합니다 | 칸에서 내려간 품목 라인과 전표를 맞춰 보는 경로를 줍니다 |
| 원산지 · 세번 · 세관별 다차원 집계 | 없음 | 문서 단위 화면이라 차원 조합 집계는 별도 구성이 필요합니다 | 11개 차원 피벗과 품목 라인 드릴스루 |
| 예정 대비 세액 차이의 요인 분해 | 없음 | 표준 화면의 범위 밖이라 보통 별도 계산으로 합니다 | 여섯 요인으로 가르고 합계를 검산합니다 |
| 협정 미적용 감면 기회 점검 | 없음 | 신고 정보 연계 방식에 따라 확인 방법이 다릅니다 | 협정 대상인데 기본세율로 신고된 건을 세어 금액으로 보여 줍니다 |
수입신고 정보(수입신고번호 · 세번 · 적용 세율 · 세관 · 확정 세액)는 외부 관세 신고 시스템과의 연계 방식에 따라 SAP 안의 위치가 달라집니다. 표준 테이블 어디에 있는지는 확인 필요로 표시했고, 연계 방식이 정해지면 아래 CDS 구성의 기반 뷰만 바꾸면 됩니다.
T-code 별 연계 지점
| T-code | 표준 화면 | 이 앱과의 관계 |
|---|---|---|
ME23N | 구매오더 조회 | 예정 세액의 원천 — 수량 · 외화 단가 · 예정 환율 · 인코텀즈를 읽습니다 |
MIGO | 입고 처리 | 실제 입고 수량이 만들어지는 자리입니다 |
MB51 | 자재 문서 목록 | 품목 라인의 입고 문서를 이 목록과 대조합니다 |
MIRO | 송장 검증 | 관세 · 부가세 청구 금액이 들어오는 자리입니다 |
FB03 | 전표 조회 | 세액이 취득원가와 부가세 계정에 반영된 전표를 확인합니다 |
S/4HANA 분석 스택과의 자리
아래 CDS 구성은 큐브와 분석 쿼리까지 만들어 두는 것을 전제로 합니다. 분석 쿼리로 노출한 정의는 SAP 의 분석 도구가 같은 이름으로 읽을 수 있고, 이 앱은 그 위에서 업무 확장을 맡습니다 — 칸에서 품목 라인으로 내려가기, 예정 대비 요인 분해, 행에 남는 사유, 규칙에 따라 도는 에이전트, 결재용 보고서입니다. 어떤 분석 도구가 어떤 쿼리를 읽는지는 환경에 따라 다르므로 도입 시 확인 필요입니다.
분석 지표 정의표
| 지표 | 산식 · 판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 총 납부 세액 | 관세 + 수입 부가세 + 기타 세액 | 표 · 차트 · 임원 요약 | 수입신고 세액 · 송장 청구 금액 | 계산항목 |
| 원가 반영 세액 | 관세 + 기타 세액(환급 가능한 부가세 제외) | 표 · 임원 요약 | 같음 | 재고 취득원가에 더해지는 세액 |
| 실효 관세율 | 관세 ÷ 과세가격 × 100 | 표 · 규칙 R01 | 같음 | 비율은 합산한 뒤 계산 |
| 총 실효 세율 | 총 납부 세액 ÷ 과세가격 × 100 | 표 · 임원 요약 | 같음 | 샘플의 부가세율은 가정값 |
| 협정 감면액 | 과세가격 × (기본세율 − 협정세율) | 구매 책임자 요약 · 규칙 R03 | 세율표는 확인 필요 | 가정값 샘플 |
| 예정 대비 차이 | 실적 − 예정 | 차이 모드 | 예정은 구매오더 조건 기준 | 가정값 샘플 |
| 요인 6종 | 품목 라인별 순차 치환 | 워터폴 · AI 해설 | 항목 단위 계산 | 합 = 총차이 |
확장 포인트
운영에서 손대는 자리를 미리 적어 둡니다. 대부분은 서비스(또는 CDS)만 바꾸고 화면은 그대로입니다.
| 확장 지점 | 바꾸는 것 | 영향 범위 |
|---|---|---|
| 차원 추가(공급사 국가 · 플랜트 등) | 큐브의 차원 목록과 차원 설명 | 축 칩에 자동으로 나타남 |
| 측정값 · 계산항목 추가 | 큐브 측정값 또는 계산식 정의 | 표시 항목 목록에 나타남 |
| 요인 산식 순서 | 품목 라인 단위 순차 치환 순서 | 워터폴 · AI 해설 · 에이전트 보고 |
| 감시 규칙 · 임계 · 받을 사람 | 규칙 정의 | 화면에서 임계를 고치고, 규칙 추가는 서비스 쪽 정의를 넓힘 |
| 세율표 · 협정 적용 요건 | 세율 기준 테이블과 적용 판정 | 협정 감면액 · 협정 미적용 점검 |
| 권한 | 큐브를 읽는 자리의 접근 제어 | 모든 화면 · AI 분석 · 에이전트 |
CDS 구성
샘플 자료에서는 품목 라인 5,257행을 서비스가 큐브 4,998행으로 묶어 주고, 브라우저가 그 큐브를 들고 다시 묶습니다. 데모라서 되는 일이고, 운영 데이터에서는 그렇게 하지 않습니다. 운영으로 올릴 때 가장 먼저 하는 일이 집계를 CDS 로 내리는 것입니다. 아래는 그때 만드는 뷰들을 레이어 순서대로 적은 것입니다.
코드는 스케치입니다. 필드 이름과 신고 정보의 위치는 환경과 연계 방식에 따라 다르므로, 그대로 붙여 넣기 전에 실제 이름을 확인해야 합니다. 확인이 필요한 자리는 주석에 적어 두었습니다. 수입신고 정보(세번 · 적용 세율 · 세관 · 확정 세액)는 외부 관세 신고 시스템 연계 방식에 따라 SAP 안의 위치가 달라집니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | zimp_hsmap · zimp_rate | 세번 → 세번 그룹 매핑, 세번 × 적용 구분 세율표 | 세번과 세율은 바뀝니다. 코드에 박으면 바뀔 때마다 개발자를 부르게 됩니다. |
| 차원 | ZI_ImpDutyVendor · ZI_ImpDutyHsGroup | 공급사 · 세번 그룹 한 행 + 이름 | 큐브에서 join 을 한 번만 걸고, 값 도움말과 이름이 이 뷰 하나를 보게 합니다. |
| 기반 | ZR_ImpDutyLine | 구매오더 · 입고 · 신고 세액을 품목 라인 한 행으로 묶음 | 화면의 드릴스루가 읽는 자리입니다. 합계가 이 행들의 합과 같아야 합니다. |
| 큐브(실적) | ZC_ImpDutyCube | 품목 라인을 차원 조합으로 집계 | 화면이 들고 묶던 일을 DB 로 내립니다. |
| 큐브(예정) | ZC_ImpDutyPlanCube | 구매오더 시점 값으로 만든 예정 세액 | 키가 어긋나면 예정이 실적 옆에 붙지 않고 따로 뜹니다. |
| 쿼리 | ZA_ImpDutyQuery | 행 · 열 기본 배치와 계산 측정값 | 분석 도구가 같은 정의를 그대로 읽습니다. |
| 권한 | ZA_ImpDutyQuery (DCL) | 회사코드 · 플랜트 | 집계를 읽는 자리에 걸어야 뺄셈으로 새지 않습니다. |
| 서비스 | ZA_ImpDutyAnalysis | 쿼리와 큐브를 OData 로 노출 | 앱이 바라보는 문입니다. |
① 세번 그룹 매핑과 세율표
세번 하나가 어느 그룹에 속하고 원산지별로 어느 세율이 적용되는지가 이 표에서 갈립니다. 리포트 숫자의 모양을 정하는 자리라 운영 전환에서 가장 먼저 합의해야 하는 항목입니다. 유효기간을 둔 이유는 세율이 바뀐 뒤에도 과거 숫자가 흔들리지 않게 하기 위해서입니다. 샘플의 세율은 가정값입니다.
" ────────────────────────────────────────────────────────────────
" zimp_hsmap · zimp_rate — 세번 그룹 매핑과 세율표 (투명 테이블)
" 운영에서는 관세사·구매팀이 관리하는 세번 체계를 그대로 옮겨 담는다.
" 코드에 박지 않는 이유 : 세번과 세율은 바뀌고, 바뀔 때마다
" 개발자를 부르게 만들면 리포트가 금방 낡는다.
" ※ 세율 값은 샘플의 가정값이다. 실제 적용 세율과 협정 요건은
" 회사와 관세사가 확인한 값으로 채워야 한다(확인 필요).
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '세번 그룹 매핑'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C " 고객 유지 — 전송(TR)으로 옮긴다
@AbapCatalog.dataMaintenance : #ALLOWED " SM30 뷰를 함께 만들어 둔다
define table zimp_hsmap {
key mandt : mandt not null;
key hs4 : abap.char(4) not null; " 세번 앞 4자리
hs_grp : abap.char(3); " 세번 그룹 (예: H84)
hs_name : abap.char(40);
valid_from : abap.dats;
valid_to : abap.dats;
}
@EndUserText.label : '세번 × 적용 구분 세율표'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
define table zimp_rate {
key mandt : mandt not null;
key hs4 : abap.char(4) not null;
key origin : land1 not null; " 원산지
gen_rate : abap.dec(5,2); " 기본세율(%)
agr_rate : abap.dec(5,2); " 협정세율(%) — 협정 대상이 아니면 비움
other_rate : abap.dec(5,2); " 기타 세율(%)
valid_from : abap.dats;
}
② 공급사 · 세번 그룹 차원 뷰
차원마다 이름과 값 도움말이 이 뷰 하나를 보게 합니다. 큐브에서 이름 join 을 매번 걸지 않고 연관(association)으로 걸어 두면, 쓰지 않는 차원은 읽지도 않습니다.
" ────────────────────────────────────────────────────────────────
" ZI_ImpDutyVendor — 공급사 차원
" 차원 뷰를 따로 두는 이유 : 큐브에서 join 을 한 번만 걸고,
" 값 도움말과 이름이 이 뷰 하나를 보게 하기 위해서다.
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '수입 공급사 차원'
@Analytics.dataCategory : #DIMENSION
@ObjectModel.representativeKey : 'Vendor'
define view entity ZI_ImpDutyVendor
as select from lfa1
{
@EndUserText.label : '공급사'
key lifnr as Vendor,
@EndUserText.label : '공급사명'
name1 as VendorName,
@EndUserText.label : '공급사 국가'
land1 as Country
}
" ── 세번 그룹 차원 — 매핑 테이블에서 한 행씩 세운다.
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #NOT_REQUIRED
@EndUserText.label : '세번 그룹 차원'
@Analytics.dataCategory : #DIMENSION
@ObjectModel.representativeKey : 'HsGrp'
define view entity ZI_ImpDutyHsGroup
as select distinct from zimp_hsmap
{
key hs_grp as HsGrp,
hs_name as HsGrpName
}
③ 수입신고 품목 라인 — 기반 뷰
구매오더(EKKO · EKPO)와 입고 이력(EKBE)에 외부 신고 품목을 붙여 한 행으로 만듭니다. 신고 정보가 SAP 안의 어느 테이블에 오는지는 연계 방식에 따라 달라 확인 필요이므로, 이 뷰의 첫 번째 join 만 바꾸면 위쪽 뷰는 그대로 둡니다. 화면의 드릴스루가 읽는 자리이기도 합니다.
" ────────────────────────────────────────────────────────────────
" ZR_ImpDutyLine — 수입신고 품목 라인 (기반 뷰)
" 구매오더 · 입고 · 신고 세액을 품목 라인 한 행으로 묶는다.
" 화면의 드릴스루가 읽는 자리이자 큐브가 더하는 원천이므로
" 여기 합계와 큐브 합계는 항상 같아야 한다.
"
" zimp_decl_item 은 외부 관세 신고 시스템에서 들여온 신고 품목을
" 담는 인터페이스 테이블의 예시 이름이다 — 실제 연계 방식과 위치는 확인 필요.
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '수입신고 품목 라인'
define view entity ZR_ImpDutyLine
as select from zimp_decl_item as Dcl
inner join ekpo as Po on Po.ebeln = Dcl.ebeln
and Po.ebelp = Dcl.ebelp
inner join ekko as Hd on Hd.ebeln = Po.ebeln
left outer join ekbe as Gr on Gr.ebeln = Po.ebeln
and Gr.ebelp = Po.ebelp
and Gr.vgabe = '1' " 입고 이력
inner join zimp_hsmap as Hs on Hs.hs4 = substring( Dcl.hs_code, 1, 4 )
{
key Dcl.decl_no as DeclNo,
key Dcl.item_no as ItemNo,
Hd.bukrs as Bukrs,
Po.werks as Werks, " 권한에만 쓰는 키
Dcl.decl_date as DeclDate,
left( cast( Dcl.decl_date as abap.char(8) ), 6 ) as Period, " 202601 형식
Hd.lifnr as Vendor,
Po.herkl as Origin, " 원산지 — 확인 필요
Hs.hs_grp as HsGrp,
Dcl.hs_code as HsCode,
Dcl.tariff_type as Tariff, " AGR · MISS · GEN
Dcl.customs as Customs,
Po.matkl as MatGrp,
Po.matnr as Material,
Hd.inco1 as Incoterms,
Hd.waers as Currency,
Po.ebeln as PoNo,
Gr.belnr as GrDoc,
@Semantics.quantity.unitOfMeasure : 'Unit'
Dcl.qty as Qty, " 신고 수량
Po.meins as Unit,
Po.menge as PlanQty, " 예정 수량(구매오더)
Po.netpr as PlanFcPrice, " 예정 외화 단가
Dcl.plan_agr_flag as PlanApplied, " 예정 시 협정 적용 전제 — 확인 필요
Hd.wkurs as PlanFxRate, " 예정 환율
Dcl.fx_rate as FxRate, " 신고 환율
@Semantics.amount.currencyCode : 'Krw'
Dcl.cust_val as CustVal, " 과세가격
@Semantics.amount.currencyCode : 'Krw'
Dcl.duty as Duty,
@Semantics.amount.currencyCode : 'Krw'
Dcl.vat as Vat,
@Semantics.amount.currencyCode : 'Krw'
Dcl.other_tax as OtherTax,
cast( 'KRW' as abap.cuky ) as Krw
}
④ 실적 큐브
차원 조합마다 한 행입니다. group by 에 올린 필드가 곧 리포트에서 쓸 수 있는 차원이 됩니다. 여기에 없는 차원은 화면에서도 쓸 수 없습니다. 차원을 늘릴수록 행이 곱으로 늘어 집계 효과가 줄어드므로, 처음에 필요한 만큼만 넉넉하게 잡습니다.
" ────────────────────────────────────────────────────────────────
" ZC_ImpDutyCube — 실적 큐브
" 차원 조합마다 한 행. 품목 라인을 DB 에서 더해 올린다.
" group by 에 올린 필드가 곧 리포트에서 쓸 수 있는 차원이다.
" 여기에 없는 차원은 화면에서도 쓸 수 없다.
"
" 협정 감면액(Saved)은 협정세율을 적용한 신고에만 값이 생긴다:
" 과세가격 × (기본세율 − 협정세율)
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #CHECK " ← DCL 을 반드시 붙인다
@EndUserText.label : '수입 세액 다차원 큐브 (실적)'
@Analytics.dataCategory : #CUBE
define view entity ZC_ImpDutyCube
as select from ZR_ImpDutyLine as L
left outer join zimp_rate as R
on R.hs4 = substring( L.HsCode, 1, 4 )
and R.origin = L.Origin
association [0..1] to ZI_ImpDutyVendor as _Vendor on _Vendor.Vendor = $projection.Vendor
association [0..1] to ZI_ImpDutyHsGroup as _HsGrp on _HsGrp.HsGrp = $projection.HsGrp
{
key L.Bukrs, key L.Period, key L.Origin, key L.HsGrp, key L.Tariff,
key L.Customs, key L.Vendor, key L.MatGrp, key L.Material,
key L.Currency, key L.Incoterms, key L.Werks,
" 분기 — 신고월에서 파생한다(전표에 없는 차원)
concat( 'Q', cast( division( cast( right( L.Period, 2 ) as abap.int4 ) + 2, 3, 0 )
as abap.char(1) ) ) as Quarter,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( L.CustVal ) as CustVal,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( L.Duty ) as Duty,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( L.Vat ) as Vat,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( L.OtherTax ) as OtherTax,
" 협정 감면액 — 협정 적용 건만. 비율은 이 합계가 아니라 쿼리에서 합산 후 계산한다.
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( case when L.Tariff = 'AGR'
then cast( L.CustVal * ( R.gen_rate - R.agr_rate ) / 100 as abap.curr(23,0) )
else 0 end ) as Saved,
@DefaultAggregation : #SUM
@Semantics.quantity.unitOfMeasure : 'Unit'
sum( L.Qty ) as Qty,
@Semantics.unitOfMeasure : true
max( L.Unit ) as Unit,
@Semantics.currencyCode : true
max( L.Krw ) as Krw,
_Vendor, _HsGrp
}
group by
L.Bukrs, L.Period, L.Origin, L.HsGrp, L.Tariff, L.Customs, L.Vendor,
L.MatGrp, L.Material, L.Currency, L.Incoterms, L.Werks
⑤ 예정 큐브
실적과 같은 키 모양으로 맞추는 것이 전부입니다. 예정 환율과 수량은 구매오더에서, 세율은 세율표에서 오는데, 예정 세율을 구매오더 조건에서 읽을지 세율표에서 읽을지는 도입 때 합의합니다.
" ────────────────────────────────────────────────────────────────
" ZC_ImpDutyPlanCube — 예정 큐브
" 실적 큐브와 같은 키 모양으로 맞추는 것이 전부다. 키가 어긋나면
" 예정이 실적 옆에 붙지 않고 따로 뜬다.
"
" 예정 값은 구매오더 시점의 수량 · 외화 단가 · 예정 환율과 세율표로 만든다:
" 예정 과세가격 = 수량 × 외화 단가 × 예정 환율
" 예정 관세 = 예정 과세가격 × 예정 적용 세율(협정 대상이면 협정세율)
" 예정 세율의 원천(구매오더 조건 vs 세율표)은 도입 때 합의한다(확인 필요).
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #CHECK
@EndUserText.label : '수입 세액 다차원 큐브 (예정)'
@Analytics.dataCategory : #CUBE
define view entity ZC_ImpDutyPlanCube
as select from ZR_ImpDutyLine as L
left outer join zimp_rate as R
on R.hs4 = substring( L.HsCode, 1, 4 ) and R.origin = L.Origin
{
key L.Bukrs, key L.Period, key L.Origin, key L.HsGrp, key L.Tariff,
key L.Customs, key L.Vendor, key L.MatGrp, key L.Material,
key L.Currency, key L.Incoterms, key L.Werks,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( cast( L.PlanQty * L.PlanFcPrice * L.PlanFxRate as abap.curr(23,0) ) ) as PlanCustVal,
@DefaultAggregation : #SUM
@Semantics.amount.currencyCode : 'Krw'
sum( cast( L.PlanQty * L.PlanFcPrice * L.PlanFxRate
* case when L.PlanApplied = 1 then R.agr_rate else R.gen_rate end / 100
as abap.curr(23,0) ) ) as PlanDuty,
@Semantics.currencyCode : true
max( L.Krw ) as Krw
}
group by
L.Bukrs, L.Period, L.Origin, L.HsGrp, L.Tariff, L.Customs, L.Vendor,
L.MatGrp, L.Material, L.Currency, L.Incoterms, L.Werks
⑥ 분석 쿼리
이 뷰까지 만들어 두면 앱이 없어도 축은 바꿀 수 있습니다. 이 앱이 더하는 것은 그다음 — 품목 라인 드릴스루 · 예정 대비 요인 분해 · 사유 · 에이전트입니다. 실효 관세율은 합산한 뒤에 계산하도록 쿼리에 한 번만 정의합니다.
" ────────────────────────────────────────────────────────────────
" ZA_ImpDutyQuery — 분석 쿼리
" 이 뷰를 만들어 두면 분석 도구가 같은 정의를 그대로 읽는다.
" 앱이 없어도 축은 바꿀 수 있고, 앱은 그 위의 업무 확장을 맡는다.
"
" 비율(실효 관세율)은 쿼리에서 합산한 뒤에 계산한다.
" 행마다 계산한 비율을 평균하면 평균의 평균이 되어 틀린다.
" ────────────────────────────────────────────────────────────────
@AbapCatalog.viewEnhancementCategory : [#NONE]
@AccessControl.authorizationCheck : #NOT_REQUIRED " 큐브에서 이미 검사했다
@EndUserText.label : '수입 관세·부가세 다차원 분석'
@Analytics.query : true
define view entity ZA_ImpDutyQuery
as select from ZC_ImpDutyCube
{
@AnalyticsDetails.query.axis : #ROWS
@AnalyticsDetails.query.display : #KEY_TEXT
@EndUserText.label : '원산지'
Origin,
@AnalyticsDetails.query.axis : #ROWS
@EndUserText.label : '세번 그룹'
HsGrp,
@AnalyticsDetails.query.axis : #COLUMNS
@EndUserText.label : '회계기간'
Period,
@AnalyticsDetails.query.axis : #FREE " 끌어다 쓸 수 있게 열어 둔다
Tariff,
@AnalyticsDetails.query.axis : #FREE
Customs,
@AnalyticsDetails.query.axis : #FREE
Vendor,
@AnalyticsDetails.query.axis : #FREE
Material,
@AnalyticsDetails.query.axis : #FREE
Incoterms,
" 선택 변수 — 실행할 때 사용자가 넣는다
@Consumption.filter : { selectionType : #SINGLE, multipleSelections : false,
mandatory : true }
Bukrs,
Duty,
Vat,
OtherTax,
CustVal,
Saved,
@EndUserText.label : '실효 관세율(%)'
@AnalyticsDetails.query.formula : 'case when $projection.CustVal = 0 then 0
else $projection.Duty / $projection.CustVal * 100 end'
@AnalyticsDetails.query.decimals : 2
0 as DutyRate
}
⑦ 권한 (DCL)
권한을 드릴스루가 아니라 큐브를 읽는 자리에 거는 이유는 뺄셈 때문입니다. 전사 합계는 볼 수 있고 드릴스루만 막히면, 권한 없는 사람이 합계에서 자기 몫을 빼서 남의 숫자를 알아냅니다.
" ────────────────────────────────────────────────────────────────
" ZA_ImpDutyQuery — 권한 (DCL)
" 집계 화면에서 권한을 드릴스루에만 걸면, 권한 없는 사람이
" 전사 합계와 자기 몫의 차이를 빼서 남의 숫자를 알아낸다.
" 그래서 큐브를 읽는 자리에 건다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '수입 세액 큐브 권한'
@MappingRole : true
define role ZA_ImpDutyQuery {
grant select on ZC_ImpDutyCube
where ( Bukrs ) = aspect pfcg_auth ( F_BKPF_BUK, BUKRS, ACTVT = '03' )
and ( Werks ) = aspect pfcg_auth ( M_BEST_WRK, WERKS, ACTVT = '03' );
grant select on ZC_ImpDutyPlanCube
where ( Bukrs ) = aspect pfcg_auth ( F_BKPF_BUK, BUKRS, ACTVT = '03' )
and ( Werks ) = aspect pfcg_auth ( M_BEST_WRK, WERKS, ACTVT = '03' );
}
⑧ 서비스 정의와 바인딩
앱이 바라보는 문입니다. 쿼리와 큐브, 차원만 열고 기반 뷰는 열지 않습니다. 사유 · 레이아웃 · 규칙 · 에이전트 기록은 읽기 전용 CDS 로 둘 수 없으므로 쓰기 가능한 객체로 따로 둡니다.
" ────────────────────────────────────────────────────────────────
" ZA_ImpDutyAnalysis — 서비스 정의와 바인딩
" 앱이 바라보는 문. 쿼리와 큐브만 열고 기반 뷰는 열지 않는다.
" 품목 라인 드릴스루는 기반 뷰를 직접 열지 않고 큐브의 키로 좁혀서 읽는다.
" ────────────────────────────────────────────────────────────────
@EndUserText.label : '수입 관세·부가세 다차원 분석 서비스'
define service ZA_ImpDutyAnalysis {
expose ZA_ImpDutyQuery;
expose ZC_ImpDutyCube;
expose ZC_ImpDutyPlanCube;
expose ZI_ImpDutyVendor;
expose ZI_ImpDutyHsGroup;
}
" 서비스 바인딩 : ZA_ImpDutyAnalysis_V2 (바인딩 유형 OData V2 – UI)
" 활성화한 뒤 서비스 URL 을 앱의 데이터 소스에 지정한다.
" 사유 · 레이아웃 · 규칙 · 에이전트 기록은 읽기 전용 CDS 가 아니라
" 별도의 쓰기 가능한 객체(RAP 관리형 또는 사용자 정의 테이블)로 둔다.
운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다. 아래 표의 왼쪽은 대부분 코딩이 아니라 합의입니다.
| 정해야 할 것 | 정하지 않으면 | 결정 주체 |
|---|---|---|
| 세번 → 세번 그룹 · 원산지 매핑 | 리포트 묶음이 기존 신고 집계와 어긋나 첫 회의에서 막힙니다 | 관세 · 구매팀 |
| 예정 값의 원천(구매오더 조건 · 예정 환율) | "예정이 왜 이 숫자냐" 가 반복됩니다 | 구매 · 재무팀 |
| 신고 정보 연계 방식(외부 신고 시스템) | 세번 · 적용 세율 · 세관 · 세액을 읽어 올 길이 없습니다 | IT · 관세사 |
| 협정세율표와 적용 요건 확인 절차 | 감면 기회 금액이 후보 수준을 넘어 단정으로 읽힙니다 | 관세사 · 구매팀 |
| 권한 기준(회사코드 · 플랜트) | 합계는 보이는데 드릴스루만 막히면 뺄셈으로 새어 나갑니다 | 보안 · 권한 |
| 쓰기 범위와 배치 주기(사유 · 규칙 · 에이전트) | 사유가 사라지거나 점검이 사람이 열 때만 돕니다 | Basis · 재무팀 |
위 여섯 가지는 코딩이 아니라 합의입니다. 합의가 끝나면 기술 작업은 CDS 뷰(큐브 · 예정 · 분석 쿼리 · 권한)를 만들고 화면을 올리는 일로, 이 글에 코드와 함께 공개해 두었습니다.
숫자를 믿을 수 있는가 — 검증 결과
리포트에서 가장 비싼 질문은 "이 숫자 맞아?" 입니다. 만드는 쪽에서 먼저 대사식을 세워 전수로 돌린 결과입니다.
| 대사식 | 검사 건수 | 차이 | 비고 |
|---|---|---|---|
| 큐브 합계 = 원천 라인 합계 | 12 | 0 | 실적 · 예정, 측정값 6종 |
| 라인별 세액 재계산 | 10,514 | 0 | 과세가격 · 관세 · 부가세 · 기타 세액 (실적 · 예정) |
| 협정 감면액 = 기본세율 관세 − 부과 관세 | 5,257 | 0 | 협정 적용 건 기준 |
| 요인 합 = 총차이 | 5,320 | 0 | 라인 5,257 + 축별 집합 |
| 워터폴 끝값 = 실적(검산 줄 0) | 20 | 0 | 예정 + Σ요인 = 실적 |
| 피벗 총합 = 큐브 총합 | 480 | 0 | 축 배치 8가지 · 측정값 6종 · 행 합 · 열 합 |
| 계산항목 = 식 결과 | 105 | 0 | 전체 합 5종 + 칸 20개 × 5종 |
| 칸 금액 = 드릴스루 라인 합계 | 162 | 0 | 칸 약 36개 × 측정값 6종 |
| 다중 선택 필터 후 합계 | 18 | 0 | 선택 3종 |
| 기준 대비 차이 = 실적 − 예정 | 48 | 0 | 원산지 8 × 측정값 6 |
| 조회 필터 · 정렬 · 페이징 | 3 | 0 | 날짜 조건 3월 신고 643건 |
| 요인분해 · 해설 · 에이전트 · 사유 저장 | 5 | 0 | 하루 한 번 제한 포함 |
대사 12종 전부 차이 0. 화면 쪽은 따로 자동화로 돌려 축을 바꿔도 합계가 변하지 않는지, 셀 금액과 품목 라인 합계가 같은지를 매번 다시 잽니다.
검증은 샘플 자료로 한 것입니다. 샘플에서는 단일 통화(원) 환산 금액만 합산하며 통화별 외화 금액은 합산하지 않습니다. 협정세율과 부가세율은 샘플을 위한 가정값이므로, 운영 데이터에서는 확인된 세율표로 같은 대사를 다시 돌려야 합니다.
운영 데이터로 갈 때
샘플은 품목 라인 5,257행이 큐브 4,998행으로 묶입니다. 신고가 수십만 건으로 늘어도 큐브 행 수는 신고 건수가 아니라 차원 조합 수를 따라갑니다. 그래서 집계만 DB 로 내리면 화면이 들고 있을 행 수는 크게 달라지지 않습니다.
| 구간 | 어떻게 되나 | 무엇을 손보나 |
|---|---|---|
| 큐브 수천 행 | 지금 방식 그대로 — 브라우저가 들고 묶어도 걸리지 않습니다 | 손볼 것 없음 |
| 큐브 수만 행 | 축을 바꿀 때 눈에 띄게 걸립니다 | CDS 에서 집계 수준을 올립니다(쓰지 않는 차원을 빼거나 기간을 묶음) |
| 큐브 수십만 행 | 브라우저가 들고 있을 수 없습니다 | 묶기를 서비스로 옮기고 필요한 조합만 받습니다 |
| 품목 라인 조회 | 전체를 내리면 용량이 큽니다 | 500행씩 받고 건수는 숫자만 받습니다(화면의 '원천 라인 읽는 단위') |
드릴스루는 집계가 아니라 조회입니다. 칸 하나에 매달린 라인이 너무 많으면 그 화면이 열리지 않으므로, 건수를 먼저 세어 보고 일정 수를 넘으면 범위를 좁히라고 안내하는 편이 낫습니다. 이 앱도 열 조합이나 행 수가 상한을 넘으면 그리지 않고 안내를 띄웁니다.
자주 묻는 질문
도입 상담과 데모에서 자주 받는 질문입니다. 네 묶음으로 나눠 적었습니다.
도입과 활용
이 앱을 쓰면 무엇이 달라집니까? 누가 쓰나요?
수입 세액이 늘었다는 사실에서 멈추지 않고 어디서 · 왜 · 누가 손볼 수 있는지까지 한 화면에서 이어 봅니다. 임원 요약은 역할별로 앞세우는 지표가 다릅니다 — CFO 는 실효 세율, 구매 책임자는 협정 감면 기회와 관세 초과, 물류 책임자는 세관별 수입 부가세, 자금 책임자는 통화별 총 세액을 먼저 봅니다. 같은 큐브에서 나오므로 역할을 바꿔도 합계는 같습니다.
언제부터 쓸 수 있습니까?
검증용 샘플 자료로 먼저 둘러볼 수 있습니다. 운영 데이터 적용 시기는 신고 정보 연계 방식과 세율표 합의가 끝나야 정해지므로 현재 확인 필요입니다. 합의 항목은 CDS 구성의 ‘운영 시점에 해야 할 일’ 표에 정리했습니다.
표준 T-code(ME23N · MIGO · MB51 · MIRO · FB03)를 대체합니까?
아닙니다. 구매오더 · 입고 · 송장 검증 · 전표 조회는 그대로 표준 T-code 에서 합니다. 이 화면은 그 문서들에 흩어져 있는 수입 세액을 한 큐브로 모아 보는 조회 · 검증 관점을 더해 확장합니다. 칸에서 내려간 품목 라인의 입고 문서와 구매오더 번호로 표준 화면과 맞춰 볼 수 있습니다.
분석 결과를 그대로 신고나 결산에 써도 됩니까?
이 화면은 분류 · 집계 · 차이 확인을 돕는 점검 도구입니다. 최종 판단은 회사와 감사인이 하며, 세무 신고는 회사와 세무 대리인 · 관세사가 확인해야 합니다. 화면의 숫자는 점검 대상을 좁히는 데 쓰시고, 신고와 결산에 쓰는 값은 표준 거래와 확정 신고서에서 가져오시기 바랍니다.
협정 미적용 감면 기회 금액은 확정된 금액입니까?
아닙니다. 협정 대상인데 기본세율로 신고된 건을 세어 ‘기본세율 − 협정세율’ 로 계산한 점검 후보 금액입니다. 샘플에서는 신고 159건(품목 라인 402건) · 약 3,708만원이 잡혔지만, 실제 협정 적용 요건과 증빙 충족 여부는 회사와 관세사가 확인해야 합니다. 샘플의 세율은 가정값입니다.
K-IFRS 제1002호 재고자산과는 어떤 관계입니까?
환급되지 않는 수입 관세는 재고 취득원가에 포함되고 환급 가능한 수입 부가세는 포함되지 않습니다. 그래서 화면은 총 납부 세액과 원가 반영 세액(관세 + 기타 세액)을 나란히 둡니다. 화면은 업무 분석용이며 기준서 해석을 단정하지 않습니다. 회계처리의 최종 판단은 회사와 감사인이 합니다.
데이터와 숫자
데이터는 어디서 옵니까? 표준 데이터와 어긋나지 않습니까?
샘플 자료는 검증용으로 만든 가상 데이터(품목 라인 5,257건)입니다. 운영에서는 구매오더(EKKO · EKPO)와 입고 이력(EKBE), 송장(RBKP · RSEG), 가격 조건(PRCD_ELEMENTS)에 외부 신고 정보를 붙여 읽습니다. 신고 품목 라인의 합이 큐브 합계와 같은지를 매번 대사하므로, 어긋나면 적재 범위부터 점검합니다.
수입신고 정보는 SAP 의 어디에서 읽습니까?
수입신고번호 · 세번 · 적용 세율 · 세관 · 확정 세액은 외부 관세 신고 시스템과의 연계 방식에 따라 SAP 안에서 놓이는 자리가 다릅니다. 현재 확인 필요이며, 연계 방식이 정해지면 CDS 구성의 기반 뷰(수입신고 품목 라인)만 바꾸고 위쪽 뷰와 화면은 그대로 둡니다.
환율은 어떻게 처리합니까?
과세가격은 수량 × 외화 단가 × 환율로 원 단위까지 계산하고, 예정은 구매오더 시점의 예정 환율, 실적은 신고 환율을 씁니다. 두 환율의 차이가 만드는 몫은 요인 분해에서 환율 요인으로 따로 나옵니다(샘플 +55.7 백만원). 합산은 원 환산 금액으로만 하고 통화별 외화 금액은 더하지 않습니다. 환율 영향 규칙(임계 3천만원)에 걸리면 자금 책임자에게 보고가 갑니다.
예정 값은 어디서 옵니까?
구매오더 시점의 수량 · 외화 단가 · 예정 환율과 예정 적용 세율로 만든 값입니다. 예정 세율을 구매오더 가격 조건에서 읽을지 별도 세율표에서 읽을지는 도입 때 합의해야 하며 현재 확인 필요입니다. 이 합의가 없으면 “예정이 왜 이 숫자냐” 가 반복됩니다.
여섯 요인의 합이 총차이와 정확히 같다는 것은 어떻게 보장합니까?
품목 라인마다 예정 값을 물량 → 외화 단가 → 환율 → 세율 변경 → 협정 적용 → 기타 세액 순서로 하나씩 실적 값으로 바꿔 가며 총 세액 변화를 잽니다. 마지막 단계의 값이 실적이므로 정수 원화 계산에서 합이 총차이와 정확히 같고, 화면의 검산 줄이 그 차이를 0원으로 보여 줍니다. 요인 순서를 바꾸면 요인별 금액은 달라지지만 합은 변하지 않습니다.
숫자가 맞는지 어떻게 확인했습니까?
대사 12종을 전수로 돌렸고 모두 차이 0 입니다 — 큐브 합계와 원천 라인 합계, 라인별 세액 재계산 10,514건, 피벗 총합과 큐브 총합(축 배치 8가지 · 측정값 6종 480건), 칸 금액과 드릴스루 라인 합계 162건 등입니다. 화면에서도 칸의 값과 라인 합이 같은지 머리 줄에 표시합니다. 자세한 표는 CDS 구성의 ‘검증 결과’ 에 있습니다.
수입 부가세 10% 는 실제 값입니까?
아닙니다. 샘플의 가정값입니다. 부가세의 과세표준(과세가격에 무엇을 더하는지)과 환급 가능 여부는 회사와 세무 대리인이 확인해야 합니다. 화면은 부가세를 원가 반영 세액에서 빼서 보여 주므로, 확인된 세율로 바꾸어도 구조는 그대로입니다.
실효 관세율은 어떻게 계산합니까?
관세 ÷ 과세가격 × 100 이며, 행마다 계산한 비율을 평균하지 않고 합산한 뒤에 계산합니다. 샘플 전체는 예정 1.94% 에서 실적 2.27% 로 +0.33%p 올랐습니다. 이 값은 표 · 임원 요약 · 규칙(상한 3.0%)이 모두 같은 정의를 씁니다.
운영과 보안
권한과 보안은 어떻게 합니까?
권한은 드릴스루가 아니라 큐브를 읽는 자리에 걸어야 합니다. 합계는 볼 수 있고 드릴스루만 막히면, 합계에서 자기 몫을 빼서 남의 숫자를 알아낼 수 있기 때문입니다. CDS 구성의 권한(DCL)은 회사코드와 플랜트 표준 권한 객체로 큐브를 읽는 자리를 막습니다. 화면은 표준 컨트롤과 직접 그린 SVG 차트만 쓰고, 기본 설정에서는 AI 해설도 외부로 나가지 않습니다.
신고가 많아지면 느려지지 않습니까?
큐브 행 수는 신고 건수가 아니라 차원 조합 수를 따라가므로, 집계를 CDS 로 내리면 화면이 들고 있을 행 수는 크게 달라지지 않습니다. 큐브가 수만 행을 넘으면 쓰지 않는 차원을 빼거나 기간을 묶어 집계 수준을 올리고, 수십만 행이면 묶기를 서비스로 옮깁니다. 품목 라인 조회는 500행씩 받고, 열 조합이나 행 수가 상한을 넘으면 범위를 좁히라는 안내가 뜹니다.
세번 매핑이나 세율표가 바뀌면 어떻게 합니까?
세번 그룹 매핑과 세율표는 코드가 아니라 유효기간이 있는 테이블입니다. 현업이 행을 추가하면 새 기간부터 새 값이 적용되고 과거 숫자는 바뀌지 않습니다. 세번이 새로 생기면 어느 그룹인지만 적어 주면 되며, 매핑이 비어 있는 세번은 미분류로 따로 모여 누락을 확인할 수 있습니다.
운영 환경에는 어떻게 연결합니까?
다음 순서입니다. ① 세번 매핑과 세율표 테이블을 만들고 값을 채웁니다. ② 공급사 · 세번 그룹 차원 뷰를 만듭니다. ③ 신고 정보 연계가 정해지면 수입신고 품목 라인 기반 뷰를 만듭니다. ④ 실적과 예정 큐브를 올립니다. ⑤ 분석 쿼리와 권한(DCL)을 붙입니다. ⑥ 서비스 정의를 만들고 OData 바인딩을 활성화합니다. ⑦ 앱의 데이터 소스를 그 서비스로 바꿉니다. 사유 · 레이아웃 · 규칙 · 에이전트 기록은 쓰기 가능한 객체로 따로 둡니다. 전송은 이 순서대로 해야 활성화 오류가 나지 않습니다.
사람이 자리에 없을 때 AI 에이전트는 어떻게 돕니까?
에이전트의 판단과 기록은 화면이 아니라 서비스에 있습니다. 규칙 5개(실효 관세율 상한 · 환율 영향 · 협정 미적용 감면 기회 · 관세 예정 대비 초과 · 수입 부가세 예정 대비 초과)가 임계를 넘으면 받을 사람의 관점으로 숫자를 다시 적어 대기함에 올립니다. 하루 한 번만 인정되고 두 번째는 한도로 기록되며, 사람이 없는 시간에는 배치 잡(SM36)이 같은 실행을 부르도록 둘 수 있습니다.
AI 분석은 외부 AI 서비스를 씁니까?
기본은 규칙 기반 해설이며 외부 서비스를 부르지 않습니다. 금액과 비율은 서비스가 큐브에서 계산한 값만 근거로 쓰고, 모델 연결은 서비스 설정에서만 켜는 선택 사항입니다. 모델을 켜도 숫자는 모델이 만들지 않고 문장 설명만 합니다.
화면 사용
분석 축은 몇 개까지, 어떻게 바꿉니까?
행 축 최대 3단계, 열 축 최대 2단계이며 11개 차원에서 고릅니다. 칩을 끌어다 놓거나 화살표 버튼으로 옮기면 서버를 다시 부르지 않고 이미 읽어 둔 큐브를 브라우저에서 다시 묶습니다. 열 조합이나 행 수가 상한을 넘으면 그리지 않고 범위를 좁히라는 안내를 띄웁니다.
차이 사유는 어떻게 남습니까?
차이 모드에서 행을 골라 요인 구분과 내용을 적으면 조회 범위와 행 경로에 묶여 저장됩니다. 축을 바꾸거나 트리를 다시 펼쳐도 같은 행이면 사유가 따라오고, 저장한 사유는 표의 사유 열과 AI 분석 근거에 함께 나옵니다.
레이아웃은 어디에 저장됩니까?
축 · 조회 조건 · 표시 항목 · 비교 설정을 이름을 붙여 서비스에 저장합니다. 기본 레이아웃을 정해 두면 그 배치로 열고, ‘열 때 자동 조회’ 를 지정하면 조회된 채로 시작합니다. 저장한 레이아웃은 목록에서 불러오거나 지울 수 있습니다.
휴대폰에서도 쓸 수 있습니까?
됩니다. 390px 폭에서 가로 스크롤 없이 같은 기능을 쓰도록 맞췄습니다. 조회 조건은 한 열로 쌓이고, 차트는 감추지 않고 표 아래로 내려오며, 분석 축은 끌어다 놓기 대신 화살표 버튼으로 옮길 수 있습니다.
보고서(PowerPoint)는 어떻게 만듭니까?
AI 분석 창의 PPTX 보고서 버튼을 누르면 지금 보고 있는 범위의 요약 · 점검 대상 · 표 · 차트 · 근거를 담은 .pptx 를 브라우저에서 바로 만들어 내려받습니다. 서버를 거치지 않고, 숫자는 화면과 같은 큐브 값입니다.
수입 세액 점검을 엑셀로 하던 방식을 바로 없애야 합니까?
그럴 필요 없습니다. 기존 방식과 함께 두고 숫자를 맞춰 보다가, 대사가 맞는 범위부터 옮겨 가시면 됩니다. 이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 현재 SAP 환경에서 어떻게 적용되는지 함께 확인해 드립니다.