From deb2c83e3f91bd1fe49ec4bb41448d5ee842aa7c Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Sun, 10 Aug 2025 14:17:58 +0100 Subject: [PATCH 01/15] add admission type to interchange --- .../java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java index 79835a44f..b679b1381 100644 --- a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java +++ b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java @@ -27,6 +27,7 @@ public abstract class AdtMessage extends EmapOperationMessage { private String nhsNumber; private String visitNumber; private InterchangeValue modeOfArrival = InterchangeValue.unknown(); + private InterchangeValue ethnicGroup = InterchangeValue.unknown(); private InterchangeValue fullLocationString = InterchangeValue.unknown(); private InterchangeValue previousLocationString = InterchangeValue.unknown(); @@ -44,6 +45,8 @@ public abstract class AdtMessage extends EmapOperationMessage { private InterchangeValue patientTitle = InterchangeValue.unknown(); private InterchangeValue patientZipOrPostalCode = InterchangeValue.unknown(); + private InterchangeValue admissionType = InterchangeValue.unknown(); + /** * Ideally the time the event occurred, but uses the message date time as a backup. From 567f6d992b154a4e2f8f0157c30315e7dcffafba Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Sun, 10 Aug 2025 14:27:16 +0100 Subject: [PATCH 02/15] add tests for admission type --- .../rits/inform/datasources/ids/adt/TestMiscAdt.java | 10 ++++++++++ hl7-reader/src/test/resources/Adt/generic/A01.txt | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java index 9059fbe3f..39e05bf53 100644 --- a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java +++ b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java @@ -55,6 +55,16 @@ public void testInpatientAdmission() throws Exception { assertEquals(AdmitPatient.class.getName(), msg.getMessageType()); } + /** + * A01 basics admission type + */ + @Test + public void testAdmissionType() throws Exception { + AdtMessage msg = processSingleAdtMessage("Adt/generic/A01.txt"); + assertTrue(AdmitPatient.class.getAdmissionType(), msg.getAdmissionType()); + + } + /** * When a birth datetime is purely a date, should keep the original day, even when BST. * @throws Exception shouldn't happen diff --git a/hl7-reader/src/test/resources/Adt/generic/A01.txt b/hl7-reader/src/test/resources/Adt/generic/A01.txt index 45753c2dd..3a51954f9 100644 --- a/hl7-reader/src/test/resources/Adt/generic/A01.txt +++ b/hl7-reader/src/test/resources/Adt/generic/A01.txt @@ -2,6 +2,6 @@ MSH|^~\&|EPIC|UCLH|||20130211100052|IPUC|ADT^A01|31644|T|2.4|||AL|NE EVN|A01|20130211100052||ADT_EVENT|IPUC^COORDINATOR^INPATIENT^UNIT^^^^^UCLHS^^^^^UCHC|20130211100052 PID|1||40800000^^^MRENTR^MEDREC~9999999999^^^NHS^HN||ORANGE^BLOOD^^^^^D||19800101|F|||^^^^^ENGLAND^L|||||||||||Z2||||||||N PD1 -PV1|1|I|T42E^T42E BY02^BY02-17^U^R^^^^^^DEPID|Matern Ante|||HB^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID|Anaes||||Usual|||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||123412341234|SELF|||||||||||||||||||||Adm*Conf|||20130211100052 +PV1|1|I|T42E^T42E BY02^BY02-17^U^R^^^^^^DEPID|Matern Ante|Elective||HB^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID|Anaes||||Usual|||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||123412341234|SELF|||||||||||||||||||||Adm*Conf|||20130211100052 PV2|||||||||20130211||||Hospital Encounter||||||||||N|||||||||||||||Ambulance OBX|1|TX|AdminCode^ADMINISTRATIVE CATEGORY CODE|1|1|||||||||20130211 From e0b5d5234e6514ce3f0083a8126d835a2af35968 Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Sun, 10 Aug 2025 14:51:06 +0100 Subject: [PATCH 03/15] Revert "add tests for admission type" This reverts commit 567f6d992b154a4e2f8f0157c30315e7dcffafba. --- .../rits/inform/datasources/ids/adt/TestMiscAdt.java | 10 ---------- hl7-reader/src/test/resources/Adt/generic/A01.txt | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java index 39e05bf53..9059fbe3f 100644 --- a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java +++ b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestMiscAdt.java @@ -55,16 +55,6 @@ public void testInpatientAdmission() throws Exception { assertEquals(AdmitPatient.class.getName(), msg.getMessageType()); } - /** - * A01 basics admission type - */ - @Test - public void testAdmissionType() throws Exception { - AdtMessage msg = processSingleAdtMessage("Adt/generic/A01.txt"); - assertTrue(AdmitPatient.class.getAdmissionType(), msg.getAdmissionType()); - - } - /** * When a birth datetime is purely a date, should keep the original day, even when BST. * @throws Exception shouldn't happen diff --git a/hl7-reader/src/test/resources/Adt/generic/A01.txt b/hl7-reader/src/test/resources/Adt/generic/A01.txt index 3a51954f9..45753c2dd 100644 --- a/hl7-reader/src/test/resources/Adt/generic/A01.txt +++ b/hl7-reader/src/test/resources/Adt/generic/A01.txt @@ -2,6 +2,6 @@ MSH|^~\&|EPIC|UCLH|||20130211100052|IPUC|ADT^A01|31644|T|2.4|||AL|NE EVN|A01|20130211100052||ADT_EVENT|IPUC^COORDINATOR^INPATIENT^UNIT^^^^^UCLHS^^^^^UCHC|20130211100052 PID|1||40800000^^^MRENTR^MEDREC~9999999999^^^NHS^HN||ORANGE^BLOOD^^^^^D||19800101|F|||^^^^^ENGLAND^L|||||||||||Z2||||||||N PD1 -PV1|1|I|T42E^T42E BY02^BY02-17^U^R^^^^^^DEPID|Matern Ante|Elective||HB^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID|Anaes||||Usual|||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||123412341234|SELF|||||||||||||||||||||Adm*Conf|||20130211100052 +PV1|1|I|T42E^T42E BY02^BY02-17^U^R^^^^^^DEPID|Matern Ante|||HB^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID|Anaes||||Usual|||TYS^BADGER^HONEY^^^^^^CONS^^^^CONS~C1111111^BADGER^HONEY^^^^^^CDS^^^^CDS~752^BADGER^HONEY^^^^^^PROVID^^^^PROVID||123412341234|SELF|||||||||||||||||||||Adm*Conf|||20130211100052 PV2|||||||||20130211||||Hospital Encounter||||||||||N|||||||||||||||Ambulance OBX|1|TX|AdminCode^ADMINISTRATIVE CATEGORY CODE|1|1|||||||||20130211 From a1141cdd563b381b4a6cee929c57c5599d42f7e6 Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Sun, 10 Aug 2025 15:16:06 +0100 Subject: [PATCH 04/15] Adds admission type to PV1 segment parsing Adds functionality to extract and utilize the admission type information from the PV1 segment of HL7 messages. This includes defining a getter method and adding a unit test to verify the correct extraction of the admission type value.. --- .../inform/datasources/ids/hl7/parser/PV1Wrap.java | 11 +++++++++++ .../inform/datasources/ids/adt/TestAdtFields.java | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java index a5e0a805b..46f38a069 100644 --- a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java +++ b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java @@ -78,6 +78,17 @@ default String getFullLocationString() { return createLocationString(currentLocation); } + /** + * PV1-4: Admission type + * @return the admission type string + */ + default String getAdmissionType() { + if (!pv1SegmentExists()) { + return null; + } + return getAdmissionType(); + } + /** * PV1-6: Previous patient location concatenated together. * @return the previous location string diff --git a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestAdtFields.java b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestAdtFields.java index 1890ac992..258132136 100644 --- a/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestAdtFields.java +++ b/hl7-reader/src/test/java/uk/ac/ucl/rits/inform/datasources/ids/adt/TestAdtFields.java @@ -165,4 +165,9 @@ public void testDeathIndicator() { void testEthnicGroup() { assertEquals(InterchangeValue.buildFromHl7("Not Yet Asked"), msg.getEthnicGroup()); } + + @Test + void testAdmissionType() { + assertEquals(InterchangeValue.buildFromHl7("Elective"), msg.getAdmissionType()); + } } From 5f5d6ad51c952a273f22954c0cbab83c7025808e Mon Sep 17 00:00:00 2001 From: Sarah Keating Date: Mon, 11 Aug 2025 13:43:07 +0100 Subject: [PATCH 05/15] fixed check style --- .../ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java index 46f38a069..5a3d102d6 100644 --- a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java +++ b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java @@ -79,7 +79,7 @@ default String getFullLocationString() { } /** - * PV1-4: Admission type + * PV1-4: Admission type. * @return the admission type string */ default String getAdmissionType() { From 9bfe53f1633c36e5e6e728f8e0fc87e77519c09d Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Tue, 12 Aug 2025 15:53:04 +0100 Subject: [PATCH 06/15] Fixes infinate loop in hl7 parser and adds get admission type to the atd message factory --- .../ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java | 1 + .../ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java index 6590e9e3a..c7c05c88e 100644 --- a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java +++ b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java @@ -191,6 +191,7 @@ private AdtMessage buildAdtMessageSubclass(final PV1Wrap pv1Wrap, final Message case "A01": AdmitPatient admitPatient = new AdmitPatient(); admitPatient.setAdmissionDateTime(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionDateTime())); + admitPatient.setAdmissionType(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionType())); msg = admitPatient; break; case "A02": diff --git a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java index 5a3d102d6..18af1b545 100644 --- a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java +++ b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/hl7/parser/PV1Wrap.java @@ -86,7 +86,7 @@ default String getAdmissionType() { if (!pv1SegmentExists()) { return null; } - return getAdmissionType(); + return getPV1().getAdmissionType().getValue(); } /** From 351b16b7ef2919fc8cde33d824f63b02c0af70f5 Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Tue, 12 Aug 2025 16:59:36 +0100 Subject: [PATCH 07/15] Added test (failing) for emap star data sink --- .../inform/datasinks/emapstar/adt/TestAdtProcessingVisit.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/test/java/uk/ac/ucl/rits/inform/datasinks/emapstar/adt/TestAdtProcessingVisit.java b/core/src/test/java/uk/ac/ucl/rits/inform/datasinks/emapstar/adt/TestAdtProcessingVisit.java index 50157c238..0ffee6c96 100644 --- a/core/src/test/java/uk/ac/ucl/rits/inform/datasinks/emapstar/adt/TestAdtProcessingVisit.java +++ b/core/src/test/java/uk/ac/ucl/rits/inform/datasinks/emapstar/adt/TestAdtProcessingVisit.java @@ -60,6 +60,7 @@ public void testCreateNewAdmit() throws Exception { HospitalVisit visit = visits.get(0); assertNotNull(visit.getAdmissionDatetime()); + assertNotNull(visit.getAdmissionType()); assertNull(visit.getPresentationDatetime()); // no audit log should be added assertTrue(getAllAuditHospitalVisits().isEmpty()); From 6814fc39a6d12a41d4da631ef8cfcc79490f48ab Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Wed, 13 Aug 2025 08:20:23 +0100 Subject: [PATCH 08/15] Updated HL7 test message to match test --- hl7-reader/src/test/resources/Adt/TestForJunit.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hl7-reader/src/test/resources/Adt/TestForJunit.txt b/hl7-reader/src/test/resources/Adt/TestForJunit.txt index 71f24eb69..475be92e5 100644 --- a/hl7-reader/src/test/resources/Adt/TestForJunit.txt +++ b/hl7-reader/src/test/resources/Adt/TestForJunit.txt @@ -3,7 +3,7 @@ EVN|A01|201209211843|hello|ADM|U439966^WYYYY^CLLLL|201201011200\r PID|||50032556^^^MRENTR^MEDREC~this is a test NHS number||INTERFACES^Amendadmission^Longforenamesecondfn^^LADY||194001010000|F|||42 Rooo Fooo^^Blorp^^ZZ1 0AB^^^^West Yorkshire|||||||||||Z1||||||||N PD1|||HH|397982^LA^M^^^DR^^^^^^^^G9010000~B8^4 L H L^B^^^^^ZZ1 0AB^^01222 222222^^^^B8&1~404278^ME^AH^^^^^^^^^^^D2444444~V244444^DENTAL SURGERY^9 W^B^WEST YORKSHIRE^^^BD1 1AA^^^^^^V22222&3||14\r NK1|1|NIECEOFTHEINTERFACETESTPATIENTDDDDD^Firstnameoftheneiceofthetestpatient|N|1 LINE OF VERY LONG ADDRESSWITHINFO&2 LINE OF VERY LONG ADDRESSWITHALLF^3 LINE OF VERYLONG ADDRESSWITH3DETA&4 LINE OF VERYLONGADDRESSWITH4DETAI^5 LINE FOR CITY OR TOWN ENTEREDINTO^^Z1 1AA^^^^6 LINE OF VERYLONGADDRESS FOR COUNT|02033333333|02033333333X888888|N\r -PV1||I|H2HH^H203^H203-11|1~I|||399999^IS^DAV^^^PROF|397982^LA^M^^^DR~399999^IS^DAV^J^^PROF||41008||||19|||||1234TESTVISITNUM|||PLS-1|||||||||||||||||HH||2|||201209211840\r +PV1||I|H2HH^H203^H203-11|Elective|||399999^IS^DAV^^^PROF|397982^LA^M^^^DR~399999^IS^DAV^J^^PROF||41008||||19|||||1234TESTVISITNUM|||PLS-1|||||||||||||||||HH||2|||201209211840\r PV2||W|DETAILS FOR a08 AMEND aDMISSION MESSAGE||||||||||B\r OBX|1|ST|^^^ABC^Assign Benefits^PLW-HL7||||||||N|||20120921\r OBX|2|ST|^^^LRRF^Reg Required Flags^PLW-HL7||~~~~14~1||||||N\r From e2c45dcc41e69653172e6c2b103e598d1e42208c Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Wed, 13 Aug 2025 08:58:14 +0100 Subject: [PATCH 09/15] Add admission type to A01 message for test --- .../src/test/resources/AdtMessages/generic/A01.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/emap-interchange/src/test/resources/AdtMessages/generic/A01.yaml b/emap-interchange/src/test/resources/AdtMessages/generic/A01.yaml index 88da640e3..272117cc9 100644 --- a/emap-interchange/src/test/resources/AdtMessages/generic/A01.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/generic/A01.yaml @@ -18,6 +18,10 @@ fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" value: "T42E^T42E BY02^BY02-17" status: "SAVE" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + value: "Matern Ante" + status: "SAVE" patientBirthDate: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" From ee846381e8af74d747a92391d5e6a8c34cd60c65 Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Wed, 13 Aug 2025 12:53:20 +0100 Subject: [PATCH 10/15] Add admission type to hospital visit schema --- .../ac/ucl/rits/inform/informdb/identity/HospitalVisit.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/emap-star/emap-star/src/main/java/uk/ac/ucl/rits/inform/informdb/identity/HospitalVisit.java b/emap-star/emap-star/src/main/java/uk/ac/ucl/rits/inform/informdb/identity/HospitalVisit.java index a061eb819..e7cf8bd71 100644 --- a/emap-star/emap-star/src/main/java/uk/ac/ucl/rits/inform/informdb/identity/HospitalVisit.java +++ b/emap-star/emap-star/src/main/java/uk/ac/ucl/rits/inform/informdb/identity/HospitalVisit.java @@ -81,6 +81,11 @@ public class HospitalVisit extends TemporalCore Date: Wed, 13 Aug 2025 14:51:03 +0100 Subject: [PATCH 11/15] added admission type to admitpatient message and adder to VisitController --- .../emapstar/controllers/VisitController.java | 13 ++++++++++++- .../rits/inform/interchange/adt/AdmitPatient.java | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/uk/ac/ucl/rits/inform/datasinks/emapstar/controllers/VisitController.java b/core/src/main/java/uk/ac/ucl/rits/inform/datasinks/emapstar/controllers/VisitController.java index 3469f99dc..772fb1fc7 100644 --- a/core/src/main/java/uk/ac/ucl/rits/inform/datasinks/emapstar/controllers/VisitController.java +++ b/core/src/main/java/uk/ac/ucl/rits/inform/datasinks/emapstar/controllers/VisitController.java @@ -138,7 +138,7 @@ public HospitalVisit updateOrCreateHospitalVisit( Instant validFrom = msg.bestGuessAtValidFrom(); RowState visitState = getOrCreateHospitalVisit( msg.getVisitNumber(), mrn, msg.getSourceSystem(), validFrom, storedFrom); - + addAdmissionType(msg, visitState); if (visitShouldBeUpdated(validFrom, msg.getSourceSystem(), visitState)) { updateGenericData(msg, visitState); @@ -219,6 +219,17 @@ private void addAdmissionDateTime(final AdmissionDateTime msg, RowState visitState) { + HospitalVisit visit = visitState.getEntity(); + visitState.assignInterchangeValue(msg.getAdmissionType(), visit.getAdmissionType(), visit::setAdmissionType); + } + + /** * Delete admission specific information. * @param msg cancellation message diff --git a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdmitPatient.java b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdmitPatient.java index 832d82cd6..e5e72e773 100644 --- a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdmitPatient.java +++ b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdmitPatient.java @@ -18,6 +18,7 @@ @ToString(callSuper = true) public class AdmitPatient extends AdtMessage implements AdmissionDateTime { private InterchangeValue admissionDateTime = InterchangeValue.unknown(); + private InterchangeValue admissionType = InterchangeValue.unknown(); @Override From 3d7d5aa923acca17d0721a90e60a664c65f0cd3a Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Thu, 4 Sep 2025 11:49:45 +0100 Subject: [PATCH 12/15] See what happens if we remove admissiontype from generic message --- .../java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java index b679b1381..5ed2784b1 100644 --- a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java +++ b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java @@ -45,8 +45,6 @@ public abstract class AdtMessage extends EmapOperationMessage { private InterchangeValue patientTitle = InterchangeValue.unknown(); private InterchangeValue patientZipOrPostalCode = InterchangeValue.unknown(); - private InterchangeValue admissionType = InterchangeValue.unknown(); - /** * Ideally the time the event occurred, but uses the message date time as a backup. From d748f9c6b44f8f3dc9f2c8827d72e930f6be3e33 Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Wed, 24 Sep 2025 12:42:52 +0100 Subject: [PATCH 13/15] Revert "See what happens if we remove admissiontype from generic message" This reverts commit 3d7d5aa923acca17d0721a90e60a664c65f0cd3a. --- .../java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java index 5ed2784b1..b679b1381 100644 --- a/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java +++ b/emap-interchange/src/main/java/uk/ac/ucl/rits/inform/interchange/adt/AdtMessage.java @@ -45,6 +45,8 @@ public abstract class AdtMessage extends EmapOperationMessage { private InterchangeValue patientTitle = InterchangeValue.unknown(); private InterchangeValue patientZipOrPostalCode = InterchangeValue.unknown(); + private InterchangeValue admissionType = InterchangeValue.unknown(); + /** * Ideally the time the event occurred, but uses the message date time as a backup. From 60cbc3fcf6022afde9875b2bb824818dc9aa76ab Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Wed, 1 Oct 2025 16:53:29 +0100 Subject: [PATCH 14/15] Try adding admission type to other message types --- .../ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java index 980136f0a..0e5805178 100644 --- a/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java +++ b/hl7-reader/src/main/java/uk/ac/ucl/rits/inform/datasources/ids/AdtMessageFactory.java @@ -199,11 +199,13 @@ private AdtMessage buildAdtMessageSubclass(final PV1Wrap pv1Wrap, final Message case "A07": TransferPatient transferPatient = new TransferPatient(); transferPatient.setAdmissionDateTime(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionDateTime())); + transferPatient.setAdmissionType(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionType())); msg = transferPatient; break; case "A03": DischargePatient dischargeMsg = new DischargePatient(); dischargeMsg.setAdmissionDateTime(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionDateTime())); + dischargeMsg.setAdmissionType(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionType())); dischargeMsg.setDischargeDateTime(pv1Wrap.getDischargeDateTime()); dischargeMsg.setDischargeDisposition(pv1Wrap.getDischargeDisposition()); dischargeMsg.setDischargeLocation(pv1Wrap.getDischargeLocation()); @@ -215,6 +217,7 @@ private AdtMessage buildAdtMessageSubclass(final PV1Wrap pv1Wrap, final Message } RegisterPatient registerPatient = new RegisterPatient(); registerPatient.setPresentationDateTime(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionDateTime())); + registerPatient.setAdmissionType(InterchangeValue.buildFromHl7(pv1Wrap.getAdmissionType())); msg = registerPatient; break; case "A08": From 43a408a9159da597c322240c12f2d3ba7e0688b1 Mon Sep 17 00:00:00 2001 From: Stephen Thompson Date: Thu, 2 Oct 2025 10:14:09 +0100 Subject: [PATCH 15/15] Update adt message yaml to reflect that they now contain admission type --- .../resources/AdtMessages/Location/CancelAdmit/05_A03.yaml | 4 ++++ .../AdtMessages/Location/CancelDischarge/03_A03.yaml | 4 ++++ .../AdtMessages/Location/CancelDischarge/05_A03.yaml | 4 ++++ .../AdtMessages/Location/DuplicateSimple/04_A03.yaml | 4 ++++ .../src/test/resources/AdtMessages/Location/Moves/08_A03.yaml | 4 ++++ .../src/test/resources/AdtMessages/generic/A02.yaml | 4 ++++ .../src/test/resources/AdtMessages/generic/A04.yaml | 4 ++++ .../src/test/resources/AdtMessages/generic/A06.yaml | 4 ++++ 8 files changed, 32 insertions(+) diff --git a/emap-interchange/src/test/resources/AdtMessages/Location/CancelAdmit/05_A03.yaml b/emap-interchange/src/test/resources/AdtMessages/Location/CancelAdmit/05_A03.yaml index df2d72247..0ba608258 100644 --- a/emap-interchange/src/test/resources/AdtMessages/Location/CancelAdmit/05_A03.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/Location/CancelAdmit/05_A03.yaml @@ -13,6 +13,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T13:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/03_A03.yaml b/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/03_A03.yaml index 4dcc5ae8c..422ee1854 100644 --- a/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/03_A03.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/03_A03.yaml @@ -13,6 +13,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T11:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/05_A03.yaml b/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/05_A03.yaml index 12eba4d40..4fd265f81 100644 --- a/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/05_A03.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/Location/CancelDischarge/05_A03.yaml @@ -13,6 +13,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T11:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/Location/DuplicateSimple/04_A03.yaml b/emap-interchange/src/test/resources/AdtMessages/Location/DuplicateSimple/04_A03.yaml index 23c76ea56..f562e0e2c 100644 --- a/emap-interchange/src/test/resources/AdtMessages/Location/DuplicateSimple/04_A03.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/Location/DuplicateSimple/04_A03.yaml @@ -13,6 +13,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T12:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/Location/Moves/08_A03.yaml b/emap-interchange/src/test/resources/AdtMessages/Location/Moves/08_A03.yaml index bfddb8b38..2c68f418b 100644 --- a/emap-interchange/src/test/resources/AdtMessages/Location/Moves/08_A03.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/Location/Moves/08_A03.yaml @@ -13,6 +13,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T10:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/generic/A02.yaml b/emap-interchange/src/test/resources/AdtMessages/generic/A02.yaml index 43b1b8af5..6c6198edf 100644 --- a/emap-interchange/src/test/resources/AdtMessages/generic/A02.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/generic/A02.yaml @@ -10,6 +10,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2012-10-17T11:24:53Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Emerg Other" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/generic/A04.yaml b/emap-interchange/src/test/resources/AdtMessages/generic/A04.yaml index 0b406bc03..95495d3e3 100644 --- a/emap-interchange/src/test/resources/AdtMessages/generic/A04.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/generic/A04.yaml @@ -10,6 +10,10 @@ presentationDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2013-02-11T10:00:52Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Matern Ante" fullLocationString: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" diff --git a/emap-interchange/src/test/resources/AdtMessages/generic/A06.yaml b/emap-interchange/src/test/resources/AdtMessages/generic/A06.yaml index 2f13fc145..48a25e3d4 100644 --- a/emap-interchange/src/test/resources/AdtMessages/generic/A06.yaml +++ b/emap-interchange/src/test/resources/AdtMessages/generic/A06.yaml @@ -10,6 +10,10 @@ admissionDateTime: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE" value: "2020-04-01T18:30:00Z" +admissionType: + "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" + status: "SAVE" + value: "Emergency" modeOfArrival: "@class": "uk.ac.ucl.rits.inform.interchange.InterchangeValue" status: "SAVE"