📄 연구보고서 HWPX
산업 안전사고 국제 표준 마스터 — 개발서 📄 페이지 보기 HWPX 다운로드 Google Doc 열기
⚠ 코드 블록은 일반 본문으로 변환됨
⚠ 코드 블록은 일반 본문으로 변환됨

서식 근사 미리보기입니다 — 실제 페이지 나눔·머리말·쪽번호는 한글에서 확인하세요. 본문 굵게/기울임은 미리보기에만 표시되며 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 적재 원천)

표준버전원본 위치입수 경로라이선스/접근
OIICSv3.03 (2026-06)reference_intl/OIICS/oiics-manual-version-3-03.xlsxbls.gov → Wayback id_ 스냅샷 (BLS가 위장 UA 차단)공공
OIICSv2.01 (2012)reference_intl/OIICS/OIICS Code List v201.csvCDC WISARDS 미러공공
ESAWPhase 3 (2001)reference_intl/ESAW/esaw-methodology-2001.pdf (+esaw2001.txt 추출본)hsa.ie 공개본공공
ILO16th ICLS 1998reference_intl/ILO/ilo_media_119596.pdfilo.org공공. 발생형태·기인물 분류 부재 → __NONE__ 마커로 기록
ILO10th ICLS 1962reference_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차개정한국표준산업분류.xlsxLH 공개 배포본 (통계분류포털 인증서 문제 우회)공공
Uniclass 20152026-04reference_intl/Uniclass/uniclass_bundle_latest.zip (Ac v1.26 사용)NBS 공식 무료 번들무료 공개
OmniClassT22 2013 / T32 2012reference_intl/OmniClass/OmniClass_{22,32}_*.zipCSI(현재 로그인벽) → Wayback 구판무료 공개(당시). T22 = MasterFormat 2012 번호 인용 → MasterFormat 구매 대체
KS X IEC 62264-1/-3, KS X ISO 22400-22024-12-13reference_intl/KS/KSX*.pdf (+.txt 추출본)구매 (KSSN, 합계 199,500원, KD26071714.zip)유료 라이선스
O*NET30.3reference_intl/ONET/ — Excel 5종(직접 수집) + db_30_3_mysql.zip 전체 45테이블(사용자)onetcenter.orgCC 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.6710,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종 약 17GBca(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 2026070124,311WORK_PROCESS (L0~L5, 공사구분 접두 AR. 등)
OMNI T22 / T326,785 / 302WORK_PROCESS
OIICS v3.03 / v2.013,231 / 3,035EVENT·NATURE·BODY_PART·SOURCE (+v3: WORKER_ACTIVITY·LOCATION). v3.03만 정의문·배제규칙 보유
ONET 30.32,460WORKER_ACTIVITY (GWA 41→IWA 332→DWA 2,087)
KSIC 11th2,038INDUSTRY (공식 계수 21/77/234/501/1205 일치 검증)
UNICLASS v1.26956WORKER_ACTIVITY (Ac)
KOSHA (4개 버전)1,141EVENT 165 · SOURCE 138 · NATURE 677 · BODY_PART 161
ESAW Phase35228개 축 (DEVIATION·CONTACT 등)
ILO 1962 / 1998237 / 841962: 4축 실코드 · 1998: NATURE·BODY_PART + __NONE__
SIF 20260401211WORK_PROCESS(공종·작업명)·WORKER_ACTIVITY(단위작업·제조고위험)
KS62264 202447WORK_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 ("접붙이기")834build/graft_kosha_oiics.csv + master.code_crosswalk표본감사 30건: 정밀도 83% (build/graft_audit_sample.csv). 오답은 질병 어휘 영역 집중
OIICS v2.01 → v3.03 라벨 다리653build/bridge_oiics_v201_v303.csv연결률 NATURE 80% / BODY_PART 73%
KOSHA EVENT → OIICS/ESAW (파일럿)88build/code_crosswalk_event.csv + pilot.sqlite코드 8→NATURE 이관 2행만 검수 완료(user-2026-07-30). 구조공백 4건·저신뢰 다수
SIF 공종 → KPPS L0/L122build/kpps_sif_link.csv수동 초안
SIF 작업명·단위작업명 → KPPS161build/crosswalk_sif_kpps.csv + master골드셋 3,459건 기준 커버리지 85% (strong 21%+related 64%). none 57건 = 공종분류의 행위(물류·가설) 구조 공백

6. 스크립트 (실행 순서 = 재현 순서)

전부 scripts/, python3 + openpyxl/xlrd/pyxlsb (pip --user 설치). 실행은 항상 저장소 루트에서.

#스크립트입력 → 출력비고
1build_l1_all.py코드북 원본 → master.sqlite standard_code (OIICS·ESAW·KOSHA·ILO 1998) + standard_code.csv품질게이트(고아 0) 내장. ESAW 999/000 예외, ILO 목차/본문 구분 버그 수정 이력 (plan/08)
2load_process_kpps.py표준공사코드 xlsx → KPPS 24,311 + kpps_sif_link.csv공사구분 접두, L0 루트 신설, EL.BC251 재부모화
3load_intl_process.pyUniclass/OmniClass/KSIC → 각 축KSIC 공식 계수 대조
4load_sif_tasks.pycorpus/sif_*.csv → SIF 211SIF 자체 번호체계(4.8.2) 보존
5load_ks62264.pyKS 구매본 txt → KS62264 47원문 용어 검증 단언(assert) — KS 번역 site=공장/area=사업장 확인
6load_ilo1962.pywcms_107800 → ILO 1962 237Annex F 평면코드·색인 오탐 수정 이력 (plan/16)
7load_onet_dwa.pyO*NET SQL 덤프+Excel → ONET 2,460
8extract_corpus_sif.pySIF xlsx → corpus/sif_*.csv, corpus.sqlite
9load_micro_2020_2025.py산재 xlsb 6개 → corpus/micro.sqlite + 별칭 검증pyxlsb 필요
10graft_kosha_onto_oiics.pymaster → 접붙이기 834 + v2→v3 다리IDF 가중·단어경계·동점가드 (plan/10 §2 결함 수정)
11build_pilot_crosswalk.py(수동 정의) → 발생형태 크로스워크 88 → pilot.sqlite코드 8 결정 반영분
12crosswalk_sif_kpps.pymaster → SIF→KPPS 161 + 골드셋 커버리지2-gram+서브트리 프라이어+전역 폴백
14bls_distribution.py / bls_cfoi_distribution.pyBLS series+data → 실사용 분포 5종스트리밍 합산. CFOI는 전국 코드가 N00 (공백 아님)
13fetch_bls_direct.shBLS → 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.py6도메인 ↔ 12축 매핑
조회 모델master_search/models.py (managed=False)마스터 읽기 전용 라우터
의미검색master_search/semantic.py + data/rag/*.faissko-sroberta 768차원 · 16축 66,071행
자동 라벨링master_search/autolabel.py + llm.pyollama 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.