knowledge(색인): 04 목록 근거 원장 재구성 — 절 계층화·AUTO 마커·gen_md 스플라이스화

04_참조_법령기준_목록.md (파일명 유지):
- 제목 정정(# 0. → # 04.) + 성격 재정의: 근거 등록부·탐색 관문
  (전체 인벤토리는 각 _index.md, 역링크 없이 technical_info sources = SSOT)
- 근거 수준 절 분리: §1~§4 법정 등록표(수동) / §5 원문 색인(자동) /
  §6 품셈·원가 기능별 링크 모음(중복 등록 없음) / §7 공식 기초가격 원천
  (노임 2·나라장터·ECOS·오피넷, 전용 필드) / §8 교본(보조 참고) /
  §9 포맷·실무 검증자료(경고+인덱스 위임) / §10 갱신 관리 / §11 통계(114건 실측)

gen_md.py:
- 전체 덮어쓰기 → AUTO:INDEX 마커 스플라이스 (수기 행·큐레이션 절 보존,
  마커 없으면 실행 거부)
- 잠복 버그 2건 수정: ORIG=OUTMD.parent(이동 후 빈 색인 생성) → ROOT_DIR,
  색인 링크 original/ 접두 누락 → 보정. 재실행으로 색인 최신화
  (법령 md 161→182·별표 292→312, 조달수수료 폴더 자동 반영, 깨진 링크 0)

연동 정정:
- 00_운영지침: 깨진 구경로 2곳 수정, §6 갱신주기표 → 04 §10 이관(SSOT)
- 01_수집지침 W6: 색인 절만 재생성으로 절차 변경, 수기 행 추가 규칙 명시
- _pipeline/README·knowledge README 설명 갱신

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-15 20:33:18 +09:00
co-authored by Claude Fable 5
parent b6fc46ebf7
commit 40e7d8301a
6 changed files with 145 additions and 64 deletions
+6 -15
View File
@@ -30,7 +30,7 @@
| 4 | KS 표준 | `original/KS/` | 재료·시험 기준 |
| 5 | 임도기술교본(2020)·사방기술교본(2023) | `original/임도기술교본/`·`original/사방기술교본/` | 해설·실무 (법적 구속력 없음, 단 수치가 가장 상세) |
- 원문 참조 시 `original/0. 참조 법령·기준 목록.md`에서 확보 여부·현행 시행일을 먼저 확인한다.
- 원문 참조 시 [`04_참조_법령기준_목록.md`](04_참조_법령기준_목록.md)에서 확보 여부·현행 시행일을 먼저 확인한다 (구경로 `original/0. 참조 법령·기준 목록.md` — 2026-08-15 이동 정정).
- 법령은 **현행본**(`현행_YYYYMMDD.md`)을 기준으로 한다. 교본시점 판본은 대조용으로만 쓴다.
- 교본 내용이 현행 법령·규정과 다르면 현행을 채택하고 문서에 차이를 명시한다.
@@ -130,7 +130,7 @@ last_updated: YYYY-MM-DD
법령·행정규칙 개정 시:
1. `original/`에 신규 현행본 수집 (원본 갱신은 별도 작업).
2. `original/0. 참조 법령·기준 목록.md`의 시행일과 이 폴더 각 파일 frontmatter `sources.version` 대조.
2. [`04_참조_법령기준_목록.md`](04_참조_법령기준_목록.md)의 시행일과 이 폴더 각 파일 frontmatter `sources.version` 대조.
3. 버전 불일치 파일을 찾아 내용 갱신, `last_updated` 갱신.
4. 수치·기준이 변경된 경우 문서 하단에 `## 개정 이력` 절을 만들어 변경 전후 값 기록 (프로그램 로직 수정 필요 여부 판단용).
5. 갱신 결과를 `_index.md`에 반영.
@@ -138,20 +138,11 @@ last_updated: YYYY-MM-DD
**부칙·목 누락분을 보충**한다 (전량 재생성은 후처리를 파괴하므로 금지 — 상세는
`original/_pipeline/README.md`).
### 갱신 주기가 정해진 원천 (기한 도래 시 재수집)
### 갱신 주기가 정해진 원천
| 원천 | 주기 | 다음 시점 |
|---|---|---|
| 산재보험료율 고시 | 매년 재고시 (현행 유효기간 2026.12.31) | **2027-01** |
| 노임단가(건설업, 대한건설협회) | 반기 (1.1·9.1 적용) | **2026-09** 하반기판 |
| 노임단가(제조업, 중소기업중앙회) | 반기 (7.1·1.1 적용) | 2026-11 말 |
| 조달청 제비율 | 연 1회 + 수시 (2026년에만 3회 변경) | 분기 확인 |
| 건설공사 표준품셈 | 연간 (매년 12월 말 익년도판) | 2026-12 |
| 산림사업 표준품셈 | 수시 개정 (산림청 고시) | 고시 모니터링 |
재검토기한이 지난 고시(사회보험 적용기준 2021판·사방 타당성평가 처리규정 2022판·
사방시설 유지관리 지침 2018판·사방 설계·시공 세부기준 2022판)는 **개정판 존재 여부를
원천에서 확인**해야 한다 (2026-08-14 감사 지적, 외부 확인 필요 — 미처리).
갱신주기표의 SSOT = [04_참조_법령기준_목록 §10 갱신 관리](04_참조_법령기준_목록.md)
(2026-08-15 이관 — 이 문서에는 절차만 남기고 주기·기준일·다음 확인 시점은 §10에서
단일 관리한다. 재검토기한 경과 고시 목록도 §10에 있음).
## 7. 프로그램 연계
+4 -3
View File
@@ -59,11 +59,12 @@
- **판독 불가한 값을 추정해서 채우지 않는다.** 공백·표 구조를 임의로 지어내는 것도 금지다.
### W6. 색인 갱신
`04_참조_법령기준_목록.md` 를 다시 만든다.
`04_참조_법령기준_목록.md`**`## 5. 원문 md 색인` 절만** `gen_md.py`로 재생성한다.
- **2026-08-15 변경**: 04 문서 전체 재생성 금지. 등록표(§1~§4)와 큐레이션 절(§6~§11)은 수기 관리(사방·조달수수료 등 수기 행 보존) — 스크립트는 `<!-- AUTO:INDEX:BEGIN/END -->` 마커 사이만 갱신하며, 마커가 없으면 실행을 거부한다.
- 등록표에 신규 원문을 추가할 때는 §2 등 해당 절에 **수기로 행 추가** (번호 이어붙임, 재부여 금지) + §11 통계 갱신.
- `시행일`·`개정일`·`확보`·`소관` 둘째 줄(실제 내려받은 출처)을 반영한다.
- **확인하지 않은 출처는 적지 않는다.** 받지 못한 항목의 출처 칸은 비운다.
- `## 5. 원문 md 색인` 에 법령 본문·별표·첨부 md를 전건 링크한다.
- 종료 조건: 링크 깨짐 0, 표 열 수 이상 0.
- 종료 조건: 링크 깨짐 0, 표 열 수 이상 0, 마커 밖 내용 무변경.
### W7. 조달청 제비율 수집 (법령정보센터 밖 — 별도 경로)
조달청 시설공사 원가계산 간접공사비(제비율) 적용기준은 법령·행정규칙이 아니라 **국가법령정보센터에 없다.** 수집 방법:
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -14,7 +14,7 @@
| [01_수집지침.md](01_수집지침.md) | 원문 수집·갱신 작업 절차 W1~W7 (법령정보센터 API·PDF/HWPX 변환·품질점검·조달청 제비율) |
| [02_분석지침.md](02_분석지침.md) | 실무문서(공사지) 분석 운영 규칙·보고서 체계·검증 절차 |
| [03_미결_및_확인사항.md](03_미결_및_확인사항.md) | §1 미결사항(임도/사방 태그) + §2 확인사항(임도교본 vs 사방교본 충돌 리스트) |
| [04_참조_법령기준_목록.md](04_참조_법령기준_목록.md) | 원문 자료 전체 색인 (9열 목록표 — 갱신 작업 진입점) |
| [04_참조_법령기준_목록.md](04_참조_법령기준_목록.md) | **근거 등록부·탐색 관문** — 법정 기준 등록표(§1~§4 수기) + 원문 색인(§5 자동) + 기초가격 원천·교본·실무검증·갱신 관리(§6~§11) |
| [technical_info/_index.md](technical_info/_index.md) | 기술문서 55건 카탈로그 (2트리: 01_임도·02_사방댐) |
| [technical_info/_최종검증로그.md](technical_info/_최종검증로그.md) | 55문서 원문 대조 검증 이력 (2026-08-12) |
| [original/실무문서/_종합비교/00_인덱스.md](<original/실무문서/_종합비교/00_인덱스.md>) | 실무↔현행 종합비교 6주제 진입점 |
@@ -27,7 +27,7 @@
| `qc_lint.py` | md 전수 품질 점검(테이블·사진·내용누락·띄어쓰기·줄바꿈) | W5 |
| `verify_pdf2md.py` | 변환 손실·줄누락 검증 | W5 |
| `build_srcmap.py` | law API 결과 → 시행일/개정일 맵(srcmap.json) | W6 |
| `gen_md.py` | `../04_참조_법령기준_목록.md` 재생성(9열·색인) | W6 |
| `gen_md.py` | `../04_참조_법령기준_목록.md`**§5 원문 md 색인 절만** 재생성 (AUTO:INDEX 마커 사이 스플라이스 — 등록표·큐레이션 절은 수기 관리, 2026-08-15 변경) | W6 |
| `verify_structure.py` | 법령 XML ↔ md 구조 회귀검사(부칙·목·별표 수량 대조). 네트워크 미사용 | W5 |
## data/ (생성 데이터 = gen_md 입력)
@@ -669,7 +669,9 @@ if miss:
L.append("")
# ── 5. 원문 md 색인 (법령 본문 + 별표 전체) ──
ORIG = OUTMD.parent
# ORIG = 원문 코퍼스 루트(…/original). ⚠ OUTMD.parent 사용 금지 — OUTMD가 knowledge
# 루트로 이동(2026-08-15)한 뒤 OUTMD.parent는 원문 폴더가 아니다 (빈 색인 생성 버그 원인).
ORIG = ROOT_DIR
CATDIR = [("법률", "법률"), ("행정규칙", "행정규칙"), ("표준시방서", "표준시방서")]
L.append("## 5. 원문 md 색인")
L.append("")
@@ -685,7 +687,7 @@ for cat, d in CATDIR:
L.append(f"### {cat}")
L.append("")
for folder in sorted([x for x in base.iterdir() if x.is_dir()], key=lambda x: x.name):
rel = f"{d}/{folder.name}"
rel = f"original/{d}/{folder.name}" # 링크 기준 = knowledge 루트(OUTMD 위치)
docs = []
for f in sorted(folder.glob("*.md")):
label = {"_meta": "메타", "CHANGELOG": "변경이력"}.get(f.stem, f.stem.replace("_", " "))
@@ -735,7 +737,7 @@ L.append("### KS (메타데이터)")
L.append("")
ksdir = sorted((ORIG / "KS").glob("*.md")) if (ORIG / "KS").is_dir() else []
if ksdir:
L.append("- " + " · ".join(f"[{f.stem}](<KS/{f.name}>)" for f in ksdir))
L.append("- " + " · ".join(f"[{f.stem}](<original/KS/{f.name}>)" for f in ksdir))
L.append("")
L.append(
f"> 법령 본문 md {n_law} · 별표/서식 md {n_byl} · 첨부 본문 md {n_att} · 압축해제 md {n_zip[0]} · KCS 본문 md {n_kcs} · KS 메타 md {len(ksdir)}"
@@ -752,5 +754,26 @@ L.append(
L.append("- 교본 기준 시점: 2019년 (고시·요율은 당시 개정본 기준. 원문 수집 시 현행본 병기 필요)")
L.append("- 시행일/개정일 조회: 국가법령정보센터 Open API (`law.go.kr/DRF`), 2026-08 기준 현행본")
OUTMD.write_text("\n".join(L) + "\n", encoding="utf-8")
print(f"작성 완료: {OUTMD.name} / {total}건 / 무매칭 {miss}")
# ── 쓰기: 전체 덮어쓰기 금지 — '원문 md 색인' 절만 마커 사이에 스플라이스 ──
# 배경(2026-08-15): 04 목록의 등록표(§1~§4)는 수기 추가 행(사방 고시·조달수수료 등)이
# 축적된 수동 관리 문서가 됐다. 전체 재생성하면 수기 행이 소실되므로, 이 스크립트는
# 자동화 가치가 큰 '원문 md 색인' 절만 AUTO 마커 블록 안에서 재생성한다.
MARK_BEGIN = "<!-- AUTO:INDEX:BEGIN — gen_md.py가 재생성하는 블록. 수동 편집 금지 -->"
MARK_END = "<!-- AUTO:INDEX:END -->"
idx_start = L.index("## 5. 원문 md 색인")
idx_end = next(i for i, ln in enumerate(L) if ln.startswith("> 법령 본문 md "))
auto_block = "\n".join([MARK_BEGIN] + L[idx_start : idx_end + 1] + [MARK_END])
if not OUTMD.exists():
raise SystemExit(f"오류: {OUTMD} 없음 — 이 스크립트는 색인 절만 갱신하며 신규 생성하지 않는다.")
cur = OUTMD.read_text(encoding="utf-8")
if MARK_BEGIN not in cur or MARK_END not in cur:
raise SystemExit(
"오류: AUTO:INDEX 마커 없음 — 04 문서에 마커 블록을 먼저 넣어야 한다 "
"('## 5. 원문 md 색인' 절을 MARK_BEGIN/END로 감싼다)."
)
pre = cur.split(MARK_BEGIN)[0]
post = cur.split(MARK_END, 1)[1]
OUTMD.write_text(pre + auto_block + post, encoding="utf-8")
print(f"색인 절 갱신 완료: {OUTMD.name} (등록표 §1~§4·큐레이션 절은 수동 관리 — 보존됨)")