Files
Pier_v1/Code/검토수정/스크립트/add_전단철근_내역_xlsx.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합
- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:18 +09:00

125 lines
7.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""산외·옥성 기초 전단·세로철근 수정(2026-10-26)을 '수정 내역' 계열 시트에 추가한다.
- 수정 내역: R-10(옥성 B9), R-11(산외 B7), R-12(산외 B9·B10) 행 추가
- 수정 증거(마크별): 같은 철근 행 추가
- 미수정·보류: 산외 B7 행을 '수정 완료'로 갱신, 옥성 B9 연장 부족 행 추가
- 수정 파일·해시: 산외·옥성 수정2 를 '중간본' 으로, 수정3 두 파일을 '최신' 으로 추가
입력: Code/검토수정/결과/c1_shear_fix.json. 같은 R-10 이 이미 있으면 중단(이중 적용 방지).
"""
import copy
import datetime
import hashlib
import json
import sys
from pathlib import Path
import openpyxl
from openpyxl.styles import PatternFill
ROOT = Path(r"D:\★Pier 자료\프로그램\Pier_T")
REV = ROOT / "검토파일"
XLSX = REV / "4개교_공통사항_종합.xlsx"
res = json.loads((ROOT / "Code" / "검토수정" / "결과" / "c1_shear_fix.json").read_text(encoding="utf-8"))
wb = openpyxl.load_workbook(XLSX)
ws = wb["수정 내역"]
if any(r[0].value == "R-10" for r in ws.iter_rows(min_row=4)):
sys.exit("R-10 이 이미 있음 - 중단")
def append_like(sheet, values, like_row):
r = sheet.max_row + 1
for j, v in enumerate(values, 1):
c = sheet.cell(row=r, column=j, value=v)
s = sheet.cell(row=like_row, column=j)
c.font = copy.copy(s.font)
c.fill = copy.copy(s.fill)
c.border = copy.copy(s.border)
c.alignment = copy.copy(s.alignment)
c.number_format = s.number_format
sheet.auto_filter.ref = "A3:%s%d" % (openpyxl.utils.get_column_letter(sheet.max_column), r)
return r
so, ok = res["sanoe"], res["okseong"]
b7, b9s, b10s, b9o = so["sample"]["B7"], so["sample"]["B9"], so["sample"]["B10"], ok["sample"]["B9"]
n7, n9, n10, no9 = so["stat"]["B7_done"], so["stat"]["B9_done"], so["stat"]["B10_done"], ok["stat"]["B9_done"]
rows = [
["R-10", "옥성교", "기초 C형 띠철근 B9 (H19) 갈고리 연장", "B9 (tie-C)",
"양 끝 연장 57.1 / 길이 %.1f (재료표 L 4,763 보다 짧음)" % b9o["len_old"],
"양 끝 연장 %.1f / 길이 %.1f (= 재료표 L)" % (b9o["tail_new"], b9o["len_new"]), no9,
"사용자 승인 2026-10-26: 도면에 값이 있으면 재료표 길이를 따름 → 연장을 늘려 중심선 길이 = 재료표 L. 걸림 높이 126 / 2124 는 바깥 주철근에 이미 걸려 있어 유지",
"옥성교P1_G5_수정3_20261026.3dm",
"저장 직전 문서 확인: 171본 모두 길이 4,763.0, 객체 수 %d → %d 동일, 파이프 부피 오차 0.2%% 이내" % (ok["objects_before"], ok["objects_after"]),
"연장 %.1f < KDS 5db 95.5 (1.5mm 부족) — 재료표 L 을 따른 결과. 설계자 확인" % b9o["tail_new"]],
["R-11", "산외교", "기초 세로철근 B7 (H13) 양 끝 높이", "B7 (H13 세로철근)",
"양 끝 z 166 / 2384 (바깥 주철근 150 / 2400 안쪽) / 길이 %.1f" % b7["len_old"],
"양 끝 z 132.5 / 2414.5 (바깥 주철근에 걸림: 150−11−6.5, 2400+8+6.5) / 길이 %.1f" % b7["len_new"], n7,
"사용자 승인 2026-10-26: 피복 밖으로 나갈 수 있는 철근은 전단·세로철근, 주철근에 걸어줌 (운곡교 B9·옥성교 B9 와 같은 방식)",
"산외교P1 G5_수정3_20261026.3dm",
"저장 직전 문서 확인: 98본 z 범위 132.5~2414.5, 갈고리 R19.5·연장 80.5 유지(KDS H13 최소 R 19.05, 5db 65 만족). 객체 수 %d → %d 동일" % (so["objects_before"], so["objects_after"]),
"도면 B7 값은 [추론](체크무늬 98본, 갈고리 +Y). 길이 %.1f > 재료표 L 2,418 (+47) — 설계자 확인" % b7["len_new"]],
["R-12", "산외교", "기초 중간 직선철근 B9·B10 (H16) 갈고리 연장", "B9, B10",
"연장 76 / 길이 %.1f (재료표 L 7,500)" % b9s["len_old"],
"연장 %.1f / 길이 %.1f (= 재료표 L)" % (b9s["tail_new"], b9s["len_new"]), n9 + n10,
"사용자 승인 2026-10-26: 연장을 늘려 중심선 길이 = 재료표 L (도면에 값이 있으면 재료표를 따름)",
"산외교P1 G5_수정3_20261026.3dm",
"저장 직전 문서 확인: B9 7본·B10 7본 모두 길이 7,500.0, 연장 86.3 ≥ KDS 5db 79.5",
"-"],
]
for row in rows:
append_like(ws, row, 4)
ev = wb["수정 증거(마크별)"]
ev_rows = [
["옥성교", "B9", "H19", "전단철근 갈고리 연장", no9, "연장 57.1 / 길이 %.1f" % b9o["len_old"], "연장 %.1f / 길이 %.1f" % (b9o["tail_new"], b9o["len_new"]),
round((b9o["len_new"] - b9o["len_old"]) * no9, 1), "합계 길이 변화(mm). 재료표 L 4,763 에 맞춤"],
["산외교", "B7", "H13", "세로철근 끝 높이(기초 하단 기준 mm)", n7, "z 166 / 2384, 길이 %.1f" % b7["len_old"], "z 132.5 / 2414.5, 길이 %.1f" % b7["len_new"],
round((b7["len_new"] - b7["len_old"]) * n7, 1), "합계 길이 변화(mm). 바깥 주철근에 걸림"],
["산외교", "B9", "H16", "중간 직선철근 갈고리 연장", n9, "연장 76 / 길이 %.1f" % b9s["len_old"], "연장 %.1f / 길이 %.1f" % (b9s["tail_new"], b9s["len_new"]),
round((b9s["len_new"] - b9s["len_old"]) * n9, 1), "재료표 L 7,500 에 맞춤"],
["산외교", "B10", "H16", "중간 직선철근 갈고리 연장", n10, "연장 76 / 길이 %.1f" % b10s["len_old"], "연장 %.1f / 길이 %.1f" % (b10s["tail_new"], b10s["len_new"]),
round((b10s["len_new"] - b10s["len_old"]) * n10, 1), "재료표 L 7,500 에 맞춤"],
]
for row in ev_rows:
append_like(ev, row, 4)
hold = wb["미수정·보류"]
for r in hold.iter_rows(min_row=4):
if r[0].value == "산외교" and str(r[1].value).startswith("B7"):
r[3].value = "수정 완료(2026-10-26): 양 끝을 바깥 주철근에 걸리게 옮김 (z 132.5 / 2414.5)"
r[4].value = "도면 값이 [추론]이고 길이 2,465.3 이 재료표 L 2,418 보다 47mm 김. '수정 내역' R-11"
r[5].value = "설계자 확인 (도면 B7 형상·길이)"
append_like(hold, ["옥성교", "B9 (H19 C형 띠철근)", "171본", "연장 93.9 < KDS 5db 95.5 (1.5mm 부족)",
"재료표 L 4,763 에 맞춘 결과. 연장을 KDS 로 키우면 L 초과. '수정 내역' R-10", "설계자 확인 (L 과 KDS 중 우선)", "R-10"], 4)
append_like(hold, ["산외·옥성교", "B8·B10·B11·B12 등 겹침 이음이 있는 띠·루프철근", "-", "재료표 L 에 겹침 J 가 있으나 형상에 없음",
"공통 문제 C-3(겹침 길이를 형상에 넣을지 정책 미정)이라 이번에는 수정하지 않음", "정책 결정", "C-3"], 4)
# 파일·해시
fs = wb["수정 파일·해시"]
def sha(p):
h = hashlib.sha256()
with open(p, "rb") as f:
for blk in iter(lambda: f.read(1 << 20), b""):
h.update(blk)
return h.hexdigest()
for r in fs.iter_rows(min_row=4):
if r[1].value in ("검토파일/검토_산외교P1/산외교P1 G5_수정2_20261026.3dm", "검토파일/검토_옥성교P1/옥성교P1_G5_수정2_20261026.3dm"):
r[3].value = "중간본"
r[3].fill = PatternFill(fill_type=None)
new_files = [("산외교", "검토_산외교P1/산외교P1 G5_수정3_20261026.3dm", "기초 전단·세로철근(B7 걸기, B9·B10 연장) 포함 — 전체 수정 포함"),
("옥성교", "검토_옥성교P1/옥성교P1_G5_수정3_20261026.3dm", "기초 C형 띠철근 B9 연장 포함 — 전체 수정 포함")]
latest_fill = copy.copy(fs.cell(row=9, column=4).fill)
for b, rel, what in new_files:
p = REV / rel
stt = p.stat()
r = append_like(fs, [b, "검토파일/" + rel, what, "최신", round(stt.st_size / 1e6, 1),
datetime.datetime.fromtimestamp(stt.st_mtime).strftime("%Y-%m-%d %H:%M"), sha(p)], 4)
fs.cell(row=r, column=4).fill = PatternFill("solid", fgColor="FFE2EFDA")
wb.save(XLSX)
print("saved", XLSX)