Coverage for app \ knowledge_graph \ setup_neo4j.py: 0%

107 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-02-24 13:18 +0530

1from neo4j import GraphDatabase 

2import os 

3from datetime import datetime, timedelta 

4 

5NEO4J_URI = os.getenv("NEO4J_URI", "bolt://localhost:7687") 

6NEO4J_USER = os.getenv("NEO4J_USER", "neo4j") 

7NEO4J_PASSWORD = os.getenv("NEO4J_PASSWORD", "password") 

8 

9driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD)) 

10 

11print("=" * 60) 

12print("SETTING UP NEO4J MEDICAL KNOWLEDGE GRAPH - MULTI-PATIENT") 

13print("=" * 60) 

14 

15with driver.session() as session: 

16 # Clear existing data 

17 print("\n[1/6] Clearing existing data...") 

18 session.run("MATCH (n) DETACH DELETE n") 

19 print("✓ Database cleared") 

20 

21 # ============================================================ 

22 # PATIENT 1: John Doe - Type 2 Diabetes + Hypertension 

23 # ============================================================ 

24 print("\n[2/6] Creating Patient 1: John Doe (Type 2 Diabetes + Hypertension)...") 

25 

26 session.run(""" 

27 CREATE (p:Patient { 

28 id: "user_1", 

29 name: "John Doe", 

30 age: 52, 

31 gender: "Male", 

32 bloodType: "O+", 

33 created_at: datetime() 

34 }) 

35  

36 CREATE (d1:Disease { 

37 id: "d1_p1", 

38 name: "Type 2 Diabetes", 

39 category: "Endocrine", 

40 severity: "moderate", 

41 status: "active", 

42 diagnosisDate: date("2018-06-20"), 

43 icd10: "E11.9" 

44 }) 

45  

46 CREATE (d2:Disease { 

47 id: "d2_p1", 

48 name: "Hypertension", 

49 category: "Cardiovascular", 

50 severity: "moderate", 

51 status: "active", 

52 diagnosisDate: date("2019-03-15"), 

53 icd10: "I10" 

54 }) 

55  

56 CREATE (m1:Medication { 

57 id: "m1_p1", 

58 name: "Metformin", 

59 dosage: "1000mg", 

60 frequency: "twice daily", 

61 purpose: "Blood sugar control", 

62 generic: true, 

63 atcCode: "A10BA02" 

64 }) 

65  

66 CREATE (m2:Medication { 

67 id: "m2_p1", 

68 name: "Lisinopril", 

69 dosage: "10mg", 

70 frequency: "once daily", 

71 purpose: "Blood pressure control", 

72 generic: true, 

73 atcCode: "C09AA03" 

74 }) 

75  

76 CREATE (m3:Medication { 

77 id: "m3_p1", 

78 name: "Amlodipine", 

79 dosage: "5mg", 

80 frequency: "once daily", 

81 purpose: "Blood pressure control", 

82 generic: true, 

83 atcCode: "C08CA01" 

84 }) 

85  

86 CREATE (l1:LabTest { 

87 id: "l1_p1", 

88 name: "HbA1c", 

89 result: 7.2, 

90 unit: "%", 

91 normalRange: "< 5.7%", 

92 status: "slightly elevated", 

93 testDate: date("2025-01-10"), 

94 testCode: "2345-7" 

95 }) 

96  

97 CREATE (l2:LabTest { 

98 id: "l2_p1", 

99 name: "Fasting Glucose", 

100 result: 135, 

101 unit: "mg/dL", 

102 normalRange: "70-100 mg/dL", 

103 status: "elevated", 

104 testDate: date("2025-01-10"), 

105 testCode: "1558-6" 

106 }) 

107  

108 CREATE (l3:LabTest { 

109 id: "l3_p1", 

110 name: "Blood Pressure", 

111 result: "142/88", 

112 unit: "mmHg", 

113 normalRange: "< 120/80 mmHg", 

114 status: "stage 1 hypertension", 

115 testDate: date("2025-01-10"), 

116 testCode: "55284-4" 

117 }) 

118  

119 CREATE (l4:LabTest { 

120 id: "l4_p1", 

121 name: "Total Cholesterol", 

122 result: 210, 

123 unit: "mg/dL", 

124 normalRange: "< 200 mg/dL", 

125 status: "borderline high", 

126 testDate: date("2025-01-10"), 

127 testCode: "2093-3" 

128 }) 

129 """) 

130 

131 # Link Patient 1 data 

132 session.run(""" 

133 MATCH (p:Patient {id: "user_1"}),  

134 (d1:Disease {id: "d1_p1"}), (d2:Disease {id: "d2_p1"}), 

135 (m1:Medication {id: "m1_p1"}), (m2:Medication {id: "m2_p1"}), (m3:Medication {id: "m3_p1"}), 

136 (l1:LabTest {id: "l1_p1"}), (l2:LabTest {id: "l2_p1"}), (l3:LabTest {id: "l3_p1"}), (l4:LabTest {id: "l4_p1"}) 

137 CREATE (p)-[:HAS_DISEASE]->(d1) 

138 CREATE (p)-[:HAS_DISEASE]->(d2) 

139 CREATE (d1)-[:TREATED_BY]->(m1) 

140 CREATE (d2)-[:TREATED_BY]->(m2) 

141 CREATE (d2)-[:TREATED_BY]->(m3) 

142 CREATE (p)-[:PRESCRIBED]->(m1) 

143 CREATE (p)-[:PRESCRIBED]->(m2) 

144 CREATE (p)-[:PRESCRIBED]->(m3) 

145 CREATE (d1)-[:HAS_LAB_RESULT]->(l1) 

146 CREATE (d1)-[:HAS_LAB_RESULT]->(l2) 

147 CREATE (d2)-[:HAS_LAB_RESULT]->(l3) 

148 CREATE (d2)-[:HAS_LAB_RESULT]->(l4) 

149 """) 

150 

151 # Create wearable metrics and readings for Patient 1 

152 session.run(""" 

153 CREATE (wm1:WearableMetric { 

154 id: "wm1_p1", 

155 type: "blood_glucose", 

156 name: "Blood Glucose", 

157 unit: "mg/dL", 

158 normalRange: "70-100 (fasting)" 

159 }) 

160 CREATE (wm2:WearableMetric { 

161 id: "wm2_p1", 

162 type: "blood_pressure", 

163 name: "Blood Pressure", 

164 unit: "mmHg", 

165 normalRange: "< 120/80" 

166 }) 

167 CREATE (wm3:WearableMetric { 

168 id: "wm3_p1", 

169 type: "heart_rate", 

170 name: "Heart Rate", 

171 unit: "bpm", 

172 normalRange: "60-100" 

173 }) 

174 CREATE (wm4:WearableMetric { 

175 id: "wm4_p1", 

176 type: "steps", 

177 name: "Daily Steps", 

178 unit: "steps", 

179 normalRange: "> 8000" 

180 }) 

181 """) 

