# 5130 → SAM 필드 매핑 > 작성일: 2025-12-21 > 대상: 경동기업 (tenant_id: 287) --- ## 1. 기본 설정 | 항목 | 값 | |------|-----| | tenant_id | 287 | | 대상 회사 | 경동기업 | | 제외 | 주일기업 (별도 테넌트로 추후 진행) | --- ## 2. 테이블 매핑 ### 2.1 models → items (완제품) | 5130 (models) | → | SAM (items) | 변환 규칙 | |---------------|---|-------------|-----------| | model_id | → | (item_id_mappings에 기록) | 매핑 추적용 | | - | → | tenant_id | 고정값: 287 | | - | → | item_type | 고정값: 'FG' | | model_name | → | code | 그대로 (KSS01 등) | | model_name | → | name | 그대로 | | - | → | unit | 기본값: 'SET' | | description | → | description | 그대로 | | major_category | → | attributes.major_category | 스크린/스라트 | | finishing_type | → | attributes.finishing_type | SUS마감/EGI마감 | | guiderail_type | → | attributes.guiderail_type | 그대로 | | is_deleted | → | deleted_at | 1이면 현재시간, 0이면 NULL | | created_at | → | created_at | 그대로 | | updated_at | → | updated_at | 그대로 | **items.attributes JSON 구조:** ```json { "major_category": "스크린", "finishing_type": "SUS마감", "guiderail_type": "일반형", "source": "5130", "source_table": "models", "source_id": 12 } ``` ### 2.2 parts → items (부품) | 5130 (parts) | → | SAM (items) | 변환 규칙 | |--------------|---|-------------|-----------| | part_id | → | (item_id_mappings에 기록) | 매핑 추적용 | | - | → | tenant_id | 고정값: 287 | | - | → | item_type | 고정값: 'PT' | | part_name | → | code | 정규화 필요 (공백→언더스코어) | | part_name | → | name | 그대로 | | unit | → | unit | 그대로 (SET 등) | | spec | → | attributes.spec | 규격 (120*70 등) | | memo | → | description | 그대로 | | unitprice | → | attributes.unit_price | varchar→decimal 변환 | | img_url | → | attributes.image_url | 그대로 | | is_deleted | → | deleted_at | 변환 | | created_at | → | created_at | 그대로 | | updated_at | → | updated_at | 그대로 | **items.attributes JSON 구조:** ```json { "spec": "120*70", "unit_price": 15000, "image_url": "/img/parts/xxx.jpg", "source": "5130", "source_table": "parts", "source_id": 49 } ``` ### 2.3 parts_sub → items (원자재) | 5130 (parts_sub) | → | SAM (items) | 변환 규칙 | |------------------|---|-------------|-----------| | subpart_id | → | (item_id_mappings에 기록) | 매핑 추적용 | | - | → | tenant_id | 고정값: 287 | | - | → | item_type | 고정값: 'RM' | | subpart_name | → | code | 정규화 | | subpart_name | → | name | 그대로 | | - | → | unit | 기본값: 'EA' | | material | → | attributes.material | SUS 1.2T 등 | | bendSum | → | attributes.bend_sum | varchar→decimal | | plateSum | → | attributes.plate_sum | varchar→decimal | | finalSum | → | attributes.final_sum | varchar→decimal | | unitPrice | → | attributes.unit_price | varchar→decimal | | computedPrice | → | attributes.computed_price | varchar→decimal | | lineTotal | → | attributes.line_total | varchar→decimal | | image_url | → | attributes.image_url | 그대로 | | is_deleted | → | deleted_at | 변환 | | created_at | → | created_at | 그대로 | | updated_at | → | updated_at | 그대로 | **items.attributes JSON 구조:** ```json { "material": "SUS 1.2T", "bend_sum": 5000, "plate_sum": 3000, "final_sum": 8000, "unit_price": 1500, "computed_price": 1500, "line_total": 15000, "image_url": "/img/sub/xxx.jpg", "source": "5130", "source_table": "parts_sub", "source_id": 64 } ``` --- ## 3. 관계 매핑 ### 3.1 models ↔ parts 관계 **entity_relationships 테이블 사용:** | 필드 | 값 | |------|-----| | tenant_id | 287 | | parent_type | 'items' | | parent_id | (models에서 생성된 items.id) | | child_type | 'items' | | child_id | (parts에서 생성된 items.id) | | order_no | parts.part_id 순서 | | metadata | {"quantity": parts.quantity, "relation": "bom"} | ### 3.2 parts ↔ parts_sub 관계 **entity_relationships 테이블 사용:** | 필드 | 값 | |------|-----| | tenant_id | 287 | | parent_type | 'items' | | parent_id | (parts에서 생성된 items.id) | | child_type | 'items' | | child_id | (parts_sub에서 생성된 items.id) | | order_no | parts_sub.subpart_id 순서 | | metadata | {"quantity": parts_sub.quantity, "relation": "bom"} | --- ## 4. ID 매핑 (item_id_mappings) 마이그레이션 추적을 위해 원본 ID 기록: | source_table | source_id | item_id | |--------------|-----------|---------| | models | 12 | (생성된 ID) | | parts | 49 | (생성된 ID) | | parts_sub | 64 | (생성된 ID) | --- ## 5. 코드 생성 규칙 ### 5.1 items.code 생성 | item_type | 코드 패턴 | 예시 | |-----------|----------|------| | FG (완제품) | 원본 model_name 유지 | KSS01, KSE01 | | PT (부품) | PT-{정규화된 이름} | PT-UPPER_BRACKET | | RM (원자재) | RM-{정규화된 이름} | RM-SUS_1_2T_FRONT | ### 5.2 정규화 규칙 - 한글 → 영문 변환 (또는 유지) - 공백 → 언더스코어 - 특수문자 제거 - 대문자 변환 --- ## 6. 타입 변환 규칙 | 원본 타입 | 대상 타입 | 변환 로직 | |----------|----------|----------| | varchar (가격) | decimal | 숫자만 추출, NULL이면 0 | | tinyint (is_deleted) | timestamp (deleted_at) | 1→now(), 0→NULL | | enum (major_category) | varchar (JSON) | 그대로 저장 | | datetime | timestamp | 그대로 | --- ## 7. 마이그레이션 순서 1. **models → items** (FG) - 18건 2. **parts → items** (PT) - 37건 3. **parts_sub → items** (RM) - 134건 4. **models↔parts 관계 → entity_relationships** 5. **parts↔parts_sub 관계 → entity_relationships** 6. **item_id_mappings 기록** **총 예상:** items 189건, entity_relationships 171건