Files
sam-sales/salesmanagement/수당지급체계.md
2025-12-17 12:59:26 +09:00

18 KiB
Raw Blame History

영업관리 수당 지급 체계

개요

이 문서는 영업관리 시스템의 수당 지급 체계를 정의합니다. 수당은 가입비에 대해서만 지급되며, 구독료에 대한 수당은 지급되지 않습니다.


1. 기본 원칙

1.1 수당 지급 대상

  • 가입비만 수당 지급 대상
  • 구독료는 수당 계산에서 제외

1.2 계층 구조

내 조직 (영업관리자)
├── 내 직접 판매 (20%)
├── 1차 하위 (직속) (5%)
│   └── 2차 하위 (손자) (3%)
└── 1차 하위 (직속) (5%)

1.3 핵심 개념

  • 직접 판매: 내가 직접 판매한 계약
  • 1차 하위 (관리자 수당): 내가 초대한 영업관리가 판매한 계약
  • 2차 하위 (교육자 수당): 내 하위의 하위가 판매한 계약

2. 수당 지급 비율

구분 지급 비율 설명
직접 판매 가입비의 20% 본인이 직접 판매한 계약의 가입비
관리자 수당 가입비의 5% 직속 하위(1차)가 판매한 계약의 가입비
교육자 수당 가입비의 3% 2차 하위(손자)가 판매한 계약의 가입비

총 수당 = 직접 판매(20%) + 관리자 수당(5%) + 교육자 수당(3%)


3. 계층 구조 상세 설명

3.1 역할 정의

판매자 (Seller)

  • 직접 영업을 성사시킨 담당자
  • 자신의 판매에 대해 20% 수당

관리자 (Manager)

  • 판매자를 데려온 상위 담당자
  • 하위 1단계의 판매에 대해 5% 수당

교육자 (Educator)

  • 관리자를 데려온 상위 담당자
  • 하위 2단계의 판매에 대해 3% 수당

3.2 계층 예시

A (영업관리자)
├── A의 직접 판매: 1,000만원
├── B (1차 하위)
│   └── B의 판매: 2,000만원
└── C (1차 하위)
    ├── C의 판매: 1,500만원
    └── D (2차 하위)
        └── D의 판매: 3,000만원

A가 받는 수당:

  • A의 직접 판매: 1,000만원 × 20% = 200만원
  • B의 판매 (관리자 수당): 2,000만원 × 5% = 100만원
  • C의 판매 (관리자 수당): 1,500만원 × 5% = 75만원
  • D의 판매 (교육자 수당): 3,000만원 × 3% = 90만원
  • A의 총 수당: 465만원

4. 수당 계산 로직

4.1 내 총 수당 계산 공식

내 총 수당 = (내 직접 판매 × 20%) 
          + (1차 하위 전체 판매 × 5%) 
          + (2차 하위 전체 판매 × 3%)

4.2 JavaScript 계산 코드

// 내 직접 판매 수당 (20%)
const myDirectSales = findDirectSales(myOrg);
const sellerCommission = myDirectSales * 0.20;

// 1차 하위 관리자 수당 (5%)
const level1Sales = calculateLevel1TotalSales(myOrg);
const managerCommission = level1Sales * 0.05;

// 2차 하위 교육자 수당 (3%)
const level2Sales = calculateLevel2TotalSales(myOrg);
const educatorCommission = level2Sales * 0.03;

// 총 수당
const totalCommission = sellerCommission + managerCommission + educatorCommission;

5. 지급 일정

5.1 계약일 정의

  • 계약일: 가입비 완료일을 기준으로 함

5.2 수당 지급일

  • 가입비 수당: 가입비 완료 후 지급
  • 구독료 수당은 없음 (구독료는 수당 대상 아님)

6. 회사 마진

6.1 마진 계산

회사 마진 = 가입비 - 총 수당
         = 가입비 - (20% + 5% + 3%)
         = 가입비 × 72%

