// SAM MES 사용자 흐름 패턴 정의
// 20가지 주요 업무 플로우 + 메뉴별/화면별 플로우차트
// menuDefinitions.js와 동일한 메뉴명 사용

// ============================================================
// 1. 20가지 주요 사용자 흐름 패턴
// ============================================================
export const mainUserFlows = [
  // 판매 프로세스 (1-5)
  {
    id: 'flow-1',
    category: 'sales',
    name: '신규 견적 → 수주 확정',
    description: '고객 문의부터 수주 확정까지의 전체 판매 프로세스',
    steps: [
      { id: 's1', screen: 'quote-register', label: '견적 등록', menu: '판매관리 > 견적관리', action: '신규 견적서 작성' },
      { id: 's2', screen: 'quote-list', label: '견적 목록', menu: '판매관리 > 견적관리', action: '고객에게 견적서 발송' },
      { id: 's3', screen: 'quote-detail', label: '견적 상세', menu: '판매관리 > 견적관리', action: '고객 확인 대기', type: 'decision' },
      { id: 's4', screen: 'order-register', label: '수주 등록', menu: '판매관리 > 수주관리', action: '확정 시 수주로 전환' },
      { id: 's5', screen: 'order-list', label: '수주 목록', menu: '판매관리 > 수주관리', action: '수주번호 발급 완료' },
    ],
    branches: [
      { from: 's3', condition: '거절', to: 's1', label: '재견적' },
      { from: 's3', condition: '수정요청', to: 's1', label: '견적 수정' },
    ],
  },
  {
    id: 'flow-2',
    category: 'sales',
    name: '수주 분할 출하',
    description: '하나의 수주를 여러 번에 나눠 출하하는 프로세스',
    steps: [
      { id: 's1', screen: 'order-detail', label: '수주 상세', menu: '판매관리 > 수주관리', action: '수주 상세 확인' },
      { id: 's2', screen: 'shipment-register', label: '출하 등록', menu: '판매관리 > 출하관리', action: '1차 분할 출하 등록' },
      { id: 's3', screen: 'shipment-list', label: '출하 목록', menu: '판매관리 > 출하관리', action: '출하 처리' },
      { id: 's4', screen: 'shipment-register', label: '출하 등록', menu: '판매관리 > 출하관리', action: '2차 분할 출하 등록', type: 'loop' },
      { id: 's5', screen: 'order-detail', label: '수주 상세', menu: '판매관리 > 수주관리', action: '전량 출하 완료' },
    ],
    branches: [
      { from: 's3', condition: '잔여수량 존재', to: 's4', label: '추가 출하' },
    ],
  },
  {
    id: 'flow-3',
    category: 'sales',
    name: '거래처 신규 등록',
    description: '신규 거래처 등록부터 신용등급 설정까지',
    steps: [
      { id: 's1', screen: 'customer-register', label: '거래처 등록', menu: '판매관리 > 거래처관리', action: '기본 정보 입력' },
      { id: 's2', screen: 'acc-customer-register', label: '신용등급 등록', menu: '회계관리 > 거래처관리', action: '여신한도 설정' },
      { id: 's3', screen: 'price-register', label: '단가 등록', menu: '판매관리 > 단가관리', action: '품목별 단가 설정' },
      { id: 's4', screen: 'customer-list', label: '거래처 목록', menu: '판매관리 > 거래처관리', action: '거래처 활성화' },
    ],
  },
  {
    id: 'flow-4',
    category: 'sales',
    name: '현장 등록 및 관리',
    description: '시공 현장 등록부터 완료까지의 관리 프로세스',
    steps: [
      { id: 's1', screen: 'site-register', label: '현장 등록', menu: '판매관리 > 현장관리', action: '현장 기본정보 등록' },
      { id: 's2', screen: 'order-register', label: '수주 등록', menu: '판매관리 > 수주관리', action: '현장에 수주 연결' },
      { id: 's3', screen: 'site-detail', label: '현장 상세', menu: '판매관리 > 현장관리', action: '납품/시공 진행' },
      { id: 's4', screen: 'site-list', label: '현장 목록', menu: '판매관리 > 현장관리', action: '시공 완료 처리' },
    ],
  },
  {
    id: 'flow-5',
    category: 'sales',
    name: '견적 복사 및 수정',
    description: '기존 견적을 복사하여 새 견적 작성',
    steps: [
      { id: 's1', screen: 'quote-list', label: '견적 목록', menu: '판매관리 > 견적관리', action: '기존 견적 검색' },
      { id: 's2', screen: 'quote-detail', label: '견적 상세', menu: '판매관리 > 견적관리', action: '견적 복사 실행' },
      { id: 's3', screen: 'quote-register', label: '견적 등록', menu: '판매관리 > 견적관리', action: '수량/단가 수정' },
      { id: 's4', screen: 'quote-list', label: '견적 목록', menu: '판매관리 > 견적관리', action: '새 견적으로 저장' },
    ],
  },

  // 생산 프로세스 (6-10)
  {
    id: 'flow-6',
    category: 'production',
    name: '작업지시 → 생산 완료',
    description: '수주 확정 후 작업지시 생성부터 생산 완료까지',
    steps: [
      { id: 's1', screen: 'order-detail', label: '수주 상세', menu: '판매관리 > 수주관리', action: '생산 대상 수주 확인' },
      { id: 's2', screen: 'work-order-register', label: '작업지시 등록', menu: '생산관리 > 작업지시 관리', action: '공정별 작업지시서 발행' },
      { id: 's3', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '작업자 작업 시작' },
      { id: 's4', screen: 'work-result-register', label: '작업실적 등록', menu: '생산관리 > 작업실적', action: '생산 실적 입력' },
      { id: 's5', screen: 'production-dashboard', label: '생산 현황판', menu: '생산관리 > 생산 현황판', action: '생산 진행 모니터링' },
    ],
  },
  {
    id: 'flow-7',
    category: 'production',
    name: '공정별 작업 진행',
    description: '스크린 → 슬랫 → 절곡 → 포밍 → 포장 순서 공정 흐름',
    steps: [
      { id: 's1', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '원단 절단/미싱/앤드락' },
      { id: 's2', screen: 'pqc-list', label: '중간검사(PQC)', menu: '품질관리 > 중간검사(PQC)', action: '스크린 품질검사' },
      { id: 's3', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '슬랫 공정' },
      { id: 's4', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '절곡 작업' },
      { id: 's5', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '포밍 작업' },
      { id: 's6', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '포장 및 라벨링' },
    ],
  },
  {
    id: 'flow-8',
    category: 'production',
    name: '생산 현황 모니터링',
    description: '대시보드를 통한 실시간 생산 현황 확인',
    steps: [
      { id: 's1', screen: 'production-dashboard', label: '생산 현황판', menu: '생산관리 > 생산 현황판', action: '전체 생산 현황 조회' },
      { id: 's2', screen: 'work-order-list', label: '작업지시 목록', menu: '생산관리 > 작업지시 관리', action: '지연/진행 작업 확인' },
      { id: 's3', screen: 'work-result-list', label: '작업실적 목록', menu: '생산관리 > 작업실적', action: '공정별 실적 확인' },
      { id: 's4', screen: 'defect-list', label: '부적합품 목록', menu: '품질관리 > 부적합품관리', action: '불량 현황 파악' },
    ],
  },
  {
    id: 'flow-9',
    category: 'production',
    name: '재작업 처리',
    description: '불량 발생 시 재작업 지시 및 처리',
    steps: [
      { id: 's1', screen: 'defect-register', label: '부적합품 등록', menu: '품질관리 > 부적합품관리', action: '불량 내용 등록' },
      { id: 's2', screen: 'defect-detail', label: '부적합품 상세', menu: '품질관리 > 부적합품관리', action: '불량 원인 파악', type: 'decision' },
      { id: 's3', screen: 'work-order-register', label: '작업지시 등록', menu: '생산관리 > 작업지시 관리', action: '재작업 지시서 발행' },
      { id: 's4', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '재작업 진행' },
      { id: 's5', screen: 'pqc-list', label: '중간검사(PQC)', menu: '품질관리 > 중간검사(PQC)', action: '재작업 품질 확인' },
    ],
    branches: [
      { from: 's2', condition: '폐기', to: 'end', label: '폐기 처리' },
    ],
  },
  {
    id: 'flow-10',
    category: 'production',
    name: '긴급 작업 처리',
    description: '긴급 수주 건 우선 생산 처리',
    steps: [
      { id: 's1', screen: 'order-detail', label: '수주 상세', menu: '판매관리 > 수주관리', action: '긴급 표시 수주 확인' },
      { id: 's2', screen: 'work-order-list', label: '작업지시 목록', menu: '생산관리 > 작업지시 관리', action: '기존 작업 우선순위 조정' },
      { id: 's3', screen: 'work-order-register', label: '작업지시 등록', menu: '생산관리 > 작업지시 관리', action: '긴급 작업지시 발행' },
      { id: 's4', screen: 'production-dashboard', label: '생산 현황판', menu: '생산관리 > 생산 현황판', action: '긴급 건 진행 추적' },
    ],
  },

  // 품질관리 프로세스 (11-13)
  {
    id: 'flow-11',
    category: 'quality',
    name: '수입검사(IQC)',
    description: '자재 입고 시 수입검사 프로세스',
    steps: [
      { id: 's1', screen: 'inbound-register', label: '입고 등록', menu: '자재관리 > 입고관리', action: '자재 입고 등록' },
      { id: 's2', screen: 'iqc-list', label: '수입검사(IQC)', menu: '품질관리 > 수입검사(IQC)', action: 'IQC 검사 수행', type: 'decision' },
      { id: 's3', screen: 'stock-list', label: '재고현황', menu: '자재관리 > 재고현황', action: '합격품 재고 반영' },
    ],
    branches: [
      { from: 's2', condition: '불합격', to: 'return', label: '반품 처리' },
      { from: 's2', condition: '조건부 합격', to: 's3', label: '특채 입고' },
    ],
  },
  {
    id: 'flow-12',
    category: 'quality',
    name: '중간검사(PQC)',
    description: '생산 중 공정 품질검사 프로세스',
    steps: [
      { id: 's1', screen: 'work-result-list', label: '작업실적 목록', menu: '생산관리 > 작업실적', action: '검사 대상 실적 확인' },
      { id: 's2', screen: 'pqc-list', label: '중간검사(PQC)', menu: '품질관리 > 중간검사(PQC)', action: 'PQC 검사 수행', type: 'decision' },
      { id: 's3', screen: 'work-order-list', label: '작업지시 목록', menu: '생산관리 > 작업지시 관리', action: '다음 공정 진행' },
    ],
    branches: [
      { from: 's2', condition: '불합격', to: 'rework', label: '재작업 지시' },
    ],
  },
  {
    id: 'flow-13',
    category: 'quality',
    name: '제품검사(FQC)',
    description: '출하 전 최종 제품검사 프로세스',
    steps: [
      { id: 's1', screen: 'shipment-list', label: '출하 목록', menu: '판매관리 > 출하관리', action: '출하 예정 건 확인' },
      { id: 's2', screen: 'fqc-list', label: '제품검사(FQC)', menu: '품질관리 > 제품검사(FQC)', action: 'FQC 검사 수행', type: 'decision' },
      { id: 's3', screen: 'shipment-detail', label: '출하 상세', menu: '판매관리 > 출하관리', action: '출하 확정' },
    ],
    branches: [
      { from: 's2', condition: '불합격', to: 'hold', label: '출하 보류' },
    ],
  },

  // 회계 프로세스 (14-17)
  {
    id: 'flow-14',
    category: 'accounting',
    name: '매출 정산',
    description: '출하 완료 후 매출 처리 및 세금계산서 발행',
    steps: [
      { id: 's1', screen: 'sales-list', label: '매출 목록', menu: '회계관리 > 매출관리', action: '출하 완료 건 조회' },
      { id: 's2', screen: 'sales-statement', label: '거래명세서', menu: '회계관리 > 매출관리', action: '거래명세서 발행' },
      { id: 's3', screen: 'sales-tax-invoice', label: '세금계산서', menu: '회계관리 > 매출관리', action: '전자세금계산서 발행' },
      { id: 's4', screen: 'collection-register', label: '수금 등록', menu: '회계관리 > 수금관리', action: '수금 예정 등록' },
    ],
  },
  {
    id: 'flow-15',
    category: 'accounting',
    name: '수금 관리',
    description: '거래처별 수금 처리 및 미수금 관리',
    steps: [
      { id: 's1', screen: 'collection-list', label: '수금 목록', menu: '회계관리 > 수금관리', action: '수금 예정 조회' },
      { id: 's2', screen: 'collection-register', label: '수금 등록', menu: '회계관리 > 수금관리', action: '입금 확인 후 등록' },
      { id: 's3', screen: 'cashbook-register', label: '금전출납부 등록', menu: '회계관리 > 금전출납부', action: '수입 내역 등록' },
      { id: 's4', screen: 'receivable-list', label: '미수금 목록', menu: '회계관리 > 수금관리', action: '잔여 미수금 확인' },
    ],
  },
  {
    id: 'flow-16',
    category: 'accounting',
    name: '매입 처리',
    description: '품의서 작성부터 지출결의까지',
    steps: [
      { id: 's1', screen: 'purchase-register', label: '품의서 등록', menu: '회계관리 > 매입관리', action: '구매 품의서 등록' },
      { id: 's2', screen: 'purchase-list', label: '품의서 목록', menu: '회계관리 > 매입관리', action: '결재 승인 대기', type: 'decision' },
      { id: 's3', screen: 'expense-register', label: '지출결의서 등록', menu: '회계관리 > 매입관리', action: '지출결의서 작성' },
      { id: 's4', screen: 'cashbook-register', label: '금전출납부 등록', menu: '회계관리 > 금전출납부', action: '지출 내역 등록' },
    ],
    branches: [
      { from: 's2', condition: '반려', to: 's1', label: '품의서 수정' },
    ],
  },
  {
    id: 'flow-17',
    category: 'accounting',
    name: '원가 분석',
    description: '수주별 원가 집계 및 분석',
    steps: [
      { id: 's1', screen: 'cost-list', label: '원가 목록', menu: '회계관리 > 원가관리', action: '수주별 원가 조회' },
      { id: 's2', screen: 'cost-detail', label: '원가 상세', menu: '회계관리 > 원가관리', action: '상세 원가 분석' },
      { id: 's3', screen: 'order-detail', label: '수주 상세', menu: '판매관리 > 수주관리', action: '수주 정보 확인' },
    ],
  },

  // 자재/재고 프로세스 (18-20)
  {
    id: 'flow-18',
    category: 'inventory',
    name: '자재 입고',
    description: '발주 자재 입고 처리 프로세스',
    steps: [
      { id: 's1', screen: 'inbound-register', label: '입고 등록', menu: '자재관리 > 입고관리', action: '입고 정보 등록' },
      { id: 's2', screen: 'iqc-list', label: '수입검사(IQC)', menu: '품질관리 > 수입검사(IQC)', action: 'IQC 검사', type: 'decision' },
      { id: 's3', screen: 'stock-list', label: '재고현황', menu: '자재관리 > 재고현황', action: '재고 수량 증가' },
    ],
    branches: [
      { from: 's2', condition: '불합격', to: 'return', label: '반품' },
    ],
  },
  {
    id: 'flow-19',
    category: 'inventory',
    name: '재고 실사',
    description: '재고 실사 및 조정 프로세스',
    steps: [
      { id: 's1', screen: 'stock-list', label: '재고현황', menu: '자재관리 > 재고현황', action: '현재 재고 확인' },
      { id: 's2', screen: 'stock-adjust', label: '재고 조정', menu: '자재관리 > 재고현황', action: '실제 수량 입력' },
      { id: 's3', screen: 'stock-list', label: '재고현황', menu: '자재관리 > 재고현황', action: '차이 원인 분석', type: 'decision' },
      { id: 's4', screen: 'stock-adjust', label: '재고 조정', menu: '자재관리 > 재고현황', action: '재고 수량 조정' },
    ],
  },
  {
    id: 'flow-20',
    category: 'inventory',
    name: '자재 출고',
    description: '생산용 자재 출고 프로세스',
    steps: [
      { id: 's1', screen: 'work-order-detail', label: '작업지시 상세', menu: '생산관리 > 작업지시 관리', action: '필요 자재 확인' },
      { id: 's2', screen: 'stock-list', label: '재고현황', menu: '자재관리 > 재고현황', action: '가용 재고 조회' },
      { id: 's3', screen: 'stock-issue', label: '출고 처리', menu: '자재관리 > 재고현황', action: '자재 출고 등록' },
      { id: 's4', screen: 'worker-task', label: '작업자 화면', menu: '생산관리 > 작업자 화면', action: '작업에 자재 사용' },
    ],
  },
];

