o2o-infinith-demo/supporters/scripts/template/planner/procedures.derm.json
Haewon Kam aa5b05227f feat(supporters): 회복 일정 플래너를 템플릿·워커에 통합 (/plan·/en/plan), /recovery·/stay 를 /plan 으로 정리
- 템플릿: Planner.astro, lib/plan.ts·tour.ts, styles/plan.css, planStrings, pages plan·en/plan·404. Base 내비 회복 일정 → /plan, 언어 짝 /plan↔/en/plan, 옛 주소 리다이렉트(vercel.json), 사이트맵
- 워커 planner 단계(recovery 다음): scripts/build_planner_data.mjs 가 업종별 기본 규칙표(scripts/template/planner/procedures.plastic|derm.json)에 병원 시술 페이지 원문(recoveryNotes)을 matchKeywords 로 붙이고, 장소는 briefs/<clinic>/planner.places.json(큐레이션) 또는 범용 기본표(관광공사 기준 좌표)로 만든다
- 브리프: viewclinic·oracle 큐레이션 장소. 빈 템플릿(관광 데이터 없음)도 빌드·검증 통과(plan.test 14건)
- 이전 세션의 미커밋 작업(피부과 수집·OCR·게이트·언어 스위치, stay 페이지 제거)도 이 커밋에 함께 들어감. docs/prd 변경은 제외

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-11 11:27:59 +09:00

843 lines
20 KiB
JSON

