DSD푸팅 · git:20261104.75988c3 · 2026-11-04 · sha256 45f390c6312c6b8b
DSD푸팅 git:20261104.75988c3B
Immutable. This exact content never changes and is served at /api/v1/blob/45f390c6312c6b8b.
--- name: DSD푸팅 description: '회사가 준 DART 편집기 파일(dsd)이나 DART 공시 원문(xml)을 읽어 재무제표와 주석의 숫자가 서로 맞는지, 표가 아닌 글(오타 · 표현 · 주소 · 대표이사 변경 · 감사기간 · 공시 누락)이 바른지, 정산표 · 작년 보고서 · 함께 낸 연결(별도) 보고서와 맞는지 엑셀 수식으로 검증한다(감사인의 푸팅: 합계, 재무제표 ↔ 주석 레퍼, 계산, 전기, 정산표, 문장 속 금액, 주석 번호 참조). 브라우저 검토 화면(HTML)에서 이전 판과 나란히 견주고, 칸을 눌러 검증을 보고, 「수정」 을 누르면 원본은 두고 수정판 dsd 에 써서 다시 검증한다. 엔진이 먼저 30초 안에 화면을 내고 AI 는 틀린 곳만 본다. 주석을 읽고 뜻으로 연결과 합계 구조를 정의하는 일은 AI 가, 계산과 비교는 엔진과 엑셀이 한다. 엑셀에 표지(결론 · 작성자 · 검토자)가 있어 조서로 편철한다. "dsd 푸팅", "DSD 검토", "다트 파일 푸팅", "레퍼 체크", "재무제표 주석 대사", "주석 숫자 맞는지", "회사 제시 dsd", "dsd 버전 비교", "수정본 뭐 바뀌었나", "판 비교", "v2 v3 비교", "뭐가 삭제됐나", "같이 고칠 곳", "전기 숫자 작년 공시와 맞는지", "주당이익 검산", "정산표랑 dsd 대사", "수정분개 반영됐나", "오타 검토", "문장 검토", "주소 바뀐 거 반영됐나", "대표이사 변경", "감사기간 맞는지", "빠른 검토", "DSD 빨리", "HTML 로 보여줘", "검토 화면", "화면에서 수정", "수정 누르면 dsd 업데이트", "수정판 dsd", "DSD푸팅 사용법", "DSD푸팅 어떻게 써", "설치했어"가 언급되면 트리거.' --- # DSD푸팅 dsd 한 파일로 돈다. 감사 폴더가 없어도 된다. - 엔진: 이 스킬 폴더의 `scripts/`. 감사 엔진에서 dsd 푸팅에 쓰는 부분만 담았다(`scripts/audit/report/dsd_grid.py` 판독 · `dsd_links.py` 합계 구조와 검증 · `dsd_propose.py` 연결 후보 · `dsd_patch.py` 칸 번호 · `dsd_ai.py` 읽기 자료와 원문 대조 · `dsd_book.py` 엑셀 · `dsd_wtb.py` 정산표 · `dsd_text.py` 문장 검토 · `dsd_view.py` · `dsd_view.html` 검토 화면 · `dsd_serve.py` 화면 서버 · `dsd_fix.py` 화면 수정 → 수정판 · `dsd_versions.py` 판 비교 · `dsd_draft.py` · `dsd_build.py` 원고 엑셀 ↔ dsd). - 명령: `python scripts/run.py <quick · serve · fix · links · foot · text · diff · view · sheet · build · fetch · read> …`. 스킬 폴더에서 부르고 환경변수 `PYTHONIOENCODING=utf-8` 을 준다. 옵션은 `python scripts/run.py foot -h`. - 결과 폴더는 dsd 가 있는 곳 옆에 둔다. 고객 자료를 저장소나 공유 폴더에 올리지 않는다. - 이 파일은 한 번에 읽힌다. 자세한 꼴과 규칙은 아래 「참고 문서」 에 있고, 필요한 절만 찾아 읽는다. ## 처음 쓰는 사람에게(설치 직후 · 「어떻게 써」) 설치한 뒤 처음 부르거나 「DSD푸팅 어떻게 써」, 「사용법」, 「HTML 로 어떻게 봐」 라고 하면 아래를 짧게 알려 준다. Claude 에게 보낼 문장으로 적는다(터미널 명령은 적지 않는다). 사용자가 dsd 경로를 이미 줬으면 안내 없이 바로 「빠른 검토와 화면에서 고치기」 1번부터 돌린다. 1. **준비**: 회사가 준 dsd(DART 편집기 파일)를 한 폴더에 둔다. 있으면 함께 둔다: 정산표(WTB) 엑셀, 작년 감사보고서 dsd, 회사가 앞서 준 판(v2 등). 2. **첫 화면(30초 안팎)**: 「<dsd 경로> 빠른 검토해 줘. 정산표는 <경로>, 작년 보고서는 <경로>, 이전 판은 <경로>」. 엔진만 돌린 결과가 브라우저 화면(http://127.0.0.1:8791)으로 열린다. 이 화면의 FALSE 는 AI 판정 전이라 엔진 후보가 잘못 걸린 것이 섞여 있다. 3. **화면 보는 법**: 위쪽 「판 비교 · 숫자 검증 · 문장 검토」 단추로 바꾼다. - 판 비교: 이전 판과 나란히 놓고 한 번에 스크롤한다. 연두 추가 · 분홍 삭제 · 하늘색 변경 · 주황 옮김. 칸에 마우스를 올리면 옛 값 · 새 값 · 차이가 보인다. 오른쪽 목록을 누르면 그 칸으로 간다. 목록 맨 위 「같이 고칠 곳」 은 이전 판에서 같은 숫자였던 곳 가운데 이번에 한 곳만 고친 곳이다(빨간 점선 칸). - 숫자 검증: 칸 색이 결과다(초록 맞음 · 빨강 FALSE · 노랑 확인 · 단수 차이 · 하늘색 조서와 맞출 칸 · 회색 검증 없는 숫자). 칸을 누르면 오른쪽에 그 칸의 검증(식 · 두 금액 · 차이 · 판정 · 차이 설명 후보)이 나온다. 「FALSE 만」 · 「확인만」 으로 거른다. - 문장 검토: 오타 · 표현 · 사실 불일치 · 공시 누락 표. 4. **AI 판정**: 「AI 판정까지 해 줘」. AI 는 FALSE 와 할 일만 보고 연결 · 판정을 적은 뒤 다시 검증한다. 화면의 「다시 검증」 을 누르면 새 결과로 바뀐다. 5. **화면에서 고치기**: 검증 카드의 「판정이 고치라는 칸 … [수정]」, 숫자 칸을 눌러 나오는 「이 칸 고치기」, 문장 검토 표의 「수정」. 확인 창 뒤에 원본은 두고 `<이름>_수정판.dsd` 에 쓰고 다시 검증한다. 「되돌리기」 는 마지막 수정을 뺀다. 「수정판 받기」 로 dsd 를 받는다. 수정판은 DART 편집기에서 열어 본 뒤에 제출 파일로 쓴다. 6. **확인 표시**: 검증마다 O(확인함) · X(잘못 걸린 연결)와 메모를 누르고 「확인 내려받기」. 조서 정본은 엑셀 `DSD푸팅_<이름>.xlsx` 다(표지 · 오버뷰 · 볼 것 · 검증 범위 시트). 7. **다시 열기**: 「<결과 폴더> 검토 화면 다시 열어 줘」. 판만 견주려면 「<옛 판> 이랑 <새 판> 판 비교 HTML 로 보여 줘」. ## 감사인의 푸팅에서 이 스킬이 맡는 것 | 푸팅 항목 | 이 스킬에서 | 남는 일 | |---|---|---| | 합계(세로 · 가로) | 엔진이 찾고 AI 가 확인하는 합계 구조. 합계 칸 옆 TRUE | 회색 합계 칸은 눈으로 | | 재무제표 ↔ 주석, 주석 ↔ 주석 레퍼 | 엔진 후보와 AI 가 뜻으로 적은 연결 | 걸지 않은 연결의 이유를 읽는다 | | 재무제표 사이(대차, 자본변동표 ↔ 재무상태표, 당기순이익, 현금) | 규칙 다섯과 AI 연결 | | | 이익잉여금처분계산서(결손금처리계산서) | 처분계산서 규칙 다섯(`references/처분계산서-감리지적.md`). 본표 절에 없으면 이익잉여금 주석 안 표를 찾는다 | | | 감리지적 유형(특수관계자 자금거래 · 보증, 담보) | 엔진 검사. 보증 금액 비교는 「확인」, 공시가 빠졌을 수 있는 곳은 원문 대조의 「감리지적 유형: …」 알림 | 알림을 원문으로 읽고 공시 누락이면 문장 검토에 적는다 | | 계산(주당이익, 자본금 = 주식수 × 액면, 유효세율) | `calcs` | | | 감사한 숫자(정산표) | `--wtb`. 수정분개가 빠진 과목은 엔진이 판정을 적는다 | 정산표 최종판으로 다시 | | 전기 금액 = 작년 보고서 | `--prior` | 재분류 공시 확인 | | 연결 ↔ 별도 | `--pair`(자본금 규칙과 AI 의 「짝:」 연결) | | | 문장 속 금액 | 「주석N-문장」 표로 모아 연결하거나 조서 대사로 넘긴다 | | | 보고서 안에 맞춰 볼 곳이 없는 숫자(약정 한도, 담보, 보험, 특수관계자 거래) | `workpapers` 로 「조서 대사」 시트에 | 조서와 맞춘다 | | 주석 번호 참조, 머리줄 기수와 날짜, 원문 표 수 | 엔진의 원문 대조(「검증 범위」 시트 끝) | | | 수정본에서 바뀐 곳, 고쳐 달라고 한 곳이 고쳐졌는지, 한 곳만 고친 곳 | `--prev`(판 비교 화면 · 엑셀, 「같이 고칠 곳」) | | | 표가 아닌 글: 오타 · 표현, 주소 · 대표이사 · 상호 변경, 회계감사 기간, 감사보고서일, 공시가 필요한데 빠진 내용 | 문장 검토(`references/문장-검토.md`). 이전 판에서 띄어쓰기가 빠진 낱말도 오타로 넘어온다 | 고칠지 정하기(O · X) | **정산표(리드) 최종 숫자 대사는 늘 돌리는 고정 항목이다.** 푸팅의 첫 순서는 감사한 숫자와 맞추는 것이다. 정산표가 있으면 늘 `--wtb` 를 붙인다. 엑셀 「볼 것」 맨 아래 「정산표 대사」 줄에 본표 과목 대사 건수 · 맞음 · FALSE(그중 수정분개 미반영) · 정산표에서 못 찾은 과목이 나온다. 정산표가 없으면 그 줄에 「정산표 없이 돌렸다」 가 나오고, 결과는 「dsd 안에서 서로 맞는다」 까지만 말한다. ## 맡는 일(엔진 · AI · 회계사) | 일 | 누가 | |---|---| | dsd 를 재무제표와 주석 번호별 표로 읽기, 금액이 맞는 것을 근거로 표 안 합계 구조 찾기 | 엔진 | | 금액을 보지 않고 위치 · 이름 · XBRL 코드로 연결 후보 내기, 첫 화면 내기 | 엔진 | | 표를 읽고 합계 구조를 확인하기. 엔진이 못 찾은 합계와 틀리게 찾은 합계를 뜻으로 정하기 | AI | | 주석을 읽고 「이 칸은 저 칸과 같아야 한다」 를 정하기. 엔진 후보는 틀린 것만 X · 고침으로, 후보가 없는 표는 표마다 한 줄로, 그 밖의 연결은 칸으로 | AI | | 번호 · 이름을 칸으로 풀기, 수식 걸기, 금액 비교, 판 비교, 수정판 쓰기와 다시 판독해 견주기 | 엔진과 엑셀 | | 안 맞는 연결의 판정(숫자 오류 · 표시 오류 · 설명 부족, 식 고침, 확인, 걸지 않음, 엔진 판독). 판정을 쓴 에이전트와 다른 에이전트가 다시 본다(독립 검증) | AI | | 판정 결과 보기(O · X), 화면에서 수정 누르기, 「확인」 으로 남은 차이를 조서나 회사 자료로 맞춰 보기 | 회계사 | | 「조서 대사」 시트의 숫자를 조서와 맞추기, 회색 칸 보기, 표지의 결론 · 서명 | 회계사 | AI 는 숫자를 만들거나 더하지 않는다. 금액이 맞는지는 연결을 다 적은 뒤에 엔진이 본다. 금액이 같은 칸을 찾아서 연결을 적지 않는다. 화면의 「판정이 고치라는 칸」 의 맞는 숫자는 판정이 적은 숫자이고, 엔진이 근거 칸으로 계산해 「근거 확인」 을 낸 것이다. ## 빠른 검토와 화면에서 고치기 「빨리」, 「화면에서 고치고 싶다」, 「수정 누르면 dsd 도 바뀌게」 같은 요청이면 이 순서다. 회계사가 엔진 판 화면을 먼저 보고, AI 는 틀린 곳만 본다. 1. **엔진 판(AI 없이, 10~30초)**: 정산표 · 작년 보고서 · 이전 판을 찾은 뒤 한 명령. ``` python scripts/run.py quick <dsd> --wtb <정산표> --prior <작년 보고서> --prev <이전 판> [--facts 기준사실.json] --out <폴더> --serve ``` 읽기 자료 · 문장읽기 · 연결_초안을 만들고 HTML 까지 한 프로세스에서 돈다. 엔진 후보는 판정 없이 넣는다. `--serve` 면 검토 화면이 http://127.0.0.1:8791 에 뜬다. 서버는 켜 둔 채로 두어야 하므로 백그라운드로 실행한다. 회계사에게 화면 주소와 「AI 판정 전」 을 알리고 바로 2번으로 간다. - 서버만 따로: `python scripts/run.py serve <폴더>`(포트는 `--port`). 2. **AI 는 틀린 곳만(두 에이전트 동시)** - 숫자: `dsd_판정자료.md` 의 FALSE 마다 그 표를 `dsd_읽기자료.md` 에서 찾아 읽고, 후보가 틀렸으면 `proposals` 에 X · 고침, 연결이 빠졌으면 `links` · `tables` 로 적는다. 그다음 `연결_초안.json` 의 「할 일」(후보 없는 표 · 합계 구조 없음 · 잇지 못한 과목)만 그 표를 찾아 읽고 정한다. - 문장: 다른 에이전트 하나가 `문장읽기.md` 와 `references/문장-검토.md` 로 `문장.json` 을 쓴다. 3. **넣기**: `python scripts/run.py foot <dsd> --links 연결.json --text 문장.json --wtb … --prior … --prev … --html --out <폴더>`. 화면의 「다시 검증」 을 누르면 새 결과로 바뀐다(수정판이 있으면 수정판으로 다시 돈다). 4. **판정**: 남은 FALSE 마다 `findings` 를 적고(숫자 오류는 `fix` · `correct` · `evidence`) 3번을 다시 돌린다. 화면 검증 카드에 「판정이 고치라는 칸 … → 맞는 숫자 [수정]」 이 생긴다. 독립 검증(아래 순서 7번)은 뒤에서 돌리고 화면은 기다리지 않는다. 5. **회계사가 화면에서 고친다**: 수정은 원본에 수정 기록(`수정기록.json`)을 처음부터 다시 써서 `<이름>_수정판.dsd` 를 만든다. 쓴 뒤 다시 판독해 고친 칸 말고 다른 숫자 칸이 바뀌었으면 쓰지 않는다. - 숫자 칸은 같은 시트에서 값과 줄 이름이 같은 칸을 찾아 고친다. 둘 이상이면 고치지 않고 이유를 보인다. 고칠 칸이 표 안 합계 칸이면 「합계만 고치면 그 표의 합계가 새로 안 맞을 수 있다」 는 안내가 나온다. - 문장은 고칠 글이 원문에 한 곳일 때만 고치고, 오타 · 표현은 같은 글이 든 곳을 모두 고친다. 할 일을 적은 지적, AI 가 엔진과 다른 안을 적은 자리, 엔진이 다듬어 적은 날짜에는 수정 단추가 없다. - 서버 없이 파일로 연 화면은 고침을 모아 「수정 목록 받기」 로 `수정_<이름>.json` 을 주고, `python scripts/run.py fix <dsd> 수정_<이름>.json` 이 수정판을 쓴다. 조서 정본(엑셀 표지에 결론을 적을 판)을 만들 때는 아래 「순서」 대로 읽기 자료를 끝까지 읽는다. 빠른 검토는 FALSE 와 할 일만 읽으므로, 엔진 후보에도 할 일에도 없는 계산 · 연결은 빠질 수 있다. 실제 회사 자료 한 곳에서 빠른 검토는 약 17분(독립 검증까지 29분)이었고, 끝까지 읽은 판의 FALSE 5건 가운데 3건을 잡았다. ## 순서 가진 것이 DART PDF 나 접수번호뿐이면 먼저 원문을 받는다: `python scripts/run.py fetch <접수번호 | PDF> --out <폴더>`. 사업 · 반기 · 분기보고서면 연결 · 별도로 나누고 작년 비교 보고서도 받아 나눈 뒤 `--prior` · `--pair` 를 채운 foot 명령을 화면 끝에 적는다. 인증키는 환경변수 `DART_API_KEY` 에서만 읽는다. 정기보고서 · 정산표 · 다음 판은 `references/정산표-정기보고서-버전.md` 를 본다. 1. **시작**: 정산표를 찾는다(최종판, 엑셀에서 계산된 값이 저장된 파일). 없으면 회계사에게 달라고 하고, 받기 전에는 `--wtb` 없이 돌린 뒤 보고 첫 줄에 「정산표 없이 돌렸다」 를 적는다. 결과 폴더에 `기준사실.json` 을 쓴다(받은 자료에서 옮긴 사실만, 꼴은 `references/문장-검토.md` 1번). 그다음 한 명령으로 읽기 자료를 모두 만든다. ``` python scripts/run.py links <dsd> --text [--prior <작년 보고서>] [--split 2] --out <폴더> ``` - `dsd_읽기자료.md`: 맨 앞 한 화면에 연결.json 쓰는 법과 자주 쓰는 규칙. 그 뒤에 재무제표 넷과 주석 전부가 원문 순서로 나오고, 표마다 줄 번호와 「열」 줄(열 번호)이 붙는다. 표 아래 「엔진 합계」 는 엔진이 찾은 합계 구조, 「합계 구조를 찾지 못한 곳」 은 합계 줄 · 열에서 검증이 빠진 칸, 「후보 P0001: …」 은 엔진이 금액을 보지 않고 낸 연결 후보다. - `연결_초안.json`: 빈 연결.json 과 「할 일」(후보가 없는 표, 합계 구조를 찾지 못한 곳, 주석을 가리키는데 아직 연결이 없는 과목). - `문장읽기.md`: 문장 검토 자료. **지금 다른 에이전트 하나에게 문장 검토를 맡긴다.** 그 에이전트에게는 `references/문장-검토.md` 만 읽게 한다. 1,500줄을 넘으면 `--split 2` 로 두 몫을 에이전트 둘에게 맡긴다. 숫자 쪽이 먼저 끝나면 턴을 끝내지 말고 결과를 기다린다. 2. **읽기**: `dsd_읽기자료.md` 를 처음부터 끝까지 읽는다. 길면 250줄쯤씩 나눠 읽는다. 뒤 주석(현금흐름표 주석의 비현금거래, 금융상품, 재무위험관리)이 앞 주석의 연결을 바꾸므로 읽는 동안은 메모만 하고, 끝까지 읽은 뒤에 적는다. 연결과 구조는 읽다가 본 금액에 맞추지 말고 뜻으로 적는다. 주석마다 설명하는 과목, 표마다 성격(구성 · 변동 · 범주 · 만기 · 일부), 당기 · 전기 열, 칸의 뜻(총액 · 순액, 기초 · 기말), 식을 바꾸는 각주와 문장, 합계 구조를 정한다. 후보 줄은 틀린 것만 메모한다. 3. **연결.json 쓰기**: 꼴은 읽기 자료 맨 앞 한 화면에 있다. 칸은 「표:줄:열」(`"주석5-1:2:1"`). 그 화면으로 정하지 못하는 꼴만 `references/연결-형식.md` 의 해당 절을 찾아 읽는다. - **엔진 후보**: 판정을 적지 않으면 그대로 연결로 들어간다. 틀린 후보만 `proposals` 에 X(이유 한 줄) · 고침으로 적는다. 금액을 보고 정하지 않는다. X · 고침이 되기 쉬운 꼴: 일부만 담은 범주별 표(`cmp: le`), 부호가 반대인 과목(`sign`), 유동 · 비유동을 한 표에 담은 변동표(두 과목의 합), 공정가치 주석의 부채 종류 열, 현금흐름 조정의 금융수익 · 금융비용(범위가 달라 X). - **후보가 없는 표는 표마다 한 줄**(`tables`): 표 종류, 설명하는 과목(`item`), 합계 줄(`total`, 변동은 `open` · `close`), 기간 열. - **그 밖의 연결만 `links`**: 여러 칸을 더하거나 빼는 연결, 부분 대사(`cmp: le`), 이름이 다른 두 칸, 주석끼리, 문단의 문장 금액. 주석 유형별로 빠뜨린 연결이 없는지는 `references/연결-유형.md` 에서 그 주석 제목의 절만 찾아 읽고 대조한다. - 「할 일」 의 합계 구조 없음은 `sums` 나 `no_sums` 로 정한다. 항이 하나뿐인 합계도 적는다. 연결마다 `grade`(항등식 · 조건부 + `when` · 약함). 곱셈 · 나눗셈은 `calcs`, 맞춰 볼 곳이 없는 숫자는 `workpapers`, 걸지 않기로 한 것은 `skipped` 에 이유와 함께. 연결이 수백 건이면 파이썬 스크립트로 json 을 만든다. 4. **넣고 엑셀까지 한 번에**: ``` python scripts/run.py foot <dsd> --links 연결.json [--text 문장.json | 문장_1.json 문장_2.json] --wtb <정산표> [--prior <작년 보고서>…] [--prev <이전 판>] [--pair <함께 낸 보고서>] --html --out <폴더> ``` `DSD푸팅_<dsd 이름>.xlsx`, `dsd_판정자료.md`, `DSD보기_<dsd 이름>.html` 이 나온다. 번호 · 이름이 칸으로 풀리지 않으면 아무것도 넣지 않고 고칠 곳만 알린다(종료 코드 1). 「칸에 숫자가 없습니다」 는 글자 칸이라 `skipped` 로 옮긴다. 「엔진 합계 구조에서 안 맞는 칸」 은 그 표를 다시 읽는다. FALSE 나 풀지 못한 연결이 있으면 종료 코드 1, 확인 · 단수 차이만 있으면 0 이다. 5. **다시 보기**: 안 맞는 연결이 나오면 그 주석을 다시 읽는다. 이해가 틀렸으면 연결을 고친다(근거는 주석의 제목이나 문장). 이해가 맞으면 아래 「판정」 순서로 정한다. 금액을 맞추려고 연결을 바꾸거나 지우지 않는다. 6. **놓친 것 보기**: 넣으면 엔진이 `dsd_연결요청.json` 을 다시 쓴다. `unlinked`(주석을 가리키는데 연결이 없는 과목), `unchecked_totals`(합계 검증이 빠진 칸, 0곳이 될 때까지 `sums` · `no_sums`), `amount_evidence`(금액이 같은데 연결이 없는 칸 짝, 뜻으로도 같아야 하는 것만 더한다)를 본다. 7. **판정과 독립 검증**: `dsd_판정자료.md` 맨 앞의 「판정 쓰는 법」 대로 FALSE · 확인마다 판정을 `findings`(전기 대사는 `prior`)에 더하고 4번을 다시 돌린다. 그다음 판정을 쓴 에이전트와 **다른 에이전트**에게 `dsd_판정자료.md` 와 `references/판정-검증.md` 를 주고 검증을 맡긴다. 결과(`판정검증.json`)를 결과 폴더에 두고 4번을 다시 돌린다. 「확인」 가운데 늘 나는 차이에는 `findings` 에 `"usual": "유형 이름"` 을 적는다(취득과 현금흐름표, 처분과 현금흐름표, 범주별 표와 본표의 범위, 배당 결의와 지급, 퇴직급여의 범위). 늘 나는 차이와 엔진이 근거를 확인한 숫자 오류는 독립 검증을 하지 않는다. 판정자료의 「근거 묶음」 부터 보고, 묶음으로 정할 수 없을 때만 원문을 연다. 8. **보고**: 아래 「보고」 대로. 두 번째 판부터는 같은 폴더에서 다시 돌린다. 새로 생긴 표와 풀지 못한 연결만 적어 `--links <파일> --add` 로 더한다. 수정본에 주석이 새로 들어가 번호가 밀리면 `python scripts/run.py links <수정본> --apply <앞 판의 연결.json> --carry <앞 판 dsd> --out <폴더>` 로 옮긴다. ## 판 비교 · 원고 엑셀 푸팅과 따로 부르는 명령이다. | 하려는 일 | 명령 | 나오는 것 | |---|---|---| | 회사가 고쳐 온 판에서 무엇이 바뀌었나(푸팅 없이) | `python scripts/run.py diff <옛 판> <새 판> --html --out <폴더>` | `판비교_<옛>_<새>.xlsx`(요약 · 바뀐 곳 · 같이 고칠 곳 · 바뀐 부분 시트), `.json`, `.html` | | dsd · 공시 xml 을 엑셀에서 고치기 | `python scripts/run.py sheet <dsd 나 xml> [--roll] --out <폴더>` | `원고_<이름>.xlsx`. `--roll` 은 작년 판으로 당기 초안 | | 고친 원고로 dsd 만들기 | `python scripts/run.py build <원고.xlsx>` | `<이름>_원고판.dsd` 와 원고 검사. 바탕이 dsd 면 고친 글자만 바꾼다 | | 화면에서 모은 수정 목록으로 수정판 만들기 | `python scripts/run.py fix <dsd> <수정_이름.json>` | `<이름>_수정판.dsd` | | 결과 폴더의 화면 다시 열기 | `python scripts/run.py serve <폴더>` | 검토 화면 서버 | | 템플릿만 바뀌었거나 자료로 다시 그리기 | `python scripts/run.py view <폴더>` | `DSD보기_<이름>.html` | 판 비교가 보는 것: - 추가 · 삭제 · 변경 · 옮김 · 나뉨 · 합침 · 번호 바뀜. 칸은 옛 값 · 새 값 · 차이, 문단은 지운 글자 · 더한 글자. 화면 목록은 긴 문단도 바뀐 곳 앞뒤만 보인다. - **같이 고칠 곳 후보**: 새 판에서 고친 옛 값이 옛 판의 다른 표 · 문단에도 있었는데 새 판에서 그곳은 그대로인 곳. 같은 표 · 같은 문단 안은 보지 않고, 고친 칸이 당기 열이면 전기 · 기초 칸은 뺀다. 금액만 같은 우연일 수 있으니 회계사가 정한다(엑셀 「같이 고칠 곳」 시트의 검토 메모). - **줄 이름 바뀜**: 이름으로 짝짓지 못한 새 줄 · 옛 줄의 값이 모두 같으면 줄 이름 바뀜 하나로 센다(삭제 · 추가 두 건으로 세지 않는다). - **띄어쓰기 빠짐**: 새 판에서 낱말 사이 띄어쓰기가 빠진 곳(「2028년 3월」 → 「2028년3월」)은 메모에 「띄어쓰기 빠짐」 으로 적고, foot `--prev` 로 돌리면 문장 검토의 오타로도 넘어간다. 문장부호 앞 공백을 지운 것은 「띄어쓰기만 바뀜」 이다. - 부호만 바뀐 칸은 메모에 「부호만 바뀜」. 0건이면 판독 값이 같다는 뜻이다(빈칸 · 「-」 · 0 은 같게 보고 서식 · 줄바꿈 · 쪽 나눔은 보지 않는다). - 원고 · 수정판으로 만든 dsd 는 DART 편집기에서 열어 확인하기 전에는 제출 파일로 쓰지 않는다. ## HTML 보기 엑셀이 조서 정본이다. HTML 은 같은 결과를 보는 화면이다. foot `--html` 이면 판 비교(`--prev` 를 줬을 때) · 숫자 검증 · 문장 검토가 한 파일에 들어간다. 화면은 엔진이 낸 결과를 그리기만 하고 판단 문구를 만들지 않는다. HTML 은 바깥 주소를 부르지 않는다. - 판 비교: 이전 판 · 새 판을 좌우로 놓고 한 번에 스크롤한다. 오른쪽 세로 막대에 바뀐 곳 위치가 표시되고 누르면 그곳으로 간다. - 숫자 검증: 새 판 칸을 검증 결과 색으로 칠한다. 합계 칸 옆에 ✓ · ✗. 칸을 누르면 오른쪽에 검증과 상대 칸으로 가는 글자, 「이 칸 고치기」 가 나오고 「돌아가기」 로 돌아온다. 위 띠의 「검증 범위」 는 숫자 칸 가운데 검증에 들어간 칸 수다(하늘색 조서와 맞출 칸, 회색 검증 없는 칸). - 문장 검토: 결과 표와 「수정」 열. - 서버로 열면(http://127.0.0.1:8791) 수정 · 되돌리기 · 다시 검증 · 수정판 받기가 된다. 파일로 열면 수정은 「수정 목록 받기」 로 모은다. 서버는 이 PC 안(127.0.0.1)에서만 열린다. - 회계사 확인: 검증마다 O · X 와 메모를 누르면 브라우저에 남고 「확인 내려받기」 가 `확인_<dsd 이름>.json` 을 준다. 그 파일을 결과 폴더에 두고 foot 을 다시 돌리면 엑셀 「검증 목록」 확인 칸에 들어간다. - 고객 dsd 의 HTML 은 결과 폴더에만 둔다. 이름을 바꿔 남에게 보이려면 `--mask <치환표.json>`(`subs` 바꿀 이름 → 바꾼 이름, `check` 남은 이름을 찾는 정규식)으로 `_치환.html` 을 만든다. 금액은 그대로다. ## 판정 판정은 아래 순서를 지킨다. 꼴은 판정자료 맨 앞 한 화면에 있다. 한 상장사 반기에서 FALSE 원인 7개 가운데 2개를 틀리게 판정했다. 둘 다 차이를 보고서의 다른 숫자로 설명할 수 있었는데 처음 세운 가설만 확인했다. 1. **차이 설명 후보부터 본다.** 엔진이 판정자료와 「볼 것」 의 「차이 설명 후보」 열에 적는다. | 후보 | 뜻 | |---|---| | 자리 | 한 칸의 이웃한 두 자리를 바꾸면 맞음(차이가 9 의 배수), 자릿수를 하나 밀면 맞음, 차이가 한 자리만 다른 꼴 | | 부호 | 두 금액의 크기가 같고 부호가 반대, 또는 한 항의 부호를 바꾸면 맞음(차이 = 그 항의 두 배) | | 부호 표시 | 부호만 다른데 그 줄의 부호가 재무제표의 기간마다 다름(재무상태표 결손금 당기 양수 · 전기 음수) | | 단위 | 한쪽이 다른 쪽의 1,000배 · 1,000,000배 | | 기간 열 · 이웃 줄 | 같은 줄 다른 열, 위 · 아래 두 줄 안의 금액을 옮겨 적었으면 맞음 | | 같은 칸 | 차이가 다른 칸 하나, 또는 두 칸의 합 · 차와 같음 | | 작년 이름 | 작년 보고서의 같은 주석에 왼쪽 칸과 같은 금액이 다른 줄 이름으로 있음 | 후보마다 「해당 없음」 이나 「이것으로 설명됨」 을 판정 글(`why`)에 적는다. 금액이 같다는 것만으로 설명됐다고 하지 않는다. 2. **판정 종류를 고른다.** 숫자 오류 · 표시 오류 · 설명 부족 · 작년 보고서 불일치 · 식 고침 · 확인 · 걸지 않음 · 엔진 판독. FALSE 로 세는 것은 숫자 오류뿐이다. 등급과 안 맞을 때 정하는 순서는 `references/판정-근거.md`, 보고서 35건에서 나온 규칙은 `references/판정-규칙-추가.md`. 3. **숫자 오류는 고칠 칸과 맞는 숫자를 세 번째 근거와 함께 적는다**(`fix` · `correct` · `evidence`). 근거 칸은 검증의 두 칸이 아닌 칸이다(작년 보고서 「작년:」, 함께 낸 보고서 「짝:」, 정산표 「조서:」, 다른 주석). 엔진은 근거가 맞는 숫자를 받치면 「근거 확인」, 아니면 「고칠 쪽 미정」 을 적는다. 화면의 수정 단추는 이 칸과 숫자로 고친다. 부호만 다른 차이는 표시 오류부터 본다. 4. **다른 에이전트가 검증한다**(순서 7번). `findings` 와 `prior` 의 `why` 는 회계사가 엑셀 칸에서 읽는 글이다. 주석 번호, 과목 이름, 금액으로 적고 문장마다 마침표로 끝낸다. 파일 · 키 이름과 규칙 번호는 적지 않는다. ## 보고 1. 한 줄 요약: 검증 수(합계 · 레퍼 · 계산 · 전기 · 정산표), FALSE(숫자 오류) 수와 원인 칸 수, 표시 오류 · 설명 부족 수, 확인 수, 단수 차이 수, 풀지 못한 연결 수, 바뀐 곳 수와 같이 고칠 곳 후보 수, 독립 검증(유지 · 바꿈 수). 정산표 없이 돌렸으면 그렇다고 적는다. 검증을 거치지 않은 판정은 「검증 전」 이라고 밝힌다. 빠른 검토로 돌렸으면 그렇다고 적는다. 2. 안 맞음을 판정별로 적는다(숫자 오류: 원인 칸, 두 금액, 차이, 고칠 칸 · 맞는 숫자와 「근거 확인」 · 「고칠 쪽 미정」. 표시 오류 · 설명 부족: 칸과 고칠 이름 · 문장. 수정분개 미반영: 과목, dsd 금액, 정산표 최종 금액. 확인: 두 칸, 차이, 조건, 조정 항목을 찾아본 곳). 3. 원문 대조에 나온 것, 걸지 않은 것과 이유, 조서와 맞출 항목 수, 회색으로 남은 숫자 칸. 4. 문장 검토 건수(엔진 · AI, 종류별), 사실 불일치와 공시 누락은 건마다 위치 · 원문 · 고칠 안. 5. HTML 경로와 서버 주소(띄웠으면). 화면에서 고친 것이 있으면 수정판 경로와 고친 수. 엑셀에서 볼 곳: 「볼 것」, 「검증 범위」, 「조서 대사」, 오버뷰의 빨강과 노랑, 표지의 결론 칸. 시트마다 무엇이 있는지는 `references/엑셀.md`. ## 참고 문서 필요할 때 그 파일의 해당 절만 찾아 읽는다. | 파일 | 언제 | |---|---| | `references/연결-형식.md` | 읽기 자료 맨 앞 한 화면으로 정하지 못하는 꼴(칸 번호, 표 한 줄, 합계 구조의 skip · only · keep, 조건부와 확인, 단수 차이, 거는 연결과 걸지 않는 연결) | | `references/연결-유형.md` | 주석 유형별로 거는 연결과 합계 구조. 그 주석 제목의 절만 찾아 읽는다 | | `references/문장-검토.md` | 문장 검토 에이전트가 읽는 단 하나의 파일(기준 사실, 엔진 규칙, 읽을 것, 문장.json) | | `references/판정-근거.md` · `판정-규칙-추가.md` | 연결의 등급, 안 맞을 때 정하는 순서, 보고서 35건의 규칙 | | `references/판정-검증.md` | 독립 검증 에이전트에게 판정자료와 함께 준다 | | `references/정산표-정기보고서-버전.md` | `--wtb`(감사 법인 WTB 포함), `--pair`, 다음 판 · `--carry` · `--prev`, 반기 · 분기 · 사업보고서 | | `references/처분계산서-감리지적.md` | 처분계산서 규칙 다섯과 감리지적 유형 검사의 id · 판정 | | `references/엑셀.md` | 표지 · 오버뷰 · 볼 것 · 검증 범위 · 조서 대사 시트 | ## 예외 기록 공시 보고서 수백 건과 실제 회사 작성 dsd 로 돌리며 배운 것이다. 회사 이름은 적지 않는다. - 금액이 같은 칸을 엔진이 자동으로 이으면 뜻이 다른 칸이 섞인다(만기분석의 기간 구간을 재무상태표 과목에, 보증금액을 차입금에). 금액 대조는 참고로만 내고 연결은 뜻으로 적는다. - 유형자산 취득은 현금흐름표 취득과 바로 같지 않은 경우가 많다(연불구입, 정부보조금, 선급금 대체). 현금흐름표 주석의 비현금거래를 읽고 식으로 적는다. - 차이를 보고서의 다른 숫자로 설명할 수 있는지 먼저 본다. 처음 세운 가설만 확인하면 「표시 오류」 를 「숫자 오류」 로 잘못 판정한다. - 재무상태표는 결손금을 양수로 적고 빼는 회사가 많다. 부호만 바꾸는 고침은 작년 보고서의 같은 줄만 근거로 받는다. - 처분계산서는 본표보다 이익잉여금 주석 안에 둔 회사가 훨씬 많다. - 감사 법인 WTB(BS · IS · WBS · WIS · AJE)를 `--wtb` 로 주면 회사 작성 dsd 의 본표 차이가 「수정분개 미반영」 으로 판정된다. - 엔진만 돌린 첫 화면의 FALSE 는 대부분 엔진 후보가 잘못 걸린 것이다(매출채권 주석 합계 ↔ 재무상태표 총액, 보유주식수 열, 취득원가 ↔ 순액, 같은 이름의 다른 명세 줄). AI 가 그 FALSE 만 보고 후보를 고친다. - 화면에서 합계 칸만 고치면 그 표 안 합계가 새로 안 맞는다. 차이가 어느 내역 줄에서 났는지 보고서로 정할 수 없으면 회계사가 줄 칸을 함께 고친다. - 편집기 「문서 비교」 는 바뀐 곳만 보여, 한 곳만 고치고 같은 숫자가 있던 다른 곳을 둔 것은 못 본다. 판 비교의 「같이 고칠 곳」 이 그 자리를 본다. ## 지킬 것 - 숫자를 만들지 않는다. 금액을 맞추려고 근거 없는 항을 식에 넣지 않는다. 식에 넣는 항은 줄 이름이나 문장에 그 조정이라고 적혀 있어야 한다. - 자본변동표의 열은 자본 항목이다. 번호로 적거나 열 이름(「자 본 금」, 「총 계」)을 글자 그대로 적는다. 「당기」 「전기」 로 적지 않는다. - AI 가 적은 연결은 `confirmed: false` 다. 맞는지는 회계사가 엑셀의 확인 칸이나 화면의 O · X 로 적는다. - 화면 수정은 회계사가 누른다. AI 가 회계사 대신 수정판을 만들 때는 고칠 칸 · 새 값 · 근거를 먼저 보이고 허락을 받는다. 원본 dsd 는 덮어쓰지 않는다. - 엑셀 서식: AI 연결 · AI 판정 글 · 문장 검토 AI 지적은 연보라다. 표지 「AI 작성」 줄과 「AI 작성」 시트에 건수와 자리가 있다. - 고객 dsd 와 결과 엑셀 · HTML 을 저장소나 공유 폴더에 올리지 않는다. - 문체: 줄표와 비유 명사를 쓰지 않고 물음표로 끝내지 않는다. 회계사에게 부탁은 「주십시오」.