Skill updates
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# Portfolio Skills
|
||||
|
||||
## Clinical
|
||||
|
||||
| Skill | Start | Frequency | Roles Used |
|
||||
|---|---|---|---|
|
||||
| Medicines Optimisation | 2022 (system-wide) | 3–4x daily | Interim Head, Deputy Head, HCD Pharmacist, Pharmacy Manager, Pre-reg, MPharm |
|
||||
| Population Health | 2024 | Daily | Interim Head, Deputy Head |
|
||||
| NICE TA Implementation | 2022 | 1–2x weekly | Interim Head, Deputy Head, HCD Pharmacist |
|
||||
| Health System Prescribing Management | 2024 | Daily | Interim Head, Deputy Head |
|
||||
| Health Economics | 2022 | 1–2x 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 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,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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, 3–4x daily), [skill-population-health] Population Health (2yr, daily), [skill-nice-ta] NICE TA Implementation (4yr, 1–2x weekly), [skill-health-system-prescribing] Health System Prescribing Mgmt (2yr, daily), [skill-health-economics] Health Economics (4yr, 1–2x 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.
|
||||
|
||||
@@ -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
@@ -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: '3–4x 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: '1–2x 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: '1–2x 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
@@ -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
@@ -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
@@ -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 {
|
||||
|
||||
@@ -67,7 +67,7 @@ export interface ExperienceEducationUICopy {
|
||||
}
|
||||
|
||||
export interface SkillsCategoryCopyEntry {
|
||||
readonly id: 'Technical' | 'Domain' | 'Leadership'
|
||||
readonly id: 'Technical' | 'Clinical' | 'Strategic'
|
||||
readonly label: string
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user