import type { Program, EventVerification } from '../types'; // ESG 이벤트 + 공공 캠페인 통합 Mock 데이터 // EventStatus → CampaignStatus 매핑: // draft → draft, open → active, in_progress → active, completed → completed, closed → completed export const mockProgramAliases: Record = { // Supabase Wando seed UUID -> local demo campaign model. '6bc3e55e-55fc-42c6-9b65-046a090c46c8': 'wando-model-001', }; export function resolveMockProgramId(id?: string | null) { if (!id) return id; return mockProgramAliases[id] ?? id; } export function findMockProgramById(id?: string | null) { const resolvedId = resolveMockProgramId(id); return mockPrograms.find((program) => program.id === resolvedId); } const ploggingVerifications: EventVerification[] = [ { id: 'ev-001', participantName: '김민수', participantTeam: '모빌리티플랫폼팀', verifiedAt: '2026-04-14 09:15', type: 'combo', value: '수거백 3.2kg, 사진 2장', status: 'approved', confidenceScore: 98, co2ContributionKg: 1.73, wasteKg: 3.2, locationName: '성남시 판교공원', reviewer: 'AI 자동 + 김주영', }, { id: 'ev-002', participantName: '이지현', participantTeam: 'UX실', verifiedAt: '2026-04-14 08:42', type: 'weight', value: '수거백 1.8kg', status: 'approved', confidenceScore: 95, co2ContributionKg: 0.97, wasteKg: 1.8, locationName: '성남시 탄천 산책로', reviewer: 'AI 자동', }, { id: 'ev-003', participantName: '박준호', participantTeam: '안전기술팀', verifiedAt: '2026-04-14 10:05', type: 'photo', value: '수거 전/후 사진 4장', status: 'pending', confidenceScore: 72, co2ContributionKg: 2.16, wasteKg: 4.0, locationName: '성남시 율동공원', fraudFlags: ['low_confidence'], }, { id: 'ev-004', participantName: '최서연', participantTeam: '모빌리티플랫폼팀', verifiedAt: '2026-04-13 16:30', type: 'combo', value: '수거백 4.5kg, 사진 3장', status: 'approved', confidenceScore: 99, co2ContributionKg: 2.43, wasteKg: 4.5, locationName: '성남시 판교공원', reviewer: 'AI 자동', }, { id: 'ev-005', participantName: '정태웅', participantTeam: '결제팀', verifiedAt: '2026-04-13 15:20', type: 'photo', value: '사진 불명확 — 재촬영 요청', status: 'rejected', confidenceScore: 34, fraudFlags: ['low_confidence', 'metadata_stripped'], reviewer: '김주영', rejectionReason: '사진 EXIF 메타데이터 누락 및 판독 불가', }, { id: 'ev-006', participantName: '김민수', participantTeam: '모빌리티플랫폼팀', verifiedAt: '2026-04-13 11:00', type: 'combo', value: '수거백 2.8kg, 사진 2장', status: 'approved', confidenceScore: 96, co2ContributionKg: 1.51, wasteKg: 2.8, locationName: '성남시 탄천 산책로', reviewer: 'AI 자동', }, { id: 'ev-007', participantName: '한지우', participantTeam: '지도플랫폼팀', verifiedAt: '2026-04-13 10:45', type: 'weight', value: '수거백 22.5kg (이상치)', status: 'pending', confidenceScore: 41, fraudFlags: ['weight_outlier'], wasteKg: 22.5, locationName: '성남시 판교공원', }, { id: 'ev-008', participantName: '박선우', participantTeam: 'UX실', verifiedAt: '2026-04-12 17:22', type: 'combo', value: '수거백 3.8kg, 사진 3장', status: 'approved', confidenceScore: 94, co2ContributionKg: 2.05, wasteKg: 3.8, locationName: '성남시 율동공원', reviewer: 'AI 자동', }, { id: 'ev-009', participantName: '차유나', participantTeam: '안전기술팀', verifiedAt: '2026-04-12 14:10', type: 'gps', value: 'GPS 경로 이탈 감지 (3.2km 밖)', status: 'rejected', confidenceScore: 22, fraudFlags: ['gps_mismatch'], reviewer: '이정은', rejectionReason: '이벤트 지정 구역 반경 밖 인증', }, { id: 'ev-010', participantName: '최서연', participantTeam: '모빌리티플랫폼팀', verifiedAt: '2026-04-12 09:30', type: 'weight', value: '수거백 3.5kg', status: 'approved', confidenceScore: 93, co2ContributionKg: 1.89, wasteKg: 3.5, locationName: '성남시 판교공원', reviewer: 'AI 자동', }, { id: 'ev-011', participantName: '윤동현', participantTeam: '결제팀', verifiedAt: '2026-04-11 16:05', type: 'photo', value: '동일 사진 재제출 의심', status: 'pending', confidenceScore: 28, fraudFlags: ['duplicate_photo', 'low_confidence'], }, { id: 'ev-012', participantName: '이지현', participantTeam: 'UX실', verifiedAt: '2026-04-11 10:15', type: 'combo', value: '수거백 2.4kg, 사진 2장', status: 'approved', confidenceScore: 97, co2ContributionKg: 1.3, wasteKg: 2.4, locationName: '성남시 탄천 산책로', reviewer: 'AI 자동', }, { id: 'ev-013', participantName: '김민수', participantTeam: '모빌리티플랫폼팀', verifiedAt: '2026-04-10 17:40', type: 'combo', value: '수거백 3.9kg, 사진 2장', status: 'approved', confidenceScore: 95, co2ContributionKg: 2.11, wasteKg: 3.9, locationName: '성남시 판교공원', reviewer: 'AI 자동', }, { id: 'ev-014', participantName: '박준호', participantTeam: '안전기술팀', verifiedAt: '2026-04-10 14:22', type: 'weight', value: '수거백 2.1kg, 연속 4건 (10분 이내)', status: 'pending', confidenceScore: 48, fraudFlags: ['rapid_submission'], wasteKg: 2.1, }, ]; const afforestationVerifications: EventVerification[] = [ { id: 'ev-101', participantName: '한지민', participantTeam: 'CSR팀', verifiedAt: '2026-04-14 11:00', type: 'gps', value: '서울 노원구 불암산 자락 (37.6542, 127.0568)', status: 'approved', confidenceScore: 99, locationName: '불암산 자락', reviewer: 'AI 자동', }, { id: 'ev-102', participantName: '오승환', participantTeam: 'CSR팀', verifiedAt: '2026-04-14 10:30', type: 'combo', value: 'GPS + 소나무 묘목 사진', status: 'approved', confidenceScore: 97, locationName: '불암산 자락', reviewer: 'AI 자동', }, { id: 'ev-103', participantName: '윤서아', participantTeam: 'ESG전략팀', verifiedAt: '2026-04-13 14:15', type: 'photo', value: '묘목 식재 사진 3장', status: 'pending', confidenceScore: 74, }, ]; const energySavingVerifications: EventVerification[] = [ { id: 'ev-201', participantName: '강다희', verifiedAt: '2026-03-31 17:00', type: 'photo', value: '전력 사용량 계측기 스크린샷', status: 'approved', confidenceScore: 93, reviewer: 'AI 자동', }, ]; export const mockPrograms: Program[] = [ // ── 기업 ESG 이벤트 ── { id: 'prg-001', title: '2026 봄맞이 사내 플로깅 대회', programType: 'corporate_event', organizationName: '카카오모빌리티', organizationType: 'enterprise', activityType: 'plogging', status: 'active', startDate: '2026-04-10', endDate: '2026-04-20', targetParticipants: 500, currentParticipants: 347, totalVerifications: 892, approvedVerifications: 845, rejectedVerifications: 2, pendingVerifications: 45, co2ReductionKg: 1267.5, budgetKRW: 0, pointsDistributed: 845000, wasteCollectedKg: 2340, saasFeePaid: 3500000, verifications: ploggingVerifications, }, { id: 'prg-002', title: '창립 30주년 기념 나무 심기', programType: 'corporate_event', organizationName: 'SK텔레콤', organizationType: 'enterprise', activityType: 'afforestation', status: 'active', startDate: '2026-04-05', endDate: '2026-04-30', targetParticipants: 300, currentParticipants: 214, totalVerifications: 214, approvedVerifications: 198, rejectedVerifications: 0, pendingVerifications: 16, co2ReductionKg: 0, budgetKRW: 0, pointsDistributed: 594000, treesPlanted: 198, saasFeePaid: 5000000, verifications: afforestationVerifications, }, { id: 'prg-003', title: '그린에너지 에너지 절약 챌린지', programType: 'corporate_event', organizationName: '(주)그린에너지', organizationType: 'enterprise', activityType: 'energy_saving', status: 'completed', startDate: '2026-03-01', endDate: '2026-03-31', targetParticipants: 1000, currentParticipants: 876, totalVerifications: 4380, approvedVerifications: 4215, rejectedVerifications: 165, pendingVerifications: 0, co2ReductionKg: 8430, budgetKRW: 0, pointsDistributed: 4215000, saasFeePaid: 8000000, verifications: energySavingVerifications, }, { id: 'prg-004', title: '서울시 친환경 통근 캠페인', programType: 'corporate_event', organizationName: '서울특별시', organizationType: 'municipality', activityType: 'commute_green', status: 'active', startDate: '2026-05-01', endDate: '2026-05-31', targetParticipants: 5000, currentParticipants: 0, totalVerifications: 0, approvedVerifications: 0, rejectedVerifications: 0, pendingVerifications: 0, co2ReductionKg: 0, budgetKRW: 0, pointsDistributed: 0, saasFeePaid: 12000000, verifications: [], }, { id: 'prg-005', title: '한화 Earth Day 플로깅', programType: 'corporate_event', organizationName: '한화솔루션', organizationType: 'enterprise', activityType: 'plogging', status: 'draft', startDate: '2026-04-22', endDate: '2026-04-22', targetParticipants: 200, currentParticipants: 0, totalVerifications: 0, approvedVerifications: 0, rejectedVerifications: 0, pendingVerifications: 0, co2ReductionKg: 0, budgetKRW: 0, pointsDistributed: 0, wasteCollectedKg: 0, saasFeePaid: 0, verifications: [], }, // ── 공공 CaaS 캠페인 ── { id: 'prg-101', title: '전통시장 다회용기 캠페인', programType: 'public_caas', organizationName: '서울특별시', organizationType: 'municipality', status: 'active', methodology: 'GS — 폐기물 발생 억제 방법론 v3.2', methodologyAutoAssigned: true, startDate: '2026-04-01', endDate: '2026-06-30', targetParticipants: 20000, currentParticipants: 12480, totalVerifications: 44270, approvedVerifications: 42150, rejectedVerifications: 1230, pendingVerifications: 890, co2ReductionKg: 15670, budgetKRW: 250000000, pointsDistributed: 42150000, apiCallsTotal: 187320, apiCallsToday: 3420, fraudDetected: 47, }, { id: 'prg-102', title: '청사 내 에너지 절약 챌린지', programType: 'public_caas', organizationName: '한국에너지공단', organizationType: 'public_corp', activityType: 'energy_saving', status: 'active', methodology: 'AMS-II.L — 에너지효율 개선 활동', methodologyAutoAssigned: true, startDate: '2026-03-01', endDate: '2026-05-31', targetParticipants: 5000, currentParticipants: 3200, totalVerifications: 10270, approvedVerifications: 9800, rejectedVerifications: 320, pendingVerifications: 150, co2ReductionKg: 28400, budgetKRW: 80000000, pointsDistributed: 9800000, apiCallsTotal: 45600, apiCallsToday: 890, fraudDetected: 12, }, { id: 'prg-103', title: '탄소중립 포인트 - 자전거 출퇴근', programType: 'public_caas', organizationName: '세종특별자치시', organizationType: 'municipality', activityType: 'commute_green', status: 'active', methodology: 'VM0042 — 비동력 교통수단 전환 방법론', methodologyAutoAssigned: true, startDate: '2026-04-10', endDate: '2026-10-31', targetParticipants: 15000, currentParticipants: 8750, totalVerifications: 38390, approvedVerifications: 35200, rejectedVerifications: 890, pendingVerifications: 2300, co2ReductionKg: 8920, budgetKRW: 150000000, pointsDistributed: 35200000, apiCallsTotal: 124500, apiCallsToday: 2100, fraudDetected: 31, }, { id: 'prg-104', title: '공공건물 태양광 모니터링', programType: 'public_caas', organizationName: '한국전력공사', organizationType: 'public_corp', status: 'completed', methodology: 'GS — 소규모 재생에너지 발전 프로젝트', methodologyAutoAssigned: true, startDate: '2025-10-01', endDate: '2026-03-31', targetParticipants: 0, currentParticipants: 0, totalVerifications: 180500, approvedVerifications: 178400, rejectedVerifications: 2100, pendingVerifications: 0, co2ReductionKg: 456200, budgetKRW: 500000000, pointsDistributed: 0, apiCallsTotal: 892000, apiCallsToday: 0, fraudDetected: 0, }, { id: 'wando-model-001', title: '[기본소득형] 전 군민 바다 연금 블루 크레딧', programType: 'public_caas', organizationName: '전라남도 완도군청', organizationType: 'municipality', status: 'active', methodology: 'K-VER — 해조류 탄소 흡수 방법론 v1.0', methodologyAutoAssigned: true, startDate: '2026-05-01', endDate: '2027-04-30', targetParticipants: 50000, currentParticipants: 12500, totalVerifications: 25000, approvedVerifications: 24800, rejectedVerifications: 50, pendingVerifications: 150, co2ReductionKg: 6789000, budgetKRW: 200000000, pointsDistributed: 50000000, apiCallsTotal: 85000, apiCallsToday: 1200, fraudDetected: 5, }, { id: 'wando-model-002', title: '[산업혁신형] 바다고리풀 이모작 축산 메탄 저감', programType: 'public_caas', organizationName: '전라남도 완도군청', organizationType: 'municipality', status: 'active', methodology: 'CDM — 가축 분뇨 및 메탄 저감 방법론', methodologyAutoAssigned: true, startDate: '2026-05-15', endDate: '2026-09-30', targetParticipants: 5000, currentParticipants: 850, totalVerifications: 1200, approvedVerifications: 1150, rejectedVerifications: 10, pendingVerifications: 40, co2ReductionKg: 50000, budgetKRW: 100000000, pointsDistributed: 15000000, apiCallsTotal: 15000, apiCallsToday: 450, fraudDetected: 2, }, { id: 'wando-model-004', title: '[상생협력형] 기업 매칭 바다숲 생태계 서비스 지불제', programType: 'corporate_event', organizationName: '완도군청 X (주)현대자동차', organizationType: 'enterprise', status: 'active', methodology: '잘피(Sea-grass) 해양 생태계 복원 및 보전', methodologyAutoAssigned: true, startDate: '2026-07-01', endDate: '2027-06-30', targetParticipants: 1000, currentParticipants: 320, totalVerifications: 540, approvedVerifications: 535, rejectedVerifications: 2, pendingVerifications: 3, co2ReductionKg: 150000, budgetKRW: 500000000, // 기업 CSR 자본 pointsDistributed: 120000000, // 어민 지불금 apiCallsTotal: 12000, apiCallsToday: 150, fraudDetected: 0, }, ];