# 변경 이력

Proptics Model Desk의 판별 변경 내역입니다. 계산이 바뀐 항목에는 영향받는 지표와 이미 받은 엑셀·PPT를 다시 내려받아야 하는지를 적습니다. 화면의 [변경 내역](`desk.html`과 `classic.html`의 `tpl-changelog`)은 이 문서를 줄인 것입니다.

1.3.0에서 앱 화면의 파일 이름이 `index.html`에서 `desk.html`로 바뀌었습니다. 이 문서의 1.2.0 이전 절에서 `desk.html`이라고 적은 앱 화면은 당시 `index.html`이었습니다.

판 구분은 `js/config.js`의 `version`이고, 파일마다 찍히는 빌드 식별자(`<버전>+<날짜>.<커밋>`)는 `js/build.js`에 있습니다.

## 1.8.0 (2026-10-11)

값 제공(선택)을 더한 판입니다. 사용자가 자료에서 읽어 딜에 넣는 값을, 고른 경우에만 Proptics에 제공하는 기능입니다. 기본 설정과 공개 배포에서는 꺼져 있고, 지금 저장소의 설정은 이 PC에서 띄운 화면에서만 켜지는 시험 설정입니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 산출물은 바꾸지 않았습니다. 계약은 `SPEC.md` 20절에 있습니다.

### 다시 내려받아야 하는가

- 아니요. 같은 입력의 지표 값과 산출물은 1.7.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.
- 저장한 초안, 보관함, 공유 링크, JSON 백업은 그대로 열립니다. 입력의 형식은 바뀌지 않았습니다.

### 값 제공이 하는 일

- 자료 가져오기의 [넣기] 바로 위에 고르는 칸이 생깁니다(켜진 화면에서만): `넣는 값과 자료의 종류를 Proptics에 제공합니다(선택)`. 꺼진 채로 시작하고, 넣을 때마다 따로 고릅니다. 넣은 뒤와 대화상자를 다시 열 때 다시 꺼집니다.
- 보내는 것: 자산군과 거래유형, 넣기로 고른 칸의 값(숫자와 고른 항목)과 그 근거 구분(자료에서 읽음, 자료 값으로 계산, 시장자료 참고), 넣은 자료의 종류와 형식, 시장 보고서에서 읽은 참고 값의 건수와 범위.
- 보내지 않는 것: 파일, 파일 이름, 딜 이름과 자산명, 주소, 임차인 이름, 사례 이름, 원문, 출처 메모, 렌트롤, 고르지 않은 값. 글자 값은 앱이 정한 목록 안의 것만 실리고, 보내기 직전에 같은 기준으로 다시 검사합니다.
- 고르기 전에 지금 고른 것으로 보낼 내용을 표로 그대로 볼 수 있습니다.
- 보낸 값은 자료 가져오기의 제공 내역에서 [철회]로 지울 수 있습니다. 철회에 쓰는 표시는 이 브라우저에만 있어, 브라우저의 저장 기록을 지우면 그 브라우저에서는 철회할 수 없습니다.
- 값의 조합(가격, 면적, NOI)만으로 어느 자산인지 짐작될 수 있습니다. 안내문에 그 사실과 비밀유지 의무가 있는 자료의 값은 제공하지 말라는 말을 적었습니다.

### 켜지는 조건

- `js/config.js`의 `contribute.mode`로 정합니다. `off`는 없음(화면에 보이지 않고 어떤 연결도 하지 않음), `test`는 시험(이 PC에서 띄운 화면 `localhost`에서만 켜짐), `on`은 켬입니다.
- 지금 값은 `test`이고 받는 곳은 시험용 저장소(Supabase 무료 요금제, 서울 리전)입니다. 공개 주소에 올려도 켜지지 않고, 배포용 보안 헤더는 종전과 같이 바깥 연결을 모두 막으며(`connect-src 'none'`), 이 설정으로는 배포 묶음을 만들 수 없습니다.
- `on`으로 켜기 전에 운영 주체가 정할 것이 있습니다: 안내문의 확정과 법률 검토(지금 글은 초안), 보관 기간과 삭제 요청 창구, 운영용 받는 곳, 켠 뒤의 회사 첫 화면 문장. `SPEC.md` 20.7절에 적었습니다.

### 자료를 다루는 약속에서 달라진 것

- 1.7.0까지는 자체 코드에 바깥으로 연결하는 호출이 없었습니다. 이 판부터 한 파일에 있습니다(`js/contribute/send.js`). 자료 가져오기 대화상자만 이 파일을 부르고, 사용자가 고른 경우에만, 검사를 통과한 내용만 보냅니다. 꺼진 설정에서는 연결하지 않습니다. 테스트가 판마다 확인합니다.
- 달라지지 않은 것: 올린 파일은 이 기기 밖으로 나가지 않습니다. 값 제공을 고르지 않으면 종전과 같이 아무것도 보내지 않습니다. 값 제공이 꺼진 화면의 문장과 보안 헤더는 1.7.0 그대로입니다.
- 값 제공이 켜진 화면에서는 '서버로 보내지 않습니다' 같은 단정이 사실이 아니게 되므로, 회사 첫 화면(두 언어)의 열두 곳과 앱의 안내, 시작 화면의 문장을 '파일은 보내지 않고 값 제공을 고른 경우에만 고른 값을 보냅니다'라는 뜻의 문장으로 바꿔 보입니다. 시험 설정에서는 이 PC에서 띄운 화면에서만 그렇게 보입니다.
- 이 PC에서만 여는 로컬 서버(`node tools/serve.mjs`의 기본 실행)는 시험 설정의 받는 곳 한 곳으로의 연결을 엽니다. 이미 띄워 둔 서버는 껐다 켜야 새 헤더가 적용됩니다. 그 전에는 값 제공을 골라도 보내지 않고 '이 화면의 보안 설정이 바깥 연결을 막아 보내지 않았습니다'라고 알립니다.

### 받는 쪽

- 받는 쪽의 설정을 `deploy/contribute-supabase.sql`에 실었습니다. 익명(공개용 키)은 정해진 열에 넣기만 할 수 있고 읽기, 고치기, 지우기는 할 수 없습니다. 철회는 식별자와 토큰이 맞는 한 줄만 지우는 함수로 합니다. 받은 시각은 서버가 적습니다.
- 알려 둘 것: 공개용 키로 누구나 넣을 수 있으므로 쓸모없는 줄이 들어올 수 있습니다(줄의 크기와 건수의 제약만 있습니다). 접속한 IP 주소는 받는 서비스의 접속 기록에 남을 수 있습니다. 시험용 저장소는 쓰지 않으면 멈춥니다.

## 1.7.0 (2026-10-11)

자료를 종류별로 나눠 올리게 한 판입니다. 회사 첫 화면의 올리는 자리와 앱의 자료 가져오기가 같은 다섯 자리(IM · 사업계획서, 사업수지(FS), 렌트롤, 시장 보고서, 기타 자료)를 씁니다. 올리는 쪽에는 무엇을 올리면 되는지의 안내가 되고, 자료마다 종류가 붙습니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 산출물은 바꾸지 않았습니다. 계약은 `SPEC.md` 19절에 있습니다.

### 다시 내려받아야 하는가

- 아니요. 같은 입력의 지표 값과 산출물은 1.6.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.
- 저장한 초안, 보관함, 공유 링크, JSON 백업은 그대로 열립니다. 입력의 형식은 바뀌지 않았습니다.

### 종류별 다섯 자리

- 회사 첫 화면(한국어, 영문)의 올리는 자리가 [파일 고르기] 단추 하나에서 다섯 자리로 바뀌었습니다: 01 IM · 사업계획서, 02 사업수지(FS), 03 렌트롤, 04 시장 보고서, 05 기타 자료. 자리를 눌러 파일을 고르거나 그 자리에 끌어다 놓으면 그 종류로 담깁니다. 있는 것만 올려도 됩니다.
- 파일을 끌어 창 위로 가져오면 다섯 자리가 화면 가운데에 크게 보입니다. 자리 밖에 놓은 파일은 파일 이름으로 종류를 나눠 담습니다(시장, 시세, 사례 같은 낱말이 있으면 시장 보고서, 렌트롤과 임대차, 사업수지와 재무모델, IM과 사업계획의 낱말을 차례로 찾고 없으면 기타 자료).
- 담은 파일은 바로 넘기지 않습니다. 자리마다 담은 수와 파일 이름을 보이고 [빼기]와 [모두 빼기]로 뺄 수 있으며, [읽기 시작]을 누르면 앱 화면의 자료 가져오기로 넘어갑니다. 1.6.0에서는 놓는 즉시 넘어갔습니다.
- 담지 않는 파일은 그 자리에서 이유를 알립니다: 읽지 않는 형식, 20MB를 넘는 파일, 이미 담은 파일, 10개를 넘는 파일.
- 어느 자리든 읽는 형식은 같습니다(엑셀 .xlsx, CSV와 TSV, 글자가 들어 있는 PDF, 글자 파일). 자리 아래에 적은 형식은 흔한 형식의 안내입니다. 워드, 한글(.hwp), 파워포인트, 예전 엑셀(.xls)은 지금도 읽지 않으며, PDF나 .xlsx로 저장해 올리라고 알립니다.
- 앱의 자료 가져오기도 넣는 자리가 같은 다섯 자리가 됐습니다. 넣은 자료의 표에서 '쓰임'(본 건 자료, 시장자료) 열이 '종류'(다섯 가지) 열로 바뀌었고, 파일 이름으로 짐작한 종류에는 그렇게 정했다고 적습니다. 종류는 표에서 고칠 수 있습니다.
- 종류가 하는 일은 둘입니다. 시장 보고서로 둔 자료만 시장자료로 읽어 그 값을 이 딜의 칸에 직접 넣지 않고 참고 값으로만 씁니다(종전의 쓰임과 같은 효과). 그리고 자료 묶음 정리(무엇이 있고 무엇이 없는지)가 종류를 따릅니다. 읽은 내용으로는 확인하지 못하고 종류로만 든 자료에는 `(종류 열 기준)`이라고 적습니다. 그 밖에는 종류가 값을 읽는 방식을 바꾸지 않습니다. 종류를 골랐다고 더 정확하게 읽는 것은 아닙니다.
- 넘기는 기록에 자료마다 종류가 함께 실립니다. 넘기는 방식(이 브라우저 안에 잠깐 두었다가 받는 즉시 지움)과 서버로 보내지 않는다는 점은 1.6.0 그대로입니다.

### 고친 것

- 자료 가져오기가 열려 있을 때 그 안에 파일을 끌어다 놓으면 같은 파일이 두 번 들어가던 문제를 고쳤습니다. 1.6.0에서 화면 전체의 끌어 놓기를 더하면서 생긴 문제입니다(1.6.0 출시본에서 재현했고, 이 판에서는 한 번만 들어갑니다).
- 끌기가 창 밖에서 끝나 끌어 놓기 안내가 화면에 남는 경우, 포인터를 움직이면 안내를 거둡니다(첫 화면과 앱 화면).
- 자료 묶음 정리의 '종류를 정하지 못한 자료'를 '기타 자료'로 바꿔 자리의 이름과 맞췄습니다.

### 화면의 배치

- 첫 화면 첫 구획의 위 여백을 화면 높이에 맞춰 줄이고 올리는 자리의 안내 문장을 한 줄로 줄였습니다. 1366x768 화면에서 다섯 자리와 [읽기 시작]이 첫 화면 안에 들어옵니다. 올리는 자리가 커진 만큼 그 아래의 단추 줄([Model Desk 열기], [가상 예시로 보기])은 이 크기에서 첫 화면 아래로 내려갑니다(상단 바의 [Model Desk 열기]는 그대로 보입니다).
- 첫 화면의 배치가 한 열로 바뀌는 760px 이하에서는 자리를 감추고 올리기를 받지 않습니다. 1.6.0에서는 720~760px에서 끌어 놓은 파일을 받았습니다.
- 넘기기를 끈 설정(`intakeHandoff: false`)에서는 자리를 누르면 앱의 자료 가져오기가 열리고, 끌어오는 동안의 안내에 자리를 보이지 않습니다.

## 1.6.0 (2026-10-11)

회사 첫 화면에서 기초 자료(IM, 사업수지, 렌트롤)를 바로 올릴 수 있게 한 판입니다. 앱 화면에도 올리는 자리를 눈에 띄게 두었습니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 산출물은 바꾸지 않았습니다. 계약은 `SPEC.md` 18절에 있습니다.

### 다시 내려받아야 하는가

- 아니요. 같은 입력의 지표 값과 산출물은 1.5.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.
- 저장한 초안, 보관함, 공유 링크, JSON 백업은 그대로 열립니다. 입력의 형식은 바뀌지 않았습니다.

### 첫 화면의 올리는 자리

- 회사 첫 화면(한국어, 영문)의 첫 구획에 올리는 자리가 생겼습니다. [파일 고르기]를 누르거나 파일을 화면 어디에나 끌어다 놓으면 앱 화면의 자료 가져오기로 넘어가 읽은 결과와 검토 표가 바로 보입니다. 파일을 끌어 창 위로 가져오면 화면 전체가 받는 자리가 됩니다.
- 읽을 수 있는 파일(PDF, 엑셀 .xlsx, CSV와 TSV, 글자 파일)이 하나라도 있으면 넘깁니다. 읽지 못하는 파일이 섞여 있으면 앱의 표에 이유를 적습니다. 읽을 수 있는 파일이 하나도 없으면 떠나지 않고 이유를 알립니다. 한도는 앱과 같습니다(한 번에 10개, 파일 하나 20MB).
- 첫 화면에서 올린 자료는 언제나 새 딜이 됩니다. 작성 중이던 내 딜에 섞이지 않고, 새 딜을 만들 때 그 딜은 보관함에 이전 초안으로 남습니다. 값은 종전과 같이 표에서 고른 것만 들어갑니다.
- 좁은 화면(719px 이하)에서는 올리기를 받지 않고 안내만 보입니다. 앱의 좁은 화면이 열람 전용이기 때문입니다.
- 첫 구획의 단추 줄은 테두리 단추 둘([Model Desk 열기], [가상 예시로 보기])로 바꿨습니다. 올리는 자리의 [파일 고르기]가 주 단추입니다(좁은 화면에서는 [Model Desk 열기]가 주 단추).

### 자료를 다루는 약속이 한 군데 달라졌습니다