182 

183 session.run(""" 

184 MATCH (p:Patient {id: "user_1"}),  

185 (wm1:WearableMetric {id: "wm1_p1"}), (wm2:WearableMetric {id: "wm2_p1"}), 

186 (wm3:WearableMetric {id: "wm3_p1"}), (wm4:WearableMetric {id: "wm4_p1"}) 

187 CREATE (p)-[:HAS_METRIC]->(wm1) 

188 CREATE (p)-[:HAS_METRIC]->(wm2) 

189 CREATE (p)-[:HAS_METRIC]->(wm3) 

190 CREATE (p)-[:HAS_METRIC]->(wm4) 

191 """) 

192 

193 # Readings for Patient 1 

194 session.run(""" 

195 CREATE (r1:Reading {id: "r_bg_1_p1", value: 156, timestamp: datetime("2026-02-08T08:00:00Z")}) 

196 CREATE (r2:Reading {id: "r_bg_2_p1", value: 142, timestamp: datetime("2026-02-09T08:00:00Z")}) 

197 CREATE (r3:Reading {id: "r_bp_1_p1", value: "138/88", timestamp: datetime("2026-02-08T08:00:00Z")}) 

198 CREATE (r4:Reading {id: "r_bp_2_p1", value: "142/90", timestamp: datetime("2026-02-09T08:00:00Z")}) 

199 CREATE (r5:Reading {id: "r_hr_1_p1", value: 72, timestamp: datetime("2026-02-08T08:00:00Z")}) 

200 CREATE (r6:Reading {id: "r_hr_2_p1", value: 75, timestamp: datetime("2026-02-09T08:00:00Z")}) 

201 CREATE (r7:Reading {id: "r_steps_1_p1", value: 8234, timestamp: datetime("2026-02-08T23:59:00Z")}) 

202 CREATE (r8:Reading {id: "r_steps_2_p1", value: 6500, timestamp: datetime("2026-02-09T23:59:00Z")}) 

203 """) 

204 

205 session.run(""" 

206 MATCH (wm:WearableMetric {id: "wm1_p1"}), (r:Reading)  

207 WHERE r.id IN ["r_bg_1_p1", "r_bg_2_p1"] 

208 CREATE (wm)-[:RECORDED_AS]->(r) 

209 """) 

210 session.run(""" 

211 MATCH (wm:WearableMetric {id: "wm2_p1"}), (r:Reading)  

212 WHERE r.id IN ["r_bp_1_p1", "r_bp_2_p1"] 

213 CREATE (wm)-[:RECORDED_AS]->(r) 

214 """) 

215 session.run(""" 

216 MATCH (wm:WearableMetric {id: "wm3_p1"}), (r:Reading)  

217 WHERE r.id IN ["r_hr_1_p1", "r_hr_2_p1"] 

218 CREATE (wm)-[:RECORDED_AS]->(r) 

219 """) 

220 session.run(""" 

221 MATCH (wm:WearableMetric {id: "wm4_p1"}), (r:Reading)  

222 WHERE r.id IN ["r_steps_1_p1", "r_steps_2_p1"] 

223 CREATE (wm)-[:RECORDED_AS]->(r) 

224 """) 

225 

226 print("✓ Patient 1 complete with all nodes") 

227 

228 # ============================================================ 

229 # PATIENT 2: Sarah Smith - Heart Disease 

230 # ============================================================ 

231 print("\n[3/6] Creating Patient 2: Sarah Smith (Heart Disease)...") 

232 

233 session.run(""" 

234 CREATE (p:Patient { 

235 id: "user_2", 

236 name: "Sarah Smith", 

237 age: 58, 

238 gender: "Female", 

239 bloodType: "A+", 

240 created_at: datetime() 

241 }) 

242  

243 CREATE (d1:Disease { 

244 id: "d1_p2", 

245 name: "Heart Disease", 

246 category: "Cardiovascular", 

247 severity: "moderate", 

248 status: "active", 

249 diagnosisDate: date("2020-01-15"), 

250 icd10: "I25.10" 

251 }) 

252  

253 CREATE (m1:Medication { 

254 id: "m1_p2", 

255 name: "Atorvastatin", 

256 dosage: "40mg", 

257 frequency: "once daily", 

258 purpose: "Cholesterol management", 

259 generic: true, 

260 atcCode: "C10AA05" 

261 }) 

262  

263 CREATE (m2:Medication { 

264 id: "m2_p2", 

265 name: "Aspirin", 

266 dosage: "81mg", 

267 frequency: "once daily", 

268 purpose: "Blood thinner", 

269 generic: true, 

270 atcCode: "B01AC06" 

271 }) 

272  

273 CREATE (m3:Medication { 

274 id: "m3_p2", 

275 name: "Metoprolol", 

276 dosage: "50mg", 

277 frequency: "twice daily", 

278 purpose: "Heart rate control", 

279 generic: true, 

280 atcCode: "C07AB02" 

281 }) 

282  

283 CREATE (l1:LabTest { 

284 id: "l1_p2", 

285 name: "Troponin", 

286 result: 0.02, 

287 unit: "ng/mL", 

288 normalRange: "< 0.04 ng/mL", 

289 status: "normal", 

290 testDate: date("2025-01-08"), 

291 testCode: "6598-7" 

292 }) 

293  

294 CREATE (l2:LabTest { 

295 id: "l2_p2", 

296 name: "BNP", 

297 result: 120, 

298 unit: "pg/mL", 

299 normalRange: "< 100 pg/mL", 

300 status: "slightly elevated", 

301 testDate: date("2025-01-08"), 

302 testCode: "35637-4" 

303 }) 

304  

305 CREATE (l3:LabTest { 

306 id: "l3_p2", 

307 name: "LDL Cholesterol", 

308 result: 145, 

309 unit: "mg/dL", 

310 normalRange: "< 100 mg/dL", 

311 status: "elevated", 

312 testDate: date("2025-01-08"), 

313 testCode: "18262-6" 

314 }) 

315  

316 CREATE (l4:LabTest { 

317 id: "l4_p2", 

318 name: "HDL Cholesterol", 

319 result: 42, 

320 unit: "mg/dL", 

321 normalRange: "> 40 mg/dL", 

322 status: "borderline low", 

323 testDate: date("2025-01-08"), 

324 testCode: "2085-9" 

325 }) 

326 """) 

