/** * 의료관광 연결 기능 타입. * * 데이터 출처는 한국관광공사 TourAPI 다국어(영문) 이며 `scripts/fetch_medical_tourism.py` * 가 수집·필터링해 `src/data/medicalTourism.json` 으로 낸다. * * 원칙: 없는 값을 만들지 않는다. * - rating/reviewCount/openingHours 는 TourAPI 가 주지 않는다. Google Places 승인 후 채운다. * 그때까지 null 이며 화면은 빈 값을 그대로 "미연동"으로 보여준다. * - 수술 전후 식이 적합성은 병원이 입력한 가이드로만 표시한다. 여기서 추론하지 않는다. */ /** 병원 반경 안에서 찾은 장소 한 곳. */ export interface TourPlace { id: string; title: string; address: string; image: string | null; tel: string | null; lat: number | null; lng: number | null; /** 병원으로부터의 거리(m). TourAPI 가 준 값을 그대로 쓰고, 없으면 좌표로 계산한다. */ distanceM: number | null; /** 아래 셋은 TourAPI 미제공. Google Places 승인 전까지 null 이다. */ rating: number | null; reviewCount: number | null; openingHours: string | null; } /** 축제·행사. 영문 서비스는 areacode 가 비어 있어 좌표 거리로 걸렀다. */ export interface TourFestival extends TourPlace { startDate: string | null; endDate: string | null; distanceKm: number; } export type PlaceCategory = | 'stay' | 'restaurant' | 'wellness' | 'attraction' | 'culture' | 'shopping'; export interface MedicalTourismData { places: Record; festivals: TourFestival[]; meta: { source: string; fetchedAt: string; origin: { lat: number; lng: number; label: string; coordSource: string }; radiusByType: Record; festivalRadiusKm: number; counts: Record>; /** 화면에 그대로 표시한다. 한계를 숨기지 않는다. */ limits: string[]; }; } /** * 회복 단계. 며칠째인지는 의학 판단이므로 여기서 정하지 않는다. * 이 단계는 "병원에서 얼마나 멀리 움직이는가"라는 이동 반경 기준이며, * 각 단계가 수술 후 며칠에 해당하는지는 병원이 supporter_inputs 로 입력한다. */ export interface RecoveryStage { id: string; label: string; /** 이 단계에서 권하는 이동 반경(m). 거리로만 정의하며 의학적 판단을 담지 않는다. */ maxDistanceM: number; /** 이 단계에 배치할 장소 범주. */ categories: PlaceCategory[]; note: string; } /** 병원이 입력하는 값. 없으면 화면은 "병원 확인 대기"로 둔다. */ export interface ClinicRecoveryInput { /** supporter_inputs.key = 'recovery' */ recoveryNote?: string; /** supporter_inputs.key = 'diet_guide' */ dietGuide?: { /** 회복 단계별 권장 음식 분류. 병원이 적은 그대로 쓴다. */ recommended?: string; /** 회복 단계별 피해야 할 음식 분류. */ avoid?: string; /** 단계가 며칠씩인지. */ stageDays?: string; }; }