- 1.5.0까지는 넣은 자료를 브라우저의 저장소에 두지 않았습니다. 브라우저는 한 페이지가 받은 파일을 다음 페이지로 건네주지 않으므로, 첫 화면에서 올린 파일은 앱 화면으로 넘기는 동안만 이 브라우저의 IndexedDB에 잠깐 둡니다. 앱 화면은 받는 것과 같은 트랜잭션에서 그 자리를 지우고 데이터베이스를 통째로 없앱니다. 그 뒤로는 메모리에만 있습니다.
- 남지 않게 하는 장치: 받는 즉시 지우고, 두 화면 모두 열릴 때마다 남은 것을 지우며, 적은 지 10분이 지난 것은 받지 않고 지웁니다. 넘기는 도중에 브라우저가 꺼지거나 앱 화면이 열리지 못하면 다음에 이 사이트를 열 때까지 그 파일이 브라우저의 프로필 안에 암호화되지 않은 채 남습니다.
- 달라지지 않은 것: 서버나 다른 서비스로 보내지 않습니다. 앱 화면에서 직접 넣은 파일은 종전과 같이 메모리에서만 읽습니다. 초안, 보관함, 공유 링크에는 자료를 쓰지 않습니다.
- 화면의 문장을 그에 맞게 고쳤습니다. 처리 위치 문장은 '저장하지도 않습니다'에서 '읽은 뒤 보관하지도 않습니다'로 바꿨고, 첫 화면의 보안 구획과 앱의 안내에 넘기는 방법과 남을 수 있는 경우를 그대로 적었습니다.
- 끌 수 있습니다. `js/config.js`의 `intakeHandoff`를 `false`로 두면 첫 화면은 파일을 받지 않고 단추가 앱의 자료 가져오기를 엽니다. 이때는 자료가 어떤 저장소에도 놓이지 않습니다.

### 앱 화면

- 상단 바에 [자료 가져오기] 단추가 생겼습니다(넓은 화면). 딜이 열려 있을 때는 레일을 끝까지 내려야 보이던 자리입니다.
- 파일을 화면 어디에나 끌어다 놓으면 자료 가져오기가 열려 그 파일을 넣습니다. 그 전에는 대화상자 밖에 파일을 놓으면 브라우저가 그 파일을 열어 앱 화면을 떠났습니다. 다른 대화상자가 열려 있을 때는 받지 않습니다.
- 주소의 표시 `#import`(자료 가져오기 열기)와 `#import=home`(첫 화면이 넘긴 자료 받기)을 읽습니다. 표시는 한 번 쓰고 지웁니다.
- 1280~1439px 너비에서 상단 바 조합 단추의 덧붙임 글('조합 바꾸기')을 가렸습니다(단추가 하나 늘어난 만큼 알림 한 줄의 자리를 지킵니다. 단추에 같은 글의 툴팁이 있습니다).

### 확인

- 약속의 근거를 테스트로 묶었습니다(`tests/handoff.test.mjs`): 자체 코드에 통신을 여는 호출이 없고, IndexedDB를 쓰는 곳이 넘기기 모듈 하나뿐이며, 받는 즉시 지웁니다.
- Chromium 계열 브라우저에서 가상 자료(엑셀, PDF, CSV)로 끌어 놓기와 파일 고르기, 넘긴 뒤 저장 공간이 비는 것, 읽을 수 없는 파일, 좁은 화면, 넘기기를 끈 설정을 확인했습니다. 기록은 `docs/verification/release-check.md`에 있습니다.
- 하지 못한 것: Firefox와 Safari, 실제 딜 자료, 20MB에 가까운 큰 파일 여러 개를 한꺼번에 넘기는 경우의 시간, 브라우저의 개인 정보 보호 모드.

## 1.5.0 (2026-10-10)

외부 검토에서 나온 여섯 가지 지적을 반영한 판입니다. 계산이 바뀌는 것은 둘입니다. 개발 딜의 공사기간을 연 단위로 올리지 않고 개월 단위로 반영하고, NOI 직접입력 딜의 시나리오에서 빠져 있던 공실률 가감을 1년차 NOI에 옮깁니다. 그 밖의 딜은 같은 입력에서 같은 값이 나옵니다. 계약은 `SPEC.md` 17절에 있습니다.

### 다시 내려받아야 하는가

- 예, 공사기간이 12의 배수가 아닌 개발 딜(예: 18개월, 30개월)의 엑셀, PPT, 요약. 1.4.1까지는 공사기간을 연 단위로 올려(30개월을 36개월로) 준공을 늦게 잡았습니다. 수익률, 총사업비, 매각가, 대주 지표가 모두 달라집니다. 가상 예시에서는 공사 30개월인 두 딜이 해당합니다.
  - 호텔 개발: 레버드 IRR 10.27%에서 11.36%, Equity Multiple 1.878x에서 1.983x, 최소 DSCR 1.74x에서 1.75x, 매각가 88,765백만원에서 89,874백만원, 총사업비 68,789백만원에서 68,265백만원.
  - 데이터센터 개발: 레버드 IRR 10.22%에서 11.29%, Equity Multiple 1.873x에서 1.976x, 최소 DSCR 1.75x에서 1.76x, 매각가 215,327백만원에서 217,996백만원, 총사업비 166,542백만원에서 165,307백만원.
- 예, NOI 직접입력으로 넣은 딜의 시나리오(상방, 하방) 값이 실린 엑셀 12_시나리오, PPT, 요약과 판정의 하방 문장. 기준 결과, 민감도, 역산은 같습니다.
- 아니요, 매입·운영과 리파이낸싱 딜, 공사기간이 12의 배수인 개발 딜의 기준 결과. 가상 예시와 변형 189건 가운데 183건이 수정 전과 같고, 달라진 6건은 위의 두 딜(연·반기·월 주기)입니다. 가상 예시 스냅샷은 21종 가운데 19종이 같습니다.
- 개발 딜의 엑셀 파일은 구조가 바뀌었습니다(02b 타임라인에 운영 개월 행, 타임라인 한 해 추가). 1.4.1까지 받은 개발 딜 파일은 02_가정에서 공사기간을 12의 배수가 아닌 값으로 바꿔도 예전 규칙(연 단위 올림)으로 계산하므로, 엑셀에서 공사기간을 바꿔 볼 때는 새로 받습니다.
- 저장한 초안, 보관함, 공유 링크, JSON 백업은 그대로 열립니다. 입력의 형식은 바뀌지 않았습니다. 열면 지금 규칙으로 다시 계산하므로 위의 두 경우는 화면의 값이 달라집니다.
- 산출물에 찍히는 검증 수준은 17개 조합에서 '손계산 단위 테스트만'이 '별도 참조 모델과 대조'로 바뀝니다. 계산이 달라진 것이 아니라 대조한 범위가 넓어진 것입니다.

### 개발: 공사기간을 개월 단위로 반영 (계산 변경)

- 그 전에는 공사 25개월, 30개월, 36개월의 결과가 같고 37개월에서 한꺼번에 달라졌습니다. 공정 지연이나 수전 지연 몇 달의 영향을 볼 수 없었습니다.
- 이제 공사기간 M개월까지 공사, 그 다음 달부터 운영으로 계산합니다. 공사비·간접비·예비비는 M개월에 매월 균등 집행하고, 공사기간 운용보수·고정비는 연 금액 × M / 12입니다. 준공이 연도 중간이면 준공 연도를 공사 개월과 운영 개월로 나누고, 운영수입, 준공 뒤 이자, 운용보수, 기타 고정비, 감가상각을 운영 개월분만 잡습니다. 매각가 기준 NOI도 같은 규칙입니다.
- 데이터센터 개발 가상 예시에서 공사기간만 바꾼 레버드 IRR: 24개월 12.41%, 25개월 12.22%, 30개월 11.29%, 35개월 10.39%, 36개월 10.22%, 37개월 10.04%. 한 달에 0.18%p 안팎씩 내려갑니다(그 전에는 25~36개월이 모두 10.22%).
- 준공 연도(운영 1~11개월)의 DSCR과 ICR은 그 해의 몇 달이 아니라 준공 다음 달부터 12개월의 NOI ÷ 같은 12개월의 이자로 잽니다. 그 해의 운영 개월만으로 재면 임대 안정화 초기의 낮은 가동률만 잡혀 공사기간 한 달 차이로 최소 DSCR이 크게 흔들립니다. 공사기간이 12의 배수인 딜의 운영 첫 해와 같은 기준입니다. 평균 DSCR에는 준공 연도를 운영 개월 ÷ 12의 비중으로 넣습니다.
- 평균 CoC와 우선주 배당수익률은 운영 연도 합계 ÷ 기준 금액 ÷ 운영 기간(년)입니다. 운영 1년차 CoC는 준공 연도가 12개월 미만이면 준공 다음 달부터 12개월의 분배로 잽니다. 공사기간이 12의 배수인 딜에서는 종전과 같은 값입니다.
- 공사기간은 정수 개월입니다. 소수로 넣으면 반올림하고 알립니다. 사업기간은 준공 뒤 12개월 이상 남아야 합니다(종전 조건과 같습니다).
- 화면: 타임라인의 공사 기간 띠는 공사만 있는 해에 긋고 준공 연도는 운영 막대로 그립니다. 준공 연도의 설명과 연도별 표 아래에 그 해가 공사 몇 개월, 운영 몇 개월인지와 DSCR을 잰 기준을 적습니다. 준공 시점은 '3년차(공사 30개월, 그 해 운영 6개월)'로 적습니다(화면, 기존 화면, PPT, 요약).
- 엑셀: 수식 모델도 같은 규칙으로 바꿨습니다. 02_가정의 공사기간을 바꾸면 개월 단위로 다시 계산합니다. 개발 딜 파일의 타임라인은 max(12, 사업기간) + 2년차까지입니다.
- 공사가 늦어져 늘어나는 공사비(물가 상승, 지체상금)는 자동으로 더하지 않습니다. 공사기간을 늘려 볼 때는 공사비 칸을 함께 고칩니다.

### 시나리오: NOI 직접입력 딜 (계산 변경)

- 그 전에는 NOI 직접입력 딜에 공실률 칸이 없어 상방과 하방에서 공실률 가감이 빠졌습니다. 같은 딜을 항목별로 넣었을 때보다 하방 결과가 좋게 나왔습니다.
  - 오피스 매입 가상 예시의 하방 레버드 IRR: 1.4.1에서 항목별 -4.32%, 직접입력 -0.93%. 이 판에서 항목별 -4.32%, 직접입력 -4.07%.
  - 데이터센터 개발 가상 예시의 하방 레버드 IRR: 1.4.1에서 항목별 5.13%, 직접입력 7.04%. 이 판에서 항목별 6.07%, 직접입력 6.38%(항목별 값이 달라진 것은 위의 공사기간 변경 때문입니다).
  - 직접입력은 항목별 산정의 1년차 NOI(개발은 안정화 NOI)와 승계 보증금을 그대로 넣어 잰 값입니다. 기준 결과에 남는 작은 차이는 두 방식의 정의 차이입니다(직접입력은 보증금 운용수익에도 성장률을 곱합니다).
- 공실률 가감을 같은 폭(%)의 1년차 NOI 가감으로 옮깁니다. 하방의 공실률 +5%p는 1년차 NOI -5%, 상방의 -2%p는 +2%입니다. 시나리오 설명에 '1년차 NOI -5%'로 적습니다.
- 수입 변화를 NOI에 같은 비율로 옮긴 근사입니다. 고정비가 있으면 실제 NOI는 이보다 더 줄어듭니다. 그래서 하방 문장에 항목별 산정과 같은 단서를 붙입니다.
- 21개 조합에서 두 입력 방식의 하방과 상방 차이가 기준 결과의 차이에서 1%p 안에 드는지 테스트로 확인합니다.
- 시나리오의 폭(Exit Cap +0.5%p 등)은 여전히 앱이 고정한 값이며 시장 기준이 아닙니다. 폭을 사용자가 정하는 기능은 이 판에 넣지 않았습니다.

### 입력 점검

- 자릿수 확인: 범위 오류는 아니지만 자릿수나 단위 실수로 보이는 값을 주의로 알립니다. 원 단위 칸의 지나치게 작은 값(임대료, kW당 임대료, kW당 전력비, ADR은 1,000원 미만, 관리비는 100원 미만)과 칸의 권장 입력 범위를 벗어난 값(예: PUE 30배)입니다. 렌트롤은 임대료가 1,000원/평·월 미만인 행을 알립니다. 계산은 넣은 값 그대로 합니다. 경계는 시세 기준이 아닙니다.
- 새로 필수가 된 칸의 알림: 값을 넣어 다른 칸이 필수가 되고 Enter가 그 칸으로 옮겨 가면(kW당 전력비를 넣으면 PUE) 알림 줄과 화면 낭독기에 그 사실을 알리고 그 줄을 잠시 표시합니다. 값을 순서대로 넣다가 다음 값을 엉뚱한 칸에 넣는 일을 막습니다.

### 추천 데이터 (데이터 판 2026.10.3)

- 데이터센터 kW당 임대료 칸의 참고 통계(보도된 수도권 평균 단가)를 내렸습니다. 발표 자료에 요금 기간(월인지 연인지), 전력비 포함 여부, 도매와 소매의 구분이 없어 이 칸(원/kW·월, 전력비 별도)과 같은 기준인지 확인할 수 없습니다. 가상 예시의 값과 나란히 보여 혼동을 주었습니다. 항목은 '확인 자료만'으로 바꾸고 싣지 않는 이유를 적었습니다.
- 가상 예시의 값은 바꾸지 않았습니다. 다른 자산군의 가상 예시와 참고 통계를 전수 대조했고 단위나 정의가 어긋나는 항목은 더 없었습니다. 수준이 다른 값(예: 물류센터 예시의 공실률 3%와 인용한 시장 평균)은 있으며, 예시는 계산 시연용 가상 값입니다.

### 검증

- 참조 모델 대조(`tests/reference-model.test.mjs`): 엔진 코드를 부르지 않고 README의 계산 기준과 칸의 도움말만으로 따로 쓴 계산기와 21개 조합 모두를 대조합니다. 조합마다 가상 예시와 변형 입력 18건 이상, 모두 404건에서 1년차 NOI, 총사용액, 자기자본, 대출, 매각가, IRR, Equity Multiple, 최소 DSCR이 같습니다.
- 조합별 검증 수준: 다른 계산 도구와 수치 대조 3개(그대로), 별도 참조 모델과 대조 18개(1개에서), 손계산 단위 테스트만 0개(17개에서).
- 한계를 조합마다 적습니다. 참조 모델은 앱 개발 측이 직접 만들었으므로 외부 검증이 아닙니다. 규칙을 잘못 이해했다면 엔진과 같이 틀립니다. 렌트롤 적용 딜, 개발의 중순위(오피스 밖)와 우선주 포함 구조, 시나리오·민감도·역산은 대조 범위 밖입니다.
- 개발 공사기간 변경의 검산: 달 단위 참조 모델(공사 24, 25, 30, 35, 36, 41개월 × 연·반기·월), 준공 연도의 이자·운용보수·감가상각·DSCR·CoC 손계산, 엑셀 수식의 연도 중간 준공 사례. 재계산 대조 장치에 공사기간 +7개월과 -5개월 변형을 더했습니다.
- 다른 계산 도구와의 대조(3개 조합, 매입과 리파이낸싱)는 이 판의 계산 변경이 그 조합의 수치를 바꾸지 않아 다시 하지 않았습니다.

