μνμ‘°μ¬ λ°μ΄ν° λΆμ μΉ μ ν리μΌμ΄μ
보건 μ λ¬Έκ°λ₯Ό μν μνμ‘°μ¬ λΆμ λꡬ
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:noauthwebpage_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)
- μ 볡기 μΆμ (μ€μκ°, λ²μ)
- μ ν νμλΌμΈ μκ°ν
- νΌν¬ νμ§
- μ μ₯μ ν¬ν¬
- κΈ°λ₯ λΈλμΉ μμ± (
git checkout -b feature/amazing-feature) - λ³κ²½μ¬ν μ»€λ° (
git commit -m 'Add amazing feature') - λΈλμΉ νΈμ (
git push origin feature/amazing-feature) - Pull Request μμ±
μ΄ νλ‘μ νΈλ 곡μ€λ³΄κ±΄ μ°κ΅¬ λ° κ΅μ‘ λͺ©μ μΌλ‘ κ°λ°λμμ΅λλ€.
μ΅μΈκ· (Ingyu Choi)
- μνμ‘°μ¬κ΄ & νμ€ν κ°λ°μ
- 곡μ€λ³΄κ±΄ μ 무 νλνλ₯Ό μν λꡬ κ°λ°
곡μ€λ³΄κ±΄ μ λ¬Έκ°λ€μ μν΄ β€οΈλ‘ μ μ