#!/usr/bin/env python3 """Render the lining-reinforcement reference report (DOC/03_설계) from data/lining_spec.json written by extract_lining_spec.py. Values are read from the JSON, not typed. Usage: make_lining_doc.py """ import json import sys SRC, OUT = sys.argv[1], sys.argv[2] d = json.load(open(SRC, encoding="utf-8")) S = d["sheets"] note5 = S[0]["note5"] conc = S[0]["concrete"][0].split("=")[-1] rebar = S[0]["rebar_grade"][0].split("=")[-1] agg = S[0]["aggregate"][0].split("Ø")[-1] r1_drawn = next(x for x in S[0]["radius_dims"] if x.startswith("R1=")) r1_mm = float(r1_drawn.split("=")[1]) lines = ["# 콘크리트 라이닝 구조도 판독 및 재료 사양 (초안)\n", "| 버전 | 일자 | 변경 내용 |", "|---|---|---|", "| v0.1.00 | 2026-10-21 | 최초 작성. 콘크리트라이닝구조도 C0060304-004~009 판독 (HITL 검토 대상) |\n", "## 1. 개요", "- 6장은 **지보패턴 입출구부 취약구간**의 철근 상세와 공통 사양이다. 도면에 측점(STA) 표기가 없어 어느 측점 구간에 적용되는지는 판독되지 않았다 ([미확정]).", "- 적용 범위(주기 5, 원문): " + note5 + "\n", "## 2. 시트별 패턴군", "| 도면 | 패턴군 | 상세 종류 | 철근 라벨(H13~H29 개수) |", "|---|---|---|---|"] for r in S: bars = ", ".join(f"{k} {v}" for k, v in r["rebar_sizes_label_count"].items()) for i, g in enumerate(r["pattern_details"]): lab = bars if i == 0 else "" lines.append(f"| {r['file'][:14]} | {g['group']} | {g['kind']} | {lab} |") lines += ["", "- 철근 라벨 개수는 도면 시트 단위 합계다 (패턴군별 분리 불가). 첫 행에만 표기했다.\n", "## 3. 공통 재료 사양 (6장 동일)", f"- 콘크리트: {conc} ({S[0]['concrete'][0]})", f"- 철근: {rebar}, 도면 표기 SD400 ({S[0]['rebar_grade'][0]})", f"- 굵은골재 최대치수: Ø{agg} mm", "- 설계방법: 강도설계법, 피복두께 6 cm 이상 확보 (주기 1)", "- 이음장 600 mm (도면 치수), 겹침이음 1 cycle (도면 상세)", "- 라이닝 뒷면 주입재 강도 1.0 MPa 기대 (주기 11)", "- 천정부 방수쉬트 부착형 앵커, 철근처짐방지 앵커 적용 (주기 4, 12)\n", "## 4. 기준선과 치수", f"- 도면 표기 R1 = {r1_drawn} (6장 모두 동일 표기)", "- 표준단면 치수표(설계_표준단면치수표) R1 = 6,982 mm, 골격 모델은 6,982 mm 사용", f"- 라이닝 외면 R 7.282 m 에서 내면 R 6.982 m 를 빼면 두께 0.300 m, 표기 6.892 m 를 쓰면 0.390 m 이다. 표준단면 두께 300 mm 와 맞는 값은 6.982 m 이다.", "- R2 = 3,712 mm, R2′ = 3,910 mm (도면 표기, 표준단면 치수표와 일치)", "- EL. 0.000 = 노면 기준 (계획고 F = 0.000 과 일치 기록)", "- EL. -0.367 = 아치 중심 높이 (골격의 중심 c = -0.367 m 와 일치)\n", "## 5. 충돌·미확정", "- [확정 2026-10-21, 사용자 결정] R1 = 6.982 m 유지. 도면의 6.892 m 표기는 확인 대상 오기로 기록한다.", "- [미확정] 시트별 패턴군이 어느 측점 구간인지 (도면에 측점 없음)", "- [확인 필요] 라이닝 패턴군(A~C-2, D-1~2, E-1~2, WL-1~4, RP-1~2, P-2~3)과 굴착 순서도 패턴명(NP-4AD-1-D-2 등)의 대응. 사용자는 파일명에 기록되어 있다고 답했다. 예시 풀이(NP-5BE-1-WL-4 = NP-5B 의 D-1·D-2)는 파일명 속 WL-4 및 시트 패턴군(WL-3~4)과 맞지 않아 재확인이 필요하다.", "- 재료표 수량(총 중량)은 이번 판독에서 추출하지 않았다. 필요하면 재료표 추출을 별도 Task로 한다.", "- 철근 배치는 골격 LOD 범위 밖이라 모델에 넣지 않았다 (사용자 승인 3D 상세 수준: 축선·표준단면 스윕 골격).", "- 설계 조건과 상이하면 구조해석 검토 후 철근 보강 가능 (주기 5, 시공 중 판단 대상)\n", "## 6. 확인 요청 (HITL)", "1. NP-5BE-1-WL-4 의 D-1·D-2 풀이가 맞는지, 아니면 WL-4 가 어느 라이닝 패턴군인지", "2. 측점별 지보패턴 구간표가 확보되면 그 값으로 placeholder 구간을 교체할지", ""] open(OUT, "w", encoding="utf-8").write("\n".join(lines)) print("written", OUT, len(lines), "lines")