@AccessLevel(value=EXTERNAL)
public interface PDCEvidence
This interface defines the contract that must be fulfilled for evidence that is configured on the Person Case (a.k.a Person Data Case or PDC) to be successfully shared to and from the Person Case.
In order to ensure evidence can be shared to a Person case the evidence must support automated processing. That is, the evidence must either get to an active state on the Person case or be ignored without manual intervention. Unlike Integrated Cases the evidence on a Person Case can not be held in an incoming or in-edit state awaiting manual processing.
The automated processing is achieved by implementing the methods of this interface to return the information the infrastructure needs to handle the evidence. Each evidence type will have its own specific implementation that encodes the business logic that should be applied to the sharing process.
In brief the processing will either
Note: When this process is invoked, the validations that are normally run on the activation of evidence on a case are suppressed. The expectation is that the implementation provided by this class will supplant the normal validations.
Configuring a PDCEvidence implementation.A PDCEvidence implementation can be bound to its evidence type using Guice bindings.
E.g.
|
The evidence type definition identifier, "DET00001234" in the example above,
can be retrieved from the EvidenceTypeDef table.
To override an existing implementation you can bind the new implementation to the existing.
|
Modifier and Type | Method and Description |
---|---|
void |
assignEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails,
curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails)
Update the fields of the evidence on the target case that are affected by
sharing.
|
curam.core.sl.infrastructure.impl.EIEvidenceReadDtls |
getNonIdenticalEvidenceModifyDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails shareEvidenceDetails,
java.util.Set<curam.core.sl.infrastructure.impl.EIEvidenceReadDtls> evidenceDetailsList)
Resolve which evidence on the target case will be updated
on sharing.
|
boolean |
isMultipleTimeLinePerType(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails)
Identifies if an evidence record is a 'multiple timeline per sub type'
evidence type.
|
boolean |
matchAllEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails,
curam.util.type.Date sharedEffectiveDate,
curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails,
curam.util.type.Date originalEffectiveDate)
Determine if sharing should be attempted.
|
boolean |
matchEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails,
curam.util.type.Date sharedEffectiveDate,
curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails,
curam.util.type.Date originalEffectiveDate)
Find evidence on the target case to update.
|
@AccessLevel(value=EXTERNAL) boolean isMultipleTimeLinePerType(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails) throws curam.util.exception.AppException, curam.util.exception.InformationalException
An evidence type that is multi-timeline per sub type will allow more than one record to be created as long as it is not the same sub type as an existing record. Typically the sub type is defined by a single attribute which is a codetable value, but it could be based on any number of attributes of the evidence type and the attributes could be of any type.
E.g. An AlternateID evidence has a 'sub type' attribute which indicates the type of ID that is being record for the client. Only 1 record can be recorded for a Social Security Number because a person can only have 1 Social Security Number. Therefore an AlternateID record with a type of Social Security Number is not multiple time line per type and should return false.
sharedEvidenceDetails
- Details of the evidence being shared.curam.util.exception.InformationalException
curam.util.exception.AppException
@AccessLevel(value=EXTERNAL) boolean matchEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails, curam.util.type.Date sharedEffectiveDate, curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails, curam.util.type.Date originalEffectiveDate) throws curam.util.exception.AppException, curam.util.exception.InformationalException
This function is used to find evidence on the target case that is a match for the shared evidence. If true is returned, i.e. a match is found, the infrastructure will try to share to the matched evidence by checking ...
getNonIdenticalEvidenceModifyDetails(DynamicEvidenceDataDetails, Set)
)
assignEvidenceDetails(DynamicEvidenceDataDetails, DynamicEvidenceDataDetails)
.
sharedEvidenceDetails
- Shared PDC evidence detailssharedEffectiveDate
- Effective date of shared PDC evidenceoriginalEvidenceDetails
- Existing PDC evidence detailsoriginalEffectiveDate
- Effective date of existing PDC evidencecuram.util.exception.InformationalException
curam.util.exception.AppException
@AccessLevel(value=EXTERNAL) boolean matchAllEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails, curam.util.type.Date sharedEffectiveDate, curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails, curam.util.type.Date originalEffectiveDate) throws curam.util.exception.AppException, curam.util.exception.InformationalException
This method will be called to compare the shared evidence to all existing evidence of the same type on the target case. If this method returns true for any target evidence, then the sharing is terminated because it is deemed unnecessary.
For example, if the shared evidence is an exact match to an existing target evidence after comparing all fields, then the sharing is unnecessary as the information is already recorded and sharing can terminate at this point.
sharedEvidenceDetails
- Shared evidence detailssharedEffectiveDate
- Effective date of shared evidenceoriginalEvidenceDetails
- Existing target detailsoriginalEffectiveDate
- Effective date of target evidencecuram.util.exception.InformationalException
curam.util.exception.AppException
@AccessLevel(value=EXTERNAL) void assignEvidenceDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails sharedEvidenceDetails, curam.dynamicevidence.impl.DynamicEvidenceDataDetails originalEvidenceDetails) throws curam.util.exception.AppException, curam.util.exception.InformationalException
When sharing results in an existing record on the target case being updated, this method will be invoked to copy the details from the shared evidence to the target evidence. Implementing this method gives control over what information is shared. For example, you may want to retain field values on the target evidence when the shared evidence has no value for the same field.
sharedEvidenceDetails
- Shared evidence detailsoriginalEvidenceDetails
- Target evidence detailscuram.util.exception.InformationalException
curam.util.exception.AppException
@AccessLevel(value=EXTERNAL) curam.core.sl.infrastructure.impl.EIEvidenceReadDtls getNonIdenticalEvidenceModifyDetails(curam.dynamicevidence.impl.DynamicEvidenceDataDetails shareEvidenceDetails, java.util.Set<curam.core.sl.infrastructure.impl.EIEvidenceReadDtls> evidenceDetailsList) throws curam.util.exception.AppException, curam.util.exception.InformationalException
Given a list of evidence records that are a potential candidate for update,
select only one record to be updated. This method is only invoked for
evidence that is not multi-timeline per sub type (See
isMultipleTimeLinePerType(DynamicEvidenceDataDetails)
). If invoked
it will only result in an update if the shared evidence is considered to be
an update. An update is decided by comparing the received dates. If the
shared evidence has a later received date, the shared evidence is accepted.
If the shared evidence has an earlier received date it is ignored. If the
shared evidence has the same received date, the creation dates will be
compared and if the shared evidence was created later it will be accepted.
Note: Validations are disabled during this process, and returning null will result in the shared evidence being created as a new record, so returning null can result in duplicate records being created by bypassing validations if the implementation allows this.
shareEvidenceDetails
- Shared evidence detailsevidenceDetailsList
- Target evidence details listcuram.util.exception.InformationalException
curam.util.exception.AppException