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
+36
View File
@@ -0,0 +1,36 @@
# Portfolio Skills
## Clinical
| Skill | Start | Frequency | Roles Used |
|---|---|---|---|
| Medicines Optimisation | 2022 (system-wide) | 34x daily | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager, Pre-reg, MPharm |
| Population Health | 2024 | Daily | Interim Head, Deputy Head |
| NICE TA Implementation | 2022 | 12x weekly | Interim Head, Deputy Head, HCD Pharmacist |
| Health System Prescribing Management | 2024 | Daily | Interim Head, Deputy Head |
| Health Economics | 2022 | 12x daily | Interim Head, Deputy Head, HCD Pharmacist |
| Clinical Pathways | 2022 | Daily | Interim Head, Deputy Head, HCD Pharmacist |
| Formulary & Commissioning | 2022 | Weekly | Interim Head, Deputy Head, HCD Pharmacist |
| Community Pharmacy Practice | 2015 | As needed | Pharmacy Manager, Pre-reg |
## Technical
| Skill | Start | Frequency | Roles Used |
|---|---|---|---|
| Python | 2018 | 3x daily | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager |
| SQL | 2023 | 3x daily | Interim Head, Deputy Head, HCD Pharmacist |
| Dashboard Development | 2023 | Weekly | Interim Head, Deputy Head, HCD Pharmacist |
| Data Analysis | 2016 | 4x daily | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager, Pre-reg |
| AI & Prompt Engineering | 2024 | 4x daily | Interim Head, Deputy Head |
| JavaScript / TypeScript | 2020 | As needed | Personal projects |
## Strategic
| Skill | Start | Frequency | Roles Used |
|---|---|---|---|
| Executive Communication | 2024 | Bi-monthly | Interim Head, Deputy Head |
| Financial Scenario Modelling | 2022 | Weekly | Interim Head, Deputy Head, HCD Pharmacist |
| Budget Management | 2024 | 2x weekly | Interim Head, Deputy Head |
| Stakeholder Engagement | 2022 | Daily | Interim Head, Deputy Head, HCD Pharmacist |
| Change Management | 2016 | As needed | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager |
| Healthcare Leadership | 2018 | Daily | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager |
Binary file not shown.
@@ -1,10 +1,10 @@
import React from 'react' import React from 'react'
import type { LucideIcon } from 'lucide-react' import type { LucideIcon } from 'lucide-react'
import { import {
BarChart3, Code2, Database, PieChart, FileCode2, BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck, Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, ShieldAlert, Banknote, Handshake, TrendingUp, Route, BookOpen, Store,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation, Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
ChevronRight, ChevronRight,
} from 'lucide-react' } from 'lucide-react'
import { CardHeader } from './Card' import { CardHeader } from './Card'
@@ -14,10 +14,10 @@ import { getSkillsUICopy } from '@/lib/profile-content'
import type { SkillMedication } from '@/types/pmr' import type { SkillMedication } from '@/types/pmr'
const iconMap: Record<string, LucideIcon> = { const iconMap: Record<string, LucideIcon> = {
BarChart3, Code2, Database, PieChart, FileCode2, BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck, Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, ShieldAlert, Banknote, Handshake, TrendingUp, Route, BookOpen, Store,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation, Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
} }
+2 -2
View File
@@ -9,8 +9,8 @@ interface SkillDetailProps {
// Category display names // Category display names
const categoryLabels: Record<SkillMedication['category'], string> = { const categoryLabels: Record<SkillMedication['category'], string> = {
Technical: 'Technical', Technical: 'Technical',
Domain: 'Healthcare Domain', Clinical: 'Clinical',
Leadership: 'Strategic & Leadership', Strategic: 'Strategic',
} }
export function SkillDetail({ skill }: SkillDetailProps) { export function SkillDetail({ skill }: SkillDetailProps) {
+8 -8
View File
@@ -1,10 +1,10 @@
import React, { useEffect, useRef } from 'react' import React, { useEffect, useRef } from 'react'
import type { LucideIcon } from 'lucide-react' import type { LucideIcon } from 'lucide-react'
import { import {
BarChart3, Code2, Database, PieChart, FileCode2, BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck, Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, ShieldAlert, Banknote, Handshake, TrendingUp, Route, BookOpen, Store,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation, Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
ChevronRight, ChevronRight,
} from 'lucide-react' } from 'lucide-react'
import { skills } from '@/data/skills' import { skills } from '@/data/skills'
@@ -13,10 +13,10 @@ import { getSkillsUICopy } from '@/lib/profile-content'
import type { SkillMedication, SkillCategory } from '@/types/pmr' import type { SkillMedication, SkillCategory } from '@/types/pmr'
const iconMap: Record<string, LucideIcon> = { const iconMap: Record<string, LucideIcon> = {
BarChart3, Code2, Database, PieChart, FileCode2, BarChart3, Code2, Database, LayoutDashboard, Bot, FileCode2,
Sheet, GitBranch, Workflow, Pill, Users, FileCheck, Pill, Users, FileCheck, Stethoscope,
TrendingUp, Route, ShieldAlert, Banknote, Handshake, TrendingUp, Route, BookOpen, Store,
MessageSquare, UserPlus, RefreshCw, Calculator, Presentation, Presentation, Calculator, Banknote, Handshake, RefreshCw, Crown,
} }
interface SkillsAllDetailProps { 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. Professional registration required to practise as a pharmacist in Great Britain.
## Skills ## 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%) 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)
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%) 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)
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%) 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 ## 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. 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', viewAllLabel: 'View all',
categories: [ categories: [
{ id: 'Technical', label: 'Technical' }, { id: 'Technical', label: 'Technical' },
{ id: 'Domain', label: 'Healthcare Domain' }, { id: 'Clinical', label: 'Clinical' },
{ id: 'Leadership', label: 'Strategic & Leadership' }, { id: 'Strategic', label: 'Strategic' },
], ],
}, },
}, },
+145 -150
View File
@@ -1,13 +1,13 @@
import type { SkillMedication } from '@/types/pmr' import type { SkillMedication } from '@/types/pmr'
export const skills: SkillMedication[] = [ export const skills: SkillMedication[] = [
// Technical (8 skills) // Technical (6 skills)
{ {
id: 'data-analysis', id: 'data-analysis',
name: 'Data Analysis', name: 'Data Analysis',
frequency: 'Twice daily', frequency: '4x daily',
startYear: 2016, startYear: 2016,
yearsOfExperience: 9, yearsOfExperience: 10,
category: 'Technical', category: 'Technical',
status: 'Active', status: 'Active',
icon: 'BarChart3', icon: 'BarChart3',
@@ -21,14 +21,14 @@ export const skills: SkillMedication[] = [
{ {
id: 'python', id: 'python',
name: 'Python', name: 'Python',
frequency: 'Daily', frequency: '3x daily',
startYear: 2017, startYear: 2018,
yearsOfExperience: 8, yearsOfExperience: 8,
category: 'Technical', category: 'Technical',
status: 'Active', status: 'Active',
icon: 'Code2', icon: 'Code2',
prescribingHistory: [ 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: 2019, description: 'Increased: Dashboard development, data pipeline work' },
{ year: 2022, description: 'Specialist use: Blueteq automation, Sankey analysis tools' }, { year: 2022, description: 'Specialist use: Blueteq automation, Sankey analysis tools' },
{ year: 2024, description: 'Advanced: Switching algorithm (14,000 patients), CD monitoring' }, { year: 2024, description: 'Advanced: Switching algorithm (14,000 patients), CD monitoring' },
@@ -38,41 +38,53 @@ export const skills: SkillMedication[] = [
{ {
id: 'sql', id: 'sql',
name: 'SQL', name: 'SQL',
frequency: 'Daily', frequency: '3x daily',
startYear: 2022, startYear: 2023,
yearsOfExperience: 3, yearsOfExperience: 3,
category: 'Technical', category: 'Technical',
status: 'Active', status: 'Active',
icon: 'Database', icon: 'Database',
prescribingHistory: [ prescribingHistory: [
{ year: 2022, description: 'Started: Gained access to NHS databases, prescribing data querying' }, { year: 2023, description: 'Started: NHS database access, prescribing data querying' },
{ year: 2023, description: 'Increased: Complex joins, data transformation, Blueteq integration' }, { year: 2024, description: 'Increased: Complex joins, data transformation, Blueteq integration' },
{ year: 2024, description: 'Specialist: Comprehensive medicines data table development' },
{ year: 2025, description: 'Current: Population health data infrastructure' }, { year: 2025, description: 'Current: Population health data infrastructure' },
], ],
}, },
{ {
id: 'power-bi', id: 'dashboard-dev',
name: 'Power BI', name: 'Dashboard Development',
frequency: 'Once weekly', frequency: 'Weekly',
startYear: 2020, startYear: 2023,
yearsOfExperience: 5, yearsOfExperience: 3,
category: 'Technical', category: 'Technical',
status: 'Active', status: 'Active',
icon: 'PieChart', icon: 'LayoutDashboard',
prescribingHistory: [ prescribingHistory: [
{ year: 2020, description: 'Started: Dashboard creation for team reporting' }, { year: 2023, description: 'Started: Power BI dashboards for team reporting and DAX measures' },
{ year: 2022, description: 'Increased: DAX measures, data modelling' }, { year: 2024, description: 'Increased: Interactive DOAC switching scenario model, executive reporting' },
{ year: 2024, description: 'Advanced: Switching progress dashboards, executive reporting' }, { year: 2025, description: 'Current: Self-serve analytics dashboards, incentive scheme tracking' },
{ year: 2025, description: 'Current: DOAC switching scenario model, executive reporting' }, ],
},
{
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', id: 'javascript-typescript',
name: 'JavaScript / TypeScript', name: 'JavaScript / TypeScript',
frequency: 'When required', frequency: 'As needed',
startYear: 2022, startYear: 2020,
yearsOfExperience: 3, yearsOfExperience: 6,
category: 'Technical', category: 'Technical',
status: 'Active', status: 'Active',
icon: 'FileCode2', icon: 'FileCode2',
@@ -82,55 +94,15 @@ export const skills: SkillMedication[] = [
{ year: 2024, description: 'Current: CV/portfolio development, interactive tools' }, { 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', id: 'medicines-optimisation',
name: 'Medicines Optimisation', name: 'Medicines Optimisation',
frequency: 'Twice daily', frequency: '34x daily',
startYear: 2016, startYear: 2016,
yearsOfExperience: 9, yearsOfExperience: 10,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'Pill', icon: 'Pill',
prescribingHistory: [ prescribingHistory: [
@@ -144,24 +116,23 @@ export const skills: SkillMedication[] = [
id: 'population-health', id: 'population-health',
name: 'Population Health', name: 'Population Health',
frequency: 'Daily', frequency: 'Daily',
startYear: 2022, startYear: 2024,
yearsOfExperience: 3, yearsOfExperience: 2,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'Users', icon: 'Users',
prescribingHistory: [ prescribingHistory: [
{ year: 2022, description: 'Started: GP prescribing data analysis' }, { year: 2024, description: 'Started: 1.2M population coverage, ICS-wide analytics' },
{ year: 2024, description: 'Increased: 1.2M population coverage' }, { year: 2025, description: 'Current: Health inequality analysis, population-level interventions' },
{ year: 2025, description: 'Current: ICS-wide health inequality analysis' },
], ],
}, },
{ {
id: 'nice-ta', id: 'nice-ta',
name: 'NICE TA Implementation', name: 'NICE TA Implementation',
frequency: 'Once weekly', frequency: '12x weekly',
startYear: 2022, startYear: 2022,
yearsOfExperience: 3, yearsOfExperience: 4,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'FileCheck', icon: 'FileCheck',
prescribingHistory: [ prescribingHistory: [
@@ -170,13 +141,27 @@ export const skills: SkillMedication[] = [
{ year: 2024, description: 'Current: Tirzepatide (TA1026) commissioning' }, { 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', id: 'health-economics',
name: 'Health Economics', name: 'Health Economics',
frequency: 'Once weekly', frequency: '12x daily',
startYear: 2022, startYear: 2022,
yearsOfExperience: 3, yearsOfExperience: 4,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'TrendingUp', icon: 'TrendingUp',
prescribingHistory: [ prescribingHistory: [
@@ -188,10 +173,10 @@ export const skills: SkillMedication[] = [
{ {
id: 'clinical-pathways', id: 'clinical-pathways',
name: 'Clinical Pathways', name: 'Clinical Pathways',
frequency: 'Once weekly', frequency: 'Daily',
startYear: 2022, startYear: 2022,
yearsOfExperience: 3, yearsOfExperience: 4,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'Route', icon: 'Route',
prescribingHistory: [ prescribingHistory: [
@@ -201,29 +186,73 @@ export const skills: SkillMedication[] = [
], ],
}, },
{ {
id: 'controlled-drugs', id: 'formulary-commissioning',
name: 'Controlled Drugs', name: 'Formulary & Commissioning',
frequency: 'When required', frequency: 'Weekly',
startYear: 2024, startYear: 2022,
yearsOfExperience: 1, yearsOfExperience: 4,
category: 'Domain', category: 'Clinical',
status: 'Active', status: 'Active',
icon: 'ShieldAlert', icon: 'BookOpen',
prescribingHistory: [ prescribingHistory: [
{ year: 2024, description: 'Started: OME calculation system development' }, { year: 2022, description: 'Started: High-cost drug formulary management, Blueteq prior authorisation' },
{ year: 2024, description: 'Increased: Population-scale monitoring capability' }, { year: 2024, description: 'Increased: Tirzepatide commissioning, primary care delivery model' },
{ year: 2025, description: 'Current: High-risk patient identification, diversion detection' }, { 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', id: 'budget-management',
name: 'Budget Management', name: 'Budget Management',
frequency: 'Daily', frequency: '2x weekly',
startYear: 2024, startYear: 2024,
yearsOfExperience: 1, yearsOfExperience: 2,
category: 'Leadership', category: 'Strategic',
status: 'Active', status: 'Active',
icon: 'Banknote', icon: 'Banknote',
prescribingHistory: [ prescribingHistory: [
@@ -235,10 +264,10 @@ export const skills: SkillMedication[] = [
{ {
id: 'stakeholder-engagement', id: 'stakeholder-engagement',
name: 'Stakeholder Engagement', name: 'Stakeholder Engagement',
frequency: 'Twice daily', frequency: 'Daily',
startYear: 2022, startYear: 2022,
yearsOfExperience: 3, yearsOfExperience: 4,
category: 'Leadership', category: 'Strategic',
status: 'Active', status: 'Active',
icon: 'Handshake', icon: 'Handshake',
prescribingHistory: [ prescribingHistory: [
@@ -247,63 +276,29 @@ export const skills: SkillMedication[] = [
{ year: 2025, description: 'Current: System-level programme board reporting' }, { 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', id: 'change-management',
name: 'Change Management', name: 'Change Management',
frequency: 'Once weekly', frequency: 'As needed',
startYear: 2018, startYear: 2016,
yearsOfExperience: 7, yearsOfExperience: 10,
category: 'Leadership', category: 'Strategic',
status: 'Active', status: 'Active',
icon: 'RefreshCw', icon: 'RefreshCw',
}, },
{ {
id: 'financial-modelling', id: 'healthcare-leadership',
name: 'Financial Modelling', name: 'Healthcare Leadership',
frequency: 'Once weekly', frequency: 'Daily',
startYear: 2024, startYear: 2018,
yearsOfExperience: 1, yearsOfExperience: 8,
category: 'Leadership', category: 'Strategic',
status: 'Active', status: 'Active',
icon: 'Calculator', icon: 'Crown',
}, prescribingHistory: [
{ { year: 2018, description: 'Started: NHS Mary Seacole Leadership Programme, system-level thinking' },
id: 'executive-comms', { year: 2022, description: 'Increased: ICS-level strategic leadership, cross-sector engagement' },
name: 'Executive Communication', { year: 2025, description: 'Current: Interim Head of Population Health, CMO reporting line' },
frequency: 'Twice weekly', ],
startYear: 2024,
yearsOfExperience: 1,
category: 'Leadership',
status: 'Active',
icon: 'Presentation',
}, },
] ]
+86 -56
View File
@@ -46,32 +46,44 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'SQL001', description: 'Data transformation: practice-level to patient-level analytics' }, { code: 'SQL001', description: 'Data transformation: practice-level to patient-level analytics' },
], ],
skills: [ skills: [
'population-health',
'medicines-optimisation',
'data-analysis', 'data-analysis',
'python', 'python',
'sql', 'sql',
'algorithm-design', 'dashboard-dev',
'data-pipelines', 'ai-prompt-engineering',
'budget-management', 'medicines-optimisation',
'financial-modelling', 'population-health',
'stakeholder-engagement', 'nice-ta',
'health-system-prescribing',
'health-economics',
'clinical-pathways',
'formulary-commissioning',
'executive-comms', 'executive-comms',
'financial-modelling',
'budget-management',
'stakeholder-engagement',
'change-management', 'change-management',
'healthcare-leadership',
], ],
skillStrengths: { skillStrengths: {
'population-health': 0.95,
'medicines-optimisation': 0.9,
'data-analysis': 1.0, 'data-analysis': 1.0,
python: 0.95, python: 0.95,
sql: 0.95, sql: 0.95,
'algorithm-design': 0.9, 'dashboard-dev': 0.8,
'data-pipelines': 0.8, 'ai-prompt-engineering': 0.85,
'budget-management': 0.9, 'medicines-optimisation': 0.9,
'financial-modelling': 0.85, 'population-health': 0.95,
'stakeholder-engagement': 0.9, '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, 'executive-comms': 0.9,
'financial-modelling': 0.85,
'budget-management': 0.9,
'stakeholder-engagement': 0.9,
'change-management': 0.7, 'change-management': 0.7,
'healthcare-leadership': 0.9,
}, },
}, },
{ {
@@ -113,34 +125,44 @@ const timelineEntitySeeds: TimelineEntity[] = [
{ code: 'LEA001', description: 'Team development: data literacy programme' }, { code: 'LEA001', description: 'Team development: data literacy programme' },
], ],
skills: [ skills: [
'population-health',
'medicines-optimisation',
'data-analysis', 'data-analysis',
'python', 'python',
'sql', 'sql',
'power-bi', 'dashboard-dev',
'controlled-drugs', 'ai-prompt-engineering',
'budget-management', 'medicines-optimisation',
'financial-modelling', 'population-health',
'pharma-negotiation', 'nice-ta',
'stakeholder-engagement', 'health-system-prescribing',
'team-development', 'health-economics',
'clinical-pathways',
'formulary-commissioning',
'executive-comms', 'executive-comms',
'financial-modelling',
'budget-management',
'stakeholder-engagement',
'change-management',
'healthcare-leadership',
], ],
skillStrengths: { skillStrengths: {
'population-health': 0.95,
'medicines-optimisation': 0.9,
'data-analysis': 0.95, 'data-analysis': 0.95,
python: 0.9, python: 0.9,
sql: 0.9, sql: 0.9,
'power-bi': 0.8, 'dashboard-dev': 0.8,
'controlled-drugs': 0.7, 'ai-prompt-engineering': 0.8,
'budget-management': 0.9, 'medicines-optimisation': 0.9,
'financial-modelling': 0.8, 'population-health': 0.95,
'pharma-negotiation': 0.7, 'nice-ta': 0.8,
'stakeholder-engagement': 0.9, 'health-system-prescribing': 0.85,
'team-development': 0.8, 'health-economics': 0.8,
'clinical-pathways': 0.8,
'formulary-commissioning': 0.75,
'executive-comms': 0.85, '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' }, { code: 'HTA001', description: 'HTA implementation: multi-specialty pathways across ICS' },
], ],
skills: [ skills: [
'data-analysis',
'python',
'sql',
'dashboard-dev',
'medicines-optimisation', 'medicines-optimisation',
'nice-ta', 'nice-ta',
'clinical-pathways',
'health-economics', 'health-economics',
'python', 'clinical-pathways',
'data-analysis', 'formulary-commissioning',
'sql', 'financial-modelling',
'algorithm-design',
'stakeholder-engagement', 'stakeholder-engagement',
'change-management',
'healthcare-leadership',
], ],
skillStrengths: { skillStrengths: {
'data-analysis': 0.8,
python: 0.8,
sql: 0.7,
'dashboard-dev': 0.6,
'medicines-optimisation': 0.8, 'medicines-optimisation': 0.8,
'nice-ta': 0.9, 'nice-ta': 0.9,
'clinical-pathways': 0.9,
'health-economics': 0.7, 'health-economics': 0.7,
python: 0.8, 'clinical-pathways': 0.9,
'data-analysis': 0.8, 'formulary-commissioning': 0.8,
sql: 0.7, 'financial-modelling': 0.7,
'algorithm-design': 0.6,
'stakeholder-engagement': 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' }, { code: 'LEA002', description: 'Leadership: staff development to technician registration' },
], ],
skills: [ skills: [
'medicines-optimisation',
'team-development',
'data-analysis', 'data-analysis',
'excel', 'python',
'medicines-optimisation',
'community-pharmacy',
'change-management', 'change-management',
'budget-management',
'stakeholder-engagement', 'stakeholder-engagement',
'healthcare-leadership',
], ],
skillStrengths: { skillStrengths: {
'medicines-optimisation': 0.9,
'team-development': 0.8,
'data-analysis': 0.7, 'data-analysis': 0.7,
excel: 0.7, python: 0.6,
'medicines-optimisation': 0.9,
'community-pharmacy': 0.9,
'change-management': 0.6, 'change-management': 0.6,
'budget-management': 0.5,
'stakeholder-engagement': 0.6, 'stakeholder-engagement': 0.6,
'healthcare-leadership': 0.7,
}, },
}, },
{ {
@@ -278,15 +308,15 @@ const timelineEntitySeeds: TimelineEntity[] = [
], ],
skills: [ skills: [
'medicines-optimisation', 'medicines-optimisation',
'community-pharmacy',
'data-analysis', 'data-analysis',
'excel',
'change-management', 'change-management',
'stakeholder-engagement', 'stakeholder-engagement',
], ],
skillStrengths: { skillStrengths: {
'medicines-optimisation': 0.8, 'medicines-optimisation': 0.8,
'community-pharmacy': 0.8,
'data-analysis': 0.5, 'data-analysis': 0.5,
excel: 0.6,
'change-management': 0.5, 'change-management': 0.5,
'stakeholder-engagement': 0.4, 'stakeholder-engagement': 0.4,
}, },
@@ -324,13 +354,13 @@ const timelineEntitySeeds: TimelineEntity[] = [
], ],
skills: [ skills: [
'medicines-optimisation', 'medicines-optimisation',
'community-pharmacy',
'change-management', 'change-management',
'stakeholder-engagement',
], ],
skillStrengths: { skillStrengths: {
'medicines-optimisation': 0.7, 'medicines-optimisation': 0.7,
'community-pharmacy': 0.7,
'change-management': 0.4, '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'> = { const skillDomainByCategory: Record<string, 'technical' | 'clinical' | 'leadership'> = {
Technical: 'technical', Technical: 'technical',
Domain: 'clinical', Clinical: 'clinical',
Leadership: 'leadership', Strategic: 'leadership',
} }
export function buildConstellationData(): { 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.', '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.', '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.', '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.', '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+.', '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.', '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.', '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.', '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.', '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.', '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.', '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.', '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.', '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.',
'executive-comms': 'Authored executive papers for ICB board including tirzepatide commissioning advocacy. Presented evidence-based recommendations to CMO bimonthly.',
} }
skills.forEach((skill) => { skills.forEach((skill) => {
+2 -2
View File
@@ -131,14 +131,14 @@ export interface SkillMedication {
frequency: string frequency: string
startYear: number startYear: number
yearsOfExperience: number yearsOfExperience: number
category: 'Technical' | 'Domain' | 'Leadership' category: 'Technical' | 'Clinical' | 'Strategic'
status: 'Active' | 'Historical' status: 'Active' | 'Historical'
icon: string icon: string
prescribingHistory?: PrescribingHistoryEntry[] prescribingHistory?: PrescribingHistoryEntry[]
} }
// Skill categories for grouped display // 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 // Extended KPI with story content for detail panel
export interface KPIStory { export interface KPIStory {
+1 -1
View File
@@ -67,7 +67,7 @@ export interface ExperienceEducationUICopy {
} }
export interface SkillsCategoryCopyEntry { export interface SkillsCategoryCopyEntry {
readonly id: 'Technical' | 'Domain' | 'Leadership' readonly id: 'Technical' | 'Clinical' | 'Strategic'
readonly label: string readonly label: string
} }