6.2 최대 수당 비율

  • 3단계 전체가 채워진 경우 최대 28% 수당
  • 나머지 **72%**는 회사 마진

7. 특수 상황 처리

7.1 하위가 없는 경우

  • 1차 하위가 없으면: 관리자 수당(5%) 없음
  • 2차 하위가 없으면: 교육자 수당(3%) 없음
  • 본인의 직접 판매(20%)만 받음

7.2 계약 취소/해지

  • 이미 지급된 가입비 수당은 회수하지 않음
  • 향후 정책 보완 예정

8. 대시보드 표시 구조

8.1 전체 누적 실적

  • 총 가입비: 전체 기간 누적 가입비
  • 총 수당: 전체 기간 누적 수당
  • 전체 건수: 전체 계약 건수

8.2 기간별 실적 (당월 기본)

  • 판매자 수당 (20%): 기간 내 직접 판매 수당
  • 관리자 수당 (5%): 기간 내 1차 하위 관리 수당
  • 교육자 수당 (3%): 기간 내 2차 하위 교육 수당
  • 총 수당: 세 가지 수당의 합계

8.3 기간 선택 옵션

  • 당월: 현재 년월 (기본값)
  • 기간 설정: 시작 년월 ~ 종료 년월

8.4 기간별 필터링

  • 각 계약의 contractDate 기준으로 필터링
  • 선택된 기간 내 계약만 집계
  • 조직 트리도 동일 기간으로 필터링

9. 조직 구조 표시

9.1 계층별 색상

  • Depth 0 (내 조직): 파란색
  • Depth 1 (1차 하위): 초록색
  • Depth 2 (2차 하위): 보라색
  • 직접 판매: 노란색

9.2 표시 정보

각 노드마다 표시:

  • 이름 및 역할
  • 총 매출 (가입비)
  • 계약 건수
  • 내 수당: 해당 노드의 판매로부터 내가 받는 수당

9.3 직접 판매 항목

  • 오직 **"내 조직"**만 직접 판매 항목을 가짐
  • 1차, 2차 영업관리는 자신의 판매가 자동으로 집계됨
  • 노란색 배경, 쇼핑카트 아이콘으로 구분

10. 데이터 구조

10.1 조직 노드 구조

{
  id: 'unique-id',
  name: '김철수',
  depth: 1, // 0: 내 조직, 1: 1차 하위, 2: 2차 하위
  role: '영업관리',
  isDirect: false, // 직접 판매 항목 여부
  totalSales: 50000000, // 총 매출 (가입비)
  contractCount: 15,
  commission: 2500000, // 내가 받는 수당
  contracts: [ // 계약 목록 (날짜 포함)
    { id: 'c1', contractDate: '2024-11-15', amount: 25000000 },
    { id: 'c2', contractDate: '2024-12-01', amount: 25000000 }
  ],
  children: [ /* 하위 노드 */ ]
}

10.2 직접 판매 노드

{
  id: 'root-direct',
  name: '내 직접 판매',
  depth: 0,
  role: '직접 판매',
  isDirect: true,
  totalSales: 30000000,
  contractCount: 3,
  commission: 6000000, // 3천만원 × 20%
  contracts: [
    { id: 'c1', contractDate: '2024-12-01', amount: 10000000 },
    { id: 'c2', contractDate: '2024-12-15', amount: 20000000 }
  ],
  children: []
}

10.3 계약 데이터 구조

{
  id: 'contract-123',
  contractDate: '2024-12-01', // YYYY-MM-DD 형식
  amount: 25000000 // 가입비
}

11. 기간별 필터링 로직

11.1 필터링 알고리즘

