001/*- 002 * #%L 003 * Smile CDR - CDR 004 * %% 005 * Copyright (C) 2016 - 2025 Smile CDR, Inc. 006 * %% 007 * All rights reserved. 008 * #L% 009 */ 010package ca.cdr.api.pub.hl7v2.common.abstraction; 011 012import ca.uhn.hl7v2.HL7Exception; 013import ca.uhn.hl7v2.model.AbstractMessage; 014import ca.uhn.hl7v2.model.v25.message.ADT_A01; 015import ca.uhn.hl7v2.model.v25.message.ADT_A02; 016import ca.uhn.hl7v2.model.v25.message.ADT_A03; 017import ca.uhn.hl7v2.model.v25.message.ADT_A05; 018import ca.uhn.hl7v2.model.v25.message.ADT_A06; 019import ca.uhn.hl7v2.model.v25.message.ADT_A09; 020import ca.uhn.hl7v2.model.v25.message.ADT_A12; 021import ca.uhn.hl7v2.model.v25.message.ADT_A15; 022import ca.uhn.hl7v2.model.v25.message.ADT_A17; 023import ca.uhn.hl7v2.model.v25.message.ADT_A21; 024import ca.uhn.hl7v2.model.v25.message.ADT_A24; 025import ca.uhn.hl7v2.model.v25.message.ADT_A30; 026import ca.uhn.hl7v2.model.v25.message.ADT_A38; 027import ca.uhn.hl7v2.model.v25.message.ADT_A39; 028import ca.uhn.hl7v2.model.v25.message.ADT_A45; 029import ca.uhn.hl7v2.model.v25.message.ADT_A60; 030import ca.uhn.hl7v2.model.v25.message.BAR_P12; 031import ca.uhn.hl7v2.model.v25.message.DFT_P03; 032import ca.uhn.hl7v2.model.v25.message.MDM_T01; 033import ca.uhn.hl7v2.model.v25.message.MDM_T02; 034import ca.uhn.hl7v2.model.v25.message.OMG_O19; 035import ca.uhn.hl7v2.model.v25.message.ORM_O01; 036import ca.uhn.hl7v2.model.v25.message.ORU_R01; 037import ca.uhn.hl7v2.model.v25.message.RAS_O17; 038import ca.uhn.hl7v2.model.v25.message.RDE_O11; 039import ca.uhn.hl7v2.model.v25.message.VXU_V04; 040 041/** 042 * Wraps the relevant portion of an HL7 V2 message to an {@link IPatientMessage} 043 */ 044public class PatientMessageFactory { 045 046 public IPatientMessage asPatientMessage(AbstractMessage theMsg) throws HL7Exception { 047 if (theMsg instanceof ADT_A01 msg) { 048 return asPatientMessage(msg); 049 } else if (theMsg instanceof ADT_A02 msg) { 050 return asPatientMessage(msg); 051 } else if (theMsg instanceof ADT_A03 msg) { 052 return asPatientMessage(msg); 053 } else if (theMsg instanceof ADT_A05 msg) { 054 return asPatientMessage(msg); 055 } else if (theMsg instanceof ADT_A06 msg) { 056 return asPatientMessage(msg); 057 } else if (theMsg instanceof ADT_A09 msg) { 058 return asPatientMessage(msg); 059 } else if (theMsg instanceof ADT_A12 msg) { 060 return asPatientMessage(msg); 061 } else if (theMsg instanceof ADT_A15 msg) { 062 return asPatientMessage(msg); 063 } else if (theMsg instanceof ADT_A17 msg) { 064 return asPatientMessage(msg); 065 } else if (theMsg instanceof ADT_A21 msg) { 066 return asPatientMessage(msg); 067 } else if (theMsg instanceof ADT_A24 msg) { 068 return asPatientMessage(msg); 069 } else if (theMsg instanceof ADT_A30 msg) { 070 return asPatientMessage(msg); 071 } else if (theMsg instanceof ADT_A38 msg) { 072 return asPatientMessage(msg); 073 } else if (theMsg instanceof ADT_A39 msg) { 074 return asPatientMessage(msg); 075 } else if (theMsg instanceof ADT_A45 msg) { 076 return asPatientMessage(msg); 077 } else if (theMsg instanceof ADT_A60 msg) { 078 return asPatientMessage(msg); 079 } else if (theMsg instanceof DFT_P03 msg) { 080 return asPatientMessage(msg); 081 } else if (theMsg instanceof OMG_O19 msg) { 082 return asPatientMessage(msg); 083 } else if (theMsg instanceof ORM_O01 msg) { 084 return asPatientMessage(msg); 085 } else if (theMsg instanceof ORU_R01 msg) { 086 return asPatientMessage(msg); 087 } else if (theMsg instanceof RAS_O17 msg) { 088 return asPatientMessage(msg); 089 } else if (theMsg instanceof RDE_O11 msg) { 090 return asPatientMessage(msg); 091 } else if (theMsg instanceof VXU_V04 msg) { 092 return asPatientMessage(msg); 093 } else if (theMsg instanceof BAR_P12 msg) { 094 return asPatientMessage(msg); 095 } else if (theMsg instanceof MDM_T01 msg) { 096 return asPatientMessage(msg); 097 } else if (theMsg instanceof MDM_T02 msg) { 098 return asPatientMessage(msg); 099 } else { 100 return null; 101 } 102 } 103 104 private IPatientMessage asPatientMessage(DFT_P03 theMsg) throws HL7Exception { 105 return new PatientMessage() 106 .setPID(theMsg.getPID()) 107 .setPD1(theMsg.getPD1()) 108 .setIAM(null) 109 .setNK1(null, null) 110 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 111 } 112 113 private IPatientMessage asPatientMessage(ORU_R01 theMsg) throws HL7Exception { 114 return new PatientMessage() 115 .setPID(theMsg.getPATIENT_RESULT().getPATIENT().getPID()) 116 .setPD1(theMsg.getPATIENT_RESULT().getPATIENT().getPD1()) 117 .setIAM(null) 118 .setNK1(theMsg.getPATIENT_RESULT().getPATIENT().getNK1All(), () -> theMsg.getPATIENT_RESULT() 119 .getPATIENT() 120 .insertNK1(theMsg.getPATIENT_RESULT().getPATIENT().getNK1Reps())) 121 .setROL(null, null); 122 } 123 124 private IPatientMessage asPatientMessage(RAS_O17 theMsg) { 125 return new PatientMessage() 126 .setPID(theMsg.getPATIENT().getPID()) 127 .setPD1(theMsg.getPATIENT().getPD1()) 128 .setIAM(null) 129 .setNK1(null, null) 130 .setROL(null, null); 131 } 132 133 private IPatientMessage asPatientMessage(RDE_O11 theMsg) { 134 return new PatientMessage() 135 .setPID(theMsg.getPATIENT().getPID()) 136 .setPD1(theMsg.getPATIENT().getPD1()) 137 .setIAM(null) 138 .setNK1(null, null) 139 .setROL(null, null); 140 } 141 142 private IPatientMessage asPatientMessage(ADT_A01 theMsg) throws HL7Exception { 143 return new PatientMessage() 144 .setPID(theMsg.getPID()) 145 .setPD1(theMsg.getPD1()) 146 .setIAM(null) 147 .setNK1(theMsg.getNK1All(), () -> theMsg.insertNK1(theMsg.getNK1Reps())) 148 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 149 } 150 151 private IPatientMessage asPatientMessage(ADT_A02 theMsg) throws HL7Exception { 152 return new PatientMessage() 153 .setPID(theMsg.getPID()) 154 .setPD1(theMsg.getPD1()) 155 .setIAM(null) 156 .setNK1(null, null) 157 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 158 } 159 160 private IPatientMessage asPatientMessage(ADT_A03 theMsg) throws HL7Exception { 161 return new PatientMessage() 162 .setPID(theMsg.getPID()) 163 .setPD1(theMsg.getPD1()) 164 .setIAM(null) 165 .setNK1(theMsg.getNK1All(), () -> theMsg.insertNK1(theMsg.getNK1Reps())) 166 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 167 } 168 169 private IPatientMessage asPatientMessage(ADT_A05 theMsg) throws HL7Exception { 170 return new PatientMessage() 171 .setPID(theMsg.getPID()) 172 .setPD1(theMsg.getPD1()) 173 .setIAM(null) 174 .setNK1(theMsg.getNK1All(), () -> theMsg.insertNK1(theMsg.getNK1Reps())) 175 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 176 } 177 178 private IPatientMessage asPatientMessage(ADT_A06 theMsg) throws HL7Exception { 179 return new PatientMessage() 180 .setPID(theMsg.getPID()) 181 .setPD1(theMsg.getPD1()) 182 .setIAM(null) 183 .setNK1(theMsg.getNK1All(), () -> theMsg.insertNK1(theMsg.getNK1Reps())) 184 .setROL(theMsg.getROLAll(), () -> theMsg.insertROL(theMsg.getROLReps())); 185 } 186 187 private IPatientMessage asPatientMessage(ADT_A09 theMsg) { 188 return new PatientMessage() 189 .setPID(theMsg.getPID()) 190 .setPD1(theMsg.getPD1()) 191 .setIAM(null) 192 .setNK1(null, null) 193 .setROL(null, null); 194 } 195 196 private IPatientMessage asPatientMessage(ADT_A12 theMsg) { 197 return new PatientMessage() 198 .setPID(theMsg.getPID()) 199 .setPD1(theMsg.getPD1()) 200 .setIAM(null) 201 .setNK1(null, null) 202 .setROL(null, null); 203 } 204 205 private IPatientMessage asPatientMessage(ADT_A17 theMsg) { 206 return new PatientMessage() 207 .setPID(theMsg.getPID()) 208 .setPD1(theMsg.getPD1()) 209 .setIAM(null) 210 .setNK1(null, null) 211 .setROL(null, null); 212 } 213 214 private IPatientMessage asPatientMessage(ADT_A21 theMsg) { 215 return new PatientMessage() 216 .setPID(theMsg.getPID()) 217 .setPD1(theMsg.getPD1()) 218 .setIAM(null) 219 .setNK1(null, null) 220 .setROL(null, null); 221 } 222 223 private IPatientMessage asPatientMessage(ADT_A38 theMsg) { 224 return new PatientMessage() 225 .setPID(theMsg.getPID()) 226 .setPD1(theMsg.getPD1()) 227 .setIAM(null) 228 .setNK1(null, null) 229 .setROL(null, null); 230 } 231 232 private IPatientMessage asPatientMessage(ADT_A30 theMsg) { 233 return new PatientMessage() 234 .setPID(theMsg.getPID()) 235 .setPD1(theMsg.getPD1()) 236 .setIAM(null) 237 .setNK1(null, null) 238 .setROL(null, null); 239 } 240 241 private IPatientMessage asPatientMessage(ADT_A60 theMsg) throws HL7Exception { 242 return new PatientMessage() 243 .setPID(theMsg.getPID()) 244 // No PD1 in this structure. 245 .setPD1(null) 246 .setIAM(theMsg.getIAMAll()) 247 .setNK1(null, null) 248 .setROL(null, null); 249 } 250 251 private IPatientMessage asPatientMessage(ADT_A24 theMsg) { 252 return new PatientMessage() 253 .setPID(theMsg.getPID()) 254 .setPD1(theMsg.getPD1()) 255 .setIAM(null) 256 .setNK1(null, null) 257 .setROL(null, null); 258 } 259 260 private IPatientMessage asPatientMessage(ADT_A15 theMsg) { 261 return new PatientMessage() 262 .setPID(theMsg.getPID()) 263 .setPD1(theMsg.getPD1()) 264 .setIAM(null) 265 .setNK1(null, null) 266 .setROL(null, null); 267 } 268 269 private IPatientMessage asPatientMessage(ADT_A39 theMsg) { 270 return new PatientMessage() 271 // PATIENT has multiple reps actually.. need to deal with that 272 // if we ever implement A39 273 .setPID(theMsg.getPATIENT().getPID()) 274 .setPD1(theMsg.getPATIENT().getPD1()) 275 .setIAM(null) 276 .setNK1(null, null) 277 .setROL(null, null); 278 } 279 280 private IPatientMessage asPatientMessage(ADT_A45 theMsg) { 281 return new PatientMessage() 282 .setPID(theMsg.getPID()) 283 .setPD1(theMsg.getPD1()) 284 .setIAM(null) 285 .setNK1(null, null) 286 .setROL(null, null); 287 } 288 289 private IPatientMessage asPatientMessage(ORM_O01 theMsg) { 290 return new PatientMessage() 291 .setPID(theMsg.getPATIENT().getPID()) 292 .setIAM(null) 293 .setPD1(theMsg.getPATIENT().getPD1()) 294 .setNK1(null, null) 295 .setROL(null, null); 296 } 297 298 private IPatientMessage asPatientMessage(OMG_O19 theMsg) { 299 return new PatientMessage() 300 .setPID(theMsg.getPATIENT().getPID()) 301 .setIAM(null) 302 .setPD1(theMsg.getPATIENT().getPD1()) 303 .setNK1(null, null) 304 .setROL(null, null); 305 } 306 307 private IPatientMessage asPatientMessage(VXU_V04 theMsg) { 308 return new PatientMessage() 309 .setPID(theMsg.getPID()) 310 .setPD1(theMsg.getPD1()) 311 .setIAM(null) 312 .setNK1(null, null) 313 .setROL(null, null); 314 } 315 316 private IPatientMessage asPatientMessage(BAR_P12 theMsg) { 317 return new PatientMessage() 318 .setPID(theMsg.getPID()) 319 .setPD1(null) 320 .setIAM(null) 321 .setNK1(null, null) 322 .setROL(null, null); 323 } 324 325 private IPatientMessage asPatientMessage(MDM_T01 theMsg) { 326 return new PatientMessage().setPID(theMsg.getPID()); 327 } 328 329 private IPatientMessage asPatientMessage(MDM_T02 theMsg) { 330 return new PatientMessage().setPID(theMsg.getPID()); 331 } 332}