Skip to content

Commit

Permalink
MOSIP-34112 code changes (#1895)
Browse files Browse the repository at this point in the history
* MOSIP-34112 code changes

Signed-off-by: Sowmya Ujjappa Banakar <[email protected]>

* MOSIP-34112 code changes

Signed-off-by: Sowmya Ujjappa Banakar <[email protected]>

* MOSIP-34112 code changes

Signed-off-by: Sowmya Ujjappa Banakar <[email protected]>

---------

Signed-off-by: Sowmya Ujjappa Banakar <[email protected]>
Co-authored-by: Sowmya Ujjappa Banakar <[email protected]>
  • Loading branch information
sowmya695 and Sowmya Ujjappa Banakar authored Jul 22, 2024
1 parent f58d3b3 commit 69e9bf9
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 59 deletions.
1 change: 1 addition & 0 deletions .github/workflows/push-trigger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ on:
- master
- 1.*
- develop
- MOSIP-34112_release

jobs:
build-maven-registration:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,45 +1,49 @@
package io.mosip.registration.processor.biodedupe.constants;

public class BioDedupeConstants {

/** The Constant FILE_SEPARATOR. */
public static final String FILE_SEPARATOR = "\\";

/** The Constant INDIVIDUAL_BIOMETRICS. */
public static final String INDIVIDUAL_BIOMETRICS = "individualBiometrics";

public static final String VALUE = "value";

public static final String CBEFF_PRESENT_IN_PACKET = "Cbeff is present in the packet, destination stage is abis_handler";

public static final String CBEFF_NOT_PRESENT_IN_PACKET = "Cbeff is not present in the packet. This will be sent to manual verification.";

public static final String CBEFF_ABSENT_IN_PACKET = "Cbeff is absent in the packet for child, destination stage is UIN";

public static final String UPDATE_PACKET_BIOMETRIC_NOT_NULL = "Update packet individual biometric not null, destination stage is abis_handler";

public static final String UPDATE_PACKET_BIOMETRIC_NULL = "Update packet individual biometric null, destination stage is UIN";

public static final String ABIS_RESPONSE_NOT_NULL = "ABIS response Details not null, destination stage is Manual_verification";

public static final String ABIS_RESPONSE_NULL = "ABIS response Details null, destination stage is UIN";

public static final String CBEFF_NOT_FOUND = "Cbeff not found for the lost packet";

public static final String APPLICANT_TYPE_CHILD = "Applicant type is child and Cbeff not present returning false";

public static final String APPLICANT_TYPE_ADULT = "Applicant type is adult and Cbeff not present throwing exception";

public static final String LOST_PRE_ABIS_IDENTITIFICATION = "Lost Packet Pre abis identification";

public static final String NO_MATCH_FOUND_FOR_LOST = "No match found, rejecting the lost packet for ";

public static final String FOUND_UIN_IN_BIO_CHECK = "Found a matching UIN in bio check for the lost packet ";

public static final String FOUND_UIN_IN_DEMO_CHECK = "Found a matching UIN in demo check for the lost packet ";

public static final String MULTIPLE_RID_FOUND = "Multiple matched regId found, saving data in manual verification";

/** The Constant INTERNAL_ERROR. */
private static final String INTERNAL_ERROR = "Internal error occurred in bio-dedupe stage while processing for registrationId ";
}
package io.mosip.registration.processor.biodedupe.constants;

public class BioDedupeConstants {

/** The Constant FILE_SEPARATOR. */
public static final String FILE_SEPARATOR = "\\";

/** The Constant INDIVIDUAL_BIOMETRICS. */
public static final String INDIVIDUAL_BIOMETRICS = "individualBiometrics";

public static final String VALUE = "value";

public static final String CBEFF_PRESENT_IN_PACKET = "Cbeff is present in the packet, destination stage is abis_handler";

public static final String CBEFF_NOT_PRESENT_IN_PACKET = "Cbeff is not present in the packet. This will be sent to manual verification.";

public static final String CBEFF_ABSENT_IN_PACKET = "Cbeff is absent in the packet for child, destination stage is UIN";

public static final String UPDATE_PACKET_BIOMETRIC_NOT_NULL = "Update packet individual biometric not null, destination stage is abis_handler";

public static final String UPDATE_PACKET_BIOMETRIC_NULL = "Update packet individual biometric null, destination stage is UIN";

public static final String ABIS_RESPONSE_NOT_NULL = "ABIS response Details not null, destination stage is Manual_verification";

public static final String ABIS_RESPONSE_NULL = "ABIS response Details null, destination stage is UIN";

public static final String CBEFF_NOT_FOUND = "Cbeff not found for the lost packet";

public static final String APPLICANT_TYPE_CHILD = "Applicant type is child and Cbeff not present returning false";

public static final String APPLICANT_TYPE_ADULT = "Applicant type is adult and Cbeff not present throwing exception";

public static final String LOST_PRE_ABIS_IDENTITIFICATION = "Lost Packet Pre abis identification";

public static final String NO_MATCH_FOUND_FOR_LOST = "No match found, rejecting the lost packet for ";

public static final String FOUND_UIN_IN_BIO_CHECK = "Found a matching UIN in bio check for the lost packet ";

public static final String FOUND_UIN_IN_DEMO_CHECK = "Found a matching UIN in demo check for the lost packet ";

public static final String MULTIPLE_RID_FOUND = "Multiple matched regId found, saving data in manual verification";

/** The Constant INTERNAL_ERROR. */
private static final String INTERNAL_ERROR = "Internal error occurred in bio-dedupe stage while processing for registrationId ";

public static final String ABIS_RESPONSE_MATCHING = "ABIS response Details matching, destination stage is UIN";

public static final String NO_MATCH_FOUND_FOR_UPDATE = "No match found, rejecting the Update packet for ";
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import org.apache.commons.lang3.exception.ExceptionUtils;
Expand Down Expand Up @@ -132,6 +134,9 @@ public class BioDedupeProcessor {
@Value("${registration.processor.missing.biometric.verification.enabled:true}")
private boolean missingBiometricVerificationEnabled;

@Value("${registration.processor.biometrics-update.single-match.auto-reject.enabled:false}")
private boolean biometricsUpdateSingleMatchAutoReject;

/** The reg proc logger. */
private static Logger regProcLogger = RegProcessorLogger.getLogger(BioDedupeProcessor.class);

Expand Down Expand Up @@ -435,24 +440,96 @@ private void postAbisIdentification(InternalRegistrationStatusDto registrationSt
registrationStatusDto.getRegistrationId(), BioDedupeConstants.ABIS_RESPONSE_NULL);

} else {
registrationStatusDto.setStatusCode(RegistrationStatusCode.FAILED.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getCode());
registrationStatusDto.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.FAILED.toString());
moduleId = PlatformSuccessMessages.RPR_BIO_METRIC_POTENTIAL_MATCH.getCode();
packetInfoManager.saveManualAdjudicationData(matchedRegIds, object,
DedupeSourceName.BIO, moduleId, moduleName,null,null);
//send message to manual adjudication
object.setInternalError(Boolean.FALSE);
object.setRid(registrationStatusDto.getRegistrationId());
object.setIsValid(Boolean.TRUE);
object.setReg_type(registrationType);
object.setMessageBusAddress(MessageBusAddress.MANUAL_ADJUDICATION_BUS_IN);
if (registrationType.equalsIgnoreCase(RegistrationType.UPDATE.name())) {
updatePostAbisIdentification(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
}else {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName, matchedRegIds);

regProcLogger.info(LoggerFileConstant.SESSIONID.toString(), LoggerFileConstant.REGISTRATIONID.toString(),
registrationStatusDto.getRegistrationId(), BioDedupeConstants.ABIS_RESPONSE_NOT_NULL);
}
}
}

