#!/bin/sh
# Claude Code Skill 설치 스크립트
# 생성: 2026-08-13 · Skill 1개 · 파일 1개
#
#   ./install-skills.sh            ~/.claude/skills/ 에 설치 (모든 프로젝트에서 사용)
#   ./install-skills.sh ./myrepo   ./myrepo/.claude/skills/ 에 설치 (그 저장소 전용)
set -e

DEST="${1:+$1/.claude/skills}"
DEST="${DEST:-$HOME/.claude/skills}"
mkdir -p "$DEST"
echo "설치 위치: $DEST"


mkdir -p "$DEST/institution-resolve"
cat > "$DEST/institution-resolve/SKILL.md" <<'SKILL_PAYLOAD_EOF'
---
name: institution-resolve
description: 자유 표기된 소속·기관 문자열을 정해진 기관 코드로 판정한다. "Univ Ulsan, Asan Med Ctr, Seoul" → AMC. 병원 마커를 상위기관보다 먼저 보는 판정 순서, 축약형 전개, 기관 마스터 JSON 관리, 한/영 라벨. TRIGGER - "기관명 통일", "소속 정규화", "affiliation", "병원명 매칭", "의뢰기관 표기가 제각각", 기관 단위로 집계해야 하는데 표기가 흩어져 있을 때.
---

# 기관명 판정

## 언제 쓰나

같은 기관이 수십 가지로 적혀 있어 **집계가 안 될 때.** 논문 소속만이 아니라 의뢰기관·검사기관·수탁기관 표기 통일에도 같은 구조를 쓴다.

```python
resolve("Univ Ulsan, Asan Med Ctr, Seoul, South Korea")  → "AMC"
```

## 정본 코드

```
~/Documents/혜연/BTC_KOL_PoC/
  institution_resolver.py   337줄
  institutions.json         기관 마스터 137개
설계 문서: docs/02-design/features/institution-name-unify.design.md
```

`--selfcheck` 내장. 규칙을 고치면 먼저 돌린다.

## 핵심 — 판정 순서가 전부다

> 기존 `korean_institution()` 은 C3(Clarivate 정규화 기관명)를 먼저 써서 **서울아산병원 3,028건이 'University of Ulsan' 으로 뭉쳤다.** 여기서는 **병원 마커를 C3보다 먼저** 본다.

이게 이 스킬의 존재 이유다. 외부 정규화(Clarivate C3, 기관 DB 등)는 대개 **대학·법인 단위**로 묶는다. 의학 연구에서 의미 있는 단위는 **병원**이다. 울산대 의대 서울아산병원을 '울산대'로 묶으면 기관 분석이 통째로 무의미해진다.

```
① 주소 문자열에서 병원 마커 탐지 (Asan Med Ctr, Samsung Med Ctr …)
② 없으면 C3(외부 정규화명) 사용
③ 그래도 없으면 raw_label 로 원문 보존
```

**남이 정규화해준 값을 먼저 믿지 마라.** 그쪽이 쓰는 단위가 내가 원하는 단위와 다를 수 있다. 원문에서 내 단위를 먼저 찾고, 못 찾을 때만 외부 값으로 물러난다.

③이 중요하다. 판정 실패를 빈칸으로 두지 않고 **원문을 남긴다.** 나중에 마스터에 추가할 후보가 거기서 나온다.

## 구성

| 함수 | 역할 |
|---|---|
| `expand(s)` | 축약형 전개 (`Med Ctr` → `Medical Center`) |
| `core(aff)` | 주소에서 핵심 토큰만 남김 (도시·국가·우편번호 제거) |
| `_has_org_info(aff)` | 기관 정보가 있기는 한지 |
| `resolve(aff, c3)` | 메인 판정 → 코드 |
| `raw_label(aff)` | 판정 실패 시 원문 보존 |
| `label(code, lang)` · `parent_label(code, lang)` | 한/영 라벨, 상위기관 |

**코드와 라벨을 분리한다.** 내부는 `AMC` 같은 코드로 다루고 표시할 때만 라벨로 바꾼다. 한글·영문 보고서를 같은 데이터로 낼 수 있다.

`parent_label` 로 상위기관을 따로 둔다 — "서울아산병원"과 "울산대학교"를 둘 다 알아야 병원별·대학별 집계를 모두 낼 수 있다.

## 마스터는 사람이 관리한다

`institutions.json` 에 137개 기관이 있다. 새 기관이 나오면 **여기 추가하지 코드를 고치지 않는다.** 판정 로직과 기관 목록은 수명이 다르다.

## 함정

- **설계 문서를 남겨라.** 판정 순서를 왜 이렇게 정했는지는 코드만 봐서는 안 보인다. 정본은 `docs/02-design/features/` 에 설계서를 두고 파일 상단에서 가리킨다.
- 마커 탐지는 대소문자·구두점에 취약하다. `expand` → `core` 를 거친 뒤에 비교한다.
- 한 기관이 여러 이름을 갖는 경우(개명·통합)를 마스터에서 별칭으로 흡수한다.
- 집계 전에 **판정 실패 건수를 먼저 본다.** 실패율이 높으면 그 상태로 분석하면 안 된다.

## 연관 skill

`[[biblio-normalize]]`(같은 정리 단계), `[[paper-merge-provenance]]`, `[[biblio-analysis]]`
SKILL_PAYLOAD_EOF

echo ""
echo "완료 — Skill 1개를 설치했습니다."
echo "Claude Code를 다시 시작하면 인식됩니다."
