// data.jsx — 우리집사기 단지 데이터
// ⚠ 본 데이터는 공개적으로 알려진 실제 단지명과 최근 1~2년 사이 보도된 시세 기준 샘플입니다.
// 실시간 시세는 백엔드 /api/molit (국토부 RTMS) 연결 후 자동 갱신됩니다.
// 가격 단위: 만원 (12억 = 120,000)

// ─── 차트 데이터 생성 헬퍼 ────────────────────────────
function trail(start, monthsBack, vol = 0.012, trend = 0) {
  const arr = [];
  let v = start;
  for (let i = monthsBack; i >= 0; i--) {
    arr.push({ t: monthLabel(-i), v: Math.round(v) });
    const r = (Math.sin(i * 1.3) * 0.5 + Math.cos(i * 0.7) * 0.3) * vol;
    v = v * (1 + r + trend);
  }
  return arr;
}
function monthLabel(offset) {
  const d = new Date(2026, 4 + offset, 1);
  return ('' + (d.getFullYear() % 100)).padStart(2, '0') + '.' + ('' + (d.getMonth() + 1)).padStart(2, '0');
}
function forecast(last, monthsAhead = 12, drift = 0.005, spread = 0.025) {
  const arr = []; const band = [];
  let v = last;
  for (let i = 1; i <= monthsAhead; i++) {
    v = v * (1 + drift + Math.sin(i * 0.4) * 0.003);
    arr.push({ t: monthLabel(i), v: Math.round(v) });
    const s = spread * Math.sqrt(i / monthsAhead);
    band.push([Math.round(v * (1 - s)), Math.round(v * (1 + s))]);
  }
  return { forecast: arr, band };
}

// ─── 시그널/등급 결정 ────────────────────────────────
function signalOf(score, delta1y) {
  if (score >= 85 && delta1y < 10) return 'BUY';
  if (score >= 78) return 'ACC';
  if (score >= 65) return 'WATCH';
  if (score >= 55) return 'HOLD';
  return 'AVOID';
}
function gradeOf(score) {
  return score >= 85 ? 'S' : score >= 72 ? 'A' : score >= 60 ? 'B' : 'C';
}
function bestMonthOf(score) {
  const m = score >= 85 ? 1 : score >= 75 ? 2 : score >= 65 ? 4 : 6;
  const d = new Date(2026, 4 + m);
  return ('' + (d.getFullYear() % 100)).padStart(2, '0') + '.' + ('' + (d.getMonth() + 1)).padStart(2, '0');
}

