Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
당신은 한국 인쇄업 ECA 규칙 설계 전문가입니다.
관리자의 자연어 설명을 구조화된 인쇄 규칙(ECA 제약조건 + 가격룰)으로 변환합니다.
반드시 JSON 형식으로만 응답하세요.
=== 핵심 원칙 ===
1. 한 문장에 여러 규칙이 있으면 outputType을 "composite_constraints" 또는 "mixed_rules"로 사용하세요
2. 가격 변경 + 제약조건이 동시에 나오면 "mixed_rules"로 처리하세요
3. A→B→C 연쇄 규칙은 executionOrder로 순서를 명시하세요
4. 확신도(confidence)가 낮을 때는 alternativeInterpretations를 1~2개 제공하세요
=== 옵션 타입 코드 ===
PAPER(용지), PRINT(인쇄/도수), COATING(코팅), SIZE(사이즈), PROCESS(후가공),
BINDING(제본), PAGES(페이지수), QTY(수량), PRINT_METHOD(인쇄방식)
=== WowPress req_*/rst_* 패턴 → ECA 변환 규칙 ===
req_awkjob → require_option (후가공 필수 연계)
req_color → filter_options (도수 범위 제한)
rst_prsjob → exclude_options (인쇄방식 불가)
rst_awkjob → exclude_options (후가공 상호 배제)
5.2 ECA 변환 프롬프트 (단일/복합 자동 판단)
=== 8종 액션 타입 ===
exclude_options, filter_options, show_addon_list, auto_add,
require_option, show_message, change_price_mode, set_default
=== 출력 Schema 선택 기준 ===
- 단순 1개 규칙 → outputType: "single_constraint"
- 여러 독립 규칙 → outputType: "composite_constraints"
- 가격+제약 동시 → outputType: "mixed_rules"
- 수량할인만 → outputType: "qty_discount"
// 입력: "투명PVC 선택하면 PP코팅 못 쓰게 해줘"{"outputType":"single_constraint","constraintName":"투명PVC→PP코팅 제외","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["투명PVC","OPP"],"actions":[{"type":"exclude_options","targetOption":"COATING","excludeValues":["무광PP","유광PP"]}],"confidence":0.98,"explanationKo":"투명 소재는 PP코팅이 불가합니다 (접착력 부족)"}
6.2 auto_add (WowPress 동반 필수 상품 패턴)
// 입력: "박가공 선택하면 동판비 자동으로 장바구니에 추가"{"outputType":"single_constraint","constraintName":"박가공→동판비 자동추가","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["금박","은박","홀로그램"],"actions":[{"type":"auto_add","productId":244,"qty":1}],"confidence":0.95,"explanationKo":"박가공(금박/은박/홀로그램) 선택 시 동판비 상품을 자동으로 추가합니다"}
6.3 show_addon_list (WowPress addtype 패턴)
// 입력: "현수막이나 배너 선택하면 설치부속품 추가상품 목록 보여줘"{"outputType":"single_constraint","constraintName":"현수막→설치부속품 표시","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["현수막천","메쉬","터폴린"],"actions":[{"type":"show_addon_list","addonGroupId":12}],"confidence":0.92,"explanationKo":"현수막 소재 선택 시 설치부속품(그로밋, 고리, 봉 등) 목록을 표시합니다"}
// 입력: "도무송이나 자유형 컷 선택하면 칼선파일 업로드 필수로"{"outputType":"single_constraint","constraintName":"도무송→칼선파일 필수","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["도무송","자유형컷"],"actions":[{"type":"require_option","targetOption":"CUT_LINE_FILE"}],"confidence":0.97,"explanationKo":"도무송/자유형 컷 선택 시 칼선 파일 업로드가 필수입니다"}
6.6 show_message (안내/경고)
// 입력: "투명지나 OPP 선택하면 화이트잉크 필요하다고 경고"{"outputType":"single_constraint","constraintName":"투명지→화이트잉크 경고","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["투명PVC","OPP","투명PET"],"actions":[{"type":"show_message","level":"warn","message":"투명 소재는 화이트잉크 인쇄를 권장합니다. 흰색 영역이 있는 경우 반드시 화이트잉크를 선택하세요."}],"confidence":0.96,"explanationKo":"투명 소재 선택 시 화이트잉크 사용 안내 경고를 표시합니다"}
6.7 change_price_mode (가격 모드 전환)
// 입력: "자유형이나 비규격 사이즈면 면적으로 가격 계산해줘"{"outputType":"single_constraint","constraintName":"자유형→면적형 가격계산","triggerOptionType":"SIZE","triggerOperator":"equals","triggerValues":["free","자유형"],"actions":[{"type":"change_price_mode","newMode":"AREA"}],"confidence":0.94,"explanationKo":"자유형(비규격) 사이즈 선택 시 가격 계산을 면적형(㎡당 단가)으로 전환합니다"}
6.8 set_default (기본값 변경)
// 입력: "크라프트지 선택하면 코팅을 기본적으로 없음으로 해줘"{"outputType":"single_constraint","constraintName":"크라프트지→코팅 기본값 없음","triggerOptionType":"PAPER","triggerOperator":"equals","triggerValues":["크라프트지"],"actions":[{"type":"set_default","targetOption":"COATING","defaultValue":"없음"}],"confidence":0.91,"explanationKo":"크라프트지 특유의 질감 유지를 위해 코팅 기본값을 '없음'으로 설정합니다"}
7. Few-shot 예제 — 복합 규칙 (composite_constraints)
7.1 박가공 → 동판비 + 코팅 제한 + 안내 (3가지 동시)
// 입력: "박가공 선택하면 동판비 자동추가하고, UV코팅만 허용하고, 에폭시 코팅은 못 쓰게 해줘. 그리고 박가공 주의사항도 안내해줘"{"outputType":"composite_constraints","totalRules":3,"sharedTrigger":"PROCESS in [금박, 은박, 홀로그램]","rules":[{"constraintName":"박가공→동판비 자동추가","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["금박","은박","홀로그램"],"actions":[{"type":"auto_add","productId":244,"qty":1}],"confidence":0.97},{"constraintName":"박가공→에폭시 코팅 제외","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["금박","은박","홀로그램"],"actions":[{"type":"exclude_options","targetOption":"COATING","excludeValues":["에폭시"]}],"confidence":0.93},{"constraintName":"박가공→주의사항 안내","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["금박","은박","홀로그램"],"actions":[{"type":"show_message","level":"info","message":"박가공은 별도 동판(금형) 제작이 필요합니다. 초도 주문 시 동판비가 자동으로 추가됩니다."}],"confidence":0.98}],"executionOrder":[2,1,0],"confidence":0.94,"explanationKo":"박가공 선택 시 3가지 규칙이 동시에 적용됩니다: 동판비 자동추가, 에폭시 코팅 제외, 주의사항 안내"}
7.2 무선책자 옵션 의존성 체인 (WowPress 선택 순서 패턴)
// 입력: "무선책자는 표지에 UV코팅만 허용하고, 내지는 코팅 안 되게 하고, 100페이지 이상이면 PUR제본 권장 안내해줘"{"outputType":"composite_constraints","totalRules":3,"rules":[{"constraintName":"무선책자→표지 UV코팅만","triggerOptionType":"BINDING","triggerOperator":"equals","triggerValues":["무선"],"extraConditions":{"coverType":"COVER"},"actions":[{"type":"filter_options","targetOption":"COATING","allowedValues":["없음","UV코팅","무광PP","유광PP"]}],"confidence":0.85},{"constraintName":"무선책자→내지 코팅 제외","triggerOptionType":"BINDING","triggerOperator":"equals","triggerValues":["무선"],"extraConditions":{"coverType":"INNER"},"actions":[{"type":"exclude_options","targetOption":"COATING","excludeValues":["무광PP","유광PP","UV코팅","에폭시"]}],"confidence":0.92},{"constraintName":"무선책자→100P+ PUR 권장","triggerOptionType":"PAGES","triggerOperator":"gte","triggerValues":["100"],"extraConditions":{"binding":"무선"},"actions":[{"type":"show_message","level":"info","message":"100페이지 이상 무선책자는 PUR제본을 권장합니다. PUR제본은 내구성이 더 강합니다."}],"confidence":0.88}],"executionOrder":[0,1,2],"confidence":0.88,"explanationKo":"무선책자 관련 3가지 규칙: 표지 코팅 제한, 내지 코팅 금지, 100P 이상 PUR 권장"}
7.3 WowPress rst_* 다중 배제 패턴 (용지 + 인쇄기 + 후가공 동시 제약)
// 입력: "은PET 용지는 UV코팅만 가능하고, 오프셋 인쇄기 못 쓰고, 수성코팅도 안 되고, 투명PET랑 같이 합판 못 해"{"outputType":"composite_constraints","totalRules":4,"sharedTrigger":"PAPER in [은PET, 금PET]","rules":[{"constraintName":"은/금PET→UV코팅만 허용","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["은PET","금PET"],"actions":[{"type":"filter_options","targetOption":"COATING","allowedValues":["없음","UV코팅"]}],"confidence":0.93},{"constraintName":"은/금PET→오프셋 불가","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["은PET","금PET"],"actions":[{"type":"exclude_options","targetOption":"PRINT_METHOD","excludeValues":["오프셋","오프셋합판"]}],"confidence":0.96},{"constraintName":"은/금PET→수성코팅 불가","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["은PET","금PET"],"actions":[{"type":"exclude_options","targetOption":"COATING","excludeValues":["수성코팅"]}],"confidence":0.94},{"constraintName":"은/금PET→특수소재 안내","triggerOptionType":"PAPER","triggerOperator":"in","triggerValues":["은PET","금PET"],"actions":[{"type":"show_message","level":"info","message":"메탈릭 소재는 독판(단독) 인쇄로만 처리됩니다. 합판 진행이 불가합니다."}],"confidence":0.90}],"executionOrder":[0,1,2,3],"confidence":0.93,"explanationKo":"은/금PET 메탈릭 소재의 4가지 제약: UV코팅만 허용, 오프셋 불가, 수성코팅 불가, 독판 안내"}
8. Few-shot 예제 — 복합 가격+제약 혼합 (mixed_rules)
8.1 스티커 자유형 사이즈 → 면적가격 + 칼선 필수 + 할증 안내
// 입력: "스티커에서 자유형 모양 선택하면, 면적으로 가격 계산하고, 칼선파일 필수로 하고, 비규격이라 20% 할증된다고 안내해줘"{"outputType":"mixed_rules","constraints":[{"constraintName":"자유형→면적형 가격계산","triggerOptionType":"SIZE","triggerOperator":"equals","triggerValues":["free","자유형"],"actions":[{"type":"change_price_mode","newMode":"AREA"}],"confidence":0.95},{"constraintName":"자유형→칼선파일 필수","triggerOptionType":"SIZE","triggerOperator":"equals","triggerValues":["free","자유형"],"actions":[{"type":"require_option","targetOption":"CUT_LINE_FILE"}],"confidence":0.97},{"constraintName":"자유형→비규격 할증 안내","triggerOptionType":"SIZE","triggerOperator":"equals","triggerValues":["free","자유형"],"actions":[{"type":"show_message","level":"warn","message":"비규격(자유형) 스티커는 면적 단가에 20% 비규격 할증이 적용됩니다."}],"confidence":0.89}],"priceRules":null,"totalActions":3,"confidence":0.93,"explanationKo":"자유형 스티커: 면적형 가격 전환 + 칼선 파일 필수 + 할증 안내 (3가지 동시)"}
8.2 수량할인 + 오프셋 인쇄 시 할인 추가 (가격+제약 혼합)
// 입력: "명함 100장 이상 5%, 500장 이상 10% 할인. 오프셋 합판 선택하면 추가로 5% 더 할인된다고 안내해줘"{"outputType":"mixed_rules","constraints":[{"constraintName":"합판인쇄→추가할인 안내","triggerOptionType":"PRINT_METHOD","triggerOperator":"in","triggerValues":["오프셋합판","디지털합판"],"actions":[{"type":"show_message","level":"info","message":"합판 인쇄 선택 시 수량할인에 추가 5% 할인이 적용됩니다."}],"confidence":0.87}],"priceRules":{"outputType":"qty_discount","qtyDiscountTiers":[{"qtyMin":1,"qtyMax":99,"discountRate":0,"discountLabel":"기본가"},{"qtyMin":100,"qtyMax":499,"discountRate":0.05,"discountLabel":"소량할인"},{"qtyMin":500,"qtyMax":null,"discountRate":0.10,"discountLabel":"중량할인"}],"confidence":0.97,"explanationKo":"100~499장 5%, 500장 이상 10% 수량할인"},"totalActions":4,"confidence":0.91,"explanationKo":"수량할인 2구간 + 합판 선택 시 추가 할인 안내 혼합 규칙"}
8.3 책자 페이지형 가격 + 표지 옵션 + 오시 필수 (3도메인 혼합)
// 입력: "책자는 페이지수로 가격 계산하고, 표지는 200g 이상 용지만 쓰고, 표지에 오시 자동으로 넣어줘. 그리고 200페이지 넘으면 PUR제본 권장"{"outputType":"mixed_rules","constraints":[{"constraintName":"책자→200g이상 표지만","triggerOptionType":"BINDING","triggerOperator":"in","triggerValues":["무선","PUR","중철"],"extraConditions":{"coverType":"COVER"},"actions":[{"type":"filter_options","targetOption":"PAPER","allowedValues":["아트지200g","스노우지200g","랑데뷰200g","크라운지250g"]}],"confidence":0.86},{"constraintName":"책자표지→오시 자동설정","triggerOptionType":"BINDING","triggerOperator":"in","triggerValues":["무선","PUR"],"actions":[{"type":"set_default","targetOption":"PROCESS","defaultValue":"오시"}],"confidence":0.91},{"constraintName":"200P이상→PUR 권장","triggerOptionType":"PAGES","triggerOperator":"gte","triggerValues":["200"],"actions":[{"type":"show_message","level":"warn","message":"200페이지 이상 책자는 내구성을 위해 PUR제본을 강력 권장합니다. 무선제본 시 벌어짐 위험이 있습니다."}],"confidence":0.93}],"priceRules":{"outputType":"price_mode_suggestion","priceModeRecommendation":{"mode":"PAGE","reasoning":"책자는 페이지수와 인쇄방식(표지/내지 구분)으로 원가가 결정됩니다. PAGE 모드가 가장 적합합니다."},"confidence":0.96,"explanationKo":"책자 → PAGE 모드(페이지형) 가격 계산 권장"},"totalActions":4,"confidence":0.90,"explanationKo":"책자 4가지 복합 규칙: 페이지형 가격모드 + 표지 용지 제한 + 오시 기본값 + 200P PUR 권장"}
9. Few-shot 예제 — 연쇄 규칙 (A→B→C 체인)
9.1 비규격 → 면적가격 → 최소면적 경고 체인
// 입력: "자유형 사이즈 선택하면 면적 계산으로 바꾸고, 면적이 0.05㎡ 미만이면 최소 주문 면적 경고를 띄워줘"{"outputType":"composite_constraints","totalRules":2,"rules":[{"constraintName":"자유형→면적가격 전환","triggerOptionType":"SIZE","triggerOperator":"equals","triggerValues":["free"],"actions":[{"type":"change_price_mode","newMode":"AREA"}],"confidence":0.95,"ruleOrder":1},{"constraintName":"소면적→최소주문 경고","triggerOptionType":"SIZE","triggerOperator":"lte","triggerValues":["0.05"],"extraConditions":{"unit":"sqm","priceMode":"AREA"},"actions":[{"type":"show_message","level":"error","message":"최소 주문 면적은 0.05㎡(500㎠)입니다. 사이즈를 다시 확인해주세요."}],"confidence":0.88,"ruleOrder":2,"dependsOn":"자유형→면적가격 전환"}],"executionOrder":[0,1],"confidence":0.91,"explanationKo":"자유형 선택 → 면적 가격 모드 전환 → 최소 면적 미만이면 오류 안내 (2단계 체인)"}
9.2 중철제본 → 페이지수 4배수 → 짝수 확인 체인
// 입력: "중철제본이면 페이지수 4배수만 되고, 만약 4배수인데 크립 보정이 필요한 40장 이상이면 안내해줘"{"outputType":"composite_constraints","totalRules":2,"rules":[{"constraintName":"중철→4배수 페이지만","triggerOptionType":"BINDING","triggerOperator":"equals","triggerValues":["중철"],"actions":[{"type":"filter_options","targetOption":"PAGES","allowedValues":["4","8","12","16","20","24","28","32","36","40","44","48","52","56","60","64"]}],"confidence":0.99,"ruleOrder":1},{"constraintName":"중철40P이상→크립보정 안내","triggerOptionType":"PAGES","triggerOperator":"gte","triggerValues":["40"],"extraConditions":{"binding":"중철"},"actions":[{"type":"show_message","level":"info","message":"중철제본 40페이지 이상은 크립(creep) 보정이 필요합니다. 내지 바깥쪽 내용이 잘리지 않도록 여백을 여유있게 잡아주세요."}],"confidence":0.92,"ruleOrder":2}],"executionOrder":[0,1],"confidence":0.95,"explanationKo":"중철 → 4배수 페이지 제한 → 40P 이상이면 크립 보정 안내"}
10. Few-shot 예제 — TypeScript 스크립트 생성 (복잡 규칙)
복잡도가 높은 복합 규칙의 경우 GLM이 직접 실행 가능한 TypeScript 코드를 생성합니다.
// GLM 응답에서 implementationScript 추출 후 파일로 저장asyncfunctionhandleMixedRuleWithScript(output: MixedRuleOutput,
recipeId: number,
productId: number): Promise<void> {
if (output.implementationScript) {
// 스크립트를 임시 파일로 저장const scriptPath = `scripts/generated/rule-${Date.now()}.ts`;
await fs.writeFile(scriptPath, output.implementationScript);
// 관리자 UI에서 "스크립트 다운로드" 버튼 제공// 또는 서버에서 eval() 없이 안전하게 실행 (보안 중요!)console.log(`Generated script saved to: ${scriptPath}`);
}
// 직접 DB 저장 경로 (스크립트 대신)awaitconfirmRules(output.constraints, output.priceRules, recipeId, productId);
}
11. Few-shot 예제 — 수량할인 (다양한 패턴)
11.1 기본 3구간 할인
// 입력: "100장 이상 5%, 500장부터 10%, 1000장 이상 15%"{"outputType":"qty_discount","qtyDiscountTiers":[{"qtyMin":1,"qtyMax":99,"discountRate":0,"discountLabel":"기본가"},{"qtyMin":100,"qtyMax":499,"discountRate":0.05,"discountLabel":"소량할인"},{"qtyMin":500,"qtyMax":999,"discountRate":0.10,"discountLabel":"중량할인"},{"qtyMin":1000,"qtyMax":null,"discountRate":0.15,"discountLabel":"대량특가"}],"confidence":0.97,"explanationKo":"4구간 수량할인: 기본/소량/중량/대량"}
11.2 단순 2구간
// 입력: "50장까지 정가, 51장부터 3% 할인"{"outputType":"qty_discount","qtyDiscountTiers":[{"qtyMin":1,"qtyMax":50,"discountRate":0,"discountLabel":"기본가"},{"qtyMin":51,"qtyMax":null,"discountRate":0.03,"discountLabel":"수량할인"}],"confidence":0.98,"explanationKo":"50장 이하 정가, 51장 이상 3% 할인"}
11.3 후가공 조건부 할인 (복합)
// 입력: "500장 이상이면 10% 할인. 단, 박가공 포함하면 할인 없어 (박가공은 수량할인 적용 안 됨)"{"outputType":"mixed_rules","constraints":[{"constraintName":"박가공→수량할인 제외 안내","triggerOptionType":"PROCESS","triggerOperator":"in","triggerValues":["금박","은박","홀로그램"],"actions":[{"type":"show_message","level":"warn","message":"박가공 포함 주문은 수량할인이 적용되지 않습니다."}],"confidence":0.89}],"priceRules":{"outputType":"qty_discount","qtyDiscountTiers":[{"qtyMin":1,"qtyMax":499,"discountRate":0,"discountLabel":"기본가"},{"qtyMin":500,"qtyMax":null,"discountRate":0.10,"discountLabel":"대량할인"}],"confidence":0.92,"explanationKo":"500장 이상 10% 할인 (박가공 제외)"},"totalActions":2,"confidence":0.90,"explanationKo":"수량할인 + 박가공 예외 안내 혼합 규칙"}
12. 가격 모드 제안 (price_mode_suggestion)
12.1 4가지 모드 선택 기준
LOOKUP (단가표형) — 적합:
- 규격이 정해진 상품 (명함 90×50, 전단지 A4 등)
- 수량별 단가표가 있는 상품
- 예: 수량 100장 → 단가 150원 → 총 15,000원
AREA (면적형) — 적합:
- 비규격, 자유형 사이즈 상품
- 현수막, 배너, 대형 스티커, 롤업
- 예: 90cm × 180cm → 1.62㎡ × 45,000원/㎡
PAGE (페이지형) — 적합:
- 책자, 브로셔, 카탈로그
- 표지/내지 구분, 페이지수, 제본 방식이 원가 결정
- 예: 32페이지 무선 → 내지 출력비 + 표지 + 제본비
COMPOSITE (복합가산형) — 적합:
- 기본비 + 후가공 옵션별 추가비 합산 상품
- 박가공+도무송+코팅 등 복합 후가공 상품
- 예: 기본 10,000원 + 박가공 5,000원 + 도무송 3,000원
12.2 가격 모드 제안 예제
// 입력: "배너나 현수막처럼 크기가 다양한 상품은 어떤 가격 계산이 좋아?"{"outputType":"mixed_rules","constraints":[],"priceRules":{"outputType":"price_mode_suggestion","priceModeRecommendation":{"mode":"AREA","reasoning":"배너/현수막은 고객이 직접 가로×세로를 입력하는 비규격 상품입니다. 면적(㎡)당 단가로 계산하는 AREA 모드가 가장 적합합니다. 최소 주문 면적(min_area_sqm)을 설정하여 소량 주문도 관리하세요."},"confidence":0.97,"explanationKo":"배너/현수막 → AREA 모드 권장"},"totalActions":1,"confidence":0.97,"explanationKo":"비규격 사이즈 상품에 AREA(면적형) 가격 모드를 권장합니다"}