Skip to content

CHOEINGUY/Easy-Epidemiology

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

85 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ”¬ Easy Epidemiology

역학쑰사 데이터 뢄석 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜
보건 μ „λ¬Έκ°€λ₯Ό μœ„ν•œ 역학쑰사 뢄석 도ꡬ

CI Pipeline Vue 3 TypeScript Pinia Vuetify TailwindCSS


πŸ“– κ°œμš”

Easy EpidemiologyλŠ” 역학쑰사 업무λ₯Ό κ°„μ†Œν™”ν•˜κΈ° μœ„ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. 역학쑰사관과 보건 λ‹΄λ‹Ήμžμ—κ²Œ λ‹€μŒ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€:

  • 역학쑰사 데이터 μž…λ ₯ 및 관리
  • 톡계 뢄석 μˆ˜ν–‰ (ν™˜μž-λŒ€μ‘°κ΅°, μ½”ν˜ΈνŠΈ, 사둀계열 연ꡬ)
  • μœ ν–‰κ³‘μ„  및 μž„μƒμ¦μƒ 뢄포 μ‹œκ°ν™”
  • ν‘œμ€€ν™”λœ 쑰사 λ³΄κ³ μ„œ μžλ™ 생성 (HWPX ν˜•μ‹)

🎯 λŒ€μƒ μ‚¬μš©μž

  • 역학쑰사관
  • λ³΄κ±΄μ†Œ λ‹΄λ‹Ήμž
  • 감염병 연ꡬ원

