refactor: inline timeline narrative into timeline.ts, remove indirection

Timeline entities now contain their narrative data (description, details,
outcomes, codedEntries) directly instead of fetching via
getTimelineNarrativeEntry(). Removes ~155 lines from profile-content.ts,
the accessor function, and three dead types.
This commit is contained in:
2026-02-17 01:37:32 +00:00
parent 0ee7b5d44c
commit bbe7900968
4 changed files with 139 additions and 218 deletions
+139 -33
View File
@@ -1,5 +1,4 @@
import { skills } from '@/data/skills'
import { getTimelineNarrativeEntry } from '@/lib/profile-content'
import type {
CodedEntry,
Consultation,
@@ -24,10 +23,25 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2025,
endYear: 2025,
},
description: getTimelineNarrativeEntry('interim-head-2025').description,
details: [...getTimelineNarrativeEntry('interim-head-2025').details],
outcomes: [...getTimelineNarrativeEntry('interim-head-2025').outcomes],
codedEntries: [...getTimelineNarrativeEntry('interim-head-2025').codedEntries],
description: 'Led strategic delivery of population health initiatives and data-driven medicines optimisation across Norfolk & Waveney ICS, reporting to Associate Director of Pharmacy with presentation accountability to Chief Medical Officer and system-level programme boards. Responsible for setting analytical priorities, directing the efficiency programme, and ensuring evidence-based recommendations reached executive decision-makers. Returned to substantive Deputy Head role following commencement of ICB-wide organisational consultation.',
details: [
'Identified and prioritised a £14.6M efficiency programme through comprehensive prescribing data analysis, targeting the highest-value, lowest-risk interventions across the integrated care system',
'Built Python-based switching algorithm using real-world GP prescribing data: 14,000 patients identified, £2.6M annual savings, compressing months of manual analysis into 3 days',
'Automated incentive scheme analysis, enabling a novel GP payment system linking rewards to delivered savings; achieved 50% reduction in targeted prescribing within 2 months',
'Led transformation from practice-level aggregate reporting to patient-level SQL analytics, enabling targeted clinical interventions and a self-serve model for the wider team',
],
outcomes: [
'Achieved over-target performance by October 2025',
'£2M on target for delivery in the current financial year',
'Presented strategy and financial position to CMO bimonthly with evidence-based recommendations',
'Self-serve analytics model adopted, reducing analytical bottlenecks across the team',
],
codedEntries: [
{ code: 'EFF001', description: 'Efficiency programme: £14.6M identified and prioritised' },
{ code: 'ALG001', description: 'Algorithm: 14,000 patients, £2.6M savings, 3-day turnaround' },
{ code: 'AUT001', description: 'Incentive automation: 50% prescribing reduction in 2 months' },
{ code: 'SQL001', description: 'Data transformation: practice-level to patient-level analytics' },
],
skills: [
'population-health',
'medicines-optimisation',
@@ -71,10 +85,29 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2024,
endYear: null,
},
description: getTimelineNarrativeEntry('deputy-head-2024').description,
details: [...getTimelineNarrativeEntry('deputy-head-2024').details],
outcomes: [...getTimelineNarrativeEntry('deputy-head-2024').outcomes],
codedEntries: [...getTimelineNarrativeEntry('deputy-head-2024').codedEntries],
description: 'Driving data analytics strategy for medicines optimisation, developing bespoke datasets and analytical frameworks from messy, real-world GP prescribing data to identify efficiency opportunities, monitor medicines safety, and address health inequalities across the integrated care system. Responsible for the analytical infrastructure underpinning all prescribing intelligence, from dm+d product data to population-level monitoring tools.',
details: [
'Managed £220M prescribing budget with sophisticated forecasting models identifying cost pressures and enabling proactive financial planning for ICB board reporting',
'Collaborated with ICB data engineering to create a comprehensive dm+d medicines data table: standardised strength calculations, oral morphine equivalent conversions, and Anticholinergic Burden scoring, providing a single source of truth for all medicines analytics',
'Led financial scenario modelling for a system-wide DOAC switching programme, building an interactive Power BI dashboard incorporating rebate mechanics, clinician switching capacity, workforce constraints, and patent expiry timelines',
'Renegotiated pharmaceutical rebate terms ahead of patent expiry, securing improved commercial position for the ICB',
'Supported commissioning of tirzepatide (NICE TA1026): financial projections from real-world data, cohort identification, and an executive paper advocating primary care delivery on cost-effectiveness grounds',
'Developed Python-based controlled drug monitoring system calculating oral morphine equivalents across all opioid prescriptions, tracking patient-level exposure over time, identifying high-risk patients and potential diversion',
],
outcomes: [
'Single source of truth established for all medicines analytics across the system',
'GP-led delivery model adopted for tirzepatide following executive sign-off',
'Population-scale medicines safety analysis enabled for the first time',
'Team data fluency improved through training, documentation, and self-serve Power BI tools',
],
codedEntries: [
{ code: 'BUD001', description: 'Budget management: £220M prescribing oversight' },
{ code: 'DAT001', description: 'Data infrastructure: dm+d integration, single source of truth' },
{ code: 'MOD001', description: 'Financial modelling: DOAC switching, rebate negotiation' },
{ code: 'MON001', description: 'CD monitoring: population-scale OME tracking' },
{ code: 'COM001', description: 'Commissioning: tirzepatide TA1026, primary care model' },
{ code: 'LEA001', description: 'Team development: data literacy programme' },
],
skills: [
'population-health',
'medicines-optimisation',
@@ -120,10 +153,25 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2022,
endYear: 2024,
},
description: getTimelineNarrativeEntry('high-cost-drugs-2022').description,
details: [...getTimelineNarrativeEntry('high-cost-drugs-2022').details],
outcomes: [...getTimelineNarrativeEntry('high-cost-drugs-2022').outcomes],
codedEntries: [...getTimelineNarrativeEntry('high-cost-drugs-2022').codedEntries],
description: 'Led implementation of NICE technology appraisals and high-cost drug pathways across the ICS. Authored most of the system\'s high-cost drug pathways spanning rheumatology, ophthalmology (wet AMD, DMO, RVO), dermatology, gastroenterology, neurology, and migraine, balancing the legal requirement to implement TAs against financial costs, formulary management, and local clinical preferences. Engaged clinical leads across primary care, secondary care, and commissioning to agree pathways and secure system-wide adoption.',
details: [
'Developed software automating Blueteq prior authorisation form creation: 70% reduction in required forms, 200 hours immediate savings, and ongoing 7 to 8 hours weekly efficiency gains',
'Integrated Blueteq data with secondary care activity databases, resolving critical data-matching limitations and enabling accurate high-cost drug spend tracking across the system',
'Created Python-based Sankey chart analysis tool visualising patient journeys through high-cost drug pathways, enabling trusts to audit compliance and identify formulary adherence opportunities',
'Negotiated pathway agreements with consultant clinical leads, GP prescribing leads, and pharmaceutical company representatives across multiple therapeutic areas',
],
outcomes: [
'70% reduction in prior authorisation forms, 200 hours immediate savings',
'Ongoing 7 to 8 hours weekly efficiency gains sustained across the system',
'Accurate high-cost drug spend tracking enabled for the first time',
'Trust-level compliance auditing and pathway optimisation made possible through visual analytics',
],
codedEntries: [
{ code: 'AUT002', description: 'Automation: Blueteq form generation, 70% reduction' },
{ code: 'DAT002', description: 'Data integration: Blueteq plus secondary care activity' },
{ code: 'VIS001', description: 'Visualisation: Sankey pathway analysis tool' },
{ code: 'HTA001', description: 'HTA implementation: multi-specialty pathways across ICS' },
],
skills: [
'medicines-optimisation',
'nice-ta',
@@ -161,10 +209,23 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2017,
endYear: 2022,
},
description: getTimelineNarrativeEntry('pharmacy-manager-2017').description,
details: [...getTimelineNarrativeEntry('pharmacy-manager-2017').details],
outcomes: [...getTimelineNarrativeEntry('pharmacy-manager-2017').outcomes],
codedEntries: [...getTimelineNarrativeEntry('pharmacy-manager-2017').codedEntries],
description: 'Managed all pharmacy operations with full autonomy across a 100-hour contract at Tesco PLC, leading regional KPI delivery initiatives and contributing to national operational improvements. Served as Local Pharmaceutical Committee representative for Norfolk, engaging with wider system stakeholders on behalf of the community pharmacy network.',
details: [
'Identified and shared an asthma screening process adopted nationally across the Tesco pharmacy estate (approximately 300 branches): reduced pharmacist time from 60 hours to 6 hours per store per month, enabling the network to claim approximately £1M in revenue',
'Led creation of national induction training plan and eLearning modules for all new pharmacy staff, with enhanced focus on leadership development for non-pharmacist team members',
'Supervised two staff members through NVQ3 qualifications to pharmacy technician registration; full HR responsibilities including recruitment, performance management, and grievances',
],
outcomes: [
'National process adoption across approximately 300 Tesco pharmacy branches',
'Approximately £1M revenue enabled through streamlined asthma screening',
'54 hours per store per month freed through process improvement',
'Two team members developed to pharmacy technician registration',
],
codedEntries: [
{ code: 'INN001', description: 'Innovation: asthma screening, national adoption, approximately £1M revenue' },
{ code: 'TRN001', description: 'Training: national induction programme and eLearning' },
{ code: 'LEA002', description: 'Leadership: staff development to technician registration' },
],
skills: [
'medicines-optimisation',
'team-development',
@@ -198,10 +259,21 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2016,
endYear: 2017,
},
description: getTimelineNarrativeEntry('duty-pharmacy-manager-2016').description,
details: [...getTimelineNarrativeEntry('duty-pharmacy-manager-2016').details],
outcomes: [...getTimelineNarrativeEntry('duty-pharmacy-manager-2016').outcomes],
codedEntries: [...getTimelineNarrativeEntry('duty-pharmacy-manager-2016').codedEntries],
description: 'Provided clinical leadership and operational management across community pharmacy services at Tesco PLC in Great Yarmouth, progressing from newly qualified pharmacist to acting pharmacy manager within two months. Developed early expertise in service development, quality improvement, and the intersection of clinical practice and operational efficiency that would define the trajectory of the career ahead.',
details: [
'Led NMS and asthma referral service development, improving uptake and patient outcomes',
'Devised a quality payments solution adopted nationally across the Tesco pharmacy estate',
'Built clinical foundation in medicines optimisation, patient safety, and community pharmacy operations',
],
outcomes: [
'Service development leadership recognised regionally',
'National adoption of quality payments approach across Tesco estate',
'Strong clinical grounding established for progression to pharmacy management',
],
codedEntries: [
{ code: 'SVC001', description: 'Service development: NMS and asthma referrals' },
{ code: 'INN002', description: 'Innovation: national quality payments solution' },
],
skills: [
'medicines-optimisation',
'data-analysis',
@@ -231,10 +303,23 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2015,
endYear: 2016,
},
description: getTimelineNarrativeEntry('pre-reg-pharmacist-2015').description,
details: [...getTimelineNarrativeEntry('pre-reg-pharmacist-2015').details],
outcomes: [...getTimelineNarrativeEntry('pre-reg-pharmacist-2015').outcomes],
codedEntries: [...getTimelineNarrativeEntry('pre-reg-pharmacist-2015').codedEntries],
description: 'Completed pre-registration training at Paydens Pharmacy across multiple community pharmacy sites in Tunbridge Wells and Ashford, Kent. Developed core clinical competencies and demonstrated initiative through expanding clinical services and delivering measurable quality improvements during the training year.',
details: [
'Expanded PGD clinical services: NRT, EHC, and chlamydia screening programmes across multiple Paydens branches',
'Improved NMS audit completion rate from under 10% to 50 to 60% through process redesign',
'Developed a palliative care screening pathway for community pharmacy setting',
'Gained broad operational experience across multiple pharmacy sites',
],
outcomes: [
'Successfully registered with GPhC in August 2016',
'Clinical service expansion adopted across multiple Paydens branches',
'Established reputation for quality improvement and proactive service development',
],
codedEntries: [
{ code: 'PGD001', description: 'Clinical services: NRT, EHC, chlamydia PGDs' },
{ code: 'AUD001', description: 'Audit: NMS completion under 10% to 50 to 60%' },
{ code: 'PAL001', description: 'Palliative care: community screening pathway' },
],
skills: [
'medicines-optimisation',
'change-management',
@@ -260,10 +345,21 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2011,
endYear: 2015,
},
description: getTimelineNarrativeEntry('uea-mpharm-2011').description,
details: [...getTimelineNarrativeEntry('uea-mpharm-2011').details],
outcomes: [...getTimelineNarrativeEntry('uea-mpharm-2011').outcomes],
codedEntries: [...getTimelineNarrativeEntry('uea-mpharm-2011').codedEntries],
description: 'Completed four-year integrated Master of Pharmacy degree at the University of East Anglia, building a strong foundation in pharmaceutical sciences, clinical pharmacy, pharmacology, therapeutics, and research methodology. Demonstrated academic excellence through a distinction-grade research project and active engagement in university leadership.',
details: [
'Independent research project on drug delivery and cocrystals: 75.1% (Distinction)',
'4th year OSCE: 80%',
'President of UEA Pharmacy Society',
],
outcomes: [
'Strong academic foundation in pharmaceutical sciences and therapeutics',
'Research skills developed through independent project work',
'Leadership experience through society presidency',
],
codedEntries: [
{ code: 'RES001', description: 'Research: drug delivery and cocrystals (Distinction)' },
{ code: 'SOC001', description: 'Leadership: UEA Pharmacy Society President' },
],
skills: ['medicines-optimisation', 'data-analysis'],
skillStrengths: {
'medicines-optimisation': 0.5,
@@ -284,10 +380,20 @@ const timelineEntitySeeds: TimelineEntity[] = [
startYear: 2009,
endYear: 2011,
},
description: getTimelineNarrativeEntry('highworth-alevels-2009').description,
details: [...getTimelineNarrativeEntry('highworth-alevels-2009').details],
outcomes: [...getTimelineNarrativeEntry('highworth-alevels-2009').outcomes],
codedEntries: [...getTimelineNarrativeEntry('highworth-alevels-2009').codedEntries],
description: 'Completed A-Level studies at Highworth Grammar School in Ashford, Kent, achieving strong results in mathematics and sciences that provided the academic foundation for pursuing pharmacy.',
details: [
'Mathematics: A*',
'Chemistry: B',
'Politics: C',
],
outcomes: [
'Strong mathematical foundation for data-driven career',
'Science grounding for pharmacy degree entry',
],
codedEntries: [
{ code: 'MATH01', description: 'Mathematics A*' },
{ code: 'CHEM01', description: 'Chemistry B' },
],
skills: ['data-analysis'],
skillStrengths: {
'data-analysis': 0.2,