Skill updates

This commit is contained in:
2026-02-19 18:32:36 +00:00
parent 6bf5a6b6b2
commit cb1c958f68
12 changed files with 301 additions and 241 deletions
@@ -1,10 +1,10 @@
import React from 'react'
import type { LucideIcon } from 'lucide-react'
import {
BarChart3, Code2, Database, PieChart, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck,
TrendingUp, Route, ShieldAlert, Banknote, Handshake,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation,
BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, BookOpen, Store,
Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
ChevronRight,
} from 'lucide-react'
import { CardHeader } from './Card'
@@ -14,10 +14,10 @@ import { getSkillsUICopy } from '@/lib/profile-content'
import type { SkillMedication } from '@/types/pmr'
const iconMap: Record<string, LucideIcon> = {
BarChart3, Code2, Database, PieChart, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck,
TrendingUp, Route, ShieldAlert, Banknote, Handshake,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation,
BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, BookOpen, Store,
Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
}
+2 -2
View File
@@ -9,8 +9,8 @@ interface SkillDetailProps {
// Category display names
const categoryLabels: Record<SkillMedication['category'], string> = {
Technical: 'Technical',
Domain: 'Healthcare Domain',
Leadership: 'Strategic & Leadership',
Clinical: 'Clinical',
Strategic: 'Strategic',
}
export function SkillDetail({ skill }: SkillDetailProps) {
+8 -8
View File
@@ -1,10 +1,10 @@
import React, { useEffect, useRef } from 'react'
import type { LucideIcon } from 'lucide-react'
import {
BarChart3, Code2, Database, PieChart, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck,
TrendingUp, Route, ShieldAlert, Banknote, Handshake,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation,
BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, BookOpen, Store,
Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
ChevronRight,
} from 'lucide-react'
import { skills } from '@/data/skills'
@@ -13,10 +13,10 @@ import { getSkillsUICopy } from '@/lib/profile-content'
import type { SkillMedication, SkillCategory } from '@/types/pmr'
const iconMap: Record<string, LucideIcon> = {
BarChart3, Code2, Database, PieChart, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck,
TrendingUp, Route, ShieldAlert, Banknote, Handshake,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation,
BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, BookOpen, Store,
Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
}
interface SkillsAllDetailProps {
+3 -3
View File
@@ -91,9 +91,9 @@ Mathematics A*, Chemistry B, Politics C.
Professional registration required to practise as a pharmacist in Great Britain.
## Skills
Technical: [skill-data-analysis] Data Analysis & Prescribing Analytics (9yr, 95%), [skill-python] Python inc. Pandas (8yr, 90%), [skill-sql] SQL & Database Design (3yr, 88%), [skill-power-bi] Power BI, DAX & Dashboard Development (5yr, 92%), [skill-javascript-typescript] JavaScript/TypeScript (3yr, 70%), [skill-excel] Excel & Spreadsheet Modelling (9yr, 85%), [skill-algorithm-design] Algorithm Design & Clinical Decision Support (3yr, 82%), [skill-data-pipelines] Data Pipelines & ETL (2yr, 75%), [skill-snomed-dmd] SNOMED CT, dm+d & Clinical Coding (3yr, 80%), [skill-ehr-systems] EHR Systems: SystmOne, EMIS, Blueteq (3yr, 78%)
Domain: [skill-medicines-optimisation] Medicines Optimisation & Formulary Management (9yr, 95%), [skill-population-health] Population Health Analytics & Real-World Evidence (3yr, 90%), [skill-nice-ta] NICE TA Implementation & Health Technology Assessment (3yr, 92%), [skill-health-economics] Health Economics & Cost-Effectiveness Analysis (3yr, 80%), [skill-clinical-pathways] Clinical Pathway Development & Prior Authorisation (3yr, 88%), [skill-controlled-drugs] Controlled Drugs & Medicines Safety (1yr, 85%), [skill-commissioning] Commissioning & Primary/Secondary Care Interface (3yr, 82%)
Leadership: [skill-budget-management] Budget Management & Financial Planning (1yr, 90%), [skill-stakeholder-engagement] Stakeholder Engagement & Cross-Organisational Collaboration (3yr, 88%), [skill-pharma-negotiation] Pharmaceutical Negotiation & Commercial Awareness (1yr, 82%), [skill-team-development] Team Development, Training & Coaching (8yr, 85%), [skill-change-management] Change Management & System Transformation (7yr, 80%), [skill-financial-modelling] Financial Scenario Modelling & Forecasting (1yr, 78%), [skill-executive-comms] Executive Communication & Board Reporting (1yr, 85%), [skill-matrix-leadership] Matrix Leadership & Leading Without Authority (3yr, 80%)
Technical: [skill-data-analysis] Data Analysis (10yr, 4x daily), [skill-python] Python (8yr, 3x daily), [skill-sql] SQL (3yr, 3x daily), [skill-dashboard-dev] Dashboard Development (3yr, weekly), [skill-ai-prompt-engineering] AI & Prompt Engineering (2yr, 4x daily), [skill-javascript-typescript] JavaScript/TypeScript (6yr, as needed)
Clinical: [skill-medicines-optimisation] Medicines Optimisation (10yr, 34x daily), [skill-population-health] Population Health (2yr, daily), [skill-nice-ta] NICE TA Implementation (4yr, 12x weekly), [skill-health-system-prescribing] Health System Prescribing Mgmt (2yr, daily), [skill-health-economics] Health Economics (4yr, 12x daily), [skill-clinical-pathways] Clinical Pathways (4yr, daily), [skill-formulary-commissioning] Formulary & Commissioning (4yr, weekly), [skill-community-pharmacy] Community Pharmacy Practice (11yr, as needed)
Strategic: [skill-executive-comms] Executive Communication (2yr, bi-monthly), [skill-financial-modelling] Financial Scenario Modelling (4yr, weekly), [skill-budget-management] Budget Management (2yr, 2x weekly), [skill-stakeholder-engagement] Stakeholder Engagement (4yr, daily), [skill-change-management] Change Management (10yr, as needed), [skill-healthcare-leadership] Healthcare Leadership (8yr, daily)
## Response Rules
1. Answer ONLY from the data above. If the answer is not in the data, say "I don't have that information" never invent facts, roles, dates, achievements, URLs, or contact details.
+2 -2
View File
@@ -67,8 +67,8 @@ export const profileContent: DeepReadonly<ProfileContent> = {
viewAllLabel: 'View all',
categories: [
{ id: 'Technical', label: 'Technical' },
{ id: 'Domain', label: 'Healthcare Domain' },
{ id: 'Leadership', label: 'Strategic & Leadership' },
{ id: 'Clinical', label: 'Clinical' },
{ id: 'Strategic', label: 'Strategic' },
],
},
},
+145 -150
View File
@@ -1,13 +1,13 @@
import type { SkillMedication } from '@/types/pmr'
export const skills: SkillMedication[] = [
// Technical (8 skills)
// Technical (6 skills)
{
id: 'data-analysis',
name: 'Data Analysis',
frequency: 'Twice daily',
frequency: '4x daily',
startYear: 2016,
yearsOfExperience: 9,
yearsOfExperience: 10,
category: 'Technical',
status: 'Active',
icon: 'BarChart3',
@@ -21,14 +21,14 @@ export const skills: SkillMedication[] = [
{
id: 'python',
name: 'Python',
frequency: 'Daily',
startYear: 2017,
frequency: '3x daily',
startYear: 2018,
yearsOfExperience: 8,
category: 'Technical',
status: 'Active',
icon: 'Code2',
prescribingHistory: [
{ year: 2017, description: 'Started: Self-taught during Tesco night shifts for data analysis automation' },
{ year: 2018, description: 'Started: Self-taught during Tesco night shifts for data analysis automation' },
{ year: 2019, description: 'Increased: Dashboard development, data pipeline work' },
{ year: 2022, description: 'Specialist use: Blueteq automation, Sankey analysis tools' },
{ year: 2024, description: 'Advanced: Switching algorithm (14,000 patients), CD monitoring' },
@@ -38,41 +38,53 @@ export const skills: SkillMedication[] = [
{
id: 'sql',
name: 'SQL',
frequency: 'Daily',
startYear: 2022,
frequency: '3x daily',
startYear: 2023,
yearsOfExperience: 3,
category: 'Technical',
status: 'Active',
icon: 'Database',
prescribingHistory: [
{ year: 2022, description: 'Started: Gained access to NHS databases, prescribing data querying' },
{ year: 2023, description: 'Increased: Complex joins, data transformation, Blueteq integration' },
{ year: 2024, description: 'Specialist: Comprehensive medicines data table development' },
{ year: 2023, description: 'Started: NHS database access, prescribing data querying' },
{ year: 2024, description: 'Increased: Complex joins, data transformation, Blueteq integration' },
{ year: 2025, description: 'Current: Population health data infrastructure' },
],
},
{
id: 'power-bi',
name: 'Power BI',
frequency: 'Once weekly',
startYear: 2020,
yearsOfExperience: 5,
id: 'dashboard-dev',
name: 'Dashboard Development',
frequency: 'Weekly',
startYear: 2023,
yearsOfExperience: 3,
category: 'Technical',
status: 'Active',
icon: 'PieChart',
icon: 'LayoutDashboard',
prescribingHistory: [
{ year: 2020, description: 'Started: Dashboard creation for team reporting' },
{ year: 2022, description: 'Increased: DAX measures, data modelling' },
{ year: 2024, description: 'Advanced: Switching progress dashboards, executive reporting' },
{ year: 2025, description: 'Current: DOAC switching scenario model, executive reporting' },
{ year: 2023, description: 'Started: Power BI dashboards for team reporting and DAX measures' },
{ year: 2024, description: 'Increased: Interactive DOAC switching scenario model, executive reporting' },
{ year: 2025, description: 'Current: Self-serve analytics dashboards, incentive scheme tracking' },
],
},
{
id: 'ai-prompt-engineering',
name: 'AI & Prompt Engineering',
frequency: '4x daily',
startYear: 2024,
yearsOfExperience: 2,
category: 'Technical',
status: 'Active',
icon: 'Bot',
prescribingHistory: [
{ year: 2024, description: 'Started: LLM-assisted code generation and data analysis workflows' },
{ year: 2025, description: 'Current: Agentic coding, prompt design for clinical data extraction' },
],
},
{
id: 'javascript-typescript',
name: 'JavaScript / TypeScript',
frequency: 'When required',
startYear: 2022,
yearsOfExperience: 3,
frequency: 'As needed',
startYear: 2020,
yearsOfExperience: 6,
category: 'Technical',
status: 'Active',
icon: 'FileCode2',
@@ -82,55 +94,15 @@ export const skills: SkillMedication[] = [
{ year: 2024, description: 'Current: CV/portfolio development, interactive tools' },
],
},
{
id: 'excel',
name: 'Excel',
frequency: 'Daily',
startYear: 2016,
yearsOfExperience: 9,
category: 'Technical',
status: 'Active',
icon: 'Sheet',
},
{
id: 'algorithm-design',
name: 'Algorithm Design',
frequency: 'Once weekly',
startYear: 2022,
yearsOfExperience: 3,
category: 'Technical',
status: 'Active',
icon: 'GitBranch',
prescribingHistory: [
{ year: 2022, description: 'Started: Basic automation logic for form generation' },
{ year: 2024, description: 'Increased: Controlled drug monitoring calculations' },
{ year: 2025, description: 'Current: Patient switching algorithm (14,000 identified)' },
],
},
{
id: 'data-pipelines',
name: 'Data Pipelines',
frequency: 'Once weekly',
startYear: 2023,
yearsOfExperience: 2,
category: 'Technical',
status: 'Active',
icon: 'Workflow',
prescribingHistory: [
{ year: 2022, description: 'Started: ETL processes for Blueteq integration' },
{ year: 2024, description: 'Increased: dm+d standardisation, morphine conversions' },
{ year: 2025, description: 'Current: ICS-wide data infrastructure' },
],
},
// Healthcare Domain (6 skills)
// Clinical (8 skills)
{
id: 'medicines-optimisation',
name: 'Medicines Optimisation',
frequency: 'Twice daily',
frequency: '34x daily',
startYear: 2016,
yearsOfExperience: 9,
category: 'Domain',
yearsOfExperience: 10,
category: 'Clinical',
status: 'Active',
icon: 'Pill',
prescribingHistory: [
@@ -144,24 +116,23 @@ export const skills: SkillMedication[] = [
id: 'population-health',
name: 'Population Health',
frequency: 'Daily',
startYear: 2022,
yearsOfExperience: 3,
category: 'Domain',
startYear: 2024,
yearsOfExperience: 2,
category: 'Clinical',
status: 'Active',
icon: 'Users',
prescribingHistory: [
{ year: 2022, description: 'Started: GP prescribing data analysis' },
{ year: 2024, description: 'Increased: 1.2M population coverage' },
{ year: 2025, description: 'Current: ICS-wide health inequality analysis' },
{ year: 2024, description: 'Started: 1.2M population coverage, ICS-wide analytics' },
{ year: 2025, description: 'Current: Health inequality analysis, population-level interventions' },
],
},
{
id: 'nice-ta',
name: 'NICE TA Implementation',
frequency: 'Once weekly',
frequency: '12x weekly',
startYear: 2022,
yearsOfExperience: 3,
category: 'Domain',
yearsOfExperience: 4,
category: 'Clinical',
status: 'Active',
icon: 'FileCheck',
prescribingHistory: [
@@ -170,13 +141,27 @@ export const skills: SkillMedication[] = [
{ year: 2024, description: 'Current: Tirzepatide (TA1026) commissioning' },
],
},
{
id: 'health-system-prescribing',
name: 'Health System Prescribing Mgmt',
frequency: 'Daily',
startYear: 2024,
yearsOfExperience: 2,
category: 'Clinical',
status: 'Active',
icon: 'Stethoscope',
prescribingHistory: [
{ year: 2024, description: 'Started: dm+d medicines data table, OME calculations, prescribing infrastructure' },
{ year: 2025, description: 'Current: Patient-level SQL analytics, self-serve prescribing model' },
],
},
{
id: 'health-economics',
name: 'Health Economics',
frequency: 'Once weekly',
frequency: '12x daily',
startYear: 2022,
yearsOfExperience: 3,
category: 'Domain',
yearsOfExperience: 4,
category: 'Clinical',
status: 'Active',
icon: 'TrendingUp',
prescribingHistory: [
@@ -188,10 +173,10 @@ export const skills: SkillMedication[] = [
{
id: 'clinical-pathways',
name: 'Clinical Pathways',
frequency: 'Once weekly',
frequency: 'Daily',
startYear: 2022,
yearsOfExperience: 3,
category: 'Domain',
yearsOfExperience: 4,
category: 'Clinical',
status: 'Active',
icon: 'Route',
prescribingHistory: [
@@ -201,29 +186,73 @@ export const skills: SkillMedication[] = [
],
},
{
id: 'controlled-drugs',
name: 'Controlled Drugs',
frequency: 'When required',
startYear: 2024,
yearsOfExperience: 1,
category: 'Domain',
id: 'formulary-commissioning',
name: 'Formulary & Commissioning',
frequency: 'Weekly',
startYear: 2022,
yearsOfExperience: 4,
category: 'Clinical',
status: 'Active',
icon: 'ShieldAlert',
icon: 'BookOpen',
prescribingHistory: [
{ year: 2024, description: 'Started: OME calculation system development' },
{ year: 2024, description: 'Increased: Population-scale monitoring capability' },
{ year: 2025, description: 'Current: High-risk patient identification, diversion detection' },
{ year: 2022, description: 'Started: High-cost drug formulary management, Blueteq prior authorisation' },
{ year: 2024, description: 'Increased: Tirzepatide commissioning, primary care delivery model' },
{ year: 2025, description: 'Current: System-wide formulary governance' },
],
},
{
id: 'community-pharmacy',
name: 'Community Pharmacy Practice',
frequency: 'As needed',
startYear: 2015,
yearsOfExperience: 11,
category: 'Clinical',
status: 'Active',
icon: 'Store',
prescribingHistory: [
{ year: 2015, description: 'Started: Pre-registration training, PGD initiation, palliative care screening' },
{ year: 2016, description: 'Increased: 100-hour contract management, clinical service delivery' },
{ year: 2017, description: 'Advanced: National process adoption, asthma screening innovation' },
],
},
// Strategic & Leadership (7 skills)
// Strategic (6 skills)
{
id: 'executive-comms',
name: 'Executive Communication',
frequency: 'Bi-monthly',
startYear: 2024,
yearsOfExperience: 2,
category: 'Strategic',
status: 'Active',
icon: 'Presentation',
prescribingHistory: [
{ year: 2024, description: 'Started: CMO presentations, executive stakeholder engagement' },
{ year: 2025, description: 'Current: System-level programme board reporting' },
],
},
{
id: 'financial-modelling',
name: 'Financial Scenario Modelling',
frequency: 'Weekly',
startYear: 2022,
yearsOfExperience: 4,
category: 'Strategic',
status: 'Active',
icon: 'Calculator',
prescribingHistory: [
{ year: 2022, description: 'Started: High-cost drug financial impact modelling' },
{ year: 2024, description: 'Increased: DOAC switching scenario model, rebate mechanics' },
{ year: 2025, description: 'Current: Efficiency programme prioritisation, £215M budget forecasting' },
],
},
{
id: 'budget-management',
name: 'Budget Management',
frequency: 'Daily',
frequency: '2x weekly',
startYear: 2024,
yearsOfExperience: 1,
category: 'Leadership',
yearsOfExperience: 2,
category: 'Strategic',
status: 'Active',
icon: 'Banknote',
prescribingHistory: [
@@ -235,10 +264,10 @@ export const skills: SkillMedication[] = [
{
id: 'stakeholder-engagement',
name: 'Stakeholder Engagement',
frequency: 'Twice daily',
frequency: 'Daily',
startYear: 2022,
yearsOfExperience: 3,
category: 'Leadership',
yearsOfExperience: 4,
category: 'Strategic',
status: 'Active',
icon: 'Handshake',
prescribingHistory: [
@@ -247,63 +276,29 @@ export const skills: SkillMedication[] = [
{ year: 2025, description: 'Current: System-level programme board reporting' },
],
},
{
id: 'pharma-negotiation',
name: 'Pharmaceutical Negotiation',
frequency: 'When required',
startYear: 2024,
yearsOfExperience: 1,
category: 'Leadership',
status: 'Active',
icon: 'MessageSquare',
prescribingHistory: [
{ year: 2024, description: 'Started: Rebate terms renegotiation' },
{ year: 2024, description: 'Current: Improved commercial position for ICB' },
],
},
{
id: 'team-development',
name: 'Team Development',
frequency: 'Daily',
startYear: 2017,
yearsOfExperience: 8,
category: 'Leadership',
status: 'Active',
icon: 'UserPlus',
prescribingHistory: [
{ year: 2017, description: 'Started: NVQ3 supervision to technician registration' },
{ year: 2019, description: 'Increased: National induction training development' },
{ year: 2024, description: 'Current: Data fluency training, self-serve tools' },
],
},
{
id: 'change-management',
name: 'Change Management',
frequency: 'Once weekly',
startYear: 2018,
yearsOfExperience: 7,
category: 'Leadership',
frequency: 'As needed',
startYear: 2016,
yearsOfExperience: 10,
category: 'Strategic',
status: 'Active',
icon: 'RefreshCw',
},
{
id: 'financial-modelling',
name: 'Financial Modelling',
frequency: 'Once weekly',
startYear: 2024,
yearsOfExperience: 1,
category: 'Leadership',
id: 'healthcare-leadership',
name: 'Healthcare Leadership',
frequency: 'Daily',
startYear: 2018,
yearsOfExperience: 8,
category: 'Strategic',
status: 'Active',
icon: 'Calculator',
},
{
id: 'executive-comms',
name: 'Executive Communication',
frequency: 'Twice weekly',
startYear: 2024,
yearsOfExperience: 1,
category: 'Leadership',
status: 'Active',
icon: 'Presentation',
icon: 'Crown',
prescribingHistory: [
{ year: 2018, description: 'Started: NHS Mary Seacole Leadership Programme, system-level thinking' },
{ year: 2022, description: 'Increased: ICS-level strategic leadership, cross-sector engagement' },
{ year: 2025, description: 'Current: Interim Head of Population Health, CMO reporting line' },
],
},
]
+86 -56
View File
@@ -46,32 +46,44 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'SQL001', description: 'Data transformation: practice-level to patient-level analytics' },
],
skills: [
'population-health',
'medicines-optimisation',
'data-analysis',
'python',
'sql',
'algorithm-design',
'data-pipelines',
'budget-management',
'financial-modelling',
'stakeholder-engagement',
'dashboard-dev',
'ai-prompt-engineering',
'medicines-optimisation',
'population-health',
'nice-ta',
'health-system-prescribing',
'health-economics',
'clinical-pathways',
'formulary-commissioning',
'executive-comms',
'financial-modelling',
'budget-management',
'stakeholder-engagement',
'change-management',
'healthcare-leadership',
],
skillStrengths: {
'population-health': 0.95,
'medicines-optimisation': 0.9,
'data-analysis': 1.0,
python: 0.95,
sql: 0.95,
'algorithm-design': 0.9,
'data-pipelines': 0.8,
'budget-management': 0.9,
'financial-modelling': 0.85,
'stakeholder-engagement': 0.9,
'dashboard-dev': 0.8,
'ai-prompt-engineering': 0.85,
'medicines-optimisation': 0.9,
'population-health': 0.95,
'nice-ta': 0.8,
'health-system-prescribing': 0.9,
'health-economics': 0.85,
'clinical-pathways': 0.8,
'formulary-commissioning': 0.8,
'executive-comms': 0.9,
'financial-modelling': 0.85,
'budget-management': 0.9,
'stakeholder-engagement': 0.9,
'change-management': 0.7,
'healthcare-leadership': 0.9,
},
},
{
@@ -113,34 +125,44 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'LEA001', description: 'Team development: data literacy programme' },
],
skills: [
'population-health',
'medicines-optimisation',
'data-analysis',
'python',
'sql',
'power-bi',
'controlled-drugs',
'budget-management',
'financial-modelling',
'pharma-negotiation',
'stakeholder-engagement',
'team-development',
'dashboard-dev',
'ai-prompt-engineering',
'medicines-optimisation',
'population-health',
'nice-ta',
'health-system-prescribing',
'health-economics',
'clinical-pathways',
'formulary-commissioning',
'executive-comms',
'financial-modelling',
'budget-management',
'stakeholder-engagement',
'change-management',
'healthcare-leadership',
],
skillStrengths: {
'population-health': 0.95,
'medicines-optimisation': 0.9,
'data-analysis': 0.95,
python: 0.9,
sql: 0.9,
'power-bi': 0.8,
'controlled-drugs': 0.7,
'budget-management': 0.9,
'financial-modelling': 0.8,
'pharma-negotiation': 0.7,
'stakeholder-engagement': 0.9,
'team-development': 0.8,
'dashboard-dev': 0.8,
'ai-prompt-engineering': 0.8,
'medicines-optimisation': 0.9,
'population-health': 0.95,
'nice-ta': 0.8,
'health-system-prescribing': 0.85,
'health-economics': 0.8,
'clinical-pathways': 0.8,
'formulary-commissioning': 0.75,
'executive-comms': 0.85,
'financial-modelling': 0.8,
'budget-management': 0.9,
'stakeholder-engagement': 0.9,
'change-management': 0.7,
'healthcare-leadership': 0.85,
},
},
{
@@ -178,26 +200,34 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'HTA001', description: 'HTA implementation: multi-specialty pathways across ICS' },
],
skills: [
'data-analysis',
'python',
'sql',
'dashboard-dev',
'medicines-optimisation',
'nice-ta',
'clinical-pathways',
'health-economics',
'python',
'data-analysis',
'sql',
'algorithm-design',
'clinical-pathways',
'formulary-commissioning',
'financial-modelling',
'stakeholder-engagement',
'change-management',
'healthcare-leadership',
],
skillStrengths: {
'data-analysis': 0.8,
python: 0.8,
sql: 0.7,
'dashboard-dev': 0.6,
'medicines-optimisation': 0.8,
'nice-ta': 0.9,
'clinical-pathways': 0.9,
'health-economics': 0.7,
python: 0.8,
'data-analysis': 0.8,
sql: 0.7,
'algorithm-design': 0.6,
'clinical-pathways': 0.9,
'formulary-commissioning': 0.8,
'financial-modelling': 0.7,
'stakeholder-engagement': 0.7,
'change-management': 0.6,
'healthcare-leadership': 0.7,
},
},
{
@@ -232,22 +262,22 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'LEA002', description: 'Leadership: staff development to technician registration' },
],
skills: [
'medicines-optimisation',
'team-development',
'data-analysis',
'excel',
'python',
'medicines-optimisation',
'community-pharmacy',
'change-management',
'budget-management',
'stakeholder-engagement',
'healthcare-leadership',
],
skillStrengths: {
'medicines-optimisation': 0.9,
'team-development': 0.8,
'data-analysis': 0.7,
excel: 0.7,
python: 0.6,
'medicines-optimisation': 0.9,
'community-pharmacy': 0.9,
'change-management': 0.6,
'budget-management': 0.5,
'stakeholder-engagement': 0.6,
'healthcare-leadership': 0.7,
},
},
{
@@ -278,15 +308,15 @@ const timelineEntitySeeds: TimelineEntity[] = [
],
skills: [
'medicines-optimisation',
'community-pharmacy',
'data-analysis',
'excel',
'change-management',
'stakeholder-engagement',
],
skillStrengths: {
'medicines-optimisation': 0.8,
'community-pharmacy': 0.8,
'data-analysis': 0.5,
excel: 0.6,
'change-management': 0.5,
'stakeholder-engagement': 0.4,
},
@@ -324,13 +354,13 @@ const timelineEntitySeeds: TimelineEntity[] = [
],
skills: [
'medicines-optimisation',
'community-pharmacy',
'change-management',
'stakeholder-engagement',
],
skillStrengths: {
'medicines-optimisation': 0.7,
'community-pharmacy': 0.7,
'change-management': 0.4,
'stakeholder-engagement': 0.3,
},
},
{
@@ -449,8 +479,8 @@ export const timelineConsultations: Consultation[] = timelineCareerEntities.map(
const skillDomainByCategory: Record<string, 'technical' | 'clinical' | 'leadership'> = {
Technical: 'technical',
Domain: 'clinical',
Leadership: 'leadership',
Clinical: 'clinical',
Strategic: 'leadership',
}
export function buildConstellationData(): {
+8 -9
View File
@@ -212,24 +212,23 @@ export function buildEmbeddingTexts(): Array<{ id: string; text: string }> {
'data-analysis': 'Applied across NHS medicines optimisation, identifying £14.6M efficiency programme. Used for prescribing pattern analysis, budget forecasting, and population health analytics serving 1.2M people.',
'python': 'Used to build switching algorithms (14,000 patients, £2.6M savings), controlled drug monitoring systems, Blueteq form automation, and Sankey chart visualisation tools. Self-taught.',
'sql': 'Core tool for patient-level analytics, dm+d data integration, and transforming practice-level data to patient-level SQL analysis. Used across all NHS data roles.',
'power-bi': 'Built PharMetrics interactive dashboard tracking £215M prescribing budget. Created dashboards used by 200+ clinicians and commissioners across Norfolk & Waveney ICB.',
'dashboard-dev': 'Built Power BI dashboards tracking £215M prescribing budget, DOAC switching scenario models, and self-serve analytics tools used across Norfolk & Waveney ICB.',
'ai-prompt-engineering': 'LLM-assisted code generation, data analysis workflows, and agentic coding. Applied to clinical data extraction and portfolio development.',
'javascript-typescript': 'Used for web development including this portfolio website. Built with React, TypeScript, and Vite.',
'excel': 'Used for financial modelling, data validation, and ad-hoc analysis. Foundational tool across all roles from community pharmacy to NHS ICB.',
'algorithm-design': 'Designed patient switching algorithm and automated incentive scheme analysis. Applied to real-world GP prescribing data at population scale.',
'data-pipelines': 'Built automated data processing pipelines for medicines analytics, enabling self-serve models for team data fluency.',
'medicines-optimisation': 'Core domain expertise spanning community pharmacy through to NHS ICB-level population health. Led efficiency programmes worth £14.6M+.',
'population-health': 'Leading population health analytics for 1.2M people across Norfolk & Waveney ICS. Developing patient-level datasets from real-world GP prescribing data.',
'nice-ta': 'Led NICE technology appraisal implementation across high-cost drug pathways. Covered rheumatology, ophthalmology, dermatology, gastroenterology, neurology, and migraine.',
'health-system-prescribing': 'Built dm+d medicines data table with standardised strength calculations, oral morphine equivalents, and Anticholinergic Burden scoring. Enabled patient-level SQL analytics and self-serve prescribing model.',
'health-economics': 'Financial modelling for DOAC switching programmes, tirzepatide commissioning, and pharmaceutical rebate negotiations.',
'clinical-pathways': 'Wrote most of the Norfolk & Waveney ICB high-cost drug pathways. Created Sankey chart tool for patient pathway visualisation and trust compliance auditing.',
'controlled-drugs': 'Built Python-based population-scale monitoring system calculating oral morphine equivalents (OME) across all opioid prescriptions. Enables high-risk patient identification and potential diversion detection.',
'formulary-commissioning': 'High-cost drug formulary management, Blueteq prior authorisation, tirzepatide commissioning with primary care delivery model, and system-wide formulary governance.',
'community-pharmacy': 'Foundation in community pharmacy practice from pre-registration through to pharmacy management. PGD initiation, clinical screening, 100-hour contract management, and national process adoption.',
'executive-comms': 'Authored executive papers for ICB board including tirzepatide commissioning advocacy. Presented evidence-based recommendations to CMO bimonthly.',
'financial-modelling': 'Built interactive DOAC switching dashboard with rebate mechanics, workforce constraints, and patent expiry timelines. Financial projections for tirzepatide commissioning.',
'budget-management': 'Managed £215M NHS prescribing budget with sophisticated forecasting models, variance analysis, and monthly financial reporting to the ICB executive team.',
'stakeholder-engagement': 'Presented to Chief Medical Officer bimonthly. Engaged with GP practices, trusts, commissioners, and pharmaceutical companies across the integrated care system.',
'pharma-negotiation': 'Renegotiated pharmaceutical rebate terms ahead of patent expiry, securing improved commercial position for the ICB.',
'team-development': 'Improved team data fluency through training and documentation. Supervised staff through NVQ3 to pharmacy technician registration. Created national induction training at Tesco.',
'change-management': 'Completed NHS Mary Seacole Programme (2018, 78%). Led transformation to patient-level SQL analytics and self-serve analytical models.',
'financial-modelling': 'Built interactive DOAC switching dashboard with rebate mechanics, workforce constraints, and patent expiry timelines. Financial projections for tirzepatide commissioning.',
'executive-comms': 'Authored executive papers for ICB board including tirzepatide commissioning advocacy. Presented evidence-based recommendations to CMO bimonthly.',
'healthcare-leadership': 'NHS Mary Seacole Leadership Programme graduate. ICS-level strategic leadership from HCD Pharmacist through to Interim Head of Population Health with CMO reporting line.',
}
skills.forEach((skill) => {
+2 -2
View File
@@ -131,14 +131,14 @@ export interface SkillMedication {
frequency: string
startYear: number
yearsOfExperience: number
category: 'Technical' | 'Domain' | 'Leadership'
category: 'Technical' | 'Clinical' | 'Strategic'
status: 'Active' | 'Historical'
icon: string
prescribingHistory?: PrescribingHistoryEntry[]
}
// Skill categories for grouped display
export type SkillCategory = 'Technical' | 'Domain' | 'Leadership'
export type SkillCategory = 'Technical' | 'Clinical' | 'Strategic'
// Extended KPI with story content for detail panel
export interface KPIStory {
+1 -1
View File
@@ -67,7 +67,7 @@ export interface ExperienceEducationUICopy {
}
export interface SkillsCategoryCopyEntry {
readonly id: 'Technical' | 'Domain' | 'Leadership'
readonly id: 'Technical' | 'Clinical' | 'Strategic'
readonly label: string
}