OrderHero · MD / 공급사

공급사 상품 등록 — 기획 문서 v3

공급사가 엑셀로 올린 상품을 시스템이 단어 유사도 점수로 기존 상품과 매칭한다 — 1.0 자동 · 0.75~0.99 후보(MD 선택) · 0.74 이하 신규. 공급사 화면과 MD 어드민은 권한으로 자동 분기되는 별개 화면. 1차 범위는 엑셀 업로드만, 단건 등록은 2차.

v3 · 개발팀 회의(2026-09-10) 반영 · 1차 = 엑셀 업로드 · 양식 v3(필수 9 / 선택 23 / 제거 2) · 개발 9/16 → QA·스테이지 9/17 → 리뷰 9/17(목) · v2(2026-09-02)에서 정정된 항목은 §9 변경 이력

  1. 개요 · 배경 · 1차 범위 · 일정
  2. 사용자 · 역할 · 화면 분리
  3. 공급사 포털 — 내 상품 리스트
  4. 핵심 정책 · 유사도 매칭
  5. 엑셀 양식 v3(필수 9 · 선택 23)
  6. 상태 모델
  7. 화면 흐름 — 단건 (2차)
  8. 화면 흐름 — 엑셀 · 성능 (1차)
  9. 등록 이력
  10. MD 검수 화면
  11. 정책 · 예외
  12. 변경 이력 (v13 → v2 → v3)
  13. 미정 항목
  14. 오픈 이슈

0. 개요 · 배경 — 왜 자동 매칭인가

문제의 뿌리는 "공급사는 자기 상품이 오더히어로에 이미 있는지 모른다"는 것.

공급사는 자기가 파는 상품을 오더히어로에 등록한다. 그런데 그 상품이 오더히어로에 이미 등록돼 판매 중인 상품인지, 완전히 새로운 상품인지 공급사는 알 수 없다. 같은 "요쿠르트 1000ml 냉장"을 A 공급사가 이미 올려놨어도, B 공급사는 그걸 모른 채 또 올린다.

그대로 두면 같은 상품이 중복 등록되거나, MD가 검수할 때마다 "이거 우리한테 이미 있는 거 아닌가?"를 수동으로 하나하나 찾아야 한다. 1,000줄짜리 엑셀을 올리면 그 수고가 1,000번 반복된다.

이 문서의 한 줄 목표 MD 검수 전에 시스템이 "이미 있는 상품"과 자동으로 매칭해준다. 사람(MD)은 매칭 결과를 확인만 하고, 시스템이 자신 없어 하는 것(후보군·신규·오류)에만 손을 댄다.

0-1. 왜 지금 이 순서인가 — 로드맵 (회의 2026-09-10)

공급사 상품 등록은 단독 기능이 아니라 세 단계 로드맵의 첫 칸이다. ① 공급사 상품 등록을 시스템이 통제한다(누가 무엇을 언제 올렸는지, 기존 상품과 어떻게 이어지는지). ② 그 위에 계약 조건을 DB화한다 — 지금은 공급사별 계약 조건이 로컬 문서로만 관리된다. ③ 마지막으로 재무·정산을 시스템 안으로 들인다 — 현재는 매달 1~10일에 MD·재무가 수기로 피드백을 주고받은 뒤 계산서를 끊는다. ①이 서야 ②③의 기준 데이터(공급사·상품·가격)가 생기므로, 이번 1차는 범위를 좁혀 빨리 "돌아가는 것"을 만드는 데 집중한다.

0-2. 1차 범위 = 엑셀 업로드만 회의 2026-09-10

1차(이번 스텝) / 2차(다음 스텝) 1차 = 공급사 포털 엑셀 업로드 → 서버 유사도 매칭 → MD 검수(승인·후보 선택·거절). 2차 = 단건 등록(어드민 모달·자동채움)과 "입력 값에 따라 추천이 뜨는" 인터랙티브 UX — 재기획 대상. 근거: 공급사는 엑셀 위주라 단건은 거의 쓰지 않는다. §4의 단건 서술은 2차 참고용으로 남기며 이번 개발 범위가 아니다.

0-3. 1차 일정 회의 2026-09-10

일자마일스톤비고
9/16 (수)개발 완료백엔드(엑셀 파싱·유사도·상태) + 프론트. 프론트(브라운)는 최소 2일 확보
9/17 (목)QA · 스테이지 반영양식 v3 실파일로 업로드 → 🟢🟡🔴⛔ 배분 → MD 검수까지 통과
9/17 (목)리뷰"돌아가는 것" 시연 — 완성도보다 엔드투엔드 동작이 기준

개발·QA가 하루 차이라 유사도 산식(§2-1)은 개발이 먼저 정하고 문서는 결과만 받는다. 일정이 밀리면 §5의 "비동기 배치"를 동기 처리로 낮추는 것이 1순위 축소 후보(가정).

1. 사용자 · 역할 · 화면 분리

두 주체가 등장한다. 각자 하는 일과 보지 않아도 되는 일이 명확히 갈린다.

역할하는 일보지 않는 것
공급사
외부
엑셀 양식 v3를 받아 채워 업로드(1차). 필수 9 필드는 공급사가 직접 적는다(유사도 계산용 6 + 입력만 3). 매칭 결과 요약(🟢🟡🔴⛔)을 보고 ⛔는 교정해 재업로드, 🔴 신규는 이미지 보완 후 제출. 단건 등록은 2차. 자기 상품이 기존 상품인지 신규인지 판단할 필요 없음. 히어로코드·그룹코드 등 내부 식별자 몰라도 됨. 후보 선택도 하지 않는다(MD가 함).
MD
내부
제출된 모든 줄을 검수 대기 목록에서 본다. 🟢 자동 매칭(1.0) 건은 후보 선택 없이 승인만, 🟡 후보(0.75~0.99)는 MD가 후보 중 선택, 🔴 신규(0.74 이하)는 정보 확인 후 승인/거절. 승인 뒤 사후 수정도 가능. 🟢 자동 매칭 건의 후보 선택 UI(이미 붙어 있어 고를 게 없음). 유사도 산식의 내부 연산 과정.
핵심 분업 "매칭은 시스템이, 애매한 선택만 사람이." — 시스템이 점수를 매겨 후보를 붙여주므로 MD는 후보를 뒤지지 않고 고르기만 한다. 다만 판매 등록으로 확정하는 승인은 별개다. 자동 승인 정책이 미정이라 🟢 자동 매칭 건도 검수 대기로 올라가 MD 승인을 거친다(§3, §10 M-2).

