재무회계 · 자금

계좌 간 자금 풀링 이행 점검 — 목표 잔액으로 규칙 이체액을 다시 구해 마스터 계좌와 실제로 오간 금액에 견주고 미이행·방향 오류·수신 불일치를 가리는 자금 화면

규칙 이체액 재계산 · 실제 이체 비교 · 마스터 수신 대사 · 머문 잔액의 기회비용 · 6개 대사식 전수 검산 — 소개 영상과 실제 화면 6종, 그리고 CDS 코드까지 한 번에 봅니다.

소개 영상1분 20초8개 장면음성 안내·자막표지 → 처음 연 화면 → 점검 필요 계좌 → 일별 이체 → 풀 수신 대사 → 대사 결과 → 계좌 상세 → 정리

도입 포인트 — 이 앱을 사용해야 하는 이유

자금 담당자는 월말마다 같은 질문을 받습니다. '풀링 규칙대로 돈이 마스터 계좌로 모였나?', '안 모인 날은 얼마나 되고 그 비용은 얼마인가?', '마스터 계좌가 받은 금액은 맞나?' 표준 보고서는 계좌별 잔액과 거래명세를 정확히 보여 주지만, 목표 잔액에서 규칙 이체액을 다시 구해 실제 이체에 견주는 일은 대개 지시서와 명세를 펼쳐 놓고 손으로 합니다.

이 앱은 그 자리를 메웁니다. 참가 계좌마다 이체 전 잔액에서 목표 잔액을 빼 규칙 이체액을 구하고, 실제로 마스터 계좌와 오간 금액과 날마다 견주어 미이행·일부 이행·과다·방향 상이를 가린 뒤, 풀 단위로 마스터 수신액을 맞추고 마스터 밖에 머문 잔액의 기회비용을 원화로 보여 줍니다. 숫자는 대사식 6종이 서비스 안에서 다시 맞춰 봅니다.

한 줄 요약 — 목표 잔액으로 규칙 이체액을 매일 다시 구해 실제 이체와 견주고, 미이행·방향 오류·마스터 수신 불일치와 머문 잔액의 기회비용을 가려 보여 주며, 대사식 6종으로 숫자를 스스로 다시 맞춥니다.

핵심 포인트 여섯 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 규칙 이체액을 매일 목표 잔액에서 다시 구한다이체 전 잔액에서 목표 잔액을 빼 허용 폭을 넘는 만큼을 규칙 이체액으로 구해 실제 이체와 날마다 견줍니다.풀링 지시서와 은행 거래명세를 월말에 엑셀로 맞춰 봅니다.
② 미이행·일부 이행·과다·방향 상이를 가른다같은 "규칙과 다름"이라도 안 옮김, 덜 옮김, 더 옮김, 반대로 옮김으로 나눠 원인 확인 대상을 좁힙니다.차이 금액만 보고 어느 유형인지 건마다 열어 봅니다.
③ 마스터 계좌 수신액을 풀 단위로 맞춘다참가 계좌 이체 합계와 마스터 계좌 수신액의 차이를 풀마다 보여 수신 누락·입금 지연을 찾습니다.마스터 계좌 잔액이 맞는지 계좌별로 거꾸로 추적합니다.
④ 마스터 밖에 머문 잔액의 기회비용을 센다이체 후에도 허용 폭 위에 남은 잔액에 마스터 금리와 참가 계좌 금리의 차이를 곱해 원화로 보여 줍니다.미이행의 비용을 금액으로 말하기 어렵습니다.
⑤ 목표 잔액이 비어 있으면 숨기지 않고 확인 필요로 올린다규칙을 구할 수 없는 계좌는 일별 P05, 계좌 A04, 풀 M02 로 남기고 합계에 0원으로 섞지 않습니다.규칙이 없는 계좌가 조용히 정상으로 보입니다.
⑥ 숫자를 스스로 다시 맞춘다이체 전 잔액부터 월 합계까지 6종 대사식을 서비스가 전수로 계산해 차이를 요약에 올립니다.월말 마감 전에 엑셀을 다시 열어 손으로 맞춰 봅니다.

만기가 아니라 잔액이 밀리면 비용이 쌓인다

예시의 한 계좌는 9월 7일부터 10일까지 나흘 연속 집중 이체가 빠져 이체 전 잔액이 3억 480만 원에서 8억 5,320만 원까지 불어났습니다. 허용 폭 위에 남은 잔액의 평균은 7,835만 5천 원이고 기회비용은 113,776원입니다. 월말에 합계만 보면 이 흐름이 보이지 않습니다.

같은 "규칙과 다름"도 원인이 다르다

안 옮긴 날, 덜 옮긴 날, 더 옮긴 날, 반대로 옮긴 날은 확인할 사람도 조치도 다릅니다. 이 앱은 일별로 P01~P07 을 남기고 계좌 월에는 먼저 걸린 하나의 A 코드로 올립니다.

