현장실측 (FS) — 와이어프레임 (웹)

위치: 프로젝트 상세(SCR-PM-016) › 실측 하위 (/projects/:projectNo/field-survey/*) — 독립 영역 아님. 근거: DE22-1 화면설계서 §11 FS 현장실측(웹) v0.1-r2 · SCR-FS-001~002 · 정본은 vault md

← 프로젝트 상세 ← 와이어프레임 목록
본격 명세 전 placeholder(v0.1-r2)입니다. §11은 아직 ui-sketch·필드·상태 variant(loading·empty·error)가 정의돼 있지 않습니다. 아래 배치는 SCR 매트릭스의 비고(대시보드 = 측정 진행률·완료 영역·이상 알림 / 검토 = master-detail·검증·승인·내보내기)와 관련 요구(FR-FS-007/008/012)만 근거로 한 제안이며, 구체 필드·컬럼·수치·상태값은 (미확정)으로 표기합니다.
진입 구조. FS 웹 화면은 모두 /projects/:projectNo/field-survey/* 하위 경로로, SCR-PM-016 프로젝트 상세의 하위 진입입니다(대시보드도 프로젝트별). 현장실측은 측정에 그치지 않고 발주 정밀화의 입력 공급자입니다 — 실측 치수·수량이 견적설계 데이터를 갱신하고 OM 발주량이 재평가됩니다(본격 명세 시 1급 요구). 모바일(Android) 화면은 fs-app.html(§12)로 분리돼 있습니다.

화면 인덱스 (2 프레임 · SCR 2종)

SCR-FS-001현장 현황 대시보드 (프로젝트별)/projects/:projectNo/field-survey/dashboard
프로젝트별 측정 진행률·완료 영역·이상 알림을 한눈에 조회한다 (FR-FS-007). 권한 ROLE_FS_VIEWER (잠정).

진입 — SCR-PM-016 프로젝트 상세 [실측] 탭 / 현장실측 하위 탭 중 [현황 대시보드]가 기본 진입

  1. 현장실측 하위 탭 — [현황 대시보드]/[실측 데이터 검토] 전환. 현재 프레임은 대시보드 탭이 활성 상태다.
  2. 측정 진행률 KPI 타일 — 전체 진행률(%)·완료 개소·측정중·실측 대기 4개 지표. 완료/전체 개소 값에서 파생 산출한다(FR-FS-007).
  3. 진행률 바 — KPI의 전체 진행률(%)을 막대로 시각화한다.
  4. 완료 영역 표(섹션·동별) — 동(섹션)별 완료 개소/전체 개소/진행률/최근 측정일시. 집계 단위(동/개소)와 표·차트 형태는 §11 TODO(ui-sketch)에서 확정한다.
  5. 이상 알림 — 편차 초과·재측정 필요 등 알림 목록. 판정 기준은 항목 종류별 허용오차다(DE24-1 §5.4.31). 알림이 없을 때는 「허용오차를 넘은 측정 항목이 아직 없습니다」로 적는다(#1225).
관련 API Swagger UI ↗
  • GET/api/pm/projects/{projectNo} — 상단 appbar 브레드크럼·fgptitle 의 프로젝트명·현황 조회
  • GET/api/search — 상단 CMD+K 전역 통합검색
  • GET/api/fs/projects/{projectId}/dashboard — 측정 진행률·완료/측정중/대기 개소 KPI (IF-FS-DASH-001 §5.4.30)
  • GET/api/fs/projects/{projectId}/dashboard — 동(섹션)별 완료 개소·진행률·최근 측정일시 표는 같은 호출의 sections[] 로 받는다 (IF-FS-DASH-001 §5.4.30)
  • GET/api/fs/projects/{projectId}/dashboard — 편차 초과·재측정 필요 알림은 같은 호출의 alerts[] 로 받는다. 편차 초과 판정(R-FS-MEAS)은 서버가 측정을 저장할 때 하므로 이 목록은 실제로 찬다 (#946 — IF-FS-DASH-001 §5.4.30)
프로젝트  ›  A아파트 창호공사  ›  현장실측  ›  대시보드
CMD+K 검색
A아파트 창호공사목록으로 돌아가기
타이틀 · 뒤로가기
현황 대시보드
현장실측 하위 탭
1현황 대시보드실측 데이터 검토
2측정 진행률 (KPI · FR-FS-007)
전체 진행률
60% (예시)
완료 개소 / 전체 개소 파생
완료 개소
24 (예시)
측정중
6 (예시)
실측 대기
10 (예시)
3진행률 바 60% (예시)
4완료 영역 (섹션·동별 · 예시 배치)
동/섹션 (단위 미확정)완료 개소전체 개소진행률최근 측정
AW01동 (예시)142070%07/06 14:20
AW02동 (예시)102050%07/05 09:10
컬럼·집계 단위(동/개소)와 표·차트 형태는 §11 TODO(ui-sketch)에서 확정 예정. 위 수치는 배치 검토용 예시(실측값 아님).
5이상 알림
!AW03-2 (예시) — 편차 12mm 초과(허용 5mm), 재측정 필요. 알림 종류·기준은 미확정(FR-FS-007).
알림이 없을 때 표시할 빈 상태는 §11 상태 variant TODO에서 정의 예정.
미확정. 카드 구성·차트 종류·KPI 필드·상태 variant(loading·empty·error)는 §11 본격 명세(S6~S10)에서 확정한다. 프로젝트 통합(전체) 대시보드 여부도 추후 결정.
SCR-FS-002실측 데이터 검토/projects/:projectNo/field-survey/measurements[/:measurementId]
모바일에서 올라온(push) 실측 데이터를 검증·승인하고 내보낸다. master-detail (FR-FS-008, FR-FS-012). 권한 ROLE_FS_REVIEWER (잠정).

진입 — SCR-PM-016 프로젝트 상세 [실측] 탭 / 현장실측 하위 탭 [실측 데이터 검토] 전환 (또는 SCR-FS-001 대시보드에서 하위 탭 전환)

  1. 검색·상태 필터 — 개소 코드·이름 검색 입력과 상태 드롭다운(전체/검토대기/승인/반려 등, 값 미확정)을 조합해 [검색] 클릭 시 master 목록을 다시 조회한다. 검색은 개소만 찾는다 — 서버 keyword 가 개소 코드·이름 부분일치라 측정자는 걸리지 않는다(2026-08-18 바로잡음, #1021).
  2. 내보내기 — 필터링된 실측 데이터를 파일로 내보낸다. 대상 포맷·범위는 미확정.
  3. 측정 목록(master 테이블) — 개소·측정일시·상태 컬럼. 행 클릭 시 우측 상세 패널이 갱신되고, 상태값(검토대기·승인 등)은 배지로 표시한다(미확정).
  4. 측정 치수 표(detail) — 선택 개소의 라벨별 도면값·실측값·편차 3열. 편차 표시 규칙(강조·임계값)은 미확정.
  5. 사진 · 메모 — 모바일에서 올라온 실측 사진 썸네일(빈 슬롯 포함)과 읽기 전용 메모 영역. 축소본은 잘라 채우지 않고 통째로 담아 보이며, 누르면 겹창에 원본이 뜬다(#1457 확정 — 좌우 넘기기·「사진 N / M」 셈·붙은 자리 캡션·[닫기], 지우기는 두지 않는다).
  6. 치수 표의 「사진」 열 (#1457 신설) — 항목 한 줄마다 몇 장이 붙었는지 📷N 으로 보인다. 0장도 켜 둔다. 종전에는 이 열이 없어, 사진이 매달려 있어도 표가 아무 말을 하지 않아 검토자가 우연히 줄을 눌러야 발견했다 — 현장에서 찍는 쪽(§12 SCR-FSM-004)은 줄마다 보는데 그것을 보고 판단해야 하는 쪽이 못 보던 자리다. 값은 dims[].attachmentCount 로 이미 응답에 실려 온다(새 서버 작업 없음). 도면 위치 표식(📍)은 #947 몫이라 여기서 다루지 않는다.
  7. 정합 점검 — dim_values(JSON)와 ESTIMATE_LINE.dim_values(도면값)를 대조한다. 표시·경고 방식은 §11 TODO에서 확정한다.
  8. 검토 액션 — [반려]/[검증]/[승인] 버튼. 라벨·상태값(전체/검토대기/승인/반려 등)은 §11 TODO에서 확정한다. 승인 시 견적/발주 재평가로 이어지는 연동 규칙은 §11 본격 명세에서 확정한다(FR-FS-012).
  9. 내측·외측 두 벌 나란히 보기 (#842) — 앱이 치수를 안쪽·바깥쪽 두 벌로 올린다. 두 쪽을 좌우 열로 갈라 놓는다 — 위아래로 늘어놓으면 검토자가 짝을 눈으로 찾아야 한다. 도면값은 안팎 구분 없이 한 벌이고 두 쪽이 그것을 나눠 쓴다. 「안팎 차」 열은 화면이 계산해 보여 주며 저장하지 않는다. 머리말에 그 개소의 재는 쪽(내측만·외측만·둘 다)을 함께 적어 「둘 다 재기로 했는데 한쪽이 아직 안 왔다」와 「애초에 한쪽만 재기로 했다」를 가른다 — 다른 상태인데 줄만 보아서는 구별되지 않는다.
  10. 어느 쪽을 쓸지 채택 (#842·#843) — 채택은 [검증] 단계에서 개소 단위로 한 번 고른다(fs_measurement.adopted_side). 항목마다 다른 쪽을 고르면 한 창호의 폭은 내측·높이는 외측이 되어 제작 치수가 서로 다른 면에서 나온다. 「둘 다」로 잰 개소는 채택 없이 승인되지 않는다 — 두 값이 갈린 채 제조로 넘어가면 절단 재계산이 어느 값을 쓸지 알 수 없다. 치수 한 줄을 고르면 오른쪽에 도면 위 찍은 자리·항목 머리(쪽 배지)·값 세 줄·그 항목에 붙은 사진·반대쪽 값이 뜬다(2026-08-07 — 종전 「그림틀·부위」에서 바뀌었다). 목록에는 「사진 없는 편차 초과 항목」 필터를 둔다 — 앱이 사진을 권하기만 하고 막지 않으므로 그런 건이 생기고, 강제는 여기서 사람 판단으로 건다.
  11. 특이사항 태그로 거르기 (#847) — 앱이 사진·메모에 붙인 「손상」·「불균형」·「기타」 가운데 하나를 골라 그 태그가 붙은 개소만 남긴다(fs_attachment.issue_tag, 조회 조건 attachIssueTag). 검토자가 급한 것부터 골라내는 동선이다. 태그를 응답에 담기만 하고 거르지 못하면 검토자가 사진을 하나씩 열어 보아야 해서 태그를 붙인 값어치가 사라진다. 목록 행에는 태그를 따로 그리지 않는다 — 걸러서 상세로 들어가 보는 동선이라 「사진 없는 편차 초과 항목」 필터와 같은 방식이다. 상세의 사진·메모에는 태그가 함께 실린다. 태그는 앱에서 필수가 아니라 안 붙은 사진도 있고, 그것은 거르개에 걸리지 않을 뿐 목록에 그대로 나온다.
  12. 개소·기간 거르개 (#1021, 2026-08-18) — 개소 고르개는 여러 개소를 함께 고른다(두 주소가 개소를 목록으로 받는다). 기간은 시작일·종료일 두 칸이고 yyyy-MM-dd 로 보내며, 재는 기준은 측정 시각(measured_at)이고 끝 날짜는 그날을 온전히 담는다. 두 칸은 목록 조회와 내보내기에 같은 값으로 실린다 — 화면에서 본 범위가 내려받는 파일에 그대로 담겨야 하기 때문이다. 화면이 받은 결과를 다시 거르는 방식은 쓰지 않는다(목록이 쪽으로 나뉘어 와 지금 쪽만 걸러진다). 시작일이 종료일보다 뒤면 화면이 먼저 막는다. 개소 후보는 GET /api/fs/projects/{projectId}/areas(IF-FS-AREA-001 §5.4.5)에서 나눠 오므로 다 받을 때까지 이어 받아 합친다.
관련 API Swagger UI ↗
  • GET/api/pm/projects/{projectNo} — 상단 appbar 브레드크럼·fgptitle 의 프로젝트명 조회
  • GET/api/search — 상단 CMD+K 전역 통합검색
  • GET/api/es/estimate-lines/{lineId} — 정합 점검 영역에서 ESTIMATE_LINE.dim_values(도면값) 대조용 참조 — FS 전용 연동은 미확정이나 기존 ES API로 값 조회 가능
  • GET/api/fs/projects/{projectId}/measurements — master 목록(개소·측정일시·상태)·검색·상태 필터. unphotographedFlaggedOnly·attachIssueTag(DAMAGE·IMBALANCE·OTHER)·areaIds·dateFrom·dateTo 거르개가 화면에 있고(개소·기간 셋은 #1021), sideMode 는 통신 계층만 받쳐 두고 화면 거르개로는 아직 내놓지 않았다 (IF-FS-MEAS-002 §5.4.31)
  • GET/api/fs/projects/{projectId}/areas — 개소 고르개의 후보 목록. 서버가 나눠 주므로(한 쪽 기본 200개) 다 받을 때까지 이어 받아 합친다 (IF-FS-AREA-001 §5.4.5)
  • GET/api/fs/measurements/{measurementId} — detail 패널의 측정 치수(도면값/실측값/편차)·쪽(내측·외측)·부위·항목별 사진 수·사진·메모(issueTag 특이사항 갈래와 사진 한 줄 설명 포함)·회차 이력. 사진은 응답의 fileUrl 이 볼 수 있는 주소가 아니라 자리와 한 줄 설명만 보인다 (IF-FS-MEAS-002 §5.4.31)
  • POST/api/fs/measurements/{measurementId}/verify — [검증] 버튼. SUBMITTED → VALIDATED. 「둘 다」로 잰 개소는 여기서 adoptedSide(내측·외측)를 함께 보낸다 (IF-FS-REVIEW-001 §5.4.32)
  • POST/api/fs/measurements/{measurementId}/approve — [승인] 버튼. VALIDATED 에서만 누를 수 있고, 「둘 다」로 잰 개소는 채택이 비면 422 로 막힌다. 단추는 검토 역할(ROLE_FS_REVIEWER)에게만 보인다 (IF-FS-REVIEW-001 §5.4.32, FR-FS-013)
  • POST/api/fs/measurements/{measurementId}/reject — [반려] 버튼. 사유 필수(1~500자), 개소를 재측정으로 되돌린다 (IF-FS-REVIEW-001 §5.4.32)
  • GET/api/fs/measurements/export — [↧ 내보내기] 버튼과 형식 고르개 동작. projectIdformat(csv·pdf)이 필수라 단추 옆에 형식을 고르는 자리를 둔다. 서버가 받는 거르개는 상태(status)·개소(areaIds)·기간(dateFrom·dateTo) 넷이고(#1021), 나머지 셋(개소 검색어·특이사항 태그·사진 없는 편차 초과만)이 걸려 있으면 바 아래에 그 이름을 적는다 (IF-FS-EXPORT-001 §5.9.3)
  • GET/api/fs/measurements/{measurementId}/reconcile — 도면값↔실측값↔견적값 대조(읽기 전용, 견적 원본 불변) (IF-FS-RECONCILE-001 §5.4.33)
프로젝트  ›  A아파트 창호공사  ›  현장실측  ›  실측 데이터 검토
CMD+K 검색
A아파트 창호공사목록으로 돌아가기
현장실측 하위 탭
현황 대시보드실측 데이터 검토
필터바 · 액션
1개소 코드·이름 검색 상태 전체 10특이사항 태그 전체 11개소 전체 (여러 개 고름) 11시작일 yyyy-MM-dd 11종료일 yyyy-MM-dd 검색 2형식 CSV (표) 2↧ 내보내기
master-detail (목록 ↔ 상세)
3측정 목록 (모바일 push)
개소측정일시상태
AW01-1 (예시)(미확정)검토대기
AW01-2 (예시)(미확정)검토대기
AW01-3 (예시)(미확정)승인
행 선택 → 우측 상세 표시. 상태값(검토대기·승인·반려 등)은 미확정.
상세 — AW01-1 (선택 개소 · 예시)
48측정 치수 — 내측·외측 나란히
이 개소는 둘 다 재기로 했다(side_mode=BOTH). 양쪽 줄이 모두 올라와 있다.
항목사진도면 위치도면값내측내측 편차외측외측 편차안팎 차
📷1📍 A-10118001795-0.3%1812+0.7%17mm
높이📷1📍 A-10115001498-0.1%1505+0.3%7mm
대각📷0안 찍음233823457mm
환풍구 가로📷0150구분 없음
「사진」 열은 그 항목에 몇 장이 붙었는지 줄마다 보인다(#1457 확정) — 표기는 앱(§12 SCR-FSM-004)과 같은 📷N 이고 0장도 켜 둔다(비우면 「이 열이 무슨 열인가」와 구별되지 않는다). 값은 dims[].attachmentCount 로 이미 응답에 실려 온다. 따로 누를 것을 만들지 않는다 — 줄 전체가 이미 고르개다. 도면값은 안팎 구분 없이 한 벌이고 두 쪽이 나눠 쓴다 — 도면값은 「만들 창호의 치수」라 개구부를 어느 면에서 쟀느냐와 축이 다르다. 「안팎 차」는 화면이 계산해 보여 줄 뿐 저장하지 않는다. 내측만·외측만으로 잰 개소는 반대쪽 열을 「안 잼」으로 비운다.
9어느 쪽을 쓸지 채택 (개소 단위 한 번)
◉ 내측 채택 ○ 외측 채택
아직 고르지 않았다 — [검증] 단계에서 고르고, 고르기 전에는 [승인]이 잠긴다.
5사진 · 메모 (부속정보 · 무엇을 찍었나)
사진1
내측 폭
사진2
개소 전체
사진 없음
사진마다 어느 측정 항목을 찍은 것인지가 함께 온다(fs_attachment.meas_dim_id, #843). 비어 있으면 개소 전체 사진이다. 치수 한 줄을 고르면 그 항목에 붙은 사진만 추려 보여 주고, 없으면 「붙은 사진 없음」이라고 적는다. 축소본은 사진을 잘라 채우지 않고 통째로 담아 보이고(#1457 확정) 패널이 허락하는 만큼 키운다 — 잘라 채우면 창호처럼 세로로 긴 사진은 위아래가 날아가 「볼 것이 있는 사진인지」조차 판단하지 못한다.
5사진 크게 보기 — 겹창 (#1457 신설)
축소본을 누르면 어두운 겹창에 원본이 뜬다. 좌우로 넘겨 그 개소의 다른 사진을 본다. 아래에 「사진 2 / 3」 셈과 무엇에 붙은 사진인지(「내측 폭에 붙은 사진」 · 「개소 전체 사진」)를 적고 [닫기] 를 둔다. 사진 바깥을 눌러도 닫힌다.
새 탭으로 열지 않는다 — 내려받기 주소(downloadUrl)의 수명이 한 시간이라 오래 열어 둔 패널에서 깨지고, 내려받기 갈래라 브라우저가 그림 대신 파일로 받는다. [지우기] 는 두지 않는다 — 앱의 크게 보기(§12 SCR-FSM-005 ④)에는 있으나 검토자는 현장 사진을 지우는 사람이 아니다. 크게 볼 때 원본을 그대로 쓰므로 서버가 큰 판을 따로 만들 일이 없다.
메모 표시 자리 (읽기)
6정합 점검
정합 점검 결과 자리
7검토 액션
반려 검증 승인
미확정. 검증·승인·내보내기 규칙, 승인 후 견적/발주 재평가 연동, dim_values 정합 점검 UX, 상태 variant는 §11 본격 명세(S6~S10)에서 확정한다. 상세 라우트 :measurementId.