// Include common libraries /* AWS Technologies vocabulary */ !const LIBRARY_VERSION 2.0 // Systems !const AWS "AWS" !const AWS.Description "Amazon Web Services" !const AWS.Chime "Amazon Chime" !const AWS.Chime.Description "Communications service that lets you meet, chat, and place business calls inside and outside your organization, all using a single application." !const AWS.IAM "AWS IAM" !const AWS.IAM.Description "Identity and Access Management" !const AWS.STS "AWS STS" !const AWS.STS.Description "Security Token Service" !const AWS.SES "AWS SES" !const AWS.SES.Description "Simple Email Service" !const AWS.AppConfig "AWS AppConfig" !const AWS.AppConfig.Description "Simplifies the administration of applications at scale by deploying configuration changes from a central location." !const AWS.SNS "AWS Simple Notification Service" !const AWS.SNS.Description "Provides message delivery from publishers to subscribers, also used for push notifications & SMS." !const AWS.EventBridgeScheduler "AWS EventBridge Scheduler" !const AWS.EventBridgeScheduler.Description "Scheduler for events." // AWS Technologies !const AWS_SQS "AWS Simple Queue Service" !const AWS_REDIS "AWS ElastiCache for Redis" !const AWS_SM "AWS SecretsManager" !const AWS_LAMBDA "AWS Lambda" !const AWS_RDS "AWS RDS" !const AWS_DYNAMODB "AWS DynamoDB" !const AWS_S3 "AWS S3" !const AWS_SF "AWS StepFunction" !const AWS_SF_NODE "AWS StepFunction Node" !const AWS_SNS "AWS Simple Notificaction Service" !const AWS_GLUE "AWS Glue" !const AWS_API_GATEWAY "AWS API Gateway" /* Common vocabulary constants */ !const RDCS "RocheDiabetes Care Solutions" !const PROFSOL "Professional Solutions" !const PLATFORM "Platform" !const PERSONAL "Personal Solutions" !const INFRASTRUCTURE "Infrastructure" !const DEVICES "Devices" /* Technologies vocabulary */ // Common technologies !const TLS "TLS" !const JDBC "JDBC" !const JSP "JSP" !const NODE "NodeJS" !const SPRING_MVC "Spring MVC" !const SPRING_BOOT "Spring Boot" !const MSSQL_EE "SQL Server Enterprise Edition" !const POSTGRESQL "PostgreSQL" !const COUCHBASE "Couchbase" !const COUCHBASE_LITE "Couchbase Lite" !const DOTNET ".NET" !const MFC "MFC" !const SWIFT "Swift" !const QT "Qt" !const CPP "C++" !const PYTHON "Python" // Formats !const ACSPIX "ACSPIX" !const JSON "JSON" !const EIF "EIF" !const ROCHE_JSON "RocheJSON" !const HTML "HTML" !const PDF "PDF" !const CSV "CSV" // Communication channels !const HTTPS "HTTPS" !const JSON_HTTPS "JSON/HTTPS" !const ACSPIX_HTTPS "ACSPIX/HTTPS" !const FHIR_HTTPS "FHIR/HTTPS" !const ROCHE_JSON_HTTPS "RocheJSON/HTTPS" !const CDF_HTTPS "CDF/HTTPS" !const EIF_HTTPS "EIF/HTTPS" !const BINARY_HTTPS "BINARY/HTTPS" !const WS "WebSocket" !const PDF_HTTPS "PDF/HTTPS" // Languages !const JS "JavaScript" !const TS "TypeScript" !const REACT "React" !const JAVA "Java" !const MONO "Mono" !const SCALA "Scala" /* Persons constants */ !const ADMIN "Admin" !const ADMIN.Description "Roche administrator, that manages onboardings and centers; is always considered an 'internal' user" !const HCP "HCP" !const HCP.Description "The health care professional is the medical practitioner treating the patient; is always considered an 'external' user" !const HCP.Master "HCP Master" !const HCP.Master.Description "The healthcare professional (Master - Owner of Healthcare Center); is always considered an 'external' user" !const PWD "PwD" !const PWD.Description "Patient with diabetes is the end user of the solution / system; is always considered an 'external' user" !const DSS "DSS" !const DSS.Description "Digital support service user is a special Roche internal user that has access to production environment and can perform various maintenance and corrective tasks" !const DEVOPS "DevOps" !const DEVOPS.Description "The DevOps user is an internal Roche user responsible for the operation and maintenance of the infrastructure" !const ComplaintInvestigator "Complaint Investigator" !const ComplaintInvestigator.Description "Internal Roche support team member responsible for investigating customer complaints" /* Infrastructure systems constants */ !const GitLab.OnPremise "GitLab On-Premise" !const GitLab.OnPremise.Description "GitLab on-premise instance" !const StaticAppsS3 "Static Apps (AWS.S3 Bucket)" !const StaticAppsS3.Description "Container for static apps and web apps resources" !const FeatureFlagService.OnPremise "Feature Flag Service On-Premise" !const FeatureFlagService.OnPremise.Description "GO Feature Flag Service on-premise instance for serving FFs" !const LogManagement "LogManagement" !const LogManagement.Description "The RDC Observability tool used by all components" /* Personal ART vocabulary system constants */ !const Personal.mySugr "Personal.mySugr" !const Personal.mySugr.Description "Application for managing and tracking diabetes in patients" !const Personal.mySugr.Backend "Personal.mySugr.Backend" !const Personal.mySugr.Backend.Description "mySugr backend application to support mobile application" !const Personal.Glucolytics "Personal.Predict" !const Personal.Glucolytics.Description "(Accu-Chek SmartGuide Predict) Application that provides algorithmic predictions about future glucose levels based on collected medical data of patient" !const Personal.Glucolytics.Backend "Personal.Predict.Backend" !const Personal.Glucolytics.Backend.Description "Backend application for Accu-Chek SmartGuide Predict app." !const Personal.SmartGuide "Personal.SmartGuide" !const Personal.SmartGuide.Description "(aka Confidence) Mobile application for connecting with CGM device for data readout and tracking" !const Personal.glucoseInsights "mySugr Glucose Insights" !const Personal.glucoseInsights.Description "Display and read-out of CGM sensor. Visualize and analyze diabetes data" /* Plaform ART vocabulary system constants */ !const Platform.ApiManager "Platform.ApiManager" !const Platform.ApiManager.Description "The Roche ecosystem API Gateway used to NAT all the traffic to / from each solution and service" !const Platform.ApiGateway "Platform.ApiGateway" !const Platform.ApiGateway.Description "The Roche ecosystem API Gateway used to NAT all the traffic to / from each solution and service" !const Platform.CIAMCM "Platform.CIAMCM" !const Platform.CIAMCM.Description "Customer Identity and Access Management and Consent Management is the central storage for identity and consents of each user" !const Platform.CIAMCM.Gigya "Platform.CIAMCM.Gigya" !const Platform.CIAMCM.Gigya.Description "CIAMCM's Gigya instance for user identity management" !const Platform.DiagnosticsAndMedications "Platform.DiagnosticsAndMedications (FHIRStack)" !const Platform.DiagnosticsAndMedications.Description "Allows storage and retrieval of diagnostics and medications data of the patients." !const Platform.DataIntegrations "Platform.DataIngetrations" !const Platform.DataIntegrations.Description "Data integrations layer" !const Platform.PHDIAM "Platform.PHDIAM" !const Platform.PHDIAM.Description "Certficate authorization and access management." !const Platform.RDAC "Platform.RocheDiabetes AccountCenter (aka Accu-Chek Account Center)" !const Platform.RDAC.Description "(aka Accu-Chek Account Center) App for Patient registrations in RDC" !const Platform.ApplicationSettings "Platform.ApplicationSettings" !const Platform.ApplicationSettings.Description "Store, retrieve and share settings for mobile apps" !const Platform.BLE "Platform.ConfidenceBLE" !const Platform.BLE.Description "Retrieve optimized set of parameters for BLE connection" !const Platform.ComplaintInvestigation "Platform.ComplaintInvestigation" !const Platform.ComplaintInvestigation.Description "Search and aggregate data from multiple domains and return it to caller" !const Platform.PushNotification "Platform.PushNotification" !const Platform.PushNotification.Description "Send push notifications to registered devices" !const Platform.RADAR "Platform.RADAR" !const Platform.RADAR.Description "Roche Analytics for Reporting and product usage KPIs" !const Platform.BDA "Platform.BDA" !const Platform.BDA.Description "Big Data and Analytics" /* Professional solution (Professional ART) vocabulary system constants */ // RDCP !const RDCP "RocheDiabetes Care Platform (RDCP) | Accu-Chek Care (ACC)" !const RDCP.HCP.Portal "RDCP.HCPPortal" !const RDCP.HCP.Portal.Description "Allows Healthcare Professional accessing their patients and their medical data." !const RDCP.HCP.SelfReg "RDCP.HCPSelf-Registration" !const RDCP.HCP.SelfReg.Description "Allows owners of HCC's to register their Healthcare Center to start managing their healthcare center and patients in RDCP." //!const RDCP.BackofficePortal "RDCP.BackofficePortal" //!const RDCP.BackofficePortal.Description "Allows Roche Admins onboarding processes for new healthcare centers and management of existing ones." !const RDCP.UniversalDTC "RDCP.UniversalDTC" !const RDCP.UniversalDTC.Description "Allows readout and upload of medical data from blood glucose devices, insulin pumps and CGMs into RDCP." !const RDCP.Patient.Portal "RDCP.PatientPortal" !const RDCP.Patient.Portal.Description "(Available only for RDCP) Allows patients to visualize their medical data, personal information and access home delivery." !const RDCP.Core "RDCP.Core" !const RDCP.Core.Description "Collection of core Backend Services to support RDCP (including monolithic app)." !const RDCP.Permissions "RDCP.Permissions" !const RDCP.Permissions.Description "Allows validation of permissions, modules and access to specific resources within RDCP." !const RDCP.Notifications "RDCP.Notifications" !const RDCP.Notifications.Description "Allows management of Notifications." !const RDCP.StripsManagement "RDCP.StripsManagement" !const RDCP.StripsManagement.Description "Allows strips management (stock, delivery)." !const RDCP.Patterns.And.Indicators "RDCP.PatternsAndIndicators" !const RDCP.Patterns.And.Indicators.Description "Allows enrichment patient's status based on predefined set of patterns." !const RDCP.UserManagement.And.Records "RDCP.UserManagementAndRecords" !const RDCP.UserManagement.And.Records.Description "Allows centralized access and management of RDCP users." !const RDCP.Diagnostics.And.Medications "RDCP.DiagnosticsAndMedications" !const RDCP.Diagnostics.And.Medications.Description "Diagnostics and Medications." // DEPREACTED for Koala release //!const RDCP.UniversalDTC.Services "RDCP.UniversalDTC.Services" //!const RDCP.UniversalDTC.Services.Description "Allows additional support of various functionalities of uDTC (whitelisting of devices and their versions that are supported by RDCP)." !const RDCP.Organizations "RDCP.Organizations" !const RDCP.Organizations.Description "Provides APIs for management of organizations" !const RDCP.Analytics "RDCP.Analytics" !const RDCP.Analytics.Description "Allow recollection of metrics for analytics" !const RDCP.Devices "RDCP.Devices" !const RDCP.Devices.Description "Management of devices." !const RDCP.Reporting "RDCP.Reporting" !const RDCP.Reporting.Description "Reporting services." !const RDCP.ConfigurationManagement "RDCP.ConfigurationManagement" !const RDCP.ConfigurationManagement.Description "Management of configurations" // VisitModule (Part of RDCP) !const VisitManagement.And.Communication "RDCP.VisitManagementAndCommunication" !const VisitManagement.And.Communication.Description "Allows managements of patients visits to the HCP's, recording of notes and communication between PwD's and HCP's." // (Legacy) SmartPixSoftware (DEPRECATED) !const SPSW "SmartPixSoftware (SPSW)" !const SPSW.Desktop "SPSW.DesktopClient" !const SPSW.Desktop.Description "Legacy Desktop Application for HCP's Management of the patients" // SmartPix2Cloud (DEPRECATED) !const SP2C "SmartPix2Cloud (SP2C)" !const SP2C.Description "Allows patient (and their data) migration from legacy SPSW solution and RDCP" !const SP2C.Desktop "SP2C.Desktop" !const SP2C.Desktop.Description "Desktop application that provides one-way data sync between SPSW and RDCP" !const SP2C.Backend "SP2C.Backend" !const SP2C.Backend.Description "Backend components of Smart Pix to Cloud" // Devices !const Devices.CGMPatch "CGM.Patch" !const Devices.CGMPatch.Description "Roche CGM Sensor Patch (part of Accu-Chek SmartGuide CGM)" !const Devices.MicroPump "MicroPump" !const Devices.MicroPump.Description "Accu-Chek Solo Micro Insulin Pump" !const Devices.Pen "Insulin Pen" !const Devices.Pen.Description "Insulin Pen integrated with the Roche mobile app" workspace "CT-868 Dosing App" "An architecture for the dosing app for the Pharma drug labeled CT-868" { !identifiers hierarchical !impliedRelationships false !docs resources/docs !adrs resources/adrs properties { state "Pre-Proposal" desc "Insulin and CT-868 dosig app basedon pharma trial and custom algo" requirements "https://docs.google.com/presentation/d/1KZDQrKDYrClhO1ONSGXmcAdExgmKLv_gHhO_tlmpPpA" } model { properties { "structurizr.groupSeparator" "/" } /* Copied fromthem the needed elements for the model. using include statement has a serious draback and overhead -> all the defined elements create views automatically and all are parsed not just the ones referenced here !! */ ## !include library/common/persons.dsl ## !include library/common/3rd-party-systems.dsl /* Here we describe a few typical 'external' actors for the solution / system. These are persons and they can be useful for the solution or not, depending on the purpose (service used by other solutions / apps / backends) Other types of users can be defined, these are the typical ones only. Majority of actors are already defined in library/common/persons.dsl, reuse them through reference (!ref). Tag elements with "External System" to explicitly state them as external. */ pwd = person "${PWD}" "${PWD.Description}" "ExternalActor" { tags "External System" } /* 3rd party companies that have partnered with Roche to extend their offering and benefit from it's expertise */ ct868_partner_app = softwareSystem "Partner Mobile application" { description "" tags "External System" ct868_ui = container "CT-868 UI" { description "A set of screens for the CT-868 dosing developed by partner company" tags "External System" Container } baseContainer = container "Partner host app" { description "One or more containers developed by partner to incorporate the CT-868 SDK" tags "External System" Container } } partner = softwareSystem "Partner backend" "3rd party companies that have partnered with Roche to extend their offering and benefit from our expertise" { tags "External System" } /* Devices */ group "Devices" { cgm = element "CGM Patch" "Roche CGM Path" { tags "CGM Patch" properties { "ART" "CGM ART" } perspectives { Security "CGM Patch is worn by the PwD" } } group "optional" { micropump = element "${Devices.MicroPump}" "${Devices.MicroPump.Description}" { tags "Pump" "optional" } pen = element "${Devices.Pen}" "${Devices.Pen.Description}" { tags "pen" "optional" } } } ct868_rdc_app = softwareSystem "RDC Mobile application" { description "A mobile app developed by PatientInsights based on existing framework" url "https://mysugr.atlassian.net/wiki/spaces/UOP/overview?homepageId=3862200813" url "https://mysugr.atlassian.net/wiki/spaces/LEX/overview" group "Existing modules" { glucoseInsights = container "${Personal.glucoseInsights}" "${Personal.glucoseInsights.Description}" { technology "Kotlin & Swift" tags kotlin_swift optional } bolusCalc = container "mySugr Bolus Calculator" "Themodule taking carbs as input and calculating the needed bolus insulin dosing" { technology "Kotlin & Swift" tags kotlin_swift } hostApp = container "mySugr LogBook" "The foundation of the mySugr apps (modules), serves as the logging & data display for the rest of the hosted modules." { technology "Kotlin & Swift" tags kotlin_swift } localStorage = container "mySugr Storage" "Data storage for the health and patient data" { technology "RoomDB" tags room } securePreferences = container "Encrypted SharedPreferences" "Stores CGM identifiers and properties securely" { technology "SharedPreferences + AES256_GCM" tags mobile_sec_pref } sharedPreferences = container "SharedPreferences" "User preferences, app settings, configuration data" { technology "SharedPreferences" tags mobile_pref } fileStorage = container "File storage" "Internal app files" { technology "SharedPreferences" tags mobile_file } } group "To develop" { ct868_ui = container "CT-868 UI" { description "The module is a set of screens for the CT-868 delivery app" tags "kotlin_swift" } ct868_sdk = container "CT-868 Sdk" { description "The module contains CT-868 dosing and insulin delivery reduction algo (provided by pharma)" tags "kotlin_swift" } } } group "${RDCS}" { group "${PLATFORM}" { apiGateway = softwareSystem "${Platform.ApiGateway}" "${Platform.ApiGateway.Description}" ciamcm = softwareSystem "${Platform.CIAMCM}" "${Platform.CIAMCM.Description}" rdac = softwareSystem "${Platform.RDAC}" "${Platform.RDAC.Description}" fhirStack = softwareSystem "${Platform.DiagnosticsAndMedications}" "${Platform.DiagnosticsAndMedications.Description}" // analytics services radar = softwareSystem "${Platform.RADAR}" "${Platform.RADAR.Description}" bda = softwareSystem "${Platform.BDA}" "${Platform.BDA.Description}" } group "${PERSONAL}.Backend" { // mysugr mySugrBackend = softwareSystem "${Personal.mySugr.Backend}" { properties { "ART" "Personal" } tags "" description "${Personal.mySugr.Backend.Description}" } // smartguide predict app glucolyticsBackend = softwareSystem "${Personal.Glucolytics.Backend}" { properties { "ART" "SmartLife" } tags "" description "${Personal.Glucolytics.Backend.Description}" } } } # relationships ## actors to SW sys pwd -> cgm "Weares the" { tags optional } pwd -> pen "Uses" { tags "optional" } pwd -> ct868_rdc_app "Uses and Views the" pwd -> ct868_partner_app "Uses and Views the" ## mobile to BE or Platform ct868_rdc_app -> rdac "Loads" "web view" ct868_rdc_app -> ciamcm "Get user data and consents from" "JSON/HTTP" ct868_rdc_app -> apiGateway "Store and retrieve data to / from" "JSON/HTTP + DAWN" ## relationships between software systems ### security principles and user auth apiGateway -> ciamcm "Authenticate & Autorize user using" "JSON/HTTP" apiGateway -> mySugrBackend "Forward relevant authenticated calls to" "JSON/HTTP" ### from the BE to other sw systems mySugrBackend -> fhirStack "Send data to" "Kinesis Data Stream" { tags "kinesis" } mySugrBackend -> glucolyticsBackend "Create profile in / Get Predictions & report from" "JSON/HTTP" fhirStack -> glucolyticsBackend "Sync new data to" "JSON/SNS" { tags "sns" } ### from external systems to analytics layer fhirStack -> bda "Send new data to" "Kinesis Firehose"{ tags "kinesis" "analytics" } fhirStack -> radar "Send new data to" "Kinesis Firehose"{ tags "kinesis" "analytics" } glucolyticsBackend -> bda "Send prediction logs to" "Kinesis Firehose"{ tags "kinesis" "analytics" } ### between partner systems ct868_partner_app -> partner "Read / Write from / to" "HTTP" ## relationships between containers ct868_rdc_app.hostApp -> ct868_rdc_app.localStorage "Manipulate data using" "DAOs" ct868_rdc_app.hostApp -> ct868_rdc_app.securePreferences "Manipulate data using" ct868_rdc_app.hostApp -> ct868_rdc_app.sharedPreferences "Manipulate data using" ct868_rdc_app.hostApp -> ct868_rdc_app.fileStorage "Manipulate data using" ct868_rdc_app.glucoseInsights -> ct868_rdc_app.hostApp "Read / write data using" ### between modules and existing ones pwd -> ct868_rdc_app.ct868_ui "Read data from" "view" ct868_rdc_app.ct868_ui -> ct868_rdc_app.ct868_sdk "Loads data from" ct868_rdc_app.ct868_sdk -> ct868_rdc_app.hostApp "Read / Write data using" ct868_rdc_app.ct868_sdk -> ct868_rdc_app.bolusCalc "Read calculated Bolus value from" ct868_rdc_app.bolusCalc -> ct868_rdc_app.hostApp "Get bolus algo input values from" ### between devices and modules ct868_rdc_app.glucoseInsights -> cgm "Pairs with / Readsdata from" "Bluetooth" { tags optional bt } ## container to backend ct868_rdc_app.hostApp -> mySugrBackend "Read / Write data from / to" "JSON/HTTP" ct868_rdc_app.glucoseInsights -> mySugrBackend "Read / Write data from / to" "JSON/HTTP" ## partner loadin SDK and relationships ct868_partner_app.baseContainer -> ct868_rdc_app "Loads the SDK from" "imported library" ct868_partner_app.ct868_ui -> ct868_rdc_app "Loads data using SDK from" ### pwd partner interaction pwd -> ct868_partner_app.ct868_ui "Read data from" "view" ### container view relationships } views { systemLandscape "CT-868_Landscape" "Landscape view for the CT-868 dosig application" { include * } container ct868_rdc_app "ct-868_container" { include * description "The modules in the proposed CT-868 app including existing and " } container ct868_partner_app "partner-app_container" { include * description "A very high-level overview of the partner app loading the CT-868 SDK" } # styling // Themes: https://docs.structurizr.com/ui/diagrams/themes // (!) Update from localhost to url on-premise when deploying to Tools (PROD) // https://structurizr.tools.rdcplatform.com/static/roche-theme.json themes roche-theme.json https://static.structurizr.com/themes/amazon-web-services-2023.01.31/theme.json // https://static.structurizr.com/themes/amazon-web-services-2023.01.31/theme.json // https://static.structurizr.com/themes/amazon-web-services-2020.04.30/theme.json // AWS vizualizer: https://structurizr.com/help/theme?url=https://static.structurizr.com/themes/amazon-web-services-2023.01.31/theme.json // AWS vizualizer: https://structurizr.com/help/theme?url=https://static.structurizr.com/themes/amazon-web-services-2020.04.30/theme.json // another version: https://static.structurizr.com/themes/amazon-web-services-2023.01.31/theme.json branding { logo roche-logo.png } styles { element "Group" { background #d3d3d3 color #4C4C4C stroke #4C4C4C strokeWidth 10 icon library/common/roche-logo.png } element "CGM Patch" { shape Circle color #0038a8 } element "pen" { shape Ellipse color blue background white icon resources/imgs/insulin_pen.jpg } element "ios_android" { icon resources/imgs/ios_android.jpg } element "sqs" { shape Cylinder icon resources/imgs/aws_sqs.png } element "sns" { shape Pipe icon resources/imgs/aws_sns.png } element "kinesis_stream" { shape Pipe icon resources/imgs/aws_kinesis_stream.png } element "lambda" { shape RoundedBox icon resources/imgs/aws_lambda.png } element "optional" { border dotted opacity 85 } /* Mainly for containers - but not limited to */ element "kotlin_swift" { shape Component icon resources/imgs/kotlin_swift.png } element "realm" { shape Cylinder icon resources/imgs/and_realm.jpg background white color green stroke green } element "room" { shape Cylinder icon resources/imgs/room_db.png background white color green stroke green } element "mobile_sec_pref" { shape Cylinder icon resources/imgs/secure_preferences.png background white color red stroke green } element "mobile_pref" { shape Cylinder icon resources/imgs/preferences.png background white color grey stroke green } element "mobile_file" { shape Folder icon resources/imgs/file_storage.png background white color green stroke green } element "to-do" { color purple } /* Relationship styling */ relationship "Relationship" { style solid routing Orthogonal position 70 } relationship "sns" { color blue } relationship "sqs" { color red } relationship "tcp" { color green } relationship "kinesis" { color #8a2be2 } relationship "analytics" { style dashed } relationship "push" { style dashed color green } relationship "bt" { color #000080 style dashed } relationship "optional" { routing Curved style dotted opacity 85 } } } }