// ============================================================
// 2. 메뉴별 플로우차트 정의 (menuDefinitions.js와 동일한 메뉴명)
// ============================================================
export const menuFlows = {
  // 기준정보
  master: {
    name: '기준정보',
    description: '시스템 기준 데이터 관리',
    flows: [
      {
        id: 'master-item',
        name: '품목기준관리',
        screens: ['item-master-list', 'item-master-register', 'item-master-detail'],
        flow: '목록 조회 → 신규 등록 → 상세 확인',
      },
      {
        id: 'master-process',
        name: '공정기준관리',
        screens: ['process-master-list', 'process-master-register', 'process-master-detail'],
        flow: '공정 목록 → 공정 등록 → 작업단계 설정',
      },
      {
        id: 'master-quality',
        name: '품질기준관리',
        screens: ['quality-master-list', 'quality-master-register'],
        flow: '품질기준 목록 → 검사항목 등록 → 판정기준 설정',
      },
      {
        id: 'master-customer',
        name: '거래처기준관리',
        screens: ['customer-master-list', 'customer-master-register'],
        flow: '거래처 목록 → 기본정보 등록 → 거래조건 설정',
      },
    ],
  },

  // 판매관리
  sales: {
    name: '판매관리',
    description: '판매 활동 전체 프로세스',
    flows: [
      {
        id: 'sales-quote',
        name: '견적관리',
        screens: ['quote-list', 'quote-register', 'quote-detail'],
        flow: '견적 목록 → 견적 등록 → 견적서 발송 → 수주 전환',
      },
      {
        id: 'sales-order',
        name: '수주관리',
        screens: ['order-list', 'order-register', 'order-detail'],
        flow: '수주 목록 → 수주 등록 → 수주 확정 → 작업지시',
      },
      {
        id: 'sales-shipment',
        name: '출하관리',
        screens: ['shipment-list', 'shipment-register', 'shipment-detail'],
        flow: '출하 목록 → 출하 등록 → 출하 확정 → 배송',
      },
      {
        id: 'sales-customer',
        name: '거래처관리',
        screens: ['customer-list', 'customer-register', 'customer-detail'],
        flow: '거래처 조회 → 신규 등록 → 정보 수정',
      },
    ],
  },

  // 생산관리
  production: {
    name: '생산관리',
    description: '생산 계획 및 실행 관리',
    flows: [
      {
        id: 'prod-dashboard',
        name: '생산 현황판',
        screens: ['production-dashboard'],
        flow: '실시간 현황 → 공정별 진행 → 지연 알림',
      },
      {
        id: 'prod-workorder',
        name: '작업지시 관리',
        screens: ['work-order-list', 'work-order-register', 'work-order-detail'],
        flow: '지시 목록 → 지시 발행 → 작업 배정 → 진행 관리',
      },
      {
        id: 'prod-result',
        name: '작업실적',
        screens: ['work-result-list', 'work-result-register'],
        flow: '실적 조회 → 실적 등록 → 완료 처리',
      },
      {
        id: 'prod-worker',
        name: '작업자 화면',
        screens: ['worker-task'],
        flow: '작업 확인 → 작업 시작 → 실적 입력 → 작업 완료',
      },
    ],
  },

  // 품질관리
  quality: {
    name: '품질관리',
    description: '품질검사 및 불량 관리',
    flows: [
      {
        id: 'qual-iqc',
        name: '수입검사(IQC)',
        screens: ['iqc-list', 'iqc-register'],
        flow: '입고 대기 → 검사 수행 → 합격/불합격 → 재고 반영',
      },
      {
        id: 'qual-pqc',
        name: '중간검사(PQC)',
        screens: ['pqc-list', 'pqc-register'],
        flow: '공정 완료 → 검사 수행 → 합격/재작업 → 다음 공정',
      },
      {
        id: 'qual-fqc',
        name: '제품검사(FQC)',
        screens: ['fqc-list', 'fqc-register'],
        flow: '출하 대기 → 검사 수행 → 합격/보류 → 출하 승인',
      },
      {
        id: 'qual-defect',
        name: '부적합품관리',
        screens: ['defect-list', 'defect-register', 'defect-detail'],
        flow: '불량 등록 → 원인 분석 → 처리 결정 → 재작업/폐기',
      },
    ],
  },

  // 자재관리
  inventory: {
    name: '자재관리',
    description: '재고 및 입출고 관리',
    flows: [
      {
        id: 'inv-stock',
        name: '재고현황',
        screens: ['stock-list', 'stock-detail'],
        flow: '재고 조회 → 상세 확인 → 이력 추적',
      },
      {
        id: 'inv-inbound',
        name: '입고관리',
        screens: ['inbound-list', 'inbound-register'],
        flow: '입고 예정 → 입고 등록 → 검사 연동 → 재고 반영',
      },
    ],
  },

  // 회계관리
  accounting: {
    name: '회계관리',
    description: '매출/매입/수금/원가 관리',
    flows: [
      {
        id: 'acc-customer',
        name: '거래처관리(신용등급)',
        screens: ['acc-customer-list', 'acc-customer-register', 'acc-customer-edit'],
        flow: '신용등급 조회 → 등급 발행 → 여신한도 관리',
      },
      {
        id: 'acc-sales',
        name: '매출관리',
        screens: ['sales-list', 'sales-statement', 'sales-tax-invoice'],
        flow: '매출 조회 → 거래명세서 → 세금계산서 발행',
      },
      {
        id: 'acc-purchase',
        name: '매입관리',
        screens: ['purchase-list', 'purchase-register', 'expense-list', 'expense-register'],
        flow: '품의서 작성 → 결재 → 지출결의 → 지출 처리',
      },
      {
        id: 'acc-cashbook',
        name: '금전출납부',
        screens: ['cashbook-list', 'cashbook-register', 'cashbook-edit'],
        flow: '내역 조회 → 수입/지출 등록 → 잔액 확인',
      },
      {
        id: 'acc-collection',
        name: '수금관리',
        screens: ['collection-list', 'collection-register', 'receivable-list', 'bill-list'],
        flow: '수금 현황 → 수금 등록 → 미수금 관리 → 어음 관리',
      },
      {
        id: 'acc-cost',
        name: '원가관리',
        screens: ['cost-list', 'cost-detail'],
        flow: '원가 조회 → 상세 분석 → 손익 확인',
      },
    ],
  },
};

// ============================================================
// 3. 화면별 플로우차트 정의 (각 화면에서 가능한 동작)
// ============================================================
export const screenFlows = {
  // 견적관리 화면
  'quote-list': {
    name: '견적 목록',
    actions: [
      { action: '신규 등록', next: 'quote-register', icon: 'Plus' },
      { action: '상세 조회', next: 'quote-detail', icon: 'Eye' },
      { action: '견적 복사', next: 'quote-register', icon: 'Copy' },
      { action: '수주 전환', next: 'order-register', icon: 'ArrowRight' },
      { action: '엑셀 다운로드', next: null, icon: 'Download' },
    ],
  },
  'quote-register': {
    name: '견적 등록',
    actions: [
      { action: '저장', next: 'quote-list', icon: 'Save' },
      { action: '저장 후 발송', next: 'quote-detail', icon: 'Send' },
      { action: '취소', next: 'quote-list', icon: 'X' },
    ],
  },
  'quote-detail': {
    name: '견적 상세',
    actions: [
      { action: '수정', next: 'quote-register', icon: 'Edit' },
      { action: '복사', next: 'quote-register', icon: 'Copy' },
      { action: '수주 전환', next: 'order-register', icon: 'ArrowRight' },
      { action: '견적서 출력', next: null, icon: 'Printer' },
      { action: '삭제', next: 'quote-list', icon: 'Trash2' },
    ],
  },

  // 수주관리 화면
  'order-list': {
    name: '수주 목록',
    actions: [
      { action: '신규 등록', next: 'order-register', icon: 'Plus' },
      { action: '상세 조회', next: 'order-detail', icon: 'Eye' },
      { action: '작업지시 생성', next: 'work-order-register', icon: 'ClipboardList' },
      { action: '출하 등록', next: 'shipment-register', icon: 'Truck' },
    ],
  },
  'order-register': {
    name: '수주 등록',
    actions: [
      { action: '저장', next: 'order-list', icon: 'Save' },
      { action: '저장 후 작업지시', next: 'work-order-register', icon: 'ClipboardList' },
      { action: '취소', next: 'order-list', icon: 'X' },
    ],
  },
  'order-detail': {
    name: '수주 상세',
    actions: [
      { action: '수정', next: 'order-register', icon: 'Edit' },
      { action: '작업지시 생성', next: 'work-order-register', icon: 'ClipboardList' },
      { action: '출하 등록', next: 'shipment-register', icon: 'Truck' },
      { action: '수주서 출력', next: null, icon: 'Printer' },
      { action: '원가 조회', next: 'cost-detail', icon: 'Calculator' },
    ],
  },

  // 출하관리 화면
  'shipment-list': {
    name: '출하 목록',
    actions: [
      { action: '신규 등록', next: 'shipment-register', icon: 'Plus' },
      { action: '상세 조회', next: 'shipment-detail', icon: 'Eye' },
      { action: '출하 확정', next: null, icon: 'CheckCircle' },
    ],
  },
  'shipment-register': {
    name: '출하 등록',
    actions: [
      { action: '저장', next: 'shipment-list', icon: 'Save' },
      { action: '제품검사 요청', next: 'fqc-register', icon: 'ShieldCheck' },
      { action: '취소', next: 'shipment-list', icon: 'X' },
    ],
  },

  // 작업지시 화면
  'work-order-list': {
    name: '작업지시 목록',
    actions: [
      { action: '신규 발행', next: 'work-order-register', icon: 'Plus' },
      { action: '상세 조회', next: 'work-order-detail', icon: 'Eye' },
      { action: '실적 조회', next: 'work-result-list', icon: 'ClipboardCheck' },
      { action: '현황판', next: 'production-dashboard', icon: 'BarChart3' },
    ],
  },
  'work-order-register': {
    name: '작업지시 등록',
    actions: [
      { action: '저장', next: 'work-order-list', icon: 'Save' },
      { action: '저장 후 배포', next: 'worker-task', icon: 'Send' },
      { action: '취소', next: 'work-order-list', icon: 'X' },
    ],
  },

  // 작업자 화면
  'worker-task': {
    name: '작업자 화면',
    actions: [
      { action: '작업 시작', next: null, icon: 'Play' },
      { action: '실적 등록', next: 'work-result-register', icon: 'Edit' },
      { action: '품질검사 요청', next: 'pqc-register', icon: 'ShieldCheck' },
      { action: '작업 완료', next: null, icon: 'CheckCircle' },
      { action: '불량 신고', next: 'defect-register', icon: 'AlertTriangle' },
    ],
  },

  // 회계 화면들
  'sales-list': {
    name: '매출 목록',
    actions: [
      { action: '상세 조회', next: 'sales-detail', icon: 'Eye' },
      { action: '거래명세서', next: 'sales-statement', icon: 'FileText' },
      { action: '세금계산서', next: 'sales-tax-invoice', icon: 'FileText' },
      { action: '수금 등록', next: 'collection-register', icon: 'DollarSign' },
    ],
  },
  'collection-list': {
    name: '수금 목록',
    actions: [
      { action: '신규 등록', next: 'collection-register', icon: 'Plus' },
      { action: '미수금 관리', next: 'receivable-list', icon: 'AlertCircle' },
      { action: '어음 관리', next: 'bill-list', icon: 'CreditCard' },
      { action: '출납 기록', next: 'cashbook-register', icon: 'Book' },
    ],
  },
};

// ============================================================
// 4. 카테고리 정의
// ============================================================
export const flowCategories = [
  { id: 'sales', name: '판매', icon: 'DollarSign', color: 'gray' },
  { id: 'production', name: '생산', icon: 'Factory', color: 'gray' },
  { id: 'quality', name: '품질', icon: 'ShieldCheck', color: 'gray' },
  { id: 'accounting', name: '회계', icon: 'CreditCard', color: 'gray' },
  { id: 'inventory', name: '자재', icon: 'Box', color: 'gray' },
];

// ============================================================
// 5. 전체 화면 목록 (시작/끝 선택용)
// ============================================================
export const allScreens = [
  // 판매관리
  { id: 'quote-list', name: '견적 목록', menu: '판매관리', group: 'sales' },
  { id: 'quote-register', name: '견적 등록', menu: '판매관리', group: 'sales' },
  { id: 'quote-detail', name: '견적 상세', menu: '판매관리', group: 'sales' },
  { id: 'order-list', name: '수주 목록', menu: '판매관리', group: 'sales' },
  { id: 'order-register', name: '수주 등록', menu: '판매관리', group: 'sales' },
  { id: 'order-detail', name: '수주 상세', menu: '판매관리', group: 'sales' },
  { id: 'shipment-list', name: '출하 목록', menu: '판매관리', group: 'sales' },
  { id: 'shipment-register', name: '출하 등록', menu: '판매관리', group: 'sales' },
  { id: 'shipment-detail', name: '출하 상세', menu: '판매관리', group: 'sales' },
  { id: 'customer-list', name: '거래처 목록', menu: '판매관리', group: 'sales' },
  { id: 'customer-register', name: '거래처 등록', menu: '판매관리', group: 'sales' },
  { id: 'site-list', name: '현장 목록', menu: '판매관리', group: 'sales' },
  { id: 'site-register', name: '현장 등록', menu: '판매관리', group: 'sales' },
  { id: 'site-detail', name: '현장 상세', menu: '판매관리', group: 'sales' },
  // 생산관리
  { id: 'production-dashboard', name: '생산 현황판', menu: '생산관리', group: 'production' },
  { id: 'work-order-list', name: '작업지시 목록', menu: '생산관리', group: 'production' },
  { id: 'work-order-register', name: '작업지시 등록', menu: '생산관리', group: 'production' },
  { id: 'work-order-detail', name: '작업지시 상세', menu: '생산관리', group: 'production' },
  { id: 'work-result-list', name: '작업실적 목록', menu: '생산관리', group: 'production' },
  { id: 'work-result-register', name: '작업실적 등록', menu: '생산관리', group: 'production' },
  { id: 'worker-task', name: '작업자 화면', menu: '생산관리', group: 'production' },
  // 품질관리
  { id: 'iqc-list', name: '수입검사(IQC) 목록', menu: '품질관리', group: 'quality' },
  { id: 'iqc-register', name: '수입검사(IQC) 등록', menu: '품질관리', group: 'quality' },
  { id: 'pqc-list', name: '중간검사(PQC) 목록', menu: '품질관리', group: 'quality' },
  { id: 'pqc-register', name: '중간검사(PQC) 등록', menu: '품질관리', group: 'quality' },
  { id: 'fqc-list', name: '제품검사(FQC) 목록', menu: '품질관리', group: 'quality' },
  { id: 'fqc-register', name: '제품검사(FQC) 등록', menu: '품질관리', group: 'quality' },
  { id: 'defect-list', name: '부적합품 목록', menu: '품질관리', group: 'quality' },
  { id: 'defect-register', name: '부적합품 등록', menu: '품질관리', group: 'quality' },
  // 자재관리
  { id: 'stock-list', name: '재고현황', menu: '자재관리', group: 'inventory' },
  { id: 'inbound-list', name: '입고 목록', menu: '자재관리', group: 'inventory' },
  { id: 'inbound-register', name: '입고 등록', menu: '자재관리', group: 'inventory' },
  // 회계관리
  { id: 'acc-customer-list', name: '거래처(신용등급) 목록', menu: '회계관리', group: 'accounting' },
  { id: 'acc-customer-register', name: '거래처(신용등급) 등록', menu: '회계관리', group: 'accounting' },
  { id: 'sales-list', name: '매출 목록', menu: '회계관리', group: 'accounting' },
  { id: 'sales-statement', name: '거래명세서', menu: '회계관리', group: 'accounting' },
  { id: 'sales-tax-invoice', name: '세금계산서', menu: '회계관리', group: 'accounting' },
  { id: 'purchase-list', name: '품의서 목록', menu: '회계관리', group: 'accounting' },
  { id: 'purchase-register', name: '품의서 등록', menu: '회계관리', group: 'accounting' },
  { id: 'expense-list', name: '지출결의서 목록', menu: '회계관리', group: 'accounting' },
  { id: 'expense-register', name: '지출결의서 등록', menu: '회계관리', group: 'accounting' },
  { id: 'cashbook-list', name: '금전출납부 목록', menu: '회계관리', group: 'accounting' },
  { id: 'cashbook-register', name: '금전출납부 등록', menu: '회계관리', group: 'accounting' },
  { id: 'collection-list', name: '수금 목록', menu: '회계관리', group: 'accounting' },
  { id: 'collection-register', name: '수금 등록', menu: '회계관리', group: 'accounting' },
  { id: 'receivable-list', name: '미수금 목록', menu: '회계관리', group: 'accounting' },
  { id: 'bill-list', name: '어음 목록', menu: '회계관리', group: 'accounting' },
  { id: 'cost-list', name: '원가 목록', menu: '회계관리', group: 'accounting' },
  { id: 'cost-detail', name: '원가 상세', menu: '회계관리', group: 'accounting' },
];