### 범위 표기

- 거래유형 '개발·PF'의 설명과 '이 조합에서 반영하지 않는 것'에 다루는 구조를 적었습니다. 준공 후 임대 운영하다가 매각하는 구조만 다룹니다. 분양 수입(분양형 사업), 브릿지론에서 본PF로 갈아타는 구조, 공사비 S-curve는 반영하지 않고, 인출 순서는 자기자본, 중순위, PF로 고정입니다.
- 이 구조들을 기능으로 넣지는 않았습니다.

## 1.4.1 (2026-10-10)

시작 화면과 조합 바꾸기 대화상자의 조합 표를 다시 그린 판입니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 산출물은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 같은 입력의 지표 값과 산출물은 1.4.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.

### 조합 표

- 자리마다 적던 'N 칸'(첫 결과에 필요한 필수 칸 수) 글자를 뺐습니다. 표의 자리는 글자 없는 단추이고 누르면 조합이 바뀝니다. 필수 입력의 수와 이름은 오른쪽의 고른 조합 설명에 '필수 입력 8개: 매입가, 연면적, ...'처럼 적습니다.
- 검증 수준 표시를 네모(채운 네모, 반 채운 네모, 속 빈 네모)에서 막대 눈금으로 바꿨습니다. 켜진 막대 3개는 다른 계산 도구와 수치 대조, 2개는 별도 참조 모델과 대조, 1개는 손계산 단위 테스트만입니다. 작은 네모가 체크 상자처럼 보여 고른 것으로 읽힐 수 있었습니다. 등급의 뜻과 조합별 등급은 그대로이고 낮은 등급도 그대로 보입니다. 고른 조합의 설명과 안내의 검증 수준 표도 같은 눈금을 씁니다.
- 고른 단추는 골드 테두리와 옅은 골드 면으로 표시합니다. 포인터를 올리거나 고른 단추의 행과 열 머리글이 진해져 어느 자산군과 거래유형인지 읽힙니다. 단추 높이는 40px에서 44px로 키웠습니다.
- 조작은 그대로입니다. 누르면 고르고, 두 번 누르거나 Enter를 누르면 빈 딜로 시작하며, 방향키로 옮깁니다. 화면 낭독기가 읽는 단추 이름에는 조합 이름, 필수 입력의 수, 검증 수준이 들어 있습니다.
- 앱의 다른 자리(레일, 계산 보류 안내, 산출물)에서 입력 칸을 세는 표현은 바꾸지 않았습니다.

## 1.4.0 (2026-10-10)

기초 자료 가져오기를 앱 화면에 넣은 판입니다. IM, 사업수지, 렌트롤, 시장자료를 넣어 가정 칸을 채웁니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 적용 기본값 원장은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 같은 입력의 지표 값과 산출물은 1.3.2와 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.
- 이전에 저장한 초안, 보관함, 공유 링크, JSON 백업은 그대로 열립니다. 입력의 형식은 바뀌지 않았습니다.

### 자료 가져오기

- 시작 화면의 [자료로 시작]과 가정 레일의 [자료 가져오기]로 엽니다. 엑셀(.xlsx), CSV, 글자가 들어 있는 PDF, 붙여넣은 글을 읽습니다. 한 번에 10개, 파일 하나 20MB까지입니다. 스캔한 PDF와 그림, 한글(.hwp), 파워포인트, 워드, 예전 엑셀(.xls)은 읽지 않습니다.
- 읽은 값은 후보입니다. 칸마다 자료 값, 원문과 위치, 확신 수준과 그 이유를 표로 보이고 확신이 높음인 값만 넣기로 미리 표시합니다. 지금 딜에 값이 있는 칸은 기본이 넣지 않음입니다. 표에서 고른 것만 들어갑니다.
- 자료마다 쓰임을 고릅니다. 시장자료(비교 사례, 시세, 권역 통계)로 정한 자료의 값은 이 딜의 칸에 직접 넣지 않고 참고 값으로만 씁니다.
- 내 딜이 열려 있으면 그 딜에 넣고 되돌리기 한 번으로 되돌립니다. 시작 화면이나 가상 예시에서는 새 딜을 만듭니다(가상 예시의 값과 섞지 않습니다). 새 딜을 만들 때 작성 중이던 내 딜이 있으면 [빈 딜로 시작]과 같이 보관함에 이전 초안으로 남깁니다.
- 읽기는 규칙으로 하며 AI 모델을 부르지 않습니다. 자료는 브라우저의 메모리에서만 읽고 서버로 보내지 않으며 저장하지도 않습니다.

### 자료에 없는 값의 보완

- 근거를 적을 수 있을 때만 제안하고 미리 표시하지 않습니다.
  - 자료 값으로 계산: 매입가(리파이낸싱은 현재 가치) = 1년차 NOI ÷ 자료의 Cap Rate, 1년차 NOI = 매입가 × 자료의 Cap Rate(운영 칸을 채울 수 없을 때), 선순위 LTV = 자료의 대출금 ÷ 가치, 임대면적 비율 = 렌트롤의 면적 합 ÷ 연면적, 호텔의 ADR = RevPAR ÷ 객실 점유율. 식과 재료의 위치를 함께 적습니다.
  - 시장자료 참고: 넣은 시장자료의 사례(임대료, 관리비, 공실률, Cap Rate, 평당 거래가, 평당 공사비, ADR, 객실 점유율, 호실당 월세, kW당 임대료)를 크기 순으로 세웠을 때의 가운데 값. 사례 수와 범위, 본 건의 값이 아니라는 주의를 함께 적습니다. 사례의 값은 조정하지 않습니다.
- 근거가 없는 칸(운영비용 비율, 보유기간, NOI 성장률 등)은 값을 만들지 않고 확인할 자료만 적습니다. 앱에 출처 있는 참고 범위가 있는 칸은 그 항목을 가리키며, 넣을 수 있는 범위만 고를 수 있습니다(추천 범위에서 넣은 값으로 원장에 남습니다).
- 칸의 권장 범위를 벗어나는 값은 제안하지 않습니다.

### 렌트롤

- 임차인과 면적, 만료일만 적히고 임대료 열이 없는 표도 임차인 표로 읽습니다. 임대료가 비어 있는 행은 렌트롤 행에 넣지 않고 따로 알립니다.
- 임대료가 비어 있는 행은 고른 기준(평균 임대료 칸의 값, 임대료가 적힌 행의 면적 가중평균, 시장자료 사례의 가운데 값)으로 채워 넣을 수 있습니다. 채운 값에는 렌트롤 대화상자의 표에 추정이라고 표시됩니다.

### 출처 메모와 표시

- 넣은 값마다 출처 메모가 남습니다. 자료에서 읽은 값은 `자료: (파일 이름) · (위치) · 원문 (값)`, 보완 제안은 `추정: (식이나 근거)`입니다. 엑셀 02_가정의 출처 열과 PPT 각주, 공유 링크에 실립니다. 파일 이름을 적지 않는 선택이 있습니다.
- 가정 레일의 칸 옆에 자료 또는 추정이라고 표시되고 근거 카드의 상태 문장도 그렇게 적습니다. 값을 고치면 그 메모와 표시는 사라집니다.

### 한계

- 규칙으로 읽으므로 문서 양식에 따라 읽지 못하거나 다르게 읽을 수 있습니다. 가상 자료로 잰 값과 처음 보는 양식에서의 오류율, 읽지 못하는 모양은 `docs/import/IMPORT_SPEC.md` 12절과 13.8절에 있습니다. 미리 표시된 값도 원문과 대조해야 합니다.
- 분양형 사업수지의 분양수입, 분양가, 분양률은 넣을 칸이 없습니다. 도면은 글자로 적힌 면적표만 읽습니다.
- 임대료를 채운 렌트롤은 임차인마다 같은 임대료를 넣은 것입니다. 엑셀과 PPT의 렌트롤 행에는 추정 표시가 실리지 않고 임대료 기준이 된 칸의 출처 메모로만 실립니다.
- 넣은 자료는 저장하지 않으므로 화면을 새로 고치면 다시 넣어야 합니다. 기존 화면(`classic.html`)에는 이 기능이 없습니다.
- 브라우저 확인은 Chromium 계열에서 했고 Firefox와 Safari에서는 하지 않았습니다.

### 회사 첫 화면

- AI와 계산 구획의 첫 단계(자료 읽기)를 지금 있음으로 바꾸고 준비하고 있는 것에서 뺐습니다. 판 기록에 1.4.0을 더했습니다.

## 1.3.2 (2026-10-10)

회사 첫 화면의 디자인을 읽기 쉬운 밝은 화면으로 바꾼 판입니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 앱 화면은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 지표 값과 산출물은 1.3.1과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.

### 첫 화면의 디자인: 아이보리 앤 잉크

- 밝은 종이색 바탕에 짙은 남색 글자를 기본으로 했습니다. 어두운 바탕과 가는 글자, 금박 글자가 보수적인 독자에게 가볍게 보이고 읽기 어렵다는 판단에서입니다. 글과 숫자, 구획의 순서는 그대로입니다.
- 글자를 굵고 크게 했습니다: 제목 굵기 650 안팎, 본문의 기본 16.5px(구획의 머리글 아래 18px, 카드 16px), 가장 작은 글자 12.5px. 굵기 400 미만의 글자는 쓰지 않습니다(로고 워드마크 제외).
- 명도 대비를 기준으로 삼았습니다: 본문 글자색은 어느 면에서나 7:1 이상, 덧붙임과 표시의 글자색은 4.5:1 이상, 주 단추와 꼬리의 글자도 7:1 이상입니다. 테스트가 두 테마의 색 값에서 계산해 확인합니다.
- 금박 글자, 빛 번짐, 유리 질감, 배경 그림 두 개(`img/`), 꼬리의 큰 외곽선 글자를 없앴습니다. 강조는 금색 밑줄로, 주 단추는 한 가지 색(남색)으로 했고, 표와 목록의 윗변에는 굵은 선을 긋습니다. 꼬리는 남색 면에 밝은 글자입니다.
- 다크 테마는 머리의 단추로 고를 수 있습니다. 같은 구성에 차분한 남색 바탕과 샴페인색 주 단추를 씁니다.

### 테마의 기본값

- 회사 첫 화면은 기기의 라이트·다크 설정과 관계없이 밝은 화면으로 엽니다. 테마 단추로 다크를 고르면 그 선택을 이 브라우저에 저장하고, 이전에 고른 테마가 저장돼 있으면 그 테마로 엽니다.
- 앱 화면(desk.html)은 그대로입니다: 저장한 테마가 없으면 기기 설정을 따릅니다. 기기가 다크이고 테마를 고른 적이 없으면 밝은 첫 화면에서 어두운 앱 화면으로 넘어갑니다.

### 배포

- 배포 묶음에서 `img/` 폴더가 빠졌습니다. 보안 헤더는 바뀌지 않았습니다.

### 검증

- `tests/site.test.mjs`: 테마 토큰의 구조(라이트 기본, 다크는 고른 경우에만), 명도 대비(WCAG 식으로 계산), 글자 굵기와 크기의 하한, 금박 글자와 그림 파일을 쓰지 않는지, 너비별 배치 규칙.
- 두 언어를 너비 320px부터 1280px까지 브라우저로 확인했습니다(계산 과정 표와 질문 여섯을 모두 펼친 상태. 영문 12개 너비, 한국어 7개 너비. 목록은 `SPEC.md` 15.9). 실제 휴대폰에서는 확인하지 않았습니다.

## 1.3.1 (2026-10-10)

회사 첫 화면의 내용을 보강한 판입니다. 계산 산식, 필수 입력 정책, 엑셀 수식, 앱 화면은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 지표 값과 산출물은 1.3.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건). 달라지는 것은 파일에 찍히는 빌드 식별자뿐입니다.

### 회사 첫 화면

- 제목을 회사가 하는 일의 결과로 고쳤습니다: 상업용 부동산 딜의 첫 검토를 근거가 남는 계산으로 바꾼다.
- 문제 구획을 더했습니다. 지금의 방법에 남는 빈 곳 셋과, 같은 일을 하는 세 가지 방법(직접 짠 엑셀, 범용 대화형 AI, Model Desk)의 비교 표입니다. 통계 수치는 적지 않았고, 이 제품이 못 하는 것(구조가 복잡한 딜)도 같은 표에 적었습니다.
- 제품 구획에 쓰는 장면 넷(투자와 운용, 대주와 금융 주선, 시행과 개발, 자문과 중개)을 더했습니다. 만든 목적을 적은 것이며 쓰고 있는 곳의 이름이나 수가 아닙니다.
- AI와 계산 구획을 더했습니다. 자료 읽기, 가정 확정, 계산, 산출물, AI로 이어 가기의 다섯 단계마다 누가 맡는지와 지금 상태(지금 있음, 개발 중)를 적습니다. 계산은 AI 모델을 부르지 않고, 이 판은 AI 서비스에 연결하지 않으며, AI와 닿는 곳은 내려받는 작업 지시문 하나입니다.
- 예시 계산에 [계산 과정 보기]를 더했습니다. 0년차의 자기자본 투입부터 매각 연도까지 NOI, 대주 원리금, 보수와 적립, 자기자본 현금흐름을 엔진의 연도별 값 그대로 보이고, 그 현금흐름의 IRR이 화면의 레버드 IRR임을 적습니다.
- 검증 구획에 조합별 표를 더했습니다. 자산군과 거래유형 21칸마다 어디까지 확인했는지(다른 계산 도구와 대조, 참조 모델과 대조, 손계산 테스트만)를 적습니다.
- 보안 구획을 더했습니다: 보안 헤더의 바깥 연결 차단, 다른 출처 요청 없음, 브라우저에만 저장, 사내 설치. 보안 인증을 받았다는 뜻이 아님과 공유 링크 주소에 가정 수치가 암호화되지 않은 채 담긴다는 것을 함께 적었습니다.
- 회사 구획에 지금까지 낸 판의 기록과, 준비하고 있는 것의 상태 표시(개발 중, 계획, 검토 중)를 넣었습니다. 아직 없는 기능은 지금 있다고 적지 않습니다.
- 질문 구획을 더했습니다. 검증 방법, 저장 위치, AI의 역할, 엑셀 모델과의 차이, 맞지 않는 딜, 사내 설치의 여섯 가지입니다.
- 메뉴가 다섯 개(제품, AI와 계산, 검증, 보안, 회사)로 늘어 1080px 이하에서 [메뉴] 단추로 접습니다. 넓은 화면에서 검증, 회사, 질문 구획의 왼쪽 글은 오른쪽을 읽는 동안 자리에 머뭅니다.
- 영문 화면도 같은 틀로 고쳤습니다.

