Step 1: Create a new UIM that contains the required selection criteria.
This screen allows the audit coordinator to enter selection criteria relating to the dynamic query.
<PAGE
PAGE_ID="exampleSelectionCriteria"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file://Curam/UIMSchema.xsd"
>
<PAGE_TITLE>
<CONNECT
<SOURCE
NAME="TEXT"
PROPERTY="PageTitle.Title"
/>
</CONNECT>
</PAGE_TITLE>
<SERVER_INTERFACE
CLASS="ExampleFacade"
NAME="ACTION"
OPERATION="validateCustomCriteria"
PHASE="ACTION"
/>
<PAGE_PARAMETER NAME="auditPlanID"/>
<PAGE_PARAMETER NAME="queryID"/>
<ACTION_SET
ALIGNMENT="CENTER"
TOP="false"
>
<ACTION_CONTROL
LABEL="ActionControl.Label.Cancel"
ALIGNMENT="LEFT"/>
<ACTION_CONTROL
DEFAULT="true"
IMAGE="NextButton"
LABEL="ActionControl.Label.Next"
TYPE="SUBMIT"
>
<LINK
SAVE_LINK="false"
DISMISS_MODAL="false"
PAGE_ID="exampleSelectAmount"
>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="auditPlanID"
/>
<TARGET
NAME="PAGE"
PROPERTY="auditPlanID"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="ACTION"
PROPERTY="result$status"
/>
<TARGET
NAME="PAGE"
PROPERTY="status"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="queryID"
/>
<TARGET
NAME="PAGE"
PROPERTY="queryID"
/>
</CONNECT>
</LINK>
</ACTION_CONTROL>
</ACTION_SET>
<CLUSTER LABEL_WIDTH="30">
<FIELD
LABEL="Field.Label.Status"
USE_BLANK="true"
USE_DEFAULT="false">
<CONNECT>
<TARGET
NAME="ACTION"
PROPERTY="key$status"
/>
</CONNECT>
</FIELD>
</CLUSTER>
</PAGE>
Step 2: If required, create a screen to allow the audit coordinator enter the number of cases to audit.
<PAGE
PAGE_ID="exampleSelectAmount"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file://Curam/UIMSchema.xsd"
>
<PAGE_TITLE>
<CONNECT>
<SOURCE
NAME="TEXT"
PROPERTY="PageTitle.Title"
/>
</CONNECT>
</PAGE_TITLE>
<SERVER_INTERFACE
CLASS="ExampleFacade"
NAME="ACTION"
OPERATION="validateNumberOfCases"
PHASE="ACTION"
/>
<PAGE_PARAMETER NAME="auditPlanID"/>
<PAGE_PARAMETER NAME="status"/>
<PAGE_PARAMETER NAME="queryID"/>
<CLUSTER
DESCRIPTION="Cluster.Description.Text"
LABEL_WIDTH="30">
<FIELD LABEL="Field.Label.Number">
<CONNECT>
<TARGET
NAME="ACTION"
PROPERTY="key$numberOfCases"
/>
</CONNECT>
</FIELD>
</CLUSTER>
<ACTION_SET
TOP="false"
>
<ACTION_CONTROL
LABEL="ActionControl.Label.Cancel"
ALIGNMENT="LEFT"/>
<ACTION_CONTROL
DEFAULT="true"
IMAGE="NextButton"
LABEL="ActionControl.Label.Next"
TYPE="SUBMIT"
>
<LINK
SAVE_LINK="false"
DISMISS_MODAL="false"
PAGE_ID="exampleConfigureAlgorithm"
>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="auditPlanID"
/>
<TARGET
NAME="PAGE"
PROPERTY="auditPlanID"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="status"
/>
<TARGET
NAME="PAGE"
PROPERTY="status"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="ACTION"
PROPERTY="result$numberOfCases"
/>
<TARGET
NAME="PAGE"
PROPERTY="numberOfCases"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="queryID"
/>
<TARGET
NAME="PAGE"
PROPERTY="queryID"
/>
</CONNECT>
</LINK>
</ACTION_CONTROL>
</ACTION_SET>
</PAGE>
If required, create a screen to allow the audit coordinator enter algorithm parameters.
<PAGE
PAGE_ID="exampleConfigureAlgorithm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file://Curam/UIMSchema.xsd"
>
<PAGE_TITLE>
<CONNECT>
<SOURCE
NAME="TEXT"
PROPERTY="PageTitle.Title"
/>
</CONNECT>
</PAGE_TITLE>
<SERVER_INTERFACE
CLASS="ExampleFacade"
NAME="ACTION"
OPERATION="generateExampleCaseList"
PHASE="ACTION"
/>
<PAGE_PARAMETER NAME="auditPlanID"/>
<PAGE_PARAMETER NAME="status"/>
<PAGE_PARAMETER NAME="numberOfCases"/>
<PAGE_PARAMETER NAME="queryID"/>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="auditPlanID"
/>
<TARGET
NAME="ACTION"
PROPERTY="key$auditPlanID"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="status"
/>
<TARGET
NAME="ACTION"
PROPERTY="key$status"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="numberOfCases"
/>
<TARGET
NAME="ACTION"
PROPERTY="key$numberOfCases"
/>
</CONNECT>
<CONNECT>
<SOURCE
NAME="PAGE"
PROPERTY="queryID"
/>
<TARGET
NAME="ACTION"
PROPERTY="key$selectionQueryID"
/>
</CONNECT>
<CLUSTER LABEL_WIDTH="30">
<FIELD LABEL="Field.Label.Interval">
<CONNECT>
<TARGET
NAME="ACTION"
PROPERTY="key$interval"
/>
</CONNECT>
</FIELD>
</CLUSTER>
<ACTION_SET
TOP="false"
>
<ACTION_CONTROL
LABEL="ActionControl.Label.Cancel"
ALIGNMENT="LEFT"/>
<ACTION_CONTROL
IMAGE="FinishButton"
LABEL="ActionControl.Label.Finish"
TYPE="SUBMIT"
/>
</ACTION_SET>
</PAGE>
Step 3: Create the necessary struct to cater for the selection criteria.
This struct contains all selection criteria available for the selection query along with any other required parameters.
ExampleSelectionCriteria
Step 4: Create and implement a new façade method that is responsible for generating the list of cases for audit.
This method uses the Case Audit Query Management API to execute the dynamic query, using the supplied selection criteria. This returns the list of cases matching the selection criteria. The relevant algorithm is then invoked to filter the case list. Finally, case audit records are created for each case in the remaining list.
// Inject the map
@Inject
private Map<SAMPLINGSTRATEGYEntry, SamplingStrategy>
samplingStrategies;
/**
* Generates the sample list of cases for audit based on the
* supplied selection criteria. This method filters the list
* using the algorithm associated with the case type for this
* audit plan. The number of cases returned in the list is also
* restricted by the number of cases specified by the user.
*
* @param key The selection criteria, selection query
* identifier, the audit plan identifier,
* the number of cases to generate and any
* algorithm parameters.
*
* @throws AppException
* @throws InformationalException
*/
public void generateExampleCaseList(
ExampleSelectionCriteria key)
throws AppException, InformationalException {
AuditPlan auditPlan = auditPlanDAO.get(key.auditPlanID);
CaseAuditQueryManagement caseAuditQueryManagement =
new CaseAuditQueryManagement();
// Add all selection criteria to the map
HashMap<String, String> parameterMap =
new HashMap<String, String>();
parameterMap.put(":statusCode", key.status);
// Call the Case Audit Query Management API
// to run the selection query
List<curam.piwrapper.caseheader.impl.CaseHeader> caseList =
caseAuditQueryManagement.runDynamicQueryCaseSearch(
key.selectionQueryID, parameterMap);
// Get the algorithm/sampling strategy configured
// for this case type
final SamplingStrategy samplingStrategy =
samplingStrategies.get(
auditPlan.getAuditCaseConfig().getAuditAlgorithm());
List<Long> caseIDList = new ArrayList<Long>();
for (CaseHeader caseHeader : caseList) {
caseIDList.add(caseHeader.getID());
}
// Set up the algorithm parameters
Map<String, Object> params = new TreeMap<String, Object>();
params.put("n", new Integer(key.interval));
// Invoke algorithm to generate case sample,
// passing in the list of cases,
// the number of cases to return and the algorithm parameters
List<Long> caseIDs = samplingStrategy.getRandomSample(
caseIDList, key.numberOfCases, params);
curam.core.facade.intf.CaseAudit caseAuditObj =
curam.core.facade.fact.CaseAuditFactory.newInstance();
// for each case, create a case audit
for (int i = 0; i < caseIDs.size(); i++) {
CaseAuditDetails caseAuditDetails = new CaseAuditDetails();
caseAuditDetails.dtls.auditPlanID = key.auditPlanID;
caseAuditDetails.dtls.caseID = caseIDs.get(i);
caseAuditObj.createCaseAudit(caseAuditDetails);
}
}
Step 5: The systems administrator must create, validate and publish a new Selection Query with the SQL required to retrieve the relevant data and the selection criteria associated with it.