# ๐Ÿ—„๏ธ PIPE ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ฐ€์ด๋“œ ## ๐Ÿ“‹ ํ…Œ์ด๋ธ” ๊ฐœ์š” PIPE ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ **7๊ฐœ์˜ ์ „์šฉ ํ…Œ์ด๋ธ”**๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ”ง **1. pipe_cutting_plans** **์šฉ๋„**: PIPE Cutting Plan์˜ ๋‹จ๊ด€ ์ •๋ณด ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `job_no`: ์ž‘์—… ๋ฒˆํ˜ธ - `area`: ๊ตฌ์—ญ ์ •๋ณด (#01, #02 ๋“ฑ) - `drawing_name`: ๋„๋ฉด๋ช… (P&ID-001) - `line_no`: ๋ผ์ธ๋ฒˆํ˜ธ (LINE-A-001) - `material_grade`: ์žฌ์งˆ (A106 GR.B) - `schedule_spec`: ์Šค์ผ€์ค„ (SCH40, SCH80) - `nominal_size`: ํ˜ธ์นญ ํฌ๊ธฐ (4", 6") - `length_mm`: ๊ธธ์ด (mm ๋‹จ์œ„) - `end_preparation`: ๋๋‹จ ๊ฐ€๊ณต (๋ฌด๊ฐœ์„ , ํ•œ๊ฐœ์„ , ์–‘๊ฐœ์„ ) ### **์‚ฌ์šฉ ์‹œ์ ** - Cutting Plan ์ž‘์„ฑ ์‹œ ๋‹จ๊ด€ ์ •๋ณด ์ €์žฅ - ๊ตฌ์—ญ๋ณ„ ๋„๋ฉด ํ• ๋‹น ์™„๋ฃŒ ํ›„ - ๋ผ์ธ๋ฒˆํ˜ธ ์ž…๋ ฅ ์™„๋ฃŒ ํ›„ --- ## ๐Ÿ”„ **2. pipe_revision_comparisons** **์šฉ๋„**: PIPE ๋ฆฌ๋น„์ „ ๋น„๊ต ๊ฒฐ๊ณผ ๋ฐ ํ†ต๊ณ„ ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `job_no`: ์ž‘์—… ๋ฒˆํ˜ธ - `current_file_id`: ํ˜„์žฌ ํŒŒ์ผ ID - `previous_cutting_plan_id`: ์ด์ „ Cutting Plan ID - `total_drawings`: ์ „์ฒด ๋„๋ฉด ์ˆ˜ - `changed_drawings`: ๋ณ€๊ฒฝ๋œ ๋„๋ฉด ์ˆ˜ - `total_segments`: ์ „์ฒด ๋‹จ๊ด€ ์ˆ˜ - `added_segments`: ์ถ”๊ฐ€๋œ ๋‹จ๊ด€ ์ˆ˜ - `removed_segments`: ์‚ญ์ œ๋œ ๋‹จ๊ด€ ์ˆ˜ - `modified_segments`: ์ˆ˜์ •๋œ ๋‹จ๊ด€ ์ˆ˜ ### **์‚ฌ์šฉ ์‹œ์ ** - ์ƒˆ๋กœ์šด BOM ์—…๋กœ๋“œ ์‹œ (Cutting Plan ์ž‘์„ฑ ํ›„) - ๊ธฐ์กด Cutting Plan๊ณผ ์‹ ๊ทœ BOM ๋น„๊ต ์‹œ - ๋ฆฌ๋น„์ „ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„ ์‹œ --- ## ๐Ÿ“ **3. pipe_revision_changes** **์šฉ๋„**: PIPE ๋ฆฌ๋น„์ „ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ƒ์„ธ ์ •๋ณด ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `comparison_id`: ๋น„๊ต ๊ฒฐ๊ณผ ID (pipe_revision_comparisons ์ฐธ์กฐ) - `drawing_name`: ๋„๋ฉด๋ช… - `change_type`: ๋ณ€๊ฒฝ ์œ ํ˜• (added, removed, modified, unchanged) - `old_*`: ์ด์ „ ๋ฐ์ดํ„ฐ (๋ผ์ธ๋ฒˆํ˜ธ, ์žฌ์งˆ, ๊ธธ์ด ๋“ฑ) - `new_*`: ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ (๋ผ์ธ๋ฒˆํ˜ธ, ์žฌ์งˆ, ๊ธธ์ด ๋“ฑ) - `change_reason`: ๋ณ€๊ฒฝ ์‚ฌ์œ  ### **์‚ฌ์šฉ ์‹œ์ ** - ๋ฆฌ๋น„์ „ ๋น„๊ต ์ˆ˜ํ–‰ ์‹œ ๊ฐ ๋‹จ๊ด€๋ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ธฐ๋ก - ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ƒ์„ธ ๋ถ„์„ ์‹œ - ๋ฆฌ๋น„์ „ ์ด๋ ฅ ์ถ”์  ์‹œ --- ## ๐Ÿ“ธ **4. pipe_issue_snapshots** **์šฉ๋„**: ์ด์Šˆ ๊ด€๋ฆฌ์šฉ ์Šค๋ƒ…์ƒท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `job_no`: ์ž‘์—… ๋ฒˆํ˜ธ - `snapshot_name`: ์Šค๋ƒ…์ƒท ์ด๋ฆ„ - `is_active`: ํ™œ์„ฑ ์ƒํƒœ - `is_locked`: ์ž ๊ธˆ ์ƒํƒœ (์ด์Šˆ ๊ด€๋ฆฌ ์‹œ์ž‘ ์‹œ true) - `total_segments`: ์ด ๋‹จ๊ด€ ์ˆ˜ - `total_drawings`: ์ด ๋„๋ฉด ์ˆ˜ - `created_at`: ์ƒ์„ฑ ์‹œ๊ฐ„ - `locked_at`: ์ž ๊ธˆ ์‹œ๊ฐ„ ### **์‚ฌ์šฉ ์‹œ์ ** - Cutting Plan ํ™•์ • ์‹œ ์ž๋™ ์ƒ์„ฑ - ์ด์Šˆ ๊ด€๋ฆฌ ์‹œ์ž‘ ์‹œ ์ž ๊ธˆ - ๋ฆฌ๋น„์ „ ๋ณดํ˜ธ ํ™œ์„ฑํ™” ์‹œ --- ## ๐Ÿ”’ **5. pipe_issue_segments** **์šฉ๋„**: ์Šค๋ƒ…์ƒท๋œ ๋‹จ๊ด€ ์ •๋ณด ์ €์žฅ (๊ณ ์ • ๋ฐ์ดํ„ฐ) ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `snapshot_id`: ์Šค๋ƒ…์ƒท ID (pipe_issue_snapshots ์ฐธ์กฐ) - `area`: ๊ตฌ์—ญ ์ •๋ณด - `drawing_name`: ๋„๋ฉด๋ช… - `line_no`: ๋ผ์ธ๋ฒˆํ˜ธ - `material_grade`: ์žฌ์งˆ - `length_mm`: ๊ธธ์ด - `end_preparation`: ๋๋‹จ ๊ฐ€๊ณต - `original_cutting_plan_id`: ์›๋ณธ Cutting Plan ID ### **์‚ฌ์šฉ ์‹œ์ ** - Cutting Plan ํ™•์ • ์‹œ ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ - ์ด์Šˆ ๊ด€๋ฆฌ ํŽ˜์ด์ง€์—์„œ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ - ๋ฆฌ๋น„์ „๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ ์ œ๊ณต --- ## ๐Ÿ“‹ **6. pipe_drawing_issues** **์šฉ๋„**: ๋„๋ฉด ์ „๋ฐ˜์ ์ธ ์ด์Šˆ ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `snapshot_id`: ์Šค๋ƒ…์ƒท ID (pipe_issue_snapshots ์ฐธ์กฐ) - `area`: ๊ตฌ์—ญ ์ •๋ณด - `drawing_name`: ๋„๋ฉด๋ช… - `issue_description`: ์ด์Šˆ ์„ค๋ช… (์ž์œ  ํ…์ŠคํŠธ) - `severity`: ์‹ฌ๊ฐ๋„ (low, medium, high, critical) - `status`: ์ƒํƒœ (open, in_progress, resolved) - `resolution_notes`: ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• - `reported_by`: ๋ณด๊ณ ์ž ### **์‚ฌ์šฉ ์‹œ์ ** - ํ˜„์žฅ์—์„œ ๋„๋ฉด ์ „์ฒด์— ๋Œ€ํ•œ ๋ฌธ์ œ ๋ฐœ๊ฒฌ ์‹œ - ๋ฐฐ๊ด€ ๊ฐ„์„ญ, ๋ผ์šฐํŒ… ๋ณ€๊ฒฝ ๋“ฑ ์ „๋ฐ˜์  ์ด์Šˆ ๊ธฐ๋ก - ์„ค๊ณ„ ๋ณ€๊ฒฝ ์š”์ฒญ ์‹œ ### **์˜ˆ์‹œ** ``` ๊ตฌ์—ญ: #01 ๋„๋ฉด: P&ID-001 ์ด์Šˆ: "๋„๋ฉด A ์ „์ฒด์ ์œผ๋กœ ๋ฐฐ๊ด€ ๊ฐ„์„ญ์ด ์‹ฌํ•จ. ํ˜„์žฅ ์—ฌ๊ฑด์ƒ ์ผ๋ถ€ ๋ฃจํŠธ ๋ณ€๊ฒฝ ํ•„์š”" ``` --- ## ๐Ÿ”ง **7. pipe_segment_issues** **์šฉ๋„**: ๊ฐœ๋ณ„ ๋‹จ๊ด€๋ณ„ ์ด์Šˆ ์ €์žฅ ### **์ฃผ์š” ์ปฌ๋Ÿผ** - `snapshot_id`: ์Šค๋ƒ…์ƒท ID (pipe_issue_snapshots ์ฐธ์กฐ) - `segment_id`: ๋‹จ๊ด€ ID (pipe_issue_segments ์ฐธ์กฐ) - `issue_description`: ์ด์Šˆ ์„ค๋ช… - `issue_type`: ์ด์Šˆ ์œ ํ˜• (cutting, installation, material, routing, other) - `length_change`: ๊ธธ์ด ๋ณ€๊ฒฝ๋Ÿ‰ (+/- mm) - `new_length`: ์ตœ์ข… ๊ธธ์ด - `material_change`: ์žฌ์งˆ ๋ณ€๊ฒฝ ์ •๋ณด - `severity`: ์‹ฌ๊ฐ๋„ - `status`: ์ƒํƒœ ### **์‚ฌ์šฉ ์‹œ์ ** - ๊ฐœ๋ณ„ ๋‹จ๊ด€์—์„œ ๋ฌธ์ œ ๋ฐœ๊ฒฌ ์‹œ - ํ˜„์žฅ ์ ˆ๋‹จ, ์„ค์น˜ ๋ฌธ์ œ ๋“ฑ ๊ตฌ์ฒด์  ์ด์Šˆ ๊ธฐ๋ก - ๋‹จ๊ด€๋ณ„ ์ˆ˜์ •์‚ฌํ•ญ ์ถ”์  ### **์˜ˆ์‹œ** ``` ๊ตฌ์—ญ: #01 ๋„๋ฉด: P&ID-001 ๋ผ์ธ๋ฒˆํ˜ธ: LINE-A-001 ์ด์Šˆ: "์„ค์น˜๊ฐ€ ํž˜๋“ค์–ด 30mm ์ ˆ๋‹จํ•จ" ๊ธธ์ด ๋ณ€๊ฒฝ: -30mm ์ตœ์ข… ๊ธธ์ด: 1470mm ``` --- ## ๐Ÿ”— **ํ…Œ์ด๋ธ” ๊ด€๊ณ„๋„** ``` pipe_cutting_plans (๋‹จ๊ด€ ์ •๋ณด) โ†“ pipe_revision_comparisons (๋ฆฌ๋น„์ „ ๋น„๊ต) โ†“ pipe_revision_changes (๋ณ€๊ฒฝ์‚ฌํ•ญ ์ƒ์„ธ) pipe_cutting_plans (๋‹จ๊ด€ ์ •๋ณด) โ†“ (ํ™•์ • ์‹œ ์Šค๋ƒ…์ƒท) pipe_issue_snapshots (์Šค๋ƒ…์ƒท ๋ฉ”ํƒ€) โ†“ pipe_issue_segments (๊ณ ์ •๋œ ๋‹จ๊ด€ ์ •๋ณด) โ†“ pipe_segment_issues (๋‹จ๊ด€๋ณ„ ์ด์Šˆ) pipe_issue_snapshots (์Šค๋ƒ…์ƒท ๋ฉ”ํƒ€) โ†“ pipe_drawing_issues (๋„๋ฉด๋ณ„ ์ด์Šˆ) ``` --- ## ๐ŸŽฏ **๋ฐ์ดํ„ฐ ํ๋ฆ„** ### **1. Cutting Plan ์ž‘์„ฑ** ``` BOM ์—…๋กœ๋“œ โ†’ PIPE ๋ฐ์ดํ„ฐ ์ถ”์ถœ โ†’ pipe_cutting_plans ์ €์žฅ ``` ### **2. ๋ฆฌ๋น„์ „ ๋ฐœ์ƒ** ``` ์ƒˆ BOM ์—…๋กœ๋“œ โ†’ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋น„๊ต โ†’ pipe_revision_comparisons + pipe_revision_changes ์ €์žฅ ``` ### **3. Cutting Plan ํ™•์ •** ``` ํ™•์ • ๋ฒ„ํŠผ ํด๋ฆญ โ†’ pipe_issue_snapshots ์ƒ์„ฑ โ†’ pipe_issue_segments ๋ณต์‚ฌ (๊ณ ์ •) ``` ### **4. ์ด์Šˆ ๊ด€๋ฆฌ** ``` ํ˜„์žฅ ์ด์Šˆ ๋ฐœ์ƒ โ†’ pipe_drawing_issues (๋„๋ฉด๋ณ„) ๋˜๋Š” pipe_segment_issues (๋‹จ๊ด€๋ณ„) ์ €์žฅ ``` --- ## ๐Ÿ”’ **๋ฆฌ๋น„์ „ ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜** ### **ํ™•์ • ์ „** - `pipe_cutting_plans`: ๋ฆฌ๋น„์ „ ์‹œ ๋ณ€๊ฒฝ๋จ โŒ - Excel ๋‚ด๋ณด๋‚ด๊ธฐ: ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๊ธฐ์ค€ (๋ณ€๋™ ๊ฐ€๋Šฅ) ### **ํ™•์ • ํ›„** - `pipe_issue_snapshots`: ์ž ๊ธˆ ์ƒํƒœ ๐Ÿ”’ - `pipe_issue_segments`: ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ โœ… - Excel ๋‚ด๋ณด๋‚ด๊ธฐ: ์Šค๋ƒ…์ƒท ๋ฐ์ดํ„ฐ ๊ธฐ์ค€ (๊ณ ์ •) - ์ด์Šˆ ๊ด€๋ฆฌ: ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ --- ## ๐Ÿ“Š **์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜** ๋ชจ๋“  PIPE ๊ด€๋ จ ํ…Œ์ด๋ธ”์€ `backend/scripts/analyze_and_fix_schema.py`์— ํฌํ•จ๋˜์–ด ์žˆ์–ด **์ž๋™์œผ๋กœ ์ƒ์„ฑ**๋ฉ๋‹ˆ๋‹ค. ### **๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํฌํ•จ ์‚ฌํ•ญ** - โœ… 7๊ฐœ ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ - โœ… ๋ชจ๋“  ์ธ๋ฑ์Šค ์ž๋™ ์ƒ์„ฑ - โœ… ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ์„ค์ • - โœ… ๊ธฐ๋ณธ๊ฐ’ ๋ฐ ์ œ์•ฝ์กฐ๊ฑด ์„ค์ • ### **๋ฐฐํฌ ์‹œ ์ž๋™ ์‹คํ–‰** ```bash # Docker ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์ž๋™ ์‹คํ–‰ ./start.sh โ†’ analyze_and_fix_schema.py โ†’ PIPE ํ…Œ์ด๋ธ” ์ƒ์„ฑ ``` --- ## ๐ŸŽ‰ **ํ•ต์‹ฌ ์žฅ์ ** 1. **์™„์ „ํ•œ ๋ฆฌ๋น„์ „ ๋ณดํ˜ธ**: ํ™•์ • ํ›„ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ 2. **์ฒด๊ณ„์  ์ด์Šˆ ๊ด€๋ฆฌ**: ๋„๋ฉด๋ณ„/๋‹จ๊ด€๋ณ„ ๊ตฌ๋ถ„ ๊ด€๋ฆฌ 3. **์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜**: ๋ฐฐํฌ ์‹œ ์ž๋™ ํ…Œ์ด๋ธ” ์ƒ์„ฑ 4. **์„ฑ๋Šฅ ์ตœ์ ํ™”**: ๋ชจ๋“  ์ฃผ์š” ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค ์„ค์ • 5. **๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ**: ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์œผ๋กœ ๊ด€๊ณ„ ๋ณด์žฅ ์ด์ œ **์™„๋ฒฝํ•œ PIPE ๊ด€๋ฆฌ ์‹œ์Šคํ…œ**์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜์ด ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿš€