Files
Pier_v1/DOC/01_기획/웹앱디자인시안/PRD.md
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

41 KiB

T형 교각 모델링 앱 화면 PRD — 「입력 묶음 확인·확정」 개편 중심

버전 수정일 수정자 주요 변경 내용 비고
v0.1.00 2026-10-15 심영표 신규 작성 — 기획서 v0.1.00의 기능을 구현하는 화면 13종의 요구사항 초안 [미확정]. 코드는 고치지 않음. 결정 대기 항목은 11장
v0.1.01 2026-10-15 심영표 11.1절 D3~D6을 권고안대로 결정 반영 사용자 지시 "권고안대로"
v0.1.02 2026-10-15 심영표 11.2절 UX1~UX6 결정 반영 사용자 지시(UX1 대체, UX2 변경, UX3 내장, UX4 승인, UX5 제외, UX6 제작)

상태: 초안 [미확정]. 근거는 DOC/01_기획/기획_입력묶음확인확정개편_2026-10-14_v0.1.00.md(이하 기획서)와 현행 앱(Code/교각모델링앱/web/)이다. 화면 디자인 규칙은 같은 폴더의 design.md가 정하고, 그 근거는 RAG/design system_v0.1.1(Prism)이다. [추론]은 확인이 필요한 판단이다.


1. 문서 개요

1.1 목적

기획서가 제안한 네 가지 기능을 사용자가 실제로 쓸 수 있는 화면 단위의 요구사항으로 바꾼다.

기획서 기능 이 문서의 화면
「2. 입력 묶음 확인·확정」 개편 (4.1) S03, S04, S10
앱이 수행하는 확인과 근거 제시 (4.3) S04, S05, S12
도면 표 밖 치수 찾기 (4.2) S07, S08
같은 템플릿에서 변수 가능과 불가능 구분 (4.4) S02, S06, S13

1.2 범위

포함 제외
교각 작업 화면의 1~4단계(도면·묶음·게이트·보고서) 중 변경이 필요한 화면 게이트 실행·승인의 동작 자체(그대로)
신규 화면 5종(S02, S05, S08, S10, S13)과 S04의 요약 띠 새 교각 형식의 생성기·검사기
화면 공통 어휘(상태·등급·출처)와 문안 모바일·태블릿 화면(로컬 데스크톱 전용)
수용 기준과 시험 방법 서버·엔진의 내부 구현(필요한 자료 계약만 6장에 기술)

1.3 사용자와 전제

구분 내용
주 사용자 담당자(교각 도면을 모델링하는 구조엔지니어). 한 번에 한 사람이 사용한다
보조 사용자 검토자(보고서와 확정 기록을 읽는 사람). 읽기 전용
환경 사용자 PC의 로컬 Flask 앱. 화면 폭 1280px 이상 데스크톱. 인터넷 없이 동작한다
전제 확정과 게이트 승인은 사람의 검토 기록이다. 앱은 어느 화면에서도 대신하지 않는다
언어 화면 문구는 한국어, 코드·API·키 이름은 영어

1.4 용어

기획서 1.3절의 용어(묶음·확인·확정·표 밖 치수·앵커)를 그대로 쓴다. 이 문서에서 추가하는 용어는 다음과 같다.

용어 뜻
근거 앱 확인 한 건이 어떤 두 값을 비교해 어떤 결과가 나왔는지 적은 한 문장과 그 출처
원본값 템플릿 원본 교각에서 복사한 뒤 새 도면 근거 없이 그대로인 값
변수 등급 V1 값 변수 · V2 목록 변수 · V3 생성 변수 · F 고정 (기획서 4.4)
작업대 교각 한 개의 작업 화면 전체(S03). 1~4단계를 한곳에서 진행한다

2. 제품 원칙

ID 원칙 화면에 미치는 영향
PP-1 앱은 확인하고, 사람은 확정한다. 앱 확인은 확정 기록을 만들지 않는다 확정 버튼은 사람의 이름 입력과 클릭으로만 동작한다. 어느 화면에도 자동 확정이 없다
PP-2 근거 없음을 숨기지 않는다. 억지 후보를 만들지 않는다 '근거 없음'은 일치와 같은 비중으로 표시하고 요약 띠에 개수를 낸다
PP-3 원본 값 그대로 확정되는 사고를 막는다. (기획서 P2) '원본값' 표시를 묶음 표에 상시 노출하고 일괄 확정에서 제외한다
PP-4 색만으로 구분하지 않는다. 모든 상태는 글자와 형태를 함께 쓴다(Prism BD-1)
PP-5 판정 위에 근거를 둔다. 결론을 먼저, 경위를 뒤에 각 화면의 첫 영역이 결론(요약 띠·판정)이고 근거는 이어서 둔다
PP-6 값을 바꾸면 이전 판단이 무효가 된다. (현행 해시 방식 유지) 앱 확인·사람 확정·게이트 승인 모두 '재확인 필요'를 같은 어휘로 표시한다

3. 화면 목록

3.1 화면 지도