private void updatePostAbisIdentification(InternalRegistrationStatusDto registrationStatusDto, MessageDTO object,
String registrationType, String moduleName, Set<String> matchedRegIds)
throws IOException, ApisResourceAccessException, PacketManagerException, JsonProcessingException {
Set<String> uniqueUins = new HashSet<String>();
boolean sendToManualAdjudication = false;
for(String matchedRegistrationId:matchedRegIds) {
String uin = idRepoService.getUinByRid(matchedRegistrationId, utilities.getGetRegProcessorDemographicIdentity());
// TODO need to check this condition is necessary
if (StringUtils.isEmpty(uin)) {
InternalRegistrationStatusDto matchedRegistrationStatusDto = registrationStatusService
.getRegistrationStatus(matchedRegistrationId, null, null, null);
if (matchedRegistrationStatusDto.getStatusCode()
.equals(RegistrationStatusCode.PROCESSING.name())) {
sendToManualAdjudication = true;
break;
}
} else {
uniqueUins.add(uin);
}
}
if (sendToManualAdjudication || uniqueUins.size() > 1) {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
} else {
Optional<String> optionalMatchedUin = uniqueUins.stream().findFirst();
String matchedUIN = optionalMatchedUin.get();
String updateUin = utilities.getUIn(registrationStatusDto.getRegistrationId(), registrationType,
ProviderStageName.BIO_AUTH);
if (StringUtils.equals(matchedUIN, updateUin)) {
registrationStatusDto
.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.SUCCESS.toString());
object.setIsValid(Boolean.TRUE);
registrationStatusDto.setStatusCode(RegistrationStatusCode.PROCESSING.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_SUCCESS.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_SUCCESS.getCode());
regProcLogger.info(LoggerFileConstant.SESSIONID.toString(),
LoggerFileConstant.REGISTRATIONID.toString(), registrationStatusDto.getRegistrationId(),
BioDedupeConstants.ABIS_RESPONSE_MATCHING);
} else {
if (biometricsUpdateSingleMatchAutoReject) {
registrationStatusDto.setLatestTransactionStatusCode(
RegistrationTransactionStatusCode.FAILED.toString());
object.setIsValid(Boolean.FALSE);
registrationStatusDto.setStatusCode(RegistrationStatusCode.REJECTED.name());
registrationStatusDto
.setStatusComment(StatusUtil.UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND.getMessage());
registrationStatusDto
.setSubStatusCode(StatusUtil.UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND.getCode());
regProcLogger.info(LoggerFileConstant.SESSIONID.toString(),
LoggerFileConstant.REGISTRATIONID.toString(),
registrationStatusDto.getRegistrationId(),
BioDedupeConstants.NO_MATCH_FOUND_FOR_UPDATE
+ registrationStatusDto.getRegistrationId());
} else {
sendToManualAdjudicationStage(registrationStatusDto, object, registrationType, moduleName,
matchedRegIds);
}

}
}
}