### 적지 않은 것

- 시장 규모, 사용자 수, 요금, 팀 소개는 확인된 값이 없어 싣지 않았습니다. 운영 주체가 정하면 넣습니다.
- 준비하고 있는 것의 마지막 항목(AI 검토 보조)은 검토 중인 방향을 적은 것이며 일정과 구현 방식은 정하지 않았습니다.

### 검증

- `tests/site.test.mjs`: 구획의 순서와 메뉴, 조합별 검증 표 = 엔진의 검증 수준, 계산 과정 표 = 엔진의 연도별 값(그 현금흐름의 IRR = 레버드 IRR, 받은 금액 / 넣은 금액 = 자기자본 배수. 손계산), 단계별 상태 표시, 비교 표의 열 이름, 추천 항목 수 = 자료의 항목 수, 지금까지의 판과 날짜 = 이 문서의 판과 날짜.
- 두 언어 모두 너비 320, 360, 390, 480, 521, 600, 761, 900, 961, 1041, 1081, 1280px에서 옆으로 넘치지 않는 것을 브라우저로 확인했습니다(계산 과정 표와 질문 여섯을 모두 펼친 상태). 실제 휴대폰에서는 확인하지 않았고, 자동 테스트는 규칙이 있는지만 봅니다.

## 1.3.0 (2026-10-09)

브랜드를 Proptics로 바꾸고 회사 첫 화면을 더한 판입니다. 계산 산식, 필수 입력 정책, 엑셀 수식은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 지표 값은 1.2.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건).
- 산출물은 브랜드 표기만 달라집니다: 엑셀과 PPT의 표지, 한 장 요약의 로고, 요약 문구의 머리 줄, 문서 속성의 작성자, 내려받는 파일 이름의 머리말. 새 표기가 필요할 때만 다시 내려받습니다.

### 브랜드

- 브랜드 표기가 Proptics로 바뀌었습니다. 제품 이름은 Model Desk 그대로입니다.
- 로고는 모노그램(세로 기둥과 네모 볼로 그린 P, 안쪽의 사선과 점)과 워드마크(Prop, tics)입니다. 이름과 로고 마크업은 `js/brand.js` 한곳에서 관리하고, 네 페이지의 로고가 그 마크업과 같은지 테스트가 확인합니다.
- 추천 패널의 출처 구분 가운데 하나의 이름을 '자체 실무 원고'로 바꿨습니다. 항목과 값은 그대로입니다.
- 운영 주체 표기(`js/config.js`의 `operator`)에 Proptics를 넣었습니다. 문의 주소, 대상 사용자, 의견 수신 주소는 비어 있으며 넣으면 해당 자리에 보입니다.

### 주소가 바뀝니다

- 사이트의 첫 주소(`index.html`)는 회사 첫 화면이 됐고, 앱 화면은 `desk.html`로 옮겼습니다. 앱 주소를 따로 안내했다면 `desk.html`로 바꿔 안내하세요.
- 1.2.0까지 만든 공유 링크, 읽기 전용 링크, QR, 즐겨찾기는 그대로 열립니다. 첫 화면이 주소 뒤의 표시를 보고 `desk.html`로 넘깁니다.
- 새로 만드는 공유 링크와 QR은 `desk.html` 기준입니다.

### 회사 첫 화면

- `index.html`에 회사 소개와 제품 안내를 실었습니다: 회사가 하는 일, 제품 설명과 쓰는 순서, 자산군별 가상 예시 링크, 숫자를 다루는 원칙, 점검 수치와 조합별 검증 수준, 회사 정보, 준비하고 있는 것.
- 첫 구획의 예시 계산은 Model Desk와 같은 계산 엔진으로 가상 예시(오피스 매입)를 돌립니다. 공실률, 매각 Cap, 선순위 LTV, 선순위 금리를 움직이면 주 지표와 연도별 NOI의 쓰임이 다시 계산됩니다. 조절 범위는 예시를 움직여 보기 위한 폭이며 시장 범위가 아닙니다.
- 화면의 점검 수치는 문서와 같은 표식으로 점검 요약에서 채우고, 자산군 이름과 조합 수, 필수 칸 수, 검증 수준은 테스트가 엔진 값과 대조합니다.
- 회사에 관한 사실 가운데 정해지지 않은 것(설립 시점, 인원, 고객, 주소)은 적지 않았습니다. 아직 없는 기능은 준비하고 있는 것이라고 적은 자리에만 있습니다.

### 영문 화면

- 회사 첫 화면을 영문으로도 볼 수 있습니다(`en.html`). 머리의 KO, EN 단추로 바꾸며, 보고 있던 구획으로 넘어갑니다. 두 화면은 틀이 같고 글만 다릅니다(테스트가 틀이 같은지 확인합니다).
- 예시 계산은 두 언어가 같은 엔진 값을 적습니다. 금액은 한국어 화면이 억원, 영문 화면이 KRW bn(십억원)으로 적습니다(1,156억 = KRW 115.6bn).
- 고른 언어는 그 탭에만 기억합니다(sessionStorage). 영문으로 보던 탭에서 앱의 로고를 누르면 영문 첫 화면으로 돌아오고, 새 탭은 한국어 화면에서 시작합니다. `index.html?lang=en`으로 열면 영문 화면으로 갑니다.
- 앱 화면(Model Desk)과 엑셀, PPT 산출물은 한국어입니다. 영문 첫 화면에 그 사실을 적었습니다.

### 첫 화면의 디자인

- 회사 첫 화면의 디자인을 '미드나이트 앤 골드'로 바꿨습니다: 깊은 밤색 바탕, 가늘고 큰 제목, 금박 글자(제목의 핵심 낱말과 큰 숫자), 유리 질감의 면. 라이트 테마는 같은 구성을 종이색 바탕으로 옮긴 것입니다. 글과 숫자, 구획의 순서는 그대로이고 앱 화면(desk.html)의 디자인은 바꾸지 않았습니다.
- 배경 그림 두 개가 더해졌습니다(`img/mark.svg`: 로고 모노그램을 선으로 그린 배경 문장, `img/noise.svg`: 필름 입자). 같은 출처의 파일이며 다른 출처로 보내는 요청은 여전히 없습니다.
- 좁은 화면: 메뉴를 960px 이하에서 [메뉴] 단추로 접습니다. 영문 화면의 머리가 761px에서 855px 사이와 357px보다 좁은 너비에서 옆으로 넘치던 것을 고쳤고(메뉴 글자가 한국어보다 길어 생긴 문제), 두 언어 모두 320px부터 넘치지 않습니다. 한 열 배치에서 배경 문장이 글자를 가로지르지 않습니다.

### 저장한 딜

- 이 브라우저에 저장한 초안, 보관함, 테마는 그대로 남습니다. 저장 키의 이름이 바뀌어, 처음 열 때 예전 이름의 값을 새 이름으로 한 번 옮깁니다. 새 이름에 이미 값이 있으면 그 값을 남깁니다.
- JSON 백업 파일과 공유 링크의 형식, 입력 스키마 버전은 바뀌지 않았습니다. 1.2.0에서 받은 백업은 그대로 가져올 수 있습니다.

### 배포

- 보안 헤더의 script-src 해시가 바뀌었습니다(머리의 테마 스크립트가 읽는 저장 키의 이름이 바뀜). `deploy/`의 헤더 예시를 다시 복사합니다. 네 페이지가 같은 스크립트를 쓰므로 해시는 하나입니다.
- 배포 묶음의 이름이 `proptics-modeldesk-<버전>`으로 바뀌었고 `index.html`, `en.html`, `favicon.svg`, `img/`(첫 화면의 배경 그림 두 개)가 더해졌습니다. 그림은 같은 출처에서 읽으므로 보안 헤더의 img-src는 그대로입니다.

### 검증

- `tests/brand.test.mjs`: 이름과 로고, 네 페이지의 로고 마크업, 예전 표기가 남지 않았는지, 저장 키 옮기기.
- `tests/site.test.mjs`: 첫 화면의 틀, 두 언어의 틀이 같은지, 영문 화면에 한글이 없는지, 화면의 숫자와 글 = 엔진 값, 예시 계산에 싣는 값 = 같은 입력의 엔진 결과, 두 언어의 금액 표기(손계산), 막대 조각(손계산), 예전 주소 넘기기와 언어 기억, 스타일 토큰(앱 화면과 이름이 같으면 같은 값), 스타일이 부르는 그림 파일과 너비별 배치 규칙. 실제 배치(옆으로 넘치는지)는 자동 테스트가 보지 않으며 브라우저에서 너비별로 확인했습니다.
- 점검 도구의 대상에 첫 화면을 더했습니다(import 점검의 진입점, 금지 문자 검사, 배포 묶음의 페이지 점검, 문서 값 채우기).

## 1.2.0 (2026-10-08)

입력 칸의 추천 범위와 근거를 더한 판입니다. 계산 산식, 필수 입력 정책, 엑셀 수식은 바꾸지 않았습니다.

### 다시 내려받아야 하는가

- 아니요. 지표 값은 1.1.0과 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건, 엑셀 재계산 대조 불일치 0건).
- 추천 범위에서 값을 넣은 딜만 산출물의 글이 달라집니다. 적용 기본값 원장에 '추천 범위에서 넣음' 항목이 실리고, 원장 머리말과 PPT의 [원장] 풀이, 지시문의 원장 안내가 그 값까지 덮는 말로 바뀝니다. 그런 값이 없는 딜의 산출물은 글자까지 1.1.0과 같습니다(근거 구분의 뜻 문장에 일곱째 구분의 뜻 한 구절이 더해진 것만 다릅니다).

### 원칙 변경

- 1.1까지의 "시세 수치는 싣지 않는다"를 "출처와 기준일이 있는 참고 범위만 싣는다"로 바꿨습니다. 출처를 확인하지 못한 숫자는 넣지 않습니다. 모든 추천 항목에 근거 문장, 출처 구분(법령·공공 기준, 공공 통계, 자체 실무 원고, 공개 시장 보고서), 출처 표기, 기준일, 확인 수준(확인됨, 부분 확인)이 붙습니다.
- 딜마다 고유한 값(매입가, 면적 등)은 범위를 추천하지 않고 확인할 자료만 안내합니다. 지역과 등급에 따라 달라지는 값(매각 Cap, 임대료, 공실률)은 기준 시점의 공공 통계나 공개 보고서 수치를 참고 통계로 보여 주고 넣기와 연결하지 않습니다.
- 추천은 계산에 자동으로 들어가지 않습니다. 엔진은 관행 값을 넣지 않는다는 정책(SPEC 11절)은 그대로입니다.

### 화면

- 새 화면의 가정 레일에서 추천이 있는 칸의 이름 옆에 [추천] 단추가 생겼습니다. 누르면 그 칸 아래에 종류와 적용 대상, 범위(또는 확인 자료 안내), 참고 수치, 출처 구분과 기준일, 확인 수준, 근거와 판단 기준 한 문장씩이 펼쳐지고 [자세히]에 나머지 근거와 출처 표기, 확인 경로와 한계가 있습니다. 한 번에 하나만 펼치고 다시 누르거나 Esc로 닫습니다. 숫자 칸에서는 Alt+아래로 펼칩니다(단추는 탭 순서에 넣지 않았습니다).
- 범위 추천과 법정 값의 값 단추를 누르면 그 값이 칸에 들어가고 칸 옆에 '추천 범위'(법정 값 한 점은 '법정 값') 표시가 붙습니다. 범위를 보고 그 안의 값을 직접 넣었으면 [지금 값] 단추로 같은 표시를 남길 수 있습니다. 범위 밖으로 고치거나 비우면 표시가 사라지고, 조합을 바꾸면 값만 넘어가고 표시는 넘어가지 않습니다.
- 넣기와 연결한 항목은 근거 문구를 직접 확인한 셋입니다: 일반 취득세율 4.6%, 오피스 매입과 오피스 리파이낸싱의 선순위 LTV 51~70%(2025년 11월 대주 설문, 2026년 기준금리 인상 전). 원문을 열람하지 못한 법정 값(대도시 법인 중과 취득세율, 건물 내용연수)과 물류센터의 선순위 LTV는 보여 주기만 합니다.
- 기준 시점이 오래된 항목(공공 통계 6개월, 공개 시장 보고서 12개월, 법령 확인 12개월 초과)은 감추지 않고 머리와 근거 카드의 추천 줄에 표시합니다.
- 레일 아래 채우기 단추의 이름을 [빈 칸에 관행 비율 채우기]에서 [빈 칸에 시연용 출발값 채우기]로 바꿨습니다. 넣는 값과 원장 구분은 그대로입니다. 그 값이 통용 수준이 아니라는 말을 단추 풀이, 알림, 근거 카드, 확인할 자료만 안내하는 추천 패널에 적었습니다.
- 사용 안내에 [추천]의 설명과 키(Alt+아래, Esc)를 더했습니다.

### 원장과 산출물

- 적용 기본값 원장의 근거 구분에 일곱째 '추천 범위에서 넣음'을 더했습니다. 사용자가 추천 범위나 법정 값을 보고 넣은 값이며, 지금 값이 그 범위 안일 때만 실립니다. 설명에 범위, 출처 구분, 기준일, 출처 문서 이름을 적습니다.
- 엑셀 02b, PPT 원장 장, 요약, 지시문에 같은 순서와 건수로 실립니다. 요약 블록과 한 장 요약의 원장 건수 풀이는 '추천 범위 n'으로 셉니다.

### 자료와 한계

- 추천 자료(`js/guidance/ranges.js`, 데이터 판 2026.10.2): 출처가 있는 항목 63건(범위 추천 2, 법정 값 7, 참고 통계 31, 확인 자료만 23)과 확인 안내 10건.
- 63건 가운데 51건의 확인 수준이 '부분 확인'입니다. 법령 조문은 국가법령정보센터 화면이 열리지 않아 조문 열람 서비스로, 한국부동산원 수치는 언론 대조로 확인한 것이 많습니다. 항목마다 '확인 경로와 한계'에 적었고, 사람이 원문으로 다시 대조할 목록과 사용자 결정이 필요한 사항은 `docs/guidance/REVIEW.md`에 있습니다.
- 공사 예비비는 통용 비율의 근거를 확인하지 못해 수치 없이 확인할 자료만 안내합니다.
- 화면 낭독기 음성과 실제 Tab 순회는 사람이 확인하지 않았습니다(DOM 속성과 알림 문장으로만 확인).

### 검증

