pyegeria 5.3.3.13.dev3__py3-none-any.whl → 5.3.3.14.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyegeria/mermaid_utilities.py +35 -21
- {pyegeria-5.3.3.13.dev3.dist-info → pyegeria-5.3.3.14.dev1.dist-info}/METADATA +1 -1
- {pyegeria-5.3.3.13.dev3.dist-info → pyegeria-5.3.3.14.dev1.dist-info}/RECORD +6 -15
- pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Subject Onboarding.html +0 -135
- pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Treatment Validation.html +0 -215
- pyegeria/commands/tech/work/mermaid_graphs/Employee Expense Payment.html +0 -126
- pyegeria/commands/tech/work/mermaid_graphs/New Drug Product Information Distribution.html +0 -141
- pyegeria/commands/tech/work/mermaid_graphs/New Employee Onboarding.html +0 -138
- pyegeria/commands/tech/work/mermaid_graphs/Personalized Treatment Ordering.html +0 -143
- pyegeria/commands/tech/work/mermaid_graphs/Physical Inventory Tracking.html +0 -178
- pyegeria/commands/tech/work/mermaid_graphs/Sustainability Reporting.html +0 -203
- pyegeria/commands/tech/work/mermaid_graphs/{{displayName}}.html +0 -115
- {pyegeria-5.3.3.13.dev3.dist-info → pyegeria-5.3.3.14.dev1.dist-info}/LICENSE +0 -0
- {pyegeria-5.3.3.13.dev3.dist-info → pyegeria-5.3.3.14.dev1.dist-info}/WHEEL +0 -0
- {pyegeria-5.3.3.13.dev3.dist-info → pyegeria-5.3.3.14.dev1.dist-info}/entry_points.txt +0 -0
pyegeria/mermaid_utilities.py
CHANGED
@@ -59,36 +59,42 @@ def load_mermaid():
|
|
59
59
|
display(HTML(mermaid_js))
|
60
60
|
|
61
61
|
|
62
|
+
# def render_mermaid(mermaid_code):
|
63
|
+
# """Function to display a Mermaid diagram in a Jupyter notebook"""
|
64
|
+
# mermaid_html = f"""
|
65
|
+
# <div class="mermaid">
|
66
|
+
# {mermaid_code}
|
67
|
+
# </div>
|
68
|
+
# <script type="text/javascript">
|
69
|
+
# if (window.mermaid) {{
|
70
|
+
# mermaid.initialize({{startOnLoad: true}});
|
71
|
+
# mermaid.contentLoaded();
|
72
|
+
# }}
|
73
|
+
# </script>
|
74
|
+
# """
|
75
|
+
# display(HTML(mermaid_html))
|
62
76
|
def render_mermaid(mermaid_code):
|
63
|
-
|
64
|
-
mermaid_html = f"""
|
65
|
-
<div class="mermaid">
|
66
|
-
{mermaid_code}
|
67
|
-
</div>
|
68
|
-
<script type="text/javascript">
|
69
|
-
if (window.mermaid) {{
|
70
|
-
mermaid.initialize({{startOnLoad: true}});
|
71
|
-
mermaid.contentLoaded();
|
72
|
-
}}
|
73
|
-
</script>
|
74
|
-
"""
|
75
|
-
display(HTML(mermaid_html))
|
77
|
+
return display(HTML(construct_mermaid_html(mermaid_code)))
|
76
78
|
|
77
79
|
|
78
80
|
def parse_mermaid_code(mermaid_code):
|
79
81
|
parts = mermaid_code.split('---', maxsplit=3)
|
80
82
|
if len(parts) == 3:
|
81
|
-
|
83
|
+
full_title = parts[1].strip()
|
84
|
+
title = full_title.split('[')[0]
|
85
|
+
guid = full_title.split('[')[1].split(']')[0]
|
82
86
|
mermaid_code = parts[2].strip()
|
83
87
|
else:
|
84
88
|
title = "No Title"
|
85
|
-
|
89
|
+
guid = "No GUID"
|
90
|
+
return title, guid, mermaid_code
|
86
91
|
|
87
92
|
def construct_mermaid_html(mermaid_str: str) -> str:
|
88
93
|
"""Function to display a HTML code in a Jupyter notebook"""
|
89
|
-
|
94
|
+
title_label, guid, mermaid_code = parse_mermaid_code(mermaid_str)
|
90
95
|
|
91
|
-
|
96
|
+
html_section1 = """
|
97
|
+
<!DOCTYPE html>
|
92
98
|
<html>
|
93
99
|
<head>
|
94
100
|
<style type="text/css">
|
@@ -106,8 +112,16 @@ def construct_mermaid_html(mermaid_str: str) -> str:
|
|
106
112
|
|
107
113
|
</style>
|
108
114
|
</head>
|
109
|
-
|
115
|
+
"""
|
116
|
+
html_section2 = f"""
|
117
|
+
<title>{title_label}</title>
|
118
|
+
<h3 style="text-align: center;">{title_label}</h3>
|
119
|
+
GUID : {guid}
|
120
|
+
|
121
|
+
"""
|
122
|
+
html_section3 = """
|
110
123
|
<body>
|
124
|
+
|
111
125
|
<div id="graphDiv"></div>
|
112
126
|
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
113
127
|
<script type="module">
|
@@ -140,7 +154,7 @@ def construct_mermaid_html(mermaid_str: str) -> str:
|
|
140
154
|
const graphDefinition = `
|
141
155
|
"""
|
142
156
|
|
143
|
-
|
157
|
+
html_section4 = r"""`;
|
144
158
|
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
145
159
|
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
146
160
|
|
@@ -197,7 +211,7 @@ def construct_mermaid_html(mermaid_str: str) -> str:
|
|
197
211
|
</body>
|
198
212
|
"""
|
199
213
|
|
200
|
-
return
|
214
|
+
return html_section1 + html_section2 + html_section3 + mermaid_code + html_section4
|
201
215
|
|
202
216
|
def save_mermaid_html(title: str, mermaid_str: str, folder:str = EGERIA_MERMAID_FOLDER):
|
203
217
|
"""Save a Mermaid diagram to a file"""
|
@@ -274,7 +288,7 @@ def save_mermaid_graph(title, mermaid_str, folder:str = EGERIA_MERMAID_FOLDER):
|
|
274
288
|
const graphDefinition = `
|
275
289
|
"""
|
276
290
|
|
277
|
-
html_postfix = """`;
|
291
|
+
html_postfix = r"""`;
|
278
292
|
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
279
293
|
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
280
294
|
|
@@ -208,15 +208,6 @@ pyegeria/commands/tech/list_solution_blueprints2.py,sha256=xY5JuUET3DHV_VWsdSIbt
|
|
208
208
|
pyegeria/commands/tech/list_tech_templates.py,sha256=FvJ2qAHo7yoCdd9LnZtvWjd3DQEvD0P5wfz5-D5qjmw,14153
|
209
209
|
pyegeria/commands/tech/list_valid_metadata_values.py,sha256=Mv4eSHCR_pR0llWRrpMIzNKA6_QEr8qccAv4NQv4dg0,6340
|
210
210
|
pyegeria/commands/tech/table_tech_templates.py,sha256=kv9VWhZ6pEN-1vEjo6IprliwFTjumjdVV3IWQB2HzI4,9503
|
211
|
-
pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Subject Onboarding.html,sha256=16mToSOApkMKXs5mEfsNXRM2A-24oOaU9LnufP1Z6yk,6072
|
212
|
-
pyegeria/commands/tech/work/mermaid_graphs/Clinical Trial Treatment Validation.html,sha256=PVxW_d_w0f-QmAbLqAyY5NDu9kQECFnbQNZVw00do_A,11715
|
213
|
-
pyegeria/commands/tech/work/mermaid_graphs/Employee Expense Payment.html,sha256=9qNTzdZvDzk0vkYQIBthlwt8qO5nOElolXbcqi94wgk,5240
|
214
|
-
pyegeria/commands/tech/work/mermaid_graphs/New Drug Product Information Distribution.html,sha256=vDAS_UNqPIUKl4ow0csi-t7m7oXqZQHGcIcBgJB9g38,6375
|
215
|
-
pyegeria/commands/tech/work/mermaid_graphs/New Employee Onboarding.html,sha256=QH4KJhtQxHlzabgGwGQpDNlSfSbTANm-FMYcGz0MPLg,6141
|
216
|
-
pyegeria/commands/tech/work/mermaid_graphs/Personalized Treatment Ordering.html,sha256=MBG_SglrzeNXPqRXmgPVaptVIEn4VdIX_myNFMd9Hlg,6550
|
217
|
-
pyegeria/commands/tech/work/mermaid_graphs/Physical Inventory Tracking.html,sha256=_0PgeTxnLpqHsD5lv-gzzYs1Qf_VktTgGhqKebMH8-c,9484
|
218
|
-
pyegeria/commands/tech/work/mermaid_graphs/Sustainability Reporting.html,sha256=HqfjagnJziZT-e1jBWP2_4ceodtdq1MbNe-OYeOIEjU,10718
|
219
|
-
pyegeria/commands/tech/work/mermaid_graphs/{{displayName}}.html,sha256=byK9OrB-elPwlF0QstNC7uzeI0vpv92Dxbnx_1N2xkc,4336
|
220
211
|
pyegeria/commands/tech/x_list_related_elements.py,sha256=viUFq_G52CvLO_RJsgN8fkLeIF89Tb8Gvl-nNfeDPSI,5871
|
221
212
|
pyegeria/core_omag_server_config.py,sha256=ej0oNpGelSTTm2oERS86LpgT9O9E5CZFbUm2Iek8f1E,97764
|
222
213
|
pyegeria/create_tech_guid_lists.py,sha256=mI__-i9U01emyqQMdPK2miealwQNiZfB23iiFGmrH0g,4640
|
@@ -229,7 +220,7 @@ pyegeria/feedback_manager_omvs.py,sha256=B66e3ZCaC_dirb0mcb2Nz3PYh2ZKsoMAYNOb3eu
|
|
229
220
|
pyegeria/full_omag_server_config.py,sha256=k3fUfopAFAE3OKkFR7zZPiki_FYj6j2xQ4oD2SVaefQ,47350
|
230
221
|
pyegeria/glossary_browser_omvs.py,sha256=NcitYaZJqwVODBO5zBtWpXPNUJJ3DKzEbRaOFSAyUlg,93554
|
231
222
|
pyegeria/glossary_manager_omvs.py,sha256=tBjoHrrHJLasXoeQSpW-KpF3vEQdN_GR3jfcceTjt_c,132444
|
232
|
-
pyegeria/mermaid_utilities.py,sha256=
|
223
|
+
pyegeria/mermaid_utilities.py,sha256=m8v6Wog16RwMa8OPZ95Q5dSY_qeXrK-iHDF2CIeaWjA,18041
|
233
224
|
pyegeria/metadata_explorer_omvs.py,sha256=XBg6q-JXOA8UYsT85nlpBVe4EQ6jxwj70MvE7tkVvH0,86905
|
234
225
|
pyegeria/my_profile_omvs.py,sha256=DyECbUFEcgokrIbzdMMNljC3bqfqKGXAF2wZEpzvRYs,34666
|
235
226
|
pyegeria/platform_services.py,sha256=CJIOYIFEbcIGwdWlApAQcXxZTsdrhFtpJcm4O3p7dG0,41646
|
@@ -242,8 +233,8 @@ pyegeria/template_manager_omvs.py,sha256=Sw5xsQAhy7a48xFCg59mg9_nqyhawoS9v4WyF-P
|
|
242
233
|
pyegeria/utils.py,sha256=1h6bwveadd6GpbnGLTmqPBmBk68QvxdjGTI9RfbrgKY,5415
|
243
234
|
pyegeria/valid_metadata_omvs.py,sha256=cCt5CCLv6BdzCu90n68r_PkG_PEQJjrtwCxio7K6yko,65034
|
244
235
|
pyegeria/x_action_author_omvs.py,sha256=xu1IQ0YbhIKi17C5a7Aq9u1Az2czwahNPpX9czmyVxE,6454
|
245
|
-
pyegeria-5.3.3.
|
246
|
-
pyegeria-5.3.3.
|
247
|
-
pyegeria-5.3.3.
|
248
|
-
pyegeria-5.3.3.
|
249
|
-
pyegeria-5.3.3.
|
236
|
+
pyegeria-5.3.3.14.dev1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
237
|
+
pyegeria-5.3.3.14.dev1.dist-info/METADATA,sha256=vRdys4w-1LV3F3rvqJa3PDBhijCUJpHm7WQJnMa4A_A,2741
|
238
|
+
pyegeria-5.3.3.14.dev1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
239
|
+
pyegeria-5.3.3.14.dev1.dist-info/entry_points.txt,sha256=cLnCR81Pm2c35hDDg7BOlQ9Mtvx5wofuvwXHnL1bGis,5956
|
240
|
+
pyegeria-5.3.3.14.dev1.dist-info/RECORD,,
|
@@ -1,135 +0,0 @@
|
|
1
|
-
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<style type="text/css">
|
5
|
-
#mySvgId {
|
6
|
-
width: 100%;
|
7
|
-
height: 100%;
|
8
|
-
overflow: hidden;
|
9
|
-
border: 1px solid #ccc;
|
10
|
-
position: relative;
|
11
|
-
margin-bottom: 10px;
|
12
|
-
}
|
13
|
-
svg {
|
14
|
-
cursor: grab;
|
15
|
-
}
|
16
|
-
|
17
|
-
</style>
|
18
|
-
</head>
|
19
|
-
|
20
|
-
<body>
|
21
|
-
<div id="graphDiv"></div>
|
22
|
-
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
-
<script type="module">
|
24
|
-
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
-
|
26
|
-
mermaid.initialize({startOnLoad: false});
|
27
|
-
await mermaid.run({
|
28
|
-
querySelector: '.mermaid',
|
29
|
-
postRenderCallback: (id) => {
|
30
|
-
const container = document.getElementById("diagram-container");
|
31
|
-
const svgElement = container.querySelector("svg");
|
32
|
-
|
33
|
-
// Initialize Panzoom
|
34
|
-
const panzoomInstance = Panzoom(svgElement, {
|
35
|
-
maxScale: 5,
|
36
|
-
minScale: 0.5,
|
37
|
-
step: 0.1,
|
38
|
-
});
|
39
|
-
|
40
|
-
// Add mouse wheel zoom
|
41
|
-
container.addEventListener("wheel", (event) => {
|
42
|
-
panzoomInstance.zoomWithWheel(event);
|
43
|
-
});
|
44
|
-
}
|
45
|
-
});
|
46
|
-
|
47
|
-
|
48
|
-
const drawDiagram = async function () {
|
49
|
-
const element = document.querySelector('#graphDiv');
|
50
|
-
const graphDefinition = `
|
51
|
-
flowchart TD
|
52
|
-
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
-
|
54
|
-
39a035f0-3b2b-45fe-adb8-ee8a19581f6a@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
-
**Clinical Trial Subject Onboarding**"}
|
56
|
-
b5691fb0-7569-43c1-bd4c-11198a11e733@{ shape: text, label: "*Description*
|
57
|
-
**Delivering the data necessary to add a person as a subject in a clinical trial.**"}
|
58
|
-
39a035f0-3b2b-45fe-adb8-ee8a19581f6a~~~b5691fb0-7569-43c1-bd4c-11198a11e733
|
59
|
-
2338ad35-78eb-4920-8003-d522b3cecf6b@{ shape: text, label: "*Purpose*
|
60
|
-
**Ensure patient subject is aware of the process and potential risks in participation.**"}
|
61
|
-
b5691fb0-7569-43c1-bd4c-11198a11e733~~~2338ad35-78eb-4920-8003-d522b3cecf6b
|
62
|
-
9f146a62-59f4-482b-8384-48b20ca76fa3@{ shape: text, label: "*Purpose*
|
63
|
-
**Ensure patient subject has given permission for Coco Pharmaceuticals to acquire, store and process their personal data needed for the clinical trial.**"}
|
64
|
-
2338ad35-78eb-4920-8003-d522b3cecf6b~~~9f146a62-59f4-482b-8384-48b20ca76fa3
|
65
|
-
bd1d332d-6e86-4953-8f83-b0a03b5e738c@{ shape: text, label: "*Purpose*
|
66
|
-
**Ensure incoming data is validated and catalogued.**"}
|
67
|
-
9f146a62-59f4-482b-8384-48b20ca76fa3~~~bd1d332d-6e86-4953-8f83-b0a03b5e738c
|
68
|
-
b58f5eba-9cf8-492d-bc86-966611bc7603@{ shape: text, label: "*Purpose*
|
69
|
-
**Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
|
70
|
-
bd1d332d-6e86-4953-8f83-b0a03b5e738c~~~b58f5eba-9cf8-492d-bc86-966611bc7603
|
71
|
-
1fd73811-9f3d-4599-9a22-1300e0931eff@{ shape: text, label: "*Purpose*
|
72
|
-
**Ensure the process of data capture and validation is transparent and auditable.**"}
|
73
|
-
b58f5eba-9cf8-492d-bc86-966611bc7603~~~1fd73811-9f3d-4599-9a22-1300e0931eff
|
74
|
-
style 39a035f0-3b2b-45fe-adb8-ee8a19581f6a color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
75
|
-
style 1fd73811-9f3d-4599-9a22-1300e0931eff color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
76
|
-
style b5691fb0-7569-43c1-bd4c-11198a11e733 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
77
|
-
style 9f146a62-59f4-482b-8384-48b20ca76fa3 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
78
|
-
style 2338ad35-78eb-4920-8003-d522b3cecf6b color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
79
|
-
style b58f5eba-9cf8-492d-bc86-966611bc7603 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
80
|
-
style bd1d332d-6e86-4953-8f83-b0a03b5e738c color:#000000, fill:#F9F7ED, stroke:#b7c0c7`;
|
81
|
-
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
82
|
-
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
83
|
-
|
84
|
-
var doPan = false;
|
85
|
-
var eventsHandler;
|
86
|
-
var panZoom;
|
87
|
-
var mousepos;
|
88
|
-
|
89
|
-
eventsHandler = {
|
90
|
-
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
91
|
-
|
92
|
-
, mouseDownHandler: function (ev) {
|
93
|
-
if (event.target.className == "[object SVGAnimatedString]") {
|
94
|
-
doPan = true;
|
95
|
-
mousepos = {x: ev.clientX, y: ev.clientY}
|
96
|
-
}
|
97
|
-
;
|
98
|
-
}
|
99
|
-
|
100
|
-
, mouseMoveHandler: function (ev) {
|
101
|
-
if (doPan) {
|
102
|
-
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
103
|
-
mousepos = {x: ev.clientX, y: ev.clientY};
|
104
|
-
window.getSelection().removeAllRanges();
|
105
|
-
}
|
106
|
-
}
|
107
|
-
|
108
|
-
, mouseUpHandler: function (ev) {
|
109
|
-
doPan = false;
|
110
|
-
}
|
111
|
-
|
112
|
-
, init: function (options) {
|
113
|
-
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
114
|
-
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
115
|
-
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
116
|
-
}
|
117
|
-
|
118
|
-
, destroy: function (options) {
|
119
|
-
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
120
|
-
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
121
|
-
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
122
|
-
}
|
123
|
-
}
|
124
|
-
panZoom = svgPanZoom('#mySvgId', {
|
125
|
-
zoomEnabled: true
|
126
|
-
, controlIconsEnabled: true
|
127
|
-
, fit: 1
|
128
|
-
, center: 1
|
129
|
-
, customEventsHandler: eventsHandler
|
130
|
-
})
|
131
|
-
};
|
132
|
-
await drawDiagram();
|
133
|
-
</script>
|
134
|
-
</body>
|
135
|
-
|
@@ -1,215 +0,0 @@
|
|
1
|
-
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<style type="text/css">
|
5
|
-
#mySvgId {
|
6
|
-
width: 100%;
|
7
|
-
height: 100%;
|
8
|
-
overflow: hidden;
|
9
|
-
border: 1px solid #ccc;
|
10
|
-
position: relative;
|
11
|
-
margin-bottom: 10px;
|
12
|
-
}
|
13
|
-
svg {
|
14
|
-
cursor: grab;
|
15
|
-
}
|
16
|
-
|
17
|
-
</style>
|
18
|
-
</head>
|
19
|
-
|
20
|
-
<body>
|
21
|
-
<div id="graphDiv"></div>
|
22
|
-
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
-
<script type="module">
|
24
|
-
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
-
|
26
|
-
mermaid.initialize({startOnLoad: false});
|
27
|
-
await mermaid.run({
|
28
|
-
querySelector: '.mermaid',
|
29
|
-
postRenderCallback: (id) => {
|
30
|
-
const container = document.getElementById("diagram-container");
|
31
|
-
const svgElement = container.querySelector("svg");
|
32
|
-
|
33
|
-
// Initialize Panzoom
|
34
|
-
const panzoomInstance = Panzoom(svgElement, {
|
35
|
-
maxScale: 5,
|
36
|
-
minScale: 0.5,
|
37
|
-
step: 0.1,
|
38
|
-
});
|
39
|
-
|
40
|
-
// Add mouse wheel zoom
|
41
|
-
container.addEventListener("wheel", (event) => {
|
42
|
-
panzoomInstance.zoomWithWheel(event);
|
43
|
-
});
|
44
|
-
}
|
45
|
-
});
|
46
|
-
|
47
|
-
|
48
|
-
const drawDiagram = async function () {
|
49
|
-
const element = document.querySelector('#graphDiv');
|
50
|
-
const graphDefinition = `
|
51
|
-
flowchart TD
|
52
|
-
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
-
|
54
|
-
1f71e403-1187-4f03-a1dd-ae7dc105f06f@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
-
**Clinical Trial Treatment Validation**"}
|
56
|
-
c5135483-a30c-4dfc-8729-54d306b0d2cc@{ shape: text, label: "*Description*
|
57
|
-
**Delivering data relating to a clinical trial from the hospitals to the Coco Researchers so that they can then determine the efficacy of the treatment to report to the regulators.**"}
|
58
|
-
1f71e403-1187-4f03-a1dd-ae7dc105f06f~~~c5135483-a30c-4dfc-8729-54d306b0d2cc
|
59
|
-
8033331a-7342-4a66-b85a-0aa1bd35b203@{ shape: text, label: "*Purpose*
|
60
|
-
**Deliver patient measurement data from hospitals to data scientists in research.**"}
|
61
|
-
c5135483-a30c-4dfc-8729-54d306b0d2cc~~~8033331a-7342-4a66-b85a-0aa1bd35b203
|
62
|
-
25ca6519-ef83-4789-a8a9-ef08e8d195a0@{ shape: text, label: "*Purpose*
|
63
|
-
**Ensure incoming data is only from certified hospitals.**"}
|
64
|
-
8033331a-7342-4a66-b85a-0aa1bd35b203~~~25ca6519-ef83-4789-a8a9-ef08e8d195a0
|
65
|
-
68c30b1a-d716-4a34-b656-7b53f21e0d38@{ shape: text, label: "*Purpose*
|
66
|
-
**Ensure incoming data is validated and catalogued.**"}
|
67
|
-
25ca6519-ef83-4789-a8a9-ef08e8d195a0~~~68c30b1a-d716-4a34-b656-7b53f21e0d38
|
68
|
-
2e6b651b-1235-411d-87f7-5bbb25e91057@{ shape: text, label: "*Purpose*
|
69
|
-
**Ensure data and process owners are informed of key milestones and issues requiring attention.**"}
|
70
|
-
68c30b1a-d716-4a34-b656-7b53f21e0d38~~~2e6b651b-1235-411d-87f7-5bbb25e91057
|
71
|
-
ded87798-758f-4cc2-895f-95467009fe41@{ shape: text, label: "*Purpose*
|
72
|
-
**Ensure the process of data capture and treatment validation is transparent and auditable.**"}
|
73
|
-
2e6b651b-1235-411d-87f7-5bbb25e91057~~~ded87798-758f-4cc2-895f-95467009fe41
|
74
|
-
baf2f019-afff-487d-9a40-4fcdce8f8b84@{ shape: text, label: "*Purpose*
|
75
|
-
**Ensure the treatment validation report is complete and regulatory compliant.**"}
|
76
|
-
ded87798-758f-4cc2-895f-95467009fe41~~~baf2f019-afff-487d-9a40-4fcdce8f8b84
|
77
|
-
38635d38-f728-400d-a8ec-7c26e68b7c0f@{ shape: hex, label: "*Information Supply Chain Segment*
|
78
|
-
**Weekly Measurements Onboarding**"}
|
79
|
-
38635d38-f728-400d-a8ec-7c26e68b7c0f-->|"capture and catalog,
|
80
|
-
[Information Supply Chain Link]"|7edca02c-e726-4570-815c-280bdf5498b9
|
81
|
-
e4303326-e418-4f77-b8e7-fd5d34717594@{ shape: hex, label: "*Information Supply Chain Segment*
|
82
|
-
**Assess Treatment under Trial**"}
|
83
|
-
e4303326-e418-4f77-b8e7-fd5d34717594-->|"publish results,
|
84
|
-
[Information Supply Chain Link]"|4fc47e60-f1b5-469c-b666-e1f4570e749f
|
85
|
-
04ae768e-3816-47bc-bddb-c9ae25018684@{ shape: hex, label: "*Information Supply Chain Segment*
|
86
|
-
**Hospital Delivers Patient Weekly Readings**"}
|
87
|
-
04ae768e-3816-47bc-bddb-c9ae25018684-->|"publish,
|
88
|
-
[Information Supply Chain Link]"|38635d38-f728-400d-a8ec-7c26e68b7c0f
|
89
|
-
4fc47e60-f1b5-469c-b666-e1f4570e749f@{ shape: hex, label: "*Information Supply Chain Segment*
|
90
|
-
**Deliver Treatment Assessment Report**"}
|
91
|
-
7edca02c-e726-4570-815c-280bdf5498b9@{ shape: hex, label: "*Information Supply Chain Segment*
|
92
|
-
**Data Lake to Sandbox**"}
|
93
|
-
7edca02c-e726-4570-815c-280bdf5498b9-->|"assemble,
|
94
|
-
[Information Supply Chain Link]"|e4303326-e418-4f77-b8e7-fd5d34717594
|
95
|
-
1c150d6e-30cf-481c-9afb-3b06c9c9e78f@{ shape: rect, label: "*Solution Component*
|
96
|
-
**SolutionComponent:Hospital Landing Area Folder:V1.0**"}
|
97
|
-
7f5dca65-50b4-4103-9ac7-3a406a09047a@{ shape: rect, label: "*Solution Component*
|
98
|
-
**SolutionComponent:Weekly Measurements Onboarding Pipeline:V1.0**"}
|
99
|
-
07705e15-efff-4f80-8992-f04ac85e0ef1@{ shape: rect, label: "*Solution Component*
|
100
|
-
**SolutionComponent:Landing Folder Cataloguer:V1.0**"}
|
101
|
-
a5d4d638-6836-47e5-99d0-fdcde637e13f@{ shape: rect, label: "*Solution Component*
|
102
|
-
**SolutionComponent:Weekly Measurements Data Lake Folder:V1.0**"}
|
103
|
-
1c150d6e-30cf-481c-9afb-3b06c9c9e78f-->|"detect new files,
|
104
|
-
[Solution Linking Wire]"|07705e15-efff-4f80-8992-f04ac85e0ef1
|
105
|
-
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec@{ shape: rect, label: "*Solution Component*
|
106
|
-
**SolutionComponent:Hospital Processes:V1.0**"}
|
107
|
-
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec-->|"publish,
|
108
|
-
[Solution Linking Wire]"|1c150d6e-30cf-481c-9afb-3b06c9c9e78f
|
109
|
-
07705e15-efff-4f80-8992-f04ac85e0ef1-->|"request onboarding,
|
110
|
-
[Solution Linking Wire]"|7f5dca65-50b4-4103-9ac7-3a406a09047a
|
111
|
-
7f5dca65-50b4-4103-9ac7-3a406a09047a-->|"save new files,
|
112
|
-
[Solution Linking Wire]"|a5d4d638-6836-47e5-99d0-fdcde637e13f
|
113
|
-
26c07ca4-3b8e-484b-812b-36c1ace4b275@{ shape: rect, label: "*Solution Component*
|
114
|
-
**SolutionComponent:Populate Sandbox:V1.0**"}
|
115
|
-
a5d4d638-6836-47e5-99d0-fdcde637e13f-->|"read certified files,
|
116
|
-
[Solution Linking Wire]"|26c07ca4-3b8e-484b-812b-36c1ace4b275
|
117
|
-
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5@{ shape: rect, label: "*Solution Component*
|
118
|
-
**SolutionComponent:Treatment Efficacy Evidence:V1.0**"}
|
119
|
-
b5c8da4c-f925-4cf1-8294-e43cd2c1a584@{ shape: rect, label: "*Solution Component*
|
120
|
-
**SolutionComponent:Analyse Patient Data:V1.0**"}
|
121
|
-
d48f579f-76d3-4c49-b1b4-575f5645a9d0@{ shape: rect, label: "*Solution Component*
|
122
|
-
**SolutionComponent:Treatment Validation Sandbox:V1.0**"}
|
123
|
-
72a86eec-9734-4bc0-babb-4fec0aa7c9ff@{ shape: rect, label: "*Solution Component*
|
124
|
-
**SolutionComponent:Assemble Treatment Assessment Report:V1.0**"}
|
125
|
-
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5-->|"retrieve evidence,
|
126
|
-
[Solution Linking Wire]"|72a86eec-9734-4bc0-babb-4fec0aa7c9ff
|
127
|
-
b5c8da4c-f925-4cf1-8294-e43cd2c1a584-->|"publish results,
|
128
|
-
[Solution Linking Wire]"|48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5
|
129
|
-
d48f579f-76d3-4c49-b1b4-575f5645a9d0-->|"retrieve patient data,
|
130
|
-
[Solution Linking Wire]"|b5c8da4c-f925-4cf1-8294-e43cd2c1a584
|
131
|
-
26c07ca4-3b8e-484b-812b-36c1ace4b275-->|"write patient measurements,
|
132
|
-
[Solution Linking Wire]"|d48f579f-76d3-4c49-b1b4-575f5645a9d0
|
133
|
-
0bf2547c-937c-41b6-814f-6284849271a1@{ shape: rect, label: "*Solution Component*
|
134
|
-
**SolutionComponent:Treatment Assessment Report Validation and Delivery:V1.0**"}
|
135
|
-
72a86eec-9734-4bc0-babb-4fec0aa7c9ff-->|"publish results,
|
136
|
-
[Solution Linking Wire]"|0bf2547c-937c-41b6-814f-6284849271a1
|
137
|
-
style 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
138
|
-
style e4303326-e418-4f77-b8e7-fd5d34717594 color:#004563, fill:#b7c0c7, stroke:#004563
|
139
|
-
style 4fc47e60-f1b5-469c-b666-e1f4570e749f color:#004563, fill:#b7c0c7, stroke:#004563
|
140
|
-
style 2e6b651b-1235-411d-87f7-5bbb25e91057 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
141
|
-
style ded87798-758f-4cc2-895f-95467009fe41 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
142
|
-
style 7f5dca65-50b4-4103-9ac7-3a406a09047a color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
143
|
-
style ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
144
|
-
style c5135483-a30c-4dfc-8729-54d306b0d2cc color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
145
|
-
style a5d4d638-6836-47e5-99d0-fdcde637e13f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
146
|
-
style 72a86eec-9734-4bc0-babb-4fec0aa7c9ff color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
147
|
-
style baf2f019-afff-487d-9a40-4fcdce8f8b84 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
148
|
-
style 38635d38-f728-400d-a8ec-7c26e68b7c0f color:#004563, fill:#b7c0c7, stroke:#004563
|
149
|
-
style 7edca02c-e726-4570-815c-280bdf5498b9 color:#004563, fill:#b7c0c7, stroke:#004563
|
150
|
-
style b5c8da4c-f925-4cf1-8294-e43cd2c1a584 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
151
|
-
style 0bf2547c-937c-41b6-814f-6284849271a1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
152
|
-
style d48f579f-76d3-4c49-b1b4-575f5645a9d0 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
153
|
-
style 1f71e403-1187-4f03-a1dd-ae7dc105f06f color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
154
|
-
style 25ca6519-ef83-4789-a8a9-ef08e8d195a0 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
155
|
-
style 8033331a-7342-4a66-b85a-0aa1bd35b203 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
156
|
-
style 04ae768e-3816-47bc-bddb-c9ae25018684 color:#004563, fill:#b7c0c7, stroke:#004563
|
157
|
-
style 68c30b1a-d716-4a34-b656-7b53f21e0d38 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
158
|
-
style 26c07ca4-3b8e-484b-812b-36c1ace4b275 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
159
|
-
style 1c150d6e-30cf-481c-9afb-3b06c9c9e78f color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
160
|
-
style 07705e15-efff-4f80-8992-f04ac85e0ef1 color:#FFFFFF, fill:#838cc7, stroke:#3079ab`;
|
161
|
-
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
162
|
-
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
163
|
-
|
164
|
-
var doPan = false;
|
165
|
-
var eventsHandler;
|
166
|
-
var panZoom;
|
167
|
-
var mousepos;
|
168
|
-
|
169
|
-
eventsHandler = {
|
170
|
-
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
171
|
-
|
172
|
-
, mouseDownHandler: function (ev) {
|
173
|
-
if (event.target.className == "[object SVGAnimatedString]") {
|
174
|
-
doPan = true;
|
175
|
-
mousepos = {x: ev.clientX, y: ev.clientY}
|
176
|
-
}
|
177
|
-
;
|
178
|
-
}
|
179
|
-
|
180
|
-
, mouseMoveHandler: function (ev) {
|
181
|
-
if (doPan) {
|
182
|
-
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
183
|
-
mousepos = {x: ev.clientX, y: ev.clientY};
|
184
|
-
window.getSelection().removeAllRanges();
|
185
|
-
}
|
186
|
-
}
|
187
|
-
|
188
|
-
, mouseUpHandler: function (ev) {
|
189
|
-
doPan = false;
|
190
|
-
}
|
191
|
-
|
192
|
-
, init: function (options) {
|
193
|
-
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
194
|
-
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
195
|
-
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
196
|
-
}
|
197
|
-
|
198
|
-
, destroy: function (options) {
|
199
|
-
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
200
|
-
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
201
|
-
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
202
|
-
}
|
203
|
-
}
|
204
|
-
panZoom = svgPanZoom('#mySvgId', {
|
205
|
-
zoomEnabled: true
|
206
|
-
, controlIconsEnabled: true
|
207
|
-
, fit: 1
|
208
|
-
, center: 1
|
209
|
-
, customEventsHandler: eventsHandler
|
210
|
-
})
|
211
|
-
};
|
212
|
-
await drawDiagram();
|
213
|
-
</script>
|
214
|
-
</body>
|
215
|
-
|
@@ -1,126 +0,0 @@
|
|
1
|
-
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<style type="text/css">
|
5
|
-
#mySvgId {
|
6
|
-
width: 100%;
|
7
|
-
height: 100%;
|
8
|
-
overflow: hidden;
|
9
|
-
border: 1px solid #ccc;
|
10
|
-
position: relative;
|
11
|
-
margin-bottom: 10px;
|
12
|
-
}
|
13
|
-
svg {
|
14
|
-
cursor: grab;
|
15
|
-
}
|
16
|
-
|
17
|
-
</style>
|
18
|
-
</head>
|
19
|
-
|
20
|
-
<body>
|
21
|
-
<div id="graphDiv"></div>
|
22
|
-
<script src="https://bumbu.me/svg-pan-zoom/dist/svg-pan-zoom.min.js"></script>
|
23
|
-
<script type="module">
|
24
|
-
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
|
25
|
-
|
26
|
-
mermaid.initialize({startOnLoad: false});
|
27
|
-
await mermaid.run({
|
28
|
-
querySelector: '.mermaid',
|
29
|
-
postRenderCallback: (id) => {
|
30
|
-
const container = document.getElementById("diagram-container");
|
31
|
-
const svgElement = container.querySelector("svg");
|
32
|
-
|
33
|
-
// Initialize Panzoom
|
34
|
-
const panzoomInstance = Panzoom(svgElement, {
|
35
|
-
maxScale: 5,
|
36
|
-
minScale: 0.5,
|
37
|
-
step: 0.1,
|
38
|
-
});
|
39
|
-
|
40
|
-
// Add mouse wheel zoom
|
41
|
-
container.addEventListener("wheel", (event) => {
|
42
|
-
panzoomInstance.zoomWithWheel(event);
|
43
|
-
});
|
44
|
-
}
|
45
|
-
});
|
46
|
-
|
47
|
-
|
48
|
-
const drawDiagram = async function () {
|
49
|
-
const element = document.querySelector('#graphDiv');
|
50
|
-
const graphDefinition = `
|
51
|
-
flowchart TD
|
52
|
-
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
53
|
-
|
54
|
-
79d1d83f-6a37-4c32-bf3f-eb8b4358027c@{ shape: flip-tri, label: "*Information Supply Chain*
|
55
|
-
**Employee Expense Payment**"}
|
56
|
-
36905eb3-ebc3-4f78-92bd-81ab7f04b0c8@{ shape: text, label: "*Description*
|
57
|
-
**Managing the collection of expense data, its approval and the subsequent payment authorization flows.**"}
|
58
|
-
79d1d83f-6a37-4c32-bf3f-eb8b4358027c~~~36905eb3-ebc3-4f78-92bd-81ab7f04b0c8
|
59
|
-
64023ff1-9b61-4655-aa0c-6310961f6d19@{ shape: text, label: "*Purpose*
|
60
|
-
**Ensure employees are reimbursed for their expenses in a timely manner.**"}
|
61
|
-
36905eb3-ebc3-4f78-92bd-81ab7f04b0c8~~~64023ff1-9b61-4655-aa0c-6310961f6d19
|
62
|
-
88c42780-6fb1-49e2-a584-8af90cdc7728@{ shape: rounded, label: "*Software Server*
|
63
|
-
**System:coco-hrim**"}
|
64
|
-
ad8eab54-c2f7-494d-82d0-bf5985e5a58d@{ shape: rounded, label: "*Software Server*
|
65
|
-
**System:coco-expenses**"}
|
66
|
-
88c42780-6fb1-49e2-a584-8af90cdc7728-->|"payment authorization [Data Flow]"|ad8eab54-c2f7-494d-82d0-bf5985e5a58d
|
67
|
-
style ad8eab54-c2f7-494d-82d0-bf5985e5a58d color:#000000, fill:#e0ab18, stroke:#004563
|
68
|
-
style 79d1d83f-6a37-4c32-bf3f-eb8b4358027c color:#FFFFFF, fill:#004563, stroke:#b7c0c7
|
69
|
-
style 64023ff1-9b61-4655-aa0c-6310961f6d19 color:#000000, fill:#F9F7ED, stroke:#b7c0c7
|
70
|
-
style 88c42780-6fb1-49e2-a584-8af90cdc7728 color:#000000, fill:#e0ab18, stroke:#004563
|
71
|
-
style 36905eb3-ebc3-4f78-92bd-81ab7f04b0c8 color:#000000, fill:#F9F7ED, stroke:#b7c0c7`;
|
72
|
-
const {svg} = await mermaid.render('mySvgId', graphDefinition);
|
73
|
-
element.innerHTML = svg.replace(/( )*max-width:( 0-9\.)*px;/i, '');
|
74
|
-
|
75
|
-
var doPan = false;
|
76
|
-
var eventsHandler;
|
77
|
-
var panZoom;
|
78
|
-
var mousepos;
|
79
|
-
|
80
|
-
eventsHandler = {
|
81
|
-
haltEventListeners: ['mousedown', 'mousemove', 'mouseup']
|
82
|
-
|
83
|
-
, mouseDownHandler: function (ev) {
|
84
|
-
if (event.target.className == "[object SVGAnimatedString]") {
|
85
|
-
doPan = true;
|
86
|
-
mousepos = {x: ev.clientX, y: ev.clientY}
|
87
|
-
}
|
88
|
-
;
|
89
|
-
}
|
90
|
-
|
91
|
-
, mouseMoveHandler: function (ev) {
|
92
|
-
if (doPan) {
|
93
|
-
panZoom.panBy({x: ev.clientX - mousepos.x, y: ev.clientY - mousepos.y});
|
94
|
-
mousepos = {x: ev.clientX, y: ev.clientY};
|
95
|
-
window.getSelection().removeAllRanges();
|
96
|
-
}
|
97
|
-
}
|
98
|
-
|
99
|
-
, mouseUpHandler: function (ev) {
|
100
|
-
doPan = false;
|
101
|
-
}
|
102
|
-
|
103
|
-
, init: function (options) {
|
104
|
-
options.svgElement.addEventListener('mousedown', this.mouseDownHandler, false);
|
105
|
-
options.svgElement.addEventListener('mousemove', this.mouseMoveHandler, false);
|
106
|
-
options.svgElement.addEventListener('mouseup', this.mouseUpHandler, false);
|
107
|
-
}
|
108
|
-
|
109
|
-
, destroy: function (options) {
|
110
|
-
options.svgElement.removeEventListener('mousedown', this.mouseDownHandler, false);
|
111
|
-
options.svgElement.removeEventListener('mousemove', this.mouseMoveHandler, false);
|
112
|
-
options.svgElement.removeEventListener('mouseup', this.mouseUpHandler, false);
|
113
|
-
}
|
114
|
-
}
|
115
|
-
panZoom = svgPanZoom('#mySvgId', {
|
116
|
-
zoomEnabled: true
|
117
|
-
, controlIconsEnabled: true
|
118
|
-
, fit: 1
|
119
|
-
, center: 1
|
120
|
-
, customEventsHandler: eventsHandler
|
121
|
-
})
|
122
|
-
};
|
123
|
-
await drawDiagram();
|
124
|
-
</script>
|
125
|
-
</body>
|
126
|
-
|