Skip to content

Commit

Permalink
Merge pull request #985 from CDCgov/story-621-save_new_metadata
Browse files Browse the repository at this point in the history
621: Save Metadata from FHIR Sender/Receiver/Number
  • Loading branch information
saquino0827 authored Apr 11, 2024
2 parents 6281f11 + b22d5e9 commit 5e8be70
Show file tree
Hide file tree
Showing 20 changed files with 688 additions and 195 deletions.
53 changes: 48 additions & 5 deletions etor/databaseMigrations/metadata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ databaseChangeLog:
context: metadata
comment: create status type
changes:
- sql:
sql: CREATE TYPE message_status AS ENUM ('PENDING', 'DELIVERED', 'FAILED')
- sql:
sql: CREATE TYPE message_status AS ENUM ('PENDING', 'DELIVERED', 'FAILED')
rollback:
- sql:
sql: DROP TYPE message_status
Expand All @@ -19,7 +19,7 @@ databaseChangeLog:
context: metadata
comment: create partner metadata table
changes:
- createTable:
- createTable:
tableName: metadata
columns:
- column:
Expand Down Expand Up @@ -60,8 +60,8 @@ databaseChangeLog:
context: metadata
comment: create message type
changes:
- sql:
sql: CREATE TYPE message_type AS ENUM ('RESULT', 'ORDER')
- sql:
sql: CREATE TYPE message_type AS ENUM ('RESULT', 'ORDER')
rollback:
- sql:
sql: DROP TYPE message_type
Expand Down Expand Up @@ -109,3 +109,46 @@ databaseChangeLog:
- column:
name: receiving_facility_id
type: varchar(227)
- changeSet:
id: 6
author: samuel.aquino
labels: update-metadata-table
context: metadata
comment: update partner metadata table for order and result linking using jsonb
changes:
- renameColumn:
columnDataType: varchar(227)
oldColumnName: sending_application_id
newColumnName: sending_application_details
tableName: metadata
- renameColumn:
columnDataType: varchar(227)
oldColumnName: sending_facility_id
newColumnName: sending_facility_details
tableName: metadata
- renameColumn:
columnDataType: varchar(227)
oldColumnName: receiving_application_id
newColumnName: receiving_application_details
tableName: metadata
- renameColumn:
columnDataType: varchar(227)
oldColumnName: receiving_facility_id
newColumnName: receiving_facility_details
tableName: metadata
- modifyDataType:
columnName: sending_application_details
newDataType: jsonb
tableName: metadata
- modifyDataType:
columnName: sending_facility_details
newDataType: jsonb
tableName: metadata
- modifyDataType:
columnName: receiving_application_details
newDataType: jsonb
tableName: metadata
- modifyDataType:
columnName: receiving_facility_details
newDataType: jsonb
tableName: metadata
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@
* identifier (ID), and the type of the universal ID. HD reference: <a
* href="https://hl7-definition.caristix.com/v2/HL7v2.5.1/DataTypes/HD">HD-DataType</a>
*/
public record MessageHdDataType(String namespace, String universalId, String universalIdType) {}
public record MessageHdDataType(String namespace, String universalId, String universalIdType) {

// Constructor for Jackson Mapping
public MessageHdDataType {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,14 @@ public static SendMessageHelper getInstance() {
private SendMessageHelper() {}

public void savePartnerMetadataForReceivedMessage(
String receivedSubmissionId, int messageHash, PartnerMetadataMessageType messageType) {
String receivedSubmissionId,
int messageHash,
PartnerMetadataMessageType messageType,
MessageHdDataType sendingApplicationDetails,
MessageHdDataType sendingFacilityDetails,
MessageHdDataType receivingApplicationDetails,
MessageHdDataType receivingFacilityDetails,
String placerOrderNumber) {
if (receivedSubmissionId == null) {
logger.logWarning(
"Received submissionId is null so not saving metadata for received message");
Expand All @@ -30,7 +37,14 @@ public void savePartnerMetadataForReceivedMessage(
String stringMessageHash = String.valueOf(messageHash);

partnerMetadataOrchestrator.updateMetadataForReceivedMessage(
receivedSubmissionId, stringMessageHash, messageType);
receivedSubmissionId,
stringMessageHash,
messageType,
sendingApplicationDetails,
sendingFacilityDetails,
receivingApplicationDetails,
receivingFacilityDetails,
placerOrderNumber);
} catch (PartnerMetadataException e) {
logger.logError(
"Unable to save metadata for receivedSubmissionId " + receivedSubmissionId, e);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package gov.hhs.cdc.trustedintermediary.etor.metadata.partner;

import gov.hhs.cdc.trustedintermediary.etor.messages.MessageHdDataType;
import java.time.Instant;

/**
Expand All @@ -24,7 +25,12 @@ public record PartnerMetadata(
String hash,
PartnerMetadataStatus deliveryStatus,
String failureReason,
PartnerMetadataMessageType messageType) {
PartnerMetadataMessageType messageType,
MessageHdDataType sendingApplicationDetails,
MessageHdDataType sendingFacilityDetails,
MessageHdDataType receivingApplicationDetails,
MessageHdDataType receivingFacilityDetails,
String placerOrderNumber) {

// Below is for defaulting status when null
public PartnerMetadata {
Expand All @@ -40,7 +46,12 @@ public PartnerMetadata(
Instant timeDelivered,
String hash,
PartnerMetadataStatus deliveryStatus,
PartnerMetadataMessageType messageType) {
PartnerMetadataMessageType messageType,
MessageHdDataType sendingApplicationDetails,
MessageHdDataType sendingFacilityDetails,
MessageHdDataType receivingApplicationDetails,
MessageHdDataType receivingFacilityDetails,
String placerOrderNumber) {
this(
receivedSubmissionId,
null,
Expand All @@ -51,26 +62,42 @@ public PartnerMetadata(
hash,
deliveryStatus,
null,
messageType);
}

public PartnerMetadata(String receivedSubmissionId, String hash) {
this(receivedSubmissionId, null, null, null, null, null, hash, null, null, null);
messageType,
sendingApplicationDetails,
sendingFacilityDetails,
receivingApplicationDetails,
receivingFacilityDetails,
placerOrderNumber);
}

public PartnerMetadata(
String receivedSubmissionId, String hash, PartnerMetadataMessageType messageType) {
this(receivedSubmissionId, null, null, null, null, null, hash, null, null, messageType);
String receivedSubmissionId,
String hash,
PartnerMetadataMessageType messageType,
MessageHdDataType sendingApplicationDetails,
MessageHdDataType sendingFacilityDetails,
MessageHdDataType receivingApplicationDetails,
MessageHdDataType receivingFacilityDetails,
String placerOrderNumber) {
this(
receivedSubmissionId,
null,
null,
null,
null,
null,
hash,
null,
null,
messageType,
sendingApplicationDetails,
sendingFacilityDetails,
receivingApplicationDetails,
receivingFacilityDetails,
placerOrderNumber);
}

public PartnerMetadata(String receivedSubmissionId, PartnerMetadataStatus deliveryStatus) {
this(receivedSubmissionId, null, null, null, null, null, null, deliveryStatus, null, null);
}

public PartnerMetadata(
String receivedSubmissionId,
PartnerMetadataStatus deliveryStatus,
PartnerMetadataMessageType messageType) {
this(
receivedSubmissionId,
null,
Expand All @@ -81,7 +108,12 @@ public PartnerMetadata(
null,
deliveryStatus,
null,
messageType);
null,
null,
null,
null,
null,
null);
}

public PartnerMetadata withSentSubmissionId(String sentSubmissionId) {
Expand All @@ -95,7 +127,12 @@ public PartnerMetadata withSentSubmissionId(String sentSubmissionId) {
this.hash,
this.deliveryStatus,
this.failureReason,
this.messageType);
this.messageType,
this.sendingApplicationDetails,
this.sendingFacilityDetails,
this.receivingApplicationDetails,
this.receivingFacilityDetails,
this.placerOrderNumber);
}

public PartnerMetadata withReceiver(String receiver) {
Expand All @@ -109,7 +146,12 @@ public PartnerMetadata withReceiver(String receiver) {
this.hash,
this.deliveryStatus,
this.failureReason,
this.messageType);
this.messageType,
this.sendingApplicationDetails,
this.sendingFacilityDetails,
this.receivingApplicationDetails,
this.receivingFacilityDetails,
this.placerOrderNumber);
}

public PartnerMetadata withTimeDelivered(Instant timeDelivered) {
Expand All @@ -123,7 +165,12 @@ public PartnerMetadata withTimeDelivered(Instant timeDelivered) {
this.hash,
this.deliveryStatus,
this.failureReason,
this.messageType);
this.messageType,
this.sendingApplicationDetails,
this.sendingFacilityDetails,
this.receivingApplicationDetails,
this.receivingFacilityDetails,
this.placerOrderNumber);
}

public PartnerMetadata withDeliveryStatus(PartnerMetadataStatus deliveryStatus) {
Expand All @@ -137,7 +184,12 @@ public PartnerMetadata withDeliveryStatus(PartnerMetadataStatus deliveryStatus)
this.hash,
deliveryStatus,
this.failureReason,
this.messageType);
this.messageType,
this.sendingApplicationDetails,
this.sendingFacilityDetails,
this.receivingApplicationDetails,
this.receivingFacilityDetails,
this.placerOrderNumber);
}

public PartnerMetadata withFailureMessage(String failureMessage) {
Expand All @@ -151,6 +203,11 @@ public PartnerMetadata withFailureMessage(String failureMessage) {
this.hash,
this.deliveryStatus,
failureMessage,
this.messageType);
this.messageType,
this.sendingApplicationDetails,
this.sendingFacilityDetails,
this.receivingApplicationDetails,
this.receivingFacilityDetails,
this.placerOrderNumber);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package gov.hhs.cdc.trustedintermediary.etor.metadata.partner;

import gov.hhs.cdc.trustedintermediary.etor.RSEndpointClient;
import gov.hhs.cdc.trustedintermediary.etor.messages.MessageHdDataType;
import gov.hhs.cdc.trustedintermediary.external.reportstream.ReportStreamEndpointClientException;
import gov.hhs.cdc.trustedintermediary.wrappers.Logger;
import gov.hhs.cdc.trustedintermediary.wrappers.formatter.Formatter;
Expand Down Expand Up @@ -36,7 +37,14 @@ public static PartnerMetadataOrchestrator getInstance() {
private PartnerMetadataOrchestrator() {}

public void updateMetadataForReceivedMessage(
String receivedSubmissionId, String messageHash, PartnerMetadataMessageType messageType)
String receivedSubmissionId,
String messageHash,
PartnerMetadataMessageType messageType,
MessageHdDataType sendingApplicationDetails,
MessageHdDataType sendingFacilityDetails,
MessageHdDataType receivingApplicationDetails,
MessageHdDataType receivingFacilityDetails,
String placerOrderNumber)
throws PartnerMetadataException {

logger.logInfo(
Expand Down Expand Up @@ -72,7 +80,15 @@ public void updateMetadataForReceivedMessage(
"Unable to retrieve metadata from RS delivery API, but writing basic metadata entry anyway for received submission ID {}",
receivedSubmissionId);
PartnerMetadata partnerMetadata =
new PartnerMetadata(receivedSubmissionId, messageHash, messageType);
new PartnerMetadata(
receivedSubmissionId,
messageHash,
messageType,
sendingApplicationDetails,
sendingFacilityDetails,
receivingApplicationDetails,
receivingFacilityDetails,
placerOrderNumber);
partnerMetadataStorage.saveMetadata(partnerMetadata);

throw new PartnerMetadataException(
Expand All @@ -92,7 +108,12 @@ public void updateMetadataForReceivedMessage(
null,
messageHash,
PartnerMetadataStatus.PENDING,
messageType);
messageType,
sendingApplicationDetails,
sendingFacilityDetails,
receivingApplicationDetails,
receivingFacilityDetails,
placerOrderNumber);
partnerMetadataStorage.saveMetadata(partnerMetadata);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,14 @@ public void convertAndSend(final Order<?> order, String receivedSubmissionId)
throws UnableToSendMessageException {

sendMessageHelper.savePartnerMetadataForReceivedMessage(
receivedSubmissionId, order.hashCode(), PartnerMetadataMessageType.ORDER);
receivedSubmissionId,
order.hashCode(),
PartnerMetadataMessageType.ORDER,
order.getSendingApplicationDetails(),
order.getSendingFacilityDetails(),
order.getReceivingApplicationDetails(),
order.getReceivingFacilityDetails(),
order.getPlacerOrderNumber());

var omlOrder = converter.convertToOmlOrder(order);
metadata.put(order.getFhirResourceId(), EtorMetadataStep.ORDER_CONVERTED_TO_OML);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,14 @@ public static SendResultUseCase getInstance() {
public void convertAndSend(Result<?> result, String receivedSubmissionId)
throws UnableToSendMessageException {
sendMessageHelper.savePartnerMetadataForReceivedMessage(
receivedSubmissionId, result.hashCode(), PartnerMetadataMessageType.RESULT);
receivedSubmissionId,
result.hashCode(),
PartnerMetadataMessageType.RESULT,
result.getSendingApplicationDetails(),
result.getSendingFacilityDetails(),
result.getReceivingApplicationDetails(),
result.getReceivingFacilityDetails(),
result.getPlacerOrderNumber());

var convertedResult = converter.addEtorProcessingTag(result);
metadata.put(
Expand Down
Loading

0 comments on commit 5e8be70

Please sign in to comment.