Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MOSIP-34112 code changes #1895

Merged
merged 3 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -5,6 +5,7 @@
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 +133,9 @@ public class BioDedupeProcessor {
@Value("${registration.processor.missing.biometric.verification.enabled:true}")
private boolean missingBiometricVerificationEnabled;

@Value("${registration.processor.biometric.autoreject.enabled:false}")
private boolean biometricAutorejectEnable;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think auto reject is two words and camel case to be corrected.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lets rename as below.
registration.processor.biometrics-update.single-match.auto-reject.enabled
biometricsUpdateSingleMatchAutoReject

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved


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

Expand Down Expand Up @@ -435,6 +439,36 @@ private void postAbisIdentification(InternalRegistrationStatusDto registrationSt
registrationStatusDto.getRegistrationId(), BioDedupeConstants.ABIS_RESPONSE_NULL);

} else {
if (registrationType.equalsIgnoreCase(RegistrationType.UPDATE.name()) && matchedRegIds.size() == 1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what if the matchedRegIds size is 4 and all belongs to the same UIN ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved

&& biometricAutorejectEnable) {
Optional<String> optionalMatchedRegId = matchedRegIds.stream().findFirst();
String matchedRegId = optionalMatchedRegId.get();
String uin = idRepoService.getUinByRid(matchedRegId, utilities.getGetRegProcessorDemographicIdentity());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the RID is not latest (lets assume last RID for that user was demographic update), will idrepo still give the correct UIN ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On this line one more question, what if this RID was partially processed and UIN is not yet associated. In that case. what will the method return ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved

String updateUin = utilities.getUIn(registrationStatusDto.getRegistrationId(), registrationType,
ProviderStageName.BIO_AUTH);
if (StringUtils.equals(uin, 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 {
registrationStatusDto
.setLatestTransactionStatusCode(RegistrationTransactionStatusCode.FAILED.toString());
object.setIsValid(Boolean.FALSE);
registrationStatusDto.setStatusCode(RegistrationStatusCode.REJECTED.name());
registrationStatusDto.setStatusComment(StatusUtil.UPDATE_PACKET_BIOMETRICS_NOT_FOUND.getMessage());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This case is not about matching with someone else biometrics ? But message says biometrics not found ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved

registrationStatusDto.setSubStatusCode(StatusUtil.UPDATE_PACKET_BIOMETRICS_NOT_FOUND.getCode());
regProcLogger.info(LoggerFileConstant.SESSIONID.toString(),
LoggerFileConstant.REGISTRATIONID.toString(), registrationStatusDto.getRegistrationId(),
BioDedupeConstants.NO_MATCH_FOUND_FOR_UPDATE + registrationStatusDto.getRegistrationId());
}

}else {
registrationStatusDto.setStatusCode(RegistrationStatusCode.FAILED.name());
registrationStatusDto.setStatusComment(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getMessage());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How are we planning to handle this case, where there is more than one match and the country does not have a manual adjudication system ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved

registrationStatusDto.setSubStatusCode(StatusUtil.BIO_DEDUPE_POTENTIAL_MATCH.getCode());
Expand All @@ -451,7 +485,7 @@ private void postAbisIdentification(InternalRegistrationStatusDto registrationSt

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

}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,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, "biometricAutorejectEnable", false);
MessageDTO messageDto = bioDedupeProcessor.process(dto, stageName);
assertTrue(messageDto.getIsValid());
assertFalse(messageDto.getInternalError());
Expand Down Expand Up @@ -685,4 +685,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, "biometricAutorejectEnable", 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, "biometricAutorejectEnable", 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_NOT_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
Loading