// ============================================================
// 6. 헬퍼 함수들
// ============================================================

// 카테고리별 흐름 가져오기
export const getFlowsByCategory = (categoryId) => {
  return mainUserFlows.filter(flow => flow.category === categoryId);
};

// 화면 ID로 관련 흐름 찾기
export const getFlowsContainingScreen = (screenId) => {
  return mainUserFlows.filter(flow =>
    flow.steps.some(step => step.screen === screenId)
  );
};

// 메뉴별 흐름 가져오기
export const getMenuFlow = (menuId) => {
  return menuFlows[menuId] || null;
};

// 화면별 액션 가져오기
export const getScreenActions = (screenId) => {
  return screenFlows[screenId] || null;
};

// 시작-끝 화면으로 경로 찾기
export const findFlowPath = (startScreen, endScreen) => {
  const paths = [];

  // 모든 플로우에서 시작-끝 포함된 경로 찾기
  mainUserFlows.forEach(flow => {
    const startIdx = flow.steps.findIndex(s => s.screen === startScreen);
    const endIdx = flow.steps.findIndex(s => s.screen === endScreen);

    if (startIdx !== -1 && endIdx !== -1 && startIdx <= endIdx) {
      paths.push({
        flowId: flow.id,
        flowName: flow.name,
        category: flow.category,
        steps: flow.steps.slice(startIdx, endIdx + 1),
        branches: flow.branches?.filter(b => {
          const stepIds = flow.steps.slice(startIdx, endIdx + 1).map(s => s.id);
          return stepIds.includes(b.from);
        }) || [],
      });
    }
  });

  return paths;
};

// 그룹별 화면 목록 가져오기
export const getScreensByGroup = (groupId) => {
  return allScreens.filter(s => s.group === groupId);
};

