Human Task Manager
The HTM module is a proxy to the HTM AOM from IPF. It uses the connectors provided by HTM and simple spring controllers to proxy the calls from the UI. No data formatting or processing is done beyond permissions and auditing validations.
Configuration
Config
This config is used for the search screen.
htm-bulk-page-results = 1000
htm-page-results = 10
htm-task-types = ["ENFORCE_EXECUTION"]
htm-bulk-task-types = [
{
id: "task1",
translationKey: "task1",
outcomes: [
{
id: "YES",
translationKey: "outcomeYes"
},
{
id: "NO",
translationKey: "outcomeNo"
}
],
executionResultData: {
id: "name_for_object",
fields: [
{
id: "pegaId",
translationKey: "supportingFieldPegaId",
type: "string"
}
]
}
},
]
The configurable values are as follows:
| Property | Description |
|---|---|
htm-page-results |
Maximum number of HTM tasks to be displayed per page for search results (is set by default to 10) |
htm-bulk-page-results |
Maximum number of tasks to be bulk executed by HTM (is set by default to 1000). |
htm-task-types |
The dropdown list of types available in this implementation of HTM |
htm-bulk-task-types |
The configuration for bulk execute types. It’s an array of BulkTaskTypes |
Bulk Task Type
In order to configure the task types used for bulk execution you must provide the relevant details. Looking at the example config, the properties are defined as follows:
| Property | Description |
|---|---|
id |
The unique id for the object |
translationKey |
The key that is to be used to determine what translation will be used for that specific field |
outcomes |
An object with key and translationKey properties that will display a radio button for each of the items |
field |
An object with key, translationKey and type properties (currently only strings but to be updated) |
executionResultsData |
An object with id and fields array properties used to provide client specific data for that task type |
Date Formats
Date Formats from common config can be overwritten for this module by supplying your own htm-date-formats.conf. If you don’t provide any values, the dates will be the UK standard
How to create your own HTM Task Execution Screen
Custom task execution screens can be configured by providing a HOCON file. The pages are built with the following components:
| Component | Properties |
|---|---|
Page |
|
Panel |
|
Card |
|
Content |
|
The properties of the elements depend on the type of content:
| Content Type | Element Properties |
|---|---|
|
|
|
|
The paths provided for optionsPath and valuePath should point to fields in the taskDetails response:
{
"taskDetails": {
"taskId": "1d01a5d0-4fa6-4ddd-9c65-b6563c0d3370",
"processingContext": {
"processingEntity": "BANK_ENTITY_1",
"associationId": "e0f89f7d-ed66-4df4-ad52-ef3b21d67ccd",
"unitOfWorkId": "17ade666-117d-40a3-ab85-a63250e5f26a",
"clientRequestId": "9a589945-4029-4cc2-ac02-79d27c9a042d"
},
"createdAt": "2025-07-02T15:45:48.991Z",
"status": "Complete",
"priority": 1,
"requiredApprovals": 0,
"dueDateTime": "2025-10-02T15:45:48.949Z",
"type": "FORCE_EXECUTION",
"claimedBy": "htm_payment_executions",
"metaDataTags": [
{
"category": "EXECUTION",
"value": "DBTTRANSFER"
}
],
"supportingData": {
"type": "IPFPaymentPDS",
"value": "{\"splmtryDatas\":{\"splmtryData\":[{\"envlp\":{\"any\":{\"@class\":\"ipf.iso.std.iso._20022.tech.xsd.supl_001_001_01.Document\",\"ids\":{\"creditId\":\"EJGKVXAYWZYTZIRH\",\"sessionId\":\"ZPEXMBJYXKTLZHNACHQK\"},\"usrs\":{\"cntrctAppvr\":\"CYCAFGYGXFTCJUFT\",\"cntrctCreatr\":\"HTKZISHKOKUFHAQT\"}}},\"splmtryDataNm\":\"supl1\"}]}}"
},
"receivedApprovals": 0,
"possibleOutcomes": [
"Execute",
"Cancel"
],
"executionOutcome": "Execute",
"executionNote": "Bulk Executing",
"_links": {
"self": {
"href": "http://human-task-manager-app:8080/tasks/1d01a5d0-4fa6-4ddd-9c65-b6563c0d3370"
}
}
},
"permissions": [
"EXECUTE",
"REJECT",
"ASSIGN",
"VIEW",
"APPROVE"
]
}
The taskDetails prefix is not required in the paths. Use processingContext.processingEntity, not taskDetails.processingContext.processingEntity.Data from supportingData.value can be displayed by providing paths to the keys of the stringified object in the typical way.
|
Predefined Forms
There is one predefined execution form group. This provides a SELECT form field to choose the outcome of a task, eg. 'Execute', and a TEXT_INPUT to enter execution notes. This can be configured by adding a card with predefined = "EXECUTION_FORM" to any panel like so:
panels = [
{
cards = [
{
predefined = "EXECUTION_FORM"
}
]
}
]
All other configured forms collect input which is added to executionResultData.value of the execution request as a stringified object.
The card id and formControlName serve as keys.
{
"executeTaskRequest": {
"operatorId": "123",
"outcome": "Execute",
"note": "Execution Note",
"executionResultData": {
"type": "executionResultData",
"value": "{\"cardId-1\":{\"formControlName-1\":\"form input\"},\"cardId-2\":{\"formControlName-2\":\"form input\",\"formControlName-3\":\"form input\"}}"
}
}
}
To configure the pages, provide an ipf.custom-page.conf file like so:
ipf.custom-page {
htm {
pages = {
"TASK_TYPE" = {
id = "TASK_TYPE",
panels = [
{
cards = [
{
id = "ids-list",
titlePath = "heading.processingIds",
content = {
elements = [
{
id = "client-request-id",
description = "rowHeader.clientRequestId",
type = "STRING",
valuePath = "processingContext.clientRequestId"
},
{
id = "unit-of-work-id",
description = "rowHeader.unitOfWorkId",
type = "STRING",
valuePath = "processingContext.unitOfWorkId"
},
{
id = "association-id",
description = "rowHeader.associationId",
type = "STRING",
valuePath = "processingContext.associationId"
}
],
type = "LIST"
}
},
{
id = "task-status",
titlePath = "heading.status",
content = {
elements = [
{
id = "task-status",
description = null,
type = "STRING",
valuePath = "status"
},
],
type = "SIMPLE"
}
},
]
},
{
cards = [
{
predefined = "EXECUTION_FORM"
}
]
},
{
cards = [
{
id = "supplementaryData",
titlePath = "heading.supplementaryData",
content = {
elements = [
{
id = "splmtryData-1",
type = "TEXT_INPUT",
formControlName = "splmtryDataNm",
label = "formField.splmtryDataNm",
validators = null,
optionsPath = null,
valuePath = "splmtryDataNm"
},
{
id = "splmtryData-2",
type = "TEXT_INPUT",
formControlName = "sessionId",
label = "formField.sessionId",
validators = null,
optionsPath = null,
valuePath = "sessionId"
},
{
id = "splmtryData-3",
type = "TEXT_INPUT",
formControlName = "creditId",
label = "formField.creditId",
validators = null,
optionsPath = null,
valuePath = "creditId"
}
],
type = "FORM_GROUP"
}
}
]
}
]
}
}
}
}