diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/config/KafkaProducerConfig.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/config/KafkaProducerConfig.java index c86218d39..eb81015b1 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/config/KafkaProducerConfig.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/config/KafkaProducerConfig.java @@ -23,6 +23,7 @@ public ProducerFactory producerFactory() { config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + return new DefaultKafkaProducerFactory<>(config); } diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/constant/KafkaHeaderValue.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/constant/KafkaHeaderValue.java index 788f3362c..2663d8c4e 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/constant/KafkaHeaderValue.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/constant/KafkaHeaderValue.java @@ -14,4 +14,6 @@ private KafkaHeaderValue() { public static final String MESSAGE_VERSION = "MESSAGE_VERSION"; public static final String MESSAGE_OPERATION = "MESSAGE_OPERATION"; + public static final String DATA_PROCESSING_ENABLE = "DATA_PROCESSING_ENABLE"; + public static final String DATA_TYPE = "DATA_TYPE"; } \ No newline at end of file diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaConsumerService.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaConsumerService.java index 6490964da..6b64ec28e 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaConsumerService.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaConsumerService.java @@ -34,6 +34,7 @@ import jakarta.xml.bind.JAXBException; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.binary.Base64; import org.apache.kafka.common.errors.SerializationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -185,14 +186,15 @@ public KafkaConsumerService( ) public void handleMessageForRawElr(String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, - @Header(KafkaHeaderValue.MESSAGE_VALIDATION_ACTIVE) String messageValidationActive) throws DuplicateHL7FileFoundException, DiHL7Exception { + @Header(KafkaHeaderValue.MESSAGE_VALIDATION_ACTIVE) String messageValidationActive, + @Header(KafkaHeaderValue.DATA_PROCESSING_ENABLE) String dataProcessingEnable) throws DuplicateHL7FileFoundException, DiHL7Exception { log.debug(topicDebugLog, message, topic); boolean hl7ValidationActivated = false; if (messageValidationActive != null && messageValidationActive.equalsIgnoreCase("true")) { hl7ValidationActivated = true; } - validationHandler(message, hl7ValidationActivated); + validationHandler(message, hl7ValidationActivated, dataProcessingEnable); } /** @@ -226,9 +228,10 @@ public void handleMessageForRawElr(String message, ) @KafkaListener(topics = "${kafka.validation.topic}") public void handleMessageForValidatedElr(String message, - @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) throws ConversionPrepareException { + @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, + @Header(KafkaHeaderValue.DATA_PROCESSING_ENABLE) String dataProcessingEnable) throws ConversionPrepareException { log.debug(topicDebugLog, message, topic); - preparationForConversionHandler(message); + preparationForConversionHandler(message, dataProcessingEnable); } /** @@ -237,9 +240,10 @@ public void handleMessageForValidatedElr(String message, @KafkaListener(topics = "${kafka.xml-conversion-prep.topic}") public void handleMessageForXmlConversionElr(String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, - @Header(KafkaHeaderValue.MESSAGE_OPERATION) String operation) { + @Header(KafkaHeaderValue.MESSAGE_OPERATION) String operation, + @Header(KafkaHeaderValue.DATA_PROCESSING_ENABLE) String dataProcessingEnable) { log.debug(topicDebugLog, message, topic); - xmlConversionHandler(message, operation); + xmlConversionHandler(message, operation, dataProcessingEnable); } /** @@ -326,7 +330,7 @@ public void handleDltManual( } //region DLT HANDLER - @DltHandler + @DltHandler() public void handleDlt( String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, @@ -419,90 +423,105 @@ private String getDltErrorSource(String incomingTopic) { return erroredSource; } - private void preparationForConversionHandler(String message) throws ConversionPrepareException { + private void preparationForConversionHandler(String message, String dataProcessingEnable) throws ConversionPrepareException { Optional validatedElrResponse = this.iValidatedELRRepository.findById(message); if(validatedElrResponse.isPresent()) { - kafkaProducerService.sendMessagePreparationTopic(validatedElrResponse.get(), prepXmlTopic, TopicPreparationType.XML, 0); - kafkaProducerService.sendMessagePreparationTopic(validatedElrResponse.get(), prepFhirTopic, TopicPreparationType.FHIR, 0); + kafkaProducerService.sendMessagePreparationTopic(validatedElrResponse.get(), prepXmlTopic, TopicPreparationType.XML, 0, dataProcessingEnable); + kafkaProducerService.sendMessagePreparationTopic(validatedElrResponse.get(), prepFhirTopic, TopicPreparationType.FHIR, 0, dataProcessingEnable); } else { throw new ConversionPrepareException("Validation ELR Record Not Found"); } } - private void xmlConversionHandler(String message, String operation) { - // Update: changed method to async process, intensive process in this method cause consumer lagging, delay and strange behavior - // TODO: considering breaking down this logic (NOTE) //NOSONAR - // PROCESS as follow: - // - HL7 -> XML - // xml conversion can be broke down into multiple smaller pipeline - // - Saving record to status table can also be broke to downstream pipeline - CompletableFuture.runAsync(() -> { - log.debug("Received message id will be retrieved from db and associated hl7 will be converted to xml"); - - String hl7Msg = ""; - try { - if (operation.equalsIgnoreCase(EnumKafkaOperation.INJECTION.name())) { - Optional validatedElrResponse = this.iValidatedELRRepository.findById(message); - hl7Msg = validatedElrResponse.map(ValidatedELRModel::getRawMessage).orElse(""); + /** + * make this public so we can add unit test for now. + * we need to implementation interface pattern for NBS convert and transformation classes. it better for unit testing + * */ + public void xmlConversionHandlerProcessing(String message, String operation, String dataProcessingEnable) { + String hl7Msg = ""; + try { + if (operation.equalsIgnoreCase(EnumKafkaOperation.INJECTION.name())) { + Optional validatedElrResponse = this.iValidatedELRRepository.findById(message); + hl7Msg = validatedElrResponse.map(ValidatedELRModel::getRawMessage).orElse(""); + } else { + Optional response = this.elrDeadLetterRepository.findById(message); + if (response.isPresent()) { + var validMessage = iHl7v2Validator.messageStringValidation(response.get().getMessage()); + validMessage = iHl7v2Validator.processFhsMessage(validMessage); + hl7Msg = validMessage; } else { - Optional response = this.elrDeadLetterRepository.findById(message); - if (response.isPresent()) { - var validMessage = iHl7v2Validator.messageStringValidation(response.get().getMessage()); - validMessage = iHl7v2Validator.processFhsMessage(validMessage); - hl7Msg = validMessage; - } else { - throw new XmlConversionException(errorDltMessage); - } + throw new XmlConversionException(errorDltMessage); } - HL7ParsedMessage parsedMessage = Hl7ToRhapsodysXmlConverter.getInstance().parsedStringToHL7(hl7Msg); - String rhapsodyXml = Hl7ToRhapsodysXmlConverter.getInstance().convert(message, parsedMessage); + } + HL7ParsedMessage parsedMessage = Hl7ToRhapsodysXmlConverter.getInstance().parsedStringToHL7(hl7Msg); + String rhapsodyXml = Hl7ToRhapsodysXmlConverter.getInstance().convert(message, parsedMessage); - // Modified from debug ==> info to capture xml for analysis. - // Please leave below at "info" level for the time being, before going live, - // this will be changed to debug - log.info("rhapsodyXml: {}", rhapsodyXml); + // Modified from debug ==> info to capture xml for analysis. + // Please leave below at "info" level for the time being, before going live, + // this will be changed to debug + log.info("rhapsodyXml: {}", rhapsodyXml); - NbsInterfaceModel nbsInterfaceModel = nbsRepositoryServiceProvider.saveXmlMessage(message, rhapsodyXml, parsedMessage); + boolean dataProcessingApplied = Boolean.parseBoolean(dataProcessingEnable); + NbsInterfaceModel nbsInterfaceModel = nbsRepositoryServiceProvider.saveXmlMessage(message, rhapsodyXml, parsedMessage, dataProcessingApplied); - customMetricsBuilder.incrementXmlConversionRequested(); - // Once the XML is saved to the NBS_Interface table, we get the ID to save it - // in the Data Ingestion elr_record_status_id table, so that we can get the status - // of the record straight-forward from the NBS_Interface table. + customMetricsBuilder.incrementXmlConversionRequested(); + // Once the XML is saved to the NBS_Interface table, we get the ID to save it + // in the Data Ingestion elr_record_status_id table, so that we can get the status + // of the record straight-forward from the NBS_Interface table. - if(nbsInterfaceModel == null) { - customMetricsBuilder.incrementXmlConversionRequestedFailure(); - } - else { - customMetricsBuilder.incrementXmlConversionRequestedSuccess(); - ReportStatusIdData reportStatusIdData = new ReportStatusIdData(); - Optional validatedELRModel = iValidatedELRRepository.findById(message); - reportStatusIdData.setRawMessageId(validatedELRModel.get().getRawId()); - reportStatusIdData.setNbsInterfaceUid(nbsInterfaceModel.getNbsInterfaceUid()); - reportStatusIdData.setCreatedBy(convertedToXmlTopic); - reportStatusIdData.setUpdatedBy(convertedToXmlTopic); - - var timestamp = getCurrentTimeStamp(); - reportStatusIdData.setCreatedOn(timestamp); - reportStatusIdData.setUpdatedOn(timestamp); - iReportStatusRepository.save(reportStatusIdData); - } + if(nbsInterfaceModel == null) { + customMetricsBuilder.incrementXmlConversionRequestedFailure(); + } + else { + customMetricsBuilder.incrementXmlConversionRequestedSuccess(); + ReportStatusIdData reportStatusIdData = new ReportStatusIdData(); + Optional validatedELRModel = iValidatedELRRepository.findById(message); + reportStatusIdData.setRawMessageId(validatedELRModel.get().getRawId()); + reportStatusIdData.setNbsInterfaceUid(nbsInterfaceModel.getNbsInterfaceUid()); + reportStatusIdData.setCreatedBy(convertedToXmlTopic); + reportStatusIdData.setUpdatedBy(convertedToXmlTopic); + + var timestamp = getCurrentTimeStamp(); + reportStatusIdData.setCreatedOn(timestamp); + reportStatusIdData.setUpdatedOn(timestamp); + iReportStatusRepository.save(reportStatusIdData); + } + + if (dataProcessingApplied) { + Gson gson = new Gson(); + String strGson = gson.toJson(nbsInterfaceModel); - kafkaProducerService.sendMessageAfterConvertedToXml(rhapsodyXml, convertedToXmlTopic, 0); - - } catch (Exception e) { - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - e.printStackTrace(pw); - String stackTrace = sw.toString(); - // Handle any exceptions here - kafkaProducerService.sendMessageDlt( - message, "xml_prep_dlt_manual", 0 , - stackTrace,prepXmlTopic - ); + kafkaProducerService.sendMessageAfterConvertedToXml(strGson, "elr_processing_micro", 0); //NOSONAR + } else { + kafkaProducerService.sendMessageAfterConvertedToXml(nbsInterfaceModel.getNbsInterfaceUid().toString(), convertedToXmlTopic, 0); } + + } catch (Exception e) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + String stackTrace = sw.toString(); + // Handle any exceptions here + kafkaProducerService.sendMessageDlt( + message, "xml_prep_dlt_manual", 0 , + stackTrace,prepXmlTopic + ); + } + } + private void xmlConversionHandler(String message, String operation, String dataProcessingEnable) { + + // Update: changed method to async process, intensive process in this method cause consumer lagging, delay and strange behavior + // TODO: considering breaking down this logic (NOTE) //NOSONAR + // PROCESS as follow: + // - HL7 -> XML + // xml conversion can be broke down into multiple smaller pipeline + // - Saving record to status table can also be broke to downstream pipeline + CompletableFuture.runAsync(() -> { + log.debug("Received message id will be retrieved from db and associated hl7 will be converted to xml"); + xmlConversionHandlerProcessing(message, operation, dataProcessingEnable); }); } - private void validationHandler(String message, boolean hl7ValidationActivated) throws DuplicateHL7FileFoundException, DiHL7Exception { + private void validationHandler(String message, boolean hl7ValidationActivated, String dataProcessingEnable) throws DuplicateHL7FileFoundException, DiHL7Exception { Optional rawElrResponse = this.iRawELRRepository.findById(message); RawERLModel elrModel; if (!rawElrResponse.isEmpty()) { @@ -525,7 +544,7 @@ private void validationHandler(String message, boolean hl7ValidationActivated) t // Duplication check iHL7DuplicateValidator.validateHL7Document(hl7ValidatedModel); saveValidatedELRMessage(hl7ValidatedModel); - kafkaProducerService.sendMessageAfterValidatingMessage(hl7ValidatedModel, validatedTopic, 0); + kafkaProducerService.sendMessageAfterValidatingMessage(hl7ValidatedModel, validatedTopic, 0, dataProcessingEnable); break; case KafkaHeaderValue.MESSAGE_TYPE_CSV: // TODO: implement csv validation, this is not in the scope of data ingestion at the moment diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaProducerService.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaProducerService.java index 0c59bbf88..bd87010da 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaProducerService.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/kafka/integration/service/KafkaProducerService.java @@ -29,7 +29,12 @@ public KafkaProducerService( KafkaTemplate kafkaTemplate) { this.kafkaTemplate = kafkaTemplate; } - public void sendMessageFromController(String msg, String topic, String msgType, Integer dltOccurrence, Boolean validationActive) { + public void sendMessageFromController(String msg, + String topic, + String msgType, + Integer dltOccurrence, + Boolean validationActive, + String version) { String uniqueID = msgType + "_" + UUID.randomUUID(); var prodRecord = new ProducerRecord<>(topic, uniqueID, msg); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_TYPE, msgType.getBytes()); @@ -37,6 +42,9 @@ public void sendMessageFromController(String msg, String topic, String msgType, prodRecord.headers().add(KafkaHeaderValue.MESSAGE_OPERATION, EnumKafkaOperation.INJECTION.name().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_VALIDATION_ACTIVE, validationActive.toString().getBytes()); + boolean dataProcessingApplied = version.equals("2"); + prodRecord.headers().add(KafkaHeaderValue.DATA_PROCESSING_ENABLE, Boolean.toString(dataProcessingApplied).getBytes()); + sendMessage(prodRecord); } @@ -48,6 +56,7 @@ public void sendMessageFromDltController( prodRecord.headers().add(KafkaHeaderValue.DLT_OCCURRENCE, dltOccurrence.toString().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_OPERATION, EnumKafkaOperation.REINJECTION.name().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_VALIDATION_ACTIVE, "true".getBytes()); + prodRecord.headers().add(KafkaHeaderValue.DATA_PROCESSING_ENABLE, "false".getBytes()); sendMessage(prodRecord); } @@ -64,17 +73,19 @@ public void sendMessageFromCSVController(List> msg, String topic, S sendMessage(prodRecord); } - public void sendMessageAfterValidatingMessage(ValidatedELRModel msg, String topic, Integer dltOccurrence) { + public void sendMessageAfterValidatingMessage(ValidatedELRModel msg, String topic, Integer dltOccurrence, String dataProcessingEnable) { String uniqueID = PREFIX_MSG_VALID + msg.getMessageType() + "_" + UUID.randomUUID(); var prodRecord = new ProducerRecord<>(topic, uniqueID, msg.getId()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_TYPE, msg.getMessageType().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_VERSION, msg.getMessageVersion().getBytes()); prodRecord.headers().add(KafkaHeaderValue.DLT_OCCURRENCE, dltOccurrence.toString().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_OPERATION, EnumKafkaOperation.INJECTION.name().getBytes()); + prodRecord.headers().add(KafkaHeaderValue.DATA_PROCESSING_ENABLE, dataProcessingEnable.getBytes()); + sendMessage(prodRecord); } - public void sendMessagePreparationTopic(ValidatedELRModel msg, String topic, TopicPreparationType topicType, Integer dltOccurrence) throws ConversionPrepareException { + public void sendMessagePreparationTopic(ValidatedELRModel msg, String topic, TopicPreparationType topicType, Integer dltOccurrence, String dataProcessingEnable) throws ConversionPrepareException { String uniqueId; if (topicType == TopicPreparationType.XML) { @@ -86,17 +97,21 @@ else if (topicType == TopicPreparationType.FHIR) { else { throw new ConversionPrepareException("Unsupported Topic"); } - sendMessageHelper(topic, dltOccurrence, uniqueId, msg.getId(), msg.getMessageType(), msg.getMessageVersion()); + sendMessageHelper(topic, dltOccurrence, uniqueId, msg.getId(), msg.getMessageType(), msg.getMessageVersion(), dataProcessingEnable); } - private void sendMessageHelper(String topic, Integer dltOccurrence, String uniqueId, String messageOriginId, String messageType, String messageVersion) { + private void sendMessageHelper(String topic, Integer dltOccurrence, String uniqueId, + String messageOriginId, String messageType, String messageVersion, + String dataProcessingEnable) { var prodRecord = new ProducerRecord<>(topic, uniqueId, messageOriginId); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_TYPE, messageType.getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_VERSION, messageVersion.getBytes()); prodRecord.headers().add(KafkaHeaderValue.DLT_OCCURRENCE, dltOccurrence.toString().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_OPERATION, EnumKafkaOperation.INJECTION.name().getBytes()); + prodRecord.headers().add(KafkaHeaderValue.DATA_PROCESSING_ENABLE, dataProcessingEnable.getBytes()); + sendMessage(prodRecord); } @@ -125,6 +140,7 @@ public void sendMessageAfterConvertedToXml(String xmlMsg, String topic, Integer var prodRecord = new ProducerRecord<>(topic, uniqueID, xmlMsg); prodRecord.headers().add(KafkaHeaderValue.DLT_OCCURRENCE, dltOccurrence.toString().getBytes()); prodRecord.headers().add(KafkaHeaderValue.MESSAGE_OPERATION, EnumKafkaOperation.INJECTION.name().getBytes()); + prodRecord.headers().add(KafkaHeaderValue.DATA_TYPE, "ELR".getBytes()); sendMessage(prodRecord); } diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/nbs/services/NbsRepositoryServiceProvider.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/nbs/services/NbsRepositoryServiceProvider.java index c41f1c8ee..7e081daad 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/nbs/services/NbsRepositoryServiceProvider.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/nbs/services/NbsRepositoryServiceProvider.java @@ -25,6 +25,8 @@ public class NbsRepositoryServiceProvider { private static final String IMPEXP_CD = "I"; private static final String STATUS_UNPROCESSED = "QUEUED"; + private static final String STATUS_UNPROCESSED_V2 = "QUEUED_V2"; + private static final String SYSTEM_NAME_NBS = "NBS"; private static final String DOCUMENT_TYPE_CODE = "11648804"; @@ -66,14 +68,18 @@ else if (dataMigrationStatus == -2) { } } - public NbsInterfaceModel saveXmlMessage(String msgId, String xmlMsg, HL7ParsedMessage hl7ParsedMessage) throws XmlConversionException { + public NbsInterfaceModel saveXmlMessage(String msgId, String xmlMsg, HL7ParsedMessage hl7ParsedMessage , boolean dataProcessingApplied) throws XmlConversionException { NbsInterfaceModel item = new NbsInterfaceModel(); log.debug("{} : Xml being persisted to NBS Legacy database", msgId); item.setPayload(xmlMsg); item.setImpExpIndCd(IMPEXP_CD); - item.setRecordStatusCd(STATUS_UNPROCESSED); + if (dataProcessingApplied) { + item.setRecordStatusCd(STATUS_UNPROCESSED_V2); + } else { + item.setRecordStatusCd(STATUS_UNPROCESSED); + } var time = getCurrentTimeStamp(); item.setRecordStatusTime(time); diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsController.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsController.java index ec8afc0e2..4e71824cb 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsController.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsController.java @@ -58,7 +58,8 @@ public ElrReportsController(IEcrMsgQueryService ecrMsgQueryService, description = "Submit a plain text HL7 message with msgType header", tags = { "dataingestion", "elr" }) @PostMapping(consumes = MediaType.TEXT_PLAIN_VALUE) - public ResponseEntity save(@RequestBody final String payload, @RequestHeader("msgType") String type) { + public ResponseEntity save(@RequestBody final String payload, @RequestHeader("msgType") String type, + @RequestHeader(name = "version", defaultValue = "1") String version) { if (type.isEmpty()) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Required headers should not be null"); } @@ -74,7 +75,7 @@ public ResponseEntity save(@RequestBody final String payload, @RequestHe rawERLDto.setPayload(payload); rawERLDto.setValidationActive(true); - return ResponseEntity.ok(rawELRService.submission(rawERLDto)); + return ResponseEntity.ok(rawELRService.submission(rawERLDto, version)); } @Operation( diff --git a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/service/RawELRService.java b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/service/RawELRService.java index a85bce4d4..0df0ebad6 100644 --- a/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/service/RawELRService.java +++ b/data-ingestion-service/src/main/java/gov/cdc/dataingestion/rawmessage/service/RawELRService.java @@ -27,9 +27,15 @@ public class RawELRService { private final KafkaProducerService kafkaProducerService; - public String submission(RawERLDto rawERLDto) { + public String submission(RawERLDto rawERLDto, String version) { RawERLModel created = rawELRRepository.save(convert(rawERLDto)); - kafkaProducerService.sendMessageFromController(created.getId(), topicName, rawERLDto.getType(), 0, rawERLDto.getValidationActive()); + kafkaProducerService.sendMessageFromController( + created.getId(), + topicName, + rawERLDto.getType(), + 0, + rawERLDto.getValidationActive(), + version); return created.getId(); } diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaConsumerServiceTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaConsumerServiceTest.java index 7c67a77c3..e0b95f6d1 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaConsumerServiceTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaConsumerServiceTest.java @@ -201,7 +201,7 @@ void rawConsumerTest() throws DuplicateHL7FileFoundException, DiHL7Exception { validatedModel ); - kafkaConsumerService.handleMessageForRawElr(value, rawTopic, "false"); + kafkaConsumerService.handleMessageForRawElr(value, rawTopic, "false", "false"); verify(iRawELRRepository, times(1)).findById(guidForTesting); @@ -231,7 +231,7 @@ void rawConsumerTestRawRecordNotFound() { DiHL7Exception exception = Assertions.assertThrows( DiHL7Exception.class, () -> { - kafkaConsumerService.handleMessageForRawElr(value, rawTopic, "false"); + kafkaConsumerService.handleMessageForRawElr(value, rawTopic, "false", "false"); } ); @@ -262,7 +262,7 @@ void validateConsumerTest() throws ConversionPrepareException { when(iValidatedELRRepository.findById(guidForTesting)) .thenReturn(Optional.of(model)); - kafkaConsumerService.handleMessageForValidatedElr(value, validateTopic); + kafkaConsumerService.handleMessageForValidatedElr(value, validateTopic, "false"); verify(iValidatedELRRepository, times(1)).findById(guidForTesting); @@ -291,7 +291,7 @@ void validateConsumerTest_Exception() { .thenReturn(Optional.empty()); - assertThrows(ConversionPrepareException.class, () -> kafkaConsumerService.handleMessageForValidatedElr(value, validateTopic)); + assertThrows(ConversionPrepareException.class, () -> kafkaConsumerService.handleMessageForValidatedElr(value, validateTopic, "false")); verify(iValidatedELRRepository, times(1)).findById(guidForTesting); @@ -322,10 +322,11 @@ void xmlPreparationConsumerTest() { when(iValidatedELRRepository.findById(guidForTesting)) .thenReturn(Optional.of(model)); - when(nbsRepositoryServiceProvider.saveXmlMessage(anyString(), anyString(), any())).thenReturn(nbsInterfaceModel); + when(nbsRepositoryServiceProvider.saveXmlMessage(anyString(), anyString(), any(), false)).thenReturn(nbsInterfaceModel); - kafkaConsumerService.handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.INJECTION.name()); + kafkaConsumerService + .handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.INJECTION.name(), "false"); } catch (Exception e) { throw new RuntimeException(e); } @@ -335,6 +336,40 @@ void xmlPreparationConsumerTest() { } + + @Test + void xmlPreparationConsumerTestNewFlow() throws XmlConversionException { + + + // Produce a test message to the topic + String message = guidForTesting; + produceMessage(xmlPrepTopic, message, EnumKafkaOperation.INJECTION); + + // Consume the message + ConsumerRecords records = consumer.poll(Duration.ofSeconds(5)); + + // Perform assertions + assertEquals(1, records.count()); + + ConsumerRecord firstRecord = records.iterator().next(); + String value = firstRecord.value(); + + ValidatedELRModel model = new ValidatedELRModel(); + model.setId(guidForTesting); + model.setRawMessage(testHL7Message); + + when(iValidatedELRRepository.findById(guidForTesting)).thenReturn(Optional.of(model)); + when(nbsRepositoryServiceProvider.saveXmlMessage(anyString(), anyString(), any(), anyBoolean())).thenReturn(nbsInterfaceModel); + + + + kafkaConsumerService.xmlConversionHandlerProcessing(value, EnumKafkaOperation.INJECTION.name(), "true"); + + verify(iValidatedELRRepository, times(2)).findById(guidForTesting); + + } + + @Test void xmlPreparationConsumerTestReInjection_Exception() { // Produce a test message to the topic @@ -361,7 +396,7 @@ void xmlPreparationConsumerTestReInjection_Exception() { CompletableFuture.runAsync(() -> { try { - assertThrows(DiAsyncException.class, () -> kafkaConsumerService.handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.REINJECTION.name())); //NOSONAR + assertThrows(DiAsyncException.class, () -> kafkaConsumerService.handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.REINJECTION.name(), "false")); //NOSONAR } catch (Exception e) { throw new RuntimeException(e); } @@ -404,9 +439,9 @@ void xmlPreparationConsumerTestReInjection() { validatedELRModel.setRawMessage(testHL7Message); nbsInterfaceModel.setPayload(testHL7Message); when(iValidatedELRRepository.findById(anyString())).thenReturn(Optional.of(validatedELRModel)); - when(nbsRepositoryServiceProvider.saveXmlMessage(anyString(), anyString(), any())).thenReturn(nbsInterfaceModel); + when(nbsRepositoryServiceProvider.saveXmlMessage(anyString(), anyString(), any(), false)).thenReturn(nbsInterfaceModel); - kafkaConsumerService.handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.REINJECTION.name()); + kafkaConsumerService.handleMessageForXmlConversionElr(value, xmlPrepTopic, EnumKafkaOperation.REINJECTION.name(), "false"); verify(iHl7v2Validator, times(1)).messageStringValidation(testHL7Message); verify(elrDeadLetterRepository, times(1)).findById(guidForTesting); diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaProducerServiceTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaProducerServiceTest.java index 5e77c9f18..34ada7e54 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaProducerServiceTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/kafka/service/KafkaProducerServiceTest.java @@ -54,7 +54,7 @@ void testSendMessageFromController() { String topic = "test-topic"; String msgType = "test-type"; Integer dltOccurrence = 1; - kafkaProducerService.sendMessageFromController(msg, topic, msgType, dltOccurrence, false); + kafkaProducerService.sendMessageFromController(msg, topic, msgType, dltOccurrence, false, "false"); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } @@ -65,7 +65,7 @@ void testSendMessageAfterValidatingMessage() { model.setMessageType("test"); model.setId("test"); model.setMessageVersion("1"); - kafkaProducerService.sendMessageAfterValidatingMessage(model, topic, 1); + kafkaProducerService.sendMessageAfterValidatingMessage(model, topic, 1, "false"); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } @@ -79,7 +79,7 @@ void testSendMessagePreparationTopicXML() throws ConversionPrepareException { model.setMessageVersion("1"); kafkaProducerService.sendMessagePreparationTopic(model, topic, topicType, - 1 ); + 1, "false"); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } @@ -93,7 +93,7 @@ void testSendMessagePreparationTopicFHIR() throws ConversionPrepareException { model.setMessageVersion("1"); kafkaProducerService.sendMessagePreparationTopic(model, topic, topicType, - 1 ); + 1, "false"); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } @@ -120,7 +120,7 @@ void sendMessageDlt() { void testSendMessageAfterConvertedToXml() { String topic = "test-topic"; String msg = "test"; - kafkaProducerService.sendMessageAfterConvertedToXml(msg, topic, + kafkaProducerService.sendMessageAfterConvertedToXml( msg, topic, 1 ); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } @@ -142,7 +142,7 @@ void testSendMessageFromDltController() { String msg = "test"; String msgType = "HL7"; Integer occurrence = 0; - kafkaProducerService.sendMessageFromController(msg, topic,msgType, occurrence, false); + kafkaProducerService.sendMessageFromController(msg, topic,msgType, occurrence, false, "false"); verify(kafkaTemplate, times(1)).send(any(ProducerRecord.class)); } diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/nbs/service/NbsRepositoryServiceProviderTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/nbs/service/NbsRepositoryServiceProviderTest.java index a08efc4b8..7c42cba4f 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/nbs/service/NbsRepositoryServiceProviderTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/nbs/service/NbsRepositoryServiceProviderTest.java @@ -46,7 +46,7 @@ void saveToNbsTestNoOruFound() throws XmlConversionException { HL7ParsedMessage parsedMessage = new HL7ParsedMessage(); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -67,10 +67,32 @@ void saveToNbsTest() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } + @SuppressWarnings({"java:S5976"}) + @Test + void saveToNbsTestNewFlow() throws XmlConversionException { + String id = "whatever"; + String xmlMsg = testXmlData; + HL7ParsedMessage parsedMessage = new HL7ParsedMessage(); + OruR1 oru = new OruR1(); + oru.getMessageHeader().getSendingFacility().setUniversalId("1"); + oru.getPatientResult().add(new PatientResult()); + oru.getPatientResult().get(0).getOrderObservation().add(new OrderObservation()); + oru.getPatientResult().get(0).getOrderObservation().get(0).getObservationRequest().getFillerOrderNumber().setEntityIdentifier("test"); + oru.getPatientResult().get(0).getOrderObservation().get(0).getObservationRequest().getUniversalServiceIdentifier().setIdentifier("test"); + oru.getPatientResult().get(0).getOrderObservation().get(0).getSpecimen().add(new Specimen()); + oru.getPatientResult().get(0).getOrderObservation().get(0).getSpecimen().get(0).getSpecimen().getSpecimenCollectionDateTime().getRangeStartDateTime().setTime("200603241455"); + parsedMessage.setParsedMessage(oru); + when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); + + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, true); + Assertions.assertTrue(saved instanceof NbsInterfaceModel); + } + + @SuppressWarnings({"java:S5976"}) @Test void saveToNbsTestWithSpecificTimeZone() throws XmlConversionException { @@ -88,7 +110,7 @@ void saveToNbsTestWithSpecificTimeZone() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -109,7 +131,7 @@ void saveToNbsTestWithSpecificTimeZone2() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -129,7 +151,7 @@ void saveToNbsTestUniversalMsgNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -149,7 +171,7 @@ void saveToNbsTestUniversalMsgFacilityNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -163,7 +185,7 @@ void saveToNbsTestOrderNumPatientResultEmpty() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -178,7 +200,7 @@ void saveToNbsTestOrderNumPatientResultNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -193,7 +215,7 @@ void saveToNbsTestOrderNumObservationEmpty() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -209,7 +231,7 @@ void saveToNbsTestOrderNumObservationNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -226,7 +248,7 @@ void saveToNbsTestObrNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -243,7 +265,7 @@ void saveToNbsTestObrEntityIdentifierNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -262,7 +284,7 @@ void saveToNbsTestTestCodeNull() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -283,7 +305,7 @@ void saveToNbsTestDateOnly() throws XmlConversionException { parsedMessage.setParsedMessage(oru); when(nbsInterfaceRepo.save(any(NbsInterfaceModel.class))).thenReturn(new NbsInterfaceModel()); - var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage); + var saved = target.saveXmlMessage(id, xmlMsg, parsedMessage, false); Assertions.assertTrue(saved instanceof NbsInterfaceModel); } @@ -307,7 +329,7 @@ void saveToNbsTestThrowTimeParseException() throws XmlConversionException { Assertions.assertThrows( XmlConversionException.class, () -> { - target.saveXmlMessage(id, xmlMsg, parsedMessage); + target.saveXmlMessage(id, xmlMsg, parsedMessage, false); } ); } diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/ElrReportsControllerTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/ElrReportsControllerTest.java index 9e40ce07b..3457a7ba5 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/ElrReportsControllerTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/ElrReportsControllerTest.java @@ -50,7 +50,7 @@ void testSave() throws Exception { rawERLDto.setType(messageType); rawERLDto.setPayload(payload); - when(rawELRService.submission(rawERLDto)).thenReturn("OK"); + when(rawELRService.submission(rawERLDto, "1")).thenReturn("OK"); mockMvc.perform(MockMvcRequestBuilders.post("/api/reports") .param("id", "1").with(SecurityMockMvcRequestPostProcessors.jwt()) .header("msgType", messageType) diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/RawELRServiceTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/RawELRServiceTest.java index 08f74a90c..d98a067ba 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/RawELRServiceTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/RawELRServiceTest.java @@ -54,8 +54,8 @@ void testSave_Success() { model.setCreatedBy("test"); model.setUpdatedBy("test"); when(rawELRRepository.save(any())).thenReturn(model); - Mockito.doNothing().when(kafkaProducerService).sendMessageFromController(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()); - var result = target.submission(modelDto); + Mockito.doNothing().when(kafkaProducerService).sendMessageFromController(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any()); + var result = target.submission(modelDto, "1"); Assertions.assertNotNull(result); Assertions.assertEquals("test",result); diff --git a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsControllerTest.java b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsControllerTest.java index db7aaa4a5..c8e3d3d83 100644 --- a/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsControllerTest.java +++ b/data-ingestion-service/src/test/java/gov/cdc/dataingestion/rawmessage/controller/ElrReportsControllerTest.java @@ -53,7 +53,7 @@ void testSaveHL7Message() throws Exception { rawERLDto.setPayload(hl7Payload); rawERLDto.setValidationActive(true); - verify(rawELRService).submission(rawERLDto); + verify(rawELRService).submission(rawERLDto, "1"); } @@ -73,7 +73,7 @@ void testSaveHL7MessageValidationActivated() throws Exception { rawERLDto.setPayload(hl7Payload); rawERLDto.setValidationActive(true); - verify(rawELRService).submission(rawERLDto); + verify(rawELRService).submission(rawERLDto, "1"); } @Test diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/ServiceApplication.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/ServiceApplication.java index bfe9da3ab..62578bc1c 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/ServiceApplication.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/ServiceApplication.java @@ -3,12 +3,14 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Report service application. */ @SpringBootApplication @EnableCaching +@EnableTransactionManagement public class ServiceApplication { /** * Main method for spring boot application. diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/OdseDataSourceConfig.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/OdseDataSourceConfig.java index 67ab40f81..99df418eb 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/OdseDataSourceConfig.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/OdseDataSourceConfig.java @@ -7,6 +7,7 @@ import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; @@ -68,6 +69,7 @@ public LocalContainerEntityManagerFactoryBean odseEntityManagerFactory( .build(); } + @Primary @Bean(name = "odseTransactionManager") public PlatformTransactionManager odseTransactionManager( @Qualifier("odseEntityManagerFactory") EntityManagerFactory odseEntityManagerFactory ) { diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/SrteDataSourceConfig.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/SrteDataSourceConfig.java index d12dde523..69f347e02 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/SrteDataSourceConfig.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/config/SrteDataSourceConfig.java @@ -20,7 +20,6 @@ @Configuration -@EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "srteEntityManagerFactory", transactionManagerRef = "srteTransactionManager", @@ -69,9 +68,9 @@ public LocalContainerEntityManagerFactoryBean srteEntityManagerFactory( .build(); } - @Bean(name = "srteTransactionManager") - public PlatformTransactionManager srteTransactionManager( - @Qualifier("srteEntityManagerFactory") EntityManagerFactory srteEntityManagerFactory ) { - return new JpaTransactionManager(srteEntityManagerFactory); - } +// @Bean(name = "srteTransactionManager") +// public PlatformTransactionManager srteTransactionManager( +// @Qualifier("srteEntityManagerFactory") EntityManagerFactory srteEntityManagerFactory ) { +// return new JpaTransactionManager(srteEntityManagerFactory); +// } } \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/KafkaCustomHeader.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/KafkaCustomHeader.java index 25d8f01b5..ae87877fa 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/KafkaCustomHeader.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/KafkaCustomHeader.java @@ -1,5 +1,5 @@ package gov.cdc.dataprocessing.constant; public class KafkaCustomHeader { - public static final String DATA_TYPE = "DATA-TYPE"; + public static final String DATA_TYPE = "DATA_TYPE"; } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/DataTables.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/DataTables.java new file mode 100644 index 000000000..cb4041710 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/DataTables.java @@ -0,0 +1,4 @@ +package gov.cdc.dataprocessing.constant.elr; + +public class DataTables { +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/EdxELRConstant.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/EdxELRConstant.java index ff607a601..4f7ac4e5a 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/EdxELRConstant.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/EdxELRConstant.java @@ -3,6 +3,9 @@ import gov.cdc.dataprocessing.constant.enums.NbsInterfaceStatus; public class EdxELRConstant { + public static String PATIENT_LDF = "PAT"; + + public static final String ELECTRONIC_IND_ELR = "Y"; //Entity ID specific mappings public static final String ELR_PERSON_CD="PSN"; public static final String ELR_PATIENT_CD="PAT"; diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/NBSBOLookup.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/NBSBOLookup.java new file mode 100644 index 000000000..26053def3 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/constant/elr/NBSBOLookup.java @@ -0,0 +1,30 @@ +package gov.cdc.dataprocessing.constant.elr; + +public class NBSBOLookup { + public static final String ASSOCIATEINTERVENTIONVACCINERECORDS = "ASSOCIATEINTERVENTIONVACCINERECORDS"; + public static final String ORGANIZATION = "ORGANIZATION"; + public static final String PATIENT = "PATIENT"; + public static final String OBSERVATIONGENERICOBSERVATION = "OBSERVATIONGENERICOBSERVATION"; + public static final String OBSERVATIONMORBIDITYREPORT = "OBSERVATIONMORBIDITYREPORT"; + public static final String OBSERVATIONLABREPORT = "OBSERVATIONLABREPORT"; + public static final String OBSERVATIONMORBREPORT = "OBSERVATIONMORBREPORT"; + public static final String REPORTING = "REPORTING"; + public static final String INTERVENTIONVACCINERECORD = "INTERVENTIONVACCINERECORD"; + public static final String SYSTEM = "SYSTEM"; + public static final String NOTIFICATION = "NOTIFICATION"; + public static final String CASEREPORTING = "CASEREPORTING"; + public static final String DOCUMENT = "DOCUMENT"; + public static final String INVESTIGATION = "INVESTIGATION"; + public static final String SUMMARYREPORT = "SUMMARYREPORT"; + public static final String MATERIAL = "material"; + public static final String SRT = "SRT"; + public static final String PROVIDER = "PROVIDER"; + public static final String TREATMENT = "TREATMENT"; + public static final String CT_CONTACT= "CT_CONTACT"; + public static final String QUEUES= "QUEUES"; + public static final String PUBLICQUEUES= "PUBLICQUEUES"; + + public static final String GLOBAL= "GLOBAL"; + public static final String PLACE= "PLACE"; + public static final String INTERVIEW= "INTERVIEW"; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/exception/DataProcessingException.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/exception/DataProcessingException.java index 78db4b928..be81caa07 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/exception/DataProcessingException.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/exception/DataProcessingException.java @@ -1,7 +1,12 @@ package gov.cdc.dataprocessing.exception; public class DataProcessingException extends Exception{ + public DataProcessingException(String message) { super(message); } + + public DataProcessingException(String message, Exception result) { + super(message, result); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/kafka/consumer/KafkaManagerConsumer.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/kafka/consumer/KafkaManagerConsumer.java index 2bf50b94f..fc419d0a0 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/kafka/consumer/KafkaManagerConsumer.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/kafka/consumer/KafkaManagerConsumer.java @@ -49,7 +49,7 @@ public void handleMessage(String message, //TODO: Logic to handle goes here Object result = new Object(); try { - result = managerService.processDistribution(dataType,"data"); + result = managerService.processDistribution(dataType,message); //TODO: Send out result to next step kafkaManagerProducer.sendData(healthCaseTopic, "result"); diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EdxPatientMatchDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EdxPatientMatchDT.java new file mode 100644 index 000000000..bccad8452 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EdxPatientMatchDT.java @@ -0,0 +1,26 @@ +package gov.cdc.dataprocessing.model.classic_model.dto; + +import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import lombok.Getter; +import lombok.Setter; + +import java.sql.Timestamp; + +@Getter +@Setter +public class EdxPatientMatchDT extends AbstractVO { + + private Long edxPatientMatchUid; + private Long patientUid; + private String matchString; + private String typeCd; + private Long matchStringHashCode; + + private Long addUserId; + private Long lastChgUserId; + private Timestamp addTime; + private Timestamp lastChgTime; + private boolean multipleMatch = false; + + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityIdDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityIdDT.java index b4a72d816..f515d8202 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityIdDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityIdDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityId; import lombok.Getter; import lombok.Setter; @@ -75,4 +76,38 @@ public class EntityIdDT extends AbstractVO { // private String universalIdType; private String assigningAuthorityIdType; + + public EntityIdDT() { + + } + + public EntityIdDT(EntityId entityId) { + this.entityUid = entityId.getEntityUid(); + this.entityIdSeq = entityId.getEntityIdSeq(); + this.addReasonCd = entityId.getAddReasonCode(); + this.addTime = entityId.getAddTime(); + this.addUserId = entityId.getAddUserId(); + this.assigningAuthorityCd = entityId.getAssigningAuthorityCode(); + this.assigningAuthorityDescTxt = entityId.getAssigningAuthorityDescription(); + this.durationAmt = entityId.getDurationAmount(); + this.durationUnitCd = entityId.getDurationUnitCode(); + this.effectiveFromTime = entityId.getEffectiveFromTime(); + this.effectiveToTime = entityId.getEffectiveToTime(); + this.lastChgReasonCd = entityId.getLastChangeReasonCode(); + this.lastChgTime = entityId.getLastChangeTime(); + this.lastChgUserId = entityId.getLastChangeUserId(); + this.recordStatusCd = entityId.getRecordStatusCode(); + this.recordStatusTime = entityId.getRecordStatusTime(); + this.rootExtensionTxt = entityId.getRootExtensionText(); + this.statusCd = entityId.getStatusCode(); + this.statusTime = entityId.getStatusTime(); + this.typeCd = entityId.getTypeCode(); + this.typeDescTxt = entityId.getTypeDescriptionText(); + this.userAffiliationTxt = entityId.getUserAffiliationText(); + this.validFromTime = entityId.getValidFromTime(); + this.validToTime = entityId.getValidToTime(); + this.asOfDate = entityId.getAsOfDate(); + this.assigningAuthorityIdType = entityId.getAssigningAuthorityIdType(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityLocatorParticipationDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityLocatorParticipationDT.java index cc0338a02..8bb18b9df 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityLocatorParticipationDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/EntityLocatorParticipationDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityLocatorParticipation; import lombok.Getter; import lombok.Setter; @@ -38,4 +39,37 @@ public class EntityLocatorParticipationDT extends AbstractVO { private PhysicalLocatorDT thePhysicalLocatorDT; private TeleLocatorDT theTeleLocatorDT; private Integer versionCtrlNbr; + + public EntityLocatorParticipationDT() { + + } + + public EntityLocatorParticipationDT(EntityLocatorParticipation entityLocatorParticipation) { + this.entityUid = entityLocatorParticipation.getEntityUid(); + this.locatorUid = entityLocatorParticipation.getLocatorUid(); + this.addReasonCd = entityLocatorParticipation.getAddReasonCd(); + this.addTime = entityLocatorParticipation.getAddTime(); + this.addUserId = entityLocatorParticipation.getAddUserId(); + this.cd = entityLocatorParticipation.getCd(); + this.cdDescTxt = entityLocatorParticipation.getCdDescTxt(); + this.classCd = entityLocatorParticipation.getClassCd(); + this.durationAmt = entityLocatorParticipation.getDurationAmt(); + this.durationUnitCd = entityLocatorParticipation.getDurationUnitCd(); + this.fromTime = entityLocatorParticipation.getFromTime(); + this.lastChgReasonCd = entityLocatorParticipation.getLastChgReasonCd(); + this.lastChgTime = entityLocatorParticipation.getLastChgTime(); + this.lastChgUserId = entityLocatorParticipation.getLastChgUserId(); + this.locatorDescTxt = entityLocatorParticipation.getLocatorDescTxt(); + this.recordStatusCd = entityLocatorParticipation.getRecordStatusCd(); + this.recordStatusTime = entityLocatorParticipation.getRecordStatusTime(); + this.statusCd = entityLocatorParticipation.getStatusCd(); + this.statusTime = entityLocatorParticipation.getStatusTime(); + this.toTime = entityLocatorParticipation.getToTime(); + this.useCd = entityLocatorParticipation.getUseCd(); + this.userAffiliationTxt = entityLocatorParticipation.getUserAffiliationTxt(); + this.validTimeTxt = entityLocatorParticipation.getValidTimeTxt(); + this.versionCtrlNbr = entityLocatorParticipation.getVersionCtrlNbr(); + this.asOfDate = entityLocatorParticipation.getAsOfDate(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonDT.java index e769f151e..5fc76af93 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.Person; import lombok.Getter; import lombok.Setter; @@ -129,4 +130,116 @@ public class PersonDT extends AbstractVO { private String ethnicUnkReasonCd; private String sexUnkReasonCd; private boolean isReentrant= false; + + public PersonDT() { + + } + + public PersonDT(Person person) { + this.dedupMatchInd = person.getDedupMatchInd(); + this.groupNbr = person.getGroupNbr(); + this.groupTime = person.getGroupTime(); + this.personUid = person.getPersonUid(); + this.personParentUid = person.getPersonParentUid(); + this.addReasonCd = person.getAddReasonCd(); + this.addTime = person.getAddTime(); + this.addUserId = person.getAddUserId(); + this.administrativeGenderCd = person.getAdministrativeGenderCd(); + this.ageCalc = person.getAgeCalc(); + this.ageCalcTime = person.getAgeCalcTime(); + this.ageCalcUnitCd = person.getAgeCalcUnitCd(); + this.ageCategoryCd = person.getAgeCategoryCd(); + this.ageReported = person.getAgeReported(); + this.ageReportedTime = person.getAgeReportedTime(); + this.ageReportedUnitCd = person.getAgeReportedUnitCd(); + this.asOfDateAdmin = person.getAsOfDateAdmin(); + this.asOfDateEthnicity = person.getAsOfDateEthnicity(); + this.asOfDateGeneral = person.getAsOfDateGeneral(); + this.asOfDateMorbidity = person.getAsOfDateMorbidity(); + this.asOfDateSex = person.getAsOfDateSex(); + this.birthGenderCd = person.getBirthGenderCd(); + this.birthOrderNbr = person.getBirthOrderNbr(); + this.birthTime = person.getBirthTime(); + this.birthTimeCalc = person.getBirthTimeCalc(); + this.cd = person.getCd(); + this.cdDescTxt = person.getCdDescTxt(); + this.currSexCd = person.getCurrSexCd(); + this.deceasedIndCd = person.getDeceasedIndCd(); + this.deceasedTime = person.getDeceasedTime(); + this.description = person.getDescription(); + this.educationLevelCd = person.getEducationLevelCd(); + this.educationLevelDescTxt = person.getEducationLevelDescTxt(); + this.electronicInd = person.getElectronicInd(); + this.ethnicGroupInd = person.getEthnicGroupInd(); + this.lastChgReasonCd = person.getLastChgReasonCd(); + this.lastChgTime = person.getLastChgTime(); + this.lastChgUserId = person.getLastChgUserId(); + this.localId = person.getLocalId(); + this.maritalStatusCd = person.getMaritalStatusCd(); + this.maritalStatusDescTxt = person.getMaritalStatusDescTxt(); + this.mothersMaidenNm = person.getMothersMaidenNm(); + this.multipleBirthInd = person.getMultipleBirthInd(); + this.occupationCd = person.getOccupationCd(); + this.preferredGenderCd = person.getPreferredGenderCd(); + this.primLangCd = person.getPrimLangCd(); + this.primLangDescTxt = person.getPrimLangDescTxt(); + this.recordStatusCd = person.getRecordStatusCd(); + this.recordStatusTime = person.getRecordStatusTime(); + this.statusCd = person.getStatusCd(); + this.statusTime = person.getStatusTime(); + this.survivedIndCd = person.getSurvivedIndCd(); + this.userAffiliationTxt = person.getUserAffiliationTxt(); + this.firstNm = person.getFirstNm(); + this.lastNm = person.getLastNm(); + this.middleNm = person.getMiddleNm(); + this.nmPrefix = person.getNmPrefix(); + this.nmSuffix = person.getNmSuffix(); + this.preferredNm = person.getPreferredNm(); + this.hmStreetAddr1 = person.getHmStreetAddr1(); + this.hmStreetAddr2 = person.getHmStreetAddr2(); + this.hmCityCd = person.getHmCityCd(); + this.hmCityDescTxt = person.getHmCityDescTxt(); + this.hmStateCd = person.getHmStateCd(); + this.hmZipCd = person.getHmZipCd(); + this.hmCntyCd = person.getHmCntyCd(); + this.hmCntryCd = person.getHmCntryCd(); + this.hmPhoneNbr = person.getHmPhoneNbr(); + this.hmPhoneCntryCd = person.getHmPhoneCntryCd(); + this.hmEmailAddr = person.getHmEmailAddr(); + this.cellPhoneNbr = person.getCellPhoneNbr(); + this.wkStreetAddr1 = person.getWkStreetAddr1(); + this.wkStreetAddr2 = person.getWkStreetAddr2(); + this.wkCityCd = person.getWkCityCd(); + this.wkCityDescTxt = person.getWkCityDescTxt(); + this.wkStateCd = person.getWkStateCd(); + this.wkZipCd = person.getWkZipCd(); + this.wkCntyCd = person.getWkCntyCd(); + this.wkCntryCd = person.getWkCntryCd(); + this.wkPhoneNbr = person.getWkPhoneNbr(); + this.wkPhoneCntryCd = person.getWkPhoneCntryCd(); + this.wkEmailAddr = person.getWkEmailAddr(); + this.SSN = person.getSsn(); + this.medicaidNum = person.getMedicaidNum(); + this.dlNum = person.getDlNum(); + this.dlStateCd = person.getDlStateCd(); + this.raceCd = person.getRaceCd(); + this.raceSeqNbr = person.getRaceSeqNbr(); + this.raceCategoryCd = person.getRaceCategoryCd(); + this.ethnicityGroupCd = person.getEthnicityGroupCd(); + this.ethnicGroupSeqNbr = person.getEthnicGroupSeqNbr(); + this.adultsInHouseNbr = person.getAdultsInHouseNbr(); + this.childrenInHouseNbr = person.getChildrenInHouseNbr(); + this.birthCityCd = person.getBirthCityCd(); + this.birthCityDescTxt = person.getBirthCityDescTxt(); + this.birthCntryCd = person.getBirthCntryCd(); + this.birthStateCd = person.getBirthStateCd(); + this.raceDescTxt = person.getRaceDescTxt(); + this.ethnicGroupDescTxt = person.getEthnicGroupDescTxt(); + this.versionCtrlNbr = person.getVersionCtrlNbr(); + this.edxInd = person.getEdxInd(); + this.speaksEnglishCd = person.getSpeaksEnglishCd(); + this.additionalGenderCd = person.getAdditionalGenderCd(); + this.eharsId = person.getEharsId(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonEthnicGroupDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonEthnicGroupDT.java index 89e35c05e..e59270ff5 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonEthnicGroupDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonEthnicGroupDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonEthnicGroup; import lombok.Getter; import lombok.Setter; @@ -29,4 +30,24 @@ public class PersonEthnicGroupDT extends AbstractVO { private boolean itDirty = false; private boolean itNew = true; private boolean itDelete = false; + + public PersonEthnicGroupDT() { + + } + + public PersonEthnicGroupDT(PersonEthnicGroup personEthnicGroup) { + this.personUid = personEthnicGroup.getPersonUid(); + this.ethnicGroupCd = personEthnicGroup.getEthnicGroupCd(); + this.addReasonCd = personEthnicGroup.getAddReasonCd(); + this.addTime = personEthnicGroup.getAddTime(); + this.addUserId = personEthnicGroup.getAddUserId(); + this.ethnicGroupDescTxt = personEthnicGroup.getEthnicGroupDescTxt(); + this.lastChgReasonCd = personEthnicGroup.getLastChgReasonCd(); + this.lastChgTime = personEthnicGroup.getLastChgTime(); + this.lastChgUserId = personEthnicGroup.getLastChgUserId(); + this.recordStatusCd = personEthnicGroup.getRecordStatusCd(); + this.recordStatusTime = personEthnicGroup.getRecordStatusTime(); + this.userAffiliationTxt = personEthnicGroup.getUserAffiliationTxt(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonNameDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonNameDT.java index 1fdee46b1..849cc5220 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonNameDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonNameDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonName; import lombok.Getter; import lombok.Setter; @@ -50,4 +51,41 @@ public class PersonNameDT private boolean itDelete = false; private Integer versionCtrlNbr; private String localId; + + public PersonNameDT() { + + } + public PersonNameDT(PersonName personName) { + this.personUid = personName.getPersonUid(); + this.personNameSeq = personName.getPersonNameSeq(); + this.addReasonCd = personName.getAddReasonCd(); + this.addTime = personName.getAddTime(); + this.addUserId = personName.getAddUserId(); + this.defaultNmInd = personName.getDefaultNmInd(); + this.durationAmt = personName.getDurationAmt(); + this.durationUnitCd = personName.getDurationUnitCd(); + this.firstNm = personName.getFirstNm(); + this.firstNmSndx = personName.getFirstNmSndx(); + this.fromTime = personName.getFromTime(); + this.lastChgReasonCd = personName.getLastChgReasonCd(); + this.lastChgTime = personName.getLastChgTime(); + this.lastChgUserId = personName.getLastChgUserId(); + this.lastNm = personName.getLastNm(); + this.lastNmSndx = personName.getLastNmSndx(); + this.lastNm2 = personName.getLastNm2(); + this.lastNm2Sndx = personName.getLastNm2Sndx(); + this.middleNm = personName.getMiddleNm(); + this.middleNm2 = personName.getMiddleNm2(); + this.nmDegree = personName.getNmDegree(); + this.nmPrefix = personName.getNmPrefix(); + this.nmSuffix = personName.getNmSuffix(); + this.nmUseCd = personName.getNmUseCd(); + this.recordStatusCd = personName.getRecordStatusCd(); + this.recordStatusTime = personName.getRecordStatusTime(); + this.statusCd = personName.getStatusCd(); + this.statusTime = personName.getStatusTime(); + this.toTime = personName.getToTime(); + this.userAffiliationTxt = personName.getUserAffiliationTxt(); + this.asOfDate = personName.getAsOfDate(); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonRaceDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonRaceDT.java index 2f13dc99e..e1d596264 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonRaceDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PersonRaceDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonRace; import lombok.Getter; import lombok.Setter; @@ -36,4 +37,26 @@ public class PersonRaceDT extends AbstractVO { private String statusCd; private String localId; + public PersonRaceDT() { + + } + + public PersonRaceDT(PersonRace personRace) { + this.personUid = personRace.getPersonUid(); + this.raceCd = personRace.getRaceCd(); + this.addReasonCd = personRace.getAddReasonCd(); + this.addTime = personRace.getAddTime(); + this.addUserId = personRace.getAddUserId(); + this.lastChgReasonCd = personRace.getLastChgReasonCd(); + this.lastChgTime = personRace.getLastChgTime(); + this.lastChgUserId = personRace.getLastChgUserId(); + this.raceCategoryCd = personRace.getRaceCategoryCd(); + this.raceDescTxt = personRace.getRaceDescTxt(); + this.recordStatusCd = personRace.getRecordStatusCd(); + this.recordStatusTime = personRace.getRecordStatusTime(); + this.userAffiliationTxt = personRace.getUserAffiliationTxt(); + this.asOfDate = personRace.getAsOfDate(); + } + + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PhysicalLocatorDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PhysicalLocatorDT.java index 5deb42989..67b553f9d 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PhysicalLocatorDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PhysicalLocatorDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PhysicalLocator; import lombok.Getter; import lombok.Setter; @@ -29,4 +30,24 @@ public class PhysicalLocatorDT extends AbstractVO private boolean itDirty = false; private boolean itNew = true; private boolean itDelete = false; + + public PhysicalLocatorDT(PhysicalLocator physicalLocator) { + this.physicalLocatorUid = physicalLocator.getPhysicalLocatorUid(); + this.addReasonCd = physicalLocator.getAddReasonCd(); + this.addTime = physicalLocator.getAddTime(); + this.addUserId = physicalLocator.getAddUserId(); + this.imageTxt = physicalLocator.getImageTxt().getBytes(); + this.lastChgReasonCd = physicalLocator.getLastChgReasonCd(); + this.lastChgTime = physicalLocator.getLastChgTime(); + this.lastChgUserId = physicalLocator.getLastChgUserId(); + this.locatorTxt = physicalLocator.getLocatorTxt(); + this.recordStatusCd = physicalLocator.getRecordStatusCd(); + this.recordStatusTime = physicalLocator.getRecordStatusTime(); + this.userAffiliationTxt = physicalLocator.getUserAffiliationTxt(); + } + + public PhysicalLocatorDT() { + // Default constructor + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PostalLocatorDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PostalLocatorDT.java index 6bfc4cdca..1ddb671f9 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PostalLocatorDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/PostalLocatorDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PostalLocator; import lombok.Getter; import lombok.Setter; @@ -44,4 +45,40 @@ public class PostalLocatorDT extends AbstractVO { private boolean itNew = false; private boolean itDelete = false; private String censusTract; + + public PostalLocatorDT(PostalLocator postalLocator) { + this.postalLocatorUid = postalLocator.getPostalLocatorUid(); + this.addReasonCd = postalLocator.getAddReasonCd(); + this.addTime = postalLocator.getAddTime(); + this.addUserId = postalLocator.getAddUserId(); + this.censusBlockCd = postalLocator.getCensusBlockCd(); + this.censusMinorCivilDivisionCd = postalLocator.getCensusMinorCivilDivisionCd(); + this.censusTrackCd = postalLocator.getCensusTrackCd(); + this.cityCd = postalLocator.getCityCd(); + this.cityDescTxt = postalLocator.getCityDescTxt(); + this.cntryCd = postalLocator.getCntryCd(); + this.cntryDescTxt = postalLocator.getCntryDescTxt(); + this.cntyCd = postalLocator.getCntyCd(); + this.cntyDescTxt = postalLocator.getCntyDescTxt(); + this.lastChgReasonCd = postalLocator.getLastChgReasonCd(); + this.lastChgTime = postalLocator.getLastChgTime(); + this.lastChgUserId = postalLocator.getLastChgUserId(); + this.MSACongressDistrictCd = postalLocator.getMsaCongressDistrictCd(); + this.recordStatusCd = postalLocator.getRecordStatusCd(); + this.recordStatusTime = postalLocator.getRecordStatusTime(); + this.regionDistrictCd = postalLocator.getRegionDistrictCd(); + this.stateCd = postalLocator.getStateCd(); + this.streetAddr1 = postalLocator.getStreetAddr1(); + this.streetAddr2 = postalLocator.getStreetAddr2(); + this.userAffiliationTxt = postalLocator.getUserAffiliationTxt(); + this.zipCd = postalLocator.getZipCd(); + this.geocodeMatchInd = postalLocator.getGeocodeMatchInd(); + this.withinCityLimitsInd = postalLocator.getWithinCityLimitsInd(); + this.censusTract = postalLocator.getCensusTract(); + } + + public PostalLocatorDT() { + // Default constructor + } + } \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/RoleDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/RoleDT.java index 4805c8eb1..e49f85de0 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/RoleDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/RoleDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.Role; import lombok.Getter; import lombok.Setter; @@ -35,4 +36,35 @@ public class RoleDT extends AbstractVO { private String scopingClassCd; private String subjectClassCd; + public RoleDT() { + + } + public RoleDT(Role role) { + this.roleSeq = role.getRoleSeq(); + this.addReasonCd = role.getAddReasonCode(); + this.addTime = role.getAddTime(); + this.addUserId = role.getAddUserId(); + this.cd = role.getCode(); + this.cdDescTxt = role.getCodeDescription(); + this.effectiveDurationAmt = role.getEffectiveDurationAmount(); + this.effectiveDurationUnitCd = role.getEffectiveDurationUnitCode(); + this.effectiveFromTime = role.getEffectiveFromTime(); + this.effectiveToTime = role.getEffectiveToTime(); + this.lastChgReasonCd = role.getLastChangeReasonCode(); + this.lastChgTime = role.getLastChangeTime(); + this.lastChgUserId = role.getLastChangeUserId(); + this.recordStatusCd = role.getRecordStatusCode(); + this.recordStatusTime = role.getRecordStatusTime(); + this.scopingRoleCd = role.getScopingRoleCode(); + this.statusCd = role.getStatusCode(); + this.statusTime = role.getStatusTime(); + this.userAffiliationTxt = role.getUserAffiliationText(); + this.scopingEntityUid = role.getScopingEntityUid(); + this.scopingRoleSeq = role.getScopingRoleSeq(); + this.subjectEntityUid = role.getSubjectEntityUid(); + this.scopingClassCd = role.getScopingClassCode(); + this.subjectClassCd = role.getSubjectClassCode(); + } + + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/TeleLocatorDT.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/TeleLocatorDT.java index 35b402109..fd6e9b741 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/TeleLocatorDT.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/dto/TeleLocatorDT.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.model.classic_model.dto; import gov.cdc.dataprocessing.model.classic_model.vo.AbstractVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.TeleLocator; import lombok.Getter; import lombok.Setter; @@ -31,4 +32,27 @@ public class TeleLocatorDT extends AbstractVO { private boolean itDirty = false; private boolean itNew = true; private boolean itDelete = false; + + public TeleLocatorDT(TeleLocator teleLocator) { + this.teleLocatorUid = teleLocator.getTeleLocatorUid(); + this.addReasonCd = teleLocator.getAddReasonCd(); + this.addTime = teleLocator.getAddTime(); + this.addUserId = teleLocator.getAddUserId(); + this.cntryCd = teleLocator.getCntryCd(); + this.emailAddress = teleLocator.getEmailAddress(); + this.extensionTxt = teleLocator.getExtensionTxt(); + this.lastChgReasonCd = teleLocator.getLastChgReasonCd(); + this.lastChgTime = teleLocator.getLastChgTime(); + this.lastChgUserId = teleLocator.getLastChgUserId(); + this.phoneNbrTxt = teleLocator.getPhoneNbrTxt(); + this.recordStatusCd = teleLocator.getRecordStatusCd(); + this.recordStatusTime = teleLocator.getRecordStatusTime(); + this.urlAddress = teleLocator.getUrlAddress(); + this.userAffiliationTxt = teleLocator.getUserAffiliationTxt(); + } + + public TeleLocatorDT() { + // Default constructor + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/vo/PersonVO.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/vo/PersonVO.java index be573f6e8..468803f63 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/vo/PersonVO.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/model/classic_model/vo/PersonVO.java @@ -4,33 +4,55 @@ import lombok.Getter; import lombok.Setter; +import java.io.*; import java.util.ArrayList; import java.util.Collection; @Setter @Getter -public class PersonVO extends LdfBaseVO{ - private static final long serialVersionUID = 1L; +public class PersonVO extends LdfBaseVO implements Serializable { public PersonDT thePersonDT = new PersonDT(); public Collection thePersonNameDTCollection=new ArrayList<>(); - public Collection thePersonRaceDTCollection; - public Collection thePersonEthnicGroupDTCollection; + public Collection thePersonRaceDTCollection=new ArrayList<>(); + public Collection thePersonEthnicGroupDTCollection=new ArrayList<>(); public Collection theEntityLocatorParticipationDTCollection = new ArrayList<>(); public Collection theEntityIdDTCollection = new ArrayList<>(); - // private String custom;//custom queues - //collections for role and participation object association added by John Park - public Collection theParticipationDTCollection; + public Collection theParticipationDTCollection=new ArrayList<>(); public Collection theRoleDTCollection = new ArrayList<>(); private String defaultJurisdictionCd; - private Boolean isExistingPatient; +// private Boolean isExistingPatient; private boolean isExt = false; private boolean isMPRUpdateValid = true; private String localIdentifier; private String role; private String addReasonCode; + /** + * NEW VARIABLE + * */ + + private Boolean patientMatchedFound; + + + + public PersonVO deepClone() { + try { + // Serialize the object + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(this); + + // Deserialize the object + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + ObjectInputStream ois = new ObjectInputStream(bis); + return (PersonVO) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + return null; + } + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchRepository.java new file mode 100644 index 000000000..0513210b8 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchRepository.java @@ -0,0 +1,16 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.EdxPatientMatch; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +public interface EdxPatientMatchRepository extends JpaRepository { + @Transactional + @Modifying + @Query(value = "DELETE FROM EdxPatientMatch e WHERE e.patientUid = ?1 AND e.matchString NOT LIKE 'LR^%'", nativeQuery = false) + void deleteByPatientUidAndMatchStringNotLike(Long patientUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchStoredProcRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchStoredProcRepository.java new file mode 100644 index 000000000..aba2ca929 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EdxPatientMatchStoredProcRepository.java @@ -0,0 +1,56 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.EdxPatientMatchDT; +import jakarta.persistence.EntityManager; +import jakarta.persistence.ParameterMode; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.StoredProcedureQuery; +import jakarta.transaction.Transactional; +import org.springframework.stereotype.Repository; + +@Repository +public class EdxPatientMatchStoredProcRepository { + @PersistenceContext(unitName = "odseEntityManagerFactory") // Specify the persistence unit name + private EntityManager entityManager; + + @Transactional + public EdxPatientMatchDT getEdxPatientMatch(String typeCd, String matchString) throws DataProcessingException { + EdxPatientMatchDT edxPatientMatchDT = new EdxPatientMatchDT(); + + try { + + StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("GetEdxPatientMatch_SP"); + + // Register the parameters + storedProcedure.registerStoredProcedureParameter("type_cd", String.class, ParameterMode.IN); + storedProcedure.registerStoredProcedureParameter("match_string", String.class, ParameterMode.IN); + storedProcedure.registerStoredProcedureParameter("Patient_uid", Long.class, ParameterMode.OUT); + storedProcedure.registerStoredProcedureParameter("match_string_hashcode", Long.class, ParameterMode.OUT); + + // Set the parameter values + storedProcedure.setParameter("type_cd", typeCd); + storedProcedure.setParameter("match_string", matchString); + + // Execute the stored procedure + storedProcedure.execute(); + + // Get the output parameters + Long patientUid = (Long) storedProcedure.getOutputParameterValue("Patient_uid"); + Long matchStringHashcode = (Long) storedProcedure.getOutputParameterValue("match_string_hashcode"); + + // Do something with the output parameters + System.out.println("Patient UID: " + patientUid); + System.out.println("Match String Hashcode: " + matchStringHashcode); + + edxPatientMatchDT.setPatientUid(patientUid); + edxPatientMatchDT.setMatchStringHashCode(matchStringHashcode); + edxPatientMatchDT.setTypeCd(typeCd); + edxPatientMatchDT.setMatchString(matchString); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage()); + } + return edxPatientMatchDT; + + } +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityIdRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityIdRepository.java new file mode 100644 index 000000000..ec45b3160 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityIdRepository.java @@ -0,0 +1,19 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityId; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonEthnicGroup; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonRace; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.math.BigInteger; +import java.util.List; +import java.util.Optional; + +@Repository +public interface EntityIdRepository extends JpaRepository { + @Query("SELECT pn FROM EntityId pn WHERE pn.entityUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityLocatorParticipationRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityLocatorParticipationRepository.java new file mode 100644 index 000000000..3d4a945af --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityLocatorParticipationRepository.java @@ -0,0 +1,18 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityId; +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityLocatorParticipation; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.math.BigInteger; +import java.util.List; +import java.util.Optional; + +@Repository +public interface EntityLocatorParticipationRepository extends JpaRepository { + @Query("SELECT pn FROM EntityLocatorParticipation pn WHERE pn.entityUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityRepository.java new file mode 100644 index 000000000..4794e67d6 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/EntityRepository.java @@ -0,0 +1,9 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityODSE; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EntityRepository extends JpaRepository { +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/LocalUidGeneratorRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/LocalUidGeneratorRepository.java new file mode 100644 index 000000000..dfeb34875 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/LocalUidGeneratorRepository.java @@ -0,0 +1,15 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.LocalUidGenerator; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonEthnicGroup; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface LocalUidGeneratorRepository extends JpaRepository { + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonEthnicRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonEthnicRepository.java new file mode 100644 index 000000000..ef7ccd2d2 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonEthnicRepository.java @@ -0,0 +1,19 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonEthnicGroup; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonName; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonRace; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.math.BigInteger; +import java.util.List; +import java.util.Optional; + +@Repository +public interface PersonEthnicRepository extends JpaRepository { + @Query("SELECT pn FROM PersonEthnicGroup pn WHERE pn.personUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonNameRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonNameRepository.java new file mode 100644 index 000000000..0e5265f8d --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonNameRepository.java @@ -0,0 +1,20 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.Person; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonName; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface PersonNameRepository extends JpaRepository { + @Query("SELECT pn FROM PersonName pn WHERE pn.personUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); + + @Query(value = "SELECT TOP(1) person_name_seq FROM Person_name WHERE person_uid = :parentUid ORDER BY person_name_seq desc", nativeQuery = true) + List findBySeqIdByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRaceRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRaceRepository.java new file mode 100644 index 000000000..eaa94a286 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRaceRepository.java @@ -0,0 +1,19 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonName; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonRace; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.math.BigInteger; +import java.util.List; +import java.util.Optional; + +@Repository +public interface PersonRaceRepository extends JpaRepository { + @Query("SELECT pn FROM PersonRace pn WHERE pn.personUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); + +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRepository.java new file mode 100644 index 000000000..63e2a5ea3 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PersonRepository.java @@ -0,0 +1,15 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.Person; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PersonName; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.List; +import java.util.Optional; + +public interface PersonRepository extends JpaRepository { + @Query("SELECT pn FROM Person pn WHERE pn.personParentUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PhysicalLocatorRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PhysicalLocatorRepository.java new file mode 100644 index 000000000..81e53623a --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PhysicalLocatorRepository.java @@ -0,0 +1,17 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.PhysicalLocator; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PostalLocator; +import gov.cdc.dataprocessing.repository.nbs.odse.model.TeleLocator; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface PhysicalLocatorRepository extends JpaRepository { + @Query(value = "SELECT x FROM PhysicalLocator x WHERE x.physicalLocatorUid IN :uids", nativeQuery = false) + List findByPhysicalLocatorUids(@Param("uids") List uids); +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PostalLocatorRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PostalLocatorRepository.java new file mode 100644 index 000000000..9e69ff1af --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/PostalLocatorRepository.java @@ -0,0 +1,17 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.PhysicalLocator; +import gov.cdc.dataprocessing.repository.nbs.odse.model.PostalLocator; +import gov.cdc.dataprocessing.repository.nbs.odse.model.TeleLocator; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface PostalLocatorRepository extends JpaRepository { + @Query(value = "SELECT x FROM PostalLocator x WHERE x.postalLocatorUid IN :uids", nativeQuery = false) + List findByPostalLocatorUids(@Param("uids") List uids); +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/RoleRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/RoleRepository.java new file mode 100644 index 000000000..73ec4dd68 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/RoleRepository.java @@ -0,0 +1,18 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityLocatorParticipation; +import gov.cdc.dataprocessing.repository.nbs.odse.model.Role; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.math.BigInteger; +import java.util.List; +import java.util.Optional; + +@Repository +public interface RoleRepository extends JpaRepository { + @Query("SELECT pn FROM Role pn WHERE pn.subjectEntityUid = :parentUid") + Optional> findByParentUid(@Param("parentUid") Long parentUid); +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/TeleLocatorRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/TeleLocatorRepository.java new file mode 100644 index 000000000..05f54e57a --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/TeleLocatorRepository.java @@ -0,0 +1,16 @@ +package gov.cdc.dataprocessing.repository.nbs.odse; + +import gov.cdc.dataprocessing.repository.nbs.odse.model.Role; +import gov.cdc.dataprocessing.repository.nbs.odse.model.TeleLocator; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface TeleLocatorRepository extends JpaRepository { + @Query(value = "SELECT x FROM TeleLocator x WHERE x.teleLocatorUid IN :uids", nativeQuery = false) + List findByTeleLocatorUids(@Param("uids") List uids); +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/CaseManagement.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/CaseManagement.java index afec85976..b0874526a 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/CaseManagement.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/CaseManagement.java @@ -4,7 +4,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.Serializable; import java.sql.Timestamp; @Entity diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxActivityDetailLog.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxActivityDetailLog.java index 9d0bc484d..f4146beaf 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxActivityDetailLog.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxActivityDetailLog.java @@ -4,9 +4,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.Serializable; -import java.sql.Timestamp; - @Entity @Getter @Setter diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxPatientMatch.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxPatientMatch.java new file mode 100644 index 000000000..231084356 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EdxPatientMatch.java @@ -0,0 +1,39 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model; + +import gov.cdc.dataprocessing.model.classic_model.dto.EdxPatientMatchDT; +import jakarta.persistence.*; +import jakarta.persistence.Entity; +import lombok.Data; + +@Entity +@Table(name = "EDX_patient_match") +@Data +public class EdxPatientMatch { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "EDX_patient_match_uid") + private Long edxPatientMatchUid; + + @Column(name = "Patient_uid") + private Long patientUid; + + @Column(name = "match_string") + private String matchString; + + @Column(name = "type_cd") + private String typeCd; + + @Column(name = "match_string_hashcode") + private Long matchStringHashcode; + + public EdxPatientMatch() { + + } + public EdxPatientMatch(EdxPatientMatchDT dto) { + this.patientUid = dto.getPatientUid(); + this.matchString = dto.getMatchString(); + this.typeCd = dto.getTypeCd(); + this.matchStringHashcode = dto.getMatchStringHashCode(); + } +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityId.java index a8211762d..778ba026b 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityId.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityId.java @@ -1,12 +1,14 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.EntityIdDT; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Data; -import java.util.Date; +import java.sql.Timestamp; + @Data @Entity @@ -17,15 +19,14 @@ public class EntityId { @Column(name = "entity_uid", nullable = false) private Long entityUid; - @Id @Column(name = "entity_id_seq", nullable = false) - private Short entityIdSeq; + private Integer entityIdSeq; @Column(name = "add_reason_cd", length = 20) private String addReasonCode; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") private Long addUserId; @@ -43,16 +44,16 @@ public class EntityId { private String durationUnitCode; @Column(name = "effective_from_time") - private Date effectiveFromTime; + private Timestamp effectiveFromTime; @Column(name = "effective_to_time") - private Date effectiveToTime; + private Timestamp effectiveToTime; @Column(name = "last_chg_reason_cd", length = 20) private String lastChangeReasonCode; @Column(name = "last_chg_time") - private Date lastChangeTime; + private Timestamp lastChangeTime; @Column(name = "last_chg_user_id") private Long lastChangeUserId; @@ -61,16 +62,16 @@ public class EntityId { private String recordStatusCode; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "root_extension_txt", length = 100) private String rootExtensionText; @Column(name = "status_cd", length = 1) - private Character statusCode; + private String statusCode; @Column(name = "status_time") - private Date statusTime; + private Timestamp statusTime; @Column(name = "type_cd", length = 50) private String typeCode; @@ -82,13 +83,13 @@ public class EntityId { private String userAffiliationText; @Column(name = "valid_from_time") - private Date validFromTime; + private Timestamp validFromTime; @Column(name = "valid_to_time") - private Date validToTime; + private Timestamp validToTime; @Column(name = "as_of_date") - private Date asOfDate; + private Timestamp asOfDate; @Column(name = "assigning_authority_id_type", length = 50) private String assigningAuthorityIdType; @@ -98,4 +99,36 @@ public class EntityId { // private Entity entity; // Constructors and other methods (if needed) + public EntityId() { + + } + public EntityId(EntityIdDT entityIdDT) { + this.entityUid = entityIdDT.getEntityUid(); + this.entityIdSeq = entityIdDT.getEntityIdSeq(); + this.addReasonCode = entityIdDT.getAddReasonCd(); + this.addTime = entityIdDT.getAddTime(); + this.addUserId = entityIdDT.getAddUserId(); + this.assigningAuthorityCode = entityIdDT.getAssigningAuthorityCd(); + this.assigningAuthorityDescription = entityIdDT.getAssigningAuthorityDescTxt(); + this.durationAmount = entityIdDT.getDurationAmt(); + this.durationUnitCode = entityIdDT.getDurationUnitCd(); + this.effectiveFromTime = entityIdDT.getEffectiveFromTime(); + this.effectiveToTime = entityIdDT.getEffectiveToTime(); + this.lastChangeReasonCode = entityIdDT.getLastChgReasonCd(); + this.lastChangeTime = entityIdDT.getLastChgTime(); + this.lastChangeUserId = entityIdDT.getLastChgUserId(); + this.recordStatusCode = entityIdDT.getRecordStatusCd(); + this.recordStatusTime = entityIdDT.getRecordStatusTime(); + this.rootExtensionText = entityIdDT.getRootExtensionTxt(); + this.statusCode = entityIdDT.getStatusCd(); + this.statusTime = entityIdDT.getStatusTime(); + this.typeCode = entityIdDT.getTypeCd(); + this.typeDescriptionText = entityIdDT.getTypeDescTxt(); + this.userAffiliationText = entityIdDT.getUserAffiliationTxt(); + this.validFromTime = entityIdDT.getValidFromTime(); + this.validToTime = entityIdDT.getValidToTime(); + this.asOfDate = entityIdDT.getAsOfDate(); + this.assigningAuthorityIdType = entityIdDT.getAssigningAuthorityIdType(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityLocatorParticipation.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityLocatorParticipation.java index d655a6d40..142b299e2 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityLocatorParticipation.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityLocatorParticipation.java @@ -1,35 +1,36 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import gov.cdc.dataprocessing.model.classic_model.dto.EntityLocatorParticipationDT; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.EntityLocatorParticipationId; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonEthnicGroupId; +import jakarta.persistence.*; import lombok.Data; import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; @Entity @Table(name = "Entity_locator_participation", schema = "dbo") +@IdClass(EntityLocatorParticipationId.class) // Specify the IdClass @Data public class EntityLocatorParticipation { @Id @Column(name = "entity_uid", nullable = false) - private BigInteger entityUid; + private Long entityUid; @Id @Column(name = "locator_uid", nullable = false) - private BigInteger locatorUid; + private Long locatorUid; @Column(name = "add_reason_cd", length = 20) private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; @Column(name = "cd", length = 50) private String cd; @@ -47,16 +48,16 @@ public class EntityLocatorParticipation { private String durationUnitCd; @Column(name = "from_time") - private Date fromTime; + private Timestamp fromTime; @Column(name = "last_chg_reason_cd", length = 20) private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; @Column(name = "locator_desc_txt", length = 2000) private String locatorDescTxt; @@ -65,16 +66,16 @@ public class EntityLocatorParticipation { private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "status_cd", length = 1) - private Character statusCd; + private String statusCd; @Column(name = "status_time") - private Date statusTime; + private Timestamp statusTime; @Column(name = "to_time") - private Date toTime; + private Timestamp toTime; @Column(name = "use_cd", length = 20) private String useCd; @@ -86,10 +87,41 @@ public class EntityLocatorParticipation { private String validTimeTxt; @Column(name = "version_ctrl_nbr", nullable = false) - private Short versionCtrlNbr; + private Integer versionCtrlNbr; @Column(name = "as_of_date") - private Date asOfDate; + private Timestamp asOfDate; // Add getters and setters as needed + public EntityLocatorParticipation(EntityLocatorParticipationDT entityLocatorParticipationDT) { + this.entityUid = entityLocatorParticipationDT.getEntityUid(); + this.locatorUid = entityLocatorParticipationDT.getLocatorUid(); + this.addReasonCd = entityLocatorParticipationDT.getAddReasonCd(); + this.addTime = entityLocatorParticipationDT.getAddTime(); + this.addUserId = entityLocatorParticipationDT.getAddUserId(); + this.cd = entityLocatorParticipationDT.getCd(); + this.cdDescTxt = entityLocatorParticipationDT.getCdDescTxt(); + this.classCd = entityLocatorParticipationDT.getClassCd(); + this.durationAmt = entityLocatorParticipationDT.getDurationAmt(); + this.durationUnitCd = entityLocatorParticipationDT.getDurationUnitCd(); + this.fromTime = entityLocatorParticipationDT.getFromTime(); + this.lastChgReasonCd = entityLocatorParticipationDT.getLastChgReasonCd(); + this.lastChgTime = entityLocatorParticipationDT.getLastChgTime(); + this.lastChgUserId = entityLocatorParticipationDT.getLastChgUserId(); + this.locatorDescTxt = entityLocatorParticipationDT.getLocatorDescTxt(); + this.recordStatusCd = entityLocatorParticipationDT.getRecordStatusCd(); + this.recordStatusTime = entityLocatorParticipationDT.getRecordStatusTime(); + this.statusCd = entityLocatorParticipationDT.getStatusCd(); + this.statusTime = entityLocatorParticipationDT.getStatusTime(); + this.toTime = entityLocatorParticipationDT.getToTime(); + this.useCd = entityLocatorParticipationDT.getUseCd(); + this.userAffiliationTxt = entityLocatorParticipationDT.getUserAffiliationTxt(); + this.validTimeTxt = entityLocatorParticipationDT.getValidTimeTxt(); + this.versionCtrlNbr = entityLocatorParticipationDT.getVersionCtrlNbr(); + this.asOfDate = entityLocatorParticipationDT.getAsOfDate(); + } + + public EntityLocatorParticipation() { + + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityODSE.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityODSE.java new file mode 100644 index 000000000..42443074c --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/EntityODSE.java @@ -0,0 +1,27 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model; + + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@jakarta.persistence.Entity +@Getter +@Setter +@Table(name = "Entity") +public class EntityODSE implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @Column(name = "entity_uid") + private Long entityUid; + + @Column(name = "class_cd") + private String classCd; + + // Constructors, getters, and setters + // You can generate them using your IDE or manually as needed +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/ExportReceivingFacility.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/ExportReceivingFacility.java index c50028b3f..2d005a93b 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/ExportReceivingFacility.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/ExportReceivingFacility.java @@ -3,7 +3,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.Serializable; import java.sql.Timestamp; @Entity diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/LocalUidGenerator.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/LocalUidGenerator.java new file mode 100644 index 000000000..33bc4d728 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/LocalUidGenerator.java @@ -0,0 +1,28 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model; + + +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Data +@Table(name = "Local_UID_generator") +public class LocalUidGenerator { + + @Id + @Column(name = "class_name_cd") + private String classNameCd; + + @Column(name = "type_cd") + private String typeCd; + + @Column(name = "UID_prefix_cd") + private String uidPrefixCd; + + @Column(name = "UID_suffix_CD") + private String uidSuffixCd; + + @Column(name = "seed_value_nbr") + private Long seedValueNbr; + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/NBSDocument.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/NBSDocument.java index 1ed5a1e8c..5694e6bb1 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/NBSDocument.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/NBSDocument.java @@ -4,7 +4,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.Serializable; import java.sql.Blob; import java.sql.Timestamp; diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Notification.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Notification.java index 55647b906..397cbcdd1 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Notification.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Notification.java @@ -4,7 +4,6 @@ import lombok.Getter; import lombok.Setter; -import java.io.Serializable; import java.sql.Timestamp; @Entity diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Person.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Person.java index 48139e85c..20c2c8dea 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Person.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Person.java @@ -1,5 +1,7 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonDT; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -33,13 +35,13 @@ public class Person { private String administrativeGenderCd; @Column(name = "age_calc") - private Short ageCalc; + private Integer ageCalc; @Column(name = "age_calc_time") private Timestamp ageCalcTime; @Column(name = "age_calc_unit_cd") - private Character ageCalcUnitCd; + private String ageCalcUnitCd; @Column(name = "age_category_cd") private String ageCategoryCd; @@ -54,10 +56,10 @@ public class Person { private String ageReportedUnitCd; @Column(name = "birth_gender_cd") - private Character birthGenderCd; + private String birthGenderCd; @Column(name = "birth_order_nbr") - private Short birthOrderNbr; + private Integer birthOrderNbr; @Column(name = "birth_time") private Timestamp birthTime; @@ -72,7 +74,7 @@ public class Person { private String cdDescTxt; @Column(name = "curr_sex_cd") - private Character currSexCd; + private String currSexCd; @Column(name = "deceased_ind_cd") private String deceasedIndCd; @@ -110,230 +112,342 @@ public class Person { @Column(name = "marital_status_desc_txt") private String maritalStatusDescTxt; - @Column(name = "mothersMaidenNm") + @Column(name = "mothers_maiden_nm") private String mothersMaidenNm; - @Column(name = "multipleBirthInd") + @Column(name = "multiple_birth_ind") private String multipleBirthInd; - @Column(name = "occupationCd") + @Column(name = "occupation_cd") private String occupationCd; - @Column(name = "preferredGenderCd") + @Column(name = "preferred_gender_cd") private String preferredGenderCd; - @Column(name = "primLangCd") + @Column(name = "prim_lang_cd") private String primLangCd; - @Column(name = "primLangDescTxt") + @Column(name = "prim_lang_desc_txt") private String primLangDescTxt; - @Column(name = "recordStatusCd") + @Column(name = "record_status_cd") private String recordStatusCd; - @Column(name = "recordStatusTime") + @Column(name = "record_status_time") private Timestamp recordStatusTime; - @Column(name = "statusCd") - private Character statusCd; + @Column(name = "status_cd") + private String statusCd; - @Column(name = "statusTime") + @Column(name = "status_time") private Timestamp statusTime; - @Column(name = "survivedIndCd") - private Character survivedIndCd; + @Column(name = "survived_ind_cd") + private String survivedIndCd; - @Column(name = "userAffiliationTxt") + @Column(name = "user_affiliation_txt") private String userAffiliationTxt; - @Column(name = "firstNm") + @Column(name = "first_nm") private String firstNm; - @Column(name = "lastNm") + @Column(name = "last_nm") private String lastNm; - @Column(name = "middleNm") + @Column(name = "middle_nm") private String middleNm; - @Column(name = "nmPrefix") + @Column(name = "nm_prefix") private String nmPrefix; - @Column(name = "nmSuffix") + @Column(name = "nm_suffix") private String nmSuffix; - @Column(name = "preferredNm") + @Column(name = "preferred_nm") private String preferredNm; - @Column(name = "hmStreetAddr1") + @Column(name = "hm_street_addr1") private String hmStreetAddr1; - @Column(name = "hmStreetAddr2") + @Column(name = "hm_street_addr2") private String hmStreetAddr2; - @Column(name = "hmCityCd") + @Column(name = "hm_city_cd") private String hmCityCd; - @Column(name = "hmCityDescTxt") + @Column(name = "hm_city_desc_txt") private String hmCityDescTxt; - @Column(name = "hmStateCd") + @Column(name = "hm_state_cd") private String hmStateCd; - @Column(name = "hmZipCd") + @Column(name = "hm_zip_cd") private String hmZipCd; - @Column(name = "hmCntyCd") + @Column(name = "hm_cnty_cd") private String hmCntyCd; - @Column(name = "hmCntryCd") + @Column(name = "hm_cntry_cd") private String hmCntryCd; - @Column(name = "hmPhoneNbr") + @Column(name = "hm_phone_nbr") private String hmPhoneNbr; - @Column(name = "hmPhoneCntryCd") + @Column(name = "hm_phone_cntry_cd") private String hmPhoneCntryCd; - @Column(name = "hmEmailAddr") + @Column(name = "hm_email_addr") private String hmEmailAddr; - @Column(name = "cellPhoneNbr") + @Column(name = "cell_phone_nbr") private String cellPhoneNbr; - @Column(name = "wkStreetAddr1") + @Column(name = "wk_street_addr1") private String wkStreetAddr1; - @Column(name = "wkStreetAddr2") + @Column(name = "wk_street_addr2") private String wkStreetAddr2; - @Column(name = "wkCityCd") + @Column(name = "wk_city_cd") private String wkCityCd; - @Column(name = "wkCityDescTxt") + @Column(name = "wk_city_desc_txt") private String wkCityDescTxt; - @Column(name = "wkStateCd") + @Column(name = "wk_state_cd") private String wkStateCd; - @Column(name = "wkZipCd") + @Column(name = "wk_zip_cd") private String wkZipCd; - @Column(name = "wkCntyCd") + @Column(name = "wk_cnty_cd") private String wkCntyCd; - @Column(name = "wkCntryCd") + @Column(name = "wk_cntry_cd") private String wkCntryCd; - @Column(name = "wkPhoneNbr") + @Column(name = "wk_phone_nbr") private String wkPhoneNbr; - @Column(name = "wkPhoneCntryCd") + @Column(name = "wk_phone_cntry_cd") private String wkPhoneCntryCd; - @Column(name = "wkEmailAddr") + @Column(name = "wk_email_addr") private String wkEmailAddr; @Column(name = "SSN") private String ssn; - @Column(name = "medicaidNum") + @Column(name = "medicaid_num") private String medicaidNum; - @Column(name = "dlNum") + @Column(name = "dl_num") private String dlNum; - @Column(name = "dlStateCd") + @Column(name = "dl_state_cd") private String dlStateCd; - @Column(name = "raceCd") + @Column(name = "race_cd") private String raceCd; - @Column(name = "raceSeqNbr") - private Short raceSeqNbr; + @Column(name = "race_seq_nbr") + private Integer raceSeqNbr; - @Column(name = "raceCategoryCd") + @Column(name = "race_category_cd") private String raceCategoryCd; - @Column(name = "ethnicityGroupCd") + @Column(name = "ethnicity_group_cd") private String ethnicityGroupCd; - @Column(name = "ethnicGroupSeqNbr") - private Short ethnicGroupSeqNbr; + @Column(name = "ethnic_group_seq_nbr") + private Integer ethnicGroupSeqNbr; - @Column(name = "adultsInHouseNbr") - private Short adultsInHouseNbr; + @Column(name = "adults_in_house_nbr") + private Integer adultsInHouseNbr; - @Column(name = "childrenInHouseNbr") - private Short childrenInHouseNbr; + @Column(name = "children_in_house_nbr") + private Integer childrenInHouseNbr; - @Column(name = "birthCityCd") + @Column(name = "birth_city_cd") private String birthCityCd; - @Column(name = "birthCityDescTxt") + @Column(name = "birth_city_desc_txt") private String birthCityDescTxt; - @Column(name = "birthCntryCd") + @Column(name = "birth_cntry_cd") private String birthCntryCd; - @Column(name = "birthStateCd") + @Column(name = "birth_state_cd") private String birthStateCd; - @Column(name = "raceDescTxt") + @Column(name = "race_desc_txt") private String raceDescTxt; - @Column(name = "ethnicGroupDescTxt") + @Column(name = "ethnic_group_desc_txt") private String ethnicGroupDescTxt; - @Column(name = "versionCtrlNbr") - private Short versionCtrlNbr; + @Column(name = "version_ctrl_nbr", nullable = false) + private Integer versionCtrlNbr; - @Column(name = "asOfDateAdmin") + @Column(name = "as_of_date_admin") private Timestamp asOfDateAdmin; - @Column(name = "asOfDateEthnicity") + @Column(name = "as_of_date_ethnicity") private Timestamp asOfDateEthnicity; - @Column(name = "asOfDateGeneral") + @Column(name = "as_of_date_general") private Timestamp asOfDateGeneral; - @Column(name = "asOfDateMorbidity") + @Column(name = "as_of_date_morbidity") private Timestamp asOfDateMorbidity; - @Column(name = "asOfDateSex") + @Column(name = "as_of_date_sex") private Timestamp asOfDateSex; - @Column(name = "electronicInd") - private Character electronicInd; + @Column(name = "electronic_ind") + private String electronicInd; - @Column(name = "personParentUid") + @Column(name = "person_parent_uid") private Long personParentUid; - @Column(name = "dedupMatchInd") - private Character dedupMatchInd; + @Column(name = "dedup_match_ind") + private String dedupMatchInd; - @Column(name = "groupNbr") + @Column(name = "group_nbr") private Integer groupNbr; - @Column(name = "groupTime") + @Column(name = "group_time") private Timestamp groupTime; - @Column(name = "edxInd") + @Column(name = "edx_ind") private String edxInd; - @Column(name = "speaksEnglishCd") + @Column(name = "speaks_english_cd") private String speaksEnglishCd; - @Column(name = "additionalGenderCd") + @Column(name = "additional_gender_cd") private String additionalGenderCd; - @Column(name = "eharsId") + @Column(name = "ehars_id") private String eharsId; - @Column(name = "ethnicUnkReasonCd") + @Column(name = "ethnic_unk_reason_cd") private String ethnicUnkReasonCd; - @Column(name = "sexUnkReasonCd") + @Column(name = "sex_unk_reason_cd") private String sexUnkReasonCd; + // Constructors, getters, and setters + public Person() { + + } + public Person(PersonDT personDT) { + this.personUid = personDT.getPersonUid(); + this.addReasonCd = personDT.getAddReasonCd(); + this.addTime = personDT.getAddTime(); + this.addUserId = personDT.getAddUserId(); + this.administrativeGenderCd = personDT.getAdministrativeGenderCd(); + this.ageCalc = personDT.getAgeCalc(); + this.ageCalcTime = personDT.getAgeCalcTime(); + this.ageCalcUnitCd = personDT.getAgeCalcUnitCd(); + this.ageCategoryCd = personDT.getAgeCategoryCd(); + this.ageReported = personDT.getAgeReported(); + this.ageReportedTime = personDT.getAgeReportedTime(); + this.ageReportedUnitCd = personDT.getAgeReportedUnitCd(); + this.birthGenderCd = personDT.getBirthGenderCd(); + this.birthOrderNbr = personDT.getBirthOrderNbr(); + this.birthTime = personDT.getBirthTime(); + this.birthTimeCalc = personDT.getBirthTimeCalc(); + this.cd = personDT.getCd(); + this.cdDescTxt = personDT.getCdDescTxt(); + this.currSexCd = personDT.getCurrSexCd(); + this.deceasedIndCd = personDT.getDeceasedIndCd(); + this.deceasedTime = personDT.getDeceasedTime(); + this.description = personDT.getDescription(); + this.educationLevelCd = personDT.getEducationLevelCd(); + this.educationLevelDescTxt = personDT.getEducationLevelDescTxt(); + this.ethnicGroupInd = personDT.getEthnicGroupInd(); + this.lastChgReasonCd = personDT.getLastChgReasonCd(); + this.lastChgTime = personDT.getLastChgTime(); + this.lastChgUserId = personDT.getLastChgUserId(); + this.localId = personDT.getLocalId(); + this.maritalStatusCd = personDT.getMaritalStatusCd(); + this.maritalStatusDescTxt = personDT.getMaritalStatusDescTxt(); + this.mothersMaidenNm = personDT.getMothersMaidenNm(); + this.multipleBirthInd = personDT.getMultipleBirthInd(); + this.occupationCd = personDT.getOccupationCd(); + this.preferredGenderCd = personDT.getPreferredGenderCd(); + this.primLangCd = personDT.getPrimLangCd(); + this.primLangDescTxt = personDT.getPrimLangDescTxt(); + this.recordStatusCd = personDT.getRecordStatusCd(); + this.recordStatusTime = personDT.getRecordStatusTime(); + this.statusCd = personDT.getStatusCd(); + this.statusTime = personDT.getStatusTime(); + this.survivedIndCd = personDT.getSurvivedIndCd(); + this.userAffiliationTxt = personDT.getUserAffiliationTxt(); + this.firstNm = personDT.getFirstNm(); + this.lastNm = personDT.getLastNm(); + this.middleNm = personDT.getMiddleNm(); + this.nmPrefix = personDT.getNmPrefix(); + this.nmSuffix = personDT.getNmSuffix(); + this.preferredNm = personDT.getPreferredNm(); + this.hmStreetAddr1 = personDT.getHmStreetAddr1(); + this.hmStreetAddr2 = personDT.getHmStreetAddr2(); + this.hmCityCd = personDT.getHmCityCd(); + this.hmCityDescTxt = personDT.getHmCityDescTxt(); + this.hmStateCd = personDT.getHmStateCd(); + this.hmZipCd = personDT.getHmZipCd(); + this.hmCntyCd = personDT.getHmCntyCd(); + this.hmCntryCd = personDT.getHmCntryCd(); + this.hmPhoneNbr = personDT.getHmPhoneNbr(); + this.hmPhoneCntryCd = personDT.getHmPhoneCntryCd(); + this.hmEmailAddr = personDT.getHmEmailAddr(); + this.cellPhoneNbr = personDT.getCellPhoneNbr(); + this.wkStreetAddr1 = personDT.getWkStreetAddr1(); + this.wkStreetAddr2 = personDT.getWkStreetAddr2(); + this.wkCityCd = personDT.getWkCityCd(); + this.wkCityDescTxt = personDT.getWkCityDescTxt(); + this.wkStateCd = personDT.getWkStateCd(); + this.wkZipCd = personDT.getWkZipCd(); + this.wkCntyCd = personDT.getWkCntyCd(); + this.wkCntryCd = personDT.getWkCntryCd(); + this.wkPhoneNbr = personDT.getWkPhoneNbr(); + this.wkPhoneCntryCd = personDT.getWkPhoneCntryCd(); + this.wkEmailAddr = personDT.getWkEmailAddr(); + this.ssn = personDT.getSSN(); + this.medicaidNum = personDT.getMedicaidNum(); + this.dlNum = personDT.getDlNum(); + this.dlStateCd = personDT.getDlStateCd(); + this.raceCd = personDT.getRaceCd(); + this.raceSeqNbr = personDT.getRaceSeqNbr(); + this.raceCategoryCd = personDT.getRaceCategoryCd(); + this.ethnicityGroupCd = personDT.getEthnicityGroupCd(); + this.ethnicGroupSeqNbr = personDT.getEthnicGroupSeqNbr(); + this.adultsInHouseNbr = personDT.getAdultsInHouseNbr(); + this.childrenInHouseNbr = personDT.getChildrenInHouseNbr(); + this.birthCityCd = personDT.getBirthCityCd(); + this.birthCityDescTxt = personDT.getBirthCityDescTxt(); + this.birthCntryCd = personDT.getBirthCntryCd(); + this.birthStateCd = personDT.getBirthStateCd(); + this.raceDescTxt = personDT.getRaceDescTxt(); + this.ethnicGroupDescTxt = personDT.getEthnicGroupDescTxt(); + this.versionCtrlNbr = personDT.getVersionCtrlNbr(); + this.asOfDateAdmin = personDT.getAsOfDateAdmin(); + this.asOfDateEthnicity = personDT.getAsOfDateEthnicity(); + this.asOfDateGeneral = personDT.getAsOfDateGeneral(); + this.asOfDateMorbidity = personDT.getAsOfDateMorbidity(); + this.asOfDateSex = personDT.getAsOfDateSex(); + this.electronicInd = personDT.getElectronicInd(); + this.personParentUid = personDT.getPersonParentUid(); + this.dedupMatchInd = personDT.getDedupMatchInd(); + this.groupNbr = personDT.getGroupNbr(); + this.groupTime = personDT.getGroupTime(); + this.edxInd = personDT.getEdxInd(); + this.speaksEnglishCd = personDT.getSpeaksEnglishCd(); + this.additionalGenderCd = personDT.getAdditionalGenderCd(); + this.eharsId = personDT.getEharsId(); + this.ethnicUnkReasonCd = personDT.getEthnicUnkReasonCd(); + this.sexUnkReasonCd = personDT.getSexUnkReasonCd(); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonEthnicGroup.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonEthnicGroup.java index 3a05da57b..764b0de38 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonEthnicGroup.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonEthnicGroup.java @@ -1,22 +1,22 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonEthnicGroupDT; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonEthnicGroupId; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonNameId; +import jakarta.persistence.*; import lombok.Data; import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; @Entity @Table(name = "Person_ethnic_group", schema = "dbo") +@IdClass(PersonEthnicGroupId.class) // Specify the IdClass @Data public class PersonEthnicGroup { - @Id @Column(name = "person_uid", nullable = false) - private BigInteger personUid; + private Long personUid; @Id @Column(name = "ethnic_group_cd", nullable = false, length = 20) @@ -26,10 +26,10 @@ public class PersonEthnicGroup { private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; @Column(name = "ethnic_group_desc_txt", length = 100) private String ethnicGroupDescTxt; @@ -38,19 +38,38 @@ public class PersonEthnicGroup { private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; @Column(name = "record_status_cd", length = 20) private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "user_affiliation_txt", length = 20) private String userAffiliationTxt; // Add getters and setters as needed + + public PersonEthnicGroup() { + + } + public PersonEthnicGroup(PersonEthnicGroupDT personEthnicGroupDT) { + this.personUid = personEthnicGroupDT.getPersonUid(); + this.ethnicGroupCd = personEthnicGroupDT.getEthnicGroupCd(); + this.addReasonCd = personEthnicGroupDT.getAddReasonCd(); + this.addTime = personEthnicGroupDT.getAddTime(); + this.addUserId = personEthnicGroupDT.getAddUserId(); + this.ethnicGroupDescTxt = personEthnicGroupDT.getEthnicGroupDescTxt(); + this.lastChgReasonCd = personEthnicGroupDT.getLastChgReasonCd(); + this.lastChgTime = personEthnicGroupDT.getLastChgTime(); + this.lastChgUserId = personEthnicGroupDT.getLastChgUserId(); + this.recordStatusCd = personEthnicGroupDT.getRecordStatusCd(); + this.recordStatusTime = personEthnicGroupDT.getRecordStatusTime(); + this.userAffiliationTxt = personEthnicGroupDT.getUserAffiliationTxt(); + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonName.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonName.java index b53f9e593..2bdd8b424 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonName.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonName.java @@ -1,34 +1,36 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonNameDT; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonNameId; import jakarta.persistence.*; import lombok.Data; -import java.util.Date; +import java.sql.Timestamp; @Data @Entity +@IdClass(PersonNameId.class) // Specify the IdClass @Table(name = "Person_name") public class PersonName { - @Id @Column(name = "person_uid") private Long personUid; @Id @Column(name = "person_name_seq") - private Short personNameSeq; + private Integer personNameSeq; @Column(name = "add_reason_cd") private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") private Long addUserId; @Column(name = "default_nm_ind") - private Character defaultNmInd; + private String defaultNmInd; @Column(name = "duration_amt") private String durationAmt; @@ -43,13 +45,13 @@ public class PersonName { private String firstNmSndx; @Column(name = "from_time") - private Date fromTime; + private Timestamp fromTime; @Column(name = "last_chg_reason_cd") private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") private Long lastChgUserId; @@ -88,24 +90,61 @@ public class PersonName { private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "status_cd", nullable = false) - private Character statusCd; + private String statusCd; @Column(name = "status_time", nullable = false) - private Date statusTime; + private Timestamp statusTime; @Column(name = "to_time") - private Date toTime; + private Timestamp toTime; @Column(name = "user_affiliation_txt") private String userAffiliationTxt; @Column(name = "as_of_date") - private Date asOfDate; + private Timestamp asOfDate; // Constructors, getters, and setters (Lombok-generated) // Define relationships, if any, with other entities using JPA annotations + + public PersonName() { + + } + public PersonName(PersonNameDT personNameDT) { + this.personUid = personNameDT.getPersonUid(); + this.personNameSeq = personNameDT.getPersonNameSeq(); + this.addReasonCd = personNameDT.getAddReasonCd(); + this.addTime = personNameDT.getAddTime(); + this.addUserId = personNameDT.getAddUserId(); + this.defaultNmInd = personNameDT.getDefaultNmInd(); + this.durationAmt = personNameDT.getDurationAmt(); + this.durationUnitCd = personNameDT.getDurationUnitCd(); + this.firstNm = personNameDT.getFirstNm(); + this.firstNmSndx = personNameDT.getFirstNmSndx(); + this.fromTime = personNameDT.getFromTime(); + this.lastChgReasonCd = personNameDT.getLastChgReasonCd(); + this.lastChgTime = personNameDT.getLastChgTime(); + this.lastChgUserId = personNameDT.getLastChgUserId(); + this.lastNm = personNameDT.getLastNm(); + this.lastNmSndx = personNameDT.getLastNmSndx(); + this.lastNm2 = personNameDT.getLastNm2(); + this.lastNm2Sndx = personNameDT.getLastNm2Sndx(); + this.middleNm = personNameDT.getMiddleNm(); + this.middleNm2 = personNameDT.getMiddleNm2(); + this.nmDegree = personNameDT.getNmDegree(); + this.nmPrefix = personNameDT.getNmPrefix(); + this.nmSuffix = personNameDT.getNmSuffix(); + this.nmUseCd = personNameDT.getNmUseCd(); + this.recordStatusCd = personNameDT.getRecordStatusCd(); + this.recordStatusTime = personNameDT.getRecordStatusTime(); + this.statusCd = personNameDT.getStatusCd(); + this.statusTime = personNameDT.getStatusTime(); + this.toTime = personNameDT.getToTime() ; + this.userAffiliationTxt = personNameDT.getUserAffiliationTxt(); + this.asOfDate = personNameDT.getAsOfDate(); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonRace.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonRace.java index c13c2c55d..b79f96bcf 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonRace.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PersonRace.java @@ -1,22 +1,23 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonRaceDT; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonNameId; +import gov.cdc.dataprocessing.repository.nbs.odse.model.id_class.PersonRaceId; +import jakarta.persistence.*; import lombok.Data; import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; @Entity @Table(name = "Person_race", schema = "dbo") +@IdClass(PersonRaceId.class) // Specify the IdClass @Data public class PersonRace { @Id @Column(name = "person_uid", nullable = false) - private BigInteger personUid; + private Long personUid; @Id @Column(name = "race_cd", nullable = false, length = 20) @@ -26,19 +27,19 @@ public class PersonRace { private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; @Column(name = "last_chg_reason_cd", length = 20) private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; @Column(name = "race_category_cd", length = 20) private String raceCategoryCd; @@ -50,13 +51,32 @@ public class PersonRace { private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "user_affiliation_txt", length = 20) private String userAffiliationTxt; @Column(name = "as_of_date") - private Date asOfDate; + private Timestamp asOfDate; // Add getters and setters as needed + public PersonRace() { + + } + public PersonRace(PersonRaceDT personRaceDT) { + this.personUid = personRaceDT.getPersonUid(); + this.raceCd = personRaceDT.getRaceCd(); + this.addReasonCd = personRaceDT.getAddReasonCd(); + this.addTime = personRaceDT.getAddTime(); + this.addUserId = personRaceDT.getAddUserId(); + this.lastChgReasonCd = personRaceDT.getLastChgReasonCd(); + this.lastChgTime = personRaceDT.getLastChgTime(); + this.lastChgUserId = personRaceDT.getLastChgUserId(); + this.raceCategoryCd = personRaceDT.getRaceCategoryCd(); + this.raceDescTxt = personRaceDT.getRaceDescTxt(); + this.recordStatusCd = personRaceDT.getRecordStatusCd(); + this.recordStatusTime = personRaceDT.getRecordStatusTime(); + this.userAffiliationTxt = personRaceDT.getUserAffiliationTxt(); + this.asOfDate = personRaceDT.getAsOfDate(); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PhysicalLocator.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PhysicalLocator.java index f98e3a0de..e3a3ff10f 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PhysicalLocator.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PhysicalLocator.java @@ -1,5 +1,6 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.PhysicalLocatorDT; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -7,7 +8,8 @@ import lombok.Data; import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; +import java.util.Arrays; @Entity @Table(name = "Physical_locator", schema = "dbo") @@ -16,40 +18,59 @@ public class PhysicalLocator { @Id @Column(name = "physical_locator_uid", nullable = false) - private BigInteger physicalLocatorUid; + private Long physicalLocatorUid; - @Column(name = "add_reason_cd", length = 20) + @Column(name = "add_reason_cd") private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; - @Column(name = "image_txt", length = 1000) + @Column(name = "image_txt") private String imageTxt; - @Column(name = "last_chg_reason_cd", length = 20) + @Column(name = "last_chg_reason_cd") private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; - @Column(name = "locator_txt", length = 1000) + @Column(name = "locator_txt") private String locatorTxt; - @Column(name = "record_status_cd", length = 20) + @Column(name = "record_status_cd") private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; - @Column(name = "user_affiliation_txt", length = 20) + @Column(name = "user_affiliation_txt") private String userAffiliationTxt; // Add getters and setters as needed + public PhysicalLocator(PhysicalLocatorDT physicalLocatorDT) { + this.physicalLocatorUid = physicalLocatorDT.getPhysicalLocatorUid(); + this.addReasonCd = physicalLocatorDT.getAddReasonCd(); + this.addTime = physicalLocatorDT.getAddTime(); + this.addUserId = physicalLocatorDT.getAddUserId(); + this.imageTxt = Arrays.toString(physicalLocatorDT.getImageTxt()); + this.lastChgReasonCd = physicalLocatorDT.getLastChgReasonCd(); + this.lastChgTime = physicalLocatorDT.getLastChgTime(); + this.lastChgUserId = physicalLocatorDT.getLastChgUserId(); + this.locatorTxt = physicalLocatorDT.getLocatorTxt(); + this.recordStatusCd = physicalLocatorDT.getRecordStatusCd(); + this.recordStatusTime = physicalLocatorDT.getRecordStatusTime(); + this.userAffiliationTxt = physicalLocatorDT.getUserAffiliationTxt(); + } + + public PhysicalLocator() { + // Default constructor + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PostalLocator.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PostalLocator.java index c1866856d..c4c18ebd9 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PostalLocator.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/PostalLocator.java @@ -1,13 +1,14 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.PostalLocatorDT; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Data; -import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; + @Entity @Table(name = "Postal_locator", schema = "dbo") @@ -15,89 +16,123 @@ public class PostalLocator { @Id - @Column(name = "postal_locator_uid", nullable = false) - private BigInteger postalLocatorUid; + @Column(name = "postal_locator_uid") + private Long postalLocatorUid; - @Column(name = "add_reason_cd", length = 80) + @Column(name = "add_reason_cd") private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; - @Column(name = "census_block_cd", length = 20) + @Column(name = "census_block_cd") private String censusBlockCd; - @Column(name = "census_minor_civil_division_cd", length = 20) + @Column(name = "census_minor_civil_division_cd") private String censusMinorCivilDivisionCd; - @Column(name = "census_track_cd", length = 20) + @Column(name = "census_track_cd") private String censusTrackCd; - @Column(name = "city_cd", length = 20) + @Column(name = "city_cd") private String cityCd; - @Column(name = "city_desc_txt", length = 100) + @Column(name = "city_desc_txt") private String cityDescTxt; - @Column(name = "cntry_cd", length = 20) + @Column(name = "cntry_cd") private String cntryCd; - @Column(name = "cntry_desc_txt", length = 100) + @Column(name = "cntry_desc_txt") private String cntryDescTxt; - @Column(name = "cnty_cd", length = 20) + @Column(name = "cnty_cd") private String cntyCd; - @Column(name = "cnty_desc_txt", length = 100) + @Column(name = "cnty_desc_txt") private String cntyDescTxt; - @Column(name = "last_chg_reason_cd", length = 20) + @Column(name = "last_chg_reason_cd") private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; - @Column(name = "MSA_congress_district_cd", length = 20) - private String MSACongressDistrictCd; + @Column(name = "MSA_congress_district_cd") + private String msaCongressDistrictCd; - @Column(name = "record_status_cd", length = 20) + @Column(name = "record_status_cd") private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; - @Column(name = "region_district_cd", length = 20) + @Column(name = "region_district_cd") private String regionDistrictCd; - @Column(name = "state_cd", length = 20) + @Column(name = "state_cd") private String stateCd; - @Column(name = "street_addr1", length = 100) + @Column(name = "street_addr1") private String streetAddr1; - @Column(name = "street_addr2", length = 100) + @Column(name = "street_addr2") private String streetAddr2; - @Column(name = "user_affiliation_txt", length = 20) + @Column(name = "user_affiliation_txt") private String userAffiliationTxt; - @Column(name = "zip_cd", length = 20) + @Column(name = "zip_cd") private String zipCd; - @Column(name = "geocode_match_ind", length = 1) + @Column(name = "geocode_match_ind") private String geocodeMatchInd; - @Column(name = "within_city_limits_ind", length = 3) + @Column(name = "within_city_limits_ind") private String withinCityLimitsInd; - @Column(name = "census_tract", length = 10) + @Column(name = "census_tract") private String censusTract; - // Add getters and setters as needed -} + public PostalLocator(PostalLocatorDT postalLocatorDT) { + this.postalLocatorUid = postalLocatorDT.getPostalLocatorUid(); + this.addReasonCd = postalLocatorDT.getAddReasonCd(); + this.addTime = postalLocatorDT.getAddTime(); + this.addUserId = postalLocatorDT.getAddUserId(); + this.censusBlockCd = postalLocatorDT.getCensusBlockCd(); + this.censusMinorCivilDivisionCd = postalLocatorDT.getCensusMinorCivilDivisionCd(); + this.censusTrackCd = postalLocatorDT.getCensusTrackCd(); + this.cityCd = postalLocatorDT.getCityCd(); + this.cityDescTxt = postalLocatorDT.getCityDescTxt(); + this.cntryCd = postalLocatorDT.getCntryCd(); + this.cntryDescTxt = postalLocatorDT.getCntryDescTxt(); + this.cntyCd = postalLocatorDT.getCntyCd(); + this.cntyDescTxt = postalLocatorDT.getCntyDescTxt(); + this.lastChgReasonCd = postalLocatorDT.getLastChgReasonCd(); + this.lastChgTime = postalLocatorDT.getLastChgTime(); + this.lastChgUserId = postalLocatorDT.getLastChgUserId(); + this.msaCongressDistrictCd = postalLocatorDT.getMSACongressDistrictCd(); + this.recordStatusCd = postalLocatorDT.getRecordStatusCd(); + this.recordStatusTime = postalLocatorDT.getRecordStatusTime(); + this.regionDistrictCd = postalLocatorDT.getRegionDistrictCd(); + this.stateCd = postalLocatorDT.getStateCd(); + this.streetAddr1 = postalLocatorDT.getStreetAddr1(); + this.streetAddr2 = postalLocatorDT.getStreetAddr2(); + this.userAffiliationTxt = postalLocatorDT.getUserAffiliationTxt(); + this.zipCd = postalLocatorDT.getZipCd(); + this.geocodeMatchInd = postalLocatorDT.getGeocodeMatchInd(); + this.withinCityLimitsInd = postalLocatorDT.getWithinCityLimitsInd(); + this.censusTract = postalLocatorDT.getCensusTract(); + } + + public PostalLocator() { + // Default constructor + } + +} \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Role.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Role.java index 32500db4a..23786ed6f 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Role.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/Role.java @@ -1,9 +1,11 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.RoleDT; import jakarta.persistence.*; import lombok.Data; -import java.util.Date; +import java.sql.Timestamp; + @Data @Entity @@ -14,11 +16,9 @@ public class Role { @Column(name = "subject_entity_uid", nullable = false) private Long subjectEntityUid; - @Id @Column(name = "cd", length = 40, nullable = false) private String code; - @Id @Column(name = "role_seq", nullable = false) private Long roleSeq; @@ -26,7 +26,7 @@ public class Role { private String addReasonCode; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") private Long addUserId; @@ -41,16 +41,16 @@ public class Role { private String effectiveDurationUnitCode; @Column(name = "effective_from_time") - private Date effectiveFromTime; + private Timestamp effectiveFromTime; @Column(name = "effective_to_time") - private Date effectiveToTime; + private Timestamp effectiveToTime; @Column(name = "last_chg_reason_cd", length = 20) private String lastChangeReasonCode; @Column(name = "last_chg_time") - private Date lastChangeTime; + private Timestamp lastChangeTime; @Column(name = "last_chg_user_id") private Long lastChangeUserId; @@ -59,7 +59,7 @@ public class Role { private String recordStatusCode; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; @Column(name = "scoping_class_cd", length = 10) private String scopingClassCode; @@ -71,13 +71,13 @@ public class Role { private String scopingRoleCode; @Column(name = "scoping_role_seq") - private Short scopingRoleSeq; + private Integer scopingRoleSeq; @Column(name = "status_cd", length = 1, nullable = false) - private Character statusCode; + private String statusCode; @Column(name = "status_time") - private Date statusTime; + private Timestamp statusTime; @Column(name = "subject_class_cd", length = 10) private String subjectClassCode; @@ -89,4 +89,33 @@ public class Role { // @JoinColumn(name = "subject_entity_uid", referencedColumnName = "entity_uid", insertable = false, updatable = false) // private Entity entity; + public Role() { + + } + public Role(RoleDT roleDT) { + this.subjectEntityUid = roleDT.getSubjectEntityUid(); + this.code = roleDT.getCd(); + this.roleSeq = roleDT.getRoleSeq(); + this.addReasonCode = roleDT.getAddReasonCd(); + this.addTime = roleDT.getAddTime(); + this.addUserId = roleDT.getAddUserId(); + this.codeDescription = roleDT.getCdDescTxt(); + this.effectiveDurationAmount = roleDT.getEffectiveDurationAmt(); + this.effectiveDurationUnitCode = roleDT.getEffectiveDurationUnitCd(); + this.effectiveFromTime = roleDT.getEffectiveFromTime(); + this.effectiveToTime = roleDT.getEffectiveToTime(); + this.lastChangeReasonCode = roleDT.getLastChgReasonCd(); + this.lastChangeTime = roleDT.getLastChgTime(); + this.lastChangeUserId = roleDT.getLastChgUserId(); + this.recordStatusCode = roleDT.getRecordStatusCd(); + this.recordStatusTime = roleDT.getRecordStatusTime(); + this.scopingClassCode = roleDT.getScopingClassCd(); + this.scopingEntityUid = roleDT.getScopingEntityUid(); + this.scopingRoleCode = roleDT.getScopingRoleCd(); + this.scopingRoleSeq = roleDT.getScopingRoleSeq(); + this.statusCode = roleDT.getStatusCd(); + this.statusTime = roleDT.getStatusTime(); + this.subjectClassCode = roleDT.getSubjectClassCd(); + this.userAffiliationText = roleDT.getUserAffiliationTxt(); + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/TeleLocator.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/TeleLocator.java index 930c3a899..76d4a8f2d 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/TeleLocator.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/TeleLocator.java @@ -1,5 +1,6 @@ package gov.cdc.dataprocessing.repository.nbs.odse.model; +import gov.cdc.dataprocessing.model.classic_model.dto.TeleLocatorDT; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -7,7 +8,7 @@ import lombok.Data; import java.math.BigInteger; -import java.util.Date; +import java.sql.Timestamp; @Entity @Table(name = "Tele_locator", schema = "dbo") @@ -16,49 +17,71 @@ public class TeleLocator { @Id @Column(name = "tele_locator_uid", nullable = false) - private BigInteger teleLocatorUid; + private Long teleLocatorUid; - @Column(name = "add_reason_cd", length = 20) + @Column(name = "add_reason_cd") private String addReasonCd; @Column(name = "add_time") - private Date addTime; + private Timestamp addTime; @Column(name = "add_user_id") - private BigInteger addUserId; + private Long addUserId; - @Column(name = "cntry_cd", length = 20) + @Column(name = "cntry_cd") private String cntryCd; - @Column(name = "email_address", length = 100) + @Column(name = "email_address") private String emailAddress; - @Column(name = "extension_txt", length = 20) + @Column(name = "extension_txt") private String extensionTxt; - @Column(name = "last_chg_reason_cd", length = 20) + @Column(name = "last_chg_reason_cd") private String lastChgReasonCd; @Column(name = "last_chg_time") - private Date lastChgTime; + private Timestamp lastChgTime; @Column(name = "last_chg_user_id") - private BigInteger lastChgUserId; + private Long lastChgUserId; - @Column(name = "phone_nbr_txt", length = 20) + @Column(name = "phone_nbr_txt") private String phoneNbrTxt; - @Column(name = "record_status_cd", length = 20) + @Column(name = "record_status_cd") private String recordStatusCd; @Column(name = "record_status_time") - private Date recordStatusTime; + private Timestamp recordStatusTime; - @Column(name = "url_address", length = 100) + @Column(name = "url_address") private String urlAddress; - @Column(name = "user_affiliation_txt", length = 20) + @Column(name = "user_affiliation_txt") private String userAffiliationTxt; // Add getters and setters as needed + public TeleLocator(TeleLocatorDT teleLocatorDT) { + this.teleLocatorUid = teleLocatorDT.getTeleLocatorUid(); + this.addReasonCd = teleLocatorDT.getAddReasonCd(); + this.addTime = teleLocatorDT.getAddTime(); + this.addUserId = teleLocatorDT.getAddUserId(); + this.cntryCd = teleLocatorDT.getCntryCd(); + this.emailAddress = teleLocatorDT.getEmailAddress(); + this.extensionTxt = teleLocatorDT.getExtensionTxt(); + this.lastChgReasonCd = teleLocatorDT.getLastChgReasonCd(); + this.lastChgTime = teleLocatorDT.getLastChgTime(); + this.lastChgUserId = teleLocatorDT.getLastChgUserId(); + this.phoneNbrTxt = teleLocatorDT.getPhoneNbrTxt(); + this.recordStatusCd = teleLocatorDT.getRecordStatusCd(); + this.recordStatusTime = teleLocatorDT.getRecordStatusTime(); + this.urlAddress = teleLocatorDT.getUrlAddress(); + this.userAffiliationTxt = teleLocatorDT.getUserAffiliationTxt(); + } + + public TeleLocator() { + // Default constructor + } + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/EntityLocatorParticipationId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/EntityLocatorParticipationId.java new file mode 100644 index 000000000..4a98ec057 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/EntityLocatorParticipationId.java @@ -0,0 +1,15 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model.id_class; + +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class EntityLocatorParticipationId implements Serializable { + private Long entityUid; + private Long locatorUid; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonEthnicGroupId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonEthnicGroupId.java new file mode 100644 index 000000000..f8a667116 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonEthnicGroupId.java @@ -0,0 +1,13 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model.id_class; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class PersonEthnicGroupId implements Serializable { + private Long personUid; + private String ethnicGroupCd; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonNameId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonNameId.java new file mode 100644 index 000000000..0c4eb685d --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonNameId.java @@ -0,0 +1,16 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model.id_class; + +import jakarta.persistence.Column; +import jakarta.persistence.Id; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class PersonNameId implements Serializable { + private Long personUid; + + private Integer personNameSeq; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonRaceId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonRaceId.java new file mode 100644 index 000000000..099c9ef84 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/model/id_class/PersonRaceId.java @@ -0,0 +1,13 @@ +package gov.cdc.dataprocessing.repository.nbs.odse.model.id_class; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +@Getter +@Setter +public class PersonRaceId implements Serializable { + private Long personUid; + private String raceCd; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/test.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/test.java deleted file mode 100644 index 1965febc0..000000000 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/odse/test.java +++ /dev/null @@ -1,4 +0,0 @@ -package gov.cdc.dataprocessing.repository.nbs.odse; - -public class test { -} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/srte/CodeValueGeneralRepository.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/srte/CodeValueGeneralRepository.java index 0250b2aff..3d41bcfe7 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/srte/CodeValueGeneralRepository.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/repository/nbs/srte/CodeValueGeneralRepository.java @@ -38,4 +38,17 @@ public interface CodeValueGeneralRepository extends JpaRepository> findCodeValuesByCodeSetNm(String codeSetNm); + + + /** + * private static String SELECT_SRTCODE_INFO_SQL = + * "SELECT concept_preferred_nm \"codedValueDescription\", + * code_system_cd \"codedValueCodingSystem\", + * concept_code \"codedValue\" + * FROM "+ + * NEDSSConstants.SYSTEM_REFERENCE_TABLE + ".."; + * WHERE code_set_nm = ? AND code = ? + * */ + @Query(value = "SELECT * FROM Code_value_general WHERE code_set_nm = ?1 AND code = ?2", nativeQuery = true) + Optional> findCodeValuesByCodeSetNmAndCode(String codeSetNm, String code); } \ No newline at end of file diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/CheckingValueService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/CheckingValueService.java index 568e474e5..de68edb85 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/CheckingValueService.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/CheckingValueService.java @@ -209,6 +209,10 @@ private TreeMap getCountyCdByDescCallRepos(String stateCd) throw } + public List findCodeValuesByCodeSetNmAndCode(String codeSetNm, String code) { + var result = codeValueGeneralRepository.findCodeValuesByCodeSetNmAndCode(codeSetNm, code); + return result.get(); + } // public String getCountyCdByDesc(String county, String stateCd) throws DataProcessingException { // try { diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/ManagerService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/ManagerService.java index ff6ad5be4..9531f0201 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/ManagerService.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/ManagerService.java @@ -1,13 +1,21 @@ package gov.cdc.dataprocessing.service; +import com.google.gson.Gson; import gov.cdc.dataprocessing.cache.SrteCache; +import gov.cdc.dataprocessing.constant.elr.EdxELRConstant; import gov.cdc.dataprocessing.constant.enums.NbsInterfaceStatus; import gov.cdc.dataprocessing.exception.DataProcessingConsumerException; +import gov.cdc.dataprocessing.exception.DataProcessingException; import gov.cdc.dataprocessing.exception.EdxLogException; import gov.cdc.dataprocessing.model.classic_model.dt.EdxLabInformationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.EdxPatientMatchDT; +import gov.cdc.dataprocessing.model.classic_model.vo.LabResultProxyVO; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; import gov.cdc.dataprocessing.repository.nbs.msgoute.NbsInterfaceRepository; import gov.cdc.dataprocessing.repository.nbs.msgoute.model.NbsInterfaceModel; import gov.cdc.dataprocessing.service.interfaces.*; +import gov.cdc.dataprocessing.service.model.PatientAggContainer; +import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,6 +24,8 @@ import org.springframework.cache.CacheManager; import org.springframework.stereotype.Service; +import java.util.Base64; +import java.util.Iterator; import java.util.TreeMap; import static gov.cdc.dataprocessing.constant.ManagerEvent.EVENT_ELR; @@ -70,6 +80,7 @@ public ManagerService(IObservationService observationService, this.cacheManager = cacheManager; } + @Transactional public Object processDistribution(String eventType, String data) throws DataProcessingConsumerException { //TODO: determine which flow the data will be going through Object result = new Object(); @@ -130,15 +141,19 @@ public void processingEdxLog(String data) throws EdxLogException { private Object processingELR(String data) throws DataProcessingConsumerException { //TODO logic to execute data here + NbsInterfaceModel nbsInterfaceModel = null; Object result = new Object(); try { + + Gson gson = new Gson(); + + + EdxLabInformationDT edxLabInformationDT = new EdxLabInformationDT(); edxLabInformationDT.setStatus(NbsInterfaceStatus.Success); edxLabInformationDT.setUserName("Test"); - NbsInterfaceModel nbsInterfaceModel; - var nbsModel = nbsInterfaceRepository.findByNbsInterfaceUid(Integer.valueOf(data)); - nbsInterfaceModel = nbsModel.get(); + nbsInterfaceModel = gson.fromJson(data, NbsInterfaceModel.class); edxLabInformationDT.setNbsInterfaceUid(nbsInterfaceModel.getNbsInterfaceUid()); @@ -166,7 +181,7 @@ private Object processingELR(String data) throws DataProcessingConsumerException } } //TODO: Parsing Data to Object - var parsedData = dataExtractionService.parsingDataToObject(nbsInterfaceModel, edxLabInformationDT); + LabResultProxyVO parsedData = dataExtractionService.parsingDataToObject(nbsInterfaceModel, edxLabInformationDT); edxLabInformationDT.setLabResultProxyVO(parsedData); @@ -177,10 +192,13 @@ private Object processingELR(String data) throws DataProcessingConsumerException //TODO: OBSERVATION var observation = observationService.processingObservation(); - //TODO: PATIENT - var patient = patientService.processingPatient(); - var nextOfKin = patientService.processingNextOfKin(); - var provider = patientService.processingProvider(); + //TODO: PATIENT && NOK && PROVIDER +// var patient = patientService.processingPatient(parsedData, edxLabInformationDT); +// var nextOfKin = patientService.processingNextOfKin(); +// var provider = patientService.processingProvider(); + + + PatientAggContainer patientAggContainer = patientAggregation(parsedData, edxLabInformationDT); //TODO: ORGANIZATION var organization = organizationService.processingOrganization(); @@ -194,9 +212,52 @@ private Object processingELR(String data) throws DataProcessingConsumerException //TODO: Producing msg for Next Step // kafkaManagerProducer.sendData(healthCaseTopic, data); + + + + //NOTE: Test updating NBS_Interface + nbsInterfaceModel.setRecordStatusCd("COMPLETED_V2"); + nbsInterfaceRepository.save(nbsInterfaceModel); return result; } catch (Exception e) { + if (nbsInterfaceModel != null) { + nbsInterfaceModel.setRecordStatusCd("FAILED_V2"); + nbsInterfaceRepository.save(nbsInterfaceModel); + } + throw new DataProcessingConsumerException(e.getMessage(), result); + } } + + private PatientAggContainer patientAggregation(LabResultProxyVO labResult, EdxLabInformationDT edxLabInformationDT) throws DataProcessingConsumerException, DataProcessingException { + + PatientAggContainer container = new PatientAggContainer(); + PersonVO personVOObj = null; + PersonVO providerVOObj = null; + if (labResult.getThePersonVOCollection() != null && !labResult.getThePersonVOCollection().isEmpty() ) { + Iterator it = labResult.getThePersonVOCollection().iterator(); + while (it.hasNext()) { + PersonVO personVO = it.next(); + if (personVO.getRole() != null && personVO.getRole().equalsIgnoreCase(EdxELRConstant.ELR_NEXT_OF_KIN)) { + //TODO: Logic for Matching Next of kin + var nextOfKin = patientService.processingNextOfKin(); + + } + else { + if (personVO.thePersonDT.getCd().equalsIgnoreCase(EdxELRConstant.ELR_PATIENT_CD)) { + personVOObj = patientService.processingPatient(labResult, edxLabInformationDT, personVO); + } + else if (personVO.thePersonDT.getCd().equalsIgnoreCase(EdxELRConstant.ELR_PROVIDER_CD)) { + //TODO: Logic for Matching Provider + var provider = patientService.processingProvider(); + + } + } + } + } + + container.setPersonVO(personVOObj); + return container; + } } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/PatientService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/PatientService.java index d650b62d8..b17406dba 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/PatientService.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/PatientService.java @@ -1,26 +1,80 @@ package gov.cdc.dataprocessing.service; +import gov.cdc.dataprocessing.constant.elr.EdxELRConstant; import gov.cdc.dataprocessing.exception.DataProcessingConsumerException; +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dt.EdxLabInformationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.*; +import gov.cdc.dataprocessing.model.classic_model.vo.LabResultProxyVO; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; +import gov.cdc.dataprocessing.service.interfaces.IPatientMatchingService; import gov.cdc.dataprocessing.service.interfaces.IPatientService; +import gov.cdc.dataprocessing.service.matching.PatientMatchingService; +import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Collection; +import java.util.Iterator; + @Service @Slf4j public class PatientService implements IPatientService { private static final Logger logger = LoggerFactory.getLogger(PatientService.class); - public PatientService() { + private final IPatientMatchingService patientMatchingService; + + public PatientService(PatientMatchingService patientMatchingService) { + + this.patientMatchingService = patientMatchingService; } - public Object processingPatient() throws DataProcessingConsumerException { + @Transactional + public PersonVO processingPatient(LabResultProxyVO labResultProxyVO, EdxLabInformationDT edxLabInformationDT, PersonVO personVO) throws DataProcessingException { //TODO: Adding Logic Here try { - return "processing patient"; + long falseUid = personVO.thePersonDT.getPersonUid(); + Long personUid; + EdxPatientMatchDT edxPatientMatchFoundDT = null; + + personVO.setRole(EdxELRConstant.ELR_PATIENT_CD); + + if(edxLabInformationDT.getPatientUid()>0){ + personUid=edxLabInformationDT.getPatientUid(); + } + else{ + //NOTE: Mathing Patient + //NOTE: This matching also persist patient accordingly + //NOTE: Either new or existing patient, it will be processed within this method + edxPatientMatchFoundDT = patientMatchingService.getMatchingPatient(personVO); + edxLabInformationDT.setMultipleSubjectMatch(patientMatchingService.getMultipleMatchFound()); + personUid = personVO.getThePersonDT().getPersonUid(); + } + + if (personUid != null) { + setFalseToNew(labResultProxyVO, falseUid, personUid); + personVO.setItNew(false); + personVO.setItDirty(false); + personVO.getThePersonDT().setItNew(false); + personVO.getThePersonDT().setItDirty(false); + PersonNameDT personName = parsingPersonName(personVO); + String lastName = personName.getLastNm(); + String firstName = personName.getFirstNm(); + edxLabInformationDT.setEntityName(firstName + " " + lastName); + } + + if(edxPatientMatchFoundDT!=null && !edxPatientMatchFoundDT.isMultipleMatch() && personVO.getPatientMatchedFound()) { + edxLabInformationDT.setPatientMatch(true); + } + if(personVO.getThePersonDT().getPersonParentUid()!=null){ + edxLabInformationDT.setPersonParentUid(personVO.getThePersonDT().getPersonParentUid()); + } + + return personVO; } catch (Exception e) { - throw new DataProcessingConsumerException("ERROR", "Data"); + throw new DataProcessingException(e.getMessage()); } } @@ -42,4 +96,102 @@ public Object processingProvider() throws DataProcessingConsumerException { } } + private PersonNameDT parsingPersonName(PersonVO personVO) throws DataProcessingException { + Collection personNames = personVO.getThePersonNameDTCollection(); + Iterator pnIter = personNames.iterator(); + while (pnIter.hasNext()) { + PersonNameDT personName = pnIter.next(); + if (personName.getNmUseCd().equals("L")) { + return personName; + } + } + throw new DataProcessingException("No name use code \"L\" in PersonVO"); + } + + /** + * TODO: Evaluation needed + * */ + private void setFalseToNew(LabResultProxyVO labResultProxyVO, Long falseUid, Long actualUid) throws DataProcessingException { + + try { + Iterator participationIterator = null; + Iterator actRelationshipIterator = null; + Iterator roleIterator = null; + + + ParticipationDT participationDT = null; + ActRelationshipDT actRelationshipDT = null; + RoleDT roleDT = null; + + Collection participationColl = labResultProxyVO.getTheParticipationDTCollection(); + Collection actRelationShipColl = labResultProxyVO.getTheActRelationshipDTCollection(); + Collection roleColl = labResultProxyVO.getTheRoleDTCollection(); + + if (participationColl != null) { + for (participationIterator = participationColl.iterator(); participationIterator.hasNext();) { + participationDT = (ParticipationDT) participationIterator.next(); + logger.debug("(participationDT.getAct() comparedTo falseUid)" + + (participationDT.getActUid().compareTo(falseUid))); + if (participationDT.getActUid().compareTo(falseUid) == 0) { + participationDT.setActUid(actualUid); + } + + if (participationDT.getSubjectEntityUid().compareTo(falseUid) == 0) { + participationDT.setSubjectEntityUid(actualUid); + } + } + logger.debug("participationDT.getSubjectEntityUid()" + + participationDT.getSubjectEntityUid()); + } + + if (actRelationShipColl != null) { + for (actRelationshipIterator = actRelationShipColl.iterator(); actRelationshipIterator + .hasNext();) { + actRelationshipDT = (ActRelationshipDT) actRelationshipIterator.next(); + + if (actRelationshipDT.getTargetActUid().compareTo(falseUid) == 0) { + actRelationshipDT.setTargetActUid(actualUid); + } + if (actRelationshipDT.getSourceActUid().compareTo(falseUid) == 0) { + actRelationshipDT.setSourceActUid(actualUid); + } + logger.debug("ActRelationShipDT: falseUid " + + falseUid.toString() + " actualUid: " + actualUid); + } + } + + if (roleColl != null) { + for (roleIterator = roleColl.iterator(); roleIterator.hasNext();) { + roleDT = (RoleDT) roleIterator.next(); + if (roleDT.getSubjectEntityUid().compareTo(falseUid) == 0) { + roleDT.setSubjectEntityUid(actualUid); + } + if (roleDT.getScopingEntityUid() != null) { + if (roleDT.getScopingEntityUid().compareTo(falseUid) == 0) { + roleDT.setScopingEntityUid(actualUid); + } + logger.debug("\n\n\n(roleDT.getSubjectEntityUid() compared to falseUid) " + + roleDT.getSubjectEntityUid().compareTo( + falseUid)); + logger.debug("\n\n\n(roleDT.getScopingEntityUid() compared to falseUid) " + + roleDT.getScopingEntityUid().compareTo( + falseUid)); + } + + } + } + + } catch (Exception e) { + logger.error("HL7CommonLabUtil.setFalseToNew thrown for falseUid:" + + falseUid + "For actualUid :" + actualUid); + throw new DataProcessingException("HL7CommonLabUtil.setFalseToNew thrown for falseUid:" + falseUid + "For actualUid :" + actualUid); + } + } + + + + + + + } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/ICheckingValueService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/ICheckingValueService.java index 031dd37d3..6cf544875 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/ICheckingValueService.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/ICheckingValueService.java @@ -1,6 +1,7 @@ package gov.cdc.dataprocessing.service.interfaces; import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.repository.nbs.srte.model.CodeValueGeneral; import gov.cdc.dataprocessing.repository.nbs.srte.model.LOINCCode; import java.util.List; @@ -14,4 +15,5 @@ public interface ICheckingValueService { String getCountyCdByDesc(String county, String stateCd) throws DataProcessingException; TreeMap getAOELOINCCodes() throws DataProcessingException; TreeMap getCodedValues(String pType, String key) throws DataProcessingException; + List findCodeValuesByCodeSetNmAndCode(String codeSetNm, String code); } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientMatchingService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientMatchingService.java new file mode 100644 index 000000000..6fd75d009 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientMatchingService.java @@ -0,0 +1,10 @@ +package gov.cdc.dataprocessing.service.interfaces; + +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.EdxPatientMatchDT; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; + +public interface IPatientMatchingService { + EdxPatientMatchDT getMatchingPatient(PersonVO personVO) throws DataProcessingException; + boolean getMultipleMatchFound(); +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientService.java index 6eb413e7f..203d0271f 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientService.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/interfaces/IPatientService.java @@ -1,9 +1,13 @@ package gov.cdc.dataprocessing.service.interfaces; import gov.cdc.dataprocessing.exception.DataProcessingConsumerException; +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dt.EdxLabInformationDT; +import gov.cdc.dataprocessing.model.classic_model.vo.LabResultProxyVO; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; public interface IPatientService { - Object processingPatient() throws DataProcessingConsumerException; + PersonVO processingPatient(LabResultProxyVO labResultProxyVO, EdxLabInformationDT edxLabInformationDT, PersonVO personVO) throws DataProcessingConsumerException, DataProcessingException; Object processingNextOfKin() throws DataProcessingConsumerException; Object processingProvider() throws DataProcessingConsumerException; } diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/matching/PatientMatchingService.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/matching/PatientMatchingService.java new file mode 100644 index 000000000..eddab0782 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/matching/PatientMatchingService.java @@ -0,0 +1,696 @@ +package gov.cdc.dataprocessing.service.matching; + +import gov.cdc.dataprocessing.constant.elr.EdxELRConstant; +import gov.cdc.dataprocessing.constant.elr.NBSBOLookup; +import gov.cdc.dataprocessing.constant.elr.NEDSSConstant; +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.*; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; +import gov.cdc.dataprocessing.repository.nbs.odse.model.Person; +import gov.cdc.dataprocessing.service.CheckingValueService; +import gov.cdc.dataprocessing.service.interfaces.IPatientMatchingService; +import gov.cdc.dataprocessing.service.model.PersonId; +import gov.cdc.dataprocessing.utilities.component.entity.EntityHelper; +import gov.cdc.dataprocessing.utilities.component.patient.EdxPatientMatchRepositoryUtil; +import gov.cdc.dataprocessing.utilities.component.patient.PatientRepositoryUtil; +import gov.cdc.dataprocessing.utilities.component.patient.PreparingPersonUtil; +import gov.cdc.dataprocessing.utilities.model.Coded; +import jakarta.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.sql.Timestamp; +import java.util.*; + +@Service +public class PatientMatchingService implements IPatientMatchingService { + private static final Logger logger = LoggerFactory.getLogger(PatientMatchingService.class); + private boolean multipleMatchFound = false; + + private final EdxPatientMatchRepositoryUtil edxPatientMatchRepositoryUtil; + private final EntityHelper entityHelper; + private final PatientRepositoryUtil patientRepositoryUtil; + + private final CheckingValueService checkingValueService; + + + public PatientMatchingService( + EdxPatientMatchRepositoryUtil edxPatientMatchRepositoryUtil, + EntityHelper entityHelper, + PatientRepositoryUtil patientRepositoryUtil, + CheckingValueService checkingValueService) { + this.edxPatientMatchRepositoryUtil = edxPatientMatchRepositoryUtil; + this.entityHelper = entityHelper; + this.patientRepositoryUtil = patientRepositoryUtil; + this.checkingValueService = checkingValueService; + } + + + @Transactional + public EdxPatientMatchDT getMatchingPatient(PersonVO personVO) throws DataProcessingException { + Long patientUid = personVO.getThePersonDT().getPersonUid(); + String cd = personVO.getThePersonDT().getCd(); + String patientRole = personVO.getRole(); + EdxPatientMatchDT edxPatientFoundDT = null; + EdxPatientMatchDT edxPatientMatchFoundDT = null; + PersonId patientPersonUid = new PersonId(); + boolean matchFound = false; + boolean lrIDExists = true; + + boolean newPatientCreationApplied = false; + + if (patientRole == null || patientRole.isEmpty() || patientRole.equalsIgnoreCase(EdxELRConstant.ELR_PATIENT_ROLE_CD)) { + EdxPatientMatchDT localIdHashCode = null; + String localId = null; + int localIdhshCd = 0; + localId = getLocalId(personVO); + if (localId != null) { + localId = localId.toUpperCase(); + localIdhshCd = localId.hashCode(); + } + //NOTE: Matching Start here + try { + // Try to get the matching with the match string + // (was hash code but hash code had dups on rare occasions) + edxPatientMatchFoundDT = edxPatientMatchRepositoryUtil.getEdxPatientMatchOnMatchString(cd, localId); + if (edxPatientMatchFoundDT.isMultipleMatch()){ + multipleMatchFound = true; + matchFound = false; + } + else if (edxPatientMatchFoundDT != null && edxPatientMatchFoundDT.getPatientUid() != null) { + matchFound = true; + + } else { + lrIDExists = false; + } + + } catch (Exception ex) { + logger.error("Error in geting the matching Patient"); + throw new DataProcessingException("Error in geting the matching Patient" + ex.getMessage(), ex); + } + + if (localId != null) { + localIdHashCode = new EdxPatientMatchDT(); + localIdHashCode.setTypeCd(NEDSSConstant.PAT); + localIdHashCode.setMatchString(localId); + localIdHashCode.setMatchStringHashCode((long) localIdhshCd); + } + + // NOTE: Matching by Identifier + if (!matchFound) { + String IdentifierStr = null; + int identifierStrhshCd = 0; + + List identifierStrList = getIdentifier(personVO); + if (identifierStrList != null && !identifierStrList.isEmpty()) { + for (int k = 0; k < identifierStrList.size(); k++) { + edxPatientFoundDT = new EdxPatientMatchDT(); + IdentifierStr = (String) identifierStrList.get(k); + if (IdentifierStr != null) { + IdentifierStr = IdentifierStr.toUpperCase(); + identifierStrhshCd = IdentifierStr.hashCode(); + } + + if (IdentifierStr != null) { + edxPatientFoundDT = new EdxPatientMatchDT(); + edxPatientFoundDT.setTypeCd(NEDSSConstant.PAT); + edxPatientFoundDT.setMatchString(IdentifierStr); + edxPatientFoundDT.setMatchStringHashCode((long) identifierStrhshCd); + // Try to get the matching with the hash code + edxPatientMatchFoundDT = edxPatientMatchRepositoryUtil.getEdxPatientMatchOnMatchString(cd, IdentifierStr); + + if (edxPatientMatchFoundDT.isMultipleMatch()){ + matchFound = false; + multipleMatchFound = true; + } else if (edxPatientMatchFoundDT.getPatientUid() == null || (edxPatientMatchFoundDT.getPatientUid() != null && edxPatientMatchFoundDT.getPatientUid() <= 0)) { + matchFound = false; + } else { + matchFound = true; + break; + } + } + } + } + } + + // NOTE: Matching with last name ,first name ,date of birth and current sex + if (!matchFound) { + String namesdobcursexStr = null; + int namesdobcursexStrhshCd = 0; + namesdobcursexStr = getLNmFnmDobCurSexStr(personVO); + if (namesdobcursexStr != null) { + namesdobcursexStr = namesdobcursexStr.toUpperCase(); + namesdobcursexStrhshCd = namesdobcursexStr.hashCode(); + try { + if (namesdobcursexStr != null) { + edxPatientFoundDT = new EdxPatientMatchDT(); + edxPatientFoundDT.setPatientUid(patientUid); + edxPatientFoundDT.setTypeCd(NEDSSConstant.PAT); + edxPatientFoundDT.setMatchString(namesdobcursexStr); + edxPatientFoundDT.setMatchStringHashCode((long) namesdobcursexStrhshCd); + } + edxPatientMatchFoundDT = edxPatientMatchRepositoryUtil.getEdxPatientMatchOnMatchString(cd, namesdobcursexStr); + if (edxPatientMatchFoundDT.isMultipleMatch()){ + multipleMatchFound = true; + matchFound = false; + } else if (edxPatientMatchFoundDT.getPatientUid() == null || (edxPatientMatchFoundDT.getPatientUid() != null && edxPatientMatchFoundDT.getPatientUid() <= 0)) { + matchFound = false; + } else { + matchFound = true; + } + } catch (Exception ex) { + logger.error("Error in geting the matching Patient"); + throw new DataProcessingException("Error in geting the matching Patient" + ex.getMessage(), ex); + } + } + } + + // NOTE: Decision, Match Not Found, Start Person Creation + if (!matchFound) { + if (personVO.getTheEntityIdDTCollection() != null) { + //SORTING out existing EntityId + Collection newEntityIdDTColl = new ArrayList<>(); + Iterator iter = personVO.getTheEntityIdDTCollection().iterator(); + while (iter.hasNext()) { + EntityIdDT entityIdDT = iter.next(); + if (entityIdDT.getTypeCd() != null && !entityIdDT.getTypeCd().equalsIgnoreCase("LR")) { + newEntityIdDTColl.add(entityIdDT); + } + } + personVO.setTheEntityIdDTCollection(newEntityIdDTColl); + } + try { + // NOTE: IF new patient then create + // IF existing patient, then query find it, then Get Parent Patient ID + if (personVO.getThePersonDT().getCd().equals(NEDSSConstant.PAT)) { // Patient + patientPersonUid = setAndCreateNewPerson(personVO); + personVO.getThePersonDT().setPersonParentUid(patientPersonUid.getPersonParentId()); + personVO.getThePersonDT().setLocalId(patientPersonUid.getLocalId()); + personVO.getThePersonDT().setPersonUid(patientPersonUid.getPersonId()); + newPatientCreationApplied = true; + } + } catch (Exception e) { + logger.error("Error in getting the entity Controller or Setting the Patient" + e.getMessage(), e); + throw new DataProcessingException("Error in getting the entity Controller or Setting the Patient" + e.getMessage(), e); + } + personVO.setPatientMatchedFound(false); + } + else { + personVO.setPatientMatchedFound(true); + } + + //NOTE: In this flow, if new patient, revision record is still get inserted + //NOTE: if existing pateint, revision also insrted + try { + + /** + * NOTE: + * Regarding New or Existing Patient + * This logic will do Patient Hash update and do Patient Revision update + * */ + + /** + * 2.0 NOTE: if new patient flow, skip revision + * otherwise: go to update existing patient + * */ + + + if (!newPatientCreationApplied && personVO.getPatientMatchedFound()) { + personVO.getThePersonDT().setPersonParentUid(edxPatientMatchFoundDT.getPatientUid()); + patientPersonUid = updateExistingPatient(personVO, NEDSSConstant.PAT_CR, personVO.getThePersonDT().getPersonParentUid()); + + personVO.getThePersonDT().setPersonParentUid(patientPersonUid.getPersonParentId()); + personVO.getThePersonDT().setLocalId(patientPersonUid.getLocalId()); + personVO.getThePersonDT().setPersonUid(patientPersonUid.getPersonId()); + } + else if (newPatientCreationApplied) { + setPatientHashCd(personVO); + } + } catch (Exception e) { + logger.error("Error in getting the entity Controller or Setting the Patient" + e.getMessage()); + throw new DataProcessingException("Error in getting the entity Controller or Setting the Patient" + e.getMessage(), e); + } + + } + else if (patientRole.equalsIgnoreCase(EdxELRConstant.ELR_NEXT_F_KIN_ROLE_CD)) { + //TODO: NEXT OF KIN + } + return edxPatientMatchFoundDT; + } + + public boolean getMultipleMatchFound() { + return multipleMatchFound; + } + private PersonId setAndCreateNewPerson(PersonVO psn) throws DataProcessingException { + PersonId personUID = new PersonId(); + PersonVO personVO = psn.deepClone(); + Person person = null; + Collection elpDTCol = personVO.getTheEntityLocatorParticipationDTCollection(); + Collection rDTCol = personVO.getTheRoleDTCollection(); + Collection pDTCol = personVO.getTheParticipationDTCollection(); + Collection colEntityLocatorParticipation = null; + Collection colRole = null; + Collection colParticipation = null; + // NOTE: Sorting out Collection such as: Entity Locator Participation, Role, Participation + if (elpDTCol != null) { + colEntityLocatorParticipation = entityHelper.iterateELPDTForEntityLocatorParticipation(elpDTCol); + personVO.setTheEntityLocatorParticipationDTCollection(colEntityLocatorParticipation); + } + if (rDTCol != null) { + colRole = entityHelper.iterateRDT(rDTCol); + personVO.setTheRoleDTCollection(colRole); + } + if (pDTCol != null) { + colParticipation = entityHelper.iteratePDTForParticipation(pDTCol); + personVO.setTheParticipationDTCollection(colParticipation); + } + //TODO: Patient Creation + person = patientRepositoryUtil.createPerson(personVO); + personUID.setPersonId(person.getPersonUid()); + personUID.setPersonParentId(person.getPersonParentUid()); + personUID.setLocalId(person.getLocalId()); + + logger.debug(" EntityControllerEJB.setPerson() Person Created"); + return personUID; + + } + + private PersonId updateExistingPatient(PersonVO personVO, String businessTriggerCd, Long personParentUid) throws DataProcessingException { + PersonId personId = new PersonId(); + PersonVO personObj = personVO.deepClone(); + if (businessTriggerCd != null && (businessTriggerCd.equals("PAT_CR") || businessTriggerCd.equals("PAT_EDIT"))) { + personId = getPersonInternalV2(personParentUid); + + personObj.setMPRUpdateValid(true); + + personObj.getThePersonDT().setPersonUid(personId.getPersonId()); + personObj.getThePersonDT().setPersonParentUid(personId.getPersonParentId()); + personObj.getThePersonDT().setLocalId(personId.getLocalId()); + + + prepUpdatingExistingPerson(personObj); + } + return personId; + } + private String getLocalId(PersonVO personVO) { + String localId = null; + if (personVO.getLocalIdentifier() != null) { + localId = personVO.getLocalIdentifier(); + } + return localId; + } + + private List getIdentifier(PersonVO personVO) throws DataProcessingException { + String carrot = "^"; + List returnList =new ArrayList(); + List identifierList = new ArrayList(); + String identifier = null; + try{ + if (personVO.getTheEntityIdDTCollection() != null + && personVO.getTheEntityIdDTCollection().size() > 0) { + Collection entityIdDTColl = personVO.getTheEntityIdDTCollection(); + Iterator entityIdIterator = entityIdDTColl.iterator(); + while (entityIdIterator.hasNext()) { + identifier= null; + EntityIdDT entityIdDT = entityIdIterator.next(); + if (((entityIdDT.getStatusCd() != null && entityIdDT + .getStatusCd().equalsIgnoreCase(NEDSSConstant.STATUS_ACTIVE)) + && entityIdDT.getRecordStatusCd() != null + && (entityIdDT.getRecordStatusCd().equalsIgnoreCase(NEDSSConstant.RECORD_STATUS_ACTIVE))) + || (entityIdDT.getRecordStatusCd() != null + && entityIdDT.getTypeCd()!=null + && entityIdDT.getTypeCd().equalsIgnoreCase(EdxELRConstant.ELR_SS_TYPE) + && (entityIdDT.getRecordStatusCd().equalsIgnoreCase(NEDSSConstant.RECORD_STATUS_ACTIVE))) + ) { + + + if ((entityIdDT.getRootExtensionTxt() != null) + && (entityIdDT.getTypeCd() != null) + && (entityIdDT.getAssigningAuthorityCd() != null) + && (entityIdDT.getAssigningAuthorityDescTxt() !=null) + && (entityIdDT.getAssigningAuthorityIdType() != null)) { + identifier = entityIdDT.getRootExtensionTxt() + + carrot + entityIdDT.getTypeCd() + carrot + + entityIdDT.getAssigningAuthorityCd() + + carrot + + entityIdDT.getAssigningAuthorityDescTxt() + + carrot + entityIdDT.getAssigningAuthorityIdType(); + } + // NOTE: Person matching doesn't seem to hit this + else + { + try { + Coded coded = new Coded(); + coded.setCode(entityIdDT.getAssigningAuthorityCd()); + coded.setCodesetName(NEDSSConstant.EI_AUTH); + + //TODO: This call out to code value general Repos and Caching the recrod +// NotificationSRTCodeLookupTranslationDAOImpl lookupDAO = new NotificationSRTCodeLookupTranslationDAOImpl(); +// lookupDAO.retrieveSRTCodeInfo(coded); + + var codedValueGenralList = checkingValueService.findCodeValuesByCodeSetNmAndCode(coded.getCodesetName(), coded.getCode()); + + if (entityIdDT.getRootExtensionTxt() != null + && entityIdDT.getTypeCd() != null + && coded.getCode()!=null + && coded.getCodeDescription()!=null + && coded.getCodeSystemCd()!=null){ + identifier = entityIdDT.getRootExtensionTxt() + + carrot + entityIdDT.getTypeCd() + carrot + + coded.getCode() + carrot + + coded.getCodeDescription() + carrot + + coded.getCodeSystemCd(); + } + }catch (Exception ex) { + String errorMessage = "The assigning authority " + entityIdDT.getAssigningAuthorityCd() + " does not exists in the system. "; + logger.debug(ex.getMessage() + errorMessage); + } + } + + if (identifier != null) { + if (getNamesStr(personVO) != null) { + identifier = identifier + carrot + getNamesStr(personVO); + identifierList.add(identifier); + } + } + + } + } + } + HashSet hashSet = new HashSet(identifierList); + returnList = new ArrayList(hashSet) ; + } + catch (Exception ex) { + String errorMessage = "Exception while creating hashcode for patient entity IDs . "; + logger.debug(ex.getMessage() + errorMessage); + throw new DataProcessingException(errorMessage, ex); + } + return returnList; + } + + private void setPatientHashCd(PersonVO personVO) throws DataProcessingException { + + try { + long personUid = personVO.getThePersonDT().getPersonParentUid(); + + // DELETE Patient Matching Hash String + edxPatientMatchRepositoryUtil.deleteEdxPatientMatchDTColl(personUid); + try { + if(personVO.getThePersonDT().getRecordStatusCd().equalsIgnoreCase(NEDSSConstant.RECORD_STATUS_ACTIVE)){ + personVO.getThePersonDT().setPersonUid(personUid); + // INSERTING Patient Matching Hash String + setPatientToEntityMatch(personVO); + } + } catch (Exception e) { + //per defect #1836 change to warning.. + logger.warn("Unable to setPatientHashCd for personUid: "+personUid); + logger.warn("Exception in setPatientToEntityMatch -> unhandled exception: " +e.getMessage()); + } + } catch (Exception e) { + logger.error("EntityControllerEJB.setPatientHashCd: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + + } + + private void prepUpdatingExistingPerson(PersonVO personVO) throws DataProcessingException { + PersonDT personDT = personVO.getThePersonDT(); + + personVO.setThePersonDT(personDT); + Collection collEntityLocatorPar; + Collection colRole; + Collection colParticipation; + + collEntityLocatorPar = personVO.getTheEntityLocatorParticipationDTCollection(); + colRole = personVO.getTheRoleDTCollection(); + colParticipation = personVO.getTheParticipationDTCollection(); + + if (collEntityLocatorPar != null) { + entityHelper.iterateELPDTForEntityLocatorParticipation(collEntityLocatorPar); + personVO.setTheEntityLocatorParticipationDTCollection(collEntityLocatorPar); + } + + if (colRole != null) { + entityHelper.iterateRDT(colRole); + personVO.setTheRoleDTCollection(colRole); + } + + if (colParticipation != null) { + entityHelper.iteratePDTForParticipation(colParticipation); + personVO.setTheParticipationDTCollection(colParticipation); + } + + personVO = patientRepositoryUtil.preparePersonNameBeforePersistence(personVO); + + //TODO: Change this to Update Eixsting Patient + patientRepositoryUtil.updateExistingPerson(personVO); + + } + private void setPatientToEntityMatch(PersonVO personVO) throws DataProcessingException { + + Long patientUid = personVO.getThePersonDT().getPersonUid(); + EdxPatientMatchDT edxPatientMatchDT = new EdxPatientMatchDT(); + String patientRole = personVO.getRole(); + String cdDescTxt = personVO.thePersonDT.getCdDescTxt(); + // Matching with IDValue,IDType Code,Assigning authority,Legal Last name + // ,Legal First name-Identifier + // if (patientRole == null || + // patientRole.equalsIgnoreCase(EdxELRConstants.ELR_PATIENT_ROLE_CD)|| + // patientRole.equalsIgnoreCase("")) { + if (cdDescTxt == null || cdDescTxt.equalsIgnoreCase("") || !cdDescTxt.equalsIgnoreCase(EdxELRConstant.ELR_NOK_DESC)) { + String identifierStr = null; + int identifierStrhshCd = 0; + List identifierStrList = getIdentifier(personVO); + if (identifierStrList != null && !identifierStrList.isEmpty()) { + for (int k = 0; k < identifierStrList.size(); k++) { + identifierStr = (String) identifierStrList.get(k); + if (identifierStr != null) { + identifierStr = identifierStr.toUpperCase(); + identifierStrhshCd = identifierStr.hashCode(); + } + + if (identifierStr != null) { + edxPatientMatchDT = new EdxPatientMatchDT(); + edxPatientMatchDT.setPatientUid(patientUid); + edxPatientMatchDT.setTypeCd(NEDSSConstant.PAT); + edxPatientMatchDT.setMatchString(identifierStr); + edxPatientMatchDT.setMatchStringHashCode((long) identifierStrhshCd); + try { + edxPatientMatchRepositoryUtil.setEdxPatientMatchDT(edxPatientMatchDT); + } catch (Exception e) { + logger.error("Error in creating the setEdxPatientMatchDT with identifierStr:" + + identifierStr + " " + e.getMessage()); + throw new DataProcessingException(e.getMessage(), e); + } + + } + } + } + + // Matching with last name ,first name ,date of birth and current + // sex + + String namesdobcursexStr = null; + int namesdobcursexStrhshCd = 0; + namesdobcursexStr = getLNmFnmDobCurSexStr(personVO); + if (namesdobcursexStr != null) { + namesdobcursexStr = namesdobcursexStr.toUpperCase(); + namesdobcursexStrhshCd = namesdobcursexStr.hashCode(); + } + + if (namesdobcursexStr != null) { + edxPatientMatchDT = new EdxPatientMatchDT(); + edxPatientMatchDT.setPatientUid(patientUid); + edxPatientMatchDT.setTypeCd(NEDSSConstant.PAT); + edxPatientMatchDT.setMatchString(namesdobcursexStr); + edxPatientMatchDT.setMatchStringHashCode((long) namesdobcursexStrhshCd); + try { + edxPatientMatchRepositoryUtil.setEdxPatientMatchDT(edxPatientMatchDT); + } catch (Exception e) { + logger.error("Error in creating the setEdxPatientMatchDT with namesdobcursexStr:" + namesdobcursexStr + " " + e.getMessage()); + throw new DataProcessingException(e.getMessage(), e); + } + + } + } + // else if + // (patientRole.equalsIgnoreCase(EdxELRConstants.ELR_NEXT_F_KIN_ROLE_CD)) + // { + if (cdDescTxt != null && cdDescTxt.equalsIgnoreCase(EdxELRConstant.ELR_NOK_DESC)) { + //TODO: Next of KIN Code + + }// end of method + } + + private String getNamesStr(PersonVO personVO) { + String namesStr = null; + String carrot = "^"; + if (personVO.getThePersonDT() != null) { + PersonDT personDT = personVO.getThePersonDT(); + if (personDT.getCd() != null + && personDT.getCd().equals(NEDSSConstant.PAT)) { + if (personVO.getThePersonNameDTCollection() != null + && personVO.getThePersonNameDTCollection().size() > 0) { + Collection personNameDTColl = personVO.getThePersonNameDTCollection(); + Iterator personNameIterator = personNameDTColl.iterator(); + Timestamp asofDate = null; + while (personNameIterator.hasNext()) { + PersonNameDT personNameDT = (PersonNameDT) personNameIterator + .next(); + if (personNameDT.getNmUseCd() != null + && personNameDT.getNmUseCd().equalsIgnoreCase( + "L") + && personNameDT.getRecordStatusCd() != null + && personNameDT.getRecordStatusCd().equals( + NEDSSConstant.RECORD_STATUS_ACTIVE)) { + if (asofDate == null + || (asofDate.getTime() < personNameDT + .getAsOfDate().getTime())) { + if ((personNameDT.getLastNm() != null) + && (!personNameDT.getLastNm().trim() + .equals("")) + && (personNameDT.getFirstNm() != null) + && (!personNameDT.getFirstNm().trim() + .equals(""))) { + namesStr = personNameDT.getLastNm() + + carrot + + personNameDT.getFirstNm(); + asofDate = personNameDT.getAsOfDate(); + + } + } else if (asofDate.before(personNameDT + .getAsOfDate())) { + if ((personNameDT.getLastNm() != null) + && (!personNameDT.getLastNm().trim() + .equals("")) + && (personNameDT.getFirstNm() != null) + && (!personNameDT.getFirstNm().trim() + .equals(""))) { + namesStr = personNameDT.getLastNm() + + carrot + + personNameDT.getFirstNm(); + asofDate = personNameDT.getAsOfDate(); + } + } + } + } + } + } + } + + return namesStr; + } + + private String getLNmFnmDobCurSexStr(PersonVO personVO) { + String namedobcursexStr = null; + String carrot = "^"; + if (personVO.getThePersonDT() != null) { + PersonDT personDT = personVO.getThePersonDT(); + if (personDT.getCd() != null + && personDT.getCd().equals(NEDSSConstant.PAT)) { + if (personVO.getThePersonNameDTCollection() != null + && personVO.getThePersonNameDTCollection().size() > 0) { + Collection personNameDTColl = personVO + .getThePersonNameDTCollection(); + Iterator personNameIterator = personNameDTColl.iterator(); + Timestamp asofDate = null; + while (personNameIterator.hasNext()) { + PersonNameDT personNameDT = (PersonNameDT) personNameIterator + .next(); + if (personNameDT.getNmUseCd() == null) + { + String Message = "personNameDT.getNmUseCd() is null"; + logger.debug(Message); + } + if (personNameDT.getNmUseCd() != null + && personNameDT.getNmUseCd().equalsIgnoreCase("L") + && personNameDT.getRecordStatusCd() != null + && personNameDT.getRecordStatusCd().equals( + NEDSSConstant.RECORD_STATUS_ACTIVE)) { + if (asofDate == null + || (asofDate.getTime() < personNameDT + .getAsOfDate().getTime())) { + if ((personNameDT.getLastNm() != null) + && (!personNameDT.getLastNm().trim() + .equals("")) + && (personNameDT.getFirstNm() != null) + && (!personNameDT.getFirstNm().trim() + .equals("")) + && (personDT.getBirthTime() != null) + && (personDT.getCurrSexCd() != null) + && (!personDT.getCurrSexCd().trim() + .equals(""))) { + namedobcursexStr = personNameDT.getLastNm() + + carrot + + personNameDT.getFirstNm() + + carrot + personDT.getBirthTime() + + carrot + personDT.getCurrSexCd(); + asofDate = personNameDT.getAsOfDate(); + } + } else if (asofDate.before(personNameDT + .getAsOfDate())) { + if ((personNameDT.getLastNm() != null) + && (!personNameDT.getLastNm().trim() + .equals("")) + && (personNameDT.getFirstNm() != null) + && (!personNameDT.getFirstNm().trim() + .equals("")) + && (personDT.getBirthTime() != null) + && (personDT.getCurrSexCd() != null) + && (!personDT.getCurrSexCd().trim() + .equals(""))) { + namedobcursexStr = personNameDT.getLastNm() + + carrot + + personNameDT.getFirstNm() + + carrot + personDT.getBirthTime() + + carrot + personDT.getCurrSexCd(); + asofDate = personNameDT.getAsOfDate(); + + } + + } + + } + } + } + } + } + return namedobcursexStr; + } + + private PersonId getPersonInternalV2(Long personUID) throws DataProcessingException { + PersonId personId; + try { + Person person = null; + if (personUID != null) + { + person = patientRepositoryUtil.findExistingPersonByUid(personUID); + } + if (person != null) + { + personId = new PersonId(); + personId.setPersonParentId(person.getPersonParentUid()); + personId.setPersonId(person.getPersonUid()); + personId.setLocalId(person.getLocalId()); + } + else { + throw new DataProcessingException("Existing Patient Not Found"); + } + + logger.debug("Ent Controller past the find - person = " + person.toString()); + logger.debug("Ent Controllerpast the find - person.getPrimaryKey = " + person.getPersonUid()); + + } catch (Exception e) { + logger.error("EntityControllerEJB.getPersonInternal: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + return personId; + + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PatientAggContainer.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PatientAggContainer.java new file mode 100644 index 000000000..3c2858102 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PatientAggContainer.java @@ -0,0 +1,12 @@ +package gov.cdc.dataprocessing.service.model; + +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PatientAggContainer { + PersonVO personVO; + PersonVO providerVO; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PersonId.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PersonId.java new file mode 100644 index 000000000..4c3c93c03 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/service/model/PersonId.java @@ -0,0 +1,12 @@ +package gov.cdc.dataprocessing.service.model; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PersonId { + public Long personId; + public Long personParentId; + public String localId; +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/UniqueIdGenerator.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/UniqueIdGenerator.java new file mode 100644 index 000000000..f0494500a --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/UniqueIdGenerator.java @@ -0,0 +1,17 @@ +package gov.cdc.dataprocessing.utilities; + +import java.util.concurrent.atomic.AtomicLong; + +public class UniqueIdGenerator { + private static final AtomicLong counter = new AtomicLong(System.currentTimeMillis()); + + public static long generateUniqueId() { + return counter.incrementAndGet(); + } + + public static String generateUniqueStringId() { + long uniqueNumber = counter.incrementAndGet(); + return String.valueOf(uniqueNumber); + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/HL7PatientHandler.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/HL7PatientHandler.java index e2c18ccdd..83f47acd7 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/HL7PatientHandler.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/HL7PatientHandler.java @@ -165,7 +165,7 @@ public LabResultProxyVO getPatient(HL7PIDType hl7PIDType, } // Setup Person Ethnic Group - Collection ethnicColl = new ArrayList(); + Collection ethnicColl = new ArrayList<>(); List ethnicArray = hl7PIDType.getEthnicGroup(); for (HL7CWEType ethnicType : ethnicArray) { PersonEthnicGroupDT personEthnicGroupDT = NBSObjectConverter.ethnicGroupType(ethnicType, personVO); @@ -299,7 +299,7 @@ public LabResultProxyVO getPatient(HL7PIDType hl7PIDType, //Setup Person Race if(hl7PIDType.getRace() != null){ - Collection raceColl = new ArrayList(); + Collection raceColl = new ArrayList<>(); List raceArray = hl7PIDType.getRace(); PersonRaceDT raceDT; for (HL7CWEType hl7CWEType : raceArray) { diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/LDFHelper.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/LDFHelper.java new file mode 100644 index 000000000..8c74d1119 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/LDFHelper.java @@ -0,0 +1,27 @@ +package gov.cdc.dataprocessing.utilities.component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class LDFHelper { + public void setLDFCollection(Collection stateDefinedFieldDataCollection, Collection ldfUids, String businessObjNm, + Integer versionCtrlNbr, Long businessObjUi) + { + +// sdfDAO.setLDFData(stateDefinedFieldDataCollection,businessObjNm, versionCtrlNbr, businessObjUid); +// +// if(ldfUids != null) { +// List ldfUidList = new ArrayList(); +// ldfUidList.addAll(ldfUids); +// try { +// dfsgHelper.createBusinessObjectGroupRelationship(businessObjUid,ldfUidList); +// } +// catch (Exception e) { +// //throw new NEDSSSystemException(e.toString()); +// } +// } + + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/NBSObjectConverter.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/NBSObjectConverter.java index 7122f3222..23724fca6 100644 --- a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/NBSObjectConverter.java +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/NBSObjectConverter.java @@ -63,7 +63,7 @@ public PersonVO mapPersonNameType(HL7XPNType hl7XPNType, PersonVO personVO) thro personNameDT.setNmUseCd(Objects.requireNonNullElse(hl7NameTypeCode, EdxELRConstant.ELR_LEGAL_NAME)); String toCode = checkingValueService.findToCode("ELR_LCA_NM_USE", personNameDT.getNmUseCd(), "P_NM_USE"); - if(toCode!=null){ + if(toCode!=null && !toCode.isEmpty()){ personNameDT.setNmUseCd(toCode); } /** length"1 */ diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/PrepareAssocModelHelper.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/PrepareAssocModelHelper.java new file mode 100644 index 000000000..ae5144cad --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/PrepareAssocModelHelper.java @@ -0,0 +1,219 @@ +package gov.cdc.dataprocessing.utilities.component; + +import gov.cdc.dataprocessing.constant.elr.NEDSSConstant; +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.EntityLocatorParticipationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.ParticipationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.RoleDT; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.sql.Timestamp; + +@Component +public class PrepareAssocModelHelper { + private static final Logger logger = LoggerFactory.getLogger(PrepareAssocModelHelper.class); + + /** + * This method is used to populate the system attributes on the 5 association + * tables (ActRelationship, Participation, Role, EntityLocatoryParticipation, and + * ActLocatorParticipation). + * + * @param assocDTInterface + * @return AssocDTInterface + * @roseuid 3CD96F960027 + */ + public EntityLocatorParticipationDT prepareAssocDTForEntityLocatorParticipation(EntityLocatorParticipationDT assocDTInterface) throws DataProcessingException { + try { + EntityLocatorParticipationDT aDTInterface = null; + String recStatusCd = assocDTInterface.getRecordStatusCd(); + String statusCd = assocDTInterface.getStatusCd(); + logger.debug("AssocDTInterface.Statuscode = "+statusCd); + logger.debug("AssocDTInterface.recStatusCd = "+recStatusCd); + boolean isRealDirty = assocDTInterface.isItDirty(); + + if(recStatusCd == null) + { + logger.debug("RecordStatusCd is null"); + throw new DataProcessingException("RecordStatusCd -----2----"+recStatusCd+" statusCode--------"+statusCd); + } + + else if(!(recStatusCd.equals(NEDSSConstant.RECORD_STATUS_ACTIVE) || recStatusCd.equals(NEDSSConstant.RECORD_STATUS_INACTIVE))) + { + logger.debug("RecordStatusCd is not active or inactive"); + throw new DataProcessingException("RecordStatusCd is not active or inactive"); + } + else + { + try + { + + logger.debug("RecordStatusCd or statusCode is not null"); + assocDTInterface.setAddUserId(null); + assocDTInterface.setAddTime(null); + java.util.Date dateTime = new java.util.Date(); + Timestamp systemTime = new Timestamp(dateTime.getTime()); + assocDTInterface.setRecordStatusTime(systemTime); + assocDTInterface.setStatusTime(systemTime); + assocDTInterface.setLastChgTime(systemTime); + } + catch(Exception e) + { + e.printStackTrace(); + } + //TODO: Looking into this, this basically getting Permission ID +// if(!nbsSecurityObj.getEntryID().equals("")) +// { +// logger.debug("nbsSecurityObj.getEntryID() = " + nbsSecurityObj.getEntryID()); +// assocDTInterface.setLastChgUserId(new Long(nbsSecurityObj.getEntryID())); +// } +// else +// { +// logger.debug("nbsSecurityObj.getEntryID() is NULL "); +// throw new NEDSSSystemException("nbsSecurityObj.getEntryID() is NULL "); +// } + assocDTInterface.setLastChgReasonCd(null); + aDTInterface = assocDTInterface; + logger.debug("DT Prepared"); + } + if(!isRealDirty) { + aDTInterface.setItDirty(false);//Re-set the flag to original value if necessary + } + return aDTInterface; + } catch (Exception e) { + // TODO Auto-generated catch block + logger.error("Exception in PrepareVOUtils.prepareAssocDT: RecordStatusCd: " + assocDTInterface.getRecordStatusCd() + ", " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + + public RoleDT prepareAssocDTForRole(RoleDT assocDTInterface) throws DataProcessingException { + try { + RoleDT aDTInterface = null; + String recStatusCd = assocDTInterface.getRecordStatusCd(); + String statusCd = assocDTInterface.getStatusCd(); + logger.debug("AssocDTInterface.Statuscode = "+statusCd); + logger.debug("AssocDTInterface.recStatusCd = "+recStatusCd); + boolean isRealDirty = assocDTInterface.isItDirty(); + + if(recStatusCd == null) + { + logger.debug("RecordStatusCd is null"); + throw new DataProcessingException("RecordStatusCd -----2----"+recStatusCd+" statusCode--------"+statusCd); + } + + else if(!(recStatusCd.equals(NEDSSConstant.RECORD_STATUS_ACTIVE) || recStatusCd.equals(NEDSSConstant.RECORD_STATUS_INACTIVE))) + { + logger.debug("RecordStatusCd is not active or inactive"); + throw new DataProcessingException("RecordStatusCd is not active or inactive"); + } + else + { + try + { + + logger.debug("RecordStatusCd or statusCode is not null"); + assocDTInterface.setAddUserId(null); + assocDTInterface.setAddTime(null); + java.util.Date dateTime = new java.util.Date(); + Timestamp systemTime = new Timestamp(dateTime.getTime()); + assocDTInterface.setRecordStatusTime(systemTime); + assocDTInterface.setStatusTime(systemTime); + assocDTInterface.setLastChgTime(systemTime); + } + catch(Exception e) + { + e.printStackTrace(); + } + //TODO: Looking into this, this basically getting Permission ID +// if(!nbsSecurityObj.getEntryID().equals("")) +// { +// logger.debug("nbsSecurityObj.getEntryID() = " + nbsSecurityObj.getEntryID()); +// assocDTInterface.setLastChgUserId(new Long(nbsSecurityObj.getEntryID())); +// } +// else +// { +// logger.debug("nbsSecurityObj.getEntryID() is NULL "); +// throw new NEDSSSystemException("nbsSecurityObj.getEntryID() is NULL "); +// } + assocDTInterface.setLastChgReasonCd(null); + aDTInterface = assocDTInterface; + logger.debug("DT Prepared"); + } + if(!isRealDirty) { + aDTInterface.setItDirty(false);//Re-set the flag to original value if necessary + } + return aDTInterface; + } catch (Exception e) { + // TODO Auto-generated catch block + logger.error("Exception in PrepareVOUtils.prepareAssocDT: RecordStatusCd: " + assocDTInterface.getRecordStatusCd() + ", " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + + public ParticipationDT prepareAssocDTForParticipation(ParticipationDT assocDTInterface) throws DataProcessingException { + try { + ParticipationDT aDTInterface = null; + String recStatusCd = assocDTInterface.getRecordStatusCd(); + String statusCd = assocDTInterface.getStatusCd(); + logger.debug("AssocDTInterface.Statuscode = "+statusCd); + logger.debug("AssocDTInterface.recStatusCd = "+recStatusCd); + boolean isRealDirty = assocDTInterface.isItDirty(); + + if(recStatusCd == null) + { + logger.debug("RecordStatusCd is null"); + throw new DataProcessingException("RecordStatusCd -----2----"+recStatusCd+" statusCode--------"+statusCd); + } + + else if(!(recStatusCd.equals(NEDSSConstant.RECORD_STATUS_ACTIVE) || recStatusCd.equals(NEDSSConstant.RECORD_STATUS_INACTIVE))) + { + logger.debug("RecordStatusCd is not active or inactive"); + throw new DataProcessingException("RecordStatusCd is not active or inactive"); + } + else + { + try + { + + logger.debug("RecordStatusCd or statusCode is not null"); + assocDTInterface.setAddUserId(null); + assocDTInterface.setAddTime(null); + java.util.Date dateTime = new java.util.Date(); + Timestamp systemTime = new Timestamp(dateTime.getTime()); + assocDTInterface.setRecordStatusTime(systemTime); + assocDTInterface.setStatusTime(systemTime); + assocDTInterface.setLastChgTime(systemTime); + } + catch(Exception e) + { + e.printStackTrace(); + } + //TODO: Looking into this, this basically getting Permission ID +// if(!nbsSecurityObj.getEntryID().equals("")) +// { +// logger.debug("nbsSecurityObj.getEntryID() = " + nbsSecurityObj.getEntryID()); +// assocDTInterface.setLastChgUserId(new Long(nbsSecurityObj.getEntryID())); +// } +// else +// { +// logger.debug("nbsSecurityObj.getEntryID() is NULL "); +// throw new NEDSSSystemException("nbsSecurityObj.getEntryID() is NULL "); +// } + assocDTInterface.setLastChgReasonCd(null); + aDTInterface = assocDTInterface; + logger.debug("DT Prepared"); + } + if(!isRealDirty) { + aDTInterface.setItDirty(false);//Re-set the flag to original value if necessary + } + return aDTInterface; + } catch (Exception e) { + // TODO Auto-generated catch block + logger.error("Exception in PrepareVOUtils.prepareAssocDT: RecordStatusCd: " + assocDTInterface.getRecordStatusCd() + ", " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityHelper.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityHelper.java new file mode 100644 index 000000000..b1d68c40f --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityHelper.java @@ -0,0 +1,143 @@ +package gov.cdc.dataprocessing.utilities.component.entity; + +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.EntityLocatorParticipationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.ParticipationDT; +import gov.cdc.dataprocessing.model.classic_model.dto.RoleDT; +import gov.cdc.dataprocessing.utilities.component.PrepareAssocModelHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +@Component +public class EntityHelper { + private static final Logger logger = LoggerFactory.getLogger(EntityHelper.class); + private final PrepareAssocModelHelper prepareAssocModel; + + public EntityHelper(PrepareAssocModelHelper prepareAssocModel) { + this.prepareAssocModel = prepareAssocModel; + } + + /** + * This private method is used to populate the system attributes on the + * EntityLocatoryParticipation Collection + * + * @param dtCol + * Collection + * NBSSecurityObj object + * @return Collection EntityLocatoryParticipation collection object + * populated with system attributes + */ + public Collection iterateELPDTForEntityLocatorParticipation(Collection dtCol) throws DataProcessingException { + Collection retCol = new ArrayList<>(); + Collection collection = new ArrayList<>(); + Iterator anIterator = null; + collection = dtCol; + logger.debug("Collection size before iteration in iterateELPDT " + collection.size()); + try { + for (anIterator = collection.iterator(); anIterator.hasNext(); ) { + EntityLocatorParticipationDT elpDT = (EntityLocatorParticipationDT) anIterator.next(); + EntityLocatorParticipationDT assocDTInterface = elpDT; + logger.debug("Iterating EntityLocatorParticipationDT"); + elpDT = (EntityLocatorParticipationDT) prepareAssocModel.prepareAssocDTForEntityLocatorParticipation(assocDTInterface); + logger.debug("Came back from PrepareVOUtils"); + retCol.add(elpDT); + } + } catch (Exception e) { + logger.error("EntityControllerEJB.iterateELPDT: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + logger.debug("Collection size after iteration in iterateELPDT " + retCol.size()); + return retCol; + + } + + + /** + * This private method is used to populate the system attributes on the + * RoleDT Collection + * + * @param dtCol + * Collection + * NBSSecurityObj object + * @return Collection RoleDT collection object populated with system + * attributes + */ + public Collection iterateRDT(Collection dtCol) throws DataProcessingException { + Collection retCol = new ArrayList<>(); + Collection collection = new ArrayList<>(); + Iterator anIterator = null; + collection = dtCol; + logger.debug("Collection size before iteration in iterateRDT " + collection.size()); + if (collection != null) { + try { + for (anIterator = collection.iterator(); anIterator.hasNext();) { + RoleDT rDT = (RoleDT) anIterator.next(); + if (rDT.isItDirty() || rDT.isItNew() || rDT.isItDelete()) { + logger.debug("EntityController:rdT.IsItDelete" + + rDT.isItDelete() + "rdt.IsItNew:" + + rDT.isItNew() + "rdt.IsItDirty:" + + rDT.isItDirty()); + RoleDT assocDTInterface = rDT; + rDT = (RoleDT) prepareAssocModel.prepareAssocDTForRole(assocDTInterface); + retCol.add(rDT); + } + } + } catch (Exception e) { + logger.error("EntityControllerEJB.iterateRDT: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + logger.debug("Collection size after iteration in iterateRDT " + retCol.size()); + return retCol; + + } + + + + /** + * This private method is used to populate the system attributes on the + * ParticipationDT Collection + * + * @param dtCol + * Collection + * NBSSecurityObj object + * @return Collection ParticipationDT collection object populated + * with system attributes + */ + + public Collection iteratePDTForParticipation(Collection dtCol) throws DataProcessingException { + Collection retCol = new ArrayList<>(); + Collection collection = new ArrayList<>(); + Iterator anIterator = null; + collection = dtCol; + logger.debug("Collection size before iteration in iteratePDT " + collection.size()); + if (collection != null) { + try { + for (anIterator = collection.iterator(); anIterator.hasNext();) { + ParticipationDT pDT = (ParticipationDT) anIterator.next(); + if (pDT.isItDirty() || pDT.isItNew() || pDT.isItDelete()) { + logger.debug("EntityController:pdT.IsItDelete" + + pDT.isItDelete() + "pdt.IsItNew:" + + pDT.isItNew() + "pdt.IsItDirty:" + + pDT.isItDirty()); + ParticipationDT assocDTInterface = pDT; + pDT = prepareAssocModel.prepareAssocDTForParticipation(assocDTInterface); + retCol.add(pDT); + } + } + } catch (Exception e) { + logger.error("EntityControllerEJB.iteratePDT: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + logger.debug("Collection size after iteration in iteratePDT " + + retCol.size()); + return retCol; + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityRepositoryUtil.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityRepositoryUtil.java new file mode 100644 index 000000000..0b1157842 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/entity/EntityRepositoryUtil.java @@ -0,0 +1,49 @@ +package gov.cdc.dataprocessing.utilities.component.entity; + +import gov.cdc.dataprocessing.constant.elr.NEDSSConstant; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonDT; +import gov.cdc.dataprocessing.repository.nbs.odse.EntityRepository; +import gov.cdc.dataprocessing.repository.nbs.odse.model.EntityODSE; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class EntityRepositoryUtil { + private static final Logger logger = LoggerFactory.getLogger(EntityRepositoryUtil.class); + private final EntityRepository entityRepository; + + + public EntityRepositoryUtil(EntityRepository entityRepository) { + this.entityRepository = entityRepository; + } + + public EntityODSE preparingEntityReposCallForPerson(PersonDT personDT, Long entityId, Object entityValue, String event) { + EntityODSE entityODSE = null; + if (entityValue.getClass().toString().equals("class java.lang.String")) { + entityODSE = new EntityODSE(); + entityODSE.setEntityUid(entityId); + entityODSE.setClassCd((String) entityValue); + entityRepository.save(entityODSE); + } else { + if (entityValue.getClass().toString().equals("class java.sql.Timestamp")) { + //TODO: Will get back to this + } + else { + + } + } + + if (event.equals(NEDSSConstant.SELECT)) { + + } + else if (event.equals(NEDSSConstant.SELECT_COUNT)) { + + } + else { + return entityODSE; + } + + return entityODSE; + } +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/EdxPatientMatchRepositoryUtil.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/EdxPatientMatchRepositoryUtil.java new file mode 100644 index 000000000..2a021f5d4 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/EdxPatientMatchRepositoryUtil.java @@ -0,0 +1,49 @@ +package gov.cdc.dataprocessing.utilities.component.patient; + +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.EdxPatientMatchDT; +import gov.cdc.dataprocessing.repository.nbs.odse.EdxPatientMatchRepository; +import gov.cdc.dataprocessing.repository.nbs.odse.EdxPatientMatchStoredProcRepository; +import gov.cdc.dataprocessing.repository.nbs.odse.model.EdxPatientMatch; +import jakarta.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class EdxPatientMatchRepositoryUtil { + private static final Logger logger = LoggerFactory.getLogger(EdxPatientMatchRepositoryUtil.class); + private final EdxPatientMatchRepository edxPatientMatchRepository; + private final EdxPatientMatchStoredProcRepository edxPatientMatchStoreProcRepository; + + + public EdxPatientMatchRepositoryUtil(EdxPatientMatchRepository edxPatientMatchRepository, + EdxPatientMatchStoredProcRepository edxPatientMatchStoreProcRepository) { + this.edxPatientMatchRepository = edxPatientMatchRepository; + this.edxPatientMatchStoreProcRepository = edxPatientMatchStoreProcRepository; + } + + @Transactional + public EdxPatientMatchDT getEdxPatientMatchOnMatchString(String typeCd, String matchString) throws DataProcessingException { + if (typeCd == null || matchString == null) { + return new EdxPatientMatchDT(); + } + try { + return edxPatientMatchStoreProcRepository.getEdxPatientMatch(typeCd, matchString); + + } catch (Exception ex) { + logger.error("Exception in EdxPatientMatchDAO.getEdxPatientMatchOnMatchString for typeCd=" + typeCd + " match string=" + matchString + ": ERROR = " + ex); + throw new DataProcessingException(ex.toString(), ex); + } + } + + public EdxPatientMatch setEdxPatientMatchDT(EdxPatientMatchDT edxPatientMatchDT) { + EdxPatientMatch edxPatientMatch = new EdxPatientMatch(edxPatientMatchDT); + edxPatientMatchRepository.save(edxPatientMatch); + return edxPatientMatch; + } + + public void deleteEdxPatientMatchDTColl(Long patientUid) { + edxPatientMatchRepository.deleteByPatientUidAndMatchStringNotLike(patientUid); + } +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PatientRepositoryUtil.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PatientRepositoryUtil.java new file mode 100644 index 000000000..bc2d6dc66 --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PatientRepositoryUtil.java @@ -0,0 +1,413 @@ +package gov.cdc.dataprocessing.utilities.component.patient; + +import gov.cdc.dataprocessing.constant.elr.NEDSSConstant; +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.*; +import gov.cdc.dataprocessing.model.classic_model.vo.PersonVO; +import gov.cdc.dataprocessing.repository.nbs.odse.*; +import gov.cdc.dataprocessing.repository.nbs.odse.model.*; +import gov.cdc.dataprocessing.utilities.UniqueIdGenerator; +import gov.cdc.dataprocessing.utilities.component.entity.EntityRepositoryUtil; +import jakarta.transaction.Transactional; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.sql.Timestamp; +import java.util.*; + +@Component +public class PatientRepositoryUtil { + private static final Logger logger = LoggerFactory.getLogger(PatientRepositoryUtil.class); + private final PersonRepository personRepository; + private final EntityRepositoryUtil entityRepositoryUtil; + private final PersonNameRepository personNameRepository; + private final PersonRaceRepository personRaceRepository; + private final PersonEthnicRepository personEthnicRepository; + private final EntityIdRepository entityIdRepository; + private final EntityLocatorParticipationRepository entityLocatorParticipationRepository; + private final RoleRepository roleRepository; + private final TeleLocatorRepository teleLocatorRepository; + private final PostalLocatorRepository postalLocatorRepository; + private final PhysicalLocatorRepository physicalLocatorRepository; + private final LocalUidGeneratorRepository localUidGeneratorRepository; + + private final static String PERSON = "PERSON"; + + public PatientRepositoryUtil( + PersonRepository personRepository, + EntityRepositoryUtil entityRepositoryUtil, + PersonNameRepository personNameRepository, + PersonRaceRepository personRaceRepository, + PersonEthnicRepository personEthnicRepository, + EntityIdRepository entityIdRepository, + EntityLocatorParticipationRepository entityLocatorParticipationRepository, + RoleRepository roleRepository, + TeleLocatorRepository teleLocatorRepository, + PostalLocatorRepository postalLocatorRepository, + PhysicalLocatorRepository physicalLocatorRepository, LocalUidGeneratorRepository localUidGeneratorRepository) { + this.personRepository = personRepository; + this.entityRepositoryUtil = entityRepositoryUtil; + this.personNameRepository = personNameRepository; + this.personRaceRepository = personRaceRepository; + this.personEthnicRepository = personEthnicRepository; + this.entityIdRepository = entityIdRepository; + this.entityLocatorParticipationRepository = entityLocatorParticipationRepository; + this.roleRepository = roleRepository; + this.teleLocatorRepository = teleLocatorRepository; + this.postalLocatorRepository = postalLocatorRepository; + this.physicalLocatorRepository = physicalLocatorRepository; + this.localUidGeneratorRepository = localUidGeneratorRepository; + } + + + @Transactional + public Person findExistingPersonByUid(Long personUid) { + var result = personRepository.findById(personUid); + return result.get(); + } + + @Transactional + public Person createPerson(PersonVO personVO) throws DataProcessingException { + //TODO: Implement unique id generator here + Long personUid = 212121L; + String localUid = "Unique Id here"; + var localIdModel = localUidGeneratorRepository.findById(PERSON); + personUid = localIdModel.get().getSeedValueNbr(); + localUid = localIdModel.get().getUidPrefixCd() + personUid + localIdModel.get().getUidSuffixCd(); + + LocalUidGenerator newGen = new LocalUidGenerator(); + newGen.setClassNameCd(localIdModel.get().getClassNameCd()); + newGen.setTypeCd(localIdModel.get().getTypeCd()); + newGen.setSeedValueNbr(localIdModel.get().getSeedValueNbr() + 1); + newGen.setUidPrefixCd(localIdModel.get().getUidPrefixCd()); + newGen.setUidSuffixCd(localIdModel.get().getUidSuffixCd()); + localUidGeneratorRepository.save(newGen); + + ArrayList arrayList = new ArrayList<>(); + + if(personVO.getThePersonDT().getLocalId() == null || personVO.getThePersonDT().getLocalId().trim().length() == 0) { + personVO.getThePersonDT().setLocalId(localUid); + } + + if(personVO.getThePersonDT().getPersonParentUid() == null) { + personVO.getThePersonDT().setPersonParentUid(personUid); + } + + // set new person uid in entity table + personVO.getThePersonDT().setPersonUid(personUid); + + arrayList.add(personUid); + arrayList.add(NEDSSConstant.PERSON); + + //NOTE: Create Entitty + try { + //NOTE: OK + entityRepositoryUtil.preparingEntityReposCallForPerson(personVO.getThePersonDT(), personUid, NEDSSConstant.PERSON, NEDSSConstant.UPDATE); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + + //NOTE: Create Person + Person person = new Person(personVO.getThePersonDT()); + try { + personRepository.save(person); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + //NOTE: Create Person Name + if (personVO.getThePersonNameDTCollection() != null && !personVO.getThePersonNameDTCollection().isEmpty()) { + try { + createPersonName(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Person Race + if (personVO.getThePersonRaceDTCollection() != null && !personVO.getThePersonRaceDTCollection().isEmpty()) { + try { + createPersonRace(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Person Ethnic + if (personVO.getThePersonEthnicGroupDTCollection() != null && !personVO.getThePersonEthnicGroupDTCollection().isEmpty()) { + try { + createPersonEthnic(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create EntityID + if (personVO.getTheEntityIdDTCollection() != null && !personVO.getTheEntityIdDTCollection().isEmpty()) { + try { + createEntityId(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Entity Locator Participation + if (personVO.getTheEntityLocatorParticipationDTCollection() != null && !personVO.getTheEntityLocatorParticipationDTCollection().isEmpty()) { + try { + createEntityLocatorParticipation(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Role + if (personVO.getTheRoleDTCollection() != null && !personVO.getTheRoleDTCollection().isEmpty()) { + try { + createRole(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + return person; + } + + @Transactional + public void updateExistingPerson(PersonVO personVO) throws DataProcessingException { + //TODO: Implement unique id generator here + + + ArrayList arrayList = new ArrayList<>(); + + arrayList.add(NEDSSConstant.PERSON); + + + //NOTE: Create Person Name + if (personVO.getThePersonNameDTCollection() != null && !personVO.getThePersonNameDTCollection().isEmpty()) { + try { + updatePersonName(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Person Race + if (personVO.getThePersonRaceDTCollection() != null && !personVO.getThePersonRaceDTCollection().isEmpty()) { + try { + createPersonRace(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Create Person Ethnic + if (personVO.getThePersonEthnicGroupDTCollection() != null && !personVO.getThePersonEthnicGroupDTCollection().isEmpty()) { + try { + createPersonEthnic(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + + //NOTE: Upsert EntityID + if (personVO.getTheEntityIdDTCollection() != null && !personVO.getTheEntityIdDTCollection().isEmpty()) { + try { + createEntityId(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + + //NOTE: Create Entity Locator Participation + if (personVO.getTheEntityLocatorParticipationDTCollection() != null && !personVO.getTheEntityLocatorParticipationDTCollection().isEmpty()) { + try { + createEntityLocatorParticipation(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + //NOTE: Upsert Role + if (personVO.getTheRoleDTCollection() != null && !personVO.getTheRoleDTCollection().isEmpty()) { + try { + createRole(personVO); + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + } + + private void updatePersonName(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getThePersonNameDTCollection(); + try { + var pUid = personVO.getThePersonDT().getPersonUid(); + List personNameSeqId = personNameRepository.findBySeqIdByParentUid(pUid); + Integer seqId = 0; + if (!personNameSeqId.isEmpty()) { + seqId = personNameSeqId.get(0); + } + + for(int i = 0; i < personList.size(); i++) { + seqId++; + personList.get(i).setPersonUid(pUid); + if (personList.get(i).getStatusCd() == null) { + personList.get(i).setStatusCd("A"); + } + if (personList.get(i).getStatusTime() == null) { + personList.get(i).setStatusTime(new Timestamp(new Date().getTime())); + } + personList.get(i).setPersonNameSeq(seqId); + personNameRepository.save(new PersonName( personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createPersonName(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getThePersonNameDTCollection(); + try { + var pUid = personVO.getThePersonDT().getPersonUid(); + for(int i = 0; i < personList.size(); i++) { + personList.get(i).setPersonUid(pUid); + if (personList.get(i).getStatusCd() == null) { + personList.get(i).setStatusCd("A"); + } + if (personList.get(i).getStatusTime() == null) { + personList.get(i).setStatusTime(new Timestamp(new Date().getTime())); + } + personNameRepository.save(new PersonName( personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createPersonRace(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getThePersonRaceDTCollection(); + try { + for(int i = 0; i < personList.size(); i++) { + var pUid = personVO.getThePersonDT().getPersonUid(); + personList.get(i).setPersonUid(pUid); + personRaceRepository.save(new PersonRace(personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createPersonEthnic(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getThePersonEthnicGroupDTCollection(); + try { + for(int i = 0; i < personList.size(); i++) { + var pUid = personVO.getThePersonDT().getPersonUid(); + personList.get(i).setPersonUid(pUid); + personEthnicRepository.save(new PersonEthnicGroup(personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createEntityId(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getTheEntityIdDTCollection(); + try { + for(int i = 0; i < personList.size(); i++) { + var pUid = personVO.getThePersonDT().getPersonUid(); + personList.get(i).setEntityUid(pUid); + entityIdRepository.save(new EntityId(personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createEntityLocatorParticipation(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getTheEntityLocatorParticipationDTCollection(); + try { + for(int i = 0; i < personList.size(); i++) { + + Long uniqueId = UniqueIdGenerator.generateUniqueId(); + if (personList.get(i).getClassCd().equals(NEDSSConstant.PHYSICAL) && personList.get(i).getThePhysicalLocatorDT() != null) { + personList.get(i).getThePhysicalLocatorDT().setPhysicalLocatorUid(uniqueId); + physicalLocatorRepository.save(new PhysicalLocator(personList.get(i).getThePhysicalLocatorDT())); + } + if (personList.get(i).getClassCd().equals(NEDSSConstant.POSTAL) && personList.get(i).getThePostalLocatorDT() != null) { + personList.get(i).getThePostalLocatorDT().setPostalLocatorUid(uniqueId); + postalLocatorRepository.save(new PostalLocator(personList.get(i).getThePostalLocatorDT())); + } + if (personList.get(i).getClassCd().equals(NEDSSConstant.TELE) && personList.get(i).getTheTeleLocatorDT() != null) { + personList.get(i).getTheTeleLocatorDT().setTeleLocatorUid(uniqueId); + teleLocatorRepository.save(new TeleLocator(personList.get(i).getTheTeleLocatorDT())); + } + personList.get(i).setEntityUid(personVO.getThePersonDT().getPersonUid()); + personList.get(i).setLocatorUid(uniqueId); + + if (personList.get(i).getVersionCtrlNbr() == null) { + personList.get(i).setVersionCtrlNbr(1); + } + entityLocatorParticipationRepository.save(new EntityLocatorParticipation(personList.get(i))); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + private void createRole(PersonVO personVO) throws DataProcessingException { + ArrayList personList = (ArrayList ) personVO.getTheRoleDTCollection(); + try { + for(int i = 0; i < personList.size(); i++) { + RoleDT obj = personList.get(i); + roleRepository.save(new Role(obj)); + } + } catch (Exception e) { + throw new DataProcessingException(e.getMessage(), e); + } + } + + + + + /** + * @roseuid 3E7B17250186 + * @J2EE_METHOD -- preparePersonNameBeforePersistence + */ + @Transactional + public PersonVO preparePersonNameBeforePersistence(PersonVO personVO) throws DataProcessingException { + try { + Collection namesCollection = personVO + .getThePersonNameDTCollection(); + if (namesCollection != null && namesCollection.size() > 0) { + + Iterator namesIter = namesCollection.iterator(); + PersonNameDT selectedNameDT = null; + while (namesIter.hasNext()) { + PersonNameDT thePersonNameDT = (PersonNameDT) namesIter.next(); + if (thePersonNameDT.getNmUseCd() != null + && !thePersonNameDT.getNmUseCd().trim().equals("L")) + continue; + if (thePersonNameDT.getAsOfDate() != null) { + if (selectedNameDT == null) + selectedNameDT = thePersonNameDT; + else if (selectedNameDT.getAsOfDate()!=null && thePersonNameDT.getAsOfDate()!=null && thePersonNameDT.getAsOfDate().after( + selectedNameDT.getAsOfDate())) { + selectedNameDT = thePersonNameDT; + } + } else { + if (selectedNameDT == null) + selectedNameDT = thePersonNameDT; + } + } + if (selectedNameDT != null) { + personVO.getThePersonDT().setLastNm(selectedNameDT.getLastNm()); + personVO.getThePersonDT().setFirstNm( + selectedNameDT.getFirstNm()); + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + logger.error("EntityControllerEJB.preparePersonNameBeforePersistence: " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + + return personVO; + } + + + + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PreparingPersonUtil.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PreparingPersonUtil.java new file mode 100644 index 000000000..f39e7c16a --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/component/patient/PreparingPersonUtil.java @@ -0,0 +1,79 @@ +package gov.cdc.dataprocessing.utilities.component.patient; + +import gov.cdc.dataprocessing.exception.DataProcessingException; +import gov.cdc.dataprocessing.model.classic_model.dto.PersonDT; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class PreparingPersonUtil { + private static final Logger logger = LoggerFactory.getLogger(PreparingPersonUtil.class); + + public PersonDT prepareVO( + PersonDT theRootDTInterface, + String businessObjLookupName, + String businessTriggerCd, + String tableName, String moduleCd ) throws DataProcessingException { + try + { + if(theRootDTInterface.isItNew() == false && theRootDTInterface.isItDirty() == false && theRootDTInterface.isItDelete() == false) { + throw new DataProcessingException("Error while calling prepareVO method in PrepareVOUtils"); + } + logger.debug("(Boolean.FALSE).equals(new Boolean(theRootDTInterface.tableName)?:" + tableName +":theRootDTInterface.moduleCd:" +moduleCd +":businessTriggerCd:"+businessTriggerCd); + + // TODO: This is concurrent check, back to when finish + /* + if(theRootDTInterface.isItDirty() && (Boolean.FALSE).equals(new Boolean(theRootDTInterface.isItNew()))) + { + + logger.debug("!test1. theRootDTInterface isItNEW?:" + !theRootDTInterface.isItNew() +":theRootDTInterface.IsItDirty:" +!theRootDTInterface.isItDirty() ); + boolean result = dataConcurrenceCheck(theRootDTInterface, tableName, nbsSecurityObj); + if(result) + { + logger.debug("result in prepareVOUtil is :" + result); + //no concurrent dataAccess has occured, hence can continue! + } + else + { + throw new DataProcessingException("NEDSSConcurrentDataException occurred in PrepareVOUtils.Person"); + } + } + */ + + //TODO: PERSON probably wont hit these, but need to check with legacy + + /* + + if(theRootDTInterface.isItNew() && (theRootDTInterface.getSuperclass().toUpperCase().equals("ACT"))) + { + logger.debug("new act"); + theRootDTInterface = this.prepareNewActVO(theRootDTInterface, businessObjLookupName, businessTriggerCd, tableName, moduleCd, nbsSecurityObj); + } + else if(theRootDTInterface.isItNew() && (theRootDTInterface.getSuperclass().toUpperCase().equals("ENTITY"))) + { + logger.debug("new entity"); + theRootDTInterface = this.prepareNewEntityVO(theRootDTInterface, businessObjLookupName, businessTriggerCd, tableName, moduleCd, nbsSecurityObj); + } + else if(theRootDTInterface.isItDirty() && (theRootDTInterface.getSuperclass().toUpperCase().equals("ACT"))) + { + logger.debug("dirty act"); + theRootDTInterface = this.prepareDirtyActVO(theRootDTInterface, businessObjLookupName, businessTriggerCd, tableName, moduleCd, nbsSecurityObj); + } + else if(theRootDTInterface.isItDirty() && (theRootDTInterface.getSuperclass().toUpperCase().equals("ENTITY"))) + { + logger.debug("dirty entity"); + theRootDTInterface = this.prepareDirtyEntityVO(theRootDTInterface, businessObjLookupName, businessTriggerCd, tableName, moduleCd, nbsSecurityObj); + } + */ + + return theRootDTInterface; + } + catch(Exception e) + { + logger.info("Exception in PrepareVOUtils.prepareVO: LocalID: " + theRootDTInterface.getLocalId() + ", businessTriggerCd: " + businessTriggerCd + ", tableName: " + tableName + ", " + e.getMessage(), e); + throw new DataProcessingException(e.getMessage(), e); + } + } + +} diff --git a/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/model/Coded.java b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/model/Coded.java new file mode 100644 index 000000000..cf227cb0a --- /dev/null +++ b/data-processing-service/src/main/java/gov/cdc/dataprocessing/utilities/model/Coded.java @@ -0,0 +1,20 @@ +package gov.cdc.dataprocessing.utilities.model; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Coded { + private String code; + private String codeDescription; + private String codeSystemCd; + private String localCode; + private String localCodeDescription; + private String localCodeSystemCd; + + private Long codesetGroupId; + private String codesetName; + private String codesetTableName; + private boolean flagNotFound;//this has been created as a fix for eicr ND-11745 +}