"""Manual v0.2.11 -> v0.2.12 (2026-10-19): the 입력 묶음 확인·확정 개편 (stage A-D). The v0.2.11 file is copied to backup/ by the caller first; this script writes the new file next to it. Refuses to run when a replacement does not match exactly (the manual changed under it).""" from pathlib import Path DOC = Path(__file__).resolve().parents[4] / "DOC" / "04_실행" SRC = DOC / "실행_T형교각모델링앱사용설명서_2026-10-15_v0.2.11.md" DST = DOC / "실행_T형교각모델링앱사용설명서_2026-10-19_v0.2.12.md" s = SRC.read_text(encoding="utf-8") def rep(a, b): global s assert s.count(a) == 1, a[:80] s = s.replace(a, b) rep("| v0.2.11 | 2026-10-15 | 심영표 | 새재1교 P1 코핑·받침좌 철근(G4) 반영: 1.1 형식 표, 7.1 항목 수, 9 한계 | 사용자 지시 \"진행해줘\" |", "| v0.2.11 | 2026-10-15 | 심영표 | 새재1교 P1 코핑·받침좌 철근(G4) 반영: 1.1 형식 표, 7.1 항목 수, 9 한계 | 사용자 지시 \"진행해줘\" |\n" "| v0.2.12 | 2026-10-19 | 심영표 | 입력 묶음 확인·확정 개편(A~D단계) 반영: 1.1·1.2(6번째 템플릿 `산외교울산P2형`, 앱 확인·표 밖 치수 후보), 4 화면 구성, 5.1(도면 먼저 추천)·5.3·5.4(확정 방법 전면 개정, 이전 방식 일괄 확정 삭제), 6.1·6.5 파일, 8, 9, 부록 A·B. 화면 디자인 Prism 적용 | 사용자 지시 \"D단계 착수해줘\" |") # ---- 1.1 rep("| 3 | 입력 묶음 확인·확정 (\"이 값이 도면과 맞다\"는 기록) | 사용자 |", "| 3 | 입력 묶음 **앱 확인**(표·수량·고정 항목 대조) → 사람이 근거를 보고 **확정** (\"이 값이 도면과 맞다\"는 기록) | 앱이 확인, 사용자가 확정 |") rep("| 2 | 도면 표에서 읽은 값과 입력값 비교, 표 밖 치수는 문자 검색으로 찾기 | 사용자 + 앱 |", "| 2 | 도면 표에서 읽은 값과 입력값 비교, 표 밖 치수는 후보(같은 도면 틀일 때)·문자 검색으로 찾기 | 사용자 + 앱 |") rep("- 지원하는 T형 교각 형식은 다섯 가지입니다.", "- 지원하는 T형 교각 형식은 여섯 가지입니다. 도면을 먼저 올리면 가장 비슷한 형식을 추천해 줍니다(5.1절).") rep("| `새재1교P1형` | 직접기초(말뚝 없음)", "| `산외교울산P2형` | 강관말뚝 Ø508 6×5 기초(**평면 37° 회전**) · 원형 기둥 Ø2.5 · 직선 경사 코핑(끝면 300 경사, 상면 130 단차, 평면 모서리 R500) · 받침 4개 · 철근 G2 링(주철근 68) · G3 기초(B7 320본은 추정) · G4 코핑·받침(철근별 중심선 372본) | 산외교 울산 P2 |\n| `새재1교P1형` | 직접기초(말뚝 없음)") rep("- 도면 판독은 **반자동**입니다. 표 3종(받침 ELEVATION TABLE, 솔플레이트 TABLE, 철근재료표)만 자동으로 읽고, 나머지 치수는 사용자가 확인·입력합니다.", "- 도면 판독은 **반자동**입니다. 표 3종(받침 ELEVATION TABLE, 솔플레이트 TABLE, 철근재료표)은 자동으로 읽습니다. 표 밖 치수는 같은 도면 틀(예: 운곡교 P1~P4)이면 **후보**로 찾아 주지만(5.3절), 철근 위치 목록·코핑 외곽 같은 값은 앱이 읽지 못하므로 사용자가 확인·입력합니다.\n" "- **앱은 확정하지 않습니다.** 앱 확인 '일치'는 \"독립 근거(도면 표·재료표 수량 등)와 값이 같다\"는 뜻이지 \"도면이 맞다\"는 보증이 아닙니다.") # ---- 4 화면 구성 i = s.index("## 4. 화면 구성") j = s.index("## 5. 따라 하기") s = s[:i] + """## 4. 화면 구성 화면은 Prism 디자인(Pretendard 글꼴)으로 통일되어 있습니다. 위쪽 띠에 앱 이름과, 교각을 연 뒤에는 그 교각의 메뉴(문자 검색·표 후보값·게이트)가 있습니다. | 화면 | 들어가는 법 | 주요 버튼·기능 | | :--- | :--- | :--- | | 교각 목록 | 첫 화면 | 교각 선택, **도면으로 템플릿 추천**(도면을 먼저 올려 순위·근거 확인), **새 교각 만들기**, **삭제**(이름 입력 후), 아래쪽 **보호 템플릿** 표 | | 도면으로 템플릿 추천 | 교각 목록 | 도면 올리기 → 템플릿 순위·추정 근거 → 6문항·각도 값 확인 → 판정 → 교각 만들기 | | 교각 | 목록에서 교각 이름 클릭 | 1. 도면 **올리기·변환** / 2. **요약 띠**(앱 확인 결과 개수), **[전체 확인]**, **[일치 묶음 일괄 확정]**, 입력 묶음 표(변수 등급·값 출처·앱 확인·사람 확정) / 3. 게이트 현황, **일괄 승인** | | 근거 보기 | 묶음 표의 [근거 보기] | 앱 확인 8종 검사별 결과·비교한 내용·도면 위치, 사유와 함께 **확정** | | 일치 묶음 일괄 확정 | 교각 화면의 버튼 | 대상 묶음의 근거표(끝까지 내려야 활성화), 제외된 묶음과 사유, 확정자 입력 | | 도면 문자 검색 | 위쪽 메뉴 | 글자·숫자 검색, 정규식 검색. 도면(D1~D3)·레이어·좌표 표시. 아래쪽 **핸들 조회** | | 표 후보값 | 위쪽 메뉴 | **표 밖 치수 후보**(앵커, 등급 A/B/C, **도면 보기**), 도면 **치수 사슬 검산**, 도면 표에서 읽은 값과 현재 값 비교, **선택한 후보값 반영** | | 게이트 | 위쪽 메뉴 | **일괄 승인**, 게이트별 **실행**·**승인**·**반려**, **모델 내려받기**, **보고서 초안 생성** | | 묶음 편집 | 교각 화면의 묶음 이름 클릭 | 변수 등급·값 출처 표시, 값(JSON) **저장**(고정(F) 항목을 바꾸면 사유 필요, 생성(V3) 묶음은 저장 불가), **저장된 값으로 확정**(사유 칸 포함) | 판정 표시는 색과 글자·기호를 함께 씁니다. ● 일치·PASS(초록), ▲ 주의·계획 FAIL(황), ■ 불일치·FAIL(빨강), ◇ 근거 없음·미확정(점선 테두리), — 해당 없음(회색). --- """ + s[j:] # ---- 5.1 rep("1. 교각 목록 아래 **새 교각**에서 이름(예: `운곡교p2`)을 입력합니다.", "**도면을 먼저 올려 추천받기(권장)**: 교각 목록의 **도면으로 템플릿 추천**에서 DWG를 올리고 [도면 읽고 추천 받기]를 누르면, 도면 문자에서 기초 형식(말뚝 유무)·코핑 하면 형상·받침 개수를 추정해 보호 템플릿을 일치 문항 수 순으로 보여 줍니다(추정 근거와 도면 위치 표시, 맞는 템플릿이 없으면 '판단 불가'). 아래 6문항(철근 형상·생성 방식은 사람이 답함)과 각도 값(코핑 skew·받침 회전·기초 회전)을 확인하면 판정이 나오고, 이름을 넣고 [교각 만들기]를 누르면 교각 폴더가 만들어지며 올린 도면이 그 안으로 옮겨집니다. 답이 템플릿과 다르면 [그래도 만들기]로 진행할 수 있고, 그 교각은 모든 화면 위에 닫을 수 없는 '형식 불일치 경고'가 표시됩니다.\n\n" "**도면 없이 만들기**\n\n1. 교각 목록 아래 **새 교각**에서 이름(예: `운곡교p2`)을 입력합니다.") rep("말뚝 없는 직접기초에 대좌 5개를 앞뒤 받침이 함께 쓰는 형식이면 `새재1교P1형`.", "말뚝 없는 직접기초에 대좌 5개를 앞뒤 받침이 함께 쓰는 형식이면 `새재1교P1형`, 강관말뚝 기초가 37° 회전한 직선 경사 코핑 형식이면 `산외교울산P2형`.") rep("4. **[만들기]**를 누릅니다. 템플릿의 params·expected가 복사되어 출발점이 되고, 교각 목록의 '템플릿' 칸에 \"템플릿: 산외교울산P1형\"처럼 표시됩니다.", "4. **[만들기]**를 누릅니다. 템플릿의 params·expected가 복사되어 출발점이 되고, 교각 목록의 '템플릿' 칸에 \"템플릿: 산외교울산P1형\"처럼 표시됩니다. 이때 변수 등급 파일(`variability.json`), 표 밖 치수 앵커(`anchors.json`), 묶음별 원본 해시(`pier.json`의 `origin`)도 함께 복사·기록됩니다.") rep("> 주의: 템플릿 값은 **원본 교각의 도면 값**입니다. 복사한 값 그대로 게이트를 실행하면 원본 교각의 모델이 만들어질 뿐입니다. 반드시 5.3절대로 새 도면 값으로 바꾼 뒤 확정하세요.", "> 주의: 템플릿 값은 **원본 교각의 도면 값**입니다. 복사한 값 그대로 게이트를 실행하면 원본 교각의 모델이 만들어질 뿐입니다. 앱은 복사한 뒤 한 번도 바뀌지 않은 묶음을 \"▲ 템플릿 원본 그대로\"로 표시하고 앱 확인을 '근거 없음'으로 두며, 이런 묶음은 일괄 확정 대상에서 빠집니다. 반드시 5.3절대로 새 도면 값으로 바꾼 뒤 확정하세요.") # ---- 5.3 rep("1. **표 후보값**: 위쪽 메뉴 [표 후보값]에서 '다름'인 줄을 도면과 대조합니다.", "0. **앱 확인 보기**: 교각 화면 2절 맨 위 요약 띠와 묶음 표의 「앱 확인」 열에서 어느 묶음이 일치·불일치·근거 없음인지 봅니다. 불일치 묶음의 [근거 보기]에서 무엇이 어떻게 다른지(예: \"현재 42686 ≠ 표 41747\") 알 수 있습니다.\n" "1. **표 후보값**: 위쪽 메뉴 [표 후보값]에서 '다름'인 줄을 도면과 대조합니다.") rep("2. **문자 검색**: 표 밖의 치수는 [도면 문자 검색]에서 찾습니다.", " - **표 밖 치수 후보**: 같은 도면 틀(예: 운곡교 P1~P4)이면 [표 후보값] 맨 위 「표 밖 치수 후보」에 템플릿 원본 교각이 값을 읽은 문자 위치를 새 도면에서 따라간 후보가 나옵니다. 등급 **A**(같은 치수가 여러 곳에서 같게 읽힘, 표 값과도 일치하면 표시) · **B**(한 곳 또는 일부만, 약 15 %는 틀림) · **C**(근거 약함, 반영 시 사유 필요). [도면 보기]로 그 위치를 확대 이미지로 확인합니다. 도면 틀 일치율이 70 % 미만이면 모든 후보가 C로 내려갑니다. 앵커가 없는 교각은 같은 화면에서 템플릿을 골라 앵커를 불러옵니다. **[선택한 후보 반영]**은 선택한 줄에만 적용되고, 같은 도면 문자에서 나온 후보를 params와 expected에 함께(따로 해도) 반영할 수 없습니다. 「빠른 선택」으로 A등급 후보를 expected만/params만 한 번에 고를 수 있습니다.\n" " - **치수 사슬 검산**: 도면의 `n@간격=합계` 표기를 검산해(개수 × 간격 = 합계) 맞지 않는 것을 교각 화면과 [표 후보값]에 경고합니다(도면 자체의 오류일 수 있음).\n" "2. **문자 검색**: 표 밖의 치수는 [도면 문자 검색]에서 찾습니다.") # ---- 5.4 i = s.index("### 5.4 확정") j = s.index("### 5.5 게이트 실행과 승인") s = s[:i] + """### 5.4 확정 확정은 **"내가 이 값을 도면과 대조했다"는 사람의 기록**입니다. 앱은 확정하지 않고, 확정에 쓸 근거를 모아 줍니다. **앱 확인 결과** — 교각 화면 2절 맨 위 요약 띠: "필요 26개 중 앱 확인 일치 9 · 주의 4 · 불일치 0 · 근거 없음 10 · 해당 없음 3 · 사람 확정 0". [전체 확인]을 누르면 앱이 다시 확인합니다(값·도면이 바뀌면 자동으로도 다시 확인). | 앱 확인 | 뜻 | 확정 방법 | | :--- | :--- | :--- | | ● 일치 | 독립 근거(도면 표·재료표 수량·표 밖 치수 A등급·템플릿 고정 값)와 값이 같다 | [일치 묶음 일괄 확정] 가능 | | ▲ 주의 | 수량만 확인했거나, 계획된 예외·B등급 후보와 다름 등 | 근거 보기에서 **사유와 함께** 개별 확정 | | ■ 불일치 | 값이 도면 표·후보와 다르다 | 값을 고치거나, 사유와 함께 개별 확정 | | ◇ 근거 없음 | 템플릿 원본 그대로이거나 앱이 읽지 못하는 값(철근 위치·코핑 외곽·표 밖 치수) | 도면과 직접 대조한 뒤 **사유와 함께** 개별 확정 | | — 해당 없음 | 참고 정보·사람 결정 기록(계획 FAIL, 철근 색 등) | 참고 정보는 확정 불필요, 결정 기록은 개별 확정 | '일치'는 "독립 근거와 같다"는 뜻이지 "도면이 맞다"는 보증이 아닙니다. 철근 위치·좌표와 표 밖 치수는 아직 앱이 대조하지 못하는 부분이 많습니다. **일치 묶음 일괄 확정** 1. 교각 화면의 **[일치 묶음 일괄 확정 (○개)]**를 누릅니다(대상이 없으면 버튼 대신 안내만 나옵니다). 2. 대상 묶음의 **근거표를 끝까지 내려** 읽습니다(내리기 전에는 확정자 입력·확정 단추가 막혀 있습니다). 제외된 묶음은 접힌 칸에서 사유를 볼 수 있습니다. 3. **확정자** 이름을 넣고 확정합니다. 앱 확인이 '일치'인 묶음만 확정되며, 확정 기록에는 입력한 이름과 당시 앱 확인 상태가 남습니다. 근거표를 읽은 뒤 대상 목록이 바뀌면(값 수정 등) 다시 읽어야 합니다. **개별 확정(근거 보기)**: 묶음 이름 옆 **[근거 보기]**에서 앱 확인 8종(C1 출처·C2 표 대조·C2b 표 밖 치수·C3 템플릿 원본·C4 수량·C5 params 독립·C6 범위·C7 고정 항목·C8 재생성)의 결과와 비교 내용·도면 위치를 보고, 확정자와 **사유**를 넣어 확정합니다. 앱 확인이 일치가 아니면 사유가 없을 때 확정되지 않습니다. 묶음 편집 화면 아래의 [저장된 값으로 확정]도 같은 규칙입니다. **변수 등급과 편집 규칙** (묶음 표의 「변수 등급」 열) - **V1 값 변수**·**V2 목록 변수**: 도면마다 달라지는 값. 자유롭게 고칩니다. - **V3 생성 변수**: 판독 스크립트가 만든 긴 목록(철근별 중심선 등). 화면에서 저장할 수 없습니다. 판독 스크립트를 다시 실행해 값을 만드세요. - **F 고정**: 형식을 정의하는 값(`scope`, `builders`, `column.shape`, `coping.form` 등). 바꾸면 같은 템플릿이 아닐 수 있어 **사유를 입력해야** 저장되고, 사유는 `edit_log.json`에 기록됩니다. **확정 대상**: 치수·철근·기대값 묶음과 **실행 설정 묶음**(`scope`·`builders`·`checkers`·`negative`)입니다. 결과를 바꾸므로 확정해야 게이트를 실행할 수 있습니다. 이 묶음이 없는 교각(운곡교 형식)은 기본값을 쓰며 확정이 필요 없습니다. **확정 불필요(참고)**: `_schema`, `_meta`, `_note`, `○○_src` 같은 형식·출처 메모 묶음은 게이트가 쓰지 않습니다. 확정하지 않아도 됩니다. - 확정 뒤 값을 고치면 그 묶음은 자동으로 '변경됨 · 재확정 필요'가 되고, 승인된 게이트도 '재실행 필요'가 됩니다. - **이전 방식의 "필요한 묶음 일괄 확정"(앱 확인 없이 전부 확정)은 2026-10-19에 없어졌습니다.** 확정은 위의 두 방법뿐입니다. """ + s[j:] # ---- 6.1 / 6.5 rep("| `confirm.json` | 묶음별 확정 기록 (확정자, 시각) |", "| `confirm.json` | 묶음별 확정 기록 (확정자, 시각, 사유, 확정 당시 앱 확인 상태) |\n" "| `autocheck.json` | 앱 확인 결과 (묶음별 일치·주의·불일치 등과 검사 근거). 확정 기록과 별개이며 앱은 확정하지 않음 |\n" "| `variability.json` | 묶음별 변수 등급(V1·V2·V3·F)과 값 출처 (템플릿에서 복사, 담당자 확정 전 초안) |\n" "| `anchors.json` | 표 밖 치수 앵커(원본 교각이 값을 읽은 도면 문자 위치). 템플릿에서 복사 |\n" "| `edit_log.json`, `anchor_log.json` | 고정 항목 변경 사유 기록, 표 밖 치수 후보 반영 기록 |\n" "| `confirm_view.json` | 일치 묶음 일괄 확정에서 근거표를 끝까지 읽었다는 표식 |\n" "| `drawings\\view_cache\\` | [도면 보기] 이미지 캐시 |") rep("| `pier.json` | 교각 이름, 형식, 만든 날, 템플릿 |", "| `pier.json` | 교각 이름, 형식, 만든 날, 템플릿, 템플릿 복사 기록(`origin`), 템플릿 적합성 답(`fit_answers`·`fit_mismatch`) |") rep("| `template.json` | 형식 설명, 원본 교각, 저장일, 입력 해시 |", "| `template.json` | 형식 설명, 원본 교각, 저장일, 입력 해시 |\n| `variability.json`, `anchors.json` | 묶음별 변수 등급, 표 밖 치수 앵커(원본 교각의 도면에서 학습) |") # ---- 8 rep("| \"실행 불가: ○○ 미확정\" | 필요한 묶음이 미확정 | 교각 화면에서 일괄 확정 또는 해당 묶음 확정 |", "| \"실행 불가: ○○ 미확정\" | 필요한 묶음이 미확정 | 교각 화면에서 [일치 묶음 일괄 확정] 또는 근거 보기에서 해당 묶음 확정(5.4절) |\n" "| [일치 묶음 일괄 확정]이 없고 \"확정할 '일치' 묶음이 없습니다\" | 앱 확인이 '일치'인 미확정 묶음이 없음 | 남은 묶음은 근거 보기에서 사유와 함께 개별 확정 |\n" "| \"사유를 입력해야 확정할 수 있습니다\" | 앱 확인이 일치가 아닌 묶음 | 도면과 대조한 내용을 사유에 적어 확정 |\n" "| \"고정(F) 항목을 바꾸면 … 사유를 입력하세요\" | 고정 항목 변경 | 정말 형식이 같은지 확인하고 사유를 적음. 형식이 다르면 다른 템플릿으로 시작 |\n" "| \"생성 변수(V3)는 화면에서 직접 고칠 수 없습니다\" | 철근별 중심선 목록 등 | 판독 스크립트를 다시 실행해 값을 만듦 |\n" "| \"근거표를 열어 끝까지 읽은 뒤에 확정할 수 있습니다\" | 일괄 확정 근거표를 끝까지 내리지 않음, 또는 읽은 뒤 대상이 바뀜 | 일괄 확정 화면에서 근거표를 끝까지 내려 다시 확정 |\n" "| 후보 화면에 \"이 교각에는 앵커가 없습니다\" | 템플릿 없이 만든 교각 | 같은 도면 틀의 템플릿을 골라 앵커 불러오기 |\n" "| 후보가 전부 C등급 | 도면 틀 일치율 70 % 미만(다른 도면 틀) | 후보를 근거로 쓰지 말고 표·문자 검색으로 직접 확인 |\n" "| 도면 치수 사슬 경고 | 도면의 `개수@간격=합계`가 맞지 않음 | 도면 자체의 오류일 수 있으니 [도면 보기]로 확인하고 설계자에게 문의 |") # ---- 9 rep("- **확정·승인의 의미**: 확정과 승인은 사람의 검토 기록입니다. 일괄 기능은 버튼을 누른 사람의 이름으로 기록합니다.", "- **확정·승인의 의미**: 확정과 승인은 사람의 검토 기록입니다. 일괄 기능(일치 묶음 일괄 확정, 일괄 승인)은 버튼을 누른 사람의 이름으로 기록합니다.\n" "- **앱 확인의 한계**: '일치'는 독립 근거와 같다는 뜻입니다. 철근 위치 목록·코핑 외곽·표 밖 치수는 아직 대조하지 못해 '근거 없음'으로 남고, 철근 목록은 수량만 확인해 '주의'가 됩니다. C8(재생성 일치)은 스크립트가 연결되어 있지 않아 '해당 없음'입니다. 기존 교각은 템플릿 복사 기록이 없어 '템플릿 원본 그대로'를 판단하지 않습니다.\n" "- **표 밖 치수 후보의 한계**: 같은 도면 틀에서만 작동합니다(시험: 같은 틀 A등급 45건 중 오답 0, B등급 약 14 % 오답, 다른 틀은 A·B 후보 없음). 1 m 미만 값과 계산해서 얻는 값은 앵커가 없고, 철근 점·선과 콘크리트 외곽 점열은 시험 결과 채택하지 않았습니다. 자기 도면에서 만든 앵커는 근거로 쓰지 않습니다.") rep("- 남은 개선 과제: 미해결 목록 #18(Rhino 실행 정체), #19(일반화), #22(울산 추정 사항), #23(Ramp-A 추정 사항), #24(옥성교) — `context-migration\\OPEN_미해결목록.md`", "- **울산 P2 형식의 추정 사항**: 기초 회전 방향(반시계)·말뚝(속찬 원기둥)·솔플레이트(두꺼운 쪽 +Y)·대좌 fck는 사용자 확인 하에 추정을 적용했고, 기초 철근 B7 320본 배치와 B8 띠철근 길이 불일치는 설계자 확인 대상입니다(미해결 목록 #32, 판독서 `분석_산외교울산P2교각도면판독_2026-10-15_v0.1.02.md`).\n" "- 남은 개선 과제: 미해결 목록 #18(Rhino 실행 정체), #19(일반화), #22(울산 추정 사항), #23(Ramp-A 추정 사항), #24(옥성교), #26(입력 묶음 개편 마무리), #32(울산 P2), #33(운곡교 P4 도면 사슬) — `context-migration\\OPEN_미해결목록.md`") # ---- appendix rep("| 보호 템플릿 저장·갱신 (교각 이름 대신 폴더 경로도 가능) | `python tools\\make_template.py <교각 이름> <템플릿 이름> \"<형식 설명>\"` |", "| 보호 템플릿 저장·갱신 (교각 이름 대신 폴더 경로도 가능) | `python tools\\make_template.py <교각 이름> <템플릿 이름> \"<형식 설명>\"` |\n" "| 템플릿 변수 등급 파일 만들기 | `python tools\\make_variability.py [--force]` |\n" "| 템플릿 표 밖 치수 앵커 만들기 | `python tools\\make_anchors.py [--force]` |\n" "| 실제 교각의 앱 확인 분포 보기 (data를 건드리지 않음) | `python tools\\report_autocheck.py [교각 ...]` |\n" "| 앵커 후보를 표 값으로 교차 검증 | `python tools\\report_anchor_pier.py <교각> <템플릿> [--detail]` |\n" "| 시험 일괄 실행 (Rhino 없는 시험 `fast`, 실제 Rhino 시험 `rhino`) | `python tools\\run_all_tests.py ` |") rep("| 확정 | 묶음 값을 도면과 대조했다는 기록 |", "| 확정 | 묶음 값을 도면과 대조했다는 사람의 기록(앱은 확정하지 않음) |\n" "| 앱 확인 | 앱이 묶음 값을 도면 표·수량·고정 항목과 대조한 결과(일치·주의·불일치·근거 없음·해당 없음) |\n" "| 근거 보기 | 앱 확인 8종 검사의 결과와 비교 내용을 보는 화면 |\n" "| 변수 등급 | V1 값 · V2 목록 · V3 생성(화면 편집 불가) · F 고정(바꾸면 사유 필요) |\n" "| 템플릿 원본 그대로 | 템플릿을 복사한 뒤 한 번도 바뀌지 않은 묶음(새 도면 근거가 없는 상태) |\n" "| 표 밖 치수 | 표 3종에 없는 치수·EL. 같은 도면 틀이면 앵커로 후보를 찾음 |\n" "| 앵커 | 원본 교각이 값을 읽은 도면 문자의 위치(레이어·좌표) 기록 |\n" "| 후보 등급 A·B·C | A 여러 곳이 같게 읽힘 · B 한 곳 또는 일부 · C 근거 약함 |") DST.write_text(s, encoding="utf-8") print("written", DST.name, len(s.splitlines()), "lines")