Files
sam-manage/database/seeders/InterviewQuestionMasterSeeder.php

748 lines
63 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Database\Seeders;
use App\Models\Interview\InterviewCategory;
use App\Models\Interview\InterviewQuestion;
use App\Models\Interview\InterviewTemplate;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
/**
* 인터뷰 질문 마스터 데이터 시더 v2
*
* 12개 도메인 × 세부 질문 (총 200개+)
* 이 시더는 프로젝트 생성 시 질문 템플릿으로 활용된다.
*
* 사용법:
* docker exec sam-mng-1 php artisan db:seed --class=InterviewQuestionMasterSeeder
*
* 주의: 기존 마스터 데이터(interview_project_id = NULL)를 삭제 후 재생성한다.
* 프로젝트에 연결된 데이터는 삭제되지 않는다.
*/
class InterviewQuestionMasterSeeder extends Seeder
{
public function run(): void
{
DB::transaction(function () {
$tenantId = 1;
$userId = 1;
// 기존 마스터 데이터 삭제 (project_id = null인 것만)
InterviewQuestion::whereHas('template', function ($q) {
$q->whereHas('category', function ($q2) {
$q2->whereNull('interview_project_id');
});
})->forceDelete();
InterviewTemplate::whereHas('category', function ($q) {
$q->whereNull('interview_project_id');
})->forceDelete();
InterviewCategory::whereNull('interview_project_id')->forceDelete();
// 새 데이터 생성
$domains = $this->getDomainData();
foreach ($domains as $domainKey => $domain) {
$categorySortOrder = InterviewCategory::max('sort_order') ?? 0;
$category = InterviewCategory::create([
'tenant_id' => $tenantId,
'interview_project_id' => null,
'name' => $domain['name'],
'description' => $domain['description'],
'domain' => $domainKey,
'sort_order' => $categorySortOrder + 1,
'is_active' => true,
'created_by' => $userId,
'updated_by' => $userId,
]);
foreach ($domain['templates'] as $tplIndex => $tpl) {
$template = InterviewTemplate::create([
'tenant_id' => $tenantId,
'interview_category_id' => $category->id,
'name' => $tpl['name'],
'sort_order' => $tplIndex + 1,
'is_active' => true,
'created_by' => $userId,
'updated_by' => $userId,
]);
foreach ($tpl['questions'] as $qIndex => $q) {
InterviewQuestion::create([
'tenant_id' => $tenantId,
'interview_template_id' => $template->id,
'question_text' => $q['text'],
'question_type' => $q['type'],
'options' => $q['options'] ?? null,
'ai_hint' => $q['ai_hint'] ?? null,
'expected_format' => $q['expected_format'] ?? null,
'depends_on' => $q['depends_on'] ?? null,
'domain' => $domainKey,
'is_required' => $q['is_required'] ?? false,
'sort_order' => $qIndex + 1,
'is_active' => true,
'created_by' => $userId,
'updated_by' => $userId,
]);
}
}
}
});
}
private function getDomainData(): array
{
return array_merge(
$this->domainProductClassification(),
$this->domainBomStructure(),
$this->domainDimensionFormula(),
$this->domainComponentConfig(),
$this->domainPricingStructure(),
$this->domainQuantityFormula(),
$this->domainConditionalLogic(),
$this->domainQuoteFormat(),
$this->domainProductionProcess(),
$this->domainQualityControl(),
$this->domainLogisticsInventory(),
$this->domainSalesCustomer(),
);
}
// ================================================================
// Domain 1: 제품 분류 체계 (22개)
// ================================================================
private function domainProductClassification(): array
{
return [
'product_classification' => [
'name' => '제품 분류 체계',
'description' => '제품 카테고리, 모델 코드, 분류 기준 파악',
'templates' => [
[
'name' => '제품 카테고리 구조',
'questions' => [
['text' => '귀사의 주요 제품군을 모두 나열해주세요', 'type' => 'text', 'ai_hint' => '쉼표 구분으로 제품군 나열', 'is_required' => true],
['text' => '각 제품군의 하위 모델명과 코드 체계를 알려주세요', 'type' => 'table_input', 'options' => ['columns' => ['모델코드', '모델명', '비고']], 'ai_hint' => '코드-이름 매핑 테이블'],
['text' => '제품을 분류하는 기준은 무엇인가요? (소재, 용도, 크기 등)', 'type' => 'multi_select', 'options' => ['choices' => ['소재별', '용도별', '크기별', '설치방식별', '인증여부별']]],
['text' => '인증(인정) 제품과 비인증 제품의 구분이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '인증 제품의 경우 구성이 고정되나요?', 'type' => 'checkbox', 'depends_on' => ['question_index' => 3, 'value' => '있음']],
['text' => '카테고리별 제품 수는 대략 몇 개인가요?', 'type' => 'number', 'expected_format' => '개'],
['text' => '제품 코드 명명 규칙을 설명해주세요 (예: KSS01의 의미)', 'type' => 'text', 'ai_hint' => '코드 체계의 각 자릿수 의미'],
['text' => '기존 시스템(ERP/엑셀)에서 사용하는 제품 분류 방식을 캡처하여 업로드해주세요', 'type' => 'file_upload'],
],
],
[
'name' => '설치 유형별 분류',
'questions' => [
['text' => '설치 유형(벽면형, 측면형, 혼합형 등)에 따라 견적이 달라지나요?', 'type' => 'select', 'options' => ['choices' => ['예, 크게 달라짐', '약간 달라짐', '달라지지 않음']]],
['text' => '각 설치 유형별로 어떤 부품이 달라지나요?', 'type' => 'table_input', 'options' => ['columns' => ['설치유형', '추가부품', '제외부품', '비고']]],
['text' => '설치 유형에 따른 추가 비용 항목이 있나요?', 'type' => 'text'],
],
],
[
'name' => '인증/규격 관리',
'questions' => [
['text' => '보유 중인 인증 종류를 모두 선택해주세요', 'type' => 'multi_select', 'options' => ['choices' => ['KC인증', '방화인증', '방연시험성적서', 'KS규격', 'ISO 인증', '기타']], 'is_required' => true],
['text' => '인증별 적용 제품 범위 및 인증번호를 입력해주세요', 'type' => 'table_input', 'options' => ['columns' => ['인증종류', '인증번호', '적용제품', '유효기간']]],
['text' => '방화인증의 경우 내화성능 시간 등급은?', 'type' => 'multi_select', 'options' => ['choices' => ['30분', '1시간', '1.5시간', '2시간', '3시간']], 'depends_on' => ['question_index' => 0, 'value' => '방화인증']],
['text' => '인증 취득이 없는 제품도 판매하나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
],
],
[
'name' => '커스텀 옵션 및 파생 모델',
'questions' => [
['text' => '고객 요청으로 변경 가능한 옵션 항목을 모두 선택해주세요', 'type' => 'multi_select', 'options' => ['choices' => ['색상/도장', '마감재', '특수사양', '크기 커스텀', '전압 옵션', '제어 방식']]],
['text' => '색상/마감재 옵션이 있는 경우 선택 목록을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['옵션구분', '선택항목', '추가비용', '납기영향']]],
['text' => '파생 모델(변형 모델)이 있나요? (예: 동일 제품 OEM 버전)', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => 'OEM/파생 모델의 구분 기준과 코드 체계는?', 'type' => 'text', 'depends_on' => ['question_index' => 2, 'value' => '있음']],
],
],
[
'name' => '제품 라이프사이클',
'questions' => [
['text' => '신제품 등록 절차는 어떻게 되나요? (R&D → 테스트 → 양산)', 'type' => 'text', 'ai_hint' => '신제품 출시 프로세스 흐름'],
['text' => '단종/단계 축소 제품 관리 방식은?', 'type' => 'select', 'options' => ['choices' => ['즉시 단종', '재고 소진 후 단종', '특정 고객 유지', '기타']]],
['text' => '단종 제품에 대한 A/S 부품 공급 기간은?', 'type' => 'number', 'expected_format' => '년'],
],
],
],
],
];
}
// ================================================================
// Domain 2: BOM 구조 (21개)
// ================================================================
private function domainBomStructure(): array
{
return [
'bom_structure' => [
'name' => 'BOM 구조',
'description' => '완제품-부품 관계, 다단계 BOM, 변경 관리',
'templates' => [
[
'name' => '완제품-부품 관계',
'questions' => [
['text' => '대표 제품 1개의 완제품→부품 구성을 트리로 그려주세요', 'type' => 'bom_tree', 'ai_hint' => '최상위 제품부터 하위 부품까지 트리 구조', 'is_required' => true],
['text' => '모든 제품에 공통으로 들어가는 부품은 무엇인가요?', 'type' => 'multi_select', 'options' => ['choices' => ['가이드레일', '케이스', '모터', '제어기', '브라켓', '볼트/너트']], 'ai_hint' => '직접 입력 가능'],
['text' => '제품별로 선택적(옵션)인 부품은 무엇인가요?', 'type' => 'table_input', 'options' => ['columns' => ['제품명', '옵션부품', '적용조건']]],
['text' => 'BOM이 현재 엑셀로 관리되고 있나요? 파일을 업로드해주세요', 'type' => 'file_upload'],
['text' => '하위 부품의 단계(레벨)는 최대 몇 단계인가요?', 'type' => 'number', 'expected_format' => '단계'],
['text' => '부품 수량이 고정인 것과 계산이 필요한 것을 구분해주세요', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '고정/계산', '고정수량 또는 계산식']]],
],
],
[
'name' => '다단계 BOM 및 반제품',
'questions' => [
['text' => '반제품(서브어셈블리)이 존재하나요? 예를 들어 "조립체"를 먼저 만들고 완제품에 투입', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '반제품 목록과 구성 부품을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['반제품명', '구성부품', '수량', '비고']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => '반제품은 별도 재고로 관리되나요?', 'type' => 'select', 'options' => ['choices' => ['예, 별도 재고 관리', '아니요, 공정 흐름에서만 관리']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => 'BOM 레벨별 원가 계산이 필요한가요? (반제품 원가 → 완제품 원가)', 'type' => 'checkbox'],
],
],
[
'name' => '대체품 및 호환품',
'questions' => [
['text' => '특정 부품에 대한 대체품(호환품)이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '대체품 사용 기준은? (공급 부족 시만? 원가 절감?)', 'type' => 'multi_select', 'options' => ['choices' => ['공급 부족 시', '원가 절감 목적', '고객 요청', '품질 동등 판단']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => '대체품 목록과 우선순위를 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['원부품', '대체품', '공급업체', '우선순위']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
],
],
[
'name' => 'BOM 변경 관리',
'questions' => [
['text' => 'BOM 변경(ECN/ECO) 발생 빈도는?', 'type' => 'select', 'options' => ['choices' => ['월 1회 미만', '월 1~3회', '월 3회 이상', '비정기적']]],
['text' => 'BOM 변경 승인 프로세스가 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (공식 절차)', '비공식 구두 승인', '없음 (담당자 판단']]],
['text' => 'BOM 버전 이력 관리가 필요한가요?', 'type' => 'checkbox'],
['text' => '변경 전/후 BOM에 따른 기존 수주 처리 방식은?', 'type' => 'text', 'ai_hint' => '변경 적용 기준 시점 (예: 변경 승인일 이후 수주분부터)'],
['text' => '부품 투입 시점(공정 단계)별 BOM 구분이 필요한가요?', 'type' => 'checkbox'],
],
],
[
'name' => '부품 카테고리',
'questions' => [
['text' => '부품을 카테고리로 분류하면 어떻게 나눠지나요? (본체, 절곡품, 전동부, 부자재 등)', 'type' => 'text', 'ai_hint' => '부품 분류 체계'],
['text' => '각 카테고리에 속하는 부품 목록을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['카테고리', '부품명', '규격']]],
['text' => '외주 구매 부품과 자체 제작 부품의 구분이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '부자재(볼트, 너트, 패킹 등)는 별도 관리하나요?', 'type' => 'checkbox'],
],
],
],
],
];
}
// ================================================================
// Domain 3: 치수/변수 계산 (20개)
// ================================================================
private function domainDimensionFormula(): array
{
return [
'dimension_formula' => [
'name' => '치수/변수 계산',
'description' => '오픈 사이즈→제작 사이즈 변환, 파생 변수 계산, 복합 공식',
'templates' => [
[
'name' => '오픈 사이즈 → 제작 사이즈',
'questions' => [
['text' => '고객이 입력하는 기본 치수 항목은 무엇인가요? (폭, 높이, 깊이 등)', 'type' => 'multi_select', 'options' => ['choices' => ['폭(W)', '높이(H)', '깊이(D)', '두께(T)', '지름(Ø)']], 'is_required' => true],
['text' => '오픈 사이즈에서 제작 사이즈로 변환할 때 더하는 마진값은?', 'type' => 'formula_input', 'ai_hint' => '예: W1 = W0 + 120, H1 = H0 + 50', 'expected_format' => 'mm'],
['text' => '제품 카테고리별로 마진값이 다른가요?', 'type' => 'table_input', 'options' => ['columns' => ['제품카테고리', 'W 마진(mm)', 'H 마진(mm)', '비고']]],
['text' => '설치 유형별로 마진값이 달라지나요?', 'type' => 'table_input', 'options' => ['columns' => ['설치유형', 'W 마진(mm)', 'H 마진(mm)', '비고']]],
['text' => '면적(㎡) 계산 공식을 알려주세요', 'type' => 'formula_input', 'ai_hint' => '예: area = W1 * H1 / 1000000', 'expected_format' => '㎡'],
['text' => '중량(kg) 계산 공식을 알려주세요', 'type' => 'formula_input', 'ai_hint' => '예: weight = area * 단위중량(kg/㎡)', 'expected_format' => 'kg'],
['text' => '기타 파생 변수가 있나요? (예: 분할 개수, 절곡 길이 등)', 'type' => 'table_input', 'options' => ['columns' => ['변수명', '계산식', '단위', '비고']]],
['text' => '치수 계산에 사용하는 엑셀 수식을 캡처해주세요', 'type' => 'file_upload'],
],
],
[
'name' => '복합 공식 및 조건 분기',
'questions' => [
['text' => 'IF/CASE 조건 분기가 있는 계산식이 있나요? (예: 폭이 X 이상이면 다른 공식 사용)', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '조건 분기 공식을 모두 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['변수명', '조건', '조건 참 공식', '조건 거짓 공식']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => '최대폭 초과 시 분할 계산이 되는 제품이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '분할 계산 조건과 방식을 설명해주세요', 'type' => 'formula_input', 'ai_hint' => '예: W > 3000 이면 2분할, 분할폭 = CEIL(W/2)', 'depends_on' => ['question_index' => 2, 'value' => '있음']],
],
],
[
'name' => '허용 오차 및 변수 의존 관계',
'questions' => [
['text' => '치수별 허용 오차 범위가 있나요?', 'type' => 'table_input', 'options' => ['columns' => ['치수항목', '허용오차(+/-)', '단위', '비고']]],
['text' => '최소/최대 입력 가능 치수 범위는?', 'type' => 'table_input', 'options' => ['columns' => ['치수항목', '최솟값', '최댓값', '단위']]],
['text' => '변수 간 의존 관계를 설명해주세요 (A는 B와 C로 계산)', 'type' => 'text', 'ai_hint' => '계산 순서와 변수 의존성'],
['text' => '계산 순서가 중요한 변수가 있나요?', 'type' => 'text'],
['text' => '단위는 mm, m, kg 중 어떤 것을 기본으로 사용하나요?', 'type' => 'select', 'options' => ['choices' => ['mm', 'm', 'cm', '혼용']]],
['text' => '치수 입력 시 소수점 허용 여부와 소수점 자릿수는?', 'type' => 'table_input', 'options' => ['columns' => ['치수항목', '소수점 허용', '소수점 자릿수']]],
['text' => '특수 치수(예: 사다리꼴, 원형) 제품이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '특수 치수 제품의 면적/중량 계산 방식은?', 'type' => 'formula_input', 'depends_on' => ['question_index' => 6, 'value' => '있음']],
],
],
],
],
];
}
// ================================================================
// Domain 4: 부품 구성 상세 (22개)
// ================================================================
private function domainComponentConfig(): array
{
return [
'component_config' => [
'name' => '부품 구성 상세',
'description' => '주요 부품별 규격, 선택 기준, 공급업체, 재고 관리',
'templates' => [
[
'name' => '주요 부품별 상세',
'questions' => [
['text' => '가이드레일의 표준 길이 규격은? (예: 1219, 2438, 3305mm)', 'type' => 'table_input', 'options' => ['columns' => ['규격코드', '길이(mm)', '비고']]],
['text' => '가이드레일 길이 조합 규칙은? (어떤 길이를 몇 개 사용?)', 'type' => 'text', 'ai_hint' => '높이에 따른 가이드레일 조합 로직'],
['text' => '케이스(하우징) 크기별 규격과 부속품 차이를 설명해주세요', 'type' => 'table_input', 'options' => ['columns' => ['케이스규격', '적용조건', '부속품']]],
['text' => '모터 용량 종류와 선택 기준은? (무게별? 면적별?)', 'type' => 'table_input', 'options' => ['columns' => ['모터용량', '적용범위(최소)', '적용범위(최대)', '단위']], 'ai_hint' => '무게/면적 범위별 모터 매핑'],
['text' => '모터 전압 옵션은?', 'type' => 'multi_select', 'options' => ['choices' => ['380V', '220V', '110V', 'DC 24V']]],
['text' => '제어기 종류와 선택 기준은? (노출형/매립형 등)', 'type' => 'table_input', 'options' => ['columns' => ['제어기유형', '적용조건', '비고']]],
['text' => '절곡품(판재 가공) 목록과 각각의 치수 결정 방식은?', 'type' => 'table_input', 'options' => ['columns' => ['절곡품명', '치수결정방식', '재질', '두께(mm)']]],
['text' => '부자재(볼트, 너트, 패킹 등) 목록과 수량 결정 방식은?', 'type' => 'table_input', 'options' => ['columns' => ['부자재명', '규격', '수량결정방식', '기본수량']]],
],
],
[
'name' => '공급업체 및 리드타임',
'questions' => [
['text' => '주요 부품별 공급업체를 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '주공급업체', '대체공급업체', '원산지']]],
['text' => '부품별 발주 리드타임(납기일)은?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '리드타임(일)', '비고']]],
['text' => '리드타임이 긴 장기발주 부품이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '장기발주 부품 목록과 발주 기준 시점은?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '리드타임(주)', '발주 기준']], 'depends_on' => ['question_index' => 2, 'value' => '있음']],
],
],
[
'name' => '안전재고 및 수입검사',
'questions' => [
['text' => '부품별 안전재고 기준이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (부품별)', '있음 (카테고리별)', '없음']]],
['text' => '안전재고 기준 수량 및 계산 방식은?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '안전재고량', '단위', '계산기준']]],
['text' => '수입검사 대상 부품과 검사 기준은?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '검사항목', '합격기준', '샘플링율(%)']]],
['text' => '수입검사 불합격 시 처리 절차는?', 'type' => 'text', 'ai_hint' => '반품/재검사/특채 여부'],
],
],
[
'name' => '특수 구성',
'questions' => [
['text' => '연기차단재 등 특수 부품이 있나요? 적용 조건은?', 'type' => 'text'],
['text' => '보강재(샤프트, 파이프, 앵글 등) 사용 조건은?', 'type' => 'table_input', 'options' => ['columns' => ['보강재명', '규격', '적용조건', '수량']]],
['text' => '고객 요청에 따라 추가/제외되는 옵션 부품은?', 'type' => 'table_input', 'options' => ['columns' => ['옵션부품', '추가/제외', '추가비용', '비고']]],
],
],
],
],
];
}
// ================================================================
// Domain 5: 단가 체계 (22개)
// ================================================================
private function domainPricingStructure(): array
{
return [
'pricing_structure' => [
'name' => '단가 체계',
'description' => '단가 관리 방식, 원가 구성, 할인 정책, 이력 관리',
'templates' => [
[
'name' => '단가 관리 방식',
'questions' => [
['text' => '부품별 단가를 어디서 관리하나요?', 'type' => 'select', 'options' => ['choices' => ['엑셀', 'ERP 시스템', '구두/경험', '기타']]],
['text' => '단가표 파일을 업로드해주세요', 'type' => 'file_upload'],
['text' => '단가 변경 주기는?', 'type' => 'select', 'options' => ['choices' => ['수시', '월 단위', '분기 단위', '반기 단위', '연 단위']]],
['text' => '단가 변경 승인 프로세스가 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (공식 결재)', '담당자 자율', '없음']]],
['text' => '단가 이력(변경 전/후 기록)을 보관하나요?', 'type' => 'checkbox'],
],
],
[
'name' => '원가 구성요소',
'questions' => [
['text' => '원가를 구성하는 항목을 모두 선택해주세요', 'type' => 'multi_select', 'options' => ['choices' => ['재료비', '가공비', '노무비', '외주비', '경비', '관리비', '이윤']], 'is_required' => true],
['text' => '각 원가 항목의 비율(%) 또는 금액 기준을 알려주세요', 'type' => 'table_input', 'options' => ['columns' => ['원가항목', '산정방식', '비율(%) 또는 금액', '비고']]],
['text' => '환율이 적용되는 수입 부품이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '환율 적용 품목과 기준 환율 관리 방식은?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '통화', '환율 갱신 주기', '비고']], 'depends_on' => ['question_index' => 2, 'value' => '있음']],
],
],
[
'name' => '할인 정책',
'questions' => [
['text' => '고객별/거래처별 차등 단가가 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (등급별)', '있음 (거래처별)', '없음 (일괄 동일)']]],
['text' => '수량 할인(볼륨 디스카운트)이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '수량 할인 구간과 할인율을 입력해주세요', 'type' => 'price_table', 'options' => ['columns' => ['수량 구간(이상)', '수량 구간(미만)', '할인율(%)', '비고']], 'depends_on' => ['question_index' => 1, 'value' => '있음']],
['text' => '프로젝트별 특별 할인이 가능한가요?', 'type' => 'select', 'options' => ['choices' => ['가능', '불가']]],
['text' => '계약 단가와 시장(공시) 단가를 구분 관리하나요?', 'type' => 'select', 'options' => ['choices' => ['구분 관리', '단일 단가', '협의에 따라']]],
],
],
[
'name' => '단가 계산 방식',
'questions' => [
['text' => '면적 기반 단가 품목은? (원/㎡)', 'type' => 'table_input', 'options' => ['columns' => ['품목명', '단가(원/㎡)', '비고']], 'expected_format' => '원/㎡'],
['text' => '중량 기반 단가 품목은? (원/kg)', 'type' => 'table_input', 'options' => ['columns' => ['품목명', '단가(원/kg)', '비고']], 'expected_format' => '원/kg'],
['text' => '수량 기반 단가 품목은? (원/EA)', 'type' => 'table_input', 'options' => ['columns' => ['품목명', '단가(원/EA)', '비고']], 'expected_format' => '원/EA'],
['text' => '길이 기반 단가 품목은? (원/m)', 'type' => 'table_input', 'options' => ['columns' => ['품목명', '단가(원/m)', '비고']], 'expected_format' => '원/m'],
['text' => 'LOSS율(손실률)을 적용하나요? 적용 방식은?', 'type' => 'formula_input', 'ai_hint' => '예: 실제수량 = 계산수량 × (1 + LOSS율)', 'expected_format' => '%'],
['text' => '마진율 설정 방식은?', 'type' => 'select', 'options' => ['choices' => ['일괄 마진율', '품목별 마진율', '카테고리별 마진율', '고객별 마진율']]],
],
],
],
],
];
}
// ================================================================
// Domain 6: 수량 수식 (19개)
// ================================================================
private function domainQuantityFormula(): array
{
return [
'quantity_formula' => [
'name' => '수량 수식',
'description' => '부품별 수량 결정 규칙, LOSS율, 발주 단위',
'templates' => [
[
'name' => '수량 결정 규칙',
'questions' => [
['text' => '고정 수량 부품 목록 (항상 1개, 2개 등)', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '고정수량', '비고']]],
['text' => '치수 기반 수량 계산 부품과 수식', 'type' => 'formula_input', 'ai_hint' => '예: 슬랫수량 = CEIL(H1 / 슬랫피치)'],
['text' => '면적 기반 수량 계산 부품과 수식', 'type' => 'formula_input', 'ai_hint' => '예: 스크린수량 = area / 기준면적'],
['text' => '중량 기반 수량 계산 부품과 수식', 'type' => 'formula_input'],
['text' => '올림/내림/반올림 규칙이 있는 계산은?', 'type' => 'table_input', 'options' => ['columns' => ['계산항목', '올림/내림/반올림', '소수점자릿수']]],
],
],
[
'name' => 'LOSS율 및 여유 수량',
'questions' => [
['text' => '여유 수량(LOSS) 적용 품목과 비율은?', 'type' => 'table_input', 'options' => ['columns' => ['품목명', 'LOSS율(%)', '비고']]],
['text' => 'LOSS 유형을 구분하나요?', 'type' => 'multi_select', 'options' => ['choices' => ['절단LOSS', '가공LOSS', '불량LOSS', '취급LOSS', '운반LOSS']]],
['text' => 'LOSS 유형별 적용 품목과 비율을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['LOSS유형', '적용품목', 'LOSS율(%)']]],
['text' => '안전 여유율(Safety Factor)을 별도로 관리하나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '안전 여유율 적용 방식과 기준은?', 'type' => 'text', 'depends_on' => ['question_index' => 3, 'value' => '있음']],
],
],
[
'name' => '발주 단위 및 최소 수량',
'questions' => [
['text' => '부품별 최소 발주 수량(MOQ)이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '최소 발주 수량이 있는 부품 목록과 단위는?', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '최소발주수량', '단위', '비고']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => '포장 단위(Packing Unit)가 수량 계산에 영향을 주나요?', 'type' => 'select', 'options' => ['choices' => ['예', '아니오']]],
['text' => '포장 단위 품목과 수량은?', 'type' => 'table_input', 'options' => ['columns' => ['품목명', '포장단위', '단위']], 'depends_on' => ['question_index' => 2, 'value' => '예']],
],
],
[
'name' => '수식 검증',
'questions' => [
['text' => '실제 견적서에서 수량 계산 예시를 보여주세요 (W=3000, H=2500일 때)', 'type' => 'table_input', 'options' => ['columns' => ['부품명', '수식', '계산결과', '단위']], 'is_required' => true],
['text' => '수식에 사용하는 함수가 있나요?', 'type' => 'multi_select', 'options' => ['choices' => ['CEIL (올림)', 'FLOOR (내림)', 'ROUND (반올림)', 'MAX', 'MIN', 'IF 조건문', 'SUM']]],
['text' => '조건에 따라 수식이 달라지는 경우가 있나요?', 'type' => 'text', 'ai_hint' => '예: 폭이 3000 초과이면 분할 계산'],
],
],
],
],
];
}
// ================================================================
// Domain 7: 조건부 로직 (20개)
// ================================================================
private function domainConditionalLogic(): array
{
return [
'conditional_logic' => [
'name' => '조건부 로직',
'description' => '범위/매핑 기반 부품 자동 선택, 예외 규칙, 우선순위',
'templates' => [
[
'name' => '범위 기반 선택',
'questions' => [
['text' => '무게 범위별 모터 용량 선택표를 작성해주세요', 'type' => 'price_table', 'options' => ['columns' => ['범위 시작(kg)', '범위 끝(kg)', '모터용량', '비고']], 'is_required' => true],
['text' => '크기 범위별 부품 자동 선택 규칙이 있나요?', 'type' => 'table_input', 'options' => ['columns' => ['조건(변수)', '범위', '선택부품', '비고']]],
['text' => '브라켓 크기 결정 기준은?', 'type' => 'table_input', 'options' => ['columns' => ['조건', '범위', '브라켓 규격']]],
],
],
[
'name' => '매핑 기반 선택',
'questions' => [
['text' => '제품 모델 → 기본 부품 세트 매핑표', 'type' => 'table_input', 'options' => ['columns' => ['제품모델', '기본부품1', '기본부품2', '기본부품3']]],
['text' => '설치 유형 → 추가 부품 매핑표', 'type' => 'table_input', 'options' => ['columns' => ['설치유형', '추가부품', '수량', '비고']]],
['text' => '제어기 유형 → 부속품 매핑표', 'type' => 'table_input', 'options' => ['columns' => ['제어기유형', '부속품1', '부속품2', '부속품3']]],
['text' => '기타 조건부 자동 선택 규칙', 'type' => 'text', 'ai_hint' => '위 항목에 해당하지 않는 조건-결과 매핑'],
],
],
[
'name' => '다중 조건 및 예외 규칙',
'questions' => [
['text' => 'AND 조건이 필요한 규칙이 있나요? (예: 폭 AND 높이 동시 조건)', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => 'AND 조건 규칙을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['조건1', '조건2', '결과', '비고']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => 'OR 조건이 필요한 규칙이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => 'OR 조건 규칙을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['조건1 (또는)', '조건2 (또는)', '결과', '비고']], 'depends_on' => ['question_index' => 2, 'value' => '있음']],
['text' => '예외 규칙(일반 규칙에서 벗어나는 특수 케이스)이 있나요?', 'type' => 'text', 'ai_hint' => '특수 고객사, 특수 프로젝트 예외 사항'],
],
],
[
'name' => '우선순위 및 시즌/프로젝트 조건',
'questions' => [
['text' => '조건 규칙 간 충돌 시 우선순위 처리 방식은?', 'type' => 'select', 'options' => ['choices' => ['가장 구체적인 조건 우선', '가장 최근 등록 우선', '수동 지정', '담당자 판단']]],
['text' => '시즌별로 단가/구성이 달라지는 경우가 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '시즌별 조건과 적용 기간을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['시즌명', '적용기간(시작)', '적용기간(종료)', '변경사항']], 'depends_on' => ['question_index' => 1, 'value' => '있음']],
['text' => '프로젝트별 특수 조건(별도 단가, 별도 구성)이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '프로젝트별 조건 관리 방식은?', 'type' => 'text', 'depends_on' => ['question_index' => 3, 'value' => '있음']],
],
],
],
],
];
}
// ================================================================
// Domain 8: 견적서 양식 (21개)
// ================================================================
private function domainQuoteFormat(): array
{
return [
'quote_format' => [
'name' => '견적서 양식',
'description' => '출력 양식, 다중 양식, 특수 요구사항',
'templates' => [
[
'name' => '기본 출력 양식',
'questions' => [
['text' => '현재 사용 중인 견적서 양식을 업로드해주세요', 'type' => 'file_upload', 'is_required' => true],
['text' => '견적서에 표시되는 항목 그룹은?', 'type' => 'multi_select', 'options' => ['choices' => ['재료비', '노무비', '경비', '설치비', '운반비', '이윤', '부가세']]],
['text' => '소계/합계 계산 구조를 설명해주세요', 'type' => 'text', 'ai_hint' => '항목 그룹별 소계와 최종 합계의 관계'],
['text' => '할인 적용 방식은?', 'type' => 'select', 'options' => ['choices' => ['일괄 할인', '항목별 할인', '할인 없음', '협의 할인']]],
['text' => '부가세 표시 방식은?', 'type' => 'select', 'options' => ['choices' => ['별도 표시', '포함 표시', '선택 가능']]],
['text' => '견적서에 표시하지 않는 내부 관리 항목은?', 'type' => 'text'],
['text' => '견적 번호 체계를 알려주세요', 'type' => 'text', 'ai_hint' => '예: Q-2026-001 형식'],
],
],
[
'name' => '다중 양식 및 고객 맞춤',
'questions' => [
['text' => '용도별로 다른 견적서 양식을 사용하나요?', 'type' => 'multi_select', 'options' => ['choices' => ['관급용 별도 양식', '민간공사용 별도 양식', '수출용 별도 양식', '없음 (단일 양식)']]],
['text' => '고객사 요청으로 양식이 달라지는 경우가 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (고객사 지정 양식)', '없음']]],
['text' => '고객 맞춤 항목 예시를 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['고객사명', '맞춤 항목', '설명']], 'depends_on' => ['question_index' => 1, 'value' => '있음 (고객사 지정 양식)']],
['text' => '다국어(영문 등) 견적서가 필요한가요?', 'type' => 'select', 'options' => ['choices' => ['필요', '불필요']]],
['text' => '영문 견적서의 경우 항목명 번역 기준이 있나요?', 'type' => 'file_upload', 'depends_on' => ['question_index' => 3, 'value' => '필요']],
],
],
[
'name' => '첨부 서류 및 전자 견적',
'questions' => [
['text' => '견적서에 함께 제출하는 첨부 서류는?', 'type' => 'multi_select', 'options' => ['choices' => ['시방서', '인증서 사본', '시험성적서', '카탈로그', '도면', '회사 소개서']]],
['text' => '전자 견적(이메일, 전자계약 등) vs 종이 견적 비율은?', 'type' => 'select', 'options' => ['choices' => ['전자 견적 100%', '주로 전자, 일부 종이', '혼용 50:50', '주로 종이', '종이 견적 100%']]],
['text' => '전자 서명/전자 도장 사용 여부는?', 'type' => 'checkbox'],
['text' => '견적 유효 기간 표시 여부와 기준은?', 'type' => 'text', 'ai_hint' => '예: 발행일로부터 30일'],
],
],
[
'name' => '특수 요구사항',
'questions' => [
['text' => '산출내역서(세부 내역)를 별도로 제공하나요?', 'type' => 'checkbox'],
['text' => '위치별(층/부호) 개별 산출이 필요한가요?', 'type' => 'checkbox'],
['text' => '일괄 산출(여러 위치 합산)을 사용하나요?', 'type' => 'checkbox'],
['text' => '견적 내 비교 옵션 표시가 필요한가요? (A안/B안 비교)', 'type' => 'checkbox'],
['text' => '견적 수정 이력 관리가 필요한가요?', 'type' => 'checkbox'],
],
],
],
],
];
}
// ================================================================
// Domain 9: 생산 공정 (20개)
// ================================================================
private function domainProductionProcess(): array
{
return [
'production_process' => [
'name' => '생산 공정',
'description' => '공정 흐름, 설비, 납기, 작업지시, 외주 관리',
'templates' => [
[
'name' => '공정 흐름 및 작업장 구성',
'questions' => [
['text' => '생산 공정 흐름을 순서대로 나열해주세요', 'type' => 'text', 'ai_hint' => '예: 원자재 입고 → 절단 → 가공 → 조립 → 검사 → 포장 → 출하', 'is_required' => true],
['text' => '작업장(공장) 구성을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['작업장명', '담당 공정', '작업인원', '비고']]],
['text' => '제품별로 공정 순서가 달라지나요?', 'type' => 'select', 'options' => ['choices' => ['예, 제품별로 다름', '아니오, 동일 공정']]],
['text' => '제품별 공정 차이점을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['제품명', '추가 공정', '생략 공정', '비고']], 'depends_on' => ['question_index' => 2, 'value' => '예, 제품별로 다름']],
],
],
[
'name' => '설비 목록 및 표준시간',
'questions' => [
['text' => '주요 생산 설비 목록을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['설비명', '모델/사양', '처리 가능 규격', '일일 생산 용량']]],
['text' => '설비별 병목 공정이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '병목 공정과 개선 방안은?', 'type' => 'text', 'depends_on' => ['question_index' => 1, 'value' => '있음']],
['text' => '제품별 표준 작업 시간(공수)이 관리되고 있나요?', 'type' => 'select', 'options' => ['choices' => ['예, 공식 표준시간 있음', '경험치로 관리', '관리 안 함']]],
['text' => '주요 제품의 공정별 표준시간을 입력해주세요', 'type' => 'table_input', 'options' => ['columns' => ['제품명', '공정명', '표준시간(분)', '비고']]],
],
],
[
'name' => '납기 기준 및 생산 계획',
'questions' => [
['text' => '제품별 평균 생산 납기일은?', 'type' => 'table_input', 'options' => ['columns' => ['제품군', '평균 납기(영업일)', '비고']], 'is_required' => true],
['text' => '납기 계산 기준일은?', 'type' => 'select', 'options' => ['choices' => ['수주 확정일', '선금 수령일', '도면 승인일', '기타']]],
['text' => '생산 계획 수립 방식은?', 'type' => 'select', 'options' => ['choices' => ['주간 단위', '월간 단위', '수주별 개별', '혼용']]],
['text' => '긴급 납기 요청(Rush Order) 처리 절차는?', 'type' => 'text'],
],
],
[
'name' => '외주 및 작업지시',
'questions' => [
['text' => '외주 가공 공정이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '외주 가공 품목과 외주업체 목록을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['외주품목', '가공내용', '외주업체', '단가기준']], 'depends_on' => ['question_index' => 0, 'value' => '있음']],
['text' => '작업지시서를 발행하나요?', 'type' => 'select', 'options' => ['choices' => ['예, 공식 작업지시서 발행', '구두 지시', '발행 안 함']]],
['text' => '현재 사용하는 작업지시서 양식을 업로드해주세요', 'type' => 'file_upload', 'depends_on' => ['question_index' => 2, 'value' => '예, 공식 작업지시서 발행']],
['text' => '재작업/불량 발생 시 생산 기록 처리 방식은?', 'type' => 'text', 'ai_hint' => '재작업 지시서 발행 여부, 원인 분석 기록 방법'],
['text' => '생산 실적(작업 완료) 보고 방식은?', 'type' => 'select', 'options' => ['choices' => ['일일 실적 보고', '공정별 실시간 보고', 'ERP 입력', '구두/엑셀']]],
],
],
],
],
];
}
// ================================================================
// Domain 10: 품질 관리 (17개)
// ================================================================
private function domainQualityControl(): array
{
return [
'quality_control' => [
'name' => '품질 관리',
'description' => '검사 기준, 불량 분류, 인증 관리, 클레임 처리',
'templates' => [
[
'name' => '검사 체계',
'questions' => [
['text' => '수입검사(자재 입고 검사)를 실시하나요?', 'type' => 'select', 'options' => ['choices' => ['예, 전수검사', '예, 샘플링검사', '아니오']], 'is_required' => true],
['text' => '수입검사 대상 품목과 검사 항목을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['품목', '검사항목', '검사방법', '합격기준']]],
['text' => '공정 검사(자주검사/순회검사)를 실시하나요?', 'type' => 'multi_select', 'options' => ['choices' => ['자주검사 (작업자 본인)', '순회검사 (품질담당자)', '없음']]],
['text' => '공정 검사 기준과 주기는?', 'type' => 'table_input', 'options' => ['columns' => ['검사공정', '검사항목', '검사주기', '기준']]],
['text' => '완제품 검사 기준을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['검사항목', '측정방법', '합격기준', '비고']]],
['text' => '사용하는 검사 장비 목록을 알려주세요', 'type' => 'table_input', 'options' => ['columns' => ['장비명', '측정항목', '측정범위', '교정주기']]],
],
],
[
'name' => '불량 관리 및 시정조치',
'questions' => [
['text' => '불량 유형을 어떻게 분류하나요?', 'type' => 'multi_select', 'options' => ['choices' => ['치수불량', '외관불량', '기능불량', '재료불량', '조립불량', '기타']]],
['text' => '불량 발생 시 시정/예방 조치 프로세스를 설명해주세요', 'type' => 'text', 'ai_hint' => '불량 발생 → 원인분석 → 시정조치 → 효과확인 흐름'],
['text' => '불량률 목표치와 현재 실적은?', 'type' => 'table_input', 'options' => ['columns' => ['불량유형', '목표불량률(%)', '현재불량률(%)', '비고']]],
],
],
[
'name' => '인증 및 고객 클레임',
'questions' => [
['text' => '품질 관련 인증 보유 현황은? (ISO, KC 등)', 'type' => 'multi_select', 'options' => ['choices' => ['ISO 9001', 'ISO 14001', 'KC 안전인증', '기타 인증']]],
['text' => '인증 유지를 위한 정기 감사 주기는?', 'type' => 'select', 'options' => ['choices' => ['반기 1회', '연 1회', '2년 1회', '해당 없음']]],
['text' => '품질 목표 및 KPI를 관리하고 있나요?', 'type' => 'select', 'options' => ['choices' => ['예, 공식 KPI 관리', '비공식 관리', '없음']]],
['text' => '품질 KPI 항목과 목표치를 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['KPI항목', '목표치', '측정주기', '담당부서']], 'depends_on' => ['question_index' => 2, 'value' => '예, 공식 KPI 관리']],
['text' => '고객 클레임 처리 절차를 설명해주세요', 'type' => 'text', 'ai_hint' => '접수 → 현장확인 → 조치(교체/수리/환불) → 완료 처리'],
['text' => '클레임 처리 목표 기간(SLA)이 있나요?', 'type' => 'select', 'options' => ['choices' => ['24시간 이내', '3영업일 이내', '7영업일 이내', '협의']]],
],
],
],
],
];
}
// ================================================================
// Domain 11: 물류/재고 (18개)
// ================================================================
private function domainLogisticsInventory(): array
{
return [
'logistics_inventory' => [
'name' => '물류/재고',
'description' => '입출고, 창고 관리, 재고 실사, 운송/배송',
'templates' => [
[
'name' => '입출고 및 창고 관리',
'questions' => [
['text' => '자재 입고 프로세스를 설명해주세요', 'type' => 'text', 'ai_hint' => '발주 → 납품 → 수입검사 → 입고 처리 흐름', 'is_required' => true],
['text' => '완제품 출고 프로세스를 설명해주세요', 'type' => 'text', 'ai_hint' => '출하 지시 → 피킹 → 포장 → 검수 → 출고 처리'],
['text' => '창고 구역 구성을 알려주세요', 'type' => 'table_input', 'options' => ['columns' => ['구역명', '보관 품목', '면적(㎡)', '비고']]],
['text' => '바코드 또는 QR 코드로 재고를 관리하나요?', 'type' => 'select', 'options' => ['choices' => ['바코드 사용', 'QR 코드 사용', '둘 다 사용', '사용 안 함']]],
['text' => '재고 위치 관리 방식은?', 'type' => 'select', 'options' => ['choices' => ['지정 위치 (고정)', '자유 위치 (변동)', '구역 단위 관리', '관리 안 함']]],
],
],
[
'name' => '재고 정책',
'questions' => [
['text' => '재고 적재 방식(FIFO/LIFO/지정위치)은?', 'type' => 'select', 'options' => ['choices' => ['FIFO (선입선출)', 'LIFO (후입선출)', '지정 위치 고정', '혼용']]],
['text' => '재고 실사 주기는?', 'type' => 'select', 'options' => ['choices' => ['월 1회', '분기 1회', '반기 1회', '연 1회', '비정기']]],
['text' => '재고 실사 방식은?', 'type' => 'multi_select', 'options' => ['choices' => ['전수조사', '순환조사', '랜덤 샘플링', '바코드 스캔']]],
['text' => '안전재고 미달 시 자동 발주 또는 알림 기능이 필요한가요?', 'type' => 'checkbox'],
['text' => '유효기간/유통기한 관리가 필요한 품목이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
],
],
[
'name' => '운송/배송 및 반품',
'questions' => [
['text' => '주요 운송/배송 방식은?', 'type' => 'multi_select', 'options' => ['choices' => ['자사 차량', '택배', '화물 운송', '고객 자체 수령', '설치팀 직배송']]],
['text' => '배송 지역별 운임 기준이 있나요?', 'type' => 'select', 'options' => ['choices' => ['있음 (지역별 차등)', '있음 (중량별)', '없음 (포함가)', '별도 협의']]],
['text' => '제품별 포장 규격을 정리해주세요', 'type' => 'table_input', 'options' => ['columns' => ['제품명', '포장재질', '포장크기(mm)', '최대적재수량']]],
['text' => '반품 처리 프로세스는?', 'type' => 'text', 'ai_hint' => '반품 접수 → 검수 → 재고 입고 또는 폐기 처리'],
['text' => '운송 중 파손/불량 발생 시 처리 절차는?', 'type' => 'text'],
['text' => '납품 실적 관리 및 납기 준수율을 측정하나요?', 'type' => 'select', 'options' => ['choices' => ['예, 공식 측정', '비공식', '측정 안 함']]],
],
],
],
],
];
}
// ================================================================
// Domain 12: 영업/고객 (18개)
// ================================================================
private function domainSalesCustomer(): array
{
return [
'sales_customer' => [
'name' => '영업/고객',
'description' => '거래처 분류, 계약, 결제, 영업 파이프라인, A/S',
'templates' => [
[
'name' => '거래처 및 계약 유형',
'questions' => [
['text' => '거래처 유형을 선택해주세요', 'type' => 'multi_select', 'options' => ['choices' => ['건설사', '시공사(하도급)', '직거래(건물주)', '관공서', '유통업체', '수출']], 'is_required' => true],
['text' => '거래처별 판매 비중(%)을 대략 입력해주세요', 'type' => 'table_input', 'options' => ['columns' => ['거래처유형', '판매비중(%)', '비고']]],
['text' => '주로 사용하는 계약 유형은?', 'type' => 'multi_select', 'options' => ['choices' => ['단가계약 (연간)', '프로젝트별 수주', '단발성 거래', '공개 입찰']]],
['text' => '단가계약의 경우 계약 기간과 갱신 주기는?', 'type' => 'text', 'depends_on' => ['question_index' => 2, 'value' => '단가계약 (연간)']],
],
],
[
'name' => '결제 조건 및 영업 파이프라인',
'questions' => [
['text' => '주로 사용하는 결제 조건은?', 'type' => 'multi_select', 'options' => ['choices' => ['선금 100%', '선금+잔금', '선금+중도금+잔금', '후불(납품 후)', '어음 결제']]],
['text' => '선금/중도금/잔금 비율 기준을 알려주세요', 'type' => 'table_input', 'options' => ['columns' => ['결제단계', '비율(%)', '지급 시점', '비고']]],
['text' => '영업 파이프라인 단계를 정의해주세요', 'type' => 'text', 'ai_hint' => '예: 리드 → 견적요청 → 견적발행 → 협상 → 수주확정 → 납품 → 완료'],
['text' => '현재 CRM 또는 영업 관리 도구를 사용하나요?', 'type' => 'select', 'options' => ['choices' => ['전용 CRM 사용', '엑셀로 관리', '구두/기억으로 관리', '없음']]],
['text' => '영업 목표 및 실적을 어떻게 관리하나요?', 'type' => 'select', 'options' => ['choices' => ['월별 목표/실적 관리', '분기별', '연간', '관리 안 함']]],
],
],
[
'name' => 'A/S 및 고객 관리',
'questions' => [
['text' => '하자보증 기간 및 기준은?', 'type' => 'table_input', 'options' => ['columns' => ['제품군', '하자보증기간', '보증 범위', '제외 사항']], 'is_required' => true],
['text' => 'A/S 접수 채널은?', 'type' => 'multi_select', 'options' => ['choices' => ['전화', '이메일', '온라인 신청', '담당자 직접 접수']]],
['text' => 'A/S 처리 목표 시간(SLA)은?', 'type' => 'select', 'options' => ['choices' => ['당일 출동', '24시간 이내', '3영업일 이내', '7영업일 이내', '협의']]],
['text' => '고객 등급(우수, 일반 등) 관리를 하나요?', 'type' => 'select', 'options' => ['choices' => ['있음', '없음']]],
['text' => '고객 등급별 혜택이나 차별화 서비스는?', 'type' => 'text', 'depends_on' => ['question_index' => 3, 'value' => '있음']],
['text' => '원가 공개 가능 범위는?', 'type' => 'select', 'options' => ['choices' => ['원가 전혀 비공개', '요청 시 재료비만 공개', '요청 시 전체 원가 공개', '협의에 따라']], 'ai_hint' => '견적서에 원가 항목 노출 여부'],
['text' => '납품 완료 후 고객 만족도 조사를 실시하나요?', 'type' => 'select', 'options' => ['choices' => ['예, 정기 조사', '비공식 확인', '없음']]],
],
],
],
],
];
}
}