# ConfAbstract2Pub-Kor / 학회초록정식출판추적코어

> ADA/EASD 당뇨 학회 초록이 **정식 논문으로 출판되는지**를 워치리스트 기반으로
> 주기적으로 자동 추적·큐레이션하는 **오프라인 우선** CLI + 정적 대시보드 MVP.

- **도메인:** DM (당뇨)
- **카테고리:** 연구 알림 (학회초록 → 정식출판 추적 큐레이션)
- **기준일:** 2026-06-06 (재현성 위해 코드에 고정)

## ⚠️ 의학적 디스클레이머
본 도구는 **참고용·연구용**입니다. **임상 판단을 대체하지 않습니다.**
포함된 모든 초록·논문·저널·PMID·전환율은 **시연용 합성(가짜) 데이터**이며 실제가 아닙니다.
실제 연구 메타데이터는 Europe PMC / PubMed 등 1차 출처에서 직접 검증해야 합니다.

---

## 한 줄 요약
내가 관심 둔 ADA/EASD 당뇨 초록을 워치리스트에 넣으면, 정식 출판 전환 여부·소요기간·
주요결과(엔드포인트/효과방향) 변경을 주기적으로 자동 추적해 알려주는 오프라인 우선 큐레이터.

## 핵심 기능 5가지
1. **초록 인제스트** — ADA/EASD 당뇨 초록(연도·세션·키워드 GLP-1/SGLT2i/CGM/DKD)을 로컬
   합성 시드(`data/abstracts.json`)에서 적재. 인메모리 SQLite로 인제스트 시연.
   실제 Europe PMC REST 경로는 `ingest --online` 뒤에 **비활성 스텁**으로만 존재(네트워크 호출 없음).
2. **출판 매칭** — 초록 제목·연도를 정식 article 후보와 fuzzy match(핵심 명사구 토큰 **자카드** +
   `difflib` 시퀀스 유사도 + 연도 윈도우). 신뢰도 점수 + **출판 / 미출판 / 모호** 3분류.
   (`rapidfuzz` 설치 시 자동 보강, 없으면 표준 `difflib`로 동작.)
3. **전환 지표** — abstract→publication **소요 개월수**, 학회연도별 **누적 전환율 곡선**,
   미출판 **≥24개월 = publication-bias 의심** flag.
4. **결과 전환 점검(보조)** — 초록 primary endpoint·효과 방향 vs 매칭 논문을 나란히 표시
   (outcome switching / spin 대조).
5. **알림 다이제스트** — 워치리스트 상태 변동(신규 출판/장기 미출판/모호)을 **주간 Markdown**으로 출력.

## 기술 스택 / 제약
- **Python 3 표준 라이브러리만** (argparse, json, csv, sqlite3, difflib, statistics, datetime). 추가 설치 불필요.
- **SQLite**(인메모리) + **정적 HTML 대시보드**(vanilla JS, CDN 0, 외부 fetch 0 — 데이터 인라인).
- **외부 네트워크/API 호출 없음.** 합성 시드로 전 기능 시연.

---

## 실행법
```bash
cd "<이 폴더>"
python3 main.py --help            # 전체 서브커맨드

python3 main.py list              # 워치리스트/상태 목록
python3 main.py list --watched-only --keyword GLP-1
python3 main.py stats             # 전환 지표 + 연도별 전환율 곡선
python3 main.py unpublished-flag  # ≥24개월 미출판 publication-bias 플래그
python3 main.py matrix            # 초록 vs 논문 엔드포인트/효과방향 대조
python3 main.py match ABS-015     # 단일 초록 매칭 상세
python3 main.py digest            # 주간 Markdown 다이제스트 (표준출력)
python3 main.py digest --out weekly.md
python3 main.py export-csv        # data/watchlist_status.csv 생성
python3 main.py ingest --online   # [비활성 스텁] 네트워크 호출 없음을 안내만
```

대시보드: `index.html`을 브라우저로 열기(더블클릭). 데이터가 파일에 인라인되어 있어
네트워크 없이 동작. KPI 카드 / 연도별 전환율 막대 / 정렬·필터 가능한 워치리스트 표 제공.

## 데이터
- `data/abstracts.json` — 합성 학회 초록 23건 (ADA/EASD, 2017–2023, GLP-1/SGLT2i/CGM/DKD 혼합).
- `data/publications.json` — 매칭 결과 23건 (출판 16 / 미출판 5 / 모호 2). 일부는 ≥24개월 미출판으로 flag.
- `data/watchlist_status.csv` — `export-csv` 실행 시 생성되는 파생 산출물.

## 검수 체크리스트
- [x] `python3 -c "import ast; ast.parse(open('main.py').read())"` 구문 통과
- [x] `python3 main.py --help` 및 주요 서브커맨드 실행 출력 확인
- [x] `data/*.json` 시드가 main.py에서 정상 로드 (abstracts 23 / pubs 23)
- [x] `index.html` 존재 + `<html>` 태그 + 인라인 ROWS 23건 JSON 파싱
- [x] 외부 import 없음(표준 라이브러리만), 네트워크 호출 없음
- [x] 의학적 디스클레이머 README·CLI·대시보드에 모두 포함

## 출처 / 설계 근거 (방법론만 참조, 데이터는 합성)
- Europe PMC REST / PubMed E-utilities — 실제 운영 시의 인제스트·매칭 대상(본 MVP에서는 미호출).
- abstract-to-publication 전환율·publication bias·outcome switching은 메타리서치 문헌의 표준 개념.
- 24개월 미출판 임계는 학회 초록의 정식 출판 지연 분포를 단순화한 시연용 휴리스틱.

*면책 재확인: 임상 의사결정에 본 합성 출력을 사용하지 마십시오.*