- `node tools/ci.mjs --require-verify` 전체 통과. 추가한 테스트: `tests/guidance.test.mjs`(추천 자료와 원장 분류), `tests/desk-guidance.test.mjs`(레일의 [추천]). 스냅샷 달라진 항목 0건, 재계산 대조 불일치 0건.
- 새 화면에서 21개 조합의 모든 [추천] 패널을 열어 오류와 빈 글자가 없는지 확인했습니다(1366x768, 1440x900, 다크와 라이트).

## 1.1.0 (2026-10-05)

화면을 한 화면 검토 데스크로 바꾸는 판입니다. 계산 산식과 필수 입력 정책은 바꾸지 않았습니다. 기존 화면의 기능은 없애지 않고 새 구조로 옮겼으며(아래 '기능이 옮겨 간 자리'), 1.0.2까지의 화면은 `classic.html`로 이번 릴리스까지 함께 둡니다. 엔진에는 화면이 읽을 결과 필드만 더했습니다(지표 값 변화 없음).

### 다시 내려받아야 하는가

- 아니요. 지표 값은 1.0.2와 같습니다(가상 예시 21종 스냅샷 달라진 항목 0건). 엑셀 수식은 바꾸지 않았습니다(재계산 대조 불일치 0건).
- 문장 한 곳의 표기가 바뀝니다. 최대 공실률 역산 문장의 여유를 문장에 적힌 두 값의 차이로 적습니다(한계 17.2%, 현재 3.0%이면 14.2%p. 이전에는 원값의 차이를 반올림해 14.1%p로 적히는 딜이 있었습니다). 한계 값과 지표는 그대로이며, 이 문장이 실리는 PPT의 역산 표와 화면의 글자만 달라집니다. 가상 예시 21종 가운데 임대주택 개발 하나가 해당합니다.

### 화면

- 기본 진입 화면(`desk.html`)이 새 화면입니다. 가정 레일(왼쪽)과 결과 캔버스(요약 블록, 딜 타임라인, 상세 구획 7개)가 한 화면에 있고, 보고 화면(읽기 전용)과 A4 한 장 요약이 같은 요약 블록을 씁니다. 720px 미만 화면은 열람 전용입니다.
- 1.0.2까지의 화면은 `classic.html`로 이번 릴리스까지 함께 둡니다. 두 화면은 같은 계산 엔진, 같은 초안을 씁니다. 새 화면의 시작 화면과 대화상자에 '이전 화면으로 열기', 이전 화면의 꼬리에 '새 화면으로 열기' 링크가 있습니다.
- **금액 입력 단위가 다릅니다.** 새 화면은 금액을 억원으로 받습니다(1,045억원은 1045. 호실당 보증금만 만원). 이전 화면은 백만원으로 받습니다(104500). 저장되는 값과 엑셀의 단위는 두 화면 모두 백만원으로 같으므로 초안을 다른 화면에서 열어도 값은 같습니다. 화면을 옮겨 가며 직접 입력할 때는 자릿수를 확인하세요.
- 단위 확인: 새 화면은 퍼센트 칸에 소수를 넣은 것으로 보이거나(엔진의 기존 안내), 진입 Cap이 0.3% 미만 또는 30% 초과이거나, 레버드 IRR(세전)이 100%를 넘으면 결과를 보이기 전에 단위를 확인받습니다. 경계는 시세 기준이 아니라 자릿수 실수를 가리기 위한 넓은 범위입니다. 즉시 점검 목록과 산출물의 점검 문장은 1.0.2와 같습니다.
- 확인 전에는 작업 화면(캔버스 머리의 자기자본과 총사용액 포함), 보고 화면, 한 장 요약, 산출물에 지표를 싣지 않습니다. 보관함 목록과 딜 비교 표, 비교 CSV도 단위 확인 안내가 있는 딜에는 지표 대신 '단위 확인 전'을 적습니다(보관한 딜에는 확인 기록이 없으므로 안내가 있으면 언제나).

### 기능이 옮겨 간 자리

| 1.0.2 화면(classic.html)의 기능 | 새 화면(desk.html)의 자리 |
| --- | --- |
| 자산군과 거래유형 선택(카드 두 단계) | 시작 화면의 21칸 조합 표, 상단 바의 조합 단추(대화상자) |
| 입력 폼(섹션 7개, 핵심만 보기) | 가정 레일: 핵심 가정과 접힌 묶음. 핵심만 보기 단추는 없습니다(핵심 가정이 항상 위에 있습니다) |
| 가상 예시 채우기, 비우기, 표준값으로 | 시작 화면과 보류 안내의 [가상 예시로 먼저 보기], 캔버스 머리의 [비우고 내 딜 입력], 레일 아래 [빈 칸에 관행 비율 채우기] |
| NOI 직접입력 전환 | 레일 머리의 [항목별 산정, NOI 직접입력] |
| 계산 보류와 빈 필수 칸 안내 | 캔버스의 보류 구획(남은 칸, 확인할 자료, 지금까지 정해진 것), 레일의 '필수' 표시와 진행 눈금 |
| 적용 기본값 원장, 미입력 안내 | 요약 블록의 원칙 줄(건수와 풀이), 레일 칸의 글자 표시, 원장·검증 구획의 전체 목록, 보고 화면과 한 장 요약 |
| 조합별 검증 수준, 이 조합의 미반영 사항 | 조합 표의 도형, 요약 블록 원칙 줄, 원장·검증 구획, 보고 화면과 한 장 요약 |
| 핵심 지표 7개, 머리글의 IRR과 DSCR 요약 | 요약 블록(주 지표 3개와 보조 지표 한 줄), 캔버스를 내리면 위에 붙는 주 지표 한 줄 |
| 판정, 즉시 점검 | 요약 블록의 판정 문장과 점검 건수, 판정·점검 구획 |
| 빠른 변경 슬라이더 | 딜 타임라인의 손잡이와 레일 칸의 방향키 |
| 자본구조 막대와 트랜치 표, 자금 조달과 사용, 매각 내역, 개발 요약, 리파이낸싱 비교, 자산군 지표 | 딜 타임라인의 취득 기둥과 매각 기둥, 조달·사용 구획 |
| 대주 기준 점검 | [지분 투자자, 대주] 관점 전환의 요약 줄, 대주 구획(기준 표, 연도별 DSCR과 ICR, DSCR 그림) |
| 연도별 현금흐름 표 | 현금흐름 구획, 타임라인의 자기자본 현금흐름 줄 |
| 민감도 | 민감도 구획(칸을 고른 뒤 [이 가정으로 바꾸기]로 확정) |
| 시나리오 비교, 역산 5종 | 주 지표 아래 범위선, 시나리오 겹쳐 보기, 시나리오·한계 구획의 한계값 표 |
| 출처 메모 | 레일 아래 근거 카드의 출처와 기준일 칸. 보고 화면에서는 글자 번호와 목록 |
| 렌트롤, 기준 연월 | 레일의 렌트롤 줄에서 여는 대화상자 |
| 딜 보관함, 딜 비교, JSON 백업과 가져오기 | 상단 바 [보관함] 대화상자. 시작 화면에도 보관한 딜 목록 |
| 초안 자동 저장 | 그대로. 캔버스 머리에 저장 상태 |
| 엑셀, PPT, 요약 문구 복사, 공유 링크와 QR, AI 엑셀 작업 지시문과 문서 설정, 한 장 요약 인쇄, 전체 인쇄, 임차인명 가림과 모델 열기 링크 옵션 | 상단 바 [산출물] 대화상자. 한 장 요약은 보고 화면의 [한 장 요약]에서도 엽니다 |
| 사용 안내, 개인정보·보안, 변경 내역, 의견 보내기 | 상단 바 [안내] 대화상자의 탭 |
| 운영 주체 표기 | 시작 화면 꼬리와 안내 대화상자(값을 설정했을 때만) |
| 테마 전환 | 상단 바 |

금리와 공실을 함께 움직인 표, 운영비 고정·변동 분리, 보증금 선택지, 리파이낸싱 대안 비교는 이 판에 없습니다(다음 릴리스 과제).

### 대화상자와 링크

- 산출물: 한 장 요약(미리보기, 인쇄), 보고서 전체 인쇄, 엑셀 수식 모델, 검토 요약 PPT, 요약 문구 복사, 공유 링크와 QR, AI 엑셀 작업 지시문(문서 설정 포함)을 상단 바의 [산출물]에서 만듭니다. 파일과 문구는 1.0.2와 같은 내보내기 모듈이 만듭니다. 계산 보류, 오류, 단위 확인 전에는 지표가 실리는 항목을 만들지 않고 이유를 한 번 적습니다. 공유 링크와 QR은 입력만 담으므로 쓸 수 있습니다. 엑셀의 임차인명 가리기는 기본 켬, 파일의 모델 열기 링크는 기본 끔입니다.
- 보관함과 딜 비교: 보관, 열기, 이름 바꾸기, 지우기, 비교 표(보관한 딜 3건까지와 지금 화면, CSV), JSON 백업과 가져오기. 저장 형식과 키는 이전 화면과 같아 두 화면이 같은 보관함을 엽니다. 시작 화면에 보관한 딜 목록이 나옵니다.
- 렌트롤: 레일의 렌트롤 줄에서 여는 대화상자에서 파일(CSV, TSV, XLSX)을 올려 미리보기와 행별 안내를 확인한 뒤 적용합니다. 기준 연월 칸이 이 대화상자에 있고, 렌트롤을 적용한 딜에서 비면 계산을 보류합니다. 요약(임차 건수, 면적, 가중평균 임대료, 연 임대료, 임대료 가중 WALE)은 올린 파일의 계약 값을 합친 것이며 계산 엔진의 지표가 아닙니다. 올린 미리보기는 그 딜에서만 쓰고 다른 딜을 열면 버립니다.
- 안내: 사용 안내, 개인정보·보안, 변경 내역, 의견 보내기(수신 주소를 설정했을 때만)를 상단 바의 [안내]에서 봅니다. 변경 내역의 글은 `desk.html`과 `classic.html`의 `tpl-changelog` 한 벌입니다.
- 공유 링크(`#d=`)는 새 화면이 직접 읽어 보고 화면으로 엽니다. 받는 쪽에서 작성 중이던 초안은 보관함에 '이전 초안 · 시각' 이름으로 남깁니다.
- 읽기 전용 링크(`#v=`): 산출물의 [읽기 전용 링크 복사]로 만듭니다. 담기는 내용은 공유 링크와 같고, 받는 쪽에서 보고 화면으로만 열립니다. 보는 동안 앱은 초안과 보관함에 아무것도 쓰지 않으며(같은 브라우저의 다른 탭에서 저장한 초안도 그대로 남습니다), [내 모델로 열기]를 눌러야 편집으로 넘어갑니다. **읽기 전용은 보안 기능이 아니라 표시 구분입니다.** 링크를 가진 사람은 입력값을 모두 볼 수 있고 고칠 수 있습니다.
- 한 장 요약 미리보기는 대화상자로 동작합니다(열려 있는 동안 뒤 화면으로 포커스가 나가지 않고, 닫으면 연 단추로 돌아갑니다). 가정을 바꾼 직후에 미리보기나 인쇄를 열어도 한계값 표가 지금 가정의 값으로 실립니다.
- 화면에 나란히 적힌 두 숫자의 차이(목표 대비, 대주 기준 여유, 한계값의 여유, 바꾸기 전 대비)는 표시한 값끼리 뺀 값으로 적습니다(docs/NOTATION.md 8a절).

### 엔진 결과 필드 (지표 값 변화 없음, SPEC 13절)

- `annual[].toLender`, `toCosts`, `toEquity`, `exit.toEquityPreTax`: NOI와 매각가의 귀속 조각. 이미 계산한 값의 합과 차입니다.
- `scenarios(input, defs, { full: true })`: 시나리오별 입력과 전체 결과. 세 번째 인자를 주지 않으면 이전과 같습니다.
- `partialOperations(input)`: 계산 보류 중에 입력한 값만으로 정해지는 1년차 운영 줄.
- `requiredFields(input)`: 필수 칸 목록. `runModel`의 필수값 점검과 같은 규칙 목록에서 만듭니다(보류 문장과 순서는 이전과 같습니다).
- `unitScaleChecks(input, result)`: 자릿수 확인 항목. 즉시 점검(`checks`)에는 넣지 않습니다.
- `solve(...)`의 `current`, `diff`(최대 매입가, Exit Cap 역산 두 가지, 최대 공실률): 문장에 적은 현재 입력과 차이. 화면의 한계값 표가 이 값을 그대로 읽습니다.

### 최종 검증 1회차 수정 (지표 값 변화 없음)

- 시나리오의 [하방(상방) 가정을 딜에 적용]이 그 직전에 고친 딜 이름과 출처 메모를 지우던 문제를 고쳤습니다. 적용 내역의 칸만 지금 입력에 옮깁니다.
- [빈 딜로 시작], [가상 예시로 먼저 보기], [비우고 내 딜 입력]은 작성 중이던 내 딜(보관함에 같은 내용이 없는 경우)을 '이전 초안 · 시각' 이름으로 보관함에 남긴 뒤 엽니다. 알림에 그 이름과 [되돌리기]가 붙습니다.
- 레일 숫자 칸에서 Ctrl+Z는 치던 글자가 있으면 그 칸만 확정 값으로 돌리고, 없으면 앱의 되돌리기로 갑니다(이전에는 브라우저의 글자 되돌리기로 넘어가 다른 칸을 비우는 경우가 있었습니다). 대화상자나 한 장 요약 미리보기가 떠 있는 동안에는 뒤 화면의 딜을 되돌리지 않습니다.
- 한 칸에 빈칸으로 나뉜 여러 숫자를 붙여 넣으면 하나의 큰 수로 읽지 않고 '숫자로 읽을 수 없습니다'로 알립니다. 세 자리씩 띄어 쓴 한 숫자(1 045)는 그대로 읽습니다.
- 한 장 요약: 원장 줄을 근거 구분별로 묶어 근거 구분의 전체 이름('미입력(0으로 계산)', '앱 기본 판정 기준(대주 약정 아님)')을 적습니다. 대주 기준 표 아래에 앱 기본 기준이나 가상 예시 기준으로 판정한 사실을 관점과 무관하게 한 줄로 적습니다. 렌트롤을 적용한 딜의 핵심 가정에는 평균 임대료 대신 '렌트롤 적용'과 렌트롤 가중평균 임대료, 렌트롤 임대면적을 적습니다. 내용이 A4 한 쪽을 넘으면 간격, 원장 줄(근거 구분별 3건과 건수), 그림 높이 순으로 줄여 맞추고, 그래도 넘으면 미리보기 막대에 알립니다.
- 보고 화면: 렌트롤이 대신하는 칸 옆에 '렌트롤 적용 중, 계산에 쓰지 않음'을 적고, 바꾸기 전 결과를 점선으로 싣는 동안에는 그림 아래에 달라진 가정 목록을 함께 적습니다.
- 변경 줄에 렌트롤, NOI 산정 방식, 기준 연월의 차이도 적습니다. 한 줄에 가두고 전체 목록은 마우스를 올리면 보입니다.
- 근거 카드의 영향 표를 카드 맨 위로 올리고, 차이를 표시한 값끼리 뺀 값으로 적습니다(요약 블록의 비교 줄과 같은 규칙).
- 딜 타임라인: 그림 영역에 272px 이상을 보장해 1024x768과 1280x720에서도 이름표가 겹치지 않습니다. 기둥이 낮으면 금액이 큰 조각의 이름표만 적고, 금액이 1,000억을 넘어도 이름표가 그림 밖으로 나가지 않습니다. 겹친 선의 DSCR 이름표는 그 결과의 최소 값과 연차를 적습니다('하방 최소 1년차 1.10x').
- 숫자 서체 안에 섞인 한글(억, 년차, 미입력)을 Pretendard로 받습니다(두 화면 모두). 레일의 긴 단위는 모두 값 아랫줄에 적습니다.
- 접근성: 작업 화면에 제목 요소(h1, h2)를 두고, 산출물과 보관함의 같은 글자 단추에 항목 이름을 접근 이름으로 붙였습니다. 조합 바꾸기 대화상자는 방향키로 칸을 옮기면 설명이 따라 바뀝니다. 라이트 테마의 입력 칸 포커스 밑줄을 더 짙은 색으로 바꿨습니다. 좁은 화면의 보고 화면과 시작 화면 끝에 [안내와 개인정보·보안] 단추를 두었습니다.
- 원칙 줄의 '방향 있는 미입력', '상태만 적는 미입력'에 풀이를 붙였습니다(단추의 설명과 원장·검증 구획의 한 줄).