확인 못 함: 🟡 후보 목록을 공급사 화면에도 보여줄지는 회의에서 정하지 않았다. 이 문서는 "공급사에겐 상태만, 후보 목록은 MD 화면"으로 가정한다 — 뒤집히면 §5 결과 표에 후보 열이 추가된다.

1-2. 두 화면은 완전히 분리 — 권한 자동 분기 확정

공급사 포털과 어드민(MD)은 별개의 화면이다. 로그인 계정의 권한(공급사 / MD)에 따라 자동으로 분기되며, 공급사 계정엔 MD 검수 화면이 아예 보이지 않는다.

공급사 포털 (외부 로그인)
내 상품 리스트 · 엑셀 등록(1차) · 등록 이력. 단건 등록은 2차. 내부 식별자·MD 검수 화면은 안 보임.
어드민 · MD (내부 로그인)
검수 대기·승인됨·거절됨 · 🟡 후보 선택 · 수정 후 승인 · 사후 수정. 상품 관리 메뉴 안에 위치.
프로토타입 표기 주의 프로토타입에서는 설명을 위해 공급사 화면과 MD 화면을 나란히 오갈 수 있게 해두지만, 실제로는 권한에 따라 화면이 자동으로 갈린다. 화면 전환 장치는 데모용일 뿐 기능 요구사항이 아니다.

1-3. 어드민 메뉴 위치 — 신규 메뉴 공존 확정

어드민 상품 관리 아래에서, 기존 메뉴는 그대로 두고 이 프로젝트를 별도 메뉴로 추가한다. 셋은 공존한다(기존 메뉴 대체 아님).

메뉴경로상태
상품 관리 (기존)product/manage그대로 유지
공급사 상품 관리 (기존)supplier/product/manage그대로 유지
신규 공급사 상품 관리 (이 프로젝트)supplier/product/new별도 추가 · 공존

세 메뉴의 데이터소스를 하나로 합칠지, 계속 나눠 둘지는 미정(§10 M-6).

1-4. 입력 주체 — 필드 역할 4종, 단가는 미노출 회의 2026-09-10

MD만 다루는 자동/숨김 항목은 v3에서도 공급사에게 노출하지 않는다. 히어로코드 · MFC노출기준 · 검수필요여부 등은 시스템이 매칭·확정 시 내부 처리.

역할수필드쓰임
★ 유사도 계산 필수6상품명 · 과세여부 · 보관상태 · 중량 · 원산지 세부사항 · 브랜드기존 상품과의 유사도 점수를 만드는 재료. 하나라도 비면 ⛔
입력만 필수3유통사 상품코드 · 유통사 상품명 · net공급가공급사만 아는 값. 매칭에 쓰지 않고 그대로 저장
☆ 유사도 보조 선택3원산지 · 등급 · 주문 배수 단위있으면 점수에 보조 반영(가중치는 개발 결정), 없어도 통과
선택 선택20§양식 v3 표 참조저장만. 매칭 무관
제거2그룹 상품명 · 대분류양식에서 뺀다 — 공급사가 알 수 없는 값. 그룹·카테고리는 매칭 결과로 정해진다
가격 = net공급가 입력, 단가는 미노출 회의 2026-09-02 유지 net공급가를 공급사가 직접 입력(노출)하고, 단가는 화면·양식에서 뺀다. 공급사가 적는 자기 가격은 net공급가다. v3 양식에도 단가 열은 없다.

1·5. 공급사 포털 — 내 상품 리스트 확정

공급사가 로그인하면 자기 공급사에 귀속된 모든 상품이 리스트로 먼저 뜬다(남의 상품은 안 보임).

리스트의 상품 노출·구분은 기존 공급사 상품 관리(product/manage)와 동일한 방식·컬럼을 따른다. 새 표 형식을 만들지 않고 이미 익숙한 리스트를 그대로 재사용한다.

그룹 행 컬럼 (기존 product/manage와 동일)

그룹 ID그룹핑 갯수상품 이미지그룹 상품명상품명 카테고리총 중량중량수량원산지 제조사브랜드특성등급크기색상
GRP-…3🖼감귤(10~11과),1kg,국산감귤 과일>감귤1KG1KG1국내산 ——————

리스트의 그룹 상품명·카테고리는 기존 상품 데이터의 값이다(양식 v3에서는 제거된 필드 — 공급사가 적는 게 아니라 매칭 결과로 붙는다). 예시 행 값은 설명용.

이 리스트에서 등록으로 리스트 상단의 엑셀 등록 진입점에서 §5 흐름으로 이어진다. 제출한 내역은 등록 이력(§6)에 쌓이고, 매칭·검수를 거쳐 승인되면 이 리스트에 상품으로 반영된다.

2. 핵심 정책 · 유사도 매칭

v3의 뼈대. 단어 유사도 점수제 · 매칭 후 승계 · 양식/정규화 · 이미지 승계.

2-1. 매칭 = 단어 유사도(Similarity) 점수제 v3 핵심 · 회의 2026-09-10