S01 교각 목록 ──┬─ S02 새 교각 적합성 판별 ── (만들기)
               │
               └─ S03 교각 작업대 (1 도면 · 2 입력 묶음 · 3 게이트 · 4 보고서)
                    ├─ 1 도면 ── S09 도면 문자 검색·핸들 조회
                    ├─ 2 묶음 ── S04 입력 묶음 확인·확정
                    │             ├─ S05 근거 보기 ── S06 값 편집
                    │             ├─ S07 표 후보값·표 밖 치수 ── S08 도면 보기
                    │             └─ S10 일괄 확정 확인
                    ├─ 3 게이트 ── S11 게이트
                    └─ 4 보고서 ── S12 검토보고서 초안
S13 변수 등급 안내 (템플릿별, S01·S02·S06에서 진입)

3.2 화면 일람

ID 화면 구분 패턴 해결하는 문제(기획서) 단계
S01 교각 목록 변경 W5 P6 (템플릿 형식 설명 노출) A
S02 새 교각 적합성 판별 신규 W3 P6 A
S03 교각 작업대 변경 W1 + W2 P1~P3, P8 (진행 요약) A·B
S04 입력 묶음 확인·확정 변경(핵심) W5 P1, P2, P3, P5, P6, P8 A·B
S05 근거 보기 신규 W5 P3, P5, P7 B
S06 값 편집 변경 W3 P6, P7 A
S07 표 후보값·표 밖 치수 변경 W5 P4, P7 C
S08 도면 보기 신규 모달 P3, P4 C
S09 도면 문자 검색·핸들 조회 유지(토큰 적용) W3 + W5 — —
S10 일괄 확정 확인 신규 모달 P1 B
S11 게이트 유지 + 소변경 W2 앱 확인 요약 링크만 추가 D
S12 검토보고서 초안 변경 W4 8장에 앱 확인 요약 B·D
S13 변수 등급 안내 신규 W4 P6 A

단계는 기획서 6장의 A 분류·표시, B 앱 확인 엔진, C 표 밖 치수 탐색, D 통합·문서이다. 화면은 해당 단계가 끝나야 켜진다. 아직 구현되지 않은 단계의 열은 화면에 나타나지 않는다(빈 열을 두지 않는다).


4. 공통 요구사항

4.1 화면 골격

항목 요구
헤더 서비스명, 화면 ID, 교각 이름, 마지막 저장 시각, 실행 환경(로컬)을 한 줄에 둔다
좌측 레일 1280px 이상에서 교각 안의 단계 내비게이션(1 도면 · 2 입력 묶음 · 3 게이트 · 4 보고서)과 단계별 완료 표시를 둔다
본문 폭 연속 문장은 38em 이내. 표는 가로 스크롤을 허용한다
언어 안내·근거·오류 문장은 규정문체(평서 종결 ~한다)를 쓴다. 버튼 레이블은 동사로 시작하고 8자 이내로 쓴다
폭 1280px에서 표 외 가로 스크롤이 없다

4.2 상태 어휘 (전 화면 공통)

모든 상태는 글자 + 형태 + 색을 함께 쓴다. 형태와 색의 대응은 design.md 6장이 정한다.

어휘 값 표시 위치
앱 확인 일치 · 주의 · 불일치 · 근거 없음 · —(해당 없음) · 확인 안 함 S03, S04, S05, S10, S12
사람 확정 확정 · 미확정 · 변경됨 S03, S04, S05, S10, S12
변수 등급 V1 · V2 · V3 · F S04, S05, S06, S13
값 출처 표 · 표 밖 치수 · 판독 스크립트 · 원본값 · 사람 입력 S04, S05
신뢰 등급 A · B · C · 없음 S07, S08
게이트 판정 PASS · FAIL · 계획 FAIL · 재실행 필요 S03, S11, S12

규칙은 다음과 같다.

  • 상태 글자는 6자 이내다. 설명이 필요하면 상태 옆이 아니라 근거 문장(S05)에 쓴다.
  • 값이 바뀌면 앱 확인과 사람 확정이 함께 '변경됨 · 재확인 필요'가 된다. 표시 어휘를 두 개로 나누지 않는다.
  • '해당 없음'은 배지가 아니라 —로 쓴다. '확인 안 함'은 배지가 아니라 [확인 실행] 버튼으로 대신한다.

4.3 오류·빈 상태·진행 표시

상황 요구
오류 무엇이·왜·어떻게 3요소와 기호를 함께 쓴다. 예: "도면 색인이 없다. DWG 변환이 끝나지 않았다. 1단계에서 도면을 다시 올린다"
빈 상태 원인 + 다음 행동 한 문장(60자 이내). 예: "올린 도면이 없다. DWG 파일을 올린다"
진행 2초를 넘는 작업(앱 확인, 게이트)은 진행 표시를 보이고 aria-live로 낭독한다. 중요 결과를 토스트로만 알리지 않는다
파괴적 동작 삭제·승인 반려·형식 변경 확정은 확인 절차를 거친다

4.4 접근성·시험

항목 기준
표준 WCAG 2.2 AA를 목표로 한다
키보드 전 기능을 키보드만으로 조작한다. 탭 순서가 시각 순서와 같다
히트 영역 44px 이상. 인접 간격 8px 이상
표 caption, th scope, 고정 헤더. 상태 셀은 글자를 포함한다
색 그레이스케일로 인쇄해도 모든 상태를 구분할 수 있다