✨ μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ…
πŸ“Š κ°€μƒμŠ€ν¬λ‘€ κ·Έλ¦¬λ“œ 수천 건의 λ ˆμ½”λ“œλ₯Ό 가상화 λ Œλ”λ§μœΌλ‘œ κ³ μ„±λŠ₯ μž…λ ₯
πŸ‘€ ν™˜μžνŠΉμ„± μ‚¬μš©μž μ •μ˜ ν™˜μž νŠΉμ„±λ³„ ν†΅κ³„ν‘œ 생성 및 μ‹œκ°ν™”
πŸ“ˆ μœ ν–‰κ³‘μ„  잠볡기 뢄석이 ν¬ν•¨λœ λŒ€ν™”ν˜• μœ ν–‰κ³‘μ„  μ‹œκ°ν™”
🩺 μž„μƒμ¦μƒ λ°œλ³‘λ₯  뢄석 및 증상 λΉˆλ„ 차트
πŸ”¬ ν™˜μž-λŒ€μ‘°κ΅° 연ꡬ ꡐ차비(OR) 계산, 95% 신뒰ꡬ간, 카이제곱 κ²€μ •
πŸ“‹ μ½”ν˜ΈνŠΈ 연ꡬ μƒλŒ€μœ„ν—˜λ„(RR) 계산, κΈ°μ—¬μœ„ν—˜λ„ 뢄석
πŸ“ 사둀계열 연ꡬ μœ ν–‰μ‘°μ‚¬λ₯Ό μœ„ν•œ κ°œλ³„ λ…ΈμΆœ μ‹œκ°„ 뢄석
πŸ“ λ³΄κ³ μ„œ μžλ™μƒμ„± HWPX(ν•œκΈ€) ν˜•μ‹ λ³΄κ³ μ„œ μžλ™ 생성
🌐 λ‹€κ΅­μ–΄ 지원 vue-i18n을 ν†΅ν•œ ν•œκ΅­μ–΄/μ˜μ–΄ 지원
πŸ”“ 인증 μ—†μŒ λͺ¨λ“œ 폐쇄망(λ³΄κ±΄μ†Œ λ“±) 및 μ˜€ν”„λΌμΈ 파일 ν™˜κ²½ 지원 (file://)

πŸ› οΈ 기술 μŠ€νƒ

ν”„λ‘ νŠΈμ—”λ“œ

  • ν”„λ ˆμž„μ›Œν¬: Vue 3 (Composition API + <script setup>)
  • μ–Έμ–΄: TypeScript 5.9
  • μƒνƒœκ΄€λ¦¬: Pinia 3.0
  • λΌμš°νŒ…: Vue Router 4
  • UI ν”„λ ˆμž„μ›Œν¬: Vuetify 3 + TailwindCSS 3.4
  • 차트: ECharts
  • λ‹€κ΅­μ–΄: vue-i18n 9

데이터 처리

  • 톡계: jstat (톡계 계산)
  • μ—‘μ…€: xlsx (κ°€μ Έμ˜€κΈ°/내보내기)
  • λ¬Έμ„œ: JSZip + hwp.js (HWPX λ³΄κ³ μ„œ 생성)
  • 데이터 κ·Έλ¦¬λ“œ: vue-virtual-scroller

개발 ν™˜κ²½

  • λΉŒλ“œ 도ꡬ: Vue CLI 5
  • ν…ŒμŠ€νŠΈ: Jest + Vue Test Utils + Playwright
  • λ¦°νŒ…: ESLint + Prettier
  • CSS: PostCSS + Autoprefixer

λ°±μ—”λ“œ (선택사항)

  • 인증 API: Cloudflare Workers (TypeScript)
  • λ°μ΄ν„°λ² μ΄μŠ€: Cloudflare KV (인증 데이터 μ €μž₯)

πŸš€ μ‹œμž‘ν•˜κΈ°

ν•„μˆ˜ 쑰건

  • Node.js 18+
  • npm 9+

μ„€μΉ˜

# μ €μž₯μ†Œ 볡제
git clone https://github.com/CHOEINGUY/Easy-Epidemiology.git
cd Easy-Epidemiology

# μ˜μ‘΄μ„± μ„€μΉ˜ (Material Icons μžλ™ λ‹€μš΄λ‘œλ“œ)
npm install

개발 μ„œλ²„

# 개발 μ„œλ²„ μ‹œμž‘ (인증 λͺ¨λ“œ)
npm run serve

# 개발 μ„œλ²„ μ‹œμž‘ (인증 μ—†μŒ - 곡개 μ ‘κ·Ό)
npm run serve:noauth

앱은 http://localhost:8080μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.


πŸ“¦ λΉŒλ“œ λͺ¨λ“œ

λͺ…λ Ήμ–΄ λͺ¨λ“œ μ„€λͺ…
npm run build ν”„λ‘œλ•μ…˜ (인증) Cloudflare Workers 인증 ν•„μš”
npm run build:noauth 인증 μ—†μŒ 폐쇄망(λ³΄κ±΄μ†Œ λ“±) 및 μ˜€ν”„λΌμΈ 파일 ν™˜κ²½ 지원 (file://)

배포용 λΉŒλ“œ

# Cloudflare Pages (인증 ν•„μš”)
npm run build:auth

# 정적 ν˜ΈμŠ€νŒ… (인증 μ—†μŒ)
npm run build:noauth

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

webpage_office/
β”œβ”€β”€ public/                     # 정적 μžμ›
β”‚   β”œβ”€β”€ fonts/                  # Pretendard, Material Icons
β”‚   β”œβ”€β”€ demo/                   # μƒ˜ν”Œ 데이터 파일
β”‚   └── report_template*.zip    # HWPX λ³΄κ³ μ„œ ν…œν”Œλ¦Ώ
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ auth/                   # 인증 (AuthManager, UserManager)
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ AdminPanel/         # κ΄€λ¦¬μž λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”œβ”€β”€ AuthScreen/         # 둜그인/νšŒμ›κ°€μž… UI
β”‚   β”‚   β”œβ”€β”€ CaseControl/        # ν™˜μž-λŒ€μ‘°κ΅° 뢄석
β”‚   β”‚   β”œβ”€β”€ CaseSeries/         # 사둀계열 뢄석
β”‚   β”‚   β”œβ”€β”€ ClinicalSymptoms/   # μž„μƒμ¦μƒ 뢄석
β”‚   β”‚   β”œβ”€β”€ CohortStudy/        # μ½”ν˜ΈνŠΈ 연ꡬ 뢄석
β”‚   β”‚   β”œβ”€β”€ DataInputVirtualScroll/  # 메인 데이터 κ·Έλ¦¬λ“œ (53개 파일)
β”‚   β”‚   β”œβ”€β”€ EpidemicCurve/      # μœ ν–‰κ³‘μ„  차트
β”‚   β”‚   β”œβ”€β”€ PatientCharacteristics/  # 인ꡬ톡계
β”‚   β”‚   β”œβ”€β”€ ReportWriter/       # HWPX λ³΄κ³ μ„œ 생성기
β”‚   β”‚   └── UserManual/         # μ‚¬μš©μž κ°€μ΄λ“œ
β”‚   β”œβ”€β”€ i18n/                   # λ²ˆμ—­ (ko, en)
β”‚   β”œβ”€β”€ stores/                 # Pinia μŠ€ν† μ–΄
β”‚   β”œβ”€β”€ types/                  # TypeScript μ •μ˜
β”‚   β”œβ”€β”€ utils/                  # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚   └── validation/             # 데이터 검증 둜직
β”œβ”€β”€ tests/                      # Jest λ‹¨μœ„ ν…ŒμŠ€νŠΈ
β”œβ”€β”€ worker/                     # Cloudflare Workers (인증 API)
└── e2e/                        # Playwright E2E ν…ŒμŠ€νŠΈ

πŸ§ͺ ν…ŒμŠ€νŠΈ

# λͺ¨λ“  λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm test

# 컀버리지와 ν•¨κ»˜ ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm test -- --coverage

# νŠΉμ • ν…ŒμŠ€νŠΈ 파일 μ‹€ν–‰
npm test -- --testPathPattern="gridStore"

ν˜„μž¬ ν…ŒμŠ€νŠΈ 컀버리지

μ˜μ—­ μƒνƒœ
μŠ€ν† μ–΄ (dataLogic, gridStore) βœ… μ™„λ£Œ
검증 둜직 βœ… μ™„λ£Œ
컴포저블 (useEpidemicStats) βœ… μ™„λ£Œ
μ»΄ν¬λ„ŒνŠΈ βœ… μ™„λ£Œ (E2E 톡해)
E2E μ‹œλ‚˜λ¦¬μ˜€ βœ… μ™„λ£Œ

πŸ“„ μ‚¬μš© κ°€λŠ₯ν•œ 슀크립트

슀크립트 μ„€λͺ…
npm run serve 개발 μ„œλ²„ μ‹œμž‘ (인증 λͺ¨λ“œ)
npm run serve:noauth 개발 μ„œλ²„ μ‹œμž‘ (인증 μ—†μŒ)
npm run build ν”„λ‘œλ•μ…˜ λΉŒλ“œ
npm run lint ESLint μ‹€ν–‰
npm test Jest ν…ŒμŠ€νŠΈ μ‹€ν–‰
npm run download-icons μ˜€ν”„λΌμΈμš© Material Icons λ‹€μš΄λ‘œλ“œ
npm run embed-templates λ³΄κ³ μ„œ ν…œν”Œλ¦Ώ Base64 μž„λ² λ“œ

🌐 λ‹€κ΅­μ–΄ 지원

μ•±μ—μ„œ μ§€μ›ν•˜λŠ” μ–Έμ–΄:

  • πŸ‡°πŸ‡· ν•œκ΅­μ–΄ - κΈ°λ³Έ
  • πŸ‡ΊπŸ‡Έ μ˜μ–΄

UI μ–Έμ–΄ μ „ν™˜ λ²„νŠΌμœΌλ‘œ λ³€κ²½ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ²ˆμ—­ 파일 μœ„μΉ˜: src/i18n/locales/


πŸ” 인증 λͺ¨λ“œ

인증 λͺ¨λ“œ (κΈ°λ³Έ)

  • Cloudflare Workers λ°±μ—”λ“œ ν•„μš”
  • κ΄€λ¦¬μž 승인 ν›„ νšŒμ›κ°€μž…
  • μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (admin, support, user)

인증 μ—†μŒ λͺ¨λ“œ (폐쇄망/μ˜€ν”„λΌμΈμš©)

  • λ³΄κ±΄μ†Œ λ“± 폐쇄망 ν™˜κ²½μ„ μœ„ν•œ μ˜€ν”„λΌμΈ λΉŒλ“œ
  • file:// ν”„λ‘œν† μ½œ λ˜λŠ” 둜컬 ν™˜κ²½μ—μ„œ 인증 없이 μ¦‰μ‹œ μ‹€ν–‰
  • μ™ΈλΆ€ 인터넷 μ—°κ²° λΆˆν•„μš”

πŸ“Š 톡계 뢄석 방법

ν™˜μž-λŒ€μ‘°κ΅° 연ꡬ

  • ꡐ차비(OR) 95% 신뒰ꡬ간
  • 카이제곱 κ²€μ • 및 p-value
  • μ†Œν‘œλ³Έμ„ μœ„ν•œ Fisher μ •ν™• κ²€μ •

μ½”ν˜ΈνŠΈ 연ꡬ

  • μƒλŒ€μœ„ν—˜λ„(RR) 95% 신뒰ꡬ간
  • λ°œλ³‘λ₯  비ꡐ
  • κΈ°μ—¬μœ„ν—˜λ„(AR)

μœ ν–‰κ³‘μ„  뢄석

  • 잠볡기 μΆ”μ • (쀑앙값, λ²”μœ„)
  • μœ ν–‰ νƒ€μž„λΌμΈ μ‹œκ°ν™”
  • 피크 탐지

🀝 κΈ°μ—¬ν•˜κΈ°

  1. μ €μž₯μ†Œ 포크
  2. κΈ°λŠ₯ 브랜치 생성 (git checkout -b feature/amazing-feature)
  3. 변경사항 컀밋 (git commit -m 'Add amazing feature')
  4. 브랜치 ν‘Έμ‹œ (git push origin feature/amazing-feature)
  5. Pull Request 생성

πŸ“ λΌμ΄μ„ μŠ€

이 ν”„λ‘œμ νŠΈλŠ” 곡쀑보건 연ꡬ 및 ꡐ윑 λͺ©μ μœΌλ‘œ κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ‘¨β€πŸ’» μ €μž

졜인규 (Ingyu Choi)

  • 역학쑰사관 & ν’€μŠ€νƒ 개발자
  • 곡쀑보건 업무 ν˜„λŒ€ν™”λ₯Ό μœ„ν•œ 도ꡬ 개발

곡쀑보건 전문가듀을 μœ„ν•΄ ❀️둜 μ œμž‘

About

πŸ§ͺ Web-based epidemiological analysis tool for outbreak investigations β€” Epidemic curves, Case-Control/Cohort studies, and incubation period analysis

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages