"""Manual v0.2.13 -> v0.2.14 (2026-10-20): improvements #34-1 (screen 도면에서 읽기) and #34-5 (batch run that did not finish). v0.2.13 moves to backup/.""" import shutil from pathlib import Path DOC = Path(__file__).resolve().parents[4] / "DOC" / "04_실행" SRC = DOC / "실행_T형교각모델링앱사용설명서_2026-10-20_v0.2.13.md" DST = DOC / "실행_T형교각모델링앱사용설명서_2026-10-20_v0.2.14.md" s = SRC.read_text(encoding="utf-8") def rep(a, b): global s assert s.count(a) == 1, a[:70] s = s.replace(a, b) i = s.index("| v0.2.13 | 2026-10-20 |") j = s.index("\n", i) s = s[:j + 1] + "| v0.2.14 | 2026-10-20 | 심영표 | 화면 「도면에서 읽기」 추가(운곡교 도면 틀의 코핑·기초·말뚝·기둥·받침·철근 값을 도면에서 읽어 비교·반영), 일괄 실행이 끝까지 가지 못했을 때의 안내(중단 이유, 이전 실행 결과 표시, 중간 결과, 무효 승인 표시): 4 화면 구성, 5.3, 5.5, 6.1, 8, 9, 부록 A | OPEN #34 ①⑤ |\n" + s[j + 1:] rep("| 표 후보값 | 위쪽 메뉴 |", "| 도면에서 읽기 | 위쪽 메뉴 | 운곡교 P1 도면 틀(P1~P4)에서 코핑·기초·말뚝·기둥·받침·철근 값을 **도면에서 읽어** 현재 값과 비교하고, **고른 줄만 반영**(반영 전 백업, 반영 기록 `read_log.json`) |\n| 표 후보값 | 위쪽 메뉴 |") rep("### 5.3 값 확인\n\n입력 값은 두 종류입니다.", "### 5.3 값 확인\n\n" "**도면에서 읽기 (운곡교 도면 틀)**: 위쪽 메뉴 [도면에서 읽기]는 운곡교 P1 도면 틀(P1~P4)의 첫 번째 도면(D1)과 철근재료표에서 코핑 윗면 계단·철근 단 높이·C14 점, 기초·말뚝·기둥 값, 받침 위치·회전, 기초 철근 층(규칙 + 재료표 개수), 기둥 철근(후프·결속)을 읽어 현재 값과 비교합니다. " "묶음별로 \"현재 / 읽은 값 / 근거\" 표가 나오고, **체크한 줄만** [선택한 줄 반영]으로 들어갑니다. 반영 전에 `params.json`·`expected.json`·`confirm.json`을 `backup\\before_geomread_…`에 보관하고 반영한 줄을 `read_log.json`에 남기며, 바뀐 묶음은 다시 확정해야 합니다.\n" "- 도면 틀이 다르면(공통 문자 비율 70 % 미만, 예: 새재1교·옥성교) 읽지 않고 이유를 알려 줍니다.\n" "- 읽기 규칙은 모두 완성된 교각(P1)에서 같은 값이 재현되는지 먼저 확인한 것입니다. 이미 완성된 교각(P1·P3·P4)에서는 \"읽은 값이 모두 현재 값과 같습니다\"가 나옵니다.\n" "- **추론 줄**(좌측 스터럽 윗면 등 도면에 그려져 있지 않은 값)은 기본으로 선택되어 있지 않습니다. 재료표와 대조한 뒤 반영 여부를 정하세요.\n" "- params와 expected를 같은 도면 읽기로 채우면 둘이 서로 같은 것은 독립 근거가 아닙니다(앱 확인 C9). 표(재료표) 값은 [표 후보값]에서 따로 대조하세요.\n" "- \"확인이 필요한 점\"에는 도면 점 개수와 재료표 개수가 다른 경우(예: B11·B12), 단순 이동값과 도면 원이 다른 점 등이 나옵니다. 재료표와 작도가 다를 때 작도를 채택하려면 계획된 FAIL 등록이 필요합니다.\n\n" "입력 값은 두 종류입니다.") rep("**결과 표 읽는 법**", "**일괄 실행이 끝까지 가지 못했을 때 (2026-10-20)**: 게이트 화면 위에 빨간 안내가 나옵니다.\n" "- **이유**: 오류(원인 한 줄 표시), 어느 게이트의 FAIL, 실행 조건 미충족, 서버가 멈춤 중 하나로 알려 줍니다.\n" "- **이전 실행 결과**: 이번 일괄 실행에서 갱신되지 않은 게이트는 \"이전 실행 결과\"로 표시하고 결과 시각을 함께 보여 줍니다. 그 결과와 승인을 이번 입력의 결과로 읽지 마세요.\n" "- **임시 결과**: 중단되기 전에 계산된 게이트가 있으면 해당 게이트 표 위에 \"중단된 실행의 임시 결과\"(검사 PASS 수, FAIL 항목)를 따로 보여 줍니다. 계획된 예외를 구분하지 않은 검사기 원본이며 승인·보고서에는 쓰이지 않습니다.\n" "- 입력이 바뀐 뒤의 옛 승인은 \"승인 기록은 이전 입력 것(무효)\"로 표시합니다.\n\n" "**결과 표 읽는 법**") rep("| `confirm.json` | 묶음별 확정 기록 (확정자, 시각, 사유, 확정 당시 앱 확인 상태) |", "| `confirm.json` | 묶음별 확정 기록 (확정자, 시각, 사유, 확정 당시 앱 확인 상태) |\n| `read_log.json` | 「도면에서 읽기」로 반영한 기록(시각, 반영자, 건수, 백업 폴더, 줄 목록) |") rep("| \"C3b … 생성 시점 값 그대로\" 주의 |", "| 게이트 화면 \"이 일괄 실행은 끝까지 가지 못했습니다\" | 오류·FAIL·조건 미충족·서버 중단 | 안내에 적힌 이유를 해결하고 일괄 승인을 다시 실행. 표의 \"이전 실행 결과\"는 옛 결과 |\n| 「도면에서 읽기」가 \"읽지 않습니다\" | 도면 틀이 다르거나 D1에서 필요한 선·글자를 찾지 못함 | 운곡교 P1~P4 도면 틀이 아니면 값을 직접 입력하거나 [표 후보값]을 사용 |\n| \"C3b … 생성 시점 값 그대로\" 주의 |") rep("- **C9의 한계**:", "- **도면에서 읽기의 한계**: 운곡교 도면 틀 한 종류와 교각 4개(P1·P3·P4와 템플릿)에서만 확인했습니다. 좌측 스터럽 윗면·c14 좌측 규칙·결속철근 끝 높이는 P1 규칙을 가정한 추론이고, 설계 의도(기초 회전 방향 등)는 읽지 못합니다.\n- **C9의 한계**:") rep("| 템플릿 변수 등급 파일 만들기 | `python tools\\make_variability.py [--force]` |", "| 템플릿 변수 등급 파일 만들기 | `python tools\\make_variability.py [--force]` |\n| 도면에서 읽은 값 보기·반영(화면 「도면에서 읽기」와 같은 읽기) | `python tools\\apply_pier_read.py <교각> [--dry]` |\n| 도면 값 55항목을 params와 비교 | `python tools\\verify_pier_geometry.py <교각>` |\n| 교각 생성 시점 값 기록을 초기 백업에서 만들기(C3b) | `python tools\\make_origin_values.py <교각> <백업 폴더 이름>` |") DST.write_text(s, encoding="utf-8") shutil.copy2(SRC, DOC / "backup" / SRC.name) SRC.unlink() print("written", DST.name)