327 

328 session.run(""" 

329 MATCH (p:Patient {id: "user_2"}),  

330 (d1:Disease {id: "d1_p2"}), 

331 (m1:Medication {id: "m1_p2"}), (m2:Medication {id: "m2_p2"}), (m3:Medication {id: "m3_p2"}), 

332 (l1:LabTest {id: "l1_p2"}), (l2:LabTest {id: "l2_p2"}), (l3:LabTest {id: "l3_p2"}), (l4:LabTest {id: "l4_p2"}) 

333 CREATE (p)-[:HAS_DISEASE]->(d1) 

334 CREATE (d1)-[:TREATED_BY]->(m1) 

335 CREATE (d1)-[:TREATED_BY]->(m2) 

336 CREATE (d1)-[:TREATED_BY]->(m3) 

337 CREATE (p)-[:PRESCRIBED]->(m1) 

338 CREATE (p)-[:PRESCRIBED]->(m2) 

339 CREATE (p)-[:PRESCRIBED]->(m3) 

340 CREATE (d1)-[:HAS_LAB_RESULT]->(l1) 

341 CREATE (d1)-[:HAS_LAB_RESULT]->(l2) 

342 CREATE (d1)-[:HAS_LAB_RESULT]->(l3) 

343 CREATE (d1)-[:HAS_LAB_RESULT]->(l4) 

344 """) 

345 

346 # Wearables for Patient 2 

347 session.run(""" 

348 CREATE (wm1:WearableMetric { 

349 id: "wm1_p2", 

350 type: "heart_rate", 

351 name: "Heart Rate", 

352 unit: "bpm", 

353 normalRange: "60-100" 

354 }) 

355 CREATE (wm2:WearableMetric { 

356 id: "wm2_p2", 

357 type: "blood_pressure", 

358 name: "Blood Pressure", 

359 unit: "mmHg", 

360 normalRange: "< 120/80" 

361 }) 

362 CREATE (wm3:WearableMetric { 

363 id: "wm3_p2", 

364 type: "ecg", 

365 name: "ECG", 

366 unit: "rhythm", 

367 normalRange: "normal sinus rhythm" 

368 }) 

369 CREATE (wm4:WearableMetric { 

370 id: "wm4_p2", 

371 type: "steps", 

372 name: "Daily Steps", 

373 unit: "steps", 

374 normalRange: "> 6000" 

375 }) 

376 """) 

377 

378 session.run(""" 

379 MATCH (p:Patient {id: "user_2"}),  

380 (wm1:WearableMetric {id: "wm1_p2"}), (wm2:WearableMetric {id: "wm2_p2"}), 

381 (wm3:WearableMetric {id: "wm3_p2"}), (wm4:WearableMetric {id: "wm4_p2"}) 

382 CREATE (p)-[:HAS_METRIC]->(wm1) 

383 CREATE (p)-[:HAS_METRIC]->(wm2) 

384 CREATE (p)-[:HAS_METRIC]->(wm3) 

385 CREATE (p)-[:HAS_METRIC]->(wm4) 

386 """) 

387 

388 session.run(""" 

389 CREATE (r1:Reading {id: "r_hr_1_p2", value: 68, timestamp: datetime("2026-02-08T08:00:00Z")}) 

390 CREATE (r2:Reading {id: "r_hr_2_p2", value: 72, timestamp: datetime("2026-02-09T08:00:00Z")}) 

391 CREATE (r3:Reading {id: "r_bp_1_p2", value: "125/82", timestamp: datetime("2026-02-08T08:00:00Z")}) 

392 CREATE (r4:Reading {id: "r_bp_2_p2", value: "128/85", timestamp: datetime("2026-02-09T08:00:00Z")}) 

393 CREATE (r5:Reading {id: "r_ecg_1_p2", value: "NSR", timestamp: datetime("2026-02-08T08:00:00Z")}) 

394 CREATE (r6:Reading {id: "r_ecg_2_p2", value: "NSR", timestamp: datetime("2026-02-09T08:00:00Z")}) 

395 CREATE (r7:Reading {id: "r_steps_1_p2", value: 5234, timestamp: datetime("2026-02-08T23:59:00Z")}) 

396 CREATE (r8:Reading {id: "r_steps_2_p2", value: 6100, timestamp: datetime("2026-02-09T23:59:00Z")}) 

397 """) 

398 

