feat: Add database models and services for patient data, scenarios, chat history, and handoff records. Implement database connection settings and CRUD operations for managing patient and scenario data.
0136146
| { | |
| "patient": { | |
| "id": "P001", | |
| "name": "๊น๋ฏผ์", | |
| "age": 24, | |
| "gender": "๋จ", | |
| "weight": 68, | |
| "height": 174, | |
| "diagnosis": "๊ธ์ฑ ์ถฉ์์ผ (Acute Appendicitis)", | |
| "admission_date": "2025-10-08", | |
| "attending_physician": "์ธ๊ณผ ์ ๋ฌธ์", | |
| "allergies": "์์", | |
| "comorbidities": "ํน์ด์ฌํญ ์์", | |
| "room_number": "501ํธ" | |
| }, | |
| "scenarios": [ | |
| { | |
| "id": "S001_D0_ER_WARD", | |
| "patient_id": "P001", | |
| "title": "Day 0 - ์๊ธ์คโ๋ณ๋ ์ธ๊ณ (์์ ์ )", | |
| "day": 0, | |
| "handoff_situation": "์๊ธ์ค โ ์ธ๊ณผ ๋ณ๋", | |
| "hospital_day": 1, | |
| "status_badge": "critical", | |
| "vitals": { | |
| "time": "2025-10-08 15:20", | |
| "BP": "128/82 mmHg", | |
| "HR": "96 bpm", | |
| "RR": "20 /min", | |
| "BT": "37.9โ", | |
| "SpO2": "98% (RA)", | |
| "Pain": "NRS 8/10" | |
| }, | |
| "labs": { | |
| "time": "2025-10-08 15:40 ์ฑํ, 16:10 ๋ณด๊ณ ", | |
| "CBC": { | |
| "WBC": "14.8 ร10ยณ/ยตL (โ)", | |
| "Neutrophil": "83%", | |
| "Hb": "14.0 g/dL", | |
| "Plt": "280ร10ยณ/ยตL" | |
| }, | |
| "CRP": "6.2 mg/dL (โ)", | |
| "BMP": { | |
| "Na": 138, | |
| "K": 3.8, | |
| "Cl": 103, | |
| "BUN": 10, | |
| "Cr": 0.9 | |
| }, | |
| "LFT": { | |
| "AST": 24, | |
| "ALT": 28, | |
| "ALP": 78, | |
| "T_bil": 0.8 | |
| }, | |
| "UA": "WBC 0-2/HPF, Nitrite(โ), Ketone trace, ํ๋จ(โ)", | |
| "Lactate": "1.6 mmol/L" | |
| }, | |
| "physical_exam": { | |
| "abdomen": "McBurney point ์ํต(+), ๋ฐ๋ฐํต(+), ๊ทผ์ฑ๊ฒฝ์ง(+), Rovsing(+)" | |
| }, | |
| "imaging": { | |
| "CT": "Abd. CT w/ contrast (16:40) โ ์ถฉ์ ์ง๊ฒฝ 9 mm, ๋ฒฝ๋นํยท์ฃผ๋ณ ์ง๋ฐฉ์นจ์ค(+), ์ฒ๊ณตยท๋์ ์์, free air(โ)" | |
| }, | |
| "orders": [ | |
| "NPO ์ ์ง", | |
| "NS 1L bolus โ ์ดํ D5NS 80 mL/hr ์ ์ง", | |
| "Ceftriaxone 2 g IV q12h + Metronidazole 500 mg IV q8h ์์", | |
| "Tramadol 50 mg IV q6h PRN (NRSโฅ5)", | |
| "Ondansetron 4 mg IV q8h PRN", | |
| "DVT ์๋ฐฉ: ๊ฐํ์ ๊ณต๊ธฐ์๋ฐ(SCD), ์กฐ๊ธฐ ๋ณดํ ๊ณํ", | |
| "์๊ธ ๋ณต๊ฐ๊ฒฝ ์ถฉ์์ ์ ์ ์์ฝ (18:40 ์์ ์์ )" | |
| ], | |
| "nursing_notes": [ | |
| { | |
| "time": "15:30", | |
| "note": "์๊ธ์ค ๋์ฐฉ. 24์๊ฐ ์ ๋ถํฐ ๋ฐฐ๊ผฝ ์ฃผ์์์ ์ฐํ๋ณต๋ถ(RLQ)๋ก ์ด๋ํ๋ ๋ณตํต ํธ์. ์ค์ฌยท์์์ ํ. ๊ฑท๊ธฐ ์ด๋ ค์ํจ." | |
| }, | |
| { | |
| "time": "16:20", | |
| "note": "ํ์ก ๊ฒ์ฌ ์๋ฃ. WBC, CRP ์์น ํ์ธ. CT ๊ฒ์ฌ ์์ ." | |
| }, | |
| { | |
| "time": "17:00", | |
| "note": "CT ๊ฒฐ๊ณผ: ๊ธ์ฑ ์ถฉ์์ผ ์ง๋จ. ์๊ธ ์์ ๊ฒฐ์ . ์์ ๋์์ ๋ฐ ๋ง์ทจ ํ๊ฐ ์๋ฃ." | |
| } | |
| ] | |
| }, | |
| { | |
| "id": "S001_D0_WARD_OR", | |
| "patient_id": "P001", | |
| "title": "Day 0 - ๋ณ๋โ์์ ์ค ์ธ๊ณ", | |
| "day": 0, | |
| "handoff_situation": "์ธ๊ณผ ๋ณ๋ โ ์์ ์ค", | |
| "hospital_day": 1, | |
| "status_badge": "critical", | |
| "vitals": { | |
| "time": "2025-10-08 18:20", | |
| "BP": "124/80 mmHg", | |
| "HR": "92 bpm", | |
| "RR": "20 /min", | |
| "BT": "37.8โ", | |
| "SpO2": "98% (RA)", | |
| "Pain": "NRS 7/10" | |
| }, | |
| "labs": { | |
| "reference": "15:40 ์ฑํ ๊ฒฐ๊ณผ ์ฐธ์กฐ", | |
| "note": "์ถ๊ฐ ๊ฒ์ฌ ์์. ์์ ์ ๊ธฐ๋ณธ ๊ฒ์ฌ ์๋ฃ." | |
| }, | |
| "orders": [ | |
| "NPO ์ ์ง", | |
| "D5NS 80 mL/hr ๊ณ์", | |
| "ํญ์์ ๊ณ์ (Ceftriaxone + Metronidazole)", | |
| "Tramadol 50 mg IV ํฌ์ฌ (18:00)", | |
| "์์ ๋์์, ๋ง์ทจ ํ๊ฐ ์๋ฃ", | |
| "๋ณต๊ฐ๊ฒฝ ์ถฉ์์ ์ ์ 18:40 ์์ ์์ " | |
| ], | |
| "nursing_notes": [ | |
| { | |
| "time": "17:30", | |
| "note": "๋ณ๋ ์ ์ค. ์์ ์ค๋น ์ค. NPO ์ ์ง, IV line ํ์ธ." | |
| }, | |
| { | |
| "time": "18:00", | |
| "note": "Tramadol 50 mg IV ํฌ์ฌ. ํต์ฆ 7/10." | |
| }, | |
| { | |
| "time": "18:20", | |
| "note": "์์ ์ค ์ด์ก ์ค๋น ์๋ฃ. ํ์ ๋ฐ ๋ณดํธ์์๊ฒ ์์ ๊ณผ์ ์ค๋ช ." | |
| } | |
| ] | |
| }, | |
| { | |
| "id": "S001_D0_RECOVERY", | |
| "patient_id": "P001", | |
| "title": "Day 0 - ํ๋ณต์คโ๋ณ๋ ์ ๋ (์์ ํ)", | |
| "day": 0, | |
| "handoff_situation": "ํ๋ณต์ค โ ์ธ๊ณผ ๋ณ๋", | |
| "hospital_day": 1, | |
| "status_badge": "watch", | |
| "vitals": { | |
| "time": "2025-10-08 20:30", | |
| "BP": "122/80 mmHg", | |
| "HR": "88 bpm", | |
| "RR": "20 /min", | |
| "BT": "37.4โ", | |
| "SpO2": "98% (RA)", | |
| "Pain": "NRS 6/10" | |
| }, | |
| "surgery_info": { | |
| "procedure": "๋ณต๊ฐ๊ฒฝ ์ถฉ์์ ์ ์ (Laparoscopic Appendectomy)", | |
| "time": "18:40-19:35", | |
| "findings": "์ถฉ์ ์ง๊ฒฝ ~9 mm, ๋ฐ์ ยท๋ถ์ข ยท์ฌ์ ์ ์นจ์ฐฉ, ์ฒ๊ณตยท๋์ ์์. ์ฅ์ก์ฑ ๋ณต์ ์๋.", | |
| "technique": "3-port ์ ๊ทผ, Endoloop 2ํ๋ก base ๊ฒฐ์ฐฐ ํ ์ ์ . ๋ฐฐ์ก๊ด ์ฝ์ ์์.", | |
| "EBL": "30 mL", | |
| "fluids": "Crystalloid 1,200 mL", | |
| "urine_output": "300 mL", | |
| "complications": "์์" | |
| }, | |
| "orders": [ | |
| "NPO ์ ์ง (๋ด์ผ ์์นจ๊น์ง)", | |
| "D5NS 80 mL/hr ์ ์ง", | |
| "Ceftriaxone 2 g IV q12h + Metronidazole 500 mg IV q8h (24h๊น์ง)", | |
| "Tramadol 50 mg IV q6h PRN (NRSโฅ5)", | |
| "Ondansetron 4 mg IV q8h PRN", | |
| "Foley catheter ์ ์ง (๋ด์ผ ์์นจ ์ ๊ฑฐ ์์ )", | |
| "V/S q4h, I/O chart", | |
| "์์ฒ ๊ด์ฐฐ q8h" | |
| ], | |
| "nursing_notes": [ | |
| { | |
| "time": "20:30", | |
| "note": "ํ๋ณต์ค์์ ๋ณ๋ ์ ๋. Foley catheter in situ. Trocar site 3๊ณณ ๋๋ ์ฑ clean & dry. ํต์ฆ NRS 6/10." | |
| }, | |
| { | |
| "time": "21:00", | |
| "note": "Tramadol 50 mg IV ํฌ์ฌ ํ ํต์ฆ 6โ5๋ก ๊ฐ์. ์ฒด์๋ณ๊ฒฝยท์ฌํธํก ๊ต์ก. ๋์์๋ฐฉ์๊ธฐ ๊ต์ก." | |
| } | |
| ] | |
| }, | |
| { | |
| "id": "S001_D1_MORNING", | |
| "patient_id": "P001", | |
| "title": "Day 1 - ์์นจ ์ธ๊ณ (POD1)", | |
| "day": 1, | |
| "handoff_situation": "์ผ๊ฐ ๊ทผ๋ฌด โ ์ฃผ๊ฐ ๊ทผ๋ฌด", | |
| "hospital_day": 2, | |
| "status_badge": "stable", | |
| "vitals": { | |
| "time": "2025-10-09 07:00", | |
| "BP": "118/76 mmHg", | |
| "HR": "80 bpm", | |
| "RR": "18 /min", | |
| "BT": "37.1โ", | |
| "SpO2": "98% (RA)", | |
| "Pain": "NRS 4/10" | |
| }, | |
| "labs": { | |
| "time": "06:30 ์ฑํ, 08:10 ๋ณด๊ณ ", | |
| "WBC": "11.2 ร10ยณ/ยตL (โ)", | |
| "Neutrophil": "78%", | |
| "CRP": "5.1 mg/dL (โ)", | |
| "electrolytes": "Na 139, K 3.9, Cl 102 (์์ )", | |
| "Cr": "0.9 mg/dL (์์ )" | |
| }, | |
| "orders": [ | |
| "Acetaminophen 1 g PO q8h (๊ธฐ๋ณธ ์งํต)", | |
| "Tramadol 50 mg IV PRN", | |
| "ํญ์์ 24์๊ฐ๊น์ง ์ ์ง ํ ์ค๋จ (์ค๋ ๋ฐค 20:00 ์ข ๋ฃ)", | |
| "Clear liquid โ ์ ์ฌ๋ถํฐ Soft diet (์ฆ์ ์์ผ๋ฉด)", | |
| "Foley ์ค์ 07:30 ์ ๊ฑฐ, ์๋ฐ ๋ฐฐ๋จ ํ์ธ", | |
| "์กฐ๊ธฐ ๋ณดํ 1์ผ 3ํ ์ด์", | |
| "IS(์ฌํธํก) ๊ต์ก", | |
| "V/S q4h, ์์ฒ ๊ด์ฐฐ q8h" | |
| ], | |
| "nursing_notes": [ | |
| { | |
| "time": "07:30", | |
| "note": "Foley ์ ๊ฑฐ. ์๋ฐ ๋ฐฐ๋จ ์ํธ(ํฌ๋ช ). ์ค์ฌ ๊ฒฝ๋ฏธ(โ/ยฑ)." | |
| }, | |
| { | |
| "time": "10:30", | |
| "note": "๋ณดํ 1ํ ์ํ(๋ถ์ถ). ์ด์ง๋ผ ๊ฒฝ๋ฏธ ํธ์, ํด์ ํ ํธ์ . Clear diet ๋ฌด๋ฆฌ ์์ด ์ ์ฌ๋ถํฐ soft ๊ถ์ฅ." | |
| }, | |
| { | |
| "time": "14:00", | |
| "note": "Soft diet ์์. ์์ฒ ๋ฐ์ ยท์ผ์ถ ์์. C/D/I ์ํ ์ ์ง." | |
| } | |
| ] | |
| }, | |
| { | |
| "id": "S001_D2_DISCHARGE", | |
| "patient_id": "P001", | |
| "title": "Day 2 - ํด์ ์ ์ธ๊ณ (POD2)", | |
| "day": 2, | |
| "handoff_situation": "๋ณ๋ ๊ฐํธ์ฌ โ ํด์ ๊ต์ก", | |
| "hospital_day": 3, | |
| "status_badge": "stable", | |
| "vitals": { | |
| "time": "2025-10-10 07:00", | |
| "BP": "116/74 mmHg", | |
| "HR": "76 bpm", | |
| "RR": "16 /min", | |
| "BT": "36.9โ", | |
| "SpO2": "98% (RA)", | |
| "Pain": "NRS 2/10" | |
| }, | |
| "labs": { | |
| "time": "06:30 ์ฑํ, 08:00 ๋ณด๊ณ ", | |
| "WBC": "9.0 ร10ยณ/ยตL (์ ์ํ)", | |
| "Neutrophil": "70%", | |
| "CRP": "2.1 mg/dL (ํธ์ )", | |
| "๊ธฐํ": "์ ํด์ง, ์ ์ฅยท๊ฐ๊ธฐ๋ฅ ์ ์" | |
| }, | |
| "orders": [ | |
| "ํญ์์ ์ค๋จ ์ ์ง (๋น์ฒ๊ณตยทํฉ๋ณ์ฆ ์์)", | |
| "Acetaminophen 500 mg 2์ PO q8h PRN (3์ผ๋ถ ์ฒ๋ฐฉ)", | |
| "์์ฒ: 48์๊ฐ ์ดํ ์ค์ ์ ์ ์ง ์๊ฒ ์ฃผ์ โ 72์๊ฐ ํ ๊ฐ๋ฒผ์ด ๋ฌผ ์ ์ด ๊ฐ๋ฅ", | |
| "ํ๋: ๋ฌด๊ฑฐ์ด ๋ฌผ๊ฑด ๋ค๊ธฐยท๊ฒฉํ ์ด๋ 1์ฃผ ํํผ, ํต์ฆ ๋ฒ์ ๋ด ๋ณดํ ๊ถ์ฅ", | |
| "์ธ๋: 7์ผ ํ ์์ฒ ํ์ธ/ํ์ ์ ๋ดํฉ์ฌ ์ ๊ฑฐ", | |
| "ํด์ ์์ : 2025-10-10 ์คํ" | |
| ], | |
| "discharge_education": [ | |
| "์์ฒ ๊ด๋ฆฌ: 48์๊ฐ ํ ์ค์ ๊ฐ๋ฅ (๋ฌผ ์ ์ด ์ต์ํ), ๋ฐ์ ยท๊ณ ๋ฆ ์ ๋ด์", | |
| "์์ด: ๋ถ๋๋ฌ์ด ์์ฌ๋ถํฐ ์์, ์ ์ง์ ์ผ๋ก ์ผ๋ฐ์์ผ๋ก ์ ํ", | |
| "ํ๋: ๊ฐ๋ฒผ์ด ๋ณดํ ๊ถ์ฅ, ๋ฌด๊ฑฐ์ด ๋ฌผ๊ฑด(5kg ์ด์) 1์ฃผ๊ฐ ๊ธ์ง", | |
| "๊ฒฝ๊ณ ์ฆ์: 38.0โ ์ด์ ๋ฐ์ด, ์์ฒ ๋ฐ์ /๊ณ ๋ฆ, ์ ํ๋๋ ๋ณตํตยท๊ตฌํ , ๋ฐฐ๋ณยท๋ฐฐ๋จ ์ด์ ์ ์ฆ์ ๋ด์", | |
| "์ธ๋ ์์ฝ: 7์ผ ํ ์ธ๊ณผ ์ธ๋" | |
| ], | |
| "nursing_notes": [ | |
| { | |
| "time": "08:30", | |
| "note": "Soft diet ์ ์ญ์ทจ. ๊ฐ์คยท๋ฐฐ๋ณ ํ์ธ(+). ๋ณดํ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฅ." | |
| }, | |
| { | |
| "time": "09:30", | |
| "note": "ํด์ ์ ๊ต์ก: ์์ฒ๊ด๋ฆฌยท์์ดยทํ๋ยท๊ฒฝ๊ณ ์ฆ์ ์๋ด. ๋ณดํธ์ ๋์, ์ดํด๋ '์ข์'. ๊ต์ก์๋ฃ ์ ๊ณต." | |
| }, | |
| { | |
| "time": "14:00", | |
| "note": "ํด์ ์๋ฃ. ์ฒ๋ฐฉ์ ๋ฐ ํด์ ์์ฝ์ ์ ๋ฌ. 7์ผ ํ ์ธ๋ ์์ฝ ํ์ธ." | |
| } | |
| ] | |
| } | |
| ] | |
| } |