LearningnRunning's picture
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์ผ ํ›„ ์™ธ๋ž˜ ์˜ˆ์•ฝ ํ™•์ธ."
}
]
}
]
}