ACWIC Aged Care Provider Integration Microservices

There is on of two suites of microservices. This provides the API endpoints operated by Aged Care Providers, so they can administer their enrolments with Training Providers and so they can process data sent to them by Training Providers.

The code for this site is hosted at https://github.com/ACWIC/employer-coordinator

The compliment to this suite is one for Training Providers, documented at https://acwic-training-provider-coordinator.readthedocs.org

diagram: this one coloured (other one grey)

The purpose of this repository is to demonstrate how the suite of microservices can be hosted.

Components

The microservice suite is provided by two components.

  • Admin Service, used by Aged Care Providers to manage cross references and access data provided to them by Training Providers. This service is not public, it’s a suggested interface. Pragmatically, existing systems may have more convenient ways to achieve the same ends.

  • Callback Handler, used by the Training Provider to send information to the Aged Care Provider. This is a critical interoperability standard.

@startuml

   package "Employer\nIntegration Microservices" {
       database "Callbacks" as cbq
       component "Callback\nService" as cbh
       cbh -down-> cbq
       component "Admin\nService" as emp_admin
       emp_admin -up-> cbq
       database "Enrolments" as config
       cbh -down-> config
       emp_admin -up-> config
   }

   usecase "create new\nenrollment authorisation\n(returns callback code)" as uc1
   boundary "POST\n/enrollments/" as post_enrollment
   uc1 -right-> post_enrollment
   post_enrollment -down- emp_admin

   usecase "view\nenrollment status\nand summary" as uc2
   boundary "GET\n/enrollments/{id}" as get_enrollment
   uc2 -right-> get_enrollment
   get_enrollment -down- emp_admin

   usecase "view\nevent summary" as uc3
   boundary "GET\n/enrollments/{id}/journal" as get_journal
   uc3 -right-> get_journal
   get_journal -right- emp_admin

   usecase "view\nevent detail\ne.g. micro-credential" as uc5
   boundary "GET\n/enrollments/{id}/journal/{id}" as get_event
   uc5 -right-> get_event
   get_event -up- emp_admin

   actor "Aged\nCare\nProvider" as ac
   ac -up-> uc1
   ac -right-> uc2
   ac -down-> uc3
   ac -down-> uc5

   actor "Training\nProvider" as tp
   usecase "dispatch\ntraining event" as uc4
   boundary "POST\n/callbacks/{enrollmentId}" as cbapi
   tp -right-> uc4
   uc4 -right-> cbapi
   cbapi -down- cbh

@enduml

Each of these components has an open-source reference implementation that demonstrates the API using a low-cost object-store backing service.

Deployments

Two methods of deployment are supported:

  • Using docker-compose. Fully self-contained (including backing services). Actively used for development and testing, also an example of how it might be deployed in any container-hosting environment.

  • Using Amazon Web Services (AWS).

The README file at https://github.com/ACWIC/employer-coordinator/blob/main/README.md contains technical documentation on these deployment scenarios.

The AWS sample deployment uses API Gateway (security/orchestration), S3 (storage), cloudwatch (logging) and lambda (serverless compute) services, using the provider-agnostic serverless framework for packaging and deployment.

_images/aws_deployment.png

The AWS deployment demonstrates how the system can be hosted with at negligible operating cost. In this configuration, annual operating cost for a SME Aged Care Provider would be approximately equivalent to one cup of coffee (if not entirely free, likely to fit within the constraints of AWS Free Tier).

Large scale employers are likely to need sophisticated integration with existing LMS/HRMS systems. In that situation, these microservices could be used as a proxy layer or equivalent endpoints could be surfaced on existing systems. The purpose of supporting interoperability through standaisation is served either way.

Getting Support

If you encounter deployment issues using the docker-compose or serverless cloud methods in this repo, please raise a GitHub issue in this repository.

If you encounter a bug (or documentation problem), or need support with a specific component, please raise a GitHub issue in the repository specific for that component.