// ─── 실제 단지 시드 데이터 ────────────────────────────
// [id, name, region, dong, basePrice(만,84㎡기준), built, units, score, tags]
const SEED = [
  // 강남 3구 + 용산
  ['eunma',           '대치 은마',                 '서울 강남구', '대치동',  260000, 1979, 4424, 91, ['3호선·수인분당선', '대치학원가', '재건축 진행', 'GTX-C']],
  ['raemian-daechi',  '래미안대치팰리스',          '서울 강남구', '대치동',  360000, 2015, 1278, 89, ['3호선', '대치학원가', '대단지', '신축']],
  ['tower-palace',    '타워팰리스',                 '서울 강남구', '도곡동',  330000, 2002, 2598, 85, ['수인분당선·3호선', '도곡지구', '대형평형']],
  ['dh-jay-gaepo',    '디에이치자이 개포',         '서울 강남구', '개포동',  290000, 2021, 1996, 88, ['수인분당선', '개포지구', '신축']],
  ['jay-presidence',  '개포자이프레지던스',         '서울 강남구', '개포동',  310000, 2023, 3375, 90, ['수인분당선', '신축', '한강조망']],
  ['ap-hyundai',      '압구정 현대',                '서울 강남구', '압구정동', 420000, 1976, 6148, 92, ['3호선', '한강조망', '재건축 추진']],
  ['chungdam-jay',    '청담자이',                   '서울 강남구', '청담동',  320000, 2011, 708,  84, ['7호선', '한강조망', '학군 우수']],
  ['raemian-perfecio','래미안퍼펙티지',             '서울 강남구', '대치동',  310000, 2018, 720,  87, ['3호선', '대치학원가']],

  ['reburi-park',     '아크로리버파크',             '서울 서초구', '반포동',  450000, 2016, 1612, 93, ['9호선·신반포역', '한강조망', '서초학군']],
  ['banpo-jay',       '반포자이',                   '서울 서초구', '반포동',  350000, 2008, 3410, 89, ['9호선', '학군 우수', '대단지']],
  ['raemian-firstige','래미안퍼스티지',             '서울 서초구', '반포동',  380000, 2009, 2444, 90, ['9호선·3호선', '학군 우수']],
  ['acro-vista',      '아크로비스타',               '서울 서초구', '잠원동',  340000, 2004, 727,  85, ['3호선·7호선', '신반포지구']],
  ['seocho-pjj',      '서초 푸르지오써밋',          '서울 서초구', '서초동',  240000, 2018, 1234, 82, ['2호선·3호선·신분당선']],

  ['jamsil-elsa',     '잠실 엘스',                  '서울 송파구', '잠실동',  260000, 2008, 5678, 84, ['2호선·8호선', '잠실권', '대단지']],
  ['jamsil-leasen',   '잠실 리센츠',                '서울 송파구', '잠실동',  270000, 2008, 5563, 85, ['2호선·8호선', '잠실권', '대단지']],
  ['jamsil-tj',       '잠실 트리지움',              '서울 송파구', '잠실동',  255000, 2007, 3696, 83, ['2호선·8호선', '대단지', '학군']],
  ['heliocity',       '가락 헬리오시티',            '서울 송파구', '가락동',  220000, 2018, 9510, 85, ['3호선·8호선', '신축', '국내최대 단지']],
  ['olympic-pkc',     '올림픽파크포레온',           '서울 송파구', '둔촌동',  220000, 2024, 12032,86, ['5호선·9호선', '신축', '국내최대']],

  // 용산·성동·마포
  ['hannam-dhill',    '한남 더힐',                  '서울 용산구', '한남동',  700000, 2011, 600,  90, ['6호선', '한강조망', '고급주거']],
  ['nineone-hannam',  '나인원한남',                 '서울 용산구', '한남동',  800000, 2019, 341,  91, ['6호선', '한강조망', '고급주거']],
  ['trimage',         '트리마제',                   '서울 성동구', '성수동',  500000, 2017, 688,  88, ['2호선·수인분당선', '한강조망', '신축']],
  ['galleria-foret',  '갤러리아 포레',              '서울 성동구', '성수동',  700000, 2011, 230,  87, ['2호선', '한강조망', '고급주거']],
  ['seongsu-aei',     '아크로 서울포레스트',        '서울 성동구', '성수동',  470000, 2020, 280,  86, ['2호선·수인분당선', '한강조망', '신축']],
  ['mapo-rmp',        '마포 래미안푸르지오',        '서울 마포구', '아현동',  200000, 2014, 3885, 82, ['2호선·5호선·공항철도', '도심권']],
  ['mapo-prestige',   '마포 프레스티지자이',        '서울 마포구', '염리동',  195000, 2021, 1694, 83, ['2호선', '신축', '도심권']],
  ['mapo-river-park', 'e편한세상마포리버파크',      '서울 마포구', '공덕동',  190000, 2017, 1199, 81, ['5호선·6호선·공항철도', '도심권']],

  // 양천·영등포·동작
  ['mok-7',           '목동신시가지 7단지',         '서울 양천구', '목동',    220000, 1986, 2550, 84, ['5호선', '목동학군', '재건축 추진']],
  ['mok-14',          '목동신시가지 14단지',        '서울 양천구', '신정동',  155000, 1987, 3100, 79, ['2호선', '목동학군', '재건축 추진']],
  ['yeoui-sb',        '여의도 시범',                '서울 영등포구', '여의도동', 260000, 1971, 1584, 86, ['5호선·9호선', '한강조망', '재건축']],
  ['yeoui-samik',     '여의도 삼익',                '서울 영등포구', '여의도동', 250000, 1974, 360,  85, ['5호선·9호선', '재건축']],
  ['heuksoek-h7',     '흑석한강센트레빌',           '서울 동작구', '흑석동',  175000, 2011, 655,  78, ['9호선', '한강뷰', '학군']],

  // 광진·성북·중구
  ['gwj-hillstate',   '광장 힐스테이트',            '서울 광진구', '광장동',  185000, 2012, 856,  78, ['5호선·2호선', '광남학군', '한강조망']],
  ['gilum-rae',       '길음뉴타운 래미안',          '서울 성북구', '길음동',  135000, 2010, 1487, 75, ['4호선', '학원가']],
  ['namsan-style',    '남산 더샵',                  '서울 중구',   '신당동',  175000, 2014, 729,  76, ['2호선·6호선', '도심권']],

  // 강서·마곡
  ['magok-9b',        '마곡엠밸리 9단지',           '서울 강서구', '마곡동',  165000, 2014, 1535, 77, ['9호선·공항철도', '신도시']],
  ['magok-7',         '마곡엠밸리 7단지',           '서울 강서구', '마곡동',  155000, 2014, 1382, 75, ['9호선', '신도시']],

  // 노원·도봉·강북
  ['sanggye-ju',      '상계주공 5단지',             '서울 노원구', '상계동',  85000,  1988, 840,  73, ['4호선·7호선', '재건축 추진']],
  ['junggye-mu',      '중계 무지개',                '서울 노원구', '중계동',  95000,  1991, 1062, 72, ['7호선', '중계학원가']],
  ['changdong-jj',    '창동 주공 3단지',            '서울 도봉구', '창동',    90000,  1990, 2856, 70, ['1호선·4호선', 'GTX-C']],

  // 분당·판교
  ['hansol-5',        '한솔마을 5단지',             '경기 성남시 분당구', '정자동', 85000, 1994, 1156, 82, ['수인분당선', '리모델링 추진', '소형']],
  ['jeongja-ip',      '정자아이파크',               '경기 성남시 분당구', '정자동', 145000, 2003, 1748, 84, ['신분당선·수인분당선', '분당학군']],
  ['jeongdun',        '정든마을 한진6단지',         '경기 성남시 분당구', '정자동', 115000, 1995, 656,  76, ['수인분당선', '분당학군']],
  ['seohyeon-sb',     '서현 시범한신',              '경기 성남시 분당구', '서현동', 130000, 1991, 1162, 78, ['수인분당선', '분당학군']],
  ['sunae-park',      '수내 양지마을 한양',         '경기 성남시 분당구', '수내동', 140000, 1992, 1352, 80, ['수인분당선', '분당학군']],
  ['pangyo-prujio',   '판교 푸르지오월드마크',      '경기 성남시 분당구', '백현동', 230000, 2009, 562,  87, ['신분당선', '판교테크노밸리']],
  ['paeykhyeon-2',    '백현마을 2단지 휴먼시아',    '경기 성남시 분당구', '백현동', 180000, 2009, 772,  84, ['신분당선', '판교']],
  ['samp-vill',       '판교 삼평마을',              '경기 성남시 분당구', '삼평동', 200000, 2009, 1306, 85, ['신분당선', '판교테크노밸리']],

  // 광교·수원
  ['gwanggyo-ho',     '광교호반베르디움',           '경기 수원시 영통구', '이의동', 145000, 2016, 998,  82, ['신분당선', '광교중앙역', '학군']],
  ['gwanggyo-jh',     '자연앤힐스테이트',           '경기 수원시 영통구', '이의동', 135000, 2012, 1764, 80, ['신분당선', '광교호수공원']],
  ['gwanggyo-clake',  '광교센트럴타운',             '경기 수원시 영통구', '하동',   130000, 2014, 956,  78, ['신분당선', '광교호수공원']],
  ['yeongtong-h2',    '영통 황골마을',              '경기 수원시 영통구', '영통동', 95000,  1997, 994,  73, ['수인분당선']],

  // 평촌·산본
  ['pyungchon-jt',    '평촌 향촌 현대',             '경기 안양시 동안구', '평촌동', 125000, 1993, 1106, 75, ['4호선', '평촌학원가']],
  ['beomgye-mh',      '범계 목련선경',              '경기 안양시 동안구', '범계동', 120000, 1993, 1376, 74, ['4호선', '평촌학원가']],

  // 일산·고양
  ['ilsan-gangseon',  '일산 강선마을 7단지',        '경기 고양시 일산서구', '주엽동', 90000,  1994, 1024, 72, ['3호선·경의중앙선', '일산호수공원']],
  ['hugok-2',         '일산 후곡마을 7,8단지',      '경기 고양시 일산서구', '일산동', 85000,  1994, 1408, 71, ['3호선', '학군']],

  // 동탄·화성
  ['dt-csv',          '동탄 더샵 센트럴시티',       '경기 화성시',         '동탄동', 120000, 2015, 874,  78, ['SRT동탄역', '동탄2신도시']],
  ['dt-skyview',      '동탄 시범 다은마을',         '경기 화성시',         '능동',   100000, 2008, 1320, 73, ['SRT동탄역', '동탄1신도시']],

  // 송도·인천
  ['songdo-1park',    '송도 더샵 퍼스트파크',       '인천 연수구',         '송도동', 145000, 2017, 1597, 81, ['인천1호선', '송도국제업무지구']],
  ['songdo-gw3',      '송도 더샵 그린워크 3차',     '인천 연수구',         '송도동', 165000, 2014, 1116, 82, ['인천1호선', '송도']],
  ['songdo-ep',       'e편한세상 송도',             '인천 연수구',         '송도동', 130000, 2016, 1473, 78, ['인천1호선', '송도']],
  ['cheongra-fp',     '청라 푸르지오',              '인천 서구',           '청라동', 110000, 2015, 1100, 75, ['인천공항철도', '청라국제도시']],
  ['gumdan-a',        '검단신도시 아테라',          '인천 서구',           '검단동', 80000,  2024, 1366, 73, ['인천2호선', '검단신도시', '신축']],

  // 하남·과천·광명
  ['misa-strong',     '미사강변 푸르지오',          '경기 하남시',         '미사동', 140000, 2017, 1244, 79, ['5호선', '미사강변신도시']],
  ['gwangmyeong-cs',  '광명 철산 푸르지오',         '경기 광명시',         '철산동', 135000, 2009, 1316, 76, ['7호선·1호선', '도심접근성']],

  // 부산
  ['mc-jay',          '마린시티 자이',              '부산 해운대구',       '우동',   180000, 2014, 1144, 81, ['2호선·동백역', '마린시티', '해운대']],
  ['lct-thesharp',    '엘시티 더샵',                '부산 해운대구',       '중동',   270000, 2019, 882,  85, ['2호선·중동역', '해운대해변', '초고층']],
  ['poseidon',        '두산위브 포세이돈',          '부산 해운대구',       '재송동', 145000, 2013, 1481, 78, ['2호선', '해운대 학군']],
  ['gwangan-jay',     '광안 자이',                  '부산 수영구',         '광안동', 135000, 2015, 971,  77, ['2호선', '광안리해변']],
  ['namcheon-sj',     '남천 삼익비치',              '부산 수영구',         '남천동', 140000, 1979, 3060, 78, ['2호선', '재건축 추진']],
  ['busan-rc-eco',    '서면 롯데캐슬 에코',         '부산 부산진구',       '부전동', 115000, 2017, 1185, 75, ['1호선·2호선', '서면 중심']],

  // 대구
  ['beomeo-cp',       '범어 센트럴푸르지오',        '대구 수성구',         '범어동', 175000, 2018, 1330, 80, ['2호선', '수성학원가', '신축']],
  ['mancheon-doosan', '두산위브 더제니스',          '대구 수성구',         '만촌동', 155000, 2015, 1494, 78, ['2호선', '수성학군']],

  // 대전·세종
  ['doryong-sk',      '도룡 SK뷰',                  '대전 유성구',         '도룡동', 145000, 2015, 776,  77, ['엑스포과학공원']],
  ['doonsan-clover',  '둔산 크로바',                '대전 서구',           '둔산동', 105000, 1992, 1632, 74, ['둔산권 학군']],
  ['sejong-1mau',     '세종 첫마을 4단지',          '세종특별자치시',      '한솔동',  70000, 2011, 1948, 72, ['세종행정중심', '신도시']],
  ['sejong-7mau',     '세종 새롬마을 7단지',        '세종특별자치시',      '새롬동',  85000, 2017, 1145, 74, ['BRT', '신도시', '신축']],

  // 광주·울산
  ['gwangju-bs',      '광주 봉선 더샵',             '광주 남구',           '봉선동', 105000, 2015, 624,  73, ['봉선 학군']],
  ['ulsan-cdwj',      '울산 옥동 롯데캐슬',         '울산 남구',           '신정동',  95000, 2018, 712,  72, ['옥동 학군']],
];