filterNodeByDate(node, startDate, endDate) {
  // 1. 해당 노드의 계약 중 기간 내 계약만 필터링
  const filteredContracts = node.contracts.filter(contract => {
    const contractDate = new Date(contract.contractDate);
    return contractDate >= startDate && contractDate <= endDate;
  });
  
  // 2. 하위 노드도 재귀적으로 필터링
  const filteredChildren = node.children
    .map(child => filterNodeByDate(child, startDate, endDate))
    .filter(c => c !== null);
  
  // 3. 매출 재계산
  const ownSales = filteredContracts.reduce((sum, c) => sum + c.amount, 0);
  const childrenSales = filteredChildren.reduce((sum, c) => sum + c.totalSales, 0);
  const totalSales = ownSales + childrenSales;
  
  // 4. 데이터가 없으면 null 반환 (표시 안함)
  if (totalSales === 0 && filteredChildren.length === 0) {
    return null;
  }
  
  // 5. 수당 재계산
  const commission = calculateCommission(node, ownSales, childrenSales);
  
  return { ...node, totalSales, contractCount, commission, contracts: filteredContracts, children: filteredChildren };
}

11.2 기간 옵션

  • 당월: new Date(year, month, 1) ~ new Date(year, month+1, 0)
  • 커스텀: 사용자가 선택한 시작일 ~ 종료일

12. 운영자 화면 - 영업담당 관리

12.1 개요

운영자는 모든 영업담당의 실적과 수당을 역할별로 구분하여 확인할 수 있습니다.

12.2 통계 카드 (6개)

카드 설명 계산 방식
총 건수 전체 계약 건수 모든 영업담당의 계약 건수 합계
이번달 건수 이번달 신규 계약 당월 계약 건수 합계
총 가입비 전체 누적 가입비 모든 계약의 가입비 합계
총 수당 지급 전체 누적 수당 모든 영업담당에게 지급한 수당 합계
이번달 수당 이번달 지급 예정 당월 계약에 대한 수당 합계
지난달 수당 지난달 지급 완료 전월 계약에 대한 수당 합계

12.3 영업담당 개별 카드 구조

각 영업담당 카드에 표시:

김철수 [아이콘]
├── 총 건수: 15건
├── 이번달 건수: 3건
├── 총 가입비: ₩75,000,000
├── └ 직접 판매 (20%): ₩6,000,000
├── └ 관리자 (5%): ₩2,000,000
├── └ 교육자 (3%): ₩900,000
├── 총 수당: ₩8,900,000
├── 이번달 수당: ₩1,200,000
└── 지난달 수당: ₩1,500,000

12.4 역할별 계약 데이터 구조

{
  id: 'contract-123',
  customer: '고객사 A',
  contractDate: '2024-12-01',
  amount: 25000000,
  role: 'direct' // 'direct', 'manager', 'educator'
}

역할 타입:

  • direct: 직접 판매 (20% 수당)
  • manager: 1차 하위 관리 (5% 수당)
  • educator: 2차 하위 교육 (3% 수당)

12.5 세부 내역 화면

영업담당 클릭 시 표시:

역할별 수당 요약 (3개 카드)

직접 판매 (20%) 관리자 수당 (5%) 교육자 수당 (3%)
🟢 ₩6,042,670 🟣 ₩2,362,340 🟠 ₩914,256
₩30,213,350 × 20% ₩47,246,800 × 5% ₩30,475,200 × 3%

계약 목록 테이블

번호 고객사 계약일 역할 가입비 수당
1 고객사 A 2024-11-15 🟢 직접 판매 (20%) ₩25,000,000 ₩5,000,000
2 고객사 B 2024-12-01 🟣 관리자 (5%) ₩30,000,000 ₩1,500,000
3 고객사 C 2024-10-20 🟠 교육자 (3%) ₩20,000,000 ₩600,000
... ... ... ... ... ...
합계 ₩107,689,150 ₩9,477,266

12.6 역할별 색상 구분

  • 🟢 초록색: 직접 판매 (20%)
  • 🟣 보라색: 관리자 (5%)
  • 🟠 주황색: 교육자 (3%)

12.7 계약 생성 로직

// 각 영업담당마다 역할별 계약 생성
const directContracts = generateContracts(2~6); // 직접 판매
const managerContracts = generateContracts(3~10); // 1차 하위
const educatorContracts = generateContracts(1~5); // 2차 하위

