HMPPS Creating Future Opportunities (CFO) utilise the Case Assessment and Tracking System (CATS) to support delivery of CFO Evolution . The programme utilises external funding to perform rehabilitative services with offenders in custody and the community. Approx. 600 users from non-government organisations use CATS to record work performed with offenders creating an evidence base that supports performance management, payments to providers, ongoing research and audits from external bodies.
Mechanism (How does it communicate with other systems? Frequency of data pull/push, reporting, events etc)
CATS relies on the external data from Nomis and Delius. This is aggregate and managed by the CFO External Data Integration System.
- ASP.NET Core (Blazor)
- C#
- LINQ
- Entity Framework
- SQL Server
- HTML, CSS, Javascript
- Dotnet Aspire
600 (approx. 100 concurrent)
This has been developed on Windows 11 using Visual Studio 2022, Visual Studio Code and JetBrains Rider
- .NET 10 SDK
- Visual Studio Code users:
The recommended way to run and debug these apps is using .NET Aspire.
- Using Visual Studio Code: open the project and press
F5, selecting the Default Configuration. - Using Visual Studio or other IDEs: From the debug configuration dropdown, select
Cats.AppHostand start the application.
This repository uses Aspire for service composition (dependency injection, service discovery, and configuration management).
Aspire is also used to provide a Kubernetes publishing workflow that is currently in preview: container image build & push, and generation/packaging of Kubernetes manifests & Helm charts.
Prerequisites
- Docker (for image builds)
- Access to a container registry (credentials configured)
- kubectl and a valid kubeconfig with cluster access
- Helm (for chart-based deployments)
IMAGE_NAME=hmpps-cfo/cats
TAG=latest
REGISTRY=registry.mycorp.com:1234
# Locally
dotnet publish src/Server.UI/Server.UI.csproj \
--configuration Release \
--os linux \
--arch x64 \
--target:PublishContainer \
--property:ContainerRepository=$IMAGE_NAME \
--property:ContainerImageTag=$TAG
# or to a remote registry (with the ContainerRegistry property)
dotnet publish src/Server.UI/Server.UI.csproj \
--configuration Release \
--os linux \
--arch x64 \
--target:PublishContainer \
--property:ContainerRegistry=$REGISTRY \
--property:ContainerRepository=$IMAGE_NAME \
--property:ContainerImageTag=$TAG
dotnet aspire publish -o aspire-output
helm upgrade --install aspire ./aspire-output --namespace default \
--set parameters.cats.cats_image=$IMAGE