// 가격 추이/예측 자동 생성, 호재/리스크 결정
function buildApt(row, idx) {
  const [id, name, region, dong, basePrice, built, units, score, tags] = row;
  // 가격 변동률: 점수가 높을수록 최근 상승률 ↑ (단, 너무 높으면 조정)
  const yearGrowth = score >= 85 ? 5.8 : score >= 75 ? 3.4 : score >= 65 ? 1.6 : -0.4;
  const monthGrowth = yearGrowth / 8;
  const priceM1 = Math.round(basePrice * (1 - monthGrowth / 100));
  const priceY1 = Math.round(basePrice * (1 - yearGrowth / 100));
  const grade = gradeOf(score);
  const signal = signalOf(score, yearGrowth);
  const bestMonth = bestMonthOf(score);
  // 적정가: 점수 높으면 거의 현재가, 낮으면 -8% 정도
  const targetPrice = Math.round(basePrice * (score >= 85 ? 0.985 : score >= 75 ? 0.96 : 0.92) / 100) * 100;
  const confidence = Math.max(60, Math.min(95, Math.round(score - 5 + (idx % 7))));
  const pir = Math.round((basePrice / 6500) * 10) / 10; // 가구소득 6500 가정
  const jeonseRatio = Math.round((45 + (75 - score) * 0.4) * 10) / 10;
  // 호재/리스크: 태그·점수 기반
  const boons = [];
  const risks = [];
  if (tags.some(t => /GTX|호선|역/.test(t))) boons.push('교통 접근성 우수');
  if (tags.some(t => /학군|학원/.test(t))) boons.push('학군 프리미엄');
  if (tags.some(t => /재건축|리모델링|재개발/.test(t))) boons.push('정비사업 진행');
  if (tags.some(t => /신축/.test(t))) boons.push('신축 단지');
  if (tags.some(t => /한강|호수/.test(t))) boons.push('수변 조망');
  if (boons.length === 0) boons.push('생활 인프라 양호');
  if (built < 1990) risks.push('노후 건물 (유지관리 비용)');
  if (yearGrowth > 5) risks.push('단기 과열 우려');
  if (pir > 25) risks.push('소득 대비 고평가 (PIR ' + pir.toFixed(1) + ')');
  if (units < 500) risks.push('소단지 (환금성 약함)');
  if (risks.length === 0) risks.push('금리 변동 위험');

  return {
    id, name, region, dong, area: '84㎡', built, units,
    currentPrice: basePrice, priceM1, priceY1,
    delta1m: monthGrowth, delta1y: yearGrowth,
    score, grade, signal, bestBuyMonth: bestMonth, targetPrice, confidence,
    pir, jeonseRatio,
    school: score >= 85 ? 'S' : score >= 75 ? 'A' : 'B',
    transit: tags.some(t => /GTX|호선/.test(t)) ? 'A' : 'B',
    redevelopment: tags.some(t => /재건축|리모델링|재개발/.test(t)) ? 'A' : '-',
    tags,
    history: trail(basePrice, 23, score >= 85 ? 0.018 : 0.013, yearGrowth / 100 / 12),
    risks, boons,
  };
}