// 역할 구분
directContracts.forEach(c => c.role = 'direct');
managerContracts.forEach(c => c.role = 'manager');
educatorContracts.forEach(c => c.role = 'educator');

// 수당 계산
const directCommission = directSales × 0.20;
const managerCommission = managerSales × 0.05;
const educatorCommission = educatorSales × 0.03;
const totalCommission = directCommission + managerCommission + educatorCommission;

12. 운영자 화면 - 영업담당 관리

12.1 개요

운영자는 모든 영업담당의 실적과 수당을 역할별로 구분하여 확인할 수 있습니다.

12.2 통계 카드 (6개)

카드 설명 계산 방식
총 건수 전체 계약 건수 모든 영업담당의 계약 건수 합계
이번달 건수 이번달 신규 계약 당월 계약 건수 합계
총 가입비 전체 누적 가입비 모든 계약의 가입비 합계
총 수당 지급 전체 누적 수당 모든 영업담당에게 지급한 수당 합계
이번달 수당 이번달 지급 예정 당월 계약에 대한 수당 합계
지난달 수당 지난달 지급 완료 전월 계약에 대한 수당 합계

12.3 영업담당 개별 카드 구조

각 영업담당 카드에 표시:

김철수 [아이콘]
├── 총 건수: 15건
├── 이번달 건수: 3건
├── 총 가입비: ₩75,000,000
├── └ 직접 판매 (20%): ₩6,000,000
├── └ 관리자 (5%): ₩2,000,000
├── └ 교육자 (3%): ₩900,000
├── 총 수당: ₩8,900,000
├── 이번달 수당: ₩1,200,000
└── 지난달 수당: ₩1,500,000

12.4 역할별 계약 데이터 구조

{
  id: 'contract-123',
  customer: '고객사 A',
  contractDate: '2024-12-01',
  amount: 25000000,
  role: 'direct' // 'direct', 'manager', 'educator'
}

역할 타입:

  • direct: 직접 판매 (20% 수당)
  • manager: 1차 하위 관리 (5% 수당)
  • educator: 2차 하위 교육 (3% 수당)

12.5 세부 내역 화면

영업담당 클릭 시 표시:

역할별 수당 요약 (3개 카드)

직접 판매 (20%) 관리자 수당 (5%) 교육자 수당 (3%)
🟢 ₩6,042,670 🟣 ₩2,362,340 🟠 ₩914,256
₩30,213,350 × 20% ₩47,246,800 × 5% ₩30,475,200 × 3%

계약 목록 테이블

번호 고객사 계약일 역할 가입비 수당
1 고객사 A 2024-11-15 🟢 직접 판매 (20%) ₩25,000,000 ₩5,000,000
2 고객사 B 2024-12-01 🟣 관리자 (5%) ₩30,000,000 ₩1,500,000
3 고객사 C 2024-10-20 🟠 교육자 (3%) ₩20,000,000 ₩600,000
... ... ... ... ... ...
합계 ₩107,689,150 ₩9,477,266

12.6 역할별 색상 구분

  • 🟢 초록색: 직접 판매 (20%)
  • 🟣 보라색: 관리자 (5%)
  • 🟠 주황색: 교육자 (3%)

12.7 계약 생성 로직

// 각 영업담당마다 역할별 계약 생성
const directContracts = generateContracts(2~6); // 직접 판매
const managerContracts = generateContracts(3~10); // 1차 하위
const educatorContracts = generateContracts(1~5); // 2차 하위

// 역할 구분
directContracts.forEach(c => c.role = 'direct');
managerContracts.forEach(c => c.role = 'manager');
educatorContracts.forEach(c => c.role = 'educator');

// 수당 계산
const directCommission = directSales × 0.20;
const managerCommission = managerSales × 0.05;
const educatorCommission = educatorSales × 0.03;
const totalCommission = directCommission + managerCommission + educatorCommission;

13. API 연동 (향후 구현)

