Files
sam-docs/features/crm/trading-partners.md
김보곤 157e8a95d5 docs:고객/거래처/채권관리 개발문서 추가 (5개 메뉴)
- 거래처관리: vendor/freelancer 타입, OCR 명함인식
- 고객사관리: VIP/Gold/Silver/Bronze 등급, 업종별 관리
- 미수금관리: 부분/전액 수금, 연체 추적, API 서비스
- 미지급금관리: 부분/전액 지급, 세금계산서 추적
- 환불/해지관리: 승인 워크플로우, refund/cancel 타입

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 16:54:06 +09:00

4.7 KiB

거래처관리

개요

거래처관리는 회사의 거래처(업체/프리랜서)를 등록하고 관리하는 기능입니다. 업종별 분류, 사업자번호/계좌 관리, OCR 명함 인식을 지원합니다.

  • 라우트: GET /finance/partners
  • 라우트 이름: finance.partners
  • UI 기술: React 18 + Babel (브라우저 트랜스파일링)

파일 구조

mng/
├── app/Http/Controllers/Finance/
│   └── TradingPartnerController.php       # 메인 컨트롤러 (5개 메서드)
├── app/Models/Finance/
│   └── TradingPartner.php                 # 거래처 모델
├── app/Services/
│   └── TradingPartnerOcrService.php       # OCR 명함 인식 서비스
└── resources/views/finance/
    └── partners.blade.php                 # React 기반 단일 페이지

api/
└── database/migrations/
    └── 2026_02_04_221050_create_trading_partners_table.php

라우트

// routes/web.php (finance prefix 그룹 내)
GET    /partners             페이지 렌더링 (HX-Redirect)

// API 라우트 (partners prefix)
GET    /partners/list        index()     거래처 목록 (JSON)
POST   /partners/store       store()     거래처 등록
POST   /partners/ocr         ocr()       OCR 명함 인식
PUT    /partners/{id}        update()    거래처 수정
DELETE /partners/{id}        destroy()   거래처 삭제

컨트롤러

TradingPartnerController

메서드 HTTP 설명
index() GET 거래처 목록 (검색, 타입/카테고리/상태 필터)
store() POST 거래처 등록 (name, type, category 필수)
update() PUT 거래처 수정
ocr() POST OCR 명함 인식 (이미지 → 거래처 정보 추출)
destroy() DELETE 거래처 삭제 (Soft Delete)

index() 응답 구조

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "ABC 솔루션",
      "type": "vendor",
      "category": "IT/소프트웨어",
      "bizNo": "123-45-67890",
      "bankAccount": "우리은행 1002-xxx-xxxxx",
      "contact": "02-1234-5678",
      "email": "info@abc.co.kr",
      "manager": "김담당",
      "managerPhone": "010-1234-5678",
      "status": "active",
      "memo": ""
    }
  ],
  "stats": {
    "total": 50,
    "vendor": 35,
    "freelancer": 15,
    "active": 42
  }
}

모델

TradingPartner

테이블: trading_partners

필드 타입 설명
tenant_id bigint 테넌트 ID
name string(100) 거래처명
type string vendor(업체) / freelancer(프리랜서)
category string(50) 업종 카테고리
biz_no string 사업자번호
bank_account string 계좌 정보
contact string 연락처
email string 이메일
manager string 담당자명
manager_phone string 담당자 연락처
status string active / inactive
memo text 메모
  • SoftDeletes 적용
  • Scope: active(), forTenant($tenantId)

뷰 구성 (React)

partners.blade.php

┌─ 페이지 헤더 ──────────────────────
│  제목: "거래처관리"
│  [CSV 내보내기] [OCR 등록] [등록] 버튼
│
├─ 통계 카드 (4열) ──────────────────
│  전체 | 업체 | 프리랜서 | 활성
│
├─ 필터 영역 ────────────────────────
│  검색 (거래처명, 담당자) | 타입 (업체/프리랜서) | 카테고리 | 상태
│
├─ 거래처 목록 테이블 ───────────────
│  거래처명 | 타입 | 카테고리 | 사업자번호 | 계좌 | 담당자 | 상태 | 작업
│  └─ 타입: 업체(파랑), 프리랜서(보라) 배지
│
├─ 등록/수정 모달 ───────────────────
│  거래처명, 타입(업체/프리랜서), 카테고리
│  사업자번호, 계좌정보, 연락처, 이메일
│  담당자, 담당자 연락처, 상태, 메모
│
└─ OCR 모달 ─────────────────────────
   명함 이미지 업로드 → AI 인식 → 자동 필드 채우기

OCR 명함 인식

TradingPartnerOcrService

명함 이미지를 Claude Vision API로 분석하여 거래처 정보를 자동 추출합니다:

  • 이미지(Base64) → Claude Vision API 호출
  • 회사명, 담당자명, 연락처, 이메일, 주소 등 추출
  • 추출 결과를 등록 폼에 자동 입력

HTMX 호환성

  • React 기반 페이지이므로 HX-Redirect 필요
  • @push('scripts') 블록에 React/Babel 스크립트 포함