// screens/recommend.jsx — 시술 추천 (Primary/Secondary, 3 옵션) + Package bundling function RecommendScreen({ persona, setRoute }) { const Icons = window.Icons; const [mode, setMode] = React.useState("treatment"); // treatment | package const [selectedTx, setSelectedTx] = React.useState("rf-microneedling"); const [scriptOpen, setScriptOpen] = React.useState(null); const [activePkg, setActivePkg] = React.useState("pkg-comprehensive"); const tx = TREATMENTS.find(t => t.id === selectedTx) || TREATMENTS[0]; const primary = TREATMENTS.filter(t => t.tier === "primary"); const secondary = TREATMENTS.filter(t => t.tier === "secondary"); const pkg = PACKAGES.find(p => p.id === activePkg); return (
05 · 시술 추천 · 패키지

개인화 시술 — Primary 2건 · Secondary 2건 추천

환자 배경, 진단 결과, 예산·다운타임 조건과 유사 환자 cohort 데이터를 결합하여 최적 시술 조합과 패키지 옵션을 도출했습니다. AI 추천은 의사 검토 후 최종 확정됩니다.

{mode === "treatment" ? (
{/* LEFT — Treatment list */}
Primary 추천 · 핵심 시술
{primary.map((t, i) => setSelectedTx(t.id)} onScript={() => setScriptOpen(scriptOpen === t.id ? null : t.id)} scriptOpen={scriptOpen === t.id} persona={persona} />)}
Secondary · 보조 시술
{secondary.map((t, i) => setSelectedTx(t.id)} onScript={() => setScriptOpen(scriptOpen === t.id ? null : t.id)} scriptOpen={scriptOpen === t.id} persona={persona} />)}
{/* RIGHT — Detail + sessions */}
{tx.tier === "primary" ? "Primary" : "Secondary"} {tx.targetConcern.join(" · ")}

{tx.name}

{tx.category}
회차 옵션
{tx.sessions.map((s, i) => (
{s.count} 회 패키지 {s.badge && {s.badge}}
{Math.round(s.count * 1.5)}주 · 회당 ₩{Math.round(s.price / s.count / 1000)}K
₩{(s.price/10000).toFixed(0)}만
₩{(s.original/10000).toFixed(0)}만
))}
AI 근거 (Evidence)
{tx.aiEvidence.studies}
레퍼런스 연구
{tx.aiEvidence.improvement}
평균 개선 폭
{tx.aiEvidence.cohort}
6개월 추적
) : ( // PACKAGE MODE
{PACKAGES.map((p, i) => ( setActivePkg(p.id)} style={{ cursor: "pointer", borderColor: activePkg === p.id ? "var(--ink-1)" : "var(--line-hair)", borderWidth: activePkg === p.id ? 1.5 : 1, boxShadow: activePkg === p.id ? "0 8px 24px rgba(15,15,17,0.08)" : "var(--shadow-card)", position: "relative", }}> {p.recommended && ( AI 권장 )} {p.tier}

{p.name}

{p.targets.join(" · ")}
₩{(p.price / 10000).toFixed(0)}만 ₩{(p.original / 10000).toFixed(0)}만 -{p.discount}%
{p.sessions}회 · {p.duration} · 회당 평균 ₩{Math.round(p.price / p.sessions / 10000)}만
구성
{p.items.map((item, j) => (
{item}
))}
))}
{/* Package detail */}
선택된 패키지

{pkg.name}

예상 일정 (자동 생성)
{/* Timeline */}
{Array.from({ length: pkg.sessions }).map((_, i) => { const pos = (i / (pkg.sessions - 1)) * 100; const recommended = i === 2; return (
W{i * Math.ceil(parseInt(pkg.duration) / pkg.sessions) || 0}
); })}
예상 결과 (6개월)
{pkg.targets.map((t, i) => (
{t} +{[38, 30, 24][i] || 22}%
))}
)}
); } // Treatment card function TxCard({ tx, selected, onSelect, onScript, scriptOpen, persona }) { const Icons = window.Icons; return (

{tx.name}

{tx.category}
{tx.targetConcern.join(" · ")} · {tx.duration} · 다운타임 {tx.downtime}
{tx.fit}%
적합도
{scriptOpen && (
실장용 상담 스크립트
{tx.script}
)}
회당 ₩{(tx.pricePerSession/10000).toFixed(0)}만
); } window.RecommendScreen = RecommendScreen;