CarboAny / src /data /mockPrograms.ts
Esketch's picture
deploy: [P4] Strangler Pattern API Adapter Release (Orphan Clean Build v2)
daaf9d7
Raw
History Blame Contribute Delete
15.7 kB
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<string, string> = {
// 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,
},
];