Credit Card Dispute Resolution (Adaptive Case Management)

This repository contains a Bonita project that leverage Adaptive Case Management with Bonita. It is an example application of a credit card dispute resolution application.

Bonita compatibility

1.x versions are compatible with Bonita 7.9.0 and above (Enterprise editions only).

Enable ACM event handler

In 7.9.x:
Go in the preference of your Studio, in the Server settings category, in Tomcat JVM arguments, set the com.bonitasoft.engine.plugin.acm.REGISTER_ACM_HANDLER property to true (false by default)
In 7.10+:
Go in the preference of your Studio, in the Server settings category, check Enable ACM event handler

Deploy the application

In 7.10+ just use the Deploy... action to deploy the project.

In 7.9.x:
1. Deploy the Rest API extension
2. Deploy all the processes
3. Open the credit-card-dispute-resolution.xml application descriptors and click on the overview URL
4. Follow the instructions of the tutorial

Project content


Reuse the default ACME organization.

Business Data Model

  • Dispute : A simple representation of a dispute. A dispute instance is always bound to a Credit Card Dispute case. An instance can be updated using the Update Dispute discretionary task.
  • Account: The account of the customer claiming a dispute.
    • AccountTx: Represents a transaction on an Account.
  • Customer: Customer informations


Reuse the default profiles

Application descriptors

  • credit-card-dispute-resolution.xml : The application descriptor for the application. The default Bonita layout is used for this app. A Tutorial page is used as landing page to present the application example.


  • Credit Card Dispute: The main process for this example.
  • Data Initialization: A helper process used for demonstration and testing purposes. It is a fully automated process that can be start from the Tutorial page instantiating fake Customers, their Accounts and some running cases.

Groovy scripts

  • ACMStates.groovy: Utility class with the ACM states constants
  • DisputeStates.groovy: Utility class with the Dispute states constants
  • DataUpdateRecorder.groovy: Utility class used when updating Dispute data or Parameters to track the values changes.
  • ScenarioExecutor.groovy: Contains the logic to execute scenario
  • CreditCardDisputeProcess.groovy: Contains the logic to execute Credit Card Dispute process scenario

Forms and Pages


  • CaseList : List active and archived dispute cases. Process initiator actor (Customer Service) can start a new Dispute from this page.
  • Case: An overhaul case view of a Dispute case.
  • ExecuteManualTask: A generic page use to execute Manual task. Manual tasks are tasks created during the case execution.
  • Tutorial: The tutorial page presenting the application and how to use it.


  • AddCommentForm: A generic form submitting the task and attaching a comment on the case.
  • EditDispute: The form used to update the Dispute information.
  • DisputeInfo: The form used by Customer Service to create a new Dispute.
  • UpdateParameters: The form used by the Supervisor to update the parameters of the Credit Card Dispute process (currently the reviewAmountThreshold parameter).
  • ValidateDisputeForm: The form used by the Supervisor to approve or reject the dispute.

Custom widgets

  • HTMLDataTable: The default DataTable with HTML support added in cells.
  • Timeline: A timeline widget used in the Case page.
  • ButtonGroup: Create a bootstrap button group. Group buttons are defined using the buttons property.
    • JSON format of a button:

{ "label" : "MyButton", "style" : "primary", /*could be "danger","warning","default" or "info"*/ "action" : "POST", /*could be any of the standard button action "Open modal", "Close modal", "PUT", "GET", "DELETE", "Start process", "Submit task", "Add to collection", "Remove from collection"*/ "url" : "../API/..", /*When action is GET,POST,PUT or DELETE*/ "dataToSend" : {}, "modalId" : "anModalId", /*When action is Open modal*/ "closeOnSuccess" : true, "targetUrlOnSuccess" : "../home", "collectionToModify" : [], /*When action is Add to collection or Remove from collection*/ "valueToAdd" : {}, "removeItem" : {}, "dataFromSuccess" : {}, /*Set if the request is successful*/ "responseStatusCode" : 200, /*Set after the request is executed*/ "dataFromError" : {} /*Set if the request is not successful*/ }

  • Panel: Create a bootstrap panel container.
  • ToggleButtons: Toggle buttons used in the CaseList page to switch between active and archived cases.


  • creditCardTheme:
    • Customize the application logo.png and favicon.ico
    • Customize the link button color
    • Add custom css rule to define a light background container style
    • Add custom css rules to constrained maximum page with in _layout.scss
    • Add custom css rules for timeline style _timeline.scss

Rest API Extensions

  • GET API/extension/case?p=<INTEGER>&c=<INTEGER>&s=<STRING>: Retrieves the list of active Dispute cases (Dispute information are aggregated to case information). s parameter is used to filter result using search indexes.
  • GET API/extension/archivedCase?p=<INTEGER>&c=<INTEGER>&s=<STRING>: Retrieves the list of archived Dispute cases (Dispute information are aggregated to case information). s parameter is used to filter result using search indexes.
  • GET API/extension/caseActivity?caseId=<LONG>: Retrieves the list of the tasks for a given case.
  • POST API/extension/caseActivity: Create a new Task in a case. Payload: { "name", "caseId"}
  • GET API/extension/caseComment: Retrieves the of comments for a given case.
  • GET API/extension/caseHistory?caseId=<LONG>: Retrieves the case history for a given case.
  • GET API/extension/caseDocument?caseId=<LONG>: Retrieves the documents for a given case.
  • DELETE API/extension/caseDocument?documentId=<LONG>: Deletes the document with the given id.
  • GET API/extension/dispute?caseId=<LONG>: Retrieves the Dispute informations for a given case.
  • GET API/extension/customerInfo?caseId=<LONG>: Retrieves the Customer informations for a given case.
  • GET API/extension/createDisputeAuthorization: Return if the logged user can start a new dispute case.
  • POST API/extension/userTask: Submit the task with taskId and add a comment to the case content is provided. Payload: { "taskId", "content" }
  • GET API/extension/handlerStatus : Return the activation state of the ACM event handler.


Total downloads: 2 252
Version BonitaBPM Version Post date Download Link to content
1.0.0 7.9.x 2019-Dec-03 Download
Release note
1.0.0 RC 7.9.x 2019-Oct-28 Download
Release note
1.0.0 Beta 7.9.x 2019-Oct-16 Download
Release note