서식 근사 미리보기입니다 — 실제 페이지 나눔·머리말·쪽번호는 한글에서 확인하세요. 본문 굵게/기울임은 미리보기에만 표시되며 v1 hwpx 출력에서는 평문으로 들어갑니다.
산업 안전사고 국제 표준 마스터 — 개발서
작성일 2026-07-30 · 작업 기간 2026-07-29 ~ 30 · 상태: L1 적재 완료 / 크로스워크 초안 / 검수 전
1. 목적과 범위
비정형 재해 서술문(사고 개요 텍스트)에서 분류 코드를 자동 태깅하기 위한 국제 표준 코드 마스터 구축. 두 트랙이 하나의 DB에서 만난다:
- 산재 트랙 — 발생형태·기인물·상해종류·상해부위 등 재해 분류 (원 사양: 안전사고_표준화/국제 산업재해 분류 체계 분석.docx)
- 공정 트랙 — 산업·공정·작업활동 분류 (원 사양: 안전사고_표준화/국제 표준 공정 분류 체계.docx)
두 docx는 설계 사상만 채택했다. 문서 속 구체 코드값은 검증 결과 대부분 허구여서 전량 원본 코드북에서 재구축했다 (plan/05, plan/12·13).
2. 저장소 구조
standard_master_table/
├── 개발서.md ← 본 문서
├── plan/ 설계·실측·결정 기록 (01~16 + README)
│ └── 참고문헌/ ISO 22400-1/-2 영문 PDF (비공식 유통본 — §8 주의)
├── scripts/ 전체 파이프라인 (재현 진입점, §6)
├── build/ ★ 산출물 정본 (master.sqlite + CSV)
├── corpus/ 재해 서술문·통계 코퍼스 (검증용)
│ └── raw/ 원시 수집물 (SIF xlsx, 산재 xlsb, BLS, 사이렌 zip)
├── reference_intl/ 수집·구매한 코드북 원본 (MANIFEST.md 참조)
│ ├── OIICS/ ESAW/ ILO/ KOSHA/ KSIC/ KS/ ONET/ OmniClass/ Uniclass/
│ └── 산업재해/ 사용자 투입분 (ILO 실무규범, KOSHA GUIDE, OSHA 서식)
├── downloadn/ 사용자 다운로드 (BLS ca.data.1.AllData 2.9GB)
└── 안전사고_표준화/ 최초 입력 (docx 3종 + reference/)
정본 원칙: CSV/SQLite(build/)가 정본, XLSX 등은 생성물. 원시 파일은 절대 수정하지 않고 스크립트로만 가공.
3. 데이터 자산 전량 목록
3.1 분류 코드북 (L1 적재 원천)
| 표준 | 버전 | 원본 위치 | 입수 경로 | 라이선스/접근 |
|---|---|---|---|---|
| OIICS | v3.03 (2026-06) | reference_intl/OIICS/oiics-manual-version-3-03.xlsx | bls.gov → Wayback id_ 스냅샷 (BLS가 위장 UA 차단) | 공공 |
| OIICS | v2.01 (2012) | reference_intl/OIICS/OIICS Code List v201.csv | CDC WISARDS 미러 | 공공 |
| ESAW | Phase 3 (2001) | reference_intl/ESAW/esaw-methodology-2001.pdf (+esaw2001.txt 추출본) | hsa.ie 공개본 | 공공 |
| ILO | 16th ICLS 1998 | reference_intl/ILO/ilo_media_119596.pdf | ilo.org | 공공. 발생형태·기인물 분류 부재 → __NONE__ 마커로 기록 |
| ILO | 10th ICLS 1962 | reference_intl/산업재해/wcms_107800.pdf Annex F~I | 사용자 투입 (ILO 실무규범 1996) | 공공. KOSHA 발생형태·기인물의 계보 원전 (plan/16) |
| KOSHA | 발생형태 20250731 | 안전사고_표준화/reference/표준공정/고용노동부_산업재해 발생형태 코드_20250731.xlsx | 최초 입력 | 공공데이터 |
| KOSHA | 기인물/상해종류/상해부위 | reference_intl/KOSHA/고용노동부_*_코드.csv (EUC-KR→UTF-8 변환) | data.go.kr 15049606/15049601/15049602 (비로그인 파일 다운로드) | 공공데이터 |
| KPPS 표준공사코드 | 20260701 | 안전사고_표준화/reference/표준공정/표준공사코드(20260701).xlsx #공종분류 | 최초 입력 | 공공 (조달청) |
| KSIC | 제11차 (2024) | reference_intl/KSIC/LH_11차개정한국표준산업분류.xlsx | LH 공개 배포본 (통계분류포털 인증서 문제 우회) | 공공 |
| Uniclass 2015 | 2026-04 | reference_intl/Uniclass/uniclass_bundle_latest.zip (Ac v1.26 사용) | NBS 공식 무료 번들 | 무료 공개 |
| OmniClass | T22 2013 / T32 2012 | reference_intl/OmniClass/OmniClass_{22,32}_*.zip | CSI(현재 로그인벽) → Wayback 구판 | 무료 공개(당시). T22 = MasterFormat 2012 번호 인용 → MasterFormat 구매 대체 |
| KS X IEC 62264-1/-3, KS X ISO 22400-2 | 2024-12-13 | reference_intl/KS/KSX*.pdf (+.txt 추출본) | 구매 (KSSN, 합계 199,500원, KD26071714.zip) | 유료 라이선스 |
| O*NET | 30.3 | reference_intl/ONET/ — Excel 5종(직접 수집) + db_30_3_mysql.zip 전체 45테이블(사용자) | onetcenter.org | CC BY 4.0 |
3.2 코퍼스·통계 (검증/가중치 원천)
| 자료 | 규모 | 저장 위치 | 용도 |
|---|---|---|---|
| KOSHA SIF 아카이브 | 서술문 6,031건 (라벨: 기인물 677종·재해종류 20·공종 13·작업 149) | 원본 corpus/raw/KOSHA_산업재해_고위험요인SIF_아카이브_20260401.xlsx → 정제 corpus/sif_*.csv, corpus/corpus.sqlite | 골드셋 — 태깅 검증, 크로스워크 커버리지 측정 |
| 산재 마이크로데이터 2020~2025.6 | 710,208건 (발생형태 L1/L2, 업종 3계층 등 27컬럼, 서술문 없음) | 원본 corpus/raw/산재2020_2025/*.xlsb (사용자 투입, plan/산재(2020-2025.6).zip) → corpus/micro.sqlite (241MB) | 발생형태 실사용 분포 → 검수 우선순위 (plan/11) |
| 중대재해 사이렌 | 카드 321건 → 라벨 267건 (파일명 파싱, OCR 불필요) | corpus/raw/중대재해사이렌_공개자료.zip → corpus/siren_labels.csv | 용어 개정(한자어↔현행어) 대조 샘플 |
| 발생형태 별칭 테이블 | 20행 | corpus/kosha_event_alias.csv | 표기 4갈래(코드표/마이크로/사이렌/SIF) 통일 — 커버리지 100% 달성 |
| BLS IIF flat files 6종 약 17GB | ca(2023-24·v3.03) / cs(2011-20·v2.01) / ch(2003-10·v1.01) / cd(1992-2001·v1) / fw·fi(CFOI 사망) | corpus/raw/bls/{ca,cs,ch,cd,fw,fi}/ + downloadn/ca.data.1.AllData(2.9GB, 사용자) | OIICS 실사용 분포 5종 추출 완료 → corpus/bls_dist_*.csv (plan/17·18) |
| 화학 유해인자 (트랙 A, 미착수) | 노출기준 731 + IARC 1,070 + 별표12/22 | 안전사고_표준화/reference/산업재해/ | CAS 조인 → OIICS Source Div.1 확장 (plan/02·07-H) |
3.3 참고 문서 (코드표 아님)
reference_intl/산업재해/: KOSHA GUIDE Z-23-2022(조사 절차, 코드표 없음), OSHA 300/301 서식. 안전사고_표준화/reference/표준공정/: 표준공사코드 매뉴얼v1(포털 안내서), 중기부 R&D 공고(제조공정 참조모델 240개 — 사업 맥락, plan/13-C), 표준공정_ref/ 23종(ISA-95·MasterFormat·PHA 해설).
4. DB 스키마 (build/master.sqlite)
설계 근거: plan/03. L1 표준원본 / L2 크로스워크 / L3 통합코드 3계층 중 L1·L2 구현, L3 미착수.
-- L1: 모든 표준의 모든 축 코드 (원본 무변형 보존)
standard_code (
std, std_version, axis, code, -- PK. axis: EVENT|DEVIATION|CONTACT|SOURCE|
parent\_code, level, -- NATURE|BODY\_PART|WORKER\_ACTIVITY|
label\_en, label\_ko, -- LOCATION|WORK\_ENV|WORK\_PROCESS|
definition, incl\_rule, excl\_rule, -- PHYS\_ACTIVITY|INDUSTRY
coding\_note, source\_file ) -- 전 행 출처 추적
-- L2: 표준 간 매핑 (M:N, 축 이동 허용)
code_crosswalk (
src_std, src_axis, src_code,
tgt_std, tgt_version, tgt_axis, tgt_code, -- tgt_axis ≠ src_axis 가능 (축 이관)
relation, -- exact|narrower|broader|related|partial|none
confidence, method, evidence,
reviewed_by ) -- NULL = 미검수 초안 (통계 사용 금지)
핵심 설계 판단(파일럿으로 실증): 1:1 와이드 시트는 불가(69%가 1:N), tgt_axis 필수(KOSHA 발생형태의 48%가 타 축 이관), ILO 공백은 __NONE__ 행으로 명시.
적재 현황 — 45,360행 · 11표준 · 16버전 (고아 코드 0)
| std (version) | 행수 | 축 |
|---|---|---|
| KPPS 20260701 | 24,311 | WORK_PROCESS (L0~L5, 공사구분 접두 AR. 등) |
| OMNI T22 / T32 | 6,785 / 302 | WORK_PROCESS |
| OIICS v3.03 / v2.01 | 3,231 / 3,035 | EVENT·NATURE·BODY_PART·SOURCE (+v3: WORKER_ACTIVITY·LOCATION). v3.03만 정의문·배제규칙 보유 |
| ONET 30.3 | 2,460 | WORKER_ACTIVITY (GWA 41→IWA 332→DWA 2,087) |
| KSIC 11th | 2,038 | INDUSTRY (공식 계수 21/77/234/501/1205 일치 검증) |
| UNICLASS v1.26 | 956 | WORKER_ACTIVITY (Ac) |
| KOSHA (4개 버전) | 1,141 | EVENT 165 · SOURCE 138 · NATURE 677 · BODY_PART 161 |
| ESAW Phase3 | 522 | 8개 축 (DEVIATION·CONTACT 등) |
| ILO 1962 / 1998 | 237 / 84 | 1962: 4축 실코드 · 1998: NATURE·BODY_PART + __NONE__ |
| SIF 20260401 | 211 | WORK_PROCESS(공종·작업명)·WORKER_ACTIVITY(단위작업·제조고위험) |
| KS62264 2024 | 47 | WORK_PROCESS(4대 운영관리×활동)·LOCATION(장비계층) |
보조 산출물: build/standard_code.csv(L1 정본 내보내기), build/ks_kpi34.csv(ISO 22400-2 KPI 33종 한글), build/pilot.sqlite(발생형태 파일럿, master와 별도).
5. 크로스워크 현황 (전량 초안 — reviewed_by 채워진 행 2건뿐)
| 매핑 | 행수 | 저장 | 품질 실측 |
|---|---|---|---|
| KOSHA NATURE·BODY_PART → OIICS v2.01 ("접붙이기") | 834 | build/graft_kosha_oiics.csv + master.code_crosswalk | 표본감사 30건: 정밀도 83% (build/graft_audit_sample.csv). 오답은 질병 어휘 영역 집중 |
| OIICS v2.01 → v3.03 라벨 다리 | 653 | build/bridge_oiics_v201_v303.csv | 연결률 NATURE 80% / BODY_PART 73% |
| KOSHA EVENT → OIICS/ESAW (파일럿) | 88 | build/code_crosswalk_event.csv + pilot.sqlite | 코드 8→NATURE 이관 2행만 검수 완료(user-2026-07-30). 구조공백 4건·저신뢰 다수 |
| SIF 공종 → KPPS L0/L1 | 22 | build/kpps_sif_link.csv | 수동 초안 |
| SIF 작업명·단위작업명 → KPPS | 161 | build/crosswalk_sif_kpps.csv + master | 골드셋 3,459건 기준 커버리지 85% (strong 21%+related 64%). none 57건 = 공종분류의 행위(물류·가설) 구조 공백 |
6. 스크립트 (실행 순서 = 재현 순서)
전부 scripts/, python3 + openpyxl/xlrd/pyxlsb (pip --user 설치). 실행은 항상 저장소 루트에서.
| # | 스크립트 | 입력 → 출력 | 비고 |
|---|---|---|---|
| 1 | build_l1_all.py | 코드북 원본 → master.sqlite standard_code (OIICS·ESAW·KOSHA·ILO 1998) + standard_code.csv | 품질게이트(고아 0) 내장. ESAW 999/000 예외, ILO 목차/본문 구분 버그 수정 이력 (plan/08) |
| 2 | load_process_kpps.py | 표준공사코드 xlsx → KPPS 24,311 + kpps_sif_link.csv | 공사구분 접두, L0 루트 신설, EL.BC251 재부모화 |
| 3 | load_intl_process.py | Uniclass/OmniClass/KSIC → 각 축 | KSIC 공식 계수 대조 |
| 4 | load_sif_tasks.py | corpus/sif_*.csv → SIF 211 | SIF 자체 번호체계(4.8.2) 보존 |
| 5 | load_ks62264.py | KS 구매본 txt → KS62264 47 | 원문 용어 검증 단언(assert) — KS 번역 site=공장/area=사업장 확인 |
| 6 | load_ilo1962.py | wcms_107800 → ILO 1962 237 | Annex F 평면코드·색인 오탐 수정 이력 (plan/16) |
| 7 | load_onet_dwa.py | O*NET SQL 덤프+Excel → ONET 2,460 | |
| 8 | extract_corpus_sif.py | SIF xlsx → corpus/sif_*.csv, corpus.sqlite | |
| 9 | load_micro_2020_2025.py | 산재 xlsb 6개 → corpus/micro.sqlite + 별칭 검증 | pyxlsb 필요 |
| 10 | graft_kosha_onto_oiics.py | master → 접붙이기 834 + v2→v3 다리 | IDF 가중·단어경계·동점가드 (plan/10 §2 결함 수정) |
| 11 | build_pilot_crosswalk.py | (수동 정의) → 발생형태 크로스워크 88 → pilot.sqlite | 코드 8 결정 반영분 |
| 12 | crosswalk_sif_kpps.py | master → SIF→KPPS 161 + 골드셋 커버리지 | 2-gram+서브트리 프라이어+전역 폴백 |
| 14 | bls_distribution.py / bls_cfoi_distribution.py | BLS series+data → 실사용 분포 5종 | 스트리밍 합산. CFOI는 전국 코드가 N00 (공백 아님) |
| 13 | fetch_bls_direct.sh | BLS → corpus/raw/bls/ | UA에 연락처 필수 (BLS 봇 정책). Wayback판(fetch_bls_wayback.sh)은 폐기 |
재현: 1→7 순서로 실행하면 master.sqlite가 원본에서 완전 재생성된다. 크로스워크(10~12)는 그 위에.
7. 품질 게이트 (plan/04 §품질게이트 — 전 적재에 적용)
1) 계층 무결성: 고아 코드 0 (전 표준 통과. ESAW·ILO·KPPS에서 실제로 버그 3건 검출)
2) 원본 대조: 외부 명시 계수와 일치 (OIICS v2.01 = BLS 정의문서 4/4, KSIC = 고시 계수 5/5, ESAW = 원문 블록 4/4, BLS 운용코드 = v3.03 부분집합 4/4)
3) 표본 감사: 자동 매칭은 무작위 표본 수동 판정 후 정밀도 공표 (접붙이기 83%, SIF→KPPS 85~90%)
4) 출처 추적: standard_code 전 행 source_file 보유
5) 초안 격리: reviewed_by IS NULL → 통계 사용 금지
8. 알려진 한계·주의사항
- 크로스워크 전량 미검수 (검수 완료 2행). confidence<0.75 행은 도메인 전문가 확인 필요
- 한글화 미착수: label_ko 없는 행 다수 (OIICS 정의문 2,729행 등). NATURE·BODY_PART는 KOSHA 접붙이기로 부분 대체 가능 (plan/09)
- L3 통합코드·keyword_ko 사전 미착수 — 뼈대 표준 결정(EVENT·SOURCE 축) 미결이 선행 조건
- OmniClass는 2012~13년판(현행 아님), ILO 1962는 역사판(계보·로제타용) — 버전 명시 사용
- plan/참고문헌/ ISO PDF 2종은 비공식 유통본 — 내부 분석용 한정, 대외 인용은 KS 구매본으로
- 산재 마이크로데이터·SIF는 재배포 조건 미확인 — 외부 공개 전 라이선스 확인
- KOSHA 발생형태·기인물의 현행 우위 규칙 문서 미확보 (2006년판만 보유)
9. 진행 중 / 다음 단계
- ✅ BLS 6종 수집·분포 추출 완료 (plan/17) — 검수 우선순위 build/graft_review_priority.csv 산출
- ✅ 한·미 사고사망 구조 비교 (plan/18) — 교통사고 축을 검수 1순위로 확정
- ⬜ EVENT·SOURCE 축 뼈대 결정 (plan/07-E) — ILO 1962 로제타 경로 활용 (plan/16)
- ⬜ 크로스워크 검수 체계 (실사용 분포 가중 우선순위)
- ⬜ 트랙 A: CAS 화학 유해인자 마스터
- ⬜ L3 통합코드 + LLM 태깅 파일럿 (SIF 골드셋)
9-2. 웹 시스템 (2026-07-30~31 구축)
https://sehnr.org/oshmaster/ — 산업안전보건 표준화 AI 허브.
| 구성 | 위치 | 비고 |
|---|---|---|
| Django 프로젝트 | web/smt/ | 포트 8730, nginx /oshmaster prefix 제거형 마운트 |
| 벤치마크 원본 | web/reference_ohsearch/ohsearch/ | kosha.ai.kr 소스 246파일 (읽기 전용) |
| 도메인 정의 | web/smt/master_search/domains.py | 6도메인 ↔ 12축 매핑 |
| 조회 모델 | master_search/models.py (managed=False) | 마스터 읽기 전용 라우터 |
| 의미검색 | master_search/semantic.py + data/rag/*.faiss | ko-sroberta 768차원 · 16축 66,071행 |
| 자동 라벨링 | master_search/autolabel.py + llm.py | ollama qwen2.5:14b · grounded RAG |
| 인덱스 빌드 | scripts/build_faiss_index.py | 축별 재빌드 --axis |
| RAG 문장 | scripts/build_rag_sentences.py | 커버리지 100% |
| 평가 | scripts/eval_autolabel.py (코드 기준) · _v1_string.py(구판) |
핵심 설계
- 마스터 DB 읽기 전용 — 스크립트 재생성 시 웹 변경분 소실 방지
- LLM 은 코드를 만들지 않는다 — FAISS 후보 안에서만 선택(환각 차단)
- 로컬 LLM — 재해 기록이 외부로 나가지 않음
- 미검수 크로스워크는 화면·API 에 "초안" 배지 강제 표기
10. 문서 지도
의사결정·실측의 전체 이력은 plan/README.md(색인) → plan/01~24 문서 + TODO_20260731.md. 수집물 상세는 reference_intl/MANIFEST.md, corpus/MANIFEST.md.