// 문서양식관리 Config
// 통합 문서양식 템플릿 시스템 - 모든 문서를 하나의 등록 프로세스로 생성
// 검사서, 견적서, 수주확인서, 거래명세서 등 공통 블록 재사용
//
// [멀티테넌시 지원]
// 회사별 설정은 tenantConfig.js에서 관리
// - 회사정보, 로고, 인감, 결재라인, 채번규칙 등
// - 문서 생성 시 getCurrentTenant()로 현재 테넌트 정보 참조
// - 블록의 useCompanyInfo: true 설정 시 자동으로 테넌트 정보 적용

import {
  getCurrentTenant,
  getTenantCompanyInfo,
  getTenantApprovalLine,
  getTenantNumberingRule,
  generateTenantDocumentNo,
  getTenantLogo,
} from './tenantConfig';

const documentTemplateConfig = {
  id: 'document-template',
  title: '문서양식관리',
  description: '통합 문서양식 등록 시스템 - 모든 문서를 블록 조합으로 생성',
  icon: 'FileText',

  // ============================================================
  // 탭 구조 정의
  // ============================================================
  tabs: [
    { id: 'template-list', label: '양식목록', icon: 'FileText' },
    { id: 'block-library', label: '블록라이브러리', icon: 'Layers' },
    { id: 'style-preset', label: '스타일프리셋', icon: 'Palette' },
    { id: 'approval-line', label: '결재라인', icon: 'Users' },
    { id: 'data-binding', label: '데이터연결', icon: 'Link' },
    { id: 'preview', label: '미리보기', icon: 'Eye' },
  ],

  // ============================================================
  // 1. 공통 블록 라이브러리 (모든 문서에서 재사용)
  // ============================================================
  blockLibrary: {
    // ========== 헤더 블록 ==========
    headers: [
      {
        id: 'HDR-COMPANY',
        name: '회사로고 헤더',
        description: '좌측 로고 + 중앙 문서제목',
        category: 'header',
        preview: '[로고] ◀───── 문서 제목 ─────▶',
        config: {
          showLogo: true,
          logoPosition: 'left',
          showCompanyName: true,
          titlePosition: 'center',
          titleStyle: 'large-bold',
        },
        usedIn: ['검사서', '거래명세서'],
      },
      {
        id: 'HDR-SIMPLE',
        name: '심플 헤더',
        description: '문서제목만 중앙 배치 (자간 넓게)',
        category: 'header',
        preview: '◀───── 견 적 서 ─────▶',
        config: {
          showLogo: false,
          titlePosition: 'center',
          titleStyle: 'large-spaced',
          letterSpacing: '0.5em',
        },
        usedIn: ['견적서', '수주확인서'],
      },
      {
        id: 'HDR-DOCNO',
        name: '문서번호 헤더',
        description: '문서제목 + 문서번호 + 작성일',
        category: 'header',
        preview: '문서제목 | 문서번호: XXX | 작성일: YYYY-MM-DD',
        config: {
          showDocNo: true,
          showDate: true,
          dateLabel: '작성일자',
          layout: 'inline',
        },
        usedIn: ['작업지시서', '발주서'],
      },
      // ========== 작업일지 헤더 블록 (첨부 이미지 기준) ==========
      {
        id: 'HDR-WORKLOG',
        name: '작업일지 헤더',
        description: '좌측 로고(KD경동기업) + 중앙 제목 + 부서명 박스',
        category: 'header',
        preview: '[KD로고] 작 업 일 지 | [생산부서 박스]',
        config: {
          layout: 'worklog-header',
          logo: {
            text: 'KD',
            subText: '경동기업',
            subSubText: 'KYUNGDONG COMPANY',
            position: 'left',
            style: 'blue-box',
          },
          title: {
            text: '작 업 일 지',
            style: 'large-underline',
            letterSpacing: '1em',
          },
          subtitle: {
            position: 'below-title',
            style: 'highlight-box',
            defaultBg: '#FFFF00',
          },
        },
        usedIn: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK', 'WL-PKG'],
      },
      // ========== 작업일지 결재란 블록 (첨부 이미지 기준) ==========
      {
        id: 'APR-WORKLOG',
        name: '작업일지 결재란',
        description: '작성/검토/승인 3열 결재란 + 하단 역할 표시',
        category: 'approval',
        preview: '│작성│검토│승인│\n│ 결 │ 재 │ 란 │\n│판매│생산│품질│',
        config: {
          layout: 'worklog-approval',
          columns: [
            { id: 'write', label: '작성', width: 60 },
            { id: 'review', label: '검토', width: 60 },
            { id: 'approve', label: '승인', width: 60 },
          ],
          rows: [
            { id: 'role', label: '결', showRole: true, height: 25 },
            { id: 'sign', label: '재', type: 'signature', height: 45 },
            { id: 'date', label: '', showDate: true, height: 20 },
          ],
          footer: {
            labels: ['판매/전진', '생산', '품질'],
            highlightLast: true,
            highlightBg: '#00FFFF',
          },
          styles: {
            borderColor: '#000',
            headerBg: '#E6E6E6',
            cellPadding: '4px',
          },
        },
        usedIn: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK', 'WL-PKG'],
      },
    ],

    // ========== 당사자정보 블록 ==========
    partyBlocks: [
      {
        id: 'PTY-CUSTOMER',
        name: '수요자 정보',
        description: '고객/거래처 정보 테이블',
        category: 'party',
        preview: '┌─ 수 요 자 ─────────┐\n│ 업체명 │ 현장명 │ 담당자 │',
        config: {
          title: '수 요 자',
          titleStyle: 'header-bar-black',
          fields: [
            { row: 1, items: [{ label: '업체명', field: 'customerName', colSpan: 4 }] },
            { row: 2, items: [{ label: '현장명', field: 'siteName', colSpan: 2 }, { label: '담당자', field: 'contactPerson', colSpan: 2 }] },
            { row: 3, items: [{ label: '제품명', field: 'productName', colSpan: 2 }, { label: '연락처', field: 'contactPhone', colSpan: 2 }] },
          ],
        },
        dataSource: 'customer',
        usedIn: ['견적서', '수주확인서', '거래명세서'],
      },
      {
        id: 'PTY-SUPPLIER',
        name: '공급자 정보',
        description: '자사(공급자) 정보 테이블',
        category: 'party',
        preview: '┌─ 공 급 자 ─────────┐\n│ 상호 │ 사업자번호 │ 대표자 │',
        config: {
          title: '공 급 자',
          titleStyle: 'header-bar-black',
          useCompanyInfo: true,
          fields: [
            { row: 1, items: [{ label: '상호', field: 'companyName', colSpan: 2 }, { label: '사업자등록번호', field: 'businessNo', colSpan: 2 }] },
            { row: 2, items: [{ label: '대표자', field: 'ceo', colSpan: 2 }, { label: '업태', field: 'businessType', colSpan: 2 }] },
            { row: 3, items: [{ label: '종목', field: 'businessItem', colSpan: 4 }] },
            { row: 4, items: [{ label: '사업장주소', field: 'address', colSpan: 4 }] },
            { row: 5, items: [{ label: '전화', field: 'phone', colSpan: 2 }, { label: '팩스', field: 'fax', colSpan: 2 }] },
          ],
        },
        dataSource: 'company',
        usedIn: ['견적서', '수주확인서', '거래명세서'],
      },
      {
        id: 'PTY-INSPECTION-INFO',
        name: '검사 기본정보',
        description: '검사 대상, LOT, 검사일 등 (검은 헤더바 스타일)',
        category: 'party',
        preview: '┌─ 검 사 정 보 ─────────┐\n│ 품명 │ LOT번호 │ 검사일 │',
        config: {
          title: '검 사 정 보',
          titleStyle: 'header-bar-black',
          tableStyle: {
            borderCollapse: 'collapse',
            width: '100%',
            fontSize: '11px',
          },
          labelCellStyle: {
            backgroundColor: '#f5f5f5',
            fontWeight: 'bold',
            textAlign: 'center',
            width: '15%',
            padding: '6px 8px',
            border: '1px solid #000',
          },
          valueCellStyle: {
            backgroundColor: '#fff',
            textAlign: 'left',
            width: '35%',
            padding: '6px 8px',
            border: '1px solid #000',
          },
          fields: [
            { row: 1, items: [{ label: '품명', field: 'itemName', colSpan: 2 }, { label: '납품업체', field: 'supplierName', colSpan: 2 }] },
            { row: 2, items: [{ label: '규격', field: 'spec', colSpan: 2 }, { label: 'LOT번호', field: 'lotNo', colSpan: 2 }] },
            { row: 3, items: [{ label: '로트크기', field: 'lotSize', colSpan: 2 }, { label: '검사일자', field: 'inspectionDate', colSpan: 2 }] },
            { row: 4, items: [{ label: '자재번호', field: 'materialNo', colSpan: 2 }, { label: '검사자', field: 'inspector', colSpan: 2 }] },
          ],
        },
        dataSource: 'inspection',
        usedIn: ['IQC', 'PQC', 'FQC'],
      },
      {
        id: 'PTY-WORKORDER-INFO',
        name: '작업지시 정보',
        description: '작업지시서용 기본정보',
        category: 'party',
        preview: '┌─ 작업지시정보 ───────┐\n│ 지시번호 │ 품목 │ 수량 │',
        config: {
          fields: [
            { row: 1, items: [{ label: '지시번호', field: 'workOrderNo', colSpan: 2 }, { label: '지시일자', field: 'orderDate', colSpan: 2 }] },
            { row: 2, items: [{ label: '수주LOT', field: 'lotNo', colSpan: 2 }, { label: '납기일', field: 'dueDate', colSpan: 2 }] },
            { row: 3, items: [{ label: '현장명', field: 'siteName', colSpan: 2 }, { label: '거래처', field: 'customerName', colSpan: 2 }] },
            { row: 4, items: [{ label: '작업공정', field: 'processName', colSpan: 2 }, { label: '작업조', field: 'teamName', colSpan: 2 }] },
          ],
        },
        dataSource: 'workOrder',
        usedIn: ['작업지시서'],
      },
      // 발주서용 신청업체 정보 (첨부 이미지 기준)
      {
        id: 'PTY-PO-REQUESTER',
        name: '신청업체 정보 (발주서)',
        description: '발주처, 담당자, FAX, 설치개소 등',
        category: 'party',
        preview: '┌─ 신 청 업 체 ─────────┐\n│ 발주처 │ 발주일 │ 담당자 │ 연락처 │',
        config: {
          title: '신 청 업 체',
          titleStyle: 'header-bar-none',
          fields: [
            { row: 1, items: [{ label: '발주처', field: 'orderCompany', colSpan: 1 }, { label: '', field: 'orderCompanyName', colSpan: 1 }, { label: '발주일', field: 'orderDateLabel', colSpan: 1 }, { label: '', field: 'orderDate', colSpan: 1 }] },
            { row: 2, items: [{ label: '담당자', field: 'contactPersonLabel', colSpan: 1 }, { label: '', field: 'contactPerson', colSpan: 1 }, { label: '연락처', field: 'contactPhoneLabel', colSpan: 1 }, { label: '', field: 'contactPhone', colSpan: 1 }] },
            { row: 3, items: [{ label: 'FAX', field: 'faxLabel', colSpan: 1 }, { label: '', field: 'fax', colSpan: 1 }, { label: '설치개소(총)', field: 'totalInstallLabel', colSpan: 1 }, { label: '', field: 'totalInstallCount', colSpan: 1 }] },
          ],
        },
        dataSource: 'purchaseOrder',
        usedIn: ['발주서'],
      },
      // 발주서용 신청내용 정보
      {
        id: 'PTY-PO-REQUEST-CONTENT',
        name: '신청내용 정보 (발주서)',
        description: '현장명, 납기요청일, 출고일, 배송방법, 납품주소',
        category: 'party',
        preview: '┌─ 신 청 내 용 ─────────┐\n│ 현장명 │ 납기요청일 │ 출고일 │ 배송방법 │',
        config: {
          title: '신 청 내 용',
          titleStyle: 'header-bar-none',
          fields: [
            { row: 1, items: [{ label: '현장명', field: 'siteNameLabel', colSpan: 1 }, { label: '', field: 'siteName', colSpan: 3 }] },
            { row: 2, items: [{ label: '납기요청일', field: 'requestDueDateLabel', colSpan: 1 }, { label: '', field: 'requestDueDate', colSpan: 3 }] },
            { row: 3, items: [{ label: '출고일', field: 'shipDateLabel', colSpan: 1 }, { label: '', field: 'shipDate', colSpan: 1 }, { label: '배송방법', field: 'deliveryMethodLabel', colSpan: 1 }, { label: '', field: 'deliveryMethod', colSpan: 1 }] },
            { row: 4, items: [{ label: '납품주소', field: 'deliveryAddressLabel', colSpan: 1 }, { label: '', field: 'deliveryAddress', colSpan: 3 }] },
            { row: 5, items: [{ label: '수신자', field: 'recipientLabel', colSpan: 1 }, { label: '', field: 'recipient', colSpan: 1 }, { label: '연락처', field: 'recipientPhoneLabel', colSpan: 1 }, { label: '', field: 'recipientPhone', colSpan: 1 }] },
          ],
        },
        dataSource: 'purchaseOrder',
        usedIn: ['발주서'],
      },
      // 발주서용 발주개소 현황
      {
        id: 'PTY-PO-ORDER-STATUS',
        name: '발주개소 현황',
        description: '누적발주개소, 금번발주개소',
        category: 'party',
        preview: '│ 누적발주개소 │ 18개소 │ 금번발주개소 │ 5개소 │',
        config: {
          layout: 'inline',
          fields: [
            { label: '누적발주개소', field: 'totalOrderCount' },
            { label: '금번발주개소', field: 'currentOrderCount' },
          ],
        },
        dataSource: 'purchaseOrder',
        usedIn: ['발주서'],
      },
    ],

    // ========== 결재라인 블록 (발주서 스타일 기준 공통화) ==========
    approvalBlocks: [
      {
        id: 'APR-PO-STANDARD',
        name: '발주서 결재라인 (표준)',
        description: '로트번호 + 작성/검토/승인 + 부서별 결재 (발주서 스타일)',
        category: 'approval',
        preview: '┌─로트번호──────────────┐\n│ 작성 │ 검토 │ 승인 │\n│ 전진 │      │      │\n│ 판매/전진 │ 회계 │ 생산 │',
        config: {
          showLotNo: true,
          lotNoLabel: '로트번호',
          position: 'top-right',
          width: '280px',
          // 상단 결재자 행 (작성/검토/승인)
          approverRow: {
            roles: [
              { id: 'write', label: '작성', showSign: true },
              { id: 'review', label: '검토', showSign: true },
              { id: 'approve', label: '승인', showSign: true },
            ],
          },
          // 결재자 이름 행
          nameRow: {
            defaultNames: ['', '', ''],
          },
          // 부서별 결재 행
          deptRows: [
            { label: '결\n재', depts: ['전진', '', ''] },
            { label: '', depts: ['판매/전진', '회계', '생산'] },
          ],
          cellSize: { width: 55, height: 25 },
        },
        usedIn: ['발주서', '작업지시서'],
      },
      {
        id: 'APR-2LINE',
        name: '2단 결재라인',
        description: '담당 → 부서장 (간단한 내부문서용)',
        category: 'approval',
        preview: '┌─담당─┬─부서장─┐\n│ (인) │  (인)  │',
        config: {
          showLotNo: false,
          position: 'top-right',
          roles: [
            { id: 'staff', label: '담당', showDate: true, showSign: true },
            { id: 'manager', label: '부서장', showDate: true, showSign: true },
          ],
          layout: 'horizontal',
          cellSize: { width: 60, height: 70 },
        },
        usedIn: ['검사서류', '내부문서', '작업일지'],
      },
      {
        id: 'APR-3LINE',
        name: '3단 결재라인',
        description: '작성 → 검토 → 승인',
        category: 'approval',
        preview: '┌─작성─┬─검토─┬─승인─┐\n│ (인) │ (인) │ (인) │',
        config: {
          showLotNo: false,
          position: 'top-right',
          roles: [
            { id: 'write', label: '작성', showDate: true, showSign: true },
            { id: 'review', label: '검토', showDate: true, showSign: true },
            { id: 'approve', label: '승인', showDate: true, showSign: true },
          ],
          layout: 'horizontal',
          cellSize: { width: 60, height: 70 },
        },
        usedIn: ['공식문서', '품질문서'],
      },
      {
        id: 'APR-3LINE-WITH-LOTNO',
        name: '3단 결재라인 (로트번호 포함)',
        description: '로트번호 + 작성/검토/승인 (품질문서용)',
        category: 'approval',
        preview: '┌─로트번호─────────┐\n│ 작성 │ 검토 │ 승인 │',
        config: {
          showLotNo: true,
          lotNoLabel: '로트번호',
          position: 'top-right',
          width: '220px',
          roles: [
            { id: 'write', label: '작성', showSign: true },
            { id: 'review', label: '검토', showSign: true },
            { id: 'approve', label: '승인', showSign: true },
          ],
          layout: 'horizontal',
          cellSize: { width: 55, height: 50 },
        },
        usedIn: ['품질검사서', 'IQC', 'PQC', 'FQC'],
      },
      {
        id: 'APR-4LINE',
        name: '4단 결재라인',
        description: '작성 → 검토 → 승인 → 확인',
        category: 'approval',
        preview: '┌─작성─┬─검토─┬─승인─┬─확인─┐',
        config: {
          showLotNo: false,
          position: 'top-right',
          roles: [
            { id: 'write', label: '작성', showDate: true, showSign: true },
            { id: 'review', label: '검토', showDate: true, showSign: true },
            { id: 'approve', label: '승인', showDate: true, showSign: true },
            { id: 'confirm', label: '확인', showDate: true, showSign: true },
          ],
          layout: 'horizontal',
          cellSize: { width: 55, height: 70 },
        },
        usedIn: ['중요문서', 'NCR'],
      },
      {
        id: 'APR-NONE',
        name: '결재라인 없음',
        description: '결재란 생략 (외부 발송문서)',
        category: 'approval',
        preview: '(결재란 없음)',
        config: {
          roles: [],
          visible: false,
        },
        usedIn: ['견적서', '거래명세서', '수주확인서'],
      },
    ],

    // ========== 금액 블록 ==========
    amountBlocks: [
      {
        id: 'AMT-HIGHLIGHT',
        name: '강조 금액박스',
        description: '테두리 + 큰 글씨 금액 표시',
        category: 'amount',
        preview: '┌──────────────────┐\n│  총 견적금액: ₩123,456,789  │\n│  ※ 부가가치세 별도           │\n└──────────────────┘',
        config: {
          title: '총 견적금액',
          field: 'totalAmount',
          currency: '₩',
          format: 'comma',
          note: '※ 부가가치세 별도',
          style: 'highlight-box',
          fontSize: '32px',
          fontWeight: 'bold',
        },
        usedIn: ['견적서', '수주확인서'],
      },
      {
        id: 'AMT-TABLE',
        name: '금액 테이블',
        description: '공급가액, 세액, 합계 테이블 형식',
        category: 'amount',
        preview: '│ 공급가액 │ 100,000 │\n│ 세액     │  10,000 │\n│ 합계     │ 110,000 │',
        config: {
          fields: [
            { label: '공급가액', field: 'supplyAmount' },
            { label: '세액', field: 'taxAmount' },
            { label: '합계', field: 'totalAmount', highlight: true },
          ],
          currency: '₩',
          format: 'comma',
          showKoreanAmount: true,
        },
        usedIn: ['거래명세서', '세금계산서'],
      },
      {
        id: 'AMT-INLINE',
        name: '인라인 금액',
        description: '한 줄에 금액 표시',
        category: 'amount',
        preview: '합계금액: ₩123,456,789 (일억이천삼백사십오만육천칠백팔십구원정)',
        config: {
          field: 'totalAmount',
          currency: '₩',
          format: 'comma',
          showKoreanAmount: true,
          layout: 'inline',
        },
        usedIn: ['간이문서'],
      },
    ],

    // ========== 품목/내역 테이블 블록 ==========
    itemTableBlocks: [
      {
        id: 'TBL-QUOTE-ITEMS',
        name: '견적 품목테이블',
        description: '품명, 규격, 수량, 단가, 금액',
        category: 'itemTable',
        preview: '│ NO │ 품명 │ 규격 │ 수량 │ 단가 │ 금액 │ 비고 │',
        config: {
          columns: [
            { id: 'no', label: 'NO', width: 40, align: 'center' },
            { id: 'itemName', label: '품명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 120, align: 'center' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number' },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
            { id: 'unitPrice', label: '단가', width: 80, align: 'right', format: 'currency' },
            { id: 'amount', label: '금액', width: 100, align: 'right', format: 'currency' },
            { id: 'remarks', label: '비고', width: 100, align: 'left' },
          ],
          showRowNo: true,
          showSubtotal: true,
          showTax: true,
          showTotal: true,
          emptyRows: 5,
        },
        usedIn: ['견적서', '수주확인서', '거래명세서'],
      },
      {
        id: 'TBL-DELIVERY-ITEMS',
        name: '출하 품목테이블',
        description: '품명, 규격, 수량, LOT번호',
        category: 'itemTable',
        preview: '│ NO │ 품명 │ 규격 │ 수량 │ LOT번호 │ 비고 │',
        config: {
          columns: [
            { id: 'no', label: 'NO', width: 40, align: 'center' },
            { id: 'itemName', label: '품명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 120, align: 'center' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number' },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
            { id: 'lotNo', label: 'LOT번호', width: 120, align: 'center' },
            { id: 'remarks', label: '비고', width: 100, align: 'left' },
          ],
          showRowNo: true,
          showTotalQty: true,
          emptyRows: 5,
        },
        usedIn: ['거래명세서', '출고전표'],
      },
      {
        id: 'TBL-WORKORDER-ITEMS',
        name: '작업지시 품목테이블',
        description: '작업지시서용 품목 목록',
        category: 'itemTable',
        preview: '│ 품목코드 │ 품명 │ 규격 │ 지시수량 │ 완료수량 │',
        config: {
          columns: [
            { id: 'itemCode', label: '품목코드', width: 80, align: 'center' },
            { id: 'itemName', label: '품명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 120, align: 'center' },
            { id: 'orderQty', label: '지시수량', width: 70, align: 'right', format: 'number' },
            { id: 'completedQty', label: '완료수량', width: 70, align: 'right', format: 'number', editable: true },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
            { id: 'remarks', label: '비고', width: 100, align: 'left' },
          ],
          showRowNo: false,
        },
        usedIn: ['작업지시서'],
      },
      // 발주서용 부자재 테이블 (첨부 이미지 기준)
      {
        id: 'TBL-PO-MATERIALS',
        name: '부자재 테이블 (발주서)',
        description: '품명, 규격, 길이, 수량, 비고',
        category: 'itemTable',
        preview: '│ 구분 │ 품명 │ 규격 │ 길이(mm) │ 수량 │ 비고 │',
        config: {
          title: '부 자 재',
          titleStyle: 'header-bar-none',
          titleIcon: '●',
          columns: [
            { id: 'no', label: '구분', width: 50, align: 'center' },
            { id: 'itemName', label: '품명', width: 120, align: 'left' },
            { id: 'spec', label: '규격', width: 100, align: 'center' },
            { id: 'length', label: '길이(mm)', width: 80, align: 'right', format: 'number' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number' },
            { id: 'remarks', label: '비고', width: 100, align: 'left' },
          ],
          showRowNo: true,
          emptyRows: 5,
        },
        dataSource: 'purchaseOrder',
        usedIn: ['발주서'],
      },
      // 소요자재내역 테이블 (견적산출내역서)
      {
        id: 'TBL-MATERIAL-DETAIL',
        name: '소요자재내역 테이블',
        description: '자재명, 규격, 수량, 단위',
        category: 'itemTable',
        preview: '│ No. │ 자재명 │ 규격 │ 수량 │ 단위 │',
        config: {
          title: '소 요 자 재 내 역',
          titleStyle: 'header-bar-black',
          columns: [
            { id: 'no', label: 'No.', width: 40, align: 'center' },
            { id: 'materialName', label: '자재명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 200, align: 'center' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number' },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
          ],
          showRowNo: true,
          emptyRows: 10,
        },
        dataSource: 'quote',
        usedIn: ['견적산출내역서'],
      },
    ],

    // ========== 검사 테이블 블록 (스타일 공통화 적용) ==========
    inspectionTableBlocks: [
      {
        id: 'TBL-INSP-IQC',
        name: '입고검사 테이블',
        description: '입고검사 항목 및 측정값 (검은 헤더바 스타일)',
        category: 'inspectionTable',
        preview: '│ NO │ 검사항목 │ 검사기준 │ 방식 │ n1 │ n2 │ n3 │ 판정 │',
        config: {
          title: '검 사 항 목',
          titleStyle: 'header-bar-black',
          tableStyle: {
            border: '1px solid #000',
            borderCollapse: 'collapse',
            width: '100%',
            fontSize: '11px',
          },
          headerCellStyle: {
            backgroundColor: '#f5f5f5',
            fontWeight: 'bold',
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
          },
          dataCellStyle: {
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
            height: '28px',
          },
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center' },
            { id: 'item', label: '검사항목', width: 100, align: 'left' },
            { id: 'standard', label: '검사기준', width: 150, align: 'left' },
            { id: 'method', label: '검사방식', width: 70, align: 'center' },
            { id: 'period', label: '검사주기', width: 70, align: 'center' },
            { id: 'n1', label: 'n1', width: 45, align: 'center', editable: true },
            { id: 'n2', label: 'n2', width: 45, align: 'center', editable: true },
            { id: 'n3', label: 'n3', width: 45, align: 'center', editable: true },
            { id: 'result', label: '판정', width: 45, align: 'center', type: 'select', options: ['○', '×'] },
          ],
          measurementColumns: ['n1', 'n2', 'n3'],
          showOverallJudgement: true,
          minRows: 5,
        },
        usedIn: ['IQC'],
      },
      {
        id: 'TBL-INSP-PQC',
        name: '중간검사 테이블',
        description: '중간검사 항목 및 측정값 (5개 측정, 검은 헤더바 스타일)',
        category: 'inspectionTable',
        preview: '│ NO │ 검사항목 │ 기준 │ ① │ ② │ ③ │ ④ │ ⑤ │ 판정 │',
        config: {
          title: '검 사 항 목',
          titleStyle: 'header-bar-black',
          tableStyle: {
            border: '1px solid #000',
            borderCollapse: 'collapse',
            width: '100%',
            fontSize: '11px',
          },
          headerCellStyle: {
            backgroundColor: '#f5f5f5',
            fontWeight: 'bold',
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
          },
          dataCellStyle: {
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
            height: '28px',
          },
          measurementCellStyle: {
            backgroundColor: '#fffde7',
            textAlign: 'center',
            padding: '4px',
            border: '1px solid #000',
          },
          columns: [
            { id: 'no', label: 'NO', width: 30, align: 'center' },
            { id: 'item', label: '검사항목', width: 90, align: 'left' },
            { id: 'standard', label: '검사기준', width: 120, align: 'left' },
            { id: 'm1', label: '①', width: 40, align: 'center', editable: true },
            { id: 'm2', label: '②', width: 40, align: 'center', editable: true },
            { id: 'm3', label: '③', width: 40, align: 'center', editable: true },
            { id: 'm4', label: '④', width: 40, align: 'center', editable: true },
            { id: 'm5', label: '⑤', width: 40, align: 'center', editable: true },
            { id: 'result', label: '판정', width: 40, align: 'center', type: 'select', options: ['○', '×'] },
          ],
          measurementColumns: ['m1', 'm2', 'm3', 'm4', 'm5'],
          showOverallJudgement: true,
          minRows: 5,
        },
        usedIn: ['PQC', 'FQC'],
      },
      {
        id: 'TBL-INSP-SIMPLE',
        name: '간이검사 테이블',
        description: '단순 합격/불합격 체크 (검은 헤더바 스타일)',
        category: 'inspectionTable',
        preview: '│ NO │ 검사항목 │ 검사기준 │ 결과 │ 비고 │',
        config: {
          title: '검 사 항 목',
          titleStyle: 'header-bar-black',
          tableStyle: {
            border: '1px solid #000',
            borderCollapse: 'collapse',
            width: '100%',
            fontSize: '11px',
          },
          headerCellStyle: {
            backgroundColor: '#f5f5f5',
            fontWeight: 'bold',
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
          },
          dataCellStyle: {
            textAlign: 'center',
            padding: '6px 4px',
            border: '1px solid #000',
            height: '28px',
          },
          columns: [
            { id: 'no', label: 'NO', width: 40, align: 'center' },
            { id: 'item', label: '검사항목', width: 120, align: 'left' },
            { id: 'standard', label: '검사기준', width: 180, align: 'left' },
            { id: 'result', label: '결과', width: 60, align: 'center', type: 'select', options: ['합격', '불합격'] },
            { id: 'remarks', label: '비고', width: 100, align: 'left' },
          ],
          showOverallJudgement: true,
          minRows: 5,
        },
        usedIn: ['FQC', '간이검사'],
      },
    ],

    // ========== 비고/특기사항 블록 ==========
    remarksBlocks: [
      {
        id: 'RMK-STANDARD',
        name: '표준 비고란',
        description: '기본 비고사항 입력',
        category: 'remarks',
        preview: '┌─ 비 고 사 항 ────────┐\n│                           │\n└──────────────────┘',
        config: {
          title: '비 고 사 항',
          titleStyle: 'header-bar-black',
          field: 'remarks',
          minHeight: 80,
          maxHeight: 150,
        },
        usedIn: ['견적서', '수주확인서'],
      },
      {
        id: 'RMK-SPECIAL',
        name: '특이사항',
        description: '검사 특이사항',
        category: 'remarks',
        preview: '┌─ 특이사항 ─────────┐',
        config: {
          title: '특이사항',
          field: 'specialNote',
          minHeight: 50,
        },
        usedIn: ['검사서류'],
      },
      {
        id: 'RMK-DEFECT',
        name: '부적합 내용',
        description: '불합격 시 부적합 내용 기록',
        category: 'remarks',
        preview: '┌─ 부적합 내용 ────────┐',
        config: {
          title: '부적합 내용',
          field: 'defectContent',
          minHeight: 60,
          showCondition: { field: 'judgement', value: '불합격' },
        },
        usedIn: ['검사서류', 'NCR'],
      },
      // 고정 유의사항 블록 (발주서용)
      {
        id: 'RMK-FIXED',
        name: '고정 유의사항',
        description: '발주서 하단 유의사항 (고정 문구)',
        category: 'remarks',
        preview: '● 유의사항\n1. 신제품인 경우...\n2. 발주내용에 변경...',
        config: {
          title: '유의사항',
          titleIcon: '●',
          titleStyle: 'bold-no-border',
          isFixed: true,
          items: [
            '1. 신제품인 경우 제작현장 또는 담당자에게 정보를 받아주세요.',
            '2. 발주내용에 변경이 있으면 즉시 담당자에게 연락주세요.',
            '3. 납기일 준수 불가 시 사전에 연락주시기 바랍니다.',
          ],
          fontSize: '11px',
          lineHeight: '1.6',
        },
        usedIn: ['발주서'],
      },
    ],

    // ========== 판정 블록 ==========
    judgementBlocks: [
      {
        id: 'JDG-PASSFAIL',
        name: '합격/불합격 판정',
        description: '기본 합불 판정',
        category: 'judgement',
        preview: '[ 판정: ○ 합격  ○ 불합격 ]',
        config: {
          options: [
            { value: 'pass', label: '합격', style: 'success' },
            { value: 'fail', label: '불합격', style: 'danger' },
          ],
          field: 'overallJudgement',
          layout: 'inline',
        },
        usedIn: ['검사서류'],
      },
      {
        id: 'JDG-CONFORMITY',
        name: '적합/부적합 판정',
        description: '적부 판정',
        category: 'judgement',
        preview: '[ 판정: ○ 적합  ○ 부적합 ]',
        config: {
          options: [
            { value: 'conform', label: '적합', style: 'success' },
            { value: 'nonconform', label: '부적합', style: 'danger' },
          ],
          field: 'overallJudgement',
          layout: 'inline',
        },
        usedIn: ['FQC'],
      },
    ],

    // ========== 서명/날인 블록 ==========
    signatureBlocks: [
      {
        id: 'SIG-FORMAL',
        name: '공식 서명란',
        description: '일자, 회사명, 인감 포함',
        category: 'signature',
        preview: '상기와 같이 견적합니다.\n2025년 01월 15일\n공급자: (주)염진건설 (인)',
        config: {
          leadText: '상기와 같이 견적합니다.',
          showDate: true,
          dateFormat: 'YYYY년 MM월 DD일',
          showCompany: true,
          companyPrefix: '공급자:',
          showSeal: true,
          sealText: '(인감\n날인)',
          sealSize: { width: 60, height: 60 },
        },
        usedIn: ['견적서', '수주확인서'],
      },
      {
        id: 'SIG-SIMPLE',
        name: '간이 서명란',
        description: '회사명, 인감만',
        category: 'signature',
        preview: '(주)염진건설 (인)',
        config: {
          showDate: false,
          showCompany: true,
          showSeal: true,
        },
        usedIn: ['거래명세서'],
      },
      {
        id: 'SIG-NONE',
        name: '서명란 없음',
        description: '내부문서용',
        category: 'signature',
        preview: '(서명란 없음)',
        config: {
          visible: false,
        },
        usedIn: ['내부검사서'],
      },
    ],

    // ========== 작업일지 블록 ==========
    workLogBlocks: [
      {
        id: 'WL-HEADER-INFO',
        name: '작업일지 헤더정보',
        description: '신청업체/신청내용 2단 구조 (첨부 이미지 기준)',
        category: 'workLog',
        preview: '┌─ 신청업체 ─┬─ 신청내용 ─┐\n│ 발주일│업체명│ 현장명│작업일자│',
        config: {
          layout: 'two-column',
          leftSection: {
            title: '신 청 업 체',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '발 주 일', field: 'orderDate', labelBg: '#E6E6E6' }] },
              { row: 2, items: [{ label: '업 체 명', field: 'customerName', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '담 당 자', field: 'contactPerson', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '연 락 처', field: 'contactPhone', labelBg: '#E6E6E6' }] },
            ],
          },
          rightSection: {
            title: '신 청 내 용',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '현 장 명', field: 'siteName', labelBg: '#E6E6E6', valueBg: '#00FFFF' }] },
              { row: 2, items: [{ label: '작 업 일 자', field: 'workDate', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '제품 LOT NO', field: 'productLotNo', labelBg: '#FFF2CC', valueBg: '#00FFFF' }] },
              { row: 4, items: [{ label: '생 산 담 당 자', field: 'productionManager', labelBg: '#E6E6E6' }] },
            ],
          },
        },
        dataSource: 'workLog',
        usedIn: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-PKG', 'WL-STK'],
      },
      // ========== 전개도 상세정보 테이블 블록 ==========
      {
        id: 'TBL-DEVELOPED-PARTS',
        name: '전개도 상세정보 테이블',
        description: '절곡 부품별 전개 치수 및 중량 정보 테이블',
        category: 'workLog',
        preview: '│ 품번 │ 품명 │ 재질 │ 전개폭 │ 길이 │ 수량 │ 중량 │ 전개치수 │',
        config: {
          title: '전개도 상세정보',
          titleStyle: 'bold',
          columns: [
            { id: 'itemCode', label: '품번', width: 60, align: 'center', headerBg: '#E8F4FD' },
            { id: 'itemName', label: '품명', width: 80, align: 'left', headerBg: '#E8F4FD' },
            { id: 'material', label: '재질', width: 80, align: 'center', headerBg: '#E8F4FD' },
            { id: 'totalWidth', label: '전개폭', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
            { id: 'length', label: '길이', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
            { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'weight', label: '중량(kg)', width: 70, align: 'center', format: 'decimal', headerBg: '#E8F4FD' },
            { id: 'dimensions', label: '전개치수', width: 120, align: 'left', headerBg: '#E8F4FD' },
            { id: 'note', label: '비고', width: 80, align: 'left', headerBg: '#E8F4FD' },
          ],
          showTotalRow: true,
          totalFields: ['qty', 'weight'],
        },
        dataSource: 'workLog.developedParts',
        usedIn: ['WL-FLD'],
      },
      // ========== 전개도 도면 블록 ==========
      {
        id: 'DRW-DEVELOPED-PARTS',
        name: '전개도 도면',
        description: '절곡 부품별 전개 도면 (SVG 기반)',
        category: 'workLog',
        preview: '[ 가이드레일 도면 ] [ 바텀바 도면 ] [ 전면판 도면 ] ...',
        config: {
          title: '전개도 도면',
          titleStyle: 'bold',
          layout: 'grid',
          gridColumns: 2,
          showPartInfo: true,
          showDimensions: true,
          svgConfig: {
            viewBoxWidth: 400,
            viewBoxHeight: 100,
            strokeColor: '#333',
            strokeWidth: 1.5,
            fillColor: '#f8f9fa',
            dimensionColor: '#666',
            dimensionFontSize: 10,
            showBendLines: true,
            bendLineColor: '#dc2626',
            bendLineStyle: 'dashed',
          },
          drawings: [
            { id: 'guide-rail', partCode: 'SD33', partName: '가이드레일', dimensions: '40→80→42.5→25', svgType: 'guide-rail-profile' },
            { id: 'bottom-bar', partCode: 'SD34', partName: '바텀바', dimensions: '30→95→30', svgType: 'bottom-bar-profile' },
            { id: 'front-panel', partCode: 'SD36', partName: '전면판', dimensions: '25→210→140→30→50→28', svgType: 'front-panel-profile' },
            { id: 'rear-panel', partCode: 'SD37', partName: '후면판', dimensions: '25→165→90→155', svgType: 'rear-panel-profile' },
            { id: 'side-panel', partCode: 'SD38', partName: '측면판', dimensions: '35→50→35', svgType: 'side-panel-profile' },
            { id: 'top-cover', partCode: 'SD39', partName: '상부덮개', dimensions: '25→140→330→25', svgType: 'top-cover-profile' },
          ],
        },
        dataSource: 'workLog.developedParts',
        usedIn: ['WL-FLD'],
      },
      {
        id: 'TBL-WORKLOG-SCREEN',
        name: '스크린 작업내역 테이블',
        description: '스크린 생산 작업내역 (첨부 이미지 기준)',
        category: 'workLog',
        preview: '│ 입고LOT │ 제품명 │ 부호 │ 가로 │ 세로 │ 나머지높이 │ 규격별 매수 │',
        config: {
          title: '■ 작업 내역',
          titleStyle: 'bold-underline',
          columns: [
            { id: 'no', label: '일련\n번호', width: 35, align: 'center', headerBg: '#E6E6E6' },
            { id: 'lotNo', label: '입고 LOT NO.', width: 90, align: 'center', headerBg: '#E6E6E6' },
            { id: 'productName', label: '제품명', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'partCode', label: '부호', width: 70, align: 'center', headerBg: '#E6E6E6' },
            { id: 'width', label: '가로', width: 50, align: 'center', format: 'number', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
            { id: 'height', label: '세로', width: 50, align: 'center', format: 'number', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
            { id: 'remainHeight', label: '나머지\n높이', width: 50, align: 'center', format: 'number', valueBg: '#FFCCCC', headerBg: '#E6E6E6' },
            // 규격별 매수 (1210, 900, 600, 400, 300) - 원폭 1210 기준
            { id: 'spec1210', label: '1210', width: 45, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'spec900', label: '900', width: 45, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'spec600', label: '600', width: 45, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'spec400', label: '400', width: 45, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'spec300', label: '300', width: 45, align: 'center', format: 'number', headerBg: '#FFF2CC' },
          ],
          headerGroups: [
            { label: '제작사이즈(mm)', colSpan: 3, startCol: 'width', headerBg: '#E6E6E6' },
            { label: '규격(매수)', colSpan: 5, startCol: 'spec1210', headerBg: '#FFF2CC' },
          ],
          // ========== 규격매수 계산 공식 (첨부 엑셀 이미지 기준) ==========
          // 원폭 1210 기준 시점 및 중첩 테이블:
          // 매수 1: 시점 140, 제작사이즈 1070 (상판 900 적용시: 1970)
          // 매수 2: 시점 180, 제작사이즈 2240 (상판 900 적용시: 3140)
          // 매수 3: 시점 220, 제작사이즈 3410 (상판 900 적용시: 4310)
          // 매수 4: 시점 260, 제작사이즈 4580 (상판 900 적용시: 5480)
          // 매수 5: 시점 300, 제작사이즈 5750 (상판 900 적용시: 6650)
          // 매수 6: 시점 340, 제작사이즈 6920 (상판 900 적용시: 7820)
          // 매수 7: 시점 380, 제작사이즈 8090 (상판 900 적용시: 8990)
          // 매수 8: 시점 420, 제작사이즈 9260
          specCalculation: {
            baseSpec: 1210, // 원폭 기준값
            topPlateSpec: 900, // 상판 규격
            productionSizeOffset: 1170, // 제작사이즈 세로 기본값 (첨부 이미지 우측)
            additionalHeight: 40, // 추가 높이 값
            // 가로(width) 기준 규격매수 계산 (상판 900 적용 시)
            // 공식: =IF(AND(width>1070,width<=1970),1,IF(AND(width>1970,width<=3140),2,...))
            specRanges: [
              { min: 0, max: 1070, count: 0 },       // 기준 미달
              { min: 1070, max: 1970, count: 1 },   // 매수 1
              { min: 1970, max: 3140, count: 2 },   // 매수 2
              { min: 3140, max: 4310, count: 3 },   // 매수 3
              { min: 4310, max: 5480, count: 4 },   // 매수 4
              { min: 5480, max: 6650, count: 5 },   // 매수 5
              { min: 6650, max: 7820, count: 6 },   // 매수 6
              { min: 7820, max: 8990, count: 7 },   // 매수 7
              { min: 8990, max: 10160, count: 8 },  // 매수 8
              { min: 10160, max: 10430, count: 9 }, // 매수 9
            ],
            // 시점 및 중첩 테이블 (첨부 엑셀 이미지 우측 기준)
            // 원폭 1210 기준 매수별 시점/중첩/제작사이즈
            overlapTable: [
              { count: 1, overlap: 140, productionSize: 1070, withTopPlate: 1970 },
              { count: 2, overlap: 180, productionSize: 2240, withTopPlate: 3140 },
              { count: 3, overlap: 220, productionSize: 3410, withTopPlate: 4310 },
              { count: 4, overlap: 260, productionSize: 4580, withTopPlate: 5480 },
              { count: 5, overlap: 300, productionSize: 5750, withTopPlate: 6650 },
              { count: 6, overlap: 340, productionSize: 6920, withTopPlate: 7820 },
              { count: 7, overlap: 380, productionSize: 8090, withTopPlate: 8990 },
              { count: 8, overlap: 420, productionSize: 9260, withTopPlate: null },
            ],
            // 나머지높이(remainHeight) 기준 규격 분배 공식
            // =IF(AND(remainHeight>0,remainHeight<=300),1,0) for 300 column
            // =IF(AND(remainHeight>300,remainHeight<=400),1,0) for 400 column
            // =IF(AND(remainHeight>400,remainHeight<=600),1,0) for 600 column
            // =IF(AND(remainHeight>600,remainHeight<=900),1,0) for 900 column
            heightRanges: [
              { specId: 'spec300', min: 0, max: 300 },
              { specId: 'spec400', min: 300, max: 400 },
              { specId: 'spec600', min: 400, max: 600 },
              { specId: 'spec900', min: 600, max: 900 },
            ],
            // 원폭 1210 적용 규격 계산 함수
            // spec1210 매수 = specRanges 기준 count 값
            // 사용량(M) 계산: 원폭(1210) × 매수 / 1000
            calculateSpec: (width, remainHeight) => {
              // 가로 기준 1210 규격 매수 계산
              let spec1210Count = 0;
              const ranges = [
                { min: 0, max: 1070, count: 0 },
                { min: 1070, max: 1970, count: 1 },
                { min: 1970, max: 3140, count: 2 },
                { min: 3140, max: 4310, count: 3 },
                { min: 4310, max: 5480, count: 4 },
                { min: 5480, max: 6650, count: 5 },
                { min: 6650, max: 7820, count: 6 },
                { min: 7820, max: 8990, count: 7 },
                { min: 8990, max: 10160, count: 8 },
                { min: 10160, max: 10430, count: 9 },
              ];
              for (const range of ranges) {
                if (width > range.min && width <= range.max) {
                  spec1210Count = range.count;
                  break;
                }
              }
              // 나머지높이 기준 규격 분배
              const specs = { spec1210: spec1210Count, spec900: 0, spec600: 0, spec400: 0, spec300: 0 };
              if (remainHeight > 0 && remainHeight <= 300) specs.spec300 = 1;
              else if (remainHeight > 300 && remainHeight <= 400) specs.spec400 = 1;
              else if (remainHeight > 400 && remainHeight <= 600) specs.spec600 = 1;
              else if (remainHeight > 600 && remainHeight <= 900) specs.spec900 = 1;
              return specs;
            },
          },
          showTotalRow: true,
          totalFields: [
            { field: 'spec1210' },
            { field: 'spec900' },
            { field: 'spec600' },
            { field: 'spec400' },
            { field: 'spec300' },
          ],
          footerSections: [
            {
              title: '내화실 입고 LOT.NO',
              fields: [{ field: 'fireRoomLotNo', width: 200 }],
            },
            {
              // 사용량(M) - 첨부 엑셀 이미지 기준
              // 원폭별 사용량 계산: 원폭(mm) × 매수 × 세로(mm) / 1,000,000
              title: '사용량(M)',
              fields: [
                { label: '1210', field: 'usage1210', width: 60 },
                { label: '', field: 'usageValue1210', width: 60 },
                { label: '400', field: 'usage400', width: 60 },
              ],
              subFields: [
                { label: '900', field: 'usage900', width: 60 },
                { label: '', field: 'usageValue900', width: 60 },
                { label: '300', field: 'usage300', width: 60 },
              ],
              subFields2: [
                { label: '600', field: 'usage600', width: 60 },
              ],
              // 사용량 계산 공식 (첨부 엑셀 기준)
              // 1210 사용량 = spec1210 합계 × 37.12 (또는 세로값 × 1.21 / 1000)
              usageCalculation: {
                spec1210: { multiplier: 37.12, description: '원폭 1210mm 기준 사용량 계산' },
                spec900: { multiplier: 0.9, description: '상판 900mm 기준 사용량 계산' },
                spec600: { multiplier: 0.6, description: '600mm 규격 사용량 계산' },
                spec400: { multiplier: 0.4, description: '400mm 규격 사용량 계산' },
                spec300: { multiplier: 0.3, description: '300mm 규격 사용량 계산' },
              },
            },
            {
              // 사용량(m²) - 첨부 엑셀 이미지 기준: 44.92
              title: '사용량(m²)',
              field: 'totalUsageArea',
              format: 'number',
              highlight: true,
              // 총 사용량(m²) = Σ(원폭 × 세로 × 매수) / 1,000,000
              calculation: 'sum of (spec × height × count) / 1000000',
            },
          ],
        },
        dataSource: 'workLog',
        usedIn: ['WL-SCR'],
      },
      {
        id: 'TBL-WORKLOG-FOLD',
        name: '절곡 작업내역 테이블',
        description: '절곡 생산 작업내역 (첨부 이미지 기준 - 섹션별 도면 포함)',
        category: 'workLog',
        preview: '│ 도면 │ 세부품명 │ 재질 │ LOT NO │ 길이/규격 │ 수량 │',
        config: {
          title: '1. 작업 내역 - 절곡 상세도면 참조',
          titleStyle: 'bold-underline',

          // ========== 전개도 상세정보 테이블 ==========
          developedPartsTable: {
            enabled: true,
            title: '전개도 상세정보',
            description: '절곡 부품별 전개 치수 및 중량 정보',
            columns: [
              { id: 'itemCode', label: '품번', width: 60, align: 'center', headerBg: '#E8F4FD' },
              { id: 'itemName', label: '품명', width: 80, align: 'left', headerBg: '#E8F4FD' },
              { id: 'material', label: '재질', width: 80, align: 'center', headerBg: '#E8F4FD' },
              { id: 'totalWidth', label: '전개폭', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
              { id: 'length', label: '길이', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
              { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number', headerBg: '#FFF2CC' },
              { id: 'weight', label: '중량(kg)', width: 70, align: 'center', format: 'decimal', headerBg: '#E8F4FD' },
              { id: 'dimensions', label: '전개치수', width: 120, align: 'left', headerBg: '#E8F4FD' },
              { id: 'note', label: '비고', width: 80, align: 'left', headerBg: '#E8F4FD' },
            ],
            showTotalRow: true,
            totalFields: ['qty', 'weight'],
            sampleData: [
              { itemCode: 'SD30', itemName: '엘바', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 4, weight: 0.9, dimensions: '75', note: '' },
              { itemCode: 'SD31', itemName: '하장바', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 2, weight: 1.158, dimensions: '67→126→165→178→193', note: '' },
              { itemCode: 'SD32', itemName: '짜부가스켓', material: 'E.G.I 0.8T', totalWidth: 500, length: 3000, qty: 4, weight: 0.576, dimensions: '48', note: '80*4,50*8' },
              { itemCode: 'SD33', itemName: '가이드레일', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 2, weight: 2.304, dimensions: '40→80→42.5→25', note: '' },
              { itemCode: 'SD34', itemName: '바텀바', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 1, weight: 1.44, dimensions: '30→95→30', note: '' },
              { itemCode: 'SD35', itemName: '바텀커버', material: 'E.G.I 1.2T', totalWidth: 500, length: 3000, qty: 1, weight: 0.864, dimensions: '65→50→16.5→25', note: '' },
              { itemCode: 'SD36', itemName: '전면판', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 1, weight: 1.92, dimensions: '25→210→140→30→50→28', note: '' },
              { itemCode: 'SD37', itemName: '후면판', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 1, weight: 1.728, dimensions: '25→165→90→155', note: '' },
              { itemCode: 'SD38', itemName: '측면판', material: 'E.G.I 1.6T', totalWidth: 500, length: 3000, qty: 2, weight: 0.96, dimensions: '35→50→35', note: '' },
              { itemCode: 'SD39', itemName: '상부덮개', material: 'E.G.I 1.2T', totalWidth: 500, length: 3000, qty: 1, weight: 0.648, dimensions: '25→140→330→25', note: '' },
            ],
          },

          // ========== 전개도 도면 섹션 ==========
          developedDrawing: {
            enabled: true,
            title: '전개도 도면',
            description: '절곡 부품별 전개 도면 (SVG 기반)',
            layout: 'grid', // grid | list | single
            gridColumns: 2,
            drawings: [
              {
                id: 'guide-rail',
                partCode: 'SD33',
                partName: '가이드레일',
                dimensions: '40→80→42.5→25',
                svgType: 'guide-rail-profile',
                description: '벽면형 가이드레일 전개도',
              },
              {
                id: 'bottom-bar',
                partCode: 'SD34',
                partName: '바텀바',
                dimensions: '30→95→30',
                svgType: 'bottom-bar-profile',
                description: '하단 바텀바 전개도',
              },
              {
                id: 'front-panel',
                partCode: 'SD36',
                partName: '전면판',
                dimensions: '25→210→140→30→50→28',
                svgType: 'front-panel-profile',
                description: '케이스 전면판 전개도',
              },
              {
                id: 'rear-panel',
                partCode: 'SD37',
                partName: '후면판',
                dimensions: '25→165→90→155',
                svgType: 'rear-panel-profile',
                description: '케이스 후면판 전개도',
              },
              {
                id: 'side-panel',
                partCode: 'SD38',
                partName: '측면판',
                dimensions: '35→50→35',
                svgType: 'side-panel-profile',
                description: '케이스 측면판 전개도',
              },
              {
                id: 'top-cover',
                partCode: 'SD39',
                partName: '상부덮개',
                dimensions: '25→140→330→25',
                svgType: 'top-cover-profile',
                description: '케이스 상부덮개 전개도',
              },
            ],
            // SVG 렌더링 설정
            svgConfig: {
              viewBoxWidth: 400,
              viewBoxHeight: 100,
              strokeColor: '#333',
              strokeWidth: 1.5,
              fillColor: '#f8f9fa',
              dimensionColor: '#666',
              dimensionFontSize: 10,
              showDimensions: true,
              showBendLines: true,
              bendLineColor: '#dc2626',
              bendLineStyle: 'dashed',
            },
          },

          // 섹션별 구조 (첨부 이미지 기준)
          sections: [
            {
              id: 'wall-type',
              title: '1.1 벽면형 [120·70]',
              drawing: {
                type: 'schematic',
                partCodes: ['KSS01', 'KSE01'],
                dimensions: { width: 120, height: 70 },
              },
              columns: [
                { id: 'drawing', label: '', width: 120, type: 'drawing', rowSpan: 'section' },
                { id: 'partName', label: '세부품명', width: 80, align: 'center', headerBg: '#FFF2CC' },
                { id: 'material', label: '재질', width: 70, align: 'center', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: '입고 & 생산 LOT NO', width: 120, align: 'center', headerBg: '#FFF2CC' },
                { id: 'lengthSpec', label: '길이/규격', width: 90, align: 'center', headerBg: '#FFF2CC' },
                { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number', valueBg: '#FFCCCC', headerBg: '#FFCCCC' },
              ],
              parts: [
                { partCode: '①', partName: '마감재', material: 'EGI1.15T' },
                { partCode: '②', partName: '가이드레일', material: '' },
                { partCode: '③', partName: 'C형', material: 'EGI1.55T' },
                { partCode: '④', partName: 'D형', material: '' },
                { partCode: '⑤', partName: '별도마감재', material: 'SUS1.2T' },
                { partCode: '', partName: '하부BASE', material: 'EGI1.55T', spec: '하부BASE 130·80' },
              ],
            },
            {
              id: 'bottom-finish',
              title: '2. 하단마감재 [60·40]',
              drawing: {
                type: 'schematic',
                partCodes: ['KSS01', 'KSE01'],
                dimensions: { width: 60, height: 40 },
              },
              parts: [
                { partCode: '①', partName: '하단마감재', material: 'EGI1.55T' },
                { partCode: '④', partName: '별도마감재', material: 'SUS1.2T' },
                { partCode: '②', partName: '하단보강엘바', material: 'EGI1.55T' },
                { partCode: '③', partName: '하단보강평철', material: 'EGI1.15T' },
              ],
            },
            {
              id: 'case',
              title: '3.1 케이스 [500*330]',
              drawing: {
                type: 'schematic',
                dimensions: { width: 500, height: 330 },
                subDimensions: { width: 330, height: 190 },
              },
              parts: [
                { partCode: '①', partName: '전면부', material: 'EGI1.55T' },
                { partCode: '②', partName: '린텔부', material: 'EGI1.55T' },
                { partCode: '③⑤', partName: '하부점검구', material: 'EGI1.55T' },
                { partCode: '④', partName: '후면코너부', material: 'EGI1.55T' },
                { partCode: '⑥', partName: '상부덮개', material: 'EGI1.55T' },
                { partCode: '⑦', partName: '측면부(마구리)', material: 'EGI1.55T' },
              ],
            },
            {
              id: 'smoke-barrier',
              title: '4. 연기차단재',
              drawing: {
                type: 'schematic',
                description: '연기차단재 프레임(EGI 0.8T) + 화이바 글라스 코팅직물(너비 50/80)',
              },
              parts: [
                { partCode: '', partName: '레일용 [W50]', material: 'EG0.8T + 화이바 글라스 코팅직물' },
                { partCode: '', partName: '케이스용 [W80]', material: 'EG0.8T + 화이바 글라스 코팅직물' },
              ],
            },
          ],
          footerSummary: {
            title: '생산량 합계 (kg)',
            fields: [
              { label: 'SUS', field: 'totalSUS', format: 'number', width: 150 },
              { label: 'EGI', field: 'totalEGI', format: 'number', width: 150 },
            ],
          },
          remarks: {
            title: '[비 고]',
            field: 'remarks',
          },
          // ========== 전개도 상세 입력값 합계 계산 ==========
          // 절곡 작업일지에서 각 섹션별 품목 수량의 합계 표시
          sectionSummary: {
            enabled: true,
            title: '전개도 상세 합계',
            description: '각 섹션별 품목 수량 합계를 자동 계산하여 표시',
            summaryFields: [
              {
                id: 'wall-type-total',
                sectionId: 'wall-type',
                label: '벽면형 합계',
                field: 'qty',
                format: 'number'
              },
              {
                id: 'bottom-finish-total',
                sectionId: 'bottom-finish',
                label: '하단마감재 합계',
                field: 'qty',
                format: 'number'
              },
              {
                id: 'case-total',
                sectionId: 'case',
                label: '케이스 합계',
                field: 'qty',
                format: 'number'
              },
              {
                id: 'smoke-barrier-total',
                sectionId: 'smoke-barrier',
                label: '연기차단재 합계',
                field: 'qty',
                format: 'number'
              },
            ],
            grandTotal: {
              label: '전체 합계',
              format: 'number',
              style: 'bold',
            },
            // 섹션별 수량 합계 계산 함수
            calculateSectionTotal: (sectionData, fieldName) => {
              if (!sectionData || !Array.isArray(sectionData)) return 0;
              return sectionData.reduce((sum, item) => {
                const value = parseFloat(item[fieldName]) || 0;
                return sum + value;
              }, 0);
            },
            // 전체 합계 계산 함수
            calculateGrandTotal: (sections, fieldName) => {
              if (!sections || typeof sections !== 'object') return 0;
              return Object.values(sections).reduce((total, sectionData) => {
                if (!Array.isArray(sectionData)) return total;
                const sectionSum = sectionData.reduce((sum, item) => {
                  const value = parseFloat(item[fieldName]) || 0;
                  return sum + value;
                }, 0);
                return total + sectionSum;
              }, 0);
            },
            // 모든 합계를 한번에 계산
            calculate: (workLogData) => {
              const result = {
                sectionTotals: {},
                grandTotal: 0,
              };

              const sections = {
                'wall-type': workLogData?.wallType || [],
                'bottom-finish': workLogData?.bottomFinish || [],
                'case': workLogData?.case || [],
                'smoke-barrier': workLogData?.smokeBarrier || [],
              };

              let grandTotal = 0;

              Object.entries(sections).forEach(([sectionId, sectionData]) => {
                const sectionSum = (sectionData || []).reduce((sum, item) => {
                  return sum + (parseFloat(item.qty) || 0);
                }, 0);
                result.sectionTotals[sectionId] = sectionSum;
                grandTotal += sectionSum;
              });

              result.grandTotal = grandTotal;
              return result;
            },
          },
        },
        dataSource: 'workLog',
        usedIn: ['WL-FLD'],
      },
      {
        id: 'TBL-WORKLOG-SLAT',
        name: '슬랫 작업내역 테이블',
        description: '슬랫 생산 작업내역 (첨부 이미지 기준)',
        category: 'workLog',
        preview: '│ 입고LOT │ 품명 │ 가로 │ 세로 │ 매수(세로) │ 조인트바 │ 방화유리 │ 코일사용량 │ 설치층/부호 │',
        config: {
          title: '■ 작업 내역',
          titleStyle: 'bold-underline',
          columns: [
            { id: 'no', label: '일련\n번호', width: 35, align: 'center', headerBg: '#FFF2CC' },
            { id: 'lotNo', label: '입고 LOT NO.', width: 90, align: 'center', headerBg: '#FFF2CC' },
            { id: 'itemName', label: '품명', width: 80, align: 'center', headerBg: '#FFF2CC' },
            { id: 'width', label: '가로', width: 55, align: 'center', format: 'number', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
            { id: 'height', label: '세로', width: 55, align: 'center', format: 'number', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
            { id: 'sheetCount', label: '매수(세로)', width: 65, align: 'center', format: 'number', headerBg: '#E6E6E6', calculated: true },
            { id: 'jointBarQty', label: '조인트바\n수량', width: 55, align: 'center', format: 'number', valueBg: '#FFCCCC', headerBg: '#FFF2CC', calculated: true },
            { id: 'fireGlassQty', label: '방화유리\n수량', width: 55, align: 'center', valueBg: '#CCFFCC', headerBg: '#FFF2CC' },
            { id: 'coilUsage', label: '코일\n사용량', width: 55, align: 'center', format: 'number', headerBg: '#FFF2CC', calculated: true },
            { id: 'installFloor', label: '설치층 / 부호', width: 90, align: 'center', headerBg: '#FFF2CC' },
          ],
          headerGroups: [
            { label: '제작사이즈(mm) - 미미제외', colSpan: 3, startCol: 'width', headerBg: '#E6E6E6' }
          ],
          // ========== 슬랫 작업일지 계산 공식 (첨부 엑셀 이미지 기준) ==========
          // 매수(세로) 계산: =ROUNDDOWN(세로/72+1, 0)
          // 예시: 세로 3500mm → ROUNDDOWN(3500/72+1, 0) = ROUNDDOWN(49.6, 0) = 49매
          slateCalculation: {
            slatePitch: 72, // 슬랫 피치(간격) mm
            // 매수(세로) 계산 공식
            // 공식: =ROUNDDOWN(height/72+1, 0)
            calculateSheetCount: (height) => {
              return Math.floor(height / 72 + 1);
            },
            // 조인트바 수량 계산 공식
            // 공식: 매수 ÷ 10 (올림) 또는 특정 규칙에 따름
            // 예시: 49매 → 5개 (대략 매수/10 올림)
            calculateJointBar: (sheetCount) => {
              return Math.ceil(sheetCount / 10);
            },
            // 코일사용량 계산 공식
            // 공식: (가로 × 세로) / 1000000 × 매수 또는 특정 계수 적용
            // 예시: 4120 × 3500 / 1000000 × 14.33 ≈ 206.6
            calculateCoilUsage: (width, height, sheetCount) => {
              // 슬랫 코일 사용량 = 가로(m) × 피치(72mm) × 매수 / 1000
              // 또는 (가로 × 세로 / 1000000) × 특정계수
              const area = (width * height) / 1000000; // m²
              const coilFactor = 14.33; // 코일 변환 계수
              return Math.round(area * coilFactor * 10) / 10;
            },
            // 생산량(m²) 계산
            // 공식: 가로(mm) × 세로(mm) / 1,000,000
            calculateArea: (width, height) => {
              return Math.round((width * height) / 1000000 * 100) / 100;
            },
            // 전체 계산 함수 (가로, 세로 입력 시 모든 값 자동 계산)
            calculate: (width, height) => {
              const sheetCount = Math.floor(height / 72 + 1);
              const jointBarQty = Math.ceil(sheetCount / 10);
              const area = (width * height) / 1000000;
              const coilUsage = Math.round(area * 14.33 * 10) / 10;
              return {
                sheetCount,      // 매수(세로): 49
                jointBarQty,     // 조인트바 수량: 5
                coilUsage,       // 코일사용량: 206.6
                area: Math.round(area * 100) / 100, // 생산량(m²): 14.42
              };
            },
          },
          showTotalRow: true,
          totalFields: [
            { field: 'sheetCount', label: '매수 합계' },
            { field: 'jointBarQty', label: '조인트바 합계' },
            { field: 'coilUsage', label: '코일사용량 합계' },
          ],
          footerSummary: {
            fields: [
              { label: '생산량 합계 (m²)', field: 'totalArea', format: 'number', width: 200, highlight: true },
              { label: '조인트바 합계', field: 'totalJointBar', format: 'number', width: 200 },
            ],
          },
        },
        dataSource: 'workLog',
        usedIn: ['WL-SLT'],
      },
      {
        id: 'TBL-WORKLOG-FORMING',
        name: '재고생산 작업일지 (중간검사성적서)',
        description: '절곡품 재고생산 작업일지 - 중간검사 DATA 포함 (첨부 이미지 기준)',
        category: 'workLog',
        preview: '│ 품명│규격│길이│입고LOT NO│생산LOT NO│로트크기│',
        config: {
          // 상단 품목정보
          headerInfo: {
            fields: [
              { row: 1, items: [
                { label: '품명', field: 'itemName', labelBg: '#E6E6E6', width: 80 },
                { field: 'itemNameValue', colSpan: 2 },
                { label: '생산 LOT NO', field: 'productionLotNoLabel', labelBg: '#E6E6E6' },
                { field: 'productionLotNo', valueBg: '#00FFFF' },
              ]},
              { row: 2, items: [
                { label: '규격', field: 'spec', labelBg: '#E6E6E6' },
                { field: 'specValue' },
                { label: '로트크기', field: 'lotSizeLabel', labelBg: '#E6E6E6' },
                { field: 'lotSize' },
                { label: 'EA', width: 30 },
              ]},
              { row: 3, items: [
                { label: '길이', field: 'length', labelBg: '#E6E6E6' },
                { field: 'lengthValue' },
                { label: '검사일자', field: 'inspectionDateLabel', labelBg: '#E6E6E6' },
                { field: 'inspectionDate' },
              ]},
              { row: 4, items: [
                { label: '입고 LOT NO', field: 'receiveLotNoLabel', labelBg: '#E6E6E6' },
                { field: 'receiveLotNo' },
                { label: '검사자', field: 'inspectorLabel', labelBg: '#E6E6E6' },
                { field: 'inspector' },
                { label: '개발자', width: 60 },
              ]},
            ],
          },
          // 중간검사 기준서 (도면 + 검사기준 테이블)
          inspectionStandard: {
            title: '중간 검사\n기준서\nKDPS-20',
            titleStyle: 'vertical-blue',
            drawing: {
              type: 'schematic',
              parts: [
                { code: '①', name: '전면부' },
                { code: '②', name: '린텔부' },
                { code: '③', name: '하부 점검구' },
                { code: '④', name: '후면 코너부' },
                { code: '⑤', name: '후면 점검구' },
                { code: '⑥', name: '상부 덮개' },
              ],
            },
            table: {
              columns: [
                { id: 'drawingRef', label: '도해', width: 150, type: 'link', headerBg: '#E6E6E6' },
                { id: 'inspectionItem', label: '검사항목', width: 80, headerBg: '#E6E6E6' },
                { id: 'inspectionStandard', label: '검사기준', width: 180, headerBg: '#E6E6E6' },
                { id: 'inspectionMethod', label: '검사방법', width: 80, headerBg: '#E6E6E6' },
                { id: 'inspectionCycle', label: '검사주기', width: 80, headerBg: '#E6E6E6' },
                { id: 'relatedSpec', label: '관련규정', width: 100, headerBg: '#E6E6E6' },
              ],
              rows: [
                { inspectionItem: '겉모양', subItem: '절곡상태', standard: '사용상 해로운 결함이 없을것', method: '육안검사', cycle: '', spec: 'KS F 4510 5.1항' },
                { inspectionItem: '치수\n(mm)', subItem: '길이', standard: '도면치수 ± 4', method: '체크검사', cycle: 'n = 1, c = 0', spec: 'KS F 4510 7항\n표9' },
                { inspectionItem: '', subItem: '간격', standard: '도면치수 ± 2', method: '', cycle: '', spec: 'KS F 4510 7항\n표9 / 자체규정' },
              ],
            },
          },
          // 중간검사 DATA 테이블
          inspectionData: {
            title: '중간검사 DATA',
            titleBg: '#BDD7EE',
            columns: [
              { id: 'no', label: 'NO', width: 35, headerBg: '#FFF2CC' },
              { id: 'itemName', label: '품명', width: 90, headerBg: '#FFF2CC' },
              { id: 'appearance', label: '겉모양', width: 55, subLabel: '절곡상태', headerBg: '#FFF2CC' },
              // 치수(mm) - 길이
              { id: 'lengthDrawing', label: '도면치수', width: 55, parentLabel: '길이', headerBg: '#E6E6E6' },
              { id: 'lengthMeasured', label: '측정값', width: 55, parentLabel: '길이', headerBg: '#E6E6E6', valueBg: '#FFFF00' },
              // 치수(mm) - 너비
              { id: 'widthDrawing', label: '도면치수', width: 55, parentLabel: '너비', headerBg: '#E6E6E6' },
              { id: 'widthMeasured', label: '측정값', width: 55, parentLabel: '너비', headerBg: '#E6E6E6' },
              // 치수(mm) - 간격
              { id: 'gapPoint', label: 'POINT', width: 55, parentLabel: '간격', headerBg: '#E6E6E6' },
              { id: 'gapDrawing', label: '도면치수', width: 55, parentLabel: '간격', headerBg: '#E6E6E6', valueBg: '#00FFFF' },
              { id: 'gapMeasured', label: '측정값', width: 55, parentLabel: '간격', headerBg: '#E6E6E6' },
              // 판정
              { id: 'judgement', label: '판정\n(적/부)', width: 40, headerBg: '#FFF2CC' },
            ],
            headerGroups: [
              { label: '치수(mm)', colSpan: 6, startCol: 'lengthDrawing', headerBg: '#FFF2CC' },
            ],
          },
          // 부적합 내용 및 종합판정
          footer: {
            defectRemarks: {
              title: '[부적합 내용]',
              field: 'defectContent',
            },
            finalJudgement: {
              title: '종합판정',
              titleBg: '#BDD7EE',
              options: ['합격', '불합격'],
              field: 'finalJudgement',
              highlightStyle: 'large-bold',
            },
          },
        },
        dataSource: 'workLog',
        usedIn: ['WL-STK'],
      },
      {
        id: 'TBL-WORKLOG-PACKAGE',
        name: '포장 작업내역 테이블',
        description: '포장 완료 내역',
        category: 'workLog',
        preview: '│ LOT │ 품목 │ 수량 │ 포장방법 │',
        config: {
          title: '포장 작업내역',
          columns: [
            { id: 'no', label: 'NO', width: 40, align: 'center' },
            { id: 'lotNo', label: 'LOT번호', width: 100, align: 'center' },
            { id: 'itemName', label: '품목명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 100, align: 'center' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number', editable: true },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
            { id: 'packageType', label: '포장방법', width: 80, align: 'center' },
            { id: 'palletNo', label: '파렛트번호', width: 80, align: 'center' },
            { id: 'remarks', label: '비고', width: 80, align: 'left' },
          ],
          showTotalRow: true,
        },
        dataSource: 'workLog',
        usedIn: ['WL-PKG'],
      },
      {
        id: 'WL-SUMMARY',
        name: '작업일지 합계',
        description: '총 생산량, 사용자재량 합계',
        category: 'workLog',
        preview: '│ 총 생산량: 000 │ 총 불량: 00 │ 양품율: 00% │',
        config: {
          fields: [
            { label: '총 생산량', field: 'totalProduction', format: 'number' },
            { label: '총 불량수', field: 'totalDefect', format: 'number' },
            { label: '양품수', field: 'totalGood', format: 'number', calculated: 'totalProduction - totalDefect' },
            { label: '양품율', field: 'goodRate', format: 'percent', calculated: 'totalGood / totalProduction * 100' },
          ],
          layout: 'horizontal',
          highlight: true,
        },
        dataSource: 'workLog',
        usedIn: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK', 'WL-PKG'],
      },
      {
        id: 'WL-MATERIAL-USAGE',
        name: '자재사용량',
        description: '작업에 사용된 자재 내역',
        category: 'workLog',
        preview: '│ 자재명 │ 규격 │ 사용량 │ 잔량 │',
        config: {
          title: '자재 사용내역',
          columns: [
            { id: 'no', label: 'NO', width: 40, align: 'center' },
            { id: 'materialCode', label: '자재코드', width: 80, align: 'center' },
            { id: 'materialName', label: '자재명', width: 150, align: 'left' },
            { id: 'spec', label: '규격', width: 100, align: 'center' },
            { id: 'usedQty', label: '사용량', width: 70, align: 'right', format: 'number', editable: true },
            { id: 'unit', label: '단위', width: 40, align: 'center' },
            { id: 'remainQty', label: '잔량', width: 70, align: 'right', format: 'number' },
            { id: 'remarks', label: '비고', width: 80, align: 'left' },
          ],
          linkToInventory: true,
        },
        dataSource: 'inventory',
        usedIn: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK'],
      },
      // ========== 출고증 전용 블록 (작업일지 스타일 기반) ==========
      {
        id: 'TS-HEADER-INFO',
        name: '출고증 헤더정보',
        description: '신청업체/신청내용/납품정보 3단 구조',
        category: 'shipment',
        preview: '┌─ 신청업체 ─┬─ 신청내용 ─┬─ 납품정보 ─┐',
        config: {
          layout: 'three-section',
          // 신청업체 섹션
          requesterSection: {
            title: '신 청 업 체',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '발 주 일', field: 'orderDate', labelBg: '#E6E6E6' }] },
              { row: 2, items: [{ label: '발 주 처', field: 'customerName', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '발주담당자', field: 'contactPerson', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '담당자연락처', field: 'contactPhone', labelBg: '#E6E6E6' }] },
            ],
          },
          // 신청내용 섹션
          contentSection: {
            title: '신 청 내 용',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '현 장 명', field: 'siteName', labelBg: '#E6E6E6', valueBg: '#00FFFF' }] },
              { row: 2, items: [{ label: '납기요청일', field: 'requestDueDate', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '출 고 일', field: 'shipDate', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '셔터총수량', field: 'totalShutterQty', labelBg: '#E6E6E6' }] },
            ],
          },
          // 납품정보 섹션
          deliverySection: {
            title: '납 품 정 보',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '인수담당자', field: 'recipient', labelBg: '#E6E6E6' }] },
              { row: 2, items: [{ label: '인수자연락처', field: 'recipientPhone', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '배 송 방 법', field: 'deliveryMethod', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '배송지주소', field: 'deliveryAddress', labelBg: '#E6E6E6' }] },
            ],
          },
        },
        dataSource: 'shipment',
        usedIn: ['TS'],
      },
      {
        id: 'TBL-TS-MATERIALS',
        name: '출고증 부자재 테이블',
        description: '부자재 섹션 (감기샤프트, 각파이프, 앵글)',
        category: 'shipment',
        preview: '│ ● 부자재 │ 품명 │ 규격 │ 길이 │ 수량 │ LOT NO │',
        config: {
          title: '● 부 자 재',
          titleStyle: 'bold-underline',
          sections: [
            {
              subtitle: '1) 감기샤프트',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 120, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 80, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
            {
              subtitle: '2) 각파이프',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 120, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 80, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
            {
              subtitle: '3) 앵글',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 120, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 80, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
          ],
        },
        dataSource: 'shipment.materials',
        usedIn: ['TS'],
      },
      {
        id: 'TBL-TS-MOTORS',
        name: '출고증 모터 테이블',
        description: '모터 섹션 (220V/380V, 브라켓트, 연동제어기)',
        category: 'shipment',
        preview: '│ ● 모터 │ 규격 │ 전원 │ 용량 │ 수량 │ LOT NO │',
        config: {
          title: '● 모 터',
          titleStyle: 'bold-underline',
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
            { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
            { id: 'spec', label: '규격', width: 80, align: 'center', headerBg: '#E6E6E6' },
            { id: 'voltage', label: '전원(V)', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'capacity', label: '용량(KG)', width: 60, align: 'right', format: 'number', headerBg: '#E6E6E6' },
            { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
            { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', headerBg: '#E6E6E6' },
            { id: 'remarks', label: '비고', width: 80, align: 'left', headerBg: '#E6E6E6' },
          ],
          subSections: [
            { id: 'motor220', label: '220V 모터', voltage: 220 },
            { id: 'motor380', label: '380V 모터', voltage: 380 },
            { id: 'bracket', label: '브라켓트' },
            { id: 'controller', label: '연동제어기' },
          ],
        },
        dataSource: 'shipment.motors',
        usedIn: ['TS'],
      },
      {
        id: 'TBL-TS-SLAT',
        name: '출고증 슬랫 테이블',
        description: '슬랫 섹션 (EGI 1.55T)',
        category: 'shipment',
        preview: '│ ● 슬랫(SLAT) │ 재질 │ 두께 │ 길이 │ 수량 │',
        config: {
          title: '● 슬랫(SLAT)',
          titleStyle: 'bold-underline',
          subtitle: 'EGI 1.55T',
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
            { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'material', label: '재질', width: 80, align: 'center', headerBg: '#E6E6E6' },
            { id: 'thickness', label: '두께(T)', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'width', label: '폭(mm)', width: 60, align: 'right', format: 'number', headerBg: '#E6E6E6' },
            { id: 'height', label: '높이(mm)', width: 60, align: 'right', format: 'number', headerBg: '#E6E6E6' },
            { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
            { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', headerBg: '#E6E6E6' },
            { id: 'remarks', label: '비고', width: 80, align: 'left', headerBg: '#E6E6E6' },
          ],
        },
        dataSource: 'shipment.slat',
        usedIn: ['TS'],
      },
      {
        id: 'TBL-TS-FOLDING',
        name: '출고증 절곡품 테이블',
        description: '절곡품 섹션 (가이드레일, 케이스, 하단마감재)',
        category: 'shipment',
        preview: '│ ● 절곡품 │ 품명 │ 규격 │ 길이 │ 수량 │ LOT NO │',
        config: {
          title: '● 절 곡 품',
          titleStyle: 'bold-underline',
          sections: [
            {
              subtitle: '1) 가이드레일',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 80, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 60, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
            {
              subtitle: '2) 케이스',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 80, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 60, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
            {
              subtitle: '3) 하단마감재',
              columns: [
                { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
                { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
                { id: 'itemName', label: '품명', width: 100, align: 'left', headerBg: '#E6E6E6' },
                { id: 'spec', label: '규격', width: 80, align: 'center', headerBg: '#E6E6E6' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'right', format: 'number', headerBg: '#E6E6E6' },
                { id: 'qty', label: '수량', width: 50, align: 'right', format: 'number', headerBg: '#FFF2CC' },
                { id: 'lotNo', label: 'LOT NO', width: 100, align: 'center', valueBg: '#FFFF00', headerBg: '#E6E6E6' },
                { id: 'remarks', label: '비고', width: 60, align: 'left', headerBg: '#E6E6E6' },
              ],
            },
          ],
          // 부자재 입고 LOT NO 기록란
          lotNoSection: {
            title: '부자재 입고 LOT NO',
            fields: [
              { label: '가이드레일', field: 'guideRailLotNo' },
              { label: '케이스', field: 'caseLotNo' },
              { label: '하단마감재', field: 'bottomBarLotNo' },
            ],
          },
        },
        dataSource: 'shipment.folding',
        usedIn: ['TS'],
      },
      {
        id: 'TBL-TS-CONSUMABLES',
        name: '출고증 소모품 테이블',
        description: '소모품 섹션 (별도구매)',
        category: 'shipment',
        preview: '│ ● 소모품(별도구매) │ 품명 │ 규격 │ 수량 │',
        config: {
          title: '● 소모품(별도구매)',
          titleStyle: 'bold-underline',
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center', headerBg: '#E6E6E6' },
            { id: 'itemName', label: '품명', width: 150, align: 'left', headerBg: '#E6E6E6' },
            { id: 'spec', label: '규격', width: 120, align: 'center', headerBg: '#E6E6E6' },
            { id: 'qty', label: '수량', width: 60, align: 'right', format: 'number', headerBg: '#FFF2CC' },
            { id: 'unit', label: '단위', width: 40, align: 'center', headerBg: '#E6E6E6' },
            { id: 'remarks', label: '비고', width: 100, align: 'left', headerBg: '#E6E6E6' },
          ],
          showTotalRow: true,
        },
        dataSource: 'shipment.consumables',
        usedIn: ['TS'],
      },
    ],

    // ========== 기타 블록 ==========
    miscBlocks: [
      {
        id: 'MISC-DIAGRAM',
        name: '도면/사진 영역',
        description: '제품 도면 또는 사진 삽입',
        category: 'misc',
        preview: '┌──────────────────┐\n│       [제품 도면/사진]       │\n└──────────────────┘',
        config: {
          title: '제품 도면',
          placeholder: '도면 또는 사진을 삽입하세요',
          acceptTypes: ['image/*', '.pdf', '.dwg'],
          maxSize: '5MB',
        },
        usedIn: ['FQC', '작업지시서'],
      },
      {
        id: 'MISC-CHECKLIST',
        name: '체크리스트',
        description: '항목별 체크박스',
        category: 'misc',
        preview: '☑ 항목1  ☑ 항목2  ☐ 항목3',
        config: {
          items: [],
          columns: 3,
          checkStyle: 'checkbox',
        },
        usedIn: ['제품검사'],
      },
      // 연락처 푸터 블록 (발주서용)
      {
        id: 'FTR-CONTACT',
        name: '연락처 푸터',
        description: '문서 하단 연락처/문의 안내',
        category: 'misc',
        preview: '문의 담당 : 판매팀 ☎) 031-xxx-xxxx',
        config: {
          message: '문의 담당 : 판매팀 1) 031-983-5130 또는 1) 010-5467-2310',
          style: {
            textAlign: 'center',
            fontSize: '11px',
            color: '#333',
            borderTop: '1px solid #ccc',
            paddingTop: '10px',
            marginTop: '15px',
          },
        },
        usedIn: ['발주서'],
      },
    ],
  },

  // ============================================================
  // 2. 스타일 프리셋 (공통 스타일) - 첨부 이미지 기준 통일
  // ============================================================
  stylePresets: {
    // 문서 공통 기본 설정
    documentCommon: {
      fontFamily: "'맑은 고딕', 'Malgun Gothic', sans-serif",
      fontSize: '12px',
      lineHeight: '1.5',
      color: '#000',
    },

    // 헤더 타이틀 스타일 (견적서/발주서 스타일)
    titleStyles: {
      // 견적서/발주서: 자간 넓은 큰 글씨
      'large-spaced': {
        fontSize: '28px',
        fontWeight: 'bold',
        letterSpacing: '0.8em',
        textAlign: 'center',
        marginBottom: '10px',
      },
      // 산출내역서: 중간 크기
      'medium-spaced': {
        fontSize: '24px',
        fontWeight: 'bold',
        letterSpacing: '0.5em',
        textAlign: 'center',
      },
      'large-bold': {
        fontSize: '24px',
        fontWeight: 'bold',
        textAlign: 'center',
      },
      'medium-bold': {
        fontSize: '18px',
        fontWeight: 'bold',
        textAlign: 'center',
      },
    },

    // 문서번호 헤더 (견적서 상단)
    docNoStyles: {
      'docno-center': {
        fontSize: '12px',
        textAlign: 'center',
        marginTop: '5px',
        color: '#333',
      },
    },

    // 헤더 바 스타일 (수요자/공급자 등 검은색 바)
    headerBarStyles: {
      'header-bar-black': {
        backgroundColor: '#000',
        color: '#fff',
        padding: '8px 16px',
        fontWeight: 'bold',
        textAlign: 'center',
        letterSpacing: '0.3em',
        fontSize: '13px',
      },
      'header-bar-gray': {
        backgroundColor: '#4a4a4a',
        color: '#fff',
        padding: '6px 12px',
        fontWeight: 'bold',
        textAlign: 'center',
      },
      'header-bar-blue': {
        backgroundColor: '#1a56db',
        color: '#fff',
        padding: '8px 16px',
        fontWeight: 'bold',
        textAlign: 'center',
      },
    },

    // 정보 테이블 스타일 (수요자/공급자/신청업체)
    infoTableStyles: {
      container: {
        border: '1px solid #000',
        borderCollapse: 'collapse',
        width: '100%',
        marginBottom: '15px',
      },
      labelCell: {
        backgroundColor: '#f5f5f5',
        fontWeight: 'bold',
        textAlign: 'center',
        padding: '8px 12px',
        border: '1px solid #000',
        width: '100px',
        fontSize: '12px',
      },
      valueCell: {
        backgroundColor: '#fff',
        textAlign: 'left',
        padding: '8px 12px',
        border: '1px solid #000',
        fontSize: '12px',
      },
    },

    // 테이블 스타일 (품목 목록 등)
    tableStyles: {
      'table-standard': {
        border: '1px solid #000',
        borderCollapse: 'collapse',
        width: '100%',
      },
      'table-thin': {
        border: '0.5px solid #666',
        borderCollapse: 'collapse',
        width: '100%',
      },
      headerCell: {
        backgroundColor: '#f0f0f0',
        fontWeight: 'bold',
        textAlign: 'center',
        padding: '8px',
        border: '1px solid #000',
        fontSize: '12px',
      },
      dataCell: {
        padding: '8px',
        border: '1px solid #000',
        fontSize: '12px',
        verticalAlign: 'middle',
      },
    },

    // 셀 스타일
    cellStyles: {
      'cell-standard': {
        border: '1px solid #000',
        padding: '8px',
        fontSize: '12px',
      },
      'cell-label': {
        backgroundColor: '#f5f5f5',
        fontWeight: 'bold',
        textAlign: 'center',
        width: '100px',
      },
      'cell-value': {
        backgroundColor: '#fff',
        textAlign: 'left',
      },
      'cell-header': {
        backgroundColor: '#e0e0e0',
        fontWeight: 'bold',
        textAlign: 'center',
      },
      'cell-center': {
        textAlign: 'center',
      },
      'cell-right': {
        textAlign: 'right',
      },
    },

    // 금액 스타일 (총 견적금액 박스)
    amountStyles: {
      // 큰 금액 강조 박스
      highlightBox: {
        border: '2px solid #000',
        padding: '25px 40px',
        textAlign: 'center',
        backgroundColor: '#fff',
        marginBottom: '20px',
      },
      title: {
        fontSize: '14px',
        fontWeight: 'bold',
        marginBottom: '10px',
        letterSpacing: '0.2em',
      },
      value: {
        fontSize: '36px',
        fontWeight: 'bold',
        color: '#000',
      },
      note: {
        fontSize: '12px',
        color: '#666',
        marginTop: '10px',
      },
      'amount-large': {
        fontSize: '32px',
        fontWeight: 'bold',
        color: '#000',
      },
      'amount-highlight': {
        border: '2px solid #000',
        padding: '20px',
        textAlign: 'center',
        backgroundColor: '#fff',
      },
    },

    // 결재라인 스타일 (발주서 우측 상단 형식)
    approvalStyles: {
      // 결재라인 컨테이너 (우측 상단 배치)
      container: {
        border: '1px solid #000',
        borderCollapse: 'collapse',
        position: 'absolute',
        top: '20px',
        right: '15px',
        width: '280px',
      },
      // 로트번호 셀
      lotNoLabel: {
        border: '1px solid #000',
        padding: '5px 10px',
        fontSize: '11px',
        backgroundColor: '#f5f5f5',
        fontWeight: 'bold',
        textAlign: 'center',
        width: '60px',
      },
      lotNoValue: {
        border: '1px solid #000',
        padding: '5px 10px',
        fontSize: '11px',
        textAlign: 'left',
      },
      // 결재 역할 헤더 (작성/검토/승인)
      roleHeader: {
        border: '1px solid #000',
        padding: '4px 8px',
        fontSize: '10px',
        fontWeight: 'bold',
        textAlign: 'center',
        backgroundColor: '#fff',
        width: '55px',
      },
      // 결재자 이름 셀
      nameCell: {
        border: '1px solid #000',
        padding: '4px 8px',
        fontSize: '10px',
        textAlign: 'center',
        height: '25px',
        verticalAlign: 'middle',
      },
      // 부서 라벨 (결재 행)
      deptLabel: {
        border: '1px solid #000',
        padding: '4px 8px',
        fontSize: '10px',
        fontWeight: 'bold',
        textAlign: 'center',
        backgroundColor: '#f5f5f5',
        width: '55px',
      },
      // 부서 값 셀
      deptValue: {
        border: '1px solid #000',
        padding: '4px 8px',
        fontSize: '10px',
        textAlign: 'center',
        height: '25px',
      },
    },

    // 인감/서명 스타일
    sealStyles: {
      // 사각 인감란 (견적서 하단)
      'seal-box': {
        border: '1px solid #000',
        width: '60px',
        height: '70px',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '10px',
        color: '#999',
        textAlign: 'center',
        backgroundColor: '#fff',
      },
      // 실제 인감 (빨간색 원형)
      'seal-stamp': {
        width: '40px',
        height: '40px',
        borderRadius: '50%',
        border: '2px solid #c00',
        color: '#c00',
        fontSize: '11px',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
      },
      'seal-standard': {
        border: '1px solid #c00',
        borderRadius: '50%',
        width: '60px',
        height: '60px',
        display: 'flex',
        alignItems: 'center',
        justifyContent: 'center',
        fontSize: '11px',
        color: '#c00',
        textAlign: 'center',
      },
      'seal-square': {
        border: '1px solid #c00',
        width: '50px',
        height: '50px',
        fontSize: '10px',
        color: '#c00',
        textAlign: 'center',
      },
    },

    // 푸터 스타일 (유의사항 등)
    footerStyles: {
      noticeBox: {
        borderTop: '1px solid #000',
        padding: '15px 0',
        marginTop: '20px',
        fontSize: '11px',
        color: '#333',
      },
      noticeTitle: {
        fontWeight: 'bold',
        marginBottom: '8px',
      },
      noticeItem: {
        marginLeft: '10px',
        lineHeight: '1.8',
      },
      contactFooter: {
        textAlign: 'center',
        fontSize: '11px',
        color: '#666',
        marginTop: '15px',
        paddingTop: '10px',
        borderTop: '1px solid #ddd',
      },
    },

    // 구분선 스타일
    dividerStyles: {
      double: {
        borderTop: '3px double #000',
        margin: '10px 0',
      },
      single: {
        borderTop: '1px solid #000',
        margin: '10px 0',
      },
    },

    // 판정 스타일 (합격/불합격, 적합/부적합)
    judgementStyles: {
      container: {
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'center',
        padding: '15px',
        marginTop: '10px',
      },
      'highlight-box': {
        border: '2px solid #000',
        padding: '15px 30px',
        backgroundColor: '#f9f9f9',
        display: 'flex',
        gap: '40px',
        justifyContent: 'center',
      },
      optionItem: {
        display: 'flex',
        alignItems: 'center',
        gap: '8px',
        fontSize: '14px',
        fontWeight: 'bold',
      },
      radioCircle: {
        width: '20px',
        height: '20px',
        borderRadius: '50%',
        border: '2px solid #000',
      },
      radioChecked: {
        backgroundColor: '#000',
      },
      passLabel: {
        color: '#059669',
      },
      failLabel: {
        color: '#dc2626',
      },
    },

    // ========== 문서 유형별 스타일 프리셋 ==========
    documentPresets: {
      // 검사성적서 프리셋
      'inspection-report': {
        description: '검사성적서용 스타일 (IQC/PQC/FQC)',
        titleStyle: 'large-spaced',
        headerBarStyle: 'header-bar-black',
        approvalPosition: 'top-right',
        approvalStyle: 'APR-3LINE-WITH-LOTNO',
        tableHeaderStyle: {
          backgroundColor: '#f5f5f5',
          fontWeight: 'bold',
          textAlign: 'center',
          border: '1px solid #000',
        },
        tableCellStyle: {
          border: '1px solid #000',
          padding: '6px 4px',
          textAlign: 'center',
        },
        measurementCellStyle: {
          backgroundColor: '#fffde7',
        },
        judgementStyle: 'highlight-box',
        fontSize: '11px',
        lineHeight: '1.4',
      },
      // 견적서/발주서 프리셋
      'quotation': {
        description: '견적서/수주확인서용 스타일',
        titleStyle: 'large-spaced',
        headerBarStyle: 'header-bar-black',
        showSealBox: true,
        fontSize: '12px',
        lineHeight: '1.5',
      },
      // 발주서 프리셋
      'purchase-order': {
        description: '발주서용 스타일 (결재라인 포함)',
        titleStyle: 'large-spaced',
        approvalPosition: 'top-right',
        approvalStyle: 'APR-PO-STANDARD',
        showLotNo: true,
        showContactFooter: true,
        fontSize: '11px',
        lineHeight: '1.4',
      },
      // 견적산출내역서 프리셋
      'quotation-detail': {
        description: '견적산출내역서용 스타일',
        titleStyle: 'large-spaced',
        headerBarStyle: 'header-bar-black',
        showSealBox: true,
        tableStyle: 'material-detail',
        fontSize: '11px',
        lineHeight: '1.4',
      },
    },
  },

  // ============================================================
  // 3. 문서 카테고리
  // ============================================================
  categories: [
    { id: 'sales', code: 'SALES', name: '판매문서', icon: 'FileText', color: 'blue', sortOrder: 1, description: '견적서, 수주확인서, 거래명세서 등' },
    { id: 'production', code: 'PROD', name: '생산문서', icon: 'Factory', color: 'green', sortOrder: 2, description: '작업지시서, 발주서, 생산실적보고서 등' },
    { id: 'quality', code: 'QC', name: '품질문서', icon: 'ShieldCheck', color: 'purple', sortOrder: 3, description: '입고검사, 중간검사, 제품검사 성적서 등' },
    { id: 'logistics', code: 'LOGI', name: '물류문서', icon: 'Truck', color: 'orange', sortOrder: 4, description: '입고전표, 출고전표, 배송지시서 등' },
    { id: 'accounting', code: 'ACC', name: '회계문서', icon: 'CreditCard', color: 'red', sortOrder: 5, description: '세금계산서, 매출장, 매입장 등' },
  ],

  // ============================================================
  // 4. 문서 유형 정의
  // ============================================================
  documentTypes: [
    // 판매문서
    { id: 1, code: 'QT', name: '견적서', category: 'sales', description: '고객에게 제출하는 견적서', isActive: true, sortOrder: 1 },
    { id: 2, code: 'QT-DTL', name: '견적산출내역서', category: 'sales', description: '견적 상세 산출내역', isActive: true, sortOrder: 2 },
    { id: 3, code: 'SO', name: '수주확인서', category: 'sales', description: '수주 확정 문서', isActive: true, sortOrder: 3 },
    { id: 4, code: 'SL', name: '거래명세서', category: 'sales', description: '출하 시 발행하는 거래명세서', isActive: true, sortOrder: 4 },
    // 생산문서 - 작업지시서/생산지시서
    { id: 5, code: 'WO', name: '작업지시서', category: 'production', description: '생산 작업지시 문서 (공통)', isActive: true, sortOrder: 1 },
    { id: 26, code: 'WO-SCR', name: '스크린 생산지시서', category: 'production', description: '스크린 공정 생산지시서', isActive: true, sortOrder: 2, processType: '스크린', linkedWorkLog: 'WL-SCR' },
    { id: 27, code: 'WO-SLT', name: '슬랫 생산지시서', category: 'production', description: '슬랫 공정 생산지시서', isActive: true, sortOrder: 3, processType: '슬랫', linkedWorkLog: 'WL-SLT' },
    { id: 28, code: 'WO-FLD', name: '절곡 생산지시서', category: 'production', description: '절곡 공정 생산지시서', isActive: true, sortOrder: 4, processType: '절곡', linkedWorkLog: 'WL-FLD' },
    { id: 6, code: 'PO', name: '발주서', category: 'production', description: '자재/외주 발주 문서', isActive: true, sortOrder: 5 },
    { id: 7, code: 'PR', name: '생산실적보고서', category: 'production', description: '생산 완료 실적 보고', isActive: true, sortOrder: 6 },
    // 작업일지 (공정별)
    { id: 21, code: 'WL-SCR', name: '스크린 작업일지', category: 'production', description: '스크린 생산부서 작업일지', isActive: true, sortOrder: 7, linkedWorkOrder: 'WO-SCR' },
    { id: 22, code: 'WL-FLD', name: '절곡 작업일지', category: 'production', description: '절곡 생산부서 작업일지', isActive: true, sortOrder: 8, linkedWorkOrder: 'WO-FLD' },
    { id: 23, code: 'WL-SLT', name: '슬랫 작업일지', category: 'production', description: '슬랫 생산부서 작업일지', isActive: true, sortOrder: 9, linkedWorkOrder: 'WO-SLT' },
    { id: 24, code: 'WL-STK', name: '재고생산 작업일지', category: 'production', description: '절곡품 재고생산 작업일지 (중간검사성적서 포함)', isActive: true, sortOrder: 7 },
    { id: 25, code: 'WL-PKG', name: '포장 작업일지', category: 'production', description: '포장 생산부서 작업일지', isActive: true, sortOrder: 8 },
    // 품질문서
    { id: 8, code: 'IQC', name: '수입검사성적서', category: 'quality', description: '수입 자재 검사 성적서', isActive: true, sortOrder: 1 },
    { id: 9, code: 'PQC', name: '중간검사성적서', category: 'quality', description: '공정 중간검사 성적서', isActive: true, sortOrder: 2 },
    { id: 10, code: 'PQC-SCR', name: '스크린 중간검사성적서', category: 'quality', description: '스크린 제품 중간검사', isActive: true, sortOrder: 3 },
    { id: 11, code: 'PQC-BND', name: '절곡품 중간검사성적서', category: 'quality', description: '절곡품 중간검사', isActive: true, sortOrder: 4 },
    { id: 32, code: 'PQC-SLT', name: '슬랫 중간검사성적서', category: 'quality', description: '슬랫 제품 중간검사', isActive: true, sortOrder: 5 },
    { id: 33, code: 'PQC-JB', name: '조인트바 중간검사성적서', category: 'quality', description: '조인트바 제품 중간검사', isActive: true, sortOrder: 6 },
    { id: 12, code: 'FQC', name: '제품검사성적서', category: 'quality', description: '출하 후 고객요청 검사 성적서', isActive: true, sortOrder: 7 },
    { id: 14, code: 'NCR', name: '부적합품보고서', category: 'quality', description: '불합격 판정 보고서', isActive: true, sortOrder: 6 },
    // 물류문서
    { id: 15, code: 'GR', name: '입고전표', category: 'logistics', description: '자재 입고 전표', isActive: true, sortOrder: 1 },
    { id: 16, code: 'GI', name: '출고전표', category: 'logistics', description: '자재 출고 전표', isActive: true, sortOrder: 2 },
    { id: 17, code: 'DL', name: '배송지시서', category: 'logistics', description: '출하 배송 지시서', isActive: true, sortOrder: 3 },
    // 회계문서
    { id: 18, code: 'INV', name: '세금계산서', category: 'accounting', description: '세금계산서', isActive: true, sortOrder: 1 },
    { id: 19, code: 'SLS', name: '매출장', category: 'accounting', description: '매출 기록 문서', isActive: true, sortOrder: 2 },
    { id: 20, code: 'PUR', name: '매입장', category: 'accounting', description: '매입 기록 문서', isActive: true, sortOrder: 3 },
    // 출하문서
    { id: 29, code: 'DC', name: '납품확인서', category: 'logistics', description: '현장 납품 시 발행하는 확인서 (자재내역, 절곡내역, 도면 포함)', isActive: true, sortOrder: 4 },
    // 제품검사신청서 (발주처→경동기업 신청)
    { id: 30, code: 'FQC-REQ', name: '제품검사신청서', category: 'quality', description: '자동방화셔터(인정제품) 제품검사요청서 - 발주처에서 신청', isActive: true, sortOrder: 7 },
    // 출고증 (출하관리용)
    { id: 31, code: 'TS', name: '출고증', category: 'logistics', description: '출하 시 발행하는 출고증 (부자재, 모터, 슬랫, 절곡품, 소모품 내역 포함)', isActive: true, sortOrder: 5 },
  ],

  // ============================================================
  // 5. 회사 정보 (문서에 자동 표시)
  // ============================================================
  companyInfo: {
    name: '(주)염진건설',
    businessNo: '139-87-00353',
    ceo: '김 용 진',
    businessType: '제조',
    businessItem: '방창, 셔터, 금속창호',
    address: '경기도 안성시 공업용지 오성길 45-22',
    phone: '031-983-5130',
    fax: '02-6911-6315',
    logoPath: '/assets/logo.png',
  },

  // ============================================================
  // 6. 문서 템플릿 정의 (블록 조합)
  // ============================================================
  templates: {
    // ========== 견적서 ==========
    'QT': {
      name: '견적서',
      code: 'QT',
      category: 'sales',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'KQ#-{TYPE}-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-SIMPLE', config: { title: '견 적 서' } },
        { blockId: 'PTY-CUSTOMER' },
        { blockId: 'PTY-SUPPLIER' },
        { blockId: 'AMT-HIGHLIGHT', config: { title: '총 견적금액' } },
        { blockId: 'TBL-QUOTE-ITEMS' },
        { blockId: 'RMK-STANDARD' },
        { blockId: 'SIG-FORMAL', config: { leadText: '상기와 같이 견적합니다.' } },
      ],
      approval: 'APR-NONE',
    },

    // ========== 수주확인서 ==========
    'SO': {
      name: '수주확인서',
      code: 'SO',
      category: 'sales',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'SO-{TYPE}-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-SIMPLE', config: { title: '수 주 확 인 서' } },
        { blockId: 'PTY-CUSTOMER' },
        { blockId: 'PTY-SUPPLIER' },
        { blockId: 'AMT-HIGHLIGHT', config: { title: '총 수주금액' } },
        { blockId: 'TBL-QUOTE-ITEMS' },
        { blockId: 'RMK-STANDARD' },
        { blockId: 'SIG-FORMAL', config: { leadText: '상기와 같이 수주 확인합니다.' } },
      ],
      approval: 'APR-NONE',
    },

    // ========== 거래명세서 ==========
    'SL': {
      name: '거래명세서',
      code: 'SL',
      category: 'sales',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'SL-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-COMPANY', config: { title: '거 래 명 세 서' } },
        { blockId: 'PTY-CUSTOMER' },
        { blockId: 'PTY-SUPPLIER' },
        { blockId: 'TBL-DELIVERY-ITEMS' },
        { blockId: 'AMT-TABLE' },
        { blockId: 'RMK-STANDARD', config: { minHeight: 50 } },
        { blockId: 'SIG-SIMPLE' },
      ],
      approval: 'APR-NONE',
    },

    // ========== 수입검사성적서 (IQC) - 스타일 공통화 적용 ==========
    'IQC': {
      name: '수입검사성적서',
      code: 'IQC',
      category: 'quality',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'IQC-YYMMDD-##',
      blocks: [
        // 우측 상단 결재라인 (로트번호 포함)
        { blockId: 'APR-3LINE-WITH-LOTNO', position: 'top-right' },
        // 문서 제목 (자간 넓은 스타일)
        { blockId: 'HDR-SIMPLE', config: { title: '수입검사 성적서', titleStyle: 'large-spaced' } },
        // 검사 기본정보 (검은 헤더바 스타일)
        { blockId: 'PTY-INSPECTION-INFO', config: { titleStyle: 'header-bar-black' } },
        // 검사항목 테이블
        { blockId: 'TBL-INSP-IQC', config: {
          titleStyle: 'header-bar-black',
          cellHeight: 28,
          measurementCellWidth: 45,
        }},
        // 특이사항
        { blockId: 'RMK-SPECIAL', config: { minHeight: 40 } },
        // 부적합 내용 (불합격 시만 표시)
        { blockId: 'RMK-DEFECT', config: { minHeight: 40 } },
        // 종합판정
        { blockId: 'JDG-PASSFAIL', config: { style: 'highlight-box' } },
      ],
      approval: 'APR-3LINE-WITH-LOTNO',
      stylePreset: 'inspection-report',
      layout: {
        headerHeight: 80,
        infoTableHeight: 120,
        inspectionTableMinHeight: 200,
        remarksHeight: 80,
        judgementHeight: 60,
      },
    },

    // ========== 중간검사성적서 (PQC) - 스타일 공통화 적용 ==========
    'PQC': {
      name: '중간검사성적서',
      code: 'PQC',
      category: 'quality',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'PQC-YYMMDD-##',
      blocks: [
        // 우측 상단 결재라인 (로트번호 포함)
        { blockId: 'APR-3LINE-WITH-LOTNO', position: 'top-right' },
        // 문서 제목
        { blockId: 'HDR-SIMPLE', config: { title: '중간검사 성적서', titleStyle: 'large-spaced' } },
        // 검사 기본정보
        { blockId: 'PTY-INSPECTION-INFO', config: { titleStyle: 'header-bar-black' } },
        // 검사항목 테이블 (5개 측정값)
        { blockId: 'TBL-INSP-PQC', config: {
          titleStyle: 'header-bar-black',
          cellHeight: 28,
          measurementCellWidth: 40,
        }},
        // 특이사항
        { blockId: 'RMK-SPECIAL', config: { minHeight: 40 } },
        // 부적합 내용
        { blockId: 'RMK-DEFECT', config: { minHeight: 40 } },
        // 종합판정
        { blockId: 'JDG-PASSFAIL', config: { style: 'highlight-box' } },
      ],
      approval: 'APR-3LINE-WITH-LOTNO',
      stylePreset: 'inspection-report',
      layout: {
        headerHeight: 80,
        infoTableHeight: 120,
        inspectionTableMinHeight: 220,
        remarksHeight: 80,
        judgementHeight: 60,
      },
    },

    // ========== 제품검사성적서 (FQC) - 스타일 공통화 적용 ==========
    'FQC': {
      name: '제품검사성적서',
      code: 'FQC',
      category: 'quality',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'FQC-YYMMDD-##',
      blocks: [
        // 우측 상단 결재라인 (로트번호 포함)
        { blockId: 'APR-3LINE-WITH-LOTNO', position: 'top-right' },
        // 문서 제목
        { blockId: 'HDR-SIMPLE', config: { title: '제품검사 성적서', titleStyle: 'large-spaced' } },
        // 검사 기본정보
        { blockId: 'PTY-INSPECTION-INFO', config: { titleStyle: 'header-bar-black' } },
        // 제품 사진/도면 영역
        { blockId: 'MISC-DIAGRAM', config: {
          title: '제품 사진',
          titleStyle: 'header-bar-black',
          height: 150,
        }},
        // 검사항목 테이블
        { blockId: 'TBL-INSP-PQC', config: {
          titleStyle: 'header-bar-black',
          cellHeight: 28,
          measurementCellWidth: 40,
        }},
        // 특이사항
        { blockId: 'RMK-SPECIAL', config: { minHeight: 35 } },
        // 부적합 내용
        { blockId: 'RMK-DEFECT', config: { minHeight: 35 } },
        // 종합판정 (적합/부적합)
        { blockId: 'JDG-CONFORMITY', config: { style: 'highlight-box' } },
      ],
      approval: 'APR-3LINE-WITH-LOTNO',
      stylePreset: 'inspection-report',
      layout: {
        headerHeight: 80,
        infoTableHeight: 100,
        diagramHeight: 150,
        inspectionTableMinHeight: 180,
        remarksHeight: 70,
        judgementHeight: 60,
      },
    },

    // ========== 작업지시서 (공통) ==========
    'WO': {
      name: '작업지시서',
      code: 'WO',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WO-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-DOCNO', config: { title: '작 업 지 시 서' } },
        { blockId: 'PTY-WORKORDER-INFO' },
        { blockId: 'TBL-WORKORDER-ITEMS' },
        { blockId: 'RMK-STANDARD', config: { title: '작업 지시사항' } },
      ],
      approval: 'APR-3LINE',
    },

    // ========== 스크린 생산지시서 ==========
    'WO-SCR': {
      name: '스크린 생산지시서',
      code: 'WO-SCR',
      category: 'production',
      paperSize: 'A4',
      orientation: 'landscape',
      margins: { top: 15, right: 10, bottom: 15, left: 10 },
      docNoFormat: 'WO-SCR-YYMMDD-##',
      processType: '스크린',
      blocks: [
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '생 산 지 시 서',
          subtitle: '스크린 공정',
          subtitleBg: '#FFFF00',
        }},
        { blockId: 'APR-3LINE', position: 'top-right' },
        { blockId: 'PTY-WORKORDER-INFO', config: {
          showProcessInfo: true,
          processName: '스크린',
        }},
        { blockId: 'TBL-WORKORDER-SCREEN', config: {
          title: '■ 생산 품목 목록',
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center' },
            { id: 'orderNo', label: '수주번호', width: 100, align: 'center' },
            { id: 'productName', label: '제품명', width: 100, align: 'left' },
            { id: 'width', label: '가로', width: 60, align: 'center', format: 'number' },
            { id: 'height', label: '세로', width: 60, align: 'center', format: 'number' },
            { id: 'remainHeight', label: '나머지높이', width: 70, align: 'center', format: 'number' },
            { id: 'specCount', label: '규격매수', width: 60, align: 'center', format: 'number', calculated: true },
            { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
            { id: 'siteName', label: '현장명', width: 120, align: 'left' },
            { id: 'dueDate', label: '납기일', width: 80, align: 'center' },
          ],
        }},
        { blockId: 'RMK-STANDARD', config: { title: '지시사항', minHeight: 60 } },
      ],
      approval: 'APR-3LINE',
      linkedWorkLog: 'WL-SCR',  // 연결된 작업일지
      autoCreateWorkLog: true,  // 작업지시 확정 시 작업일지 자동 생성
    },

    // ========== 슬랫 생산지시서 ==========
    'WO-SLT': {
      name: '슬랫 생산지시서',
      code: 'WO-SLT',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WO-SLT-YYMMDD-##',
      processType: '슬랫',
      blocks: [
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '생 산 지 시 서',
          subtitle: '슬랫 공정',
          subtitleBg: '#00FF00',
        }},
        { blockId: 'APR-3LINE', position: 'top-right' },
        { blockId: 'PTY-WORKORDER-INFO', config: {
          showProcessInfo: true,
          processName: '슬랫',
        }},
        { blockId: 'TBL-WORKORDER-SLAT', config: {
          title: '■ 생산 품목 목록',
          columns: [
            { id: 'no', label: 'NO', width: 35, align: 'center' },
            { id: 'orderNo', label: '수주번호', width: 100, align: 'center' },
            { id: 'productName', label: '제품명', width: 100, align: 'left' },
            { id: 'width', label: '가로', width: 60, align: 'center', format: 'number' },
            { id: 'height', label: '세로', width: 60, align: 'center', format: 'number' },
            { id: 'sheetCount', label: '매수(세로)', width: 65, align: 'center', format: 'number', calculated: true },
            { id: 'jointBarQty', label: '조인트바', width: 60, align: 'center', format: 'number', calculated: true },
            { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
            { id: 'siteName', label: '현장명', width: 120, align: 'left' },
            { id: 'dueDate', label: '납기일', width: 80, align: 'center' },
          ],
          // 슬랫 매수 계산 공식 적용
          calculations: {
            sheetCount: (row) => Math.floor(row.height / 72 + 1),
            jointBarQty: (row) => Math.ceil(Math.floor(row.height / 72 + 1) / 10),
          },
        }},
        { blockId: 'RMK-STANDARD', config: { title: '지시사항', minHeight: 60 } },
      ],
      approval: 'APR-3LINE',
      linkedWorkLog: 'WL-SLT',  // 연결된 작업일지
      autoCreateWorkLog: true,  // 작업지시 확정 시 작업일지 자동 생성
    },

    // ========== 절곡 생산지시서 ==========
    'WO-FLD': {
      name: '절곡 생산지시서',
      code: 'WO-FLD',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WO-FLD-YYMMDD-##',
      processType: '절곡',
      blocks: [
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '생 산 지 시 서',
          subtitle: '절곡 공정',
          subtitleBg: '#FFB366',
        }},
        { blockId: 'APR-3LINE', position: 'top-right' },
        { blockId: 'PTY-WORKORDER-INFO', config: {
          showProcessInfo: true,
          processName: '절곡',
        }},
        { blockId: 'TBL-WORKORDER-FOLD', config: {
          title: '■ 생산 품목 목록 (전개도 기준)',
          // 절곡물 섹션별 구조
          sections: [
            {
              id: 'guide-rail',
              title: '1. 가이드레일',
              columns: [
                { id: 'partName', label: '세부품명', width: 100, align: 'left' },
                { id: 'material', label: '재질', width: 80, align: 'center' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'center', format: 'number' },
                { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
              ],
            },
            {
              id: 'case',
              title: '2. 케이스',
              columns: [
                { id: 'partName', label: '세부품명', width: 100, align: 'left' },
                { id: 'material', label: '재질', width: 80, align: 'center' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'center', format: 'number' },
                { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
              ],
            },
            {
              id: 'bottom-finish',
              title: '3. 하단마감재',
              columns: [
                { id: 'partName', label: '세부품명', width: 100, align: 'left' },
                { id: 'material', label: '재질', width: 80, align: 'center' },
                { id: 'length', label: '길이(mm)', width: 70, align: 'center', format: 'number' },
                { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
              ],
            },
            {
              id: 'smoke-barrier',
              title: '4. 연기차단재',
              columns: [
                { id: 'partName', label: '세부품명', width: 100, align: 'left' },
                { id: 'material', label: '재질', width: 80, align: 'center' },
                { id: 'width', label: '너비(mm)', width: 70, align: 'center', format: 'number' },
                { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number' },
              ],
            },
          ],
          // 섹션별 합계 표시
          showSectionTotal: true,
          showGrandTotal: true,
        }},
        { blockId: 'RMK-STANDARD', config: { title: '지시사항', minHeight: 60 } },
      ],
      approval: 'APR-3LINE',
      linkedWorkLog: 'WL-FLD',  // 연결된 작업일지
      autoCreateWorkLog: true,  // 작업지시 확정 시 작업일지 자동 생성
    },

    // ========== 부적합품보고서 (NCR) ==========
    'NCR': {
      name: '부적합품보고서',
      code: 'NCR',
      category: 'quality',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'NCR-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-COMPANY', config: { title: '부적합품 보고서' } },
        { blockId: 'PTY-INSPECTION-INFO' },
        { blockId: 'RMK-DEFECT', config: { title: '부적합 내용', minHeight: 100 } },
        {
          blockId: 'CUSTOM-NCR-ACTION',
          type: 'custom',
          config: {
            title: '처리방안',
            options: ['폐기', '재작업', '특채', '반품'],
            field: 'dispositionAction',
          },
        },
        { blockId: 'RMK-STANDARD', config: { title: '조치 내용' } },
      ],
      approval: 'APR-4LINE',
    },

    // ========== 스크린 작업일지 (첨부 이미지 기준) ==========
    'WL-SCR': {
      name: '스크린 작업일지',
      code: 'WL-SCR',
      category: 'production',
      paperSize: 'A4',
      orientation: 'landscape',  // 가로형
      margins: { top: 15, right: 10, bottom: 15, left: 10 },
      docNoFormat: 'WL-SCR-YYMMDD-##',
      blocks: [
        // 헤더: 로고 + 제목 + 결재란
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '작 업 일 지',
          subtitle: '스크린 생산부서',
          subtitleBg: '#FFFF00',
        }},
        // 결재란 (우측상단)
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
          showRole: true,
          showDate: true,
          footer: { labels: ['판매/전진', '생산', '품질'], highlight: '품질' },
        }},
        // 신청업체/신청내용 2단 정보
        { blockId: 'WL-HEADER-INFO' },
        // 작업내역 테이블
        { blockId: 'TBL-WORKLOG-SCREEN' },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
        roles: ['전진', '생산', '품질'],
      },
    },

    // ========== 절곡 작업일지 (첨부 이미지 기준) ==========
    'WL-FLD': {
      name: '절곡 작업일지',
      code: 'WL-FLD',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WL-FLD-YYMMDD-##',
      blocks: [
        // 헤더: 로고 + 제목 + 결재란
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '작 업 일 지',
          subtitle: '절곡 생산부서',
          subtitleBg: '#FFFF00',
        }},
        // 결재란 (우측상단)
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
          showRole: true,
          showDate: true,
          footer: { labels: ['판매/전진', '생산', '품질'], highlight: '품질' },
        }},
        // 신청업체/신청내용 2단 정보
        { blockId: 'WL-HEADER-INFO' },
        // ========== 전개도 상세정보 테이블 ==========
        { blockId: 'TBL-DEVELOPED-PARTS', config: {
          title: '전개도 상세정보',
          showHeader: true,
          columns: [
            { id: 'itemCode', label: '품번', width: 60, align: 'center', headerBg: '#E8F4FD' },
            { id: 'itemName', label: '품명', width: 80, align: 'left', headerBg: '#E8F4FD' },
            { id: 'material', label: '재질', width: 80, align: 'center', headerBg: '#E8F4FD' },
            { id: 'totalWidth', label: '전개폭', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
            { id: 'length', label: '길이', width: 60, align: 'center', format: 'number', headerBg: '#E8F4FD' },
            { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'weight', label: '중량(kg)', width: 70, align: 'center', format: 'decimal', headerBg: '#E8F4FD' },
            { id: 'dimensions', label: '전개치수', width: 120, align: 'left', headerBg: '#E8F4FD' },
            { id: 'note', label: '비고', width: 80, align: 'left', headerBg: '#E8F4FD' },
          ],
          showTotalRow: true,
          totalFields: ['qty', 'weight'],
        }},
        // ========== 전개도 도면 ==========
        { blockId: 'DRW-DEVELOPED-PARTS', config: {
          title: '전개도 도면',
          layout: 'grid',
          gridColumns: 2,
          showPartInfo: true,
          showDimensions: true,
          svgStyle: {
            strokeColor: '#333',
            strokeWidth: 1.5,
            fillColor: '#f8f9fa',
            bendLineColor: '#dc2626',
          },
        }},
        // 작업내역 테이블 (섹션별 도면 포함)
        { blockId: 'TBL-WORKLOG-FOLD' },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
        roles: ['전진', '생산', '품질'],
      },
    },

    // ========== 슬랫 작업일지 (첨부 이미지 기준) ==========
    'WL-SLT': {
      name: '슬랫 작업일지',
      code: 'WL-SLT',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WL-SLT-YYMMDD-##',
      blocks: [
        // 헤더: 로고 + 제목 + 결재란
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '작 업 일 지',
          subtitle: '슬랫 생산부서',
          subtitleBg: '#00FF00',
        }},
        // 결재란 (우측상단)
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
          showRole: true,
          showDate: true,
          footer: { labels: ['판매/개발자', '생산', '품질'], highlight: '품질' },
        }},
        // 신청업체/신청내용 2단 정보
        { blockId: 'WL-HEADER-INFO' },
        // 작업내역 테이블
        { blockId: 'TBL-WORKLOG-SLAT' },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
        roles: ['개발자', '생산', '품질'],
      },
    },

    // ========== 재고생산 작업일지 (중간검사성적서 - 첨부 이미지 기준) ==========
    'WL-STK': {
      name: '재고생산 작업일지',
      code: 'WL-STK',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WL-STK-YYMMDD-##',
      blocks: [
        // 헤더: 로고 + 제목 + 중간검사성적서
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '절곡품 재고생산 작업일지',
          subtitle: '중간검사성적서',
          subtitleStyle: 'small',
        }},
        // 결재란 (우측상단) - 개발자 날짜 포함
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
          showRole: true,
          showDate: true,
          footer: { labels: ['판매/개발자', '생산', '품질'], highlight: '품질' },
        }},
        // 품목정보 + 중간검사 기준서 + 중간검사 DATA
        { blockId: 'TBL-WORKLOG-FORMING' },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
        roles: ['개발자', '생산', '품질'],
      },
    },

    // ========== 포장 작업일지 ==========
    'WL-PKG': {
      name: '포장 작업일지',
      code: 'WL-PKG',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'WL-PKG-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '작 업 일 지',
          subtitle: '포장 생산부서',
        }},
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
        }},
        { blockId: 'WL-HEADER-INFO' },
        { blockId: 'TBL-WORKLOG-PACKAGE' },
        { blockId: 'WL-SUMMARY' },
        { blockId: 'RMK-STANDARD', config: { title: '특이사항', minHeight: 50 } },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
      },
    },

    // ========== 견적산출내역서 (첨부 이미지 기준 스타일 공통화) ==========
    'QT-DTL': {
      name: '견적산출내역서',
      code: 'QT-DTL',
      category: 'sales',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'KQ#-{TYPE}-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-SIMPLE', config: { title: '견적산출내역서', titleStyle: 'large-spaced' } },
        { blockId: 'PTY-CUSTOMER', config: { titleStyle: 'header-bar-black' } },
        { blockId: 'PTY-SUPPLIER', config: { titleStyle: 'header-bar-black' } },
        { blockId: 'AMT-HIGHLIGHT', config: { title: '총 견적금액', style: 'amount-highlight-box' } },
        { blockId: 'TBL-MATERIAL-DETAIL', config: { title: '소 요 자 재 내 역', titleStyle: 'header-bar-black' } },
        { blockId: 'RMK-STANDARD', config: { title: '비 고 사 항', showBulletList: true } },
        { blockId: 'SIG-FORMAL', config: { leadText: '상기와 같이 견적합니다.', showSealBox: true } },
      ],
      approval: 'APR-NONE',
      stylePreset: 'quotation-detail', // 견적서 스타일 프리셋 적용
    },

    // ========== 발주서 (첨부 이미지 기준 스타일 공통화) ==========
    'PO': {
      name: '발주서',
      code: 'PO',
      category: 'production',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 20, right: 15, bottom: 20, left: 15 },
      docNoFormat: 'PO-YYMMDD-##',
      blocks: [
        // 상단 로트번호 + 결재라인 (우측 상단)
        { blockId: 'APR-PO-STANDARD', position: 'top-right' },
        // 문서 제목
        { blockId: 'HDR-SIMPLE', config: { title: '발 주 서', titleStyle: 'large-spaced' } },
        // 신청업체 정보
        { blockId: 'PTY-PO-REQUESTER' },
        // 신청내용 정보
        { blockId: 'PTY-PO-REQUEST-CONTENT' },
        // 발주개소 현황
        { blockId: 'PTY-PO-ORDER-STATUS' },
        // 부자재 테이블
        { blockId: 'TBL-PO-MATERIALS', config: { title: '부 자 재', showSubtotal: true } },
        // 특이사항
        { blockId: 'RMK-STANDARD', config: { title: '특이사항', minHeight: 40 } },
        // 유의사항 (고정 문구)
        { blockId: 'RMK-FIXED', config: {
          title: '유의사항',
          items: [
            '1. 신제품인 경우 제작현장 또는 담당자에게 정보를 받아주세요.',
            '2. 발주내용에 변경이 있으면 즉시 담당자에게 연락주세요.',
            '3. 납기일 준수 불가 시 사전에 연락주시기 바랍니다.',
          ],
        }},
        // 연락처 푸터
        { blockId: 'FTR-CONTACT', config: {
          message: '문의 담당 : 판매팀 1) 031-983-5130 또는 1) 010-5467-2310',
        }},
      ],
      approval: 'APR-PO-STANDARD',
      stylePreset: 'purchase-order', // 발주서 스타일 프리셋 적용
    },

    // ========== 제품검사신청서 (FQC-REQ) - 작업일지 스타일 적용 ==========
    'FQC-REQ': {
      name: '제품검사신청서',
      code: 'FQC-REQ',
      category: 'quality',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'KD-SA-YYMMDD-##',
      description: '자동방화셔터(인정제품) 제품검사요청서 - 발주처에서 경동기업으로 신청',
      blocks: [
        // 헤더: 로고 + 제목 (작업일지 스타일)
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '자동방화셔터(인정제품) 제품검사요청서',
          subtitle: null,
        }},
        // 접수일 (우측상단)
        { blockId: 'FQC-REQ-RECEIPT-DATE', position: 'top-right' },
        // 기본정보 섹션
        { blockId: 'FQC-REQ-BASIC-INFO', config: {
          title: '기본정보',
          titleStyle: 'header-bar-blue',
          fields: [
            { row: 1, items: [{ label: '발신처(업체명)', field: 'senderCompany', colSpan: 2 }, { label: '담당자', field: 'senderManager', colSpan: 2 }] },
            { row: 2, items: [{ label: '발주번호', field: 'orderNo', colSpan: 2 }, { label: '담당자연락처', field: 'senderPhone', colSpan: 2 }] },
            { row: 3, items: [{ label: '현장명', field: 'siteName', colSpan: 2 }, { label: '납품일', field: 'deliveryDate', colSpan: 2 }] },
            { row: 4, items: [{ label: '현장주소', field: 'siteAddress', colSpan: 2 }, { label: '총 개소', field: 'totalCount', colSpan: 1 }, { label: '개소', field: '', colSpan: 1 }] },
          ],
        }},
        // 검사방문요청일 (전화예정)
        { blockId: 'FQC-REQ-VISIT-DATE', config: {
          label: '검사방문요청일(전화예정)',
          inputStyle: 'underline-blue',
        }},
        // 입력사항 (품질관리서 동일정보) 섹션
        { blockId: 'FQC-REQ-INPUT-INFO', config: {
          title: '입력사항 (품질관리서 동일정보)',
          titleStyle: 'header-bar-blue',
          sections: [
            {
              title: '건축공사장',
              fields: [
                { row: 1, items: [{ label: '현장명', field: 'constructionSiteName', colSpan: 4 }] },
                { row: 2, items: [{ label: '대지위치', field: 'landLocation', colSpan: 2 }, { label: '지번', field: 'lotNumber', colSpan: 2 }] },
              ],
            },
            {
              title: '자재유통업자',
              fields: [
                { row: 1, items: [{ label: '성명', field: 'distributorName', colSpan: 2 }, { label: '회사명', field: 'distributorCompany', colSpan: 2 }] },
                { row: 2, items: [{ label: '회사주소', field: 'distributorAddress', colSpan: 2 }, { label: '전화번호', field: 'distributorPhone', colSpan: 2 }] },
              ],
            },
            {
              title: '공사시공자(건설사)',
              fields: [
                { row: 1, items: [{ label: '성명', field: 'constructorName', colSpan: 2 }, { label: '회사명', field: 'constructorCompany', colSpan: 2 }] },
                { row: 2, items: [{ label: '회사주소', field: 'constructorAddress', colSpan: 2 }, { label: '전화번호', field: 'constructorPhone', colSpan: 2 }] },
              ],
            },
            {
              title: '공사감리자',
              fields: [
                { row: 1, items: [{ label: '성명', field: 'supervisorName', colSpan: 2 }, { label: '사무소명', field: 'supervisorOffice', colSpan: 2 }] },
                { row: 2, items: [{ label: '사무소주소', field: 'supervisorAddress', colSpan: 2 }, { label: '전화번호', field: 'supervisorPhone', colSpan: 2 }] },
              ],
            },
          ],
        }},
        // 검사요청시 필독 (경고 문구)
        { blockId: 'FQC-REQ-WARNING', config: {
          title: '※ 검사요청시 필독',
          items: [
            { text: '√ 발주 size 와 시공완료된 size 가 다를 시, 일정 범위를 벗어난 경우 인정라벨을 부착할 수 없습니다.', style: 'normal' },
            { text: '제품검사를 위한 방문 전까지 변경사유를 고지하셔야 인정라벨을 부착할 수 있습니다.', style: 'highlight-blue' },
            { text: '(사전고지를 하지 않음으로 발생하는 문제의 귀책은 신청업체에 있습니다)', style: 'note' },
          ],
        }},
        // 검사대상 사전 고지 정보 섹션
        { blockId: 'FQC-REQ-INSPECTION-TARGET', config: {
          title: '검사대상 사전 고지 정보',
          titleStyle: 'header-bar-blue',
          tableConfig: {
            headers: [
              { label: '일련번호', field: 'seqNo', width: 50 },
              { label: '층수', field: 'floor', width: 60 },
              { label: '부호', field: 'code', width: 70 },
              { label: '오픈사이즈', children: [
                { label: '발주규격', children: [
                  { label: '가로', field: 'orderWidth', width: 70 },
                  { label: '세로', field: 'orderHeight', width: 70 },
                ]},
                { label: '시공후규격', children: [
                  { label: '가로', field: 'actualWidth', width: 70 },
                  { label: '세로', field: 'actualHeight', width: 70 },
                ]},
              ]},
              { label: '변경사유', field: 'changeReason', width: 120 },
            ],
          },
        }},
      ],
      approval: 'APR-NONE', // 발주처 신청이므로 내부결재 없음
      stylePreset: 'worklog-style', // 작업일지 스타일 프리셋 적용
      externalApproval: {
        type: 'customer-request',
        requestedBy: '발주처',
        sentTo: '경동기업 품질팀',
      },
    },

    // ========== 출고증 (작업일지 스타일 기반) ==========
    'TS': {
      name: '출고증',
      code: 'TS',
      category: 'logistics',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 10, bottom: 15, left: 10 },
      docNoFormat: 'TS-YYMMDD-##',
      description: '출하 시 발행하는 출고증 (부자재, 모터, 슬랫, 절곡품, 소모품 내역 포함)',
      blocks: [
        // 헤더: 로고 + 제목 + 결재란 (작업일지 스타일)
        { blockId: 'HDR-WORKLOG', config: {
          logo: 'KD경동기업',
          title: '출 고 증',
          subtitle: null,
        }},
        // 결재란 (우측상단)
        { blockId: 'APR-WORKLOG', position: 'top-right', config: {
          columns: ['작성', '검토', '승인'],
          showRole: true,
          showDate: true,
          footer: { labels: ['판매/전진', '생산', '품질'], highlight: '품질' },
        }},
        // 신청업체/신청내용/납품정보 3단 헤더
        { blockId: 'TS-HEADER-INFO' },
        // 섹션 1: 부자재 (감기샤프트, 각파이프, 앵글)
        { blockId: 'TBL-TS-MATERIALS' },
        // 섹션 2: 모터 (220V/380V, 브라켓트, 연동제어기)
        { blockId: 'TBL-TS-MOTORS' },
        // 섹션 3: 슬랫(SLAT) - EGI 1.55T
        { blockId: 'TBL-TS-SLAT' },
        // 섹션 4: 절곡품 (가이드레일, 케이스, 하단마감재) + LOT NO 기록란
        { blockId: 'TBL-TS-FOLDING' },
        // 섹션 5: 소모품(별도구매)
        { blockId: 'TBL-TS-CONSUMABLES' },
      ],
      approval: 'APR-WORKLOG',
      approvalConfig: {
        fastTrack: true,
        autoSign: true,
        roles: ['전진', '생산', '품질'],
      },
      stylePreset: 'worklog-style',
      // 데이터 연동 설정
      dataMapping: {
        // 출하 데이터에서 자동으로 가져오는 필드
        autoFill: {
          fromShipment: ['orderDate', 'customerName', 'siteName', 'shipDate', 'deliveryMethod', 'deliveryAddress'],
          fromOrder: ['contactPerson', 'contactPhone', 'requestDueDate', 'totalShutterQty'],
          fromCustomer: ['recipient', 'recipientPhone'],
        },
        // 부자재/모터/슬랫/절곡품/소모품 목록 자동 연동
        itemLists: {
          materials: 'shipmentItems.materials',
          motors: 'shipmentItems.motors',
          slat: 'shipmentItems.slat',
          folding: 'shipmentItems.folding',
          consumables: 'shipmentItems.consumables',
        },
      },
    },
  },

  // ============================================================
  // 7. 데이터 바인딩 정의 (데이터 소스 연결)
  // ============================================================
  dataBindings: {
    // 고객/거래처 데이터
    customer: {
      source: 'customers',
      fields: {
        customerName: 'name',
        businessNo: 'businessNo',
        ceo: 'representative',
        address: 'address',
        phone: 'phone',
        fax: 'fax',
        contactPerson: 'contactPerson',
        contactPhone: 'contactPhone',
      },
    },
    // 현장 데이터
    site: {
      source: 'sites',
      fields: {
        siteName: 'name',
        siteAddress: 'address',
      },
    },
    // 수주 데이터
    order: {
      source: 'orders',
      fields: {
        orderNo: 'orderNo',
        lotNo: 'lotNo',
        productName: 'productName',
        totalAmount: 'totalAmount',
        dueDate: 'dueDate',
      },
    },
    // 작업지시 데이터
    workOrder: {
      source: 'workOrders',
      fields: {
        workOrderNo: 'workOrderNo',
        orderDate: 'orderDate',
        lotNo: 'lotNo',
        processName: 'processName',
        teamName: 'teamName',
      },
    },
    // 검사 데이터
    inspection: {
      source: 'inspections',
      fields: {
        itemName: 'itemName',
        supplierName: 'supplierName',
        spec: 'spec',
        lotNo: 'lotNo',
        lotSize: 'lotSize',
        materialNo: 'materialNo',
        inspectionDate: 'inspectionDate',
        inspector: 'inspector',
      },
    },
    // 작업일지 데이터
    workLog: {
      source: 'workLogs',
      fields: {
        workLogNo: 'workLogNo',
        workDate: 'workDate',
        processType: 'processType',
        customerName: 'customerName',
        siteName: 'siteName',
        requestContent: 'requestContent',
        writer: 'writer',
        department: 'department',
        totalProduction: 'totalProduction',
        totalDefect: 'totalDefect',
        goodRate: 'goodRate',
        remarks: 'remarks',
        status: 'status',
        approvalStatus: 'approvalStatus',
      },
    },
    // 재고/자재 데이터
    inventory: {
      source: 'inventory',
      fields: {
        materialCode: 'materialCode',
        materialName: 'materialName',
        spec: 'spec',
        currentStock: 'currentStock',
        unit: 'unit',
        location: 'location',
      },
    },
    // 발주 데이터 (발주서용)
    purchaseOrder: {
      source: 'purchaseOrders',
      fields: {
        // 신청업체 정보
        orderCompanyName: 'orderCompanyName',     // 발주처
        orderDate: 'orderDate',                   // 발주일
        contactPerson: 'contactPerson',           // 담당자
        contactPhone: 'contactPhone',             // 연락처
        fax: 'fax',                               // FAX
        totalInstallCount: 'totalInstallCount',   // 설치개소(총)
        // 신청내용 정보
        siteName: 'siteName',                     // 현장명
        requestDueDate: 'requestDueDate',         // 납기요청일
        shipDate: 'shipDate',                     // 출고일
        deliveryMethod: 'deliveryMethod',         // 배송방법
        deliveryAddress: 'deliveryAddress',       // 납품주소
        recipient: 'recipient',                   // 수신자
        recipientPhone: 'recipientPhone',         // 수신자 연락처
        // 발주개소 현황
        totalOrderCount: 'totalOrderCount',       // 누적발주개소
        currentOrderCount: 'currentOrderCount',   // 금번발주개소
        // 로트 정보
        lotNo: 'lotNo',                           // 로트번호
        // 특이사항
        specialNotes: 'specialNotes',             // 특이사항
      },
    },
    // 출고증 데이터 (출하관리용)
    shipment: {
      source: 'shipments',
      fields: {
        // 신청업체 정보
        orderDate: 'orderDate',                   // 발주일
        customerName: 'customerName',             // 발주처
        contactPerson: 'contactPerson',           // 발주담당자
        contactPhone: 'contactPhone',             // 담당자연락처
        // 신청내용 정보
        siteName: 'siteName',                     // 현장명
        requestDueDate: 'requestDueDate',         // 납기요청일
        shipDate: 'shipDate',                     // 출고일
        totalShutterQty: 'totalShutterQty',       // 셔터총수량
        // 납품정보
        recipient: 'recipient',                   // 인수담당자
        recipientPhone: 'recipientPhone',         // 인수자연락처
        deliveryMethod: 'deliveryMethod',         // 배송방법
        deliveryAddress: 'deliveryAddress',       // 배송지주소
        // 로트 정보
        lotNo: 'lotNo',                           // 로트번호
        // 출고 아이템
        materials: 'materials',                   // 부자재 목록
        motors: 'motors',                         // 모터 목록
        slat: 'slat',                             // 슬랫 목록
        folding: 'folding',                       // 절곡품 목록
        consumables: 'consumables',               // 소모품 목록
        // 절곡품 LOT NO 기록
        guideRailLotNo: 'guideRailLotNo',         // 가이드레일 LOT NO
        caseLotNo: 'caseLotNo',                   // 케이스 LOT NO
        bottomBarLotNo: 'bottomBarLotNo',         // 하단마감재 LOT NO
      },
    },
  },

  // ============================================================
  // 11. 결재 시스템 설정
  // ============================================================
  approvalSystem: {
    // 결재 상태
    statuses: [
      { id: 'draft', label: '작성중', color: 'gray', icon: 'Edit' },
      { id: 'pending', label: '결재대기', color: 'yellow', icon: 'Clock' },
      { id: 'inProgress', label: '결재중', color: 'blue', icon: 'RotateCcw' },
      { id: 'approved', label: '승인완료', color: 'green', icon: 'CheckCircle' },
      { id: 'rejected', label: '반려', color: 'red', icon: 'XCircle' },
      { id: 'canceled', label: '취소', color: 'gray', icon: 'Ban' },
    ],

    // 패스트트랙 승인 설정
    fastTrack: {
      enabled: true,
      description: '간편 전자결재 - 모바일/웹에서 빠른 승인',
      features: [
        '알림톡/푸시 알림으로 결재 요청 즉시 통보',
        '모바일에서 원클릭 승인/반려',
        '지문/Face ID 인증으로 빠른 서명',
        '승인 시 자동으로 다음 결재자에게 전달',
      ],
      timeLimit: 24, // 24시간 내 자동 리마인더
      escalation: {
        enabled: true,
        afterHours: 48, // 48시간 후 상위 결재자에게 에스컬레이션
      },
      applicableTo: ['WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK', 'WL-PKG', 'IQC', 'PQC'],
    },

    // 결재 알림 설정
    notifications: {
      channels: ['email', 'kakao', 'push', 'sms'],
      events: [
        { event: 'submitted', message: '새로운 결재 요청이 있습니다' },
        { event: 'approved', message: '결재가 승인되었습니다' },
        { event: 'rejected', message: '결재가 반려되었습니다' },
        { event: 'reminder', message: '미결재 문서가 있습니다 (24시간 경과)' },
      ],
    },

    // 대리결재 설정
    delegation: {
      enabled: true,
      maxDays: 30, // 최대 30일간 대리결재 지정 가능
      requireReason: true,
    },
  },

  // ============================================================
  // 12. 자동 서명 설정 (출력 시 결재완료 서명 자동 표시)
  // ============================================================
  autoSignature: {
    enabled: true,
    description: '결재 완료 시 문서 출력에 자동으로 서명/인감 표시',

    // 서명 유형
    signatureTypes: [
      {
        id: 'digital',
        label: '전자서명',
        description: '전자서명 이미지 자동 삽입',
        format: 'image', // image, text, stamp
      },
      {
        id: 'stamp',
        label: '전자인감',
        description: '직인/법인인감 이미지 자동 삽입',
        format: 'image',
      },
      {
        id: 'text',
        label: '텍스트 서명',
        description: '결재자 이름 + 결재일시 텍스트',
        format: 'text',
      },
    ],

    // 출력 시 서명 표시 설정
    printSettings: {
      showApproverName: true,       // 결재자 이름 표시
      showApprovalDate: true,       // 결재일시 표시
      showSignatureImage: true,     // 서명 이미지 표시
      showStampImage: true,         // 인감 이미지 표시
      signaturePosition: 'approval-cell', // 결재란 셀 내부
      dateFormat: 'YY.MM.DD',
      stampSize: { width: 40, height: 40 },
      signatureSize: { width: 50, height: 25 },
    },

    // 서명 보안 설정
    security: {
      requirePassword: false,        // 서명 시 비밀번호 요구
      requireBiometric: true,       // 생체인증 (지문/Face ID)
      auditLog: true,               // 서명 이력 기록
      preventTampering: true,       // 위변조 방지 워터마크
    },

    // 결재 완료 문서 표시
    completedDocument: {
      showWatermark: false,          // 워터마크 표시 여부
      watermarkText: '승인완료',
      watermarkOpacity: 0.1,
      showQRCode: true,              // 검증용 QR코드
      qrCodePosition: 'bottom-right',
      showVerificationInfo: true,    // 문서검증 정보 표시
    },
  },

  // ============================================================
  // 8. 양식 편집기 설정 (drag & drop 기능)
  // ============================================================
  editor: {
    // 드래그 가능한 블록 카테고리
    blockCategories: [
      { id: 'header', name: '헤더', icon: 'FileText', blocks: ['headers'] },
      { id: 'party', name: '당사자정보', icon: 'Users', blocks: ['partyBlocks'] },
      { id: 'approval', name: '결재라인', icon: 'CheckCircle', blocks: ['approvalBlocks'] },
      { id: 'amount', name: '금액', icon: 'DollarSign', blocks: ['amountBlocks'] },
      { id: 'table', name: '테이블', icon: 'Table', blocks: ['itemTableBlocks', 'inspectionTableBlocks'] },
      { id: 'workLog', name: '작업일지', icon: 'Clipboard', blocks: ['workLogBlocks'] },
      { id: 'shipment', name: '출고증', icon: 'Truck', blocks: ['TS-HEADER-INFO', 'TBL-TS-MATERIALS', 'TBL-TS-MOTORS', 'TBL-TS-SLAT', 'TBL-TS-FOLDING', 'TBL-TS-CONSUMABLES'] },
      { id: 'remarks', name: '비고/특기', icon: 'Edit', blocks: ['remarksBlocks'] },
      { id: 'judgement', name: '판정', icon: 'CheckSquare', blocks: ['judgementBlocks'] },
      { id: 'signature', name: '서명/인감', icon: 'Stamp', blocks: ['signatureBlocks'] },
      { id: 'misc', name: '기타', icon: 'MoreHorizontal', blocks: ['miscBlocks'] },
    ],
    // 편집 도구
    tools: {
      addBlock: true,       // 블록 추가
      removeBlock: true,    // 블록 삭제
      reorderBlock: true,   // 블록 순서 변경
      configBlock: true,    // 블록 설정 변경
      duplicateBlock: true, // 블록 복제
      previewDocument: true, // 문서 미리보기
    },
    // 미리보기 설정
    preview: {
      showGrid: true,
      showMargins: true,
      zoom: [50, 75, 100, 125, 150],
      defaultZoom: 100,
    },
  },

  // ============================================================
  // 9. 채번 규칙 (문서번호 생성)
  // ============================================================
  numberingRules: {
    // 문서 유형별 채번 패턴
    patterns: {
      'QT': { prefix: 'KQ#', format: '{TYPE}-YYMMDD-##', resetPeriod: 'daily' },
      'SO': { prefix: 'SO', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'SL': { prefix: 'SL', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WO': { prefix: 'WO', format: '-YYMMDD-##', resetPeriod: 'daily' },
      // 공정별 생산지시서 채번
      'WO-SCR': { prefix: 'WO-SCR', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WO-SLT': { prefix: 'WO-SLT', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WO-FLD': { prefix: 'WO-FLD', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'IQC': { prefix: 'IQC', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'PQC': { prefix: 'PQC', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'FQC': { prefix: 'FQC', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'NCR': { prefix: 'NCR', format: '-YYMMDD-##', resetPeriod: 'daily' },
      // 작업일지 채번
      'WL-SCR': { prefix: 'WL-SCR', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WL-FLD': { prefix: 'WL-FLD', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WL-SLT': { prefix: 'WL-SLT', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WL-STK': { prefix: 'WL-STK', format: '-YYMMDD-##', resetPeriod: 'daily' },
      'WL-PKG': { prefix: 'WL-PKG', format: '-YYMMDD-##', resetPeriod: 'daily' },
      // 발주서 채번
      'PO': { prefix: 'PO', format: '-YYMMDD-##', resetPeriod: 'daily' },
      // 견적산출내역서 채번
      'QT-DTL': { prefix: 'KQ#', format: '{TYPE}-YYMMDD-##', resetPeriod: 'daily' },
      // 현장코드 채번
      'PJ': { prefix: 'PJ', format: '-YYMMDD-##', resetPeriod: 'daily', description: '현장코드' },
      // 출고증 채번
      'TS': { prefix: 'TS', format: '-YYMMDD-##', resetPeriod: 'daily', description: '출고증' },
    },

    // ============================================================
    // LOT 번호 채번 규칙 (첨부 이미지 기준)
    // ============================================================
    lotPatterns: {
      // 원자재 LOT: YYMMDD-## (예: 240927-06)
      'LOT-RAW': {
        name: '원자재 LOT',
        format: 'YYMMDD-##',
        example: '240927-06',
        resetPeriod: 'daily',
        description: '철판, 코일 등 원자재 입고 시 부여',
        variables: ['YY', 'MM', 'DD', '##'],
      },
      // 원단 LOT: YYMMDD-## (예: 240829-01)
      'LOT-FABRIC': {
        name: '원단 LOT',
        format: 'YYMMDD-##',
        example: '240829-01',
        resetPeriod: 'daily',
        description: '스크린 원단 입고 시 부여',
        variables: ['YY', 'MM', 'DD', '##'],
      },
      // 생산 LOT: {품목코드}{종류코드}{연도1자리}{월코드}{일2자리}-{규격}
      // 예: TS4B19-40, CF4A15-40, RT4A15-43, CL4B08-24
      'LOT-PROD': {
        name: '생산 LOT',
        format: '{ITEM}{TYPE}{Y}{M}{DD}-{SPEC}',
        example: 'TS4B19-40, CF4A15-40',
        resetPeriod: 'daily',
        description: '절곡 부품 생산 시 자동 부여',
        variables: ['{ITEM}', '{TYPE}', '{Y}', '{M}', 'DD', '{SPEC}'],
      },
    },

    // 생산 LOT 품목 코드 매핑
    lotItemCodes: {
      'T': { name: '하단마감재(철재)', fullName: 'T(하단마감재(철재))' },
      'C': { name: '케이스', fullName: 'C(케이스)' },
      'R': { name: '가이드레일(벽면형)', fullName: 'R(가이드레일(벽면형))' },
      'S': { name: '가이드레일(측면형)', fullName: 'S(가이드레일(측면형))' },
      'B': { name: '하단마감재(스크린)', fullName: 'B(하단마감재(스크린))' },
      'L': { name: 'L-Bar', fullName: 'L(L-Bar)' },
      'G': { name: '연기차단재', fullName: 'G(연기차단재)' },
    },

    // 생산 LOT 종류 코드 매핑
    lotTypeCodes: {
      'S': { name: 'SUS(마감)', fullName: 'S(SUS(마감))' },
      'L': { name: '린텔부', fullName: 'L(린텔부)' },
      'P': { name: '점검구', fullName: 'P(점검구)' },
      'F': { name: '전면부', fullName: 'F(전면부)' },
      'T': { name: '본체(철재)', fullName: 'T(본체(철재))' },
      'I': { name: '화이바원단', fullName: 'I(화이바원단)' },
      'W': { name: '화이바시트', fullName: 'W(화이바시트)' },
    },

    // 월 코드 매핑 (1-9: 숫자, 10-12: A,B,C)
    monthCodes: {
      1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6',
      7: '7', 8: '8', 9: '9', 10: 'A', 11: 'B', 12: 'C',
    },

    // 규격(모양&길이) 코드 매핑
    specCodes: {
      '40(4000)': '40',
      '43(4300)': '43',
      '24(2438)': '24',
      '12(1219)': '12',
    },

    // 채번 변수
    variables: {
      'YYYY': '4자리 연도',
      'YY': '2자리 연도',
      'Y': '1자리 연도 (끝자리)',
      'MM': '월 (01-12)',
      'M': '월 코드 (1-9, A-C)',
      'DD': '일 (01-31)',
      '##': '일련번호 (2자리)',
      '###': '일련번호 (3자리)',
      '{TYPE}': '문서유형 코드',
      '{ITEM}': '품목 코드 (T,C,R,S,B,L,G)',
      '{SPEC}': '규격 코드 (40,43,24,12)',
    },
  },

  // ============================================================
  // 10. 샘플 등록 양식 데이터
  // ============================================================
  sampleTemplates: [
    {
      id: 1,
      code: 'TPL-QT-001',
      name: '표준 견적서',
      documentType: 'QT',
      description: '기본 견적서 양식',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    {
      id: 2,
      code: 'TPL-SO-001',
      name: '표준 수주확인서',
      documentType: 'SO',
      description: '기본 수주확인서 양식',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    {
      id: 3,
      code: 'TPL-SL-001',
      name: '표준 거래명세서',
      documentType: 'SL',
      description: '기본 거래명세서 양식',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    {
      id: 4,
      code: 'TPL-IQC-001',
      name: '수입검사성적서 (철판)',
      documentType: 'IQC',
      description: '철판 입고검사용 성적서',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    {
      id: 5,
      code: 'TPL-IQC-002',
      name: '수입검사성적서 (원단)',
      documentType: 'IQC',
      description: '원단 입고검사용 성적서',
      isDefault: false,
      createdAt: '2024-01-20',
      updatedAt: '2024-12-01',
    },
    {
      id: 6,
      code: 'TPL-PQC-001',
      name: '중간검사성적서 (스크린)',
      documentType: 'PQC',
      description: '스크린 중간검사용 성적서',
      isDefault: false,
      createdAt: '2024-02-01',
      updatedAt: '2024-12-01',
    },
    {
      id: 7,
      code: 'TPL-FQC-001',
      name: '표준 제품검사성적서',
      documentType: 'FQC',
      description: '출하 후 고객요청 검사용 성적서',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    {
      id: 8,
      code: 'TPL-WO-001',
      name: '표준 작업지시서',
      documentType: 'WO',
      description: '기본 작업지시서 양식',
      isDefault: true,
      createdAt: '2024-01-15',
      updatedAt: '2024-12-01',
    },
    // 공정별 생산지시서 템플릿
    {
      id: 29,
      code: 'TPL-WO-SCR-001',
      name: '스크린 생산지시서',
      documentType: 'WO-SCR',
      description: '스크린 공정 생산지시서 (작업일지 자동 생성 연동)',
      isDefault: true,
      linkedWorkLog: 'WL-SCR',
      autoCreateWorkLog: true,
      createdAt: '2024-12-15',
      updatedAt: '2024-12-15',
    },
    {
      id: 30,
      code: 'TPL-WO-SLT-001',
      name: '슬랫 생산지시서',
      documentType: 'WO-SLT',
      description: '슬랫 공정 생산지시서 (작업일지 자동 생성 연동)',
      isDefault: true,
      linkedWorkLog: 'WL-SLT',
      autoCreateWorkLog: true,
      createdAt: '2024-12-15',
      updatedAt: '2024-12-15',
    },
    {
      id: 31,
      code: 'TPL-WO-FLD-001',
      name: '절곡 생산지시서',
      documentType: 'WO-FLD',
      description: '절곡 공정 생산지시서 (작업일지 자동 생성 연동)',
      isDefault: true,
      linkedWorkLog: 'WL-FLD',
      autoCreateWorkLog: true,
      createdAt: '2024-12-15',
      updatedAt: '2024-12-15',
    },
    // 작업일지 샘플 템플릿
    {
      id: 9,
      code: 'TPL-WL-SCR-001',
      name: '스크린 작업일지',
      documentType: 'WL-SCR',
      description: '스크린 생산부서 일일 작업일지',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    {
      id: 10,
      code: 'TPL-WL-FLD-001',
      name: '절곡 작업일지',
      documentType: 'WL-FLD',
      description: '절곡 생산부서 일일 작업일지 (도면 포함)',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    {
      id: 11,
      code: 'TPL-WL-SLT-001',
      name: '슬랫 작업일지',
      documentType: 'WL-SLT',
      description: '슬랫 생산부서 일일 작업일지',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    {
      id: 12,
      code: 'TPL-WL-STK-001',
      name: '포밍 작업일지',
      documentType: 'WL-STK',
      description: '포밍(재고) 생산부서 일일 작업일지',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    {
      id: 13,
      code: 'TPL-WL-PKG-001',
      name: '포장 작업일지',
      documentType: 'WL-PKG',
      description: '포장 생산부서 일일 작업일지',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    // 발주서 샘플 템플릿
    {
      id: 14,
      code: 'TPL-PO-001',
      name: '표준 발주서',
      documentType: 'PO',
      description: '부자재 발주서 양식 (결재라인 포함)',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
    // 견적산출내역서 샘플 템플릿
    {
      id: 15,
      code: 'TPL-QT-DTL-001',
      name: '견적산출내역서',
      documentType: 'QT-DTL',
      description: '소요자재내역 포함 견적산출 양식',
      isDefault: true,
      createdAt: '2024-12-01',
      updatedAt: '2024-12-01',
    },
  ],

  // ============================================================
  // 13. 결재라인 공통화 시스템 (시스템 승인 → 문서 결재란 자동 연동)
  // ============================================================
  approvalLineIntegration: {
    description: '시스템 결재 승인 시 문서상 결재란에 자동으로 승인 표시',

    // 결재라인이 있는 모든 문서 유형
    documentsWithApproval: [
      'IQC', 'PQC', 'PQC-SCR', 'PQC-BND', 'FQC', 'NCR',  // 품질문서
      'WO', 'PO',  // 작업지시서, 발주서
      'WL-SCR', 'WL-FLD', 'WL-SLT', 'WL-STK', 'WL-PKG',  // 작업일지
    ],

    // 결재 완료 시 문서에 표시되는 내용
    approvalDisplay: {
      // 결재자 정보 표시
      showApproverInfo: {
        name: true,           // 결재자 이름
        position: true,       // 직급
        department: false,    // 부서 (선택)
      },
      // 결재일시 표시
      showApprovalDate: {
        format: 'YY.MM.DD',   // 날짜 형식
        showTime: false,      // 시간 표시 여부
      },
      // 서명/인감 표시
      showSignature: {
        type: 'auto',         // auto: 등록된 서명 자동, manual: 수동
        fallback: 'name',     // 서명 미등록 시: name(이름만), initial(이니셜)
      },
      // 결재 상태 표시
      showStatus: {
        approved: { text: '', icon: 'check', color: 'green' },     // 승인 시 체크 표시
        rejected: { text: '반려', icon: 'x', color: 'red' },
        pending: { text: '', icon: '', color: 'gray' },            // 대기 중 빈칸
      },
    },

    // 결재라인 렌더링 규칙
    renderRules: {
      // 미결재 상태
      pendingCell: {
        content: '',           // 빈칸
        border: true,
        backgroundColor: '#fff',
      },
      // 승인 완료 상태
      approvedCell: {
        showSignatureImage: true,   // 서명 이미지
        showName: true,             // 결재자 이름
        showDate: true,             // 결재일
        backgroundColor: '#fff',
        signatureOpacity: 1.0,
      },
      // 반려 상태
      rejectedCell: {
        showRejectionMark: true,    // 반려 표시
        showName: true,
        showDate: true,
        backgroundColor: '#fff5f5',
      },
    },

    // 문서 출력 시 결재란 처리
    printOptions: {
      // 승인 완료 문서
      approved: {
        showAllSignatures: true,    // 모든 결재자 서명 표시
        showApprovalDates: true,    // 결재일 표시
        showFinalApprovalMark: false, // 최종승인 도장 (선택)
      },
      // 결재 진행 중 문서
      inProgress: {
        showCompletedSignatures: true,  // 완료된 결재자만 표시
        showPendingAsBlanks: true,      // 미결재는 빈칸
        printWarning: '※ 결재 진행 중인 문서입니다',
      },
      // 초안 문서 (결재 전)
      draft: {
        showAllAsBlanks: true,      // 모든 결재란 빈칸
        printWarning: '※ 결재 전 초안입니다',
      },
    },

    // 전자결재 연동 API
    integrationAPI: {
      // 결재 상신
      submit: {
        endpoint: '/api/approval/submit',
        method: 'POST',
        requiredFields: ['documentId', 'documentType', 'approvalLineId', 'submitterId'],
      },
      // 결재 승인/반려
      process: {
        endpoint: '/api/approval/process',
        method: 'POST',
        requiredFields: ['documentId', 'approverId', 'action', 'comment'],
      },
      // 결재 현황 조회
      status: {
        endpoint: '/api/approval/status/{documentId}',
        method: 'GET',
      },
      // 서명 이미지 조회
      signature: {
        endpoint: '/api/users/{userId}/signature',
        method: 'GET',
      },
    },
  },

  // ============================================================
  // 14. 결재자 서명 관리
  // ============================================================
  signatureManagement: {
    // 서명 등록
    registration: {
      allowedFormats: ['png', 'jpg', 'svg'],
      maxFileSize: '500KB',
      recommendedSize: { width: 200, height: 100 },
      transparentBackground: true,  // 투명 배경 권장
    },

    // 서명 유형별 설정
    signatureTypes: {
      // 자필 서명
      handwritten: {
        description: '자필 서명 이미지 업로드',
        canvasInput: true,         // 캔버스에 직접 서명
        imageUpload: true,         // 이미지 파일 업로드
      },
      // 인감
      stamp: {
        description: '인감 이미지 업로드',
        shape: 'circle',           // circle, square
        color: '#c00',             // 빨간색
        size: { width: 40, height: 40 },
      },
      // 이니셜 서명
      initial: {
        description: '이름 기반 자동 생성',
        style: 'korean-last-name', // 성만 표시
        font: 'cursive',
      },
    },

    // 서명 보안
    security: {
      encryptStorage: true,        // 암호화 저장
      accessLog: true,             // 접근 기록
      requireAuth: true,           // 사용 시 인증 필요
    },
  },

  // ============================================================
  // 15. 생산지시 → 작업일지 자동 생성 시스템
  // ============================================================
  workOrderToWorkLogSystem: {
    // 공정별 매핑
    processMapping: {
      '스크린': {
        workOrderType: 'WO-SCR',
        workLogType: 'WL-SCR',
        department: '스크린생산부서',
        workSheetCode: 'WORK-SCREEN',
      },
      '슬랫': {
        workOrderType: 'WO-SLT',
        workLogType: 'WL-SLT',
        department: '슬랫생산부서',
        workSheetCode: 'WORK-SLAT',
      },
      '절곡': {
        workOrderType: 'WO-FLD',
        workLogType: 'WL-FLD',
        department: '절곡생산부서',
        workSheetCode: 'WORK-FOLD',
      },
    },

    // 자동 생성 트리거 조건
    autoCreateTriggers: {
      // 생산지시서 결재 완료 시
      onWorkOrderApproved: {
        enabled: true,
        createWorkLog: true,
        notifyWorker: true,
      },
      // 작업 시작 버튼 클릭 시
      onWorkStart: {
        enabled: true,
        createWorkLog: true,
        setWorkLogStatus: 'in_progress',
      },
    },

    // 작업일지 자동 생성 로직
    workLogAutoCreate: {
      // 생성 시 복사할 필드
      copyFields: [
        'workOrderNo',
        'orderNo',
        'customerName',
        'siteName',
        'productName',
        'width',
        'height',
        'qty',
        'dueDate',
        'processName',
      ],
      // 생성 시 설정할 기본값
      defaults: {
        status: 'draft',
        workDate: 'today',
        workerName: 'currentUser',
      },
      // 작업일지 번호 생성 규칙
      docNoRule: {
        // 생산지시서 번호 기반 생성
        // WO-SCR-251215-01 → WL-SCR-251215-01
        pattern: 'replace(workOrderNo, "WO-", "WL-")',
      },
    },

    // 작업자 화면 연동
    workerTaskIntegration: {
      // 작업자가 볼 수 있는 작업 목록 필터
      taskFilter: {
        status: ['assigned', 'in_progress'],
        sortBy: 'dueDate',
        sortOrder: 'asc',
      },
      // 작업 시작 가능 조건
      startConditions: {
        workOrderApproved: true,
        materialAvailable: true,
      },
      // 작업 완료 시 동작
      onComplete: {
        updateWorkLogStatus: 'completed',
        createInspectionRequest: true,
        notifyQC: true,
      },
    },
  },

  // ============================================================
  // 16. 작업일지 출력 시스템
  // ============================================================
  workLogPrintSystem: {
    // 출력 가능 조건
    printConditions: {
      // 작업 완료 후에만 출력 가능
      requireComplete: false,
      // 결재 완료 후에만 출력 가능
      requireApproval: false,
      // 작업 시작 후부터 출력 가능
      requireWorkStarted: true,
    },

    // 출력 포맷
    printFormats: {
      // A4 세로
      portrait: {
        paperSize: 'A4',
        orientation: 'portrait',
        margins: { top: 15, right: 15, bottom: 15, left: 15 },
      },
      // A4 가로
      landscape: {
        paperSize: 'A4',
        orientation: 'landscape',
        margins: { top: 10, right: 10, bottom: 10, left: 10 },
      },
    },

    // 공정별 출력 설정
    processPrintConfig: {
      'WL-SCR': {
        orientation: 'landscape',
        includeSpecCalculation: true,  // 규격매수 계산 포함
        showOverlapTable: true,        // 시점 및 중첩 테이블 표시
      },
      'WL-SLT': {
        orientation: 'portrait',
        includeSheetCalculation: true, // 매수 계산 포함
        showJointBarQty: true,         // 조인트바 수량 표시
        showCoilUsage: true,           // 코일사용량 표시
      },
      'WL-FLD': {
        orientation: 'portrait',
        includeSectionSummary: true,   // 전개도 상세 합계 포함
        showDrawings: true,            // 섹션별 도면 표시
        showGrandTotal: true,          // 전체 합계 표시
      },
    },

    // 출력 버튼 설정
    printButtons: [
      {
        id: 'print-preview',
        label: '미리보기',
        icon: 'Eye',
        action: 'openPreview',
      },
      {
        id: 'print-direct',
        label: '인쇄',
        icon: 'Printer',
        action: 'printDirect',
      },
      {
        id: 'export-pdf',
        label: 'PDF 저장',
        icon: 'FileText',
        action: 'exportPDF',
      },
      {
        id: 'export-excel',
        label: '엑셀 저장',
        icon: 'Table',
        action: 'exportExcel',
      },
    ],

    // 인쇄 미리보기 설정
    previewConfig: {
      showPageBreaks: true,
      zoomLevel: 'fit-width',
      showPrintMargins: true,
    },
  },

  // ============================================================
  // 17. 작업자 화면 설정
  // ============================================================
  workerTaskConfig: {
    // 작업자 화면 모드
    displayModes: {
      // 목록 모드
      list: {
        columns: ['workOrderNo', 'processName', 'productName', 'qty', 'status', 'dueDate'],
        sortable: true,
        filterable: true,
      },
      // 칸반 모드
      kanban: {
        columns: ['대기', '진행중', '완료', '검사중'],
        cardFields: ['workOrderNo', 'productName', 'qty', 'dueDate'],
      },
    },

    // 작업 상태 전환
    statusTransitions: {
      'assigned': ['in_progress'],              // 배정됨 → 진행중
      'in_progress': ['paused', 'completed'],   // 진행중 → 일시정지/완료
      'paused': ['in_progress'],                // 일시정지 → 진행중
      'completed': ['in_inspection'],           // 완료 → 검사중
      'in_inspection': ['approved', 'rejected'], // 검사중 → 합격/불합격
    },

    // 작업 시작 시 필요한 입력
    startInputs: {
      workerName: { required: true, type: 'select', label: '작업자' },
      startTime: { required: true, type: 'datetime', label: '시작 시간', default: 'now' },
    },

    // 작업 완료 시 필요한 입력
    completeInputs: {
      endTime: { required: true, type: 'datetime', label: '종료 시간', default: 'now' },
      goodQty: { required: true, type: 'number', label: '양품 수량' },
      defectQty: { required: false, type: 'number', label: '불량 수량', default: 0 },
      remarks: { required: false, type: 'textarea', label: '비고' },
    },

    // 공정별 추가 입력 필드
    processSpecificInputs: {
      '스크린': {
        fields: [
          { id: 'specCount', label: '규격매수', type: 'number', calculated: true },
          { id: 'remainHeight', label: '나머지높이', type: 'number' },
        ],
      },
      '슬랫': {
        fields: [
          { id: 'sheetCount', label: '매수(세로)', type: 'number', calculated: true },
          { id: 'jointBarQty', label: '조인트바 수량', type: 'number', calculated: true },
          { id: 'coilUsage', label: '코일사용량', type: 'number', calculated: true },
        ],
      },
      '절곡': {
        fields: [
          { id: 'sectionQty', label: '섹션별 수량', type: 'object', sections: ['벽면형', '하단마감재', '케이스', '연기차단재'] },
          { id: 'totalWeight', label: '생산량(kg)', type: 'number' },
        ],
      },
    },

    // 작업일지 출력 버튼
    workLogPrintButton: {
      enabled: true,
      label: '작업일지 출력',
      icon: 'Printer',
      position: 'toolbar',
      // 출력 가능 상태
      enabledStates: ['in_progress', 'completed', 'in_inspection', 'approved'],
    },
  },

  // ============================================================
  // 18. 납품확인서 시스템 (출하관리 연동)
  // ============================================================
  deliveryConfirmationSystem: {
    // 납품확인서 블록 라이브러리
    blocks: {
      // ========== 납품확인서 헤더 블록 (작업일지 스타일 적용) ==========
      'HDR-DELIVERY': {
        id: 'HDR-DELIVERY',
        name: '납품확인서 헤더',
        description: '좌측 로고(KD경동기업) + 중앙 제목 + 우측 결재란',
        category: 'header',
        preview: '[KD로고] 납 품 확 인 서 | [결재란]',
        config: {
          layout: 'delivery-header',
          logo: {
            text: 'KD',
            subText: '경동기업',
            subSubText: 'KYUNGDONG COMPANY',
            position: 'left',
            style: 'blue-box',
          },
          title: {
            text: '납 품 확 인 서',
            style: 'large-underline',
            letterSpacing: '1em',
          },
          approval: {
            position: 'top-right',
            columns: [
              { id: 'write', label: '작성', width: 50 },
              { id: 'review', label: '검토', width: 50 },
              { id: 'approve', label: '승인', width: 50 },
            ],
            rows: [
              { id: 'sign', label: '결재', type: 'signature', height: 40 },
            ],
          },
          lotNo: {
            label: '로트번호',
            field: 'lotNo',
            position: 'top-right-corner',
            style: 'bordered-box',
          },
        },
        usedIn: ['DC'],
      },

      // ========== 납품확인서 기본정보 블록 (작업일지 스타일 적용) ==========
      'DC-HEADER-INFO': {
        id: 'DC-HEADER-INFO',
        name: '납품확인서 헤더정보',
        description: '신청업체/신청내용/납품정보 3단 구조',
        category: 'deliveryConfirmation',
        preview: '┌─ 신청업체 ─┬─ 신청내용 ─┬─ 납품정보 ─┐',
        config: {
          layout: 'three-section',
          leftSection: {
            title: '신 청 업 체',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '발 주 일', field: 'orderDate', labelBg: '#E6E6E6' }] },
              { row: 2, items: [{ label: '업 체 명', field: 'customerName', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '담 당 자', field: 'contactPerson', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '연 락 처', field: 'contactPhone', labelBg: '#E6E6E6' }] },
            ],
          },
          centerSection: {
            title: '신 청 내 용',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '현 장 명', field: 'siteName', labelBg: '#E6E6E6', valueBg: '#00FFFF' }] },
              { row: 2, items: [{ label: '상 품 명', field: 'productCategory', labelBg: '#E6E6E6' }] },
              { row: 3, items: [{ label: '제 품 명', field: 'productName', labelBg: '#FFF2CC', valueBg: '#00FFFF' }] },
              { row: 4, items: [{ label: '인 정 번 호', field: 'certificationNo', labelBg: '#E6E6E6' }] },
            ],
          },
          rightSection: {
            title: '납 품 정 보',
            titleBg: '#E6E6E6',
            fields: [
              { row: 1, items: [{ label: '납품일자', field: 'deliveryDate', labelBg: '#E6E6E6' }] },
              { row: 2, items: [{ label: '납품수량', field: 'deliveryQty', labelBg: '#E6E6E6', valueBg: '#FFFF00' }] },
              { row: 3, items: [{ label: '납품담당', field: 'deliveryManager', labelBg: '#E6E6E6' }] },
              { row: 4, items: [{ label: '차량번호', field: 'vehicleNo', labelBg: '#E6E6E6' }] },
            ],
          },
        },
        dataSource: 'shipment',
        usedIn: ['DC'],
      },

      // ========== 1. 부호별 자재내역 테이블 ==========
      'TBL-DC-MATERIALS': {
        id: 'TBL-DC-MATERIALS',
        name: '부호별 자재내역',
        description: '부호별 오픈사이즈, 제작사이즈, 가이드레일유형, 샤프트, 케이스, 모터 정보',
        category: 'deliveryConfirmation',
        preview: '│NO│부호│오픈사이즈│제작사이즈│가이드레일│샤프트│케이스│모터│',
        config: {
          title: '1. 부호별 자재내역',
          titleStyle: 'bold-section-header',
          titleBg: '#E6E6E6',
          columns: [
            { id: 'no', label: 'NO', width: 30, align: 'center', headerBg: '#E6E6E6' },
            { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'openWidth', label: '가로', width: 50, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'openHeight', label: '세로', width: 50, align: 'center', format: 'number', headerBg: '#FFF2CC' },
            { id: 'productionWidth', label: '가로', width: 50, align: 'center', format: 'number', headerBg: '#E6F3FF' },
            { id: 'productionHeight', label: '세로', width: 50, align: 'center', format: 'number', headerBg: '#E6F3FF' },
            { id: 'guideRailType', label: '가이드레일\n유형', width: 70, align: 'center', headerBg: '#E6E6E6' },
            { id: 'shaftType', label: '샤프트', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'caseType', label: '케이스', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'motorType', label: '모터', width: 60, align: 'center', headerBg: '#E6E6E6' },
            { id: 'qty', label: '수량', width: 40, align: 'center', format: 'number', headerBg: '#FFFF00' },
          ],
          headerGroups: [
            { label: '오픈사이즈(mm)', colSpan: 2, startCol: 'openWidth', headerBg: '#FFF2CC' },
            { label: '제작사이즈(mm)', colSpan: 2, startCol: 'productionWidth', headerBg: '#E6F3FF' },
          ],
          summaryRow: {
            enabled: true,
            label: '합계',
            sumColumns: ['qty'],
            style: { fontWeight: 'bold', backgroundColor: '#F5F5F5' },
          },
        },
        dataSource: 'shipmentItems',
        usedIn: ['DC'],
      },

      // ========== 2. 부호별 절곡내역 (케이스/가이드레일 매트릭스) ==========
      'TBL-DC-BENDING': {
        id: 'TBL-DC-BENDING',
        name: '부호별 절곡내역',
        description: '부호별 케이스, 가이드레일 수량 매트릭스 (사이즈별 분류)',
        category: 'deliveryConfirmation',
        preview: '│부호│ 케이스 130│ 케이스 150│ 가이드 50X50│ 가이드 50X60│',
        config: {
          title: '2. 부호별 절곡내역',
          titleStyle: 'bold-section-header',
          titleBg: '#E6E6E6',
          // 동적 컬럼 구성 - 실제 사용되는 케이스/가이드레일 규격에 따라 컬럼 생성
          dynamicColumns: true,
          fixedColumns: [
            { id: 'no', label: 'NO', width: 30, align: 'center', headerBg: '#E6E6E6' },
            { id: 'partCode', label: '부호', width: 60, align: 'center', headerBg: '#E6E6E6' },
          ],
          caseColumns: {
            headerLabel: '케이스',
            headerBg: '#FFF2CC',
            // 규격 목록 (동적으로 데이터에서 추출)
            specs: ['130', '150', '180', '200'],
            cellWidth: 50,
          },
          guideRailColumns: {
            headerLabel: '가이드레일',
            headerBg: '#E6F3FF',
            // 규격 목록 (동적으로 데이터에서 추출)
            specs: ['50X50', '50X60', '60X60', '70X70'],
            cellWidth: 60,
          },
          summarySection: {
            enabled: true,
            title: '절곡 합계',
            layout: 'horizontal',
            items: [
              { label: '케이스 합계', sumOf: 'caseColumns', unit: 'EA' },
              { label: '가이드레일 합계', sumOf: 'guideRailColumns', unit: 'M' },
            ],
          },
        },
        dataSource: 'bendingMatrix',
        usedIn: ['DC'],
      },

      // ========== 3. 절곡품 도면 섹션 ==========
      'TBL-DC-DRAWINGS': {
        id: 'TBL-DC-DRAWINGS',
        name: '절곡품 도면',
        description: '벽면형, 측면형 절곡품 도면 이미지 및 치수',
        category: 'deliveryConfirmation',
        preview: '│ 벽면형 120-70 │ 측면형 120-120 │',
        config: {
          title: '3. 절곡품 도면',
          titleStyle: 'bold-section-header',
          titleBg: '#E6E6E6',
          layout: 'drawing-grid',
          drawings: [
            {
              id: 'wall-type',
              label: '벽면형',
              description: '벽면 설치용 절곡 형태',
              dimensions: {
                standard: '120-70',
                variants: ['100-60', '120-70', '150-80'],
              },
              imageField: 'wallTypeDrawing',
              showDimensions: true,
            },
            {
              id: 'side-type',
              label: '측면형',
              description: '측면 설치용 절곡 형태',
              dimensions: {
                standard: '120-120',
                variants: ['100-100', '120-120', '150-150'],
              },
              imageField: 'sideTypeDrawing',
              showDimensions: true,
            },
          ],
          drawingStyle: {
            borderColor: '#000',
            backgroundColor: '#FAFAFA',
            dimensionColor: '#333',
            labelStyle: 'bold-centered',
          },
        },
        dataSource: 'bendingDrawings',
        usedIn: ['DC'],
      },

      // ========== 4. 부자재 섹션 ==========
      'TBL-DC-SUBMATERIALS': {
        id: 'TBL-DC-SUBMATERIALS',
        name: '부자재 목록',
        description: '감기샤프트, 각파이프, 앵글 등 부자재 내역',
        category: 'deliveryConfirmation',
        preview: '│NO│품명│규격│단위│수량│비고│',
        config: {
          title: '4. 부자재',
          titleStyle: 'bold-section-header',
          titleBg: '#E6E6E6',
          columns: [
            { id: 'no', label: 'NO', width: 30, align: 'center', headerBg: '#E6E6E6' },
            { id: 'itemName', label: '품명', width: 120, align: 'left', headerBg: '#E6E6E6' },
            { id: 'spec', label: '규격', width: 80, align: 'center', headerBg: '#E6E6E6' },
            { id: 'unit', label: '단위', width: 40, align: 'center', headerBg: '#E6E6E6' },
            { id: 'qty', label: '수량', width: 50, align: 'center', format: 'number', headerBg: '#FFFF00' },
            { id: 'remarks', label: '비고', width: 100, align: 'left', headerBg: '#E6E6E6' },
          ],
          // 기본 부자재 목록
          defaultItems: [
            { itemName: '감기샤프트', spec: 'ø25', unit: 'EA' },
            { itemName: '각파이프', spec: '30x30', unit: 'M' },
            { itemName: '앵글', spec: '30x30x3t', unit: 'M' },
            { itemName: '모터브라켓', spec: '-', unit: 'EA' },
            { itemName: '스톱퍼', spec: '-', unit: 'EA' },
            { itemName: '리미트스위치', spec: '-', unit: 'EA' },
            { itemName: '스프링', spec: '-', unit: 'EA' },
            { itemName: '볼트/너트세트', spec: 'M8', unit: 'SET' },
          ],
          summaryRow: {
            enabled: false,
          },
        },
        dataSource: 'subMaterials',
        usedIn: ['DC'],
      },

      // ========== 수령확인 서명란 ==========
      'SIG-DC-CONFIRM': {
        id: 'SIG-DC-CONFIRM',
        name: '수령확인 서명란',
        description: '현장 담당자 수령 확인 서명',
        category: 'signature',
        preview: '상기 내역을 확인하고 납품물을 인수합니다. [날짜] [서명]',
        config: {
          leadText: '상기 내역을 확인하고 납품물을 인수합니다.',
          layout: 'formal-receipt',
          fields: [
            { id: 'receiptDate', label: '인수일자', type: 'date', width: 120 },
            { id: 'receiverName', label: '인수자', type: 'text', width: 100 },
            { id: 'receiverSign', label: '서명', type: 'signature', width: 150 },
          ],
          style: {
            marginTop: 20,
            borderTop: '1px solid #000',
            paddingTop: 15,
          },
        },
        usedIn: ['DC'],
      },
    },

    // 납품확인서 템플릿 정의
    template: {
      id: 'DC',
      name: '납품확인서',
      code: 'DC',
      category: 'logistics',
      paperSize: 'A4',
      orientation: 'portrait',
      margins: { top: 15, right: 15, bottom: 15, left: 15 },
      docNoFormat: 'DC-YYMMDD-##',
      blocks: [
        { blockId: 'HDR-DELIVERY' },
        { blockId: 'DC-HEADER-INFO' },
        { blockId: 'TBL-DC-MATERIALS' },
        { blockId: 'TBL-DC-BENDING' },
        { blockId: 'TBL-DC-DRAWINGS' },
        { blockId: 'TBL-DC-SUBMATERIALS' },
        { blockId: 'SIG-DC-CONFIRM' },
      ],
      // 페이지 나눔 설정
      pageBreaks: {
        beforeBlocks: ['TBL-DC-DRAWINGS'], // 절곡품 도면 전에 페이지 나눔
        autoBreak: true,
        minSpaceForBlock: 150, // 블록 시작 전 최소 공간 (mm)
      },
      // 데이터 바인딩
      dataBinding: {
        shipment: {
          source: 'shipments',
          fields: {
            lotNo: 'lotNo',
            orderDate: 'order.orderDate',
            customerName: 'order.customerName',
            contactPerson: 'order.contactPerson',
            contactPhone: 'order.contactPhone',
            siteName: 'order.siteName',
            productCategory: 'order.productCategory',
            productName: 'order.productName',
            certificationNo: 'order.certificationNo',
            deliveryDate: 'shipmentDate',
            deliveryQty: 'totalQty',
            deliveryManager: 'deliveryManager',
            vehicleNo: 'vehicleNo',
          },
        },
        shipmentItems: {
          source: 'shipmentItems',
          fields: {
            partCode: 'partCode',
            openWidth: 'openSize.width',
            openHeight: 'openSize.height',
            productionWidth: 'productionSize.width',
            productionHeight: 'productionSize.height',
            guideRailType: 'guideRailType',
            shaftType: 'shaftType',
            caseType: 'caseType',
            motorType: 'motorType',
            qty: 'qty',
          },
        },
        bendingMatrix: {
          source: 'calculateBendingMatrix',
          // 부호별로 케이스/가이드레일 규격별 수량을 매트릭스로 계산
          calculation: 'groupByPartCode',
        },
        bendingDrawings: {
          source: 'bendingDrawings',
          fields: {
            wallTypeDrawing: 'wallType.imageUrl',
            sideTypeDrawing: 'sideType.imageUrl',
          },
        },
        subMaterials: {
          source: 'subMaterials',
          fields: {
            itemName: 'name',
            spec: 'specification',
            unit: 'unit',
            qty: 'quantity',
            remarks: 'remarks',
          },
        },
      },
    },

    // 출력 시스템 설정
    printSystem: {
      // 출력 가능 조건
      printConditions: {
        requireShipmentComplete: false,  // 출하 완료 전에도 출력 가능
        requireApproval: false,          // 결재 완료 전에도 출력 가능
        allowDraft: true,                // 초안 상태에서도 출력 가능
      },

      // 출력 포맷
      printFormats: {
        portrait: {
          paperSize: 'A4',
          orientation: 'portrait',
          margins: { top: 15, right: 15, bottom: 15, left: 15 },
        },
      },

      // 출력 버튼 설정
      printButtons: [
        {
          id: 'preview-dc',
          label: '미리보기',
          icon: 'Eye',
          action: 'openPreview',
        },
        {
          id: 'print-dc',
          label: '인쇄',
          icon: 'Printer',
          action: 'printDirect',
        },
        {
          id: 'export-pdf-dc',
          label: 'PDF 저장',
          icon: 'FileText',
          action: 'exportPDF',
        },
      ],

      // 인쇄 미리보기 설정
      previewConfig: {
        showPageBreaks: true,
        zoomLevel: 'fit-width',
        showPrintMargins: true,
        multiPage: true,  // 여러 페이지 지원
      },
    },

    // 출하관리 연동
    shipmentIntegration: {
      // 출력 버튼 표시 위치
      buttonPlacement: {
        location: 'shipment-detail-toolbar',
        position: 'after-shipment-actions',
      },

      // 출력 버튼 활성화 조건
      enableConditions: {
        status: ['draft', 'confirmed', 'shipped', 'delivered'],
        hasItems: true,  // 출하 품목이 있어야 함
      },

      // 데이터 자동 매핑
      autoDataMapping: {
        fromShipment: true,
        fromOrder: true,
        fromWorkOrder: true,
        calculateBending: true,  // 절곡내역 자동 계산
      },
    },
  },

  // ============================================================
  // 멀티테넌시 통합 헬퍼 함수
  // ============================================================

  /**
   * 현재 테넌트의 회사정보로 블록 데이터 채우기
   * @param {Object} block - 블록 설정
   * @returns {Object} 테넌트 정보가 적용된 블록
   */
  applyTenantToBlock: (block) => {
    if (!block.config?.useCompanyInfo) return block;

    const companyInfo = getTenantCompanyInfo();
    const logo = getTenantLogo();

    return {
      ...block,
      resolvedData: {
        companyName: companyInfo.fullName || companyInfo.name,
        businessNo: companyInfo.businessNo,
        ceo: companyInfo.ceo,
        businessType: companyInfo.businessType,
        businessItem: companyInfo.businessItem,
        address: companyInfo.address,
        phone: companyInfo.phone,
        fax: companyInfo.fax,
        email: companyInfo.email,
        logoPath: logo.primary,
        textLogo: logo.textLogo,
      },
    };
  },

  /**
   * 문서 유형에 맞는 결재라인 가져오기
   * @param {string} docType - 문서 유형 (worklog, sales, quality 등)
   * @returns {Object} 결재라인 설정
   */
  getApprovalLineForDocument: (docType) => {
    const lineType = documentTemplateConfig.getApprovalLineType(docType);
    return getTenantApprovalLine(lineType);
  },

  /**
   * 문서 유형에 따른 결재라인 타입 매핑
   */
  getApprovalLineType: (docType) => {
    const mapping = {
      // 작업일지 계열
      'WL-SCR': 'worklog',
      'WL-FLD': 'worklog',
      'WL-SLT': 'worklog',
      'WL-STK': 'worklog',
      'WL-PKG': 'worklog',
      // 영업문서 계열
      'QT': 'sales',
      'SO': 'sales',
      'SL': 'sales',
      // 품질문서 계열
      'IQC': 'quality',
      'PQC': 'quality',
      'FQC': 'quality',
      'NCR': 'quality',
      // 기타는 기본 결재라인
    };
    return mapping[docType] || 'default';
  },

  /**
   * 테넌트 기반 문서번호 생성
   * @param {string} docType - 문서 유형 코드
   * @param {Date} date - 기준 날짜
   * @returns {string} 생성된 문서번호
   */
  generateDocumentNo: (docType, date = new Date()) => {
    return generateTenantDocumentNo(docType, date);
  },

  /**
   * 문서 렌더링 시 테넌트 컨텍스트 생성
   * @param {string} docType - 문서 유형
   * @returns {Object} 렌더링에 필요한 모든 테넌트 정보
   */
  createTenantContext: (docType) => {
    const tenant = getCurrentTenant();
    const companyInfo = getTenantCompanyInfo();
    const logo = getTenantLogo();
    const approvalLine = documentTemplateConfig.getApprovalLineForDocument(docType);
    const numberingRule = getTenantNumberingRule(docType);

    return {
      tenant: {
        id: tenant.id,
        code: tenant.code,
        name: tenant.name,
      },
      company: companyInfo,
      logo: logo,
      approval: approvalLine,
      numbering: numberingRule,
      seals: tenant.seals,
      styles: tenant.documentStyles?.[docType] || {},
    };
  },
};

export default documentTemplateConfig;

// 추가 export (편의 함수)
export {
  getCurrentTenant,
  getTenantCompanyInfo,
  getTenantApprovalLine,
  getTenantNumberingRule,
  generateTenantDocumentNo,
  getTenantLogo,
};