마스터가 받은 금액이 맞는지는 계좌가 아니라 풀에서 본다

참가 계좌마다 이체가 맞아도 마스터 계좌에 들어온 금액이 다를 수 있습니다. 예시의 원화 풀 9월은 참가 계좌 실제 이체 합계 1,713,800,000원 대비 마스터 수신액이 1,688,800,000원으로 25,000,000원 적습니다.

규칙이 비어 있으면 정상으로 보이지 않게 한다

목표 잔액이 비어 있는 계좌는 규칙을 구할 수 없습니다. 이 앱은 일별 P05, 계좌 A04, 풀 M02 로 확인 필요를 남기고 합계에는 0원으로 섞지 않습니다.

사용 방법

  1. 조회조건 입력 — 회계연도와 기간(월)은 필수이고, 회사·풀·은행·잔액일 기간·점검 코드·점검 결과는 필요할 때만 고릅니다. 비우거나 "전체"이면 그 조건은 걸리지 않습니다.
  2. 조회 — 입력 칸 맨 오른쪽 조회 버튼을 누르거나 입력 칸에서 Enter 키를 누릅니다.
  3. 요약 확인 — 위쪽 요약에서 미집중 평잔, 기회비용, 미이행 계좌, 수신 불일치 풀, 확인 필요 계좌를 먼저 봅니다.
  4. 탭 넘기기 — 참가 계좌 판정 → 일별 이체 → 풀 수신 대사 → 대사 결과 순서로 봅니다.
  5. 행 누르기 — 참가 계좌를 누르면 판정 근거와 일별 이체가 상세 창으로 열립니다.

숫자를 믿을 수 있는가 — 검증 결과

자금 회의에서 가장 비싼 질문은 "이 금액 맞아?" 입니다. 만드는 쪽에서 먼저 대사식을 세우고 예시 데이터 전체를 돌려 보았습니다.

대사식검사 건수차이 건수최대 차이(원)
기초 잔액 + 입금 − 출금 = 이체 전 잔액36000
이체 전 잔액 − 실제 이체액 = 이체 후 잔액36000
전 영업일 이체 후 잔액 = 다음 영업일 기초 잔액35100
이체 전 잔액 − 목표 잔액 = 규칙 이체액 재계산36000
일별 실제 이체액 합계 = 계좌 월 이체 합계1800
규칙 이체액 합계 + 차이 합계 = 실제 이체액 합계1800

검사 합계 1,467건에서 차이는 0건입니다. 의도적으로 넣은 예외는 원화 풀 9월 마스터 수신 차이 25,000,000원 1건(검사 4건)이며 대사 결과에 별도 항목으로 남깁니다. 한계도 있습니다. 미이행일의 잔액이 다음 날 규칙에 다시 들어가므로 월 규칙 이체 합계는 금액보다 일수와 건수로 읽어야 합니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 1.120 · sap_horizon 테마 · 네 탭 모두 sap.ui.table.Table열이 많은 표를 고정 열과 함께 가로로 넘기기 위해서입니다.
데이터 연동OData V2 · 일괄 요청 없이 조회마다 호출엔티티셋 네 개와 펑션 두 개로 서비스 계약을 단순하게 둡니다.
서비스 로직Node 서비스 한 파일(service.js)조회·단건·펑션·날짜 필터를 한 곳에서 처리합니다.
소개 영상음성 안내·자막이 있는 1분 20초화면을 열기 전에 흐름을 먼저 보여 줍니다.
앱 정보내용
업무 영역재무회계(FI) — 자금 관리
대상 영역계좌 간 자금 집중(풀링) 이행 점검 (관련 기준서 없음)
SAP 표준 T-codeFF7A · FF7B · FEBAN · FBL3N
화면 성격조회·점검 (결과 CSV 내려받기)
테마sap_horizon
SAP 표준 기능을 그대로 이어받은 부분 — 은행 잔액과 이체 항목은 표준 전자 은행 거래명세(FEBAN)와 같은 원천이고, 현금 위치는 현금 포지션(FF7A), 앞으로의 흐름은 유동성 예측(FF7B)을 따릅니다. 이 앱은 표준이 주는 숫자를 "규칙대로 옮겼는가"라는 한 단계 위의 관점으로 읽습니다.

실행 화면

실제로 돌아가는 화면 6종을 사용 순서대로 싣습니다. 그림을 누르면 크게 볼 수 있습니다. 숫자는 모두 같은 예시 데이터에서 나와 화면끼리 맞춰 보셔도 됩니다.

처음 연 화면

조회조건 · 요약 · 참가 계좌 판정이 한 화면에 뜹니다.

