From 80d4cc9d7a4b6b5fab177037cc6d725fc15e6b0e Mon Sep 17 00:00:00 2001 From: Andy Charlwood Date: Sat, 14 Feb 2026 17:54:03 +0000 Subject: [PATCH] feat: US-003 - Fix inaccurate timeline entries in CareerActivityTile --- Ralph/prd.json | 4 +- Ralph/progress.txt | 21 +++++ src/components/tiles/CareerActivityTile.tsx | 99 +++++++++------------ 3 files changed, 63 insertions(+), 61 deletions(-) diff --git a/Ralph/prd.json b/Ralph/prd.json index df5b887..a1da6a4 100644 --- a/Ralph/prd.json +++ b/Ralph/prd.json @@ -31,7 +31,7 @@ "Typecheck passes" ], "priority": 2, - "passes": false, + "passes": true, "notes": "Check References/CV_v4.md for the accurate role list. The CV has 4 roles: Interim Head, Deputy Head, High-Cost Drugs, Pharmacy Manager (Tesco)." }, { @@ -49,7 +49,7 @@ "Typecheck passes" ], "priority": 3, - "passes": false, + "passes": true, "notes": "Reference CV at References/CV_v4.md. The role entries in the timeline reference consultations by consultationId — since duty-pharmacist-2016 was removed in US-002, also remove any timeline entry referencing it." }, { diff --git a/Ralph/progress.txt b/Ralph/progress.txt index fca15b3..3bece88 100644 --- a/Ralph/progress.txt +++ b/Ralph/progress.txt @@ -871,3 +871,24 @@ - Branch `ralph/dashboard-restructure` created fresh from master - All previous codebase patterns still apply --- + +## 2026-02-14 - US-002 +- Removed the fabricated 'duty-pharmacist-2016' entry (Duty Pharmacy Manager, Tesco, Aug 2016–Nov 2017) from consultations.ts, constellation nodes, constellation links, and roleSkillMappings +- Files changed: src/data/consultations.ts, src/data/constellation.ts +- **Learnings for future iterations:** + - CareerActivityTile.tsx still has a `consultationId: 'duty-pharmacist-2016'` reference on the "Community Pharmacist" timeline entry — this is a dangling reference that US-003 will clean up by removing that timeline entry + - The constellation data (nodes, links, roleSkillMappings) all reference each other by string ID — removing a role requires removing from all three arrays + - After removal: 4 consultations, 4 role nodes, 4 role-skill mappings, 21 skill nodes remain +--- + +## 2026-02-14 - US-003 +- Fixed inaccurate timeline entries in CareerActivityTile.tsx buildTimeline() to match CV_v4.md +- **Removed:** Power BI Data Analyst Associate cert, Clinical Pharmacy Diploma cert, SQL Analytics Transformation project, Budget Oversight project, Community Pharmacist role (dangling duty-pharmacist-2016 reference) +- **Added:** NHS Leadership Academy — Mary Seacole Programme cert (2018), A-Levels education entry (2009–2011) +- **Fixed role titles/dates:** Deputy Head (was "Senior Data Analyst"), High-Cost Drugs & Interface Pharmacist (was "Prescribing Data Pharmacist"), Pharmacy Manager at Tesco (was "Community Pharmacist at Boots UK"). All consultationIds now map to existing consultations. +- Files changed: src/components/tiles/CareerActivityTile.tsx +- **Learnings for future iterations:** + - The previous timeline had inaccurate role titles that didn't match consultations.ts or CV_v4.md — always cross-reference both data source and CV + - All 4 role entries now correctly reference their matching consultation IDs: interim-head-2025, deputy-head-2024, high-cost-drugs-2022, pharmacy-manager-2017 + - Timeline now has 8 entries: 4 roles + GPhC cert + Mary Seacole cert + MPharm edu + A-Levels edu +--- diff --git a/src/components/tiles/CareerActivityTile.tsx b/src/components/tiles/CareerActivityTile.tsx index 3c3d6e7..674b475 100644 --- a/src/components/tiles/CareerActivityTile.tsx +++ b/src/components/tiles/CareerActivityTile.tsx @@ -26,85 +26,48 @@ interface ActivityEntry { function buildTimeline(): ActivityEntry[] { const entries: ActivityEntry[] = [] - // Roles from consultations + // Roles from consultations (matching CV_v4.md) entries.push({ id: 'interim-head-2025', type: 'role', title: 'Interim Head, Population Health & Data Analysis', meta: 'NHS Norfolk & Waveney ICB', - date: '2024 – 2025', - sortYear: 2024, + date: 'May – Nov 2025', + sortYear: 2025, consultationId: 'interim-head-2025', }) entries.push({ id: 'deputy-head-2024', type: 'role', - title: 'Senior Data Analyst — Medicines Optimisation', + title: 'Deputy Head, Population Health & Data Analysis', meta: 'NHS Norfolk & Waveney ICB', - date: '2021 – 2024', - sortYear: 2021, + date: 'Jul 2024 – Present', + sortYear: 2024, consultationId: 'deputy-head-2024', }) entries.push({ id: 'high-cost-drugs-2022', type: 'role', - title: 'Prescribing Data Pharmacist', - meta: 'NHS Norwich CCG', - date: '2018 – 2021', - sortYear: 2018, + title: 'High-Cost Drugs & Interface Pharmacist', + meta: 'NHS Norfolk & Waveney ICB', + date: 'May 2022 – Jul 2024', + sortYear: 2022, + consultationId: 'high-cost-drugs-2022', + }) + + entries.push({ + id: 'pharmacy-manager-2017', + type: 'role', + title: 'Pharmacy Manager', + meta: 'Tesco PLC', + date: 'Nov 2017 – May 2022', + sortYear: 2017, consultationId: 'pharmacy-manager-2017', }) - entries.push({ - id: 'community-pharmacist-2016', - type: 'role', - title: 'Community Pharmacist', - meta: 'Boots UK', - date: '2016 – 2018', - sortYear: 2016, - consultationId: 'duty-pharmacist-2016', - }) - - // Projects - entries.push({ - id: 'inv-budget', - type: 'project', - title: '£220M Prescribing Budget Oversight', - meta: 'Lead analyst & budget owner', - date: '2024', - sortYear: 2024, - }) - - entries.push({ - id: 'inv-sql-transform', - type: 'project', - title: 'SQL Analytics Transformation', - meta: 'Legacy migration project lead', - date: '2025', - sortYear: 2025, - }) - - // Certifications - entries.push({ - id: 'cert-powerbi', - type: 'cert', - title: 'Power BI Data Analyst Associate', - meta: 'Microsoft Certified', - date: '2023', - sortYear: 2023, - }) - - entries.push({ - id: 'cert-diploma', - type: 'cert', - title: 'Clinical Pharmacy Diploma', - meta: 'Professional development', - date: '2019', - sortYear: 2019, - }) - + // Certifications (matching CV_v4.md) entries.push({ id: 'doc-gphc', type: 'cert', @@ -114,7 +77,16 @@ function buildTimeline(): ActivityEntry[] { sortYear: 2016, }) - // Education + entries.push({ + id: 'cert-mary-seacole', + type: 'cert', + title: 'NHS Leadership Academy — Mary Seacole Programme', + meta: 'NHS leadership qualification', + date: '2018', + sortYear: 2018, + }) + + // Education (matching CV_v4.md) const mpharm = documents.find((d) => d.id === 'doc-mpharm') if (mpharm) { entries.push({ @@ -127,6 +99,15 @@ function buildTimeline(): ActivityEntry[] { }) } + entries.push({ + id: 'edu-alevels', + type: 'edu', + title: 'A-Levels: Mathematics (A*), Chemistry (B), Politics (C)', + meta: 'Highworth Grammar School', + date: '2009 – 2011', + sortYear: 2009, + }) + return entries.sort((a, b) => { if (b.sortYear !== a.sortYear) return b.sortYear - a.sortYear return 0