Files
Aislo/docs/raw/M01_점검/sub1_2/tools/build_docs.py
T

55 lines
4.1 KiB
Python

import json,glob,collections,re,os
B='tmp/M01_점검/sub1_2/'
rows=json.load(open(B+'all_rows.json',encoding='utf-8'))
rs=json.load(open(B+'recheck_sel.json',encoding='utf-8'))
scope=rs['scope']; sel=set(rs['sel'])
# 재확인: 표별 + 같은 절 함께 본 표
def key(s): return tuple(map(int,s.split('-')))
ch_of={}
for k,(bu,sec,n,f) in scope.items():
ch=re.search(r'_(\d\d)장_(.*)\.json',f)
ch_of[k]=(bu,int(ch.group(1)),ch.group(2))
# 함께 재확인한 절 (선택표와 같은 절이면 그 절 표 전부 눈으로 봄)
sel_secs={(scope[k][0],scope[k][1]) for k in sel}
def recheck(k):
bu,sec=scope[k][0],scope[k][1]
if k in sel: return '재확인(선정표)'
if (bu,sec) in sel_secs: return '재확인(같은 절 동석)'
return ''
order=sorted(rows,key=lambda k:(0 if scope[k][0]=='건축' else 1,ch_of[k][1],key(scope[k][1]),k))
grp=collections.OrderedDict()
for k in order:
bu,c,name=ch_of[k]; grp.setdefault((bu,c,name),[]).append(k)
cnt=lambda ks,f:collections.Counter(rows[k][f] for k in ks)
L=[]
L.append('# M01 표 행 대조 진행 · sub1_2 (건축 353표 + 유지관리 197표)\n')
L.append('판정 말 — 끝남(흠 0) · 확실(흠) · 의심 · 사람 확인. 「끝남」 줄 근거 = `대조 칸 수 N/N · 원문 파일 · 절`. 표값 = 원문 표와 자료 표 칸 대조 · 로직 = 로직이 그 표를 쓰는 방식(따로 판정). 재확인 = sub1 본인이 눈으로 다시 맞춘 표.\n')
L.append('| 부문·장 | 표 | 끝남 | 확실(흠) | 의심 | 사람 확인 | 로직 맞음 | 로직 흠 | 로직 의심 | 미사용 | 해당 없음 | 재확인 |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|')
tot=collections.Counter()
for (bu,c,name),ks in grp.items():
a=cnt(ks,'표값'); b=cnt(ks,'로직'); rc=sum(1 for k in ks if recheck(k))
L.append(f'| {bu} {c:02d}장 {name} | {len(ks)} | {a["끝남"]} | {a["확실"]} | {a["의심"]} | {a["사람확인"]} | {b["맞음"]} | {b["흠"]} | {b["의심"]} | {b["미사용"]} | {b["해당없음"]} | {rc} |')
tot.update({'n':len(ks),'e':a['끝남'],'s':a['확실'],'d':a['의심'],'h':a['사람확인'],'lm':b['맞음'],'lh':b['흠'],'ld':b['의심'],'lu':b['미사용'],'ln':b['해당없음'],'rc':rc})
L.append(f'| 합계 | {tot["n"]} | {tot["e"]} | {tot["s"]} | {tot["d"]} | {tot["h"]} | {tot["lm"]} | {tot["lh"]} | {tot["ld"]} | {tot["lu"]} | {tot["ln"]} | {tot["rc"]} |\n')
L.append('재확인 = 선정표 56개(점검원별 표 10개마다 줄 수 최대 1개) + 같은 절에서 함께 본 표. 재확인 결과는 `보고.md` 4장.\n')
for (bu,c,name),ks in grp.items():
L.append(f'## {bu} {c:02d}장 {name}\n')
L.append('| 표 | 절 | 이름 | 표값 | 표값 근거 | 로직 | 로직 근거 | 재확인 |\n|---|---|---|---|---|---|---|---|')
for k in ks:
r=rows[k]; esc=lambda s:str(s).replace('|','/').replace('\n',' ')
L.append(f'| {k} | {scope[k][1]} | {esc(r["이름"])} | {r["표값"]} | {esc(r["근거"])} | {r["로직"]} | {esc(r["로직근거"])} | {recheck(k)} |')
L.append('')
L.append('## 다음 볼 자리\n\n- 맡은 범위(건축 353 · 유지관리 197) 전부 판정 완료 · 미판정 0.\n- 이 범위 밖(기계설비)은 다른 창 몫.\n')
open(B+'진행.md','w',encoding='utf-8',newline='\n').write('\n'.join(L))
# 줄글
J=['# M01 점검 결과 · 줄글 · sub1_2 (건축·유지관리)\n','흠·의심 하나에 한 줄: `키 | 이름 | 절 | 갈래 | 설명 | 확실/의심`. 끝에 「(코덱스 기록 재확인)」 은 코덱스가 이미 적은 흠. 점검원 A1~A9 결과를 합침(원본 `part/`).\n']
names={'A1':'건축 01장','A2':'건축 02~04장','A3':'건축 05장','A4':'건축 06~07장','A5':'건축 08~10장','A6':'건축 11장 · 유지관리 03~04장','A7':'유지관리 01장 · 02장(궤도·교량)','A8':'유지관리 02장(2-1-1~15)','A9':'유지관리 02장(2-1-16~34 · 2-4)'}
for a in sorted(names):
J.append(f'## {a} — {names[a]}\n')
for l in open(B+f'part/{a}_줄글.txt',encoding='utf-8'):
l=l.strip()
if l: J.append(l)
J.append('')
open(B+'보고_줄글.md','w',encoding='utf-8',newline='\n').write('\n'.join(J))
print(tot)