Files
sam-docs/features/finance/account-transactions.md
김보곤 2950038b72 docs:재무/자금관리 개발문서 작성 (5개 기능)
- 재무 대시보드 (finance-dashboard.md)
- 일일자금일보 (daily-fund-report.md)
- 자금계획일정 (fund-schedules.md)
- 보유계좌관리 (bank-accounts.md)
- 계좌입출금내역 (account-transactions.md)
- README.md (전체 개요)
2026-02-11 16:17:48 +09:00

11 KiB
Raw Blame History

계좌입출금내역

개요

계좌입출금내역은 바로빌 SOAP API를 통해 은행 거래내역을 실시간으로 조회하고, 회계 분류(계정과목 지정), 분개(1거래→N계정과목), 수동 거래 등록 등을 지원하는 기능입니다.

  • 라우트: GET /finance/account-transactions
  • UI 기술: React 18 + Babel (브라우저 트랜스파일링)
  • 컨트롤러: EaccountController (1,772줄)

파일 구조

mng/
├── app/Http/Controllers/Barobill/
│   └── EaccountController.php               # 메인 컨트롤러 (1772줄, 16개+ 메서드)
├── app/Models/Barobill/
│   ├── BankTransaction.php                  # 바로빌 거래내역 모델
│   ├── BankTransactionOverride.php          # 거래 수정(적요/내용)
│   ├── BankTransactionSplit.php             # 거래 분개
│   ├── AccountCode.php                      # 계정과목 마스터
│   ├── BarobillConfig.php                   # 바로빌 API 설정
│   └── BarobillMember.php                   # 테넌트별 바로빌 연동 정보
└── resources/views/barobill/eaccount/
    └── index.blade.php                      # React 기반 단일 페이지

라우트

웹 라우트

// routes/web.php
Route::get('/finance/account-transactions', [EaccountController::class, 'index']);

API 라우트

// routes/web.php (barobill/eaccount prefix)
GET    /accounts               등록된 계좌 목록 (바로빌)
GET    /latest-balances        계좌별 최신 잔액 (DB)
GET    /transactions           거래내역 조회 (API + DB 병합)
GET    /account-codes          계정과목 목록 (테넌트별)
GET    /account-codes/all      전체 계정과목
POST   /account-codes          계정과목 등록
PUT    /account-codes/{id}     계정과목 수정
DELETE /account-codes/{id}     계정과목 삭제
POST   /save                   거래 저장 (회계 분류)
GET    /export                 Excel 내보내기
POST   /save-override          거래 적요/내용 수정
POST   /manual                 수동 거래 등록
PUT    /manual/{id}            수동 거래 수정
DELETE /manual/{id}            수동 거래 삭제
GET    /splits                 분개 내역 조회
POST   /splits                 분개 저장
DELETE /splits                 분개 삭제

컨트롤러

EaccountController

메서드 HTTP 설명
__construct() - SOAP 클라이언트 초기화 (BarobillConfig)
index() GET React 페이지 렌더링 (HX-Redirect 적용)
accounts() GET 바로빌 등록 계좌 목록
latestBalances() GET DB 기반 최신 잔액
transactions() GET 거래내역 조회 (API + DB 병합)
accountCodes() GET 계정과목 목록
accountCodesAll() GET 전체 계정과목
accountCodeStore() POST 계정과목 등록
accountCodeUpdate() PUT 계정과목 수정
accountCodeDestroy() DELETE 계정과목 삭제
save() POST 거래 저장 (계정과목 지정)
exportExcel() GET Excel 내보내기
saveOverride() POST 적요/내용 수정 (override)
storeManual() POST 수동 거래 등록
updateManual() PUT 수동 거래 수정
destroyManual() DELETE 수동 거래 삭제
splits() GET 분개 내역 조회
saveSplits() POST 분개 저장
deleteSplits() DELETE 분개 삭제

바로빌 SOAP API 연동

설정 구조

BarobillConfig (barobill_configs 테이블)
├─ environment: 'test' 또는 'production'
├─ cert_key: 인증서 키
├─ corp_num: 법인번호
└─ base_url: SOAP URL

BarobillMember (barobill_members 테이블)
├─ tenant_id: 테넌트별 분리
├─ barobill_id: 바로빌 로그인 ID
├─ barobill_pwd: 암호화된 비밀번호
└─ server_mode: 'test' 또는 'production' (테넌트별)

사용 SOAP 메서드

WSDL 메서드 기능
BANKACCOUNT.asmx GetBankAccountEx 등록된 계좌 목록
BANKACCOUNT.asmx GetPeriodBankAccountTransLog 기간별 거래내역 조회

에러 코드

코드 의미
-25005 데이터 없음 (정상)
-25001 데이터 없음 (정상)
기타 에러 메시지 반환

핵심 로직

거래내역 조회 흐름 (transactions)

React 컴포넌트 (날짜/계좌 선택)
    ↓
GET /barobill/eaccount/transactions
    ↓
1. BarobillMember 조회 (barobill_id)
    ↓
2. 테넌트별 서버 모드 적용
   └─ BarobillConfig 재로드 → SOAP 클라이언트 재초기화
    ↓
3. [단일 계좌 조회]
   ├─ DB 조회: barobill_bank_transactions (저장된 데이터)
   ├─ SOAP 호출: GetPeriodBankAccountTransLog
   ├─ Override 데이터 병합 (수정된 적요)
   ├─ 수동 거래 병합 (중복 제거)
   ├─ 분개 데이터 병합
   ├─ 잔액 재계산 (기간 전 잔액 기준)
   └─ 정렬 (최신순) + 페이지네이션
    ↓