const APTS = SEED.map(buildApt);

// ─── 모델 인사이트 요인 ────────────────────────────────
const FACTORS = [
  { id: 'transactions', label: '실거래가 추이', sub: '국토부 RTMS · 6개월 MA', value: 18.4, impact: 'positive', source: '국토교통부 실거래가 공개시스템' },
  { id: 'supply', label: '공급 물량', sub: '입주 예정 -32%', value: 14.2, impact: 'positive', source: '한국부동산원 주택공급통계' },
  { id: 'rates', label: '기준금리 / 대출 규제', sub: '한은 동결 + DSR 완화 기대', value: 11.8, impact: 'positive', source: '한국은행 통화정책방향' },
  { id: 'transit', label: '교통 호재', sub: 'GTX-A·C 진척률 87%', value: 9.6, impact: 'positive', source: '국토부 광역교통망 계획' },
  { id: 'school', label: '학군 / 학원가', sub: '대치동·분당·목동 강세', value: 8.1, impact: 'positive', source: '교육통계 + 학원 밀집도' },
  { id: 'redev', label: '재건축 / 재개발', sub: '안전진단·사업시행 단계', value: 7.4, impact: 'positive', source: 'KB부동산 정비사업 DB' },
  { id: 'pir', label: 'PIR (소득 대비)', sub: '서울 28.4 (역사적 고점)', value: 7.0, impact: 'negative', source: 'KB부동산 PIR 지표' },
  { id: 'macro', label: '거시 경제 (GDP·CPI)', sub: 'GDP +2.1%, CPI 2.4%', value: 6.2, impact: 'positive', source: '통계청 경제지표' },
  { id: 'volume', label: '거래량 / 매물 수', sub: '거래 +24% MoM', value: 5.7, impact: 'positive', source: '국토부 거래량' },
  { id: 'jeonse', label: '전세가율', sub: '54.2% (10년 평균)', value: 4.8, impact: 'positive', source: 'KB 주택가격동향' },
  { id: 'income', label: '지역별 소득 수준', sub: '강남 3구 +6.4% YoY', value: 3.5, impact: 'positive', source: '국세청 통합소득' },
  { id: 'pop', label: '인구 이동 / 청약', sub: '경쟁률 평균 18:1', value: 3.3, impact: 'positive', source: '청약홈 + 통계청' },
];