5. 화면별 요구사항

각 화면은 목적 → 진입 → 구성 → 행동 → 상태 → 수용 기준 순서로 쓴다. 문안은 예시이며 최종 문구는 디자인 시안에서 확정한다.

S01 교각 목록 (변경)

항목 내용
목적 교각을 고르고 새 교각을 만든다. 현행 화면의 기능을 유지한다
구성 ① 교각 표(교각·형식·만든 날·템플릿·진행 요약) ② 새 교각 영역 ③ 보호 템플릿 표
변경 교각 표에 진행 요약 열(예: 묶음 27 중 사람 확정 12, 게이트 3/5 승인)을 추가한다. 템플릿 표의 '형식 설명' 열에 변수 등급 보기 링크를 둔다
행동 [새 교각 만들기] → S02, 교각 이름 → S03, 삭제(확인 절차)
수용 기준 진행 요약이 실제 confirm.json·게이트 승인 기록과 100% 일치한다

S02 새 교각 적합성 판별 (신규)

항목 내용
목적 새 도면이 선택한 템플릿으로 모델링 가능한 형식인지 교각을 만들기 전에 판별한다 (기획서 4.4 체크리스트 6문항)
진입 S01의 [새 교각 만들기]
구성 ① 도면 올리기 ② 추천 순위(근거 표시, 맞는 것이 없으면 "판단 불가") ③ 이름·템플릿 선택(추천 1위 기본) ④ 6문항(추정 답 미리 채움, 사람이 변경) ⑤ 각도 값 확인(skew·받침 회전·기초 회전) ⑥ 결과 판정 영역 ⑦ [교각 만들기]
6문항 기초 형식(말뚝 유무) · 기둥 단면 형식 · 코핑 하면 형상 · 받침 배치 구조 · 철근 형상 종류 · 철근 생성 방식. 평면 사각·직각과 각도는 문항이 아니라 ⑤의 값으로 확인한다
추천 도면 단서로 문항 값을 추정하고 5개 템플릿과 일치 문항 수로 순위를 낸다. 단서와 도면 위치를 근거로 보인다. 추정은 확정이 아니며 사람이 바꾼다. 교각 폴더는 [교각 만들기] 시점에 생성한다
추정 범위 [구현 2026-10-15] 6문항 중 3문항만 추정한다: 기초 형식(도면의 '말뚝' 문자 유무) · 코핑 하면 형상(정면도 R 문자: 10 m 이상 곡선, 1~10 m 나팔형(약함), 없으면 직선 경사, 작은 R은 평면 모서리로 제외) · 받침 개수(ELEVATION TABLE 행 수). 기둥 단면·철근 형상·철근 생성 방식은 도면 문자로 판별할 근거가 없어 '미확인'으로 두고 사람이 답한다. 근거마다 신뢰(보통·약함)를 표시한다. 규칙은 9개 도면 세트로만 확인했다
행동 모든 문항에 답하면 판정이 나온다. 전부 '예'이면 "이 템플릿으로 만들 수 있다". 하나라도 '아니오'이면 "같은 템플릿으로 만들 수 없다. 가장 가까운 템플릿에 생성기·검사기를 추가해야 한다"를 보이고, 문항별로 어떤 부분이 다른지 적는다
상태 미응답 문항은 오류로 표시하고 어느 문항인지 이름으로 알린다
진행 허용 '아니오'가 있어도 [그래도 만들기]로 진행할 수 있다. 이 경우 교각 이름 옆과 S03·S04 상단에 형식 불일치 경고가 상시 표시된다(경고는 닫을 수 없다)
수용 기준 6문항의 답이 교각 메타에 저장된다. 경고 교각의 S03·S04에서 경고가 100% 보인다
구현 현황 전부 구현됨(2026-10-15): 추천 순위·근거, 6문항 답과 각도 값 3종(skew·받침 회전·기초 회전)을 pier.json의 fit_answers에 저장, 결과 판정 영역(답을 바꾸면 즉시 갱신, 불일치 시 버튼이 [그래도 만들기]로 바뀜), 불일치 항목을 fit_mismatch에 저장하고 교각의 모든 화면 상단에 닫을 수 없는 경고 표시(S03·S04 포함). 화면 시안: 시안/index.html의 #/new

S03 교각 작업대 (변경)

항목 내용
목적 교각 한 개의 진행 상태를 한눈에 보고 다음 단계로 간다
구성 ① 결론 띠(다음에 할 일 한 가지) ② 1~4단계 카드 ③ 단계별 상세 진입
결론 띠 현재 상태에서 가장 앞선 미완 단계를 말한다. 예: "필요 묶음 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3, 사람 확정 0. 2단계에서 근거를 확인한다"
1 도면 DWG 목록(DXF 변환 상태, 해시 앞 16자), 색인 문자 수, 도면 올리기, S09·S07 링크
2 입력 묶음 S04의 요약(4.2절 어휘별 개수)과 [입력 묶음 열기]
3 게이트 G1~G5 판정·승인 요약과 [게이트 열기]
4 보고서 초안 생성 여부와 [보고서 열기]
행동 단계 카드의 주 버튼은 화면에 하나(결론 띠가 가리키는 단계의 버튼)만 강조한다
상태 도면 없음 → 1단계만 활성 안내. 형식 불일치 경고가 있으면 결론 띠 위에 경고
수용 기준 결론 띠의 숫자가 S04 표의 집계와 100% 일치한다. 주 버튼이 화면에 1개다