처음 연 화면 — 참가 계좌 판정
처음 연 화면 — 참가 계좌 판정 — 조회조건 · 요약 · 참가 계좌 판정이 한 화면에 뜹니다.

참가 계좌 9개, 미집중 평잔 합계 87.3백만원, 기회비용 126,714원, 미이행 계좌 1개, 수신 불일치 풀 1개, 확인 필요 계좌 1개, 정합성 대사 차이 0건이 요약에 보입니다. 조회 버튼은 입력 칸 오른쪽 끝에 있습니다.

점검 코드로 거르기 — 점검 필요 계좌

점검 결과를 "점검 필요"로 고르면 규칙대로 이행하지 않은 계좌만 남습니다.

점검 코드로 거르기 — 점검 필요 계좌
점검 코드로 거르기 — 점검 필요 계좌 — 점검 결과를 "점검 필요"로 고르면 규칙대로 이행하지 않은 계좌만 남습니다.

5개 계좌가 남고 일별 이체 탭 건수는 12건으로 줄어듭니다. 원화 풀 계좌와 달러 풀 계좌가 함께 있어 통화 열과 환율(가정값) 열이 같이 보입니다.

일별 이체

이체 전 잔액에서 목표 잔액을 뺀 규칙 이체액과 실제 이체액을 일자별로 견줍니다.

일별 이체
일별 이체 — 이체 전 잔액에서 목표 잔액을 뺀 규칙 이체액과 실제 이체액을 일자별로 견줍니다.

9월 180건(계좌 9 × 20영업일)이 일자순으로 열립니다. 이체 전 잔액·목표 잔액·허용 폭·규칙 이체액·실제 이체액이 한 줄에 있고, 오른쪽으로 넘기면 차이·이체 후 잔액·판정이 이어집니다.

풀 수신 대사

풀마다 참가 계좌 이체 합계와 마스터 계좌 수신액을 견줍니다.

풀 수신 대사
풀 수신 대사 — 풀마다 참가 계좌 이체 합계와 마스터 계좌 수신액을 견줍니다.

원화 풀 9월은 참가 계좌 실제 이체 합계 1,713,800,000원에 마스터 수신액이 1,688,800,000원으로 25,000,000원 적어 점검 필요(M01)입니다. 달러 풀은 수신액이 일치하지만 목표 잔액이 빈 계좌가 있어 확인 필요(M02)입니다.

대사 결과

서비스가 계산한 대사식의 좌변·우변 합계와 검사·차이 건수입니다.

대사 결과
대사 결과 — 서비스가 계산한 대사식의 좌변·우변 합계와 검사·차이 건수입니다.

일반 대사 6종은 모두 차이 0건이고, 의도적으로 넣은 풀 수신 대사 예외 1건(검사 4건, 차이 1건, 최대 25,000,000원)은 별도 항목으로 기록합니다.

계좌 상세

행을 누르면 판정 근거와 그 계좌의 일별 이체가 한 창에 모입니다.

계좌 상세
계좌 상세 — 행을 누르면 판정 근거와 그 계좌의 일별 이체가 한 창에 모입니다.

목표 잔액·허용 폭·마스터 운용 금리·참가 계좌 금리, 미이행일·일부이행일·과다일·방향상이일, 미집중 평잔과 기회비용, 판정 문장과 근거가 나오고 아래에 그 계좌의 일별 이체가 붙습니다.

화면 뒤에서 일어나는 일

조회를 누르면 화면은 참가 계좌 판정 · 일별 이체 · 풀 수신 대사 · 대사 결과 네 블록을 각각 조회조건과 함께 부르고, 요약의 미집중 평잔 합계와 미이행 계좌 수는 서비스의 함수로 받습니다. 나머지 요약은 조회 결과에서 한 곳의 계산식으로 구합니다.

판정 조건과 사용자 조치

대상코드판정 조건결과 상태사용자 조치
일별P05목표 잔액이 비어 있음확인 필요풀링 규칙(목표 잔액)을 회사가 먼저 정한다
일별P01 · P04규칙 이체액 > 0(집중) 또는 < 0(보충)인데 실제 이체 없음점검 필요이체 지시가 빠졌는지 확인한다
일별P03실제 이체 방향이 규칙과 반대점검 필요방향 오류인지 확인한다
일별P07같은 방향이나 |실제| < |규칙| (허용 폭 밖)점검 필요이체 한도나 분할 지시를 확인한다
일별P02같은 방향이나 |실제| ≥ |규칙| (허용 폭 밖)점검 필요목표 잔액 아래로 내려갔는지 확인한다
일별P06규칙 이체액이 0인데 실제 이체가 있음점검 필요이체 사유를 확인한다
일별P00차이가 허용 폭 이내(이체 불필요·무이체 포함)정상조치 없음
계좌·월A04 → A03 → A01 → A05 → A02 → A06목표 미설정 → 방향 상이 ≥ 1일 → 미이행 ≥ 3일 → 일부 이행 ≥ 3일 → 과다·불필요 ≥ 3일 → 위반 합계 ≥ 1일확인 필요 / 점검 필요위에서 아래 순서로 먼저 걸린 코드가 계좌 판정이 된다
계좌·월A00위반일 0정상조치 없음
풀·월M01마스터 수신액 ≠ 참가 계좌 이체 합계점검 필요수신 누락·입금 지연을 확인한다
풀·월M02수신액 일치, 풀 안에 A04 계좌 있음확인 필요목표 잔액이 빈 계좌를 먼저 정한다
풀·월M00수신액 일치, A04 계좌 없음정상조치 없음

