// 화면별 기능정의서 템플릿
// 각 화면 ID에 대해 미리 정의된 기능 뱃지 정보

/**
 * ═══════════════════════════════════════════════════════════════════
 * 변경 이력 (Change Log)
 * ═══════════════════════════════════════════════════════════════════
 *
 * [2025-12-15] 수주관리 목록 컬럼 정리
 * - 변경 내용: '출하상태' 컬럼 제거
 * - 변경 이유: '상태' 컬럼과 정보 중복
 *   - '상태' 컬럼: 수주확정 → 생산중 → 생산완료 → 출하완료 (전체 흐름)
 *   - '출하진행' 컬럼: 프로그레스 바로 출하 완료 비율 표시 (0% ~ 100%)
 *   - '출하상태' 컬럼: '상태'와 중복되는 정보 제공
 * - 변경 후 컬럼: 번호, 로트번호, 견적번호, 발주처, 현장명, 상태, 작업지시, 출고예정일, 배송방식, 출하진행
 * - 관련 커밋: refactor: 수주관리 목록에서 중복 컬럼 '출하상태' 제거
 *
 * ═══════════════════════════════════════════════════════════════════
 */

const featureDefinitions = {
  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 거래처 (A0)
  // ═══════════════════════════════════════════════════════════════════
  'acc-customer-list': {
    screenId: 'A0-1',
    screenName: '거래처 목록',
    badges: [
      {
        id: 'A0-1-001',
        number: 1,
        label: '검색 필터',
        color: 'blue',
        position: { x: 15, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '헤더 영역',
          interaction: '입력',
          style: '검색 아이콘 포함 입력 필드',
        },
        funcInfo: {
          purpose: '거래처 목록 필터링',
          trigger: '텍스트 입력 또는 Enter 키',
          process: '입력된 키워드로 거래처명, 사업자번호, 대표자명 검색',
          result: '필터링된 거래처 목록 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers',
          method: 'GET',
          fields: 'keyword, searchType',
          relatedTable: 'customers',
        },
      },
      {
        id: 'A0-1-002',
        number: 2,
        label: '거래처 등록 버튼',
        color: 'green',
        position: { x: 85, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼 (검정 배경)',
        },
        funcInfo: {
          purpose: '신규 거래처 등록 화면 이동',
          trigger: '버튼 클릭',
          process: '거래처 등록 폼 화면으로 라우팅',
          result: '등록 화면 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'A0-1-003',
        number: 3,
        label: '거래처 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 45 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '행 클릭 시 하이라이트',
        },
        funcInfo: {
          purpose: '거래처 목록 조회 및 선택',
          trigger: '화면 진입 시 자동 로드',
          process: 'API 호출하여 거래처 목록 가져오기',
          result: '거래처 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers',
          method: 'GET',
          fields: 'id, customerName, businessNo, ceoName, tel, email, status',
          relatedTable: 'customers',
        },
      },
      {
        id: 'A0-1-004',
        number: 4,
        label: '상세보기 버튼',
        color: 'blue',
        position: { x: 90, y: 45 },
        uiInfo: {
          componentType: '버튼',
          position: '테이블 행 내',
          interaction: '클릭',
          style: '아이콘 버튼',
        },
        funcInfo: {
          purpose: '선택한 거래처 상세 정보 조회',
          trigger: '버튼 클릭',
          process: '해당 거래처 ID로 상세 화면 이동',
          result: '거래처 상세 화면 표시',
          validation: '',
        },
        dataInfo: {
          source: 'Props 전달',
          endpoint: '',
          method: '',
          fields: 'customerId',
          relatedTable: '',
        },
      },
      {
        id: 'A0-1-005',
        number: 5,
        label: '페이지네이션',
        color: 'gray',
        position: { x: 50, y: 92 },
        uiInfo: {
          componentType: '버튼',
          position: '테이블 하단',
          interaction: '클릭',
          style: '페이지 번호 버튼 그룹',
        },
        funcInfo: {
          purpose: '목록 페이지 이동',
          trigger: '페이지 번호 클릭',
          process: '해당 페이지 데이터 조회',
          result: '선택한 페이지의 거래처 목록 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers',
          method: 'GET',
          fields: 'page, pageSize',
          relatedTable: 'customers',
        },
      },
    ],
  },

  'acc-customer-register': {
    screenId: 'A0-2',
    screenName: '거래처 등록',
    badges: [
      {
        id: 'A0-2-001',
        number: 1,
        label: '사업자번호 입력',
        color: 'red',
        position: { x: 30, y: 18 },
        uiInfo: {
          componentType: '입력필드',
          position: '기본정보 섹션',
          interaction: '입력',
          style: '필수 입력 표시 (*)',
        },
        funcInfo: {
          purpose: '사업자등록번호 입력',
          trigger: '입력 완료 후 blur 이벤트',
          process: '형식 검증 및 중복 체크',
          result: '유효성 검사 결과 표시',
          validation: '10자리 숫자, 중복 체크',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers/check-duplicate',
          method: 'POST',
          fields: 'businessNo',
          relatedTable: 'customers',
        },
      },
      {
        id: 'A0-2-002',
        number: 2,
        label: '거래처명 입력',
        color: 'red',
        position: { x: 70, y: 18 },
        uiInfo: {
          componentType: '입력필드',
          position: '기본정보 섹션',
          interaction: '입력',
          style: '필수 입력 표시 (*)',
        },
        funcInfo: {
          purpose: '거래처 상호명 입력',
          trigger: '텍스트 입력',
          process: '상태 업데이트',
          result: '입력값 표시',
          validation: '필수, 최대 100자',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'customerName',
          relatedTable: 'customers',
        },
      },
      {
        id: 'A0-2-003',
        number: 3,
        label: '거래처유형 선택',
        color: 'blue',
        position: { x: 30, y: 28 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '드롭다운',
        },
        funcInfo: {
          purpose: '거래처 유형 분류',
          trigger: '옵션 선택',
          process: '선택값 상태 업데이트',
          result: '선택된 유형 표시',
          validation: '',
        },
        dataInfo: {
          source: '하드코딩',
          endpoint: '',
          method: '',
          fields: 'customerType',
          relatedTable: 'code_customer_type',
        },
      },
      {
        id: 'A0-2-004',
        number: 4,
        label: '저장 버튼',
        color: 'green',
        position: { x: 45, y: 88 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '거래처 정보 저장',
          trigger: '버튼 클릭',
          process: '유효성 검사 후 API 호출',
          result: '성공 시 목록으로 이동, 실패 시 오류 메시지',
          validation: '필수값 체크, 형식 검증',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers',
          method: 'POST',
          fields: 'customerName, businessNo, ceoName, tel, email, address, ...',
          relatedTable: 'customers',
        },
      },
      {
        id: 'A0-2-005',
        number: 5,
        label: '취소 버튼',
        color: 'gray',
        position: { x: 55, y: 88 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Secondary 버튼 (outline)',
        },
        funcInfo: {
          purpose: '등록 취소 및 목록 이동',
          trigger: '버튼 클릭',
          process: '변경사항 확인 후 목록 이동',
          result: '목록 화면으로 이동',
          validation: '변경사항 있을 시 확인 다이얼로그',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 매출 (A1)
  // ═══════════════════════════════════════════════════════════════════
  'sales-list': {
    screenId: 'A1',
    screenName: '매출 목록',
    badges: [
      {
        id: 'A1-001',
        number: 1,
        label: '기간 검색',
        color: 'blue',
        position: { x: 20, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '검색 영역',
          interaction: '선택',
          style: 'DatePicker',
        },
        funcInfo: {
          purpose: '매출 조회 기간 설정',
          trigger: '날짜 선택',
          process: '시작일~종료일 기간 내 매출 조회',
          result: '해당 기간 매출 목록 표시',
          validation: '시작일 <= 종료일',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales',
          method: 'GET',
          fields: 'startDate, endDate',
          relatedTable: 'sales',
        },
      },
      {
        id: 'A1-002',
        number: 2,
        label: '거래처 필터',
        color: 'blue',
        position: { x: 50, y: 8 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '검색 영역',
          interaction: '선택',
          style: '검색 가능 드롭다운',
        },
        funcInfo: {
          purpose: '특정 거래처 매출만 조회',
          trigger: '거래처 선택',
          process: '선택된 거래처의 매출만 필터링',
          result: '필터링된 매출 목록',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales',
          method: 'GET',
          fields: 'customerId',
          relatedTable: 'sales, customers',
        },
      },
      {
        id: 'A1-003',
        number: 3,
        label: '매출 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 45 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '정렬 가능 테이블',
        },
        funcInfo: {
          purpose: '매출 내역 조회',
          trigger: '조건 검색 후',
          process: '검색 조건에 맞는 매출 데이터 조회',
          result: '매출 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales',
          method: 'GET',
          fields: 'salesNo, salesDate, customerName, amount, taxAmount, totalAmount, status',
          relatedTable: 'sales',
        },
      },
      {
        id: 'A1-004',
        number: 4,
        label: '거래명세서 발행',
        color: 'orange',
        position: { x: 75, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '액션 버튼 영역',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '선택 매출건 거래명세서 발행',
          trigger: '체크박스 선택 후 버튼 클릭',
          process: '선택된 매출건으로 거래명세서 생성',
          result: '거래명세서 미리보기 모달',
          validation: '최소 1건 이상 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales/statement',
          method: 'POST',
          fields: 'salesIds[]',
          relatedTable: 'sales, sales_statement',
        },
      },
      {
        id: 'A1-005',
        number: 5,
        label: '세금계산서 발행',
        color: 'orange',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '액션 버튼 영역',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '선택 매출건 세금계산서 발행',
          trigger: '체크박스 선택 후 버튼 클릭',
          process: '선택된 매출건으로 세금계산서 데이터 생성',
          result: '세금계산서 발행 모달',
          validation: '최소 1건 이상 선택, 거래처 동일',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales/tax-invoice',
          method: 'POST',
          fields: 'salesIds[]',
          relatedTable: 'sales, tax_invoice',
        },
      },
    ],
  },

  'sales-detail': {
    screenId: 'A1-1',
    screenName: '매출 상세',
    badges: [
      {
        id: 'A1-1-001',
        number: 1,
        label: '매출 기본정보',
        color: 'purple',
        position: { x: 50, y: 15 },
        uiInfo: {
          componentType: '카드',
          position: '상단 영역',
          interaction: '조회',
          style: '정보 카드',
        },
        funcInfo: {
          purpose: '매출 기본 정보 표시',
          trigger: '화면 진입 시',
          process: 'URL 파라미터의 매출ID로 조회',
          result: '매출 기본정보 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales/{id}',
          method: 'GET',
          fields: 'salesNo, salesDate, customerName, amount, taxAmount, totalAmount',
          relatedTable: 'sales',
        },
      },
      {
        id: 'A1-1-002',
        number: 2,
        label: '매출 품목 목록',
        color: 'blue',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '중앙 영역',
          interaction: '조회',
          style: '상세 테이블',
        },
        funcInfo: {
          purpose: '매출 품목 내역 조회',
          trigger: '화면 진입 시',
          process: '해당 매출의 품목 목록 조회',
          result: '품목 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/sales/{id}/items',
          method: 'GET',
          fields: 'itemCode, itemName, spec, qty, unitPrice, amount',
          relatedTable: 'sales_items',
        },
      },
      {
        id: 'A1-1-003',
        number: 3,
        label: '수정 버튼',
        color: 'green',
        position: { x: 85, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '매출 정보 수정',
          trigger: '버튼 클릭',
          process: '수정 화면으로 이동',
          result: '수정 폼 표시',
          validation: '수정 가능 상태 체크',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'salesId',
          relatedTable: '',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 매입 (A2)
  // ═══════════════════════════════════════════════════════════════════
  'purchase-list': {
    screenId: 'A2',
    screenName: '매입 목록',
    badges: [
      {
        id: 'A2-001',
        number: 1,
        label: '기간 검색',
        color: 'blue',
        position: { x: 20, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '검색 영역',
          interaction: '선택',
          style: 'DatePicker',
        },
        funcInfo: {
          purpose: '매입 조회 기간 설정',
          trigger: '날짜 선택',
          process: '시작일~종료일 기간 내 매입 조회',
          result: '해당 기간 매입 목록 표시',
          validation: '시작일 <= 종료일',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/purchases',
          method: 'GET',
          fields: 'startDate, endDate',
          relatedTable: 'purchases',
        },
      },
      {
        id: 'A2-002',
        number: 2,
        label: '매입 등록 버튼',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 매입 등록 화면 이동',
          trigger: '버튼 클릭',
          process: '매입 등록 폼 화면으로 라우팅',
          result: '등록 화면 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'A2-003',
        number: 3,
        label: '매입 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 45 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '정렬 가능 테이블',
        },
        funcInfo: {
          purpose: '매입 내역 조회',
          trigger: '조건 검색 후',
          process: '검색 조건에 맞는 매입 데이터 조회',
          result: '매입 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/purchases',
          method: 'GET',
          fields: 'purchaseNo, purchaseDate, supplierName, amount, taxAmount, totalAmount, status',
          relatedTable: 'purchases',
        },
      },
      {
        id: 'A2-004',
        number: 4,
        label: '품의서 발행',
        color: 'orange',
        position: { x: 65, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '액션 버튼 영역',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '선택 매입건 품의서 발행',
          trigger: '체크박스 선택 후 버튼 클릭',
          process: '선택된 매입건으로 품의서 생성',
          result: '품의서 미리보기 모달',
          validation: '최소 1건 이상 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/purchases/approval-request',
          method: 'POST',
          fields: 'purchaseIds[]',
          relatedTable: 'purchases, approval_request',
        },
      },
    ],
  },

  'purchase-register': {
    screenId: 'A2-1',
    screenName: '매입 등록',
    badges: [
      {
        id: 'A2-1-001',
        number: 1,
        label: '거래처 선택',
        color: 'red',
        position: { x: 30, y: 15 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '검색 가능 드롭다운 (필수)',
        },
        funcInfo: {
          purpose: '매입 거래처 선택',
          trigger: '드롭다운 선택',
          process: '거래처 목록에서 선택',
          result: '선택된 거래처 정보 표시',
          validation: '필수 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/suppliers',
          method: 'GET',
          fields: 'supplierId, supplierName',
          relatedTable: 'suppliers',
        },
      },
      {
        id: 'A2-1-002',
        number: 2,
        label: '매입일자',
        color: 'red',
        position: { x: 70, y: 15 },
        uiInfo: {
          componentType: '입력필드',
          position: '기본정보 섹션',
          interaction: '선택',
          style: 'DatePicker (필수)',
        },
        funcInfo: {
          purpose: '매입 일자 입력',
          trigger: '날짜 선택',
          process: '선택된 날짜 상태 업데이트',
          result: '선택된 날짜 표시',
          validation: '필수, 미래 날짜 불가',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'purchaseDate',
          relatedTable: 'purchases',
        },
      },
      {
        id: 'A2-1-003',
        number: 3,
        label: '품목 추가 버튼',
        color: 'blue',
        position: { x: 88, y: 35 },
        uiInfo: {
          componentType: '버튼',
          position: '품목 섹션 우측',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '매입 품목 행 추가',
          trigger: '버튼 클릭',
          process: '빈 품목 행 추가',
          result: '새 품목 입력 행 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'A2-1-004',
        number: 4,
        label: '품목 입력 테이블',
        color: 'purple',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '품목 섹션',
          interaction: '입력',
          style: '편집 가능 테이블',
        },
        funcInfo: {
          purpose: '매입 품목 정보 입력',
          trigger: '셀 클릭 후 입력',
          process: '품목코드, 수량, 단가 입력',
          result: '금액 자동 계산',
          validation: '품목코드 유효성, 수량/단가 숫자',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'itemCode, qty, unitPrice, amount',
          relatedTable: 'purchase_items',
        },
      },
      {
        id: 'A2-1-005',
        number: 5,
        label: '저장 버튼',
        color: 'green',
        position: { x: 45, y: 88 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '매입 정보 저장',
          trigger: '버튼 클릭',
          process: '유효성 검사 후 API 호출',
          result: '성공 시 목록으로 이동',
          validation: '필수값 체크, 품목 1개 이상',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/purchases',
          method: 'POST',
          fields: 'supplierId, purchaseDate, items[], ...',
          relatedTable: 'purchases, purchase_items',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 금전출납부 (A3)
  // ═══════════════════════════════════════════════════════════════════
  'cashbook-list': {
    screenId: 'A3',
    screenName: '금전출납부 목록',
    badges: [
      {
        id: 'A3-001',
        number: 1,
        label: '월별 조회',
        color: 'blue',
        position: { x: 15, y: 8 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '검색 영역',
          interaction: '선택',
          style: '월 선택 드롭다운',
        },
        funcInfo: {
          purpose: '조회 월 선택',
          trigger: '월 선택',
          process: '선택 월의 출납 내역 조회',
          result: '해당 월 출납 목록 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cashbook',
          method: 'GET',
          fields: 'year, month',
          relatedTable: 'cashbook',
        },
      },
      {
        id: 'A3-002',
        number: 2,
        label: '출납 등록 버튼',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 출납 등록',
          trigger: '버튼 클릭',
          process: '출납 등록 모달/화면 열기',
          result: '등록 폼 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'A3-003',
        number: 3,
        label: '입출금 합계 카드',
        color: 'purple',
        position: { x: 50, y: 18 },
        uiInfo: {
          componentType: '카드',
          position: '요약 영역',
          interaction: '조회',
          style: '합계 표시 카드',
        },
        funcInfo: {
          purpose: '월간 입출금 합계 표시',
          trigger: '월 선택 시',
          process: '선택 월의 입금/출금 합계 계산',
          result: '입금합계, 출금합계, 잔액 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cashbook/summary',
          method: 'GET',
          fields: 'totalIncome, totalExpense, balance',
          relatedTable: 'cashbook',
        },
      },
      {
        id: 'A3-004',
        number: 4,
        label: '출납 목록 테이블',
        color: 'blue',
        position: { x: 50, y: 55 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '입출금 구분 표시',
        },
        funcInfo: {
          purpose: '출납 내역 조회',
          trigger: '조건 검색 후',
          process: '검색 조건에 맞는 출납 데이터 조회',
          result: '출납 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cashbook',
          method: 'GET',
          fields: 'transactionDate, type, category, description, amount, balance',
          relatedTable: 'cashbook',
        },
      },
    ],
  },

  'cashbook-register': {
    screenId: 'A3-1',
    screenName: '금전출납 등록',
    badges: [
      {
        id: 'A3-1-001',
        number: 1,
        label: '입출금 유형',
        color: 'red',
        position: { x: 30, y: 18 },
        uiInfo: {
          componentType: '라디오',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '라디오 버튼 그룹',
        },
        funcInfo: {
          purpose: '입금/출금 유형 선택',
          trigger: '라디오 선택',
          process: '선택 유형에 따라 폼 변경',
          result: '유형별 입력 필드 표시',
          validation: '필수 선택',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'transactionType',
          relatedTable: 'cashbook',
        },
      },
      {
        id: 'A3-1-002',
        number: 2,
        label: '거래일자',
        color: 'red',
        position: { x: 70, y: 18 },
        uiInfo: {
          componentType: '입력필드',
          position: '기본정보 섹션',
          interaction: '선택',
          style: 'DatePicker (필수)',
        },
        funcInfo: {
          purpose: '거래 일자 입력',
          trigger: '날짜 선택',
          process: '선택된 날짜 상태 업데이트',
          result: '선택된 날짜 표시',
          validation: '필수',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'transactionDate',
          relatedTable: 'cashbook',
        },
      },
      {
        id: 'A3-1-003',
        number: 3,
        label: '금액 입력',
        color: 'red',
        position: { x: 30, y: 38 },
        uiInfo: {
          componentType: '입력필드',
          position: '금액 섹션',
          interaction: '입력',
          style: '숫자 입력 필드 (필수)',
        },
        funcInfo: {
          purpose: '거래 금액 입력',
          trigger: '금액 입력',
          process: '숫자 형식 검증 및 천단위 콤마 표시',
          result: '입력 금액 표시',
          validation: '필수, 양수만',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'amount',
          relatedTable: 'cashbook',
        },
      },
      {
        id: 'A3-1-004',
        number: 4,
        label: '저장 버튼',
        color: 'green',
        position: { x: 50, y: 88 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '출납 정보 저장',
          trigger: '버튼 클릭',
          process: '유효성 검사 후 API 호출',
          result: '성공 시 목록으로 이동',
          validation: '필수값 체크',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cashbook',
          method: 'POST',
          fields: 'transactionType, transactionDate, amount, category, description',
          relatedTable: 'cashbook',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 수금 (A4)
  // ═══════════════════════════════════════════════════════════════════
  'collection-list': {
    screenId: 'A4',
    screenName: '수금 목록',
    badges: [
      {
        id: 'A4-001',
        number: 1,
        label: '미수금 조회 탭',
        color: 'blue',
        position: { x: 15, y: 8 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '미수금 목록 조회',
          trigger: '탭 클릭',
          process: '미수금 상태 데이터 필터링',
          result: '미수금 목록 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/collections',
          method: 'GET',
          fields: 'status=unpaid',
          relatedTable: 'collections',
        },
      },
      {
        id: 'A4-002',
        number: 2,
        label: '수금 등록 버튼',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 수금 등록',
          trigger: '버튼 클릭',
          process: '수금 등록 화면으로 이동',
          result: '등록 폼 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'A4-003',
        number: 3,
        label: '수금 현황 요약',
        color: 'purple',
        position: { x: 50, y: 18 },
        uiInfo: {
          componentType: '카드',
          position: '요약 영역',
          interaction: '조회',
          style: '합계 카드',
        },
        funcInfo: {
          purpose: '수금 현황 요약 표시',
          trigger: '화면 진입 시',
          process: '전체 미수금, 금월 수금액 계산',
          result: '요약 정보 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/collections/summary',
          method: 'GET',
          fields: 'totalReceivable, monthlyCollection, overdueAmount',
          relatedTable: 'collections',
        },
      },
      {
        id: 'A4-004',
        number: 4,
        label: '수금 목록 테이블',
        color: 'blue',
        position: { x: 50, y: 55 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '상태 표시 포함 테이블',
        },
        funcInfo: {
          purpose: '수금 내역 조회',
          trigger: '조건 검색 후',
          process: '검색 조건에 맞는 수금 데이터 조회',
          result: '수금 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/collections',
          method: 'GET',
          fields: 'collectionNo, customerName, salesAmount, collectedAmount, remainAmount, dueDate, status',
          relatedTable: 'collections',
        },
      },
    ],
  },

  'collection-register': {
    screenId: 'A4-1',
    screenName: '수금 등록',
    badges: [
      {
        id: 'A4-1-001',
        number: 1,
        label: '거래처 선택',
        color: 'red',
        position: { x: 30, y: 15 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '검색 가능 드롭다운 (필수)',
        },
        funcInfo: {
          purpose: '수금 대상 거래처 선택',
          trigger: '드롭다운 선택',
          process: '선택 시 해당 거래처 미수금 조회',
          result: '거래처 미수금 목록 표시',
          validation: '필수 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers/with-receivable',
          method: 'GET',
          fields: 'customerId, customerName, receivableAmount',
          relatedTable: 'customers, collections',
        },
      },
      {
        id: 'A4-1-002',
        number: 2,
        label: '미수금 선택 테이블',
        color: 'purple',
        position: { x: 50, y: 40 },
        uiInfo: {
          componentType: '테이블',
          position: '미수금 섹션',
          interaction: '선택',
          style: '체크박스 테이블',
        },
        funcInfo: {
          purpose: '수금 대상 미수금 선택',
          trigger: '체크박스 선택',
          process: '선택된 미수금 금액 합산',
          result: '선택 금액 합계 표시',
          validation: '최소 1건 이상 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers/{id}/receivables',
          method: 'GET',
          fields: 'salesNo, salesDate, amount, remainAmount',
          relatedTable: 'collections',
        },
      },
      {
        id: 'A4-1-003',
        number: 3,
        label: '수금액 입력',
        color: 'red',
        position: { x: 30, y: 70 },
        uiInfo: {
          componentType: '입력필드',
          position: '수금정보 섹션',
          interaction: '입력',
          style: '숫자 입력 필드 (필수)',
        },
        funcInfo: {
          purpose: '실제 수금 금액 입력',
          trigger: '금액 입력',
          process: '선택 미수금 내에서 배분',
          result: '입력 금액 표시',
          validation: '필수, 미수금 이하',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'collectionAmount',
          relatedTable: 'collections',
        },
      },
      {
        id: 'A4-1-004',
        number: 4,
        label: '저장 버튼',
        color: 'green',
        position: { x: 50, y: 88 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '수금 정보 저장',
          trigger: '버튼 클릭',
          process: '유효성 검사 후 API 호출',
          result: '성공 시 목록으로 이동',
          validation: '필수값 체크, 금액 유효성',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/collections',
          method: 'POST',
          fields: 'customerId, receivableIds[], collectionAmount, collectionDate',
          relatedTable: 'collections',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 회계관리 - 원가 (A5)
  // ═══════════════════════════════════════════════════════════════════
  'cost-list': {
    screenId: 'A5',
    screenName: '원가 목록',
    badges: [
      {
        id: 'A5-001',
        number: 1,
        label: '기간 검색',
        color: 'blue',
        position: { x: 20, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '검색 영역',
          interaction: '선택',
          style: 'DatePicker',
        },
        funcInfo: {
          purpose: '원가 조회 기간 설정',
          trigger: '날짜 선택',
          process: '시작일~종료일 기간 내 원가 조회',
          result: '해당 기간 원가 목록 표시',
          validation: '시작일 <= 종료일',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis',
          method: 'GET',
          fields: 'startDate, endDate',
          relatedTable: 'cost_analysis',
        },
      },
      {
        id: 'A5-002',
        number: 2,
        label: '현장 필터',
        color: 'blue',
        position: { x: 50, y: 8 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '검색 영역',
          interaction: '선택',
          style: '검색 가능 드롭다운',
        },
        funcInfo: {
          purpose: '특정 현장 원가만 조회',
          trigger: '현장 선택',
          process: '선택된 현장의 원가만 필터링',
          result: '필터링된 원가 목록',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis',
          method: 'GET',
          fields: 'siteId',
          relatedTable: 'cost_analysis, sites',
        },
      },
      {
        id: 'A5-003',
        number: 3,
        label: '원가 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 45 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '정렬 가능 테이블',
        },
        funcInfo: {
          purpose: '원가 내역 조회',
          trigger: '조건 검색 후',
          process: '검색 조건에 맞는 원가 데이터 조회',
          result: '원가 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis',
          method: 'GET',
          fields: 'siteCode, siteName, materialCost, laborCost, outsourcingCost, expenseCost, totalCost, marginRate',
          relatedTable: 'cost_analysis',
        },
      },
      {
        id: 'A5-004',
        number: 4,
        label: '원가분석 리포트',
        color: 'orange',
        position: { x: 85, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '액션 버튼 영역',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '원가분석 리포트 출력',
          trigger: '버튼 클릭',
          process: '선택된 조건으로 리포트 생성',
          result: '리포트 미리보기/다운로드',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/report',
          method: 'POST',
          fields: 'startDate, endDate, siteId',
          relatedTable: 'cost_analysis',
        },
      },
    ],
  },

  'cost-detail': {
    screenId: 'A5-1',
    screenName: '원가 상세',
    badges: [
      {
        id: 'A5-1-001',
        number: 1,
        label: '원가 요약 탭',
        color: 'blue',
        position: { x: 12, y: 15 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '원가 요약 정보 표시',
          trigger: '탭 클릭',
          process: '해당 현장의 원가 요약 조회',
          result: '원가 요약 카드 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/summary',
          method: 'GET',
          fields: 'totalCost, marginRate, costBreakdown',
          relatedTable: 'cost_analysis',
        },
      },
      {
        id: 'A5-1-002',
        number: 2,
        label: '자재비 탭',
        color: 'blue',
        position: { x: 27, y: 15 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '자재비 상세 조회',
          trigger: '탭 클릭',
          process: '해당 현장의 자재비 내역 조회',
          result: '자재비 목록 테이블 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/material',
          method: 'GET',
          fields: 'itemCode, itemName, qty, unitPrice, amount',
          relatedTable: 'cost_material',
        },
      },
      {
        id: 'A5-1-003',
        number: 3,
        label: '외주비 탭',
        color: 'blue',
        position: { x: 42, y: 15 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '외주비 상세 조회',
          trigger: '탭 클릭',
          process: '해당 현장의 외주비 내역 조회',
          result: '외주비 목록 테이블 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/outsourcing',
          method: 'GET',
          fields: 'supplierName, workType, amount',
          relatedTable: 'cost_outsourcing',
        },
      },
      {
        id: 'A5-1-004',
        number: 4,
        label: '인건비 탭',
        color: 'blue',
        position: { x: 57, y: 15 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '인건비 상세 조회',
          trigger: '탭 클릭',
          process: '해당 현장의 인건비 내역 조회',
          result: '인건비 목록 테이블 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/labor',
          method: 'GET',
          fields: 'workerName, workDays, dailyRate, amount',
          relatedTable: 'cost_labor',
        },
      },
      {
        id: 'A5-1-005',
        number: 5,
        label: '경비 탭',
        color: 'blue',
        position: { x: 72, y: 15 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 버튼',
        },
        funcInfo: {
          purpose: '경비 상세 조회',
          trigger: '탭 클릭',
          process: '해당 현장의 경비 내역 조회',
          result: '경비 목록 테이블 표시',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/expense',
          method: 'GET',
          fields: 'expenseType, description, amount',
          relatedTable: 'cost_expense',
        },
      },
      {
        id: 'A5-1-006',
        number: 6,
        label: '원가 상세 테이블',
        color: 'purple',
        position: { x: 50, y: 55 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '조회',
          style: '상세 테이블',
        },
        funcInfo: {
          purpose: '선택 탭에 따른 원가 상세 조회',
          trigger: '탭 선택 시',
          process: '선택된 탭의 상세 데이터 조회',
          result: '상세 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/cost-analysis/{id}/{type}',
          method: 'GET',
          fields: '탭별 상이',
          relatedTable: 'cost_*',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 판매관리 - 견적
  // ═══════════════════════════════════════════════════════════════════
  'quote-list': {
    screenId: 'S1',
    screenName: '견적 목록',
    badges: [
      {
        id: 'S1-001',
        number: 1,
        label: '검색 필터',
        color: 'blue',
        position: { x: 15, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '검색 영역',
          interaction: '입력',
          style: '검색 아이콘 포함',
        },
        funcInfo: {
          purpose: '견적 목록 검색',
          trigger: '입력 후 Enter',
          process: '견적번호, 거래처명, 현장명으로 검색',
          result: '필터링된 견적 목록',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/quotes',
          method: 'GET',
          fields: 'keyword',
          relatedTable: 'quotes',
        },
      },
      {
        id: 'S1-002',
        number: 2,
        label: '견적 등록 버튼',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 견적 등록',
          trigger: '버튼 클릭',
          process: '견적 등록 화면으로 이동',
          result: '등록 폼 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'S1-003',
        number: 3,
        label: '견적 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '상태 표시 포함',
        },
        funcInfo: {
          purpose: '견적 목록 조회',
          trigger: '화면 진입 시',
          process: 'API 호출하여 견적 목록 가져오기',
          result: '견적 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/quotes',
          method: 'GET',
          fields: 'quoteNo, quoteDate, customerName, siteName, totalAmount, status',
          relatedTable: 'quotes',
        },
      },
    ],
  },

  'quote-register': {
    screenId: 'S1-1',
    screenName: '견적 등록',
    badges: [
      {
        id: 'S1-1-001',
        number: 1,
        label: '거래처 선택',
        color: 'red',
        position: { x: 25, y: 12 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '검색 가능 드롭다운 (필수)',
        },
        funcInfo: {
          purpose: '견적 대상 거래처 선택',
          trigger: '드롭다운 선택',
          process: '거래처 목록에서 선택',
          result: '선택된 거래처 정보 표시',
          validation: '필수 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers',
          method: 'GET',
          fields: 'customerId, customerName',
          relatedTable: 'customers',
        },
      },
      {
        id: 'S1-1-002',
        number: 2,
        label: '현장 선택',
        color: 'red',
        position: { x: 50, y: 12 },
        uiInfo: {
          componentType: '셀렉트박스',
          position: '기본정보 섹션',
          interaction: '선택',
          style: '검색 가능 드롭다운 (필수)',
        },
        funcInfo: {
          purpose: '견적 대상 현장 선택',
          trigger: '거래처 선택 후 활성화',
          process: '선택 거래처의 현장 목록 조회',
          result: '현장 목록 표시',
          validation: '필수 선택',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/customers/{id}/sites',
          method: 'GET',
          fields: 'siteId, siteName',
          relatedTable: 'sites',
        },
      },
      {
        id: 'S1-1-003',
        number: 3,
        label: '견적일자',
        color: 'blue',
        position: { x: 75, y: 12 },
        uiInfo: {
          componentType: '입력필드',
          position: '기본정보 섹션',
          interaction: '선택',
          style: 'DatePicker',
        },
        funcInfo: {
          purpose: '견적 일자 설정',
          trigger: '날짜 선택',
          process: '선택된 날짜 상태 업데이트',
          result: '선택된 날짜 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'quoteDate',
          relatedTable: 'quotes',
        },
      },
      {
        id: 'S1-1-004',
        number: 4,
        label: '품목 추가',
        color: 'blue',
        position: { x: 88, y: 30 },
        uiInfo: {
          componentType: '버튼',
          position: '품목 섹션',
          interaction: '클릭',
          style: 'Secondary 버튼',
        },
        funcInfo: {
          purpose: '견적 품목 추가',
          trigger: '버튼 클릭',
          process: '품목 선택 모달 열기',
          result: '품목 선택 후 행 추가',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'S1-1-005',
        number: 5,
        label: '품목 테이블',
        color: 'purple',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '품목 섹션',
          interaction: '입력',
          style: '편집 가능 테이블',
        },
        funcInfo: {
          purpose: '견적 품목 정보 입력',
          trigger: '셀 클릭 후 입력',
          process: '수량, 단가, 할인율 입력',
          result: '금액 자동 계산',
          validation: '수량/단가 필수',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: 'itemCode, itemName, spec, qty, unitPrice, discountRate, amount',
          relatedTable: 'quote_items',
        },
      },
      {
        id: 'S1-1-006',
        number: 6,
        label: '합계 영역',
        color: 'gray',
        position: { x: 80, y: 75 },
        uiInfo: {
          componentType: '레이블',
          position: '합계 영역',
          interaction: '조회',
          style: '금액 표시',
        },
        funcInfo: {
          purpose: '견적 합계 금액 표시',
          trigger: '품목 변경 시 자동',
          process: '공급가액, 세액, 총액 계산',
          result: '합계 금액 표시',
          validation: '',
        },
        dataInfo: {
          source: '계산값',
          endpoint: '',
          method: '',
          fields: 'supplyAmount, taxAmount, totalAmount',
          relatedTable: '',
        },
      },
      {
        id: 'S1-1-007',
        number: 7,
        label: '저장 버튼',
        color: 'green',
        position: { x: 45, y: 90 },
        uiInfo: {
          componentType: '버튼',
          position: '하단 버튼 영역',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '견적 정보 저장',
          trigger: '버튼 클릭',
          process: '유효성 검사 후 API 호출',
          result: '성공 시 상세/목록으로 이동',
          validation: '필수값, 품목 1개 이상',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/quotes',
          method: 'POST',
          fields: 'customerId, siteId, quoteDate, items[], ...',
          relatedTable: 'quotes, quote_items',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 판매관리 - 수주
  // ═══════════════════════════════════════════════════════════════════
  'order-list': {
    screenId: 'S2',
    screenName: '수주 목록',
    badges: [
      {
        id: 'S2-001',
        number: 1,
        label: '검색 필터',
        color: 'blue',
        position: { x: 15, y: 8 },
        uiInfo: {
          componentType: '입력필드',
          position: '검색 영역',
          interaction: '입력',
          style: '검색 아이콘 포함',
        },
        funcInfo: {
          purpose: '수주 목록 검색',
          trigger: '입력 후 Enter',
          process: '수주번호, 거래처명, 현장명으로 검색',
          result: '필터링된 수주 목록',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/orders',
          method: 'GET',
          fields: 'keyword',
          relatedTable: 'orders',
        },
      },
      {
        id: 'S2-002',
        number: 2,
        label: '수주 등록 버튼',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 수주 등록',
          trigger: '버튼 클릭',
          process: '수주 등록 화면으로 이동',
          result: '등록 폼 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'S2-003',
        number: 3,
        label: '수주 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '상태 표시 포함',
        },
        funcInfo: {
          purpose: '수주 목록 조회',
          trigger: '화면 진입 시',
          process: 'API 호출하여 수주 목록 가져오기',
          result: '수주 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/orders',
          method: 'GET',
          fields: 'orderNo, orderDate, customerName, siteName, totalAmount, status, deliveryDate',
          relatedTable: 'orders',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 생산관리 - 작업지시
  // ═══════════════════════════════════════════════════════════════════
  'work-order-list': {
    screenId: 'P1',
    screenName: '작업지시 목록',
    badges: [
      {
        id: 'P1-001',
        number: 1,
        label: '페이지 헤더',
        color: 'blue',
        position: { x: 10, y: 5 },
        uiInfo: {
          componentType: 'PageHeader',
          position: '상단 헤더 영역',
          interaction: '표시',
          style: '타이틀 + 액션 버튼 레이아웃',
        },
        funcInfo: {
          purpose: '화면 제목과 주요 액션 버튼 표시',
          trigger: '화면 진입 시',
          process: '목록뷰/공정관리뷰 전환, 미배정 일괄배정 버튼 제공',
          result: '헤더 영역 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'Props',
          endpoint: '',
          method: '',
          fields: 'title, actions',
          relatedTable: '',
        },
      },
      {
        id: 'P1-002',
        number: 2,
        label: '뷰 모드 전환',
        color: 'green',
        position: { x: 70, y: 5 },
        uiInfo: {
          componentType: '토글버튼그룹',
          position: '헤더 우측',
          interaction: '클릭',
          style: '세그먼트 컨트롤',
        },
        funcInfo: {
          purpose: '목록뷰/공정관리뷰 전환',
          trigger: '버튼 클릭',
          process: 'viewMode state 변경 (list/manager)',
          result: '선택된 뷰 모드로 화면 변경',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'viewMode',
          relatedTable: '',
        },
      },
      {
        id: 'P1-003',
        number: 3,
        label: '담당자 미배정 알림',
        color: 'red',
        position: { x: 10, y: 12 },
        uiInfo: {
          componentType: '알림배너',
          position: '헤더 하단',
          interaction: '클릭',
          style: '빨간색 경고 배너 (조건부 렌더링)',
        },
        funcInfo: {
          purpose: '미배정 작업지시 알림 및 배정 유도',
          trigger: '미배정 건수 > 0',
          process: '미배정 건수 표시, 배정하기 버튼 클릭 시 미배정 탭으로 이동',
          result: '사용자가 미배정 작업지시 인지 및 처리 유도',
          validation: '',
        },
        dataInfo: {
          source: 'State 계산',
          endpoint: '',
          method: '',
          fields: 'unassignedCount',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-004',
        number: 4,
        label: '승인대기 알림',
        color: 'orange',
        position: { x: 10, y: 18 },
        uiInfo: {
          componentType: '알림배너',
          position: '미배정 알림 하단',
          interaction: '클릭',
          style: '주황색 알림 배너 (조건부 렌더링)',
        },
        funcInfo: {
          purpose: '생산관리자 승인 필요 작업지시 알림',
          trigger: '승인대기 건수 > 0',
          process: '승인대기 건수 표시, 승인하러 가기 버튼 클릭 시 승인대기 탭으로 이동',
          result: '승인 필요 작업지시 처리 유도',
          validation: '',
        },
        dataInfo: {
          source: 'State 계산',
          endpoint: '',
          method: '',
          fields: 'pendingApprovalCount',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-005',
        number: 5,
        label: '실시간 변동 알림',
        color: 'blue',
        position: { x: 10, y: 24 },
        uiInfo: {
          componentType: '알림배너',
          position: '승인대기 알림 하단',
          interaction: '클릭/닫기',
          style: '파란색 정보 배너 (닫기 가능)',
        },
        funcInfo: {
          purpose: '작업지시 실시간 변경사항 알림',
          trigger: '변경사항 발생 시',
          process: '변경 내역 리스트 표시 (우선순위, 납기일 등), 모두 확인 완료 버튼으로 닫기',
          result: '변경사항 인지 및 확인 처리',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'recentChanges',
          relatedTable: 'work_order_changes',
        },
      },
      {
        id: 'P1-006',
        number: 6,
        label: '대시보드 카드',
        color: 'purple',
        position: { x: 10, y: 32 },
        uiInfo: {
          componentType: '카드그룹',
          position: '알림 배너 하단',
          interaction: '표시',
          style: '4열 그리드 카드 (전체/작업대기/작업중/작업완료)',
        },
        funcInfo: {
          purpose: '작업지시 현황 요약 표시',
          trigger: '화면 진입 시',
          process: 'workOrders 배열에서 상태별 건수 집계',
          result: '전체/작업대기/작업중/작업완료 건수 카드 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'State 계산',
          endpoint: '',
          method: '',
          fields: 'workOrders.length, status별 filter',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-007',
        number: 7,
        label: '검색 필터',
        color: 'gray',
        position: { x: 10, y: 38 },
        uiInfo: {
          componentType: 'SearchInput + Select',
          position: '대시보드 카드 하단',
          interaction: '입력/선택',
          style: '검색 입력필드 + 공정 드롭다운',
        },
        funcInfo: {
          purpose: '작업지시 검색 및 공정별 필터링',
          trigger: '텍스트 입력 또는 공정 선택',
          process: '작업지시번호/발주처/현장명으로 검색, 공정유형별 필터',
          result: '필터링된 작업지시 목록',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'search, processFilter',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-008',
        number: 8,
        label: '상태별 탭',
        color: 'blue',
        position: { x: 10, y: 42 },
        uiInfo: {
          componentType: 'TabFilter',
          position: '검색 필터 하단',
          interaction: '클릭',
          style: '탭 그룹 (건수 배지 포함)',
        },
        funcInfo: {
          purpose: '작업지시 상태별 필터링',
          trigger: '탭 클릭',
          process: '전체/미배정/승인대기/작업대기/작업중/작업완료 탭 전환',
          result: '선택 상태의 작업지시만 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'activeTab',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-009',
        number: 9,
        label: '작업지시 목록 테이블',
        color: 'green',
        position: { x: 10, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭/체크',
          style: '체크박스 + 데이터 행 + 액션 버튼',
        },
        funcInfo: {
          purpose: '작업지시 목록 조회 및 선택',
          trigger: '필터 조건에 따라',
          process: '필터링된 작업지시 목록 렌더링, 행 클릭 시 상세 이동, 체크박스로 일괄 선택',
          result: '작업지시 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/work-orders',
          method: 'GET',
          fields: 'workOrderNo, customerName, siteName, processType, orderQty, dueDate, assignees, status',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-010',
        number: 10,
        label: '담당자 표시',
        color: 'red',
        position: { x: 62, y: 53 },
        uiInfo: {
          componentType: '텍스트/버튼',
          position: '테이블 담당자 컬럼',
          interaction: '클릭',
          style: '미배정(빨강)/개인/팀/다중 표시',
        },
        funcInfo: {
          purpose: '담당자 배정 상태 표시 및 배정 모달 열기',
          trigger: '클릭 시',
          process: 'formatAssigneeDisplay 함수로 표시 형태 결정, 클릭 시 담당자 배정 모달 열기',
          result: '담당자 표시 및 배정 기능 제공',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'assignees',
          relatedTable: 'work_orders, users',
        },
      },
      {
        id: 'P1-011',
        number: 11,
        label: '행 액션 버튼',
        color: 'purple',
        position: { x: 80, y: 53 },
        uiInfo: {
          componentType: '버튼그룹',
          position: '테이블 액션 컬럼',
          interaction: '클릭',
          style: '상태별 조건부 버튼 (승인/작업시작/진행)',
        },
        funcInfo: {
          purpose: '작업지시 상태 변경 액션 제공',
          trigger: '버튼 클릭',
          process: '승인대기→승인, 작업대기→작업시작, 작업중→공정진행 모달',
          result: '상태 업데이트 또는 모달 표시',
          validation: '권한 확인',
        },
        dataInfo: {
          source: 'State/API',
          endpoint: '/api/work-orders/{id}/status',
          method: 'PATCH',
          fields: 'status, progressData',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-012',
        number: 12,
        label: '일괄 삭제 버튼',
        color: 'red',
        position: { x: 80, y: 42 },
        uiInfo: {
          componentType: '버튼',
          position: '탭 영역 우측',
          interaction: '클릭',
          style: '빨간색 삭제 버튼 (조건부 렌더링)',
        },
        funcInfo: {
          purpose: '선택된 작업지시 일괄 삭제',
          trigger: '체크박스 1건 이상 선택 시 표시, 클릭 시 삭제 확인',
          process: '삭제 확인 모달 표시 → 확인 시 선택된 작업지시 삭제',
          result: '작업지시 삭제 및 목록 갱신',
          validation: '삭제 권한 확인',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/work-orders/batch-delete',
          method: 'DELETE',
          fields: 'selectedIds',
          relatedTable: 'work_orders',
        },
      },
      {
        id: 'P1-013',
        number: 13,
        label: '공정관리뷰 - 담당자 카드',
        color: 'blue',
        position: { x: 10, y: 55 },
        uiInfo: {
          componentType: '카드그룹',
          position: '공정관리뷰 상단',
          interaction: '표시',
          style: '3열 그리드 카드 (절곡/스크린/슬랫 담당자)',
        },
        funcInfo: {
          purpose: '공정별 담당자 정보 및 작업 방식 안내',
          trigger: '공정관리뷰 선택 시',
          process: 'processManagers 객체에서 공정별 담당자 정보 렌더링',
          result: '공정별 담당자 카드 표시',
          validation: '',
        },
        dataInfo: {
          source: 'Static Data',
          endpoint: '',
          method: '',
          fields: 'processManagers',
          relatedTable: '',
        },
      },
      {
        id: 'P1-014',
        number: 14,
        label: '공정관리뷰 - 칸반 보드',
        color: 'green',
        position: { x: 10, y: 65 },
        uiInfo: {
          componentType: '칸반보드',
          position: '공정관리뷰 메인',
          interaction: '드래그앤드롭',
          style: '공정별 컬럼 (절곡대기/스크린/슬랫)',
        },
        funcInfo: {
          purpose: '공정별 작업 현황을 칸반 스타일로 관리',
          trigger: '공정관리뷰 선택 시',
          process: '공정유형별로 작업지시 그룹화하여 칸반 컬럼으로 표시',
          result: '드래그앤드롭으로 공정 이동 가능한 칸반 보드',
          validation: '',
        },
        dataInfo: {
          source: 'State',
          endpoint: '',
          method: '',
          fields: 'workOrders (grouped by processType)',
          relatedTable: 'work_orders',
        },
      },
    ],
  },

  // ═══════════════════════════════════════════════════════════════════
  // 품질관리 - 검사
  // ═══════════════════════════════════════════════════════════════════
  'inspection-list': {
    screenId: 'Q1',
    screenName: '검사 목록',
    badges: [
      {
        id: 'Q1-001',
        number: 1,
        label: '검사유형 탭',
        color: 'blue',
        position: { x: 20, y: 8 },
        uiInfo: {
          componentType: '탭',
          position: '탭 영역',
          interaction: '클릭',
          style: '탭 그룹 (IQC/PQC/FQC)',
        },
        funcInfo: {
          purpose: '검사 유형별 조회',
          trigger: '탭 클릭',
          process: '선택 유형의 검사 데이터 조회',
          result: '유형별 검사 목록',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/inspections',
          method: 'GET',
          fields: 'type',
          relatedTable: 'inspections',
        },
      },
      {
        id: 'Q1-002',
        number: 2,
        label: '검사 등록',
        color: 'green',
        position: { x: 88, y: 8 },
        uiInfo: {
          componentType: '버튼',
          position: '헤더 우측',
          interaction: '클릭',
          style: 'Primary 버튼',
        },
        funcInfo: {
          purpose: '신규 검사 등록',
          trigger: '버튼 클릭',
          process: '검사 등록 화면으로 이동',
          result: '등록 폼 표시',
          validation: '',
        },
        dataInfo: {
          source: 'State 관리',
          endpoint: '',
          method: '',
          fields: '',
          relatedTable: '',
        },
      },
      {
        id: 'Q1-003',
        number: 3,
        label: '검사 목록 테이블',
        color: 'purple',
        position: { x: 50, y: 50 },
        uiInfo: {
          componentType: '테이블',
          position: '메인 영역',
          interaction: '클릭',
          style: '합격/불합격 색상 표시',
        },
        funcInfo: {
          purpose: '검사 내역 조회',
          trigger: '탭/검색 조건에 따라',
          process: '조건에 맞는 검사 데이터 조회',
          result: '검사 목록 테이블 렌더링',
          validation: '',
        },
        dataInfo: {
          source: 'API 호출',
          endpoint: '/api/inspections',
          method: 'GET',
          fields: 'inspectionNo, inspectionDate, itemName, lotNo, inspectionQty, passQty, failQty, result',
          relatedTable: 'inspections',
        },
      },
    ],
  },
};

// 화면 키에서 기능정의 가져오기
export const getFeatureDefinition = (screenKey) => {
  return featureDefinitions[screenKey] || null;
};

// 모든 화면 ID 목록 가져오기
export const getAllScreenIds = () => {
  return Object.keys(featureDefinitions).map(key => ({
    key,
    screenId: featureDefinitions[key].screenId,
    screenName: featureDefinitions[key].screenName,
    badgeCount: featureDefinitions[key].badges.length,
  }));
};

// 특정 화면의 기본 뱃지 데이터 생성 (ID 포함)
export const generateDefaultBadges = (screenKey) => {
  const definition = featureDefinitions[screenKey];
  if (!definition) return [];

  return definition.badges.map((badge, index) => ({
    ...badge,
    id: badge.id || `${screenKey}-${Date.now()}-${index}`,
    number: badge.number || index + 1,
    createdAt: new Date().toISOString(),
    author: 'System',
    isFixed: false,
    // 위치 정보를 절대 좌표로 변환 (기본값은 비율 기준)
    x: badge.position?.x || 50,
    y: badge.position?.y || 50,
    absoluteX: null, // 실제 렌더링 시 계산
    absoluteY: null,
  }));
};

// 화면 키 매핑 (메뉴ID-뷰타입 -> featureDefinitions 키)
export const screenKeyMapping = {
  // 회계관리 (activeMenu-view 형식)
  'acc-customer-list': 'acc-customer-list',
  'acc-customer-register': 'acc-customer-register',
  'sales-account-list': 'sales-list',
  'sales-account-detail': 'sales-detail',
  'purchase-list': 'purchase-list',
  'purchase-register': 'purchase-register',
  'cashbook-list': 'cashbook-list',
  'cashbook-register': 'cashbook-register',
  'collection-list': 'collection-list',
  'collection-register': 'collection-register',
  'cost-analysis-list': 'cost-list',
  'cost-analysis-detail': 'cost-detail',
  // 판매관리
  'quote-list': 'quote-list',
  'quote-register': 'quote-register',
  'order-list': 'order-list',
  'order-register': 'order-register',
  // 생산관리
  'work-order-list': 'work-order-list',
  'work-order-work-order-list': 'work-order-list',
  'work-order-work-order-detail': 'work-order-list',
  'work-order-work-order-edit': 'work-order-list',
  'work-order-register': 'work-order-register',
  // 품질관리
  'inspection-list': 'inspection-list',
  'iqc-list': 'inspection-list',
  'pqc-list': 'inspection-list',
  'fqc-list': 'inspection-list',
  // 거래처 (판매관리)
  'customer-list': 'acc-customer-list',
  'customer-register': 'acc-customer-register',
};

export default featureDefinitions;