S04 입력 묶음 확인·확정 (변경, 핵심)

기획서 4.1절의 화면이다.

항목 내용
목적 모든 입력 묶음의 앱 확인 결과와 사람 확정 상태를 보고, 근거를 확인한 뒤 확정한다
진입 S03의 2단계, 레일
구성 ① 요약 띠 ② 도구 줄(필터·확인 실행·일괄 확정) ③ 묶음 표 ④ 형식 불일치 경고(해당 시)

① 요약 띠

  • 한 줄: "필요 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0".
  • 각 숫자는 필터 버튼이다(누르면 표가 해당 상태만 보인다).
  • 마지막 앱 확인 시각과 검사 버전을 함께 보인다. 값이 바뀌어 오래된 결과가 있으면 "재확인 필요 N개"를 별도 표시한다.

③ 묶음 표 (열 정의)

열 내용 비고
묶음 파일·이름. 누르면 S05 이름은 영문 키와 한글 설명 병기
변수 등급 V1 · V2 · V3 · F S13 링크
값 출처 표 · 표 밖 치수 · 판독 스크립트 · 원본값 · 사람 입력 '원본값'은 강조(PP-3)
앱 확인 일치 · 주의 · 불일치 · 근거 없음 · — 누르면 S05의 해당 근거로
사람 확정 확정 · 미확정 · 변경됨, 확정자·시각
확인 개별 [확인 실행] 앱 확인 결과가 오래되었거나 없을 때
  • 정렬 기본값: 앱 확인이 '불일치 → 근거 없음 → 주의 → 일치' 순, 같은 상태는 파일 순. 사용자가 열 머리를 눌러 바꿀 수 있다.
  • '확정 불필요(참고)' 묶음은 표의 맨 끝 구분 영역으로 내리고 기본으로 접는다. 접힌 개수를 표시한다.
  • 숫자 열은 우측 정렬이며 등폭 숫자를 쓴다.

② 도구 줄

요소 동작
필터 앱 확인 상태·사람 확정 상태·변수 등급·출처로 좁힌다. 현재 적용 필터를 글자로 보인다
[전체 확인] 필요 묶음 전체의 앱 확인 C1~C8을 실행한다. 진행 표시 후 요약 띠를 갱신한다
[일치분 확정] 앱 확인이 '일치'이고 원본값이 아닌 묶음만 대상으로 S10을 연다 (기획서 D4)

상태

상태 동작
앱 확인 전 앱 확인 열이 모두 [확인 실행]. 요약 띠는 "앱 확인 전 — [전체 확인]을 실행한다"
확인 실행 중 행마다 진행 표시, 결과가 나오는 대로 갱신. 실행 중에도 표 읽기는 가능
원본값 묶음 앱 확인은 '근거 없음(원본값)'. 일괄 확정 대상에서 제외하고 행에 제외 사유를 쓴다
형식 불일치 경고 표 상단에 닫을 수 없는 경고 띠

수용 기준

# 기준
1 필수 묶음 100%에 앱 확인 상태(또는 [확인 실행])가 있다
2 '근거 없음'과 '원본값'이 숨겨지지 않는다
3 새로 복사한 교각(템플릿 직후)에서 값이 바뀌지 않은 묶음은 전부 '원본값'이다
4 표와 요약 띠의 개수가 일치한다
5 1280px 폭에서 표 외 가로 스크롤이 없다
6 키보드만으로 필터·행 열기·확인 실행·일괄 확정 진입이 가능하다

S05 근거 보기 (신규)

기획서 4.3절의 C1~C8 결과를 사람이 읽는 화면이다.

항목 내용
목적 한 묶음의 앱 확인 근거를 문장으로 읽고 확정 여부를 판단한다
진입 S04의 묶음 이름 또는 앱 확인 셀
패턴 W5 목록-상세. 좌측에 묶음 이동 목록(상태 포함), 우측에 상세

상세 구성

  1. 결론: 묶음 이름, 변수 등급, 앱 확인 결과 한 줄, 사람 확정 상태.
  2. 근거 표: C1~C8 각각의 검사 · 결과 · 근거 문장 · 도면 위치. 해당 없는 검사는 —.
  3. 값 비교: 현재 값과 후보 값 또는 템플릿 원본 값을 나란히 보인다(차이가 있는 항목만).
  4. 확정 영역: 확정자 이름, 사유(주의·불일치·근거 없음이면 필수), [확정].