// ============================================================
// 7. 담당부서별 유저플로우 정의 (UI 기능단위 + Y/N 분기)
// 부서: 판매 / 생산 / 품질 / 자재 / 출고 / 회계
// ============================================================
export const departmentFlows = {
  // 판매
  sales: {
    id: 'dept-sales',
    name: '판매',
    description: '거래처/현장/견적/수주 관리 - 데이터 흐름: 거래처→현장→견적→수주',
    icon: 'Briefcase',
    scenarios: [
      {
        id: 'sales-1',
        name: '거래처 등록',
        description: '신규 거래처 등록 (모든 거래의 시작점)',
        dataFlow: '거래처코드(CUS-###) 생성 → 견적/수주/매출에서 참조',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '판매관리 > 거래처관리', ui: 'menu-click', menu: '판매관리 > 거래처관리' },
          { id: 's3', type: 'screen', label: '거래처 목록', ui: 'customer-list', desc: '거래처 전체 목록 조회' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 거래처 등록' },
          { id: 's5', type: 'screen', label: '거래처 등록 화면', ui: 'customer-register' },
          { id: 's6', type: 'action', label: '기본정보 입력', ui: 'Input: 거래처명, 사업자번호, 대표자, 연락처, 주소', required: true },
          { id: 's7', type: 'action', label: '거래조건 입력', ui: 'Input: 결제조건, 여신한도, 담당자' },
          { id: 's8', type: 'action', label: '저장', ui: 'Button: 저장 → 거래처코드(CUS-###) 자동생성', required: true },
          { id: 's9', type: 'end', label: '완료', ui: null, output: '거래처코드 → 현장/견적/수주에서 사용' },
        ],
        branches: [],
      },
      {
        id: 'sales-2',
        name: '현장 등록',
        description: '거래처 소속 현장 등록',
        dataFlow: '거래처코드 참조 → 현장코드(S-###) 생성 → 견적/수주에서 참조',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '판매관리 > 현장관리', ui: 'menu-click', menu: '판매관리 > 현장관리' },
          { id: 's3', type: 'screen', label: '현장 목록', ui: 'site-list', desc: '현장 전체 목록 조회' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 현장 등록' },
          { id: 's5', type: 'screen', label: '현장 등록 화면', ui: 'site-register' },
          { id: 's6', type: 'action', label: '거래처 선택', ui: 'Modal: 거래처 검색 → 거래처코드 연결', required: true, dataLink: '거래처코드' },
          { id: 's7', type: 'action', label: '현장정보 입력', ui: 'Input: 현장명, 현장주소, 현장담당자, 연락처', required: true },
          { id: 's8', type: 'action', label: '시공정보 입력', ui: 'Input: 착공예정일, 준공예정일, 공사내용' },
          { id: 's9', type: 'action', label: '저장', ui: 'Button: 저장 → 현장코드(S-###) 자동생성', required: true },
          { id: 's10', type: 'end', label: '완료', ui: null, output: '현장코드 → 견적/수주에서 사용' },
        ],
        branches: [],
      },
      {
        id: 'sales-3',
        name: '견적 등록 → 수주 전환',
        description: '견적서 작성부터 수주 확정까지',
        dataFlow: '거래처코드+현장코드 참조 → 견적번호(QT-YYMMDD-##) 생성 → 수주번호(SO-YYMMDD-##)로 전환',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '판매관리 > 견적관리', ui: 'menu-click', menu: '판매관리 > 견적관리' },
          { id: 's3', type: 'screen', label: '견적 목록', ui: 'quote-list', desc: '견적 전체 목록 조회' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 견적 등록' },
          { id: 's5', type: 'screen', label: '견적 등록 화면', ui: 'quote-register' },
          { id: 's6', type: 'action', label: '거래처 선택', ui: 'Modal: 거래처 검색 → 거래처코드 연결', required: true, dataLink: '거래처코드' },
          { id: 's7', type: 'action', label: '현장 선택', ui: 'Modal: 현장 검색 (해당 거래처) → 현장코드 연결', required: true, dataLink: '현장코드' },
          { id: 's8', type: 'action', label: '품목 추가', ui: 'Modal: 품목 검색 → 품목코드, 수량, 단가 입력', required: true, dataLink: '품목코드' },
          { id: 's9', type: 'action', label: '견적 저장', ui: 'Button: 저장 → 견적번호(QT-YYMMDD-##) 자동생성', required: true },
          { id: 's10', type: 'action', label: '견적서 출력', ui: 'Button: 견적서 출력/이메일 발송' },
          { id: 's11', type: 'decision', label: '고객 승인?', options: ['승인', '수정', '거절'] },
          { id: 's12', type: 'action', label: '수주 전환', ui: 'Button: 수주전환 클릭', condition: '승인' },
          { id: 's13', type: 'screen', label: '수주 등록 화면', ui: 'order-register', desc: '견적 데이터 자동 복사' },
          { id: 's14', type: 'action', label: '납기일/배송정보 입력', ui: 'Input: 납기요청일, 배송지, 특이사항', required: true },
          { id: 's15', type: 'action', label: '수주 확정', ui: 'Button: 저장 → 수주번호(SO-YYMMDD-##) 생성, 상태=확정', required: true },
          { id: 's16', type: 'end', label: '완료', ui: null, output: '수주번호 → 작업지시/출하/매출에서 참조' },
        ],
        branches: [
          { from: 's11', to: 's12', condition: '승인' },
          { from: 's11', to: 's5', condition: '수정' },
          { from: 's11', to: 's16', condition: '거절' },
        ],
      },
      {
        id: 'sales-4',
        name: '수주 조회 및 진행',
        description: '수주 현황 확인 및 후속 작업 진행',
        dataFlow: '수주번호로 작업지시/출하/매출 연동 상태 확인',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '판매관리 > 수주관리', ui: 'menu-click', menu: '판매관리 > 수주관리' },
          { id: 's3', type: 'screen', label: '수주 목록', ui: 'order-list', desc: '수주 전체 목록 조회' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 기간, 거래처, 현장, 상태(확정/생산중/출하완료)' },
          { id: 's5', type: 'action', label: '수주 선택', ui: 'Table: 행 클릭' },
          { id: 's6', type: 'screen', label: '수주 상세 화면', ui: 'order-detail', desc: '수주정보 + 작업지시현황 + 출하현황 표시' },
          { id: 's7', type: 'decision', label: '후속 작업?', options: ['작업지시', '출하요청', '조회만'] },
          { id: 's8', type: 'action', label: '작업지시 생성', ui: 'Button: 작업지시 → 수주번호 연결하여 WO 생성', condition: '작업지시', dataLink: '수주번호→작업지시' },
          { id: 's9', type: 'action', label: '출하 등록', ui: 'Button: 출하등록 → 수주번호 연결하여 SL 생성', condition: '출하요청', dataLink: '수주번호→출하' },
          { id: 's10', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's7', to: 's8', condition: '작업지시' },
          { from: 's7', to: 's9', condition: '출하요청' },
          { from: 's7', to: 's10', condition: '조회만' },
        ],
      },
    ],
  },

  // 생산
  production: {
    id: 'dept-production',
    name: '생산',
    description: '작업지시/작업실적/생산현황 관리 - 데이터 흐름: 수주→작업지시→실적→품질검사',
    icon: 'Factory',
    scenarios: [
      {
        id: 'production-1',
        name: '작업지시 등록',
        description: '수주 기반 작업지시서 발행',
        dataFlow: '수주번호 참조 → 작업지시번호(WO-YYMMDD-##) 생성 → 작업실적에서 참조',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '생산관리 > 작업지시관리', ui: 'menu-click', menu: '생산관리 > 작업지시관리' },
          { id: 's3', type: 'screen', label: '작업지시 목록', ui: 'work-order-list', desc: '작업지시 전체 목록 조회' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 작업지시 등록' },
          { id: 's5', type: 'screen', label: '작업지시 등록 화면', ui: 'work-order-register' },
          { id: 's6', type: 'action', label: '수주 선택', ui: 'Modal: 수주 검색 → 수주번호, 품목정보 자동 연결', required: true, dataLink: '수주번호' },
          { id: 's7', type: 'decision', label: '공정 유형?', options: ['스크린', '슬랫', '절곡', '포장'] },
          { id: 's8', type: 'action', label: '공정정보 입력', ui: 'Input: 공정, 작업예정일, 목표수량', required: true },
          { id: 's9', type: 'action', label: '담당자 배정', ui: 'Select: 작업자 선택' },
          { id: 's10', type: 'action', label: '저장', ui: 'Button: 저장 → 작업지시번호(WO-YYMMDD-##) 자동생성', required: true },
          { id: 's11', type: 'action', label: '작업지시서 출력', ui: 'Button: 작업지시서 출력' },
          { id: 's12', type: 'end', label: '완료', ui: null, output: '작업지시번호 → 작업실적/품질검사에서 참조' },
        ],
        branches: [],
      },
      {
        id: 'production-2',
        name: '작업실적 등록',
        description: '작업자 실적 입력 및 완료 처리',
        dataFlow: '작업지시번호 참조 → 실적수량/불량수량 기록 → 품질검사 요청',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '생산관리 > 작업실적', ui: 'menu-click', menu: '생산관리 > 작업실적' },
          { id: 's3', type: 'screen', label: '작업실적 목록', ui: 'work-result-list', desc: '작업실적 전체 목록 조회' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 실적 등록' },
          { id: 's5', type: 'screen', label: '작업실적 등록 화면', ui: 'work-result-register' },
          { id: 's6', type: 'action', label: '작업지시 선택', ui: 'Modal: 작업지시 검색 → 작업지시번호 연결', required: true, dataLink: '작업지시번호' },
          { id: 's7', type: 'action', label: '실적정보 입력', ui: 'Input: 생산수량, 불량수량, 작업시간', required: true },
          { id: 's8', type: 'decision', label: '불량 발생?', options: ['Y', 'N'] },
          { id: 's9', type: 'action', label: '불량 내역 입력', ui: 'Input: 불량유형, 불량원인', condition: 'Y' },
          { id: 's10', type: 'action', label: '저장', ui: 'Button: 저장 → 작업지시 진행률 업데이트', required: true },
          { id: 's11', type: 'decision', label: 'PQC 필요?', options: ['Y', 'N'] },
          { id: 's12', type: 'action', label: 'PQC 요청', ui: 'Button: 품질검사 요청 → 품질관리로 전달', condition: 'Y', dataLink: '작업지시번호→PQC' },
          { id: 's13', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: 'Y' },
          { from: 's8', to: 's10', condition: 'N' },
          { from: 's11', to: 's12', condition: 'Y' },
          { from: 's11', to: 's13', condition: 'N' },
        ],
      },
      {
        id: 'production-3',
        name: '작업자 화면 (터치스크린)',
        description: '현장 작업자용 간소화 화면',
        dataFlow: '작업지시번호로 작업 확인 → 실시간 실적 입력',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '생산관리 > 작업자화면', ui: 'menu-click', menu: '생산관리 > 작업자화면' },
          { id: 's3', type: 'screen', label: '작업자 화면', ui: 'worker-task', desc: '오늘 할당된 작업지시 목록' },
          { id: 's4', type: 'action', label: '작업 선택', ui: 'Card: 작업지시 선택 (큰 터치버튼)' },
          { id: 's5', type: 'action', label: '작업 시작', ui: 'Button: 작업시작 → 시작시간 자동기록' },
          { id: 's6', type: 'action', label: '작업 진행', ui: '화면상태: 작업중 표시' },
          { id: 's7', type: 'decision', label: '작업 완료?', options: ['완료', '일시정지', '불량신고'] },
          { id: 's8', type: 'action', label: '완료 처리', ui: 'Button: 작업완료 → 수량입력 모달', condition: '완료' },
          { id: 's9', type: 'action', label: '일시정지', ui: 'Button: 일시정지 → 사유입력', condition: '일시정지' },
          { id: 's10', type: 'action', label: '불량신고', ui: 'Button: 불량신고 → 불량유형/수량 입력', condition: '불량신고' },
          { id: 's11', type: 'action', label: '실적 저장', ui: '자동: 실적 테이블에 저장', required: true },
          { id: 's12', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's7', to: 's8', condition: '완료' },
          { from: 's7', to: 's9', condition: '일시정지' },
          { from: 's7', to: 's10', condition: '불량신고' },
        ],
      },
      {
        id: 'production-4',
        name: '생산 현황판 조회',
        description: '실시간 생산 현황 모니터링',
        dataFlow: '작업지시/실적 데이터 집계 → 공정별/일자별 현황 표시',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '생산관리 > 생산현황판', ui: 'menu-click', menu: '생산관리 > 생산현황판' },
          { id: 's3', type: 'screen', label: '생산 현황판', ui: 'production-dashboard', desc: '공정별 진행현황, 지연건, 완료율 표시' },
          { id: 's4', type: 'action', label: '현황 확인', ui: 'Chart: 공정별 진행률, 일별 생산량' },
          { id: 's5', type: 'decision', label: '지연건 존재?', options: ['Y', 'N'] },
          { id: 's6', type: 'action', label: '지연건 클릭', ui: 'Link: 해당 작업지시 상세로 이동', condition: 'Y' },
          { id: 's7', type: 'screen', label: '작업지시 상세', ui: 'work-order-detail', condition: 'Y' },
          { id: 's8', type: 'action', label: '우선순위/일정 조정', ui: 'Edit: 우선순위, 예정일 수정' },
          { id: 's9', type: 'action', label: '저장', ui: 'Button: 저장', required: true },
          { id: 's10', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's5', to: 's6', condition: 'Y' },
          { from: 's5', to: 's10', condition: 'N' },
        ],
      },
    ],
  },

  // 품질
  quality: {
    id: 'dept-quality',
    name: '품질',
    description: 'IQC/PQC/FQC 검사, 부적합품 관리 - 데이터 흐름: 입고→IQC, 작업실적→PQC, 출하→FQC',
    icon: 'ShieldCheck',
    scenarios: [
      {
        id: 'quality-1',
        name: '수입검사(IQC)',
        description: '자재 입고 시 품질검사',
        dataFlow: '입고번호+LOT번호 참조 → IQC 검사번호(IQC-YYMMDD-##) 생성 → 합격시 재고 반영',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '품질관리 > 수입검사(IQC)', ui: 'menu-click', menu: '품질관리 > 수입검사(IQC)' },
          { id: 's3', type: 'screen', label: '수입검사 목록', ui: 'iqc-list', desc: 'IQC 전체 목록 (검사대기/합격/불합격)' },
          { id: 's4', type: 'action', label: '검사대기 건 선택', ui: 'Table: 상태=검사대기 필터, 행 클릭' },
          { id: 's5', type: 'screen', label: '수입검사 등록 화면', ui: 'iqc-register', desc: '입고정보 자동표시 (LOT번호, 품목, 수량)' },
          { id: 's6', type: 'action', label: '품질기준 불러오기', ui: 'Button: 품질기준 조회 → 해당 품목 검사항목 로드', dataLink: '품목코드→품질기준' },
          { id: 's7', type: 'action', label: '검사항목별 측정', ui: 'Input: 각 항목별 측정값 입력 (치수, 외관, 성능)', required: true },
          { id: 's8', type: 'decision', label: '합격 여부?', options: ['합격', '불합격'] },
          { id: 's9', type: 'action', label: '합격 처리', ui: 'Button: 합격 → 재고 반영, 상태=합격', condition: '합격', dataLink: 'IQC합격→재고증가' },
          { id: 's10', type: 'decision', label: '불합격 처리?', options: ['반품', '특채', '폐기'], condition: '불합격' },
          { id: 's11', type: 'action', label: '반품 처리', ui: 'Button: 반품 → 공급업체 통보', condition: '반품' },
          { id: 's12', type: 'action', label: '특채 처리', ui: 'Button: 특채 → 조건부 입고 (승인 필요)', condition: '특채' },
          { id: 's13', type: 'action', label: '폐기 처리', ui: 'Button: 폐기 → 폐기 기록', condition: '폐기' },
          { id: 's14', type: 'action', label: '저장', ui: 'Button: 저장 → IQC번호(IQC-YYMMDD-##) 생성', required: true },
          { id: 's15', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: '합격' },
          { from: 's8', to: 's10', condition: '불합격' },
          { from: 's10', to: 's11', condition: '반품' },
          { from: 's10', to: 's12', condition: '특채' },
          { from: 's10', to: 's13', condition: '폐기' },
        ],
      },
      {
        id: 'quality-2',
        name: '중간검사(PQC)',
        description: '공정 중 품질검사',
        dataFlow: '작업지시번호 참조 → PQC 검사번호(PQC-YYMMDD-##) 생성 → 합격시 다음공정 진행',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '품질관리 > 중간검사(PQC)', ui: 'menu-click', menu: '품질관리 > 중간검사(PQC)' },
          { id: 's3', type: 'screen', label: '중간검사 목록', ui: 'pqc-list', desc: 'PQC 전체 목록 (검사요청/합격/불합격)' },
          { id: 's4', type: 'action', label: '검사요청 건 선택', ui: 'Table: 상태=검사요청 필터, 행 클릭' },
          { id: 's5', type: 'screen', label: '중간검사 등록 화면', ui: 'pqc-register', desc: '작업지시정보 자동표시 (공정, 품목, 수량)' },
          { id: 's6', type: 'action', label: '작업지시 확인', ui: 'Display: 작업지시번호, 공정, 생산수량 표시', dataLink: '작업지시번호' },
          { id: 's7', type: 'action', label: '검사항목별 측정', ui: 'Input: 검사항목별 결과 입력', required: true },
          { id: 's8', type: 'decision', label: '합격 여부?', options: ['합격', '불합격'] },
          { id: 's9', type: 'action', label: '합격 처리', ui: 'Button: 합격 → 다음 공정 진행 가능', condition: '합격', dataLink: 'PQC합격→공정진행' },
          { id: 's10', type: 'decision', label: '불합격 처리?', options: ['재작업', '폐기'], condition: '불합격' },
          { id: 's11', type: 'action', label: '재작업 지시', ui: 'Button: 재작업 → 작업지시 생성', condition: '재작업', dataLink: '재작업→작업지시' },
          { id: 's12', type: 'action', label: '폐기/부적합품 등록', ui: 'Button: 폐기 → 부적합품 등록', condition: '폐기', dataLink: '불합격→부적합품' },
          { id: 's13', type: 'action', label: '저장', ui: 'Button: 저장 → PQC번호(PQC-YYMMDD-##) 생성', required: true },
          { id: 's14', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: '합격' },
          { from: 's8', to: 's10', condition: '불합격' },
          { from: 's10', to: 's11', condition: '재작업' },
          { from: 's10', to: 's12', condition: '폐기' },
        ],
      },
      {
        id: 'quality-3',
        name: '제품검사(FQC)',
        description: '출하 전 최종 품질검사',
        dataFlow: '출하번호+수주번호 참조 → FQC 검사번호(FQC-YYMMDD-##) 생성 → 합격시 출하 승인',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '품질관리 > 제품검사(FQC)', ui: 'menu-click', menu: '품질관리 > 제품검사(FQC)' },
          { id: 's3', type: 'screen', label: '제품검사 목록', ui: 'fqc-list', desc: 'FQC 전체 목록 (검사요청/합격/불합격)' },
          { id: 's4', type: 'action', label: '검사요청 건 선택', ui: 'Table: 상태=검사요청 필터, 행 클릭' },
          { id: 's5', type: 'screen', label: '제품검사 등록 화면', ui: 'fqc-register', desc: '출하정보 자동표시 (수주번호, 품목, 수량)' },
          { id: 's6', type: 'action', label: '출하/수주 확인', ui: 'Display: 출하번호, 수주번호, 거래처, 품목 표시', dataLink: '출하번호+수주번호' },
          { id: 's7', type: 'action', label: '외관검사', ui: 'Checkbox: 외관검사 항목 체크', required: true },
          { id: 's8', type: 'action', label: '치수검사', ui: 'Input: 치수 측정값 입력', required: true },
          { id: 's9', type: 'action', label: '기능검사', ui: 'Checkbox: 작동 테스트 항목 체크', required: true },
          { id: 's10', type: 'decision', label: '최종 판정?', options: ['합격', '조건부합격', '불합격'] },
          { id: 's11', type: 'action', label: '합격 처리', ui: 'Button: 합격 → 출하 승인, 상태=출하가능', condition: '합격', dataLink: 'FQC합격→출하승인' },
          { id: 's12', type: 'action', label: '조건부 합격', ui: 'Button: 조건부 → 고객 협의 필요', condition: '조건부합격' },
          { id: 's13', type: 'action', label: '불합격/출하보류', ui: 'Button: 불합격 → 출하보류, 재작업 필요', condition: '불합격', dataLink: '불합격→출하보류' },
          { id: 's14', type: 'action', label: '검사성적서 출력', ui: 'Button: 검사성적서 출력' },
          { id: 's15', type: 'action', label: '저장', ui: 'Button: 저장 → FQC번호(FQC-YYMMDD-##) 생성', required: true },
          { id: 's16', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's10', to: 's11', condition: '합격' },
          { from: 's10', to: 's12', condition: '조건부합격' },
          { from: 's10', to: 's13', condition: '불합격' },
        ],
      },
      {
        id: 'quality-4',
        name: '부적합품 관리',
        description: '불량 원인 분석 및 처리',
        dataFlow: '부적합품번호(NCR-YYMMDD-##) 생성 → 원인분석 → 처리결과 기록',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '품질관리 > 부적합품관리', ui: 'menu-click', menu: '품질관리 > 부적합품관리' },
          { id: 's3', type: 'screen', label: '부적합품 목록', ui: 'defect-list', desc: '부적합품 전체 목록 (미처리/처리중/완료)' },
          { id: 's4', type: 'action', label: '미처리 건 선택', ui: 'Table: 상태=미처리 필터, 행 클릭' },
          { id: 's5', type: 'screen', label: '부적합품 상세 화면', ui: 'defect-detail', desc: '불량 발생 정보 표시' },
          { id: 's6', type: 'action', label: '원인 분석', ui: 'Textarea: 불량 원인 상세 입력', required: true },
          { id: 's7', type: 'action', label: '책임 구분', ui: 'Select: 공정불량/자재불량/설계불량/외주불량' },
          { id: 's8', type: 'decision', label: '처리 방법?', options: ['재작업', '폐기', '특채'] },
          { id: 's9', type: 'action', label: '재작업 지시', ui: 'Button: 재작업 → 작업지시 생성', condition: '재작업', dataLink: '부적합품→재작업지시' },
          { id: 's10', type: 'action', label: '폐기 처리', ui: 'Button: 폐기 → 폐기수량 기록, 재고 차감', condition: '폐기' },
          { id: 's11', type: 'action', label: '특채 사용', ui: 'Button: 특채 → 승인자 결재 필요', condition: '특채' },
          { id: 's12', type: 'action', label: '시정조치 등록', ui: 'Textarea: 재발방지 대책 입력' },
          { id: 's13', type: 'action', label: '저장', ui: 'Button: 저장 → 상태 업데이트', required: true },
          { id: 's14', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: '재작업' },
          { from: 's8', to: 's10', condition: '폐기' },
          { from: 's8', to: 's11', condition: '특채' },
        ],
      },
    ],
  },

  // 자재
  materials: {
    id: 'dept-materials',
    name: '자재',
    description: '입고/재고/발주 관리 - 데이터 흐름: 발주→입고→IQC→재고, 작업지시→자재출고',
    icon: 'Package',
    scenarios: [
      {
        id: 'materials-1',
        name: '자재 입고 등록',
        description: '발주 자재 입고 및 IQC 연동',
        dataFlow: '발주번호(PO-YYMMDD-##) 참조 → 입고번호 생성 → LOT번호(LOT-YYYYMMDD-###) 부여 → IQC 연동',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '자재관리 > 입고관리', ui: 'menu-click', menu: '자재관리 > 입고관리' },
          { id: 's3', type: 'screen', label: '입고 목록', ui: 'inbound-list', desc: '입고 전체 목록 (입고예정/입고완료/IQC대기)' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 입고 등록' },
          { id: 's5', type: 'screen', label: '입고 등록 화면', ui: 'inbound-register' },
          { id: 's6', type: 'action', label: '발주서 선택', ui: 'Modal: 발주서 검색 → 발주번호, 품목정보 자동 연결', required: true, dataLink: '발주번호' },
          { id: 's7', type: 'action', label: '입고정보 입력', ui: 'Input: 입고수량, 입고일, 창고위치', required: true },
          { id: 's8', type: 'action', label: 'LOT번호 생성', ui: 'Auto: LOT번호(LOT-YYYYMMDD-###) 자동생성', dataLink: 'LOT번호 생성' },
          { id: 's9', type: 'decision', label: 'IQC 대상?', options: ['Y', 'N'] },
          { id: 's10', type: 'action', label: 'IQC 요청', ui: 'Button: 품질검사 요청 → 품질관리로 전달, 상태=IQC대기', condition: 'Y', dataLink: '입고번호+LOT번호→IQC' },
          { id: 's11', type: 'action', label: '바로 입고확정', ui: 'Button: 입고확정 → 재고 즉시 반영', condition: 'N', dataLink: '입고→재고증가' },
          { id: 's12', type: 'action', label: '저장', ui: 'Button: 저장 → 입고번호 자동생성', required: true },
          { id: 's13', type: 'end', label: '완료', ui: null, output: 'LOT번호 → 재고추적/생산투입에서 참조' },
        ],
        branches: [
          { from: 's9', to: 's10', condition: 'Y' },
          { from: 's9', to: 's11', condition: 'N' },
        ],
      },
      {
        id: 'materials-2',
        name: '재고현황 조회',
        description: '품목별/창고별 재고 현황 확인',
        dataFlow: '품목코드별 현재고/가용재고/안전재고 조회 → LOT별 추적',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '자재관리 > 재고현황', ui: 'menu-click', menu: '자재관리 > 재고현황' },
          { id: 's3', type: 'screen', label: '재고현황 목록', ui: 'stock-list', desc: '품목별 현재고, 가용재고, 안전재고 표시' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 품목분류, 창고, 재고상태(정상/부족/과잉)' },
          { id: 's5', type: 'action', label: '품목 선택', ui: 'Table: 행 클릭' },
          { id: 's6', type: 'screen', label: '재고 상세 화면', ui: 'stock-detail', desc: '입출고이력, LOT별 수량, 위치정보 표시' },
          { id: 's7', type: 'action', label: 'LOT별 현황 확인', ui: 'Tab: LOT별 재고 → LOT번호, 입고일, 잔여수량', dataLink: 'LOT번호별 추적' },
          { id: 's8', type: 'decision', label: '재고 부족?', options: ['Y', 'N'] },
          { id: 's9', type: 'action', label: '발주 요청', ui: 'Button: 발주요청 → 구매 담당자 알림', condition: 'Y', dataLink: '품목코드→발주요청' },
          { id: 's10', type: 'action', label: '입출고이력 출력', ui: 'Button: 이력 출력' },
          { id: 's11', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: 'Y' },
          { from: 's8', to: 's10', condition: 'N' },
        ],
      },
      {
        id: 'materials-3',
        name: '생산용 자재 출고',
        description: '작업지시 기반 자재 출고 처리',
        dataFlow: '작업지시번호 참조 → 소요자재 확인 → LOT 지정 출고 → 재고 차감',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '자재관리 > 재고현황', ui: 'menu-click', menu: '자재관리 > 재고현황' },
          { id: 's3', type: 'screen', label: '재고현황 목록', ui: 'stock-list', desc: '품목별 가용재고 확인' },
          { id: 's4', type: 'action', label: '출고 버튼 클릭', ui: 'Button: 자재 출고' },
          { id: 's5', type: 'screen', label: '자재출고 화면', ui: 'stock-issue' },
          { id: 's6', type: 'action', label: '작업지시 선택', ui: 'Modal: 작업지시 검색 → 소요자재 목록 자동 로드', required: true, dataLink: '작업지시번호' },
          { id: 's7', type: 'action', label: '소요자재 확인', ui: 'Table: 품목, 필요수량, 현재고, 가용재고 표시' },
          { id: 's8', type: 'decision', label: '재고 충분?', options: ['Y', 'N'] },
          { id: 's9', type: 'action', label: 'LOT 선택 출고', ui: 'Select: LOT 지정 (선입선출 추천) → 출고수량 입력', condition: 'Y', dataLink: 'LOT번호→출고' },
          { id: 's10', type: 'action', label: '부족 대응', ui: 'Modal: 대체품목 검색 / 긴급발주 요청', condition: 'N' },
          { id: 's11', type: 'decision', label: '대체품 사용?', options: ['Y', 'N'], condition: 'N' },
          { id: 's12', type: 'action', label: '대체품 출고', ui: 'Select: 대체품목 LOT 선택 → 출고', condition: 'Y' },
          { id: 's13', type: 'action', label: '긴급발주 요청', ui: 'Button: 긴급발주 → 구매로 전달', condition: 'N', dataLink: '품목코드→긴급발주' },
          { id: 's14', type: 'action', label: '출고 확정', ui: 'Button: 출고확정 → 재고 차감, 작업지시에 투입기록', required: true, dataLink: '출고→재고감소+작업지시투입' },
          { id: 's15', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: 'Y' },
          { from: 's8', to: 's10', condition: 'N' },
          { from: 's11', to: 's12', condition: 'Y' },
          { from: 's11', to: 's13', condition: 'N' },
        ],
      },
      {
        id: 'materials-4',
        name: '재고 실사 및 조정',
        description: '정기 재고 실사 수행 및 재고 조정',
        dataFlow: '장부재고 vs 실제재고 비교 → 차이 분석 → 재고 조정 기록',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '자재관리 > 재고현황', ui: 'menu-click', menu: '자재관리 > 재고현황' },
          { id: 's3', type: 'screen', label: '재고현황 목록', ui: 'stock-list', desc: '품목별 장부재고 표시' },
          { id: 's4', type: 'action', label: '실사 버튼 클릭', ui: 'Button: 재고 실사' },
          { id: 's5', type: 'screen', label: '재고실사 화면', ui: 'stock-audit' },
          { id: 's6', type: 'action', label: '실사 대상 선택', ui: 'Checkbox: 품목 선택 또는 전체 선택' },
          { id: 's7', type: 'action', label: '실사표 출력', ui: 'Button: 실사표 출력 (품목, 위치, 장부수량)' },
          { id: 's8', type: 'action', label: '현장 실사 수행', ui: '창고 현장에서 실제 수량 확인' },
          { id: 's9', type: 'action', label: '실사 수량 입력', ui: 'Input: 각 품목별 실제 수량 입력', required: true },
          { id: 's10', type: 'decision', label: '차이 발생?', options: ['Y', 'N'] },
          { id: 's11', type: 'action', label: '차이 원인 분석', ui: 'Select: 차이사유 (분실/파손/오기록/기타) + 상세내용', condition: 'Y' },
          { id: 's12', type: 'action', label: '재고 조정', ui: 'Button: 재고조정 → 장부수량을 실제수량으로 업데이트', condition: 'Y' },
          { id: 's13', type: 'action', label: '실사 완료', ui: 'Button: 실사완료 → 실사이력 저장', required: true },
          { id: 's14', type: 'action', label: '실사보고서 출력', ui: 'Button: 보고서 출력 (차이내역, 조정내역)' },
          { id: 's15', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's10', to: 's11', condition: 'Y' },
          { from: 's10', to: 's13', condition: 'N' },
        ],
      },
    ],
  },

  // 출고
  shipment: {
    id: 'dept-shipment',
    name: '출고',
    description: '출하 등록/확정/배송 관리 - 데이터 흐름: 수주→출하→FQC→배송→매출',
    icon: 'Truck',
    scenarios: [
      {
        id: 'shipment-1',
        name: '출하 등록',
        description: '수주 건 출하 등록 및 FQC 연동',
        dataFlow: '수주번호(SO) 참조 → 출하번호(SL-YYMMDD-##) 생성 → FQC 연동',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '출고관리 > 출하관리', ui: 'menu-click', menu: '출고관리 > 출하관리' },
          { id: 's3', type: 'screen', label: '출하 목록', ui: 'shipment-list', desc: '출하 전체 목록 (대기/검사중/확정/완료)' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 출하 등록' },
          { id: 's5', type: 'screen', label: '출하 등록 화면', ui: 'shipment-register' },
          { id: 's6', type: 'action', label: '수주 선택', ui: 'Modal: 수주 검색 → 수주번호, 거래처, 품목정보 자동 연결', required: true, dataLink: '수주번호' },
          { id: 's7', type: 'action', label: '출하수량 입력', ui: 'Input: 출하수량 (수주잔량 표시), 출하예정일', required: true },
          { id: 's8', type: 'action', label: '배송정보 입력', ui: 'Input: 배송지 (현장주소 자동), 배송방법, 운송업체' },
          { id: 's9', type: 'decision', label: 'FQC 필요?', options: ['Y', 'N'] },
          { id: 's10', type: 'action', label: 'FQC 요청', ui: 'Button: 제품검사 요청 → 품질관리로 전달, 상태=검사중', condition: 'Y', dataLink: '출하번호+수주번호→FQC' },
          { id: 's11', type: 'action', label: '바로 출하대기', ui: 'Button: 저장 → 상태=출하대기', condition: 'N' },
          { id: 's12', type: 'action', label: '저장', ui: 'Button: 저장 → 출하번호(SL-YYMMDD-##) 자동생성', required: true },
          { id: 's13', type: 'end', label: '완료', ui: null, output: '출하번호 → FQC/배송/매출에서 참조' },
        ],
        branches: [
          { from: 's9', to: 's10', condition: 'Y' },
          { from: 's9', to: 's11', condition: 'N' },
        ],
      },
      {
        id: 'shipment-2',
        name: '출하 확정 및 배송',
        description: 'FQC 합격 후 출하 확정 처리',
        dataFlow: 'FQC 합격 확인 → 출하확정 → 거래명세서 발행 → 배송 진행 → 매출 연동',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '출고관리 > 출하관리', ui: 'menu-click', menu: '출고관리 > 출하관리' },
          { id: 's3', type: 'screen', label: '출하 목록', ui: 'shipment-list', desc: '출하 전체 목록 조회' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 기간, 거래처, 상태(출하대기/검사완료)' },
          { id: 's5', type: 'action', label: '출하 건 선택', ui: 'Table: 행 클릭' },
          { id: 's6', type: 'screen', label: '출하 상세 화면', ui: 'shipment-detail', desc: '출하정보 + FQC결과 + 배송정보 표시' },
          { id: 's7', type: 'decision', label: 'FQC 결과?', options: ['합격', '불합격'] },
          { id: 's8', type: 'action', label: '출하 확정', ui: 'Button: 출하확정 → 상태=출하확정, 수주 출하수량 업데이트', condition: '합격', dataLink: '출하확정→수주진행률' },
          { id: 's9', type: 'action', label: '출하 보류', ui: 'Button: 출하보류 → 품질이슈 확인 필요', condition: '불합격', dataLink: '출하보류→품질재검토' },
          { id: 's10', type: 'action', label: '거래명세서 출력', ui: 'Button: 거래명세서 → 출력/이메일' },
          { id: 's11', type: 'action', label: '출고증 출력', ui: 'Button: 출고증 출력 (창고용)' },
          { id: 's12', type: 'action', label: '배송 진행', ui: 'Button: 배송시작 → 운송장번호 입력, 상태=배송중' },
          { id: 's13', type: 'action', label: '배송 완료', ui: 'Button: 배송완료 → 상태=배송완료, 매출 자동생성', dataLink: '배송완료→매출생성' },
          { id: 's14', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's7', to: 's8', condition: '합격' },
          { from: 's7', to: 's9', condition: '불합격' },
        ],
      },
      {
        id: 'shipment-3',
        name: '분할 출하',
        description: '하나의 수주를 여러 번에 나눠 출하',
        dataFlow: '수주번호 참조 → 출하이력 확인 → 잔량 기준 분할 출하 → 수주 진행률 업데이트',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '판매관리 > 수주관리', ui: 'menu-click', menu: '판매관리 > 수주관리' },
          { id: 's3', type: 'screen', label: '수주 목록', ui: 'order-list', desc: '수주 전체 목록 조회' },
          { id: 's4', type: 'action', label: '수주 선택', ui: 'Table: 상태=진행중 수주 선택' },
          { id: 's5', type: 'screen', label: '수주 상세 화면', ui: 'order-detail', desc: '수주정보 + 출하이력 표시' },
          { id: 's6', type: 'action', label: '출하현황 탭 확인', ui: 'Tab: 출하이력 → 기출하수량, 잔여수량 확인', dataLink: '수주번호별 출하이력' },
          { id: 's7', type: 'action', label: '추가출하 버튼', ui: 'Button: 추가 출하' },
          { id: 's8', type: 'screen', label: '출하 등록 화면', ui: 'shipment-register', desc: '수주정보 자동연결, 잔량 기준' },
          { id: 's9', type: 'action', label: '분할 수량 입력', ui: 'Input: 이번 출하수량 (잔량 범위 내)', required: true },
          { id: 's10', type: 'action', label: '저장', ui: 'Button: 저장 → 출하번호 생성', required: true },
          { id: 's11', type: 'decision', label: '전량 출하?', options: ['Y', 'N'] },
          { id: 's12', type: 'action', label: '수주 완료 처리', ui: 'Auto: 수주 상태=출하완료', condition: 'Y', dataLink: '전량출하→수주완료' },
          { id: 's13', type: 'action', label: '잔량 유지', ui: 'Auto: 수주 상태=부분출하', condition: 'N', dataLink: '부분출하→수주진행중' },
          { id: 's14', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's11', to: 's12', condition: 'Y' },
          { from: 's11', to: 's13', condition: 'N' },
        ],
      },
      {
        id: 'shipment-4',
        name: '배송 현황 조회',
        description: '실시간 배송 현황 모니터링',
        dataFlow: '출하번호별 배송상태 추적 → 운송장 조회 → 배송완료 처리',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '출고관리 > 배송현황', ui: 'menu-click', menu: '출고관리 > 배송현황' },
          { id: 's3', type: 'screen', label: '배송현황 목록', ui: 'delivery-list', desc: '배송중/배송완료/지연 건 표시' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 기간, 거래처, 배송상태, 지연건만' },
          { id: 's5', type: 'action', label: '배송 건 선택', ui: 'Table: 행 클릭' },
          { id: 's6', type: 'screen', label: '배송 상세 화면', ui: 'delivery-detail', desc: '배송정보, 운송장, 위치정보 표시' },
          { id: 's7', type: 'action', label: '운송장 조회', ui: 'Link: 운송사 배송조회 연동', dataLink: '운송장번호→배송추적' },
          { id: 's8', type: 'decision', label: '배송 상태?', options: ['배송완료', '지연', '배송중'] },
          { id: 's9', type: 'action', label: '배송완료 처리', ui: 'Button: 배송완료 → 고객 서명/인수 확인', condition: '배송완료', dataLink: '배송완료→매출확정' },
          { id: 's10', type: 'action', label: '지연 알림', ui: 'Button: 지연알림 → 고객/영업담당 통보', condition: '지연' },
          { id: 's11', type: 'action', label: '현황 확인', ui: '배송 진행중 상태 유지', condition: '배송중' },
          { id: 's12', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's8', to: 's9', condition: '배송완료' },
          { from: 's8', to: 's10', condition: '지연' },
          { from: 's8', to: 's11', condition: '배송중' },
        ],
      },
    ],
  },

  // 회계
  accounting: {
    id: 'dept-accounting',
    name: '회계',
    description: '매출/수금/매입/원가 관리 - 데이터 흐름: 출하→매출→세금계산서→수금, 거래처→미수금관리',
    icon: 'Calculator',
    scenarios: [
      {
        id: 'accounting-1',
        name: '거래처 관리 (회계)',
        description: '거래처 신용등급 및 여신 관리',
        dataFlow: '거래처코드(CUS-###) 참조 → 신용등급 설정 → 여신한도 관리',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '회계관리 > 거래처관리', ui: 'menu-click', menu: '회계관리 > 거래처관리' },
          { id: 's3', type: 'screen', label: '거래처(회계) 목록', ui: 'acc-customer-list', desc: '거래처별 신용등급, 여신한도, 미수금 현황' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 거래처명, 신용등급, 여신상태(정상/초과/위험)' },
          { id: 's5', type: 'action', label: '거래처 선택', ui: 'Table: 행 클릭' },
          { id: 's6', type: 'screen', label: '거래처 상세(회계)', ui: 'acc-customer-detail', desc: '신용정보 + 매출/수금이력 + 미수금현황', dataLink: '거래처코드' },
          { id: 's7', type: 'action', label: '신용등급 설정', ui: 'Select: A/B/C/D 등급 선택' },
          { id: 's8', type: 'action', label: '여신한도 설정', ui: 'Input: 여신한도 금액, 결제조건(현금/어음/외상)' },
          { id: 's9', type: 'decision', label: '여신 초과?', options: ['Y', 'N'] },
          { id: 's10', type: 'action', label: '주의 처리', ui: 'Button: 여신주의 → 영업담당 알림, 추가수주 제한', condition: 'Y' },
          { id: 's11', type: 'action', label: '저장', ui: 'Button: 저장', required: true },
          { id: 's12', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's9', to: 's10', condition: 'Y' },
          { from: 's9', to: 's11', condition: 'N' },
        ],
      },
      {
        id: 'accounting-2',
        name: '매출 정산 및 세금계산서',
        description: '배송 완료 건 매출 확정 및 문서 발행',
        dataFlow: '출하번호 참조 → 매출 확정 → 거래명세서/세금계산서 발행 → 수금 예정 등록',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '회계관리 > 매출관리', ui: 'menu-click', menu: '회계관리 > 매출관리' },
          { id: 's3', type: 'screen', label: '매출 목록', ui: 'sales-list', desc: '매출 전체 목록 (미확정/확정/세금계산서발행)' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 기간, 거래처, 상태(배송완료/매출확정/미발행)' },
          { id: 's5', type: 'action', label: '매출 건 선택', ui: 'Table: 행 클릭 (출하번호별)', dataLink: '출하번호' },
          { id: 's6', type: 'screen', label: '매출 상세 화면', ui: 'sales-detail', desc: '출하정보 + 매출금액 + 거래처정보 표시' },
          { id: 's7', type: 'action', label: '매출 확정', ui: 'Button: 매출확정 → 상태=매출확정', dataLink: '출하→매출확정' },
          { id: 's8', type: 'decision', label: '문서 발행?', options: ['거래명세서', '세금계산서', '둘다'] },
          { id: 's9', type: 'action', label: '거래명세서 발행', ui: 'Button: 거래명세서 → 출력/이메일', condition: '거래명세서' },
          { id: 's10', type: 'action', label: '세금계산서 발행', ui: 'Button: 전자세금계산서 → 국세청 전송', condition: '세금계산서' },
          { id: 's11', type: 'action', label: '둘다 발행', ui: 'Button: 거래명세서+세금계산서 순차발행', condition: '둘다' },
          { id: 's12', type: 'action', label: '수금 예정 등록', ui: 'Auto: 결제조건 기준 수금예정일 자동생성', dataLink: '매출→수금예정' },
          { id: 's13', type: 'end', label: '완료', ui: null, output: '세금계산서번호 → 국세청 연동, 수금예정 → 수금관리' },
        ],
        branches: [
          { from: 's8', to: 's9', condition: '거래명세서' },
          { from: 's8', to: 's10', condition: '세금계산서' },
          { from: 's8', to: 's11', condition: '둘다' },
        ],
      },
      {
        id: 'accounting-3',
        name: '수금 관리',
        description: '거래처 수금 처리 및 미수금 관리',
        dataFlow: '거래처코드 참조 → 수금예정 확인 → 입금 등록 → 미수금 업데이트',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '회계관리 > 수금관리', ui: 'menu-click', menu: '회계관리 > 수금관리' },
          { id: 's3', type: 'screen', label: '수금 목록', ui: 'collection-list', desc: '수금 현황 (예정/완료/연체)' },
          { id: 's4', type: 'action', label: '검색/필터', ui: 'Filter: 기간, 거래처, 상태(수금예정/연체/완료)' },
          { id: 's5', type: 'action', label: '미수금 현황 탭', ui: 'Tab: 미수금 현황 → 거래처별 미수금 합계', dataLink: '거래처코드별 미수금' },
          { id: 's6', type: 'decision', label: '입금 확인?', options: ['Y', 'N'] },
          { id: 's7', type: 'action', label: '수금 등록 클릭', ui: 'Button: + 수금 등록', condition: 'Y' },
          { id: 's8', type: 'screen', label: '수금 등록 화면', ui: 'collection-register', condition: 'Y' },
          { id: 's9', type: 'action', label: '거래처/매출 선택', ui: 'Modal: 거래처 → 미수금 건 선택', required: true, dataLink: '거래처코드+매출번호' },
          { id: 's10', type: 'action', label: '입금정보 입력', ui: 'Input: 입금액, 입금일, 입금방법(현금/계좌이체/어음)', required: true },
          { id: 's11', type: 'action', label: '저장', ui: 'Button: 저장 → 미수금 차감', required: true, dataLink: '수금→미수금감소' },
          { id: 's12', type: 'action', label: '금전출납부 자동 기록', ui: 'Auto: 금전출납부에 수입 내역 등록', dataLink: '수금→금전출납부' },
          { id: 's13', type: 'action', label: '수금 독촉', ui: 'Button: 독촉 메일/문자 → 거래처 담당자 통보', condition: 'N' },
          { id: 's14', type: 'decision', label: '완납 여부?', options: ['완납', '미수잔액'] },
          { id: 's15', type: 'action', label: '수금 완료', ui: 'Auto: 해당 매출건 상태=수금완료', condition: '완납' },
          { id: 's16', type: 'action', label: '미수금 잔여', ui: '잔여 미수금 관리 지속', condition: '미수잔액' },
          { id: 's17', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's6', to: 's7', condition: 'Y' },
          { from: 's6', to: 's13', condition: 'N' },
          { from: 's14', to: 's15', condition: '완납' },
          { from: 's14', to: 's16', condition: '미수잔액' },
        ],
      },
      {
        id: 'accounting-4',
        name: '매입 처리',
        description: '품의서 작성부터 지출결의까지',
        dataFlow: '품의서 작성 → 결재 승인 → 지출결의서 → 금전출납부 기록',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '회계관리 > 매입관리', ui: 'menu-click', menu: '회계관리 > 매입관리' },
          { id: 's3', type: 'screen', label: '매입 목록', ui: 'purchase-list', desc: '품의서/지출결의서 목록 (상신/승인/지급완료)' },
          { id: 's4', type: 'action', label: '등록 버튼 클릭', ui: 'Button: + 품의서 등록' },
          { id: 's5', type: 'screen', label: '품의서 등록 화면', ui: 'purchase-register' },
          { id: 's6', type: 'action', label: '품의 내용 입력', ui: 'Input: 품의제목, 구매품목, 금액, 구매사유', required: true },
          { id: 's7', type: 'action', label: '공급업체 선택', ui: 'Modal: 공급업체 검색 → 업체정보 연결', dataLink: '공급업체코드' },
          { id: 's8', type: 'action', label: '저장/결재요청', ui: 'Button: 저장 → 결재상신', required: true },
          { id: 's9', type: 'decision', label: '결재 결과?', options: ['승인', '반려'] },
          { id: 's10', type: 'action', label: '품의 수정', ui: '반려사유 확인 → 품의서 수정 후 재상신', condition: '반려' },
          { id: 's11', type: 'action', label: '지출결의서 작성', ui: 'Button: 지출결의서 작성', condition: '승인' },
          { id: 's12', type: 'screen', label: '지출결의서 화면', ui: 'expense-register', condition: '승인' },
          { id: 's13', type: 'action', label: '지출정보 입력', ui: 'Input: 지급처, 지급금액, 지급예정일, 지급방법', required: true },
          { id: 's14', type: 'action', label: '저장', ui: 'Button: 저장 → 상태=지급예정', required: true },
          { id: 's15', type: 'action', label: '지급 처리', ui: 'Button: 지급완료 → 금전출납부 자동 기록', dataLink: '지출→금전출납부' },
          { id: 's16', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's9', to: 's10', condition: '반려' },
          { from: 's9', to: 's11', condition: '승인' },
          { from: 's10', to: 's8', condition: null },
        ],
      },
      {
        id: 'accounting-5',
        name: '원가 분석',
        description: '수주별 원가 집계 및 손익 분석',
        dataFlow: '수주번호 참조 → 재료비/노무비/경비 집계 → 매출 대비 원가율 분석',
        steps: [
          { id: 's1', type: 'start', label: '시작', ui: null },
          { id: 's2', type: 'screen', label: '회계관리 > 원가관리', ui: 'menu-click', menu: '회계관리 > 원가관리' },
          { id: 's3', type: 'screen', label: '원가 목록', ui: 'cost-list', desc: '수주별 원가 현황 (이익/손실 표시)' },
          { id: 's4', type: 'action', label: '조회기간 선택', ui: 'DatePicker: 시작일~종료일' },
          { id: 's5', type: 'action', label: '수주 선택', ui: 'Table: 수주건 선택', dataLink: '수주번호' },
          { id: 's6', type: 'screen', label: '원가 상세 화면', ui: 'cost-detail', desc: '재료비+노무비+경비 상세 내역' },
          { id: 's7', type: 'action', label: '재료비 확인', ui: 'Tab: 재료비 → 품목별 투입 원가', dataLink: '작업지시→자재출고→원가' },
          { id: 's8', type: 'action', label: '노무비 확인', ui: 'Tab: 노무비 → 공정별 작업시간×단가', dataLink: '작업실적→노무비' },
          { id: 's9', type: 'action', label: '경비 확인', ui: 'Tab: 경비 → 외주비/간접비 배부' },
          { id: 's10', type: 'action', label: '매출/원가 비교', ui: 'Chart: 매출액 vs 총원가 → 이익률 표시' },
          { id: 's11', type: 'decision', label: '손익 상태?', options: ['이익', '손실'] },
          { id: 's12', type: 'action', label: '원가절감 분석', ui: 'Analysis: 비용 항목별 절감 포인트 분석', condition: '손실' },
          { id: 's13', type: 'action', label: '원가 보고서 출력', ui: 'Button: 보고서 출력 (원가명세서)' },
          { id: 's14', type: 'end', label: '완료', ui: null },
        ],
        branches: [
          { from: 's11', to: 's12', condition: '손실' },
          { from: 's11', to: 's13', condition: '이익' },
        ],
      },
    ],
  },
};

