US-009: Create constellation data mapping file

- Create src/data/constellation.ts with role-skill mapping for D3 career graph
- Export RoleSkillMapping interface defining roleId and skillIds structure
- Map 6 career roles to their associated skill IDs from skills.ts
- Export constellationNodes array (5 role nodes + 21 skill nodes) with organization, startYear, endYear, orgColor for roles and domain for skills
- Export constellationLinks array connecting skills to roles with strength values (0-1)
- Role orgColors: Tesco (#00897B), NHS (#005EB8) for distinct visual grouping
- All role IDs match consultation IDs from consultations.ts

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 23:17:20 +00:00
parent b18746ecee
commit 2886685573
+348
View File
@@ -0,0 +1,348 @@
import type { ConstellationNode, ConstellationLink } from '@/types/pmr'
/**
* Role-skill mapping for the career constellation graph.
* Maps consultation IDs to the skill IDs used/developed in each role.
*/
export interface RoleSkillMapping {
roleId: string // matches consultation.id
skillIds: string[] // matches skill IDs from skills.ts
}
export const roleSkillMappings: RoleSkillMapping[] = [
{
roleId: 'duty-pharmacist-2016',
skillIds: [
'medicines-optimisation',
'team-development',
'excel',
],
},
{
roleId: 'pharmacy-manager-2017',
skillIds: [
'medicines-optimisation',
'team-development',
'data-analysis',
'excel',
'change-management',
'budget-management',
'stakeholder-engagement',
],
},
{
roleId: 'high-cost-drugs-2022',
skillIds: [
'medicines-optimisation',
'nice-ta',
'clinical-pathways',
'health-economics',
'python',
'data-analysis',
'sql',
'algorithm-design',
'stakeholder-engagement',
],
},
{
roleId: 'deputy-head-2024',
skillIds: [
'population-health',
'medicines-optimisation',
'data-analysis',
'python',
'sql',
'power-bi',
'controlled-drugs',
'budget-management',
'financial-modelling',
'pharma-negotiation',
'stakeholder-engagement',
'team-development',
'executive-comms',
],
},
{
roleId: 'interim-head-2025',
skillIds: [
'population-health',
'medicines-optimisation',
'data-analysis',
'python',
'sql',
'algorithm-design',
'data-pipelines',
'budget-management',
'financial-modelling',
'stakeholder-engagement',
'executive-comms',
'change-management',
],
},
]
/**
* Constellation nodes for the D3 force graph.
* Includes both role nodes and skill nodes.
*/
export const constellationNodes: ConstellationNode[] = [
// Role nodes (6 roles)
{
id: 'duty-pharmacist-2016',
type: 'role',
label: 'Duty Pharmacy Manager',
shortLabel: 'Duty Mgr',
organization: 'Tesco PLC',
startYear: 2016,
endYear: 2017,
orgColor: '#00897B',
},
{
id: 'pharmacy-manager-2017',
type: 'role',
label: 'Pharmacy Manager',
shortLabel: 'Pharm Mgr',
organization: 'Tesco PLC',
startYear: 2017,
endYear: 2022,
orgColor: '#00897B',
},
{
id: 'high-cost-drugs-2022',
type: 'role',
label: 'High-Cost Drugs & Interface Pharmacist',
shortLabel: 'HCD Pharm',
organization: 'NHS Norfolk & Waveney ICB',
startYear: 2022,
endYear: 2024,
orgColor: '#005EB8',
},
{
id: 'deputy-head-2024',
type: 'role',
label: 'Deputy Head, Population Health & Data Analysis',
shortLabel: 'Deputy Head',
organization: 'NHS Norfolk & Waveney ICB',
startYear: 2024,
endYear: null,
orgColor: '#005EB8',
},
{
id: 'interim-head-2025',
type: 'role',
label: 'Interim Head, Population Health & Data Analysis',
shortLabel: 'Interim Head',
organization: 'NHS Norfolk & Waveney ICB',
startYear: 2025,
endYear: 2025,
orgColor: '#005EB8',
},
// Skill nodes - Technical (8 skills)
{
id: 'data-analysis',
type: 'skill',
label: 'Data Analysis',
domain: 'technical',
},
{
id: 'python',
type: 'skill',
label: 'Python',
domain: 'technical',
},
{
id: 'sql',
type: 'skill',
label: 'SQL',
domain: 'technical',
},
{
id: 'power-bi',
type: 'skill',
label: 'Power BI',
domain: 'technical',
},
{
id: 'javascript-typescript',
type: 'skill',
label: 'JavaScript / TypeScript',
shortLabel: 'JS/TS',
domain: 'technical',
},
{
id: 'excel',
type: 'skill',
label: 'Excel',
domain: 'technical',
},
{
id: 'algorithm-design',
type: 'skill',
label: 'Algorithm Design',
shortLabel: 'Algorithms',
domain: 'technical',
},
{
id: 'data-pipelines',
type: 'skill',
label: 'Data Pipelines',
shortLabel: 'Pipelines',
domain: 'technical',
},
// Skill nodes - Healthcare Domain (6 skills)
{
id: 'medicines-optimisation',
type: 'skill',
label: 'Medicines Optimisation',
shortLabel: 'Med Opt',
domain: 'clinical',
},
{
id: 'population-health',
type: 'skill',
label: 'Population Health',
shortLabel: 'Pop Health',
domain: 'clinical',
},
{
id: 'nice-ta',
type: 'skill',
label: 'NICE TA Implementation',
shortLabel: 'NICE TA',
domain: 'clinical',
},
{
id: 'health-economics',
type: 'skill',
label: 'Health Economics',
shortLabel: 'Health Econ',
domain: 'clinical',
},
{
id: 'clinical-pathways',
type: 'skill',
label: 'Clinical Pathways',
shortLabel: 'Pathways',
domain: 'clinical',
},
{
id: 'controlled-drugs',
type: 'skill',
label: 'Controlled Drugs',
shortLabel: 'CD',
domain: 'clinical',
},
// Skill nodes - Strategic & Leadership (7 skills)
{
id: 'budget-management',
type: 'skill',
label: 'Budget Management',
shortLabel: 'Budget',
domain: 'leadership',
},
{
id: 'stakeholder-engagement',
type: 'skill',
label: 'Stakeholder Engagement',
shortLabel: 'Stakeholders',
domain: 'leadership',
},
{
id: 'pharma-negotiation',
type: 'skill',
label: 'Pharmaceutical Negotiation',
shortLabel: 'Negotiation',
domain: 'leadership',
},
{
id: 'team-development',
type: 'skill',
label: 'Team Development',
shortLabel: 'Team Dev',
domain: 'leadership',
},
{
id: 'change-management',
type: 'skill',
label: 'Change Management',
shortLabel: 'Change Mgmt',
domain: 'leadership',
},
{
id: 'financial-modelling',
type: 'skill',
label: 'Financial Modelling',
shortLabel: 'Fin Model',
domain: 'leadership',
},
{
id: 'executive-comms',
type: 'skill',
label: 'Executive Communication',
shortLabel: 'Exec Comms',
domain: 'leadership',
},
]
/**
* Constellation links connecting skills to roles.
* Strength values (0-1) indicate how central that skill was to the role.
*/
export const constellationLinks: ConstellationLink[] = [
// Duty Pharmacist 2016 → Skills (foundation role)
{ source: 'duty-pharmacist-2016', target: 'medicines-optimisation', strength: 0.9 },
{ source: 'duty-pharmacist-2016', target: 'team-development', strength: 0.6 },
{ source: 'duty-pharmacist-2016', target: 'excel', strength: 0.5 },
// Pharmacy Manager 2017 → Skills (broad operational role)
{ source: 'pharmacy-manager-2017', target: 'medicines-optimisation', strength: 0.9 },
{ source: 'pharmacy-manager-2017', target: 'team-development', strength: 0.8 },
{ source: 'pharmacy-manager-2017', target: 'data-analysis', strength: 0.7 },
{ source: 'pharmacy-manager-2017', target: 'excel', strength: 0.7 },
{ source: 'pharmacy-manager-2017', target: 'change-management', strength: 0.6 },
{ source: 'pharmacy-manager-2017', target: 'budget-management', strength: 0.5 },
{ source: 'pharmacy-manager-2017', target: 'stakeholder-engagement', strength: 0.6 },
// High-Cost Drugs 2022 → Skills (technical + clinical pathway role)
{ source: 'high-cost-drugs-2022', target: 'medicines-optimisation', strength: 0.8 },
{ source: 'high-cost-drugs-2022', target: 'nice-ta', strength: 0.9 },
{ source: 'high-cost-drugs-2022', target: 'clinical-pathways', strength: 0.9 },
{ source: 'high-cost-drugs-2022', target: 'health-economics', strength: 0.7 },
{ source: 'high-cost-drugs-2022', target: 'python', strength: 0.8 },
{ source: 'high-cost-drugs-2022', target: 'data-analysis', strength: 0.8 },
{ source: 'high-cost-drugs-2022', target: 'sql', strength: 0.7 },
{ source: 'high-cost-drugs-2022', target: 'algorithm-design', strength: 0.6 },
{ source: 'high-cost-drugs-2022', target: 'stakeholder-engagement', strength: 0.7 },
// Deputy Head 2024 → Skills (strategic + analytical leadership)
{ source: 'deputy-head-2024', target: 'population-health', strength: 0.95 },
{ source: 'deputy-head-2024', target: 'medicines-optimisation', strength: 0.9 },
{ source: 'deputy-head-2024', target: 'data-analysis', strength: 0.95 },
{ source: 'deputy-head-2024', target: 'python', strength: 0.9 },
{ source: 'deputy-head-2024', target: 'sql', strength: 0.9 },
{ source: 'deputy-head-2024', target: 'power-bi', strength: 0.8 },
{ source: 'deputy-head-2024', target: 'controlled-drugs', strength: 0.7 },
{ source: 'deputy-head-2024', target: 'budget-management', strength: 0.9 },
{ source: 'deputy-head-2024', target: 'financial-modelling', strength: 0.8 },
{ source: 'deputy-head-2024', target: 'pharma-negotiation', strength: 0.7 },
{ source: 'deputy-head-2024', target: 'stakeholder-engagement', strength: 0.9 },
{ source: 'deputy-head-2024', target: 'team-development', strength: 0.8 },
{ source: 'deputy-head-2024', target: 'executive-comms', strength: 0.85 },
// Interim Head 2025 → Skills (peak analytical + strategic delivery)
{ source: 'interim-head-2025', target: 'population-health', strength: 0.95 },
{ source: 'interim-head-2025', target: 'medicines-optimisation', strength: 0.9 },
{ source: 'interim-head-2025', target: 'data-analysis', strength: 1.0 },
{ source: 'interim-head-2025', target: 'python', strength: 0.95 },
{ source: 'interim-head-2025', target: 'sql', strength: 0.95 },
{ source: 'interim-head-2025', target: 'algorithm-design', strength: 0.9 },
{ source: 'interim-head-2025', target: 'data-pipelines', strength: 0.8 },
{ source: 'interim-head-2025', target: 'budget-management', strength: 0.9 },
{ source: 'interim-head-2025', target: 'financial-modelling', strength: 0.85 },
{ source: 'interim-head-2025', target: 'stakeholder-engagement', strength: 0.9 },
{ source: 'interim-head-2025', target: 'executive-comms', strength: 0.9 },
{ source: 'interim-head-2025', target: 'change-management', strength: 0.7 },
]