1035 lines
26 KiB
TypeScript
1035 lines
26 KiB
TypeScript
|
||
import {
|
||
LayoutGrid,
|
||
Smile,
|
||
Building2,
|
||
User,
|
||
Target,
|
||
CheckSquare,
|
||
FileText,
|
||
Box,
|
||
Zap,
|
||
ClipboardList,
|
||
Star,
|
||
Monitor,
|
||
UserCheck,
|
||
Calendar,
|
||
Layers,
|
||
Coins,
|
||
Receipt,
|
||
ShieldCheck,
|
||
Flame,
|
||
Recycle,
|
||
GraduationCap,
|
||
Brain,
|
||
Activity,
|
||
Bot,
|
||
Gauge,
|
||
Snowflake,
|
||
Leaf,
|
||
MapPin,
|
||
BarChart3,
|
||
Sun,
|
||
Shield,
|
||
Settings,
|
||
Wallet,
|
||
Radar,
|
||
Cog,
|
||
Smartphone,
|
||
Users,
|
||
Database,
|
||
Globe,
|
||
LayoutDashboard,
|
||
} from "lucide-react";
|
||
|
||
//Side bar Drop Down menu
|
||
|
||
export const OPERATIONS_SIDEBAR_ITEMS = [
|
||
{
|
||
title: "Overview",
|
||
icon: LayoutGrid,
|
||
children: [
|
||
{ title: "Dashboard", href: "/dashboard/overview/dashboard", icon: LayoutGrid },
|
||
{ title: "Engagement", href: "/dashboard/overview/engagement", icon: Smile },
|
||
{ title: "Building Owner", href: "/dashboard/overview/buildingOwner", icon: Building2 },
|
||
{ title: "Property Manager", href: "/dashboard/overview/propertyManager", icon: User },
|
||
{ title: "Service Engineer", href: "/dashboard/overview/serviceEngineer", icon: Target },
|
||
],
|
||
},
|
||
{
|
||
title: "Operations",
|
||
icon: Settings,
|
||
children: [
|
||
{ title: "Help Desk", href: "/operations/help-desk", icon: CheckSquare, badge: 6, badgeColor: "bg-amber-500 text-black" },
|
||
{ title: "Equipment", href: "/operations/equipment", icon: Target },
|
||
{ title: "Requests", href: "/operations/requests", icon: FileText, badge: 15, badgeColor: "bg-amber-400 text-black" },
|
||
{ title: "Inventory", href: "/operations/inventory", icon: Box },
|
||
{ title: "Energy", href: "/operations/energy", icon: Zap },
|
||
{ title: "Work Permit", href: "/operations/work-permit", icon: ClipboardList, badge: 3, badgeColor: "bg-amber-500 text-black" },
|
||
{ title: "Vendor & Field Service", href: "/operations/vendor-field", icon: Star, badge: 12, badgeColor: "bg-sky-400 text-black" },
|
||
],
|
||
},
|
||
{
|
||
title: "Workplace",
|
||
icon: Monitor,
|
||
children: [
|
||
{ title: "Visitor Management", href: "/workplace/visitor", icon: UserCheck },
|
||
{ title: "Meeting Rooms", href: "/workplace/meeting-rooms", icon: Calendar },
|
||
{ title: "Workspace", href: "/workplace/workspace", icon: Layers },
|
||
],
|
||
},
|
||
{
|
||
title: "Finance",
|
||
icon: Wallet,
|
||
children: [
|
||
{ title: "O&M Budget", href: "/finance/om-budget", icon: Coins },
|
||
{ title: "Costing & Invoicing", href: "/finance/costing-invoicing", icon: Receipt },
|
||
],
|
||
},
|
||
{
|
||
title: "Compliance & Safety",
|
||
icon: ShieldCheck,
|
||
children: [
|
||
{ title: "Statutory Compliance", href: "/compliance/statutory", icon: ShieldCheck },
|
||
{ title: "Contracts & SLA", href: "/compliance/contracts-sla", icon: FileText },
|
||
{ title: "Fire & Safety", href: "/compliance/fire-safety", icon: Flame },
|
||
{ title: "Waste & ESG", href: "/compliance/waste-esg", icon: Recycle },
|
||
{ title: "Training", href: "/compliance/training", icon: GraduationCap },
|
||
{ title: "Audit & Survey", href: "/compliance/training", icon: GraduationCap },
|
||
],
|
||
},
|
||
{
|
||
title: "Intelligence",
|
||
icon: Brain,
|
||
children: [{ title: "AI & Predictive", href: "/intelligence/predictive", icon: Brain },
|
||
{ title: "Asset Health", href: "/intelligence/asset-health", icon: ShieldCheck },
|
||
{ title: "Energy Benchmarking", href: "/intelligence/benchmarking", icon: Activity },
|
||
{ title: "AI Helpdesk", href: "/intelligence/ai-helpdesk", icon: Bot },
|
||
{ title: "Connected Ops", href: "/intelligence/connected-ops", icon: Gauge },
|
||
{ title: "Connected Assets", href: "/intelligence/connected-assets", icon: Snowflake },
|
||
{ title: "Sustainability", href: "/intelligence/sustainability", icon: Leaf },
|
||
{ title: "GPS Tracking", href: "/intelligence/gps-tracking", icon: MapPin },],
|
||
},
|
||
{
|
||
title: "IoT Application",
|
||
icon: Radar,
|
||
children: [{ title: "Command Center", href: "/iot/command-center", icon: Gauge },
|
||
{ title: "HVAC Plant", href: "/iot/hvac-plant", icon: Snowflake },
|
||
{ title: "Energy & Utilities", href: "/iot/energy-utilities", icon: Zap },
|
||
{ title: "Device Fleet", href: "/iot/device-fleet", icon: LayoutGrid },
|
||
{ title: "Alarms & Rules", href: "/iot/alarms-rules", icon: Shield, badge: 7, badgeColor: "bg-rose-500 text-white" },],
|
||
},
|
||
{
|
||
title: "Insight",
|
||
icon: BarChart3,
|
||
children: [{ title: "Reports & MMR", href: "/insight/reports", icon: BarChart3 },],
|
||
},
|
||
{
|
||
title: "Configure",
|
||
icon: Cog,
|
||
children: [{ title: "Master Data", href: "/configure/master-data", icon: Layers },
|
||
{ title: "Roles & Access", href: "/configure/roles-access", icon: Shield },
|
||
{ title: "Workflow Automation", href: "/configure/workflow", icon: Bot },
|
||
{ title: "User Location", href: "/configure/user-location", icon: MapPin },
|
||
{ title: "Settings", href: "/configure/settings", icon: Sun },],
|
||
},
|
||
];
|
||
export const ADMIN_SIDEBAR_ITEMS = [
|
||
{
|
||
title: "Platform",
|
||
icon: Building2,
|
||
children: [
|
||
{ title: "Overview", href: "/admin/overview", icon: LayoutGrid },
|
||
{ title: "Tenants", href: "/admin/tenants", icon: Building2 },
|
||
{ title: "Users", href: "/admin/users", icon: Users },
|
||
{ title: "Sites", href: "/admin/sites", icon: MapPin },
|
||
{ title: "Security", href: "/admin/security", icon: Shield },
|
||
],
|
||
},
|
||
{
|
||
title: "Configuration",
|
||
icon: LayoutGrid,
|
||
children: [
|
||
{ title: "Modules", href: "/admin/configuration/modules", icon: LayoutGrid },
|
||
{ title: "Language", href: "/admin/configuration/language", icon: Globe },
|
||
{ title: "Dynamic Dashboard", href: "/admin/configuration/dynamic-dashboard", icon: LayoutDashboard },
|
||
{ title: "Mobile Flows", href: "/admin/configuration/mobile-flows", icon: Smartphone },
|
||
],
|
||
},
|
||
];
|
||
|
||
|
||
|
||
//Overview dashboard data
|
||
|
||
export const chartData = [
|
||
{ month: 'J', height: 'h-24' },
|
||
{ month: 'F', height: 'h-16' },
|
||
{ month: 'M', height: 'h-32' },
|
||
{ month: 'A', height: 'h-20' },
|
||
{ month: 'M', height: 'h-28' },
|
||
{ month: 'J', height: 'h-12' },
|
||
{ month: 'J', height: 'h-32' },
|
||
{ month: 'A', height: 'h-24' },
|
||
{ month: 'S', height: 'h-30' },
|
||
{ month: 'O', height: 'h-20' },
|
||
{ month: 'N', height: 'h-26' },
|
||
{ month: 'D', height: 'h-24' },
|
||
];
|
||
|
||
|
||
export const energyData = [
|
||
{ month: "Jan", height: 'h-20' },
|
||
{ month: "Feb", height: 'h-12' },
|
||
{ month: "Mar", height: 'h-24' },
|
||
{ month: "Apr", height: 'h-26' },
|
||
{ month: "May", height: 'h-18' },
|
||
{ month: "Jun", height: 'h-20' },
|
||
];
|
||
|
||
export const activities = [
|
||
{ time: '09:42', text: '6/1009 assigned to ME Local', boldText: '6/1009' },
|
||
{ time: '09:18', text: 'Location checklist Block 1/2 completed', boldText: 'Block 1/2' },
|
||
{ time: '08:55', text: 'Meter MTR-1 reading logged · 58.45 kWh', boldText: 'Meter MTR-1' },
|
||
{ time: '08:30', text: 'PPM job card printed for APP-1100', boldText: 'APP-1100' },
|
||
];
|
||
export const colorMap = {
|
||
teal: 'bg-teal-400',
|
||
amber: 'bg-amber-500',
|
||
rose: 'bg-rose-500',
|
||
emerald: 'bg-emerald-500',
|
||
};
|
||
|
||
export const SATISFACTION_DRIVERS = [
|
||
{ label: "Workplace cleanliness", score: 88, color: "bg-[#10b981]" },
|
||
{ label: "Response to requests", score: 82, color: "bg-[#10b981]" },
|
||
{ label: "Amenities & facilities", score: 79, color: "bg-[#06b6d4]" },
|
||
{ label: "Communication", score: 71, color: "bg-[#f59e0b]" },
|
||
{ label: "Comfort (HVAC / light)", score: 84, color: "bg-[#06b6d4]" },
|
||
];
|
||
|
||
// Mock Data for Tickets & Suggestions
|
||
export const TICKETS_DATA = [
|
||
{ title: "Pantry coffee machine down", type: "Complaint", status: "OPEN" },
|
||
{ title: "Add covered parking", type: "Suggestion", status: "CLOSED" },
|
||
{ title: "Lift slow on L4", type: "Complaint", status: "OPEN" },
|
||
{ title: "Lift slow on L4", type: "Complaint", status: "CLOSED" },
|
||
{ title: "More water dispensers", type: "Complaint", status: "CLOSED" },
|
||
];
|
||
|
||
//Tabs used in Operations dashboards
|
||
|
||
export const equipmentTabs: string[] = [
|
||
'Equipment Groups',
|
||
'Site-Wise Equipment',
|
||
'PPM Checklist',
|
||
'AMC Checklist',
|
||
'PPM Schedule',
|
||
'AMC Schedule',
|
||
'Maintenance Calendar'
|
||
];
|
||
|
||
|
||
|
||
export const helpdeskTtabs: string[] =
|
||
['Location',
|
||
'Technical',
|
||
'Missed',
|
||
'Departments',
|
||
'HSQE'];
|
||
|
||
|
||
|
||
export const aiHelpdeskTabs: string[] = [
|
||
'Live triage',
|
||
'Invoice verification',
|
||
'SLA Enforecment',
|
||
'Automation rules',
|
||
|
||
];
|
||
|
||
export const Reqeusttabs: string[] = [
|
||
'TFM Requests',
|
||
'Engineering',
|
||
'Schedule Complaints'
|
||
];
|
||
export const trainingtabs: string[] = [
|
||
'Courses',
|
||
'Certificates & history',
|
||
|
||
];
|
||
|
||
export const statusFilters = [
|
||
{ label: 'All', count: 18 },
|
||
{ label: 'Registered', count: 4 },
|
||
{ label: 'Assigned', count: 3 },
|
||
{ label: 'Working', count: 4 },
|
||
{ label: 'Completed', count: 3 },
|
||
{ label: 'Overdue', count: 4 },
|
||
];
|
||
export const reportFilters = [
|
||
{ label: 'Site: All' },
|
||
{ label: 'Group: all' },
|
||
{ label: 'Status:All' },
|
||
|
||
];
|
||
|
||
|
||
export const workPermitFilters = [
|
||
{ label: 'All', count: 10 },
|
||
{ label: 'Awaiting', count: 3 },
|
||
{ label: 'Approved', count: 1},
|
||
{ label: 'Active', count: 2 },
|
||
{ label: 'Closed', count: 1 },
|
||
{ label: 'Expired', count: 1 },
|
||
{ label: 'Rejected', count: 1 },
|
||
];
|
||
|
||
export const visitorFilters = [
|
||
{ label: 'All', count: 12 },
|
||
{ label: 'Expected', count: 2 },
|
||
{ label: 'Pre-Reg', count: 2},
|
||
{ label: 'Onsite', count: 4 },
|
||
{ label: 'Left', count: 3 },
|
||
{ label: 'Denied', count: 1 },
|
||
|
||
];
|
||
|
||
// Data model interface
|
||
|
||
|
||
|
||
|
||
export const roomData = [
|
||
{
|
||
id: 1,
|
||
name: "Boardroom A",
|
||
location: "L10 • 16 seats",
|
||
status: "OCCUPIED",
|
||
statusColor: "bg-rose-500/10 text-rose-400 border-rose-500/20",
|
||
dotColor: "bg-rose-400",
|
||
tags: ["Video", "Display", "VC"],
|
||
subtitle: "Until 11:30 • Quarterly review",
|
||
actionType: "view"
|
||
},
|
||
{
|
||
id: 2,
|
||
name: "Huddle 1",
|
||
location: "L8 • 4 seats",
|
||
status: "AVAILABLE",
|
||
statusColor: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20",
|
||
dotColor: "bg-emerald-400",
|
||
tags: ["Display"],
|
||
subtitle: "Free now",
|
||
actionType: "book"
|
||
},
|
||
{
|
||
id: 3,
|
||
name: "Training Hall",
|
||
location: "L2 • 40 seats",
|
||
status: "RESERVED",
|
||
statusColor: "bg-amber-500/10 text-amber-400 border-amber-500/20",
|
||
dotColor: "bg-amber-400",
|
||
tags: ["Projector", "Mic", "Catering"],
|
||
subtitle: "Until 14:00 • Safety induction",
|
||
actionType: "view"
|
||
},
|
||
{
|
||
id: 4,
|
||
name: "Focus Room 3",
|
||
location: "L8 • 2 seats",
|
||
status: "AVAILABLE",
|
||
statusColor: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20",
|
||
dotColor: "bg-emerald-400",
|
||
tags: ["Display"],
|
||
subtitle: "Free now",
|
||
actionType: "book"
|
||
},
|
||
{
|
||
id: 5,
|
||
name: "Conf B",
|
||
location: "L5 • 10 seats",
|
||
status: "OCCUPIED",
|
||
statusColor: "bg-rose-500/10 text-rose-400 border-rose-500/20",
|
||
dotColor: "bg-rose-400",
|
||
tags: ["Video", "VC", "Whiteboard"],
|
||
subtitle: "Until 12:15 • Vendor call",
|
||
actionType: "view"
|
||
},
|
||
{
|
||
id: 6,
|
||
name: "Collab Zone",
|
||
location: "L3 • 8 seats",
|
||
status: "AVAILABLE",
|
||
statusColor: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20",
|
||
dotColor: "bg-emerald-400",
|
||
tags: ["Display", "Whiteboard"],
|
||
subtitle: "Free now",
|
||
actionType: "book"
|
||
}
|
||
];
|
||
|
||
export const scheduleData = [
|
||
{
|
||
room: "Boardroom A",
|
||
title: "Quarterly business review",
|
||
time: "09:00",
|
||
status: "occupied"
|
||
},
|
||
{
|
||
room: "Conf B",
|
||
title: "Vendor onboarding call",
|
||
time: "10:00",
|
||
status: "occupied"
|
||
},
|
||
{
|
||
room: "Training Hall",
|
||
title: "Fire-safety induction",
|
||
time: "11:30",
|
||
status: "reserved"
|
||
},
|
||
{
|
||
room: "Collab Zone",
|
||
title: "Design sprint",
|
||
time: "14:00",
|
||
status: "available"
|
||
},
|
||
{
|
||
room: "Huddle 1",
|
||
title: "1:1 sync",
|
||
time: "16:00",
|
||
status: "available"
|
||
}
|
||
];
|
||
export const workspaceTabs: string[] = [
|
||
'Desk Booking',
|
||
'Floor Plan',
|
||
'TimeTable',
|
||
|
||
];
|
||
export const connectedassettabs:string[]=[
|
||
'Asset Fleet',
|
||
'Excursions',
|
||
'Optimisation',
|
||
]
|
||
|
||
export const sustainabilitytabs:string[]=[
|
||
'ESG Data Hub',
|
||
'IoT sensor',
|
||
'Reporting engine',
|
||
'Target & forecasts',
|
||
'Social & goverance',
|
||
]
|
||
export const gpsTrackingtabs:string[]=[
|
||
'Live tracking',
|
||
'Geo-fences',
|
||
'Entry/exit logs',
|
||
'Route history',
|
||
'Mobile app',
|
||
]
|
||
export const reporttabs: string[] = [
|
||
'Equipment',
|
||
'Maintance',
|
||
'Checklists',
|
||
'Requests',
|
||
'Inventory',
|
||
'Energy',
|
||
'HSQE',
|
||
'MMR',
|
||
|
||
|
||
];
|
||
|
||
// Mock Data for Zone Utilization
|
||
export const zoneUtilizationData = [
|
||
{ name: "North Wing · L8", current: 39, max: 48, barColor: "bg-amber-400" },
|
||
{ name: "Quiet Zone · L8", current: 11, max: 24, barColor: "bg-teal-400" },
|
||
{ name: "Collab · L3", current: 22, max: 30, barColor: "bg-amber-400" },
|
||
{ name: "Hot Desk · L5", current: 51, max: 60, barColor: "bg-amber-400" },
|
||
];
|
||
|
||
// Mock Data for Planned vs Actual Categories
|
||
export const categoryData = [
|
||
{
|
||
category: "PPM & AMC contracts",
|
||
type: "OPEX",
|
||
planned: "₹48.0 L",
|
||
actual: "₹31.2 L",
|
||
variance: "+₹16.8 L",
|
||
varianceColor: "text-emerald-400",
|
||
utilization: 65,
|
||
barColor: "bg-teal-400"
|
||
},
|
||
{
|
||
category: "Reactive repairs",
|
||
type: "OPEX",
|
||
planned: "₹15.0 L",
|
||
actual: "₹16.8 L",
|
||
variance: "-₹1.8 L",
|
||
varianceColor: "text-rose-400",
|
||
utilization: 112,
|
||
barColor: "bg-rose-400"
|
||
},
|
||
{
|
||
category: "Energy & utilities",
|
||
type: "OPEX",
|
||
planned: "₹62.0 L",
|
||
actual: "₹54.1 L",
|
||
variance: "+₹7.9 L",
|
||
varianceColor: "text-emerald-400",
|
||
utilization: 87,
|
||
barColor: "bg-teal-400"
|
||
},
|
||
{
|
||
category: "Consumables & spares",
|
||
type: "OPEX",
|
||
planned: "₹9.0 L",
|
||
actual: "₹7.4 L",
|
||
variance: "+₹1.6 L",
|
||
varianceColor: "text-emerald-400",
|
||
utilization: 82,
|
||
barColor: "bg-teal-400"
|
||
},
|
||
{
|
||
category: "Equipment upgrades",
|
||
type: "CAPEX",
|
||
planned: "₹35.0 L",
|
||
actual: "₹12.0 L",
|
||
variance: "+₹23.0 L",
|
||
varianceColor: "text-emerald-400",
|
||
utilization: 34,
|
||
barColor: "bg-teal-400"
|
||
},
|
||
{
|
||
category: "Soft services",
|
||
type: "OPEX",
|
||
planned: "₹22.0 L",
|
||
actual: "₹20.5 L",
|
||
variance: "+₹1.5 L",
|
||
varianceColor: "text-emerald-400",
|
||
utilization: 93,
|
||
barColor: "bg-amber-400"
|
||
}
|
||
];
|
||
|
||
// Mock Data for Approval Queue
|
||
export const approvalQueueData = [
|
||
{
|
||
id: "BUD-114",
|
||
title: "Chiller compressor overhaul",
|
||
meta: "L2 • FM Head • ₹4.8 L",
|
||
status: "pending"
|
||
},
|
||
{
|
||
id: "BUD-115",
|
||
title: "Q3 energy budget revision",
|
||
meta: "L3 • Finance • ₹12.0 L",
|
||
status: "pending"
|
||
},
|
||
{
|
||
id: "BUD-112",
|
||
title: "Fire panel AMC renewal",
|
||
meta: "L1 • Site • ₹2.6 L",
|
||
status: "completed"
|
||
}
|
||
];
|
||
|
||
|
||
export const wasteStreams = [
|
||
{ name: "General / landfill", amount: "1240", percentage: 70, color: "bg-slate-500" },
|
||
{ name: "Recyclable (paper/plastic)", amount: "860", percentage: 50, color: "bg-teal-400" },
|
||
{ name: "Organic / compost", amount: "540", percentage: 35, color: "bg-emerald-400" },
|
||
{ name: "E-waste", amount: "120", percentage: 10, color: "bg-blue-500" },
|
||
{ name: "Hazardous", amount: "64", percentage: 5, color: "bg-rose-400" },
|
||
];
|
||
|
||
export const scheduleItems = [
|
||
{ frequency: "Mon · Wed · Fri", stream: "General + recyclable", vendor: "GreenCycle Pvt" },
|
||
{ frequency: "Tue · Sat", stream: "Organic / compost", vendor: "In-house" },
|
||
{ frequency: "Monthly", stream: "E-waste", vendor: "EcoReco" },
|
||
{ frequency: "On call", stream: "Hazardous", vendor: "Ramky Enviro" },
|
||
];
|
||
|
||
export const stockItems = [
|
||
{
|
||
item: "Cooling tower fan belt",
|
||
group: "HVAC",
|
||
store: "Block Store",
|
||
min: 5,
|
||
presentValue: 8,
|
||
unit: "Gallon",
|
||
status: "COMPLETED",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
item: "Air filter 24×24",
|
||
group: "HVAC",
|
||
store: "Block Store",
|
||
min: 5,
|
||
presentValue: 2,
|
||
unit: "Nos",
|
||
status: "OVERDUE",
|
||
isHighlighted: true,
|
||
},
|
||
{
|
||
item: "MCB 32A",
|
||
group: "Electrical",
|
||
store: "Block Store",
|
||
min: 5,
|
||
presentValue: 8,
|
||
unit: "Nos",
|
||
status: "COMPLETED",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
item: "Contactor 40A",
|
||
group: "Electrical",
|
||
store: "Block Store",
|
||
min: 2,
|
||
presentValue: 2,
|
||
unit: "Nos",
|
||
status: "OVERDUE",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
item: "PVC pipe 1\"",
|
||
group: "Plumbing",
|
||
store: "Main Store",
|
||
min: 3,
|
||
presentValue: 0,
|
||
unit: "Mtr",
|
||
status: "OVERDUE",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
item: "Submersible pump seal",
|
||
group: "Plumbing",
|
||
store: "Main Store",
|
||
min: 3,
|
||
presentValue: 2,
|
||
unit: "Nos",
|
||
status: "OVERDUE",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
item: "Refrigerant R410a",
|
||
group: "HVAC",
|
||
store: "Block Store",
|
||
min: 5,
|
||
presentValue: 0,
|
||
unit: "Kg",
|
||
status: "OVERDUE",
|
||
isHighlighted: false,
|
||
},
|
||
];
|
||
|
||
export const consumptionLedger = [
|
||
{
|
||
txn: "TXN-5200",
|
||
item: "Cooling tower fan belt",
|
||
type: "Consume",
|
||
qty: "2 Gallon",
|
||
jobCard: "026/1009",
|
||
date: "Jun 20, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5201",
|
||
item: "MCB 32A",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1016",
|
||
date: "Jun 21, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5202",
|
||
item: "Air filter 24×24",
|
||
type: "Receipt",
|
||
qty: "10 Nos",
|
||
jobCard: "—",
|
||
date: "Jun 22, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5203",
|
||
item: "Submersible pump seal",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1023",
|
||
date: "Jun 23, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5204",
|
||
item: "Air filter 24×24",
|
||
type: "Consume",
|
||
qty: "3 Nos",
|
||
jobCard: "026/1030",
|
||
date: "Jun 24, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5205",
|
||
item: "PVC pipe 1\"",
|
||
type: "Receipt",
|
||
qty: "20 Mtr",
|
||
jobCard: "—",
|
||
date: "Jun 25, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5406",
|
||
item: "Cooling tower fan belt",
|
||
type: "Consume",
|
||
qty: "2 Gallon",
|
||
jobCard: "026/1009",
|
||
date: "Jun 7, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5407",
|
||
item: "MCB 32A",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1016",
|
||
date: "Jun 7, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5200",
|
||
item: "Cooling tower fan belt",
|
||
type: "Consume",
|
||
qty: "2 Gallon",
|
||
jobCard: "026/1009",
|
||
date: "Jun 20, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5201",
|
||
item: "MCB 32A",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1016",
|
||
date: "Jun 21, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5202",
|
||
item: "Air filter 24×24",
|
||
type: "Receipt",
|
||
qty: "10 Nos",
|
||
jobCard: "—",
|
||
date: "Jun 22, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5203",
|
||
item: "Submersible pump seal",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1023",
|
||
date: "Jun 23, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5204",
|
||
item: "Air filter 24×24",
|
||
type: "Consume",
|
||
qty: "3 Nos",
|
||
jobCard: "026/1030",
|
||
date: "Jun 24, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5205",
|
||
item: "PVC pipe 1\"",
|
||
type: "Receipt",
|
||
qty: "20 Mtr",
|
||
jobCard: "—",
|
||
date: "Jun 25, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5406",
|
||
item: "Cooling tower fan belt",
|
||
type: "Consume",
|
||
qty: "2 Gallon",
|
||
jobCard: "026/1009",
|
||
date: "Jun 7, 2026",
|
||
},
|
||
{
|
||
txn: "TXN-5407",
|
||
item: "MCB 32A",
|
||
type: "Consume",
|
||
qty: "1 Nos",
|
||
jobCard: "026/1016",
|
||
date: "Jun 7, 2026",
|
||
},
|
||
];
|
||
|
||
|
||
export const vendorData = [
|
||
{
|
||
name: "Voltas Ltd",
|
||
id: "CTR-700",
|
||
scope: "HVAC AMC & breakdown",
|
||
rating: "4.6",
|
||
sla: "95%",
|
||
slaColor: "text-emerald-400",
|
||
response: "4.0h",
|
||
openJobs: "2",
|
||
},
|
||
{
|
||
name: "Blue Star",
|
||
id: "CTR-701",
|
||
scope: "Chiller & VRV service",
|
||
rating: "4.1",
|
||
sla: "88%",
|
||
slaColor: "text-amber-400",
|
||
response: "1.2h",
|
||
openJobs: "2",
|
||
},
|
||
{
|
||
name: "Sterling FM",
|
||
id: "CTR-702",
|
||
scope: "Integrated FM / soft services",
|
||
rating: "3.4",
|
||
sla: "94%",
|
||
slaColor: "text-emerald-400",
|
||
response: "2.4h",
|
||
openJobs: "4",
|
||
},
|
||
{
|
||
name: "OTIS Elevators",
|
||
id: "CTR-704",
|
||
scope: "Elevator AMC",
|
||
rating: "4.8",
|
||
sla: "95%",
|
||
slaColor: "text-emerald-400",
|
||
response: "2.8h",
|
||
openJobs: "—",
|
||
},
|
||
{
|
||
name: "Sodexo",
|
||
id: "CTR-705",
|
||
scope: "Soft services & cafeteria",
|
||
rating: "4.3",
|
||
sla: "90%",
|
||
slaColor: "text-amber-400",
|
||
response: "2.8h",
|
||
openJobs: "1",
|
||
},
|
||
{
|
||
name: "In-house team",
|
||
id: "—",
|
||
scope: "Day-to-day maintenance",
|
||
rating: "4.0",
|
||
sla: "93%",
|
||
slaColor: "text-amber-400",
|
||
response: "3.2h",
|
||
openJobs: "3",
|
||
},
|
||
];
|
||
|
||
export const fieldCrewData = [
|
||
{
|
||
initials: "RK",
|
||
name: "Ravi Kumar",
|
||
role: "M&E Technician • Chiller plant",
|
||
status: "ON-SITE",
|
||
statusType: "onsite",
|
||
time: "6.4h today",
|
||
},
|
||
{
|
||
initials: "SI",
|
||
name: "Sana Iqbal",
|
||
role: "HVAC Engineer • AHU room L7",
|
||
status: "ON-SITE",
|
||
statusType: "onsite",
|
||
time: "6.1h today",
|
||
},
|
||
{
|
||
initials: "MD",
|
||
name: "Mohan D.",
|
||
role: "Electrician • En route",
|
||
status: "EN-ROUTE",
|
||
statusType: "enroute",
|
||
time: "—",
|
||
},
|
||
{
|
||
initials: "LN",
|
||
name: "Lakshmi N.",
|
||
role: "Housekeeping Lead • Lobby + L2",
|
||
status: "ON-SITE",
|
||
statusType: "onsite",
|
||
time: "6.7h today",
|
||
},
|
||
{
|
||
initials: "AP",
|
||
name: "Arjun P.",
|
||
role: "Plumber • Off-site",
|
||
status: "OFF-SITE",
|
||
statusType: "offsite",
|
||
time: "—",
|
||
},
|
||
{
|
||
initials: "FR",
|
||
name: "Fatima R.",
|
||
role: "BMS Operator • Control room",
|
||
status: "ON-SITE",
|
||
statusType: "onsite",
|
||
time: "7.6h today",
|
||
},
|
||
];
|
||
|
||
export const permitsData = [
|
||
{
|
||
permit: "PTW-2663",
|
||
workingType: "Work at Height",
|
||
location: "Atrium void",
|
||
contractor: "Blue Star",
|
||
validityDate: "Jun 26, 2026",
|
||
validityTime: "08:30–17:00",
|
||
crew: 2,
|
||
status: "ACTIVE",
|
||
actionText: "Close out",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
permit: "PTW-2664",
|
||
workingType: "Electrical Isolation",
|
||
location: "STP wet well",
|
||
contractor: "Sterling FM",
|
||
validityDate: "Jun 26, 2026",
|
||
validityTime: "09:00–13:00",
|
||
crew: 3,
|
||
status: "SUBMITTED",
|
||
actionText: "Approve",
|
||
isHighlighted: true, // Row with highlight bar
|
||
},
|
||
{
|
||
permit: "PTW-2665",
|
||
workingType: "Confined Space",
|
||
location: "DG yard",
|
||
contractor: "In-house team",
|
||
validityDate: "Jun 26, 2026",
|
||
validityTime: "14:00–18:00",
|
||
crew: 4,
|
||
status: "APPROVED",
|
||
actionText: "Activate",
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
permit: "PTW-2666",
|
||
workingType: "Hot Work",
|
||
location: "Roof terrace",
|
||
contractor: "Voltas Ltd",
|
||
validityDate: "Jun 25, 2026",
|
||
validityTime: "08:00–12:00",
|
||
crew: 5,
|
||
status: "EXPIRED",
|
||
hasViewIconOnly: true,
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
permit: "PTW-2667",
|
||
workingType: "Work at Height",
|
||
location: "LT panel room",
|
||
contractor: "Blue Star",
|
||
validityDate: "Jun 25, 2026",
|
||
validityTime: "10:00–16:00",
|
||
crew: 2,
|
||
status: "CLOSED",
|
||
hasViewIconOnly: true,
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
permit: "PTW-2668",
|
||
workingType: "Electrical Isolation",
|
||
location: "Chiller plant",
|
||
contractor: "Sterling FM",
|
||
validityDate: "Jun 26, 2026",
|
||
validityTime: "11:00–15:00",
|
||
crew: 3,
|
||
status: "REJECTED",
|
||
hasViewIconOnly: true,
|
||
isHighlighted: false,
|
||
},
|
||
{
|
||
permit: "PTW-2726",
|
||
workingType: "Work at Height",
|
||
location: "Atrium void",
|
||
contractor: "Blue Star",
|
||
validityDate: "Jun 26, 2026",
|
||
validityTime: "08:30–17:00",
|
||
crew: 2,
|
||
status: "DRAFT",
|
||
actionText: "Submit",
|
||
isHighlighted: false,
|
||
},
|
||
];
|
||
|
||
|
||
export const LIVE_ACTIVITIES = [
|
||
{
|
||
time: "2 min ago",
|
||
title: "AC not cooling — 4F, Zone B",
|
||
detail: "Reset VAV setpoint via BMS · confirmed with requester",
|
||
status: "AUTO-RESOLVED",
|
||
conf: "96% conf",
|
||
statusColor: "text-emerald-400 bg-emerald-950/60 border-emerald-800/40",
|
||
dotColor: "bg-emerald-400",
|
||
},
|
||
{
|
||
time: "9 min ago",
|
||
title: "Water leakage near lobby lift",
|
||
detail: "Safety keyword detected → priority P1 · plumber dispatched",
|
||
status: "ESCALATED",
|
||
conf: "99% conf",
|
||
statusColor: "text-rose-400 bg-rose-950/60 border-rose-800/40",
|
||
dotColor: "bg-rose-400",
|
||
},
|
||
{
|
||
time: "22 min ago",
|
||
title: "Meeting room projector flickering",
|
||
detail: "Assigned to AV vendor · parts history attached",
|
||
status: "ROUTED",
|
||
conf: "88% conf",
|
||
statusColor: "text-sky-400 bg-sky-950/60 border-sky-800/40",
|
||
dotColor: "bg-sky-400",
|
||
},
|
||
{
|
||
time: "38 min ago",
|
||
title: "Request for extra chairs — Hall 2",
|
||
detail: "Soft-service task created · housekeeping confirmed",
|
||
status: "AUTO-RESOLVED",
|
||
conf: "94% conf",
|
||
statusColor: "text-emerald-400 bg-emerald-950/60 border-emerald-800/40",
|
||
dotColor: "bg-emerald-400",
|
||
},
|
||
{
|
||
time: "1 h ago",
|
||
title: "Bad odour in basement parking",
|
||
detail: "Linked to drain-line PPM due tomorrow — merged to avoid duplicate",
|
||
status: "ROUTED",
|
||
conf: "82% conf",
|
||
statusColor: "text-sky-400 bg-sky-950/60 border-sky-800/40",
|
||
dotColor: "bg-sky-400",
|
||
},
|
||
{
|
||
time: "2 h ago",
|
||
title: "Card reader not working — Gate 3",
|
||
detail: "Security-critical asset → P2 · vendor SLA timer started",
|
||
status: "ESCALATED",
|
||
conf: "97% conf",
|
||
statusColor: "text-amber-400 bg-amber-950/60 border-amber-800/40",
|
||
dotColor: "bg-amber-400",
|
||
},
|
||
];
|
||
|
||
export const HANDLES_DATA = [
|
||
{
|
||
title: "Routine comfort requests",
|
||
subtitle: "temperature, lighting, cleaning",
|
||
},
|
||
{
|
||
title: "Duplicate & merge detection",
|
||
subtitle: "links repeats to open WOs",
|
||
},
|
||
{
|
||
title: "Priority & safety triage",
|
||
subtitle: "P1 keywords escalate instantly",
|
||
},
|
||
{
|
||
title: "Vendor dispatch",
|
||
subtitle: "assigns per contract & skill",
|
||
},
|
||
];
|