667 lines
17 KiB
TypeScript
667 lines
17 KiB
TypeScript
|
||
|
||
|
||
|
||
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 plantLoadData = [
|
||
{ month: '08', height: 'h-[35%]' },
|
||
{ month: '09', height: 'h-[38%]' },
|
||
{ month: '10', height: 'h-[32%]' },
|
||
{ month: '11', height: 'h-[40%]' },
|
||
{ month: '12', height: 'h-[52%]' },
|
||
{ month: '13', height: 'h-[68%]' },
|
||
{ month: '14', height: 'h-[78%]' },
|
||
{ month: '15', height: 'h-[78%]' },
|
||
{ month: '16', height: 'h-[78%]' },
|
||
{ month: '17', height: 'h-[78%]' },
|
||
{ month: '18', height: 'h-[78%]' },
|
||
{ month: '19', height: 'h-[78%]' }
|
||
];
|
||
|
||
// Initial roles state
|
||
export const rolesList = [
|
||
{ id: "admin", label: "Admin", badge: "all" },
|
||
{ id: "helpdesk", label: "Helpdesk", badge: "scoped" },
|
||
{ id: "mne_supervisor", label: "M&E Supervisor", badge: "scoped" },
|
||
{ id: "technician", label: "Technician", badge: "scoped" },
|
||
{ id: "tenant", label: "Tenant", badge: "scoped" },
|
||
];
|
||
|
||
// Initial permissions table data
|
||
export const initialPermissions = [
|
||
{
|
||
id: 1,
|
||
module: "Help Desk",
|
||
menu: "Daily Location Checklist",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 2,
|
||
module: "Equipment",
|
||
menu: "Site-Wise Equipment",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 3,
|
||
module: "Equipment",
|
||
menu: "AMC Schedule",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 4,
|
||
module: "Request",
|
||
menu: "TFM Request",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 5,
|
||
module: "Energy",
|
||
menu: "Meter Reading",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 6,
|
||
module: "Master",
|
||
menu: "Request Location",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
{
|
||
id: 7,
|
||
module: "Security",
|
||
menu: "Users",
|
||
permissions: { all: false, view: true, add: true, edit: true, delete: false, cancel: true, print: true },
|
||
},
|
||
];
|
||
|
||
|
||
|
||
export const blocks = ["Block 1", "Block 2", "Tower A"];
|
||
export const floors = ["Ground", "Floor 1", "Floor 2"];
|
||
export const zones = ["Zone N", "Zone Z1", "Zone Z2"];
|
||
// Mock user location data matching the screenshot
|
||
export const userData = [
|
||
{
|
||
name: "Dhananjay T.",
|
||
email: "dhananjay@kafm.io",
|
||
mobile: "7489477369",
|
||
latitude: "18.5450",
|
||
longitude: "73.7935",
|
||
site: "Apple One",
|
||
// Relative coordinates for the map visual dots (X%, Y%)
|
||
x: "19%",
|
||
y: "38%",
|
||
},
|
||
{
|
||
name: "ME Local",
|
||
email: "me.local@kafm.io",
|
||
mobile: "9876543210",
|
||
latitude: "18.5469",
|
||
longitude: "73.7945",
|
||
site: "Apple One",
|
||
x: "44%",
|
||
y: "43%",
|
||
},
|
||
{
|
||
name: "TECH Local",
|
||
email: "tech.local@kafm.io",
|
||
mobile: "9123456780",
|
||
latitude: "18.5441",
|
||
longitude: "73.7951",
|
||
site: "Apple One",
|
||
x: "69%",
|
||
y: "48%",
|
||
},
|
||
];
|
||
|
||
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",
|
||
},
|
||
];
|