-
-
Notifications
You must be signed in to change notification settings - Fork 81
/
Copy pathInsurance-Example_Team-Map.cml
193 lines (151 loc) · 4.91 KB
/
Insurance-Example_Team-Map.cml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
/* Example Context Map written with 'ContextMapper DSL' */
ContextMap InsuranceTeamMap {
type = ORGANIZATIONAL
state = TO_BE
/* Add contexts that represent subsystems/components to this organizational map: */
contains CustomerManagementContext, CustomerSelfServiceContext, PolicyManagementContext, RiskManagementContext
/* Add teams to this organizational map: */
contains CustomersBackofficeTeam, CustomersFrontofficeTeam, ContractsTeam
/* Define the subsystem/component relationships: */
CustomerSelfServiceContext [D,C]<-[U,S] CustomerManagementContext
PolicyManagementContext [D,CF]<-[U,OHS,PL] CustomerManagementContext
PolicyManagementContext [P]<->[P] RiskManagementContext
/* Define the team relationships: */
CustomersBackofficeTeam [U,S]->[D,C] CustomersFrontofficeTeam
CustomersBackofficeTeam [U]->[D] ContractsTeam
}
/* Team Definitions */
BoundedContext CustomersBackofficeTeam implements CustomerManagementDomain realizes CustomerManagementContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the customers module in the back-office system."
}
BoundedContext CustomersFrontofficeTeam implements CustomerManagementDomain realizes CustomerSelfServiceContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the front-office application for the insurance customers."
}
BoundedContext ContractsTeam implements PolicyManagementDomain, RiskManagementDomain realizes PolicyManagementContext, RiskManagementContext {
type = TEAM
domainVisionStatement = "This team is responsible for implementing the contract-, policy-, and risk-management modules in the back-office system."
}
/* Bounded Context Definitions */
BoundedContext CustomerManagementContext implements CustomerManagementDomain {
type = FEATURE
domainVisionStatement = "The customer management context is responsible for managing all the data of the insurance companies customers."
implementationTechnology = "Java, JEE Application"
responsibilities = "Customers, Addresses"
Aggregate Customers {
Entity Customer {
aggregateRoot
- SocialInsuranceNumber sin
String firstname
String lastname
- List<Address> addresses
}
Entity Address {
String street
int postalCode
String city
}
ValueObject SocialInsuranceNumber {
String sin key
}
}
}
BoundedContext CustomerSelfServiceContext implements CustomerManagementDomain {
type = APPLICATION
domainVisionStatement = "This context represents a web application which allows the customer to login and change basic data records like the address."
responsibilities = "Address Change"
implementationTechnology = "PHP Web Application"
Aggregate CustomerFrontend {
Entity CustomerAddressChange {
aggregateRoot
- UserAccount issuer
- Address changedAddress
}
}
Aggregate Acounts {
Entity UserAccount {
aggregateRoot
String username
- Customer accountCustomer
}
}
}
BoundedContext PolicyManagementContext implements PolicyManagementDomain {
type = FEATURE
domainVisionStatement = "This bounded context manages the contracts and policies of the customers."
responsibilities = "Offers, Contracts, Policies"
implementationTechnology = "Java, Spring App"
Aggregate Offers {
Entity Offer {
aggregateRoot
int offerId
- Customer client
- List<Product> products
BigDecimal price
}
}
Aggregate Products {
Entity Product {
aggregateRoot
- ProductId identifier
String productName
}
ValueObject ProductId {
int productId key
}
}
Aggregate Contract {
Entity Contract {
aggregateRoot
- ContractId identifier
- Customer client
- List<Product> products
}
ValueObject ContractId {
int contractId key
}
Entity Policy {
int policyNr
- Contract contract
BigDecimal price
}
}
}
BoundedContext RiskManagementContext implements RiskManagementDomain {
type = FEATURE
domainVisionStatement = "Uses data from PolicyManagement context to calculate risks."
responsibilities = "Customer Risk Calculation"
implementationTechnology = "Java, Spring App"
Aggregate Risks {
Entity CustomerRiskFactor {
aggregateRoot
int totalRiskFactor
- List<Risk> risks
- Customer client
}
ValueObject Risk {
int likelihood
String risk
}
}
}
/* Domain & Subdomain Definitions */
Domain InsuranceDomain {
Subdomain CustomerManagementDomain {
type = CORE_DOMAIN
domainVisionStatement = "Subdomain managing everything customer-related."
}
Subdomain PolicyManagementDomain {
type = CORE_DOMAIN
domainVisionStatement = "Subdomain managing contracts and policies."
}
Subdomain RiskManagementDomain {
type = GENERIC_SUBDOMAIN
domainVisionStatement = "Subdomain supporting everything which relates to risk management."
}
Subdomain DebtsDomain {
type = GENERIC_SUBDOMAIN
domainVisionStatement = "Subomain including everything related to the incoming money (debts, dunning, etc.)"
}
}