일별 판정은 목표 잔액 → 방향 → 이체 유무 → 크기 순으로 가리고, 계좌는 표의 위에서 아래 순서로 먼저 걸린 코드가 판정이 됩니다. 처리 순서는 ① 이체 전 잔액 ② 규칙 이체액 ③ 차이와 이체 후 잔액 ④ 잔여 초과·부족 ⑤ 계좌 월 집계 ⑥ 풀 수신 대사 ⑦ 대사식 계산입니다.

조회조건

조회조건필수기본값$filter 변환
회계연도필수2026Gjahr eq '2026'
기간(월)필수09Monat eq '09'
회사선택전체Bukrs eq '1000'
풀선택전체PoolId eq 'PK1'
은행선택비어 있음substringof('가람', BankName)
잔액일 시작·종료선택비어 있음BalDate ge datetime'…' and BalDate le datetime'…'
점검 코드선택전체CheckCode eq 'A01'
점검 결과선택전체CheckStatus eq 'CHECK'

결과 컬럼

컬럼의미산출식
규칙 이체액규칙대로라면 옮겼어야 할 금액이체 전 잔액 − 목표 잔액 (허용 폭 밖일 때, 아니면 0)
실제 이체액마스터 계좌와 실제로 오간 금액양수 = 마스터로 집중, 음수 = 마스터에서 보충
차이실제와 규칙의 어긋남실제 이체액 − 규칙 이체액
이체 후 잔액이체를 마친 잔액이체 전 잔액 − 실제 이체액
미집중 평잔마스터 밖에 머문 허용 폭 초과 잔액의 평균Σ max(0, 이체 후 잔액 − 목표 − 허용 폭) ÷ 영업일수
기회비용(원)머문 잔액이 마스터에 있었다면 더 벌었을 이자Σ 초과 잔액 × (마스터 금리 − 참가 계좌 금리) ÷ 100 ÷ 365 × 환율
마스터 수신 차이풀 단위 수신 검증마스터 수신액 − 참가 계좌 실제 이체 합계

좁은 화면에서 달라지는 것

좁은 화면에서는 조회조건이 여러 줄로 접히고 요약은 줄바꿈되어 이어집니다. 표는 고정 열을 둔 채 가로로 넘기며, 상세 창은 화면 폭에 맞춰 줄어듭니다.

파일 구성

앱 폴더/
├─ index.html · Component.js · manifest.json
├─ controller/   BaseController · Main.controller
├─ view/         Main.view.xml · DetailDialog.fragment.xml
├─ model/        formatter · ErrorHandler
├─ css/ · i18n/
├─ odata/        서비스 정의 · 서비스 로직 · 데이터
└─ media/        소개 영상 · 대표 이미지

SAP 표준 기능 확장 포인트

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 풀링 규칙 대비 이행 점검 관점을 더해 확장합니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일표준으로 되는 것이 앱이 더하는 것
현금 위치 보기현금 포지션(FF7A)이 은행 계좌별 잔액을 보여 줍니다이체 후 잔액을 목표 잔액·허용 폭에 견주어 풀링 이행 여부를 판정합니다
앞으로의 흐름유동성 예측(FF7B)이 예정 흐름을 보여 줍니다이미 지난 날의 이행 여부와 마스터 밖에 머문 기간의 비용을 더합니다
은행 거래명세 처리전자 은행 거래명세 후처리(FEBAN)가 명세 항목을 처리합니다마스터 계좌와 오간 이체 항목을 규칙 이체액에 견줍니다
원장 항목 조회총계정원장 개별 항목(FBL3N)이 전기 내역을 보여 줍니다마스터 수신과 참가 계좌 송신의 합을 풀 단위로 맞춥니다

T-code 별 연계 지점

T-code이름연계
FF7A현금 포지션이체 후 잔액이 현금 포지션의 은행 잔액과 같은 관점인지 대조합니다.
FF7B유동성 예측집중 이체 뒤 지급 여력이 부족해지는 계좌의 다음 지급 일정을 확인합니다.
FEBAN전자 은행 거래명세 후처리일별 입금·출금·이체의 원천이 되는 은행 거래명세를 확인합니다.
FBL3N총계정원장 개별 항목 조회마스터 계좌 수신과 참가 계좌 송신의 전기 내역을 계정별로 확인합니다.

