Build AgentMinder Campaign Command Center - Phase 1 complete
Full-featured sales campaign dashboard replacing Looker Studio with responsive Next.js app. Includes Executive Overview, Account Explorer with priority algorithm, Activities with detail overlay, Pipeline/Opps with deal panels, Implementation tracking, and Data Admin with CSV import and CRUD operations. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
135
src/types/data.ts
Normal file
135
src/types/data.ts
Normal file
@@ -0,0 +1,135 @@
|
||||
export interface PipelineRecord {
|
||||
Opportunity_ID: string;
|
||||
Account_Name: string;
|
||||
District_Name: string;
|
||||
Stage: string;
|
||||
Forecast_Category: string;
|
||||
Amount_USD: number;
|
||||
Closed_Amount_USD: number | null;
|
||||
Probability_Pct: number;
|
||||
Created_Date: string;
|
||||
Expected_Close_Date: string;
|
||||
Closed_Date: string | null;
|
||||
Champion_Name: string | null;
|
||||
Economic_Buyer: string | null;
|
||||
Next_Step: string | null;
|
||||
Next_Step_Date: string | null;
|
||||
Primary_Objection: string | null;
|
||||
Competitor: string | null;
|
||||
Source_Play: string | null;
|
||||
Product: string;
|
||||
Deal_Type: string | null;
|
||||
Status: string | null;
|
||||
Stage_Entered_Date: string | null;
|
||||
Tier: string | null;
|
||||
MAP_In_Place_YN: string | null;
|
||||
}
|
||||
|
||||
export interface AccountRecord {
|
||||
Account_Name: string;
|
||||
District_Name: string;
|
||||
Tier: string;
|
||||
Priority: string;
|
||||
AgentMinder_Status: string;
|
||||
Current_ARR_USD: number | null;
|
||||
Touch_Count: number | null;
|
||||
Date_First_Touched: string | null;
|
||||
Date_Last_Touched: string | null;
|
||||
MAP_In_Place_YN: 'Y' | 'N' | null;
|
||||
Company_URL: string | null;
|
||||
Area_Sales_Leader: string | null;
|
||||
DM: string | null;
|
||||
AD: string | null;
|
||||
IMS_BA: string | null;
|
||||
Logo_URL: string | null;
|
||||
Next_Renewal_Date: string | null;
|
||||
Next_Renewal_EAR: number | null;
|
||||
Anchor_Contract_Date: string | null;
|
||||
Anchor_Contract_EAR: number | null;
|
||||
Google_Drive_URL: string | null;
|
||||
Campaign_Artifacts_URL: string | null;
|
||||
}
|
||||
|
||||
export interface ActivityRecord {
|
||||
Activity_Date: string;
|
||||
Activity_Type: string;
|
||||
Account_Name: string;
|
||||
District_Name: string;
|
||||
Contact_Name: string | null;
|
||||
Notes: string | null;
|
||||
Play: string | null;
|
||||
Channel: string | null;
|
||||
Persona: string | null;
|
||||
Outcome: string | null;
|
||||
Logged_By: string | null;
|
||||
}
|
||||
|
||||
export interface TargetRecord {
|
||||
Account_Name: string;
|
||||
Implementation_Stage: string;
|
||||
Go_Live_Date: string | null;
|
||||
Health_Status: string | null;
|
||||
Notes: string | null;
|
||||
}
|
||||
|
||||
export interface ImplementationRecord {
|
||||
Implementation_ID: string;
|
||||
Opportunity_ID: string | null;
|
||||
Account_Name: string;
|
||||
District_Name: string | null;
|
||||
Tier: string | null;
|
||||
Closed_Date: string | null;
|
||||
Closed_Amount_USD: number | null;
|
||||
Kickoff_Date: string | null;
|
||||
Go_Live_Target: string | null;
|
||||
Go_Live_Actual: string | null;
|
||||
Deployment_Status: string;
|
||||
Health_RYG: string | null;
|
||||
Milestones_Complete: number;
|
||||
Milestones_Total: number;
|
||||
Onboarding_Owner: string | null;
|
||||
Risk_Notes: string | null;
|
||||
}
|
||||
|
||||
export interface MetricTarget {
|
||||
Target_ID: string;
|
||||
Period_Type: string;
|
||||
Period_Label: string;
|
||||
District_Name: string;
|
||||
Metric: string;
|
||||
Target_Value: number;
|
||||
Notes: string | null;
|
||||
}
|
||||
|
||||
export interface DashboardData {
|
||||
pipeline: PipelineRecord[];
|
||||
accounts: AccountRecord[];
|
||||
activities: ActivityRecord[];
|
||||
targets: TargetRecord[];
|
||||
implementations: ImplementationRecord[];
|
||||
metricTargets: MetricTarget[];
|
||||
lastRefreshed: string;
|
||||
}
|
||||
|
||||
export interface DashboardConfig {
|
||||
quotaTarget: number;
|
||||
weeklyActivityTarget: number;
|
||||
}
|
||||
|
||||
export type District = 'SE-SUNSHINE' | 'SE-PEACHTREE' | 'SE-MISS-VALLEY' | 'SE-MID-ATL';
|
||||
|
||||
export const DISTRICTS: District[] = ['SE-SUNSHINE', 'SE-PEACHTREE', 'SE-MISS-VALLEY', 'SE-MID-ATL'];
|
||||
|
||||
export const STAGES = [
|
||||
'01-Qualified', '02-Discovery', '03-Evaluation', '04-Business Case',
|
||||
'05-Negotiation', '06-Closed Won', '07-Closed Lost'
|
||||
] as const;
|
||||
|
||||
export const FORECAST_CATEGORIES = ['Commit', 'Best Case', 'Pipeline', 'Closed', 'Omit'] as const;
|
||||
|
||||
export const IMPLEMENTATION_STAGES = ['Not Started', 'In Progress', 'Complete', 'Stalled'] as const;
|
||||
|
||||
export const ACTIVITY_TYPES = [
|
||||
'Launch Briefing', 'Discovery', 'QBR Attach', 'Exec Meeting',
|
||||
'Demo', 'Workshop', 'Email', 'Call'
|
||||
] as const;
|
||||
Reference in New Issue
Block a user