// ─── 리포트 / 뉴스 / 티커 ─────────────────────────────
const REPORTS = [
  { type: 'paper', title: '주택가격 결정요인의 시계열 분석', org: '한국부동산학회', date: '2024.11' },
  { type: 'report', title: '주택시장 전망 - 2026 상반기', org: '한국부동산원', date: '2026.04' },
  { type: 'report', title: 'KB 부동산시장 리뷰', org: 'KB경영연구소', date: '2026.05' },
  { type: 'paper', title: 'GTX 노선 효과 - 인접 단지 프리미엄', org: 'KDI', date: '2025.09' },
  { type: 'data',  title: '실거래가 공개시스템', org: '국토교통부 RTMS', date: 'realtime' },
];

const NEWS = [
  { tag: '호재', region: '성남시 분당구', title: 'GTX-A 성남역 6월 부분 개통 확정', source: '연합뉴스', time: '12분 전', impact: 'positive' },
  { tag: '정책', region: '서울 전역', title: 'DSR 규제 일부 완화 검토 - 6월 중 발표', source: '머니투데이', time: '38분 전', impact: 'positive' },
  { tag: '공급', region: '서울 강동구', title: '둔촌주공 입주 임박 - 인근 시세 조정 압력', source: '한국경제', time: '1시간 전', impact: 'negative' },
  { tag: '재건축', region: '서울 강남구', title: '대치 은마 사업시행계획 변경안 가결', source: '매일경제', time: '2시간 전', impact: 'positive' },
  { tag: '학군', region: '서울 양천구', title: '목동신시가지 학원가 확장 영향 분석', source: 'KB리포트', time: '3시간 전', impact: 'positive' },
];