그래서 운영 전환 때 기존 표준 보고서를 없애지 않습니다. 이 앱은 표준이 주는 숫자를 "규칙대로 옮겼는가"라는 관점으로 읽는 자리이고, 표준 화면은 원천 확인과 전기에 남습니다.

S/4HANA 분석 스택과의 자리

표준 CDS 분석 쿼리와 Fiori 분석 앱은 이미 집계된 현금 위치를 여러 축으로 보는 데 강합니다. 이 앱은 그 옆에서 "규칙 이체액을 다시 구해 실제와 견주는" 판정 한 단계를 맡고, 집계는 운영에서 CDS 가 담당합니다.

확장 포인트 — 운영에서 실제로 손대는 자리

자리손대는 내용비고
목표 잔액 · 허용 폭계좌마다 회사가 정해 풀링 규칙 표에 적습니다가장 먼저 정할 값
마스터 운용 금리기회비용 계산에 쓰는 마스터 계좌 금리입니다자금팀이 정함
이체 단위실제 이체를 맞추는 단위(원화 100만원, 달러 1,000)입니다은행 지시 단위
환율달러 풀을 원화로 합산할 때 쓰는 환율입니다예시는 8월 1,372.50 · 9월 1,389.00 가정값
판정 임계값미이행·일부 이행·과다 3일 같은 기준을 바꿀 수 있습니다바꾸면 계좌 판정이 달라짐

분석 지표 정의표

지표산식·판정 기준대응 기능원천 데이터비고
규칙 이체액이체 전 잔액 − 목표 잔액 (허용 폭 밖)일별 이체DailySet.RuleAmt양수 집중 · 음수 보충
이체 차이실제 이체액 − 규칙 이체액일별 이체DailySet.GapAmt허용 폭 이내면 P00
미집중 평잔Σ 이체 후 초과 잔액 ÷ 영업일수참가 계좌 판정AccountSet.ResidAvg · ResidAvgKrw요약은 원화 환산
기회비용Σ 초과 잔액 × 금리 차 ÷ 100 ÷ 365참가 계좌 판정AccountSet.OppCostKrw금리 가정값
미이행 계좌미이행일 ≥ 3 → A01참가 계좌 판정AccountSet.MissDays함수 MissAcctCount
마스터 수신 차이마스터 수신액 − 참가 계좌 실제 이체 합계풀 수신 대사PoolSet.MasterDiff0 이 아니면 M01

CDS 구성

예시 화면은 참가 계좌 18건(월 9건 × 2개월)과 일별 이체 360건을 서비스 데이터로 들고 있지만, 운영에서는 은행 거래명세를 CDS 로 내려 집계합니다. 아래는 그때 만드는 객체를 레이어 순서대로 적은 것입니다. 표준 필드명은 환경마다 달라 "확인 필요"로 표시했습니다.

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준ZT_PoolRule계좌별 목표 잔액·허용 폭·마스터 지정규칙은 자금 회의마다 바뀌므로 코드가 아니라 표에 둡니다
기본ZI_PoolBalDaily일별 은행 잔액과 입금·출금원천 필드 확인을 한 뷰에서 끝냅니다
기본ZI_PoolTransfer마스터 계좌와 오간 이체 항목실제 이체액의 원천을 한 곳에 둡니다
계산ZI_PoolRuleCalc이체 전 잔액·규칙 이체액·차이·판정규칙 계산을 한 번만 구현합니다
집계ZI_PoolAcctMonth계좌 월 집계와 A 코드 판정화면의 계좌 탭이 읽습니다
집계ZI_PoolRecv풀 수신 대사와 M 코드화면의 풀 탭이 읽습니다
권한ZI_PoolAcctMonth DCL회사코드 권한집계 단계에 겁니다
서비스ZS_PoolCash서비스 정의뷰가 바뀌어도 서비스 계약은 유지합니다

① 풀링 규칙 테이블

계좌마다 목표 잔액과 허용 폭, 마스터 계좌를 둡니다. 유효 시작일을 키에 넣어 규칙을 바꿔도 지난 판정이 흔들리지 않게 합니다.

"  ZT_PoolRule — 풀링 규칙 (투명 테이블)
"  역할 : 계좌 · 유효 시작일별 목표 잔액과 허용 폭
"  나눈 이유 : 규칙은 자금 회의마다 바뀐다. 코드가 아니라 표에 둔다.
@EndUserText.label : 'Pooling rule'
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zt_poolrule {
  key mandt      : mandt not null;
  key bukrs      : bukrs not null;
  key acct_id    : abap.char(10) not null;
  key valid_from : abap.dats not null;
  pool_id        : abap.char(4);
  master_acct    : abap.char(10);            " 마스터 계좌
  @Semantics.amount.currencyCode : 'zt_poolrule.waers'
  target_bal     : abap.curr(23,2);          " 목표 잔액
  @Semantics.amount.currencyCode : 'zt_poolrule.waers'
  tol_amt        : abap.curr(23,2);          " 허용 폭
  waers          : waers;
}