### 최종 검증 2회차 수정 (지표 값 변화 없음)

- 단위 확인을 받기 전에는 근거 카드의 영향 표와 화면 낭독기 알림도 지표를 적지 않습니다(요약, 타임라인, 상세 구획과 같은 규칙).
- 변경 줄의 [바꾸기 전으로 되돌리기]는 계산 가정만 되돌립니다. 비교 대상을 잡은 뒤에 고친 딜 이름, 출처 메모, 문서 설정은 그대로 남습니다.
- 기준에 못 미치는데 소수 2자리로는 기준과 같아 보이는 최소 DSCR(1.198x)을 화면의 모든 자리(한 줄 요약, 알림, 시나리오 표와 그림, 하방·상방 끝 값, 그림의 이름표, 연도별 표, 계산 근거, 보관함 목록과 비교 표)와 요약 문구의 지표 줄, AI 지시문의 참고값에서 같은 글자로 적습니다. 엑셀 수식은 바꾸지 않았습니다.
- 손잡이를 움직이는 동안 한계값 표와 대주 구획의 최대 공실률 줄을 흐리게 두고 손을 떼면 다시 구합니다. 다른 손잡이로 넘어가면 앞의 변경을 먼저 확정합니다(근거 줄과 되돌리기가 가정마다 따로 남습니다).
- Ctrl+Z: 관점 전환, 작업|보고, NOI 산정 방식, 민감도 축 선택 상자에 포커스가 있어도 앱의 되돌리기로 갑니다. 딜 이름, 출처, 기준일 칸에서만 글자 되돌리기입니다.
- 읽기 전용 링크의 안내 줄이 시나리오 겹쳐 보기나 창 크기 변경 뒤에도 남습니다.
- 자동으로 남기는 보관본의 이름에 딜 이름을 넣고('이전 초안 · 딜 이름 · 시각') 같은 이름이 있으면 번호를 붙입니다. 알림의 [되돌리기]로 돌아오면 방금 남긴 보관본을 함께 지웁니다.
- 초안은 브라우저에 하나입니다. 다른 탭이 다른 딜을 초안으로 저장하면 딜 머리의 저장 문구로 알립니다.
- 상세 구획의 두 단 그림(시나리오 범위, 연도별 DSCR)이 화면 폭 1000px에서 1305px 사이에서 절반으로 줄어 그려지던 문제를 고쳤습니다. 보고서 전체 인쇄는 그림을 A4 본문 폭으로 다시 그립니다.
- 1366x768: 대주 관점이거나 변경 줄이 있어도 탭 줄이 첫 화면에 남도록 세로 여백을 줄이고 대주 지표를 한 줄에 둡니다. 720px에서 999px 사이에서는 알림을 상단 바 아래 줄에 적고 딜 이름 칸이 한 줄을 다 씁니다.
- 좁은 화면: 연도별 DSCR 그림이 폭 전체를 쓰고 최소 이름표가 점, 선, 눈금 글자를 피합니다. 매각가 배분 막대는 이름표가 들어가지 않는 조각의 금액을 아래 줄에 적습니다. 보조 지표는 3열로 맞추고, 시작 화면의 보관한 딜 단추 높이를 40px로 맞췄습니다.
- 고정 타임라인(보고 화면, 한 장 요약): 마지막 해 NOI 값이 참조 눈금 이름과 겹치면 값을 뺍니다.
- 민감도: 축 머리를 고정 자릿수로 적습니다(Cap 2자리). 다크 테마에서 가장 낮은 단계 칸의 글자 명도비를 4.5:1 이상으로 맞췄습니다. 칸의 차이가 변경 줄의 차이와 끝자리에서 다를 수 있다는 주석을 붙였습니다.
- 근거 카드: 고친 영향이 없으면 영향 표를 한 줄로 접고, 상태와 출처 칸을 쓰임 문단 위에 둡니다. 쓰임 문단은 두 줄까지만 보이고 펼칩니다.
- 한 장 요약의 작은 글자를 키웠습니다(민감도 칸과 축 머리 7.6pt, 주석과 꼬리 7.2pt). 미리보기를 열면 포커스가 [인쇄]가 아니라 미리보기에 놓입니다.
- 주 지표 세 칸의 판정 줄과 범위선 높이를 맞췄습니다. 작업 화면의 숨긴 제목(h1)을 가정 레일 앞으로 옮겼습니다. 보류 구획의 확인 자료 문장은 두 줄까지 줄을 바꿉니다.

## 1.0.2 (2026-10-05)

1.0.1의 재비교에서 나온 결함과 표기를 고치는 패치입니다. 필수 입력 정책이 한 건 바뀌고, 그 밖의 계산 산식은 바꾸지 않습니다.

### 다시 내려받아야 하는가

- 아래 '계산 정책 변경'에 해당하는 딜은 값을 넣고 다시 계산해 내려받습니다.
- 그 밖의 딜은 지표 값이 같습니다. 표기와 문구가 바뀐 파일이 필요하면 다시 내려받습니다.

### 계산 정책 변경과 결과에 미치는 영향

| 변경 | 1.0.1 | 1.0.2 | 영향받는 딜 | 영향 지표와 방향 | 기존 엑셀·PPT |
| --- | --- | --- | --- | --- | --- |
| 리파이낸싱의 기존 대출잔액, 신규 선순위 LTV 빈 칸 | 0으로 계산하고 원장에 '미입력' | 필수(비면 계산 보류). 0을 직접 넣으면 계산 | 리파이낸싱에서 두 칸 가운데 하나라도 비운 딜 | 계산 보류. 값을 넣으면(0 포함) 1.0.1과 같은 값 | 값을 넣고 다시 내려받기 |
| 대출 합계가 0인 딜의 LTV, LTC (표기) | 0.0% | 값 없음('-'). 엑셀 10_수익률은 빈 칸 | 대출이 없는 딜 | 값 변화 없음. 현금흐름과 다른 지표는 같음 | 표기가 필요하면 다시 내려받기 |

두 칸을 모두 채운 리파이낸싱 딜, 매입과 개발 딜의 지표 값은 1.0.1과 같습니다(1.0.1 엔진과 같은 입력으로 대조해 차이 0. 대조한 딜 수와 범위는 `docs/verification/release-check.md` 4절).

### 표기, 점검, 문구 (지표 값 변화 없음)

표기 기준은 `docs/NOTATION.md`입니다. 아래는 계산 엔진이 내는 문장과 값 표기의 변경이며 화면, 요약, PPT, 엑셀에 같은 문장으로 나갑니다.

- 적용 기본값 원장의 설명: 비우면 결과가 한쪽으로만 움직이는 여섯 자리(기타 취득부대비, 매각 수수료, 운용보수, 자본적지출 적립, 취급수수료, 렌트프리)에 방향을 적습니다(예: '부대비 없이 계산(총사용액이 낮게 잡힘)'). 개발은 PF 취급수수료, 리파이낸싱은 리파이낸싱 비용이 같은 자리입니다. 대출, 보증금, 성장률은 방향 없이 상태만 적습니다('무차입 기준으로 계산', '보증금 없이 계산', '성장 0%로 계산').
- 즉시 점검: 방향 있는 미입력을 칸마다 올리지 않고 한 건으로 묶어 원장을 가리킵니다. 렌트프리 전용 주의는 이 한 건에 들어갑니다.
- 즉시 점검: 관리비 수입이 있는데 운영비용 비율에 0을 넣으면 주의 한 건을 올립니다. 계산은 그대로입니다.
- 무차입 표기: 대출 칸이 비어 대출이 0인 딜은 판정 첫 문장에 '대출 미입력, 무차입과 같음', 0을 직접 넣은 딜은 '무차입'을 적습니다.
- 대주 기준 표의 DSCR 행 설명과 최대 공실률 역산 결과에 DSCR의 분자 정의(운용보수, 기타 고정비, 자본적지출 적립을 빼기 전 NOI)를 적습니다. 최대 공실률 역산 결과와 판정의 하방 문장에는 운영비용을 수입 비례로 계산했다는 단서를 붙입니다. 시나리오의 상방과 하방 폭에는 '앱 고정 폭, 시장 기준 아님'을 싣습니다.
- 법인세 과세 딜의 판정: 첫 문장에 목표의 기준(레버드·세전)을 적고 세후 레버드 IRR을 이어서 적습니다. 하방 문장에도 '(세전)'을 적습니다. 비교 기준(세전)은 그대로입니다.
- 리파이낸싱에서 기존 대출과 신규 대출에 모두 0을 넣은 딜: 현금 인출과 원리금 비교 문장 대신 '리파이낸싱 비교는 해당 없습니다'를 적습니다.
- NOI 직접입력의 자본적지출 적립 칸 단위를 '% of NOI'로 적습니다(산식은 그대로 NOI × 비율). 항목별 산정에서 NOI 직접입력으로 바꾸면 옮겨 넣은 1년차 NOI와 보증금 칸 옆과 원장에 '항목별 산정 결과에서 옮김' 표시가 붙고, 전환 안내에 적립액이 얼마에서 얼마로 달라지는지 적습니다. 옮긴 칸을 고치면 표시가 사라집니다.
- 단위와 이름: 운영비용 비율의 단위 '% of EGI(보증금 운용수익 제외)', 관리비 수입 행 '관리비 수입(공실 차감 후)', DSCR·ICR 기준의 단위 'x'(원장 값 '1.20x'), 문장 안의 억원 표기는 숫자 뒤 '억'.
- 최종 검증 반영(지표 값 변화 없음):
  - 운영비용 안내: 공실에도 드는 고정비를 기타 고정비에 넣으면 운영현금흐름과 IRR에만 반영되고 NOI, DSCR, 최대 공실률 역산, 매각가에는 반영되지 않는다고 고쳐 적습니다(이전 문구는 '기타 고정비에 넣어야 반영됩니다'). 미반영 사항 패널, 공실률 50% 초과 주의, README 한계 절이 같은 내용입니다.
  - 검증 수준: 오피스와 물류센터 매입에서 NOI 직접입력에 승계 임대보증금과 보증금 운용수익률을 함께 넣은 딜도 '승계 보증금 운용수익'을 이 딜의 대조 범위 밖 항목으로 적습니다(이전에는 항목별 산정에서만 적었습니다).
  - 개발 딜의 운용보수 미입력 설명: '운용보수 없이 계산(총사용액이 낮게, 운영현금흐름이 높게 잡힘)'. 공사기간 운용보수가 총사업비에서 빠지기 때문입니다.
  - 역산 문장의 차이 값은 끝자리 0을 지우지 않습니다('-1.40%p', '+1.0%'). 결과 상단 미입력 안내의 항목은 '칸 이름: 방향'으로 적습니다.
- 엑셀: 13_검증의 '필수 입력 칸이 모두 채워짐' 점검이 리파이낸싱의 두 칸을 셉니다. 10_수익률의 LTV와 LTC는 대출 합계가 0이면 빈 칸입니다.

- 대출 합계가 0인 딜의 시나리오 설명에는 금리 가감을 적지 않습니다(대출이 없어 가감해도 값이 같습니다). 최대 공실률 역산의 대출 없음 안내는 개발 딜에서 'PF 한도(LTC)와 PF 금리'로 적습니다. 호텔의 대주 기준 표 DSCR 행 설명에 NOI가 FF&E 적립을 뺀 뒤 값임을 적습니다.

### 화면 (지표 값 변화 없음)

- 결과 상단의 미입력 안내: 비워서 0으로 계산한 칸 가운데 방향이나 상태를 적는 칸의 이름을 한 문단으로 적고, 누르면 그 칸으로 이동합니다. 머리말은 '방향 있는 미입력 m건 · 상태만 적는 미입력 s건'입니다. 칸을 채우거나 0을 직접 넣으면 목록에서 빠집니다.
- 대출이 없는 딜: 결과 머리 줄은 'LTV -'(개발은 'LTC -'), 레버드 IRR 카드의 보조 줄에 판정 첫 문장과 같은 무차입 표기를 적습니다.
- 지표 카드: 세전과 세후를 이름에 붙여 씁니다('레버드 IRR(세전)', 과세 딜의 '보통주 IRR(세후)', '평균 CoC(세후)', 'Equity Multiple(세전)'). 언레버드 IRR의 설명은 거래유형에 맞는 문구이며 엑셀 01_요약과 같은 문장입니다. 과세 딜은 법인세 전 값임을 적습니다.
- 현금흐름 표: 주석에 운영비용 비율의 분모를 적고, 대출 잔액 행 이름을 '선순위 매각 전 기말 잔액', '중순위 매각 전 기말 잔액'으로 바꿨습니다.
- 대주 기준 표: 판정을 값 칸 안에 둡니다(열 이름 '값과 판정'). 600px 이하에서는 비고를 항목 이름 아래에 적어 표가 화면 폭 안에 들어옵니다. 가로로 넘치는 표에는 가장자리 표시와 키보드 초점을 붙입니다.
- 분석: 시나리오 표 주석에 '앱 고정 폭, 시장 기준 아님'을 적고, 역산 결과는 값 문장과 단서를 나눠 적습니다.
- 알림과 채우기: 좁은 화면에서 알림을 머리글 아래에 띄웁니다. 기본 비율 채우기는 대상 칸 이름을 미리 적고, 채운 뒤 알림은 한 줄입니다.
- 이동: 머리글의 IRR 칩과 '결과로 건너뛰기' 링크가 핵심 지표로 이동합니다.
- 딜 보관함: 저장 이름으로 딜 이름을 제안하고, 같은 이름이 있으면 '이름 (2)'처럼 번호를 붙여 제안합니다. [새 이름으로 저장]은 덮어쓰지 않고 번호를 붙여 따로 저장합니다. 이미 있는 이름으로 저장하면 이전과 같이 덮어쓰기를 확인합니다.
- 안내 글: 개인정보·보안 안내의 의견 절은 의견 수신 주소가 설정된 배포에서만 보입니다. 공유 링크 안내에 주소에 담기는 것(딜 이름과 출처 메모 포함)과 주소가 남는 곳을 적었습니다.

