// Include common libraries /* AWS Technologies vocabulary */ // Systems !constant AWS "AWS" !constant AWS.Description "Amazon Web Services" !constant AWS.Chime "Amazon Chime" !constant AWS.Chime.Description "Communications service that lets you meet, chat, and place business calls inside and outside your organization, all using a single application." !constant AWS.IAM "AWS IAM" !constant AWS.IAM.Description "Identity and Access Management" !constant AWS.STS "AWS STS" !constant AWS.STS.Description "Security Token Service" // AWS Technologies !constant AWS_SQS "AWS Simple Queue Service" !constant AWS_REDIS "AWS ElastiCache for Redis" !constant AWS_SM "AWS SecretsManager" !constant AWS_LAMBDA "AWS Lambda" !constant AWS_RDS "AWS RDS" !constant AWS_DYNAMODB "AWS DynamoDB" !constant AWS_S3 "AWS S3" !constant AWS_SF "AWS StepFunction" !constant AWS_SNS "AWS Simple Notificaction Service" !constant AWS_GLUE "AWS Glue" /* Common vocabulary constants */ !constant RDCS "RocheDiabetes Care Solutions" !constant PROFSOL "Professional Solutions" !constant PLATFORM "Plaform" !constant SL "Accu-Check Smartguide Predict" !constant SL_KEY "Accu-Check_Smartguide_Predict" /* Technologies vocabulary */ // Common technologies !constant TLS "TLS" !constant JDBC "JDBC" !constant JSP "JSP" !constant NODE "NodeJS" !constant SPRING_MVC "Spring MVC" !constant SPRING_BOOT "Spring Boot" !constant MSSQL_EE "SQL Server Enterprise Edition" !constant POSTGRESQL "PostgreSQL" !constant DOTNET ".NET" !constant MFC "MFC" !constant SWIFT "Swift" // Formats !constant ACSPIX "ACSPIX" !constant JSON "JSON" !constant ROCHE_JSON "RocheJSON" // Communication channels !constant HTTPS "HTTPS" !constant JSON_HTTPS "JSON/HTTPS" !constant ACSPIX_HTTPS "ACSPIX/HTTPS" !constant CDF_HTTPS "CDF/HTTPS" !constant WS "WebSocket" // Languages !constant JS "JavaScript" !constant TS "TypeScript" !constant REACT "React" !constant JAVA "Java" !constant MONO "Mono" !constant SCALA "Scala" /* Persons constants */ !constant ADMIN "Admin" !constant ADMIN.Description "Roche administrator, that manages onboardings and centers; is always considered an 'internal' user" !constant HCP "HCP" !constant HCP.Description "The health care professional is the medical practitioner treating the patient; is always considered an 'external' user" !constant HCP.Master "HCP Master" !constant HCP.Master.Description "The healthcare professional (Master - Owner of Healthcare Center); is always considered an 'external' user" !constant PWD "PwD" !constant PWD.Description "Patient with diabetes is the end user of the solution / system; is always considered an 'external' user" !constant DSS "DSS" !constant 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" !constant DEVOPS "DevOps" !constant DEVOPS.Description "The DevOps user is an internal Roche user responsible for the operation and maintenance of the infrastructure" /* Professional solution (Professional ART) vocabulary system constants */ !constant RDCP "RocheDiabetes Care Platform (RDCP)" !constant SP2C "SmartPix2Cloud (SP2C)" !constant RDCP.HCP.Portal "RDCP.HCP.Portal" !constant RDCP.HCP.Portal.Description "Allows Healthcare Professional accessing their patients and their medical data." !constant RDCP.HCP.SelfReg "RDCP.HCP.Self-Registration" !constant RDCP.HCP.SelfReg.Description "Allows owners of HCC's to register their Healthcare Center to start managing their healthcare center and patients in RDCP." !constant RDCP.BackofficePortal "RDCP.BackofficePortal" !constant RDCP.BackofficePortal.Description "Allows Roche Admins onboarding processes for new healthcare centers and management of existing ones." !constant RDCP.UniversalDTC "RDCP.UniversalDTC" !constant RDCP.UniversalDTC.Description "Allows readout and upload of medical data from blood glucose devices, insulin pumps and CGMs into RDCP." !constant RDCP.Patient.Portal "RDCP.Patient.Portal" !constant RDCP.Patient.Portal.Description "Allows patients to visualize their medical data, personal information and access home delivery." !constant RDCP.Legacy "RDCP.Legacy" !constant RDCP.Legacy.Description "Collection of legacy Backend Services to support RDCP (including legacy monolithic app)." !constant RDCP.Permissions "RDCP.Permissions" !constant RDCP.Permissions.Description "Allows validation of permissions, modules and access to specific resources within RDCP." !constant RDCP.Notifications "RDCP.Notifications" !constant RDCP.Notifications.Description "Allows management of Notifications." !constant RDCP.StripsManagement "RDCP.StripsManagement" !constant RDCP.StripsManagement.Description "Allows strips management (stock, delivery)." !constant RDCP.Patterns.And.Indicators "RDCP.Patterns.And.Indicators" !constant RDCP.Patterns.And.Indicators.Description "Allows enrichment patient's status based on predefined set of patterns." !constant RDCP.UserManagement.And.Records "RDCP.UserManagement.And.Records" !constant RDCP.UserManagement.And.Records.Description "Allows centralized access and management of RDCP users." !constant RDCP.Diagnostics.And.Medications "RDCP.Diagnostics.And.Medications" !constant RDCP.Diagnostics.And.Medications.Description "Diagnostics and Medications." !constant RDCP.UniversalDTC.Services "RDCP.UniversalDTC.Services" !constant RDCP.UniversalDTC.Services.Description "Allows additional support of various functionalities of uDTC (whitelisting of devices and their versions that are supported by RDCP)." !constant RDCP.Organizations "RDCP.Organizations" !constant RDCP.Organizations.Description "Provides APIs for management of organizations" !constant RDCP.Analytics "RDCP.Analytics" !constant RDCP.Analytics.Description "Allow recollection of metrics for analytics" !constant RDCP.Devices "RDCP.Devices" !constant RDCP.Devices.Description "Management of devices." !constant RDCP.VisitManagement.And.Communication "RDCP.VisitManagement.And.Communication" !constant RDCP.VisitManagement.And.Communication.Description "Allows managements of patients visits to the HCP's, recording of notes and communication between PwD's and HCP's." /* Plaform ART vocabulary system constants */ !constant Platform.ApiManager "Platform.ApiManager" !constant Platform.ApiManager.Description "The Roche ecosystem API Gateway used to NAT all the traffic to / from each solution and service" !constant Platform.CIAMCM "Platform.CIAMCM" !constant Platform.CIAMCM.Description "Customer Identity and Access Management and Consent Management is the central storage for identity and consents of each user" !constant Platform.CIAMCM.Gigya "Platform.CIAMCM.Gigya" !constant Platform.CIAMCM.Gigya.Description "CIAMCM's Gigya instance for user identity management" !constant Platform.DiagnosticsAndMedications "Platform.DiagnosticsAndMedications (FHIRStack)" !constant Platform.DiagnosticsAndMedications.Description "Allows storage and retrieval of diagnostics and medications data of the patients." !constant Platform.DataIntegrations "Platform.DataIngetrations" !constant Platform.DataIntegrations.Description "Data integrations layer" !constant Platform.BDA "Platform.BDA" !constant Platform.BDA.Description "Big Data Analytics - RDC Data Lake for Clinical studies and commercial data" !constant Platform.PushNotifications "Platform.PushNotifications" !constant Platform.PushNotifications.Description "Service for sending push notifications to mobile devices" /* Personal solutions vocabulary system constants */ !constant Personal.mySugr "Personal.mySugr" !constant Personal.mySugr.Description "Software system comprised of mobile application (FE) used by PwD and back-end for managing diabetes" !constant Personal.Confidence "Personal.Smartguide" !constant Personal.Confidence.Description "Mobile application to manage and view Roche CGM sensor and send data to RDCS Platform" !constant Personal.Glucolytics "Personal.Predict" !constant Personal.Glucolytics.Description "Software system comprised of mobile application (FE) used by PwD and back-end for A.I. based predictions using the CGM and other relevant data" // Define workspace workspace "${PLATFORM} Organizations" "${RDCS} - ${PLATFORM} Organizations" { /* Load the Architectural Decision Records of the project. These can be one or multiple files (each decision should have an independent record). File naming convention -title_word_1-title_word_n.md (number should be 0001 .. 0100 .. 0954 ..). NOTE: file format is Markdown */ !adrs adrs /* Load the documentation associated with the project / solution. Basically the documentation_sad should contain all the chapters, in order, that composes the full SAD with reference to the diagrams as well. File naming convention -title_word_1-title_word_n.adoc (number should be 0001 .. 0100 .. 0954 ..). NOTE: file format is AsciiDoc */ !docs documentation_sad !identifiers hierarchical model { /* Here we describe a few typical 'internal' 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 */ dss = person "DSS" "Digital support service user is a special Roche internal user that has access to production environment and can perform various maintenance and corrective tasks" { tags "Internal" } devops = person "DevOps" "The DevOps user is an internal Roche user responsible for the operation and maintenance of the infrastructure" { tags "Internal" } group "Infrastructure" { app_config = softwareSystem "Infra.AppConfig" "AWS managed service to store and retrieve parameter sets" observability = softwareSystem "Infra.Observability" "Software system to view logs, traces and metrics in a unified manner (DataDog)" secrets = softwareSystem "Infra.SecretsManagement" "The Roche Secrets Management tool used by all components" } rdcs_int = softwareSystem "RDCS.Internal" "RDCS internal software system deployed in the Roche VPC" { tags "RocheExt" properties { } } group "Platform" { orgs = softwareSystem "${PLATFORM}.Organizations" "Data domain managing organizations in RDC" { tags "" url https://confluence.rochedc.accentureanalytics.com/display/RD/Complaint+Investigation+Service+%28Morpheus+Application+Integration%29+collaboration properties { git_repo https://git.rochedevops.accentureanalytics.com/cs/cs-morpheus-service-cia.git arch_shared_gdrive https://drive.google.com/drive/u/1/folders/10k5lzxNVN9dEOxlfdYhEzLRlaxRMWoW3 team "Common Services" data_domain "Organizations data" ART "Platform" } service = container "Organizations.Service" "Main service containing interface and business logic" "Java / Spring Boot / JPA" { tags "java" url http://data-datamodel.rochedcplatform-sandbox.com/#/doc/module131/models-2---use-cases-logical-models/subject-areas/model-3-8---organizations properties { git_repo https://git.rochedevops.accentureanalytics.com/cs/cs-organizations-service } orgs_controller = component "Organization.Service.API" "Exposes methods to manipulate organizations and, optionaly, related entities" "Spring MVC" { tags "spring" properties { methods "GET, POST, PUT, DELETE" } } identifier_controller = component "Organization.Service.Identifier.API" "Exposes methods to manipulate identifiers of an organization" "Spring MVC" { tags "spring" properties { methods "GET, POST, PUT, PATCH, DELETE" } } address_controller = component "Organization.Service.Address.API" "Exposes methods to manipulate addresses of an organization" "Spring MVC" { tags "spring" properties { methods "GET, POST, PUT, PATCH, DELETE" } } telecom_controller = component "Organization.Service.Telecom.API" "Exposes methods to manipulate telecom details of an organization" "Spring MVC" { tags "spring" properties { methods "GET, POST, PUT, PATCH, DELETE" } } business_logic = component "Organization.Service.BusinessLogic" "Business logic of the service" "Java" { tags "spring" properties { } } dal = component "Organization.Service.DAL" "Data Access Layer of the service" "Spring Data / JPA" { tags "spring" properties { } } } db = container "Organizations.RDS" "AWS RDS database storing the organizations and related entities data" "PostgreSQL" { tags "rds" } } } /* Relationships */ rdcs_int -> orgs "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } dss -> orgs "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } orgs -> observability "Logs, traces and metrics are sent to" "HTTPS/JSON" { tags "tcp" } orgs -> secrets "Secrets are stored and retrieved from" "HTTPS/JSON" { tags "tcp" } orgs -> app_config "Configuration parameters are stored and retrieved from" "HTTPS/JSON" { tags "tcp" } //// Container and component relationships rdcs_int -> orgs.service "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } dss -> orgs.service "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } orgs.service -> orgs.db "Stores and retrieves organizations and related entities data using" "JDBC" { tags "tcp" } orgs.service -> observability "Logs, traces and metrics are sent to" "HTTPS/JSON" { tags "tcp" } orgs.service -> secrets "Secrets are stored and retrieved from" "HTTPS/JSON" { tags "tcp" } orgs.service -> app_config "Configuration parameters are stored and retrieved from" "HTTPS/JSON" { tags "tcp" } rdcs_int -> orgs.service.orgs_controller "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } rdcs_int -> orgs.service.identifier_controller "Create, view, update or remove organization identifiers using" "HTTPS/JSON" { tags "" } rdcs_int -> orgs.service.address_controller "Create, view, update or remove organization addresses using" "HTTPS/JSON" { tags "" } rdcs_int -> orgs.service.telecom_controller "Create, view, update or remove organization telecom details using" "HTTPS/JSON" { tags "" } dss -> orgs.service.orgs_controller "Create, view, update or remove organization using" "HTTPS/JSON" { tags "" } dss -> orgs.service.identifier_controller "Create, view, update or remove organization identifiers using" "HTTPS/JSON" { tags "" } dss -> orgs.service.address_controller "Create, view, update or remove organization addresses using" "HTTPS/JSON" { tags "" } dss -> orgs.service.telecom_controller "Create, view, update or remove organization telecom details using" "HTTPS/JSON" { tags "" } orgs.service.orgs_controller -> orgs.service.business_logic "Uses" "" { tags "" } orgs.service.identifier_controller -> orgs.service.business_logic "Uses" "" { tags "" } orgs.service.address_controller -> orgs.service.business_logic "Uses" "" { tags "" } orgs.service.telecom_controller -> orgs.service.business_logic "Uses" "" { tags "" } orgs.service.business_logic -> orgs.service.dal "Send/retrieve data using" "" { tags "" } orgs.service.dal -> orgs.db "Stores and retrieves organizations and related entities data using" "JDBC" { tags "tcp" } } views { /* Static configuration, styling and properties for views */ properties { "plantuml.url" "https://kroki.io/plantuml" "plantuml.format" "png" "structurizr.softwareSystemBoundaries" "true" "structurizr.enterpriseBoundary" "true" "structurizr.tooltips" "true" } branding { logo documentation_sad/images/static/logo_roche.png } theme https://structurizr.moebiusol.eu/workspace/1/theme styles { element "RocheGateway" { shape RoundedBox width 3900 background grey } element "CGM Patch" { shape Circle color #0038a8 } element "MicroPump" { shape RoundedBox color #c2b280 } element "RocheHCC" { shape Ellipse background #8fbc8f stroke #ff0000 } element "RocheWeb" { shape WebBrowser } element "RocheExt" { background #6C6477 } element "Group" { background #d3d3d3 color #4C4C4C stroke #4C4C4C strokeWidth 10 icon library/icons/rdc_logo.png } element "interface" { background #BD6711 color #ffffff } element "python" { icon library/icons/python.png } element "nodejs" { icon library/icons/nodejs.png } element "java" { icon library/icons/java.png } element "spring" { icon library/icons/spring.png } element "ios_android" { icon library/icons/ios_android.jpg } element "sqs" { shape Cylinder icon library/icons/aws_sqs.png } element "sns" { shape Pipe icon library/icons/aws_sns.png } element "kinesis_stream" { shape Pipe icon library/icons/aws_kinesis_stream.png } element "lambda" { shape RoundedBox icon library/icons/aws_lambda.png } element "rds" { shape Cylinder icon library/icons/aws_rds.png } element "unclear" { background red color green } element "not-used" { background #d3d3d3 color #4C4C4C stroke #4C4C4C strokeWidth 10 opacity 60 } relationship "Relationship" { style solid routing Orthogonal position 60 } relationship "sns" { color blue } relationship "sqs" { color red } relationship "tcp" { color green } relationship "kinesis" { color #8a2be2 } relationship "push" { style dashed color green } relationship "unclear" { color orange thickness 5 } relationship "not-used" { opacity 60 } } /* END - Static configuration and properties for views */ /* Structurizr diagrams */ systemContext orgs "Orgs-context" "The Context diagram for the Organizations service" { include * autoLayout } container orgs "Orgs-container" "The Container diagram for the Organizations service" { include * } component orgs.service "Orgs_service-component" "The Component diagram for the Organizations service" { include * } } }