399 session.run("""MATCH (wm:WearableMetric {id: "wm1_p2"}), (r:Reading) WHERE r.id IN ["r_hr_1_p2", "r_hr_2_p2"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

400 session.run("""MATCH (wm:WearableMetric {id: "wm2_p2"}), (r:Reading) WHERE r.id IN ["r_bp_1_p2", "r_bp_2_p2"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

401 session.run("""MATCH (wm:WearableMetric {id: "wm3_p2"}), (r:Reading) WHERE r.id IN ["r_ecg_1_p2", "r_ecg_2_p2"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

402 session.run("""MATCH (wm:WearableMetric {id: "wm4_p2"}), (r:Reading) WHERE r.id IN ["r_steps_1_p2", "r_steps_2_p2"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

403 

404 print("✓ Patient 2 complete with all nodes") 

405 

406 # ============================================================ 

407 # PATIENT 3: Michael Johnson - Asthma 

408 # ============================================================ 

409 print("\n[4/6] Creating Patient 3: Michael Johnson (Asthma)...") 

410 

411 session.run(""" 

412 CREATE (p:Patient { 

413 id: "user_3", 

414 name: "Michael Johnson", 

415 age: 34, 

416 gender: "Male", 

417 bloodType: "B+", 

418 created_at: datetime() 

419 }) 

420  

421 CREATE (d1:Disease { 

422 id: "d1_p3", 

423 name: "Asthma", 

424 category: "Respiratory", 

425 severity: "moderate", 

426 status: "active", 

427 diagnosisDate: date("2015-09-12"), 

428 icd10: "J45.20" 

429 }) 

430  

431 CREATE (m1:Medication { 

432 id: "m1_p3", 

433 name: "Albuterol Inhaler", 

434 dosage: "90mcg", 

435 frequency: "as needed", 

436 purpose: "Quick relief bronchodilator", 

437 generic: true, 

438 atcCode: "R03AC02" 

439 }) 

440  

441 CREATE (m2:Medication { 

442 id: "m2_p3", 

443 name: "Fluticasone Inhaler", 

444 dosage: "220mcg", 

445 frequency: "twice daily", 

446 purpose: "Long-term asthma control", 

447 generic: false, 

448 atcCode: "R03BA05" 

449 }) 

450  

451 CREATE (m3:Medication { 

452 id: "m3_p3", 

453 name: "Montelukast", 

454 dosage: "10mg", 

455 frequency: "once daily", 

456 purpose: "Asthma control", 

457 generic: true, 

458 atcCode: "R03DC03" 

459 }) 

460  

461 CREATE (l1:LabTest { 

462 id: "l1_p3", 

463 name: "Spirometry FEV1", 

464 result: 78, 

465 unit: "% predicted", 

466 normalRange: "> 80%", 

467 status: "slightly reduced", 

468 testDate: date("2025-01-05"), 

469 testCode: "20150-9" 

470 }) 

471  

472 CREATE (l2:LabTest { 

473 id: "l2_p3", 

474 name: "Peak Flow", 

475 result: 420, 

476 unit: "L/min", 

477 normalRange: "450-550 L/min", 

478 status: "reduced", 

479 testDate: date("2025-01-05"), 

480 testCode: "19935-6" 

481 }) 

482  

483 CREATE (l3:LabTest { 

484 id: "l3_p3", 

485 name: "IgE Total", 

486 result: 245, 

487 unit: "IU/mL", 

488 normalRange: "< 100 IU/mL", 

489 status: "elevated", 

490 testDate: date("2025-01-05"), 

491 testCode: "19113-0" 

492 }) 

493  

494 CREATE (l4:LabTest { 

495 id: "l4_p3", 

496 name: "Eosinophil Count", 

497 result: 520, 

498 unit: "cells/μL", 

499 normalRange: "< 500 cells/μL", 

500 status: "slightly elevated", 

501 testDate: date("2025-01-05"), 

502 testCode: "713-8" 

503 }) 

504 """) 

505 

506 session.run(""" 

507 MATCH (p:Patient {id: "user_3"}),  

508 (d1:Disease {id: "d1_p3"}), 

509 (m1:Medication {id: "m1_p3"}), (m2:Medication {id: "m2_p3"}), (m3:Medication {id: "m3_p3"}), 

510 (l1:LabTest {id: "l1_p3"}), (l2:LabTest {id: "l2_p3"}), (l3:LabTest {id: "l3_p3"}), (l4:LabTest {id: "l4_p3"}) 

511 CREATE (p)-[:HAS_DISEASE]->(d1) 

512 CREATE (d1)-[:TREATED_BY]->(m1) 

513 CREATE (d1)-[:TREATED_BY]->(m2) 

514 CREATE (d1)-[:TREATED_BY]->(m3) 

515 CREATE (p)-[:PRESCRIBED]->(m1) 

516 CREATE (p)-[:PRESCRIBED]->(m2) 

517 CREATE (p)-[:PRESCRIBED]->(m3) 

518 CREATE (d1)-[:HAS_LAB_RESULT]->(l1) 

519 CREATE (d1)-[:HAS_LAB_RESULT]->(l2) 

520 CREATE (d1)-[:HAS_LAB_RESULT]->(l3) 

521 CREATE (d1)-[:HAS_LAB_RESULT]->(l4) 

522 """) 

523 

524 # Wearables for Patient 3 

525 session.run(""" 

526 CREATE (wm1:WearableMetric { 

527 id: "wm1_p3", 

528 type: "peak_flow", 

529 name: "Peak Flow", 

530 unit: "L/min", 

531 normalRange: "450-550" 

532 }) 

533 CREATE (wm2:WearableMetric { 

534 id: "wm2_p3", 

535 type: "respiratory_rate", 

536 name: "Respiratory Rate", 

537 unit: "breaths/min", 

538 normalRange: "12-20" 

539 }) 

540 CREATE (wm3:WearableMetric { 

541 id: "wm3_p3", 

542 type: "spo2", 

543 name: "Blood Oxygen", 

544 unit: "%", 

545 normalRange: "> 95%" 

546 }) 

547 CREATE (wm4:WearableMetric { 

548 id: "wm4_p3", 

549 type: "steps", 

550 name: "Daily Steps", 

551 unit: "steps", 

552 normalRange: "> 10000" 

553 }) 

554 """) 

555 

556 session.run(""" 

557 MATCH (p:Patient {id: "user_3"}),  

558 (wm1:WearableMetric {id: "wm1_p3"}), (wm2:WearableMetric {id: "wm2_p3"}), 

559 (wm3:WearableMetric {id: "wm3_p3"}), (wm4:WearableMetric {id: "wm4_p3"}) 

560 CREATE (p)-[:HAS_METRIC]->(wm1) 

561 CREATE (p)-[:HAS_METRIC]->(wm2) 

562 CREATE (p)-[:HAS_METRIC]->(wm3) 

563 CREATE (p)-[:HAS_METRIC]->(wm4) 

564 """) 

565 

566 session.run(""" 

567 CREATE (r1:Reading {id: "r_pf_1_p3", value: 420, timestamp: datetime("2026-02-08T08:00:00Z")}) 

568 CREATE (r2:Reading {id: "r_pf_2_p3", value: 435, timestamp: datetime("2026-02-09T08:00:00Z")}) 

569 CREATE (r3:Reading {id: "r_rr_1_p3", value: 16, timestamp: datetime("2026-02-08T08:00:00Z")}) 

570 CREATE (r4:Reading {id: "r_rr_2_p3", value: 15, timestamp: datetime("2026-02-09T08:00:00Z")}) 

571 CREATE (r5:Reading {id: "r_spo2_1_p3", value: 97, timestamp: datetime("2026-02-08T08:00:00Z")}) 

572 CREATE (r6:Reading {id: "r_spo2_2_p3", value: 98, timestamp: datetime("2026-02-09T08:00:00Z")}) 

573 CREATE (r7:Reading {id: "r_steps_1_p3", value: 11234, timestamp: datetime("2026-02-08T23:59:00Z")}) 

574 CREATE (r8:Reading {id: "r_steps_2_p3", value: 9800, timestamp: datetime("2026-02-09T23:59:00Z")}) 

575 """) 

576 

577 session.run("""MATCH (wm:WearableMetric {id: "wm1_p3"}), (r:Reading) WHERE r.id IN ["r_pf_1_p3", "r_pf_2_p3"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

578 session.run("""MATCH (wm:WearableMetric {id: "wm2_p3"}), (r:Reading) WHERE r.id IN ["r_rr_1_p3", "r_rr_2_p3"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

579 session.run("""MATCH (wm:WearableMetric {id: "wm3_p3"}), (r:Reading) WHERE r.id IN ["r_spo2_1_p3", "r_spo2_2_p3"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

580 session.run("""MATCH (wm:WearableMetric {id: "wm4_p3"}), (r:Reading) WHERE r.id IN ["r_steps_1_p3", "r_steps_2_p3"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

581 

582 print("✓ Patient 3 complete with all nodes") 

583 

584 # ============================================================ 

585 # PATIENT 4: Emily Davis - Chronic Kidney Disease 

586 # ============================================================ 

587 print("\n[5/6] Creating Patient 4: Emily Davis (Chronic Kidney Disease)...") 

588 

589 session.run(""" 

590 CREATE (p:Patient { 

591 id: "user_4", 

592 name: "Emily Davis", 

593 age: 64, 

594 gender: "Female", 

595 bloodType: "AB+", 

596 created_at: datetime() 

597 }) 

598  

599 CREATE (d1:Disease { 

600 id: "d1_p4", 

601 name: "Chronic Kidney Disease", 

602 category: "Renal", 

603 severity: "moderate", 

604 status: "active", 

605 diagnosisDate: date("2021-11-03"), 

606 icd10: "N18.3" 

607 }) 

608  

609 CREATE (m1:Medication { 

610 id: "m1_p4", 

611 name: "Losartan", 

612 dosage: "50mg", 

613 frequency: "once daily", 

614 purpose: "Blood pressure and kidney protection", 

615 generic: true, 

616 atcCode: "C09CA01" 

617 }) 

618  

619 CREATE (m2:Medication { 

620 id: "m2_p4", 

621 name: "Furosemide", 

622 dosage: "40mg", 

623 frequency: "once daily", 

624 purpose: "Fluid management", 

625 generic: true, 

626 atcCode: "C03CA01" 

627 }) 

628  

629 CREATE (m3:Medication { 

630 id: "m3_p4", 

631 name: "Calcium Carbonate", 

632 dosage: "500mg", 

633 frequency: "three times daily", 

634 purpose: "Phosphate binder", 

635 generic: true, 

636 atcCode: "A12AA04" 

637 }) 

638  

639 CREATE (m4:Medication { 

640 id: "m4_p4", 

641 name: "Erythropoietin", 

642 dosage: "4000 units", 

643 frequency: "weekly injection", 

644 purpose: "Anemia management", 

645 generic: false, 

646 atcCode: "B03XA01" 

647 }) 

648  

649 CREATE (l1:LabTest { 

650 id: "l1_p4", 

651 name: "Creatinine", 

652 result: 2.8, 

653 unit: "mg/dL", 

654 normalRange: "0.7-1.3 mg/dL", 

655 status: "elevated", 

656 testDate: date("2025-01-12"), 

657 testCode: "2160-0" 

658 }) 

659  

660 CREATE (l2:LabTest { 

661 id: "l2_p4", 

662 name: "eGFR", 

663 result: 42, 

664 unit: "mL/min/1.73m²", 

665 normalRange: "> 90 mL/min/1.73m²", 

666 status: "stage 3 CKD", 

667 testDate: date("2025-01-12"), 

668 testCode: "33914-3" 

669 }) 

670  

671 CREATE (l3:LabTest { 

672 id: "l3_p4", 

673 name: "Potassium", 

674 result: 5.2, 

675 unit: "mEq/L", 

676 normalRange: "3.5-5.0 mEq/L", 

677 status: "slightly elevated", 

678 testDate: date("2025-01-12"), 

679 testCode: "2823-3" 

680 }) 

681  

682 CREATE (l4:LabTest { 

683 id: "l4_p4", 

684 name: "Phosphorus", 

685 result: 5.8, 

686 unit: "mg/dL", 

687 normalRange: "2.5-4.5 mg/dL", 

688 status: "elevated", 

689 testDate: date("2025-01-12"), 

690 testCode: "2777-1" 

691 }) 

692  

693 CREATE (l5:LabTest { 

694 id: "l5_p4", 

695 name: "Hemoglobin", 

696 result: 10.2, 

697 unit: "g/dL", 

698 normalRange: "12-16 g/dL", 

699 status: "anemia", 

700 testDate: date("2025-01-12"), 

701 testCode: "718-7" 

702 }) 

703 """) 

704 

705 session.run(""" 

706 MATCH (p:Patient {id: "user_4"}),  

707 (d1:Disease {id: "d1_p4"}), 

708 (m1:Medication {id: "m1_p4"}), (m2:Medication {id: "m2_p4"}),  

709 (m3:Medication {id: "m3_p4"}), (m4:Medication {id: "m4_p4"}), 

710 (l1:LabTest {id: "l1_p4"}), (l2:LabTest {id: "l2_p4"}),  

711 (l3:LabTest {id: "l3_p4"}), (l4:LabTest {id: "l4_p4"}), (l5:LabTest {id: "l5_p4"}) 

712 CREATE (p)-[:HAS_DISEASE]->(d1) 

713 CREATE (d1)-[:TREATED_BY]->(m1) 

714 CREATE (d1)-[:TREATED_BY]->(m2) 

715 CREATE (d1)-[:TREATED_BY]->(m3) 

716 CREATE (d1)-[:TREATED_BY]->(m4) 

717 CREATE (p)-[:PRESCRIBED]->(m1) 

718 CREATE (p)-[:PRESCRIBED]->(m2) 

719 CREATE (p)-[:PRESCRIBED]->(m3) 

720 CREATE (p)-[:PRESCRIBED]->(m4) 

721 CREATE (d1)-[:HAS_LAB_RESULT]->(l1) 

722 CREATE (d1)-[:HAS_LAB_RESULT]->(l2) 

723 CREATE (d1)-[:HAS_LAB_RESULT]->(l3) 

724 CREATE (d1)-[:HAS_LAB_RESULT]->(l4) 

725 CREATE (d1)-[:HAS_LAB_RESULT]->(l5) 

726 """) 

727 

728 # Wearables for Patient 4 

729 session.run(""" 

730 CREATE (wm1:WearableMetric { 

731 id: "wm1_p4", 

732 type: "blood_pressure", 

733 name: "Blood Pressure", 

734 unit: "mmHg", 

735 normalRange: "< 130/80" 

736 }) 

737 CREATE (wm2:WearableMetric { 

738 id: "wm2_p4", 

739 type: "weight", 

740 name: "Body Weight", 

741 unit: "kg", 

742 normalRange: "stable" 

743 }) 

744 CREATE (wm3:WearableMetric { 

745 id: "wm3_p4", 

746 type: "fluid_intake", 

747 name: "Fluid Intake", 

748 unit: "mL", 

749 normalRange: "1500-2000" 

750 }) 

751 CREATE (wm4:WearableMetric { 

752 id: "wm4_p4", 

753 type: "steps", 

754 name: "Daily Steps", 

755 unit: "steps", 

756 normalRange: "> 5000" 

757 }) 

758 """) 

759 

760 session.run(""" 

761 MATCH (p:Patient {id: "user_4"}),  

762 (wm1:WearableMetric {id: "wm1_p4"}), (wm2:WearableMetric {id: "wm2_p4"}), 

763 (wm3:WearableMetric {id: "wm3_p4"}), (wm4:WearableMetric {id: "wm4_p4"}) 

764 CREATE (p)-[:HAS_METRIC]->(wm1) 

765 CREATE (p)-[:HAS_METRIC]->(wm2) 

766 CREATE (p)-[:HAS_METRIC]->(wm3) 

767 CREATE (p)-[:HAS_METRIC]->(wm4) 

768 """) 

769 

770 session.run(""" 

771 CREATE (r1:Reading {id: "r_bp_1_p4", value: "135/85", timestamp: datetime("2026-02-08T08:00:00Z")}) 

772 CREATE (r2:Reading {id: "r_bp_2_p4", value: "132/82", timestamp: datetime("2026-02-09T08:00:00Z")}) 

773 CREATE (r3:Reading {id: "r_wt_1_p4", value: 72.5, timestamp: datetime("2026-02-08T07:00:00Z")}) 

774 CREATE (r4:Reading {id: "r_wt_2_p4", value: 72.8, timestamp: datetime("2026-02-09T07:00:00Z")}) 

775 CREATE (r5:Reading {id: "r_fl_1_p4", value: 1650, timestamp: datetime("2026-02-08T23:59:00Z")}) 

776 CREATE (r6:Reading {id: "r_fl_2_p4", value: 1720, timestamp: datetime("2026-02-09T23:59:00Z")}) 

777 CREATE (r7:Reading {id: "r_steps_1_p4", value: 4234, timestamp: datetime("2026-02-08T23:59:00Z")}) 

778 CREATE (r8:Reading {id: "r_steps_2_p4", value: 5100, timestamp: datetime("2026-02-09T23:59:00Z")}) 

779 """) 

780 

781 session.run("""MATCH (wm:WearableMetric {id: "wm1_p4"}), (r:Reading) WHERE r.id IN ["r_bp_1_p4", "r_bp_2_p4"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

782 session.run("""MATCH (wm:WearableMetric {id: "wm2_p4"}), (r:Reading) WHERE r.id IN ["r_wt_1_p4", "r_wt_2_p4"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

783 session.run("""MATCH (wm:WearableMetric {id: "wm3_p4"}), (r:Reading) WHERE r.id IN ["r_fl_1_p4", "r_fl_2_p4"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

784 session.run("""MATCH (wm:WearableMetric {id: "wm4_p4"}), (r:Reading) WHERE r.id IN ["r_steps_1_p4", "r_steps_2_p4"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

785 

786 print("✓ Patient 4 complete with all nodes") 

787 

788 # ============================================================ 

789 # PATIENT 5: Robert Brown - Multiple Conditions 

790 # (Type 2 Diabetes + Hypertension + Heart Disease) 

791 # ============================================================ 

792 print("\n[6/6] Creating Patient 5: Robert Brown (Multiple Conditions)...") 

793 

794 session.run(""" 

795 CREATE (p:Patient { 

796 id: "user_5", 

797 name: "Robert Brown", 

798 age: 71, 

799 gender: "Male", 

800 bloodType: "O-", 

801 created_at: datetime() 

802 }) 

803  

804 CREATE (d1:Disease { 

805 id: "d1_p5", 

806 name: "Type 2 Diabetes", 

807 category: "Endocrine", 

808 severity: "severe", 

809 status: "active", 

810 diagnosisDate: date("2012-04-10"), 

811 icd10: "E11.9" 

812 }) 

813  

814 CREATE (d2:Disease { 

815 id: "d2_p5", 

816 name: "Hypertension", 

817 category: "Cardiovascular", 

818 severity: "moderate", 

819 status: "active", 

820 diagnosisDate: date("2010-07-22"), 

821 icd10: "I10" 

822 }) 

823  

824 CREATE (d3:Disease { 

825 id: "d3_p5", 

826 name: "Heart Disease", 

827 category: "Cardiovascular", 

828 severity: "moderate", 

829 status: "active", 

830 diagnosisDate: date("2019-02-15"), 

831 icd10: "I25.10" 

832 }) 

833  

834 CREATE (m1:Medication { 

835 id: "m1_p5", 

836 name: "Insulin Glargine", 

837 dosage: "20 units", 

838 frequency: "once daily", 

839 purpose: "Blood sugar control", 

840 generic: false, 

841 atcCode: "A10AE04" 

842 }) 

843  

844 CREATE (m2:Medication { 

845 id: "m2_p5", 

846 name: "Metformin", 

847 dosage: "1000mg", 

848 frequency: "twice daily", 

849 purpose: "Blood sugar control", 

850 generic: true, 

851 atcCode: "A10BA02" 

852 }) 

853  

854 CREATE (m3:Medication { 

855 id: "m3_p5", 

856 name: "Amlodipine", 

857 dosage: "10mg", 

858 frequency: "once daily", 

859 purpose: "Blood pressure control", 

860 generic: true, 

861 atcCode: "C08CA01" 

862 }) 

863  

864 CREATE (m4:Medication { 

865 id: "m4_p5", 

866 name: "Atorvastatin", 

867 dosage: "80mg", 

868 frequency: "once daily", 

869 purpose: "Cholesterol management", 

870 generic: true, 

871 atcCode: "C10AA05" 

872 }) 

873  

874 CREATE (m5:Medication { 

875 id: "m5_p5", 

876 name: "Aspirin", 

877 dosage: "81mg", 

878 frequency: "once daily", 

879 purpose: "Blood thinner", 

880 generic: true, 

881 atcCode: "B01AC06" 

882 }) 

883  

884 CREATE (m6:Medication { 

885 id: "m6_p5", 

886 name: "Carvedilol", 

887 dosage: "25mg", 

888 frequency: "twice daily", 

889 purpose: "Heart failure management", 

890 generic: true, 

891 atcCode: "C07AG02" 

892 }) 

893  

894 CREATE (l1:LabTest { 

895 id: "l1_p5", 

896 name: "HbA1c", 

897 result: 8.5, 

898 unit: "%", 

899 normalRange: "< 5.7%", 

900 status: "poorly controlled", 

901 testDate: date("2025-01-15"), 

902 testCode: "2345-7" 

903 }) 

904  

905 CREATE (l2:LabTest { 

906 id: "l2_p5", 

907 name: "Fasting Glucose", 

908 result: 185, 

909 unit: "mg/dL", 

910 normalRange: "70-100 mg/dL", 

911 status: "high", 

912 testDate: date("2025-01-15"), 

913 testCode: "1558-6" 

914 }) 

915  

916 CREATE (l3:LabTest { 

917 id: "l3_p5", 

918 name: "BNP", 

919 result: 280, 

920 unit: "pg/mL", 

921 normalRange: "< 100 pg/mL", 

922 status: "elevated", 

923 testDate: date("2025-01-15"), 

924 testCode: "35637-4" 

925 }) 

926  

927 CREATE (l4:LabTest { 

928 id: "l4_p5", 

929 name: "LDL Cholesterol", 

930 result: 95, 

931 unit: "mg/dL", 

932 normalRange: "< 100 mg/dL", 

933 status: "near target", 

934 testDate: date("2025-01-15"), 

935 testCode: "18262-6" 

936 }) 

937  

938 CREATE (l5:LabTest { 

939 id: "l5_p5", 

940 name: "Blood Pressure", 

941 result: "148/92", 

942 unit: "mmHg", 

943 normalRange: "< 120/80 mmHg", 

944 status: "stage 2 hypertension", 

945 testDate: date("2025-01-15"), 

946 testCode: "55284-4" 

947 }) 

948 """) 

949 

950 session.run(""" 

951 MATCH (p:Patient {id: "user_5"}),  

952 (d1:Disease {id: "d1_p5"}), (d2:Disease {id: "d2_p5"}), (d3:Disease {id: "d3_p5"}), 

953 (m1:Medication {id: "m1_p5"}), (m2:Medication {id: "m2_p5"}),  

954 (m3:Medication {id: "m3_p5"}), (m4:Medication {id: "m4_p5"}),  

955 (m5:Medication {id: "m5_p5"}), (m6:Medication {id: "m6_p5"}), 

956 (l1:LabTest {id: "l1_p5"}), (l2:LabTest {id: "l2_p5"}),  

957 (l3:LabTest {id: "l3_p5"}), (l4:LabTest {id: "l4_p5"}), (l5:LabTest {id: "l5_p5"}) 

958 CREATE (p)-[:HAS_DISEASE]->(d1) 

959 CREATE (p)-[:HAS_DISEASE]->(d2) 

960 CREATE (p)-[:HAS_DISEASE]->(d3) 

961 CREATE (d1)-[:TREATED_BY]->(m1) 

962 CREATE (d1)-[:TREATED_BY]->(m2) 

963 CREATE (d2)-[:TREATED_BY]->(m3) 

964 CREATE (d3)-[:TREATED_BY]->(m4) 

965 CREATE (d3)-[:TREATED_BY]->(m5) 

966 CREATE (d3)-[:TREATED_BY]->(m6) 

967 CREATE (p)-[:PRESCRIBED]->(m1) 

968 CREATE (p)-[:PRESCRIBED]->(m2) 

969 CREATE (p)-[:PRESCRIBED]->(m3) 

970 CREATE (p)-[:PRESCRIBED]->(m4) 

971 CREATE (p)-[:PRESCRIBED]->(m5) 

972 CREATE (p)-[:PRESCRIBED]->(m6) 

973 CREATE (d1)-[:HAS_LAB_RESULT]->(l1) 

974 CREATE (d1)-[:HAS_LAB_RESULT]->(l2) 

975 CREATE (d2)-[:HAS_LAB_RESULT]->(l5) 

976 CREATE (d3)-[:HAS_LAB_RESULT]->(l3) 

977 CREATE (d3)-[:HAS_LAB_RESULT]->(l4) 

978 """) 

979 

980 # Wearables for Patient 5 

981 session.run(""" 

982 CREATE (wm1:WearableMetric { 

983 id: "wm1_p5", 

984 type: "blood_glucose", 

985 name: "Blood Glucose", 

986 unit: "mg/dL", 

987 normalRange: "70-130" 

988 }) 

989 CREATE (wm2:WearableMetric { 

990 id: "wm2_p5", 

991 type: "blood_pressure", 

992 name: "Blood Pressure", 

993 unit: "mmHg", 

994 normalRange: "< 130/80" 

995 }) 

996 CREATE (wm3:WearableMetric { 

997 id: "wm3_p5", 

998 type: "heart_rate", 

999 name: "Heart Rate", 

1000 unit: "bpm", 

1001 normalRange: "60-100" 

1002 }) 

1003 CREATE (wm4:WearableMetric { 

1004 id: "wm4_p5", 

1005 type: "weight", 

1006 name: "Body Weight", 

1007 unit: "kg", 

1008 normalRange: "stable" 

1009 }) 

1010 CREATE (wm5:WearableMetric { 

1011 id: "wm5_p5", 

1012 type: "steps", 

1013 name: "Daily Steps", 

1014 unit: "steps", 

1015 normalRange: "> 5000" 

1016 }) 

1017 """) 

1018 

1019 session.run(""" 

1020 MATCH (p:Patient {id: "user_5"}),  

1021 (wm1:WearableMetric {id: "wm1_p5"}), (wm2:WearableMetric {id: "wm2_p5"}), 

1022 (wm3:WearableMetric {id: "wm3_p5"}), (wm4:WearableMetric {id: "wm4_p5"}), 

1023 (wm5:WearableMetric {id: "wm5_p5"}) 

1024 CREATE (p)-[:HAS_METRIC]->(wm1) 

1025 CREATE (p)-[:HAS_METRIC]->(wm2) 

1026 CREATE (p)-[:HAS_METRIC]->(wm3) 

1027 CREATE (p)-[:HAS_METRIC]->(wm4) 

1028 CREATE (p)-[:HAS_METRIC]->(wm5) 

1029 """) 

1030 

1031 session.run(""" 

1032 CREATE (r1:Reading {id: "r_bg_1_p5", value: 178, timestamp: datetime("2026-02-08T08:00:00Z")}) 

1033 CREATE (r2:Reading {id: "r_bg_2_p5", value: 192, timestamp: datetime("2026-02-09T08:00:00Z")}) 

1034 CREATE (r3:Reading {id: "r_bp_1_p5", value: "145/90", timestamp: datetime("2026-02-08T08:00:00Z")}) 

1035 CREATE (r4:Reading {id: "r_bp_2_p5", value: "148/92", timestamp: datetime("2026-02-09T08:00:00Z")}) 

1036 CREATE (r5:Reading {id: "r_hr_1_p5", value: 78, timestamp: datetime("2026-02-08T08:00:00Z")}) 

1037 CREATE (r6:Reading {id: "r_hr_2_p5", value: 82, timestamp: datetime("2026-02-09T08:00:00Z")}) 

1038 CREATE (r7:Reading {id: "r_wt_1_p5", value: 88.2, timestamp: datetime("2026-02-08T07:00:00Z")}) 

1039 CREATE (r8:Reading {id: "r_wt_2_p5", value: 88.5, timestamp: datetime("2026-02-09T07:00:00Z")}) 

1040 CREATE (r9:Reading {id: "r_steps_1_p5", value: 3234, timestamp: datetime("2026-02-08T23:59:00Z")}) 

1041 CREATE (r10:Reading {id: "r_steps_2_p5", value: 4100, timestamp: datetime("2026-02-09T23:59:00Z")}) 

1042 """) 

1043 

1044 session.run("""MATCH (wm:WearableMetric {id: "wm1_p5"}), (r:Reading) WHERE r.id IN ["r_bg_1_p5", "r_bg_2_p5"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

1045 session.run("""MATCH (wm:WearableMetric {id: "wm2_p5"}), (r:Reading) WHERE r.id IN ["r_bp_1_p5", "r_bp_2_p5"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

1046 session.run("""MATCH (wm:WearableMetric {id: "wm3_p5"}), (r:Reading) WHERE r.id IN ["r_hr_1_p5", "r_hr_2_p5"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

1047 session.run("""MATCH (wm:WearableMetric {id: "wm4_p5"}), (r:Reading) WHERE r.id IN ["r_wt_1_p5", "r_wt_2_p5"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

1048 session.run("""MATCH (wm:WearableMetric {id: "wm5_p5"}), (r:Reading) WHERE r.id IN ["r_steps_1_p5", "r_steps_2_p5"] CREATE (wm)-[:RECORDED_AS]->(r)""") 

1049 

1050 print("✓ Patient 5 complete with all nodes") 

1051 

1052 # Verify the setup 

1053 print("\n" + "=" * 60) 

1054 print("VERIFICATION - ALL PATIENTS") 

1055 print("=" * 60) 

1056 

1057 for patient_id in ["user_1", "user_2", "user_3", "user_4", "user_5"]: 

1058 result = session.run(""" 

1059 MATCH (p:Patient {id: $patient_id}) 

1060 OPTIONAL MATCH (p)-[:HAS_DISEASE]->(d:Disease) 

1061 OPTIONAL MATCH (d)-[:TREATED_BY]->(m:Medication) 

1062 OPTIONAL MATCH (p)-[:PRESCRIBED]->(pm:Medication) 

1063 OPTIONAL MATCH (d)-[:HAS_LAB_RESULT]->(l:LabTest) 

1064 OPTIONAL MATCH (p)-[:HAS_METRIC]->(wm:WearableMetric) 

1065 OPTIONAL MATCH (wm)-[:RECORDED_AS]->(r:Reading) 

1066 RETURN 

1067 p.name AS patient, 

1068 p.age AS age, 

1069 collect(DISTINCT d.name) AS diseases, 

1070 collect(DISTINCT pm.name) AS medications, 

1071 collect(DISTINCT l.name) AS labs, 

1072 collect(DISTINCT wm.name) AS wearables, 

1073 count(DISTINCT r) AS reading_count 

1074 """, patient_id=patient_id) 

1075 

1076 record = result.single() 

1077 if record: 

1078 print(f"\n✓ Patient: {record['patient']} (Age: {record['age']})") 

1079 print(f" - Diseases: {', '.join([d for d in record['diseases'] if d])}") 

1080 print(f" - Medications: {', '.join([m for m in record['medications'] if m])}") 

1081 print(f" - Lab tests: {len([l for l in record['labs'] if l])}") 

1082 print(f" - Wearable metrics: {len([w for w in record['wearables'] if w])}") 

1083 print(f" - Total readings: {record['reading_count']}") 

1084 

1085 # Count total data 

1086 result = session.run("MATCH (n) RETURN count(n) as count") 

1087 total = result.single()["count"] 

1088 print(f"\n{'=' * 60}") 

1089 print(f"✓ Total nodes created: {total}") 

1090 

1091 # Count by type 

1092 result = session.run(""" 

1093 MATCH (n) 

1094 RETURN labels(n)[0] AS label, count(n) AS count 

1095 ORDER BY count DESC 

1096 """) 

1097 print(f"\nNode breakdown:") 

1098 for record in result: 

1099 print(f" - {record['label']}: {record['count']}") 

1100 

1101driver.close() 

1102 

1103print("\n" + "=" * 60) 

1104print("✓ MULTI-PATIENT NEO4J SETUP COMPLETE!") 

1105print("=" * 60) 

1106print("\nPatient Summary:") 

1107print(" 1. John Doe (52) - Type 2 Diabetes + Hypertension") 

1108print(" 2. Sarah Smith (58) - Heart Disease") 

1109print(" 3. Michael Johnson (34) - Asthma") 

1110print(" 4. Emily Davis (64) - Chronic Kidney Disease") 

1111print(" 5. Robert Brown (71) - Type 2 Diabetes + Hypertension + Heart Disease") 

1112print("\nAll patients have complete medical profiles including:") 

1113print(" ✓ Diseases with ICD-10 codes") 

1114print(" ✓ Medications with dosages and ATC codes") 

1115print(" ✓ Lab test results") 

1116print(" ✓ Wearable metrics and readings") 

1117print("=" * 60)