Backend Deployment Guide
The guide describes how to retrieve zipped Docker containers. It also contains a sample docker-compose.yml that illustrates how to deploy the containers.
Retrieve Docker Images from ECR
Log in to an EC2 instance that has Docker uninstalled and run the following command to have access to the containers in ECR.
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 226477880271.dkr.ecr.us-west-2.amazonaws.com
Alternatively, you can use Amazon ECR Credential Helper to log in to ECR. This approach is necessary if you want to pull the images from an AWS account that's not in the same account as the ECR repositories.
Run pull-from-ecr.sh to pull the containers from ECR and zip them. Set TAG
to the version you need. The zipped files will be distributed to the client to be deployed on-premise. Note that zipping the containers takes a long time (about 30 minutes), so be patient and don't exit the script prematurely.
Deploy Containers
We have a sample docker-compose.yml that shows the dependencies between containers and how to configure them. It is meant as an example that will be modified by clients to suit their needs.
You will notice there are some containers named <service-name>-postgres
and <service-name>-db-migrations
. Postgres containers run the database for the given service whereas db-migrations containers run database migrations. The service container in the sample file is configured so it doesn't start before both containers complete their run.
Post-Deployment Instructions
- Update and run seed-case-api-db.sql to populate initial data for the
case_api
service. - Update and run seed-mock-data.sh to populate mock Vocalink data.
- Update and run create-sample-workflow.sh to create a sample workflow to route messages.
- Update and run seed-default-config.sh to set default configuration.
pull-from-ecrsh
#!/bin/sh
TAG=develop
# pull the images from ecr
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-submit-trace-request:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-trace-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-attach-network-image:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-create-case-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dispatcher:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-link-cases-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-server:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service-db:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-purge-service:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-mock-vlapi:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-route-validation:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy:$TAG
docker pull 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy-db:$TAG
docker pull 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service:$TAG
docker pull 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service-db:$TAG
# zip the images
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-submit-trace-request:$TAG| gzip > aml-submit-trace-request.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-trace-service:$TAG | gzip > aml-trace-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases:$TAG | gzip > aml-update-cases.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases-db:$TAG | gzip > aml-update-case-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-attach-network-image:$TAG| gzip > cms-attach-network-image.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service:$TAG | gzip > cms-audit-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service-db:$TAG | gzip > cms-audit-service-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api:$TAG | gzip > cms-case-api.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api-db:$TAG | gzip > cms-case-api-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service:$TAG | gzip > cms-config-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service-db:$TAG | gzip > cms-config-service-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-create-case-service:$TAG | gzip > cms-create-case-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service:$TAG | gzip > cms-dashboard-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service-db:$TAG | gzip > cms-dashboard-service-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dispatcher:$TAG | gzip > cms-dispatcher.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing:$TAG | gzip > cms-event-routing.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing-db:$TAG | gzip > cms-event-routing-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service:$TAG | gzip > cms-jobscheduler-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service-db:$TAG | gzip > cms-jobscheduler-service-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-link-cases-service:$TAG | gzip > cms-link-cases-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-server:$TAG | gzip > cms-metrics-server.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service:$TAG | gzip > cms-metrics-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service-db:$TAG | gzip > cms-metrics-service-db.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-purge-service:$TAG | gzip > cms-purge-service.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-mock-vlapi:$TAG | gzip > cms-mock-vlapi.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-route-validation:$TAG | gzip > cms-route-validation.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy:$TAG | gzip > cms-vocalink-proxy.tar.gz
docker save 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy-db:$TAG | gzip > cms-vocalink-proxy-db.tar.gz
docker save 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service:$TAG | gzip > user-admin-service.tar.gz
docker save 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service-db:$TAG | gzip > user-admin-service-db.tar.gz
docker-compose.yml
version: "3.4"
services:
rabbitmq:
image: rabbitmq:3.8.4-management
hostname: rabbitmq
volumes:
- rabbitmq:/var/lib/rabbitmq
ports:
- "15672:15672"
- "5672:5672"
restart: always
redis:
image: redis:6.0.10-alpine
hostname: redis
ports:
- "6379:6379"
restart: always
cms-case-api:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api:develop
ports:
- "8001:8080"
expose:
- 8081
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-case-api-postgres
PGDATABASE: cms_case_api
PGPORT: 5432
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
ENV: develop
depends_on:
- rabbitmq
- cms-case-api-postgres
- cms-case-api-db-migrations
cms-case-api-postgres:
image: postgres:11-alpine
hostname: cms-case-api-postgres
volumes:
# seed the database with seed-case-api-db.sql after it starts
- cms-case-api:/var/lib/postgresql/data
expose:
- 5001
ports:
- "5001:5432"
restart: always
environment:
POSTGRES_DB: cms_case_api
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-case-api-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-case-api-db:develop
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-case-api-postgres
PGDATABASE: cms_case_api
PGPORT: 5432
depends_on:
- cms-case-api-postgres
aml-trace-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-trace-service:develop
hostname: aml-trace-service
restart: always
expose:
- 8002
ports:
- "8002:8080"
environment:
REDIS_URL: redis://redis:6379
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
depends_on:
- rabbitmq
- redis
cms-config-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service:develop
hostname: cms-config-service
restart: always
environment:
# set ENV_TYPE to "develop" to load database values from environment variables
ENV_TYPE: develop
DB_CONNECTION: jdbc:postgresql://cms-config-service-postgres:5432/cms_config_service
DB_USER: postgres
DB_PWD: postgres
expose:
- 8003
ports:
- "8003:8080"
depends_on:
- cms-config-service-postgres
- cms-config-service-db-migrations
cms-config-service-postgres:
image: postgres:11-alpine
hostname: cms-config-service-postgres
volumes:
- cms-config-service:/var/lib/postgresql/data
restart: always
expose:
- 5002
ports:
- "5002:5432"
environment:
POSTGRES_DB: cms_config_service
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-config-service-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-config-service-db:develop
environment:
FLYWAY_URL: jdbc:postgresql://cms-config-service-postgres:5432/cms_config_service
FLYWAY_USER: postgres
FLYWAY_PASSWORD: postgres
depends_on:
- cms-config-service-postgres
cms-vocalink-proxy:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy:develop
hostname: cms-vocalink-proxy
restart: always
expose:
- 8004
ports:
- "8004:8080"
environment:
VOCALINK_API_HOST: http://cms-mock-vlapi:8080
CMS_CASE_API_HOST: http://cms-case-api:8080
CMS_CONFIG_SERVICE_API_HOST: http://cms-config-service:8080
ROUTE_PREFIX: vocalink
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-vocalink-proxy-postgres
PGDATABASE: vocalink_proxy
PGPORT: 5432
depends_on:
- cms-vocalink-proxy-postgres
- cms-vocalink-proxy-db-migrations
- cms-mock-vlapi
- cms-case-api
cms-vocalink-proxy-postgres:
image: postgres:11-alpine
hostname: cms-vocalink-proxy-postgres
volumes:
- cms-vocalink-proxy:/var/lib/postgresql/data
restart: always
environment:
POSTGRES_DB: cms_vocalink_proxy
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-vocalink-proxy-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-vocalink-proxy-db:develop
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-case-api-postgres
PGDATABASE: cms_case_api
PGPORT: 5432
depends_on:
- cms-vocalink-proxy-postgres
cms-route-validation:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-route-validation:develop
hostname: cms-route-validation
expose:
- 8005
ports:
- "8005:8080"
environment:
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
RABBIT_MANAGE_PORT: 15672
CMS_CASE_API_URL: http://cms-case-api:8080
depends_on:
- rabbitmq
- cms-case-api
cms-event-routing:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing:develop
hostname: cms-event-routing
expose:
- 8006
ports:
- "8006:8080"
environment:
DB_DATABASE: cms_event_routing
DB_URL: cms-event-routing-postgres
DB_USER: postgres
DB_PWD: postgres
DB_PORT: 5432
VALIDATION_SERVICE_URL: http://cms-route-validation:8080/v1/validate
depends_on:
- cms-route-validation
- cms-event-routing-postgres
- cms-event-routing-db-migrations
cms-event-routing-postgres:
image: postgres:11-alpine
hostname: cms-event-routing-postgres
volumes:
- cms-event-routing:/var/lib/postgresql/data
restart: always
expose:
- 5003
ports:
- "5003:5432"
environment:
POSTGRES_DB: cms_event_routing
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-event-routing-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-event-routing-db:develop
environment:
DB_DATABASE: cms_event_routing
DB_URL: cms-event-routing-postgres
DB_USER: postgres
DB_PWD: postgres
DB_PORT: 5432
depends_on:
- cms-event-routing-postgres
cms-dispatcher:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dispatcher:develop
hostname: cms-dispatcher
expose:
- 8007
ports:
- "8007:8080"
environment:
# set ENV_TYPE to "develop" to load database values from environment variables
ENV_TYPE: develop
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
EVENT_ROUTING_SERVICE_ENDPOINT: http://cms-event-routing:8080
CASE_API_SERVICE_ENDPOINT: http://cms-case-api:8080
depends_on:
- cms-event-routing
- cms-case-api
aml-submit-trace-request:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-submit-trace-request:develop
hostname: aml-submit-trace-request
expose:
- 8008
ports:
- "8008:8080"
environment:
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
CASE_API_URL: http://cms-case-api:8080
VOCALINK_API_HOST: http://cms-vocalink-proxy:8080/v1/vocalink
AML_TRACE_SERVICE_HOST: http://aml-trace-service:8080
depends_on:
- rabbitmq
- cms-case-api
- cms-vocalink-proxy
- aml-trace-service
cms-create-case-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-create-case-service:develop
hostname: cms-create-case-service
expose:
- 8009
ports:
- "8009:8080"
environment:
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
CASE_API_URL: http://cms-case-api:8080
depends_on:
- rabbitmq
- cms-case-api
cms-attach-network-image:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-attach-network-image:develop
hostname: cms-attach-network-image
expose:
- 8010
ports:
- "8010:8080"
environment:
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
RABBITMQ_EXCHANGE_NAME: cms-attach-network-image
RABBITMQ_QUEUE_NAME: cms-attach-network-image
CMS_CASE_API_HOST: http://cms-case-api:8080
depends_on:
- rabbitmq
- cms-case-api
cms-jobscheduler-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service:develop
hostname: cms-jobscheduler-service
expose:
- 8011
ports:
- "8011:8080"
environment:
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
PGDATABASE: cms_jobscheduler
PGUSER: postgres
PGPASSWORD: postgres
PGPORT: 5432
PGHOST: cms-jobscheduler-service-postgres
depends_on:
- rabbitmq
- cms-jobscheduler-service-postgres
- cms-jobscheduler-service-db-migrations
cms-jobscheduler-service-postgres:
image: postgres:11-alpine
hostname: cms-jobscheduler-service-postgres
volumes:
- cms-jobscheduler-service:/var/lib/postgresql/data
restart: always
expose:
- 5004
ports:
- "5004:5432"
environment:
POSTGRES_DB: cms_jobscheduler
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-jobscheduler-service-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-jobscheduler-service-db:develop
environment:
PGDATABASE: cms_jobscheduler
PGHOST: cms-jobscheduler-service-postgres
PGUSER: postgres
PGPASSWORD: postgres
PGPORT: 5432
depends_on:
- cms-jobscheduler-service-postgres
aml-update-cases:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases:develop
hostname: aml-update-cases
expose:
- 8012
ports:
- "8012:8080"
environment:
RABBITMQ_HOST: rabbitmq
RABBITMQ_PORT: 5672
RABBITMQ_EXCHANGE_NAME: aml-update-cases
RABBITMQ_QUEUE_NAME: aml-update-cases
VOCALINK_API_HOST: http://cms-vocalink-proxy:8080/v1/vocalink
CMS_CASE_API_HOST: http://cms-case-api:8080
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: aml-update-cases-postgres
PGDATABASE: aml_update_cases
PGPORT: 5432
depends_on:
- rabbitmq
- cms-case-api
- aml-update-cases-postgres
- aml-update-cases-db-migrations
aml-update-cases-postgres:
image: postgres:11-alpine
hostname: aml-update-cases-postgres
volumes:
- aml-update-cases:/var/lib/postgresql/data
restart: always
expose:
- 5005
ports:
- "5005:5432"
environment:
POSTGRES_DB: aml_update_cases
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
aml-update-cases-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/aml-update-cases-db:develop
environment:
PGDATABASE: aml_update_cases
PGHOST: aml-update-cases-postgres
PGUSER: postgres
PGPASSWORD: postgres
PGPORT: 5432
depends_on:
- aml-update-cases-postgres
cms-link-cases-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-link-cases-service:develop
hostname: cms-link-cases-service
expose:
- 8013
ports:
- "8013:8080"
environment:
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
CASE_API_URL: http://cms-case-api:8080
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-case-api-postgres
PGDATABASE: cms_case_api
depends_on:
- rabbitmq
- cms-case-api
cms-dashboard-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service:develop
hostname: cms-dashboard-service
expose:
- 8014
ports:
- "8014:8080"
environment:
PGDATABASE: cms_dashboards
PGUSER: postgres
PGPASSWORD: postgres
PGPORT: 5432
PGHOST: cms-dashboard-service-postgres
depends_on:
- cms-dashboard-service-postgres
- cms-dashboard-service-db-migrations
cms-dashboard-service-postgres:
image: postgres:11-alpine
hostname: cms-dashboard-service-postgres
volumes:
- cms-dashboard-service:/var/lib/postgresql/data
restart: always
expose:
- 5006
ports:
- "5006:5432"
environment:
POSTGRES_DB: cms_dashboards
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-dashboard-service-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-dashboard-service-db:develop
environment:
PGDATABASE: cms_dashboards
PGHOST: cms-dashboard-service-postgres
PGUSER: postgres
PGPASSWORD: postgres
PGPORT: 5432
depends_on:
- cms-dashboard-service-postgres
cms-audit-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service:develop
hostname: cms-audit-service
expose:
- 8015
ports:
- "8015:8080"
environment:
# set ENV_TYPE to "develop" to load database values from environment variables
ENV_TYPE: develop
DB_CONNECTION: jdbc:postgresql://cms-audit-service-postgres:5432/cms_audit_service
DB_USER: postgres
DB_PWD: postgres
depends_on:
- cms-audit-service-postgres
- cms-audit-service-db-migrations
cms-audit-service-postgres:
image: postgres:11-alpine
hostname: cms-audit-service-postgres
volumes:
- cms-audit-service:/var/lib/postgresql/data
restart: always
expose:
- 5007
ports:
- "5007:5432"
environment:
POSTGRES_DB: cms_audit_service
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-audit-service-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-audit-service-db:develop
environment:
FLYWAY_URL: jdbc:postgresql://cms-audit-service-postgres:5432/cms_audit_service
FLYWAY_USER: postgres
FLYWAY_PASSWORD: postgres
depends_on:
- cms-audit-service-postgres
cms-metrics-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service:develop
hostname: cms-metrics-service
expose:
- 8016
ports:
- "8016:8080"
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-metrics-service-postgres
PGDATABASE: cms_metrics
PGPORT: 5432
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
depends_on:
- rabbitmq
- cms-metrics-service-postgres
- cms-metrics-service-db-migrations
cms-metrics-service-postgres:
image: postgres:11-alpine
hostname: cms-metrics-service-postgres
volumes:
- cms-metrics-service:/var/lib/postgresql/data
restart: always
expose:
- 5008
ports:
- "5008:5432"
environment:
POSTGRES_DB: cms_metrics
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
cms-metrics-service-db-migrations:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-service-db:develop
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-metrics-service-postgres
PGDATABASE: cms_metrics
PGPORT: 5432
depends_on:
- cms-metrics-service-postgres
# Note that one of the dashlets generates connection refused errors.
# The error is caused by the fact that the service depends on the config server which takes a little while to start up.
# This is an issue with the dashlet that doesn't retry API calls after a failed request. It should be fixed in the dashlet not in the deployment.
cms-metrics-server:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-metrics-server:develop
hostname: cms-metrics-server
expose:
- 8017
ports:
- "8017:8080"
environment:
CUBEJS_DB_HOST: cms-case-api-postgres
CUBEJS_DB_NAME: cms_case_api
CUBEJS_DB_USER: postgres
CUBEJS_DB_PASS: postgres
CUBEJS_METRICSDB_HOST: cms-metrics-service-postgres
CUBEJS_METRICSDB_NAME: cms_metrics
CUBEJS_METRICSDB_USER: postgres
CUBEJS_METRICSDB_PASS: postgres
CUBEJS_METRICSDB_PORT: 5432
CUBEJS_API_SECRET: abcdefg
CUBEJS_DB_TYPE: postgres
PORT: 8080
CONFIG_API_HOST: cms-config-service
CONFIG_API_PORT: 8080
CLIENT_INFO_ENDPOINT: http://cms-vocalink-proxy:8080/v1/client-info
depends_on:
- cms-metrics-service
- cms-case-api
user-admin-service:
image: 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service:develop
hostname: user-admin-service
expose:
- 8018
ports:
- "8018:8080"
environment:
DB_USER: postgres
DB_PWD: postgres
DB_URL: jdbc:postgresql://user-admin-service-postgres:5432/user_admin_service
depends_on:
- user-admin-service-postgres
- user-admin-service-db-migrations
user-admin-service-postgres:
image: postgres:11-alpine
hostname: user-admin-service-postgres
volumes:
- user-admin-service:/var/lib/postgresql/data
restart: always
expose:
- 5009
ports:
- "5009:5432"
environment:
POSTGRES_DB: user_admin_service
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
user-admin-service-db-migrations:
image: 490470643515.dkr.ecr.us-west-2.amazonaws.com/user-admin-service-db:develop
environment:
FLYWAY_URL: jdbc:postgresql://user-admin-service-postgres:5432/user_admin_service
FLYWAY_USER: postgres
FLYWAY_PASSWORD: postgres
depends_on:
- user-admin-service-postgres
cms-purge-service:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-purge-service:develop
hostname: cms-purge-service
expose:
- 8019
ports:
- "8019:8080"
environment:
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: cms-case-api
PGDATABASE: cms_case_api
PGPORT: 5432
RABBIT_HOST: rabbitmq
RABBIT_PORT: 5672
cms-mock-vlapi:
image: 226477880271.dkr.ecr.us-west-2.amazonaws.com/cms-mock-vlapi:develop
hostname: cms-mock-vlapi
restart: always
expose:
- 8101
ports:
- "8101:8080"
environment:
CONFIG_API_HOST: cms-config-service
CONFIG_API_PORT: 8080
depends_on:
- cms-config-service
volumes:
rabbitmq:
cms-case-api:
cms-config-service:
cms-vocalink-proxy:
cms-event-routing:
cms-jobscheduler-service:
aml-update-cases:
cms-dashboard-service:
cms-audit-service:
cms-metrics-service:
user-admin-service:
seed-case-api-db.sql
-- case_type
insert into case_type(name, tenant_key) values('aml', 'MASTERCARD');
insert into case_type(name, tenant_key) values('fraud', 'MASTERCARD');
-- case_status
insert into case_status(name, tenant_key, case_type_name, sort_order) values('alert', 'MASTERCARD', 'aml', 0);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('open', 'MASTERCARD', 'aml', 1);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('pending', 'MASTERCARD', 'aml', 20);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('review', 'MASTERCARD', 'aml', 30);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('dismissed', 'MASTERCARD', 'aml', 50);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('closed', 'MASTERCARD', 'aml', 99);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('alert', 'MASTERCARD', 'fraud', 0);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('open', 'MASTERCARD', 'fraud', 1);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('pending', 'MASTERCARD', 'fraud', 20);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('review', 'MASTERCARD', 'fraud', 30);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('dismissed', 'MASTERCARD', 'fraud', 50);
insert into case_status(name, tenant_key, case_type_name, sort_order) values('closed', 'MASTERCARD', 'fraud', 99);
-- task_status
insert into task_status(name) values('Pending');
insert into task_status(name) values('Complete');
-- task_priority
insert into task_priority(name, sort_order) values('Critical', 15);
insert into task_priority(name, sort_order) values('High', 10);
insert into task_priority(name, sort_order) values('Medium', 5);
insert into task_priority(name, sort_order) values('Low', 0);
-- case_priority
insert into case_priority(name, sort_order) values('Critical', 15);
insert into case_priority(name, sort_order) values('High', 10);
insert into case_priority(name, sort_order) values('Medium', 5);
insert into case_priority(name, sort_order) values('Low', 0);
-- case_resolution
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('not fraudulent', 'fraud', false, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('stolen card', 'fraud', true, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('counterfeit card', 'fraud', true, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('fraudulent card application', 'fraud', true, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('counterfeit merchant terminal', 'fraud', true, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('not fraudulent', 'aml', false, 'MASTERCARD');
insert into case_resolution(name, case_type_name, is_abnormal, tenant_key) values('laundered money', 'aml', true, 'MASTERCARD');
seed-mock-data.sh
#!/bin/sh
curl -vX POST http://<HOST:PORT>/modules/mockdata --header "Content-Type: application/json" --header "USERID: system" --header "ROLES: CMS_CONFIG_ADMIN" --header "TENANTKEY: MASTERCARD" -d @<mock_data_file.json>
Mock Data
{
"networkAlerts": [{
"id": 1,
"time": "2020-04-10T08:46:46.687Z",
"length": 488,
"vizURL": "http://rachel6.com",
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"totalValue": 987549,
"elapsedTime": "P2Y195DT82H38M",
"generations": 3,
"sourceTxnID": "9a8c0764-a769-43c2-bdc3-e2e05fb0a61e",
"sourceValue": 496209,
"decisionDate": "2020-02-16T20:08:33.493Z",
"accountAlerts": [
{
"id": "e68008e6-7fe3-4590-a9ab-b3adc3b919ae",
"name": "Alberto Schaden",
"time": "2020-08-01T13:06:44.431Z",
"accountID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P3Y50DT72H28M",
"muleScore": 0.15,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 1,
"owningBank": "EE200243108008808782",
"generations": [
10,
2,
3,
4,
7
],
"numNetworks": 10,
"endpointFlag": 49299849,
"parentAlertID": "129f06d4-1185-4be8-b18e-7a8e28216c5e",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-01-03T08:59:01.213Z",
"totalValueInbound": 618865,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 5702,
"firstTransactionTime": "2020-11-30T16:15:36.665Z",
"mostRecentAppearance": "2020-05-21T10:54:53.375Z",
"numConfirmedNetworks": 62,
"numScheduledMandates": 97,
"sourceTransactionValue": 764049,
"numInboundRelationships": 65,
"numOutboundRelationships": 72,
"mostRecentTransactionTime": "2020-07-04T05:59:10.407Z",
"totalSuspiciousValueInbound": 841908,
"totalSuspiciousValueOutbound": 808865
},
{
"id": "11c2cb86-c00d-4db5-a3d8-6364129fd1f9",
"name": "Jeffrey Ankunding",
"time": "2020-08-15T06:08:36.617Z",
"accountID": "HR0747300610090390052",
"dwellTime": "P5Y157DT84H14M",
"muleScore": 0.06,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 5,
"owningBank": "LB4140090237861801548H341114",
"generations": [
2,
3,
6,
8,
9
],
"numNetworks": 37,
"endpointFlag": 72700913,
"parentAlertID": "0a6b03ab-9cd1-456e-888d-3f6f74fded02",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-05-10T11:30:08.196Z",
"totalValueInbound": 864847,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 205588,
"firstTransactionTime": "2020-11-30T07:37:36.612Z",
"mostRecentAppearance": "2020-09-25T08:15:54.111Z",
"numConfirmedNetworks": 58,
"numScheduledMandates": 46,
"sourceTransactionValue": 741032,
"numInboundRelationships": 3,
"numOutboundRelationships": 22,
"mostRecentTransactionTime": "2020-06-12T19:59:57.629Z",
"totalSuspiciousValueInbound": 122041,
"totalSuspiciousValueOutbound": 546993
},
{
"id": "98808e2d-768a-46e4-b2ac-7f27cbd05b2f",
"name": "Rachel Hyatt",
"time": "2020-06-28T00:35:24.506Z",
"accountID": "MR3246906800050807308608045",
"dwellTime": "P4Y2DT217H16M",
"muleScore": 0.25,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 9,
"owningBank": "RS56095884011588969888",
"generations": [
6,
3,
1,
7,
7,
10,
5,
6
],
"numNetworks": 9,
"endpointFlag": 31227203,
"parentAlertID": "c39dc5fe-e072-4ec8-8dc3-49c7969b126f",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-07-22T19:24:19.204Z",
"totalValueInbound": 733300,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 194579,
"firstTransactionTime": "2020-11-30T09:09:37.469Z",
"mostRecentAppearance": "2020-11-18T05:20:29.508Z",
"numConfirmedNetworks": 89,
"numScheduledMandates": 7,
"sourceTransactionValue": 862754,
"numInboundRelationships": 49,
"numOutboundRelationships": 89,
"mostRecentTransactionTime": "2020-06-06T11:14:01.347Z",
"totalSuspiciousValueInbound": 882571,
"totalSuspiciousValueOutbound": 194931
},
{
"id": "1ee19cd3-4800-4d46-8221-aaba018c59c4",
"name": "Caleb Cruickshank Jr.",
"time": "2020-10-04T03:15:51.738Z",
"accountID": "LV87CVTS17756597K46O8",
"dwellTime": "P300DT50H50M",
"muleScore": 0.37,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 6,
"owningBank": "IS540914750091106030006261",
"generations": [
1,
1
],
"numNetworks": 20,
"endpointFlag": 5753651,
"parentAlertID": "798b79b3-a1c4-4c99-aa54-b24b202df63f",
"networkAlertID": 1,
"receivesSalary": false,
"firstAppearance": "2020-10-05T19:00:18.462Z",
"totalValueInbound": 489724,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 238945,
"firstTransactionTime": "2020-11-30T17:42:43.526Z",
"mostRecentAppearance": "2020-04-20T16:13:26.753Z",
"numConfirmedNetworks": 50,
"numScheduledMandates": 31,
"sourceTransactionValue": 537272,
"numInboundRelationships": 30,
"numOutboundRelationships": 95,
"mostRecentTransactionTime": "2020-02-25T22:21:55.539Z",
"totalSuspiciousValueInbound": 63084,
"totalSuspiciousValueOutbound": 360106
}
],
"meanDwellTime": "P5Y220DT107H16M",
"meanMuleScore": 0.77,
"numLegitimate": 33,
"parentAlertID": "9ff67102-f8a7-4bc0-9783-420430cbf4ca",
"sourceTxnType": "romanceScam",
"uniqueAccounts": 4,
"medianDwellTime": "P152DT254H18M",
"numActionedMules": 69,
"transactionAlerts": [
{
"id": "00c35db1-206a-46f9-aefa-3a4243a16fc4",
"time": "2020-01-26T20:36:10.255Z",
"txnID": "0d071a81-3923-40f9-b9e7-260551c71531",
"value": 797863,
"destID": "MR3246906800050807308608045",
"avScore": 36,
"service": "fraud",
"txnTime": "2020-01-06T09:35:11.362Z",
"currency": "USD",
"sourceID": "LV87CVTS17756597K46O8",
"dwellTime": "P4Y259DT240H17M",
"muleScore": 0.63,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 5,
"directDebit": true,
"decisionDate": "2020-05-21T02:11:45.619Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "BOFMCAT2",
"parentAlertID": "1e89a942-99aa-4a52-9b9a-be35f4fff4c6",
"destinationAge": "P4Y83DT163H16M",
"networkAlertID": 1,
"receivesSalary": true,
"sourceBankName": "Bank Of Montreal",
"relationshipAge": "P3Y31DT120H22M",
"sourceTraceType": "fraud",
"newRelationships": 42,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.13,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 47
},
{
"id": "3bdf3f28-b5c3-4b7d-bfc3-f5f5e1299c25",
"time": "2020-04-18T10:07:07.942Z",
"txnID": "d8a4aed6-3d34-4ff6-aabf-a5d31d032847",
"value": 342645,
"destID": "KW37GYNQ981D1V6E14691028146639",
"avScore": 12,
"service": "fraud",
"txnTime": "2020-05-20T00:25:19.844Z",
"currency": "USD",
"sourceID": "HR0747300610090390052",
"dwellTime": "P2Y212DT266H",
"muleScore": 0.23,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 2,
"directDebit": true,
"decisionDate": "2020-08-07T07:18:04.106Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "NOSCAT",
"parentAlertID": "0c76b463-b654-425e-9949-fb65eca90dd4",
"destinationAge": "P36DT270H48M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P3Y104DT179H43M",
"sourceTraceType": "fraud",
"newRelationships": 47,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.88,
"destinationIsBusiness": false,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 81
},
{
"id": "95824ed0-d9f6-4004-b841-72f9bc8d4d74",
"time": "2020-02-05T11:42:02.113Z",
"txnID": "154ad20c-6e59-4ce4-a59d-c3af7e019431",
"value": 392083,
"destID": "MR3246906800050807308608045",
"avScore": 24,
"service": "fraud",
"txnTime": "2020-05-01T17:01:24.441Z",
"currency": "CAD",
"sourceID": "HR0747300610090390052",
"dwellTime": "P5Y294DT53M",
"muleScore": 0.11,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 4,
"directDebit": false,
"decisionDate": "2020-07-19T22:23:29.704Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "ROYCAT2",
"parentAlertID": "c130564e-9554-422f-b05f-884f4bc1f563",
"destinationAge": "P5Y271DT217H59M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P3Y354DT38H34M",
"sourceTraceType": "fraud",
"newRelationships": 82,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.79,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 13
},
{
"id": "bf593f6c-ae49-4430-bd82-f4e37aed886c",
"time": "2019-12-03T13:43:47.918Z",
"txnID": "1448656b-cfff-42a8-bc23-6a4bc4c5d34b",
"value": 630400,
"destID": "SI49027582801362046",
"avScore": 70,
"service": "fraud",
"txnTime": "2020-10-09T19:23:36.366Z",
"currency": "AUD",
"sourceID": "SI49027582801362046",
"dwellTime": "P3Y356DT124H46M",
"muleScore": 0.42,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 9,
"directDebit": true,
"decisionDate": "2020-06-03T17:59:44.533Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "ROYCAT2",
"parentAlertID": "24637f8c-5ef0-4029-a289-582a64826855",
"destinationAge": "P105DT185H44M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P4Y136DT133H12M",
"sourceTraceType": "fraud",
"newRelationships": 40,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.17,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 81
},
{
"id": "5b5ace37-f213-4a42-926b-60629fcdaebe",
"time": "2020-03-16T10:30:39.998Z",
"txnID": "802181a5-0566-4074-a7bc-ac6deefc1cb3",
"value": 202657,
"destID": "MR3246906800050807308608045",
"avScore": 86,
"service": "fraud",
"txnTime": "2020-03-09T14:05:56.246Z",
"currency": "AUD",
"sourceID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P3Y329DT204H55M",
"muleScore": 0.4,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 8,
"directDebit": true,
"decisionDate": "2020-10-27T13:03:53.053Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "ROYCAT2",
"parentAlertID": "d9e07556-97c4-4ab7-8031-1b2062ec149e",
"destinationAge": "P3Y334DT209H14M",
"networkAlertID": 1,
"receivesSalary": true,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P4Y308DT105H49M",
"sourceTraceType": "fraud",
"newRelationships": 13,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.39,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": true,
"destinationReceiveValues": 71
},
{
"id": "778d135e-f684-41c5-a8ef-957c1f901ccc",
"time": "2020-06-04T10:41:41.136Z",
"txnID": "54a13833-9fa6-4a12-80b1-466a0daa2f08",
"value": 308299,
"destID": "NL89LJAO5087406868",
"avScore": 31,
"service": "fraud",
"txnTime": "2020-08-02T13:51:30.480Z",
"currency": "USD",
"sourceID": "MR3246906800050807308608045",
"dwellTime": "P191DT172H25M",
"muleScore": 0.06,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 8,
"directDebit": true,
"decisionDate": "2020-06-02T08:33:48.111Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "HSBC",
"parentAlertID": "8f6e996e-0f6a-4d4b-ac66-dd901cb98214",
"destinationAge": "P26DT205H5M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P98DT281H17M",
"sourceTraceType": "fraud",
"newRelationships": 42,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.79,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 71
},
{
"id": "3014ffbf-fc20-49b0-9a92-346dcfe686a2",
"time": "2020-10-25T06:18:59.768Z",
"txnID": "6ba0f698-9dfc-4211-be09-dcef7e40e20f",
"value": 853217,
"destID": "HR0747300610090390052",
"avScore": 67,
"service": "fraud",
"txnTime": "2020-07-25T15:54:19.905Z",
"currency": "AUD",
"sourceID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P2Y9DT345H51M",
"muleScore": 0.96,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 10,
"directDebit": true,
"decisionDate": "2020-11-20T12:45:26.734Z",
"destBankName": "HSBC Canada",
"sourceBankID": "NOSCAT",
"parentAlertID": "5d1fade8-1437-4f18-ad43-740b51db5136",
"destinationAge": "P4Y302DT119H4M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P4Y191DT137H49M",
"sourceTraceType": "fraud",
"newRelationships": 69,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.93,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": true,
"destinationReceiveValues": 19
}
],
"mostRecentFeedback": "actionedMule",
"numNotInvestigated": 11
},
{
"id": 2,
"time": "2020-06-20T01:58:38.411Z",
"length": 4,
"vizURL": "http://emmitt.info",
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"totalValue": 972417,
"elapsedTime": "P4Y162DT88H59M",
"generations": 1,
"sourceTxnID": "1e408fb5-eaa7-4b43-a8aa-f4adbe79421d",
"sourceValue": 68862,
"decisionDate": "2020-07-02T13:50:03.165Z",
"accountAlerts": [
{
"id": "27802dbd-7a80-4428-a616-7173bbd5d841",
"name": "David Kemmer",
"time": "2020-04-30T03:10:14.933Z",
"accountID": "XK553287001010532847",
"dwellTime": "P124DT204H46M",
"muleScore": 0.34,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 7,
"owningBank": "BE73309002001902",
"generations": [
3
],
"numNetworks": 6,
"endpointFlag": 82723072,
"parentAlertID": "66240725-6aad-4942-bca3-2295ff2be35f",
"networkAlertID": 2,
"receivesSalary": true,
"firstAppearance": "2020-04-17T13:15:06.102Z",
"totalValueInbound": 42576,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 346858,
"firstTransactionTime": "2020-11-30T12:21:17.908Z",
"mostRecentAppearance": "2020-11-03T21:06:24.063Z",
"numConfirmedNetworks": 77,
"numScheduledMandates": 100,
"sourceTransactionValue": 859024,
"numInboundRelationships": 13,
"numOutboundRelationships": 25,
"mostRecentTransactionTime": "2020-10-18T17:06:01.208Z",
"totalSuspiciousValueInbound": 375862,
"totalSuspiciousValueOutbound": 739183
},
{
"id": "a9cf702e-9b6b-454c-a5a7-f2b3e9d3bec9",
"name": "Jerome Hettinger",
"time": "2020-11-30T00:59:47.002Z",
"accountID": "BG25BZPU7833194199P922",
"dwellTime": "P3Y354DT216H33M",
"muleScore": 0.96,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 8,
"owningBank": "DE71090130157006020374",
"generations": [
3,
6,
9,
2,
8,
10
],
"numNetworks": 15,
"endpointFlag": 80596873,
"parentAlertID": "e9800e0d-d6ee-4570-b68d-3566379aa075",
"networkAlertID": 2,
"receivesSalary": false,
"firstAppearance": "2020-02-07T01:50:38.769Z",
"totalValueInbound": 756031,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 987482,
"firstTransactionTime": "2020-11-30T08:25:04.486Z",
"mostRecentAppearance": "2020-10-16T20:27:03.737Z",
"numConfirmedNetworks": 92,
"numScheduledMandates": 5,
"sourceTransactionValue": 752569,
"numInboundRelationships": 13,
"numOutboundRelationships": 59,
"mostRecentTransactionTime": "2020-07-31T21:12:31.696Z",
"totalSuspiciousValueInbound": 669256,
"totalSuspiciousValueOutbound": 285662
},
{
"id": "1b9364e4-6c38-4dfd-a4e2-7310a0d23425",
"name": "Mrs. Alison Wolf",
"time": "2020-03-20T03:20:40.605Z",
"accountID": "MD952135AI41186030592L73",
"dwellTime": "P3Y162DT213H31M",
"muleScore": 0.79,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 10,
"owningBank": "AL02648004258016548450160416",
"generations": [
2
],
"numNetworks": 33,
"endpointFlag": 12602348,
"parentAlertID": "dab2e2bf-e64c-43c7-a758-db2bdc3adff2",
"networkAlertID": 2,
"receivesSalary": true,
"firstAppearance": "2020-02-07T14:36:53.240Z",
"totalValueInbound": 154873,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 702775,
"firstTransactionTime": "2020-11-30T11:38:58.185Z",
"mostRecentAppearance": "2019-12-25T03:59:35.558Z",
"numConfirmedNetworks": 91,
"numScheduledMandates": 45,
"sourceTransactionValue": 158997,
"numInboundRelationships": 98,
"numOutboundRelationships": 8,
"mostRecentTransactionTime": "2020-03-26T14:48:10.906Z",
"totalSuspiciousValueInbound": 753755,
"totalSuspiciousValueOutbound": 212131
},
{
"id": "08f11b3c-03fb-4788-8b12-bc5cf1d8ca08",
"name": "Lola Hudson",
"time": "2019-12-27T01:02:03.732Z",
"accountID": "ME06116003807930780020",
"dwellTime": "P2Y110DT101H24M",
"muleScore": 0.28,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 8,
"owningBank": "XK720018006708502472",
"generations": [
2,
3,
2,
9
],
"numNetworks": 14,
"endpointFlag": 81182264,
"parentAlertID": "91765732-05bf-457e-9ecb-fa5a69759d7c",
"networkAlertID": 2,
"receivesSalary": false,
"firstAppearance": "2020-03-31T18:50:53.796Z",
"totalValueInbound": 722312,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 19633,
"firstTransactionTime": "2020-11-30T01:30:29.389Z",
"mostRecentAppearance": "2020-10-01T13:07:34.969Z",
"numConfirmedNetworks": 93,
"numScheduledMandates": 80,
"sourceTransactionValue": 523447,
"numInboundRelationships": 46,
"numOutboundRelationships": 38,
"mostRecentTransactionTime": "2019-12-23T16:17:32.666Z",
"totalSuspiciousValueInbound": 798100,
"totalSuspiciousValueOutbound": 780178
}
],
"meanDwellTime": "P1Y312DT357H17M",
"meanMuleScore": 0.97,
"numLegitimate": 9,
"parentAlertID": "47ce8fb0-11b1-4f4d-a8f8-7c4977118435",
"sourceTxnType": "impersonationScam",
"uniqueAccounts": 4,
"medianDwellTime": "P3Y104DT318H24M",
"numActionedMules": 19,
"transactionAlerts": [
{
"id": "f238fe3c-a871-4a4a-a39c-77e026d78036",
"time": "2020-09-12T05:48:40.626Z",
"txnID": "a02e08b0-af63-4640-92d1-b78d0c432809",
"value": 684519,
"destID": "MD952135AI41186030592L73",
"avScore": 61,
"service": "fraud",
"txnTime": "2020-02-16T07:30:15.598Z",
"currency": "CAD",
"sourceID": "ME06116003807930780020",
"dwellTime": "P3Y100DT238H27M",
"muleScore": 0.65,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 1,
"directDebit": true,
"decisionDate": "2020-01-07T22:30:01.780Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "CITI",
"parentAlertID": "5b278757-26da-4373-8ae4-dafd03730dd4",
"destinationAge": "P243DT209H18M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P2Y342DT121H54M",
"sourceTraceType": "fraud",
"newRelationships": 17,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.96,
"destinationIsBusiness": false,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 14
},
{
"id": "dfaedb24-16fa-4847-9b19-72c86475c0f9",
"time": "2020-10-12T07:15:55.437Z",
"txnID": "b96464d0-7361-43f3-ae90-0ab6b8e5ecf8",
"value": 408591,
"destID": "XK553287001010532847",
"avScore": 7,
"service": "fraud",
"txnTime": "2020-06-11T19:43:40.517Z",
"currency": "NZD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P4Y73DT372H19M",
"muleScore": 0.68,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "CITI",
"generation": 10,
"directDebit": true,
"decisionDate": "2019-12-19T20:52:47.761Z",
"destBankName": "Citibank Canada",
"sourceBankID": "BOFMCAT2",
"parentAlertID": "fb7b5849-8107-44bb-ac19-71fd4c23a849",
"destinationAge": "P358DT136H3M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Bank Of Montreal",
"relationshipAge": "P4Y270DT201H56M",
"sourceTraceType": "fraud",
"newRelationships": 50,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.06,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 39
},
{
"id": "22b98a0d-e4a5-4a56-af1b-1fa342107b42",
"time": "2020-01-13T04:55:12.092Z",
"txnID": "e43dd213-e138-4e76-beb4-50914cc1733b",
"value": 512938,
"destID": "ME06116003807930780020",
"avScore": 46,
"service": "fraud",
"txnTime": "2020-09-22T21:58:59.808Z",
"currency": "NZD",
"sourceID": "SI59005632008001855",
"dwellTime": "P2Y331DT228H24M",
"muleScore": 0.81,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 9,
"directDebit": false,
"decisionDate": "2020-08-10T11:00:25.141Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "HSBC",
"parentAlertID": "c832109c-ef6d-4473-81e9-ed97a656e4ea",
"destinationAge": "P5Y28DT224H3M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P2Y123DT161H24M",
"sourceTraceType": "fraud",
"newRelationships": 95,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.72,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 46
},
{
"id": "e29f0c60-1f1c-4b14-9139-149f4eb5ab73",
"time": "2020-09-19T19:32:02.109Z",
"txnID": "87d587d1-2e01-46b7-9ee5-5e2ccf858bfa",
"value": 85202,
"destID": "BG25BZPU7833194199P922",
"avScore": 67,
"service": "fraud",
"txnTime": "2020-03-26T19:51:05.364Z",
"currency": "NZD",
"sourceID": "MD952135AI41186030592L73",
"dwellTime": "P5Y261DT243H27M",
"muleScore": 0.13,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 3,
"directDebit": false,
"decisionDate": "2020-01-24T05:32:24.905Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "CITI",
"parentAlertID": "509c7f00-2752-461e-9042-c97d0bb9749f",
"destinationAge": "P3Y84DT106H2M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P4Y130DT97H1M",
"sourceTraceType": "fraud",
"newRelationships": 26,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.9,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 30
},
{
"id": "244881da-0345-4466-a924-4df0fc53f178",
"time": "2020-09-28T01:40:16.079Z",
"txnID": "a362fa81-e8af-4a79-a56a-95a464159b04",
"value": 235662,
"destID": "SI59005632008001855",
"avScore": 97,
"service": "fraud",
"txnTime": "2020-08-20T04:42:02.437Z",
"currency": "NZD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P1Y162DT179H55M",
"muleScore": 0.96,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 9,
"directDebit": true,
"decisionDate": "2020-04-21T07:56:09.268Z",
"destBankName": "HSBC Canada",
"sourceBankID": "CITI",
"parentAlertID": "f7c2402d-c060-4955-8015-99268db0cbf1",
"destinationAge": "P2Y219DT12H42M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P2Y128DT12H24M",
"sourceTraceType": "fraud",
"newRelationships": 12,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.06,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 41
},
{
"id": "e647dd32-25ef-4f7b-91b8-88c9c23103f3",
"time": "2020-03-19T15:25:14.661Z",
"txnID": "04b36f44-7645-4ddf-bfb5-944eebe7a441",
"value": 75443,
"destID": "AT425663710087610847",
"avScore": 37,
"service": "fraud",
"txnTime": "2020-10-03T18:33:38.042Z",
"currency": "USD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P4Y66DT243H30M",
"muleScore": 0.76,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 1,
"directDebit": true,
"decisionDate": "2020-06-22T13:57:39.566Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "NOSCAT",
"parentAlertID": "500051c8-a28f-4217-a725-3b22346e64b7",
"destinationAge": "P1Y108DT237H23M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P5Y110DT89H45M",
"sourceTraceType": "fraud",
"newRelationships": 61,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.55,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 64
},
{
"id": "8eb43fb0-4d19-4efc-8ada-08ad59ad3394",
"time": "2020-02-14T21:49:38.711Z",
"txnID": "cc020662-12a9-447c-a3d1-c704fd356816",
"value": 722286,
"destID": "ES2665034049906065903367",
"avScore": 38,
"service": "fraud",
"txnTime": "2020-08-11T12:00:45.701Z",
"currency": "CAD",
"sourceID": "ME06116003807930780020",
"dwellTime": "P4Y112DT251H19M",
"muleScore": 0.53,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 4,
"directDebit": false,
"decisionDate": "2020-03-21T22:06:19.066Z",
"destBankName": "HSBC Canada",
"sourceBankID": "CITI",
"parentAlertID": "023cfa11-9b73-4bca-a4ef-17a74fe1cb66",
"destinationAge": "P3Y205DT199H16M",
"networkAlertID": 2,
"receivesSalary": true,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P3Y63DT110H5M",
"sourceTraceType": "fraud",
"newRelationships": 7,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.48,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 94
},
{
"id": "817d514c-78a9-4736-9b62-c176f729f4da",
"time": "2020-03-10T05:31:03.355Z",
"txnID": "fad94d99-8537-41b0-a51a-8d05b9edb610",
"value": 915238,
"destID": "ME06116003807930780020",
"avScore": 61,
"service": "fraud",
"txnTime": "2020-07-09T10:04:40.708Z",
"currency": "USD",
"sourceID": "SI59005632008001855",
"dwellTime": "P337DT387H9M",
"muleScore": 0.68,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 4,
"directDebit": true,
"decisionDate": "2020-06-02T06:36:02.673Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "HSBC",
"parentAlertID": "5b8256ae-39d2-4eb2-bbde-0829af13b2f1",
"destinationAge": "P3Y320DT236H50M",
"networkAlertID": 2,
"receivesSalary": true,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P1Y344DT3H50M",
"sourceTraceType": "fraud",
"newRelationships": 5,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.42,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 7
}
],
"mostRecentFeedback": "actionedMule",
"numNotInvestigated": 77
}],
"traceRequests": [{
"id": 1,
"time": "2020-04-10T08:46:46.687Z",
"length": 488,
"vizURL": "http://rachel6.com",
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"totalValue": 987549,
"elapsedTime": "P2Y195DT82H38M",
"generations": 3,
"sourceTxnID": "9a8c0764-a769-43c2-bdc3-e2e05fb0a61e",
"sourceValue": 496209,
"decisionDate": "2020-02-16T20:08:33.493Z",
"accountAlerts": [
{
"id": "e68008e6-7fe3-4590-a9ab-b3adc3b919ae",
"name": "Alberto Schaden",
"time": "2020-08-01T13:06:44.431Z",
"accountID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P3Y50DT72H28M",
"muleScore": 0.15,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 1,
"owningBank": "EE200243108008808782",
"generations": [
10,
2,
3,
4,
7
],
"numNetworks": 10,
"endpointFlag": 49299849,
"parentAlertID": "129f06d4-1185-4be8-b18e-7a8e28216c5e",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-01-03T08:59:01.213Z",
"totalValueInbound": 618865,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 5702,
"firstTransactionTime": "2020-11-30T16:15:36.665Z",
"mostRecentAppearance": "2020-05-21T10:54:53.375Z",
"numConfirmedNetworks": 62,
"numScheduledMandates": 97,
"sourceTransactionValue": 764049,
"numInboundRelationships": 65,
"numOutboundRelationships": 72,
"mostRecentTransactionTime": "2020-07-04T05:59:10.407Z",
"totalSuspiciousValueInbound": 841908,
"totalSuspiciousValueOutbound": 808865
},
{
"id": "11c2cb86-c00d-4db5-a3d8-6364129fd1f9",
"name": "Jeffrey Ankunding",
"time": "2020-08-15T06:08:36.617Z",
"accountID": "HR0747300610090390052",
"dwellTime": "P5Y157DT84H14M",
"muleScore": 0.06,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 5,
"owningBank": "LB4140090237861801548H341114",
"generations": [
2,
3,
6,
8,
9
],
"numNetworks": 37,
"endpointFlag": 72700913,
"parentAlertID": "0a6b03ab-9cd1-456e-888d-3f6f74fded02",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-05-10T11:30:08.196Z",
"totalValueInbound": 864847,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 205588,
"firstTransactionTime": "2020-11-30T07:37:36.612Z",
"mostRecentAppearance": "2020-09-25T08:15:54.111Z",
"numConfirmedNetworks": 58,
"numScheduledMandates": 46,
"sourceTransactionValue": 741032,
"numInboundRelationships": 3,
"numOutboundRelationships": 22,
"mostRecentTransactionTime": "2020-06-12T19:59:57.629Z",
"totalSuspiciousValueInbound": 122041,
"totalSuspiciousValueOutbound": 546993
},
{
"id": "98808e2d-768a-46e4-b2ac-7f27cbd05b2f",
"name": "Rachel Hyatt",
"time": "2020-06-28T00:35:24.506Z",
"accountID": "MR3246906800050807308608045",
"dwellTime": "P4Y2DT217H16M",
"muleScore": 0.25,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 9,
"owningBank": "RS56095884011588969888",
"generations": [
6,
3,
1,
7,
7,
10,
5,
6
],
"numNetworks": 9,
"endpointFlag": 31227203,
"parentAlertID": "c39dc5fe-e072-4ec8-8dc3-49c7969b126f",
"networkAlertID": 1,
"receivesSalary": true,
"firstAppearance": "2020-07-22T19:24:19.204Z",
"totalValueInbound": 733300,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 194579,
"firstTransactionTime": "2020-11-30T09:09:37.469Z",
"mostRecentAppearance": "2020-11-18T05:20:29.508Z",
"numConfirmedNetworks": 89,
"numScheduledMandates": 7,
"sourceTransactionValue": 862754,
"numInboundRelationships": 49,
"numOutboundRelationships": 89,
"mostRecentTransactionTime": "2020-06-06T11:14:01.347Z",
"totalSuspiciousValueInbound": 882571,
"totalSuspiciousValueOutbound": 194931
},
{
"id": "1ee19cd3-4800-4d46-8221-aaba018c59c4",
"name": "Caleb Cruickshank Jr.",
"time": "2020-10-04T03:15:51.738Z",
"accountID": "LV87CVTS17756597K46O8",
"dwellTime": "P300DT50H50M",
"muleScore": 0.37,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"generation": 6,
"owningBank": "IS540914750091106030006261",
"generations": [
1,
1
],
"numNetworks": 20,
"endpointFlag": 5753651,
"parentAlertID": "798b79b3-a1c4-4c99-aa54-b24b202df63f",
"networkAlertID": 1,
"receivesSalary": false,
"firstAppearance": "2020-10-05T19:00:18.462Z",
"totalValueInbound": 489724,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 238945,
"firstTransactionTime": "2020-11-30T17:42:43.526Z",
"mostRecentAppearance": "2020-04-20T16:13:26.753Z",
"numConfirmedNetworks": 50,
"numScheduledMandates": 31,
"sourceTransactionValue": 537272,
"numInboundRelationships": 30,
"numOutboundRelationships": 95,
"mostRecentTransactionTime": "2020-02-25T22:21:55.539Z",
"totalSuspiciousValueInbound": 63084,
"totalSuspiciousValueOutbound": 360106
}
],
"meanDwellTime": "P5Y220DT107H16M",
"meanMuleScore": 0.77,
"numLegitimate": 33,
"parentAlertID": "9ff67102-f8a7-4bc0-9783-420430cbf4ca",
"sourceTxnType": "romanceScam",
"uniqueAccounts": 4,
"medianDwellTime": "P152DT254H18M",
"numActionedMules": 69,
"transactionAlerts": [
{
"id": "00c35db1-206a-46f9-aefa-3a4243a16fc4",
"time": "2020-01-26T20:36:10.255Z",
"txnID": "0d071a81-3923-40f9-b9e7-260551c71531",
"value": 797863,
"destID": "MR3246906800050807308608045",
"avScore": 36,
"service": "fraud",
"txnTime": "2020-01-06T09:35:11.362Z",
"currency": "USD",
"sourceID": "LV87CVTS17756597K46O8",
"dwellTime": "P4Y259DT240H17M",
"muleScore": 0.63,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 5,
"directDebit": true,
"decisionDate": "2020-05-21T02:11:45.619Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "BOFMCAT2",
"parentAlertID": "1e89a942-99aa-4a52-9b9a-be35f4fff4c6",
"destinationAge": "P4Y83DT163H16M",
"networkAlertID": 1,
"receivesSalary": true,
"sourceBankName": "Bank Of Montreal",
"relationshipAge": "P3Y31DT120H22M",
"sourceTraceType": "fraud",
"newRelationships": 42,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.13,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 47
},
{
"id": "3bdf3f28-b5c3-4b7d-bfc3-f5f5e1299c25",
"time": "2020-04-18T10:07:07.942Z",
"txnID": "d8a4aed6-3d34-4ff6-aabf-a5d31d032847",
"value": 342645,
"destID": "KW37GYNQ981D1V6E14691028146639",
"avScore": 12,
"service": "fraud",
"txnTime": "2020-05-20T00:25:19.844Z",
"currency": "USD",
"sourceID": "HR0747300610090390052",
"dwellTime": "P2Y212DT266H",
"muleScore": 0.23,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 2,
"directDebit": true,
"decisionDate": "2020-08-07T07:18:04.106Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "NOSCAT",
"parentAlertID": "0c76b463-b654-425e-9949-fb65eca90dd4",
"destinationAge": "P36DT270H48M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P3Y104DT179H43M",
"sourceTraceType": "fraud",
"newRelationships": 47,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.88,
"destinationIsBusiness": false,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 81
},
{
"id": "95824ed0-d9f6-4004-b841-72f9bc8d4d74",
"time": "2020-02-05T11:42:02.113Z",
"txnID": "154ad20c-6e59-4ce4-a59d-c3af7e019431",
"value": 392083,
"destID": "MR3246906800050807308608045",
"avScore": 24,
"service": "fraud",
"txnTime": "2020-05-01T17:01:24.441Z",
"currency": "CAD",
"sourceID": "HR0747300610090390052",
"dwellTime": "P5Y294DT53M",
"muleScore": 0.11,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 4,
"directDebit": false,
"decisionDate": "2020-07-19T22:23:29.704Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "ROYCAT2",
"parentAlertID": "c130564e-9554-422f-b05f-884f4bc1f563",
"destinationAge": "P5Y271DT217H59M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P3Y354DT38H34M",
"sourceTraceType": "fraud",
"newRelationships": 82,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.79,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 13
},
{
"id": "bf593f6c-ae49-4430-bd82-f4e37aed886c",
"time": "2019-12-03T13:43:47.918Z",
"txnID": "1448656b-cfff-42a8-bc23-6a4bc4c5d34b",
"value": 630400,
"destID": "SI49027582801362046",
"avScore": 70,
"service": "fraud",
"txnTime": "2020-10-09T19:23:36.366Z",
"currency": "AUD",
"sourceID": "SI49027582801362046",
"dwellTime": "P3Y356DT124H46M",
"muleScore": 0.42,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 9,
"directDebit": true,
"decisionDate": "2020-06-03T17:59:44.533Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "ROYCAT2",
"parentAlertID": "24637f8c-5ef0-4029-a289-582a64826855",
"destinationAge": "P105DT185H44M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P4Y136DT133H12M",
"sourceTraceType": "fraud",
"newRelationships": 40,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.17,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 81
},
{
"id": "5b5ace37-f213-4a42-926b-60629fcdaebe",
"time": "2020-03-16T10:30:39.998Z",
"txnID": "802181a5-0566-4074-a7bc-ac6deefc1cb3",
"value": 202657,
"destID": "MR3246906800050807308608045",
"avScore": 86,
"service": "fraud",
"txnTime": "2020-03-09T14:05:56.246Z",
"currency": "AUD",
"sourceID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P3Y329DT204H55M",
"muleScore": 0.4,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 8,
"directDebit": true,
"decisionDate": "2020-10-27T13:03:53.053Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "ROYCAT2",
"parentAlertID": "d9e07556-97c4-4ab7-8031-1b2062ec149e",
"destinationAge": "P3Y334DT209H14M",
"networkAlertID": 1,
"receivesSalary": true,
"sourceBankName": "Royal Bank Of Canada",
"relationshipAge": "P4Y308DT105H49M",
"sourceTraceType": "fraud",
"newRelationships": 13,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.39,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": true,
"destinationReceiveValues": 71
},
{
"id": "778d135e-f684-41c5-a8ef-957c1f901ccc",
"time": "2020-06-04T10:41:41.136Z",
"txnID": "54a13833-9fa6-4a12-80b1-466a0daa2f08",
"value": 308299,
"destID": "NL89LJAO5087406868",
"avScore": 31,
"service": "fraud",
"txnTime": "2020-08-02T13:51:30.480Z",
"currency": "USD",
"sourceID": "MR3246906800050807308608045",
"dwellTime": "P191DT172H25M",
"muleScore": 0.06,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 8,
"directDebit": true,
"decisionDate": "2020-06-02T08:33:48.111Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "HSBC",
"parentAlertID": "8f6e996e-0f6a-4d4b-ac66-dd901cb98214",
"destinationAge": "P26DT205H5M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P98DT281H17M",
"sourceTraceType": "fraud",
"newRelationships": 42,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.79,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 71
},
{
"id": "3014ffbf-fc20-49b0-9a92-346dcfe686a2",
"time": "2020-10-25T06:18:59.768Z",
"txnID": "6ba0f698-9dfc-4211-be09-dcef7e40e20f",
"value": 853217,
"destID": "HR0747300610090390052",
"avScore": 67,
"service": "fraud",
"txnTime": "2020-07-25T15:54:19.905Z",
"currency": "AUD",
"sourceID": "KW37GYNQ981D1V6E14691028146639",
"dwellTime": "P2Y9DT345H51M",
"muleScore": 0.96,
"networkID": "b350f2f6-acfb-4cfb-98ae-b448779e0eda",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 10,
"directDebit": true,
"decisionDate": "2020-11-20T12:45:26.734Z",
"destBankName": "HSBC Canada",
"sourceBankID": "NOSCAT",
"parentAlertID": "5d1fade8-1437-4f18-ad43-740b51db5136",
"destinationAge": "P4Y302DT119H4M",
"networkAlertID": 1,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P4Y191DT137H49M",
"sourceTraceType": "fraud",
"newRelationships": 69,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.93,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": true,
"destinationReceiveValues": 19
}
],
"mostRecentFeedback": "actionedMule",
"numNotInvestigated": 11
},
{
"id": 2,
"time": "2020-06-20T01:58:38.411Z",
"length": 4,
"vizURL": "http://emmitt.info",
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"totalValue": 972417,
"elapsedTime": "P4Y162DT88H59M",
"generations": 1,
"sourceTxnID": "1e408fb5-eaa7-4b43-a8aa-f4adbe79421d",
"sourceValue": 68862,
"decisionDate": "2020-07-02T13:50:03.165Z",
"accountAlerts": [
{
"id": "27802dbd-7a80-4428-a616-7173bbd5d841",
"name": "David Kemmer",
"time": "2020-04-30T03:10:14.933Z",
"accountID": "XK553287001010532847",
"dwellTime": "P124DT204H46M",
"muleScore": 0.34,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 7,
"owningBank": "BE73309002001902",
"generations": [
3
],
"numNetworks": 6,
"endpointFlag": 82723072,
"parentAlertID": "66240725-6aad-4942-bca3-2295ff2be35f",
"networkAlertID": 2,
"receivesSalary": true,
"firstAppearance": "2020-04-17T13:15:06.102Z",
"totalValueInbound": 42576,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 346858,
"firstTransactionTime": "2020-11-30T12:21:17.908Z",
"mostRecentAppearance": "2020-11-03T21:06:24.063Z",
"numConfirmedNetworks": 77,
"numScheduledMandates": 100,
"sourceTransactionValue": 859024,
"numInboundRelationships": 13,
"numOutboundRelationships": 25,
"mostRecentTransactionTime": "2020-10-18T17:06:01.208Z",
"totalSuspiciousValueInbound": 375862,
"totalSuspiciousValueOutbound": 739183
},
{
"id": "a9cf702e-9b6b-454c-a5a7-f2b3e9d3bec9",
"name": "Jerome Hettinger",
"time": "2020-11-30T00:59:47.002Z",
"accountID": "BG25BZPU7833194199P922",
"dwellTime": "P3Y354DT216H33M",
"muleScore": 0.96,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 8,
"owningBank": "DE71090130157006020374",
"generations": [
3,
6,
9,
2,
8,
10
],
"numNetworks": 15,
"endpointFlag": 80596873,
"parentAlertID": "e9800e0d-d6ee-4570-b68d-3566379aa075",
"networkAlertID": 2,
"receivesSalary": false,
"firstAppearance": "2020-02-07T01:50:38.769Z",
"totalValueInbound": 756031,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 987482,
"firstTransactionTime": "2020-11-30T08:25:04.486Z",
"mostRecentAppearance": "2020-10-16T20:27:03.737Z",
"numConfirmedNetworks": 92,
"numScheduledMandates": 5,
"sourceTransactionValue": 752569,
"numInboundRelationships": 13,
"numOutboundRelationships": 59,
"mostRecentTransactionTime": "2020-07-31T21:12:31.696Z",
"totalSuspiciousValueInbound": 669256,
"totalSuspiciousValueOutbound": 285662
},
{
"id": "1b9364e4-6c38-4dfd-a4e2-7310a0d23425",
"name": "Mrs. Alison Wolf",
"time": "2020-03-20T03:20:40.605Z",
"accountID": "MD952135AI41186030592L73",
"dwellTime": "P3Y162DT213H31M",
"muleScore": 0.79,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 10,
"owningBank": "AL02648004258016548450160416",
"generations": [
2
],
"numNetworks": 33,
"endpointFlag": 12602348,
"parentAlertID": "dab2e2bf-e64c-43c7-a758-db2bdc3adff2",
"networkAlertID": 2,
"receivesSalary": true,
"firstAppearance": "2020-02-07T14:36:53.240Z",
"totalValueInbound": 154873,
"mostRecentFeedback": "actionedMule",
"totalValueOutbound": 702775,
"firstTransactionTime": "2020-11-30T11:38:58.185Z",
"mostRecentAppearance": "2019-12-25T03:59:35.558Z",
"numConfirmedNetworks": 91,
"numScheduledMandates": 45,
"sourceTransactionValue": 158997,
"numInboundRelationships": 98,
"numOutboundRelationships": 8,
"mostRecentTransactionTime": "2020-03-26T14:48:10.906Z",
"totalSuspiciousValueInbound": 753755,
"totalSuspiciousValueOutbound": 212131
},
{
"id": "08f11b3c-03fb-4788-8b12-bc5cf1d8ca08",
"name": "Lola Hudson",
"time": "2019-12-27T01:02:03.732Z",
"accountID": "ME06116003807930780020",
"dwellTime": "P2Y110DT101H24M",
"muleScore": 0.28,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"generation": 8,
"owningBank": "XK720018006708502472",
"generations": [
2,
3,
2,
9
],
"numNetworks": 14,
"endpointFlag": 81182264,
"parentAlertID": "91765732-05bf-457e-9ecb-fa5a69759d7c",
"networkAlertID": 2,
"receivesSalary": false,
"firstAppearance": "2020-03-31T18:50:53.796Z",
"totalValueInbound": 722312,
"mostRecentFeedback": "confirmedLegitimate",
"totalValueOutbound": 19633,
"firstTransactionTime": "2020-11-30T01:30:29.389Z",
"mostRecentAppearance": "2020-10-01T13:07:34.969Z",
"numConfirmedNetworks": 93,
"numScheduledMandates": 80,
"sourceTransactionValue": 523447,
"numInboundRelationships": 46,
"numOutboundRelationships": 38,
"mostRecentTransactionTime": "2019-12-23T16:17:32.666Z",
"totalSuspiciousValueInbound": 798100,
"totalSuspiciousValueOutbound": 780178
}
],
"meanDwellTime": "P1Y312DT357H17M",
"meanMuleScore": 0.97,
"numLegitimate": 9,
"parentAlertID": "47ce8fb0-11b1-4f4d-a8f8-7c4977118435",
"sourceTxnType": "impersonationScam",
"uniqueAccounts": 4,
"medianDwellTime": "P3Y104DT318H24M",
"numActionedMules": 19,
"transactionAlerts": [
{
"id": "f238fe3c-a871-4a4a-a39c-77e026d78036",
"time": "2020-09-12T05:48:40.626Z",
"txnID": "a02e08b0-af63-4640-92d1-b78d0c432809",
"value": 684519,
"destID": "MD952135AI41186030592L73",
"avScore": 61,
"service": "fraud",
"txnTime": "2020-02-16T07:30:15.598Z",
"currency": "CAD",
"sourceID": "ME06116003807930780020",
"dwellTime": "P3Y100DT238H27M",
"muleScore": 0.65,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "ROYCAT2",
"generation": 1,
"directDebit": true,
"decisionDate": "2020-01-07T22:30:01.780Z",
"destBankName": "Royal Bank Of Canada",
"sourceBankID": "CITI",
"parentAlertID": "5b278757-26da-4373-8ae4-dafd03730dd4",
"destinationAge": "P243DT209H18M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P2Y342DT121H54M",
"sourceTraceType": "fraud",
"newRelationships": 17,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.96,
"destinationIsBusiness": false,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 14
},
{
"id": "dfaedb24-16fa-4847-9b19-72c86475c0f9",
"time": "2020-10-12T07:15:55.437Z",
"txnID": "b96464d0-7361-43f3-ae90-0ab6b8e5ecf8",
"value": 408591,
"destID": "XK553287001010532847",
"avScore": 7,
"service": "fraud",
"txnTime": "2020-06-11T19:43:40.517Z",
"currency": "NZD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P4Y73DT372H19M",
"muleScore": 0.68,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "CITI",
"generation": 10,
"directDebit": true,
"decisionDate": "2019-12-19T20:52:47.761Z",
"destBankName": "Citibank Canada",
"sourceBankID": "BOFMCAT2",
"parentAlertID": "fb7b5849-8107-44bb-ac19-71fd4c23a849",
"destinationAge": "P358DT136H3M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Bank Of Montreal",
"relationshipAge": "P4Y270DT201H56M",
"sourceTraceType": "fraud",
"newRelationships": 50,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.06,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 39
},
{
"id": "22b98a0d-e4a5-4a56-af1b-1fa342107b42",
"time": "2020-01-13T04:55:12.092Z",
"txnID": "e43dd213-e138-4e76-beb4-50914cc1733b",
"value": 512938,
"destID": "ME06116003807930780020",
"avScore": 46,
"service": "fraud",
"txnTime": "2020-09-22T21:58:59.808Z",
"currency": "NZD",
"sourceID": "SI59005632008001855",
"dwellTime": "P2Y331DT228H24M",
"muleScore": 0.81,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 9,
"directDebit": false,
"decisionDate": "2020-08-10T11:00:25.141Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "HSBC",
"parentAlertID": "c832109c-ef6d-4473-81e9-ed97a656e4ea",
"destinationAge": "P5Y28DT224H3M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P2Y123DT161H24M",
"sourceTraceType": "fraud",
"newRelationships": 95,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.72,
"destinationIsBusiness": true,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 46
},
{
"id": "e29f0c60-1f1c-4b14-9139-149f4eb5ab73",
"time": "2020-09-19T19:32:02.109Z",
"txnID": "87d587d1-2e01-46b7-9ee5-5e2ccf858bfa",
"value": 85202,
"destID": "BG25BZPU7833194199P922",
"avScore": 67,
"service": "fraud",
"txnTime": "2020-03-26T19:51:05.364Z",
"currency": "NZD",
"sourceID": "MD952135AI41186030592L73",
"dwellTime": "P5Y261DT243H27M",
"muleScore": 0.13,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "NOSCAT",
"generation": 3,
"directDebit": false,
"decisionDate": "2020-01-24T05:32:24.905Z",
"destBankName": "The Bank Of Nova Scotia",
"sourceBankID": "CITI",
"parentAlertID": "509c7f00-2752-461e-9042-c97d0bb9749f",
"destinationAge": "P3Y84DT106H2M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P4Y130DT97H1M",
"sourceTraceType": "fraud",
"newRelationships": 26,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.9,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 30
},
{
"id": "244881da-0345-4466-a924-4df0fc53f178",
"time": "2020-09-28T01:40:16.079Z",
"txnID": "a362fa81-e8af-4a79-a56a-95a464159b04",
"value": 235662,
"destID": "SI59005632008001855",
"avScore": 97,
"service": "fraud",
"txnTime": "2020-08-20T04:42:02.437Z",
"currency": "NZD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P1Y162DT179H55M",
"muleScore": 0.96,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 9,
"directDebit": true,
"decisionDate": "2020-04-21T07:56:09.268Z",
"destBankName": "HSBC Canada",
"sourceBankID": "CITI",
"parentAlertID": "f7c2402d-c060-4955-8015-99268db0cbf1",
"destinationAge": "P2Y219DT12H42M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P2Y128DT12H24M",
"sourceTraceType": "fraud",
"newRelationships": 12,
"mostRecentFeedback": "confirmedLegitimate",
"neighbourhoodOverlap": 0.06,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": true,
"destinationReceiveValues": 41
},
{
"id": "e647dd32-25ef-4f7b-91b8-88c9c23103f3",
"time": "2020-03-19T15:25:14.661Z",
"txnID": "04b36f44-7645-4ddf-bfb5-944eebe7a441",
"value": 75443,
"destID": "AT425663710087610847",
"avScore": 37,
"service": "fraud",
"txnTime": "2020-10-03T18:33:38.042Z",
"currency": "USD",
"sourceID": "BG25BZPU7833194199P922",
"dwellTime": "P4Y66DT243H30M",
"muleScore": 0.76,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 1,
"directDebit": true,
"decisionDate": "2020-06-22T13:57:39.566Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "NOSCAT",
"parentAlertID": "500051c8-a28f-4217-a725-3b22346e64b7",
"destinationAge": "P1Y108DT237H23M",
"networkAlertID": 2,
"receivesSalary": false,
"sourceBankName": "The Bank Of Nova Scotia",
"relationshipAge": "P5Y110DT89H45M",
"sourceTraceType": "fraud",
"newRelationships": 61,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.55,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 64
},
{
"id": "8eb43fb0-4d19-4efc-8ada-08ad59ad3394",
"time": "2020-02-14T21:49:38.711Z",
"txnID": "cc020662-12a9-447c-a3d1-c704fd356816",
"value": 722286,
"destID": "ES2665034049906065903367",
"avScore": 38,
"service": "fraud",
"txnTime": "2020-08-11T12:00:45.701Z",
"currency": "CAD",
"sourceID": "ME06116003807930780020",
"dwellTime": "P4Y112DT251H19M",
"muleScore": 0.53,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "HSBC",
"generation": 4,
"directDebit": false,
"decisionDate": "2020-03-21T22:06:19.066Z",
"destBankName": "HSBC Canada",
"sourceBankID": "CITI",
"parentAlertID": "023cfa11-9b73-4bca-a4ef-17a74fe1cb66",
"destinationAge": "P3Y205DT199H16M",
"networkAlertID": 2,
"receivesSalary": true,
"sourceBankName": "Citibank Canada",
"relationshipAge": "P3Y63DT110H5M",
"sourceTraceType": "fraud",
"newRelationships": 7,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.48,
"destinationIsBusiness": true,
"destinationAccountStatus": "confirmedLegitimate",
"destinationNetworkStatus": false,
"destinationReceiveValues": 94
},
{
"id": "817d514c-78a9-4736-9b62-c176f729f4da",
"time": "2020-03-10T05:31:03.355Z",
"txnID": "fad94d99-8537-41b0-a51a-8d05b9edb610",
"value": 915238,
"destID": "ME06116003807930780020",
"avScore": 61,
"service": "fraud",
"txnTime": "2020-07-09T10:04:40.708Z",
"currency": "USD",
"sourceID": "SI59005632008001855",
"dwellTime": "P337DT387H9M",
"muleScore": 0.68,
"networkID": "07156c5f-735f-4afc-b7bd-04d647c2154e",
"remitInfo": "fraud",
"destBankID": "BOFMCAT2",
"generation": 4,
"directDebit": true,
"decisionDate": "2020-06-02T06:36:02.673Z",
"destBankName": "Bank Of Montreal",
"sourceBankID": "HSBC",
"parentAlertID": "5b8256ae-39d2-4eb2-bbde-0829af13b2f1",
"destinationAge": "P3Y320DT236H50M",
"networkAlertID": 2,
"receivesSalary": true,
"sourceBankName": "HSBC Canada",
"relationshipAge": "P1Y344DT3H50M",
"sourceTraceType": "fraud",
"newRelationships": 5,
"mostRecentFeedback": "actionedMule",
"neighbourhoodOverlap": 0.42,
"destinationIsBusiness": false,
"destinationAccountStatus": "actionedMule",
"destinationNetworkStatus": false,
"destinationReceiveValues": 7
}
],
"mostRecentFeedback": "actionedMule",
"numNotInvestigated": 77
}]
}
create-sample-workflow.sh
#!/bin/sh
curl -vX POST http://<HOST:PORT>/v1/workflows --header "Content-Type: application/json" --header "USERID: system" --header "ROLES: CMS_CONFIG_ADMIN" --header "TENANTKEY: MASTERCARD" -d @<workflow_filename.json>
Sample Workflow
{
"tenantKey": "MASTERCARD",
"caseType": "aml",
"description": "Basic CORE case workflow",
"logTopic": "test-log",
"errorTopic": "test-error",
"transitions": [
{
"onState": "alert",
"routes": [
{
"actions": [
{
"actionName": "create-case",
"actionType": "user",
"resultStates": [
"open",
"closed",
"pending",
"review"
]
}
],
"description": "User action on alert",
"messageType": "state-transition"
}
]
},
{
"onState": "closed",
"routes": [
{
"actions": [
{
"actionName": "reopen-case",
"actionType": "user",
"resultStates": [
"open"
]
}
],
"description": "User action on closed case",
"messageType": "state-transition"
}
]
},
{
"onState": "in",
"routes": [
{
"actions": [
{
"state": "alert",
"actionName": "create-case",
"actionType": "service",
"resultStates": [
"alert"
]
}
],
"description": "User action on transaction",
"messageType": "state-transition"
},
{
"actions": [
{
"actionName": "submit-trace-request",
"actionType": "service"
}
],
"description": "submit trace request",
"messageType": "submit-trace-request"
},
{
"actions": [
{
"state": "open",
"caseType": "aml",
"priority": "Medium",
"tenantKey": "MASTERCARD",
"actionName": "create-case",
"actionType": "service",
"resultStates": [
"open"
]
}
],
"conditions": [
{
"op": "gt",
"left": "properties.meanMuleScore",
"right": 0.1,
"conditionType": "message"
}
],
"description": "create case based on the trace response",
"messageType": "process-trace-response"
},
{
"actions": [
{
"state": "dismissed",
"caseType": "aml",
"priority": "Medium",
"tenantKey": "MASTERCARD",
"actionName": "create-case",
"actionType": "service",
"resultStates": [
"dismissed"
]
}
],
"conditions": [
{
"op": "le",
"left": "properties.meanMuleScore",
"right": 0.1,
"conditionType": "message"
}
],
"description": "create case with status of dismissed based on the trace response",
"messageType": "process-trace-response"
},
{
"actions": [
{
"state": "open",
"caseType": "aml",
"priority": "Medium",
"tenantKey": "MASTERCARD",
"actionName": "create-case",
"actionType": "service",
"resultStates": [
"open"
]
}
],
"conditions": [
{
"op": "gt",
"left": "properties.meanMuleScore",
"right": 0.3,
"conditionType": "message"
}
],
"description": "create case based on the network alert",
"messageType": "process-alert-response"
},
{
"actions": [
{
"state": "dismissed",
"caseType": "aml",
"priority": "Medium",
"tenantKey": "MASTERCARD",
"actionName": "create-case",
"actionType": "service",
"resultStates": [
"dismissed"
]
}
],
"conditions": [
{
"op": "le",
"left": "properties.meanMuleScore",
"right": 0.3,
"conditionType": "message"
}
],
"description": "create case with status of dismissed based on the network alert",
"messageType": "process-alert-response"
}
]
},
{
"onState": "open",
"routes": [
{
"actions": [
{
"actionName": "link-cases",
"actionType": "service",
"linkCasesQuery": "case_status_name:[\"open\",\"pending\",\"review\"];tenant_key:<--$.tenantKey-->;case_type_name:<--$.caseTypeName-->;(event.prop.destID:<--$.seedEvent.eventJson.destID-->|event.prop.destID:<--$.seedEvent.eventJson.sourceID-->|event.prop.sourceID:<--$.seedEvent.eventJson.sourceID-->|event.prop.sourceID:<--$.seedEvent.eventJson.destID-->|event.prop.destID:[<--$.attachedEvents[*].eventJson.destID-->]|event.prop.destID:[<--$.attachedEvents[*].eventJson.sourceID-->]|event.prop.sourceID:[<--$.attachedEvents[*].eventJson.destID-->]|event.prop.sourceID:[<--$.attachedEvents[*].eventJson.sourceID-->])"
},
{
"actionName": "cms-attach-network-image",
"actionType": "service"
}
],
"description": "Link case and download dispersion network image when case opened",
"messageType": "state-transition"
}
]
},
{
"onState": "pending",
"routes": [
{
"actions": [
{
"actionName": "change-status",
"actionType": "user",
"resultStates": [
"review",
"closed"
]
},
{
"actionName": "link-cases",
"actionType": "service",
"linkCasesQuery": "case_status_name:[\"open\",\"pending\",\"review\"];tenant_key:<--$.tenantKey-->;case_type_name:<--$.caseTypeName-->;(prop.parentAlertID:<--$.properties.parentAlertID-->|prop.sourceTxnID:<--$.properties.sourceTxnID-->)"
},
{
"actionName": "cms-attach-network-image",
"actionType": "service"
}
],
"description": "Link case and download dispersion network image when case pending",
"messageType": "state-transition"
}
]
},
{
"onState": "review",
"routes": [
{
"actions": [
{
"actionName": "change-status",
"actionType": "user",
"resultStates": [
"pending",
"closed",
"dismissed"
]
}
],
"description": "User action on case",
"messageType": "state-transition"
}
]
}
]
}
seed-default-config.sh
#!/bin/bash
curl -vX POST http://<HOST:PORT>/modules/default --header "Content-Type: application/json" --header "USERID: system" --header "ROLES: CMS_CONFIG_ADMIN" --header "TENANTKEY: MASTERCARD" -d @<config_filename.json>
Sample Configuration
{
"alerts": {
"table": {
"defaultSort": [
{
"id": "id",
"desc": true
}
],
"quickFilters": [
{}
],
"visibleColumns": [
{
"key": "alertId",
"accessor": "id"
},
{
"key": "merchant",
"accessor": "seedEvent.eventJson.merchant"
},
{
"key": "caseTypeName",
"title": "Source Trace Type",
"accessor": "caseTypeName"
},
{
"key": "meanMuleScore",
"accessor": "properties.meanMuleScore"
},
{
"key": "alertTransDate",
"title": "Source Txn Date",
"accessor": "seedEvent.eventJson.transDate"
},
{
"key": "sourceValue",
"title": "Source Value",
"accessor": "properties.sourceValue"
},
{
"key": "networkValue",
"accessor": "properties.totalValue"
},
{
"key": "elapsedTime",
"accessor": "properties.elapsedTime"
},
{
"key": "generations",
"title": "Gens",
"accessor": "properties.generations"
},
{
"key": "networkID",
"accessor": "seedEvent.eventJson.networkID"
}
]
}
},
"shared": {
"_accountIDToUse": "eventJson.accountID",
"_apiValueMapping": {
"feedback": {
"title": "Feedback",
"options": {
"": "Needs Feedback",
"actionedMule": "Actioned Mule",
"confirmedLegitimate": "Confirmed Legitimate"
},
"defaultText": "Add Feedback",
"valuePresentText": "Provided"
},
"assessment": {
"title": "Assessment",
"options": {
"": "Not Resolved",
"fraudulent": "Fraudulent",
"notFraudulent": "Not Fraud"
},
"defaultText": "Not Resolved",
"valuePresentText": "Resolved"
},
"accountAlert": {
"title": "Account"
},
"transactionAlert": {
"title": "Transaction"
}
},
"_transactionIDToUse": "eventJson.txnID"
},
"mainNav": {
"availableTabs": [
{
"route": "/cms/dashboard",
"displayName": "Dashboard"
},
{
"route": "/cms/core/cases",
"displayName": "Cases"
},
{
"route": "/cms/core/alerts",
"displayName": "Alerts"
},
{
"route": "/cms/aml",
"displayName": "Trace Request"
}
]
},
"caseTypes": [
{
"key": "aml",
"title": "AML test"
},
{
"key": "fraud",
"title": "FRAUD"
}
],
"dashboard": {
"availableDashlets": [
{
"label": "Summary Tile",
"width": 2,
"height": 2,
"minWidth": 2,
"minHeight": 2,
"tooltip": "Display a total count for a selection and create a shortcut link",
"description": "Display the total count for your summary type selection and create a shortcut link.",
"chartType": "summary",
"dashletId": "summaryTiles",
"dashletType": "General Dashlets"
},
{
"label": "Average Time To Close Cases",
"width": 4,
"height": 2,
"tooltip": "Display the average time to close cases over a time frame",
"description": "Display the average time to close all cases or build a chart showing the average time to close cases by the priority level set at the time the case closed.",
"minWidth": 4,
"chartType": "barHorizontal",
"dashletId": "avgTimeToClose",
"dashletType": "General Dashlets"
},
{
"label": "Mule Score Distribution",
"width": 6,
"height": 4,
"tooltip": "Chart showing the distribution of mule scores",
"description": "Build a chart showing the distribution of mule scores over time.",
"minWidth": 6,
"chartType": "bar",
"dashletId": "muleScoreDistribution",
"dashletType": "AML Dashlets"
},
{
"label": "Average Alert Statistics",
"width": 4,
"height": 3,
"tooltip": "Display statistics for account and transaction alerts",
"description": "Display average mule score, confirmed networks, and dwell time statistics for account and transaction alerts over a time frame.",
"minWidth": 4,
"chartType": "statistics",
"dashletId": "avgAlertStatistics",
"dashletType": "AML Dashlets"
},
{
"label": "Case Age By Status",
"width": 5,
"height": 3,
"tooltip": "Build a chart showing the number of your cases in a time frame for each of the selected statuses.",
"minWidth": 5,
"minHeight": 3,
"chartType": "bar",
"dashletId": "caseAgeByStatus",
"dashletType": "General Dashlets"
}
],
"dashletDictionary": {
"caseAgeByStatus": {
"enableTitleBar": true,
"singleQuery": {
"measures": [
"CaseAgeByStatus.count"
],
"dimensions": [
"CaseAgeByStatus.caseStatusName"
],
"filters": [
{
"values": [
"closed",
"open"
],
"operator": "equals",
"dimension": "CaseAgeByStatus.caseStatusName"
},
{
"dimension": "CaseAgeByStatus.caseTypeName",
"operator": "equals",
"values": []
}
],
"timeDimensions": [
{
"dimension": "CaseAgeByStatus.createdAt",
"compareDateRange": [],
"granularity": null
}
],
"order": {
"CaseAgeByStatus.caseStatusName": "asc"
}
},
"settingsFields": [
{
"label": "Case Type",
"options": [
{
"label": "aml",
"value": "aml"
}
],
"fieldName": "caseType",
"fieldType": "select",
"filterDimension": [
"CaseAgeByStatus.caseTypeName"
]
},
{
"label": "Title",
"fieldName": "title",
"fieldType": "input"
},
{
"label": "Time Range (max 3)",
"fieldName": "timeRange",
"fieldType": "dateRanges",
"options": "dateRangesUnits",
"compareDateRange": true,
"timeDimension": "CaseAgeByStatus.createdAt"
},
{
"label": "Case Status",
"fieldName": "caseStatuses",
"fieldType": "serverSideSelect",
"apiEndpoint": "case-statuses",
"filterDimension": [
"CaseAgeByStatus.caseStatusName"
]
}
]
},
"avgAlertStatistics": {
"enableTitleBar": true,
"enableTimeFrameSelector": true,
"settingsFields": [
{
"label": "Title",
"fieldName": "title",
"fieldType": "input"
},
{
"label": "Default time frame",
"options": "timeFrames",
"fieldName": "defaultTimeFrame",
"fieldType": "select",
"timeDimension": [
"AvgAlertStats.createdAt"
]
}
],
"singleQuery": {
"measures": [
"AvgAlertStats.avgAMAccountMuleScore",
"AvgAlertStats.avgAMAccountConfirmedNetworks",
"AvgAlertStats.avgAMTransactionMuleScore",
"AvgAlertStats.avgAMTransactionConfirmedNetworks",
"AvgAlertStats.avgAMAccountDwellTime",
"AvgAlertStats.avgAMTransactionDwellTime",
"AvgAlertStats.avgLegitAccountMuleScore",
"AvgAlertStats.avgLegitAccountConfirmedNetworks",
"AvgAlertStats.avgLegitTransactionMuleScore",
"AvgAlertStats.avgLegitTransactionConfirmedNetworks",
"AvgAlertStats.avgLegitTransactionDwellTime",
"AvgAlertStats.avgLegitAccountDwellTime"
],
"timeDimensions": [
{
"dimension": "AvgAlertStats.createdAt"
}
],
"order": {},
"dimensions": [],
"filters": []
}
},
"muleScoreDistribution": {
"drillDownChartBucketSize": 0.02,
"enableTitleBar": true,
"enableTimeFrameSelector": true,
"singleQuery": {
"measures": [
"MuleScoreDistribution.count"
],
"timeDimensions": [
{
"dimension": "MuleScoreDistribution.createdAt"
}
],
"order": {
"MuleScoreDistribution.muleScoreTier": "desc"
},
"dimensions": [
"MuleScoreDistribution.muleScoreTier"
],
"filters": []
},
"settingsFields": [
{
"label": "Title",
"fieldName": "title",
"fieldType": "input"
},
{
"label": "Default time frame",
"options": "timeFrames",
"fieldName": "defaultTimeFrame",
"fieldType": "select",
"timeDimension": [
"MuleScoreDistribution.createdAt"
]
}
]
},
"summaryTiles": {
"queries": {
"newCases": {
"order": {},
"filters": [
{
"values": [],
"operator": "equals",
"dimension": "NewCases.caseType"
},
{
"values": [
"$currentTenant"
],
"operator": "equals",
"dimension": "NewCases.tenant"
}
],
"measures": [
"NewCases.count"
],
"timeDimensions": []
},
"openCases": {
"order": {},
"filters": [
{
"values": [],
"operator": "equals",
"dimension": "CmsCase.caseTypeName"
},
{
"values": [
"closed",
"alert",
"dismissed"
],
"operator": "notEquals",
"dimension": "CmsCase.caseStatusName"
},
{
"values": [
"$currentUser"
],
"operator": "equals",
"dimension": "CmsCase.assignee"
}
],
"measures": [
"CmsCase.count"
],
"timeDimensions": []
},
"updatedCases": {
"order": {},
"filters": [
{
"values": [],
"operator": "equals",
"dimension": "UpdatedCases.caseType"
},
{
"values": [
"$currentUser"
],
"operator": "equals",
"dimension": "UpdatedCases.assignee"
}
],
"measures": [
"UpdatedCases.count"
],
"timeDimensions": []
}
},
"settingsFields": [
{
"label": "Case Type",
"options": [
{
"label": "aml",
"value": "aml"
},
{
"label": "fraud",
"value": "fraud"
}
],
"fieldName": "caseType",
"fieldType": "select",
"filterDimension": [
"CmsCase.caseTypeName",
"NewCases.caseType",
"UpdatedCases.caseType"
]
},
{
"label": "Summary Type",
"options": [
{
"label": "My Open Cases",
"value": "openCases"
},
{
"label": "New Cases",
"value": "newCases"
},
{
"label": "My Updated Cases",
"value": "updatedCases"
}
],
"fieldName": "queryType",
"fieldType": "select"
},
{
"label": "Title",
"fieldName": "title",
"fieldType": "input"
}
]
},
"avgTimeToClose": {
"singleQuery": {
"order": {
"ClosedCases.priority_sort": "desc"
},
"filters": [
{
"values": [
"aml"
],
"operator": "equals",
"dimension": "ClosedCases.caseType"
}
],
"measures": [
"ClosedCases.averageTime"
],
"dimensions": [
"ClosedCases.priority",
"ClosedCases.priority_sort"
],
"timeDimensions": [
{
"dimension": "ClosedCases.closed"
}
]
},
"enableTitleBar": true,
"settingsFields": [
{
"label": "Case Type",
"options": [
{
"label": "aml",
"value": "aml"
},
{
"label": "fraud",
"value": "fraud"
}
],
"fieldName": "caseType",
"fieldType": "select",
"filterDimension": [
"ClosedCases.caseType"
]
},
{
"label": "Title",
"fieldName": "title",
"fieldType": "input"
},
{
"label": "Default time frame",
"options": "timeFrames",
"fieldName": "defaultTimeFrame",
"fieldType": "select",
"timeDimension": [
"ClosedCases.closed"
]
}
],
"enableTimeFrameSelector": true
}
},
"commonFieldOptions": {
"timeFrames": [
{
"label": "Past week",
"value": "from 6 days ago to now"
},
{
"label": "Past 2 weeks",
"value": "from 13 days ago to now"
},
{
"label": "Past 30 days",
"value": "from 29 days ago to now"
},
{
"label": "Past 3 months",
"value": "from 89 days ago to now"
},
{
"label": "Past 6 months",
"value": "from 179 days ago to now"
},
{
"label": "Past year",
"value": "from 364 days ago to now"
},
{
"label": "Past 18 months",
"value": "from 540 days ago to now"
}
],
"dateRangesUnits": [
{
"label": "Days",
"value": "days"
},
{
"label": "Weeks",
"value": "weeks"
},
{
"label": "Months",
"value": "months"
},
{
"label": "Years",
"value": "years"
}
]
}
},
"mapValues": {
"users": {
"mapTo": "userMappedId",
"fields": [
"assignee",
"closedBy",
"createdBy",
"createdBy",
"modifiedBy",
"closedAssignee",
"changedBy"
]
}
},
"apiOptions": {
"feedback": [
{
"title": "Needs Feedback",
"apiValue": ""
},
{
"title": "Confirmed Legitimate",
"apiValue": "confirmedLegitimate"
},
{
"title": "Actioned Mule",
"apiValue": "actionedMule"
}
]
},
"navigation": {},
"traceRequest": {
"traceRequestUpload": {
"columns": [
{
"key": "transactionId",
"title": "Transaction Id",
"fieldType": "string",
"acceptableHeaders": [
"txnId",
"test",
"transactionId",
"abc"
]
},
{
"key": "traceType",
"title": "Trace Type",
"fieldType": "string",
"acceptableHeaders": [
"testing",
"traceType",
"Fraud",
"Scam",
"Other"
]
}
],
"maxFileSize": 10000000,
"fileTypeOptions": "csv, xls, xlsx"
}
},
"caseManagement": {
"caseList": {
"openCases": {
"table": {
"defaultSort": [
{
"id": "attributes.meanMuleScore",
"desc": true
}
],
"quickFilters": [
{
"id": "Unassigned",
"options": {
"conditional": "eq",
"fieldToMatch": "assignee",
"valueToMatch": null
}
},
{
"id": "Assigned",
"options": {
"conditional": "neq",
"fieldToMatch": "assignee",
"valueToMatch": null
}
},
{
"id": "My Cases",
"options": {
"isDefault": true,
"conditional": "eq",
"fieldToMatch": "_original.assignee",
"valueToMatch": "currentUser"
}
}
],
"defaultGroupBy": [
"id"
],
"visibleColumns": [
{
"key": "lifeCycle",
"accessor": "attributes.lifeCycle",
"notFilterable": true
},
{
"key": "caseId",
"accessor": "id",
"visual": "link",
"visualOptions": {
"to": "/cases/$0"
}
},
{
"key": "amount",
"accessor": "seedEvent.eventJson.transAmount"
},
"createdAt",
"caseStatusName",
{
"key": "meanMuleScore",
"accessor": "properties.meanMuleScore"
},
{
"key": "transDate",
"title": "Source Trx Date",
"accessor": "seedEvent.eventJson.transDate"
},
{
"key": "sourceValue",
"accessor": "properties.sourceValue"
},
{
"key": "networkValue",
"accessor": "properties.totalValue"
},
{
"key": "elapsedTime",
"accessor": "attributes.elapsedTime"
},
{
"key": "dwellTime",
"accessor": "attributes.dwellTime"
},
{
"key": "generations",
"title": "Gens",
"accessor": "attributes.generations"
},
{
"key": "sourceTraceType",
"accessor": "caseTypeName"
},
"assignee",
{
"key": "netw",
"accessor": "netw"
}
]
}
},
"closedCases": {
"table": {
"defaultSort": [
{
"id": "modifiedAt",
"desc": true
}
],
"quickFilters": [
{
"id": "Last 30 Days",
"options": {
"dataType": "date",
"conditional": "gt",
"fieldToMatch": "modifiedAt",
"valueToMatch": -30
}
},
{
"id": "Last 90 Days",
"options": {
"dataType": "date",
"conditional": "gt",
"fieldToMatch": "modifiedAt",
"valueToMatch": -90
}
},
{
"id": "My Cases",
"options": {
"isDefault": true,
"conditional": "eq",
"fieldToMatch": "_original.assignee",
"valueToMatch": "currentUser"
}
}
],
"visibleColumns": [
{
"key": "lifeCycle",
"accessor": "attributes.lifeCycle",
"notFilterable": true
},
{
"key": "caseId",
"accessor": "id"
},
"modifiedBy",
"modifiedAt",
{
"key": "meanMuleScore",
"accessor": "attributes.meanMuleScore"
},
{
"key": "sourceTraceType",
"accessor": "caseTypeName"
},
{
"key": "transDate",
"title": "Source Trx Date",
"accessor": "seedEvent.eventJson.transDate"
},
{
"key": "networkValue",
"accessor": "properties.totalValue"
},
{
"key": "sourceValue",
"accessor": "attributes.sourceValue"
},
{
"key": "elapsedTime",
"accessor": "attributes.elapsedTime"
},
{
"key": "generations",
"title": "Gens",
"accessor": "attributes.generations"
},
{
"key": "closedAssignee",
"accessor": "assignee"
},
{
"key": "netw",
"accessor": "netw"
},
{
"title": "Case Priority",
"visual": "priority",
"accessor": "casePriorityName",
"dataType": "text"
}
]
}
}
},
"caseName": {
"plural": "Cases",
"singular": "Case"
},
"alertName": {
"plural": "Alerts",
"singular": "Alert"
},
"caseDetails": {
"aml": {
"tabs": [
{
"title": "Investigate",
"component": "investigate"
},
{
"title": "Case Activity",
"component": "activity"
},
{
"title": "Attached Files",
"component": "attachments"
}
],
"summary": {
"orientation": "vertical",
"visibleColumns": [
{
"key": "networkCreationTime",
"accessor": "seedEvent.createdAt"
},
{
"key": "meanMuleScore",
"accessor": "properties.meanMuleScore"
},
{
"key": "sourceValue",
"accessor": "properties.sourceValue"
},
{
"key": "sourceTxnType",
"accessor": "properties.sourceTxnType"
},
{
"key": "networkValue",
"accessor": "properties.totalValue"
},
{
"key": "generations",
"accessor": "properties.generations"
},
{
"key": "elapsedTime",
"accessor": "properties.elapsedTime"
}
]
},
"caseTitle": {
"prefix": "Case ID:",
"accessor": "id"
},
"taskNames": [
"Analyze dispersion network",
"Investigate own bank's suspicious account and transaction alerts",
"Investigate related cases",
"Submit feedback"
],
"linkedCases": {
"table": {
"visibleColumns": [
{
"key": "caseId",
"accessor": "caseId"
},
{
"title": "Case Priority",
"visual": "priority",
"accessor": "casePriorityName",
"dataType": "text"
},
{
"key": "createdAt",
"title": "Case Created",
"visual": "date",
"accessor": "createdAt",
"dataType": "date"
},
{
"title": "Last Modified",
"visual": "date",
"accessor": "modifiedAt",
"dataType": "date"
},
{
"key": "caseStatusName",
"accessor": "caseStatusName"
},
{
"key": "caseResolutionName",
"accessor": "caseResolutionName"
},
"assignee",
{
"key": "accounts",
"title": "Account ID",
"accessor": "accounts",
"dataType": "text"
}
]
},
"keyMap": {
"accounts": [
"destID",
"sourceID"
]
},
"linkOn": "accounts",
"splitView": {
"summary": {
"visibleColumns": [
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
},
"additionalDetails": {
"type": "accounts",
"additionalInfo": {
"visibleColumns": [
"txnTime",
{
"title": "Transaction ID",
"accessor": "id",
"truncate": true
},
"value",
"generation",
"muleScore",
"feedback"
]
},
"visibleColumns": [
"muleScore",
"generation"
]
}
},
"defaultGroupBy": [
"accounts"
]
},
"statusNames": [
"pending",
"review"
],
"accountDetails": {
"event": [
"sourceBankID",
"destBankID",
"sourceBankName",
"destBankName",
"sourceID",
"destID",
"mostRecentFeedback",
"decisionDate"
],
"operation": "arrayIncludes",
"dataToRender": [
{
"fieldToMatch": "_event.sourceID",
"defaultColumns": [
{
"title": "Source Acct ID",
"accessor": "_event.sourceID",
"truncate": true
},
{
"key": "sourceBankName",
"accessor": "_event.sourceBankName"
},
{
"key": "sourceBankID",
"accessor": "_event.sourceBankID"
},
"muleScore",
"dwellTime"
],
"conditionalColumns": {
"operation": "arrayIncludes",
"fieldToMatch": "_user.bankIds",
"valueToMatch": "_event.sourceBankID",
"matchedColumns": [
"myFeedback",
"priorFeedback",
"name",
"networkAlertID",
"networkGenerations",
"numNetworks"
]
}
},
{
"fieldToMatch": "_event.destID",
"defaultColumns": [
{
"title": "Dest Acct ID",
"accessor": "_event.destID",
"truncate": true
},
{
"key": "destBankName",
"accessor": "_event.destBankName"
},
{
"key": "destBankID",
"accessor": "_event.destBankID"
}
],
"conditionalColumns": {
"operation": "arrayIncludes",
"fieldToMatch": "_user.bankIds",
"valueToMatch": "_event.destBankID",
"matchedColumns": [
"myFeedback",
"priorFeedback",
"name",
"dwellTime",
"muleScore",
"networkAlertID",
"networkGenerations",
"numNetworks"
]
}
}
],
"valueToMatch": "eventJson.accountID",
"fieldsToMatch": [
"_event.sourceID",
"_event.destID"
],
"showLinkedMsg": true,
"attachedEventType": "account"
},
"linkedCasesSort": {
"defaultSort": [
{
"id": "id",
"desc": false
}
]
},
"transactionSort": {
"defaultSort": [
{
"id": "transDate",
"desc": true
}
]
},
"closeRequirements": {
"task": {
"plural": {
"prefix": " complete ",
"postfix": " required tasks"
},
"singular": {
"prefix": " complete ",
"postfix": " required task"
}
},
"feedback": {
"plural": {
"prefix": "provide feedback for "
},
"singular": {
"prefix": "provide feedback for "
},
"eventProperty": "eventAttributes.feedback.feedback",
"eventTypesToCheck": [
{
"type": "transaction",
"plural": "transactions",
"singular": "transaction"
},
{
"type": "account",
"plural": "accounts",
"singular": "account"
}
]
},
"feedbackAccounts": true,
"feedbackTransactions": true
},
"dispersionNetwork": {
"summary": [
{
"key": "networkID",
"accessor": "properties.networkID"
},
{
"key": "lastAlertAdded",
"accessor": "properties.time"
},
{
"key": "meanDwellTime",
"accessor": "properties.meanDwellTime"
},
{
"key": "uniqueAccounts",
"accessor": "properties.uniqueAccounts"
},
{
"key": "numConfirmedMules",
"accessor": "properties.numConfirmedMules"
},
{
"key": "sourceTxnID",
"accessor": "properties.foo"
},
{
"key": "length",
"accessor": "properties.length"
},
{
"key": "medianDwellTime",
"accessor": "properties.medianDwellTime"
},
{
"key": "numNotInvestigated",
"accessor": "properties.numNotInvestigated"
},
{
"key": "numLegitimate",
"accessor": "properties.numLegitimate"
}
]
},
"investigateSubtabs": [
{
"key": "transactions",
"title": "Trace Transactions"
},
"linkedCases"
],
"transactionColumns": {
"fields": [
"destBankID",
"sourceBankID",
"mostRecentFeedback",
"decisionDate"
],
"visibleColumns": [
{
"key": "networkID",
"accessor": "networkID"
},
"networkAlertID",
{
"key": "accountAlertID",
"accessor": "id"
},
"txnID",
"transDate",
"generation",
"value",
{
"key": "muleScore",
"title": "Mule Score",
"accessor": "muleScore"
},
"sourceID",
"destID",
"dwellTime",
"sourceBankName",
"destBankName",
"remitInfo",
"feedback"
]
},
"transactionDetails": {
"summary": {
"show": [
"myFeedback",
"priorFeedback",
"txnID"
],
"fields": [
"mostRecentFeedback",
"decisionDate"
]
},
"showAccounts": true,
"splitViewHeaderTitle": "Transaction Details",
"showAdditionalDetails": false
},
"transactionTableTitle": "Traced Transactions",
"transactionQuickFilters": {
"myBank": {
"logic": "",
"title": "My Bank"
}
},
"linkedCasesSplitViewContent": {
"visibleFields": [
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
},
"transactionTableQuickFilters": [
{
"id": "My Bank",
"options": {
"conditional": "arrayIncludes",
"fieldToMatch": [
"destBankID",
"sourceBankID"
],
"valueToMatch": "myBankId"
}
},
{
"id": "Needs Feedback",
"options": {
"conditional": "eq",
"fieldToMatch": "feedback",
"valueToMatch": "_apiValueMapping.feedback.defaultText"
}
}
],
"transactionTableDataOverrides": [
"destBankName",
"sourceBankName"
],
"linkedCasesSplitViewAdditionalDetails": {}
},
"fraud": {
"summary": {
"orientation": "horizontal",
"visibleColumns": [
"caseTypeName",
{
"key": "createdAt",
"accessor": "seedEvent.createdAt"
},
{
"key": "meanMuleScore",
"accessor": "properties.meanMuleScore"
},
{
"key": "customer",
"accessor": "seedEvent.eventJson.customer"
},
{
"key": "amount",
"accessor": "seedEvent.eventJson.transAmount"
},
"modifiedAt",
{
"key": "elapsedTime",
"accessor": "properties.elapsedTime"
}
]
},
"caseTitle": {
"prefix": "Case:",
"accessor": "id"
},
"taskNames": [
"Contact Customer",
"Search Merchant Transactions"
],
"linkedCases": {
"table": {
"visibleColumns": [
{
"key": "caseId",
"accessor": "id"
},
{
"title": "Priority",
"visual": "priority",
"accessor": "casePriorityName",
"dataType": "string"
},
{
"key": "createdAt",
"accessor": "seedEvent.createdAt",
"dataType": "datetime"
},
"assignee"
]
},
"keyMap": {},
"linkOn": "",
"splitView": {
"summary": {
"visibleColumns": [
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
},
"additionalDetails": {
"type": "moreInfo",
"title": "Information for Commonality",
"visibleColumns": [
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
}
},
"defaultGroupBy": []
},
"statusNames": [
"in process",
"waiting for documents"
],
"linkedCasesSort": {
"defaultSort": [
{
"id": "id",
"desc": true
},
{
"id": "seedEvent.createdAt",
"desc": false
}
]
},
"transactionSort": {
"defaultSort": [
{
"id": "transId",
"desc": false
},
{
"id": "score",
"desc": true
}
]
},
"closeRequirements": {
"task": {
"plural": {
"prefix": " complete ",
"postfix": " required tasks"
},
"singular": {
"prefix": " complete ",
"postfix": " required task"
}
},
"assessment": {
"plural": {
"prefix": "assess"
},
"singular": {
"prefix": "assess "
},
"eventProperty": "eventAttributes.assessment.assessment",
"eventTypesToCheck": [
{
"type": "transaction",
"plural": "assessments",
"singular": "assessment"
}
]
},
"assessmentTransactions": true
},
"investigateSubtabs": [
{
"key": "transactions",
"title": "TRANSACTIONS"
},
"linkedCases"
],
"linkedCasesColumns": {
"visibleColumns": [
{
"key": "caseId",
"accessor": "id"
},
{
"title": "Priority",
"visual": "priority",
"accessor": "casePriorityName",
"dataType": "string"
},
{
"key": "createdAt",
"accessor": "seedEvent.createdAt",
"dataType": "datetime"
},
"assignee"
]
},
"transactionColumns": {
"fields": [
"destBankID",
"sourceBankID"
],
"visibleColumns": [
"sourceID",
"score",
"destID",
"dwellTime",
"sourceBankName",
"destBankName",
"assessment"
]
},
"transactionDetails": {
"summary": {
"show": [
"transDate",
{
"key": "merchant",
"title": "Test Merchant Title"
},
{
"key": "customer",
"title": "customer"
},
"transAmount"
]
},
"showAccounts": true,
"showAdditionalDetails": true
},
"transactionTableTitle": "Transactions",
"transactionQuickFilters": {
"myBank": {
"logic": "",
"title": "My Bank"
}
},
"linkedCasesSplitViewContent": {
"visibleFields": [
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
},
"transactionTableQuickFilters": [
{
"id": "Needs Assessment",
"options": {
"conditional": "eq",
"fieldToMatch": "assessment",
"valueToMatch": "_apiValueMapping.assessment.defaultText"
}
}
],
"linkedCasesSplitViewAdditionalDetails": {
"title": "Information for Commonality",
"visibleFields": [
{
"title": "Status",
"accessor": "caseStatusName"
},
{
"title": "Case Created",
"visual": "date",
"accessor": "createdAt"
},
{
"title": "Case Modified",
"visual": "date",
"accessor": "modifiedAt"
},
{
"title": "Assignee",
"accessor": "assignee"
}
]
}
}
},
"columnDictionary": {
"netw": {
"title": "Network ID",
"accessor": "netw",
"dataType": "number"
},
"score": {
"title": "Mule Score",
"visual": "progressbar",
"accessor": "score",
"dataType": "number",
"visualOptions": {
"midRangeMax": 0.8,
"midRangeMin": 0.2
}
},
"txnID": {
"title": "Tran #",
"accessor": "txnID",
"truncate": true
},
"value": {
"title": "Amount (NZD)",
"visual": "currency",
"accessor": "value",
"dataType": "number"
},
"amount": {
"title": "Amount",
"visual": "currency",
"accessor": "amount",
"dataType": "number"
},
"caseId": {
"title": "Case ID",
"dataType": "number"
},
"destID": {
"title": "Dest Account",
"dataType": "text",
"truncate": true
},
"length": {
"title": "Length",
"dataType": "number"
},
"status": {
"title": "Status"
},
"alertId": {
"title": "Alert ID",
"dataType": "number"
},
"transId": {
"title": "Tran #",
"accessor": "txnID",
"truncate": true
},
"txnTime": {
"title": "Transaction Time",
"visual": "datetime",
"dataType": "datetime"
},
"assignee": {
"title": "Assigned To",
"dataType": "username",
"maxWidth": 220
},
"caseType": {
"title": "Case Type"
},
"closedBy": {
"title": "Closed By",
"dataType": "username",
"maxWidth": 220
},
"customer": {
"title": "Customer"
},
"feedback": {
"title": "Overall Feedback",
"visual": "feedback",
"accessor": "feedback",
"dataType": "text",
"maxWidth": 135,
"minWidth": 135,
"visualOptions": {
"options": [
{
"key": "txnID",
"date": "decisionDate",
"label": "Feedback",
"title": "Transaction ID",
"options": [
"",
"actionedMule",
"confirmedLegitimate"
],
"alertType": "transactionAlert",
"alwaysInclude": true,
"feedbackSearchKey": "txnID",
"selectedOptionKey": "feedback",
"selectedOptionConfig": {
"title": "eventAttributes.feedback.selectedTitle",
"value": "eventAttributes.feedback.feedback"
}
},
{
"key": "sourceID",
"date": "decisionDate",
"label": "Feedback",
"title": "Source Account",
"options": [
"",
"actionedMule",
"confirmedLegitimate"
],
"alertType": "accountAlert",
"contextKey": "sourceBankID",
"feedbackSearchKey": "accountID",
"selectedOptionConfig": {
"title": "eventAttributes.feedback.selectedTitle",
"value": "eventAttributes.feedback.feedback"
}
},
{
"key": "destID",
"date": "decisionDate",
"label": "Feedback",
"title": "Destination Account",
"options": [
"",
"actionedMule",
"confirmedLegitimate"
],
"alertType": "accountAlert",
"contextKey": "destBankID",
"feedbackSearchKey": "accountID",
"selectedOptionConfig": {
"title": "eventAttributes.feedback.selectedTitle",
"value": "eventAttributes.feedback.feedback"
}
}
],
"targetAccessor": [
"destBankID",
"sourceBankID"
],
"contextAccessor": "user.bankIds",
"apiValueMappingKey": "_apiValueMapping.feedback.options",
"readOnlyValueToMatch": "closed",
"readOnlyContextAccessor": "case.caseStatusName"
},
"stickyPosition": "right",
"unstickWhenExpanded": true
},
"merchant": {
"title": "Merchant",
"dataType": "text"
},
"sourceID": {
"title": "Source Account",
"accessor": "sourceID",
"dataType": "text",
"maxWidth": 200,
"minWidth": 200,
"truncate": true
},
"accountID": {
"title": "Account ID",
"dataType": "text",
"truncate": true
},
"changedBy": {
"title": "Changed By",
"dataType": "username",
"maxWidth": 220
},
"createdAt": {
"title": "Date Created",
"visual": "datetime",
"dataType": "datetime"
},
"createdBy": {
"title": "Created By",
"dataType": "username",
"maxWidth": 220
},
"dwellTime": {
"title": "Dwell Time",
"visual": "duration",
"accessor": "dwellTime",
"dataType": "duration",
"maxWidth": 150,
"minWidth": 150,
"visualOptions": {
"midRangeMax": "PT14H11M",
"midRangeMin": "PT34M"
}
},
"lifeCycle": {
"title": "New",
"visual": "lifecycle",
"maxWidth": 88,
"minWidth": 88
},
"modelName": {
"title": "Model Name"
},
"muleScore": {
"title": "Mule Score",
"visual": "progressbar",
"dataType": "number",
"visualOptions": {
"midRangeMax": 0.8,
"midRangeMin": 0.2
}
},
"networkID": {
"title": "Network ID",
"dataType": "text",
"truncate": true
},
"remitInfo": {
"title": "Reference"
},
"transDate": {
"title": "Transaction Date",
"visual": "datetime",
"accessor": "transDate",
"dataType": "datetime",
"maxWidth": 180,
"minWidth": 180
},
"assessment": {
"title": "Assessment",
"visual": "assessment",
"accessor": "assessment",
"dataType": "text",
"maxWidth": 150,
"minWidth": 150,
"visualOptions": {
"options": [
{
"key": "eventID",
"label": "Assessment",
"title": "Transaction #",
"options": [
"",
"notFraudulent",
"fraudulent"
],
"alertType": "transactionAlert",
"alwaysInclude": true,
"selectedOptionConfig": {
"title": "eventAttributes.assessment.selectedTitle",
"value": "eventAttributes.assessment.assessment"
}
}
],
"apiValueMappingKey": "_apiValueMapping.assessment.options",
"readOnlyValueToMatch": "closed",
"readOnlyContextAccessor": "case.caseStatusName"
},
"stickyPosition": "right",
"unstickWhenExpanded": true
},
"confidence": {
"title": "Confidence"
},
"destBankID": {
"title": "Dest Bank ID",
"truncate": true
},
"generation": {
"title": "Gen",
"visual": "number",
"dataType": "number"
},
"modifiedAt": {
"title": "Date Closed",
"visual": "datetime",
"dataType": "datetime"
},
"modifiedBy": {
"title": "Closed By",
"dataType": "username"
},
"myFeedback": {
"title": "My Feedback",
"visual": "concatString",
"maxWidth": 200,
"minWidth": 200,
"visualOptions": {
"concatChar": " on ",
"concatPaths": [
"eventAttributes.feedback.feedback",
{
"path": "eventAttributes.feedback.decisionDate",
"type": "date"
}
],
"concatFallback": "Needs Feedback",
"apiValueMappingKey": "_apiValueMapping.feedback.options",
"renderTwoDashesIfColumnNull": "feedback"
}
},
"prediction": {
"title": "Prediction"
},
"totalValue": {
"title": "Total Network Value",
"visual": "number"
},
"elapsedTime": {
"title": "Elapsed Time",
"visual": "duration",
"dataType": "duration",
"maxWidth": 150,
"minWidth": 150,
"visualOptions": {
"midRangeMax": "P9DT10H44M",
"midRangeMin": "P1DT1H7M"
}
},
"generations": {
"title": "Network Generations",
"dataType": "number",
"maxWidth": 70,
"minWidth": 70
},
"linkedCases": {
"title": "Linked Cases"
},
"sourceTxnID": {
"title": "Source Trx ID"
},
"sourceValue": {
"title": "Src Value (NZD)",
"visual": "currency",
"dataType": "number",
"visualOptions": {
"conversionRate": 0.1
}
},
"transAmount": {
"title": "Amount (NZD)",
"visual": "currency",
"dataType": "number",
"visualOptions": {
"conversionRate": 0.1
}
},
"caseTypeName": {
"title": "Case Type",
"dataType": "text"
},
"destBankName": {
"title": "Dest Bank",
"dataType": "text",
"truncate": true,
"visualOptions": {
"boldMapping": {
"valueToMatch": "destBankID",
"contextAccessor": "_context.user.bankIds"
}
}
},
"networkValue": {
"title": "Network Value (NZD)",
"visual": "currency",
"dataType": "number",
"visualOptions": {
"conversionRate": 0.01
}
},
"sourceBankID": {
"title": "Source Bank ID",
"dataType": "text",
"truncate": true
},
"meanDwellTime": {
"title": "Mean Dwell Time",
"visual": "duration",
"dataType": "duration",
"maxWidth": 150,
"minWidth": 150
},
"meanMuleScore": {
"title": "Mean Mule Score",
"visual": "progressbar",
"dataType": "number",
"visualOptions": {
"midRangeMax": 0.7,
"midRangeMin": 0.4
}
},
"networkLength": {
"title": "Network Length"
},
"numLegitimate": {
"title": "Confirmed Legitimate"
},
"priorFeedback": {
"title": "Prior Feedback",
"visual": "concatString",
"maxWidth": 200,
"minWidth": 200,
"visualOptions": {
"concatChar": " on ",
"concatPaths": [
"mostRecentFeedback",
{
"path": "decisionDate",
"type": "date"
}
],
"targetAccessor": [
"destBankID",
"sourceBankID"
],
"contextAccessor": "_user.bankIds",
"apiValueMappingKey": "_apiValueMapping.feedback.options"
}
},
"sourceTxnType": {
"title": "Source Trace Type"
},
"accountAlertID": {
"title": "Account Alert ID",
"dataType": "text",
"truncate": true
},
"alertTransDate": {
"title": "Transaction Date",
"visual": "datetime",
"dataType": "datetime"
},
"caseStatusName": {
"title": "Case Status",
"dataType": "text"
},
"closedAssignee": {
"title": "Last Assigned To",
"dataType": "username"
},
"lastAlertAdded": {
"title": "Last Alert",
"visual": "datetime"
},
"networkAlertID": {
"title": "Network Alert ID",
"dataType": "text",
"truncate": true
},
"sourceBankName": {
"title": "Source Bank",
"visualOptions": {
"boldMapping": {
"valueToMatch": "sourceBankID",
"contextAccessor": "_context.user.bankIds"
}
}
},
"traceRequested": {
"title": "Trace Rqsted"
},
"uniqueAccounts": {
"title": "Unique Accounts in Ntwk"
},
"medianDwellTime": {
"title": "Median Dwell Time",
"visual": "duration",
"dataType": "duration",
"maxWidth": 150,
"minWidth": 150
},
"sourceTraceType": {
"title": "Source Trace Type",
"visual": "casetype",
"dataType": "text"
},
"alertTransAmount": {
"title": "Transaction Amount"
},
"numConfirmedMules": {
"title": "Confirmed Mule"
},
"caseResolutionName": {
"title": "Resolution"
},
"numNotInvestigated": {
"title": "Not Investigated"
},
"networkCreationTime": {
"title": "Network Creation Time",
"visual": "datetime"
}
},
"visualDictionary": {
"date": {
"format": "yyyy/MMM/dd"
},
"number": {
"fixed": 2,
"decimals": true,
"thousandSeparators": true
},
"currency": {
"fixed": 2,
"decimals": true,
"conversionRate": 0.1
},
"datetime": {
"format": "MM/dd/yyyy hh:mm:ss"
}
}
}
}