Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,11 +5,12 @@ from openpyxl.utils import get_column_letter
|
|
| 5 |
from io import BytesIO
|
| 6 |
from datetime import date, time
|
| 7 |
import sqlite3
|
|
|
|
| 8 |
|
| 9 |
st.set_page_config(page_title="λ°©λ¬Έλͺ©μ μκΈμ μλ΄μΌμ§ μλμμ±κΈ°", layout="wide")
|
| 10 |
|
| 11 |
-
st.title("π λ°©λ¬Έλͺ©μ μκΈμ μλ΄μΌμ§ μλμμ±κΈ°
|
| 12 |
-
st.caption("μλ΄μμ β λ¬Έμ μν© β μμΈ β μ‘°μΉ β κΈμ¬λ°μ β μμ
λ€μ΄λ‘λ")
|
| 13 |
st.warning("β οΈ **β» λ³Έ μμ±κΈ°λ ν루 2ν μ΄μ© νλ μ νμ΄ μμ΅λλ€.**")
|
| 14 |
|
| 15 |
DB_FILE = "usage.db"
|
|
@@ -98,31 +99,42 @@ REQUIRED_ITEMS = [
|
|
| 98 |
"μλ΄μ μλͺ
", "λμμ λλ 보νΈμ μλͺ
"
|
| 99 |
]
|
| 100 |
|
|
|
|
| 101 |
AREA_DATA = {
|
| 102 |
"λͺ©μ κ±°λΆ/νμ‘°λ": {
|
| 103 |
"problems": ["λͺ©μ κ±°λΆ", "νμ κ±°λΆ", "λ¬Όμ λν 곡ν¬μ¬", "νΌλΆ μ μ΄ μλ―Ό", "νΌλ‘κ° νΈμ", "μ€μκΈ° μ리μ λΆμ"],
|
| 104 |
-
"causes": ["μΉλ§€ μΈμ§ μ ν", "μΆμμ λ―Όκ°ν¨", "κ³Όκ±° λΆμ μ κ²½ν", "μ 체 λ
ΈμΆ μμΉμ¬", "νΌλΆ 건쑰 λ° κ°λ €μ", "컨λμ
μ ν"],
|
| 105 |
-
"actions": ["λ°λ»ν μ€λ΄ μ¨λ μ μ§", "μΆ©λΆν μ§μ§μ λν", "νμλ‘ λͺΈμ κ°μΌ μ±
|
| 106 |
},
|
| 107 |
"νΌλΆ μν/λ°μ /μμ²": {
|
| 108 |
-
"problems": ["νΌλΆ 건쑰", "
|
| 109 |
-
"causes": ["νμ‘ μν μ ν", "
|
| 110 |
-
"actions": ["λͺ©μ ν 보μ΅μ λν¬", "λ§μ¬μ§
|
| 111 |
},
|
| 112 |
"체μ¨/λ°μ΄ν λ³ν": {
|
| 113 |
-
"problems": ["λͺ©μ μ ν νμ μμΉ", "λͺ©μ ν νκΈ° νΈμ", "λ―Έμ΄ λ°μ", "μ΄μ§λ¬μ νΈμ", "κΈκ²©ν νΌλ‘κ°"],
|
| 114 |
-
"causes": ["μ€λ΄μΈ μ¨λμ°¨", "μλΆ μμ€", "체λ ₯ μλͺ¨", "μ¨μ μκ·Ή", "κΈ°μ
|
| 115 |
-
"actions": ["λͺ©μ μκ° λ¨μΆ(20~30λΆ μ΄λ΄)", "λͺ©μ ν λ°λ»ν
|
| 116 |
},
|
| 117 |
"λμ/μ΄λ λΆμμ ": {
|
| 118 |
-
"problems": ["λ―Έλλ¬μ΄ λ°λ₯ μν", "μμ‘° μΆμ
μ κ· ν μμ€", "λΆμΆ μ 체μ€
|
| 119 |
-
"causes": ["νμ§ κ·Όλ ₯
|
| 120 |
-
"actions": ["λ―ΈλλΌ λ°©μ§ λ§€νΈ
|
| 121 |
},
|
| 122 |
"μμ/μΌλ° 건κ°μν": {
|
| 123 |
-
"problems": ["λνΌ κ°μ§/λΉλ¬", "μλ°ν± κ΄λ¦¬ νμ", "λ°°μ€λ¬Ό μ€μΌ", "κ΅¬κ° μμ λΆλ", "체취 μ¬ν"],
|
| 124 |
-
"causes": ["κ°μΈμμ κ΄λ¦¬
|
| 125 |
-
"actions": ["λνΌ μ§μ€ μΈμ ", "λͺ©μ ν μλ°ν± μ 리", "μ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
},
|
| 127 |
}
|
| 128 |
|
|
@@ -131,32 +143,35 @@ def make_sentence(area, problems, causes, actions, age, grade, mobility, cogniti
|
|
| 131 |
cause_text = ", ".join(causes)
|
| 132 |
action_text = ", ".join(actions)
|
| 133 |
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
f"λ°©λ¬Έλͺ©μ κΈμ¬μ 곡 κ³Όμ λ° {area} κ΄λ ¨ μλ΄μ μ€μν κ²°κ³Ό, μ£Όμ λ¬Έμ μν©μΌλ‘ {problem_text}μ΄
|
| 137 |
-
f"λͺ©μ μλΉμ€ μ§ν
|
| 138 |
-
f"μλ΄ κ³Ό
|
| 139 |
-
|
| 140 |
-
)
|
| 141 |
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
f"λͺ©μ μμ보νΈμ¬
|
| 145 |
-
f"
|
| 146 |
-
|
|
|
|
| 147 |
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
"λ°μ κ°λ₯ν μΈλΆ μ¬νμ λ€μ λ°©λ¬Έλͺ©μ μΌμ
|
| 151 |
-
"
|
| 152 |
-
|
|
|
|
| 153 |
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
"λ€μ μλ΄ μ λ¬Έμ μν©
|
| 157 |
-
|
|
|
|
|
|
|
| 158 |
|
| 159 |
-
return
|
| 160 |
|
| 161 |
def make_excel(data, consult, action, reflection, monitoring, checked_items, missing_items):
|
| 162 |
wb = Workbook()
|
|
@@ -181,7 +196,7 @@ def make_excel(data, consult, action, reflection, monitoring, checked_items, mis
|
|
| 181 |
|
| 182 |
info_rows = [
|
| 183 |
("μκΈμ μ±λͺ
", data["μκΈμ μ±λͺ
"], "μλ
μμΌ", data["μλ
μμΌ"], "μ±λ³", data["μ±λ³"]),
|
| 184 |
-
("λμ΄", data[
|
| 185 |
("λ³ΈμΈλΆλ΄λ₯ ", data["λ³ΈμΈλΆλ΄λ₯ "], "μλ΄μΌμ", str(data["μλ΄μΌμ"]), "μλ΄μκ°", str(data["μλ΄μκ°"])),
|
| 186 |
("μλ΄κ΅¬λΆ", data["μλ΄κ΅¬λΆ"], "μλ΄μ₯μ", data["μλ΄μ₯μ"], "μλ΄λ°©λ²", data["μλ΄λ°©λ²"]),
|
| 187 |
("μλ΄λμμ", data["μλ΄λμμ"], "κ΄κ³", data["κ΄κ³"], "λμμ", data["λμμ"]),
|
|
@@ -207,9 +222,9 @@ def make_excel(data, consult, action, reflection, monitoring, checked_items, mis
|
|
| 207 |
current_row += 1
|
| 208 |
|
| 209 |
sections = [
|
| 210 |
-
("μλ΄ λ΄μ© (μκΈμ μν λ³ν λ°
|
| 211 |
-
("μ‘°μΉ λ°
|
| 212 |
-
("κΈμ¬μ 곡κ³ν λ°μ λ΄μ©", reflection, 3),
|
| 213 |
("μ¬ν μ‘°μΉ λ° λͺ¨λν°λ§ κ³ν", monitoring, 3),
|
| 214 |
]
|
| 215 |
|
|
@@ -218,14 +233,13 @@ def make_excel(data, consult, action, reflection, monitoring, checked_items, mis
|
|
| 218 |
ws.cell(current_row, 1).value = title
|
| 219 |
ws.cell(current_row, 1).fill = header_fill
|
| 220 |
ws.cell(current_row, 1).font = Font(bold=True)
|
| 221 |
-
ws.cell(current_row, 1).alignment = Alignment(horizontal="center")
|
| 222 |
current_row += 1
|
| 223 |
|
| 224 |
ws.merge_cells(start_row=current_row, start_column=1, end_row=current_row + height - 1, end_column=9)
|
| 225 |
ws.cell(current_row, 1).value = text
|
| 226 |
ws.cell(current_row, 1).alignment = Alignment(horizontal="left", vertical="top", wrap_text=True)
|
| 227 |
|
| 228 |
-
# ν
μ€νΈ κΈΈμ΄μ λ°λΌ λμ΄λ₯Ό λμ μΌλ‘ μλ κ³μ°νμ¬ 3κ° νμ λλμ΄ λ°°μ
|
| 229 |
lines = len(text) // 65 + 1 + text.count('\n') if text else 1
|
| 230 |
total_height = max(72, lines * 20 + 10)
|
| 231 |
single_row_height = total_height / height
|
|
@@ -238,7 +252,7 @@ def make_excel(data, consult, action, reflection, monitoring, checked_items, mis
|
|
| 238 |
ws.merge_cells(start_row=current_row, start_column=4, end_row=current_row, end_column=6)
|
| 239 |
ws.merge_cells(start_row=current_row, start_column=7, end_row=current_row, end_column=9)
|
| 240 |
|
| 241 |
-
ws.cell(current_row, 1).value = "
|
| 242 |
ws.cell(current_row, 4).value = f"{data['λ΄λΉμ']} (μλͺ
)"
|
| 243 |
ws.cell(current_row, 7).value = "λμμ/보νΈμ (μλͺ
)"
|
| 244 |
ws.cell(current_row, 1).fill = header_fill
|
|
@@ -287,23 +301,23 @@ with col1:
|
|
| 287 |
age = st.number_input("λμ΄", min_value=60, max_value=110, value=81)
|
| 288 |
|
| 289 |
with col2:
|
| 290 |
-
grade = st.selectbox("μ₯κΈ°μμ λ±κΈ", ["1λ±κΈ", "2λ±κΈ", "3λ±κΈ", "4λ±κΈ", "5λ±κΈ"])
|
| 291 |
admission_date = st.date_input("κ³μ½μΌ/μμμΌ", date.today())
|
| 292 |
copay = st.selectbox("λ³ΈμΈλΆλ΄λ₯ ", ["15%", "0%", "6%", "9%", "12%", "20%"])
|
| 293 |
consult_date = st.date_input("μλ΄μΌμ", date.today())
|
| 294 |
|
| 295 |
with col3:
|
| 296 |
consult_time = st.time_input("μλ΄μκ°", time(14, 0))
|
| 297 |
-
consult_type = st.selectbox("μλ΄ κ΅¬λΆ", ["μ κΈ° μλ΄", "μμ μλ΄", "μ κ· κ³μ½ μλ΄", "보νΈμ μμ² μλ΄"])
|
| 298 |
place = st.selectbox("μλ΄ μ₯μ", ["μκΈμ μν", "μΌν° μ¬λ¬΄μ€", "μ μ μλ΄", "κΈ°ν"])
|
| 299 |
-
method = st.selectbox("μλ΄ λ°©λ²", ["λλ©΄ λ©΄λ΄", "μ μ /μ ν μλ΄", "κΈ°ν"])
|
| 300 |
target = st.text_input("μλ΄ λμμ μ±λͺ
", "μλ
")
|
| 301 |
|
| 302 |
col4, col5, col6 = st.columns(3)
|
| 303 |
|
| 304 |
with col4:
|
| 305 |
-
relation = st.selectbox("μλ΄μμμ κ΄κ³", ["λΈ", "μλ€", "λ³ΈμΈ", "λ°°μ°μ", "λ©°λ리", "μ¬μ", "κΈ°ν"])
|
| 306 |
-
staff_position = st.selectbox("κΈ°κ΄ λ΄λΉμ μ§μ±
", ["μ¬ν볡μ§μ¬", "
|
| 307 |
staff_name = st.text_input("κΈ°κ΄ λ΄λΉμ μ±λͺ
", "μ¬ν볡μ§μ¬")
|
| 308 |
|
| 309 |
with col5:
|
|
@@ -315,7 +329,7 @@ with col6:
|
|
| 315 |
bath_type = st.selectbox("λͺ©μμ ν", ["λ°©λ¬Έλͺ©μ(μ°¨λλ΄)", "λ°©λ¬Έλͺ©μ(κ°μ λ΄μμ‘°)", "κ°μ λ΄μ€μλμ", "κΈ°ν"])
|
| 316 |
area = st.selectbox("μλ΄μμ μ ν", list(AREA_DATA.keys()))
|
| 317 |
|
| 318 |
-
st.subheader("λ¬Έμ μν© / μμΈ / μ‘°μΉ μ ν")
|
| 319 |
|
| 320 |
problems = st.multiselect("λ¬Έμ μν© μ ν", AREA_DATA[area]["problems"], default=AREA_DATA[area]["problems"][:2], key=f"problems_{area}")
|
| 321 |
causes = st.multiselect("μλ΄νκ² λ μμΈ μ ν", AREA_DATA[area]["causes"], default=AREA_DATA[area]["causes"][:2], key=f"causes_{area}")
|
|
@@ -334,7 +348,7 @@ elif today_count >= 2:
|
|
| 334 |
st.error("π¨ μ€λ μ¬μ© κ°λ₯ νμ(2ν)λ₯Ό λͺ¨λ μ¬μ©νμ΅λλ€. μλ‘μ΄ λ¬Έμ μμ±μ λΆκ°νλ©°, μλ κΈ°μ‘΄ μμ±λ λ¬Έμμ μμ λ° λ€μ΄λ‘λλ§ κ°λ₯ν©λλ€.")
|
| 335 |
|
| 336 |
checked_items = []
|
| 337 |
-
st.subheader("νμ κΈ°μ¬νλͺ© 체ν¬λ¦¬μ€νΈ")
|
| 338 |
for item in REQUIRED_ITEMS:
|
| 339 |
if st.checkbox(item, value=True, key=f"check_{item}"):
|
| 340 |
checked_items.append(item)
|
|
@@ -343,7 +357,7 @@ missing_items = [item for item in REQUIRED_ITEMS if item not in checked_items]
|
|
| 343 |
score = int((len(checked_items) / len(REQUIRED_ITEMS)) * 100)
|
| 344 |
|
| 345 |
if score == 100:
|
| 346 |
-
st.success(f"μλ΄μΌμ§ μμ±λ: {score}μ / λλ½ νλͺ© μμ")
|
| 347 |
elif score >= 85:
|
| 348 |
st.warning(f"μλ΄μΌμ§ μμ±λ: {score}μ / μΌλΆ νλͺ© νμΈ νμ")
|
| 349 |
else:
|
|
@@ -383,10 +397,8 @@ if st.button("π μλ΄μΌμ§ & μμ
μμ±νκΈ°", disabled=not can_generat
|
|
| 383 |
st.error("μ€λ μ¬μ© κ°λ₯ νμλ₯Ό λͺ¨λ μ¬μ©νμ΅λλ€.")
|
| 384 |
st.stop()
|
| 385 |
|
| 386 |
-
# μμ± μ±κ³΅ μ DBμ νμ μΆκ°
|
| 387 |
increase_today_usage(facility, user_id)
|
| 388 |
|
| 389 |
-
# ν
μ€νΈ μλ μμ±
|
| 390 |
gen_consult, gen_action, gen_reflection, gen_monitoring = make_sentence(
|
| 391 |
area, problems, causes, actions, age, grade, mobility, cognition
|
| 392 |
)
|
|
@@ -400,26 +412,24 @@ if st.button("π μλ΄μΌμ§ & μμ
μμ±νκΈ°", disabled=not can_generat
|
|
| 400 |
"checked_items": checked_items,
|
| 401 |
"missing_items": missing_items
|
| 402 |
}
|
| 403 |
-
st.success("π μλ΄μΌμ§κ°
|
| 404 |
st.rerun()
|
| 405 |
|
| 406 |
-
# μμ±λ λ°μ΄ν°κ° μμ κ²½μ°μλ§ νλ λ° λ€μ΄λ‘λ μ 곡
|
| 407 |
if st.session_state.generated_data is not None:
|
| 408 |
g_data = st.session_state.generated_data
|
| 409 |
|
| 410 |
-
st.subheader("μλ΄ λ΄μ©")
|
| 411 |
ui_consult = st.text_area("μλ΄λ΄μ© μμ κ°λ₯", g_data["consult"], height=220)
|
| 412 |
|
| 413 |
-
st.subheader("μ‘°μΉ λ΄μ©")
|
| 414 |
ui_action = st.text_area("μ‘°μΉλ΄μ© μμ κ°λ₯", g_data["action"], height=180)
|
| 415 |
|
| 416 |
-
st.subheader("κΈμ¬μ 곡 λ°μ
|
| 417 |
ui_reflection = st.text_area("κΈμ¬μ 곡 λ°μ λ΄μ© μμ κ°λ₯", g_data["reflection"], height=130)
|
| 418 |
|
| 419 |
st.subheader("μ¬ν μ‘°μΉ λ° λͺ¨λν°λ§ κ³ν")
|
| 420 |
ui_monitoring = st.text_area("λͺ¨λν°λ§ κ³ν μμ κ°λ₯", g_data["monitoring"], height=130)
|
| 421 |
|
| 422 |
-
# μμ λ λ΄μ©μΌλ‘ μμ
λΉλ
|
| 423 |
excel_file = make_excel(
|
| 424 |
g_data["data"],
|
| 425 |
ui_consult,
|
|
@@ -433,6 +443,6 @@ if st.session_state.generated_data is not None:
|
|
| 433 |
st.download_button(
|
| 434 |
label="π₯ μκΈμ μλ΄μΌμ§ μμ
λ€μ΄λ‘λ",
|
| 435 |
data=excel_file,
|
| 436 |
-
file_name=f"{g_data['data']['μκΈμ μ±λͺ
']}_{g_data['data']['μλ΄μμ']}_
|
| 437 |
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
| 438 |
-
)
|
|
|
|
| 5 |
from io import BytesIO
|
| 6 |
from datetime import date, time
|
| 7 |
import sqlite3
|
| 8 |
+
import random
|
| 9 |
|
| 10 |
st.set_page_config(page_title="λ°©λ¬Έλͺ©μ μκΈμ μλ΄μΌμ§ μλμμ±κΈ°", layout="wide")
|
| 11 |
|
| 12 |
+
st.title("π λ°©λ¬Έλͺ©μ μκΈμ μλ΄μΌμ§ μλμμ±κΈ° v2")
|
| 13 |
+
st.caption("μλ΄μμ β λ¬Έμ μν© β μμΈ β μ‘°μΉ β κΈμ¬λ°μ β λλ€ ν
νλ¦Ώ κΈ°λ° μμ
λ€μ΄λ‘λ")
|
| 14 |
st.warning("β οΈ **β» λ³Έ μμ±κΈ°λ ν루 2ν μ΄μ© νλ μ νμ΄ μμ΅λλ€.**")
|
| 15 |
|
| 16 |
DB_FILE = "usage.db"
|
|
|
|
| 99 |
"μλ΄μ μλͺ
", "λμμ λλ 보νΈμ μλͺ
"
|
| 100 |
]
|
| 101 |
|
| 102 |
+
# κ³΅λ¨ νκ°μ§νλ₯Ό λ°μνμ¬ μμ /μ₯λΉ λ° λ§μ‘±λ μμ μΆκ°
|
| 103 |
AREA_DATA = {
|
| 104 |
"λͺ©μ κ±°λΆ/νμ‘°λ": {
|
| 105 |
"problems": ["λͺ©μ κ±°λΆ", "νμ κ±°λΆ", "λ¬Όμ λν 곡ν¬μ¬", "νΌλΆ μ μ΄ μλ―Ό", "νΌλ‘κ° νΈμ", "μ€μκΈ° μ리μ λΆμ"],
|
| 106 |
+
"causes": ["μΉλ§€λ‘ μΈν μΈμ§ μ ν", "μΆμμ λ―Όκ°ν¨", "κ³Όκ±° λΆμ μ κ²½ν", "μ 체 λ
ΈμΆ μμΉμ¬", "νΌλΆ 건쑰 λ° κ°λ €μ", "λΉμΌ 컨λμ
μ ν"],
|
| 107 |
+
"actions": ["λ°λ»ν μ€λ΄ μ¨λ(24~26λ) μ μ§", "μΆ©λΆν μ§μ§μ λν λ° λΌν¬ νμ±", "νμλ‘ λͺΈμ κ°μΌ μ± μμ κ° μ 곡", "μ νΈνλ μμ
/νκ²½ μ‘°μ±", "κ°νΈμ¬ λ° λ³΄νΈμ νΉμ΄μ¬ν 곡μ "],
|
| 108 |
},
|
| 109 |
"νΌλΆ μν/λ°μ /μμ²": {
|
| 110 |
+
"problems": ["νΌλΆ 건쑰 μ¬ν", "λλΆ/미골 λ°μ ", "κ°λ €μμ¦(μμμ¦) νΈμ", "νΌλΆ μ§λ¬΄λ¦/λ°±μ ", "λ―ΈμΈ μ°°κ³Όμ λ°κ²¬", "κ°μ§ μ¬ν"],
|
| 111 |
+
"causes": ["νμ‘ μν μ ν", "μ₯μκ° μμ/μ’μ μν", "κΈ°μ κ· μ₯κΈ° μ°©μ©μΌλ‘ μΈν μ΅κΈ°", "μλΆ μμ·¨ λΆμ‘±", "λ
Ένλ‘ μΈν νΌλΆ μ₯λ²½ μ½ν"],
|
| 112 |
+
"actions": ["λͺ©μ μ§ν 보μ΅μ μΆ©λΆν λν¬", "λ§μ°° λ°©μ§ λ° κ°λ²Όμ΄ λ§μ¬μ§ μ 곡", "νΌλΆ μν μ μ¬ν κ΄μ°° λ° κΈμ¬μ 곡기λ‘μ§ κΈ°μ¬", "κ°νΈμ¬/보νΈμ μ¦κ° λ³΄κ³ ", "κΈ°μ κ· κ΅μ²΄ μ£ΌκΈ° λ¨μΆ μλ΄"],
|
| 113 |
},
|
| 114 |
"체μ¨/λ°μ΄ν λ³ν": {
|
| 115 |
+
"problems": ["λͺ©μ μ ν νμ μμΉ/μ ν", "λͺ©μ ν νκΈ°/μ€ν νΈμ", "λ―Έμ΄ λ°μ", "κΈ°λ¦½μ± μ΄μ§λ¬μ νΈμ", "κΈκ²©ν νΌλ‘κ°"],
|
| 116 |
+
"causes": ["μ€λ΄μΈ(μμ€) μ¨λμ°¨", "λͺ©μ μ€ μλΆ μμ€", "체λ ₯ μλͺ¨ κ³Όλ€", "κ³Όλν μ¨μ μκ·Ή", "κΈ°μ μ§ν(κ³ νμ/λΉλ¨ λ±) μν₯"],
|
| 117 |
+
"actions": ["λͺ©μ μκ° λ¨μΆ(20~30λΆ μ΄λ΄λ‘ μ‘°μ )", "λͺ©μ μ ν λ°λ»ν μλΆ μμ·¨ μ 곡", "μλΉμ€ μ ν 체μ¨/νμ λ± λ°μ΄ν μμ μΈ‘μ ", "κ°νΈμ¬ λ³΄κ³ λ° μκΈμ‘°μΉ μ²΄κ³ λκΈ°", "보νΈμμκ² ν΄μ κΆκ³ μλ΄"],
|
| 118 |
},
|
| 119 |
"λμ/μ΄λ λΆμμ ": {
|
| 120 |
+
"problems": ["λ―Έλλ¬μ΄ λ°λ₯μμ 보ν μν", "μμ‘° μΆμ
μ κ· ν μμ€", "λΆμΆ μ΄λ μ μ²΄μ€ μ λ¦Ό", "ν μ²΄μ΄ μ΄λ/νΈλμ€νΌ μ λΆμμ ", "기립 μ λ€λ¦¬ ν νλ¦Ό"],
|
| 121 |
+
"causes": ["νμ§ κ·Όλ ₯ μ ν λ° νΈλ§λΉ", "λ°λ₯ λ¬ΌκΈ° λ° λΉλλ¬Ό μλ₯", "μΈμ§ κΈ°λ₯ μ νλ‘ μΈν μ§μ λΆμ΄ν", "μ΄λ 보쑰기ꡬ λ―ΈλΉ λ° κ³΅κ° νμ"],
|
| 122 |
+
"actions": ["λ―ΈλλΌ λ°©μ§ λ§€νΈ/μ€ν°μ»€ νμ μ¬μ©", "μμ€ λ΄ μμ μμ‘μ΄ μμΉ νμ
λ° λ³΄μ‘°", "λͺ©μ μμ μμ μ¬μ© μμΉ μ€μ", "μ΄λ/μ΄μΉ μ 2μΈ 1μ‘° νμ‘° μ²΄κ³ κ°ν", "μκΈμ λ° λ³΄νΈμ λμ λμ μλ°© μμΉ μ¬κ΅μ‘"],
|
| 123 |
},
|
| 124 |
"μμ/μΌλ° 건κ°μν": {
|
| 125 |
+
"problems": ["λνΌ κ°μ§/λΉλ¬ μ¬ν", "μλ°ν± μμ κ΄λ¦¬ νμ", "λ°°μ€λ¬Ό μ€μΌ λ°©μΉ", "κ΅¬κ° μμ λΆλ", "체취/μμ°½ λμ μ¬ν"],
|
| 126 |
+
"causes": ["κ°μΈμμ μκ° κ΄λ¦¬ λ₯λ ₯ μμ€", "μΈμ§ μ νλ‘ μΈν μμ μΌμ΄ κ±°λΆ", "κ΄μ κ΅¬μΆ λ± μ 체 λμ λ²μ μ ν"],
|
| 127 |
+
"actions": ["λνΌ μ μ© μ΄νΈλ‘ μ§μ€ μΈμ ", "λͺ©μ ν μλ°ν± μμ νκ² μ 리", "λ°°μ€λ¬Ό μ€μΌ λΆμ λΆλΆ μΈμ κ°μ΄λ μ μ©", "보νΈμμκ² κ΅¬κ° μΌμ΄ λ³ν κΆκ³ ", "μ²κ²° μ©ν μ νΈλ μ‘°μ¬ λ° λ°μ"],
|
| 128 |
+
},
|
| 129 |
+
"νκ²½/μ°¨λ/μ₯λΉ μμ ": {
|
| 130 |
+
"problems": ["λͺ©μ μ°¨λ λ΄ μ¨λ μ‘°μ λ―Έν‘", "리ννΈ νμΉ μ κ·Ήλ λΆμκ°", "μ°¨λ λ΄ μμ μ½ν¨/μ¨μ λΆμ‘±", "μ΄λμ μμ‘° μμ μν μ°λ €"],
|
| 131 |
+
"causes": ["λμ κΈ° κΈ°μ¨ κΈκ°ν", "κΈ°κ³ μλ μμμ λν 곡ν¬", "μ°¨λ λ
Ένν λ° μ κ² μ§μ°", "보νΈμμ κ°μΌ/μμ λ―Όκ°λ μ¦κ°"],
|
| 132 |
+
"actions": ["μ°¨λ λ°©λ¬Έ μ νν°/μ¨μ μ¬μ κ°λ", "리ννΈ μ΄μ© μ λ°μ°©νμ¬ μμ¬ μν€κΈ°", "μ κΈ°μ μΈ μ°¨λ/μ₯λΉ μ μ§λ³΄μ μ κ²", "보νΈμμκ² λͺ©μμ‘° μλ
μΌμ§ νμΈ λ° μ² μ ν μλ
μλ΄"],
|
| 133 |
+
},
|
| 134 |
+
"μλΉμ€ λ§μ‘±λ λ° μꡬμ¬ν": {
|
| 135 |
+
"problems": ["μλΉμ€ μ 곡 μκ° λ³κ²½ μμ²", "νΉμ μμ보νΈμ¬ μ νΈ/κΈ°νΌ", "μμ보νΈμ¬μμ μμ¬μν΅ λΆμ¬", "μλΉμ€ μκ°(μμμκ°) λΆμ‘± νΈμ"],
|
| 136 |
+
"causes": ["보νΈμ κ°μΈ μΌμ λ³κ²½", "μκΈμμ μ’
μ¬μ κ° μ±ν₯ μ°¨μ΄", "μκΈμ μ²κ° μ ν/μΉλ§€", "μ€μ¦λλ‘ μΈν μΌμ΄ μκ° μ§μ°"],
|
| 137 |
+
"actions": ["μΌν° μΌμ νμΈ ν μ‘°μ¨ κ°λ₯ μ¬λΆ μ¦μ μλ΄", "μμ κ΅μ²΄ λ©΄λ΄ λ° λ΄λΆ νμ μ§ν", "ν° λͺ©μλ¦¬λ‘ μ²μ²ν μ€λͺ
νλλ‘ μ’
μ¬μ μ¬κ΅μ‘", "νλ λ΄μμ μ΅λν ν¨μ¨μ μ΄κ³ κΌΌκΌΌν μ§ν μ½μ"],
|
| 138 |
},
|
| 139 |
}
|
| 140 |
|
|
|
|
| 143 |
cause_text = ", ".join(causes)
|
| 144 |
action_text = ", ".join(actions)
|
| 145 |
|
| 146 |
+
# 1. μλ΄λ΄μ© (3κ°μ§ λλ€ ν
νλ¦Ώ)
|
| 147 |
+
consult_templates = [
|
| 148 |
+
f"μκΈμλ λ§ {age}μΈ, μ₯κΈ°μμ {grade}μ΄λ©° νμ¬ μ΄λμνλ '{mobility}', μΈμ§μνλ '{cognition}'μΌλ‘ νμΈλ¨.\n\nλ°©λ¬Έλͺ©μ κΈμ¬μ 곡 κ³Όμ λ° {area} κ΄λ ¨ μ κΈ°/μμ μλ΄μ μ€μν κ²°κ³Ό, μ£Όμ λ¬Έμ μν©μΌλ‘ {problem_text} νΉμ΄μ¬νμ΄ νμΈλ¨. λͺ©μ μλΉμ€ μ§ν μ μκΈμμ νμ¬ μ 체μ κ°λ λ²μμ μΈμ§, μ¬λ¦¬ μνμ λ°λ₯Έ μΈλ°ν κ΄μ°°μ΄ μλ§λ¨.\n\nμλ΄ κ³Όμ μμ μ λ¬Έμ μ μ£Όλ μμΈμΌλ‘ {cause_text} λ±μ΄ μμ©ν κ°λ₯μ±μ 보νΈμ λ° μ’
μ¬μμ 곡μ νμμΌλ©°, μλΉμ€ μ€ κΈκ²©ν 컨λμ
μ ν λ°©μ§μ μ€μ μ λκΈ°λ‘ ν¨.",
|
| 149 |
+
f"λμμ(λ§ {age}μΈ, μ₯κΈ°μμ {grade}, μ΄λμν: {mobility}, μΈμ§μν: {cognition})μ μ΅κ·Ό λ°©λ¬Έλͺ©μ μλΉμ€ μ΄μ© μ€νμ {area} μμμ λν΄ μ¬μΈ΅ μλ΄μ μ§νν¨.\n\nμ΅κ·Ό κΈμ¬μ 곡 μ€ {problem_text} μμ£Όμ λ¬Έμ μ λ° μκ΅¬κ° μ§μμ μΌλ‘ κ΄μ°°λ¨. μ£Όμ μμΈμΌλ‘λ {cause_text} λ±μ΄ μ§λͺ©λμμΌλ©°, μκΈμμ μμ ν보μ μλΉμ€ μ§ ν₯μμ μν λμ±
λ° νκ²½ κ°μ μ΄ νμν μν©μ.",
|
| 150 |
+
f"λ³Έ μκΈμ(λ§ {age}μΈ, {grade})λ νμ {mobility} μμ€μ μ 체기λ₯μ 보μ΄λ©° μΈμ§ μνλ {cognition}μ. κΈμΌ {area} κ΄λ ¨νμ¬ μκΈμ/보νΈμμ λ©΄λ΄μ μ§νν κ²°κ³Ό {problem_text} λ±μ μ λ‘μ¬νμ΄ λ°μνκ³ μμ.\n\nμ΄λ {cause_text}μ κΈ°μΈν κ²μΌλ‘ νμ
λλ©°, λ°©λ¬Έλͺ©μ μ€ λ°μν μ μλ μμ μ¬κ³ λ κ°μΌ, 체λ ₯ μ νλ₯Ό μλ°©νκΈ° μν΄ λͺ©μ μ ν μΈμ¬ν μν νμ
μ΄ νμμ μ."
|
| 151 |
+
]
|
|
|
|
| 152 |
|
| 153 |
+
# 2. μ‘°μΉλ΄μ© (3κ°μ§ λλ€ ν
νλ¦Ώ)
|
| 154 |
+
action_templates = [
|
| 155 |
+
f"λ°©λ¬Έλͺ©μ μ§ν μ μκΈμμ λΉμΌ μꡬμ 컨λμ
μ λ§μΆμ΄ {action_text} λ±μ μ‘°μΉλ₯Ό μ¦μ μ€μ(λλ κ³ν)νκΈ°λ‘ ν¨. λͺ©μ μμ보νΈμ¬ 2μΈμκ² μΈλΆ μ‘°μΉ λ° μμ μμΉμ μ ννμ¬ νκ° κΈ°μ€μ λΆν©νλ μμ ν κΈμ¬ μ κ³΅μ΄ μ΄λ£¨μ΄μ§λλ‘ μ‘°μΉν¨.",
|
| 156 |
+
f"ν΄κ²° λ°©μμΌλ‘ {action_text} μ‘°μΉλ₯Ό νμ₯μ μ μ©νκΈ°λ‘ ν¨. λ΄λΉ μμ보νΈμ¬μκ² ν΄λΉ λ΄μ©μ μ λ¬νμ¬ μλΉμ€ μ μ°¨μ λ°μν λ‘ κ΅μ‘νμμΌλ©°, ν₯ν λμ/νΌλΆμ΄μ/κ±°λΆ λ± νΉμ΄μ¬ν μ§μ μ λ°©λ¬Έκ°νΈ λ± ν μ§μκ³Όμ μ°κ³ λ° μ 보 곡μ λ₯Ό κ°ννκΈ°λ‘ ν¨.",
|
| 157 |
+
f"μλ΄ κ²°κ³Όμ λ°λΌ {action_text} λ± μκΈμ λ§μΆ€ν μ‘°μΉλ₯Ό μ 곡νκΈ°λ‘ κ²°μ ν¨. μΌν° λ΄ νμλ₯Ό ν΅ν΄ λ³κ²½λ μλΉμ€ μ 곡 μ§μΉ¨μ λͺ©μ μ°¨λ λ° λν μ§μμκ² κ³΅μ§νμμΌλ©°, μ¦κ°μ μΈ νμ₯ μ μ©μ ν΅ν΄ 보νΈμμ λΆμκ°μ ν΄μμν€κ³ μ ν¨."
|
| 158 |
+
]
|
| 159 |
|
| 160 |
+
# 3. κΈμ¬μ 곡 λ°μλ΄μ© (3κ°μ§ λλ€ ν
νλ¦Ώ)
|
| 161 |
+
reflection_templates = [
|
| 162 |
+
"μλ΄μ ν΅ν΄ νμΈλ μꡬμ¬ν λ° μ‘°μΉ κ³νμ μ₯κΈ°μμ κΈμ¬μ 곡 κ³Όμ μ μ κ·Ή λ°μν¨. μ¦κ° λ°μ κ°λ₯ν μΈλΆ μ¬νμ λ€μ λ°©λ¬Έλͺ©μ μΌμ λΆν° λ°λ‘ μ μ©νλ©°, νμμ μ₯κΈ°μμκΈ°κ΄ νκ° κ³ μ κΈ°μ€μ λ§μΆμ΄ 'κΈμ¬μ 곡κ³νμ' λ³κ²½ λ° λ³΄μμ κ²ν νκΈ°λ‘ ν¨.",
|
| 163 |
+
"κΈμΌ νμ
λ μκΈμμ μꡬ λ° λ¬Έμ μν©μ λ€μ λ¬ κΈμ¬μ 곡μΌμ λ° μλΉμ€ λ΄μ©μ λ°μν¨. μ’
μ¬μ μΈμμΈκ³ λμ₯μ κΈ°λ‘νμ¬ λͺ©μ μμμ΄ λ³λλλλΌλ μ°μμ μΈ μΌμ΄κ° μ΄λ£¨μ΄μ§ μ μλλ‘ μ‘°μΉν¨.",
|
| 164 |
+
"μκΈμμ μμ λ° μμ μ¦μ§μ μν΄ μλ΄ κ²°κ³Όλ₯Ό νν κΈμ¬μ 곡κ³νμ λ°μν¨. μν λ³νκ° λλ ·ν κ²½μ° κΈμ¬μ 곡κ³νμλ₯Ό μ¬μμ±νμ¬ μκΈμ λ° λ³΄νΈμμκ² μ¬κ΅λΆ/λμλ₯Ό μ»μ μμ μ."
|
| 165 |
+
]
|
| 166 |
|
| 167 |
+
# 4. λͺ¨λν°λ§ κ³ν (3κ°μ§ λλ€ ν
νλ¦Ώ)
|
| 168 |
+
monitoring_templates = [
|
| 169 |
+
"λͺ©μ λ΄λΉ μμ보νΈμ¬μ μλΉμ€ μ 곡 κΈ°λ‘μ§μ νΉμ΄μ¬ν νΌλλ°±μ λ§€μ£Ό κ²ν ν μμ μ. λ€μ μλ΄ μ ν΄λΉ λ¬Έμ μν©μ΄ μΌλ§λ κ²½κ°λμλμ§, μ‘°μΉμ ν¨κ³Όμ±μ μ΄λ νμ§ νκ°νμ¬ μ§μμ μ΄κ³ μΎμ ν λͺ©μ κ΄λ¦¬λ₯Ό μ€μνκΈ°λ‘ ν¨.",
|
| 170 |
+
"μ‘°μΉμ¬ν μ μ© ν 1~2μ£Όκ° λ°©λ¬Έλͺ©μ λͺ¨λν°λ§μ μ§μ€μ μΌλ‘ μ€μν¨. μκΈμμ νμ λ³ν, λ°μ΄ν, νΌλΆ μν κ°μ μ¬λΆλ₯Ό μ μ λλ λ°©λ¬Έμ ν΅ν΄ νμΈνκ³ λ³΄νΈμμ μ£ΌκΈ°μ μΌλ‘ μν΅ν κ³νμ.",
|
| 171 |
+
"μκΈμμ λͺ©μ ν λ§μ‘±λ λ° μν λ³νλ₯Ό μμ보νΈμ¬λ₯Ό ν΅ν΄ λ§€ν μ λ¬λ°κΈ°λ‘ ν¨. μΆκ°μ μΈ λ¬Έμ λ°μ μ μΌν°μ₯ λ° μ¬ν볡μ§μ¬κ° μ¦κ° κ°μ
νμ¬ μμΈμ λΆμνκ³ λμμ μ¬μ립νκΈ°λ‘ ν¨."
|
| 172 |
+
]
|
| 173 |
|
| 174 |
+
return random.choice(consult_templates), random.choice(action_templates), random.choice(reflection_templates), random.choice(monitoring_templates)
|
| 175 |
|
| 176 |
def make_excel(data, consult, action, reflection, monitoring, checked_items, missing_items):
|
| 177 |
wb = Workbook()
|
|
|
|
| 196 |
|
| 197 |
info_rows = [
|
| 198 |
("μκΈμ μ±λͺ
", data["μκΈμ μ±λͺ
"], "μλ
μμΌ", data["μλ
μμΌ"], "μ±λ³", data["μ±λ³"]),
|
| 199 |
+
("λμ΄", f"λ§ {data['λμ΄']}μΈ", "μ₯κΈ°μμλ±κΈ", data["μ₯κΈ°μμ λ±κΈ"], "κ³μ½/μμμΌ", str(data["μμμΌ"])),
|
| 200 |
("λ³ΈμΈλΆλ΄λ₯ ", data["λ³ΈμΈλΆλ΄λ₯ "], "μλ΄μΌμ", str(data["μλ΄μΌμ"]), "μλ΄μκ°", str(data["μλ΄μκ°"])),
|
| 201 |
("μλ΄κ΅¬λΆ", data["μλ΄κ΅¬λΆ"], "μλ΄μ₯μ", data["μλ΄μ₯μ"], "μλ΄λ°©λ²", data["μλ΄λ°©λ²"]),
|
| 202 |
("μλ΄λμμ", data["μλ΄λμμ"], "κ΄κ³", data["κ΄κ³"], "λμμ", data["λμμ"]),
|
|
|
|
| 222 |
current_row += 1
|
| 223 |
|
| 224 |
sections = [
|
| 225 |
+
("μλ΄ λ΄μ© (μκΈμ μν λ³ν λ° λ¬Έμ μν©/μμΈ λΆμ)", consult, 3),
|
| 226 |
+
("μ‘°μΉ λ΄μ© λ° μ 곡λ μ 보", action, 3),
|
| 227 |
+
("μ₯κΈ°μμ κΈμ¬μ 곡κ³ν λ°μ λ΄μ©", reflection, 3),
|
| 228 |
("μ¬ν μ‘°μΉ λ° λͺ¨λν°λ§ κ³ν", monitoring, 3),
|
| 229 |
]
|
| 230 |
|
|
|
|
| 233 |
ws.cell(current_row, 1).value = title
|
| 234 |
ws.cell(current_row, 1).fill = header_fill
|
| 235 |
ws.cell(current_row, 1).font = Font(bold=True)
|
| 236 |
+
ws.cell(current_row, 1).alignment = Alignment(horizontal="center", vertical="center")
|
| 237 |
current_row += 1
|
| 238 |
|
| 239 |
ws.merge_cells(start_row=current_row, start_column=1, end_row=current_row + height - 1, end_column=9)
|
| 240 |
ws.cell(current_row, 1).value = text
|
| 241 |
ws.cell(current_row, 1).alignment = Alignment(horizontal="left", vertical="top", wrap_text=True)
|
| 242 |
|
|
|
|
| 243 |
lines = len(text) // 65 + 1 + text.count('\n') if text else 1
|
| 244 |
total_height = max(72, lines * 20 + 10)
|
| 245 |
single_row_height = total_height / height
|
|
|
|
| 252 |
ws.merge_cells(start_row=current_row, start_column=4, end_row=current_row, end_column=6)
|
| 253 |
ws.merge_cells(start_row=current_row, start_column=7, end_row=current_row, end_column=9)
|
| 254 |
|
| 255 |
+
ws.cell(current_row, 1).value = "κΈ°κ΄ λ΄λΉμ μλͺ
"
|
| 256 |
ws.cell(current_row, 4).value = f"{data['λ΄λΉμ']} (μλͺ
)"
|
| 257 |
ws.cell(current_row, 7).value = "λμμ/보νΈμ (μλͺ
)"
|
| 258 |
ws.cell(current_row, 1).fill = header_fill
|
|
|
|
| 301 |
age = st.number_input("λμ΄", min_value=60, max_value=110, value=81)
|
| 302 |
|
| 303 |
with col2:
|
| 304 |
+
grade = st.selectbox("μ₯κΈ°μμ λ±κΈ", ["1λ±κΈ", "2λ±κΈ", "3λ±κΈ", "4λ±κΈ", "5λ±κΈ", "μΈμ§μ§μλ±κΈ"])
|
| 305 |
admission_date = st.date_input("κ³μ½μΌ/μμμΌ", date.today())
|
| 306 |
copay = st.selectbox("λ³ΈμΈλΆλ΄λ₯ ", ["15%", "0%", "6%", "9%", "12%", "20%"])
|
| 307 |
consult_date = st.date_input("μλ΄μΌμ", date.today())
|
| 308 |
|
| 309 |
with col3:
|
| 310 |
consult_time = st.time_input("μλ΄μκ°", time(14, 0))
|
| 311 |
+
consult_type = st.selectbox("μλ΄ κ΅¬λΆ", ["μ κΈ° μλ΄", "μμ μλ΄", "μ κ· κ³μ½ μλ΄", "보νΈμ μμ² μλ΄", "λΆλ§ μ²λ¦¬ μλ΄"])
|
| 312 |
place = st.selectbox("μλ΄ μ₯μ", ["μκΈμ μν", "μΌν° μ¬λ¬΄μ€", "μ μ μλ΄", "κΈ°ν"])
|
| 313 |
+
method = st.selectbox("μλ΄ λ°©λ²", ["λλ©΄ λ©΄λ΄", "μ μ /μ ν μλ΄", "보νΈμ μ± μλ¦Όμ₯", "κΈ°ν"])
|
| 314 |
target = st.text_input("μλ΄ λμμ μ±λͺ
", "μλ
")
|
| 315 |
|
| 316 |
col4, col5, col6 = st.columns(3)
|
| 317 |
|
| 318 |
with col4:
|
| 319 |
+
relation = st.selectbox("μλ΄μμμ κ΄κ³", ["λΈ", "μλ€", "λ³ΈμΈ", "λ°°μ°μ", "λ©°λ리", "μ¬μ", "κΈ°ν 보νΈμ"])
|
| 320 |
+
staff_position = st.selectbox("κΈ°κ΄ λ΄λΉμ μ§μ±
", ["μ¬ν볡μ§μ¬", "λ°©λ¬Έκ°νΈμ¬", "μμ보νΈμ¬", "μμ€μ₯"])
|
| 321 |
staff_name = st.text_input("κΈ°κ΄ λ΄λΉμ μ±λͺ
", "μ¬ν볡μ§μ¬")
|
| 322 |
|
| 323 |
with col5:
|
|
|
|
| 329 |
bath_type = st.selectbox("λͺ©μμ ν", ["λ°©λ¬Έλͺ©μ(μ°¨λλ΄)", "λ°©λ¬Έλͺ©μ(κ°μ λ΄μμ‘°)", "κ°μ λ΄μ€μλμ", "κΈ°ν"])
|
| 330 |
area = st.selectbox("μλ΄μμ μ ν", list(AREA_DATA.keys()))
|
| 331 |
|
| 332 |
+
st.subheader("λ¬Έμ μν© / μμΈ / μ‘°μΉ μ ν (νκ°μ§ν μ°κ³)")
|
| 333 |
|
| 334 |
problems = st.multiselect("λ¬Έμ μν© μ ν", AREA_DATA[area]["problems"], default=AREA_DATA[area]["problems"][:2], key=f"problems_{area}")
|
| 335 |
causes = st.multiselect("μλ΄νκ² λ μμΈ μ ν", AREA_DATA[area]["causes"], default=AREA_DATA[area]["causes"][:2], key=f"causes_{area}")
|
|
|
|
| 348 |
st.error("π¨ μ€λ μ¬μ© κ°λ₯ νμ(2ν)λ₯Ό λͺ¨λ μ¬μ©νμ΅λλ€. μλ‘μ΄ λ¬Έμ μμ±μ λΆκ°νλ©°, μλ κΈ°μ‘΄ μμ±λ λ¬Έμμ μμ λ° λ€μ΄λ‘λλ§ κ°λ₯ν©λλ€.")
|
| 349 |
|
| 350 |
checked_items = []
|
| 351 |
+
st.subheader("νμ κΈ°μ¬νλͺ© 체ν¬λ¦¬μ€νΈ (κ³΅λ¨ νκ°μ§ν κΈ°μ€)")
|
| 352 |
for item in REQUIRED_ITEMS:
|
| 353 |
if st.checkbox(item, value=True, key=f"check_{item}"):
|
| 354 |
checked_items.append(item)
|
|
|
|
| 357 |
score = int((len(checked_items) / len(REQUIRED_ITEMS)) * 100)
|
| 358 |
|
| 359 |
if score == 100:
|
| 360 |
+
st.success(f"μλ΄μΌμ§ μμ±λ: {score}μ / λλ½ νλͺ© μμ (νκ°μ§ν μΆ©μ‘±)")
|
| 361 |
elif score >= 85:
|
| 362 |
st.warning(f"μλ΄μΌμ§ μμ±λ: {score}μ / μΌλΆ νλͺ© νμΈ νμ")
|
| 363 |
else:
|
|
|
|
| 397 |
st.error("μ€λ μ¬μ© κ°λ₯ νμλ₯Ό λͺ¨λ μ¬μ©νμ΅λλ€.")
|
| 398 |
st.stop()
|
| 399 |
|
|
|
|
| 400 |
increase_today_usage(facility, user_id)
|
| 401 |
|
|
|
|
| 402 |
gen_consult, gen_action, gen_reflection, gen_monitoring = make_sentence(
|
| 403 |
area, problems, causes, actions, age, grade, mobility, cognition
|
| 404 |
)
|
|
|
|
| 412 |
"checked_items": checked_items,
|
| 413 |
"missing_items": missing_items
|
| 414 |
}
|
| 415 |
+
st.success("π νκ°μ§νμ λ§μΆ μλ΄μΌμ§κ° 무μμ ν
νλ¦ΏμΌλ‘ μμ±λμμ΅λλ€! μλμμ λ΄μ©μ νμΈ λ° μμ ν ν μμ
νμΌμ λ€μ΄λ‘λνμΈμ.")
|
| 416 |
st.rerun()
|
| 417 |
|
|
|
|
| 418 |
if st.session_state.generated_data is not None:
|
| 419 |
g_data = st.session_state.generated_data
|
| 420 |
|
| 421 |
+
st.subheader("μλ΄ λ΄μ© (μκΈμ μν λ³ν λ° λ¬Έμ μν©/μμΈ λΆμ)")
|
| 422 |
ui_consult = st.text_area("μλ΄λ΄μ© μμ κ°λ₯", g_data["consult"], height=220)
|
| 423 |
|
| 424 |
+
st.subheader("μ‘°μΉ λ΄μ© λ° μ 곡λ μ 보")
|
| 425 |
ui_action = st.text_area("μ‘°μΉλ΄μ© μμ κ°λ₯", g_data["action"], height=180)
|
| 426 |
|
| 427 |
+
st.subheader("μ₯κΈ°μμ κΈμ¬μ 곡κ³ν λ°μ λ΄μ©")
|
| 428 |
ui_reflection = st.text_area("κΈμ¬μ 곡 λ°μ λ΄μ© μμ κ°λ₯", g_data["reflection"], height=130)
|
| 429 |
|
| 430 |
st.subheader("μ¬ν μ‘°μΉ λ° λͺ¨λν°λ§ κ³ν")
|
| 431 |
ui_monitoring = st.text_area("λͺ¨λν°λ§ κ³ν μμ κ°λ₯", g_data["monitoring"], height=130)
|
| 432 |
|
|
|
|
| 433 |
excel_file = make_excel(
|
| 434 |
g_data["data"],
|
| 435 |
ui_consult,
|
|
|
|
| 443 |
st.download_button(
|
| 444 |
label="π₯ μκΈμ μλ΄μΌμ§ μμ
λ€μ΄λ‘λ",
|
| 445 |
data=excel_file,
|
| 446 |
+
file_name=f"{g_data['data']['μκΈμ μ±λͺ
']}_{g_data['data']['μλ΄μμ']}_λ°©λ¬Έλͺ©μμλ΄μΌμ§.xlsx",
|
| 447 |
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
| 448 |
+
)
|