--- title: Nurse Handover Simulator emoji: πŸ₯ colorFrom: purple colorTo: pink sdk: docker pinned: false short_description: AI 기반 κ°„ν˜Έμ‚¬ SBAR μΈμˆ˜μΈκ³„ ν›ˆλ ¨ ν”Œλž«νΌ - EMR λ°μ΄ν„°λ‘œ μ‹€μ „ μ—°μŠ΅ --- # πŸ₯ κ°„ν˜Έ μΈμˆ˜μΈκ³„ ꡐ윑 ν”Œλž«νΌ Clinical Handover Training Chatbot utilizing SBAR/ISBAR, EMR data, and immersive technology (Metaverse/VR) for standardized, high-fidelity nursing handover practice. ## πŸ“‹ κ°œμš” κ°„ν˜Έμ‚¬ SBAR ν˜•μ‹ μΈμˆ˜μΈκ³„ ν›ˆλ ¨μ„ μœ„ν•œ AI 기반 ꡐ윑 ν”Œλž«νΌμž…λ‹ˆλ‹€. Gradio 기반 μ›Ή μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ‹€μ œ EMR 데이터λ₯Ό ν™œμš©ν•œ μΈμˆ˜μΈκ³„ μ—°μŠ΅μ„ μ œκ³΅ν•©λ‹ˆλ‹€. ## πŸš€ μ‹œμž‘ν•˜κΈ° ### 1. μ €μž₯μ†Œ 클둠 ```bash git clone https://github.com/your-username/nurse-handover-simulator.git cd nurse-handover-simulator ``` ### 2. ν™˜κ²½ λ³€μˆ˜ μ„€μ • #### Supabase μ‚¬μš© (ꢌμž₯) 1. `ENV_EXAMPLE` νŒŒμΌμ„ `.env`둜 λ³΅μ‚¬ν•©λ‹ˆλ‹€: ```bash cp ENV_EXAMPLE .env ``` 2. Supabase ν”„λ‘œμ νŠΈ μ„€μ •μ—μ„œ ν•„μš”ν•œ 정보λ₯Ό λ³΅μ‚¬ν•©λ‹ˆλ‹€: - Project URL: `https://project_id.supabase.co` - API Key (anon key) - Database URL (Connection String) 3. `.env` νŒŒμΌμ— Supabase 정보λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€: ```env SUPABASE_URL=https://[project_id].supabase.co SUPABASE_ANON_KEY=your_anon_key_here SUPABASE_DB_URL=postgresql://postgres:[password]@aws-0-[region].pooler.supabase.com:6543/postgres GOOGLE_API_KEY=your_google_api_key_here ``` #### 둜컬 PostgreSQL μ‚¬μš© (개발 ν™˜κ²½) ν™˜κ²½ λ³€μˆ˜μ— `SUPABASE_DB_URL`을 μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ 둜컬 PostgreSQL을 μ‚¬μš©ν•©λ‹ˆλ‹€. ### 3. μ˜μ‘΄μ„± μ„€μΉ˜ ```bash # uvλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 uv sync # λ˜λŠ” 일반 pip μ‚¬μš© pip install -e . ``` ### 4. Google Gemini API ν‚€ λ°œκΈ‰ 1. [Google AI Studio](https://makersuite.google.com/app/apikey)μ—μ„œ API ν‚€ λ°œκΈ‰ 2. `.env` νŒŒμΌμ— `GOOGLE_API_KEY` μΆ”κ°€ ### 5. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ```bash # start.sh μ‚¬μš© (ꢌμž₯) bash start.sh # λ˜λŠ” 직접 μ‹€ν–‰ uv run app.py ``` ## 🐳 Docker 배포 ### 둜컬 Docker μ‹€ν–‰ ```bash # Docker 이미지 λΉŒλ“œ docker build -t nurse-handover-simulator . # Docker μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰ (ν™˜κ²½ λ³€μˆ˜ 포함) docker run -p 7860:7860 \ -e SUPABASE_URL="https://your-project.supabase.co" \ -e SUPABASE_ANON_KEY="your_key" \ -e SUPABASE_DB_URL="postgresql://..." \ -e GOOGLE_API_KEY="your_key" \ nurse-handover-simulator # λ˜λŠ” .env 파일 μ‚¬μš© docker run -p 7860:7860 --env-file .env nurse-handover-simulator ``` ### Hugging Face Spaces 배포 1. Hugging Face Spaces에 μƒˆ Space 생성 (Docker νƒ€μž… 선택) 2. Repository Secrets에 λ‹€μŒ ν™˜κ²½ λ³€μˆ˜ 등둝: - `SUPABASE_URL` - `SUPABASE_ANON_KEY` - `SUPABASE_DB_URL` - `GOOGLE_API_KEY` 3. Dockerfileκ³Ό μ½”λ“œ ν‘Έμ‹œ 4. μžλ™ λΉŒλ“œ 및 배포 μ™„λ£Œ ## πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰 ``` nurse-handover-simulator/ β”œβ”€β”€ app.py # Gradio 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ β”œβ”€β”€ config/ β”‚ └── database.py # λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ„€μ • β”œβ”€β”€ models/ β”‚ β”œβ”€β”€ patient_data.py # ν™˜μž 및 μ‹œλ‚˜λ¦¬μ˜€ λͺ¨λΈ β”‚ β”œβ”€β”€ handoff_record.py # μΈμˆ˜μΈκ³„ 기둝 λͺ¨λΈ β”‚ └── chat_history.py # μ±„νŒ… νžˆμŠ€ν† λ¦¬ λͺ¨λΈ β”œβ”€β”€ services/ β”‚ β”œβ”€β”€ db_service.py # λ°μ΄ν„°λ² μ΄μŠ€ CRUD μ„œλΉ„μŠ€ β”‚ └── gemini_service.py # Google Gemini AI μ„œλΉ„μŠ€ β”œβ”€β”€ data/ β”‚ └── scenarios.json # μ‹œλ‚˜λ¦¬μ˜€ 데이터 β”œβ”€β”€ Dockerfile # Docker 배포 μ„€μ • β”œβ”€β”€ docker-compose.yml # 둜컬 PostgreSQL μ„€μ • β”œβ”€β”€ ENV_EXAMPLE # ν™˜κ²½ λ³€μˆ˜ ν…œν”Œλ¦Ώ β”œβ”€β”€ start.sh # μ‹œμž‘ 슀크립트 └── init_db.py # λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™” 슀크립트 ``` ## πŸ”‘ ν™˜κ²½ λ³€μˆ˜ μ„€λͺ… | λ³€μˆ˜ | μ„€λͺ… | ν•„μˆ˜ μ—¬λΆ€ | |------|------|---------| | `SUPABASE_URL` | Supabase ν”„λ‘œμ νŠΈ URL | Supabase μ‚¬μš© μ‹œ | | `SUPABASE_ANON_KEY` | Supabase Anon API Key | Supabase μ‚¬μš© μ‹œ | | `SUPABASE_DB_URL` | Supabase λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° URL | Supabase μ‚¬μš© μ‹œ | | `GOOGLE_API_KEY` | Google Gemini API ν‚€ | ν•„μˆ˜ | | `DB_HOST` | 둜컬 PostgreSQL 호슀트 | 둜컬 PostgreSQL μ‚¬μš© μ‹œ | | `DB_PORT` | 둜컬 PostgreSQL 포트 | 둜컬 PostgreSQL μ‚¬μš© μ‹œ | ## πŸ”’ λ³΄μ•ˆ κ°€μ΄λ“œ ### ν™˜κ²½ λ³€μˆ˜ 관리 1. **μ ˆλŒ€ `.env` νŒŒμΌμ„ Git에 μ»€λ°‹ν•˜μ§€ λ§ˆμ„Έμš”** - `.gitignore`에 `.env`κ°€ 이미 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ 2. **Supabase Keys** - `SUPABASE_ANON_KEY`: ν΄λΌμ΄μ–ΈνŠΈ λ…ΈμΆœ κ°€λŠ₯ (RLS둜 보호됨) - `SUPABASE_DB_URL`: μ„œλ²„μ—μ„œλ§Œ μ‚¬μš©, λ…ΈμΆœ κΈˆμ§€ 3. **Google API Key** - μ„œλ²„μ—μ„œλ§Œ μ‚¬μš©, λ…ΈμΆœ κΈˆμ§€ 4. **Hugging Face Spaces** - Repository Secretsλ₯Ό μ‚¬μš©ν•˜μ—¬ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ•ˆμ „ν•˜κ²Œ 관리 ## πŸ“Š μ£Όμš” κΈ°λŠ₯ - πŸ“‹ **EMR 정보 쑰회**: μ‹€μ œ 병원 EMRκ³Ό μœ μ‚¬ν•œ μΈν„°νŽ˜μ΄μŠ€ - πŸ’¬ **AI ν”Όλ“œλ°±**: Google Gemini AIλ₯Ό ν™œμš©ν•œ μ‹€μ‹œκ°„ ν”Όλ“œλ°± - πŸ“ **SBAR ν˜•μ‹ μΈμˆ˜μΈκ³„**: ν‘œμ€€ μΈμˆ˜μΈκ³„ ν˜•μ‹ μ—°μŠ΅ - πŸ“Š **평가 μ‹œμŠ€ν…œ**: μ™„μ „μ„±, μ •ν™•μ„±, λͺ…λ£Œμ„±, μš°μ„ μˆœμœ„ 평가 - πŸ“š **학생 이λ ₯ 쑰회**: 학생별 ν•™μŠ΅ 이λ ₯ 및 톡계 ## πŸ› οΈ 기술 μŠ€νƒ - **Backend**: Python 3.12 - **UI**: Gradio - **Database**: Supabase (PostgreSQL) / 둜컬 PostgreSQL - **AI**: Google Gemini 2.0 Flash - **ORM**: SQLAlchemy ## πŸ“ λΌμ΄μ„ μŠ€ MIT License ## 🀝 κΈ°μ—¬ν•˜κΈ° Pull RequestλŠ” μ–Έμ œλ“  ν™˜μ˜ν•©λ‹ˆλ‹€!