엑셀의 각 줄을 기존 상품과 비교해 0~1.0 점수를 낸다. 재료는 ★ 필수 6 필드(상품명·과세여부·보관상태·중량·원산지 세부사항·브랜드), 보조로 ☆ 3 필드(원산지·등급·주문 배수 단위). 점수로 셋 중 하나로 판정한다.

점수판정다음 동작
1.0🟢 자동 매칭(패스)후보 노출 없이 그 상품(그룹)에 붙여 확정 → 검수 대기
0.75 ~ 0.99🟡 후보 제시점수순 후보 목록 → MD가 선택(또는 "해당 없음 → 신규")
0.74 이하🔴 신규기존 상품과 연결 없이 신규로 검수 대기
산식은 개발 결정 토큰화 방식(띄어쓰기·단위 분리·괄호 처리), 필드별 가중치, ☆ 보조 필드 반영 비율, 동점(1.0 복수) 처리는 개발이 정한다. 기획은 임계(1.0 / 0.75)와 필드 역할만 고정한다. 임계는 QA에서 배분(🟢🟡🔴 비율)을 보고 조정할 수 있게 설정값으로 둔다(가정).

1,000줄 업로드 시 배분 예시(650/250/92/8)는 프로토 예시 기반 가정이며, 유사도 산식이 정해진 뒤 QA 실파일로 재측정한다.

v2 서술 교체 v2의 "조건값 정규화 → match_key 인덱스 조회, 그룹 상품명 LIKE + 대분류 추천, 조건값 9개로 좁히기, 특성 제외"는 이 점수제로 교체됐다(§9 변경 이력). 단위 정규화(1L/1000ml → 1000ML)는 양식 검증 단계(§2-4)에 남는다.

2-2. 매칭이 붙으면 — 기존 상품 값을 승계 v3

🟢 자동 매칭 또는 🟡에서 MD가 후보를 고르면, 그 줄은 기존 상품(그룹)에 편입된다. 공급사가 적은 필수 9는 그대로 저장하고, 그룹 공통 정보는 기존 상품에서 승계한다.

구분필드출처
공급사 값 저장 직접 필수 9(★6 + 입력만 3) · 적어 낸 선택 필드 엑셀 값 그대로. 단가 필드는 없음
기존 상품에서 승계 그룹 확정 그룹 ID · 그룹 상품명 · 카테고리(대·중·소) · 상품 이미지(메인·서브1·서브2) · 총중량 · 배송유형 등 그룹 공통값 매칭된 상품(그룹)에서 상속 → 공급사 재입력 불필요. 양식에서 제거한 그룹 상품명·대분류가 여기서 채워진다
충돌 시 🟠 M-1 공급사 값 ≠ 그룹 값(예: 중량 표기 차이) 🟢(1.0)이면 정의상 충돌 없음. 🟡 선택 후 차이가 있으면 MD "수정 후 승인"으로 정리 — 어느 쪽을 그룹 값으로 삼는지는 그룹 생성 로직(M-1)과 함께 결정

🔴 신규(0.74 이하)는 승계할 상품이 없다. 공급사 값 9 + 선택 필드로 검수 대기에 올라가고, 그룹을 새로 만들지 / 어느 그룹에 넣을지는 미정(§10 M-1). 이미지는 공급사 업로드 또는 MD 보완.

폐기 — 단건 추천 흐름 2차 재기획 v2의 "단가 등록 → 이름 검색 → 동일 그룹 추천 → 선택하면 자동채움, 공급사는 3개만 입력" 흐름은 폐기한다. 입력 값에 따라 추천이 뜨는 인터랙티브 UX는 2차(단건 등록)에서 다시 기획한다. 1차 엑셀 흐름에는 화면 위 추천이 없다 — 서버가 점수를 매기고 MD가 고른다.

2-3. 비교 범위 = 기존 상품 전체 · 카테고리 선행 필터 없음 회의 2026-09-10

v2
그룹 상품명 LIKE + 대분류(드롭다운)로 후보를 먼저 자르고 조건값으로 좁힘
v3
필수 6 필드의 유사도 점수만으로 판정. 대분류·그룹 상품명은 양식에서 제거 — "카테고리 = 대분류만 드롭다운" 결정은 폐기

비교 대상 건수가 커서 성능이 문제면(§10 M-4) 인덱스·사전 필터는 개발이 내부적으로 둘 수 있다 — 단, 공급사에게 카테고리를 입력시키는 방식으로는 돌아가지 않는다.

2-4. 엑셀 업로드 — 양식 v3 고정 · 정규화

왜 양식·단위를 고정하나 단위가 자유 입력이면 "1kg"·"1000g"·"1키로"가 다 다른 토큰으로 들어와 유사도가 깨진다. 양식에서 컬럼·단위를 고정해야 점수가 안정된다.

2-5. 이미지 자동 승계

2-6. 유사도 점수 걸어보기 (예시)

공급사가 감귤 · 면세 · 냉장 · 1KG · 제주 · (브랜드 없음)을 올렸다고 하자. 기존 상품 세 건과 비교하면:

기존 상품(가정)차이점수(가정)판정
감귤 · 면세 · 냉장 · 1KG · 제주 · —없음1.0🟢 자동 매칭 → 승계
감귤(10~11과) · 면세 · 냉장 · 1KG · 제주 · —상품명 토큰 "(10~11과)" 추가0.8x🟡 후보 → MD 선택
감귤 주스 · 과세 · 냉장 · 1L · 제주 · A브랜드상품명·과세·중량·브랜드 다름0.4x🔴 (후보에도 안 뜸)

점수는 설명용 가정. 실제 값은 개발이 정한 토큰화·가중치에 따른다. 이 예시에서 후보가 하나라도 0.75 이상이면 그 줄은 🟡, 모두 0.74 이하면 🔴.

엑셀 양식 v3 (필수 9 · 선택 23 · 제거 2) 회의 2026-09-10