근거 문장 규칙 (R1: "일치"를 "도면이 맞다"로 오해하지 않게)

  • 모든 근거는 '무엇과 무엇이 같은가'를 쓴다. 예: "기둥 지름 2,200은 도면 단면도(D1, 좌표 …)의 치수 문자 '2.200'과 같다."
  • 규칙으로 만든 후보와의 비교임을 밝힌다. 예: "이 결과는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다."
  • 검사에 쓴 방법의 독립성을 표기한다(예: C8 재생성 일치는 '독립성 낮음').

행동

행동 조건·동작
[도면 보기] 근거의 도면 위치마다 S08을 연다
[값 편집] S06으로 이동
[확정] 확정자 이름이 있고, 주의·불일치·근거 없음이면 사유가 있어야 한다. 조건이 모자라면 버튼은 활성인 채 오류 메시지를 보인다
이전·다음 묶음 목록의 순서로 이동. 확정하면 다음 미확정 묶음으로 이동하는 선택지를 준다

상태

상태 동작
앱 확인 전 근거 표 대신 [확인 실행]과 "이 묶음은 아직 확인하지 않았다"
값 변경됨 결론에 "값이 바뀌었다. 이전 확인과 확정이 무효가 되었다" 표시, [다시 확인]
V3 묶음 값 편집 대신 "판독 스크립트로 다시 만든다" 안내와 C8 결과
원본값 값 비교에 "템플릿 원본과 같다. 새 도면 근거가 없다"

수용 기준

# 기준
1 검사 8종 각각의 결과·문장·도면 위치가 보인다
2 '일치' 근거마다 비교한 두 값과 출처가 문장에 있다
3 사유 없는 '주의·불일치·근거 없음' 확정이 불가능하다(오류 메시지 표시)
4 확정 기록에는 사람이 입력한 이름만 들어가고, 앱 확인 서버 경로는 확정 기록을 쓰지 않는다

S06 값 편집 (변경)

항목 내용
목적 묶음의 값을 수정하고 저장한다. 현행 section 화면의 기능 유지
변경 ① 상단에 변수 등급 안내(이 묶음에서 바꿔도 되는 값과 안 되는 값) ② F 항목 편집 시 경고 ③ V3 묶음은 편집 차단 ④ 저장 뒤 앱 확인 결과가 무효가 됨을 알림 ⑤ [저장된 값으로 확정] 버튼 제거(확정은 S05·S10에서만)
F 항목 필드 수준 등급이 F이면 편집 영역에 "형식을 정의하는 값이다. 바꾸면 같은 템플릿이 아니다" 경고. 저장하려면 사유를 입력해야 한다(기획서 D3 권고). 저장하면 묶음에 '형식 변경' 표시가 붙고 S03에 새 템플릿 필요 안내가 뜬다
V3 묶음 편집창 대신 읽기 전용 요약(개수·크기·해시)과 "판독 스크립트로 다시 만든다" 안내, 스크립트 경로
입력 보조 치수 사슬 입력(22@120=2.640)을 지원하는 필드는 합계 검산 결과를 즉시 보인다
수용 기준 V3 묶음에서 편집 영역이 없다. F 편집은 사유 없이 저장되지 않는다. 저장 직후 S04 상태가 '변경됨'으로 바뀐다

S07 표 후보값·표 밖 치수 (변경)

기획서 4.2절의 화면이다. 현행 candidates 화면을 확장한다.

항목 내용
목적 도면 표와 표 밖 치수에서 찾은 후보를 현재 값과 비교하고, 사람이 골라 반영한다
구성 ① 요약 띠(표 후보 N · 표 밖 치수 후보 N(A·B·C 개수) · 다름 N) ② 후보 비교 표 ③ 인식한 표 ④ EL 표기 목록
후보 비교 표 열 반영(선택) · 대상 · 현재 값 · 후보 값 · 구분(표/표 밖 치수) · 상태(같음/다름) · 신뢰 등급 · 도면 위치 · 근거
표 밖 치수 구역 규칙 R1~R6 중 어느 규칙이 찾았는지 '규칙' 열에 쓴다. 신뢰 등급 A·B·C·없음을 병기한다
행동 행 선택 → [선택한 후보값 반영]. 등급 C는 반영 시 사유 필수. 등급 '없음'은 후보 행이 아니라 "근거 없음" 목록에 따로 나열하고 반영 버튼이 없다
params·expected 분리 한 후보가 params와 expected 양쪽에 반영될 수 있는 경우, 반영 대상 줄을 둘 중 하나씩 고르게 하고 둘을 함께 고르면 경고한다(기획서 P7)
상태 후보 0건 → "후보가 없다. 도면의 틀이 앱의 규칙과 다르면 정상이다. 문자 검색(S09)으로 직접 찾는다"
수용 기준 자동 반영이 없다. 모든 반영은 사람이 선택한 행에만 적용된다. 등급 '없음'이 후보로 둔갑하지 않는다

S08 도면 보기 (신규)

항목 내용
목적 근거·후보의 도면 위치를 확대 이미지로 확인한다 (dxftools.render와 같은 이미지)
형태 모달. 대상 좌표 주변 확대 이미지에 대상 위치를 표시한다
구성 이미지, 캡션(도면 이름·뷰·좌표·핸들), 확대·축소·이동, 인접 후보로 이동
행동 Esc로 닫는다. 닫으면 호출한 행으로 포커스가 돌아간다
접근성 이미지에 대체 텍스트로 위치·객체 설명을 쓴다. 이동·확대는 버튼과 방향키 둘 다 지원한다
수용 기준 모든 이미지에 캡션이 있다. 모달 안에 모달이 열리지 않는다

