shopport 0.5.5 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/dashboard-ui/assets/index--f3qOCFU.css +1 -0
- package/dist/dashboard-ui/assets/index-CEBCsPnn.js +737 -0
- package/dist/dashboard-ui/index.html +2 -2
- package/dist/skills/product-parse/SKILL.md +71 -73
- package/dist/skills/sppt/SKILL.md +2 -1
- package/package.json +1 -1
- package/dist/dashboard-ui/assets/index-4URhos3v.js +0 -675
- package/dist/dashboard-ui/assets/index-emtGk1pQ.css +0 -1
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>shopport</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-CEBCsPnn.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index--f3qOCFU.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
|
@@ -1,130 +1,128 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sppt-product-parse
|
|
3
3
|
description: |
|
|
4
|
-
주문 상품명을
|
|
4
|
+
주문 상품명을 CatalogProduct/SourceOffering 기준으로 분류하고, 후보 검토 후 채널옵션 매핑까지 완료하는 워크플로우.
|
|
5
5
|
Use when asked to "상품명 분석", "SKU별 정리", "미매핑 상품 확인", "매핑 설정".
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# product-parse
|
|
9
9
|
|
|
10
|
-
주문 데이터의 상품명 →
|
|
10
|
+
주문 데이터의 상품명 → SourceOffering → CatalogProduct 분류 미리보기 → 후보 검토·적용까지의
|
|
11
|
+
워크플로우. 클라우드 카탈로그의 권위는 현대 CatalogProduct API에 있으며, 레거시
|
|
12
|
+
`ProductCatalogEntry` 파일 임포트나 `/api/sync/products` 쓰기는 사용하지 않습니다.
|
|
11
13
|
|
|
12
14
|
## When to use
|
|
13
15
|
|
|
14
|
-
- 주문 임포트 후
|
|
15
|
-
-
|
|
16
|
-
-
|
|
16
|
+
- 주문 임포트 후 미매핑 SourceOffering을 확인하고 싶을 때
|
|
17
|
+
- 상품명을 CatalogProduct 후보로 분류하고 싶을 때
|
|
18
|
+
- 후보를 검토하고 승인된 분류를 적용하고 싶을 때
|
|
19
|
+
- 채널 옵션의 현재 CatalogProduct 매핑을 확인하고 싶을 때
|
|
17
20
|
|
|
18
21
|
## Prerequisites
|
|
19
22
|
|
|
20
23
|
- 주문 데이터가 임포트되어 있어야 함 (`sppt import <file>` 또는 API 동기화)
|
|
24
|
+
- 클라우드 인증이 되어 있어야 함 (`sppt auth login` 또는 agent token)
|
|
21
25
|
|
|
22
26
|
## Steps
|
|
23
27
|
|
|
24
|
-
### 1. 상태 확인
|
|
28
|
+
### 1. 미매핑 상태 확인
|
|
25
29
|
|
|
26
30
|
```bash
|
|
27
31
|
sppt product unmapped
|
|
28
32
|
```
|
|
29
33
|
|
|
30
|
-
미매핑
|
|
34
|
+
미매핑 SourceOffering의 채널, 상품명, 옵션명, raw SKU를 확인합니다. 전부 매핑되어 있으면
|
|
35
|
+
분류 실행을 만들지 않고 종료합니다.
|
|
31
36
|
|
|
32
|
-
### 2. 분류
|
|
37
|
+
### 2. 분류 기준 확인
|
|
38
|
+
|
|
39
|
+
로컬 규칙 파일이 있으면 먼저 읽습니다.
|
|
33
40
|
|
|
34
41
|
```bash
|
|
35
|
-
sppt product rules
|
|
42
|
+
sppt product rules --local
|
|
36
43
|
```
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
- **규칙이 없으면**: 사용자에게 "상품 분류 규칙이 있나요?" 질문 → 없으면 상품명에서 자체 판단.
|
|
40
|
-
|
|
41
|
-
규칙 파일에 다음이 포함되면 카탈로그 + 매핑 모두 정확해집니다:
|
|
45
|
+
규칙 파일에 다음이 포함되면 후보 검토가 정확해집니다.
|
|
42
46
|
|
|
43
|
-
1.
|
|
44
|
-
2.
|
|
45
|
-
3.
|
|
46
|
-
4.
|
|
47
|
+
1. 카테고리·제품라인 분류 기준
|
|
48
|
+
2. 상품명 정규화·동의어 규칙
|
|
49
|
+
3. 세트 구성과 수량 옵션 패턴
|
|
50
|
+
4. raw SKU와 기존 CatalogProduct option의 대응 규칙
|
|
47
51
|
|
|
48
|
-
|
|
52
|
+
분류 실행 자체는 서버의 CatalogProduct/SourceOffering 규칙과 revision 검증을 따릅니다.
|
|
49
53
|
|
|
50
|
-
### 3.
|
|
54
|
+
### 3. 분류 미리보기 생성
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- **MECE**: 모든 상품이 하나의 카테고리에 정확히 배정
|
|
56
|
-
- **모호한 경우**: 자의적 분류 대신 사용자에게 질문
|
|
56
|
+
```bash
|
|
57
|
+
sppt product parse
|
|
58
|
+
```
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
출력된 실행 ID를 기록합니다. 이 명령은 CatalogProduct를 즉시 만들거나 기존 매핑을 바꾸지
|
|
61
|
+
않고, 미매핑 SourceOffering을 대상으로 `preview` classification run만 생성합니다.
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
### 4. 후보 확인
|
|
61
64
|
|
|
62
65
|
```bash
|
|
63
|
-
sppt product
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
[
|
|
68
|
-
{
|
|
69
|
-
"sku": "AB-MC20",
|
|
70
|
-
"brand": "알텐바흐",
|
|
71
|
-
"productLine": "316Ti",
|
|
72
|
-
"category": "냄비",
|
|
73
|
-
"productName": "멀티쿠커 편수",
|
|
74
|
-
"option": "20cm",
|
|
75
|
-
"rawNames": ["[알텐바흐] 316Ti 올인원 멀티쿠커 편수 20cm"],
|
|
76
|
-
"confidence": "llm"
|
|
77
|
-
}
|
|
78
|
-
]
|
|
66
|
+
sppt product parse status <runId> --json
|
|
79
67
|
```
|
|
80
68
|
|
|
81
|
-
|
|
69
|
+
각 결과의 source 상품명·옵션·raw SKU와 후보의 `candidateKind`, 제안 상품명, 대상 option,
|
|
70
|
+
신뢰도를 확인합니다.
|
|
82
71
|
|
|
83
|
-
|
|
72
|
+
- `existing_option`: 기존 CatalogProduct option으로 연결할 후보
|
|
73
|
+
- `new_catalog_product`: 새 CatalogProduct로 만들 후보
|
|
74
|
+
- `pending` 후보만 검토 대상입니다.
|
|
75
|
+
- 이름·SKU·옵션이 모호하면 자의적으로 승인하지 말고 사용자에게 질문합니다.
|
|
84
76
|
|
|
85
|
-
###
|
|
77
|
+
### 5. 후보 검토
|
|
86
78
|
|
|
87
|
-
|
|
79
|
+
확실한 후보만 승인하고, 잘못된 후보는 거절하거나 판단을 보류합니다.
|
|
88
80
|
|
|
89
81
|
```bash
|
|
90
|
-
sppt product
|
|
82
|
+
sppt product parse accept <runId> <candidateId>
|
|
83
|
+
sppt product parse reject <runId> <candidateId> --reason "상품명이 다름"
|
|
84
|
+
sppt product parse defer <runId> <candidateId> --reason "사용자 확인 필요"
|
|
91
85
|
```
|
|
92
86
|
|
|
93
|
-
|
|
87
|
+
하나의 결과에서 후보를 승인하면 다른 후보는 서버가 자동으로 거절합니다.
|
|
88
|
+
|
|
89
|
+
### 6. 승인 후보 적용
|
|
90
|
+
|
|
91
|
+
사용자에게 승인 대상과 결과를 보여주고 확인받은 뒤 실행합니다.
|
|
94
92
|
|
|
95
93
|
```bash
|
|
96
|
-
sppt product
|
|
97
|
-
sppt product mapping --edit 2 --skus "CKRS-WASH:3:component,CKRS-LOTN:3:component" # 세트 × 3
|
|
94
|
+
sppt product parse apply <runId>
|
|
98
95
|
```
|
|
99
96
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
확정 완료 후 `sppt product mapping --confirmed`로 전체 확정 매핑 + 구성품 조회 가능.
|
|
97
|
+
적용은 CatalogProduct 생성·수정과 SourceOffering 매핑을 현대 API의 멱등성·mapping revision
|
|
98
|
+
검증 아래 처리합니다. 적용 후 다음으로 재확인합니다.
|
|
103
99
|
|
|
104
|
-
|
|
100
|
+
```bash
|
|
101
|
+
sppt product unmapped
|
|
102
|
+
sppt product catalog
|
|
103
|
+
```
|
|
105
104
|
|
|
106
|
-
|
|
105
|
+
### 7. 채널옵션 매핑 확인
|
|
107
106
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
| component | 세트 구성품 (2개 이상) | 정가 비율 or 균등 배분 |
|
|
112
|
-
| gift | 사은품 | 매출 0원, 수량만 집계 |
|
|
113
|
-
| packaging | 포장재 | 매출 0원, 수량만 집계 |
|
|
114
|
-
| sample | 샘플 | 매출 0원, 수량만 집계 |
|
|
107
|
+
세트 구성, 수량, BOM, 매출 배분처럼 상품 option 구성이 필요한 경우에는 Product Catalog
|
|
108
|
+
대시보드의 계보·매핑 화면에서 확인·수정합니다. 레거시 `sppt product mapping --confirm`으로
|
|
109
|
+
현대 CatalogProduct 매핑을 확정하지 않습니다.
|
|
115
110
|
|
|
116
|
-
|
|
111
|
+
## 로컬 호환 임포트
|
|
117
112
|
|
|
118
|
-
|
|
113
|
+
실험용 로컬 카탈로그 파일을 검증하는 경우에만 아래 명령을 사용할 수 있습니다.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
sppt product parse --local --file mapping.csv
|
|
117
|
+
```
|
|
119
118
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
3. **포장 옵션**: SKU 구성에 영향 없음 (포장재 SKU가 있으면 packaging 타입으로 추가)
|
|
123
|
-
4. **모호한 경우**: 사용자에게 질문 (자의적 판단 금지)
|
|
124
|
-
5. **대량 매핑**: 20개 이상이면 패턴별 그룹핑 후 일괄 처리
|
|
119
|
+
이 경로는 `~/.shopport` 로컬 파일만 변경하며 클라우드 CatalogProduct를 변경하지 않습니다.
|
|
120
|
+
클라우드 상품 분류에는 사용하지 않습니다.
|
|
125
121
|
|
|
126
|
-
##
|
|
122
|
+
## 판단 원칙
|
|
127
123
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
1. raw SKU가 있으면 이름보다 SKU·option identity를 우선 확인합니다.
|
|
125
|
+
2. "2개", "2set", "2ea", "2개입"은 수량 후보로 해석하되 세트 구성은 규칙과 함께 확인합니다.
|
|
126
|
+
3. 기존 상품과 신규 상품을 구분할 근거가 없으면 승인하지 않습니다.
|
|
127
|
+
4. 후보 적용 전 반드시 사용자에게 승인 목록을 보여줍니다.
|
|
128
|
+
5. 적용 후 미매핑이 남으면 남은 SourceOffering만 대상으로 다시 실행합니다.
|
|
@@ -91,7 +91,8 @@ sppt crm cafe24 customers # cafe24 회원목록 조회
|
|
|
91
91
|
- `sppt product catalog [--local]` — 상품 카탈로그 브라우징
|
|
92
92
|
- `sppt product unmapped [--local]` — 미매핑 상품 목록
|
|
93
93
|
- `sppt product rules [set <file>] [--local]` — 분류 규칙 조회/설정
|
|
94
|
-
- `sppt product parse
|
|
94
|
+
- `sppt product parse` — CatalogProduct 분류 미리보기·후보 검토·적용
|
|
95
|
+
- `sppt product parse --local --file <mapping.csv>` — 로컬 호환 카탈로그 임포트
|
|
95
96
|
- `sppt product mapping [--edit N] [--confirm N|all] [--confirmed] [--json]` — SKU 매핑 관리
|
|
96
97
|
- `sppt product candidates` — 매핑 후보 조회
|
|
97
98
|
|