// ============================================================
// 8. MES 시스템 데이터 등록 순서 플로우 (시스템 구동을 위한 필수 데이터 등록 가이드)
// 마스터 데이터 → 트랜잭션 데이터 순서로 등록해야 시스템이 정상 작동
// ============================================================
export const dataRegistrationFlow = {
  id: 'mes-data-registration',
  name: 'MES 시스템 데이터 등록 순서',
  description: 'MES 시스템이 정상 작동하려면 아래 순서대로 데이터를 등록해야 합니다. 선행 데이터가 없으면 후행 데이터 등록이 불가능합니다.',

  // Phase 1: 기준정보 (마스터 데이터) - 시스템 운영의 기초
  phases: [
    {
      id: 'phase-1',
      name: 'PHASE 1: 기준정보 등록 (마스터 데이터)',
      description: '시스템 운영의 기초가 되는 마스터 데이터. 반드시 먼저 등록해야 함',
      order: 1,
      required: true,
      estimatedTime: '1~2일',
      steps: [
        {
          id: 'step-1-1',
          order: 1,
          name: '공정기준 등록',
          description: '제품 생산에 필요한 공정 정의 (스크린, 슬랫, 절곡, 포밍, 포장 등)',
          menu: '기준정보 > 공정기준관리',
          screen: 'process-master-list → process-master-register',
          requiredBefore: [],
          usedBy: ['작업지시', '작업실적', 'BOM', '원가계산'],
          fields: [
            { section: '기본정보', items: [
              { field: '공정코드', type: 'auto', format: 'PROC-###', required: true, desc: '자동생성' },
              { field: '공정명', type: 'text', example: '스크린공정', required: true },
              { field: '공정유형', type: 'select', options: ['스크린', '슬랫', '절곡', '포밍', '포장', '조립'], required: true },
              { field: '공정순서', type: 'number', example: 1, required: true, desc: '생산 순서' },
            ]},
            { section: '작업정보', items: [
              { field: '표준작업시간', type: 'number', unit: '분', required: true },
              { field: '작업단위', type: 'select', options: ['EA', 'SET', 'M', 'M2'], required: true },
              { field: '검사필요여부', type: 'boolean', default: true },
              { field: '외주가능여부', type: 'boolean', default: false },
            ]},
            { section: '설비정보', items: [
              { field: '주사용설비', type: 'select', desc: '해당 공정 사용 설비' },
              { field: '필요인원', type: 'number', default: 1 },
            ]},
          ],
          outputData: '공정코드 → 작업지시/실적/BOM에서 참조',
        },
        {
          id: 'step-1-2',
          order: 2,
          name: '품질기준 등록',
          description: '품목별 검사 기준 및 판정 기준 정의',
          menu: '기준정보 > 품질기준관리',
          screen: 'quality-master-list → quality-master-register',
          requiredBefore: [],
          usedBy: ['IQC', 'PQC', 'FQC', '부적합품관리'],
          fields: [
            { section: '기본정보', items: [
              { field: '품질기준코드', type: 'auto', format: 'QS-###', required: true },
              { field: '기준명', type: 'text', example: '스크린원단 수입검사기준', required: true },
              { field: '적용구분', type: 'select', options: ['IQC(수입)', 'PQC(중간)', 'FQC(최종)'], required: true },
            ]},
            { section: '검사항목', items: [
              { field: '검사항목명', type: 'text', example: '원단두께', required: true },
              { field: '검사방법', type: 'text', example: '마이크로미터 측정' },
              { field: '규격값', type: 'text', example: '0.3±0.02mm', required: true },
              { field: '상한값', type: 'number', example: 0.32 },
              { field: '하한값', type: 'number', example: 0.28 },
              { field: '판정기준', type: 'select', options: ['수치', '육안', 'GO/NG'], required: true },
            ]},
            { section: '샘플링', items: [
              { field: '샘플링방법', type: 'select', options: ['전수', 'AQL', '랜덤'] },
              { field: '샘플수량', type: 'number', desc: '검사 샘플 수' },
            ]},
          ],
          outputData: '품질기준코드 → IQC/PQC/FQC 검사에서 참조',
        },
        {
          id: 'step-1-3',
          order: 3,
          name: '품목기준 등록 (원자재/부자재)',
          description: '구매하는 원자재, 부자재 품목 등록',
          menu: '기준정보 > 품목기준관리',
          screen: 'item-master-list → item-master-register',
          requiredBefore: ['품질기준 (IQC 연동용)'],
          usedBy: ['발주', '입고', '재고', 'BOM', '원가계산'],
          fields: [
            { section: '기본정보', items: [
              { field: '품목코드', type: 'auto/manual', format: '{품목코드}-{규격}', example: 'SCR-0.3T', required: true },
              { field: '품목명', type: 'text', example: '스크린원단 0.3T', required: true },
              { field: '품목유형', type: 'select', options: ['원자재', '부자재', '소모품'], required: true },
              { field: '품목분류', type: 'select', options: ['원단', '철판', '볼트류', '전기부품'], required: true },
              { field: '규격', type: 'text', example: '0.3T x 1200mm', required: true },
            ]},
            { section: '구매정보', items: [
              { field: '주거래처', type: 'select', desc: '기준정보 등록 후 연결 가능' },
              { field: '구매단가', type: 'number', required: true },
              { field: '구매단위', type: 'select', options: ['EA', 'M', 'KG', 'ROLL'], required: true },
              { field: '리드타임', type: 'number', unit: '일', required: true },
            ]},
            { section: '재고정보', items: [
              { field: '안전재고', type: 'number', required: true },
              { field: '최소발주량', type: 'number' },
              { field: '기본창고', type: 'select', options: ['원자재창고', '부자재창고'] },
            ]},
            { section: '품질연동', items: [
              { field: 'IQC기준', type: 'select', desc: '품질기준 연결', link: '품질기준코드' },
              { field: 'IQC필수여부', type: 'boolean', default: true },
            ]},
          ],
          outputData: '품목코드 → 발주/입고/BOM/원가에서 참조',
        },
        {
          id: 'step-1-4',
          order: 4,
          name: '품목기준 등록 (제품/반제품)',
          description: '생산하는 제품, 반제품 품목 등록',
          menu: '기준정보 > 품목기준관리',
          screen: 'item-master-list → item-master-register',
          requiredBefore: ['공정기준', '품질기준 (FQC 연동용)'],
          usedBy: ['견적', '수주', '작업지시', '출하', '원가계산'],
          fields: [
            { section: '기본정보', items: [
              { field: '품목코드', type: 'auto', format: '{유형약어}{폭}{높이}', example: 'SH3040', required: true, desc: '방화셔터 3000x4000' },
              { field: '품목명', type: 'text', example: '방화셔터 3000x4000', required: true },
              { field: '품목유형', type: 'select', options: ['제품', '반제품', '조립부품', '절곡부품'], required: true },
              { field: '제품분류', type: 'select', options: ['방화셔터', '방화문', '방연셔터', '자동문'], required: true },
            ]},
            { section: '규격정보', items: [
              { field: '폭(W)', type: 'number', unit: 'mm', required: true },
              { field: '높이(H)', type: 'number', unit: 'mm', required: true },
              { field: '두께(D)', type: 'number', unit: 'mm' },
              { field: '전원사양', type: 'select', options: ['220V', '380V', 'N/A'] },
            ]},
            { section: '판매정보', items: [
              { field: '판매단가', type: 'number', required: true },
              { field: '판매단위', type: 'select', options: ['EA', 'SET'], required: true },
            ]},
            { section: '생산정보', items: [
              { field: '표준생산시간', type: 'number', unit: '시간' },
              { field: 'BOM등록여부', type: 'boolean', desc: '후속 BOM 등록 필요' },
            ]},
            { section: '품질연동', items: [
              { field: 'FQC기준', type: 'select', desc: '품질기준 연결', link: '품질기준코드' },
              { field: 'FQC필수여부', type: 'boolean', default: true },
            ]},
          ],
          outputData: '품목코드 → 견적/수주/작업지시/출하에서 참조',
        },
        {
          id: 'step-1-5',
          order: 5,
          name: 'BOM(자재명세서) 등록',
          description: '제품 생산에 필요한 원부자재 구성 정의',
          menu: '기준정보 > BOM관리',
          screen: 'bom-list → bom-register',
          requiredBefore: ['품목기준 (제품)', '품목기준 (원자재/부자재)', '공정기준'],
          usedBy: ['작업지시 (소요자재 계산)', '자재출고', '원가계산'],
          fields: [
            { section: '상위품목 (제품)', items: [
              { field: '상위품목코드', type: 'select', desc: '제품/반제품 선택', link: '품목코드', required: true },
              { field: '상위품목명', type: 'auto', desc: '자동표시' },
            ]},
            { section: '하위품목 (자재) - 반복', items: [
              { field: '하위품목코드', type: 'select', desc: '원자재/부자재 선택', link: '품목코드', required: true },
              { field: '하위품목명', type: 'auto', desc: '자동표시' },
              { field: '소요량', type: 'number', required: true, desc: '상위품목 1개당 필요량' },
              { field: '소요단위', type: 'auto', desc: '하위품목 단위' },
              { field: '손실률', type: 'number', unit: '%', default: 0 },
              { field: '적용공정', type: 'select', link: '공정코드', desc: '해당 자재 사용 공정' },
            ]},
          ],
          outputData: 'BOM → 작업지시 시 소요자재 자동계산, 원가계산 시 재료비 집계',
        },
      ],
    },

    // Phase 2: 거래처/현장 정보
    {
      id: 'phase-2',
      name: 'PHASE 2: 거래처/현장 등록',
      description: '영업 활동의 기초가 되는 거래처 및 현장 정보',
      order: 2,
      required: true,
      estimatedTime: '0.5~1일',
      steps: [
        {
          id: 'step-2-1',
          order: 1,
          name: '거래처 등록 (고객)',
          description: '제품을 판매하는 고객사 등록',
          menu: '판매관리 > 거래처관리',
          screen: 'customer-list → customer-register',
          requiredBefore: [],
          usedBy: ['현장', '견적', '수주', '출하', '매출', '수금'],
          fields: [
            { section: '기본정보', items: [
              { field: '거래처코드', type: 'auto', format: 'CUS-###', example: 'CUS-001', required: true },
              { field: '거래처명', type: 'text', example: '(주)삼성건설', required: true },
              { field: '사업자번호', type: 'text', format: '###-##-#####', required: true },
              { field: '대표자', type: 'text', required: true },
              { field: '업태', type: 'text', example: '건설업' },
              { field: '종목', type: 'text', example: '종합건설' },
            ]},
            { section: '연락처', items: [
              { field: '전화번호', type: 'tel', required: true },
              { field: '팩스번호', type: 'tel' },
              { field: '이메일', type: 'email', required: true },
              { field: '주소', type: 'address', required: true },
            ]},
            { section: '담당자정보', items: [
              { field: '담당자명', type: 'text', required: true },
              { field: '담당자연락처', type: 'tel', required: true },
              { field: '담당자이메일', type: 'email' },
            ]},
            { section: '거래조건', items: [
              { field: '결제조건', type: 'select', options: ['현금', '어음', '외상30일', '외상60일'], required: true },
              { field: '여신한도', type: 'number', unit: '원' },
              { field: '담당영업', type: 'select', desc: '내부 영업담당자' },
            ]},
          ],
          outputData: '거래처코드(CUS-###) → 현장/견적/수주/출하/매출/수금에서 참조',
        },
        {
          id: 'step-2-2',
          order: 2,
          name: '거래처 등록 (공급처)',
          description: '자재를 구매하는 공급업체 등록',
          menu: '판매관리 > 거래처관리',
          screen: 'customer-list → customer-register',
          requiredBefore: [],
          usedBy: ['발주', '입고', '매입', '지급'],
          fields: [
            { section: '기본정보', items: [
              { field: '거래처코드', type: 'auto', format: 'SUP-###', example: 'SUP-001', required: true },
              { field: '거래처명', type: 'text', example: '(주)한국철강', required: true },
              { field: '거래처유형', type: 'select', value: '공급처', required: true },
              { field: '사업자번호', type: 'text', format: '###-##-#####', required: true },
              { field: '대표자', type: 'text', required: true },
            ]},
            { section: '연락처/담당자', items: [
              { field: '전화번호', type: 'tel', required: true },
              { field: '이메일', type: 'email', required: true },
              { field: '주소', type: 'address', required: true },
              { field: '담당자명', type: 'text', required: true },
              { field: '담당자연락처', type: 'tel', required: true },
            ]},
            { section: '거래조건', items: [
              { field: '결제조건', type: 'select', options: ['현금', '어음', '외상30일'], required: true },
              { field: '주거래품목', type: 'multiselect', desc: '주로 공급받는 품목 유형' },
            ]},
          ],
          outputData: '거래처코드(SUP-###) → 발주/입고/매입에서 참조',
        },
        {
          id: 'step-2-3',
          order: 3,
          name: '현장 등록',
          description: '시공/납품 현장 등록 (거래처 하위)',
          menu: '판매관리 > 현장관리',
          screen: 'site-list → site-register',
          requiredBefore: ['거래처(고객)'],
          usedBy: ['견적', '수주', '출하', '배송'],
          fields: [
            { section: '기본정보', items: [
              { field: '현장코드', type: 'auto', format: 'S-###', example: 'S-001', required: true },
              { field: '현장명', type: 'text', example: '강남역 삼성타워 신축공사', required: true },
              { field: '거래처', type: 'select', link: '거래처코드(CUS-###)', required: true, desc: '소속 거래처 선택' },
            ]},
            { section: '현장정보', items: [
              { field: '현장주소', type: 'address', required: true, desc: '납품/배송 주소' },
              { field: '현장담당자', type: 'text', required: true },
              { field: '현장연락처', type: 'tel', required: true },
            ]},
            { section: '공사정보', items: [
              { field: '착공예정일', type: 'date' },
              { field: '준공예정일', type: 'date' },
              { field: '현장상태', type: 'select', options: ['준비중', '진행중', '완료', '중단'], default: '준비중' },
              { field: '공사내용', type: 'textarea', desc: '현장 특이사항' },
            ]},
          ],
          outputData: '현장코드(S-###) → 견적/수주/출하에서 배송지로 참조',
        },
      ],
    },

    // Phase 3: 영업 트랜잭션 (견적→수주)
    {
      id: 'phase-3',
      name: 'PHASE 3: 영업 트랜잭션 (견적→수주)',
      description: '실제 영업 활동 데이터 - 견적서 작성 후 수주 확정',
      order: 3,
      required: true,
      estimatedTime: '영업 발생 시',
      steps: [
        {
          id: 'step-3-1',
          order: 1,
          name: '견적 등록',
          description: '고객 요청에 따른 견적서 작성',
          menu: '판매관리 > 견적관리',
          screen: 'quote-list → quote-register',
          requiredBefore: ['거래처(고객)', '현장', '품목(제품)'],
          usedBy: ['수주 (전환)', '견적서 출력'],
          fields: [
            { section: '기본정보', items: [
              { field: '견적번호', type: 'auto', format: 'QT-YYMMDD-##', example: 'QT-251218-01', required: true },
              { field: '견적일자', type: 'date', default: '오늘', required: true },
              { field: '유효기간', type: 'date', required: true },
              { field: '거래처', type: 'select', link: '거래처코드(CUS-###)', required: true },
              { field: '현장', type: 'select', link: '현장코드(S-###)', required: true, desc: '해당 거래처 현장만 표시' },
            ]},
            { section: '견적품목 - 반복', items: [
              { field: '품목', type: 'select', link: '품목코드', required: true },
              { field: '품목명', type: 'auto', desc: '자동표시' },
              { field: '규격', type: 'auto', desc: '자동표시' },
              { field: '수량', type: 'number', required: true },
              { field: '단가', type: 'number', required: true, desc: '품목 판매단가 또는 수정' },
              { field: '금액', type: 'auto', formula: '수량 x 단가' },
              { field: '비고', type: 'text' },
            ]},
            { section: '합계정보', items: [
              { field: '공급가액', type: 'auto', formula: 'SUM(품목금액)' },
              { field: '부가세', type: 'auto', formula: '공급가액 x 10%' },
              { field: '총합계', type: 'auto', formula: '공급가액 + 부가세' },
            ]},
            { section: '기타', items: [
              { field: '납기요청일', type: 'date' },
              { field: '결제조건', type: 'auto', desc: '거래처 결제조건 자동' },
              { field: '특이사항', type: 'textarea' },
              { field: '견적상태', type: 'select', options: ['작성중', '발송완료', '수주전환', '취소'], default: '작성중' },
            ]},
          ],
          outputData: '견적번호(QT-YYMMDD-##) → 수주 전환 시 참조',
        },
        {
          id: 'step-3-2',
          order: 2,
          name: '수주 등록 (견적 전환)',
          description: '승인된 견적을 수주로 전환 또는 직접 수주 등록',
          menu: '판매관리 > 수주관리',
          screen: 'order-list → order-register',
          requiredBefore: ['견적 (전환시)', '거래처(고객)', '현장', '품목(제품)'],
          usedBy: ['작업지시', '출하', '매출', '원가'],
          fields: [
            { section: '기본정보', items: [
              { field: '수주번호', type: 'auto', format: 'SO-YYMMDD-##', example: 'SO-251218-01', required: true },
              { field: '수주일자', type: 'date', default: '오늘', required: true },
              { field: '견적번호', type: 'select', link: '견적번호(QT-...)', desc: '견적전환 시 자동연결' },
              { field: '거래처', type: 'auto/select', link: '거래처코드', required: true },
              { field: '현장', type: 'auto/select', link: '현장코드', required: true },
            ]},
            { section: '수주품목 - 반복', items: [
              { field: '품목', type: 'select', link: '품목코드', required: true },
              { field: '품목명', type: 'auto' },
              { field: '규격', type: 'auto' },
              { field: '수주수량', type: 'number', required: true },
              { field: '단가', type: 'number', required: true },
              { field: '금액', type: 'auto', formula: '수량 x 단가' },
              { field: '납기요청일', type: 'date', required: true },
            ]},
            { section: '배송정보', items: [
              { field: '배송지', type: 'auto', desc: '현장주소 자동', required: true },
              { field: '배송방법', type: 'select', options: ['직접배송', '택배', '화물'] },
              { field: '수령자', type: 'auto', desc: '현장담당자 자동' },
              { field: '수령자연락처', type: 'auto' },
            ]},
            { section: '상태정보', items: [
              { field: '수주상태', type: 'select', options: ['확정', '생산중', '부분출하', '출하완료', '취소'], default: '확정' },
              { field: '출하수량', type: 'auto', default: 0, desc: '출하 시 자동 업데이트' },
              { field: '잔여수량', type: 'auto', formula: '수주수량 - 출하수량' },
            ]},
          ],
          outputData: '수주번호(SO-YYMMDD-##) → 작업지시/출하/매출/원가에서 참조',
        },
      ],
    },

    // Phase 4: 자재 트랜잭션 (발주→입고→재고)
    {
      id: 'phase-4',
      name: 'PHASE 4: 자재 트랜잭션 (발주→입고→재고)',
      description: '생산에 필요한 자재 확보 프로세스',
      order: 4,
      required: true,
      estimatedTime: '자재 필요 시',
      steps: [
        {
          id: 'step-4-1',
          order: 1,
          name: '발주 등록',
          description: '공급업체에 자재 발주',
          menu: '자재관리 > 발주관리',
          screen: 'purchase-order-list → purchase-order-register',
          requiredBefore: ['거래처(공급처)', '품목(원자재/부자재)'],
          usedBy: ['입고'],
          fields: [
            { section: '기본정보', items: [
              { field: '발주번호', type: 'auto', format: 'PO-YYMMDD-##', example: 'PO-251218-01', required: true },
              { field: '발주일자', type: 'date', default: '오늘', required: true },
              { field: '공급업체', type: 'select', link: '거래처코드(SUP-###)', required: true },
              { field: '납품요청일', type: 'date', required: true },
            ]},
            { section: '발주품목 - 반복', items: [
              { field: '품목', type: 'select', link: '품목코드(원자재/부자재)', required: true },
              { field: '품목명', type: 'auto' },
              { field: '규격', type: 'auto' },
              { field: '발주수량', type: 'number', required: true },
              { field: '단가', type: 'auto', desc: '품목 구매단가' },
              { field: '금액', type: 'auto', formula: '수량 x 단가' },
            ]},
            { section: '상태', items: [
              { field: '발주상태', type: 'select', options: ['발주완료', '부분입고', '입고완료', '취소'], default: '발주완료' },
              { field: '입고수량', type: 'auto', default: 0 },
              { field: '미입고수량', type: 'auto', formula: '발주수량 - 입고수량' },
            ]},
          ],
          outputData: '발주번호(PO-YYMMDD-##) → 입고 등록 시 참조',
        },
        {
          id: 'step-4-2',
          order: 2,
          name: '입고 등록',
          description: '발주 자재 입고 처리 및 LOT 부여',
          menu: '자재관리 > 입고관리',
          screen: 'inbound-list → inbound-register',
          requiredBefore: ['발주'],
          usedBy: ['IQC', '재고'],
          fields: [
            { section: '기본정보', items: [
              { field: '입고번호', type: 'auto', required: true },
              { field: '입고일자', type: 'date', default: '오늘', required: true },
              { field: '발주번호', type: 'select', link: '발주번호(PO-...)', required: true },
              { field: '공급업체', type: 'auto', desc: '발주서 연동' },
            ]},
            { section: '입고품목 - 반복', items: [
              { field: '품목', type: 'auto', desc: '발주품목 자동' },
              { field: '발주수량', type: 'auto' },
              { field: '입고수량', type: 'number', required: true },
              { field: 'LOT번호', type: 'auto', format: 'LOT-YYYYMMDD-###', example: 'LOT-20251218-001', required: true },
              { field: '창고', type: 'select', options: ['원자재창고', '부자재창고'], required: true },
              { field: '위치', type: 'text', example: 'A-01-01' },
            ]},
            { section: 'IQC연동', items: [
              { field: 'IQC대상', type: 'auto', desc: '품목설정에 따라 자동결정' },
              { field: 'IQC상태', type: 'select', options: ['대기', '합격', '불합격', '특채'], default: '대기' },
            ]},
          ],
          outputData: 'LOT번호(LOT-YYYYMMDD-###) → IQC/재고/생산투입에서 추적',
        },
        {
          id: 'step-4-3',
          order: 3,
          name: 'IQC (수입검사)',
          description: '입고 자재 품질검사',
          menu: '품질관리 > 수입검사(IQC)',
          screen: 'iqc-list → iqc-register',
          requiredBefore: ['입고', '품질기준'],
          usedBy: ['재고 (합격 시)'],
          fields: [
            { section: '검사정보', items: [
              { field: 'IQC번호', type: 'auto', format: 'IQC-YYMMDD-##', example: 'IQC-251218-01', required: true },
              { field: '검사일자', type: 'date', default: '오늘', required: true },
              { field: '입고번호', type: 'select', link: '입고번호', required: true },
              { field: 'LOT번호', type: 'auto', desc: '입고 LOT 자동' },
              { field: '품목', type: 'auto' },
              { field: '검사수량', type: 'number', required: true },
            ]},
            { section: '검사항목 - 반복 (품질기준 연동)', items: [
              { field: '검사항목', type: 'auto', desc: '품질기준에서 로드' },
              { field: '규격값', type: 'auto' },
              { field: '측정값', type: 'number', required: true },
              { field: '판정', type: 'auto', formula: '규격 범위 내 → 합격' },
            ]},
            { section: '최종판정', items: [
              { field: '최종판정', type: 'select', options: ['합격', '불합격', '조건부합격'], required: true },
              { field: '합격수량', type: 'number' },
              { field: '불합격수량', type: 'number' },
              { field: '불합격사유', type: 'textarea', condition: '불합격 시' },
              { field: '처리방법', type: 'select', options: ['재고반영', '반품', '특채', '폐기'], condition: '불합격 시' },
            ]},
          ],
          outputData: 'IQC 합격 → 재고 자동 반영 (LOT별 가용재고 증가)',
        },
      ],
    },

    // Phase 5: 생산 트랜잭션 (작업지시→실적)
    {
      id: 'phase-5',
      name: 'PHASE 5: 생산 트랜잭션 (작업지시→실적)',
      description: '수주 기반 생산 활동 프로세스',
      order: 5,
      required: true,
      estimatedTime: '생산 시',
      steps: [
        {
          id: 'step-5-1',
          order: 1,
          name: '작업지시 등록',
          description: '수주 건에 대한 작업지시서 발행',
          menu: '생산관리 > 작업지시관리',
          screen: 'work-order-list → work-order-register',
          requiredBefore: ['수주', '공정기준', 'BOM'],
          usedBy: ['작업실적', 'PQC', '자재출고'],
          fields: [
            { section: '기본정보', items: [
              { field: '작업지시번호', type: 'auto', format: 'WO-YYMMDD-##', example: 'WO-251218-01', required: true },
              { field: '지시일자', type: 'date', default: '오늘', required: true },
              { field: '수주번호', type: 'select', link: '수주번호(SO-...)', required: true },
              { field: '거래처', type: 'auto', desc: '수주 연동' },
              { field: '현장', type: 'auto', desc: '수주 연동' },
            ]},
            { section: '작업정보', items: [
              { field: '품목', type: 'auto', desc: '수주 품목 자동' },
              { field: '지시수량', type: 'number', required: true },
              { field: '공정', type: 'select', link: '공정코드', required: true },
              { field: '작업예정일', type: 'date', required: true },
              { field: '완료예정일', type: 'date', required: true },
              { field: '담당작업자', type: 'select', desc: '작업자 배정' },
              { field: '우선순위', type: 'select', options: ['긴급', '높음', '보통', '낮음'], default: '보통' },
            ]},
            { section: '소요자재 (BOM 자동계산)', items: [
              { field: '자재목록', type: 'auto', desc: 'BOM 기준 자동계산', link: 'BOM' },
              { field: '품목코드', type: 'auto' },
              { field: '품목명', type: 'auto' },
              { field: '소요수량', type: 'auto', formula: 'BOM소요량 x 지시수량' },
              { field: '현재고', type: 'auto', desc: '재고 조회' },
              { field: '가용여부', type: 'auto', formula: '현재고 >= 소요수량' },
            ]},
            { section: '상태', items: [
              { field: '작업상태', type: 'select', options: ['대기', '진행중', '완료', '보류'], default: '대기' },
              { field: '생산수량', type: 'auto', default: 0, desc: '실적 합계' },
              { field: '진행률', type: 'auto', formula: '(생산수량/지시수량) x 100' },
            ]},
          ],
          outputData: '작업지시번호(WO-...) → 작업실적/자재출고/PQC에서 참조',
        },
        {
          id: 'step-5-2',
          order: 2,
          name: '자재 출고 (생산투입)',
          description: '작업지시에 따른 자재 출고',
          menu: '자재관리 > 재고현황',
          screen: 'stock-list → stock-issue',
          requiredBefore: ['작업지시', '재고(IQC합격)'],
          usedBy: ['원가계산 (재료비)'],
          fields: [
            { section: '출고정보', items: [
              { field: '출고번호', type: 'auto', required: true },
              { field: '출고일자', type: 'date', default: '오늘', required: true },
              { field: '작업지시번호', type: 'select', link: '작업지시번호(WO-...)', required: true },
              { field: '출고유형', type: 'auto', value: '생산투입' },
            ]},
            { section: '출고품목 - 반복 (소요자재)', items: [
              { field: '품목', type: 'auto', desc: '작업지시 소요자재 자동' },
              { field: '소요수량', type: 'auto' },
              { field: 'LOT번호', type: 'select', desc: '출고 LOT 선택 (선입선출)', required: true },
              { field: '가용재고', type: 'auto', desc: '해당 LOT 가용수량' },
              { field: '출고수량', type: 'number', required: true },
              { field: '창고/위치', type: 'auto', desc: 'LOT 위치' },
            ]},
          ],
          outputData: '자재출고 → 재고차감 + 작업지시 투입이력 + 원가(재료비) 집계',
        },
        {
          id: 'step-5-3',
          order: 3,
          name: '작업실적 등록',
          description: '생산 실적 입력',
          menu: '생산관리 > 작업실적',
          screen: 'work-result-list → work-result-register',
          requiredBefore: ['작업지시', '자재출고'],
          usedBy: ['PQC', '원가계산 (노무비)'],
          fields: [
            { section: '기본정보', items: [
              { field: '실적번호', type: 'auto', required: true },
              { field: '작업일자', type: 'date', default: '오늘', required: true },
              { field: '작업지시번호', type: 'select', link: '작업지시번호(WO-...)', required: true },
              { field: '공정', type: 'auto', desc: '작업지시 연동' },
              { field: '작업자', type: 'select', required: true },
            ]},
            { section: '실적정보', items: [
              { field: '생산수량', type: 'number', required: true },
              { field: '양품수량', type: 'number', required: true },
              { field: '불량수량', type: 'number', default: 0 },
              { field: '작업시작시간', type: 'datetime', required: true },
              { field: '작업종료시간', type: 'datetime', required: true },
              { field: '작업시간', type: 'auto', formula: '종료-시작', unit: '분' },
            ]},
            { section: '불량정보', items: [
              { field: '불량유형', type: 'select', options: ['치수불량', '외관불량', '기능불량'], condition: '불량수량 > 0' },
              { field: '불량원인', type: 'textarea', condition: '불량수량 > 0' },
            ]},
            { section: 'PQC연동', items: [
              { field: 'PQC필요여부', type: 'auto', desc: '공정설정에 따라' },
              { field: 'PQC요청', type: 'button', label: '품질검사 요청', condition: 'PQC필요여부=Y' },
            ]},
          ],
          outputData: '작업실적 → 작업지시 진행률 업데이트 + 원가(노무비) 집계',
        },
        {
          id: 'step-5-4',
          order: 4,
          name: 'PQC (중간검사)',
          description: '공정 완료 후 품질검사',
          menu: '품질관리 > 중간검사(PQC)',
          screen: 'pqc-list → pqc-register',
          requiredBefore: ['작업실적', '품질기준'],
          usedBy: ['다음공정 진행', '부적합품관리'],
          fields: [
            { section: '검사정보', items: [
              { field: 'PQC번호', type: 'auto', format: 'PQC-YYMMDD-##', example: 'PQC-251218-01', required: true },
              { field: '검사일자', type: 'date', default: '오늘', required: true },
              { field: '작업지시번호', type: 'select', link: '작업지시번호(WO-...)', required: true },
              { field: '공정', type: 'auto' },
              { field: '검사수량', type: 'number', required: true },
            ]},
            { section: '검사항목 - 반복', items: [
              { field: '검사항목', type: 'auto', desc: '품질기준 로드' },
              { field: '규격값', type: 'auto' },
              { field: '측정값', type: 'number/text', required: true },
              { field: '판정', type: 'auto' },
            ]},
            { section: '최종판정', items: [
              { field: '최종판정', type: 'select', options: ['합격', '불합격'], required: true },
              { field: '합격수량', type: 'number' },
              { field: '불합격수량', type: 'number' },
              { field: '불합격처리', type: 'select', options: ['재작업', '폐기', '특채'], condition: '불합격 시' },
            ]},
          ],
          outputData: 'PQC 합격 → 다음공정 진행 가능, 불합격 → 부적합품 등록',
        },
      ],
    },

    // Phase 6: 출하 트랜잭션
    {
      id: 'phase-6',
      name: 'PHASE 6: 출하 트랜잭션 (출하→FQC→배송)',
      description: '생산 완료 제품의 출하 프로세스',
      order: 6,
      required: true,
      estimatedTime: '출하 시',
      steps: [
        {
          id: 'step-6-1',
          order: 1,
          name: '출하 등록',
          description: '수주 건 출하 등록',
          menu: '출고관리 > 출하관리',
          screen: 'shipment-list → shipment-register',
          requiredBefore: ['수주', '생산완료 (작업지시 100%)'],
          usedBy: ['FQC', '배송', '매출'],
          fields: [
            { section: '기본정보', items: [
              { field: '출하번호', type: 'auto', format: 'SL-YYMMDD-##', example: 'SL-251218-01', required: true },
              { field: '출하일자', type: 'date', default: '오늘', required: true },
              { field: '수주번호', type: 'select', link: '수주번호(SO-...)', required: true },
              { field: '거래처', type: 'auto', desc: '수주 연동' },
              { field: '현장', type: 'auto', desc: '수주 연동' },
            ]},
            { section: '출하품목', items: [
              { field: '품목', type: 'auto', desc: '수주 품목' },
              { field: '수주수량', type: 'auto' },
              { field: '기출하수량', type: 'auto' },
              { field: '잔여수량', type: 'auto', formula: '수주수량 - 기출하수량' },
              { field: '출하수량', type: 'number', required: true, validation: '<= 잔여수량' },
            ]},
            { section: '배송정보', items: [
              { field: '배송지', type: 'auto', desc: '현장주소 자동' },
              { field: '배송방법', type: 'select', options: ['직접배송', '택배', '화물'], required: true },
              { field: '운송업체', type: 'text', condition: '택배/화물' },
              { field: '출하예정일', type: 'date', required: true },
            ]},
            { section: 'FQC연동', items: [
              { field: 'FQC필요여부', type: 'auto', desc: '품목설정에 따라' },
              { field: 'FQC상태', type: 'select', options: ['대기', '검사중', '합격', '불합격'], default: '대기' },
            ]},
            { section: '상태', items: [
              { field: '출하상태', type: 'select', options: ['등록', 'FQC대기', '출하대기', '출하확정', '배송중', '배송완료'], default: '등록' },
            ]},
          ],
          outputData: '출하번호(SL-...) → FQC/배송/매출에서 참조',
        },
        {
          id: 'step-6-2',
          order: 2,
          name: 'FQC (제품검사)',
          description: '출하 전 최종 품질검사',
          menu: '품질관리 > 제품검사(FQC)',
          screen: 'fqc-list → fqc-register',
          requiredBefore: ['출하등록', '품질기준'],
          usedBy: ['출하확정'],
          fields: [
            { section: '검사정보', items: [
              { field: 'FQC번호', type: 'auto', format: 'FQC-YYMMDD-##', example: 'FQC-251218-01', required: true },
              { field: '검사일자', type: 'date', default: '오늘', required: true },
              { field: '출하번호', type: 'select', link: '출하번호(SL-...)', required: true },
              { field: '수주번호', type: 'auto', desc: '출하 연동' },
              { field: '품목', type: 'auto' },
              { field: '검사수량', type: 'number', required: true },
            ]},
            { section: '검사항목 - 반복', items: [
              { field: '검사항목', type: 'auto', desc: '품질기준 로드' },
              { field: '검사결과', type: 'text/number', required: true },
              { field: '판정', type: 'auto' },
            ]},
            { section: '최종판정', items: [
              { field: '최종판정', type: 'select', options: ['합격', '조건부합격', '불합격'], required: true },
              { field: '검사성적서발행', type: 'button', label: '검사성적서 출력' },
            ]},
          ],
          outputData: 'FQC 합격 → 출하상태=출하대기 변경',
        },
        {
          id: 'step-6-3',
          order: 3,
          name: '출하확정 및 배송',
          description: 'FQC 합격 후 출하 확정 및 배송 진행',
          menu: '출고관리 > 출하관리',
          screen: 'shipment-list → shipment-detail',
          requiredBefore: ['FQC합격'],
          usedBy: ['매출'],
          fields: [
            { section: '출하확정', items: [
              { field: '출하확정', type: 'button', label: '출하확정', desc: '상태=출하확정 변경' },
              { field: '거래명세서출력', type: 'button', label: '거래명세서 출력' },
              { field: '출고증출력', type: 'button', label: '출고증 출력' },
            ]},
            { section: '배송진행', items: [
              { field: '배송시작', type: 'button', label: '배송시작', desc: '상태=배송중 변경' },
              { field: '운송장번호', type: 'text', condition: '택배/화물' },
              { field: '배송완료', type: 'button', label: '배송완료', desc: '상태=배송완료 변경 → 매출자동생성' },
              { field: '배송완료일', type: 'date' },
            ]},
          ],
          outputData: '배송완료 → 수주 출하수량 업데이트 + 매출 자동생성',
        },
      ],
    },

    // Phase 7: 회계 트랜잭션 (매출→수금)
    {
      id: 'phase-7',
      name: 'PHASE 7: 회계 트랜잭션 (매출→세금계산서→수금)',
      description: '출하 완료 후 매출 확정 및 대금 회수',
      order: 7,
      required: true,
      estimatedTime: '매출/수금 발생 시',
      steps: [
        {
          id: 'step-7-1',
          order: 1,
          name: '매출 확정',
          description: '배송 완료 건 매출 처리',
          menu: '회계관리 > 매출관리',
          screen: 'sales-list → sales-detail',
          requiredBefore: ['출하(배송완료)'],
          usedBy: ['세금계산서', '수금'],
          fields: [
            { section: '매출정보 (자동생성)', items: [
              { field: '매출번호', type: 'auto', desc: '배송완료 시 자동생성' },
              { field: '매출일자', type: 'auto', value: '배송완료일' },
              { field: '출하번호', type: 'auto', link: '출하번호(SL-...)' },
              { field: '수주번호', type: 'auto', link: '수주번호(SO-...)' },
              { field: '거래처', type: 'auto' },
              { field: '공급가액', type: 'auto', desc: '출하금액' },
              { field: '부가세', type: 'auto', formula: '공급가액 x 10%' },
              { field: '합계금액', type: 'auto' },
            ]},
            { section: '매출처리', items: [
              { field: '매출확정', type: 'button', label: '매출확정', desc: '상태=매출확정 변경' },
              { field: '수금예정일', type: 'auto', formula: '매출일 + 결제조건일수' },
            ]},
          ],
          outputData: '매출확정 → 세금계산서 발행 가능 + 수금예정 생성',
        },
        {
          id: 'step-7-2',
          order: 2,
          name: '세금계산서 발행',
          description: '전자세금계산서 발행 및 국세청 전송',
          menu: '회계관리 > 매출관리',
          screen: 'sales-list → sales-detail',
          requiredBefore: ['매출확정'],
          usedBy: ['세무신고'],
          fields: [
            { section: '세금계산서 발행', items: [
              { field: '세금계산서번호', type: 'auto', desc: '국세청 발급번호' },
              { field: '발행일자', type: 'date', default: '오늘', required: true },
              { field: '발행유형', type: 'select', options: ['영수', '청구'], required: true },
              { field: '거래명세서발행', type: 'button', label: '거래명세서 발행' },
              { field: '세금계산서발행', type: 'button', label: '전자세금계산서 발행 → 국세청 전송' },
            ]},
            { section: '발행결과', items: [
              { field: '발행상태', type: 'auto', options: ['발행완료', '발행실패'] },
              { field: '국세청승인번호', type: 'auto', desc: '전송 성공 시' },
            ]},
          ],
          outputData: '세금계산서 발행 → 세무신고 연동',
        },
        {
          id: 'step-7-3',
          order: 3,
          name: '수금 등록',
          description: '대금 입금 확인 및 수금 처리',
          menu: '회계관리 > 수금관리',
          screen: 'collection-list → collection-register',
          requiredBefore: ['매출확정'],
          usedBy: ['금전출납부'],
          fields: [
            { section: '수금정보', items: [
              { field: '수금번호', type: 'auto', required: true },
              { field: '수금일자', type: 'date', default: '오늘', required: true },
              { field: '거래처', type: 'select', link: '거래처코드(CUS-###)', required: true },
              { field: '매출건선택', type: 'multiselect', desc: '해당 거래처 미수금 건 선택', required: true },
            ]},
            { section: '입금정보', items: [
              { field: '미수금잔액', type: 'auto', desc: '선택 매출 건 미수금 합계' },
              { field: '입금액', type: 'number', required: true },
              { field: '입금방법', type: 'select', options: ['현금', '계좌이체', '어음', '카드'], required: true },
              { field: '입금계좌', type: 'select', condition: '계좌이체' },
              { field: '어음만기일', type: 'date', condition: '어음' },
            ]},
            { section: '수금결과', items: [
              { field: '수금후잔액', type: 'auto', formula: '미수금잔액 - 입금액' },
              { field: '완납여부', type: 'auto', formula: '수금후잔액 = 0 → 완납' },
            ]},
          ],
          outputData: '수금등록 → 매출 미수금 차감 + 금전출납부 수입 기록',
        },
      ],
    },
  ],

  // 데이터 의존성 다이어그램 (요약)
  dependencyDiagram: {
    description: '데이터 등록 순서 및 참조 관계 요약',
    layers: [
      {
        layer: 1,
        name: '기준정보 (마스터)',
        items: ['공정기준', '품질기준', '품목기준(원자재)', '품목기준(제품)', 'BOM'],
        note: '가장 먼저 등록. 다른 데이터의 기초.',
      },
      {
        layer: 2,
        name: '거래처/현장',
        items: ['거래처(고객)', '거래처(공급처)', '현장'],
        note: '영업/구매의 기초. 거래처 등록 후 현장 등록.',
      },
      {
        layer: 3,
        name: '영업 트랜잭션',
        items: ['견적', '수주'],
        note: '견적→수주 순서. 수주가 생산/출하의 기준.',
        depends: ['거래처', '현장', '품목(제품)'],
      },
      {
        layer: 4,
        name: '자재 트랜잭션',
        items: ['발주', '입고', 'IQC', '재고'],
        note: '발주→입고→IQC→재고 순서. 생산에 필요한 자재 확보.',
        depends: ['거래처(공급처)', '품목(원자재)', '품질기준'],
      },
      {
        layer: 5,
        name: '생산 트랜잭션',
        items: ['작업지시', '자재출고', '작업실적', 'PQC'],
        note: '수주 기반으로 작업지시 → 자재출고 → 실적 → PQC.',
        depends: ['수주', '공정기준', 'BOM', '재고'],
      },
      {
        layer: 6,
        name: '출하 트랜잭션',
        items: ['출하', 'FQC', '배송'],
        note: '생산완료 후 출하 → FQC → 배송 순서.',
        depends: ['수주', '작업지시(완료)', '품질기준'],
      },
      {
        layer: 7,
        name: '회계 트랜잭션',
        items: ['매출', '세금계산서', '수금'],
        note: '배송완료 → 매출 → 세금계산서 → 수금 순서.',
        depends: ['출하(배송완료)', '거래처'],
      },
    ],
  },

  // 최소 필수 데이터 체크리스트
  minimumRequiredData: {
    description: 'MES 시스템 최소 운영을 위한 필수 등록 데이터',
    checklist: [
      { order: 1, category: '기준정보', item: '공정기준', minCount: '사용 공정 수만큼', example: '스크린, 슬랫, 절곡, 포밍, 포장 (5개)' },
      { order: 2, category: '기준정보', item: '품질기준', minCount: 'IQC/PQC/FQC 각 1개+', example: '원단IQC, 스크린PQC, 제품FQC' },
      { order: 3, category: '기준정보', item: '품목(원자재)', minCount: '사용 원자재 수만큼', example: '스크린원단, 철판, 볼트류 등' },
      { order: 4, category: '기준정보', item: '품목(제품)', minCount: '판매 제품 수만큼', example: '방화셔터, 방화문, 방연셔터 등' },
      { order: 5, category: '기준정보', item: 'BOM', minCount: '제품당 1개', example: '방화셔터3040 BOM' },
      { order: 6, category: '거래처', item: '거래처(고객)', minCount: '1개 이상', example: '(주)삼성건설' },
      { order: 7, category: '거래처', item: '거래처(공급처)', minCount: '1개 이상', example: '(주)한국철강' },
      { order: 8, category: '거래처', item: '현장', minCount: '거래처당 1개+', example: '강남역 삼성타워 신축공사' },
    ],
  },
};

// 담당부서 목록
export const departmentList = [
  { id: 'sales', name: '판매', icon: 'Briefcase', color: 'blue' },
  { id: 'production', name: '생산', icon: 'Factory', color: 'green' },
  { id: 'quality', name: '품질', icon: 'ShieldCheck', color: 'purple' },
  { id: 'materials', name: '자재', icon: 'Package', color: 'cyan' },
  { id: 'shipment', name: '출고', icon: 'Truck', color: 'orange' },
  { id: 'accounting', name: '회계', icon: 'Calculator', color: 'red' },
];

// 담당부서별 플로우 가져오기
export const getDepartmentFlows = (deptId) => {
  return departmentFlows[deptId] || null;
};

export default {
  mainUserFlows,
  menuFlows,
  screenFlows,
  flowCategories,
  allScreens,
  departmentFlows,
  departmentList,
  dataRegistrationFlow,
  getFlowsByCategory,
  getFlowsContainingScreen,
  getMenuFlow,
  getScreenActions,
  findFlowPath,
  getScreensByGroup,
  getDepartmentFlows,
};