### 산출물 (계산값 변화 없음)

계산값은 그대로입니다. 아래 표기가 필요할 때만 다시 내려받습니다.

- 엑셀의 임차인명: 내보내기 함수의 기본값이 가림입니다(옵션을 주지 않아도 '임차인 A, B'). 화면의 옵션을 꺼 실명을 실은 파일은 표지에 '임차인 실명 포함' 한 줄을 적습니다. 가림은 이름 표기만 바꾸며 보안 기능이 아닙니다.
- 엑셀 표지: '시트별 편집 범위' 표를 더했습니다. 시트마다 02_가정을 바꾸면 따라 바뀌는 칸과, 앱에서 다시 내려받아야 바뀌는 항목을 적습니다.
- 문서 속성과 바닥글: xlsx와 pptx의 작성자, 제목, 주제(빌드 식별자와 계산 주기, 검증 수준)를 채웁니다. PPT는 모든 장의 바닥글에 빌드 식별자와 계산 주기를 적습니다.
- 요약과 지시문의 검증 수준 줄: '이 딜에서 대조 범위 밖인 항목'(이 딜에 해당하는 항목만)과 '이 조합에서 대조하지 않은 범위'(조합 전체 목록)로 나눠 적습니다. 이전에는 한 줄에 조합 전체 목록을 적었습니다.
- 무차입 표기와 '-': 무차입 표기를 요약, 지시문, PPT 지표 장, 엑셀 01_요약에 한 번씩 적습니다. 값을 낼 수 없는 칸은 엑셀 표지, 01_요약, 12_시나리오에서 '-'로 적습니다(계산 시트와 13_검증은 빈 칸 그대로).
- 단서와 미입력 안내: DSCR의 분자 정의를 요약, 엑셀 01_요약과 13_검증, PPT 역산 표, 지시문에 적고, 시나리오 폭의 근거 구분을 엑셀 12_시나리오, PPT 시나리오 장, 지시문에 적습니다. 미입력 안내는 요약, 지시문, PPT 원장 장의 원장 구획에 두 줄 이하로 적습니다.
- 표기: PPT와 엑셀 표지, 12_시나리오는 과세 딜에서 '보통주 IRR(세후)'처럼 이름에 붙여 씁니다. 엑셀의 수식 시트(01_요약, 10_수익률, 13_검증)는 과세 방식을 엑셀에서 바꿀 수 있어 이름을 고정하고 01_요약의 설명 칸에 조건을 적습니다. 엑셀 05의 관리비 행, 06과 07의 잔액 행, 02_가정의 자본적지출 적립 단위(산정 방식을 따르는 수식)를 화면과 같은 말로 맞췄습니다.
- 리파이낸싱의 필수 두 칸이 비어 보류된 딜은 엑셀, PPT, 요약, 지시문을 만들지 않습니다(다른 보류와 같은 규칙).

### 배포와 검증 체계

- 문서의 점검 수치(테스트 건수, 재계산 대조 케이스 수, 빌드 식별자)를 손으로 적지 않고 `node tools/gen-docs.mjs`가 점검 요약에서 채웁니다. 점검 게이트에 '문서 값 대조' 단계를 더했습니다. 커밋하지 않은 변경이 없는 상태에서 문서와 실행 값이 다르면 실패합니다.
- 점검 게이트의 평소 실행은 점검 요약(`tools/verify/results/ci-latest.json`)을 바꾸지 않습니다. `--write`를 붙였을 때만 바꿉니다.
- 빌드 식별자를 정하는 소스에서 출시 점검 기록(`docs/verification/`)을 뺐습니다. 점검 기록을 커밋해도 식별자가 바뀌지 않아, 기록에 적힌 식별자와 실제 식별자가 어긋나지 않습니다. 앱 코드와 그 밖의 문서가 바뀌면 식별자는 전과 같이 바뀝니다.
- 배포 묶음에 변경 이력(`CHANGELOG.md`)과 점검 요약(`ci-summary.json`)을 넣습니다. 점검 요약이 묶는 빌드의 식별자로, 커밋하지 않은 변경이 없는 상태에서 전체 통과한 것이 아니면 묶음을 만들지 않습니다. 받은 묶음이 어느 빌드인지 확인하는 방법을 `docs/INSTALL.md` 2절에 적었습니다.
- 로컬 서버(`serve.mjs`)가 보안 헤더를 기본으로 붙입니다. PC 한 대에서 쓰는 경우에도 사내 서버에 올렸을 때와 같은 조건(다른 주소로의 전송 차단 포함)이 됩니다. 끄려면 `--no-secure-headers`를 붙입니다. 켠 상태에서 21개 가상 예시의 엑셀과 PPT 생성에 CSP 위반이 없는 것을 확인했습니다(`docs/verification/release-check.md` 3절).
- `deploy/_headers`의 주석이 CSP의 sha256을 두 개라고 적은 것을 실제 값대로 한 개로 고쳤습니다. 헤더 값은 바뀌지 않았습니다.

### 1.0.1 변경 이력의 정정

1.0.1 절의 표에서 실제 동작과 달랐던 설명 세 곳을 고쳤습니다. 앱의 동작은 1.0.1 그대로입니다.

- 건물 내용연수: '법인세 과세에서 필수'라고 적었으나, 실제로는 법인세 과세이면서 감가상각 대상 금액이 있을 때(개발은 항상, 매입과 리파이낸싱은 건물분 비율이 0보다 클 때)만 필수입니다.
- 운영비용 비율, 공실률: 영향받는 딜을 '모든 자산군'이라고 적었으나, 호텔에는 두 칸이 없고 데이터센터에는 공실률 칸이 없습니다.
- 원리금 상각기간: 개발이 아니고 선순위 대출이 있을 때만 필수라는 조건이 빠져 있었습니다.

## 1.0.1 (2026-10-02)

전략 문서의 0단계(먼저 막아야 할 것)를 반영한 판입니다. 지표 산식 자체는 바꾸지 않았습니다. 바뀐 것은 빈 칸을 어떻게 다루는가, 앱이 넣는 기본값을 어떻게 드러내는가입니다. 모든 칸을 직접 채운 딜은 1.0.0과 같은 값이 나옵니다(아래 '결과가 달라지지 않는 경우').

### 다시 내려받아야 하는가

- 1.0.0에서 받은 엑셀과 PPT는 모두 다시 내려받기를 권합니다. 1.0.0 파일에는 빌드 식별자, 적용 기본값 원장, 검증 수준 표기가 없어 어떤 기본값이 들어간 숫자인지 파일만으로 알 수 없습니다.
- 아래 표에서 '결과가 달라짐'에 해당하는 딜은 반드시 다시 계산해 내려받습니다. 1.0.0 파일의 숫자는 이번 판의 화면 숫자와 다릅니다.
- 1.0.0에서 저장한 보관함 딜과 공유 링크는 그대로 열립니다. 앱은 값을 채워 넣지 않으며, 필수 칸이 비어 있으면 계산 보류 상태로 열립니다.
- 구분 방법: 엑셀 00_표지와 13_검증, PPT 표지와 마지막 장에 빌드 식별자가 있으면 1.0.1 이후 파일입니다.

### 계산 정책 변경과 결과에 미치는 영향

| 변경 | 1.0.0 | 1.0.1 | 영향받는 딜 | 영향 지표와 방향 | 기존 엑셀·PPT |
| --- | --- | --- | --- | --- | --- |
| 기타 취득부대비 빈 칸 | 1.5% 자동 적용 | 0으로 계산하고 원장에 '미입력' | 매입, 개발에서 이 칸을 비운 딜 | 총사용액 감소, 자기자본 감소, IRR·EM 상승 | 다시 내려받기 |
| 매각 수수료 빈 칸 | 1.0% 자동 적용 | 0으로 계산하고 원장에 '미입력' | 이 칸을 비운 모든 딜 | 순매각현금 증가, IRR·EM 상승 | 다시 내려받기 |
| 보증금 운용수익률 빈 칸 | 3.0% 자동 적용 | 0으로 계산하고 원장에 '미입력' | 보증금이 있고 이 칸을 비운 딜 | NOI·매각가 감소, 언레버드 IRR 하락 | 다시 내려받기 |
| 건물분 비율, 건물 내용연수 빈 칸 | 40%, 40년 자동 적용 | 건물분 비율은 0으로 계산(원장). 내용연수는 법인세 과세이면서 감가상각 대상 금액이 있을 때(개발은 항상, 매입과 리파이낸싱은 건물분 비율이 0보다 클 때) 필수 | 법인세 과세(비도관) 딜 | 감가상각 감소, 세후 IRR 하락 또는 계산 보류 | 다시 내려받기 |
| 법인세율 빈 칸 | 22% 자동 적용 | 법인세 과세에서 필수(비면 계산 보류) | 법인세 과세 딜 | 계산 보류 | 값을 넣고 다시 내려받기 |
| 운영비용 비율, 공실률 빈 칸 | 0%로 계산 | 필수(비면 계산 보류) | 항목별 산정 모드에서 이 칸이 있는 자산군(공실률: 오피스, 물류센터, 오피스텔, 임대주택, 리테일. 운영비용 비율: 여기에 데이터센터) | 1.0.0은 NOI와 IRR이 높게 나옴 | 값을 넣고 다시 내려받기 |
| 임대면적 비율 빈 칸(오피스) | 100%로 계산 | 필수(비면 계산 보류) | 오피스 | 1.0.0은 임대료 수입이 높게 나옴 | 값을 넣고 다시 내려받기 |
| 임대면적 비율(물류센터) | 입력 없음(연면적 전체) | 입력 신설, 필수. 임대료·관리비·보증금 면적 기준 = 연면적 × 임대면적 비율 | 물류센터 | 100%보다 낮게 넣으면 NOI 감소 | 값을 넣고 다시 내려받기 |
| 물류센터 저온 임대료 빈 칸 | 상온 임대료로 대체 | 저온 비중이 0보다 크면 필수 | 물류센터 | 계산 보류 | 값을 넣고 다시 내려받기 |
| 호텔 운영사 기본보수·성과보수, 소유자 고정비, FF&E 적립 빈 칸 | 0%로 계산 | 필수 | 호텔 | 1.0.0은 NOI가 높게 나옴 | 값을 넣고 다시 내려받기 |
| 데이터센터 PUE 빈 칸 | 1.0으로 계산 | 전력비가 있으면 필수. 전력비는 전가가 아니면 필수 | 데이터센터 | 1.0.0은 전력비가 낮게 나옴 | 값을 넣고 다시 내려받기 |
| 원리금 상각기간 빈 칸 | 30년으로 계산 | 선순위 대출이 있고 상각하는 상환방식이면 필수(개발 제외) | 매입, 리파이낸싱의 원리금균등, 원금균등, 거치 후 원리금균등 | 계산 보류 | 값을 넣고 다시 내려받기 |
| 임대주택 매입의 취득세율 빈 칸 | 4.6% 자동 적용 | 필수(주택은 세율 체계가 달라 기본값을 넣지 않음) | 임대주택 매입 | 계산 보류 | 값을 넣고 다시 내려받기 |
| 취득세율 빈 칸(임대주택 외 매입, 개발의 토지) | 4.6% 자동 적용(근거 표기 없음) | 4.6% 적용은 같고 '법령 근거 기본값'으로 원장에 조문과 확인일 표기 | 해당 딜 | 값 변화 없음 | 원장 표기가 필요하면 다시 내려받기 |
| Debt Yield 판정 기준 | 선순위 금리와 비교 | 기준 입력 신설. 비면 판정하지 않음('기준 미입력') | 대출이 있는 모든 딜 | Debt Yield 값은 같고 충족·미달 판정만 달라짐 | 다시 내려받기 |
| ICR 판정 기준 | 1.0x 고정 | 기준 입력 신설. 비면 앱 기본 판정 기준 1.0x(원장에 표기) | 대출이 있는 모든 딜 | 기준을 넣지 않으면 판정 같음 | 판정 근거 표기가 필요하면 다시 내려받기 |
| DSCR 1.2x, LTV 65% 기준 빈 칸 | 대주 기준처럼 적용 | 값은 같고 '앱 기본 판정 기준(대주 약정 아님)'으로 원장에 표기 | 기준 칸을 비운 딜 | 값과 판정 변화 없음 | 표기가 필요하면 다시 내려받기 |
| 감정평가액, 개발 PF 금리·취급수수료 빈 칸 | 매입가, 선순위 금리·수수료로 대신(표기 없음) | 대신하는 규칙은 같고 '다른 입력으로 대신함'으로 원장에 표기 | 해당 칸을 비운 딜 | 값 변화 없음 | 표기가 필요하면 다시 내려받기 |
| 렌트롤의 객체가 아닌 행(null 등) | 처리 규칙 없음 | 걸러 내고 계산 | 손상된 렌트롤 자료를 가져온 딜 | 정상 자료는 변화 없음 | 해당 없음 |

엑셀 수식만 바뀐 항목(화면 계산은 영향 없음):

- 임대주택 엑셀에서 NOI 성장률 칸이 비어 있으면 임대료 인상 상한이 성장률로 적용되던 수식을 고쳤습니다. 이 칸을 비운 임대주택 딜의 엑셀은 다시 내려받습니다.
- 엑셀 수식에 남아 있던 대체값(임대면적 비율 100%, PUE 1.0, 상각기간 30년, 저온 임대료의 상온 대체)을 없애고, 13_검증의 '필수 입력 칸이 모두 채워짐' 점검을 앱의 계산 보류 조건과 같게 맞췄습니다.
- 물류센터 엑셀의 임대료, 관리비, 보증금 수식이 임대면적(연면적 × 임대면적 비율)을 씁니다.
- 13_검증의 ICR·Debt Yield 판정 행이 02_가정의 기준 칸을 참조합니다.

### 최종 검증 2회차 반영 (2026-10-05)