② 일별 은행 잔액 뷰

전자 은행 거래명세에서 계좌별 일 잔액과 입금·출금을 읽습니다.

" ZI_PoolBalDaily — 일별 은행 잔액
" 확인 필요 : 명세 헤더·항목의 필드는 고객사 설정에 따른다
@EndUserText.label: 'Daily bank balance'
define view entity ZI_PoolBalDaily
  as select from febko
{
  key bukrs   as Bukrs,
  key hbkid   as HouseBank,
  key hktid   as AcctId,
  key azdat   as BalDate,
      ssbtr   as OpenBal,    // 필드 확인 필요
      esbtr   as CloseBal    // 필드 확인 필요
}

③ 마스터 이체 항목 뷰

마스터 계좌와 오간 이체 항목을 일자별로 모읍니다. 부호는 마스터로 집중이 양수입니다.

" ZI_PoolTransfer — 마스터 계좌와 오간 이체
" 역할 : 실제 이체액의 원천 (차변·대변 구분으로 부호 결정)
@EndUserText.label: 'Master transfer'
define view entity ZI_PoolTransfer
  as select from febep as p
    inner join febko as k on k.kukey = p.kukey
{
  key k.bukrs as Bukrs,
  key k.hktid as AcctId,
  key k.azdat as BalDate,
      sum( case p.vgext when 'POOL_OUT' then p.kwbtr
                        when 'POOL_IN'  then 0 - p.kwbtr
                        else 0 end ) as ActualAmt   // 필드 확인 필요
}
group by k.bukrs, k.hktid, k.azdat

④ 규칙 계산 뷰

이체 전 잔액에서 목표 잔액을 빼 허용 폭 밖일 때만 규칙 이체액으로 삼고, 실제 이체액과 견줘 일별 코드를 정합니다. 규칙은 이 뷰 한 곳에만 둡니다.

" ZI_PoolRuleCalc — 이체 전 잔액 · 규칙 이체액 · 차이
" 나눈 이유 : 규칙 계산을 한 번만 구현한다.
@EndUserText.label: 'Pooling rule calculation'
define view entity ZI_PoolRuleCalc
  as select from ZI_PoolBalDaily as d
    inner join zt_poolrule as r
      on r.bukrs = d.Bukrs and r.acct_id = d.AcctId
    left outer join ZI_PoolTransfer as t
      on t.Bukrs = d.Bukrs and t.AcctId = d.AcctId and t.BalDate = d.BalDate
{
  key d.Bukrs, key d.AcctId, key d.BalDate,
  d.OpenBal + d.InAmt - d.OutAmt as PreBal,
  case when r.target_bal = 0 then 0
       when abs( ( d.OpenBal + d.InAmt - d.OutAmt ) - r.target_bal ) > r.tol_amt
         then ( d.OpenBal + d.InAmt - d.OutAmt ) - r.target_bal
       else 0 end                 as RuleAmt,
  coalesce( t.ActualAmt, 0 )      as ActualAmt
}

⑤ 계좌 월 집계 뷰

일별 코드를 세어 계좌 월 판정(A 코드)을 가립니다. 판정 우선순위는 case 의 순서로 표현합니다.

" ZI_PoolAcctMonth — 계좌 월 집계와 A 코드
@EndUserText.label: 'Account month summary'
define view entity ZI_PoolAcctMonth
  as select from ZI_PoolRuleCalc
{
  key Bukrs, key AcctId,
  substring( cast( BalDate as abap.char(8) ), 1, 6 ) as YearMonth,
  sum( case DayCode when 'P01' then 1 when 'P04' then 1 else 0 end ) as MissDays,
  sum( case DayCode when 'P07' then 1 else 0 end )                   as PartDays,
  sum( case DayCode when 'P03' then 1 else 0 end )                   as DirDays,
  case
    when max( TargetBal ) = 0  then 'A04'
    when sum( case DayCode when 'P03' then 1 else 0 end ) >= 1 then 'A03'
    else 'A00'                                   // 이하 A01 · A05 · A02 · A06 는 같은 방식
  end as CheckCode
}
group by Bukrs, AcctId, substring( cast( BalDate as abap.char(8) ), 1, 6 )

⑥ 풀 수신 대사 뷰

참가 계좌 실제 이체 합계와 마스터 계좌 수신액을 풀마다 맞춥니다.

