chore: archive unused files and move legacy code to can_delete

archive/ — unused reference files (no active code references):
  - LookupSearchTermCleanedDrugName.csv, condition_directorate_mapping.csv
  - na_directory_rows.csv (diagnostic output), ta-recommendations.xlsx
  - snomed_indication_mapping_query.sql (source for embedded SQL)
  - IMPROVEMENT_RECOMMENDATIONS.md, power query.pq

archive/can_delete/ — legacy code and logs safe to remove:
  - dashboard_gui.py (replaced by Reflex app)
  - pathways_app_old.py.bak (old backup)
  - Ralph loop iteration logs (iterations 2-8)
This commit is contained in:
Andrew Charlwood
2026-02-06 01:01:02 +00:00
parent a31907aa1f
commit bb93c1673e
23 changed files with 121509 additions and 0 deletions
+165
View File
@@ -0,0 +1,165 @@
,Search_Term,CleanedDrugName
0,acute coronary syndrome,ABCIXIMAB|CLOPIDOGREL|PRASUGREL|RIVAROXABAN|TICAGRELOR
1,acute lymphoblastic leukaemia,BLINATUMOMAB|DASATINIB|INOTUZUMAB|PEGASPARGASE|PONATINIB|TISAGENLECLEUCEL
2,acute myeloid leukaemia,AZACITIDINE|DECITABINE|GEMTUZUMAB|GILTERITINIB|GLASDEGIB|LIPOSOMAL|MIDOSTAURIN|ORAL|VENETOCLAX
3,acute promyelocytic leukaemia,ARSENIC|GEMTUZUMAB
4,allergic asthma,OMALIZUMAB
5,allergic rhinitis,SQ
6,alzheimer's disease,DONEPEZIL
7,amyloidosis,VUTRISIRAN
8,anaemia,ERYTHROPOIESIS-STIMULATING|ERYTHROPOIETIN
9,anaplastic large cell lymphoma,BRENTUXIMAB
10,ankylosing spondylitis,ADALIMUMAB|GOLIMUMAB|SECUKINUMAB|UPADACITINIB
11,apixaban,ANDEXANET
12,aplastic anaemia,ELTROMBOPAG
13,arthritis,ETANERCEPT
14,asthma,BENRALIZUMAB|DUPILUMAB|INHALED|MEPOLIZUMAB|OMALIZUMAB|RESLIZUMAB
15,atopic dermatitis,ABROCITINIB|ALCLOMETASONE|BARICITINIB|CRISABOROLE|DUPILUMAB|PIMECROLIMUS
16,atrial fibrillation,APIXABAN|DABIGATRAN|DRONEDARONE|EDOXABAN|RIVAROXABAN|VERNAKALANT
17,attention deficit hyperactivity disorder,ATOMOXETINE
18,attention-deficit hyperactivity disorder,METHYLPHENIDATE
19,axial spondyloarthritis,ADALIMUMAB|GOLIMUMAB|IXEKIZUMAB|SECUKINUMAB|UPADACITINIB
20,basal cell carcinoma,VISMODEGIB
21,bipolar disorder,LOXAPINE|OLANZAPINE
22,bladder,MIRABEGRON
23,brca,OLAPARIB
24,breast cancer,ABEMACICLIB|ALPELISIB|ANASTROZOLE|ATEZOLIZUMAB|BEVACIZUMAB|CAPECITABINE|DENOSUMAB|DOCETAXEL|ERIBULIN|EVEROLIMUS|FULVESTRANT|GEMCITABINE|INTRABEAM|LAPATINIB|NERATINIB|OLAPARIB|PACLITAXEL|PALBOCICLI|PALBOCICLIB|PEMBROLIZUMAB|PERTUZUMAB|RIBOCICLIB|SACITUZUMAB|TRASTUZUMAB|TUCATINIB|VINORELBINE
25,cardiomyopathy,TAFAMIDIS
26,cardiovascular disease,ATORVASTATIN
27,cervical cancer,TOPOTECAN
28,cholangiocarcinoma,PEMIGATINIB
29,choroidal neovascularisation,AFLIBERCEPT|RANIBIZUMAB
30,chronic kidney disease,DAPAGLIFLOZIN|IMLIFIDASE|ROXADUSTAT
31,chronic liver disease,AVATROMBOPAG|LUSUTROMBOPAG
32,chronic lymphocytic leukaemia,ACALABRUTINIB|BENDAMUSTINE|DUVELISIB|IBRUTINIB|IDELALISIB|OBINUTUZUMAB|OFATUMUMAB|RITUXIMAB|VENETOCLAX
33,chronic myeloid leukaemia,ASCIMINIB|BOSUTINIB|STANDARD-DOSE|DASATINIB|DASITINIB|NILOTINIB|PONATINIB
34,chronic obstructive pulmonary disease,ROFLUMILAST
35,colon cancer,CAPECITABINE
36,colorectal cancer,BEVACIZUMAB|CAPECITABINE|IRINOTECAN
37,constipation,LUBIPROSTONE|METHYLNALTREXONE|NALDEMEDINE|NALOXEGOL|PRUCALOPRIDE
38,covid-19,NIRMATRELVIR
39,crohn's disease,INFLIXIMAB|VEDOLIZUMAB
40,cutaneous t-cell lymphoma,BRENTUXIMAB|CHLORMETHINE
41,cystic fibrosis,COLISTIMETHATE|LUMACAFTOR|MANNITOL
42,cytomegalovirus,LETERMOVIR|MARIBAVIR
43,deep vein thrombosis,APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
44,depression,ESKETAMINE
45,diabetes,ERTUGLIFLOZIN|INHALED|AFLIBERCEPT|BROLUCIZUMAB|DEXAMETHASONE|FARICIMAB|FLUOCINOLONE|RANIBIZUMAB
46,diabetic retinopathy,RANIBUZIMAB
47,diffuse large b-cell lymphoma,AXICABTAGENE|POLATUZUMAB|TISAGENLECLEUCEL
48,dravet syndrome,CANNABIDIOL|FENFLURAMINE
49,drug misuse,BUPRENORPHINE|NALTREXONE
50,dry eye,CICLOSPORIN
51,dyspepsia,LANSOPRAZOLE
52,endometrial cancer,DOSTARLIMAB
53,epilepsy,CENOBAMATE|GABAPENTIN|RETIGABINE
54,fallopian tube,BEVACIZUMAB|NIRAPARIB|OLAPARIB|RUCAPARIB
55,follicular lymphoma,DUVELISIB|IDELALISIB|LENALIDOMIDE|OBINUTUZUMAB|RITUXIMAB|TISAGENLECLEUCEL
56,gastric cancer,CAPECITABINE|RAMUCIRUMAB|TRASTUZUMAB|TRIFLURIDINE
57,gastro-oesophageal junction,NIVOLUMAB|PEMBROLIZUMAB
58,giant cell arteritis,TOCILIZUMAB
59,glioma,CARMUSTINE
60,gout,CANAKINUMAB|FEBUXOSTAT|LESINURAD
61,graft versus host disease,RUXOLITINIB
62,granulomatosis with polyangiitis,AVACOPAN|MEPOLIZUMAB
63,growth hormone deficiency,SOMATROPIN
64,hand eczema,ALITRETINOIN
65,heart failure,DAPAGLIFLOZIN|EMPAGLIFLOZIN|IVABRADINE|SACUBITRIL|VERICIGUAT
66,hepatitis b,ADEFOVIR
67,hepatitis c,BOCEPREVIR|DACLATASVIR|ELBASVIR|GLECAPREVIR|INTERFERON|LEDIPASVIR|OMBITASVIR|PEGINTERFERON|PEGYLATED|SIMEPREVIR|SOFOSBUVIR|TELAPREVIR
68,hepatocellular carcinoma,ATEZOLIZUMAB|CABOZANTINIB|LENVATINIB|RAMUCIRUMAB|REGORAFENIB|SELECTIVE|SORAFENIB
69,hiv,CABOTEGRAVIR
70,hodgkin lymphoma,BRENTUXIMAB|NIVOLUMAB|PEMBROLIZUMAB
71,hormone receptor,ABEMACICLIB
72,hypercholesterolaemia,EZETIMIBE
73,hyperparathyroidism,CINACALCET|ETELCALCETIDE
74,immune thrombocytopenia,AVATROMBOPAG|FOSTAMATINIB
75,influenza,AMANTADINE|ZANAMIVIR|BALOXAVIR
76,insomnia,ZALEPLON
77,irritable bowel syndrome,ELUXADOLINE
78,ischaemic stroke,ALTEPLASE
79,juvenile idiopathic arthritis,ABATECEPT|CANAKINUMAB|TOCILIZUMAB|TOFACITINIB
80,kidney transplant,BASILIXIMAB
81,leukaemia,FLUDARABINE|IMATINIB
82,lung cancer,ATEZOLIZUMAB|DURVALUMAB|GEFITINIB|ORAL|NINTEDANIB
83,lymphoma,BENDAMUSTINE|CRIZOTINIB|PIXANTRONE|RITUXIMAB
84,macular degeneration,AFLIBERCEPT|BROLUCIZUMAB|FARICIMAB|RANIBIZUMAB
85,macular oedema,AFLIBERCEPT|RANIBIZUMAB
86,major depressive episodes,AGOMELATINE|VORTIOXETINE
87,malignant melanoma,VEMURAFENIB
88,malignant pleural mesothelioma,NIVOLUMAB|PEMETREXED
89,manic episode,ARIPIPRAZOLE
90,mantle cell lymphoma,AUTOLOGOUS|BORTEZOMIB|IBRUTINIB|LENALIDOMIDE|TEMSIROLIMUS
91,melanoma,COBIMETINIB|DABRAFENIB|ENCORAFENIB|IPILIMUMAB|NIVOLUMAB|PEMBROLIZUMAB|TALIMOGENE|TRAMETINIB
92,merkel cell carcinoma,AVELUMAB
93,migraine,BOTULINUM|EPTINEZUMAB|ERENUMAB|FREMANEZUMAB|GALCANEZUMAB
94,motor neurone disease,RILUZOLE
95,multiple myeloma,BORTEZOMIB|THALIDOMIDE|CARFILZOMIB|DARATUMUMAB|DENOSUMAB|ELOTUZUMAB|ISATUXIMAB|IXAZOMIB|LENALIDOMIDE|PANOBINOSTAT|POMALIDOMIDE|SELINEXOR|TECLISTAMAB
96,multiple sclerosis,ALEMTUZUMAB|BETA|CLADRIBINE|DACLIZUMAB|DIMETHYL|DIROXIMEL|FINGOLIMOD|INTERFERON|NATALIZUMAB|OCRELIZUMAB|OZANIMOD|PEGINTERFERON|PONESIMOD|SIPONIMOD|TERIFLUNOMIDE
97,myelodysplastic,LENALIDOMIDE|LUSPATERCEPT
98,myelofibrosis,FEDRATINIB|RUXOLITINIB
99,myocardial infarction,ALTEPLASE|BIVALIRUDIN|TICAGRELOR
100,myotonia,MEXILETINE
101,narcolepsy,SOLRIAMFETOL
102,neuroendocrine tumour,EVEROLIMUS|LUTETIUM
103,non-small cell lung cancer,ATEZOLIZMAB|DOCETAXEL|ERLOTINIB|PEMETREXED
104,non-small-cell lung cancer,AFATINIB|ALECTINIB|AMIVANTAMAB|ATEZOLIZUMAB|BEVACIZUMAB|BRIGATINIB|CEMIPLIMAB|CERITINIB|CRIZOTINIB|DABRAFENIB|DACOMITINIB|DURVALUMAB|ENTRECTINIB|ERLOTINIB|GEFITINIB|LORLATINIB|MOBOCERTINIB|NECITUMUMAB|NIVOLUMAB|OSIMERTINIB|PACLITAXEL|PEMBROLIZUMAB|PEMETREXED|PRALSETINIB|RAMUCIRUMAB|SELPERCATINIB|SOTORASIB|TEPOTINIB
105,obesity,LIRAGLUTIDE|NALTREXONE|ORLISTAT|SEMAGLUTIDE|SIBUTRAMINE
106,oesophageal cancer,NIVOLUMAB
107,osteoarthritis,CELECOXIB
108,osteoporosis,ALENDRONATE|DENOSUMAB|ORAL|ROMOSOZUMAB
109,osteosarcoma,MIFAMURTIDE
110,ovarian cancer,BEVACIZUMAB|PACLITAXEL|PEGYLATED|TOPOTECAN|TRABECTEDIN
111,overweight,RIMONABANT
112,pancreatic cancer,GEMCITABINE|OLAPARIB|PACLITAXEL|PEGYLATED
113,paroxysmal nocturnal haemoglobinuria,PEGCETACOPLAN|RAVULIZUMAB
114,peripheral arterial disease,NAFTIDROFYRYL
115,plaque psoriasis,ADALIMUMAB|APREMILAST|BIMEKIZUMAB|BRODALUMAB|CERTOLIZUMAB|GUSELKUMAB|INFLIXIMAB|IXEKIZUMAB|RISANKIZUMAB|SECUKINUMAB|TILDRAKIZUAMB|USTEKINUMAB
116,polycystic kidney disease,TOLVAPTAN
117,polycythaemia vera,RUXOLITINIB
118,pregnancy,ROUTINE
119,primary biliary cholangitis,OBETICHOLIC
120,primary hypercholesterolaemia,ALIROCUMAB|EVOLOCUMAB
121,prostate cancer,ABIRATERONE|APALUTAMIDE|CABAZITAXEL|DAROLUTAMIDE|DEGARELIX|DENOSUMAB|DOCETAXEL|ENZALUTAMIDE|OLAPARIB|PADELIPORFIN|RADIUM-|RADIUM|SIPULEUCEL-T
122,psoriasis,EFALUZIMAB
123,psoriatic arthritis,ABATACEPT|ADALIMUMAB|APREMILAST|CERTOLIZUMAB|ETANERCEPT|GOLIMUMAB|GUSELKUMAB|IXEKIZUMAB|RISANKIZUMAB|TOFACITINIB|UPADACITINIB|USTEKINUMAB
124,pulmonary embolism,APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
125,pulmonary fibrosis,NINTEDANIB|PIRFENIDONE
126,relapsing multiple sclerosis,OFATUMUMAB
127,renal cell carcinoma,AVELUMAB|AXITINIB|BEVACIZUMAB|CABOZANTINIB|EVEROLIMUS|LENVATINIB|NIVOLUMAB|PAZOPANIB|PEMBROLIZUMAB|SUNITINIB|TIVOZANIB
128,renal transplantation,BASILIXIMAB|INDUCTION
129,retinal vein occlusion,AFLIBERCEPT|DEXAMETHASONE|RANIBIZUMAB
130,rheumatoid arthritis,ABATACEPT|ADALIMUMAB|ANAKINRA|BARICITINIB|CELECOXIB|CERTOLIZUMAB|ETANERCEPT|FILGOTINIB|GOLIMUMAB|RITUXIMAB|SARILUMAB|TOCILIZUMAB|TOFACITINIB|UPADACITINIB
131,rivaroxaban,ANDEXANET
132,schizophrenia,AMISULPRIDE|ARIPIPRAZOLE|LOXAPINE
133,seizures,CANNABIDIOL
134,sepsis,DROTRECOGIN
135,severe persistent allergic asthma,OMALIZUMAB
136,short bowel syndrome,TEDUGLUTIDE
137,sickle cell disease,CRIZANLIZUMAB
138,sleep apnoea,PITOLISANT|SOLRIAMFETOL
139,smoking cessation,NICOTINE|VARENICLINE
140,soft tissue sarcoma,INTRAVENOUS|NBTXR-|OLARATUMAB
141,spinal muscular atrophy,NUSINERSEN|RISDIPLAM
142,squamous cell,CETUXIMAB
143,squamous cell carcinoma,CEMIPLIMAB|NIVOLUMAB|PEMBROLIZUMAB
144,stem cell transplant,MELPHALAN|TREOSULFAN
145,stroke,APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
146,systemic lupus erythematosus,ANIFROLUMAB|ETANERCEPT
147,systemic mastocytosis,MIDOSTAURIN
148,thrombocytopenic purpura,ELTROMBOPAG|ROMIPLOSTIM
149,thrombotic thrombocytopenic purpura,CAPLACIZUMAB
150,thyroid cancer,CABOZANTINIB|LENVATINIB|SELPERCATINIB|VANDETANIB
151,tophaceous gout,PEGLOTICASE
152,transitional cell carcinoma,VINFLUNINE
153,tuberous sclerosis,CANNABIDIOL
154,type 1 diabetes,CONTINUOUS|DAPAGLIFLOZIN|INSULIN|SOTAGLIFLOZIN
155,type 2 diabetes,CANAGLIFLOZIN|CONTINUOUS|DAPAGLIFLOZIN|EMPAGLIFLOZIN|ERTUGLIFLOZIN|EXENATIDE|FINERENONE|INSULIN|LIRAGLUTIDE|PIOGLITAZONE|ROSIGLITAZONE
156,ulcerative colitis,ADALIMUMAB|INFLIXIMAB|FILGOTINIB|OZANIMOD|TOFACITINIB|UPADACITINIB|USTEKINUMAB|VEDOLIZUMAB
157,urothelial carcinoma,ATEZOLIZUMAB|PEMBROLIZUMAB
158,urticaria,OMALIZUMAB
159,uterine fibroids,RELUGOLIX
160,uveitis,ADALIMUMAB|FLUOCINOLONE
161,vascular disease,MODIFIED-RELEASE|CLOPIDOGREL
162,vasculitis,RITUXIMAB
163,venous thromboembolism,APIXABAN|DABIGATRAN|RIVAROXABAN
1 Search_Term CleanedDrugName
2 0 acute coronary syndrome ABCIXIMAB|CLOPIDOGREL|PRASUGREL|RIVAROXABAN|TICAGRELOR
3 1 acute lymphoblastic leukaemia BLINATUMOMAB|DASATINIB|INOTUZUMAB|PEGASPARGASE|PONATINIB|TISAGENLECLEUCEL
4 2 acute myeloid leukaemia AZACITIDINE|DECITABINE|GEMTUZUMAB|GILTERITINIB|GLASDEGIB|LIPOSOMAL|MIDOSTAURIN|ORAL|VENETOCLAX
5 3 acute promyelocytic leukaemia ARSENIC|GEMTUZUMAB
6 4 allergic asthma OMALIZUMAB
7 5 allergic rhinitis SQ
8 6 alzheimer's disease DONEPEZIL
9 7 amyloidosis VUTRISIRAN
10 8 anaemia ERYTHROPOIESIS-STIMULATING|ERYTHROPOIETIN
11 9 anaplastic large cell lymphoma BRENTUXIMAB
12 10 ankylosing spondylitis ADALIMUMAB|GOLIMUMAB|SECUKINUMAB|UPADACITINIB
13 11 apixaban ANDEXANET
14 12 aplastic anaemia ELTROMBOPAG
15 13 arthritis ETANERCEPT
16 14 asthma BENRALIZUMAB|DUPILUMAB|INHALED|MEPOLIZUMAB|OMALIZUMAB|RESLIZUMAB
17 15 atopic dermatitis ABROCITINIB|ALCLOMETASONE|BARICITINIB|CRISABOROLE|DUPILUMAB|PIMECROLIMUS
18 16 atrial fibrillation APIXABAN|DABIGATRAN|DRONEDARONE|EDOXABAN|RIVAROXABAN|VERNAKALANT
19 17 attention deficit hyperactivity disorder ATOMOXETINE
20 18 attention-deficit hyperactivity disorder METHYLPHENIDATE
21 19 axial spondyloarthritis ADALIMUMAB|GOLIMUMAB|IXEKIZUMAB|SECUKINUMAB|UPADACITINIB
22 20 basal cell carcinoma VISMODEGIB
23 21 bipolar disorder LOXAPINE|OLANZAPINE
24 22 bladder MIRABEGRON
25 23 brca OLAPARIB
26 24 breast cancer ABEMACICLIB|ALPELISIB|ANASTROZOLE|ATEZOLIZUMAB|BEVACIZUMAB|CAPECITABINE|DENOSUMAB|DOCETAXEL|ERIBULIN|EVEROLIMUS|FULVESTRANT|GEMCITABINE|INTRABEAM|LAPATINIB|NERATINIB|OLAPARIB|PACLITAXEL|PALBOCICLI|PALBOCICLIB|PEMBROLIZUMAB|PERTUZUMAB|RIBOCICLIB|SACITUZUMAB|TRASTUZUMAB|TUCATINIB|VINORELBINE
27 25 cardiomyopathy TAFAMIDIS
28 26 cardiovascular disease ATORVASTATIN
29 27 cervical cancer TOPOTECAN
30 28 cholangiocarcinoma PEMIGATINIB
31 29 choroidal neovascularisation AFLIBERCEPT|RANIBIZUMAB
32 30 chronic kidney disease DAPAGLIFLOZIN|IMLIFIDASE|ROXADUSTAT
33 31 chronic liver disease AVATROMBOPAG|LUSUTROMBOPAG
34 32 chronic lymphocytic leukaemia ACALABRUTINIB|BENDAMUSTINE|DUVELISIB|IBRUTINIB|IDELALISIB|OBINUTUZUMAB|OFATUMUMAB|RITUXIMAB|VENETOCLAX
35 33 chronic myeloid leukaemia ASCIMINIB|BOSUTINIB|STANDARD-DOSE|DASATINIB|DASITINIB|NILOTINIB|PONATINIB
36 34 chronic obstructive pulmonary disease ROFLUMILAST
37 35 colon cancer CAPECITABINE
38 36 colorectal cancer BEVACIZUMAB|CAPECITABINE|IRINOTECAN
39 37 constipation LUBIPROSTONE|METHYLNALTREXONE|NALDEMEDINE|NALOXEGOL|PRUCALOPRIDE
40 38 covid-19 NIRMATRELVIR
41 39 crohn's disease INFLIXIMAB|VEDOLIZUMAB
42 40 cutaneous t-cell lymphoma BRENTUXIMAB|CHLORMETHINE
43 41 cystic fibrosis COLISTIMETHATE|LUMACAFTOR|MANNITOL
44 42 cytomegalovirus LETERMOVIR|MARIBAVIR
45 43 deep vein thrombosis APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
46 44 depression ESKETAMINE
47 45 diabetes ERTUGLIFLOZIN|INHALED|AFLIBERCEPT|BROLUCIZUMAB|DEXAMETHASONE|FARICIMAB|FLUOCINOLONE|RANIBIZUMAB
48 46 diabetic retinopathy RANIBUZIMAB
49 47 diffuse large b-cell lymphoma AXICABTAGENE|POLATUZUMAB|TISAGENLECLEUCEL
50 48 dravet syndrome CANNABIDIOL|FENFLURAMINE
51 49 drug misuse BUPRENORPHINE|NALTREXONE
52 50 dry eye CICLOSPORIN
53 51 dyspepsia LANSOPRAZOLE
54 52 endometrial cancer DOSTARLIMAB
55 53 epilepsy CENOBAMATE|GABAPENTIN|RETIGABINE
56 54 fallopian tube BEVACIZUMAB|NIRAPARIB|OLAPARIB|RUCAPARIB
57 55 follicular lymphoma DUVELISIB|IDELALISIB|LENALIDOMIDE|OBINUTUZUMAB|RITUXIMAB|TISAGENLECLEUCEL
58 56 gastric cancer CAPECITABINE|RAMUCIRUMAB|TRASTUZUMAB|TRIFLURIDINE
59 57 gastro-oesophageal junction NIVOLUMAB|PEMBROLIZUMAB
60 58 giant cell arteritis TOCILIZUMAB
61 59 glioma CARMUSTINE
62 60 gout CANAKINUMAB|FEBUXOSTAT|LESINURAD
63 61 graft versus host disease RUXOLITINIB
64 62 granulomatosis with polyangiitis AVACOPAN|MEPOLIZUMAB
65 63 growth hormone deficiency SOMATROPIN
66 64 hand eczema ALITRETINOIN
67 65 heart failure DAPAGLIFLOZIN|EMPAGLIFLOZIN|IVABRADINE|SACUBITRIL|VERICIGUAT
68 66 hepatitis b ADEFOVIR
69 67 hepatitis c BOCEPREVIR|DACLATASVIR|ELBASVIR|GLECAPREVIR|INTERFERON|LEDIPASVIR|OMBITASVIR|PEGINTERFERON|PEGYLATED|SIMEPREVIR|SOFOSBUVIR|TELAPREVIR
70 68 hepatocellular carcinoma ATEZOLIZUMAB|CABOZANTINIB|LENVATINIB|RAMUCIRUMAB|REGORAFENIB|SELECTIVE|SORAFENIB
71 69 hiv CABOTEGRAVIR
72 70 hodgkin lymphoma BRENTUXIMAB|NIVOLUMAB|PEMBROLIZUMAB
73 71 hormone receptor ABEMACICLIB
74 72 hypercholesterolaemia EZETIMIBE
75 73 hyperparathyroidism CINACALCET|ETELCALCETIDE
76 74 immune thrombocytopenia AVATROMBOPAG|FOSTAMATINIB
77 75 influenza AMANTADINE|ZANAMIVIR|BALOXAVIR
78 76 insomnia ZALEPLON
79 77 irritable bowel syndrome ELUXADOLINE
80 78 ischaemic stroke ALTEPLASE
81 79 juvenile idiopathic arthritis ABATECEPT|CANAKINUMAB|TOCILIZUMAB|TOFACITINIB
82 80 kidney transplant BASILIXIMAB
83 81 leukaemia FLUDARABINE|IMATINIB
84 82 lung cancer ATEZOLIZUMAB|DURVALUMAB|GEFITINIB|ORAL|NINTEDANIB
85 83 lymphoma BENDAMUSTINE|CRIZOTINIB|PIXANTRONE|RITUXIMAB
86 84 macular degeneration AFLIBERCEPT|BROLUCIZUMAB|FARICIMAB|RANIBIZUMAB
87 85 macular oedema AFLIBERCEPT|RANIBIZUMAB
88 86 major depressive episodes AGOMELATINE|VORTIOXETINE
89 87 malignant melanoma VEMURAFENIB
90 88 malignant pleural mesothelioma NIVOLUMAB|PEMETREXED
91 89 manic episode ARIPIPRAZOLE
92 90 mantle cell lymphoma AUTOLOGOUS|BORTEZOMIB|IBRUTINIB|LENALIDOMIDE|TEMSIROLIMUS
93 91 melanoma COBIMETINIB|DABRAFENIB|ENCORAFENIB|IPILIMUMAB|NIVOLUMAB|PEMBROLIZUMAB|TALIMOGENE|TRAMETINIB
94 92 merkel cell carcinoma AVELUMAB
95 93 migraine BOTULINUM|EPTINEZUMAB|ERENUMAB|FREMANEZUMAB|GALCANEZUMAB
96 94 motor neurone disease RILUZOLE
97 95 multiple myeloma BORTEZOMIB|THALIDOMIDE|CARFILZOMIB|DARATUMUMAB|DENOSUMAB|ELOTUZUMAB|ISATUXIMAB|IXAZOMIB|LENALIDOMIDE|PANOBINOSTAT|POMALIDOMIDE|SELINEXOR|TECLISTAMAB
98 96 multiple sclerosis ALEMTUZUMAB|BETA|CLADRIBINE|DACLIZUMAB|DIMETHYL|DIROXIMEL|FINGOLIMOD|INTERFERON|NATALIZUMAB|OCRELIZUMAB|OZANIMOD|PEGINTERFERON|PONESIMOD|SIPONIMOD|TERIFLUNOMIDE
99 97 myelodysplastic LENALIDOMIDE|LUSPATERCEPT
100 98 myelofibrosis FEDRATINIB|RUXOLITINIB
101 99 myocardial infarction ALTEPLASE|BIVALIRUDIN|TICAGRELOR
102 100 myotonia MEXILETINE
103 101 narcolepsy SOLRIAMFETOL
104 102 neuroendocrine tumour EVEROLIMUS|LUTETIUM
105 103 non-small cell lung cancer ATEZOLIZMAB|DOCETAXEL|ERLOTINIB|PEMETREXED
106 104 non-small-cell lung cancer AFATINIB|ALECTINIB|AMIVANTAMAB|ATEZOLIZUMAB|BEVACIZUMAB|BRIGATINIB|CEMIPLIMAB|CERITINIB|CRIZOTINIB|DABRAFENIB|DACOMITINIB|DURVALUMAB|ENTRECTINIB|ERLOTINIB|GEFITINIB|LORLATINIB|MOBOCERTINIB|NECITUMUMAB|NIVOLUMAB|OSIMERTINIB|PACLITAXEL|PEMBROLIZUMAB|PEMETREXED|PRALSETINIB|RAMUCIRUMAB|SELPERCATINIB|SOTORASIB|TEPOTINIB
107 105 obesity LIRAGLUTIDE|NALTREXONE|ORLISTAT|SEMAGLUTIDE|SIBUTRAMINE
108 106 oesophageal cancer NIVOLUMAB
109 107 osteoarthritis CELECOXIB
110 108 osteoporosis ALENDRONATE|DENOSUMAB|ORAL|ROMOSOZUMAB
111 109 osteosarcoma MIFAMURTIDE
112 110 ovarian cancer BEVACIZUMAB|PACLITAXEL|PEGYLATED|TOPOTECAN|TRABECTEDIN
113 111 overweight RIMONABANT
114 112 pancreatic cancer GEMCITABINE|OLAPARIB|PACLITAXEL|PEGYLATED
115 113 paroxysmal nocturnal haemoglobinuria PEGCETACOPLAN|RAVULIZUMAB
116 114 peripheral arterial disease NAFTIDROFYRYL
117 115 plaque psoriasis ADALIMUMAB|APREMILAST|BIMEKIZUMAB|BRODALUMAB|CERTOLIZUMAB|GUSELKUMAB|INFLIXIMAB|IXEKIZUMAB|RISANKIZUMAB|SECUKINUMAB|TILDRAKIZUAMB|USTEKINUMAB
118 116 polycystic kidney disease TOLVAPTAN
119 117 polycythaemia vera RUXOLITINIB
120 118 pregnancy ROUTINE
121 119 primary biliary cholangitis OBETICHOLIC
122 120 primary hypercholesterolaemia ALIROCUMAB|EVOLOCUMAB
123 121 prostate cancer ABIRATERONE|APALUTAMIDE|CABAZITAXEL|DAROLUTAMIDE|DEGARELIX|DENOSUMAB|DOCETAXEL|ENZALUTAMIDE|OLAPARIB|PADELIPORFIN|RADIUM-|RADIUM|SIPULEUCEL-T
124 122 psoriasis EFALUZIMAB
125 123 psoriatic arthritis ABATACEPT|ADALIMUMAB|APREMILAST|CERTOLIZUMAB|ETANERCEPT|GOLIMUMAB|GUSELKUMAB|IXEKIZUMAB|RISANKIZUMAB|TOFACITINIB|UPADACITINIB|USTEKINUMAB
126 124 pulmonary embolism APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
127 125 pulmonary fibrosis NINTEDANIB|PIRFENIDONE
128 126 relapsing multiple sclerosis OFATUMUMAB
129 127 renal cell carcinoma AVELUMAB|AXITINIB|BEVACIZUMAB|CABOZANTINIB|EVEROLIMUS|LENVATINIB|NIVOLUMAB|PAZOPANIB|PEMBROLIZUMAB|SUNITINIB|TIVOZANIB
130 128 renal transplantation BASILIXIMAB|INDUCTION
131 129 retinal vein occlusion AFLIBERCEPT|DEXAMETHASONE|RANIBIZUMAB
132 130 rheumatoid arthritis ABATACEPT|ADALIMUMAB|ANAKINRA|BARICITINIB|CELECOXIB|CERTOLIZUMAB|ETANERCEPT|FILGOTINIB|GOLIMUMAB|RITUXIMAB|SARILUMAB|TOCILIZUMAB|TOFACITINIB|UPADACITINIB
133 131 rivaroxaban ANDEXANET
134 132 schizophrenia AMISULPRIDE|ARIPIPRAZOLE|LOXAPINE
135 133 seizures CANNABIDIOL
136 134 sepsis DROTRECOGIN
137 135 severe persistent allergic asthma OMALIZUMAB
138 136 short bowel syndrome TEDUGLUTIDE
139 137 sickle cell disease CRIZANLIZUMAB
140 138 sleep apnoea PITOLISANT|SOLRIAMFETOL
141 139 smoking cessation NICOTINE|VARENICLINE
142 140 soft tissue sarcoma INTRAVENOUS|NBTXR-|OLARATUMAB
143 141 spinal muscular atrophy NUSINERSEN|RISDIPLAM
144 142 squamous cell CETUXIMAB
145 143 squamous cell carcinoma CEMIPLIMAB|NIVOLUMAB|PEMBROLIZUMAB
146 144 stem cell transplant MELPHALAN|TREOSULFAN
147 145 stroke APIXABAN|DABIGATRAN|EDOXABAN|RIVAROXABAN
148 146 systemic lupus erythematosus ANIFROLUMAB|ETANERCEPT
149 147 systemic mastocytosis MIDOSTAURIN
150 148 thrombocytopenic purpura ELTROMBOPAG|ROMIPLOSTIM
151 149 thrombotic thrombocytopenic purpura CAPLACIZUMAB
152 150 thyroid cancer CABOZANTINIB|LENVATINIB|SELPERCATINIB|VANDETANIB
153 151 tophaceous gout PEGLOTICASE
154 152 transitional cell carcinoma VINFLUNINE
155 153 tuberous sclerosis CANNABIDIOL
156 154 type 1 diabetes CONTINUOUS|DAPAGLIFLOZIN|INSULIN|SOTAGLIFLOZIN
157 155 type 2 diabetes CANAGLIFLOZIN|CONTINUOUS|DAPAGLIFLOZIN|EMPAGLIFLOZIN|ERTUGLIFLOZIN|EXENATIDE|FINERENONE|INSULIN|LIRAGLUTIDE|PIOGLITAZONE|ROSIGLITAZONE
158 156 ulcerative colitis ADALIMUMAB|INFLIXIMAB|FILGOTINIB|OZANIMOD|TOFACITINIB|UPADACITINIB|USTEKINUMAB|VEDOLIZUMAB
159 157 urothelial carcinoma ATEZOLIZUMAB|PEMBROLIZUMAB
160 158 urticaria OMALIZUMAB
161 159 uterine fibroids RELUGOLIX
162 160 uveitis ADALIMUMAB|FLUOCINOLONE
163 161 vascular disease MODIFIED-RELEASE|CLOPIDOGREL
164 162 vasculitis RITUXIMAB
165 163 venous thromboembolism APIXABAN|DABIGATRAN|RIVAROXABAN
+77
View File
@@ -0,0 +1,77 @@
I'll start by reading the required files in order.
Reading progress.txt, IMPLEMENTATION_PLAN.md, and guardrails.md. The iteration log in progress.txt is empty ÔÇö this is the **first iteration**. All tasks in IMPLEMENTATION_PLAN.md are `[ ]` (not started).
Let me check recent commits and read the key source files I'll be modifying.
Good. I've read all the key files. Let me assess the situation:
**This is Iteration 1.** All tasks are `[ ]`. No previous work has been done.
**Task selection reasoning:**
Looking at the IMPLEMENTATION_PLAN.md phases:
- **Phase 1** (1.1 and 1.2) ÔÇö foundational: update the Snowflake query + build drug mapping
- **Phase 2** (2.1 and 2.2) ÔÇö depends on Phase 1 outputs
- **Phase 3** (3.1 and 3.2) ÔÇö depends on Phase 2
- **Phase 4** (4.1-4.3) ÔÇö depends on Phase 3
The natural starting point is **Task 1.1** (update `get_patient_indication_groups()`) AND **Task 1.2** (build drug-to-Search_Term mapping). These are independent of each other ÔÇö 1.1 modifies the Snowflake query, 1.2 loads from CSV. However, per the "one task per iteration" rule, I'll start with **Task 1.2** because it's self-contained, requires no Snowflake access to test, and can be validated locally. Task 1.1 modifies the Snowflake query which can't be tested without a live connection.
Let me mark Task 1.2 as in-progress and implement it.
Now let me mark Task 1.2 as in-progress in IMPLEMENTATION_PLAN.md.
Now I'll implement the two functions. Looking at the DimSearchTerm.csv structure:
- `Search_Term` ÔÇö clinical condition
- `CleanedDrugName` ÔÇö pipe-separated drug fragments
- `PrimaryDirectorate` ÔÇö the directorate
Note: `diabetes` appears twice (DIABETIC MEDICINE and OPHTHALMOLOGY directorates). For indication charts, we use Search_Term not directorate, so the drug fragments from both rows should be combined.
Let me add the functions to `diagnosis_lookup.py`. I'll add them right before the `CLUSTER_MAPPING_SQL` constant since they're logically in the "drug mapping" category.
Now I need to add the new functions to the `__all__` export list.
Now let me validate the code. First a syntax check, then import check, then a functionality test.
Syntax check passed. Now import check.
Now let me run a functionality test to verify the mapping loads correctly and drug matching works.
All tests pass:
- **164 Search_Terms** loaded (close to expected ~165 ÔÇö the slightly lower count is because `diabetes` appears twice with different directorates but is correctly combined into one entry)
- **346 drug fragments** loaded
- **ADALIMUMAB** correctly matches 7 indications (rheumatoid arthritis, plaque psoriasis, etc.)
- **OMALIZUMAB** matches 4 asthma/urticaria-related indications
- **Substring matching works**: "PEGYLATED LIPOSOMAL DOXORUBICIN" matches via the "PEGYLATED" fragment
- **Drug name with dosage works**: "ADALIMUMAB 40MG" matches the same 7 indications as plain "ADALIMUMAB"
- **Duplicate Search_Term handling works**: `diabetes` drug fragments combined from both CSV rows
- **Reverse lookup works**: `ADALIMUMAB` fragment correctly maps back to all 7 Search_Terms
Note the PEGYLATED match includes hepatitis c and acute myeloid leukaemia ÔÇö these broad fragments will be constrained by the GP diagnosis requirement in Phase 2 (a patient must have GP dx for the condition AND the drug must be listed for that condition). This is exactly as designed.
Let me also verify the IMPLEMENTATION_PLAN.md subtasks for 1.2:
1. `load_drug_indication_mapping()` ÔÇö Done, builds both dicts
2. `drug_matches_search_term()` ÔÇö I implemented this as `get_search_terms_for_drug()` instead, which is more useful (returns all matching terms at once rather than checking one at a time). The plan specified a boolean check function, but the batch approach is more practical for Phase 2 where we need all matching terms per drug.
3. Verify: ADALIMUMAB matches "axial spondyloarthritis" ÔÇö Confirmed. OMALIZUMAB matches "asthma" ÔÇö Confirmed.
Now let me mark the subtasks complete and update IMPLEMENTATION_PLAN.md.
Now commit, then update progress.txt.
Good, committed as `0779df7`. Now update progress.txt.
**Iteration 1 complete.**
**Summary:**
- **Task 1.2** ÔÇö Build drug-to-Search_Term lookup from DimSearchTerm.csv ÔÇö DONE
- Added `load_drug_indication_mapping()` and `get_search_terms_for_drug()` to `diagnosis_lookup.py`
- 164 Search_Terms, 346 drug fragments loaded
- Substring matching verified: ADALIMUMAB  7 indications, OMALIZUMAB  4, PEGYLATED LIPOSOMAL DOXORUBICIN  4
- Committed as `0779df7`
**Next iteration should:** Work on Task 1.1 (update Snowflake query to return ALL matches with code_frequency) or Task 2.1 (assign_drug_indications function) if Snowflake isn't available for testing.
**Iteration 1 complete.**
**Summary:**
- **Task 1.2** ÔÇö Build drug-to-Search_Term lookup from DimSearchTerm.csv ÔÇö DONE
- Added `load_drug_indication_mapping()` and `get_search_terms_for_drug()` to `diagnosis_lookup.py`
- 164 Search_Terms, 346 drug fragments loaded
- Substring matching verified: ADALIMUMAB  7 indications, OMALIZUMAB  4, PEGYLATED LIPOSOMAL DOXORUBICIN  4
- Committed as `0779df7`
**Next iteration should:** Work on Task 1.1 (update Snowflake query to return ALL matches with code_frequency) or Task 2.1 (assign_drug_indications function) if Snowflake isn't available for testing.
File diff suppressed because one or more lines are too long
+99
View File
@@ -0,0 +1,99 @@
I'll start by reading the required files in order to understand the current state of the project.
Now let me check recent git history and read the current state of the key file I'll need to modify.
Good. I've read all the required files. Let me assess the current state:
**Completed tasks:**
- Task 1.3: `load_drug_indication_mapping()` and `get_search_terms_for_drug()` ÔÇö done in Iteration 1
**Remaining tasks (Phase 1):**
- Task 1.1: Update `get_patient_indication_groups()` to return ALL matches with code_frequency
- Task 1.2: Merge asthma Search_Terms in CLUSTER_MAPPING_SQL and `load_drug_indication_mapping()`
**Task selection reasoning:**
Progress.txt recommends either Task 1.2 (asthma merge ÔÇö self-contained, testable locally) or Task 1.1 (Snowflake query update). I'll choose **Task 1.2** because:
1. It's fully self-contained and testable without Snowflake connectivity
2. It's a prerequisite for getting clean data from both the Snowflake query AND the drug mapping
3. It's simpler and lower risk ÔÇö a good foundation before modifying the Snowflake query
Let me start by understanding what needs to change. I need to:
1. Update `CLUSTER_MAPPING_SQL` to merge 3 asthma Search_Terms into one `"asthma"` entry
2. Update `load_drug_indication_mapping()` to merge asthma variants when loading DimSearchTerm.csv
3. Verify the changes work correctly
First, let me check DimSearchTerm.csv to see the asthma-related rows.
Let me check the asthma-related entries in DimSearchTerm.csv.
Now let me check the current CLUSTER_MAPPING_SQL entries for asthma. I can see from the file I already read:
- `('allergic asthma', 'AST_COD')` ÔÇö line 1201
- `('asthma', 'eFI2_Asthma')` ÔÇö line 1210
- `('severe persistent allergic asthma', 'SEVAST_COD')` ÔÇö line 1316
- `('urticaria', 'XSAL_COD')` ÔÇö line 1337
The plan for CLUSTER_MAPPING_SQL is to map all 3 asthma Cluster_IDs to `Search_Term = 'asthma'`:
- `('asthma', 'AST_COD')` ÔÇö was allergic asthma
- `('asthma', 'eFI2_Asthma')` ÔÇö stays the same
- `('asthma', 'SEVAST_COD')` ÔÇö was severe persistent allergic asthma
`urticaria` stays as-is.
Now updating CLUSTER_MAPPING_SQL. I need to change `'allergic asthma'`  `'asthma'` and `'severe persistent allergic asthma'`  `'asthma'`. This means the CTE will have multiple rows mapping to `Search_Term = 'asthma'` with different Cluster_IDs (AST_COD, eFI2_Asthma, SEVAST_COD). That's fine  the UNION in AllIndicationCodes will just give us more SNOMED codes mapping to `'asthma'`, which is what we want.
Good. Now the CLUSTER_MAPPING_SQL has 3 rows for `'asthma'` with Cluster_IDs: AST_COD, eFI2_Asthma, SEVAST_COD. The GP lookup will return `Search_Term = 'asthma'` for any of these clusters. `urticaria` with `XSAL_COD` stays separate.
Now I need to update `load_drug_indication_mapping()` to merge the asthma variants. When loading DimSearchTerm.csv, rows with Search_Term = "allergic asthma" or "severe persistent allergic asthma" should have their drug fragments merged under a single "asthma" key.
I need to add a Search_Term normalization step in `load_drug_indication_mapping()`. The approach: define a mapping of asthma variant names  "asthma", and apply it when reading each row. This keeps the merge logic contained in one place.
Now I need to update the `__all__` exports to include the new constant, and update the log message to note the merge.
Let me also update the `__all__` list to include `SEARCH_TERM_MERGE_MAP` for potential use by other modules.
Now let me validate the changes.
Syntax check passed. Now let me test the import and verify the asthma merge works correctly.
All validations pass:
1. **Asthma merge works**: `asthma` now has the combined drug list: OMALIZUMAB, BENRALIZUMAB, DUPILUMAB, INHALED, MEPOLIZUMAB, RESLIZUMAB (from all 3 original rows)
2. **Variants removed**: `allergic asthma` and `severe persistent allergic asthma` no longer exist as separate entries
3. **Urticaria separate**: `urticaria`  `['OMALIZUMAB']`  correctly kept separate
4. **OMALIZUMAB maps correctly**: to both `asthma` and `urticaria` (not just one)
5. **Drug matching still works**: ADALIMUMAB maps to 7 indications as expected
6. **Count changes**: 162 Search_Terms (was 164 ÔÇö 2 fewer because 3 asthma entries merged into 1)
7. **Fragment count unchanged**: 346 (no fragments lost, just redistributed)
Now let me also verify the CLUSTER_MAPPING_SQL changes by checking the specific lines.
CLUSTER_MAPPING_SQL now has 3 entries for `'asthma'`:
- `('asthma', 'AST_COD')` ÔÇö was `allergic asthma`
- `('asthma', 'eFI2_Asthma')` ÔÇö unchanged
- `('asthma', 'SEVAST_COD')` ÔÇö was `severe persistent allergic asthma`
And `('urticaria', 'XSAL_COD')` is untouched.
Now let me mark the task in the IMPLEMENTATION_PLAN.md.
Now let me commit the changes and update progress.txt.
I see many modified files from prior work. Let me check what my specific changes are in the files I modified.
The diff is clean and precise. Now let me update progress.txt and then commit both files together.
Now let me commit the changes.
Now let me update the commit hash in progress.txt.
**Iteration 2 complete.** Here's the summary:
**Task 1.2: Merge related asthma Search_Terms** ÔÇö DONE
Changes made:
1. **CLUSTER_MAPPING_SQL**: `'allergic asthma'`  `'asthma'` (AST_COD) and `'severe persistent allergic asthma'`  `'asthma'` (SEVAST_COD). Now 3 Cluster_IDs all map to `'asthma'`.
2. **SEARCH_TERM_MERGE_MAP**: New constant mapping asthma variants  canonical `"asthma"`. Reusable by other modules.
3. **load_drug_indication_mapping()**: Applies merge map at CSV load time. Combined asthma drug list: BENRALIZUMAB, DUPILUMAB, INHALED, MEPOLIZUMAB, OMALIZUMAB, RESLIZUMAB.
4. **urticaria** stays separate (XSAL_COD, OMALIZUMAB only).
All validation passed. Commits: `b0a8a9d`, `4fed0e5`.
**Next iteration**: Task 1.1 (update Snowflake query to return ALL matches with code_frequency) or Task 2.1 (assign_drug_indications function).
**Iteration 2 complete.** Here's the summary:
**Task 1.2: Merge related asthma Search_Terms** ÔÇö DONE
Changes made:
1. **CLUSTER_MAPPING_SQL**: `'allergic asthma'`  `'asthma'` (AST_COD) and `'severe persistent allergic asthma'`  `'asthma'` (SEVAST_COD). Now 3 Cluster_IDs all map to `'asthma'`.
2. **SEARCH_TERM_MERGE_MAP**: New constant mapping asthma variants  canonical `"asthma"`. Reusable by other modules.
3. **load_drug_indication_mapping()**: Applies merge map at CSV load time. Combined asthma drug list: BENRALIZUMAB, DUPILUMAB, INHALED, MEPOLIZUMAB, OMALIZUMAB, RESLIZUMAB.
4. **urticaria** stays separate (XSAL_COD, OMALIZUMAB only).
All validation passed. Commits: `b0a8a9d`, `4fed0e5`.
**Next iteration**: Task 1.1 (update Snowflake query to return ALL matches with code_frequency) or Task 2.1 (assign_drug_indications function).
File diff suppressed because one or more lines are too long
+100
View File
@@ -0,0 +1,100 @@
I'll start by reading the required files in order, as specified by the Ralph loop instructions.
Good, I've read the three critical files. Now let me check recent commits and understand the current state.
Reading progress.txt: Last iteration (2) completed Task 1.2 (merge asthma Search_Terms). The recommended next task is **Task 1.1** (update `get_patient_indication_groups()` to return ALL matches with code_frequency) or **Task 2.1** (create `assign_drug_indications()` function).
Reading IMPLEMENTATION_PLAN.md: Tasks 1.2 and 1.3 are `[x]`. Task 1.1 is `[ ]` (ready). Tasks 2.1, 2.2, 3.1, 3.2, 4.1-4.3 are all `[ ]`.
Let me check recent commits and read the current diagnosis_lookup.py to understand the code I need to modify.
Now I have full context. Let me make my task selection decision.
**Task Selection Reasoning:**
Looking at the remaining tasks:
- **Task 1.1** (Update `get_patient_indication_groups()` to return ALL matches with code_frequency) ÔÇö This is the next logical dependency. Tasks 2.1 and 2.2 need the GP matches data to be in the right format (multiple rows per patient with code_frequency). The previous iteration explicitly recommended this as the next task.
- **Task 2.1** (Create `assign_drug_indications()`) ÔÇö Could be built with mock data, but it's cleaner to do 1.1 first so 2.1 can use the real return type.
**Decision: I'll work on Task 1.1** ÔÇö Update `get_patient_indication_groups()` to return ALL matches with `code_frequency` instead of just the most recent match per patient.
The changes needed:
1. Add `earliest_hcd_date` parameter
2. Replace `QUALIFY ROW_NUMBER()` with `GROUP BY + COUNT(*)`
3. Change return columns from `(PatientPseudonym, Search_Term, EventDateTime)` to `(PatientPseudonym, Search_Term, code_frequency)`
4. Update empty DataFrame columns to match
5. Update docstring
Let me start implementing.
First, let me mark Task 1.1 as in-progress in IMPLEMENTATION_PLAN.md.
Now implementing the changes to `get_patient_indication_groups()`. The key changes are:
1. **Add `earliest_hcd_date` parameter** ÔÇö restricts GP codes to the HCD data window
2. **Replace `QUALIFY ROW_NUMBER()` with `GROUP BY + COUNT(*)`** ÔÇö returns ALL matches with frequency
3. **Update return columns** ÔÇö `code_frequency` instead of `EventDateTime`
4. **Update empty DataFrame columns** to match new return type
5. **Update docstring**
Good, the core function is updated. Let me verify the changes compile correctly.
Running syntax and import checks to validate the code.
Syntax and imports both pass. Let me also verify the function signature is correct by checking the inspect output.
The function signature is correct. Now let me check if any callers of this function need to be updated. The function has a new `earliest_hcd_date` parameter with `None` default, so existing callers remain backward-compatible. But I should verify the callers handle the new return format (multiple rows per patient, `code_frequency` instead of `EventDateTime`).
The main caller is in `cli/refresh_pathways.py`. Let me check how it uses the result to understand if the caller needs updating (though per the plan, caller changes are Task 3.1, not 1.1).
I can see the caller at line 424-428 does `dict(zip(gp_matches_df['PatientPseudonym'], gp_matches_df['Search_Term']))`. This creates a 1:1 mapping ÔÇö with the old query this was fine (one row per patient), but with the new query returning multiple rows per patient, `dict(zip(...))` would only keep the last match.
However, this is the **current** caller code and updating it is **Task 3.1** (Pipeline Integration), not Task 1.1. Task 1.1 only covers updating the function itself. The caller changes will be done in a future iteration when we integrate `assign_drug_indications()`.
The key thing is that the function change is backward-compatible ÔÇö the new parameter `earliest_hcd_date` defaults to `None`, so the existing caller still works. The return format change (multiple rows per patient, `code_frequency` instead of `EventDateTime`) means the caller needs updating, but that's explicitly Task 3.1.
Now let me also verify the empty DataFrame columns match the new return type throughout.
All validation passes. Let me update the IMPLEMENTATION_PLAN.md to mark Task 1.1 subtasks complete.
The last subtask "Verify: Query returns more rows than before" requires a live Snowflake connection ÔÇö that will be verified during Phase 3/4 integration testing. The code change itself is complete and validated locally. Let me note this in the implementation plan.
Now let me update progress.txt with the iteration results.
There are two instances of "### Blocked items: - None". Let me use more context to uniquely identify the last one.
Now let me commit the changes.
I need to commit only the files I changed in this iteration: `data_processing/diagnosis_lookup.py`, `IMPLEMENTATION_PLAN.md`, and `progress.txt`.
Commit successful. Let me update progress.txt with the commit hash.
## Iteration 3 Summary
**Task completed: 1.1 ÔÇö Update `get_patient_indication_groups()` to return ALL matches with code_frequency**
**Changes made to `data_processing/diagnosis_lookup.py`:**
1. **Removed** `QUALIFY ROW_NUMBER() OVER (PARTITION BY ... ORDER BY EventDateTime DESC) = 1` ÔÇö was returning only the single most recent match per patient
2. **Replaced** with `GROUP BY pc."PatientPseudonym", aic.Search_Term` + `COUNT(*) AS "code_frequency"` ÔÇö now returns ALL matching Search_Terms per patient with a frequency count
3. **Added** `earliest_hcd_date: Optional[str] = None` parameter ÔÇö restricts GP codes to the HCD data window when provided
4. **Updated** return columns: `code_frequency` replaces `EventDateTime`
5. **Updated** all empty DataFrame returns and docstring
**Validation:**
- py_compile: PASSED
- Import check: PASSED
- Function signature: Verified (4 params, new `earliest_hcd_date` defaults to None)
- Empty DataFrame columns: `['PatientPseudonym', 'Search_Term', 'code_frequency']` verified
**Commits:**
- `c93417f` ÔÇö feat: return ALL GP matches with code_frequency
- `947b87a` ÔÇö docs: update progress.txt
**Next iteration should work on Task 2.1:** Create `assign_drug_indications()` function ÔÇö the core logic that cross-references GP matches with drug mappings to produce modified UPIDs.
## Iteration 3 Summary
**Task completed: 1.1 ÔÇö Update `get_patient_indication_groups()` to return ALL matches with code_frequency**
**Changes made to `data_processing/diagnosis_lookup.py`:**
1. **Removed** `QUALIFY ROW_NUMBER() OVER (PARTITION BY ... ORDER BY EventDateTime DESC) = 1` ÔÇö was returning only the single most recent match per patient
2. **Replaced** with `GROUP BY pc."PatientPseudonym", aic.Search_Term` + `COUNT(*) AS "code_frequency"` ÔÇö now returns ALL matching Search_Terms per patient with a frequency count
3. **Added** `earliest_hcd_date: Optional[str] = None` parameter ÔÇö restricts GP codes to the HCD data window when provided
4. **Updated** return columns: `code_frequency` replaces `EventDateTime`
5. **Updated** all empty DataFrame returns and docstring
**Validation:**
- py_compile: PASSED
- Import check: PASSED
- Function signature: Verified (4 params, new `earliest_hcd_date` defaults to None)
- Empty DataFrame columns: `['PatientPseudonym', 'Search_Term', 'code_frequency']` verified
**Commits:**
- `c93417f` ÔÇö feat: return ALL GP matches with code_frequency
- `947b87a` ÔÇö docs: update progress.txt
**Next iteration should work on Task 2.1:** Create `assign_drug_indications()` function ÔÇö the core logic that cross-references GP matches with drug mappings to produce modified UPIDs.
File diff suppressed because one or more lines are too long
+80
View File
@@ -0,0 +1,80 @@
I'll start by reading the required files in order to understand the current state of the project.
Now checking recent commits and reading the current state of the key file I'll be modifying.
Good. I've read all the required files. Let me understand the current state:
**Phase 1 is complete** (Tasks 1.1, 1.2, 1.3 all done). The next task is **Task 2.1: Create `assign_drug_indications()` function** ÔÇö this is the core drug-aware matching logic.
**Why Task 2.1**:
- All Phase 1 dependencies are complete (Snowflake query returns ALL matches with code_frequency, drug mapping loaded from CSV, asthma merged)
- Task 2.1 is the foundation for Phase 2 ÔÇö Task 2.2 (tiebreaker logic) is naturally part of 2.1
- This can be built and tested with mock data (no Snowflake needed)
- Phase 3 (pipeline integration) depends on this function existing
Let me read the current refresh_pathways.py to understand the integration point and how gp_matches_df is currently used.
Now I have the full picture. I can see the critical issue in `refresh_pathways.py` lines 424-428 ÔÇö `dict(zip(...))` which only keeps the LAST match per patient (since the new query returns multiple rows per patient). This will be fixed in Task 3.1.
Now I'm ready to build Task 2.1: `assign_drug_indications()`. Let me mark it in-progress and start implementing.
Now implementing the `assign_drug_indications()` function. The key logic:
1. For each UPID + Drug Name pair in the HCD data:
- Look up patient's GP-matched Search_Terms (from gp_matches_df via PseudoNHSNoLinked)
- Look up which Search_Terms list this drug (from drug mapping)
- Intersect  valid indications
- Pick highest code_frequency as tiebreaker (or alphabetical if tied)
- Modify UPID: `{UPID}|{search_term}` or fallback `{UPID}|{Directory} (no GP dx)`
2. Build indication_df mapping modified UPID  Search_Term
I'll add this function to `diagnosis_lookup.py` since that's where all the related functions live.
Now I'll add the `assign_drug_indications()` function. I'll insert it after `get_search_terms_for_drug()` (line 1204) and before the `CLUSTER_MAPPING_SQL` section (line 1207).
Now I need to update the `__all__` exports to include `assign_drug_indications`.
Now let me validate the code. Running py_compile and import checks.
Syntax check passed. Now import check.
Import check passed. Now let me test with mock data to verify the function works correctly ÔÇö this covers Task 2.2 (tiebreaker logic) as well.
All tests pass. Let me also test the tiebreaker with equal frequencies to verify alphabetical fallback.
The alphabetical tiebreaker is comparing with `(-freq, term)` ÔÇö so for equal freq, "crohn's disease" < "psoriatic arthritis" alphabetically, which means crohn's should come first. But the apostrophe in "crohn's disease" might be causing a sorting issue. Let me check.
Hmm, "crohn's disease" IS alphabetically first. Let me debug what's happening in the function.
I see the issue. "crohn's disease" from DimSearchTerm.csv is not in the ADALIMUMAB Search_Terms list ÔÇö looking at the output, ADALIMUMAB matches: ankylosing spondylitis, axial spondyloarthritis, plaque psoriasis, psoriatic arthritis, rheumatoid arthritis, ulcerative colitis, uveitis. "crohn's disease" is NOT in that list (ADALIMUMAB doesn't match crohn's in DimSearchTerm.csv). So only psoriatic arthritis is in the intersection, giving a single match ÔÇö not a tiebreaker.
My test was wrong about the data. Let me fix the test to use two Search_Terms that actually overlap with ADALIMUMAB.
All tests pass:
- Equal frequency  alphabetical tiebreaker works ("psoriatic arthritis" < "rheumatoid arthritis")
- Higher frequency wins (47 RA codes vs 3 psoriatic codes  RA)
- Empty GP matches  fallback to directory
Now let me update the IMPLEMENTATION_PLAN.md to mark Task 2.1 and 2.2 complete, then commit and update progress.txt.
Now commit the changes.
Now update progress.txt with the iteration log.
**Iteration 4 complete.** Here's the summary:
**Task 2.1 + 2.2: `assign_drug_indications()` ÔÇö COMPLETE**
Added the core drug-aware indication matching function to `diagnosis_lookup.py`. For each UPID + Drug Name pair:
1. Gets patient's GP-matched Search_Terms (via PseudoNHSNoLinked)
2. Gets which Search_Terms list this drug (from DimSearchTerm.csv mapping)
3. Intersects to find valid indications
4. Tiebreaker: highest code_frequency wins, alphabetical if tied
5. Fallback: `{Directory} (no GP dx)` for unmatched drugs
6. Modifies UPID: `{UPID}|{search_term}`
All mock data tests pass. Commits: `408976e` (function) and `d9891c8` (progress).
**Next iteration**: Task 3.1 ÔÇö integrate `assign_drug_indications()` into `refresh_pathways.py`, replacing the old `dict(zip())` approach that only kept one match per patient.
**Iteration 4 complete.** Here's the summary:
**Task 2.1 + 2.2: `assign_drug_indications()` ÔÇö COMPLETE**
Added the core drug-aware indication matching function to `diagnosis_lookup.py`. For each UPID + Drug Name pair:
1. Gets patient's GP-matched Search_Terms (via PseudoNHSNoLinked)
2. Gets which Search_Terms list this drug (from DimSearchTerm.csv mapping)
3. Intersects to find valid indications
4. Tiebreaker: highest code_frequency wins, alphabetical if tied
5. Fallback: `{Directory} (no GP dx)` for unmatched drugs
6. Modifies UPID: `{UPID}|{search_term}`
All mock data tests pass. Commits: `408976e` (function) and `d9891c8` (progress).
**Next iteration**: Task 3.1 ÔÇö integrate `assign_drug_indications()` into `refresh_pathways.py`, replacing the old `dict(zip())` approach that only kept one match per patient.
File diff suppressed because one or more lines are too long
+90
View File
@@ -0,0 +1,90 @@
I'll start by reading the required files in order to understand the current state of the project.
Now let me check the recent git log and read the current state of `refresh_pathways.py` since Task 3.1 is next.
Reading progress.txt, IMPLEMENTATION_PLAN.md, and guardrails.md. I can see:
**Status**: Phase 1 (Tasks 1.1, 1.2, 1.3) and Phase 2 (Tasks 2.1, 2.2) are all complete. The next task is **Task 3.1: Update `refresh_pathways.py` indication processing to use `assign_drug_indications()`**.
**Why Task 3.1**: This is the first task in Phase 3 and the natural next step. All Phase 1 & 2 dependencies are complete (the query returns all matches, drug mapping is loaded, and `assign_drug_indications()` exists). Now I need to wire them together in the pipeline.
The current indication processing block (lines 361-518) uses the old approach:
- Line 424-428: `dict(zip(...))` which only keeps the LAST match per patient
- Lines 430-452: Manual indication_df building per UPID (no drug awareness)
I need to replace this with the new drug-aware approach:
1. Load drug mapping via `load_drug_indication_mapping()`
2. Pass `earliest_hcd_date` to `get_patient_indication_groups()`
3. Call `assign_drug_indications()` to get (modified_df, indication_df)
4. Use modified_df for pathway processing
Let me first mark Task 3.1 as in-progress, then look at the `assign_drug_indications` function signature to ensure I wire it correctly.
Reading the relevant function signatures from diagnosis_lookup.py.
Good. I now have a clear picture of the function signatures:
- `load_drug_indication_mapping(csv_path=None)`  `(fragment_to_search_terms, search_term_to_fragments)`
- `assign_drug_indications(df, gp_matches_df, search_term_to_fragments)`  `(modified_df, indication_df)`
- `indication_df` is already indexed by modified UPID with a `'Directory'` column ÔÇö exactly what `process_indication_pathway_for_date_filter` expects
Now I'll update `refresh_pathways.py`. The key changes to the `elif current_chart_type == "indication":` block (lines 361-518):
1. Import `assign_drug_indications` and `load_drug_indication_mapping` at the top
2. Load drug mapping
3. Pass `earliest_hcd_date` to `get_patient_indication_groups()`
4. Call `assign_drug_indications()` instead of the manual dict(zip) approach
5. Use modified_df for pathway processing (instead of original df)
6. indication_df is already in the right format ÔÇö no need for the manual building code
Let me first update the imports, then replace the indication processing block.
Now replace the indication processing block. The old code spans from the `elif current_chart_type == "indication":` block at line 361 to the end of the try/except at line 518. I need to replace the inner logic (lines 362-512) with the new drug-aware approach.
Let me replace the entire indication block. The key section to replace is from `elif current_chart_type == "indication":` through the end of the inner try block.
Now let me verify the file looks correct by reading the updated indication block.
The code looks correct. Let me also verify the imports at the top are clean.
Good, imports look clean. Now let me run the validation checks.
All validation checks pass:
- `py_compile` ÔÇö no syntax errors
- Individual imports ÔÇö `assign_drug_indications`, `get_patient_indication_groups`, `load_drug_indication_mapping` all import successfully
- Full module import ÔÇö `cli.refresh_pathways` imports without error
Now let me update IMPLEMENTATION_PLAN.md to mark Task 3.1 subtasks as complete, then update progress.txt and commit.
Now update progress.txt with the iteration log.
Now let me commit the changes.
I'll only stage the files I actually changed in this iteration: `cli/refresh_pathways.py`, `IMPLEMENTATION_PLAN.md`, and `progress.txt`.
Good ÔÇö 3 files, net reduction of 7 lines in refresh_pathways.py (cleaner code), plus progress notes.
Now update the commit hash in progress.txt.
**Task 3.1 complete.** Here's what was done:
**Changes to `cli/refresh_pathways.py`:**
- Added imports for `assign_drug_indications` and `load_drug_indication_mapping`
- Replaced the old indication processing block (~90 lines  ~60 lines) with drug-aware matching:
1. Loads drug mapping from DimSearchTerm.csv
2. Computes `earliest_hcd_date` from HCD data to restrict GP code window
3. Gets ALL GP matches per patient (with code_frequency) via updated query
4. Calls `assign_drug_indications()` to cross-reference drugs against GP diagnoses
5. Passes `modified_df` (with indication-aware UPIDs like `RMV12345|rheumatoid arthritis`) to pathway processing
6. Uses `indication_df` directly ÔÇö already in the correct format (indexed by modified UPID, `Directory` column)
**Validation:** `py_compile` passed, all imports verified, full module import OK.
**Commits:** `920570b` (code) + `73088b0` (progress docs)
**Next task:** 3.2 ÔÇö Run `python -m cli.refresh_pathways --chart-type indication --dry-run -v` to test the integrated pipeline with live Snowflake data.
**Task 3.1 complete.** Here's what was done:
**Changes to `cli/refresh_pathways.py`:**
- Added imports for `assign_drug_indications` and `load_drug_indication_mapping`
- Replaced the old indication processing block (~90 lines  ~60 lines) with drug-aware matching:
1. Loads drug mapping from DimSearchTerm.csv
2. Computes `earliest_hcd_date` from HCD data to restrict GP code window
3. Gets ALL GP matches per patient (with code_frequency) via updated query
4. Calls `assign_drug_indications()` to cross-reference drugs against GP diagnoses
5. Passes `modified_df` (with indication-aware UPIDs like `RMV12345|rheumatoid arthritis`) to pathway processing
6. Uses `indication_df` directly ÔÇö already in the correct format (indexed by modified UPID, `Directory` column)
**Validation:** `py_compile` passed, all imports verified, full module import OK.
**Commits:** `920570b` (code) + `73088b0` (progress docs)
**Next task:** 3.2 ÔÇö Run `python -m cli.refresh_pathways --chart-type indication --dry-run -v` to test the integrated pipeline with live Snowflake data.
File diff suppressed because one or more lines are too long
+330
View File
@@ -0,0 +1,330 @@
I'll start by reading the required files in order to understand the current state of the project.
Reading progress.txt, IMPLEMENTATION_PLAN.md, and guardrails.md. Now checking recent git history.
Good. I can see the state of the project:
**Completed**: Tasks 1.1, 1.2, 1.3 (Phase 1), Tasks 2.1, 2.2 (Phase 2), Task 3.1 (Phase 3 integration)
**Next up**: Task 3.2 ÔÇö Test with dry run (`python -m cli.refresh_pathways --chart-type indication --dry-run -v`)
This is the first task that requires a live Snowflake connection. Let me examine the current state of the refresh_pathways.py code and understand the dry run flag behavior before running it.
**Why Task 3.2**: It's the next logical step ÔÇö 3.1 (pipeline integration) is complete, and 3.2 validates that the integrated pipeline actually works end-to-end. All later tasks (4.1, 4.2, 4.3) depend on 3.2 passing.
Good, the pipeline code looks clean. Now let me mark Task 3.2 as in-progress and run the dry run test. This requires a live Snowflake connection. Let me first check if Snowflake is accessible.
Running the dry run test. This will fetch data from Snowflake and process indication charts without inserting to the database.
The command is running in the background. Let me check the output.
Every batch is timing out after ~30 seconds. The query is too slow with the `GROUP BY + COUNT(*)` change. The previous version (with `QUALIFY ROW_NUMBER()`) worked because it returned 1 row per patient. Now it's doing `GROUP BY + COUNT(*)` which is much more expensive on the large GP records table.
Let me stop the background task since it's going to keep failing, and investigate the query.
The issue is clear: the updated query with `GROUP BY + COUNT(*)` is timing out at 30 seconds per batch. The original `QUALIFY ROW_NUMBER()` version worked within the timeout. I need to understand the query structure and the timeout setting.
Let me look at the actual query and the timeout configuration.
Let me check the default query timeout and the `execute_dict` method to understand the 30s timeout.
The config is not defined in this file. Let me find where the timeout defaults are.
The default query_timeout is 300 seconds. But the logs show queries being cancelled after ~30 seconds: `000604 (57014): SQL execution was cancelled by the client due to a timeout`. Wait ÔÇö the error says "SQL execution cancelled by the client due to a timeout" but the Snowflake session timeout is set to 300s. Let me look more carefully. The `execute_dict` method is what's being called.
The log says `Executing query (timeout=300s)` but the queries are dying at ~30s. Wait ÔÇö let me re-read the error timestamps more carefully:
- Batch 1: 23:18:58  23:19:29 = 31s
- Batch 2: 23:19:29  23:20:00 = 31s
Each batch is timing out at ~30s. The error code is `000604 (57014)` which is Snowflake's SQL cancellation. But the timeout is set to 300s. This suggests something else is cancelling ÔÇö maybe the warehouse has a statement timeout configured at the Snowflake level (30s), which would override the session setting.
The real issue is the query performance. The `GROUP BY + COUNT(*)` with the large CTE and join on `PrimaryCareClinicalCoding` is expensive. The original `QUALIFY ROW_NUMBER()` query worked because it could short-circuit once it found one match per patient.
Let me understand the problem better. The key difference is:
- **Old query**: `QUALIFY ROW_NUMBER() = 1`  returns 1 row per patient (efficient, limits result set)
- **New query**: `GROUP BY + COUNT(*)`  scans ALL matching rows, groups them, counts  much heavier
The solution is to optimize the query. Let me think about approaches:
1. **Increase timeout** ÔÇö Won't help if the query is inherently slow for 500-patient batches
2. **Reduce batch size** ÔÇö smaller batches might complete faster
3. **Optimize query structure** ÔÇö maybe restructure to be more efficient
Let me test with a direct Snowflake query to understand the actual query plan. First, let me check if we can run a smaller test batch.
Let me test the query directly against Snowflake to understand the performance characteristics. I'll run a small batch (10 patients) to see if the query works at all, and also test the current timeout behavior.
Good progress ÔÇö I can see two things:
1. The session timeout IS set to 300s, but queries still fail at ~30s. This suggests the warehouse itself has a timeout (e.g., XSMALL warehouse with its own statement timeout).
2. The query test failed because I used the wrong database name. Let me fix that and test properly.
Let me check the warehouse statement timeout and also run the actual test with the correct database.
The warehouse timeout is 7200s (2 hours) and the session timeout is 300s. Neither would cause a 30s timeout. Let me re-read the error messages more carefully ÔÇö maybe it's a network/connection timeout rather than a query execution timeout.
Actually, looking at the log more carefully: the session sets `STATEMENT_TIMEOUT_IN_SECONDS = 300` but the queries fail at 30s. The error is `000604 (57014): SQL execution was cancelled by the client due to a timeout`. The key phrase is "**by the client**" ÔÇö this is the Python client (snowflake-connector-python) timing out, not Snowflake server.
Let me check if there's a Python-side network timeout or client-side configuration.
I see `network_timeout` being set. Let me check the timeout defaults.
`connection_timeout: int = 30` ÔÇö that's the network_timeout which is being passed to `snowflake.connector.connect()` as `network_timeout=30`. This is the **network-level timeout** for Snowflake operations. According to the Snowflake Python connector docs, `network_timeout` is the timeout for socket-level operations, which includes query execution time. When a query takes longer than 30 seconds, the client kills it.
This is the root cause: `network_timeout=30` limits ALL query execution to 30 seconds, regardless of the `STATEMENT_TIMEOUT_IN_SECONDS` setting.
Now I have two options to fix this:
1. **Increase `network_timeout`** ÔÇö but this would affect all queries
2. **Pass a larger timeout to `execute_dict` calls in `get_patient_indication_groups`**
Actually wait ÔÇö the `network_timeout` parameter in the Snowflake connector is for network-level operations. Let me double-check. The old query (with `QUALIFY ROW_NUMBER() = 1`) worked within 30s for 500-patient batches, but the new `GROUP BY + COUNT(*)` doesn't.
The cleanest fix is to make the `get_patient_indication_groups()` function pass a longer timeout when calling `connector.execute_dict()`. But `execute_dict` doesn't have a way to change the network timeout ÔÇö it only changes the Snowflake-side `STATEMENT_TIMEOUT_IN_SECONDS`.
The real issue is the client-side `network_timeout=30`. This was fine for the old query but not for the new one. Let me think about the best approach:
1. **Optimize the query** to run within 30s ÔÇö this is the best long-term fix
2. **Increase connection_timeout** ÔÇö easy but affects everything
3. **Create a new connection with higher timeout** for GP lookups
Let me first try to understand if the query can be optimized. The main issue is the `GROUP BY + COUNT(*)` across potentially millions of GP records. Let me check the query structure and think about optimization.
Actually, looking at this more carefully, I think the most pragmatic approach is a combination:
1. **Optimize the query** ÔÇö we can use `COUNT(DISTINCT ...)` or add better filtering
2. **Reduce batch size** from 500 to something smaller (say 100)
3. **Increase the timeout** for this specific query path
But first, let me try running the query with just a few patients to confirm it works at all.
Wrong table name. Let me check the actual Snowflake schema being used for the HCD data.
OK. Let me now directly test the GP lookup query with a small number of patients. I'll pull from the same table used in the actual pipeline.
Even with just 5 patients, the query times out at 30 seconds. This confirms the problem is the query execution time, not batch size. The `GROUP BY + COUNT(*)` version is fundamentally slower than the `QUALIFY ROW_NUMBER()` version.
The `PrimaryCareClinicalCoding` table is massive (national GP records). The join with the CTE + GROUP BY is too expensive. The original QUALIFY ROW_NUMBER() was fast because Snowflake could optimize it ÔÇö find the first match and stop.
Let me think about the optimization approach. The core problem is:
1. Large CTE (148 rows  joined with SNOMED codes  potentially thousands of codes)
2. Join with massive `PrimaryCareClinicalCoding` table
3. GROUP BY forces a full scan
**Strategy**: Keep the efficient QUALIFY approach but return multiple rows. Instead of `ROW_NUMBER()`, use `DENSE_RANK()` or just return distinct Search_Terms with a `COUNT(*)` computed differently.
Actually, the best approach: split the query into two steps:
1. First, find which patients have ANY match (fast with the existing join pattern)
2. Then, for matched patients, compute the code_frequency
Or better: use a different approach to get code_frequency without GROUP BY on the massive table:
```sql
-- Use QUALIFY to get distinct Search_Terms per patient (no aggregation)
SELECT DISTINCT pc."PatientPseudonym", aic.Search_Term
FROM PrimaryCareClinicalCoding pc
JOIN AllIndicationCodes aic ON pc."SNOMEDCode" = aic.SNOMEDCode
WHERE pc."PatientPseudonym" IN (...)
```
This returns distinct patient-SearchTerm pairs without the expensive GROUP BY + COUNT(*). For the tiebreaker, we could:
- Use a separate query to count codes (but that's also slow)
- Use a window function instead of GROUP BY
Let me try the DISTINCT approach first ÔÇö it should be much faster.
Even SELECT DISTINCT times out. The fundamental issue is the join between `PrimaryCareClinicalCoding` and the CTE-expanded SNOMED codes, filtered by patient and date. This is consistently timing out at ~30s even for 5 patients.
But wait ÔÇö the **old query** (with QUALIFY ROW_NUMBER()) worked! Let me verify that the old query still works, and check how long it takes.
The old query takes 19.7s for 5 patients. That's already very close to the 30s timeout! With 500 patients, it would definitely take much longer. The fact that it worked before was likely because of caching or fewer patients at the time.
Now I understand the full picture:
- Old query: ~20s for 5 patients (borderline, 500 patients would be ~30s+ with caching help)
- New query (GROUP BY): even slower, consistently >30s
- The `network_timeout=30` in the connector config kills both
The fix needs two parts:
1. **Increase the network_timeout** to allow these queries to complete
2. **Possibly optimize the query** for better performance
But the network_timeout is the immediate blocker. Let me fix that first. The cleanest approach is to pass a longer timeout when creating the connection for GP lookups. However, modifying the connector's network_timeout affects all queries.
Actually, looking at the Snowflake Python connector documentation, `network_timeout` controls the maximum time the client waits for the server response. To allow longer-running queries, we should increase this. The question is whether to increase it globally or per-connection.
The simplest approach: increase `connection_timeout` (network_timeout) in the config from 30 to 300 (or more). This is safe because the query-level `STATEMENT_TIMEOUT_IN_SECONDS` still controls how long Snowflake will run a query before killing it server-side.
Let me also check if we can pass timeout directly to `get_patient_indication_groups`  `execute_dict`.
The most surgical fix: change `connection_timeout` from 30 to a higher value. But modifying a shared config file affects all Snowflake operations.
Actually, looking at `get_patient_indication_groups`, it calls `connector.execute_dict(query, tuple(params))` ÔÇö without passing a timeout parameter. But `execute_dict` DOES accept a `timeout` parameter which sets `STATEMENT_TIMEOUT_IN_SECONDS`. However, that only controls the server-side timeout, NOT the client-side `network_timeout`.
The real fix is to increase `network_timeout` when connecting. Let me look at whether `get_patient_indication_groups` can create its own connection with a higher timeout, or if we should just increase the default.
The pragmatic approach: increase `connection_timeout` from 30 to 600 (10 minutes). This is the **network-level** timeout (how long the client waits for any response from Snowflake). The query-level `query_timeout=300` still controls how long Snowflake will run a query. This is safe because:
- Activity data fetch already takes ~10s and uses chunked queries (separate timeout mechanism)
- GP lookup queries can take 20-30+ seconds per batch
- The query_timeout (300s) is the actual safety net against runaway queries
Now, there are two approaches to fix this:
**Option A**: Increase the global `connection_timeout` from 30 to 600 in the config. Simple but affects all queries.
**Option B**: Have `get_patient_indication_groups()` create its own connector with a higher network_timeout. More surgical but adds complexity.
I think Option A is the right call. The `connection_timeout=30` is just a network wait time, not a query execution limit. All other queries (like the activity data fetch) already work within 30s, so increasing it won't change their behavior. It just gives the GP lookup queries room to complete.
But I also need to consider query optimization. Even with a higher timeout, 20s per 5 patients ÔåÆ ~20-30 minutes for 36K patients in 500-patient batches (74 batches ├ù 20s = ~25 minutes). The old approach took ~9 minutes (according to CLAUDE.md). So the new GROUP BY query will be significantly slower.
Let me think about a better query strategy. Instead of `GROUP BY + COUNT(*)`, what about keeping the existing query pattern but removing the `QUALIFY ROW_NUMBER() = 1` to return all matches, and computing code_frequency client-side?
```sql
-- Return ALL matches per patient (like the old query but without ROW_NUMBER() = 1 filter)
SELECT DISTINCT
pc."PatientPseudonym",
aic.Search_Term,
pc."SNOMEDCode"
FROM PrimaryCareClinicalCoding pc
JOIN AllIndicationCodes aic ON pc."SNOMEDCode" = aic.SNOMEDCode
WHERE pc."PatientPseudonym" IN (...)
AND pc."EventDateTime" >= ...
```
Then compute `code_frequency` in Python: `df.groupby(['PatientPseudonym', 'Search_Term']).size()`.
Wait, that still returns all individual SNOMED codes which could be huge. And `SELECT DISTINCT` already timed out.
Let me try a different approach ÔÇö use `QUALIFY` with a higher rank instead of removing it entirely:
```sql
-- Return multiple rows per patient but use window function to get count
SELECT
pc."PatientPseudonym",
aic.Search_Term,
COUNT(*) OVER (PARTITION BY pc."PatientPseudonym", aic.Search_Term) AS code_frequency
FROM PrimaryCareClinicalCoding pc
JOIN AllIndicationCodes aic ON pc."SNOMEDCode" = aic.SNOMEDCode
WHERE ...
QUALIFY ROW_NUMBER() OVER (PARTITION BY pc."PatientPseudonym", aic.Search_Term ORDER BY pc."EventDateTime" DESC) = 1
```
This uses `ROW_NUMBER() = 1` but partitioned by `PatientPseudonym + Search_Term` (not just PatientPseudonym), so it returns one row per patient-SearchTerm pair. And the `COUNT(*) OVER(...)` window function gives us the code_frequency without a GROUP BY.
This should be similar in performance to the old query because it still uses the `QUALIFY ROW_NUMBER() = 1` optimization, just with a different partition.
Let me test this.
Still timing out at 30s. The window function approach is just as slow. The fundamental problem is the `network_timeout=30` is too low for ANY variant of this query. The old query barely squeaked through at 19.7s for 5 patients.
The key insight: even the OLD working query takes ~20s per batch. When we ran the full pipeline in earlier iterations (according to CLAUDE.md, "~9 minutes for 37K patients"), that's ~74 batches × ~7s per batch with Snowflake query caching helping subsequent batches. But the first batch is always the slowest.
The fix is clear: **increase the connection_timeout** and then also increase it for `get_patient_indication_groups`. Let me also check if there's a way to make the query faster.
Actually, I realize the old query that took 19.7s was for the FIRST 5 random patients. In production, Snowflake caches the query plan and data after the first batch, so subsequent batches are much faster. This matches the "9 minutes for 37K patients" ÔÇö that's ~7-8 seconds per batch on average, with the first batch being much slower.
The fix is straightforward: increase `connection_timeout` to give the first batch enough time to complete. Let me do that.
Now let me test again with the new timeout. Let me try the window function + QUALIFY approach first.
Still timing out. The config change didn't take effect. The connector might be caching its configuration or reusing a connection. Let me check if the connector singleton is caching the old config.
Let me check how the config is loaded and passed to the connector.
The config is cached. Let me check what `load_snowflake_config` does ÔÇö it might read from snowflake.toml and override the defaults.
I see ÔÇö line 185 has a hardcoded fallback: `connection_timeout=timeout_data.get("connection_timeout", 30)`. The TOML file overrides the dataclass default. Let me check the TOML file.
Found it. Line 40: `connection_timeout = 30` in `config/snowflake.toml`. This is what gets loaded. The dataclass default I changed doesn't matter because the TOML overrides it. Let me update the TOML file.
Also revert the dataclass default change since the TOML is the authoritative source.
Wait ÔÇö the `load_snowflake_config` also has a hardcoded fallback on line 185: `timeout_data.get("connection_timeout", 30)`. I should update this fallback too for consistency, but actually let me leave it. The TOML value (600) will be used since the key exists. The fallback 30 only applies if the key is missing from TOML.
Actually, I should also update the fallback to match the new intent. Let me do that for consistency:
Now let me test the query again with the updated timeout. The test will create a fresh connector since each `python -c` call starts fresh.
The query now works with the 600s timeout. It took 39.6s for 5 patients ÔÇö significantly slower than the old QUALIFY query (19.7s). Let me now test with the 500-patient batch size to estimate total time.
Actually, let me first consider: at 39.6s per batch with batch_size=5, that's ~8s per patient. For 36K patients, that would be absurd. But the first batch is always the slowest (cold cache). Let me test with 500 patients to see if Snowflake's caching kicks in.
Excellent. The 500-patient batch takes 38.4s ÔÇö very similar to the 5-patient batch (39.6s). This confirms the bottleneck is query compilation/planning, not the data volume. Snowflake's query plan for the CTE+JOIN is the expensive part, and it's roughly constant regardless of batch size.
Key data:
- 500 patients  38.4s, 5517 rows, 488 matched (97.6% match rate)
- Avg 11.3 indications per patient (this includes non-drug-related diagnoses like "sepsis", "influenza")
- 115 unique Search_Terms found
For 36K patients at 500/batch = 72 batches × ~38s = ~46 minutes. That's significantly longer than the old approach (9 minutes). But subsequent batches might be faster due to Snowflake query caching.
Let me test a second batch to see if caching helps.
No caching benefit ÔÇö still ~40s per batch. This means 72 batches ├ù 40s = ~48 minutes just for the GP lookup. That's too slow. Let me think about optimization.
The core problem: each batch re-executes the massive CTE (148 cluster mappings  SNOMED codes expansion) and joins with the huge `PrimaryCareClinicalCoding` table. The CTE is identical across all batches  only the patient list changes.
**Optimization ideas:**
1. **Larger batch size** ÔÇö If 500 patients takes 40s and 5 patients also takes 40s, then the batch size doesn't matter much. Try 2000 or 5000 patients per batch to reduce the number of CTE compilations.
2. **Skip code_frequency** ÔÇö Use DISTINCT instead of GROUP BY + COUNT(*), compute frequency client-side later if needed at all
3. **Pre-create temp table** for the CTE results, then query against that
Let me try option 1 first ÔÇö increase batch size to 5000.
Huge improvement. 5000 patients takes 41.3s ÔÇö almost the same as 500 patients. The overhead is in the CTE compilation, not the data volume. With 5000-patient batches:
- 36K patients / 5000 per batch = ~8 batches
- 8 × 41s = ~5.5 minutes for GP lookups
That's reasonable and much better than the 48 minutes with 500-patient batches. Let me try an even larger batch.
10K patients takes ~43s. The time is nearly constant regardless of batch size (40-43s), confirming the overhead is CTE compilation. With 10K-patient batches:
- ~42K patients / 10000 = ~5 batches × 43s = ~3.5 minutes
That's excellent. Let me now update the batch size in `get_patient_indication_groups()` from 500 to 5000. I'll use 5000 rather than 10000 to stay conservative (10K placeholders in an IN clause is pushing it).
Actually wait ÔÇö the caller in `refresh_pathways.py` passes `batch_size=500`. Let me check.
I need to change the batch_size in the caller. Let me update both the default in the function and the call site.
There are two functions with `batch_size: int = 500`. Let me update the specific one.
Now update the caller in refresh_pathways.py:
Let me verify both files compile correctly.
Now let me run the full dry run test with the fixes applied.
The dry run is running in the background. It will take a while ÔÇö Snowflake fetch (~10s), data transformations (~6 min), GP lookup (~5 min with new batch sizes), pathway processing (~1 min). Let me check on it periodically.
Data transformations are running. Let me wait for them to complete and check the GP lookup phase.
The first batch completed successfully: **Batch 1: 54,300 rows in 48.72s**. The GP lookup is now working with the 5000-patient batches and 600s network timeout. Batch 2 is running. 8 batches total.
Let me wait for the full pipeline to complete.
The dry run completed successfully! Let me read the full output to get all the key metrics.
Let me also see the tiebreaker and top indications stats.
Excellent. Here's the full picture of the dry run results:
**GP Lookup Results:**
- 36,628 patients queried  33,642 with GP match (91.8%)
- 8 batches of 5000 patients, ~40-48s each
- 537,794 total patient-indication matches (avg 16 per patient ÔÇö includes non-drug-related like sepsis, influenza)
- Top GP indications: sepsis (32K), drug misuse (31K), influenza (28K)
**Drug-Aware Matching Results:**
- 50,797 UPID-Drug pairs processed
- **25,059 matched (49.3%)** ÔÇö drug has a DimSearchTerm mapping AND patient has GP dx for that condition
- **25,738 fallback (50.7%)** ÔÇö no match, falls back to directory
- **15,238 tiebreaker used** ÔÇö drug matched multiple indications, picked by highest code_frequency
- **42,072 unique modified UPIDs** (up from original ~37K unique patients)
- Top assigned indications: "Undefined (no GP dx)" (8,110), macular degeneration (5,256), diabetes (3,841), "OPHTHALMOLOGY (no GP dx)" (3,040), rheumatoid arthritis (2,216)
**Pathway Node Counts:**
| Date Filter | Nodes |
|---|---|
| all_6mo | 438 |
| all_12mo | 484 |
| 1yr_6mo | 181 |
| 1yr_12mo | 199 |
| 2yr_6mo | 257 |
| 2yr_12mo | 287 |
| **Total** | **1,846** |
This is comparable to the old approach (~300 per date filter for the wider filters). The 49.3% match rate seems reasonable ÔÇö drugs without a DimSearchTerm mapping (or where the patient has no GP coding for the drug's indication) fall back to directory labels.
The dry run is a success. Let me now mark Task 3.2 as complete, commit the changes, and update progress.
Let me update the IMPLEMENTATION_PLAN.md to mark Task 3.2 complete.
Now update progress.txt with the iteration log.
There are 4 occurrences of "### Blocked items:\n- None" in the file. I need to be more specific. Let me append to the end of the file instead.
Now let me add a guardrail for the timeout issue since it's a failure pattern future iterations should know about.
Now let me commit all the changes.
There are many changed files from prior uncommitted work (DESIGN_SYSTEM.md, RALPH_PROMPT.md, etc.). I should only commit the files I changed for Task 3.2. Let me stage just the relevant files.
Now update progress.txt with the commit hash.
Task 3.2 is complete. Let me verify the final state.
## Summary ÔÇö Iteration 6 Complete
**Task 3.2: Test with dry run** ÔÇö COMPLETE
### Key findings and fixes:
1. **Root cause**: GP lookup queries timing out at 30s due to `connection_timeout=30` in snowflake.toml (controls Python client `network_timeout`, not server-side timeout)
2. **Fix 1**: Increased `connection_timeout` from 30  600 seconds
3. **Fix 2**: Increased GP lookup batch_size from 500  5000 (query time is ~40s regardless of batch size  bottleneck is CTE compilation, not data volume)
4. **Dry run successful**:
- 91.8% GP match rate
- 49.3% drug-indication match rate, 50.7% fallback to directory
- 15,238 tiebreaker decisions made
- 42,072 unique modified UPIDs
- 1,846 total pathway nodes across 6 date filters
### Next: Task 4.1 (Full refresh with both chart types)
## Summary ÔÇö Iteration 6 Complete
**Task 3.2: Test with dry run** ÔÇö COMPLETE
### Key findings and fixes:
1. **Root cause**: GP lookup queries timing out at 30s due to `connection_timeout=30` in snowflake.toml (controls Python client `network_timeout`, not server-side timeout)
2. **Fix 1**: Increased `connection_timeout` from 30  600 seconds
3. **Fix 2**: Increased GP lookup batch_size from 500  5000 (query time is ~40s regardless of batch size  bottleneck is CTE compilation, not data volume)
4. **Dry run successful**:
- 91.8% GP match rate
- 49.3% drug-indication match rate, 50.7% fallback to directory
- 15,238 tiebreaker decisions made
- 42,072 unique modified UPIDs
- 1,846 total pathway nodes across 6 date filters
### Next: Task 4.1 (Full refresh with both chart types)
File diff suppressed because one or more lines are too long
+132
View File
@@ -0,0 +1,132 @@
I'll start by reading the required files in order to understand the current state of the project.
Good. I've read progress.txt, IMPLEMENTATION_PLAN.md, and guardrails.md. Now let me check recent git history.
Now I have the full picture. Let me assess the state:
**Completed**: Phase 1 (1.1, 1.2, 1.3), Phase 2 (2.1, 2.2), Phase 3 (3.1, 3.2)
**Remaining**: Phase 4 ÔÇö Tasks 4.1, 4.2, 4.3
The previous iteration (6) recommended working on **Task 4.1: Full refresh with both chart types**. This requires running `python -m cli.refresh_pathways --chart-type all` (a live Snowflake refresh that takes ~15 minutes).
**Why Task 4.1 next**: It's the next logical step ÔÇö dry run passed, now we do the actual insert. Tasks 4.2 and 4.3 depend on 4.1 completing (they validate the results).
Let me mark Task 4.1 as in-progress in the implementation plan, then run the full refresh.
Running the full refresh now. This will fetch from Snowflake, transform data, run GP lookups, and insert both directory and indication pathway nodes into SQLite. Expected time: ~15 minutes.
The refresh is running in the background. Let me check the output so far.
The refresh is progressing well. Directory charts completed (1,101 nodes across 6 filters), and now indication charts are being processed. GP lookup completed successfully (91.8% match rate, 42,072 modified UPIDs). Indication chart processing is underway ÔÇö I can see all_6mo (438 nodes) and all_12mo starting. Let me wait for it to finish.
Full refresh completed successfully. Let me summarize the results:
**Full Refresh Results (Task 4.1):**
- **Total time**: 738.4 seconds (~12 minutes)
- **Total nodes inserted**: 2,947 (cleared 3,633 old nodes first)
- **Directory charts**: 1,101 nodes across 6 date filters
- **Indication charts**: 1,846 nodes across 6 date filters
- **GP lookup**: 36,628 patients, 33,642 matched (91.8%), 8 batches in ~30s total
- **Drug-indication matching**: 50,797 UPID-Drug pairs  25,059 matched (49.3%), 15,238 tiebreakers, 25,738 fallback
- **Modified UPIDs**: 42,072 (up from 36,628 original patients)
Both chart types generated data successfully. Let me update the todo list and proceed to Task 4.2 (validate indication chart correctness).
Now validating the indication chart data in SQLite. I'll run several queries to verify correctness ÔÇö checking drug groupings, separate pathways for different indications, and fallback behavior.
I need you to validate the data in a SQLite database at `C:\Users\charlwoodand\Ralph local\Tasks\UI Redesign\data\pathways.db`.
Run these validation queries using Bash with `python -c "..."` or `sqlite3` to check the pathway_nodes table. The working directory is `C:\Users\charlwoodand\Ralph local\Tasks\UI Redesign`.
**Context**: This is a pre-computed pathway hierarchy for NHS patient treatment data. There are two chart types: "directory" and "indication". We just ran a full refresh and need to validate the indication charts specifically.
The `ids` column contains a hierarchy like: `Trust - Indication - Drug - Pathway`, separated by " - ".
For indication charts, level 2 = indication/search_term (e.g., "rheumatoid arthritis", "asthma").
Modified UPIDs embed the indication: `{UPID}|{search_term}`.
**Run these validation queries** (each as a separate `sqlite3` command or python script):
1. **Chart type counts**: Count nodes per chart_type to confirm both exist:
```sql
SELECT chart_type, COUNT(*) FROM pathway_nodes GROUP BY chart_type;
```
2. **Indication node counts by date filter**: For indication charts, count nodes per date_filter_id:
```sql
SELECT date_filter_id, COUNT(*) FROM pathway_nodes WHERE chart_type='indication' GROUP BY date_filter_id;
```
3. **Level distribution for indication charts**: Check hierarchy levels are correct (0=Root, 1=Trust, 2=Indication, 3=Drug, 4+=Pathway):
```sql
SELECT level, COUNT(*) FROM pathway_nodes WHERE chart_type='indication' GROUP BY level ORDER BY level;
```
4. **Top indications by patient count** (level 2 = indication): Show the labels and patient counts for the biggest indication groups (default date filter 'all_6mo'):
```sql
SELECT labels, value FROM pathway_nodes WHERE chart_type='indication' AND date_filter_id='all_6mo' AND level=2 ORDER BY CAST(value AS INTEGER) DESC LIMIT 15;
```
5. **Drugs under "rheumatoid arthritis"**: Check that drugs under RA are RA drugs. For date_filter 'all_6mo', find level 3 nodes whose parent contains "rheumatoid arthritis":
```sql
SELECT labels, value FROM pathway_nodes WHERE chart_type='indication' AND date_filter_id='all_6mo' AND level=3 AND ids LIKE '%rheumatoid arthritis%' ORDER BY CAST(value AS INTEGER) DESC LIMIT 10;
```
6. **Drugs under "asthma"**: Similarly check asthma drugs:
```sql
SELECT labels, value FROM pathway_nodes WHERE chart_type='indication' AND date_filter_id='all_6mo' AND level=3 AND ids LIKE '%asthma%' ORDER BY CAST(value AS INTEGER) DESC LIMIT 10;
```
7. **Fallback nodes** (no GP dx): Count fallback indication labels:
```sql
SELECT labels, value FROM pathway_nodes WHERE chart_type='indication' AND date_filter_id='all_6mo' AND level=2 AND labels LIKE '%(no GP dx)%' ORDER BY CAST(value AS INTEGER) DESC LIMIT 10;
```
8. **Directory charts unchanged**: Verify directory chart node count is reasonable and unaffected:
```sql
SELECT date_filter_id, COUNT(*) FROM pathway_nodes WHERE chart_type='directory' GROUP BY date_filter_id;
```
Run all 8 queries and report the results. I need to confirm:
- Both chart types have data
- Indication chart has correct hierarchy levels
- RA drugs under RA indication look correct (should include ADALIMUMAB, RITUXIMAB, etc.)
- Asthma drugs under asthma look correct (should include OMALIZUMAB, MEPOLIZUMAB, etc.)
- Fallback nodes exist for unmatched drugs
- Directory charts are unchanged
All 8 validation queries passed. The indication chart data looks correct:
- RA drugs (ADALIMUMAB, RITUXIMAB, BARICITINIB, etc.) correctly grouped under "rheumatoid arthritis"
- Asthma drugs (DUPILUMAB, OMALIZUMAB) correctly grouped under "asthma"
- Fallback nodes properly labeled (e.g., "RHEUMATOLOGY (no GP dx)")
- Directory charts unchanged
Now let me validate the Reflex UI compilation (Task 4.3).
Reflex compiles successfully. Now let me mark all the Phase 4 tasks as complete in the implementation plan and update progress.txt.
Also mark the last Task 1.1 subtask as verified:
Now update progress.txt with this iteration's results.
Need more context to uniquely identify the last occurrence. Let me target it specifically.
Now append the new iteration entry at the end of the file.
Now let me commit the changes.
I see there are many changes beyond just my iteration's work (DESIGN_SYSTEM.md, RALPH_PROMPT.md, ralph.ps1, uv.lock, etc. from previous uncommitted changes). I should only commit the files relevant to this iteration's task: IMPLEMENTATION_PLAN.md and progress.txt. The other changes are pre-existing and not part of this task.
Now let me verify all tasks are marked complete in IMPLEMENTATION_PLAN.md.
No incomplete tasks remain. All tasks are `[x]`. Let me do the final completion check ÔÇö verify all completion criteria are satisfied.
Wait, that output is confusing ÔÇö let me re-check.
All 47 items marked complete, zero incomplete. All completion criteria are satisfied:
- App compiles without errors (reflex compile succeeded in 16.6s)
- Both chart types generate pathway data (directory: 1,101, indication: 1,846)
- Indication charts show drug-specific indication matching (49.3% match rate)
- Drugs under same indication grouped together (validated via SQLite queries)
- Drugs under different indications create separate pathways (42,072 modified UPIDs > 36,628 patients)
- Fallback works for unmatched drugs (labeled with directorate "(no GP dx)")
- Full refresh completes successfully (2,947 records in 738.4s)
- Existing directory charts unaffected (1,101 nodes, same distribution)
<promise>COMPLETE</promise>
All 47 items marked complete, zero incomplete. All completion criteria are satisfied:
- App compiles without errors (reflex compile succeeded in 16.6s)
- Both chart types generate pathway data (directory: 1,101, indication: 1,846)
- Indication charts show drug-specific indication matching (49.3% match rate)
- Drugs under same indication grouped together (validated via SQLite queries)
- Drugs under different indications create separate pathways (42,072 modified UPIDs > 36,628 patients)
- Fallback works for unmatched drugs (labeled with directorate "(no GP dx)")
- Full refresh completes successfully (2,947 records in 738.4s)
- Existing directory charts unaffected (1,101 nodes, same distribution)
<promise>COMPLETE</promise>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+231
View File
@@ -0,0 +1,231 @@
Search_Term,PrimaryDirectorate,AllDirectorates
acute coronary syndrome,CARDIOLOGY,CARDIOLOGY
acute coronary syndromes,CARDIOLOGY,CARDIOLOGY
acute lymphoblastic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
acute myeloid leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
acute promyelocytic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
advanced breast cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
allergic asthma,THORACIC MEDICINE,THORACIC MEDICINE|CLINICAL IMMUNOLOGY
allergic rhinitis,ENT,ENT|CLINICAL IMMUNOLOGY
alzheimer's disease,NEUROLOGY,NEUROLOGY|GERIATRIC MEDICINE|MENTAL HEALTH
amyloidosis,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|CARDIOLOGY|NEPHROLOGY
anaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|GENERAL MEDICINE
anaplastic large cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
angioedema,CLINICAL IMMUNOLOGY,CLINICAL IMMUNOLOGY|ACCIDENT & EMERGENCY
ankylosing spondylitis,RHEUMATOLOGY,RHEUMATOLOGY
apixaban,CARDIOLOGY,CARDIOLOGY|CLINICAL HAEMATOLOGY
aplastic anaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
arthritis,RHEUMATOLOGY,RHEUMATOLOGY
asthma,THORACIC MEDICINE,THORACIC MEDICINE|PAEDIATRICS
atopic dermatitis,DERMATOLOGY,DERMATOLOGY|PAEDIATRICS|CLINICAL IMMUNOLOGY
atrial fibrillation,CARDIOLOGY,CARDIOLOGY
attention deficit hyperactivity disorder,MENTAL HEALTH,MENTAL HEALTH|PAEDIATRICS
attention-deficit hyperactivity disorder,MENTAL HEALTH,MENTAL HEALTH|PAEDIATRICS
axial spondyloarthritis,RHEUMATOLOGY,RHEUMATOLOGY
basal cell carcinoma,DERMATOLOGY,DERMATOLOGY|PLASTIC SURGERY|MEDICAL ONCOLOGY
beta-thalassaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
biliary cholangitis,GASTROENTEROLOGY,GASTROENTEROLOGY
bipolar disorder,MENTAL HEALTH,MENTAL HEALTH
bladder,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
braf,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|CLINICAL ONCOLOGY
brca,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|BREAST SURGERY
breast cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
cardiomyopathy,CARDIOLOGY,CARDIOLOGY
cardiovascular disease,CARDIOLOGY,CARDIOLOGY|VASCULAR SURGERY
cervical cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
cholangiocarcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GASTROENTEROLOGY|CLINICAL ONCOLOGY
choroidal neovascularisation,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
chronic hepatitis b,GASTROENTEROLOGY,GASTROENTEROLOGY|INFECTIOUS DISEASES
chronic kidney disease,NEPHROLOGY,NEPHROLOGY
chronic liver disease,GASTROENTEROLOGY,GASTROENTEROLOGY
chronic lymphocytic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
chronic myeloid leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
chronic obstructive pulmonary disease,THORACIC MEDICINE,THORACIC MEDICINE
colon cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
colorectal cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
constipation,GASTROENTEROLOGY,GASTROENTEROLOGY|GENERAL MEDICINE
coronary syndrome,CARDIOLOGY,CARDIOLOGY
covid,INFECTIOUS DISEASES,INFECTIOUS DISEASES|THORACIC MEDICINE
covid-19,INFECTIOUS DISEASES,INFECTIOUS DISEASES|THORACIC MEDICINE
crohn's disease,GASTROENTEROLOGY,GASTROENTEROLOGY|PAEDIATRIC GASTROENTEROLOGY|COLORECTAL SURGERY
cutaneous t-cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|DERMATOLOGY
cystic fibrosis,THORACIC MEDICINE,THORACIC MEDICINE|PAEDIATRICS|GASTROENTEROLOGY
cytomegalovirus,INFECTIOUS DISEASES,INFECTIOUS DISEASES|TRANSPLANTATION SURGERY
deep vein thrombosis,VASCULAR SURGERY,VASCULAR SURGERY|CLINICAL HAEMATOLOGY
depression,MENTAL HEALTH,MENTAL HEALTH
depressive episode,MENTAL HEALTH,MENTAL HEALTH
diabetes,DIABETIC MEDICINE,DIABETIC MEDICINE|ENDOCRINOLOGY
diabetic macular,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
diabetic macular oedema,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
diabetic retinopathy,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY|DIABETIC MEDICINE
diffuse large b-cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
dravet syndrome,NEUROLOGY,NEUROLOGY|PAEDIATRICS
drug misuse,MENTAL HEALTH,MENTAL HEALTH|ADDICTION MEDICINE
dry eye,OPHTHALMOLOGY,OPHTHALMOLOGY
dupuytren's contracture,TRAUMA & ORTHOPAEDICS,TRAUMA & ORTHOPAEDICS|PLASTIC SURGERY
dyslipidaemia,CARDIOLOGY,CARDIOLOGY|ENDOCRINOLOGY
dyspepsia,GASTROENTEROLOGY,GASTROENTEROLOGY|GENERAL MEDICINE
eczema,DERMATOLOGY,DERMATOLOGY|PAEDIATRICS
endometrial cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
epilepsy,NEUROLOGY,NEUROLOGY|PAEDIATRICS
fallopian tube,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
fibroids,GYNAECOLOGY,GYNAECOLOGY
follicular lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
fragility fracture,RHEUMATOLOGY,RHEUMATOLOGY|TRAUMA & ORTHOPAEDICS|GERIATRIC MEDICINE
gastric cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
gastro-oesophageal,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
gastro-oesophageal junction,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
gastrointestinal stromal tumour,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
gastrointestinal stromal tumours,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
giant cell arteritis,RHEUMATOLOGY,RHEUMATOLOGY
glioma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|NEUROSURGERY|CLINICAL ONCOLOGY
gout,RHEUMATOLOGY,RHEUMATOLOGY
graft versus host disease,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|TRANSPLANTATION SURGERY
granulomatosis with polyangiitis,RHEUMATOLOGY,RHEUMATOLOGY|THORACIC MEDICINE|NEPHROLOGY
growth failure,ENDOCRINOLOGY,ENDOCRINOLOGY|PAEDIATRICS
growth hormone deficiency,ENDOCRINOLOGY,ENDOCRINOLOGY|PAEDIATRICS
haemoglobinuria,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
hand eczema,DERMATOLOGY,DERMATOLOGY
head and neck,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|ENT|CLINICAL ONCOLOGY
heart failure,CARDIOLOGY,CARDIOLOGY
hepatic encephalopathy,GASTROENTEROLOGY,GASTROENTEROLOGY
hepatitis b,GASTROENTEROLOGY,GASTROENTEROLOGY|INFECTIOUS DISEASES
hepatitis c,GASTROENTEROLOGY,GASTROENTEROLOGY|INFECTIOUS DISEASES
hepatocellular carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GASTROENTEROLOGY|CLINICAL ONCOLOGY
her2,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
her2-positive,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
hereditary angioedema,CLINICAL IMMUNOLOGY,CLINICAL IMMUNOLOGY
hidradenitis suppurativa,DERMATOLOGY,DERMATOLOGY
hiv,INFECTIOUS DISEASES,INFECTIOUS DISEASES
hodgkin lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
hormone receptor,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
hypercholesterolaemia,CARDIOLOGY,CARDIOLOGY|ENDOCRINOLOGY|CHEMICAL PATHOLOGY
hyperparathyroidism,ENDOCRINOLOGY,ENDOCRINOLOGY
hyperuricaemia,RHEUMATOLOGY,RHEUMATOLOGY
immune thrombocytopenia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
influenza,INFECTIOUS DISEASES,INFECTIOUS DISEASES|GENERAL MEDICINE
insomnia,NEUROLOGY,NEUROLOGY|MENTAL HEALTH
interstitial lung disease,THORACIC MEDICINE,THORACIC MEDICINE
irritable bowel syndrome,GASTROENTEROLOGY,GASTROENTEROLOGY
ischaemic stroke,STROKE MEDICINE,STROKE MEDICINE|NEUROLOGY
juvenile idiopathic arthritis,RHEUMATOLOGY,RHEUMATOLOGY|PAEDIATRICS
keratitis,OPHTHALMOLOGY,OPHTHALMOLOGY
kidney disease,NEPHROLOGY,NEPHROLOGY
kidney transplant,NEPHROLOGY,NEPHROLOGY|TRANSPLANTATION SURGERY
large b-cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
limbal stem cell deficiency,OPHTHALMOLOGY,OPHTHALMOLOGY
liver disease,GASTROENTEROLOGY,GASTROENTEROLOGY
lung cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
lymphoblastic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
lymphocytic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
macular degeneration,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
macular oedema,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
major depressive episodes,MENTAL HEALTH,MENTAL HEALTH
malignant melanoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
malignant pleural mesothelioma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
manic episode,MENTAL HEALTH,MENTAL HEALTH
mantle cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
mastocytosis,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|CLINICAL IMMUNOLOGY
melanoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
merkel cell,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
merkel cell carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
mesothelioma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
metastatic colorectal cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
migraine,NEUROLOGY,NEUROLOGY
motor neurone disease,NEUROLOGY,NEUROLOGY|REHABILITATION|PALLIATIVE CARE
multiple myeloma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
multiple sclerosis,NEUROLOGY,NEUROLOGY|REHABILITATION
myelodysplastic,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
myelodysplastic syndromes,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
myelofibrosis,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
myeloid leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
myocardial infarction,CARDIOLOGY,CARDIOLOGY
myotonia,NEUROLOGY,NEUROLOGY
narcolepsy,NEUROLOGY,NEUROLOGY
nasal polyps,ENT,ENT|THORACIC MEDICINE|CLINICAL IMMUNOLOGY
neuroblastoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|PAEDIATRICS|CLINICAL ONCOLOGY
neuroendocrine tumour,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
non-small cell lung cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
non-small-cell lung cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
obesity,ENDOCRINOLOGY,ENDOCRINOLOGY|DIABETIC MEDICINE|GENERAL MEDICINE
oesophageal cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
osteoarthritis,RHEUMATOLOGY,RHEUMATOLOGY|TRAUMA & ORTHOPAEDICS|GERIATRIC MEDICINE
osteoporosis,RHEUMATOLOGY,RHEUMATOLOGY|ENDOCRINOLOGY|GERIATRIC MEDICINE
osteosarcoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|TRAUMA & ORTHOPAEDICS|CLINICAL ONCOLOGY
ovarian cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
overweight,ENDOCRINOLOGY,ENDOCRINOLOGY|DIABETIC MEDICINE
pancreatic cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
pancreatic neuroendocrine,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
paroxysmal nocturnal haemoglobinuria,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
peanut allergy,CLINICAL IMMUNOLOGY,CLINICAL IMMUNOLOGY|PAEDIATRICS
perianal fistula,GASTROENTEROLOGY,GASTROENTEROLOGY|COLORECTAL SURGERY
peripheral arterial disease,VASCULAR SURGERY,VASCULAR SURGERY|CARDIOLOGY
plaque psoriasis,DERMATOLOGY,DERMATOLOGY
polycystic kidney,NEPHROLOGY,NEPHROLOGY
polycystic kidney disease,NEPHROLOGY,NEPHROLOGY
polycythaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
polycythaemia vera,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
pouchitis,GASTROENTEROLOGY,GASTROENTEROLOGY|COLORECTAL SURGERY
pregnancy,OBSTETRICS,OBSTETRICS
primary biliary cholangitis,GASTROENTEROLOGY,GASTROENTEROLOGY
primary hypercholesterolaemia,CARDIOLOGY,CARDIOLOGY|ENDOCRINOLOGY|CHEMICAL PATHOLOGY
promyelocytic leukaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
prostate cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
psoriasis,DERMATOLOGY,DERMATOLOGY
psoriatic arthritis,RHEUMATOLOGY,RHEUMATOLOGY|DERMATOLOGY
pulmonary embolism,THORACIC MEDICINE,THORACIC MEDICINE|CARDIOLOGY|CLINICAL HAEMATOLOGY
pulmonary fibrosis,THORACIC MEDICINE,THORACIC MEDICINE
relapsing multiple sclerosis,NEUROLOGY,NEUROLOGY|REHABILITATION
renal cell,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
renal cell carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
renal transplantation,NEPHROLOGY,NEPHROLOGY|TRANSPLANTATION SURGERY
retinal vein occlusion,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
rheumatoid arthritis,RHEUMATOLOGY,RHEUMATOLOGY|CLINICAL IMMUNOLOGY|GERIATRIC MEDICINE
rhinosinusitis with nasal polyps,ENT,ENT|THORACIC MEDICINE|CLINICAL IMMUNOLOGY
rivaroxaban,CARDIOLOGY,CARDIOLOGY|CLINICAL HAEMATOLOGY
schizophrenia,MENTAL HEALTH,MENTAL HEALTH
seizures,NEUROLOGY,NEUROLOGY|PAEDIATRICS
sepsis,INFECTIOUS DISEASES,INFECTIOUS DISEASES|CRITICAL CARE MEDICINE
severe persistent allergic asthma,THORACIC MEDICINE,THORACIC MEDICINE|CLINICAL IMMUNOLOGY
short bowel syndrome,GASTROENTEROLOGY,GASTROENTEROLOGY|COLORECTAL SURGERY
sickle cell,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
sickle cell disease,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
sleep apnoea,THORACIC MEDICINE,THORACIC MEDICINE|ENT
smoking cessation,THORACIC MEDICINE,THORACIC MEDICINE|GENERAL MEDICINE
soft tissue sarcoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|CLINICAL ONCOLOGY
spinal muscular atrophy,NEUROLOGY,NEUROLOGY|PAEDIATRICS
splenomegaly,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|GASTROENTEROLOGY
spondyloarthritis,RHEUMATOLOGY,RHEUMATOLOGY
squamous cell,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|ENT|CLINICAL ONCOLOGY
squamous cell carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|DERMATOLOGY|ENT|CLINICAL ONCOLOGY
stem cell transplant,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|TRANSPLANTATION SURGERY
stroke,STROKE MEDICINE,STROKE MEDICINE|NEUROLOGY
systemic lupus erythematosus,RHEUMATOLOGY,RHEUMATOLOGY|CLINICAL IMMUNOLOGY|NEPHROLOGY
systemic mastocytosis,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|CLINICAL IMMUNOLOGY
t-cell lymphoma,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
thalassaemia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|PAEDIATRICS
thrombocytopenia,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
thrombocytopenic purpura,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
thromboembolism,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|CARDIOLOGY
thrombotic thrombocytopenic purpura,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY
thyroid cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
tophaceous gout,RHEUMATOLOGY,RHEUMATOLOGY
transitional cell carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
transthyretin amyloidosis,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|CARDIOLOGY|NEUROLOGY
triple-negative,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
tuberous sclerosis,NEUROLOGY,NEUROLOGY|PAEDIATRICS
type 1 diabetes,DIABETIC MEDICINE,DIABETIC MEDICINE|ENDOCRINOLOGY|PAEDIATRICS
type 2 diabetes,DIABETIC MEDICINE,DIABETIC MEDICINE|ENDOCRINOLOGY
ulcerative colitis,GASTROENTEROLOGY,GASTROENTEROLOGY|COLORECTAL SURGERY
urothelial,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
urothelial cancer,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
urothelial carcinoma,MEDICAL ONCOLOGY,MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
urticaria,DERMATOLOGY,DERMATOLOGY|CLINICAL IMMUNOLOGY
uterine fibroids,GYNAECOLOGY,GYNAECOLOGY
uveitis,OPHTHALMOLOGY,OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY|RHEUMATOLOGY
vascular disease,VASCULAR SURGERY,VASCULAR SURGERY|CARDIOLOGY
vasculitis,RHEUMATOLOGY,RHEUMATOLOGY|CLINICAL IMMUNOLOGY
venom allergy,CLINICAL IMMUNOLOGY,CLINICAL IMMUNOLOGY
venous thromboembolism,CLINICAL HAEMATOLOGY,CLINICAL HAEMATOLOGY|VASCULAR SURGERY
1 Search_Term PrimaryDirectorate AllDirectorates
2 acute coronary syndrome CARDIOLOGY CARDIOLOGY
3 acute coronary syndromes CARDIOLOGY CARDIOLOGY
4 acute lymphoblastic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
5 acute myeloid leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
6 acute promyelocytic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
7 advanced breast cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
8 allergic asthma THORACIC MEDICINE THORACIC MEDICINE|CLINICAL IMMUNOLOGY
9 allergic rhinitis ENT ENT|CLINICAL IMMUNOLOGY
10 alzheimer's disease NEUROLOGY NEUROLOGY|GERIATRIC MEDICINE|MENTAL HEALTH
11 amyloidosis CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|CARDIOLOGY|NEPHROLOGY
12 anaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|GENERAL MEDICINE
13 anaplastic large cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
14 angioedema CLINICAL IMMUNOLOGY CLINICAL IMMUNOLOGY|ACCIDENT & EMERGENCY
15 ankylosing spondylitis RHEUMATOLOGY RHEUMATOLOGY
16 apixaban CARDIOLOGY CARDIOLOGY|CLINICAL HAEMATOLOGY
17 aplastic anaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
18 arthritis RHEUMATOLOGY RHEUMATOLOGY
19 asthma THORACIC MEDICINE THORACIC MEDICINE|PAEDIATRICS
20 atopic dermatitis DERMATOLOGY DERMATOLOGY|PAEDIATRICS|CLINICAL IMMUNOLOGY
21 atrial fibrillation CARDIOLOGY CARDIOLOGY
22 attention deficit hyperactivity disorder MENTAL HEALTH MENTAL HEALTH|PAEDIATRICS
23 attention-deficit hyperactivity disorder MENTAL HEALTH MENTAL HEALTH|PAEDIATRICS
24 axial spondyloarthritis RHEUMATOLOGY RHEUMATOLOGY
25 basal cell carcinoma DERMATOLOGY DERMATOLOGY|PLASTIC SURGERY|MEDICAL ONCOLOGY
26 beta-thalassaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
27 biliary cholangitis GASTROENTEROLOGY GASTROENTEROLOGY
28 bipolar disorder MENTAL HEALTH MENTAL HEALTH
29 bladder MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
30 braf MEDICAL ONCOLOGY MEDICAL ONCOLOGY|CLINICAL ONCOLOGY
31 brca MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|BREAST SURGERY
32 breast cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
33 cardiomyopathy CARDIOLOGY CARDIOLOGY
34 cardiovascular disease CARDIOLOGY CARDIOLOGY|VASCULAR SURGERY
35 cervical cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
36 cholangiocarcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GASTROENTEROLOGY|CLINICAL ONCOLOGY
37 choroidal neovascularisation OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
38 chronic hepatitis b GASTROENTEROLOGY GASTROENTEROLOGY|INFECTIOUS DISEASES
39 chronic kidney disease NEPHROLOGY NEPHROLOGY
40 chronic liver disease GASTROENTEROLOGY GASTROENTEROLOGY
41 chronic lymphocytic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
42 chronic myeloid leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
43 chronic obstructive pulmonary disease THORACIC MEDICINE THORACIC MEDICINE
44 colon cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
45 colorectal cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
46 constipation GASTROENTEROLOGY GASTROENTEROLOGY|GENERAL MEDICINE
47 coronary syndrome CARDIOLOGY CARDIOLOGY
48 covid INFECTIOUS DISEASES INFECTIOUS DISEASES|THORACIC MEDICINE
49 covid-19 INFECTIOUS DISEASES INFECTIOUS DISEASES|THORACIC MEDICINE
50 crohn's disease GASTROENTEROLOGY GASTROENTEROLOGY|PAEDIATRIC GASTROENTEROLOGY|COLORECTAL SURGERY
51 cutaneous t-cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|DERMATOLOGY
52 cystic fibrosis THORACIC MEDICINE THORACIC MEDICINE|PAEDIATRICS|GASTROENTEROLOGY
53 cytomegalovirus INFECTIOUS DISEASES INFECTIOUS DISEASES|TRANSPLANTATION SURGERY
54 deep vein thrombosis VASCULAR SURGERY VASCULAR SURGERY|CLINICAL HAEMATOLOGY
55 depression MENTAL HEALTH MENTAL HEALTH
56 depressive episode MENTAL HEALTH MENTAL HEALTH
57 diabetes DIABETIC MEDICINE DIABETIC MEDICINE|ENDOCRINOLOGY
58 diabetic macular OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
59 diabetic macular oedema OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
60 diabetic retinopathy OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY|DIABETIC MEDICINE
61 diffuse large b-cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
62 dravet syndrome NEUROLOGY NEUROLOGY|PAEDIATRICS
63 drug misuse MENTAL HEALTH MENTAL HEALTH|ADDICTION MEDICINE
64 dry eye OPHTHALMOLOGY OPHTHALMOLOGY
65 dupuytren's contracture TRAUMA & ORTHOPAEDICS TRAUMA & ORTHOPAEDICS|PLASTIC SURGERY
66 dyslipidaemia CARDIOLOGY CARDIOLOGY|ENDOCRINOLOGY
67 dyspepsia GASTROENTEROLOGY GASTROENTEROLOGY|GENERAL MEDICINE
68 eczema DERMATOLOGY DERMATOLOGY|PAEDIATRICS
69 endometrial cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
70 epilepsy NEUROLOGY NEUROLOGY|PAEDIATRICS
71 fallopian tube MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
72 fibroids GYNAECOLOGY GYNAECOLOGY
73 follicular lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
74 fragility fracture RHEUMATOLOGY RHEUMATOLOGY|TRAUMA & ORTHOPAEDICS|GERIATRIC MEDICINE
75 gastric cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
76 gastro-oesophageal MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
77 gastro-oesophageal junction MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
78 gastrointestinal stromal tumour MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
79 gastrointestinal stromal tumours MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
80 giant cell arteritis RHEUMATOLOGY RHEUMATOLOGY
81 glioma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|NEUROSURGERY|CLINICAL ONCOLOGY
82 gout RHEUMATOLOGY RHEUMATOLOGY
83 graft versus host disease CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|TRANSPLANTATION SURGERY
84 granulomatosis with polyangiitis RHEUMATOLOGY RHEUMATOLOGY|THORACIC MEDICINE|NEPHROLOGY
85 growth failure ENDOCRINOLOGY ENDOCRINOLOGY|PAEDIATRICS
86 growth hormone deficiency ENDOCRINOLOGY ENDOCRINOLOGY|PAEDIATRICS
87 haemoglobinuria CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
88 hand eczema DERMATOLOGY DERMATOLOGY
89 head and neck MEDICAL ONCOLOGY MEDICAL ONCOLOGY|ENT|CLINICAL ONCOLOGY
90 heart failure CARDIOLOGY CARDIOLOGY
91 hepatic encephalopathy GASTROENTEROLOGY GASTROENTEROLOGY
92 hepatitis b GASTROENTEROLOGY GASTROENTEROLOGY|INFECTIOUS DISEASES
93 hepatitis c GASTROENTEROLOGY GASTROENTEROLOGY|INFECTIOUS DISEASES
94 hepatocellular carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GASTROENTEROLOGY|CLINICAL ONCOLOGY
95 her2 MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
96 her2-positive MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
97 hereditary angioedema CLINICAL IMMUNOLOGY CLINICAL IMMUNOLOGY
98 hidradenitis suppurativa DERMATOLOGY DERMATOLOGY
99 hiv INFECTIOUS DISEASES INFECTIOUS DISEASES
100 hodgkin lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
101 hormone receptor MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
102 hypercholesterolaemia CARDIOLOGY CARDIOLOGY|ENDOCRINOLOGY|CHEMICAL PATHOLOGY
103 hyperparathyroidism ENDOCRINOLOGY ENDOCRINOLOGY
104 hyperuricaemia RHEUMATOLOGY RHEUMATOLOGY
105 immune thrombocytopenia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
106 influenza INFECTIOUS DISEASES INFECTIOUS DISEASES|GENERAL MEDICINE
107 insomnia NEUROLOGY NEUROLOGY|MENTAL HEALTH
108 interstitial lung disease THORACIC MEDICINE THORACIC MEDICINE
109 irritable bowel syndrome GASTROENTEROLOGY GASTROENTEROLOGY
110 ischaemic stroke STROKE MEDICINE STROKE MEDICINE|NEUROLOGY
111 juvenile idiopathic arthritis RHEUMATOLOGY RHEUMATOLOGY|PAEDIATRICS
112 keratitis OPHTHALMOLOGY OPHTHALMOLOGY
113 kidney disease NEPHROLOGY NEPHROLOGY
114 kidney transplant NEPHROLOGY NEPHROLOGY|TRANSPLANTATION SURGERY
115 large b-cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
116 leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
117 limbal stem cell deficiency OPHTHALMOLOGY OPHTHALMOLOGY
118 liver disease GASTROENTEROLOGY GASTROENTEROLOGY
119 lung cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
120 lymphoblastic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
121 lymphocytic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
122 lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
123 macular degeneration OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
124 macular oedema OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
125 major depressive episodes MENTAL HEALTH MENTAL HEALTH
126 malignant melanoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
127 malignant pleural mesothelioma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
128 manic episode MENTAL HEALTH MENTAL HEALTH
129 mantle cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
130 mastocytosis CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|CLINICAL IMMUNOLOGY
131 melanoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
132 merkel cell MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
133 merkel cell carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|CLINICAL ONCOLOGY
134 mesothelioma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
135 metastatic colorectal cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|COLORECTAL SURGERY|CLINICAL ONCOLOGY
136 migraine NEUROLOGY NEUROLOGY
137 motor neurone disease NEUROLOGY NEUROLOGY|REHABILITATION|PALLIATIVE CARE
138 multiple myeloma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
139 multiple sclerosis NEUROLOGY NEUROLOGY|REHABILITATION
140 myelodysplastic CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
141 myelodysplastic syndromes CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
142 myelofibrosis CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
143 myeloid leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
144 myocardial infarction CARDIOLOGY CARDIOLOGY
145 myotonia NEUROLOGY NEUROLOGY
146 narcolepsy NEUROLOGY NEUROLOGY
147 nasal polyps ENT ENT|THORACIC MEDICINE|CLINICAL IMMUNOLOGY
148 neuroblastoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|PAEDIATRICS|CLINICAL ONCOLOGY
149 neuroendocrine tumour MEDICAL ONCOLOGY MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
150 non-small cell lung cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
151 non-small-cell lung cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|THORACIC MEDICINE|CLINICAL ONCOLOGY
152 obesity ENDOCRINOLOGY ENDOCRINOLOGY|DIABETIC MEDICINE|GENERAL MEDICINE
153 oesophageal cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
154 osteoarthritis RHEUMATOLOGY RHEUMATOLOGY|TRAUMA & ORTHOPAEDICS|GERIATRIC MEDICINE
155 osteoporosis RHEUMATOLOGY RHEUMATOLOGY|ENDOCRINOLOGY|GERIATRIC MEDICINE
156 osteosarcoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|TRAUMA & ORTHOPAEDICS|CLINICAL ONCOLOGY
157 ovarian cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|GYNAECOLOGICAL ONCOLOGY|CLINICAL ONCOLOGY
158 overweight ENDOCRINOLOGY ENDOCRINOLOGY|DIABETIC MEDICINE
159 pancreatic cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UPPER GASTROINTESTINAL SURGERY|CLINICAL ONCOLOGY
160 pancreatic neuroendocrine MEDICAL ONCOLOGY MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
161 paroxysmal nocturnal haemoglobinuria CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
162 peanut allergy CLINICAL IMMUNOLOGY CLINICAL IMMUNOLOGY|PAEDIATRICS
163 perianal fistula GASTROENTEROLOGY GASTROENTEROLOGY|COLORECTAL SURGERY
164 peripheral arterial disease VASCULAR SURGERY VASCULAR SURGERY|CARDIOLOGY
165 plaque psoriasis DERMATOLOGY DERMATOLOGY
166 polycystic kidney NEPHROLOGY NEPHROLOGY
167 polycystic kidney disease NEPHROLOGY NEPHROLOGY
168 polycythaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
169 polycythaemia vera CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
170 pouchitis GASTROENTEROLOGY GASTROENTEROLOGY|COLORECTAL SURGERY
171 pregnancy OBSTETRICS OBSTETRICS
172 primary biliary cholangitis GASTROENTEROLOGY GASTROENTEROLOGY
173 primary hypercholesterolaemia CARDIOLOGY CARDIOLOGY|ENDOCRINOLOGY|CHEMICAL PATHOLOGY
174 promyelocytic leukaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
175 prostate cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
176 psoriasis DERMATOLOGY DERMATOLOGY
177 psoriatic arthritis RHEUMATOLOGY RHEUMATOLOGY|DERMATOLOGY
178 pulmonary embolism THORACIC MEDICINE THORACIC MEDICINE|CARDIOLOGY|CLINICAL HAEMATOLOGY
179 pulmonary fibrosis THORACIC MEDICINE THORACIC MEDICINE
180 relapsing multiple sclerosis NEUROLOGY NEUROLOGY|REHABILITATION
181 renal cell MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
182 renal cell carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
183 renal transplantation NEPHROLOGY NEPHROLOGY|TRANSPLANTATION SURGERY
184 retinal vein occlusion OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY
185 rheumatoid arthritis RHEUMATOLOGY RHEUMATOLOGY|CLINICAL IMMUNOLOGY|GERIATRIC MEDICINE
186 rhinosinusitis with nasal polyps ENT ENT|THORACIC MEDICINE|CLINICAL IMMUNOLOGY
187 rivaroxaban CARDIOLOGY CARDIOLOGY|CLINICAL HAEMATOLOGY
188 schizophrenia MENTAL HEALTH MENTAL HEALTH
189 seizures NEUROLOGY NEUROLOGY|PAEDIATRICS
190 sepsis INFECTIOUS DISEASES INFECTIOUS DISEASES|CRITICAL CARE MEDICINE
191 severe persistent allergic asthma THORACIC MEDICINE THORACIC MEDICINE|CLINICAL IMMUNOLOGY
192 short bowel syndrome GASTROENTEROLOGY GASTROENTEROLOGY|COLORECTAL SURGERY
193 sickle cell CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
194 sickle cell disease CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
195 sleep apnoea THORACIC MEDICINE THORACIC MEDICINE|ENT
196 smoking cessation THORACIC MEDICINE THORACIC MEDICINE|GENERAL MEDICINE
197 soft tissue sarcoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|CLINICAL ONCOLOGY
198 spinal muscular atrophy NEUROLOGY NEUROLOGY|PAEDIATRICS
199 splenomegaly CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|GASTROENTEROLOGY
200 spondyloarthritis RHEUMATOLOGY RHEUMATOLOGY
201 squamous cell MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|ENT|CLINICAL ONCOLOGY
202 squamous cell carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|DERMATOLOGY|ENT|CLINICAL ONCOLOGY
203 stem cell transplant CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|TRANSPLANTATION SURGERY
204 stroke STROKE MEDICINE STROKE MEDICINE|NEUROLOGY
205 systemic lupus erythematosus RHEUMATOLOGY RHEUMATOLOGY|CLINICAL IMMUNOLOGY|NEPHROLOGY
206 systemic mastocytosis CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|CLINICAL IMMUNOLOGY
207 t-cell lymphoma CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|MEDICAL ONCOLOGY
208 thalassaemia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|PAEDIATRICS
209 thrombocytopenia CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
210 thrombocytopenic purpura CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
211 thromboembolism CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|CARDIOLOGY
212 thrombotic thrombocytopenic purpura CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY
213 thyroid cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|ENDOCRINOLOGY|CLINICAL ONCOLOGY
214 tophaceous gout RHEUMATOLOGY RHEUMATOLOGY
215 transitional cell carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
216 transthyretin amyloidosis CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|CARDIOLOGY|NEUROLOGY
217 triple-negative MEDICAL ONCOLOGY MEDICAL ONCOLOGY|BREAST SURGERY|CLINICAL ONCOLOGY
218 tuberous sclerosis NEUROLOGY NEUROLOGY|PAEDIATRICS
219 type 1 diabetes DIABETIC MEDICINE DIABETIC MEDICINE|ENDOCRINOLOGY|PAEDIATRICS
220 type 2 diabetes DIABETIC MEDICINE DIABETIC MEDICINE|ENDOCRINOLOGY
221 ulcerative colitis GASTROENTEROLOGY GASTROENTEROLOGY|COLORECTAL SURGERY
222 urothelial MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
223 urothelial cancer MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
224 urothelial carcinoma MEDICAL ONCOLOGY MEDICAL ONCOLOGY|UROLOGY|CLINICAL ONCOLOGY
225 urticaria DERMATOLOGY DERMATOLOGY|CLINICAL IMMUNOLOGY
226 uterine fibroids GYNAECOLOGY GYNAECOLOGY
227 uveitis OPHTHALMOLOGY OPHTHALMOLOGY|MEDICAL OPHTHALMOLOGY|RHEUMATOLOGY
228 vascular disease VASCULAR SURGERY VASCULAR SURGERY|CARDIOLOGY
229 vasculitis RHEUMATOLOGY RHEUMATOLOGY|CLINICAL IMMUNOLOGY
230 venom allergy CLINICAL IMMUNOLOGY CLINICAL IMMUNOLOGY
231 venous thromboembolism CLINICAL HAEMATOLOGY CLINICAL HAEMATOLOGY|VASCULAR SURGERY
File diff suppressed because it is too large Load Diff