지표 값(IRR, EM, DSCR, NOI 등)은 바뀌지 않았습니다. 표기와 안내가 바뀌었습니다. 입력에 새 기록(`meta.sampleValues`)이 생겼지만 계산에는 쓰이지 않습니다.

| 변경 | 이전 | 이후 | 영향받는 딜 | 영향 지표와 방향 | 기존 엑셀·PPT |
| --- | --- | --- | --- | --- | --- |
| 가상 예시 표시 판정 | 딜 이름이 '가상 예시'로 시작하는지만 확인. 이름만 바꾸면 표시가 사라지고 예시 값이 직접 입력처럼 실림 | 예시가 넣은 숫자 칸의 경로를 입력에 기록하고, 고치지 않은 칸이 남아 있으면 이름과 무관하게 '가상 예시에서 시작한 딜 · 예시 값 n칸이 남아 있습니다'로 표시 | 가상 예시에서 시작해 이름이나 일부 값만 고친 딜(이 판 이후에 예시를 불러온 딜) | 값 변화 없음. 화면, 엑셀 표지·02_가정·02b, PPT, 요약, 지시문의 표기만 달라짐 | 가상 예시에서 시작한 딜의 파일은 다시 내려받기 |
| 가상 예시가 넣은 판정 기준의 표기 | '대주 기준 1.20x를 충족' | '가상 예시 기준 1.20x(대주 약정 아님)를 충족'. 기준 칸을 직접 고치면 '대주 기준' | 가상 예시의 DSCR, LTV, ICR 기준을 고치지 않은 딜 | 값과 판정 변화 없음 | 문장이 실린 파일은 다시 내려받기 |
| 판정하지 않은 행의 기준 칸 | 대출이 없고 기준 칸이 비어 있어도 1.20x, 65.0%, 1.00x를 표시 | 기준을 싣지 않음('-'). 직접 넣은 기준은 그대로 표시 | 대출이 없거나 원리금 상환이 없고 기준 칸을 비운 딜 | 값과 판정 변화 없음 | 표기가 필요하면 다시 내려받기 |
| 대주 기준 표의 LTV 행 이름 | 최대 LTV(보증금 제외), 개발은 최대 LTV | LTV(취급 시점, 보증금 제외), 개발은 LTV(준공 시점). 엑셀 01_요약도 같은 이름 | 모든 딜 | 값 변화 없음 | 해당 없음 |
| 엑셀 13_검증의 대주 기준 행 이름 | 최소 DSCR 대주 기준 이상 등 | 최소 DSCR 기준 이상, LTV 기준 이하, 최소 ICR 기준 이상, Debt Yield 기준 이상. 기준의 출처는 설명 열에 적음 | 모든 딜 | 값과 판정 변화 없음 | 해당 없음 |
| 역레버리지 참고 문장 | '대출 금리가 자산 수익률보다 높은 역레버리지 구간' | '금리와 대출 수수료(취급수수료, 중도상환수수료)를 합친 차입 비용이 자산 수익률보다 높은 구간' | 레버드 IRR이 언레버드 IRR보다 낮은 딜 | 값 변화 없음 | 해당 없음 |

산출물과 화면:

- 원장이 0건이어도 가상 예시 값이 남아 있으면 '앱이 값을 넣거나 0으로 계산한 칸이 없습니다'라고만 적지 않고 남은 칸 수와 이름을 함께 적습니다. 화면의 원장 패널에는 남은 칸 목록이 접혀 있습니다.
- 원장 0건일 때의 대체 규칙 안내를 PPT 원장 장과 한 장 요약에도 적습니다(화면, 요약 복사, 지시문, 엑셀 02b와 같은 문장).
- 엑셀 01_요약의 판정 문장 구획 제목에 앱 화면의 계산 주기를 적습니다(반기·월 주기에서 같은 시트의 연 단위 값과 다른 이유가 드러나게).
- 화면 원장 요약 줄의 근거 구분별 건수 순서를 엔진 경고 문장과 같은 순서로 맞췄습니다.
- 대출이 없는 딜의 결과 머리 줄은 'LTV 0.0%' 대신 '대출 없음'이라고 적습니다.
- 계산 보류 안내를 '필수 칸은 0이나 기본값으로 대신해 계산하지 않습니다. 선택 칸을 비우면 0이나 기본값으로 계산하고 원장에 남깁니다'로 고쳤습니다.
- 비우면 0으로 계산하는 선택 칸(관리비, 보증금, 렌트프리, 운용보수, 기타 고정비, 자본적지출 적립, 중도상환수수료, 매각성과보수, 취급수수료 등)에 모두 '비우면 0' 안내를 붙였습니다.
- 채우기 알림을 한 문장으로 줄이고, 값의 성격에 관한 설명은 버튼 설명과 원장 패널로 옮겼습니다.
- 사용 안내의 '커버넌트'를 화면 표 제목과 같은 '대주 기준'으로 맞췄습니다. 검증 수준 설명에서 개발 용어('저장소')를 뺐습니다. 등급과 뜻은 그대로입니다.
- 임대주택 가상 예시의 이름을 '도심 임대주택 단지'로, 자산군 설명을 '임대주택(등록 임대 포함)'으로 바꿨습니다. 취득세율 출처 메모에 가정의 전제(임대사업자의 공공지원민간임대주택 공급 목적 취득, 세대당 6억원 이하, 국민주택 규모 이하)를 모두 적었습니다. 세율과 지표는 그대로입니다.
- 접이 상자 안의 표가 좁은 화면에서 상자 오른쪽 테두리 밖으로 나가던 것을 고쳤습니다.
- 이 판 이전에 저장한 가상 예시 딜과 공유 링크에는 경로 기록이 없어 이전처럼 이름 머리말로만 판단합니다.

### 최종 검증 1회차 반영 (2026-10-02)

지표 값(IRR, EM, DSCR, NOI 등)은 바뀌지 않았습니다. 판정, 경고 등급, 표기가 바뀌었습니다.

| 변경 | 이전 | 이후 | 영향받는 딜 | 영향 지표와 방향 | 기존 엑셀·PPT |
| --- | --- | --- | --- | --- | --- |
| 대출이 없는 딜의 LTV 판정 | 0.0%를 기준과 비교해 '충족', 원장에 LTV 기준 1건 | '해당 없음', 원장에 적지 않음 | 대출 합계가 0인 딜 | 지표 값 변화 없음. 대주 기준 표의 LTV 판정과 원장 건수만 달라짐 | 판정 표기가 필요하면 다시 내려받기 |
| 최소 DSCR 미달 경고 등급 | 엔진 경고는 '주의', 즉시 점검은 '확인 필요' | 둘 다 '확인 필요' | 최소 DSCR이 기준에 못 미치는 딜 | 값 변화 없음. 엑셀 01_요약의 등급 표기만 달라짐 | 다시 내려받기 |
| 앱 기본 기준으로 판정한 문장 | '대주 기준 1.20x를 충족' | '앱 기본 기준 1.20x(대주 약정 아님)를 충족' | DSCR·LTV·ICR 기준 칸을 비운 딜 | 값과 판정 변화 없음 | 문장이 실린 엑셀 01_요약·13_검증, PPT를 다시 내려받기 |
| 대주 기준 표의 LTV 행 이름 | 최대 LTV | 최대 LTV(보증금 제외). 개발은 그대로 | 매입, 리파이낸싱 | 값 변화 없음 | 해당 없음 |
| 렌트프리(오피스), 앵커 임차 비중(리테일) 빈 칸 | 0으로 계산하고 원장에 '미입력'(설명 없음) | 계산은 같고 원장 설명에 방향을 적고 즉시 점검에 주의 | 해당 칸을 비운 딜 | 값 변화 없음 | 원장 설명이 필요하면 다시 내려받기 |
| 호텔·데이터센터의 폼에 없는 공실 조정 값 | 참고 문장으로만 알림 | 주의로 알리고, 화면은 점유율(임대율) 칸에 합쳐 엶 | 공유 링크나 백업 파일에 이 값이 들어 있던 딜 | 값 변화 없음(적용 점유율이 같음) | 해당 없음 |

산출물과 화면:

- 지시문의 가정값 목록과 PPT 가정 장에서 채우기로 넣은 값(기타 취득부대비, 매각 수수료, 보증금 운용수익률)에도 근거 구분과 [원장] 표시를 붙입니다.
- 소수로 넣은 보유기간은 엑셀 표지와 지시문에도 계산에 쓴 정수를 앞에 적습니다(PPT, 요약과 같은 표기).
- 엑셀 02_가정의 작성 원칙을 내부 식별자가 아니라 화면과 같은 이름으로 적습니다.
- 원장 0건일 때 산출물 문장을 '앱이 값을 넣거나 0으로 계산한 칸이 없습니다'로 바꾸고 원장 대상이 아닌 대체 규칙 안내를 덧붙입니다('모두 직접 입력한 값'이라고 단정하지 않습니다).
- 퍼센트 칸에 소수로 넣은 것으로 보이는 값이 확인 필요 등급이면 엑셀, PPT, 요약, 지시문을 만들기 전에 한 번 확인을 받습니다(차단은 아닙니다).
- 가상 예시에서 값을 고친 칸의 예시 출처 메모를 지웁니다. 비우기와 조합 변경(입력 유지)에서도 예시 메모를 넘기지 않습니다.
- 결과 열에서 핵심 지표를 원장 요약 줄 바로 아래로 올리고 미반영 사항을 판정 아래로 옮겼습니다. 좁은 화면의 원장 표는 근거 구분을 항목 이름 아래에 적습니다.
- 언레버드 IRR 카드의 설명을 정의대로 고쳤습니다(무차입 기준, 취득세와 부대비 포함, 운용보수·고정비·자본적지출 적립 차감 후). 개발의 총사업비 각주에 공사기간 운용보수·고정비를 더했습니다.
- 개발의 안정화 기간 칸에 '비우면 0'과 낙관 방향 안내를 넣었습니다. 임대주택 매입 가상 예시의 목표 IRR을 5.5%로 바꿨습니다(가상 값. 예시의 가정과 지표는 그대로).
- 비어 있는 필수 칸에 화면 낭독기용 표시(aria-required, aria-invalid, 설명)를 붙였습니다.
- 화면 변경 내역의 1.0.0 제목을 '기준선'으로 고쳤습니다(1.0.0은 공개 배포한 판이 아닙니다).

### 결과가 달라지지 않는 경우

- 위 표의 칸을 모두 직접 채운 딜. 손계산 기준 딜(레버드 IRR 6.000%, 언레버드 IRR 5.000%, DSCR 2.50x, Equity Multiple 1.300x)은 1.0.0과 1.0.1에서 같은 값이 나오고 테스트를 고치지 않고 통과합니다.
- NOI 직접입력 모드에서 취득·매각 비용 칸을 모두 채운 딜.
- 확인 방법: 1.0.0 엔진(커밋 3ee4a1a)과 1.0.1 엔진에 같은 입력을 넣어 비교했습니다. 모든 칸을 채운 가상 예시 21종을 연·월 주기와 도관·법인세 과세로 바꾼 84개 딜에서 지표 16종과 총사용액 1,428개 값이 모두 같았습니다(상대 차이 0). 물류센터는 1.0.0에 없던 임대면적 비율을 100%로 두고 비교했습니다. 기록은 `docs/verification/release-check.md`에 있습니다.

### 가상 예시

화면의 가상 예시 21종 수치를 다시 맞췄습니다(실제 거래나 시세가 아닙니다). 매각 Cap이 진입 Cap 이상이고, 개발은 YoC가 매각 Cap 이상이며, 첫 화면의 즉시 점검 주의와 적용 기본값 원장이 0건입니다. 1.0.0의 가상 예시와 수치가 다르므로 예시로 만든 파일을 비교 자료로 쓰지 않습니다.

### 산출물과 화면

- 계산이 보류됐거나 오류인 입력으로는 엑셀, PPT, 요약(요약 복사와 한 장 요약 인쇄), AI 지시문을 만들지 않고 같은 문장으로 이유를 알립니다. 공유 링크, QR, 화면 전체 인쇄는 지표가 실리지 않으므로 막지 않습니다.
- 결과 화면, 엑셀(표지, 02b, 13_검증), PPT, 요약, 지시문에 적용 기본값 원장, 조합별 검증 수준, 빌드 식별자와 계산 주기를 같은 내용으로 싣습니다.
- 엑셀 02_가정은 입력하지 않은 칸을 0이 아니라 빈 칸으로 싣고 칸마다 처리 구분을 적습니다.
- 민감도 표의 색을 골드와 블루그레이로 바꾸고 현재 가정 대비 차이를 부호와 함께 적습니다(화면, 엑셀 11_민감도, PPT).
- 엑셀 렌트롤 임차인명 가림을 기본으로 켜고, 엑셀·PPT의 모델 열기 링크를 기본으로 넣지 않습니다. 표기 구분이며 보안 기능이 아닙니다.
- 저장한 테마가 없으면 기기의 라이트·다크 설정을 따릅니다.

### 배포와 검증 체계

- 엑셀, PPT, QR 라이브러리와 서체를 `vendor/`에 고정 버전으로 넣어 다른 출처로 요청하지 않습니다. 보안 헤더 예시(`deploy/`)와 배포 묶음 생성기(`tools/package-release.mjs`)를 더했습니다.
- 입력 스키마 버전(`schema: 1`)과 빌드 식별자를 더했습니다. 다른 빌드에서 만든 딜을 열면 안내가 뜹니다.
- 배포 전 점검 게이트 `node tools/ci.mjs --require-verify`와 엑셀 재계산 대조 장치 `tools/verify`를 저장소에 넣었습니다.
- 21개 조합의 엑셀과 PPT를 Microsoft Excel과 PowerPoint로 열어 확인한 기록을 `docs/verification/office-open-check.md`에 남겼습니다.

### 알려진 한계 (1.0.1)

- 21개 조합 가운데 다른 계산 도구나 별도 참조 모델과 수치를 대조한 조합은 4개이고 나머지 17개는 손계산 단위 테스트만 있습니다. 결과 화면과 산출물에 조합별 실제 수준을 표시합니다.
- 운영비용은 EGI 비율 방식이고 고정비·변동비를 나누지 않습니다. LTV에는 승계 임대보증금을 넣지 않습니다. 둘 다 다음 단계 과제입니다.
- `js/config.js`의 운영 주체, 문의 주소, 대상 사용자, 의견 수신 주소는 비어 있으며 배포 전에 운영 주체가 넣어야 합니다.

## 1.0.0 (2026-09-24)

최초 판입니다. 자산군 7종과 거래유형 3종의 21개 조합 계산, 엑셀 수식 모델, 검토 요약 PPT, 공유 링크와 QR, 민감도·시나리오·역산, 딜 보관함을 담았습니다.
