Skip to content

A1: corp 다업종 자동 brand resolve + 운영 외 업종 차단#188

Merged
bat1120 merged 1 commit into
devfrom
IM3-corp-brand-resolver
May 4, 2026
Merged

A1: corp 다업종 자동 brand resolve + 운영 외 업종 차단#188
bat1120 merged 1 commit into
devfrom
IM3-corp-brand-resolver

Conversation

@bat1120

@bat1120 bat1120 commented May 4, 2026

Copy link
Copy Markdown
Contributor

Summary

다업종 법인 가입자가 시뮬 시 회원가입 top_brand (자동 매핑된 1개) 와 다른 업종 선택하면 같은 corp 의 해당 업종 가장 큰 brand 자동 매핑. 운영 외 업종 선택 시 차단.

동작 시나리오 (실제 검증 완료)

(주)더본코리아 가입자가 시뮬 시 업종 선택:

사용자 입력 resolver 결과
커피 → 빽다방 (1,712개)
중식 → 홍콩반점0410 (293개, alt: 리춘시장/고투웍)
피자 → 빽보이피자 (243개)
한식 → 한신포차 (129개, alt 11종)
서양식 → 롤링파스타 (130개)
주점 → 백스비어 (86개)
치킨 ❌ HTTP 400 INDUSTRY_NOT_OPERATED + 운영 업종 list 응답
편의점 ❌ HTTP 400 INDUSTRY_NOT_OPERATED

신규 파일

  • backend/src/services/corp_brand_resolver.py
    • get_corp_industries(biz_number) — corp 운영 brand+업종 list
    • resolve_brand_for_industry(biz_number, industry) — 자동 매핑
    • corpNm 정규화 ((주)//주식회사 noise 제거 + ILIKE)

수정

파일 변경
schemas/simulation_input.py biz_number: str | None Optional 필드 추가 (트리거)
main.py _validate_and_resolve_brand() helper + 7 endpoint 시작에 호출

검증 적용 endpoint: /analyze, /analyze/llm, /analyze/llm/async, /analyze/quick, /predict, /predict/async, /simulate.

API 응답

성공

{
  // 기존 시뮬 응답 그대로 (brand_name 자동 override)
}

운영 외 업종 (HTTP 400)

{
  "detail": {
    "error": "INDUSTRY_NOT_OPERATED",
    "company_name": "(주)더본코리아",
    "requested_industry": "치킨",
    "operated_industries": ["분식","서양식","제과제빵","주점","중식","커피","피자","한식"],
    "message": "'치킨' 업종은 (주)더본코리아 운영 brand 에 없습니다. 운영 가능 업종: ..."
  }
}

엣지 케이스

케이스 처리
biz_number 미입력 검증 skip, input.brand_name 그대로 (개인사업자/비회원 호환)
FTC 미등록 corp 경고 로그 + skip
같은 업종 다 brand frcsCnt 큰 것 1개 + alternatives list 응답

DB 변경

없음. read-only resolver + 시뮬 input 단계 검증만.

Test plan

  • resolver SQL 실측 검증 (더본코리아 매칭 15 brand)
  • mock user INSERT 후 8 업종 시나리오 검증 (성공 6 + 거부 2)
  • ruff check/format 통과
  • frontend 팝업 UI 통합 (별 PR)
  • auth dependency 통합 (옵션 — biz_number 자동 추출)

후속 권장

  • frontend 시뮬 입력 시 biz_number 자동 첨부 (auth 토큰에서 추출)
  • 운영 외 업종 선택 시 팝업 UI ("(주)더본코리아 운영 brand 에 치킨 없음 + 업종 list")
  • "신규 사업 진출 모드" 옵션 (검증 우회)

🤖 Generated with Claude Code

다업종 법인 (예: (주)더본코리아 = 빽다방·홍콩반점·빽보이피자·새마을식당...) 가입자가
시뮬 시 회원가입 top_brand (빽다방) 와 다른 업종 (중식) 선택하면 같은 corp 의
해당 업종 가장 큰 brand (홍콩반점0410) 자동 매핑.

운영 외 업종 (예: 치킨) 선택 시 HTTPException(400) + 운영 가능 업종 list 응답.

신규 파일:
- backend/src/services/corp_brand_resolver.py
  * get_corp_industries(biz_number) — corp 운영 brand+업종 list
  * resolve_brand_for_industry(biz_number, industry) — 자동 brand 매핑
  * corpNm 정규화 ('(주)', '㈜', '주식회사' 등 noise 제거 + ILIKE 매칭)

수정:
- backend/src/schemas/simulation_input.py
  * biz_number: str | None Optional 필드 추가 (corp 검증 트리거)
- backend/src/main.py
  * _validate_and_resolve_brand(input_data) helper 추가
  * /analyze, /analyze/llm, /analyze/llm/async, /analyze/quick,
    /predict, /predict/async, /simulate 7개 endpoint 시작에 호출

검증 (실제 DB):
- 더본코리아 가입자 → 커피=빽다방(1712) / 중식=홍콩반점0410(293) /
  피자=빽보이피자(243) / 한식=한신포차(129+11alt) / 서양식=롤링파스타 /
  주점=백스비어 → 모두 정확 매핑
- 치킨/편의점 → INDUSTRY_NOT_OPERATED 거부 + operated_industries 8종 응답

엣지 케이스:
- biz_number 미입력 (개인사업자/비회원) → 검증 skip, 기존 동작 (input.brand_name 그대로)
- USER_NOT_FOUND / CORP_NOT_IN_FTC → 경고 로그 + skip (회원가입 안 됐거나 FTC 미등록 corp)
- 같은 업종 brand 여러개 (한식 12 brand) → frcsCnt 큰 것 1개 + alternatives list

API 응답 (frontend 처리):
- 200 OK + brand_name override 적용
- 400 INDUSTRY_NOT_OPERATED + {company_name, requested_industry, operated_industries, message}

DB 변경: 0 (read-only resolver, 시뮬 input 단계 검증)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bat1120 bat1120 merged commit 5921974 into dev May 4, 2026
@bat1120 bat1120 deleted the IM3-corp-brand-resolver branch May 4, 2026 15:35
bat1120 added a commit that referenced this pull request May 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant