From f1e1fb64753f0cd52ecf39c49abca44500dd7a4e Mon Sep 17 00:00:00 2001 From: hyungi Date: Thu, 16 Oct 2025 06:52:38 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20=ED=94=BC=ED=8C=85=20=EB=B6=84?= =?UTF-8?q?=EB=A5=98=20=EB=B0=8F=20=ED=91=9C=EC=8B=9C=20=EA=B0=9C=EC=84=A0?= =?UTF-8?q?=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ 주요 개선사항: • 엘보 90도/45도 각도 표시 개선 (ELBOW 90° LR BW 형태) • RL/SL (Long/Short Radius) 표시 추가 • 엘보 서브타입 분류 로직 강화 (90DEG_LONG_RADIUS, 90DEG_SHORT_RADIUS) • REDUCING FLANGE 분류 개선 (RED 키워드 제거로 피팅 오분류 방지) • 구매신청 엑셀 중복 생성 문제 해결 🎯 분류기 개선: • fitting_classifier.py: 엘보 조합 키워드 우선 확인 로직 추가 • integrated_classifier.py: FITTING 키워드에서 RED 제거 • NewMaterialsPage.jsx: 엘보 상세 표시 로직 개선 📊 테스트 완료: • 엘보 각도 및 반경 정보 정확 표시 • REDUCING FLANGE → FLANGE 분류 확인 • 구매신청 엑셀 단일 생성 확인 --- backend/app/services/fitting_classifier.py | 63 +- backend/app/services/integrated_classifier.py | 2 +- backend/exports/PR-20251015-003.json | 1836 +++++++++++++++++ backend/exports/PR-20251015-003.xlsx | Bin 0 -> 9813 bytes frontend/src/App.jsx | 3 +- frontend/src/pages/NewMaterialsPage.jsx | 46 +- 6 files changed, 1933 insertions(+), 17 deletions(-) create mode 100644 backend/exports/PR-20251015-003.json create mode 100644 backend/exports/PR-20251015-003.xlsx diff --git a/backend/app/services/fitting_classifier.py b/backend/app/services/fitting_classifier.py index 6e75112..7c0a04d 100644 --- a/backend/app/services/fitting_classifier.py +++ b/backend/app/services/fitting_classifier.py @@ -513,18 +513,77 @@ def classify_fitting_subtype(fitting_type: str, description: str, main_nom: str, red_nom: str, type_data: Dict) -> Dict: """피팅 서브타입 분류""" + desc_upper = description.upper() subtypes = type_data.get("subtypes", {}) - # 1. 키워드 기반 서브타입 분류 (우선) + # 1. 키워드 기반 서브타입 분류 (우선) - 대소문자 구분 없이 for subtype, keywords in subtypes.items(): for keyword in keywords: - if keyword in description: + if keyword.upper() in desc_upper: return { "subtype": subtype, "confidence": 0.9, "evidence": [f"SUBTYPE_KEYWORD: {keyword}"] } + # 1.5. ELBOW 특별 처리 - 조합 키워드 우선 확인 + if fitting_type == "ELBOW": + # 90도 + 반경 조합 + if ("90" in desc_upper or "90°" in desc_upper or "90DEG" in desc_upper): + if ("LR" in desc_upper or "LONG RADIUS" in desc_upper or "장반경" in desc_upper): + return { + "subtype": "90DEG_LONG_RADIUS", + "confidence": 0.95, + "evidence": ["90DEG + LONG_RADIUS"] + } + elif ("SR" in desc_upper or "SHORT RADIUS" in desc_upper or "단반경" in desc_upper): + return { + "subtype": "90DEG_SHORT_RADIUS", + "confidence": 0.95, + "evidence": ["90DEG + SHORT_RADIUS"] + } + else: + return { + "subtype": "90DEG", + "confidence": 0.85, + "evidence": ["90DEG_DETECTED"] + } + + # 45도 + 반경 조합 + elif ("45" in desc_upper or "45°" in desc_upper or "45DEG" in desc_upper): + if ("LR" in desc_upper or "LONG RADIUS" in desc_upper or "장반경" in desc_upper): + return { + "subtype": "45DEG_LONG_RADIUS", + "confidence": 0.95, + "evidence": ["45DEG + LONG_RADIUS"] + } + elif ("SR" in desc_upper or "SHORT RADIUS" in desc_upper or "단반경" in desc_upper): + return { + "subtype": "45DEG_SHORT_RADIUS", + "confidence": 0.95, + "evidence": ["45DEG + SHORT_RADIUS"] + } + else: + return { + "subtype": "45DEG", + "confidence": 0.85, + "evidence": ["45DEG_DETECTED"] + } + + # 반경만 있는 경우 (기본 90도 가정) + elif ("LR" in desc_upper or "LONG RADIUS" in desc_upper or "장반경" in desc_upper): + return { + "subtype": "90DEG_LONG_RADIUS", + "confidence": 0.8, + "evidence": ["LONG_RADIUS_DEFAULT_90DEG"] + } + elif ("SR" in desc_upper or "SHORT RADIUS" in desc_upper or "단반경" in desc_upper): + return { + "subtype": "90DEG_SHORT_RADIUS", + "confidence": 0.8, + "evidence": ["SHORT_RADIUS_DEFAULT_90DEG"] + } + # 2. 사이즈 분석이 필요한 경우 (TEE, REDUCER 등) if type_data.get("size_analysis"): if red_nom and str(red_nom).strip() and red_nom != main_nom: diff --git a/backend/app/services/integrated_classifier.py b/backend/app/services/integrated_classifier.py index 6c9ce44..d3f9559 100644 --- a/backend/app/services/integrated_classifier.py +++ b/backend/app/services/integrated_classifier.py @@ -13,7 +13,7 @@ LEVEL1_TYPE_KEYWORDS = { "VALVE": ["VALVE", "GATE", "BALL", "GLOBE", "CHECK", "BUTTERFLY", "NEEDLE", "RELIEF", "밸브", "게이트", "볼", "글로브", "체크", "버터플라이", "니들", "릴리프"], "FLANGE": ["FLG", "FLANGE", "플랜지", "프랜지", "ORIFICE", "SPECTACLE", "PADDLE", "SPACER", "BLIND", "REDUCING FLANGE", "RED FLANGE"], "PIPE": ["PIPE", "TUBE", "파이프", "배관", "SMLS", "SEAMLESS"], - "FITTING": ["SOCK-O-LET", "WELD-O-LET", "ELL-O-LET", "THREAD-O-LET", "ELB-O-LET", "NIP-O-LET", "COUP-O-LET", "SOCKOLET", "WELDOLET", "ELLOLET", "THREADOLET", "ELBOLET", "NIPOLET", "COUPOLET", "OLET", "ELBOW", "ELL", "TEE", "REDUCER", "RED", "CAP", "COUPLING", "NIPPLE", "SWAGE", "PLUG", "엘보", "티", "리듀서", "캡", "니플", "커플링", "플러그", "CONC", "ECC"], + "FITTING": ["SOCK-O-LET", "WELD-O-LET", "ELL-O-LET", "THREAD-O-LET", "ELB-O-LET", "NIP-O-LET", "COUP-O-LET", "SOCKOLET", "WELDOLET", "ELLOLET", "THREADOLET", "ELBOLET", "NIPOLET", "COUPOLET", "OLET", "ELBOW", "ELL", "TEE", "REDUCER", "CAP", "COUPLING", "NIPPLE", "SWAGE", "PLUG", "엘보", "티", "리듀서", "캡", "니플", "커플링", "플러그", "CONC", "ECC"], "GASKET": ["GASKET", "GASK", "가스켓", "SWG", "SPIRAL"], "INSTRUMENT": ["GAUGE", "TRANSMITTER", "SENSOR", "THERMOMETER", "계기", "게이지", "트랜스미터", "센서"], "SUPPORT": ["URETHANE BLOCK", "URETHANE", "BLOCK SHOE", "CLAMP", "SUPPORT", "HANGER", "SPRING", "우레탄", "블록", "클램프", "서포트", "행거", "스프링"] diff --git a/backend/exports/PR-20251015-003.json b/backend/exports/PR-20251015-003.json new file mode 100644 index 0000000..2e5e650 --- /dev/null +++ b/backend/exports/PR-20251015-003.json @@ -0,0 +1,1836 @@ +{ + "request_no": "PR-20251015-003", + "job_no": "1", + "created_at": "2025-10-15T21:37:31.463223", + "materials": [ + { + "material_id": 93339, + "description": "HALF NIPPLE, SMLS, SCH 80S, ASTM A312 TP304 SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A312 TP304", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93341, + "description": "HALF NIPPLE, SMLS, SCH 80S, ASTM A312 TP304 SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A312 TP304", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93481, + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW * NPT", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A106 B", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93630, + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93634, + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93637, + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93639, + "description": "NIPPLE, SMLS, SCH 160, ASTM A106 B", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93950, + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "10\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93951, + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 25, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93976, + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93982, + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A234 WPB", + "quantity": 12, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93994, + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A403 WP304", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 93998, + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94005, + "description": "90 SR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94006, + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "6\"", + "material_grade": "ASTM A234 WPB", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94013, + "description": "45 ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "6\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94015, + "description": "TEE, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94019, + "description": "TEE, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94020, + "description": "TEE, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94021, + "description": "TEE, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94022, + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94025, + "description": "TEE RED, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94027, + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94030, + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "4\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94032, + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1 1/2\" x 1\"", + "material_grade": "ASTM A234 WPB", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94037, + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94039, + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94044, + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "12\" x 10\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94045, + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94051, + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94052, + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94053, + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94055, + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\" x 1\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94056, + "description": "RED CONC, SMLS, SCH 40 X SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94057, + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\" x 2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94058, + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3/4\" x 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94235, + "description": "RED. FLG SWRF SCH 40S, 150LB, ASTM A182 F304", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94237, + "description": "RED. FLG SWRF SCH 80, 150LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94241, + "description": "RED. FLG SWRF SCH 80, 600LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94319, + "description": "RED. FLG SWRF SCH 80, 150LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94935, + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94937, + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 57, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94941, + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94945, + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 32, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 94977, + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95044, + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 32, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95076, + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 24, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95100, + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95107, + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 15, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95122, + "description": "TEE, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95123, + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95125, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95130, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95132, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95138, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95145, + "description": "TEE RED, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\" x 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95148, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95154, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95158, + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95163, + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95164, + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95165, + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95166, + "description": "CAP, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95167, + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95169, + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95170, + "description": "CAP, SMLS, SCH 40, BW, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95171, + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95172, + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 36, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95208, + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95225, + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 1 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95226, + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95227, + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95228, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95230, + "description": "ELL O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95231, + "description": "ELL O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95232, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95241, + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95244, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95245, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "4\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95246, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "6\" x 1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "material_id": 95248, + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "6\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + } + ], + "grouped_materials": [ + { + "group_key": "HALF NIPPLE, SMLS, SCH 80S, ASTM A312 TP304 SW X NPT|1/2\"|undefined|ASTM A312 TP304", + "material_ids": [ + 93339, + 93341 + ], + "description": "HALF NIPPLE, SMLS, SCH 80S, ASTM A312 TP304 SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A312 TP304", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW * NPT|1\"|undefined|ASTM A106 B", + "material_ids": [ + 93481 + ], + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW * NPT", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A106 B", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW X NPT|1/2\"|undefined|ASTM A106 B", + "material_ids": [ + 93630, + 93634, + 93637 + ], + "description": "HALF NIPPLE, SMLS, SCH 160, ASTM A106 B SW X NPT", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "NIPPLE, SMLS, SCH 160, ASTM A106 B|1/2\"|undefined|ASTM A106 B", + "material_ids": [ + 93639 + ], + "description": "NIPPLE, SMLS, SCH 160, ASTM A106 B", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A106 B", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304|10\"|undefined|ASTM A403 WP304", + "material_ids": [ + 93950 + ], + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "10\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB|2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 93951 + ], + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 25, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304|2\"|undefined|ASTM A403 WP304", + "material_ids": [ + 93976 + ], + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB|3\"|undefined|ASTM A234 WPB", + "material_ids": [ + 93982 + ], + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A234 WPB", + "quantity": 12, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304|3\"|undefined|ASTM A403 WP304", + "material_ids": [ + 93994 + ], + "description": "90 LR ELL, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A403 WP304", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB|4\"|undefined|ASTM A234 WPB", + "material_ids": [ + 93998 + ], + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 SR ELL, SMLS, SCH 40, ASTM A234 WPB|4\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94005 + ], + "description": "90 SR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB|6\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94006 + ], + "description": "90 LR ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "6\"", + "material_grade": "ASTM A234 WPB", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "45 ELL, SMLS, SCH 40, ASTM A234 WPB|6\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94013 + ], + "description": "45 ELL, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "6\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SMLS, SCH 40, ASTM A234 WPB|2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94015 + ], + "description": "TEE, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SMLS, SCH 40S, ASTM A403 WP304|2\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94019 + ], + "description": "TEE, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SMLS, SCH 40, ASTM A234 WPB|3\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94020 + ], + "description": "TEE, SMLS, SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SMLS, SCH 40S, ASTM A403 WP304|3\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94021 + ], + "description": "TEE, SMLS, SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|2\" x 1 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94022 + ], + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304|2\" x 1 1/2\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94025 + ], + "description": "TEE RED, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|3\" x 1 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94027 + ], + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|4\" x 1 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94030 + ], + "description": "TEE RED, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "4\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB|1 1/2\" x 1\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94032 + ], + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1 1/2\" x 1\"", + "material_grade": "ASTM A234 WPB", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB|1 1/2\" x 3/4\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94037 + ], + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB|1\" x 3/4\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94039 + ], + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A234 WPB", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304|12\" x 10\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94044 + ], + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "12\" x 10\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|2\" x 1 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94045 + ], + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304|2\" x 1 1/2\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94051 + ], + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "2\" x 1 1/2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|2\" x 1\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94052 + ], + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "2\" x 1\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB|3\" x 1 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94053 + ], + "description": "RED CONC, SMLS, SCH 40 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 1 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304|3\" x 1\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94055 + ], + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\" x 1\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40 X SCH 40, ASTM A234 WPB|3\" x 2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94056 + ], + "description": "RED CONC, SMLS, SCH 40 X SCH 40, ASTM A234 WPB", + "category": "FITTING", + "size": "3\" x 2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304|3\" x 2\"|undefined|ASTM A403 WP304", + "material_ids": [ + 94057 + ], + "description": "RED CONC, SMLS, SCH 40S X SCH 40S, ASTM A403 WP304", + "category": "FITTING", + "size": "3\" x 2\"", + "material_grade": "ASTM A403 WP304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB|3/4\" x 1/2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 94058 + ], + "description": "RED CONC, SMLS, SCH 80 X SCH 80, ASTM A234 WPB", + "category": "FITTING", + "size": "3/4\" x 1/2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED. FLG SWRF SCH 40S, 150LB, ASTM A182 F304|1 1/2\" x 3/4\"|undefined|ASTM A182 F304", + "material_ids": [ + 94235 + ], + "description": "RED. FLG SWRF SCH 40S, 150LB, ASTM A182 F304", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED. FLG SWRF SCH 80, 150LB, ASTM A105|1 1/2\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 94237 + ], + "description": "RED. FLG SWRF SCH 80, 150LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED. FLG SWRF SCH 80, 600LB, ASTM A105|1 1/2\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 94241 + ], + "description": "RED. FLG SWRF SCH 80, 600LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "RED. FLG SWRF SCH 80, 150LB, ASTM A105|1\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 94319 + ], + "description": "RED. FLG SWRF SCH 80, 150LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A182 F304|1/2\"|undefined|ASTM A182 F304", + "material_ids": [ + 94935 + ], + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A105|1\"|undefined|ASTM A105", + "material_ids": [ + 94937 + ], + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 57, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A182 F304|1\"|undefined|ASTM A182 F304", + "material_ids": [ + 94941 + ], + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A105|1 1/2\"|undefined|ASTM A105", + "material_ids": [ + 94945 + ], + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 32, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A182 F304|1 1/2\"|undefined|ASTM A182 F304", + "material_ids": [ + 94977 + ], + "description": "90 ELL, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A105|1/2\"|undefined|ASTM A105", + "material_ids": [ + 95044 + ], + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 32, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "90 ELL, SW, 3000LB, ASTM A105|3/4\"|undefined|ASTM A105", + "material_ids": [ + 95076 + ], + "description": "90 ELL, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 24, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SW, 3000LB, ASTM A105|1 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95100 + ], + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SW, 3000LB, ASTM A105|1\"|undefined|ASTM A105", + "material_ids": [ + 95107 + ], + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 15, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SW, 3000LB, ASTM A182 F304|1\"|undefined|ASTM A182 F304", + "material_ids": [ + 95122 + ], + "description": "TEE, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE, SW, 3000LB, ASTM A105|1/2\"|undefined|ASTM A105", + "material_ids": [ + 95123 + ], + "description": "TEE, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|1 1/2\" x 1\"|undefined|ASTM A105", + "material_ids": [ + 95125 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|1 1/2\" x 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95130 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|1 1/2\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95132 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|1\" x 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95138 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 7, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A182 F304|1\" x 1/2\"|undefined|ASTM A182 F304", + "material_ids": [ + 95145 + ], + "description": "TEE RED, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\" x 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 6, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|1\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95148 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|2\" x 1\"|undefined|ASTM A105", + "material_ids": [ + 95154 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 4, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "TEE RED, SW, 3000LB, ASTM A105|3/4\" x 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95158 + ], + "description": "TEE RED, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 5, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "CAP, SW, 3000LB, ASTM A105|1 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95163 + ], + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105|1 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95164 + ], + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "CAP, SW, 3000LB, ASTM A105|1\"|undefined|ASTM A105", + "material_ids": [ + 95165 + ], + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "CAP, SW, 3000LB, ASTM A182 F304|1\"|undefined|ASTM A182 F304", + "material_ids": [ + 95166 + ], + "description": "CAP, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105|1/2\"|undefined|ASTM A105", + "material_ids": [ + 95167 + ], + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304|1/2\"|undefined|ASTM A182 F304", + "material_ids": [ + 95169 + ], + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "CAP, SMLS, SCH 40, BW, ASTM A234 WPB|2\"|undefined|ASTM A234 WPB", + "material_ids": [ + 95170 + ], + "description": "CAP, SMLS, SCH 40, BW, ASTM A234 WPB", + "category": "FITTING", + "size": "2\"", + "material_grade": "ASTM A234 WPB", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "CAP, SW, 3000LB, ASTM A105|3/4\"|undefined|ASTM A105", + "material_ids": [ + 95171 + ], + "description": "CAP, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105|3/4\"|undefined|ASTM A105", + "material_ids": [ + 95172 + ], + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A105", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A105", + "quantity": 36, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304|3/4\"|undefined|ASTM A182 F304", + "material_ids": [ + 95208 + ], + "description": "SOLID HEX. PLUG, NPT(M), 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A182 F304|10\" x 1 1/2\"|undefined|ASTM A182 F304", + "material_ids": [ + 95225 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 1 1/2\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A182 F304|10\" x 1\"|undefined|ASTM A182 F304", + "material_ids": [ + 95226 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 1\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A182 F304|10\" x 3/4\"|undefined|ASTM A182 F304", + "material_ids": [ + 95227 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "10\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|2\" x 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95228 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "ELL O LET, SW, 3000LB, ASTM A105|2\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95230 + ], + "description": "ELL O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "2\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "ELL O LET, SW, 3000LB, ASTM A105|3\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95231 + ], + "description": "ELL O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|3\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95232 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 9, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A182 F304|3\" x 3/4\"|undefined|ASTM A182 F304", + "material_ids": [ + 95241 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A182 F304", + "category": "FITTING", + "size": "3\" x 3/4\"", + "material_grade": "ASTM A182 F304", + "quantity": 3, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|3\" x 1\"|undefined|ASTM A105", + "material_ids": [ + 95244 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "3\" x 1\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|4\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95245 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "4\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|6\" x 1 1/2\"|undefined|ASTM A105", + "material_ids": [ + 95246 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "6\" x 1 1/2\"", + "material_grade": "ASTM A105", + "quantity": 2, + "unit": "EA", + "user_requirement": "" + }, + { + "group_key": "SOCK O LET, SW, 3000LB, ASTM A105|6\" x 3/4\"|undefined|ASTM A105", + "material_ids": [ + 95248 + ], + "description": "SOCK O LET, SW, 3000LB, ASTM A105", + "category": "FITTING", + "size": "6\" x 3/4\"", + "material_grade": "ASTM A105", + "quantity": 1, + "unit": "EA", + "user_requirement": "" + } + ] +} \ No newline at end of file diff --git a/backend/exports/PR-20251015-003.xlsx b/backend/exports/PR-20251015-003.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..6cc894b12c6a605c73d90504cd395838177fe4c7 GIT binary patch literal 9813 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%0DJg8RrO2sO z$bi1a!q?|3XeCsgo=##tu)_a?@*IfMz_P95FN>to^OUM{U}usHjG^nGN`RtOB9r05 zevAHq*uhbYmpkC}z8BQlVTvMd}m&6rW4P+s{w;FNucTLDfBSkA%BhK242_mVSk+0B}6&BA5#8nt?zZs0p6d$|XW=ME$_CP)gW zS921ajE-gEqq5b+UXs$CZ+8+?$OlF|bnaEE8xtNdtfAYv!s1;4C+G<-fMf*9Hln5( zFjS{2#%*1@kuK;v+3LM1X0j_KHNsrAz%-fb4AP;tMO%$eo#`=8TFr%R)|VtJUFq5R zF&Nm(+uao@wG!#7yTYRoje#*J_f^G|^2x>neT~S1zB|S>N2$Fo5hyo0mj_!Bq!!<@ z8~>_vVa%FGVl$=0-f1@%-<}7j{GleN0w|>CU)>bEufeHD05&B6nhz%f0Z{!ZSK>^^ zkpiN;8n$#5^ZV{>*WXM>&fLb|+}0n^W^=7s+qr1mD*_M%4lY4b1FxG1AQ+^7_eMZ4 zuu>}l_JdO3N*6}rvibA@6)EZRad@0pJL5qLfr|-3Zz|cslyx?#O*WR*0#isjFz$QE zY61m@BiY6MzrC#|Uk2;{^tNDgmf$OGo_7L9EhnZ>T3a6CD1|u6D=(}MN9coZZ$FVZ z7qK|7{m?b1swa`*CYGQpn}lZEvPXbQ1Xbt`<;$RNf4Z6efO&DCc}XDPCOh**39|pL~2H>Epmh%_dJ1-`e|)M2-&E*NdPk~ zqOR59r!l+q&RA2_9-SKRh5OO-A)OI8^X1yYNKqLet2zPgx zbqsl5r#1A!p@!B5t!Vz{dhoYk7(^jR)Txm9{h&ILsM;ghs=LxeI6t(sRFv^RXJe|> zV~y~Lx`fg%p?=HWZPqDr9LYagxRPsf-_Htt56!|K;(6Q9m22X&`Ptq(ZTtg}G3iyB;w= zFE@D0h#&s(!0VtVwd~*c;b^*3FG?Hfv?OmrDiBO;W1(u3!EZfB7fE% z;u|K_x<@ioPxVNk+2DxXSN&~re7v_p5$=)`fr~k97LlH zi-6PP$>z$q#vi9i=|u0}vz>+!X~{Xwd*-SCZu`(SJWYnoZE>2(JXmXrIck~Y9`wrw z^2km7V)j>?Z}idTyy{|({u9>4)KGiPDwdpuRW_2#RNK!rp7chVX5fdc6YfIEM;%A3 zgW7ss=SAdFwXP-5PJ?IE$k^LM&vk9crmohaTIyW3?xa!Ad@p_8y7k=T-; zc#nsKI)+r!T6*>jS-yIZ+6#GRxvy4KEz?p3yd2t(95{;0`yw2SP=rF^qV^@yp9YuJ zk~@$nxB_Mw_>&{+)dES-JDHe`hzBLgcs|kRVmK-!-5f}WA%S?ojCWAokiNedtO~N@t8|=iWiY|A$Zp~oN3x!Wepo1JLj&B{_`-;A&4i^nI?YUhP2Aa7^#u+>N}FuyQfTuZ863$9KQ;%li@+}K|b z+fc{Ph{ee%&1%vIe_j_<@Ev;I{e&`zgG^?`DL&yy{0c8+=fVDx-T^=k>;&)^4wUbrRQ@)vKgXw z&h9sdJs(o}Oj;HkgPv;1!FkPC!P z3PD~4Wu}>u)QkCYNk#jUv3{_lIp#&HEOH#t_JZ$S81In$cGnd_Ss!bORu>uShO)IH z{LLk1& zApg1RpeOEN?_y@}VyN!vXy$Bi#ii0X*wrU%&-@lbnx5i>)Im?jUd3q#qh->$N-N@D=4XVc z);OUqyln8nW%fW)LfI!f_NsZUyTNJ(qjbnYZ|Nt{{tPYPsI<^%2p=Y62why5-^Y>N zmSAjf>TT9;^3Iq*Y7AfdMj$Ml4r5!k_OB zBIRVm(Q~`+zDj468tx(jZ$}%S%?{cdMK?$o*K^{#u?!*e|{Pn_)YP4DsYytr;9?2zw5kMOdrJ9d6+~l->s9`pS#F!&R_}jJ1F8Sg^4o^D)$m_KJDPtY z|Bp7_Hojfw{~CXxy*B=Ts{Zymw@c~Yb!r|UApDoYQkFvjZW$pUpaZ|cfQ}>5Uw!%? D%fAKA literal 0 HcmV?d00001 diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 6492c61..2554564 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -939,7 +939,8 @@ function App() { - )} + )} + {/* adminFeatures 조건문 닫기 */} ); diff --git a/frontend/src/pages/NewMaterialsPage.jsx b/frontend/src/pages/NewMaterialsPage.jsx index 7b7759d..4cc717c 100644 --- a/frontend/src/pages/NewMaterialsPage.jsx +++ b/frontend/src/pages/NewMaterialsPage.jsx @@ -620,10 +620,36 @@ const NewMaterialsPage = ({ displayType = nippleType; } else if (fittingType === 'ELBOW') { - // 엘보: 각도와 연결 방식 - const angle = fittingSubtype === '90DEG' ? '90°' : fittingSubtype === '45DEG' ? '45°' : ''; - const connection = description.includes('SW') ? 'SW' : description.includes('BW') ? 'BW' : ''; - displayType = `ELBOW ${angle} ${connection}`.trim(); + // 엘보: 각도, 반경, 연결 방식 상세 표시 + let elbowDetails = []; + + // 각도 정보 추출 + if (fittingSubtype.includes('90DEG') || description.includes('90') || description.includes('90°')) { + elbowDetails.push('90°'); + } else if (fittingSubtype.includes('45DEG') || description.includes('45') || description.includes('45°')) { + elbowDetails.push('45°'); + } + + // 반경 정보 추출 (Long Radius / Short Radius) + if (fittingSubtype.includes('LONG_RADIUS') || description.toUpperCase().includes('LR') || description.toUpperCase().includes('LONG RADIUS')) { + elbowDetails.push('LR'); + } else if (fittingSubtype.includes('SHORT_RADIUS') || description.toUpperCase().includes('SR') || description.toUpperCase().includes('SHORT RADIUS')) { + elbowDetails.push('SR'); + } + + // 연결 방식 + if (description.includes('SW')) { + elbowDetails.push('SW'); + } else if (description.includes('BW')) { + elbowDetails.push('BW'); + } + + // 기본값 설정 (각도가 없으면 90도로 가정) + if (!elbowDetails.some(detail => detail.includes('°'))) { + elbowDetails.unshift('90°'); + } + + displayType = `ELBOW ${elbowDetails.join(' ')}`.trim(); } else if (fittingType === 'TEE') { // 티: 타입과 연결 방식 const teeType = fittingSubtype === 'EQUAL' ? 'EQ' : fittingSubtype === 'REDUCING' ? 'RED' : ''; @@ -1493,12 +1519,8 @@ const NewMaterialsPage = ({ const timestamp = new Date().toISOString().split('T')[0]; const fileName = `${jobNo}_${selectedCategory}_${timestamp}.xlsx`; - // 기존 엑셀 내보내기 함수 사용 - await exportMaterialsToExcel( - dataWithRequirements, - fileName, - userRequirements - ); + // 엑셀 파일명 설정 + const excelFileName = fileName; // 2단계: 생성된 엑셀을 서버에 업로드 (구매신청과 함께) // 서버에 구매신청 생성 @@ -1583,7 +1605,7 @@ const NewMaterialsPage = ({ // 실패해도 엑셀은 내보내기 } - // 개선된 엑셀 내보내기 함수 사용 + // 엑셀 내보내기 (한 번만 실행) const additionalInfo = { filename: filename || bomName, jobNo: jobNo, @@ -1591,8 +1613,6 @@ const NewMaterialsPage = ({ uploadDate: new Date().toLocaleDateString() }; - const excelFileName = `${selectedCategory}_${jobNo || 'export'}_${new Date().toISOString().split('T')[0]}.xlsx`; - exportMaterialsToExcel(dataWithRequirements, excelFileName, additionalInfo); console.log('✅ 엑셀 내보내기 성공');