diff --git a/scripts/seed.py b/scripts/seed.py index 7091618..169a51f 100644 --- a/scripts/seed.py +++ b/scripts/seed.py @@ -72,174 +72,173 @@ TENANT_ADMINS = [ NOW = datetime.now(timezone.utc) -MACHINES = { - "spifox": [ + +# ─── Spifox 설비 생성 (이천공장 304대 — Digital Twin DB 기준) ─── + +# CASE프레스 번호 목록 (P-1xx ~ P-9xx, 총 215대) +_CASE_NUMBERS = ( + list(range(101, 132)) # P-101 ~ P-131 (31) + + list(range(201, 233)) # P-201 ~ P-232 (32) + + list(range(301, 333)) # P-301 ~ P-332 (32) + + list(range(401, 433)) # P-401 ~ P-432 (32) + + list(range(501, 519)) # P-501 ~ P-518 (18) + + list(range(601, 633)) # P-601 ~ P-632 (32) + + list(range(701, 713)) # P-701 ~ P-712 (12) + + list(range(801, 821)) # P-801 ~ P-820 (20) + + [903, 904, 905, 906, 908, 910] # (6) +) + +SPIFOX_MACHINES: list[dict] = [] + +# ── CASE프레스 215대 ── +for num in _CASE_NUMBERS: + m: dict = { + "name": f"CASE프레스 P-{num}", + "equipment_code": f"SF-CASE-P{num}", + "model": "Finish Press 80T", + "manufacturer": "SpiFox", + "location": "이천공장", + "area": "CASE프레스", + "criticality": "critical", + "rated_capacity": "80T", + "power_rating": "18.5kW", + } + if num == 101: + m["description"] = "2차 딥드로잉 성형. 콘덴서 케이스 최종 형상." + SPIFOX_MACHINES.append(m) + +# ── CUP프레스 32대 ── +for i in range(1, 33): + m = { + "name": f"CUP프레스 {i}호기", + "equipment_code": f"SF-CUP-{i:03d}", + "model": "Cup Making Press 60T", + "manufacturer": "SpiFox", + "location": "이천공장", + "area": "CUP프레스", + "criticality": "critical", + "rated_capacity": "60T, UPH 520pcs", + "power_rating": "15kW", + } + if i == 1: + m["description"] = "알루미늄 슬러그 → CUP 형상 1차 딥드로잉 성형." + SPIFOX_MACHINES.append(m) + +# ── 컵핑 33대 (컵핑1~32호기 + 컵핑기 003호기) ── +for i in range(1, 33): + SPIFOX_MACHINES.append( { - "name": "반제품 프레스 #1", - "equipment_code": "SF-CUP-001", - "model": "Cup Making Press 60T", - "manufacturer": "SpiFox 자체설계", - "location": "1동 반제품 라인", - "area": "반제품 프레스", + "name": f"컵핑{i}호기", + "equipment_code": f"SF-CPN-{i:03d}", + "model": "Cup Forming Press", + "manufacturer": "SpiFox", + "location": "이천공장", + "area": "컵핑", "criticality": "critical", - "rated_capacity": "60T, UPH 520pcs", + "rated_capacity": "컵핑 성형", "power_rating": "15kW", - "description": "알루미늄 슬러그 → CUP 형상 1차 성형. 딥드로잉 공법.", - }, + } + ) +SPIFOX_MACHINES.append( + { + "name": "컵핑기 003호기", + "equipment_code": "SF-CPN-033", + "model": "Cup Forming Press", + "manufacturer": "SpiFox", + "location": "이천공장", + "area": "컵핑", + "criticality": "critical", + "rated_capacity": "컵핑 성형", + "power_rating": "15kW", + } +) + +# ── CUP건조설비 8대 ── +for i in range(1, 9): + m = { + "name": f"CUP건조설비 {i}호기", + "equipment_code": f"SF-DRY-{i:03d}", + "model": "Hot Air Dryer 300", + "manufacturer": "대한열기", + "location": "이천공장", + "area": "CUP건조설비", + "criticality": "major", + "rated_capacity": "반제품 건조 300kg/batch", + "power_rating": "25kW", + } + if i == 1: + m["description"] = "반제품 CUP 건조. 열풍 순환 방식." + SPIFOX_MACHINES.append(m) + +# ── 건조 8대 ── +for i in range(1, 9): + SPIFOX_MACHINES.append( { - "name": "반제품 프레스 #2", - "equipment_code": "SF-CUP-002", - "model": "Cup Making Press 60T", - "manufacturer": "SpiFox 자체설계", - "location": "1동 반제품 라인", - "area": "반제품 프레스", - "criticality": "critical", - "rated_capacity": "60T, UPH 520pcs", - "power_rating": "15kW", - "description": "알루미늄 슬러그 → CUP 형상 1차 성형.", - }, - { - "name": "완제품 프레스 #1", - "equipment_code": "SF-FIN-001", - "model": "Finish Press 80T", - "manufacturer": "SpiFox 자체설계", - "location": "2동 완제품 성형 라인 A", - "area": "완제품 성형 A", - "criticality": "critical", - "rated_capacity": "80T, UPH 480pcs", - "power_rating": "18.5kW", - "description": "2차 딥드로잉 성형. 콘덴서 케이스 최종 형상.", - }, - { - "name": "완제품 프레스 #2", - "equipment_code": "SF-FIN-002", - "model": "Finish Press 80T", - "manufacturer": "SpiFox 자체설계", - "location": "2동 완제품 성형 라인 A", - "area": "완제품 성형 A", - "criticality": "critical", - "rated_capacity": "80T, UPH 480pcs", - "power_rating": "18.5kW", - "description": "2차 딥드로잉 성형.", - }, - { - "name": "완제품 프레스 #3", - "equipment_code": "SF-FIN-003", - "model": "Finish Press 80T", - "manufacturer": "SpiFox 자체설계", - "location": "2동 완제품 성형 라인 B", - "area": "완제품 성형 B", - "criticality": "critical", - "rated_capacity": "80T, UPH 480pcs", - "power_rating": "18.5kW", - }, - { - "name": "건조기 #1", - "equipment_code": "SF-DRY-001", - "model": "Hot Air Dryer 300", + "name": f"건조{i}호기", + "equipment_code": f"SF-DRB-{i:03d}", + "model": "Industrial Dryer", "manufacturer": "대한열기", - "location": "1동 건조 구역", - "area": "건조/세척", + "location": "이천공장", + "area": "건조", "criticality": "major", - "rated_capacity": "반제품 건조 300kg/batch", + "rated_capacity": "건조 300kg/batch", "power_rating": "25kW", - "description": "반제품 CUP 건조. 열풍 순환 방식.", - }, - { - "name": "탈유기 #1", - "equipment_code": "SF-DEG-001", - "model": "Degreaser SC-500", - "manufacturer": "세정산업", - "location": "2동 후공정 라인", - "area": "건조/세척", - "criticality": "major", - "rated_capacity": "500L 세척조", - "power_rating": "12kW", - "description": "성형유 제거. 초음파 탈유 방식.", - }, - { - "name": "세척기 #1", - "equipment_code": "SF-WSH-001", - "model": "Ultrasonic Washer UW-800", - "manufacturer": "세정산업", - "location": "2동 후공정 라인", - "area": "건조/세척", - "criticality": "major", - "rated_capacity": "800L 세척조", - "power_rating": "15kW", - "description": "탈유 후 초음파 세척.", - }, - { - "name": "열처리로 #1", - "equipment_code": "SF-HT-001", - "model": "Annealing Furnace AF-1200", - "manufacturer": "한국전기로", - "location": "2동 열처리 구역", - "area": "열처리", - "criticality": "critical", - "rated_capacity": "1200°C, 500kg/batch", - "power_rating": "80kW", - "description": "어닐링 열처리. 알루미늄 케이스 응력 제거.", - }, - { - "name": "머신비전 검사기 #1", - "equipment_code": "SF-VIS-001", - "model": "AI Vision Inspector V3", - "manufacturer": "SpiFox 자체개발", - "location": "2동 검사 라인", - "area": "검사/포장", - "criticality": "critical", - "rated_capacity": "검사속도 1,200pcs/min", - "power_rating": "3kW", - "description": "AI 머신러닝 기반 전수 외관검사. 치수/형상/결함 동시 검출.", - }, - { - "name": "머신비전 검사기 #2", - "equipment_code": "SF-VIS-002", - "model": "AI Vision Inspector V3", - "manufacturer": "SpiFox 자체개발", - "location": "2동 검사 라인", - "area": "검사/포장", - "criticality": "critical", - "rated_capacity": "검사속도 1,200pcs/min", - "power_rating": "3kW", - }, - { - "name": "자동포장기 #1", - "equipment_code": "SF-PKG-001", - "model": "Auto Packer AP-200", - "manufacturer": "포장기계", - "location": "2동 포장 구역", - "area": "검사/포장", - "criticality": "minor", - "rated_capacity": "200box/h", - "power_rating": "5kW", - }, - { - "name": "구름다리 컨베이어", - "equipment_code": "SF-CVY-001", - "model": "Overbridge Conveyor OB-50", - "manufacturer": "물류자동화", - "location": "1동-2동 연결", - "area": "물류/반송", - "criticality": "major", - "rated_capacity": "반제품 이송 50m", - "power_rating": "7.5kW", - "description": "1동(반제품)→2동(완제품) 반제품 및 빈 통 이송.", - }, - { - "name": "AMR #1", - "equipment_code": "SF-AMR-001", - "model": "자율주행로봇 AGV-300", - "manufacturer": "로봇솔루션", - "location": "2동 물류 구역", - "area": "물류/반송", - "criticality": "minor", - "rated_capacity": "적재 300kg", - "power_rating": "배터리 48V", - "description": "완제품 자동 반송. 성형→후공정→포장 경로.", - }, - ], + } + ) + +# ── EMS 6대 ── +for i in range(1, 7): + m = { + "name": f"EMS {i}호기", + "equipment_code": f"SF-EMS-{i:03d}", + "model": "Electrified Monorail System", + "manufacturer": "물류자동화", + "location": "이천공장", + "area": "EMS", + "criticality": "major", + "rated_capacity": "천장주행 모노레일", + "power_rating": "5.5kW", + } + if i == 1: + m["description"] = "반제품 공정 간 천장주행 이송 시스템(EMS)." + SPIFOX_MACHINES.append(m) + +# ── 크레인 2대 ── +SPIFOX_MACHINES.append( + { + "name": "CUP공급크레인", + "equipment_code": "SF-CRN-001", + "model": "Auto Warehouse Crane", + "manufacturer": "물류자동화", + "location": "이천공장", + "area": "크레인", + "criticality": "major", + "rated_capacity": "자동창고 스태커 크레인", + "power_rating": "11kW", + "description": "CUP 반제품 자동창고 입고 크레인.", + } +) +SPIFOX_MACHINES.append( + { + "name": "CUP출고크레인", + "equipment_code": "SF-CRN-002", + "model": "Auto Warehouse Crane", + "manufacturer": "물류자동화", + "location": "이천공장", + "area": "크레인", + "criticality": "major", + "rated_capacity": "자동창고 스태커 크레인", + "power_rating": "11kW", + "description": "CUP 반제품 자동창고 출고 크레인.", + } +) + +assert len(SPIFOX_MACHINES) == 304, ( + f"Expected 304 spifox machines, got {len(SPIFOX_MACHINES)}" +) + +MACHINES = { + "spifox": SPIFOX_MACHINES, "enkid": [ { "name": "CNC 선반 #1", @@ -317,7 +316,7 @@ MACHINES = { # 부품: (name, part_number, category, lifecycle_type, lifecycle_limit, alarm_threshold, counter_source, current_value) PARTS = { "spifox": { - "반제품 프레스 #1": [ + "CUP프레스 1호기": [ ( "컷트핀 (Cut Pin)", "CP-CUP-01", @@ -338,42 +337,18 @@ PARTS = { "manual", 165000, ), - ("스트리퍼", "ST-CUP-01", "금형", "count", 300000, 80, "manual", 210000), - ], - "반제품 프레스 #2": [ - ( - "컷트핀 (Cut Pin)", - "CP-CUP-02", - "금형", - "count", - 150000, - 80, - "manual", - 95000, - ), - ( - "컷트메스 (Cut Die)", - "CD-CUP-02", - "금형", - "count", - 200000, - 85, - "manual", - 120000, - ), - ("스트리퍼", "ST-CUP-02", "금형", "count", 300000, 80, "manual", 180000), - ], - "완제품 프레스 #1": [ ( "정형메스 (Forming Die)", - "FD-FIN-01", + "FD-CUP-01", "금형", "count", - 100000, + 300000, 80, "manual", - 87000, + 210000, ), + ], + "CASE프레스 P-101": [ ( "컷트핀 (Cut Pin)", "CP-FIN-01", @@ -384,20 +359,28 @@ PARTS = { "manual", 98000, ), - ("펀치", "PH-FIN-01", "금형", "count", 250000, 85, "manual", 175000), - ("성형유 필터", "OF-FIN-01", "소모품", "hours", 720, 80, "auto_time", 580), - ], - "완제품 프레스 #2": [ + ( + "컷트메스 (Cut Die)", + "CD-FIN-01", + "금형", + "count", + 150000, + 85, + "manual", + 112000, + ), ( "정형메스 (Forming Die)", - "FD-FIN-02", + "FD-FIN-01", "금형", "count", 100000, 80, "manual", - 62000, + 87000, ), + ], + "CASE프레스 P-102": [ ( "컷트핀 (Cut Pin)", "CP-FIN-02", @@ -408,19 +391,28 @@ PARTS = { "manual", 73000, ), - ("펀치", "PH-FIN-02", "금형", "count", 250000, 85, "manual", 140000), - ], - "완제품 프레스 #3": [ + ( + "컷트메스 (Cut Die)", + "CD-FIN-02", + "금형", + "count", + 150000, + 85, + "manual", + 95000, + ), ( "정형메스 (Forming Die)", - "FD-FIN-03", + "FD-FIN-02", "금형", "count", 100000, 80, "manual", - 45000, + 62000, ), + ], + "CASE프레스 P-103": [ ( "컷트핀 (Cut Pin)", "CP-FIN-03", @@ -431,9 +423,28 @@ PARTS = { "manual", 52000, ), - ("펀치", "PH-FIN-03", "금형", "count", 250000, 85, "manual", 95000), + ( + "컷트메스 (Cut Die)", + "CD-FIN-03", + "금형", + "count", + 150000, + 85, + "manual", + 68000, + ), + ( + "정형메스 (Forming Die)", + "FD-FIN-03", + "금형", + "count", + 100000, + 80, + "manual", + 45000, + ), ], - "건조기 #1": [ + "CUP건조설비 1호기": [ ( "히터 엘리먼트", "HE-DRY-01", @@ -455,34 +466,6 @@ PARTS = { 11000, ), ], - "열처리로 #1": [ - ("발열체", "HT-HT-01", "핵심부품", "hours", 10000, 80, "auto_time", 7200), - ( - "온도 센서 (TC)", - "TC-HT-01", - "계측", - "hours", - 5000, - 90, - "auto_time", - 4200, - ), - ("단열재", "IN-HT-01", "소모품", "hours", 20000, 85, "auto_time", 14000), - ], - "머신비전 검사기 #1": [ - ( - "카메라 모듈", - "CM-VIS-01", - "핵심부품", - "hours", - 20000, - 85, - "auto_time", - 8500, - ), - ("조명 LED", "LD-VIS-01", "소모품", "hours", 10000, 80, "auto_time", 7800), - ("교정 인증서", "CAL-VIS-01", "인증", "date", 365, 80, "manual", 0), - ], }, "enkid": { "CNC 선반 #1": [ @@ -651,9 +634,9 @@ PARTS = { TEMPLATES = { "spifox": [ { - "name": "프레스 일일 점검", + "name": "CASE프레스 일일 점검", "subject_type": "equipment", - "machine_name": "완제품 프레스 #1", + "machine_name": "CASE프레스 P-101", "schedule_type": "daily", "inspection_mode": "checklist", "items": [ @@ -716,9 +699,9 @@ TEMPLATES = { ], }, { - "name": "반제품 프레스 일일 점검", + "name": "CUP프레스 일일 점검", "subject_type": "equipment", - "machine_name": "반제품 프레스 #1", + "machine_name": "CUP프레스 1호기", "schedule_type": "daily", "inspection_mode": "checklist", "items": [ @@ -760,46 +743,6 @@ TEMPLATES = { }, ], }, - { - "name": "열처리로 일일 점검", - "subject_type": "equipment", - "machine_name": "열처리로 #1", - "schedule_type": "daily", - "inspection_mode": "checklist", - "items": [ - { - "name": "노내 온도", - "category": "온도", - "data_type": "numeric", - "unit": "°C", - "spec_min": 350, - "spec_max": 420, - "warning_min": 360, - "warning_max": 410, - }, - { - "name": "온도 균일도 (편차)", - "category": "온도", - "data_type": "numeric", - "unit": "°C", - "spec_min": 0, - "spec_max": 10, - "warning_max": 7, - }, - { - "name": "배기 팬 작동 정상", - "category": "기계", - "data_type": "boolean", - }, - {"name": "도어 씰 상태", "category": "기계", "data_type": "boolean"}, - { - "name": "가스 분위기", - "category": "분위기", - "data_type": "select", - "select_options": ["정상", "불안정", "이상"], - }, - ], - }, { "name": "콘덴서 케이스 치수검사", "subject_type": "product",