chore: 프로젝트 구조 + 설계 문서 초기 커밋
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
# 인증 정보 (절대 커밋 금지)
|
||||
credentials.env
|
||||
|
||||
# Python
|
||||
venv/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.egg-info/
|
||||
dist/
|
||||
build/
|
||||
|
||||
# 로그
|
||||
logs/
|
||||
|
||||
# 데이터 (법령 다운로드 등)
|
||||
data/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
._*
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
136
CLAUDE.md
Normal file
136
CLAUDE.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# DEVONThink PKM 시스템 — Claude Code 작업 가이드
|
||||
|
||||
## 프로젝트 개요
|
||||
|
||||
Mac mini M4 Pro(64GB, 4TB) 기반 개인 지식관리(PKM) 시스템.
|
||||
DEVONthink 4를 중앙 허브로, Ollama AI 자동 분류 + 법령 모니터링 + 일일 다이제스트를 자동화한다.
|
||||
|
||||
## 핵심 문서 (반드시 먼저 읽을 것)
|
||||
|
||||
1. `docs/architecture.md` — 전체 시스템 아키텍처 (DB 구조, 태그, AI, 자동화 전체)
|
||||
2. `docs/industrial-safety-blueprint.md` — 04_Industrial Safety DB 상세 설계
|
||||
3. `docs/claude-code-commands.md` — 단계별 작업 지시서
|
||||
|
||||
## 네트워크 환경
|
||||
|
||||
```
|
||||
Mac mini (운영 서버):
|
||||
- Ollama: http://localhost:11434
|
||||
- DEVONthink: 로컬 실행 중
|
||||
- OmniFocus: 로컬 실행 중
|
||||
|
||||
Synology NAS (DS1525+):
|
||||
- 도메인: ds1525.hyungi.net
|
||||
- Tailscale IP: 100.101.79.37
|
||||
- 포트: 15001
|
||||
- WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/
|
||||
- MailPlus IMAP: mailplus.hyungi.net:993 (SSL)
|
||||
|
||||
GPU 서버 (RTX 4070 Ti Super):
|
||||
- 역할: 임베딩(nomic-embed-text), 비전(Qwen2.5-VL-7B), 리랭킹(bge-reranker)
|
||||
- Tailscale IP: 별도 확인 필요
|
||||
|
||||
TKSafety: tksafety.technicalkorea.net (설정만, 나중에 활성화)
|
||||
```
|
||||
|
||||
## 인증 정보
|
||||
|
||||
- 위치: `~/.config/pkm/credentials.env`
|
||||
- 템플릿: `./credentials.env.example`
|
||||
- 스크립트에서 python-dotenv로 로딩
|
||||
|
||||
## DEVONthink DB 구조 (13개)
|
||||
|
||||
```
|
||||
운영 DB (신규 생성 완료):
|
||||
Inbox — 모든 자료 최초 진입점
|
||||
Archive — 이메일, 채팅 로그
|
||||
Projects — 진행 중 프로젝트
|
||||
|
||||
도메인 DB (기존, 유지):
|
||||
00_Note_BOX, 01_Philosophie, 02_Language, 03_Engineering,
|
||||
04_Industrial safety, 05_Programming, 07_General Book,
|
||||
97_Production drawing, 99_Reference Data, 99_Technicalkorea
|
||||
```
|
||||
|
||||
## 커스텀 메타데이터 필드 (DEVONthink에 등록 완료)
|
||||
|
||||
```
|
||||
omnifocusTaskID — Single-Line Text — OmniFocus 역링크
|
||||
sourceURL — URL — 원본 출처
|
||||
synologyPath — Single-Line Text — NAS 원본 경로
|
||||
lastAIProcess — Date — 마지막 AI 처리 일시
|
||||
sourceChannel — Single-Line Text — 유입 경로 (아래 값 중 하나)
|
||||
dataOrigin — Single-Line Text — work 또는 external
|
||||
```
|
||||
|
||||
## sourceChannel 값 (유입 경로 추적)
|
||||
|
||||
```
|
||||
tksafety — TKSafety API (업무 실적) → dataOrigin = work
|
||||
devonagent — DEVONagent 자동 수집 (뉴스) → dataOrigin = external
|
||||
law_monitor — 법령 API (법령 변경) → dataOrigin = external
|
||||
inbox_route — Inbox → AI 분류 → AI 판별
|
||||
email — MailPlus 이메일 → AI 판별
|
||||
web_clip — Web Clipper 스크랩 → dataOrigin = external
|
||||
manual — 직접 추가 → dataOrigin = work (기본)
|
||||
```
|
||||
|
||||
## AI 모델 구성
|
||||
|
||||
```
|
||||
Tier 1 (Mac mini, 상시):
|
||||
qwen3.5:35b-a3b-q4_K_M — 태그 생성, 문서 분류, 요약
|
||||
→ http://localhost:11434/api/generate
|
||||
|
||||
Tier 2 (Claude API, 필요시):
|
||||
claude-sonnet — 복잡한 분석, 장문 처리
|
||||
→ CLAUDE_API_KEY 사용
|
||||
|
||||
Tier 3 (GPU 서버, 특수):
|
||||
nomic-embed-text — 벡터 임베딩
|
||||
Qwen2.5-VL-7B — 이미지/도면 OCR
|
||||
bge-reranker-v2-m3 — RAG 리랭킹
|
||||
```
|
||||
|
||||
## 작업 순서
|
||||
|
||||
docs/claude-code-commands.md의 단계를 순서대로 진행:
|
||||
|
||||
1. **프로젝트 구조** — README.md, deploy.md 작성 (구조는 이미 생성됨)
|
||||
2. **Ollama 테스트** — 분류 프롬프트 최적화 → scripts/prompts/에 저장
|
||||
3. **AppleScript** — auto_classify.scpt, omnifocus_sync.scpt
|
||||
4. **법령 모니터링** — scripts/law_monitor.py + launchd plist
|
||||
5. **이메일 수집** — scripts/mailplus_archive.py + launchd plist
|
||||
6. **Daily Digest** — scripts/pkm_daily_digest.py + launchd plist
|
||||
7. **DEVONagent 가이드** — docs/devonagent-setup.md (수동 설정 가이드)
|
||||
8. **테스트** — tests/ + docs/test-report.md
|
||||
|
||||
## 코딩 규칙
|
||||
|
||||
- Python 3.11+ (Mac mini 기본)
|
||||
- 인증 정보는 반드시 credentials.env에서 로딩 (하드코딩 금지)
|
||||
- AppleScript는 DEVONthink/OmniFocus와 연동 (osascript로 호출)
|
||||
- 로그는 ~/Documents/code/DEVONThink_my\ server/logs/에 저장
|
||||
- launchd plist는 launchd/ 디렉토리에 생성, Mac mini에서 심볼릭 링크로 등록
|
||||
- 한글 주석 사용
|
||||
|
||||
## 배포 방법
|
||||
|
||||
```
|
||||
MacBook Pro (개발) → Gitea push → Mac mini에서 git pull
|
||||
Mac mini에서:
|
||||
cd ~/Documents/code/DEVONThink_my\ server/
|
||||
git pull
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
# launchd 등록은 deploy.md 참조
|
||||
```
|
||||
|
||||
## 주의사항
|
||||
|
||||
- credentials.env는 git에 올리지 않음 (.gitignore에 포함)
|
||||
- DEVONthink, OmniFocus는 Mac mini에서 GUI로 실행 중이어야 AppleScript 작동
|
||||
- 법령 API (LAW_OC)는 승인 대기 중 — 스크립트만 만들고 실제 호출은 승인 후
|
||||
- TKSafety 연동은 설계만 완료, 구현은 나중에
|
||||
- GPU 서버 Tailscale IP는 별도 확인 후 credentials.env에 추가
|
||||
40
README.md
Normal file
40
README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# DEVONThink PKM System
|
||||
|
||||
Mac mini M4 Pro 기반 개인 지식관리 자동화 시스템
|
||||
|
||||
## 구성 요소
|
||||
|
||||
- **DEVONthink 4** — 중앙 지식 허브 (13개 DB)
|
||||
- **Ollama** — AI 자동 분류/태깅 (Qwen3.5-35B-A3B)
|
||||
- **법령 모니터링** — 산업안전보건법 등 변경 추적
|
||||
- **일일 다이제스트** — PKM 전체 변화 요약
|
||||
- **OmniFocus 연동** — 액션 아이템 자동 생성
|
||||
|
||||
## 설치
|
||||
|
||||
```bash
|
||||
# Mac mini에서
|
||||
git clone [gitea-repo-url]
|
||||
cd DEVONThink_my\ server
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 인증 정보 설정
|
||||
mkdir -p ~/.config/pkm
|
||||
cp credentials.env.example ~/.config/pkm/credentials.env
|
||||
nano ~/.config/pkm/credentials.env # 실제 값 입력
|
||||
chmod 600 ~/.config/pkm/credentials.env
|
||||
```
|
||||
|
||||
자세한 배포 방법은 `docs/deploy.md` 참조
|
||||
|
||||
## 디렉토리 구조
|
||||
|
||||
```
|
||||
scripts/ Python 스크립트 (법령모니터, 메일수집, 다이제스트)
|
||||
applescript/ DEVONthink/OmniFocus 연동 AppleScript
|
||||
launchd/ macOS 스케줄 실행 plist
|
||||
docs/ 설계 문서, 가이드
|
||||
tests/ 테스트 코드
|
||||
```
|
||||
29
credentials.env.example
Normal file
29
credentials.env.example
Normal file
@@ -0,0 +1,29 @@
|
||||
# ═══════════════════════════════════════════════════
|
||||
# PKM 시스템 인증 정보
|
||||
# 이 파일은 템플릿입니다. 실제 값은 Mac mini의
|
||||
# ~/.config/pkm/credentials.env 에 별도 관리합니다.
|
||||
# ═══════════════════════════════════════════════════
|
||||
|
||||
# ─── Claude API (AI 고급 처리용) ───
|
||||
CLAUDE_API_KEY=
|
||||
|
||||
# ─── 국가법령정보센터 (법령 모니터링) ───
|
||||
LAW_OC=
|
||||
|
||||
# ─── Synology NAS 접속 ───
|
||||
NAS_DOMAIN=
|
||||
NAS_TAILSCALE_IP=
|
||||
NAS_PORT=15001
|
||||
|
||||
# ─── MailPlus IMAP (이메일 수집용) ───
|
||||
MAILPLUS_HOST=
|
||||
MAILPLUS_PORT=993
|
||||
MAILPLUS_USER=
|
||||
MAILPLUS_PASS=
|
||||
|
||||
# ─── Synology Chat 웹훅 (나중에 추가) ───
|
||||
#CHAT_WEBHOOK_URL=
|
||||
|
||||
# ─── TKSafety API (나중에 활성화) ───
|
||||
#TKSAFETY_HOST=
|
||||
#TKSAFETY_PORT=
|
||||
1369
docs/architecture.md
Normal file
1369
docs/architecture.md
Normal file
File diff suppressed because it is too large
Load Diff
302
docs/claude-code-commands.md
Normal file
302
docs/claude-code-commands.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# Claude Code 실행 명령어 — PKM 시스템 구축
|
||||
|
||||
> 작업 위치: MacBook Pro ~/Documents/code/DEVONThink_my server/
|
||||
> Claude Code를 이 디렉토리에서 실행
|
||||
> 완성 후 Gitea에 push → Mac mini에서 pull
|
||||
|
||||
```
|
||||
개발/배포 흐름:
|
||||
MacBook Pro (Claude Code)
|
||||
~/Documents/code/DEVONThink_my server/
|
||||
→ 스크립트/설정 파일 작성
|
||||
→ git commit & push
|
||||
│
|
||||
▼
|
||||
Gitea (Synology NAS)
|
||||
│
|
||||
▼
|
||||
Mac mini (git pull → 실행)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 0단계: 프로젝트 구조 생성 + credentials.env 복사
|
||||
|
||||
Claude Code 실행 전에 먼저:
|
||||
|
||||
```bash
|
||||
# MacBook Pro에서
|
||||
cd ~/Documents/code/DEVONThink_my\ server/
|
||||
|
||||
# credentials.env를 프로젝트에 복사 (gitignore 필수!)
|
||||
cp ~/.config/pkm/credentials.env ./credentials.env.example
|
||||
# example은 값을 비운 템플릿용, 실제 파일은 Mac mini에서 직접 생성
|
||||
|
||||
# Mac mini에서 (SSH 접속 후)
|
||||
mkdir -p ~/.config/pkm
|
||||
nano ~/.config/pkm/credentials.env
|
||||
# → 실제 인증 정보 입력
|
||||
chmod 600 ~/.config/pkm/credentials.env
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1단계: 프로젝트 구조 + requirements.txt
|
||||
|
||||
```
|
||||
이 프로젝트의 디렉토리 구조를 만들고 기본 설정 파일들을 생성해줘.
|
||||
작업 디렉토리: 현재 디렉토리 (~/Documents/code/DEVONThink_my server/)
|
||||
|
||||
프로젝트 구조:
|
||||
./
|
||||
├── README.md ← 프로젝트 설명
|
||||
├── requirements.txt ← Python 패키지 목록
|
||||
├── .gitignore ← credentials.env, venv, logs, __pycache__ 등 제외
|
||||
├── credentials.env.example ← 인증 정보 템플릿 (값은 비움)
|
||||
├── scripts/
|
||||
│ ├── law_monitor.py
|
||||
│ ├── mailplus_archive.py
|
||||
│ ├── pkm_daily_digest.py
|
||||
│ ├── embed_to_chroma.py
|
||||
│ └── prompts/
|
||||
│ └── classify_document.txt
|
||||
├── applescript/
|
||||
│ ├── auto_classify.scpt
|
||||
│ └── omnifocus_sync.scpt
|
||||
├── launchd/
|
||||
│ ├── net.hyungi.pkm.law-monitor.plist
|
||||
│ ├── net.hyungi.pkm.mailplus.plist
|
||||
│ └── net.hyungi.pkm.daily-digest.plist
|
||||
├── docs/
|
||||
│ ├── devonagent-setup.md
|
||||
│ └── deploy.md ← Mac mini 배포 방법
|
||||
└── tests/
|
||||
└── test_classify.py
|
||||
|
||||
requirements.txt에 넣을 패키지:
|
||||
- chromadb
|
||||
- requests
|
||||
- python-dotenv
|
||||
- schedule
|
||||
- markdown
|
||||
|
||||
.gitignore에 반드시 포함:
|
||||
- credentials.env
|
||||
- venv/
|
||||
- logs/
|
||||
- __pycache__/
|
||||
- *.pyc
|
||||
- .DS_Store
|
||||
|
||||
deploy.md에는 Mac mini에서의 설치 절차 작성:
|
||||
1. git pull
|
||||
2. python3 -m venv venv && source venv/bin/activate
|
||||
3. pip install -r requirements.txt
|
||||
4. credentials.env는 ~/.config/pkm/credentials.env에 별도 관리
|
||||
5. launchd plist 심볼릭 링크 등록 방법
|
||||
|
||||
네트워크 환경:
|
||||
- NAS 도메인: ds1525.hyungi.net (Tailscale: 100.101.79.37, 포트: 15001)
|
||||
- MailPlus: mailplus.hyungi.net:993 (IMAP SSL)
|
||||
- WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/
|
||||
- TKSafety: tksafety.technicalkorea.net (나중에 활성화)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2단계: Ollama 모델 확인 + 분류 프롬프트 테스트
|
||||
|
||||
```
|
||||
Ollama가 정상 동작하는지 확인하고, PKM 문서 분류용 프롬프트를 테스트해줘.
|
||||
|
||||
1. ollama list로 현재 모델 확인
|
||||
2. qwen3.5:35b-a3b 계열 모델이 있는지 확인 (없으면 알려줘)
|
||||
3. 테스트 프롬프트 실행 — 아래 내용으로 분류 테스트:
|
||||
|
||||
테스트 문서: "산업안전보건법 시행규칙 일부개정령안 입법예고 - 고용노동부는 위험성평가에 관한 지침을 개정하여..."
|
||||
|
||||
기대 응답 JSON:
|
||||
{
|
||||
"tags": ["위험성평가", "법령개정", "고용노동부"],
|
||||
"domain_db": "04_Industrial safety",
|
||||
"sub_group": "10_Legislation/Notice",
|
||||
"sourceChannel": "inbox_route",
|
||||
"dataOrigin": "external"
|
||||
}
|
||||
|
||||
도메인 DB 선택지:
|
||||
00_Note_BOX, 01_Philosophie, 02_Language, 03_Engineering,
|
||||
04_Industrial safety, 05_Programming, 07_General Book,
|
||||
97_Production drawing, 99_Reference Data, 99_Technicalkorea
|
||||
|
||||
sourceChannel 값: tksafety, devonagent, law_monitor, inbox_route, email, web_clip, manual
|
||||
dataOrigin 값: work (자사 업무), external (외부 참고)
|
||||
|
||||
프롬프트를 최적화해서 ~/Documents/code/DEVONThink_my server/scripts/prompts/ 디렉토리에 저장해줘.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3단계: DEVONthink Smart Rule + AppleScript 배포
|
||||
|
||||
```
|
||||
DEVONthink 4 Smart Rule용 AppleScript 모듈들을 만들어줘.
|
||||
Mac mini에서 DEVONthink가 실행 중이야.
|
||||
|
||||
모듈 A: Ollama 연동 자동 분류 (~/Documents/code/DEVONThink_my server/applescript/auto_classify.scpt)
|
||||
- DEVONthink Inbox DB에 새 문서가 들어오면 실행
|
||||
- Ollama qwen3.5 35B에 문서 텍스트 전송
|
||||
- 응답에서 tags, domain_db, sub_group, sourceChannel, dataOrigin 파싱
|
||||
- DEVONthink 태그 설정 + 커스텀 메타데이터(sourceChannel, dataOrigin, lastAIProcess) 설정
|
||||
- 해당 도메인 DB의 하위 그룹으로 문서 이동
|
||||
- GPU 서버(Tailscale IP)로 벡터 임베딩 비동기 전송
|
||||
|
||||
모듈 B: OmniFocus 연동 (~/Documents/code/DEVONThink_my server/applescript/omnifocus_sync.scpt)
|
||||
- Projects DB에 새 문서 추가 시 TODO 패턴 감지
|
||||
- OmniFocus에 작업 생성 (DEVONthink 링크 포함)
|
||||
- 커스텀 메타데이터에 omnifocusTaskID 저장
|
||||
|
||||
프롬프트 파일 위치: ~/Documents/code/DEVONThink_my server/scripts/prompts/
|
||||
인증 정보: ~/.config/pkm/credentials.env
|
||||
GPU 서버 Tailscale IP는 별도 확인 필요 (나중에 추가)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4단계: 법령 모니터링 스크립트
|
||||
|
||||
```
|
||||
한국 법령 변경 모니터링 스크립트를 만들어줘.
|
||||
|
||||
스크립트: ~/Documents/code/DEVONThink_my server/scripts/law_monitor.py
|
||||
인증: ~/.config/pkm/credentials.env의 LAW_OC 값 사용
|
||||
API: open.law.go.kr OpenAPI
|
||||
|
||||
기능:
|
||||
1. 산업안전보건법, 중대재해처벌법, 관련 시행령/시행규칙/고시 변경 추적
|
||||
2. 변경 감지 시:
|
||||
- 법령 본문(XML) 다운로드 → ~/Documents/code/DEVONThink_my server/data/laws/에 저장
|
||||
- DEVONthink 04_Industrial Safety/10_Legislation/ 하위에 자동 임포트 (AppleScript 호출)
|
||||
- 커스텀 메타데이터: sourceChannel=law_monitor, dataOrigin=external
|
||||
- 로그: ~/Documents/code/DEVONThink_my server/logs/law_monitor.log
|
||||
3. launchd plist 생성: 매일 07:00 실행
|
||||
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.law-monitor.plist
|
||||
→ ~/Library/LaunchAgents/에 심볼릭 링크
|
||||
|
||||
※ 법령 API 승인 대기중이라 스크립트만 만들고 실제 테스트는 승인 후에
|
||||
※ 해외 법령(US OSHA, JP, EU)은 나중에 추가 예정
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5단계: MailPlus → DEVONthink 이메일 수집
|
||||
|
||||
```
|
||||
MailPlus 이메일을 DEVONthink Archive DB로 자동 수집하는 스크립트를 만들어줘.
|
||||
|
||||
스크립트: ~/Documents/code/DEVONThink_my server/scripts/mailplus_archive.py
|
||||
인증: ~/.config/pkm/credentials.env
|
||||
|
||||
접속 정보:
|
||||
- IMAP 서버: mailplus.hyungi.net:993 (SSL)
|
||||
- 계정: hyungi
|
||||
|
||||
기능:
|
||||
1. IMAP으로 MailPlus 접속
|
||||
2. 마지막 동기화 이후 새 메일 가져오기
|
||||
3. DEVONthink Archive DB에 임포트 (AppleScript 호출)
|
||||
4. 커스텀 메타데이터: sourceChannel=email
|
||||
5. 안전 관련 키워드 감지 시 dataOrigin 자동 판별
|
||||
|
||||
launchd: 매일 07:00 + 18:00 실행
|
||||
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.mailplus.plist
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6단계: Daily Digest 시스템
|
||||
|
||||
```
|
||||
PKM 일일 다이제스트를 자동 생성하는 스크립트를 만들어줘.
|
||||
|
||||
스크립트: ~/Documents/code/DEVONThink_my server/scripts/pkm_daily_digest.py
|
||||
인증: ~/.config/pkm/credentials.env
|
||||
|
||||
기능:
|
||||
1. DEVONthink에서 오늘 추가/수정된 문서 집계 (AppleScript로 쿼리)
|
||||
- DB별 신규 건수
|
||||
- sourceChannel별 구분
|
||||
2. law_monitor 로그에서 법령 변경 건 파싱
|
||||
3. OmniFocus 오늘 완료/추가/기한초과 집계 (AppleScript)
|
||||
4. 상위 뉴스 3건 요약 (Ollama 35B 호출)
|
||||
5. MD 파일 생성 → DEVONthink 00_Note_BOX/Daily_Digest/에 저장
|
||||
파일명: YYYY-MM-DD_digest.md
|
||||
6. OmniFocus 액션 자동 생성 (법령변경, overdue, Inbox 미처리 등)
|
||||
7. 90일 지난 다이제스트 → 90_Archive 이동 (Smart Rule 대체)
|
||||
|
||||
launchd: 매일 20:00 실행
|
||||
~/Documents/code/DEVONThink_my server/launchd/net.hyungi.pkm.daily-digest.plist
|
||||
|
||||
※ Synology Chat 웹훅 알림은 나중에 추가 (CHAT_WEBHOOK_URL 설정 후)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7단계: DEVONagent 검색 세트 (수동 가이드)
|
||||
|
||||
```
|
||||
DEVONagent Pro에서 안전 분야 자동 검색 세트를 설정하는 가이드를 만들어줘.
|
||||
|
||||
총 9개 검색 세트 (7 안전 + 2 기술):
|
||||
1. 국내 산업안전 뉴스 (kosha, moel, safetynews 등)
|
||||
2. 국내 중대재해 뉴스
|
||||
3. KOSHA 가이드/지침
|
||||
4. 국내 산업안전 학술/논문
|
||||
5. US OSHA / Safety+Health Magazine
|
||||
6. JP 厚生労働省 / 安全衛生
|
||||
7. EU-OSHA
|
||||
8. 기술 뉴스 (AI/서버/네트워크)
|
||||
9. 프로그래밍 기술 동향
|
||||
|
||||
각 세트별로:
|
||||
- 검색 키워드/연산자
|
||||
- 사이트 제한
|
||||
- 스케줄 (매일/주간)
|
||||
- 수량 제한 (주간 합계 50~85건 수준)
|
||||
- 결과 → DEVONthink Inbox로 전송 설정 방법
|
||||
|
||||
이건 DEVONagent GUI에서 수동 설정해야 하니까,
|
||||
단계별 가이드 문서를 ~/Documents/code/DEVONThink_my server/docs/devonagent-setup.md로 만들어줘.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8단계: 전체 테스트
|
||||
|
||||
```
|
||||
PKM 시스템 전체 End-to-End 테스트를 진행해줘.
|
||||
|
||||
테스트 항목:
|
||||
1. Ollama 분류 테스트 — 5종 문서(법령, 뉴스, 논문, 메모, 이메일) 분류 정확도
|
||||
2. DEVONthink Smart Rule — Inbox에 테스트 문서 추가 → 자동 분류 확인
|
||||
3. sourceChannel/dataOrigin 메타데이터가 정상 설정되는지
|
||||
4. OmniFocus 연동 — TODO 패턴 문서 → 작업 자동 생성
|
||||
5. MailPlus IMAP 접속 테스트
|
||||
6. launchd 스케줄 등록 확인 (launchctl list | grep pkm)
|
||||
7. Daily Digest 수동 실행 테스트
|
||||
|
||||
각 항목 pass/fail 리포트를 ~/Documents/code/DEVONThink_my server/docs/test-report.md로 저장해줘.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 참고: 네트워크 환경
|
||||
|
||||
```
|
||||
Mac mini 접속: SSH (MacBook Pro → Mac mini)
|
||||
NAS 도메인: ds1525.hyungi.net (Tailscale: 100.101.79.37, 포트: 15001)
|
||||
MailPlus: mailplus.hyungi.net:993 (IMAP SSL)
|
||||
WebDAV: webdav.hyungi.net/Document_Server/DEVONThink/
|
||||
TKSafety: tksafety.technicalkorea.net (나중에 활성화)
|
||||
내부 네트워크: Tailscale VPN 연결됨
|
||||
```
|
||||
684
docs/industrial-safety-blueprint.md
Normal file
684
docs/industrial-safety-blueprint.md
Normal file
@@ -0,0 +1,684 @@
|
||||
# 04_Industrial Safety — DEVONthink DB 상세 설계서
|
||||
|
||||
> 메인 아키텍처: [mac-mini-pkm-architecture.md](computer:///sessions/amazing-vigilant-hypatia/mnt/outputs/mac-mini-pkm-architecture.md) 참조
|
||||
|
||||
---
|
||||
|
||||
## 1. DB 그룹 구조
|
||||
|
||||
```
|
||||
04_Industrial Safety/
|
||||
├── 00_Inbox ← 2차 분류 대기
|
||||
├── 10_Legislation ← 법령, 고시, 행정규칙
|
||||
│ ├── Act ← 산업안전보건법 등 법률 원문
|
||||
│ ├── Decree ← 시행령, 시행규칙
|
||||
│ ├── Notice ← 고시, 지침, 예규, 가이드라인
|
||||
│ ├── SAPA ← 중대재해처벌법 (별도 법 체계)
|
||||
│ ├── KR_Archive ← 개정 이력 자동 수집 (법령 API)
|
||||
│ └── Foreign ← 해외 법령 (참고용)
|
||||
│ ├── US ← OSHA Standards, CFR Title 29
|
||||
│ ├── JP ← 労働安全衛生法
|
||||
│ └── EU ← EU-OSHA Directives, REACH
|
||||
├── 20_Theory ← 이론서, 교과서, 학습 자료
|
||||
├── 30_Papers ← 학술 논문, 연구 보고서
|
||||
├── 40_Cases ← 사고 사례, 재해 분석
|
||||
│ ├── Domestic ← 국내 사례
|
||||
│ └── International ← 해외 사례
|
||||
├── 50_Practice ← 실무 문서 (현장 업무)
|
||||
│ ├── Risk_Assessment ← 위험성평가
|
||||
│ ├── Patrol_Inspection ← 순회점검
|
||||
│ ├── Safety_Plan ← 안전관리계획서
|
||||
│ ├── Education ← 안전교육 자료
|
||||
│ ├── Checklist ← 점검표, 체크리스트
|
||||
│ ├── Contractor_Management ← 도급/수급업체 안전관리
|
||||
│ ├── Permit_to_Work ← 작업허가서 (화기, 밀폐, 고소 등)
|
||||
│ ├── Emergency_Plan ← 비상조치계획, 대피/소방훈련
|
||||
│ └── PPE ← 보호구 관리, 선정 기준, 지급 대장
|
||||
├── 60_Compliance ← 신고, 보고, 감독 (실제 행정 문서)
|
||||
│ ├── Report ← 산재 신고, 중대재해 보고
|
||||
│ ├── Audit ← 감독 결과, 시정명령
|
||||
│ └── Certification ← 자격증, 인증 관련
|
||||
├── 70_Safety_Manager ← 안전관리자 직무 전용
|
||||
│ ├── Appointment ← 선임 서류, 자격 관련
|
||||
│ ├── Duty_Record ← 직무수행 기록, 월간/분기 보고
|
||||
│ ├── Meeting ← 산업안전보건위원회, 회의록
|
||||
│ ├── Inspection ← 안전관리자 점검 기록
|
||||
│ └── Improvement ← 개선 요청, 시정 조치 이력
|
||||
├── 75_Health_Manager ← 보건관리자 직무 전용
|
||||
│ ├── Appointment ← 선임 서류, 자격 관련
|
||||
│ ├── Duty_Record ← 직무수행 기록, 월간/분기 보고
|
||||
│ ├── Work_Environment ← 작업환경측정, 유해인자 관리
|
||||
│ ├── Health_Checkup ← 건강검진 관리, 사후관리
|
||||
│ ├── MSDS ← 물질안전보건자료 관리
|
||||
│ ├── Ergonomics ← 근골격계 유해요인조사, 직업병 예방
|
||||
│ └── Mental_Health ← 직무스트레스 평가, 감정노동, 심리상담
|
||||
├── 80_Reference ← 규격, 기준, 매뉴얼
|
||||
│ ├── Standards ← KS, ISO, KOSHA Guide
|
||||
│ └── Manual ← 장비 매뉴얼, 작업 지침서
|
||||
└── 90_Archive ← 폐기 법령, 구버전 자료
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. AI 2차 분류 라우팅 (태그 → 그룹 매핑)
|
||||
|
||||
Inbox에서 1차 분류로 이 DB에 도착한 문서를, AI가 태그와 본문 키워드를 보고 하위 그룹까지 자동 이동시킵니다.
|
||||
|
||||
```
|
||||
태그 조합 → 이동 대상 그룹
|
||||
──────────────────────────────────────────────────────────
|
||||
$유형/법령 → 10_Legislation/
|
||||
$유형/법령 + #주제/산업안전/법령 → 10_Legislation/
|
||||
├── 텍스트에 "법률" "법" 포함 → Act/
|
||||
├── 텍스트에 "시행령" "시행규칙" 포함 → Decree/
|
||||
├── 텍스트에 "고시" "지침" "예규" 포함 → Notice/
|
||||
└── 텍스트에 "중대재해처벌" 포함 → SAPA/
|
||||
|
||||
$유형/논문 → 30_Papers/
|
||||
|
||||
#주제/산업안전/사고사례 → 40_Cases/
|
||||
├── sourceURL에 kosha.or.kr 포함 → Domestic/
|
||||
└── sourceURL에 osha.gov 등 포함 → International/
|
||||
|
||||
#주제/산업안전/위험성평가 → 50_Practice/Risk_Assessment/
|
||||
#주제/산업안전/순회점검 → 50_Practice/Patrol_Inspection/
|
||||
#주제/산업안전/안전교육 → 50_Practice/Education/
|
||||
$유형/체크리스트 → 50_Practice/Checklist/
|
||||
키워드: "도급" "수급" "협력업체" → 50_Practice/Contractor_Management/
|
||||
키워드: "작업허가" "화기" "밀폐" → 50_Practice/Permit_to_Work/
|
||||
키워드: "비상" "대피" "소방" → 50_Practice/Emergency_Plan/
|
||||
키워드: "보호구" "안전화" "안전모" → 50_Practice/PPE/
|
||||
|
||||
#주제/산업안전/신고보고 → 60_Compliance/Report/
|
||||
키워드: "감독" "시정명령" → 60_Compliance/Audit/
|
||||
키워드: "자격증" "인증" "면허" → 60_Compliance/Certification/
|
||||
|
||||
#주제/산업안전/안전관리자 → 70_Safety_Manager/
|
||||
├── "선임" "자격" → Appointment/
|
||||
├── "직무수행" "월간보고" → Duty_Record/
|
||||
├── "위원회" "회의록" → Meeting/
|
||||
├── "점검" "순회" → Inspection/
|
||||
└── "개선" "시정" → Improvement/
|
||||
|
||||
#주제/산업안전/보건관리자 → 75_Health_Manager/
|
||||
├── "선임" "자격" → Appointment/
|
||||
├── "작업환경측정" "유해인자" → Work_Environment/
|
||||
├── "건강검진" "사후관리" → Health_Checkup/
|
||||
├── "MSDS" "물질안전" → MSDS/
|
||||
├── "근골격계" "직업병" → Ergonomics/
|
||||
└── "스트레스" "감정노동" → Mental_Health/
|
||||
|
||||
#주제/산업안전/규격기준 → 80_Reference/Standards/
|
||||
|
||||
분류 불가 → 00_Inbox/ (수동 리뷰 대기)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 법령 자동 수집 및 변경 알림 시스템
|
||||
|
||||
### 3.1 모니터링 대상 법령
|
||||
|
||||
```
|
||||
🇰🇷 한국 (필수) — 국가법령정보센터 Open API (open.law.go.kr)
|
||||
─────────────────────────────────────────
|
||||
· 산업안전보건법 (법률/시행령/시행규칙)
|
||||
· 중대재해 처벌 등에 관한 법률 (법률/시행령)
|
||||
· 건설기술 진흥법
|
||||
· 화학물질관리법 / 화학물질의 등록 및 평가 등에 관한 법률
|
||||
· 위험물안전관리법
|
||||
· KOSHA Guide (한국산업안전보건공단 기술지침)
|
||||
· 고용노동부 고시/지침 (관련 행정규칙)
|
||||
|
||||
🇺🇸 미국 (참고) — Federal Register API + OSHA
|
||||
─────────────────────────────────────────
|
||||
· OSHA Standards (29 CFR 1910 일반산업, 1926 건설)
|
||||
· Federal Register: OSHA 관련 규칙 제정/개정 공지
|
||||
· NIOSH 권고사항 (새 출판물)
|
||||
|
||||
🇯🇵 일본 (참고) — e-Gov 法令API (laws.e-gov.go.jp)
|
||||
─────────────────────────────────────────
|
||||
· 労働安全衛生法 (노동안전위생법)
|
||||
· 労働安全衛生法施行令
|
||||
· 労働安全衛生規則
|
||||
|
||||
🇪🇺 EU (참고) — EUR-Lex SPARQL / REST
|
||||
─────────────────────────────────────────
|
||||
· Framework Directive 89/391/EEC (산업안전 기본지침)
|
||||
· REACH Regulation (화학물질 규정)
|
||||
· CLP Regulation (분류/표시 규정)
|
||||
· Machinery Directive 2006/42/EC
|
||||
```
|
||||
|
||||
### 3.2 시스템 아키텍처
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ 법령 모니터링 시스템 (Mac mini, launchd) │
|
||||
│ │
|
||||
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
|
||||
│ │ law_monitor.py │ │ 수집 스케줄 │ │
|
||||
│ │ · KR: law.go.kr │ │ · 한국: 매일 06:00 │ │
|
||||
│ │ · US: FedReg │ │ · 미국: 주 1회 (월) │ │
|
||||
│ │ · JP: e-Gov │ │ · 일본: 주 1회 (수) │ │
|
||||
│ │ · EU: EUR-Lex │ │ · EU: 월 1회 (1일) │ │
|
||||
│ └───────┬─────────┘ └──────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ 변경 감지: API → SQLite 비교 → diff 생성 │ │
|
||||
│ └───────┬──────────────────────────────────────────────┘ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ 알림 + 저장 │ │
|
||||
│ │ · DEVONthink: 10_Legislation/ 자동 분류 │ │
|
||||
│ │ · Synology Chat 웹훅 즉시 알림 │ │
|
||||
│ │ · OmniFocus 작업 생성 ("법령 변경 검토 필요") │ │
|
||||
│ │ · Ollama 35B: 변경 요약 + 실무 영향 브리핑 │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.3 법적 근거 — 수집에 문제 없음
|
||||
|
||||
```
|
||||
한국: 저작권법 제7조 — 법령, 조약, 판결 등은 저작권 보호 대상 아님
|
||||
+ 국가법령정보센터 Open API 공공데이터 자유이용 허용
|
||||
미국: 연방법/규정은 Public Domain (17 U.S.C. §105)
|
||||
일본: 著作権法 第13条 — 법령은 저작권 대상 제외
|
||||
EU: EUR-Lex 자유 재사용 정책 (Decision 2011/833/EU)
|
||||
```
|
||||
|
||||
### 3.4 저장 구조 예시
|
||||
|
||||
```
|
||||
04_Industrial Safety/10_Legislation/
|
||||
├── Act/
|
||||
│ └── 산업안전보건법_2026-03-01_시행.pdf
|
||||
├── Decree/
|
||||
│ └── 산업안전보건법_시행령_2026-01-01.pdf
|
||||
├── SAPA/
|
||||
│ └── 중대재해처벌법_2026-01-01_시행.pdf
|
||||
├── KR_Archive/
|
||||
│ ├── 2026-03-24_산업안전보건법_개정_diff.md ← 변경점 요약
|
||||
│ └── 2026-03-24_산업안전보건법_개정_원문.pdf
|
||||
└── Foreign/
|
||||
├── US/
|
||||
│ └── 29CFR1910_General_Industry.pdf
|
||||
├── JP/
|
||||
│ └── 労働安全衛生法_2026.pdf
|
||||
└── EU/
|
||||
└── Directive_89_391_EEC_Framework.pdf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. DEVONagent 검색 세트 — 안전 분야
|
||||
|
||||
### 4.1 전체 구성
|
||||
|
||||
```
|
||||
Mac mini 자동 스케줄
|
||||
├── [SS-01] 🇰🇷 한국 산업안전 뉴스 매일 06:00 15~25건/주
|
||||
├── [SS-02] 🇰🇷 중대재해·판례 매일 06:15 5~10건/주
|
||||
├── [SS-04] 🇺🇸 미국 안전 동향 주 1회 (월) 10~15건/주
|
||||
├── [SS-05] 🇯🇵 일본 안전 동향 주 1회 (수) 5~10건/주
|
||||
├── [SS-06] 🇪🇺 유럽 안전 동향 월 2회 2~4건/주
|
||||
├── [SS-07] 🌐 국제 안전 전문지 주 1회 (금) 5~10건/주
|
||||
└── [SS-08] 📚 학술 논문 (안전공학) 주 1회 (토) 5~10건/주
|
||||
|
||||
안전 분야 주간 합계: ~50~85건 (하루 평균 ~8~12건)
|
||||
```
|
||||
|
||||
### 4.2 [SS-01] 한국 산업안전 뉴스 (매일)
|
||||
|
||||
```
|
||||
검색 세트: KR_Safety_News
|
||||
스케줄: 매일 06:00 / 새 결과만 수집
|
||||
|
||||
소스:
|
||||
· kosha.or.kr — 공단 공지, 가이드, 재해사례
|
||||
· portal.kosha.or.kr — 산재예방 포털
|
||||
· moel.go.kr — 고용노동부 보도자료, 정책
|
||||
· labor.moel.go.kr — 중대재해 알림e
|
||||
· safety.or.kr — 대한산업안전협회
|
||||
· safetyin.co.kr — 안전저널
|
||||
· Google News — "산업안전" OR "산재" OR "안전보건" -채용 -구인
|
||||
|
||||
→ Inbox → AI 태깅 → 04_Industrial Safety 하위 그룹 자동 분류
|
||||
```
|
||||
|
||||
### 4.3 [SS-02] 중대재해·판례 (매일)
|
||||
|
||||
```
|
||||
검색 세트: KR_SAPA_Cases
|
||||
스케줄: 매일 06:15 / 새 결과만 수집
|
||||
|
||||
소스:
|
||||
· labor.moel.go.kr — 중대재해 알림e 공시
|
||||
· nosanjae.kr — 중대재해 기업 검색
|
||||
· law.go.kr — 판례 검색 (산업안전 관련)
|
||||
· Google News — "중대재해" OR "중대재해처벌" OR "산재 사망" -채용
|
||||
|
||||
→ Inbox → AI 태깅 → 40_Cases/Domestic/ 또는 60_Compliance/
|
||||
```
|
||||
|
||||
### 4.4 [SS-04] 🇺🇸 미국 안전 동향 (주 1회)
|
||||
|
||||
```
|
||||
검색 세트: US_Safety
|
||||
스케줄: 월요일 07:00 / 최대 15건
|
||||
|
||||
소스:
|
||||
· osha.gov/rss — OSHA 보도자료, 벌금 부과, 규칙 (주 3~5건)
|
||||
· osha.gov/quicktakes — OSHA QuickTakes 뉴스레터 (격주 1건)
|
||||
· federalregister.gov — OSHA final rule / proposed (주 1~3건)
|
||||
· ehstoday.com — EHS Today 산업안전 전문지 (주 3~5건)
|
||||
|
||||
쿼리: ("OSHA" OR "workplace fatality" OR "safety violation") -job -hiring
|
||||
|
||||
→ Inbox → 10_Legislation/Foreign/US/ 또는 40_Cases/International/
|
||||
```
|
||||
|
||||
### 4.5 [SS-05] 🇯🇵 일본 안전 동향 (주 1회)
|
||||
|
||||
```
|
||||
검색 세트: JP_Safety
|
||||
스케줄: 수요일 07:00 / 최대 10건
|
||||
|
||||
소스:
|
||||
· mhlw.go.jp/rss — 厚生労働省 보도자료 (주 2~4건)
|
||||
· anzeninfo.mhlw.go.jp — 職場のあんぜんサイト (재해사례) (주 2~3건)
|
||||
· jaish.gr.jp — 安全衛生情報センター (통달/지침) (주 1~2건)
|
||||
|
||||
쿼리: ("労働安全" OR "労働災害" OR "安全衛生" OR "重大災害")
|
||||
|
||||
→ Inbox → 10_Legislation/Foreign/JP/
|
||||
→ AI 자동 처리: Ollama로 일본어 → 한국어 1줄 요약 생성
|
||||
```
|
||||
|
||||
### 4.6 [SS-06] 🇪🇺 유럽 안전 동향 (월 2회)
|
||||
|
||||
```
|
||||
검색 세트: EU_Safety
|
||||
스케줄: 1일·15일 07:00 / 최대 10건
|
||||
|
||||
소스:
|
||||
· osha.europa.eu RSS — EU-OSHA 발간물, 뉴스, 지침 (월 3~5건)
|
||||
· eur-lex.europa.eu — 산업안전 관련 신규 지침/규정 (월 1~3건)
|
||||
· hse.gov.uk — UK Health & Safety Executive (월 2~3건)
|
||||
|
||||
쿼리: ("EU-OSHA" OR "workplace safety directive" OR "REACH" OR "safety at work")
|
||||
-vacancy -recruitment
|
||||
|
||||
→ Inbox → 10_Legislation/Foreign/EU/
|
||||
```
|
||||
|
||||
### 4.7 [SS-07] 🌐 국제 안전 전문지 (주 1회)
|
||||
|
||||
```
|
||||
검색 세트: Global_Safety_Magazines
|
||||
스케줄: 금요일 07:00 / 최대 10건
|
||||
|
||||
소스:
|
||||
· ishn.com/rss — Industrial Safety & Hygiene News (주 3~5건)
|
||||
· ohsonline.com — Occupational Health & Safety (주 2~3건)
|
||||
· safetyandhealthmagazine.com — NSC Safety+Health Magazine (주 1~2건)
|
||||
|
||||
쿼리: ("industrial safety" OR "process safety" OR "workplace accident"
|
||||
OR "safety management" OR "risk assessment")
|
||||
|
||||
→ Inbox → AI 태깅 후 주제별 자동 분류
|
||||
```
|
||||
|
||||
### 4.8 [SS-08] 학술 논문 — 안전공학 (주 1회)
|
||||
|
||||
```
|
||||
검색 세트: Safety_Academic
|
||||
스케줄: 토요일 08:00 / 최대 10건
|
||||
|
||||
소스:
|
||||
· Google Scholar — 한국어: "산업안전" "위험성평가" "안전공학"
|
||||
· Google Scholar — 영어: "occupational safety" "risk assessment"
|
||||
· oshri.kosha.or.kr — 산업안전보건연구원 발간물
|
||||
· dbpia.co.kr — 한국 학술논문
|
||||
· sciencedirect.com — Safety Science 저널
|
||||
|
||||
→ Inbox → 30_Papers/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 양 조절 전략
|
||||
|
||||
### 5.1 주간 예상 유입량
|
||||
|
||||
```
|
||||
검색 세트 주간 예상 빈도
|
||||
──────────────────────────────────────────
|
||||
SS-01 한국 안전뉴스 15~25건 매일
|
||||
SS-02 중대재해/판례 5~10건 매일
|
||||
SS-04 🇺🇸 미국 10~15건 주 1회
|
||||
SS-05 🇯🇵 일본 5~10건 주 1회
|
||||
SS-06 🇪🇺 유럽 2~4건 월 2회
|
||||
SS-07 🌐 전문지 5~10건 주 1회
|
||||
SS-08 학술 논문 5~10건 주 1회
|
||||
──────────────────────────────────────────
|
||||
안전 분야 합계 ~50~85건 /주
|
||||
하루 평균 ~8~12건
|
||||
```
|
||||
|
||||
### 5.2 과다 유입 방지 장치
|
||||
|
||||
```
|
||||
1단계: DEVONagent "새 결과만" — 이전 수집분 자동 제외
|
||||
2단계: 검색 세트별 최대 수집량 캡 (Max Results)
|
||||
3단계: AI 관련도 필터 — Ollama가 관련도 판단
|
||||
→ 낮으면 @상태/아카이브 → 90_Archive 이동
|
||||
→ 높으면 @상태/검토필요 → 해당 그룹에 유지
|
||||
4단계: 주간 다이제스트 — 금요일 Claude API가 주간 요약
|
||||
→ "이번 주 꼭 봐야 할 5건" 브리핑 자동 생성
|
||||
5단계: 30일 이상 미열람 → Smart Rule로 자동 90_Archive 이동
|
||||
```
|
||||
|
||||
### 5.3 일본어 자료 자동 처리
|
||||
|
||||
```
|
||||
수집 → Smart Rule: 일본 태그 감지
|
||||
→ Ollama 35B: 일본어 → 한국어 1줄 요약
|
||||
→ DEVONthink 커스텀 메타데이터 "summaryKR" 필드에 저장
|
||||
→ 원문은 그대로 보존
|
||||
|
||||
※ 일본 산업안전 용어는 한자어 공통으로 번역 정확도 높음
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 기존 자료 마이그레이션
|
||||
|
||||
```
|
||||
현재 → 이동 대상
|
||||
───────────────────────────────────────────────
|
||||
0_Theory/ (72건) → 20_Theory/
|
||||
8_Reference/ (1건) → 80_Reference/
|
||||
9_일반자료_산업안전/ (33건) → 내용별 분산:
|
||||
사고사례 → 40_Cases/Domestic/
|
||||
실무서식 → 50_Practice/
|
||||
신고관련 → 60_Compliance/
|
||||
지게차 관련규칙 개정... (PDF) → 10_Legislation/Notice/
|
||||
Industrial Safety... (HTML) → 20_Theory/ 또는 80_Reference/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 관련 태그 체계 (산업안전 영역)
|
||||
|
||||
```
|
||||
#주제/산업안전/
|
||||
├── 법령 ← 10_Legislation
|
||||
├── 위험성평가 ← 50_Practice/Risk_Assessment
|
||||
├── 순회점검 ← 50_Practice/Patrol_Inspection
|
||||
├── 안전교육 ← 50_Practice/Education
|
||||
├── 사고사례 ← 40_Cases
|
||||
├── 신고보고 ← 60_Compliance
|
||||
├── 안전관리자 ← 70_Safety_Manager
|
||||
├── 보건관리자 ← 75_Health_Manager
|
||||
└── 규격기준 ← 80_Reference
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. 유입 경로 추적 체계 (Source Tracking)
|
||||
|
||||
모든 문서에 유입 경로를 기록하여 "이 자료가 어디서 왔는지"를 즉시 파악할 수 있게 합니다.
|
||||
실제 업무 데이터와 외부 참고자료를 명확히 구분하는 것이 핵심입니다.
|
||||
|
||||
### 8.1 유입 경로 분류
|
||||
|
||||
```
|
||||
커스텀 메타데이터: sourceChannel (텍스트, 필수)
|
||||
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ 자동 유입 (시스템) │
|
||||
├────────────────┬─────────────────────────────────────────────────┤
|
||||
│ tksafety │ TKSafety API 연동 — 업무 실적 (위험성평가, 점검 등) │
|
||||
│ devonagent │ DEVONagent 검색 세트 — 뉴스/업계 동향 자동 수집 │
|
||||
│ law_monitor │ 법령 모니터링 API — 법령 제·개정 추적 │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ 수동/반자동 유입 │
|
||||
├────────────────┬─────────────────────────────────────────────────┤
|
||||
│ inbox_route │ Inbox DB → AI 분류 → 이 DB로 라우팅된 문서 │
|
||||
│ email │ MailPlus → Archive DB → 안전 관련 메일 전달 │
|
||||
│ web_clip │ DEVONthink Web Clipper로 직접 스크랩 │
|
||||
│ manual │ 드래그&드롭, 스캔, 파일 직접 추가 │
|
||||
└────────────────┴─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 8.2 메타데이터 자동 설정 규칙
|
||||
|
||||
```
|
||||
유입 경로별 자동 태그:
|
||||
|
||||
tksafety → @출처/TKSafety + sourceURL = tksafety.technicalkorea.net/...
|
||||
devonagent → @출처/뉴스수집 + sourceURL = 원본 기사 URL
|
||||
law_monitor → @출처/법령API + sourceURL = law.go.kr/... 또는 해외 법령 URL
|
||||
inbox_route → @출처/자동분류 + (원본 sourceURL 유지)
|
||||
email → @출처/이메일 + sourceURL = mailplus 메시지 링크
|
||||
web_clip → @출처/웹스크랩 + sourceURL = 스크랩 원본 URL
|
||||
manual → @출처/수동입력 + sourceURL = 없음 (직접 기입 가능)
|
||||
```
|
||||
|
||||
### 8.3 업무 데이터 vs 참고자료 구분
|
||||
|
||||
```
|
||||
커스텀 메타데이터: dataOrigin (드롭다운, 필수)
|
||||
|
||||
work — 우리 회사 실제 업무에서 발생한 데이터
|
||||
(TKSafety 연동, 직접 작성한 보고서, 내부 회의록 등)
|
||||
external — 외부에서 수집한 참고/학습 자료
|
||||
(뉴스, 법령 원문, 타사 사례, 학술 논문 등)
|
||||
|
||||
자동 판별 규칙:
|
||||
· sourceChannel = tksafety → dataOrigin = work (항상)
|
||||
· sourceChannel = law_monitor → dataOrigin = external (항상)
|
||||
· sourceChannel = devonagent → dataOrigin = external (항상)
|
||||
· sourceChannel = manual → dataOrigin = work (기본값, 수동 변경 가능)
|
||||
· sourceChannel = inbox_route → AI가 내용 기반으로 판별
|
||||
· sourceChannel = email → AI가 발신자/내용 기반으로 판별
|
||||
· sourceChannel = web_clip → dataOrigin = external (기본값)
|
||||
```
|
||||
|
||||
### 8.4 Smart Rule 적용
|
||||
|
||||
```
|
||||
DEVONthink Smart Rule: "소스 채널 누락 검출"
|
||||
|
||||
조건: custom metadata "sourceChannel" is empty
|
||||
AND database is "04_Industrial Safety"
|
||||
AND NOT in group "00_Inbox"
|
||||
동작:
|
||||
1. @상태/미분류출처 태그 추가
|
||||
2. 00_Inbox으로 이동 (출처 확인 후 재분류)
|
||||
|
||||
→ 어떤 경로로든 출처 없이 들어온 문서는 자동 포착
|
||||
→ 주간 리뷰에서 정리 (수동 입력 자료 대부분 여기 해당)
|
||||
```
|
||||
|
||||
### 8.5 활용 시나리오
|
||||
|
||||
```
|
||||
검색/필터 예시:
|
||||
|
||||
"올해 우리 회사가 실시한 위험성평가만 보기"
|
||||
→ 50_Practice/Risk_Assessment/ + dataOrigin = work
|
||||
|
||||
"외부 위험성평가 사례/참고자료"
|
||||
→ 50_Practice/Risk_Assessment/ + dataOrigin = external
|
||||
|
||||
"TKSafety에서 자동 수집된 문서 전체"
|
||||
→ sourceChannel = tksafety
|
||||
|
||||
"직접 스크랩한 자료 중 미정리 건"
|
||||
→ sourceChannel = web_clip + @상태/미분류출처
|
||||
|
||||
Smart Group으로 상시 모니터링:
|
||||
· "출처 미기입 문서" → sourceChannel is empty
|
||||
· "이번 주 업무 문서" → dataOrigin = work + 최근 7일
|
||||
· "외부 수집 미읽음" → dataOrigin = external + unread
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. TKSafety 시스템 연동 (설정 대기)
|
||||
|
||||
> **현재 상태: 설계 완료, 구현 대기**
|
||||
> API 엔드포인트 명세와 연동 구조만 확정해두고, 실제 활성화는 PKM 기본 체계가 안정된 후 진행합니다.
|
||||
> TKSafety는 자체 개발 시스템이므로 필요 시점에 API를 추가하면 됩니다.
|
||||
|
||||
### 9.1 시스템 정보
|
||||
|
||||
```
|
||||
· URL: tksafety.technicalkorea.net (Cloudflare Tunnel)
|
||||
· 호스팅: Synology DS1525+ Docker
|
||||
· 내부 접근: Tailscale VPN
|
||||
· 개발/수정: 직접 가능
|
||||
· sourceChannel 값: tksafety
|
||||
· dataOrigin 값: work (항상)
|
||||
```
|
||||
|
||||
### 9.2 연동 아키텍처 (예정)
|
||||
|
||||
```
|
||||
┌──────────────────────┐ ┌────────────────────────────┐
|
||||
│ TKSafety │ │ Mac mini (PKM 허브) │
|
||||
│ (Synology Docker) │ │ │
|
||||
│ │ API │ tksafety_sync.py │
|
||||
│ /api/v1/ │◄──────►│ (launchd 스케줄) │
|
||||
│ risk-assessments │ Tailscale│ │
|
||||
│ patrol-inspections │ │ ┌─────────────────────┐ │
|
||||
│ corrective-actions │ │ │ 데이터 가공 │ │
|
||||
│ incidents │ │ │ · JSON → PDF/MD 변환 │ │
|
||||
│ education-records │ │ │ · sourceChannel 설정 │ │
|
||||
│ meeting-minutes │ │ │ · dataOrigin = work │ │
|
||||
│ │ │ └──────────┬──────────┘ │
|
||||
└──────────────────────┘ │ ▼ │
|
||||
│ DEVONthink 자동 임포트 │
|
||||
│ → 04_Industrial Safety/ │
|
||||
│ 하위 그룹 자동 라우팅 │
|
||||
│ │
|
||||
│ ChromaDB 벡터 인덱싱 │
|
||||
│ → RAG 검색 가능 │
|
||||
└────────────────────────────┘
|
||||
```
|
||||
|
||||
### 9.3 API 엔드포인트 명세 (TKSafety에 추가 예정)
|
||||
|
||||
```
|
||||
GET /api/v1/risk-assessments
|
||||
?since=2026-03-01&status=completed → 위험성평가 결과 목록
|
||||
GET /api/v1/risk-assessments/{id}/report → 상세 (PDF/JSON)
|
||||
|
||||
GET /api/v1/patrol-inspections
|
||||
?since=2026-03-01 → 순회점검 결과 목록
|
||||
GET /api/v1/patrol-inspections/{id}/report → 상세 + 사진
|
||||
|
||||
GET /api/v1/corrective-actions
|
||||
?since=2026-03-01&status=open|completed|overdue → 시정조치 내역
|
||||
|
||||
GET /api/v1/incidents?since=2026-03-01 → 사고/아차사고 보고서
|
||||
|
||||
GET /api/v1/education-records?since=2026-03-01 → 안전교육 기록
|
||||
|
||||
GET /api/v1/meetings?type=safety-committee&since=2026-03-01 → 회의록
|
||||
|
||||
GET /api/v1/sync-status → 마지막 동기화 시점, 대기 건수
|
||||
```
|
||||
|
||||
### 9.4 라우팅 매핑 (활성화 시 적용)
|
||||
|
||||
```
|
||||
TKSafety 데이터 → DEVONthink 그룹 → 파일 형식
|
||||
────────────────────────────────────────────────────────────────
|
||||
risk-assessments → 50_Practice/Risk_Assessment/ → PDF
|
||||
patrol-inspections → 50_Practice/Patrol_Inspection/ → MD + 사진
|
||||
corrective-actions → 70_Safety_Manager/Improvement/ → MD
|
||||
incidents → 40_Cases/Domestic/ → PDF
|
||||
education-records → 50_Practice/Education/ → MD
|
||||
meetings (safety-comm) → 70_Safety_Manager/Meeting/ → MD
|
||||
|
||||
파일명 규칙:
|
||||
RA_2026-03-24_[작업명]_[위험등급].pdf
|
||||
PI_2026-03-24_[구역명].md
|
||||
CA_2026-03-24_[조치내용]_[상태].md
|
||||
INC_2026-03-24_[사고유형]_[심각도].pdf
|
||||
```
|
||||
|
||||
### 9.5 동기화 스케줄 (활성화 시 적용)
|
||||
|
||||
```
|
||||
· 위험성평가, 순회점검 → 매일 07:00
|
||||
· 시정조치 → 매일 07:00 + 18:00
|
||||
· 사고/아차사고 → 1시간마다 (긴급성)
|
||||
· 교육기록, 회의록 → 주 1회 (월요일 07:00)
|
||||
· overdue 시정조치 → OmniFocus 작업 자동 생성
|
||||
```
|
||||
|
||||
### 9.6 활성화 단계
|
||||
|
||||
```
|
||||
지금 할 것:
|
||||
✓ API 명세 확정 (이 문서)
|
||||
✓ sourceChannel/dataOrigin 체계 설계
|
||||
○ TKSafety에 /api/v1/ 엔드포인트 뼈대만 추가 (빈 응답 OK)
|
||||
|
||||
PKM 안정화 후:
|
||||
Phase 1: API 실제 데이터 응답 구현
|
||||
Phase 2: tksafety_sync.py 개발 + DEVONthink 임포트
|
||||
Phase 3: 시정조치 → OmniFocus 연동
|
||||
Phase 4: 양방향 확장 (DEVONthink → TKSafety 상태 업데이트)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. 산업안전 Daily Digest 기여 항목
|
||||
|
||||
Daily Digest는 전체 PKM 차원에서 운영되지만 (메인 아키텍처 참조),
|
||||
이 DB는 특히 다음 항목을 다이제스트에 공급합니다.
|
||||
|
||||
```
|
||||
04_Industrial Safety → Daily Digest 공급 항목:
|
||||
|
||||
■ 문서 변동
|
||||
· 오늘 추가된 문서 수 (sourceChannel별 구분)
|
||||
예: "산업안전 +5 (뉴스3, 법령1, 업무1)"
|
||||
· 분류 실패 → 00_Inbox 잔류 건수
|
||||
|
||||
■ 법령 변경 (law_monitor 연동)
|
||||
· 한국 법령 제·개정 감지 → ⚠ 마크로 강조
|
||||
· 해외 법령 변경 → 참고 표시
|
||||
· OmniFocus 액션: "법령 변경 검토: [법령명]" 자동 생성
|
||||
|
||||
■ 뉴스/동향 (DEVONagent 연동)
|
||||
· 오늘 수집된 안전 뉴스 건수 (국내/해외 구분)
|
||||
· 상위 3건 자동 요약 (Ollama 35B)
|
||||
|
||||
■ 업무 데이터 (TKSafety 연동, 활성화 시)
|
||||
· 위험성평가/순회점검 신규 건수
|
||||
· 시정조치 overdue → ⚠ OmniFocus 긴급 액션
|
||||
|
||||
■ OmniFocus 액션 자동 생성 조건 (이 DB 관련):
|
||||
· 법령 변경 감지 → "법령 변경 검토: [법령명]"
|
||||
· 시정조치 기한초과 → "시정조치 기한초과: [내용]" (긴급)
|
||||
· 안전 뉴스 중대 키워드 → "뉴스 확인: [제목]"
|
||||
(키워드: 중대재해, 사망, 작업중지, 과태료)
|
||||
· Inbox 미처리 5건 이상 → "산업안전 Inbox 정리 필요"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 11. 향후 확장 계획
|
||||
|
||||
- 나머지 도메인 DB(03_Engineering, 05_Programming 등)도 동일한 넘버링 패턴으로 그룹 구조 설계 예정
|
||||
- 각 DB별 DEVONagent 검색 세트 추가
|
||||
- DB 간 크로스 레퍼런스 (예: 산업안전 + 공학 문서 연결)
|
||||
- TKSafety 양방향 연동 확장 (Section 9.6 참조)
|
||||
- sourceChannel/dataOrigin 체계를 다른 도메인 DB에도 확장 적용
|
||||
6
requirements.txt
Normal file
6
requirements.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
chromadb>=0.4.0
|
||||
requests>=2.31.0
|
||||
python-dotenv>=1.0.0
|
||||
schedule>=1.2.0
|
||||
markdown>=3.5.0
|
||||
anthropic>=0.40.0
|
||||
Reference in New Issue
Block a user