- 실제 볼트 사이즈 추출: 설명의 첫 번째 숫자를 실제 볼트 직경으로 사용
- 분수 표기 변환: 0.625 → 5/8, 0.75 → 3/4 등 현장 친화적 표기
- 특수 용도 볼트 분류: PSV(압력안전밸브), LT(저온용), CK(체크밸브), ORI(오리피스)
- 표면처리 정보 추출: ELEC.GALV, HOT DIP GALV 등 코팅 정보
- 복합 재질 규격 파싱: ASTM A193/A194 GR B7/2H 정확 분류
- 특수 용도별 색상 구분: PSV 빨강, LT 주황, CK 파랑, ORI 보라
- 프론트엔드 표시 개선: 분수 사이즈, 특수 용도 현황 별도 섹션
- inch 기호 제거: 깔끔한 분수 표시로 현장 가독성 향상
🔧 백엔드 수정:
- 이전 리비전 탐지 로직을 문자열에서 숫자 기반으로 개선 (Rev.1에서 Rev.0 정상 탐지)
- get_materials_by_hash 함수 필드명 수정 및 단순화
- 자재 비교 API 응답 구조 개선
🎨 프론트엔드 UI 대폭 개선:
- MaterialComparisonPage를 MaterialsPage와 동일한 깔끔한 디자인으로 리뉴얼
- 요약 통계 카드 4개 추가 (신규/변경/삭제/총 자재)
- 탭으로 구분된 자재 목록 (신규/변경/삭제)
- 테이블 형태로 비교 결과 표시 (이전수량 → 현재수량 → 변경량)
- 색상별 카테고리 Chip과 변경량 강조 표시
🔄 네비게이션 개선:
- MaterialComparisonPage 돌아가기 버튼을 BOM 상태 페이지로 수정
- RevisionPurchasePage 버튼 텍스트를 'BOM 목록으로'로 명확화
- 모든 비교 관련 페이지의 네비게이션 일관성 확보
🐛 버그 수정:
- BOMStatusPage 리비전 업로드 시 불필요한 파라미터 제거 (네트워크 에러 해결)
- API 응답 데이터 처리 로직 개선 (result.data 처리)
- 에러 핸들링 및 디버깅 로그 강화
✅ 완전 작동하는 리비전 비교 시스템 완성
- 자재 리비전간 비교 기능 추가 (MaterialComparisonPage) - 버그 해결 필요
- 리비전간 추가 구매 필요 자재 분석 페이지 추가 (RevisionPurchasePage)
- 자재 비교 결과 컴포넌트 구현 (MaterialComparisonResult)
- 자재 비교 API 라우터 추가 (material_comparison.py) - 로직 개선 필요
- 자재 비교 시스템 데이터베이스 스키마 추가
- FileManager, FileUpload 컴포넌트 개선
- BOMManagerPage 제거 및 새로운 구조로 리팩토링
- 자재 분류기 및 스키마 개선
TODO: 자재 비교 알고리즘 정확도 향상 및 예외 처리 강화 필요
🔧 라우팅 문제 수정:
- ProjectSelectionPage에서 /bom → /bom-status로 경로 수정
- 'No routes matched location' 오류 해결
🔧 BOMStatusPage API 개선:
- fetchFiles, deleteFile API 함수 사용 (하드코딩된 fetch 제거)
- 디버깅용 console.log 추가
- jobNo 유효성 검사 강화
📝 백업 커밋:
- 안정적인 상태로 복원을 위한 백업용 커밋
🧮 구매 수량 계산 로직:
- PIPE: 절단 손실(3mm/절단) + 6M 단위 올림 계산
- 일반 자재: 여유율 + 최소 주문 수량 적용
- 자재별 차별화된 여유율 (VALVE 50%, BOLT 20% 등)
🛒 구매 관리 API:
- /purchase/items/calculate: 실시간 구매 수량 계산
- /purchase/items/save: 구매 품목 DB 저장
- /purchase/revision-diff: 리비전간 차이 계산
- /purchase/orders/create: 구매 주문 생성
🧪 테스트 검증:
- PIPE 절단 손실 계산: 25,000mm → 5본 (정확)
- 여유율 적용: VALVE 2개 → 3개 (50% 예비)
- 최소 주문: BOLT 24개 → 50개 (박스 단위)
📱 프론트엔드:
- PurchaseConfirmationPage 라우팅 추가
- 구매확정 버튼 → 구매 페이지 이동
✅ 밸브 분류 시스템:
- VALVE 상세 정보 저장 로직 추가 (backend/app/routers/files.py)
- 프론트엔드 밸브 사양서 표시 로직 추가 (MaterialsPage.jsx)
- 밸브 분류기 테스트 스크립트 및 데이터 (test_valve_classifier.py, test_valve_bom.csv)
🛒 구매 관리 시스템:
- 구매 관리 테이블 스키마 (08_create_purchase_tables.sql)
- 구매확정 페이지 컴포넌트 (PurchaseConfirmationPage.jsx)
- MaterialsPage에 구매확정 버튼 추가
🎯 주요 기능:
- 밸브 타입, 연결방식, 압력등급, 재질 분류
- 구매 품목 마스터, 주문 관리, 리비전 추적
- 파이프 절단손실 및 6M 단위 계산 준비
- 볼트 길이 추출 로직 개선: '70.0000 LG' 형태 인식 추가
- 재질 중복 표시 수정: 'ASTM A193 ASTM A193 B7' → 'B7'
- A193/A194 등급 추출 로직 개선: 'GR B7/2H' 형태 지원
- bolt_details 테이블에 pressure_rating 컬럼 추가
- 볼트 분류기 오분류 방지: 플랜지/피팅이 볼트로 분류되지 않도록 수정
- 업로드 성능 개선: 키워드 기반 빠른 분류기 선택 로직 추가
- 분류 키워드 대폭 확장: 피팅/파이프/플랜지 키워드 추가
🔧 주요 개선사항:
- EXCLUDE 분류기 추가 (WELD GAP 등 제외 대상 처리)
- FITTING 분류기 키워드 확장 (ELL, RED 추가)
- PIPE 재질 중복 문제 해결 (material_grade 파싱 개선)
- NIPPLE 특별 처리 추가 (스케줄 + 길이 정보 포함)
- OLET 타입 중복 표시 제거
📊 분류 정확도:
- UNKNOWN: 0개 (100% 분류 성공)
- EXCLUDE: 1,014개 (제외 대상)
- 실제 자재: 1,823개 정확 분류
🎯 해결된 문제:
- PIPE 재질 'ASTM A106 ASTM A106' → 'ASTM A106 GR B'
- WELD GAP 오분류 → EXCLUDE 카테고리
- FITTING 키워드 인식 실패 → ELL, RED 키워드 추가
- 프론트엔드 중복 표시 제거
- 자재 확인 페이지에 뒤로가기 버튼 추가
- 상세 목록 탭에 PIPE 분석 섹션 추가
- 재질-외경-스케줄-제작방식별로 그룹화
- 동일 속성 파이프들의 길이 합산 표시
- 총 파이프 길이 및 규격 종류 수 요약
- 파일 삭제 기능 수정 (외래키 제약 조건 해결)
- MaterialsPage에서 전체 자재 목록 표시 (limit 10000)
- 길이 단위 변환 로직 수정 (mm 단위 유지)
- 파싱 로직에 디버그 출력 추가
TODO: MAIN_NOM/RED_NOM 별도 저장을 위한 스키마 개선 필요
- 모든 자재 카테고리별 상세 테이블 생성 (fitting, valve, flange, bolt, gasket, instrument)
- PIPE, FITTING, VALVE 분류 결과를 각 상세 테이블에 저장하는 로직 구현
- 프론트엔드 라우팅 정리 및 BOM 현황 페이지 기능 개선
- 자재확인 페이지 에러 처리 개선
TODO: FLANGE, BOLT, GASKET, INSTRUMENT 저장 로직 추가 필요
- Docker Compose 개발 환경 설정 (PostgreSQL, pgAdmin, Redis)
- 데이터베이스 스키마 초기 설계 (projects, files, materials 테이블)
- Python requirements.txt 작성 (FastAPI, SQLAlchemy, Pandas 등)
- .gitignore 설정 완료 (Python, Docker, 개발 도구 제외 파일)
- README.md 작성 (프로젝트 개요, 기술 스택, 개발 로드맵)
- Phase 1 기반 시스템 구축 준비 완료