# CHANGELOG

## [2026-05-07]

### 수행 내용
- DMAESentinel-Kor (디엠에이이센티넬코어) MVP 단일 디렉토리 빌드.
- `main.py` 구현: argparse 기반 5개 서브커맨드(`ingest` / `analyze` / `digest` / `psur` / `alert`).
- `data/` 하위에 합성(synthetic) 데이터 9종 생성:
  - FAERS / EudraVigilance / VigiBase / KAERS CSV
  - 사이트 cohort CSV
  - PubMed case report JSON, 학회 abstract JSON
  - MedDRA Korean / KFDA 약물 코드 매핑 CSV
- SQLite ETL 파이프라인 (`dmae_sentinel.db`).
- Disproportionality 통계 4종(ROR / PRR / IC(BCPNN) / EBGM) + 95% CI + Haldane–Anscombe 보정.
- cross-source 우선순위(시그널이 ≥2 source에서 양성이면 priority queue 상단).
- 한국어 weekly safety digest, MFDS PSUR Form 1/2/3 한국어 자동 초안.
- cross-discipline alert (NAION→안과, suicidal ideation→정신과, sarcopenia→재활의학 등).
- README.md / QA.md 작성.

### 주요 결정 사항
- **stdlib only**: 사용자 제약(전역 패키지 설치 금지, pandas/numpy "정도만" 허용)을 보수적으로 해석해 stdlib(`csv`, `json`, `sqlite3`, `math`, `argparse`, `random`)만 사용. portability 극대화.
- **SQLite 채택**: 다중 source ETL과 분모 산출, cross-source 양성 횟수 카운트에 SQL이 가장 직관적. in-memory dict로도 가능하나 재실행성/확장성에서 SQLite가 우월.
- **EBGM은 IC 기반 근사(2^IC)**: 정식 MGPS Empirical Bayes shrinkage는 외부 패키지·튜닝 필요, MVP 범위 외. README §5/§9에 한계 명시.
- **PDF 미생성, 한국어 텍스트 리포트로 대체**: 외부 패키지 금지 제약. 함수 분리해 후속 reportlab 추가가 쉽도록 설계.
- **prior signal weight 테이블**: 합성 데이터가 ROR signal로 의미 있게 검출되도록 약물–AE 쌍별 weight를 코드화 (canagliflozin↔하지절단=5.0, finerenone↔hyperkalemia=5.0 등). 실제 분포와 무관, 데모용임을 README/QA에 명시.
- **mfds 디스클레이머 4중 명시**: README + analyze/digest/psur/alert 런타임 출력 4개소에 모두 명시(연구용·임상 단독 근거 금지).

### 변경된 파일
- `main.py` — 메인 CLI + ETL + disproportionality + 한국어 출력 모두 단일 파일.
- `README.md` — 사용법, 알고리즘, 데이터 출처, 디스클레이머, 한계.
- `QA.md` — 자동 검수 결과 / 재현성·의도 부합 체크.
- `data/faers_synthetic.csv` `data/eudra_synthetic.csv` `data/vigibase_synthetic.csv` — 자발보고 합성.
- `data/kaers_synthetic.csv` — 한국어 약물명·KFDA 코드.
- `data/site_cohort_synthetic.csv` — BMI/연령/한국 외삽 점수.
- `data/pubmed_case_reports_synthetic.json` — case report metadata.
- `data/abstract_synthetic.json` — 학회 abstract.
- `data/meddra_korean_terms.csv` — AE 한국어 매핑.
- `data/kfda_drug_codes.csv` — 약물 한국어 매핑.
- `dmae_sentinel.db` — `ingest` 실행 시 자동 생성.

### 재현 방법
```bash
cd "/Users/sangjoonpark/claude daily project/2026 metabolic daily idea/projects/2026-05-07-1-dm-ae-sentinel-kor"

# 0) 구문 / 도움말
python3 -c "import ast; ast.parse(open('main.py').read())"
python3 main.py --help

# 1) 합성 데이터 적재 + DB 빌드
python3 main.py ingest

# 2) Disproportionality 산출
python3 main.py analyze --top 20
python3 main.py analyze --drug semaglutide
python3 main.py analyze --threshold 3.0

# 3) 한국어 weekly safety digest
python3 main.py digest --korean

# 4) MFDS PSUR Form 1/2/3 자동 초안
python3 main.py psur --drug empagliflozin
python3 main.py psur --drug semaglutide
python3 main.py psur --drug finerenone

# 5) cross-source / cross-discipline alert
python3 main.py alert
python3 main.py alert --cross-discipline
```

처음부터 다시 시작하려면 `dmae_sentinel.db`와 `data/` 폴더를 지운 뒤 `python3 main.py ingest`부터 재실행하면 된다.