등록 양식은 공급사상품등록_양식_v3.xlsx로 고정한다. 필드마다 역할(★ 유사도 필수 / 입력만 / ☆ 유사도 보조 / 선택)을 붙였다 — 임의 필드가 아니다.

필수 9

#필드역할비고
1상품명★ 유사도예: 감귤 — 가장 큰 재료
2과세여부★ 유사도면세 / 과세 — 허용값 외 ⛔
3보관상태★ 유사도냉장 / 냉동 / 상온 — 허용값 외 ⛔
4중량★ 유사도예: 1KG — 단위 정규화(§2-4)
5원산지 세부사항★ 유사도예: 제주 / 완도 — v3에서 선택 → 필수로(v2 M-7 "원산지 필수 여부" 종결)
6브랜드★ 유사도없으면 명시적 공란 허용 여부는 개발 결정(가정: 공란 = "브랜드 없음" 토큰)
7유통사 상품코드입력만공급사 자사 코드(=공급사 상품코드). 매칭 키 아님
8유통사 상품명입력만공급사가 부르는 이름(=공급사 상품명). 상품명(#1)과 별개
9net공급가입력만공급사가 적는 자기 공급가. 단가 열 없음

선택 23 = ☆ 유사도 보조 3 + 선택 20

역할필드
☆ 유사도 보조 (3)원산지 · 등급 · 주문 배수 단위 — 있으면 점수에 보조 반영, 없어도 통과
선택 (20)배송예정일수 · 배송유형 · 외부 적재 · 최소 주문 수량 · 라벨용 수량 단위 · 제조사 · 수량 · 할인기준가 · 상품상세 · 색상 · 상품단위 · 크기 · 수치 · 특성 · 일시품절 · 장기품절 · 재고수량 · 수량제한 · 단위당 상품 개수 · 총량피킹

v2에서 필수였던 배송예정일수·배송유형·외부 적재·최소 주문 수량·주문 배수 단위·등급·원산지·특성은 v3에서 선택으로 내려갔다. 총량피킹은 v2 §1-4에서 "공급사 미노출"로 적었으나 v3 양식에는 선택 열로 남는다 — 노출 여부 불일치, 확인 못 함(양식 기준으로 표기). 할인기준가는 열은 남기되 필요 여부 미정(§10 M-10).

제거 2

필드왜 빼나
그룹 상품명공급사가 알 수 없는 내부 값. 매칭 후 기존 상품에서 승계(§2-2)
대분류"대분류만 드롭다운" 결정 폐기. 카테고리(대·중·소)는 매칭 결과로 붙고, 🔴 신규는 MD가 검수 시 지정
예시 행 (양식 v3 기준) 상품명 감귤 / 면세 / 냉장 / 1KG / 원산지 세부사항 제주 / 브랜드 — / 유통사 상품코드 A-1001 / 유통사 상품명 제주감귤1kg / net공급가 400 ·   상품명 단감 / 면세 / 상온 / 1KG / 경남 창원 / — / A-1002 / 창원단감1kg / 700

3. 상태 모델

두 축을 구분해야 한다 — 매칭 상태(시스템이 점수로 붙인 결과)와 검수 상태(MD가 처리한 결과).

3-1. 매칭 상태 — 업로드된 각 줄의 판정

업로드된 각 줄은 아래 넷 중 하나로 판정된다. 사람이 실제로 손대는 건 🟡🔴⛔ 셋뿐(🟢은 확인·승인만).

🟢
자동 매칭 · 1.0
유사도 1.0. 시스템이 기존 상품에 붙여 자동확정. 후보 선택 UI 없음. → 검수 대기로 이동.
🟡
후보 · 0.75~0.99
후보가 하나 이상. 점수순 목록을 MD가 검수 화면에서 선택(또는 해당 없음 → 신규).
🔴
신규 · 0.74 이하
기존 상품과 연결 없음. 공급사 값 그대로 검수 대기 + 이미지 보완.
⛔
오류
필수 9 누락 · 단위 없음 · 허용값 외. 제출에서 제외 → 재업로드.

3-2. 자동확정 ≠ 판매 등록 🟠 자동 승인 정책 미정

지금은 전건 검수 🟢 자동확정은 "매칭이 확정됐다"는 뜻이지 곧바로 판매 등록되는 게 아니다. 어느 매칭까지 MD 승인 없이 자동 판매 등록할지(자동 승인 정책)가 미정이라, 현재는 🟢을 포함해 제출된 전 건이 검수 대기로 올라가 MD 승인을 거친다.

3-3. 검수 상태 — MD 처리 결과

제출된 줄은 MD 화면에서 세 탭으로 관리된다: 검수 대기 · 승인됨 · 거절됨(§7). 승인되면 판매 등록에 반영되고, 거절되면 사유가 공급사에 전달돼 보완·재제출한다.

매칭 상태조건후보 선택사람 개입제출 처리
🟢 자동 매칭유사도 1.0없음(이미 붙음)MD 승인만검수 대기 → 승인
🟡 후보0.75 ~ 0.99 후보 1개 이상MD가 선택MD 후보 선택 → 승인이번 제출에 포함
🔴 신규0.74 이하없음(매칭 대상 없음)공급사 이미지 보완 · MD 카테고리 지정이번 제출에 포함
⛔ 오류필수 9 누락 · 단위 · 허용값—공급사 양식 교정제출에서 제외 · 재업로드
넷 다 "판매 등록"은 아니다 — 오류만 빠진다 🟡·🔴는 공급사가 따로 처리할 게 없다(🟡 선택은 MD, 🔴는 이미지만). 이번 제출에 함께 담겨 검수로 넘어간다. 제출에서 완전히 빠지는 건 ⛔ 오류뿐이고, 오류는 양식을 고쳐 재업로드한다.

매칭이 도는 중(서버 배치)에는 업로드 화면의 진행률로만 보이고, 등록 이력에는 남지 않는다 — 이력은 "제출 완료분"만(§6).

4. 화면 흐름 — 단건 등록 2차 · 이번 범위 아님

공급사가 상품 하나를 등록할 때. 실제 어드민 "상품 등록" 모달을 그대로 쓴다는 방향은 유지하되, 1차(9/16)에는 개발하지 않는다.

2차로 이월 · 추천 흐름 폐기 회의 2026-09-10 공급사는 엑셀 위주라 단건은 거의 안 쓴다 → 단건 모달·자동채움은 다음 스텝. v2의 "단가 등록 → 이름 검색 → 추천" 흐름은 폐기하고, 입력 값에 따라 추천이 뜨는 UX는 2차에서 재기획한다(유사도 점수제 §2-1을 화면에서 어떻게 보여줄지 포함). 아래는 2차 참고용으로 남긴 v2 서술이며, 판정 기준만 v3(점수제)로 맞췄다.

모달 구조 — 3섹션 + 이미지 3 2차

  1. 입력 → 유사도 판정
    상단 검색으로 그룹 추천 대신, 필수 6 필드를 채우면 시스템이 점수를 낸다(어느 시점에 어떻게 보여줄지는 2차 재기획).
  2. 판정 분기
    🟢 1.0 기존 상품에 붙여 그룹 공통값 승계
    🟡 0.75~0.99 후보 목록 → 선택(2차에서는 공급사가 고를지 MD가 고를지 재결정)
    🔴 0.74 이하 신규 → 3섹션 전체 직접 입력 + 이미지 업로드
  3. [등록] 제출
    입력 완료 후 등록. 제출 내역은 등록 이력에 쌓이고 검수 대기로 올라간다.
  4. MD 검수 → 판매 반영
    🟢도 검수 대기를 거쳐 MD 승인 시 판매 등록에 반영(자동 승인 정책 미정). 이후 MD 사후 수정 가능.

승인 프로세스 1차·2차 공통

어떤 경로로 들어오든 곧바로 등록되지 않는다. 아래 승인 프로세스를 거친다(엑셀 §5도 동일).

  1. 공급사 제출
    엑셀(1차) 또는 단건(2차)으로 제출.
  2. MD 검수
    제출 건이 검수 대기로 올라가고 MD가 개별 행으로 검수(§7). 🟡는 여기서 후보 선택.
  3. 승인 / 거절 / 수정 후 승인
    MD가 셋 중 하나로 처리. 거절 시 사유가 공급사에 전달돼 보완·재제출.
  4. 승인 시 등록
    승인된 건만 판매 등록에 반영. (🟢 자동 매칭 건도 현재는 이 승인을 거친다 — 자동 승인 정책 미정, §10 M-2.)

5. 화면 흐름 — 엑셀 일괄 등록 · 성능 1차 범위

1,000줄 대량 업로드. 서버가 비동기로 유사도를 매기고, 결과를 검토·보완한 뒤 한 번에 MD 검수로 제출한다. 9/17 시연은 이 흐름 엔드투엔드.

엑셀 다건 = 줄마다 같은 판정 로직 엑셀의 각 줄은 독립적으로 유사도 판정(§2-1) → 승계(§2-2) → 승인 프로세스(§4 하단)를 탄다. 2차 단건 등록이 생겨도 같은 판정 로직을 쓰도록 판정·승계를 API로 분리해 두는 것이 목표(개발 구조는 개발 결정).
  1. 양식 다운로드 → 업로드
    ⬇ 양식 다운로드로 공급사상품등록_양식_v3.xlsx를 받아 채운 뒤 업로드(1,000줄). 이미지는 신규분만 별도/Zip.
  2. 양식 검증 → ⛔ 분리
    필수 9 누락 · 단위 없음 · 허용값 외(과세·보관 등) 줄은 ⛔ 오류로 즉시 분리. 나머지만 매칭으로.
  3. 서버 비동기 유사도 계산 · 진행률
    업로드 직후엔 접수만. 서버가 배치로 점수를 매기며 진행률(0 → 1,000줄)을 보여주고, 끝나면 완료 알림. 이 진행 상태는 이력에 남지 않는다(§3).
  4. 결과 요약 배분
    🟢 자동 매칭(1.0) / 🟡 후보(0.75~0.99) / 🔴 신규(0.74 이하) / ⛔ 오류(제외). 예: 650 / 250 / 92 / 8(가정).
  5. 결과 표에서 보완 (공급사)
    줄별 상태 뱃지가 붙은 표. 공급사가 손대는 건 🔴 이미지 보완과 ⛔ 양식 교정(재업로드)뿐. 🟡 후보 선택은 MD 몫이라 공급사 화면엔 상태만 표시(§1 가정). 업로드 파일은 다시 다운로드 가능.
  6. [MD 검수로 제출]
    ⛔만 제외되고, 🟢🟡🔴는 이번 제출에 함께 담겨 검수 대기로 넘어간다. 🔴 이미지 미첨부는 제출 차단이 아니라 MD 보완 대상(가정 — 차단으로 바꾸면 신규 비율만큼 제출이 막힌다).
  7. MD 검수 → 판매 반영
    제출된 전 건이 MD 검수 대기로. 🟢 승인 · 🟡 후보 선택 후 승인 · 🔴 카테고리 지정 후 승인/거절. 거절 시 사유 전달·재제출.
제출 게이트 — 넷 다 "이번에도" 등록 "후보·신규는 다음에 따로"가 아니다. 이번 제출에 함께 담긴다. 제출에서 빠지는 건 ⛔ 오류뿐. v2의 "후보 미선택 시 제출 불가"는 후보 선택 주체가 MD로 바뀌면서 사라졌다.

대량 매칭 성능 — 동기 즉시 로딩 지양 🟠 방식 미정

100~1,000건을 업로드하면서 전 건을 기존 상품 전체와 즉시 비교하면(사전 필터 없음, §2-3) 로딩이 오래 걸려 화면이 멈춘다. 동기 즉시 처리는 지양한다.

제안 — 서버 비동기 배치 업로드 직후에는 접수만 하고, 유사도 계산은 서버에서 비동기 배치로 돌린다. 화면에는 진행률을 노출하고, 끝나면 완료 알림 → 결과(🟢🟡🔴⛔ 배분)는 나중에 확인. 사용자는 기다리며 붙잡히지 않는다.
🟠 미해결 우려 비동기 배치가 방향으로는 맞지만 구체 방식은 미정 — 배치 주기·부분 결과 노출·재시도·건수 상한이 정해지지 않았다. 9/16 일정상 1차는 동기 처리 + 건수 상한으로 시작하고 비동기는 실측 뒤 붙이는 것도 선택지(§10 M-4).

예시 배분 (1,000줄, 가정)

구분대략사람 개입
🟢 자동 매칭(1.0)~650MD 승인만
🟡 후보(0.75~0.99)~250MD 후보 선택
🔴 신규(0.74 이하)~92공급사 이미지 · MD 카테고리
⛔ 오류~8공급사 재업로드

수치는 프로토 예시 배분(650/250/92/8)을 참고한 가정이며 운영 실측이 아니다. 산식이 정해진 뒤 QA 실파일로 배분을 재측정한다.

6. 등록 이력 확정

공급사가 제출 완료한 내역만 쌓이는 페이지. 매칭 진행 중인 건은 여기 안 들어온다.

일시구분건수상태파일명 / 내용
09-17 11:40엑셀1,000승인 820 · 거절 90 · 대기 90수산_9월.xlsx
09-16 15:02엑셀12검수 대기 12신규_유자청.xlsx
엑셀 배치는 부분집계로 표시 엑셀 1,000줄은 개별 줄로 검수되어 부분 승인/거절이 난다. 그래서 상태를 단일 값이 아니라 집계(예: 승인 820 · 거절 90 · 대기 90, 합 1,000)로 보여준다. 단건(2차)은 상태 하나(검수 대기 / 승인 / 거절 / 오류).

페이지네이션 20/50/100개씩 보기. 1차에는 구분 열에 엑셀만 뜬다. 예시 수치는 프로토 표기 기준.

7. MD 검수 화면 확정 · 1차 범위

MD 내부 화면. 제출된 줄을 엑셀 파일이 아니라 개별 상품 행으로 검수한다 — 1,000줄짜리 엑셀도 1,000개 행으로 펼쳐져 행별로 승인/거절된다. 🟡 후보 선택이 이 화면으로 왔다.

검색·필터 + 상태 탭

검수 대기 표 컬럼

☑공급사요청자요청일시상품명 · 유통사 상품명매칭유사도매칭 상품 / 후보net공급가MD 처리
☑부산 푸디스트김OO09-17 11:40감귤 · 제주감귤1kg 📄 수산_9월.xlsx🟢1.0감귤(10~11과),1kg,국산 GRP-…400승인 · 거절 · 수정 후 승인
☑부산 푸디스트김OO09-17 11:40단감 · 창원단감1kg 📄 수산_9월.xlsx🟡0.86[후보 3 ▾] 0.86 · 0.79 · 0.75700후보 선택 → 승인 · 거절
☑강릉 수산이OO09-16 15:02유자청 스틱 · 수제유자청 📄 신규_유자청.xlsx🔴0.41— (신규)900승인 · 거절 · 수정 후 승인

유사도 열 = 최고 후보 점수. 🟡는 후보 드롭다운(점수순)에서 하나를 고르거나 "해당 없음 → 신규". net공급가 = 공급사가 직접 입력한 값(단가 필드는 없음). 예시 점수는 가정.

행별 액션 + 일괄

액션동작
후보 선택(🟡) 회의 2026-09-100.75~0.99 후보를 점수순으로 보고 MD가 하나를 고른다 → 그 상품(그룹) 값 승계 → 승인 가능 상태로. 어느 것도 아니면 "해당 없음 → 신규"로 🔴 전환.
승인바로 승인 → 판매 등록 반영. 승인됨 탭으로. 🟡는 후보 선택 전엔 승인 버튼 비활성.
거절거절 사유 모달(간단 입력 + 사유 선택: 매칭 부정확 / net공급가 확인 / 상품 정보 부족 / 중복 등록) → 거절됨 탭. 사유는 공급사에 전달.
수정 후 승인전체 상품 수정 모달(기존 어드민 상품 등록 모달)을 열어 값 고친 뒤 승인 — 🔴 신규의 카테고리 지정도 여기서. 승인됨 탭에 "✔ 수정 후 승인"으로 표시.
일괄 승인 · 일괄 거절체크박스로 여러 행 선택 → 한 번에 승인/거절. 선택 건수 표시. 후보 미선택 🟡가 섞이면 그 행은 건너뛰고 건수 안내(가정).
승인됨 · 거절됨 탭 승인됨 = 판매 등록 반영, MD 필요 시 후속 수정 가능. 거절됨 = 거절 사유 컬럼이 net공급가 자리를 대체, 공급사가 보완 후 재제출.

8. 정책 · 예외

상황처리
단위 누락/불일치 (예: 중량 단위 없음)⛔ 오류로 제외 → 재업로드. 유사도 계산 대상에서 빠짐.
필수 9 누락⛔ 오류. 제출 불가. (브랜드 공란 처리는 개발 결정 — §양식 #6)
허용값 외 입력 (과세여부·보관상태 등)⛔ 오류. 양식 드롭다운으로 사전에 막는다.
유사도 1.0인 기존 상품이 여러 개🟡로 내려 MD가 선택(가정 — 산식과 함께 개발 결정). 같은 상품이 그룹을 달리해 중복 존재하는 경우로 M-1과 연동.
기존 상품에 매칭됐는데 공급사가 이미지 안 올림그룹 이미지 자동 승계 → 문제없음.
🔴 신규인데 이미지 없음이미지 직접 업로드/Zip 필요. 없으면 MD 보완 대상(제출 차단 아님, §5 가정).
🟡 후보 중 어느 것도 안 맞음MD 검수 화면의 "해당 없음 → 신규"로 🔴 전환.
자동 매칭이 틀렸음(오매칭)MD가 "수정 후 승인" 또는 승인 후 사후 수정으로 교정. 반복되면 임계(1.0) 재검토.
같은 유통사 상품코드로 재업로드가격·재고 갱신으로 해석해 기존 연결을 재사용할지, 새 검수 건으로 볼지 — 확인 못 함(1차는 새 검수 건으로 가정).

9. 변경 이력 (v13 → v2 → v3)

무엇이 언제 바뀌었나. v3에서 v2 서술을 교체·폐기한 항목은 아래에 그대로 남긴다.

버전일자근거핵심 변경
v13~2026-08프로토타입 v13히어로코드 단위 중복 확인 · 공급사가 결과 확인 · 검수 4상태(보류·반려·승인·수정 후 승인)
v22026-09-02개발팀 회의매칭 앞단화(그룹명 LIKE + 대분류 + 조건값 9) · 자동채움·그룹 픽스 · net공급가 입력/단가 제거 · 카테고리 대분류 드롭다운 · 화면 분리·신규 메뉴 · 엑셀 비동기 배치 · 등록 이력 · 두 축 상태 모델
v32026-09-10개발팀 회의1차 = 엑셀만(단건 2차) · 매칭 = 단어 유사도 점수제(1.0 / 0.75~0.99 / 0.74↓) · 후보 선택 = MD · 양식 v3(필수 9 / 선택 23 / 제거 2, 원산지 세부사항 필수, 그룹 상품명·대분류 제거) · 대분류 드롭다운 결정 폐기 · 단건 추천 흐름 폐기 · 일정 9/16·9/17 · 로드맵 배경

v3 변경점 (2026-09-10)

① 1차 범위 = 엑셀 업로드만 · 단건은 2차 회의 반영
공급사는 엑셀 위주라 단건 등록은 거의 안 쓴다. 단건 모달·자동채움은 다음 스텝으로 이월(§4 남김). 1차 일정: 개발 9/16 · QA/스테이지 9/17 · 리뷰 9/17(목) "돌아가는 것" 시연. 프론트(브라운) 최소 2일.
② 매칭 = 단어 유사도 점수제 가장 큰 변화
v2의 "조건값 정규화 → match_key 인덱스, 그룹명 LIKE + 대분류 추천, 조건값 9개로 좁히기"를 교체. 필수 6 필드(상품명·과세·보관·중량·원산지 세부사항·브랜드)로 점수를 내 1.0 자동 / 0.75~0.99 후보 / 0.74 이하 신규. 산식(토큰화·가중치)은 개발 결정(§2-1). v2 미정 M-3(임계)은 이것으로 종결.
③ 필드 역할 4종 · 양식 v3 회의 반영
★ 유사도 필수 6 / 입력만 3(유통사 상품코드·상품명·net공급가) / ☆ 보조 3(원산지·등급·주문 배수 단위) / 선택 20. 원산지 세부사항 필수화(v2 M-7 종결). 그룹 상품명·대분류 제거. 파일 공급사상품등록_양식_v3.xlsx(§양식 v3).
④ "카테고리 = 대분류만 드롭다운" 폐기 회의 반영
v2 ⑧의 대분류 드롭다운(농산물·수산물·가공품·축산물·잡화·서비스)은 폐기. 카테고리는 공급사 입력이 아니라 매칭 결과로 승계, 🔴 신규는 MD가 지정(§2-3).
⑤ 🟡 후보 선택 주체 = MD 회의 반영
v2는 공급사가 후보를 고르고 못 고르면 제출 불가였다. v3는 MD 검수 화면에서 선택(§7). "후보 미선택 시 제출 불가" 게이트는 사라지고, 제출에서 빠지는 건 ⛔뿐(§5).
⑥ 단건 추천 흐름 폐기 → 2차 재기획 회의 반영
"단가 등록 → 이름 검색 → 동일 그룹 추천 → 자동채움(공급사 3개만 입력)" 흐름은 폐기. 입력 값에 따라 추천이 뜨는 UX는 2차에서 점수제 위에 다시 설계(§2-2, §4).
⑦ 배경 — 로드맵 3단
공급사 상품 등록(통제) → 계약 조건 DB화(현재 로컬 문서) → 재무·정산 내재화(매달 1~10일 MD·재무 피드백 → 계산서). §0-1에 한 단락.

v2 변경점 (2026-09-02) — 유지 / 교체 표시

① 매칭 = 그룹 상품명 LIKE + 카테고리 v3에서 교체
메인 상품명 LIKE + 카테고리 1차, 조건값 9개(특성 제외) 2차, 1개 수렴 시 자동. → v3 ② 유사도 점수제로 교체.
② 가격 반전 — net공급가 입력, 단가 제거 유지
net공급가를 공급사가 직접 입력, 단가는 화면·양식에서 제거. v3 양식 "입력만 3"에 그대로.
③ 검색을 그룹(그룹코드) 기반으로 v3에서 교체
"요쿠르트+1000ml+냉장" 그룹만 검색. → 화면 검색 자체가 1차에서 빠지고, 비교는 기존 상품 전체 유사도(§2-3).
④ 엑셀 = 비동기 배치 + 제출 게이트 유지 · 게이트 축소
비동기 배치·진행률·완료 알림 유지. 게이트는 "후보 미선택 시 제출 불가"가 빠지고 ⛔ 제외만(v3 ⑤).
⑤ 이미지 자동 승계 유지
그룹 이미지(메인·서브1·서브2) 자동 승계, 신규만 업로드/Zip.
⑥ 상태·검수 구조 — 자동확정 ≠ 판매 등록 유지
매칭 4상태 × 검수 3탭. 🟢도 전건 검수(자동 승인 정책 미정). v3는 상태 정의를 점수 구간으로 바꿨을 뿐 구조 동일.
⑦ 화면 완전 분리 · 신규 메뉴 공존 · 등록 이력 신설 유지
권한 자동 분기, supplier/product/new 별도 메뉴, 등록 이력 페이지.
⑧ 그룹 픽스 확대 · 카테고리 대분류만·드롭다운 · 복제 제거 일부 폐기
그룹 선택 시 자동채움·수정 불가(단건 흐름)와 대분류 드롭다운은 폐기(v3 ④⑥). 하위 행 복제 버튼·컬럼 제거는 유지(§1·5).
⑨ 승인 프로세스 명시 · 확인필요 예외처리 · 엑셀=단건 로직 일부 유지
승인 프로세스(제출 → 검수 → 승인/거절/수정 후 승인)는 유지. "공급사가 후보 못 고르면 제출 불가·MD 대신 선택" 예외는 후보 선택이 MD 기본 경로가 되면서 흡수(v3 ⑤). 줄마다 같은 판정 로직은 유지(§5).
v2 판정 기준
이름 LIKE + 대분류 → 조건값 9로 좁힘
1개 = 자동 · 여럿 = 공급사가 선택 · 0 = 신규
v3 판정 기준
필수 6 필드 유사도 점수
1.0 = 자동 · 0.75~0.99 = MD가 선택 · 0.74↓ = 신규

10. 미정 항목 🟠 6건

진짜 미확정만 남긴다. 회의 2026-09-10으로 결정된 것은 먼저 표시하고 목록에서 뺐다.

결정됨 (2026-09-10)

v2 미정결정
M-3 자동 매칭 임계결정 유사도 1.0 자동 / 0.75~0.99 후보 / 0.74 이하 신규. 산식(토큰화·가중치)은 개발 결정.
M-7 원산지 필수 추가 여부결정 원산지 세부사항 = 필수(유사도 재료). 원산지는 선택·보조.
카테고리 대분류 관련소멸 대분류 필드 제거 → 대분류 드롭다운·필수 여부 논의 자체가 없어짐.
(회의 밖) M-5 하위 노출 범위 · M-9 그룹 생성일보류 이번 회의에서 다루지 않음. 1차 범위(엑셀 → 검수)와 무관해 목록에서 내리되 2차에서 다시 올린다.

남은 🟠 6건

🟠 M-1. 그룹 생성 로직 양식에 그룹 상품명이 없어졌다. 🔴 신규는 새 그룹을 만드는가? 🟢/🟡로 매칭된 줄은 그 히어로(기존 상품)의 그룹에 편입되는가, 히어로 옆에 새 히어로로 붙는가? 같은 "시금치 1KG 냉장"이 그룹을 달리해 존재하는 케이스(화면에 안 보이는 값 차이)도 여기서 정리해야 유사도 1.0 복수 처리(§8)가 안정된다. 가장 먼저 조사할 항목 — 9/16 전 결정 필요.
🟠 M-2. 자동 승인 정책 🟢(1.0) 건을 MD 승인 없이 자동으로 판매 등록할지가 미정. 지금은 안전하게 전 건 검수(§3-2). 정해지면 검수 대기 물량이 크게 줄 수 있다. 1차 시연은 전건 검수로 간다.
🟠 M-4. 엑셀 대량 매칭 성능 방식 비교 대상이 기존 상품 전체라 건수가 곱으로 커진다. 방향은 서버 비동기 배치 + 진행률 + 완료 알림(§5)이나 배치 주기·부분 결과 노출·재시도·건수 상한은 실측 뒤 확정. 9/16 일정상 1차를 동기 + 상한으로 갈지도 여기서 결정.
🟠 M-8. 그룹 "메인 상품" 정의 승계(§2-2)의 기준값이 되는 그룹 대표(메인) 상품이 무엇인지 미정. 유사도 비교 대상을 그룹 대표로 할지 히어로 전체로 할지에도 영향(M-1과 연동).
🟠 M-10. 할인기준가 필요 여부 v3 양식에 선택 열로 남아 있으나, net공급가를 공급사 입력으로 확정한 뒤 할인기준가를 유지할지 뺄지·입력 주체(공급사/MD)는 미정.
🟠 M-6. 두 메뉴 데이터소스 통합 / 분리 기존 product/manage·supplier/product/manage와 신규 supplier/product/new가 같은 데이터를 볼지, 소스를 나눠 둘지가 미정. 공존은 확정이나 데이터 통합 여부는 별도 결정.

개발 결정(기획 미정 아님): 유사도 산식(토큰화·필드 가중치·보조 필드 비율·1.0 복수 처리·브랜드 공란 처리) · 판정 API 분리 구조 · 임계 설정값 노출 여부.

11. 오픈 이슈

예시 수치에 대한 주의 이 문서의 배분 수치(650/250/92/8)·유사도 점수 예시·그룹 케이스는 프로토·회의 예시 기반의 가정이며 운영 실측이 아니다. 산식·양식 확정 뒤 QA 실파일과 스테이지 데이터로 재측정한다. (화면 구성은 스테이지 실화면 대조 완료, 양식 v3 필드는 회의 결정 기준.)
OrderHero · 공급사 상품 등록 기획 문서 v3 · 개발팀 회의(2026-09-10) 반영 · 1차 = 엑셀 업로드 · 양식 v3(필수 9 / 선택 23 / 제거 2) · 개발 9/16 → QA 9/17 → 리뷰 9/17(목) · v2(2026-09-02) 교체 항목은 §9 · 확정 아닌 항목은 🟠 미정 / 결정필요 표기