{
"_comment": "피부과 기본 규칙표 (오라클피부과 샘플에서 정리). 워커 planner 단계가 병원 시술 페이지 원문(recoveryNotes.json)을 matchKeywords 로 시술에 붙여 병원별 procedures.json 을 만든다. 값은 전부 provisional(병원 확인 전).",
"clinicSources": [],
"levels": [
{
"level": 0,
"label": {
"ko": "실내 안정",
"en": "Rest indoors"
},
"desc": {
"ko": "병실이나 호텔에서 쉬는 날입니다. 필요한 것은 배달과 룸서비스로 해결합니다.",
"en": "Rest at the hospital or hotel. Use delivery and room service."
}
},
{
"level": 1,
"label": {
"ko": "근거리 외출",
"en": "Short walks"
},
"desc": {
"ko": "호텔 반경 500m 안에서 짧게 다녀옵니다. 도보 10분 이내.",
"en": "Short trips within 500 m of your hotel. Up to a 10-minute walk."
}
},
{
"level": 2,
"label": {
"ko": "반나절 외출",
"en": "Half-day outing"
},
"desc": {
"ko": "택시로 반경 3km 안 쇼핑·식사·가벼운 관광이 가능합니다.",
"en": "Shopping, dining and light sightseeing within 3 km by taxi."
}
},
{
"level": 3,
"label": {
"ko": "자유 외출",
"en": "Full day out"
},
"desc": {
"ko": "하루 단위 외출이 가능합니다. 시내 관광, 행사, 인파가 있는 곳도 담당 원장 안내 안에서 가능합니다.",
"en": "Full-day outings. City sightseeing and events, within your surgeon's guidance."
}
}
],
"diets": {
"liquid": {
"label": {
"ko": "유동식",
"en": "Liquid diet"
},
"desc": {
"ko": "건더기 없는 유동식만 드십니다.",
"en": "Liquids only, no solids."
}
},
"soft": {
"label": {
"ko": "부드러운 음식",
"en": "Soft foods"
},
"desc": {
"ko": "건더기가 있어도 부드러운 음식까지 가능합니다.",
"en": "Soft foods are fine. Avoid anything chewy or hard."
}
},
"mild": {
"label": {
"ko": "자극 없는 일반식",
"en": "Regular, non-spicy"
},
"desc": {
"ko": "맵고 짜거나 딱딱한 음식은 피합니다.",
"en": "Regular meals. Avoid spicy, salty or hard foods."
}
},
"normal": {
"label": {
"ko": "일반식",
"en": "Regular diet"
},
"desc": {
"ko": "식사 제한이 없습니다.",
"en": "No dietary restrictions."
}
}
},
"constraints": {
"no-sun": {
"ko": "직사광선을 피하고 자외선차단제를 바릅니다. 모자와 선글라스를 챙기세요.",
"en": "Avoid direct sun and use sunscreen. Bring a hat and sunglasses."
},
"no-makeup-1d": {
"ko": "화장은 담당 원장 안내에 따라 다음 날부터 합니다.",
"en": "Makeup from the next day, per your doctor's guidance."
},
"no-makeup-3d": {
"ko": "화장은 딱지가 자리 잡을 때까지 며칠 미룹니다. 시점은 담당 원장에게 확인하세요.",
"en": "Hold off makeup for a few days until scabs settle. Confirm timing with your doctor."
},
"no-massage-1d": {
"ko": "시술 부위를 문지르거나 누르지 않습니다.",
"en": "Do not rub or press the treated area."
},
"no-massage-2w": {
"ko": "시술 부위 마사지와 강한 압박은 약 2주 피합니다.",
"en": "Avoid massage or firm pressure on the treated area for about 2 weeks."
},
"no-massage-4w": {
"ko": "얼굴 마사지와 강한 압박은 약 4주 피합니다.",
"en": "Avoid facial massage or firm pressure for about 4 weeks."
},
"no-lie-4h": {
"ko": "시술 후 몇 시간은 눕지 않고 고개를 세웁니다.",
"en": "Stay upright for a few hours after the procedure."
},
"no-sauna-3d": {
"ko": "사우나, 찜질방, 격한 운동은 약 3일 피합니다.",
"en": "No sauna, spa or intense exercise for about 3 days."
},
"no-sauna-7d": {
"ko": "사우나, 찜질방, 수영은 약 1주 피합니다.",
"en": "No sauna, spa or swimming for about 1 week."
},
"no-sauna-2w": {
"ko": "사우나, 찜질방, 격한 운동은 약 2주 피합니다.",
"en": "No sauna, spa or intense exercise for about 2 weeks."
},
"no-scrub": {
"ko": "각질 제거와 스크럽은 담당 원장이 허용할 때까지 하지 않습니다.",
"en": "No exfoliation or scrubs until your doctor allows."
},
"no-scratch": {
"ko": "가려워도 긁지 않고 딱지를 떼지 않습니다.",
"en": "Do not scratch or pick at scabs."
},
"no-wide-mouth": {
"ko": "입을 크게 벌리는 동작과 딱딱한 음식은 약 2주 피합니다.",
"en": "Avoid opening the mouth wide and hard foods for about 2 weeks."
},
"sleep-elevated": {
"ko": "머리를 심장보다 높게 하고 정면 자세로 잡니다.",
"en": "Sleep with your head above heart level, facing up."
}
},
"procedures": [
{
"id": "skinbooster",
"label": {
"ko": "물광주사·스킨부스터",
"en": "Skin Booster Injection"
},
"group": {
"ko": "주사",
"en": "Injection"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"note": {
"ko": "실밥 없음",
"en": "No stitches"
},
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 3,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 1,
"status": "provisional"
},
{
"fromDay": 1,
"level": 2,
"status": "provisional"
},
{
"fromDay": 4,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-sun",
"no-makeup-1d"
],
"sources": [],
"matchKeywords": "물광|스킨부스터|리쥬란|쥬베룩|부스터"
},
{
"id": "filler",
"label": {
"ko": "필러",
"en": "Filler"
},
"group": {
"ko": "주사",
"en": "Injection"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 3,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 1,
"status": "provisional"
},
{
"fromDay": 1,
"level": 2,
"status": "provisional"
},
{
"fromDay": 3,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-massage-2w",
"no-sauna-3d",
"no-sun"
],
"sources": [],
"matchKeywords": "필러"
},
{
"id": "botox",
"label": {
"ko": "보톡스",
"en": "Botulinum Toxin"
},
"group": {
"ko": "주사",
"en": "Injection"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 1,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 2,
"status": "provisional"
},
{
"fromDay": 1,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-lie-4h",
"no-massage-1d",
"no-sauna-3d"
],
"sources": [],
"matchKeywords": "보톡스|톡신"
},
{
"id": "toning",
"label": {
"ko": "레이저 토닝·색소",
"en": "Laser Toning / Pigment"
},
"group": {
"ko": "레이저",
"en": "Laser"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 2,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 1,
"status": "provisional"
},
{
"fromDay": 1,
"level": 2,
"status": "provisional"
},
{
"fromDay": 2,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-sun",
"no-scrub",
"no-sauna-3d",
"no-makeup-1d"
],
"sources": [],
"matchKeywords": "토닝|색소|기미|잡티|레이저"
},
{
"id": "lifting",
"label": {
"ko": "에너지 리프팅(고주파·초음파)",
"en": "Energy Lifting (RF / Ultrasound)"
},
"group": {
"ko": "리프팅",
"en": "Lifting"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 2,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 1,
"status": "provisional"
},
{
"fromDay": 1,
"level": 2,
"status": "provisional"
},
{
"fromDay": 3,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-sauna-3d",
"no-sun",
"no-massage-2w"
],
"sources": [],
"matchKeywords": "리프팅|울쎄라|써마지|인모드|슈링크|고주파|초음파|탄력"
},
{
"id": "thread",
"label": {
"ko": "실리프팅",
"en": "Thread Lift"
},
"group": {
"ko": "리프팅",
"en": "Lifting"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "제거 방문 없음",
"en": "No removal visit"
}
},
"earliestDepartureDay": {
"value": 7,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 0,
"status": "provisional"
},
{
"fromDay": 2,
"level": 1,
"status": "provisional"
},
{
"fromDay": 5,
"level": 2,
"status": "provisional"
},
{
"fromDay": 10,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "soft",
"status": "provisional"
},
{
"fromDay": 7,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-wide-mouth",
"no-massage-4w",
"sleep-elevated",
"no-sauna-2w"
],
"sources": [],
"matchKeywords": "실리프팅|실 리프팅|민트"
},
{
"id": "acne",
"label": {
"ko": "여드름·흉터 레이저",
"en": "Acne / Scar Laser"
},
"group": {
"ko": "레이저",
"en": "Laser"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 5,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 0,
"status": "provisional"
},
{
"fromDay": 2,
"level": 1,
"status": "provisional"
},
{
"fromDay": 5,
"level": 2,
"status": "provisional"
},
{
"fromDay": 7,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-sun",
"no-makeup-3d",
"no-scratch",
"no-sauna-7d"
],
"sources": [],
"matchKeywords": "여드름|흉터|프락셀|모공"
},
{
"id": "body",
"label": {
"ko": "비만·바디 시술",
"en": "Body Contouring"
},
"group": {
"ko": "바디",
"en": "Body"
},
"readMore": null,
"preOpDays": {
"value": 1,
"status": "provisional"
},
"hospitalNights": {
"value": 0,
"status": "provisional"
},
"stitchRemovalDay": {
"value": null,
"status": "provisional",
"display": {
"ko": "해당 없음",
"en": "Not applicable"
}
},
"earliestDepartureDay": {
"value": 1,
"status": "provisional"
},
"outingLevels": [
{
"fromDay": 0,
"level": 2,
"status": "provisional"
},
{
"fromDay": 1,
"level": 3,
"status": "provisional"
}
],
"diet": [
{
"fromDay": 0,
"type": "normal",
"status": "provisional"
}
],
"constraints": [
"no-sauna-3d"
],
"sources": [],
"matchKeywords": "비만|바디|지방분해|파워쉐이프|쿨스컬프팅|체형"
}
],
"nationalities": {
"_comment": "무비자 체류 한도(일). 2026-09 기준 확인 필요. null 은 사전 비자 필요. 화면은 항상 대한민국 비자포털 링크와 함께 보여준다.",
"portal": "https://www.visa.go.kr",
"list": [
{
"code": "US",
"label": {
"ko": "미국",
"en": "United States"
},
"visaFreeDays": 90,
"longHaul": true
},
{
"code": "CA",
"label": {
"ko": "캐나다",
"en": "Canada"
},
"visaFreeDays": 180,
"longHaul": true
},
{
"code": "GB",
"label": {
"ko": "영국",
"en": "United Kingdom"
},
"visaFreeDays": 180,
"longHaul": true
},
{
"code": "AU",
"label": {
"ko": "호주",
"en": "Australia"
},
"visaFreeDays": 90,
"longHaul": true
},
{
"code": "JP",
"label": {
"ko": "일본",
"en": "Japan"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "TW",
"label": {
"ko": "대만",
"en": "Taiwan"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "HK",
"label": {
"ko": "홍콩",
"en": "Hong Kong"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "SG",
"label": {
"ko": "싱가포르",
"en": "Singapore"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "TH",
"label": {
"ko": "태국",
"en": "Thailand"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "MY",
"label": {
"ko": "말레이시아",
"en": "Malaysia"
},
"visaFreeDays": 90,
"longHaul": false
},
{
"code": "AE",
"label": {
"ko": "아랍에미리트",
"en": "United Arab Emirates"
},
"visaFreeDays": 90,
"longHaul": true
},
{
"code": "RU",
"label": {
"ko": "러시아",
"en": "Russia"
},
"visaFreeDays": 60,
"longHaul": true
},
{
"code": "KZ",
"label": {
"ko": "카자흐스탄",
"en": "Kazakhstan"
},
"visaFreeDays": 30,
"longHaul": true
},
{
"code": "CN",
"label": {
"ko": "중국",
"en": "China"
},
"visaFreeDays": null,
"longHaul": false
},
{
"code": "VN",
"label": {
"ko": "베트남",
"en": "Vietnam"
},
"visaFreeDays": null,
"longHaul": false
},
{
"code": "ID",
"label": {
"ko": "인도네시아",
"en": "Indonesia"
},
"visaFreeDays": null,
"longHaul": false
},
{
"code": "PH",
"label": {
"ko": "필리핀",
"en": "Philippines"
},
"visaFreeDays": null,
"longHaul": false
},
{
"code": "MN",
"label": {
"ko": "몽골",
"en": "Mongolia"
},
"visaFreeDays": null,
"longHaul": false
},
{
"code": "OTHER",
"label": {
"ko": "그 외",
"en": "Other"
},
"visaFreeDays": null,
"longHaul": true
}
]
}
}