S09 도면 문자 검색·핸들 조회 (유지)

현행 기능을 유지한다. 디자인 토큰만 새 규칙으로 바꾼다. 검색 결과 행에 [후보로 보내기]는 두지 않는다(자동 반영 금지, PP-1).

S10 일괄 확정 확인 (신규)

기획서 4.1절 D4의 화면이다.

항목 내용
목적 앱 확인이 '일치'인 묶음을, 근거를 확인한 뒤 한꺼번에 확정한다
형태 모달
구성 ① 결론("일치 묶음 19개를 확정한다. 주의·불일치·근거 없음·원본값 8개는 대상이 아니다") ② 근거표(묶음·근거 한 줄·출처) ③ 확정자 이름 ④ [확정] ⑤ [취소]
근거표 열람 조건 근거표를 끝까지 보지 않으면 [확정]이 오류를 낸다. 오류는 "근거표를 먼저 확인한다. 일치 묶음의 근거를 읽지 않으면 확정할 수 없다. 근거표를 끝까지 내린다"로 알린다 (비활성화하지 않고 오류 메시지를 낸다)
제외 목록 대상에서 빠진 묶음과 사유(주의·불일치·근거 없음·원본값)를 같은 모달에서 보여 준다. 누르면 S05로 이동
완료 확정 기록 개수와 확정자·시각을 결과로 보인다. 토스트만으로 알리지 않고 S04 요약 띠에도 반영한다
수용 기준 원본값·주의·불일치·근거 없음 묶음이 대상에 0건이다. 근거표를 읽지 않은 상태에서는 확정되지 않는다. 확정자 이름이 비어 있으면 확정되지 않는다

S11 게이트 (유지 + 소변경)

현행 기능을 유지한다. 변경은 두 가지이다.

  • 게이트 실행 조건 문구에 "필요 묶음이 사람 확정됨" 외에 앱 확인 요약 링크(S04)를 추가한다. 앱 확인은 조건이 아니라 판단 자료임을 문구로 밝힌다.
  • 판정 표시를 4.2절 게이트 어휘로 통일한다.

S12 검토보고서 초안 (변경)

항목 내용
변경 보고서 8장(검증 방법)에 앱 확인 결과 요약을 넣는다
요약 내용 묶음별 앱 확인 상태·근거 한 줄·신뢰 등급, 사람 확정자·시각, 확정 시점의 앱 확인 검사 버전, 근거 없음·원본값 목록
화면 생성한 초안을 화면에서 열람하고 MD·PDF를 받는다. 앱 확인 요약이 어느 시점 결과인지 표기한다
수용 기준 보고서의 요약 숫자가 S04 요약 띠와 같다. 값이 바뀐 뒤 만든 초안과 그 이전 초안을 구분한다

S13 변수 등급 안내 (신규)

항목 내용
목적 한 템플릿에서 바꿔도 되는 값과 바꾸면 안 되는 값을 문서처럼 열람한다 (기획서 4.4, 부록 A)
패턴 W4 문서. 좌측 목차(묶음), 우측 본문
구성 ① 등급 4종 정의 ② 묶음별 등급 표 ③ "바꿔도 되는가" 예시 표 ④ 새 도면 판별 체크리스트 요약(S02 링크)
진입 S01 템플릿 표, S02 템플릿 선택, S04·S06의 등급 배지
수용 기준 4개 보호 템플릿 모두에 등급 표가 있다. 등급 배지에서 해당 묶음 위치로 이동한다

6. 자료 계약 (화면이 읽고 쓰는 파일)

화면 구현에 필요한 자료만 적는다. 내부 구현은 기획서 4.3~4.4절과 엔진 설계를 따른다.

파일 위치 내용 쓰는 주체 읽는 화면
confirm.json 교각 폴더 사람 확정 기록(확정자·시각·해시) 사람 조작만 S03~S05, S10, S12
autocheck.json 교각 폴더 묶음 해시·앱 확인 결과·근거 목록·검사 버전·시각 앱 확인 엔진 S03~S05, S10, S12
variability.json 템플릿 폴더 묶음·필드 경로 → 변수 등급 템플릿 담당자 S04~S06, S13
앵커 템플릿 폴더 값이 도면의 어디서 읽혔는지 기록 판독 스크립트 S07, S08
교각 메타 교각 폴더 적합성 6문항 답, 형식 불일치 여부 S02 S03, S04

autocheck.json의 근거 항목은 다음 필드를 가진다: check(C1~C8), result(match / caution / mismatch / no_basis / n/a), sentence(근거 문장), refs(도면 이름·뷰·좌표·핸들 또는 표 행), confidence(A / B / C / none), independence(high / low).


7. 비기능 요구

