# ObesityPharmaWatch — 비만약물 학회초록·트라이얼 분기 라운드업

> 본 도구는 연구·교육 목적의 참고용이며, 비만약물 처방·임상 의사결정 근거로 사용할 수 없습니다.
> 모든 학회 abstract / NCT 번호 / 수치는 **합성된 mock 데이터**이며, 실제 환자·기업 데이터를 인용하지 않았습니다.

## 목적

5개 주요 학회(ADA / EASD / Obesity Week / ENDO / ECO)의 비만약물 abstract를 자동 수집·분류하고
ClinicalTrials.gov 레코드와 매핑하여, 분기별 단일 HTML 라운드업 리포트를 생성한다.

## 도메인 / 카테고리

- **도메인**: Obesity (비만약물 파이프라인 모니터링)
- **카테고리**: 연구 알림 (conference abstract 큐레이션)

## 핵심 기능 (4개)

1. 5개 학회 abstract DB 어댑터(스텁 + mock data) → 비만약물 abstract 추출
2. 약물명 vocabulary(50+ active obesity 후보 약물 큐레이션) + target receptor(GLP-1/GIP/glucagon/amylin/MC4R/leptin 등) + sponsor 자동 태깅
3. ClinicalTrials.gov v2 mock 매핑으로 동일 약물의 phase·status·primary completion 매핑 → "abstract → 어느 trial 결과인가" 자동 연결
4. 분기 라운드업: 약물 × phase × outcome(체중 감소%, 부작용, GI tolerability) 표 + 파이프라인 phase 전환 visualization(SVG inline) + 단일 HTML 리포트

## 실행법

```bash
# 도움말
python3 main.py --help

# 2026-Q2 분기 라운드업 생성
python3 main.py --offline --quarter 2026-Q2 --output output/report.html

# 모든 분기 통합
python3 main.py --offline --output output/all.html

# 큐레이션된 약물 vocabulary 출력
python3 main.py --list-drugs
```

생성된 `output/report.html`을 브라우저로 열어 확인한다.

## 입력 데이터

`data/` 폴더 안의 6개 mock JSON 파일:

- `ada_2026_mock.json` — ADA 2026 abstract (synthetic)
- `easd_2026_mock.json` — EASD 2026 abstract (synthetic)
- `obesity_week_2026_mock.json` — Obesity Week 2026 abstract (synthetic)
- `endo_2026_mock.json` — ENDO 2026 abstract (synthetic)
- `eco_2026_mock.json` — ECO 2026 abstract (synthetic)
- `ctg_obesity_mock.json` — ClinicalTrials.gov mock trial records (synthetic NCT IDs)

## 디렉터리 구조

```
2026-04-26-2-obesity-pharma-watch/
├── README.md
├── main.py                 # CLI 진입점
├── opwatch/
│   ├── __init__.py
│   ├── adapters.py         # 5개 학회 mock loader
│   ├── vocab.py            # 50+ obesity 약물 vocabulary
│   ├── classifier.py       # abstract → drug/target/sponsor/phase 태깅
│   ├── linker.py           # abstract ↔ CTG trial 매핑
│   ├── svgcharts.py        # inline SVG 차트 생성기
│   └── report.py           # 분기 HTML 리포트 빌더
├── data/                   # 6개 mock JSON
├── output/                 # report.html 출력
└── QA.md                   # 검수 결과
```

## 제약 (필수 준수)

- **외부 네트워크 호출 절대 금지**. 모든 데이터는 합성. 실제 학회 abstract / 회사 / 환자 데이터 인용 금지.
- 외부 유료 API 금지. CDN 사용도 하지 않으며 차트는 모두 inline SVG로 직접 생성한다 (Chart.js / Plotly 미사용).
- 표준 라이브러리만으로 동작 (json / csv / datetime / pathlib / argparse / html / re / collections). selenium / pdfplumber / Plotly / Streamlit / WeasyPrint는 future enhancement.
- 24시간 범위 확장 금지.
- 의학적 안전성 디스클레이머: README와 출력 리포트 모두에 명시.

## 검수 체크리스트

`QA.md` 참조. 아래 7단계를 모두 실행한다:

1. 모든 .py 파일 AST 파싱 통과
2. `python3 main.py --help` 정상 출력
3. `python3 main.py --offline --quarter 2026-Q2 --output output/report.html` exit code 0, 파일 생성
4. 출력 HTML에 `<html>`, `<body>`, `<svg>`, `<table>` 모두 포함
5. 모든 mock data JSON 파일 로드 성공
6. classifier가 vocab의 약물명을 mock abstract에서 정확히 매칭
7. 디스클레이머가 README와 출력 리포트 모두에 포함

## 출처

본 프로젝트의 약물명 목록은 공개적으로 보고된 비만 파이프라인 후보를 참조하여 큐레이션한 vocabulary일 뿐,
임상 권고나 처방 근거가 아닙니다. 모든 abstract / NCT / 수치 데이터는 합성된 mock 데이터입니다.

## Future enhancements (구현 안 됨)

- 실제 학회 abstract API 연동 (selenium / pdfplumber / requests)
- ClinicalTrials.gov v2 REST 라이브 호출
- Plotly / Streamlit 인터랙티브 대시보드
- WeasyPrint PDF 출력
- 이메일 / Slack 분기 알림 송신

## 디스클레이머

본 도구는 연구·교육 목적의 참고용이며, 비만약물 처방·임상 의사결정 근거로 사용할 수 없습니다.