4. [전체 계좌 조회]
   ├─ GetBankAccountEx로 계좌 목록 조회
   ├─ 각 계좌별로 3번 반복
   └─ 모든 거래 병합 및 정렬
    ↓
5. JSON 응답

거래 고유 키 (unique_key)

// BankTransaction 모델
return implode('|', [
    $this->bank_account_num,
    $this->trans_dt,          // 거래일시
    (int) $this->deposit,
    (int) $this->withdraw,
    (int) $this->balance,
]);

분개 저장 흐름

React (분개 모달)
    ↓
POST /barobill/eaccount/splits
{
    originalUniqueKey: "계좌번호|거래일시|입금|출금|잔액",
    originalData: { bankAccountNum, transDate, ... },
    splits: [
        { amount: 50000, accountCode: "1000", accountName: "당좌예금" },
        { amount: 50000, accountCode: "2000", accountName: "미수금" }
    ]
}
    ↓
기존 분개 삭제 → 새 분개 생성 × N

Override 저장 로직

POST /barobill/eaccount/save-override
{
    uniqueKey: "거래 고유 키",
    modifiedSummary: "수정된 적요",
    modifiedCast: "수정된 내용"
}
    ↓
BankTransactionOverride::saveOverride()
  → 둘 다 null이면 delete
  → 아니면 upsert

모델

BankTransaction (Barobill)

테이블: barobill_bank_transactions

필드 설명
tenant_id 테넌트 ID
bank_account_num 계좌번호 (하이픈 없음)
bank_code / bank_name 은행 코드/명
trans_date 거래일 (YYYYMMDD)
trans_time 거래시간 (HHMMSS)
trans_dt 거래일시 (trans_date + trans_time)
deposit / withdraw 입금액 / 출금액
balance 거래 후 잔액
summary / cast 적요 / 내용
account_code / account_name 계정과목 코드/명
is_manual 수동 입력 여부

BankTransactionOverride

테이블: barobill_bank_transaction_overrides

필드 설명
unique_key 거래 고유 키
modified_summary 수정된 적요
modified_cast 수정된 내용

BankTransactionSplit

테이블: barobill_bank_transaction_splits

필드 설명
original_unique_key 원본 거래 고유 키
split_amount 분개 금액
account_code / account_name 계정과목
description / memo 설명 / 메모
sort_order 정렬 순서
bank_account_num / trans_dt / trans_date 원본 거래 정보
original_deposit / original_withdraw 원본 금액

AccountCode

테이블: account_codes

필드 설명
code 계정과목 코드 (예: "1000")
name 계정과목명 (예: "당좌예금")
category 분류 (자산, 부채, 자본 등)
sort_order 정렬 순서
is_active 활성 여부

BarobillConfig

테이블: barobill_configs

필드 설명
name 설정명
environment 'test' 또는 'production'
cert_key 바로빌 인증서 키
corp_num 법인번호
is_active 활성 여부

BarobillMember

테이블: barobill_members

필드 설명
tenant_id 테넌트 ID
biz_no 사업자번호
barobill_id / barobill_pwd 바로빌 로그인 정보
server_mode 'test' 또는 'production'
status active / inactive / pending

뷰 구성 (React)

index.blade.php

┌─ 테넌트 정보 카드 (Blade) ──────────
│  회사명, 사업자번호, 바로빌 ID
│  바로빌 미연동 경고 (조건부)
│
├─ React 앱 (#eaccount-root) ─────────
│  ├─ 계좌 선택 드롭다운
│  ├─ 기간 선택 (이번달, 지난달, D-2~5월 버튼)
│  │
│  ├─ 통계 카드 ──────────
│  │  총 입금 | 총 출금 | 거래 건수
│  │
│  ├─ 거래 테이블 ────────
│  │  번호 | 거래일시 | 적요 | 입금 | 출금 | 잔액 | 계정과목
│  │  ├─ 인라인 편집 (적요, 계정과목)
│  │  ├─ 수동 거래: 보라색 표시
│  │  ├─ 숨긴 거래: 회색 처리
│  │  └─ 분개된 거래: 파란색 표시
│  │
│  ├─ 수동 거래 등록 모달 ──
│  │  날짜, 시간, 입금/출금, 금액, 적요, 계정과목
│  │
│  ├─ 분개 모달 ──────────
│  │  원본 거래 정보 → N개 분개 항목
│  │
│  └─ 내보내기/저장 버튼
│
└─ API 엔드포인트 상수 (Blade에서 정의)

React 주요 기능

기능 설명
계좌별 조회 드롭다운에서 계좌 선택
기간 선택 월 단위 버튼 (이번달 ~ D-5월)
인라인 편집 적요, 계정과목 직접 수정
분개 1거래 → N계정과목 분할
수동 입력 API 미제공 거래 추가
거래 숨김 특정 거래 숨기기/복원
Excel 내보내기 조회 데이터 다운로드
잔액 재계산 기간 전 잔액 기준 자동 계산

데이터베이스 테이블 요약

테이블 역할 마이그레이션 (API)
barobill_bank_transactions 거래내역 저장 2026_01_23_130000_...
barobill_bank_transaction_overrides 적요/내용 수정 2026_02_06_095159_...
barobill_bank_transaction_splits 분개 데이터 2026_02_06_200000_...
account_codes 계정과목 마스터 -
barobill_members 테넌트별 연동 정보 -
barobill_configs API 설정 (환경별) -

HTMX 호환성

  • React 기반 페이지이므로 HX-Redirect 필요
  • @push('scripts') 블록에 React/Babel 스크립트 포함
  • HTMX 네비게이션 시 전체 페이지 리로드 필수