ACWIC Training Provider Integration Microservices

There is on of two suites of microservices. This provides the API endpoints operated by Training Providers, so they can administer their integration and so their customers (Aged Care Providers) can browse their catalogue and procure taining services.

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

The compliment to this suite is one for Aged Care Providers, documented at {other document url}.

diagram: this one coloured (other one grey)

The purpose of this repository is to demonstrate how the suite of microservices can be hosted. Two methods 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). Specifically; AWS Lambda (serverless compute platform), using an API Gateway and S3 storage service. This is an example of hosting the system using cost-effective utility infrastructure.

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

The AWS deployment demonstrates how the system can be hosted with at negligible operating cost. In this configuration, annual operating cost for a SME training 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 training providers are likely to need sophisticated integration with existing 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.

Components

The microservice suite is provided by three components.

  • Admin Service, used by the Training Provider to maintain access, publish their course catalogue and process enrolments. Because this is used privately by the Training Provider, it does not form part of the 3rd party integration surface and could be safely omitted in implementations where there more convenient methods exist.

  • Enrolment Service, used by Aged Care Providers to procure training services.

  • Course Catalogue, used by Aged Care Providers to discover opportunities to enroll staff in training that will meet their needs.

@startuml

   package "Training Provider\nIntegration Microservices" {
      component "Course\nCatalogue" as cat_s
      database "course\ncatalogue" as cat_db
      cat_s -up-> cat_db
      database "industry\nstandards" as std_db
      cat_s -up-> std_db

      component "Enrolment\nService" as ao_s
      database "access\ncontrol" as acl_db
      ao_s -up-> acl_db
      database "enrolment\nauthorisations" as po_db
      ao_s -up-> po_db

      component "Admin\nService" as admin_s
      admin_s -down-> cat_db
      admin_s -down-> std_db
      admin_s -down-> acl_db
      admin_s -down-> po_db
      'admin_s -down-> journal
   }

   boundary "Admin API" as admin_api
   admin_api -down- admin_s

   actor "Training\nProvider" as tp
   usecase "update\ncourse\ncatalogue" as uc_cat_up
   uc_cat_up -down-> admin_api
   tp -down-> uc_cat_up

   usecase "adopt\nnew version of\nindustry standards" as uc_adopt
   uc_adopt -down-> admin_api
   tp -down-> uc_adopt

   usecase "manage\naccess" as uc_acl
   uc_acl -down-> admin_api
   tp -down-> uc_acl

   usecase "process\nenrolments" as uc_enrl
   uc_enrl -down-> admin_api
   tp -down-> uc_enrl

   actor "Aged\nCare\nProvider" as ac

   usecase "find\nenrolment\nopportunity" as uc_find
   boundary "Catalogue\nBrowser\nAPI" as cat_api
   cat_api -up- cat_s
   ac -up-> uc_find
   uc_find -up-> cat_api

   usecase "procure\ntraining\nservices" as uc_procure
   boundary "POST\n/enrolments/" as ao_api
   ao_api -up- ao_s
   ac -up-> uc_procure
   uc_procure -up-> ao_api

@enduml

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