항목 요구
성능 필요 묶음 전체의 앱 확인(C1~C8, 도면 재대조 제외)을 10초 이내에 마친다 [추론]. 도면 재대조(C2)가 포함되면 진행 표시로 대신한다
신뢰 앱 확인 서버 경로는 confirm.json을 쓰지 않는다. 자동화 시험이 이를 확인한다
보호 시험은 실제 교각 데이터가 아닌 시험 폴더에서만 확정 흐름을 실행한다 (OPEN #25 사례)
이력 앱 확인 결과는 검사 버전과 시각을 남긴다. 규칙이 바뀌면 이전 결과에 '이전 버전' 표시를 붙인다
호환 기존 confirm.json·params.json·expected.json을 바꾸지 않는다. 새 파일을 추가하는 방식이다
테마 라이트를 기본으로 하고 다크 토큰을 같이 정의한다. 다크 전수 시험은 사용자 요청 시 수행한다 [추론]

8. 수용 기준 요약 (기획서 6장 승계)

# 기준 시험 방법
1 모든 필수 묶음에 앱 확인 상태가 있다 5개 교각 데이터에서 S04 행 전수 확인
2 '근거 없음'을 숨기지 않는다 근거 없음 묶음이 표·요약 띠·S10 제외 목록에 모두 나온다
3 거짓 일치 0, 거짓 불일치 0 4개 도면 기준. 값을 일부러 바꾼 음성 시험에서 '불일치'가 나온다
4 앱이 확정 기록을 만들지 않는다 앱 확인 실행 전후 confirm.json 해시 불변
5 기존 시험 FAIL 0 기존 회귀 시험 일괄
6 화면 접근성 모든 상태 셀에 글자 100%, 1280px 가로 스크롤 0, 키보드 전 기능, axe 위반 0
7 디자인 시스템 적합 design.md 11장 점검표 전항

9. 단계와 화면의 대응

단계 켜지는 화면·기능 선행
A 분류·표시 S01 진행 요약, S02, S03 결론 띠(확정 기준), S04의 변수 등급·값 출처·원본값, S06 등급 안내·V3 차단, S13 변수 등급 파일 작성
B 앱 확인 엔진 S04 앱 확인 열·요약 띠·전체 확인, S05, S10, S12 A
C 표 밖 치수 탐색 S07 표 밖 치수 구역, S08, 앵커 B 검증 후
D 통합·문서 S11 문구, 사용설명서 개정, 회귀 A~C

10. 리스크

# 리스크 대응
R1 사용자가 '일치'를 '도면이 맞다'로 읽는다 S05 근거 문장에 비교 대상을 쓰고 한계 문장을 고정으로 넣는다
R2 요약 띠·표 숫자가 서로 어긋난다 같은 집계 함수를 쓰고 수용 기준 4로 시험한다
R3 일괄 확정이 다시 도장이 된다 S10 근거표 열람 조건과 제외 목록, 사유 필수
R4 상태 어휘가 늘어나 판독이 어려워진다 4.2절에서 어휘를 고정하고 배지는 열마다 4종 이내
R5 디자인 시스템에 없는 요소가 필요하다 design.md 10장의 공백 목록으로 제안하고 승인 전에는 조합 컴포넌트로 대신한다

11. 결정 사항

11.1 기획서에서 승계한 결정 (기획서 7.2절)

# 내용 상태
D1 확정 주체: 앱 확인 + 사람 확정 결정 2026-10-14
D2 표 밖 치수 탐색: 규칙 + 템플릿 앵커 결정 2026-10-14
D3 F(고정) 항목 편집 처리 결정 2026-10-15 / 심영표: 권고안 — 경고 + 사유 입력, 차단은 생성기 개발자 모드에서만
D4 일괄 확정 조건 결정 2026-10-15 / 심영표: 권고안 — '일치' 묶음만, 근거표 열람 뒤 확정
D5 착수 범위·순서 결정 2026-10-15 / 심영표: 권고안 — A → B 먼저, C는 B 검증 뒤
D6 앵커 소급 추출 결정 2026-10-15 / 심영표: 권고안 — 옥성교·Ramp-A교부터, 나머지는 필요 시. S07·S08에만 영향

11.2 화면 설계에서 새로 생긴 결정

# 내용 상태
UX1 디자인 시스템 적용: 기존 R8 기준(맑은 고딕 14px·흰 배경·철근 팔레트 판정색)을 Prism 앱 프로파일(design.md)로 대체한다 결정 2026-10-15 / 심영표: 대체. 디자인지침_경로.md 갱신 완료
UX2 판정 색: Prism 상태색을 쓴다. 철근 팔레트는 Rhino 모델과 범례에만 둔다 결정 2026-10-15 / 심영표: 변경
UX3 서체: Pretendard를 앱에 내장한다 결정 2026-10-15 / 심영표: 내장. 파일을 web/static/fonts/PretendardVariable.woff2에 배치(OFL). 적용은 A단계 구현 시
UX4 상태 마커(●▲■◆◇) 도형 사용 결정 2026-10-15 / 심영표: 승인
UX5 다크 테마 시험 결정 2026-10-15 / 심영표: 제외. 토큰은 정의하되 시험하지 않는다
UX6 핵심 화면 HTML 시안 결정 2026-10-15 / 심영표: 제작. 시안/index.html (S04·S05·S07·S10 동작 시안)

부록 A. 핵심 화면 와이어프레임 (정보 구조, 외형 아님)

S04 입력 묶음 확인·확정 (1280px)

┌ 헤더 ──────────────────────────────────────────────────────────────────────────────┐
│ 서비스명 · S04 · 옥성교P1 · 저장 14:32 · 로컬                                      │
├ 레일 ┬─────────────────────────────────────────────────────────────────────────────┤
│ 1 도면 ✓│ 2. 입력 묶음 확인·확정                                                  │
│ 2 묶음 ●│ ┌ 요약 띠 ─────────────────────────────────────────────────────────────┐ │
│ 3 게이트│ │ 필요 27개 중  일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0 │ │
│ 4 보고서│ │ 마지막 앱 확인 14:30 · 검사 v0.1 · 재확인 필요 0                      │ │
│         │ └──────────────────────────────────────────────────────────────────────┘ │
│         │ 필터: [전체 ▾]  [전체 확인]                  [일치분 확정]  (주 버튼 1개)  │
│         │ ┌────────────────────────────────────────────────────────────────────┐ │
│         │ │묶음            │등급│출처    │앱 확인     │사람 확정  │확인       │ │
│         │ │G4.stirrups     │V2 │표 밖치수│● 일치      │미확정     │            │ │
│         │ │footing         │V1 │원본값  │◆ 근거 없음 │미확정     │[확인 실행] │ │
│         │ │coping_rebar    │V3 │스크립트│▲ 주의      │미확정     │            │ │
│         │ │…                                                                   │ │
│         │ └────────────────────────────────────────────────────────────────────┘ │
│         │ ▸ 확정 불필요(참고) 5개 (접힘)                                         │
└─────────┴─────────────────────────────────────────────────────────────────────────┘

S05 근거 보기 (1280px)

├ 레일 ┬───────────────┬────────────────────────────────────────────────────────────┤
│      │ 묶음 이동      │ G4.stirrups   V2 목록 변수   앱 확인: ● 일치   사람: 미확정 │
│      │ ● G4.stirrups  │ ┌ 근거 표 ──────────────────────────────────────────────┐ │
│      │ ▲ coping_rebar │ │ C1 출처   ● 일치  표 밖 치수(D1 정면도) …   [도면 보기] │ │
│      │ ◆ footing      │ │ C4 내부   ● 일치  사슬 합 9,000 = 전체 치수 9,000       │ │
│      │ …              │ │ C5 독립   ● 일치  params와 expected의 근거가 다르다     │ │
│      │                │ └────────────────────────────────────────────────────────┘ │
│      │                │ 이 결과는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다. │
│      │                │ ┌ 값 비교 ┐ ┌ 확정 ─────────────────────────────────────┐ │
│      │                │ │ …       │ │ 확정자 [          ] 사유 [          ] [확정] │ │
│      │                │ └─────────┘ └────────────────────────────────────────────┘ │
└──────┴───────────────┴────────────────────────────────────────────────────────────┘

S10 일괄 확정 확인 (모달)

┌ 일치 묶음 확정 ─────────────────────────────────────────────┐
│ 일치 19개를 확정한다. 주의 4 · 불일치 1 · 근거 없음 3 · 원본값 1은 대상이 아니다. │
│ ┌ 근거표 (끝까지 내려 확인) ─────────────────────────────┐  │
│ │ G4.stirrups   사슬 합 9,000 = 전체 치수 9,000            │  │
│ │ …                                                      │  │
│ └────────────────────────────────────────────────────────┘  │
│ ▸ 제외된 묶음 9개 (누르면 근거 보기)                        │
│ 확정자 [            ]                                        │
│                               [취소]   [확정]                │
└──────────────────────────────────────────────────────────────┘

S07 표 후보값·표 밖 치수

요약: 표 후보 14 · 표 밖 치수 후보 31 (A 18 · B 9 · C 4) · 다름 12 · 근거 없음 3
┌────────────────────────────────────────────────────────────────────────────────┐
│반영│대상           │현재     │후보     │구분     │상태│등급│도면 위치          │근거 │
│ ☐ │footing.height │2,500   │2,500   │표       │같음│ —  │D1 표 행 3         │보기 │
│ ☑ │coping.z_tip   │31,232  │31,231.5│표 밖 치수│다름│ B  │D1 정면 (225817,…) │보기 │
└────────────────────────────────────────────────────────────────────────────────┘
[선택한 후보값 반영]     근거 없음 3개 ▸ (후보 없음, 문자 검색으로 직접 찾는다)

부록 B. 근거 파일

구분 경로
기획서 DOC/01_기획/기획_입력묶음확인확정개편_2026-10-14_v0.1.00.md
디자인 시스템 RAG/design system_v0.1.1/ (Design.md, design.tokens.json, design.components.md, webapp/module.webapp.md)
현행 화면 Code/교각모델링앱/web/templates/ (index, pier, section, candidates, search, gates)
화면 설계 규칙 DOC/01_기획/웹앱디자인시안/design.md
디자인 지침 기록 context-migration/디자인지침_경로.md (R8)