13.1 필요한 API 엔드포인트

GET /api/sales/organization?startDate=2024-12-01&endDate=2024-12-31
GET /api/operator/managers?startDate=2024-12-01&endDate=2024-12-31

13.2 응답 데이터 구조

위의 "10. 데이터 구조"와 동일한 형식으로 반환


14. 개발 노트

14.1 구현 완료

  • 가입비 기반 수당 계산
  • 3단계 계층 구조 (직접/1차/2차)
  • 계약 날짜 기반 기간 필터링
  • 대시보드 통계 연동
  • 역할별 수당 상세 표시
  • 계약 날짜 데이터 구조 추가
  • 운영자 화면 영업담당 관리
  • 역할별 계약 구분 (직접/관리자/교육자)
  • 영업담당 세부 내역 역할별 표시
  • 모달창 계약 상세 내역 및 날짜 표시

14.2 향후 개선 사항

  • 실제 DB 연동
  • 계약 취소/해지 처리 로직
  • 수당 지급 이력 관리
  • 월별 수당 지급 스케줄
  • 세금 공제 계산
  • 운영자 화면 실시간 데이터 연동
  • 영업담당별 성과 분석 리포트

14.3 주의사항

  • 현재는 샘플 랜덤 데이터 사용 (최근 12개월 내 랜덤 날짜)
  • 실제 구현 시 DB의 계약 데이터 기반으로 변경 필요
  • PHP 7.3 호환성 유지
  • 운영자 화면은 각 영업담당의 역할별 계약을 모두 표시
  • 각 영업담당은 직접 판매, 관리자, 교육자 역할을 동시에 수행 가능

15. 변경 이력

날짜 버전 변경 내용
2024-12-02 1.0 초기 문서 작성 - 가입비 기반 수당 체계 정의
2024-12-02 1.1 계약 날짜 구조 추가 - 기간별 필터링 로직 문서화
2024-12-02 1.2 운영자 화면 추가 - 역할별 계약 구분 및 수당 관리 상세화

16. 운영자 화면 계산 예시

16.1 영업담당 "김철수"의 데이터

역할별 계약:

  • 직접 판매: 3건, 총 ₩30,000,000
  • 관리자 역할: 8건, 총 ₩100,000,000 (1차 하위의 판매)
  • 교육자 역할: 5건, 총 ₩50,000,000 (2차 하위의 판매)

수당 계산:

직접 판매 수당 = ₩30,000,000 × 20% = ₩6,000,000
관리자 수당 = ₩100,000,000 × 5% = ₩5,000,000
교육자 수당 = ₩50,000,000 × 3% = ₩1,500,000
───────────────────────────────────────────────
총 수당 = ₩12,500,000

카드 표시:

김철수
├── 총 건수: 16건
├── 이번달 건수: 3건
├── 총 가입비: ₩180,000,000
├── └ 직접 판매 (20%): ₩6,000,000
├── └ 관리자 (5%): ₩5,000,000
├── └ 교육자 (3%): ₩1,500,000
└── 총 수당: ₩12,500,000

16.2 세부 내역 테이블 예시

번호 고객사 계약일 역할 가입비 수당
1 고객사 A 2024-11-15 직접 판매 (20%) ₩10,000,000 ₩2,000,000
2 고객사 B 2024-12-01 직접 판매 (20%) ₩20,000,000 ₩4,000,000
3 고객사 C 2024-10-20 관리자 (5%) ₩25,000,000 ₩1,250,000
4 고객사 D 2024-11-03 관리자 (5%) ₩35,000,000 ₩1,750,000
5 고객사 E 2024-09-15 교육자 (3%) ₩20,000,000 ₩600,000
6 고객사 F 2024-12-10 교육자 (3%) ₩30,000,000 ₩900,000
합계 ₩180,000,000 ₩12,500,000

문의 및 개선 제안

개발 과정에서 수당 체계 관련 질문이나 개선 제안 사항이 있으면 이 문서를 업데이트하여 관리합니다.