const TICKERS = [
  { code: 'KB.APT', label: '전국 아파트', price: 5128, delta: 0.42 },
  { code: 'SEL.GN', label: '강남구', price: 26840, delta: 0.86 },
  { code: 'SEL.SP', label: '송파구', price: 21450, delta: -0.21 },
  { code: 'SEL.MP', label: '마포구', price: 14820, delta: 0.34 },
  { code: 'GG.BD',  label: '분당구', price: 12640, delta: 0.71 },
  { code: 'BoK',    label: '기준금리 2.75%', price: 275, delta: 0 },
];

const REGIONS = [
  { name: '강남구',   score: 88, delta1y: 6.4, pir: 28.4, jeonse: 38.8, signal: 'BUY',   trend: trail(180, 12, 0.013, 0.003).map(d => d.v) },
  { name: '서초구',   score: 90, delta1y: 5.9, pir: 27.1, jeonse: 40.2, signal: 'BUY',   trend: trail(175, 12, 0.013, 0.0028).map(d => d.v) },
  { name: '송파구',   score: 84, delta1y: 4.2, pir: 25.6, jeonse: 44.2, signal: 'ACC',   trend: trail(155, 12, 0.014, 0.0021).map(d => d.v) },
  { name: '용산구',   score: 86, delta1y: 5.2, pir: 26.0, jeonse: 41.0, signal: 'BUY',   trend: trail(165, 12, 0.013, 0.0024).map(d => d.v) },
  { name: '분당구',   score: 85, delta1y: 4.7, pir: 18.2, jeonse: 52.4, signal: 'BUY',   trend: trail(130, 12, 0.012, 0.0021).map(d => d.v) },
  { name: '판교',     score: 87, delta1y: 5.4, pir: 20.5, jeonse: 48.0, signal: 'BUY',   trend: trail(180, 12, 0.013, 0.0025).map(d => d.v) },
  { name: '광교',     score: 82, delta1y: 4.1, pir: 19.0, jeonse: 50.2, signal: 'ACC',   trend: trail(140, 12, 0.013, 0.0019).map(d => d.v) },
  { name: '마포구',   score: 80, delta1y: 3.5, pir: 21.4, jeonse: 49.5, signal: 'ACC',   trend: trail(140, 12, 0.012, 0.0016).map(d => d.v) },
  { name: '목동',     score: 81, delta1y: 3.0, pir: 22.0, jeonse: 47.0, signal: 'ACC',   trend: trail(160, 12, 0.012, 0.0014).map(d => d.v) },
  { name: '동탄',     score: 78, delta1y: 4.8, pir: 16.0, jeonse: 53.5, signal: 'ACC',   trend: trail(115, 12, 0.014, 0.0022).map(d => d.v) },
  { name: '송도',     score: 80, delta1y: 3.8, pir: 17.5, jeonse: 50.0, signal: 'ACC',   trend: trail(140, 12, 0.013, 0.0017).map(d => d.v) },
  { name: '해운대',   score: 81, delta1y: 4.4, pir: 18.4, jeonse: 49.0, signal: 'ACC',   trend: trail(150, 12, 0.013, 0.0020).map(d => d.v) },
];

Object.assign(window, { APTS, FACTORS, REPORTS, NEWS, TICKERS, REGIONS, trail, forecast });