" ZI_PoolRecv — 풀 수신 대사
@EndUserText.label: 'Pool receipt check'
define view entity ZI_PoolRecv
  as select from ZI_PoolAcctMonth as a
    left outer join ZI_PoolMasterRecv as m on m.PoolId = a.PoolId and m.YearMonth = a.YearMonth
{
  key a.PoolId, key a.YearMonth,
  sum( a.ActualSum )                       as ActualNet,
  max( m.MasterRecv )                      as MasterRecv,
  max( m.MasterRecv ) - sum( a.ActualSum ) as MasterDiff
}
group by a.PoolId, a.YearMonth

⑦ 권한 DCL

회사코드 표준 권한 객체를 집계 뷰에 겁니다. 상세에만 걸면 합계와 자기 몫의 차이로 다른 법인의 규모가 드러납니다.

@EndUserText.label: 'Company code authorization'
@MappingRole: true
define role ZI_PoolAcctMonth {
  grant select on ZI_PoolAcctMonth
    where ( Bukrs ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}

⑧ 서비스 정의

화면이 읽는 엔티티셋과 같은 이름으로 노출해 서비스 계약을 유지합니다.

@EndUserText.label: 'Pooling check service'
define service ZS_PoolCash {
  expose ZI_PoolAcctMonth as AccountSet;
  expose ZI_PoolRuleCalc  as DailySet;
  expose ZI_PoolRecv      as PoolSet;
}

운영 데이터로 갈 때

거래명세가 수천만 건이면 일별 규칙 계산을 화면이 아니라 DB 에서 해야 합니다. 기간 파라미터와 회사코드를 필수로 두고, 명세일과 회사코드의 인덱스를 확인하며, 월 단위로 읽어 응답 시간을 3초 안에 두는 것을 기준으로 삼는 편이 안전합니다.

자주 묻는 질문

도입 검토에서 나올 질문을 네 묶음으로 정리했습니다.

숫자와 산식

규칙 이체액은 어떻게 구합니까?

이체 전 잔액(기초 + 입금 − 출금)에서 목표 잔액을 뺀 값의 절대값이 허용 폭을 넘으면 그 차이가 규칙 이체액이고, 허용 폭 이내면 0입니다. 양수는 마스터로 집중, 음수는 마스터에서 보충입니다.

실제 이체액과 규칙 이체액이 조금 다르면 모두 점검 필요입니까?

아닙니다. 차이가 허용 폭 이내이면 이행으로 보고 P00 정상으로 둡니다. 은행 지시 단위(원화 100만원, 달러 1,000)로 맞추는 데서 생기는 작은 차이를 걸러내기 위해서입니다.

미이행과 일부 이행은 어떻게 구분합니까?

실제 이체가 아예 없으면 미이행(P01 집중 · P04 보충)이고, 규칙과 같은 방향으로 옮겼지만 규칙보다 적으면 일부 이행(P07)입니다. 규칙 이상으로 옮기면 이체 과다(P02)입니다.

방향 상이는 무엇입니까?

규칙은 집중인데 보충을 했거나 그 반대인 경우입니다. 단순 누락이 아니라 지시가 뒤바뀌었을 가능성이 있어 하루만 있어도 계좌 판정에서 가장 먼저 봅니다(A03).

미집중 평잔은 무엇을 뜻합니까?

이체를 마치고도 허용 폭 위에 남은 잔액을 일별로 더해 영업일수로 나눈 값입니다. 마스터 계좌 밖에 머문 규모를 보여 주며 요약에는 백만원 단위로 올립니다.

기회비용은 어떻게 계산합니까?

남은 초과 잔액에 마스터 운용 금리와 참가 계좌 금리의 차이를 곱해 365 로 나눈 이자 차이입니다. 달러 풀은 원화로 환산한 값만 합산합니다. 금리와 환율은 예시용 가정값입니다.

월 규칙 이체 합계가 실제보다 훨씬 큰 이유는 무엇입니까?

미이행일의 잔액이 다음 날 이체 전 잔액에 그대로 남아 같은 금액이 다음 날 규칙에 다시 들어가기 때문입니다. 금액 합계보다 일수와 건수로 읽는 것이 안전하고, 이 한계는 설명서에도 적어 두었습니다.

풀 수신 차이는 무엇과 무엇을 견줍니까?

풀마다 참가 계좌의 실제 이체 합계와 마스터 계좌에 들어온 수신액을 견줍니다. 예시의 원화 풀 9월은 마스터 수신액이 25,000,000원 적어 M01 로 표시됩니다.

대사식은 몇 가지를 검산합니까?

이체 전 잔액, 이체 후 잔액, 잔액 이월 연속, 규칙 이체액 재계산, 계좌 월 이체 합계, 규칙 대비 차이 분해까지 6종입니다. 예시 데이터 1,467건에서 차이는 0건입니다.

화면과 조작

조회 버튼은 어디에 있습니까?

조회조건 영역 입력 칸의 맨 오른쪽입니다. 화면 아래 바에 두지 않았고, 입력 칸에서 Enter 키를 눌러도 같은 조회가 실행됩니다. 처음 열면 한 번 자동으로 조회합니다.

잔액일 기간은 어떻게 걸립니까?

시작일과 종료일을 모두 넣으면 하나의 구간 조건으로 서비스에 전달됩니다. 일별 이체 탭에만 적용되고 계좌·풀 탭은 월 단위라 영향받지 않습니다.

점검 코드는 어느 탭에 걸립니까?

A 로 시작하는 코드는 참가 계좌에, P 는 일별 이체에, M 은 풀 수신 대사에 걸립니다. 한 선택 목록에 세 종류를 함께 두고 고른 코드에 맞는 탭만 거릅니다.

행을 누르면 무엇이 열립니까?

참가 계좌 행을 누르면 목표 잔액·허용 폭·금리, 미이행·일부 이행·과다·방향 상이 일수, 판정 문장과 근거, 그 계좌의 일별 이체가 상세 창 하나에 모입니다.

CSV 는 어떤 데이터가 내려옵니까?

지금 보는 탭의 조회 결과가 UTF-8 CSV 로 내려옵니다. 조회조건을 바꾸고 다시 조회하면 바뀐 결과가 내려오며 금액은 표시 형식이 아닌 원 값입니다.

달러 풀과 원화 풀을 함께 볼 수 있습니까?

표는 계좌 통화 그대로 보여 주고, 요약과 원화 환산 열(…Krw)만 합산합니다. 환율은 가정값이라 운영에서는 회사 환율표로 바꿔야 합니다.

판정과 활용

판정이 "점검 필요"이면 문제가 있다는 뜻입니까?

아닙니다. 점검 필요는 이체가 빠졌거나 규칙과 다르게 옮겨진 날처럼 다시 볼 대상을 가리는 표시일 뿐입니다. 이 화면은 점검 도구이며 실제 이체 지시와 풀링 규칙의 최종 결정은 회사와 감사인이 합니다.

목표 잔액이 비어 있으면 어떻게 됩니까?

규칙 이체액을 구할 수 없으므로 일별 P05, 계좌 A04, 풀 M02 로 확인 필요가 됩니다. 합계에 0원으로 들어가는 일은 없고, 목표 잔액을 정한 뒤 다시 조회하면 반영됩니다.

계좌 판정 순서는 왜 그렇게 정했습니까?

규칙이 없는 계좌를 가장 먼저 가려내고(A04), 이어 방향 오류, 미이행 반복, 일부 이행 반복, 과다 반복, 산발 점검 순으로 원인이 무거운 것부터 봅니다. 여러 조건이 겹치면 먼저 걸린 코드가 계좌 판정이 됩니다.

A06 산발 점검은 왜 따로 둡니까?

3일에 못 미치는 위반은 반복이라 부르기 어렵지만 하루라도 있으면 확인할 가치가 있어서입니다. 해당 일자만 열어 보면 됩니다.

어떤 사용자에게 효과가 큽니까?

풀링 지시서와 은행 거래명세를 월말에 엑셀로 맞춰 보던 자금팀과, 마스터 계좌 수신이 맞는지 확인해야 하는 회계 담당자입니다. 미이행의 비용을 금액으로 먼저 보여 줍니다.

도입과 운영

표준 T-code 를 대체합니까?

대체하지 않습니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 규칙 대비 이행 점검 관점을 더해 확장합니다. 전기와 법정 대응은 표준에 남습니다.

데이터 원천은 무엇입니까?

전자 은행 거래명세의 일 잔액과 이체 항목, 하우스뱅크 계좌 정보, 그리고 회사가 정하는 목표 잔액·허용 폭·마스터 지정입니다. 어떤 필드를 쓸지는 고객사 설정에 따라 확인이 필요합니다.

운영 연결에는 무엇이 필요합니까?

풀링 규칙 표와 CDS 뷰를 만들어 이송하고 서비스 바인딩을 게시한 뒤 앱 manifest 의 서비스 주소만 바꾸면 됩니다. 화면 코드는 그대로입니다.

권한은 어떻게 막습니까?

회사코드 표준 권한 객체를 집계 뷰에 겁니다. 상세에만 걸면 합계와 자기 몫의 차이로 다른 법인의 이체 규모가 드러나므로 집계 단계에 둡니다.

화면의 숫자는 실제 회사 자료입니까?

아닙니다. 가상 회사 두 곳과 가상 은행·계좌로 만든 예시 데이터이며 실제 고객사의 잔액과 금액을 쓰지 않았습니다. 환율과 금리도 가정값입니다.