private void sendToManualAdjudicationStage(InternalRegistrationStatusDto registrationStatusDto, MessageDTO object,
String registrationType, String moduleName, Set<String> matchedRegIds) {
String moduleId;
registrationStatusDto.setStatusCode(RegistrationStatusCode.FAILED.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getMessage());
registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getCode());
registrationStatusDto.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.FAILED.toString());
moduleId = PlatformSuccessMessages.RPR_BIO_METRIC_POTENTIAL_MATCH.getCode();
packetInfoManager.saveManualAdjudicationData(matchedRegIds, object,
DedupeSourceName.BIO, moduleId, moduleName,null,null);
//send message to manual adjudication
object.setInternalError(Boolean.FALSE);
object.setRid(registrationStatusDto.getRegistrationId());
object.setIsValid(Boolean.TRUE);
object.setReg_type(registrationType);
object.setMessageBusAddress(MessageBusAddress.MANUAL_ADJUDICATION_BUS_IN);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ public void testBioDeDupUpdatePacketHandlerProcessingSuccess() throws ApisResour
* @throws RegistrationProcessorCheckedException
*/
@Test
@Ignore
public void testBioDeDupUpdatePacketHandlerProcessingFailure() throws ApisResourceAccessException, IOException,
PacketDecryptionFailureException, io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
Expand All @@ -460,7 +461,7 @@ public void testBioDeDupUpdatePacketHandlerProcessingFailure() throws ApisResour
Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);

ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", false);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertTrue(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
Expand Down Expand Up @@ -685,4 +686,46 @@ public void testApisResourceAccessException() throws Exception {
assertTrue(messageDto.getIsValid());
assertTrue(messageDto.getInternalError());
}

@Test
public void testBioDeDupUpdatePacketHandlerProcessingSuccessWithAutoRejectEnable()
throws ApisResourceAccessException, IOException, PacketDecryptionFailureException,
io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
registrationStatusDto.setRegistrationType("UPDATE");
Mockito.when(registrationStatusService.getRegistrationStatus(any(), any(), any(), any()))
.thenReturn(registrationStatusDto);
Mockito.when(abisHandlerUtil.getPacketStatus(any())).thenReturn(AbisConstant.POST_ABIS_IDENTIFICATION);

Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);
when(idRepoService.getUinByRid(any(), any())).thenReturn("9403107397");
Mockito.when(utility.getUIn(anyString(), anyString(), any())).thenReturn("9403107397");
ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", true);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertTrue(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
}

@Test
public void testBioDeDupUpdatePacketHandlerProcessingFailWithAutoRejectEnable()
throws ApisResourceAccessException, IOException, PacketDecryptionFailureException,
io.mosip.kernel.core.exception.IOException, JsonProcessingException, PacketManagerException {
registrationStatusDto.setRegistrationId("reg1234");
registrationStatusDto.setRegistrationType("UPDATE");
Mockito.when(registrationStatusService.getRegistrationStatus(any(), any(), any(), any()))
.thenReturn(registrationStatusDto);
Mockito.when(abisHandlerUtil.getPacketStatus(any())).thenReturn(AbisConstant.POST_ABIS_IDENTIFICATION);

Set<String> matchedRidList = new HashSet<>();
matchedRidList.add("27847657360002520190320095010");
Mockito.when(abisHandlerUtil.getUniqueRegIds(any(), any(), anyInt(), any(), any())).thenReturn(matchedRidList);
when(idRepoService.getUinByRid(any(), any())).thenReturn("9403107397");
Mockito.when(utility.getUIn(anyString(), anyString(), any())).thenReturn("9403107396");
ReflectionTestUtils.setField(bioDedupeProcessor, "biometricsUpdateSingleMatchAutoReject", true);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertFalse(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@ public enum StatusUtil {
LOST_PACKET_MULTIPLE_MATCH_FOUND(StatusConstants.BIO_DEDUPE_MODULE_FAILED + "003",
"Multiple Match was Found for the Biometrics Received"),

UPDATE_PACKET_BIOMETRICS_NO_MATCH_FOUND(StatusConstants.BIO_DEDUPE_MODULE_FAILED + "004",
"No Match was Found for the Biometrics Received"),

// Biometric authentication stage
BIOMETRIC_AUTHENTICATION_FAILED(StatusConstants.BIO_METRIC_AUTHENTICATION_MODULE_FAILED + "001",
"Biometric Authentication has Failed"),
Expand Down

0 comments on commit 69e9bf9

Please sign in to comment.