pyegeria 5.3.4.11__py3-none-any.whl → 5.3.4.13__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 +261 -112
- pyegeria/test_m.html +166 -178
- {pyegeria-5.3.4.11.dist-info → pyegeria-5.3.4.13.dist-info}/METADATA +1 -1
- {pyegeria-5.3.4.11.dist-info → pyegeria-5.3.4.13.dist-info}/RECORD +7 -7
- {pyegeria-5.3.4.11.dist-info → pyegeria-5.3.4.13.dist-info}/LICENSE +0 -0
- {pyegeria-5.3.4.11.dist-info → pyegeria-5.3.4.13.dist-info}/WHEEL +0 -0
- {pyegeria-5.3.4.11.dist-info → pyegeria-5.3.4.13.dist-info}/entry_points.txt +0 -0
pyegeria/mermaid_utilities.py
CHANGED
@@ -227,138 +227,287 @@ def construct_mermaid_html(mermaid_str: str) -> str:
|
|
227
227
|
escaped_header = html.escape(title_label) if title_label else "" # Sanitize the header safely
|
228
228
|
escaped_mermaid_code = html.escape(mermaid_code)
|
229
229
|
|
230
|
-
header_html = f"""
|
231
|
-
<h3 id="{graph_id}-heading" style="margin: 20px 0; font-size: 1.5em; text-align: center;">
|
232
|
-
{escaped_header}
|
233
|
-
</h3>
|
234
|
-
<p id="{graph_id}-subheading" style="margin: 0; padding: 5px; font-size: 1em; text-align: center; color: gray; flex: 0 0 auto;">
|
235
|
-
GUID: {guid}
|
236
|
-
</p>
|
237
|
-
""" if title_label else ""
|
238
|
-
|
239
230
|
html_content = f"""
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
231
|
+
<style>
|
232
|
+
/* Style for the diagram container */
|
233
|
+
.diagram-container {{
|
234
|
+
position: relative;
|
235
|
+
width: 100%; /* Adjust the diagram container width */
|
236
|
+
height: 500px; /* Set a fixed height for the container */
|
237
|
+
margin: 0 auto;
|
238
|
+
border: 1px solid #ccc; /* Optional border for visualization */
|
239
|
+
overflow: hidden; /* Prevent content overflow outside the container */
|
240
|
+
}}
|
241
|
+
|
242
|
+
/* Style for zoom controls */
|
243
|
+
.svg-pan-zoom_controls {{
|
244
|
+
position: absolute;
|
245
|
+
top: 10px;
|
246
|
+
right: 10px;
|
247
|
+
display: flex;
|
248
|
+
flex-direction: column;
|
249
|
+
gap: 5px;
|
250
|
+
}}
|
251
|
+
.svg-pan-zoom_controls button {{
|
252
|
+
background-color: #007bff;
|
253
|
+
color: white;
|
254
|
+
border: none;
|
255
|
+
padding: 5px 10px;
|
256
|
+
border-radius: 3px;
|
257
|
+
cursor: pointer;
|
258
|
+
font-size: 14px;
|
259
|
+
}}
|
260
|
+
.svg-pan-zoom_controls button:hover {{
|
261
|
+
background-color: #0056b3;
|
262
|
+
}}
|
263
|
+
</style>
|
264
|
+
|
265
|
+
<div id="{graph_id}-container" class="diagram-container">
|
266
|
+
<!-- Mermaid diagram will be dynamically rendered here -->
|
267
|
+
<div id="{graph_id}" class="mermaid">
|
268
|
+
{mermaid_code}
|
255
269
|
</div>
|
256
|
-
|
257
|
-
<style>
|
258
|
-
/* Ensure no margins or padding for the body or html in Jupyter */
|
259
|
-
body, html {{
|
260
|
-
margin: 0;
|
261
|
-
padding: 0;
|
262
|
-
width: 100%;
|
263
|
-
height: 100%;
|
264
|
-
}}
|
265
|
-
/* General reset for Jupyter Notebook's extra spacing */
|
266
|
-
#notebook, .container, .cell, .output_area {{
|
267
|
-
margin: 0 !important;
|
268
|
-
padding: 0 !important;
|
269
|
-
}}
|
270
|
-
.diagram-container {{
|
271
|
-
width: 100%;
|
272
|
-
height: 100%;
|
273
|
-
overflow: hidden; /* Prevent scrollbars during zoom/pan */
|
274
|
-
}}
|
275
|
-
h2 {{
|
276
|
-
margin: 0;
|
277
|
-
padding: 10px;
|
278
|
-
font-size: 24px;
|
279
|
-
text-align: center;
|
280
|
-
flex: 0 0 auto; /* Fix height explicitly for heading */
|
281
|
-
}}
|
282
|
-
.mermaid {{
|
283
|
-
margin: 0;
|
284
|
-
padding: 0;
|
285
|
-
}}
|
286
|
-
</style>
|
287
|
-
|
288
|
-
<script>
|
289
|
-
(function() {{
|
290
|
-
const graphId = "{graph_id}"; // Pass the graph ID
|
270
|
+
</div>
|
291
271
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
}
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
272
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
273
|
+
<script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js"></script>
|
274
|
+
<script>
|
275
|
+
document.addEventListener("DOMContentLoaded", () => {{
|
276
|
+
// Initialize Mermaid and Pan-Zoom functionality
|
277
|
+
const graph_id = "{graph_id}";
|
278
|
+
|
279
|
+
function initializeMermaid(graph_id) {{
|
280
|
+
const containerElement = document.getElementById(`${{graph_id}}-container`);
|
281
|
+
|
282
|
+
if (!containerElement) {{
|
283
|
+
console.error(`Container with ID "${{graph_id}}-container" not found.`);
|
284
|
+
return;
|
285
|
+
}}
|
286
|
+
|
287
|
+
// Configure Mermaid
|
288
|
+
mermaid.initialize({{ startOnLoad: false, logLevel: "debug" }});
|
289
|
+
mermaid.init(undefined, `#${{graph_id}}`);
|
303
290
|
|
304
291
|
setTimeout(() => {{
|
305
|
-
const
|
306
|
-
if (!container) {{
|
307
|
-
console.error("Container not found for graph:", graphId);
|
308
|
-
return;
|
309
|
-
}}
|
310
|
-
|
311
|
-
const svg = container.querySelector("svg");
|
292
|
+
const svg = containerElement.querySelector("svg");
|
312
293
|
if (!svg) {{
|
313
|
-
console.error(
|
294
|
+
console.error(`SVG not rendered for ID "${{graph_id}}".`);
|
314
295
|
return;
|
315
296
|
}}
|
316
297
|
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
svg
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
298
|
+
// Set initial size
|
299
|
+
svg.setAttribute("width", "100%");
|
300
|
+
svg.setAttribute("height", "100%");
|
301
|
+
|
302
|
+
// Initialize Pan-Zoom
|
303
|
+
const panZoom = svgPanZoom(svg, {{
|
304
|
+
zoomEnabled: true,
|
305
|
+
controlIconsEnabled: false,
|
306
|
+
fit: true,
|
307
|
+
center: true,
|
308
|
+
minZoom: 0.5,
|
309
|
+
maxZoom: 10,
|
310
|
+
contain: true
|
311
|
+
}});
|
312
|
+
|
313
|
+
// Add custom controls
|
314
|
+
const controlsContainer = document.createElement("div");
|
315
|
+
controlsContainer.className = "svg-pan-zoom_controls";
|
316
|
+
controlsContainer.innerHTML = `
|
317
|
+
<button id="${{graph_id}}-zoom-in">+</button>
|
318
|
+
<button id="${{graph_id}}-zoom-out">-</button>
|
319
|
+
<button id="${{graph_id}}-reset">Reset</button>
|
320
|
+
`;
|
321
|
+
containerElement.appendChild(controlsContainer);
|
322
|
+
|
323
|
+
// Handle controls
|
324
|
+
document.getElementById(`${{graph_id}}-zoom-in`).addEventListener("click", () => panZoom.zoomIn());
|
325
|
+
document.getElementById(`${{graph_id}}-zoom-out`).addEventListener("click", () => panZoom.zoomOut());
|
326
|
+
document.getElementById(`${{graph_id}}-reset`).addEventListener("click", () => {{
|
327
|
+
panZoom.resetZoom();
|
328
|
+
panZoom.center();
|
344
329
|
}});
|
345
330
|
}}, 500);
|
346
331
|
}}
|
347
332
|
|
348
|
-
// Load Mermaid.js and initialize
|
349
333
|
if (typeof mermaid === "undefined") {{
|
350
|
-
|
334
|
+
const script = document.createElement('script');
|
335
|
+
script.src = "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js";
|
336
|
+
script.onload = () => initializeMermaid(graph_id);
|
337
|
+
document.head.appendChild(script);
|
351
338
|
}} else {{
|
352
|
-
initializeMermaid();
|
339
|
+
initializeMermaid(graph_id);
|
353
340
|
}}
|
354
|
-
}})
|
341
|
+
}});
|
355
342
|
</script>
|
356
|
-
</html>
|
357
|
-
"""
|
358
343
|
|
344
|
+
"""
|
359
345
|
|
360
346
|
return html_content
|
361
|
-
|
347
|
+
# This one almost works - no controls and diagram too small
|
348
|
+
# html_content = f"""
|
349
|
+
# <!DOCTYPE html>
|
350
|
+
# <html>
|
351
|
+
# <head>
|
352
|
+
# <style>
|
353
|
+
# /* Set consistent sizing and prevent shrinking for the container and parents */
|
354
|
+
# html, body, #{graph_id}-wrapper {{
|
355
|
+
# margin: 0;
|
356
|
+
# padding: 0;
|
357
|
+
# height: 100%; /* Ensure the entire root hierarchy respects 100% height */
|
358
|
+
# width: 100%;
|
359
|
+
# }}
|
360
|
+
#
|
361
|
+
# /* Ensure diagram container maintains full height and prevents overflow */
|
362
|
+
# #{graph_id}-container {{
|
363
|
+
# position: relative;
|
364
|
+
# width: 100%;
|
365
|
+
# height: 100%;
|
366
|
+
# overflow: hidden; /* Prevent content from breaking layout */
|
367
|
+
# display: flex;
|
368
|
+
# align-items: center; /* Centers the diagram vertically */
|
369
|
+
# justify-content: center; /* Centers the diagram horizontally */
|
370
|
+
# }}
|
371
|
+
#
|
372
|
+
# /* Ensure SVG always stretches to match container */
|
373
|
+
# #{graph_id} svg {{
|
374
|
+
# width: 100%;
|
375
|
+
# height: 100%;
|
376
|
+
# display: block; /* Avoid unwanted inline space issues */
|
377
|
+
# }}
|
378
|
+
#
|
379
|
+
# /* Optional custom pan/zoom controls (if dynamically added) */
|
380
|
+
# .svg-pan-zoom_controls {{
|
381
|
+
# position: absolute;
|
382
|
+
# bottom: 10px; /* Adjust based on desired placement */
|
383
|
+
# right: 10px;
|
384
|
+
# z-index: 10;
|
385
|
+
# display: flex;
|
386
|
+
# gap: 5px;
|
387
|
+
# }}
|
388
|
+
#
|
389
|
+
# .svg-pan-zoom_controls button {{
|
390
|
+
# border: 1px solid #ccc;
|
391
|
+
# background-color: #fff;
|
392
|
+
# color: #000;
|
393
|
+
# padding: 5px 10px;
|
394
|
+
# cursor: pointer;
|
395
|
+
# font-size: 16px;
|
396
|
+
# }}
|
397
|
+
#
|
398
|
+
# .svg-pan-zoom_controls button:hover {{
|
399
|
+
# background-color: #f0f0f0;
|
400
|
+
# }}
|
401
|
+
# </style>
|
402
|
+
# </head>
|
403
|
+
# <body>
|
404
|
+
# <div id="{graph_id}-wrapper">
|
405
|
+
# <!-- Title/Heading (optional; include as needed) -->
|
406
|
+
# {escaped_header if escaped_header else ""}
|
407
|
+
#
|
408
|
+
# <!-- Mermaid Diagram Container -->
|
409
|
+
# <div id="{graph_id}-container">
|
410
|
+
# <div id="{graph_id}" class="mermaid">
|
411
|
+
# {escaped_mermaid_code}
|
412
|
+
# </div>
|
413
|
+
# </div>
|
414
|
+
# </div>
|
415
|
+
#
|
416
|
+
# <script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js"></script>
|
417
|
+
# <script>
|
418
|
+
# document.addEventListener("DOMContentLoaded", () => {{
|
419
|
+
# // Define the graph ID dynamically passed via Python
|
420
|
+
# const graph_id = "{graph_id}";
|
421
|
+
#
|
422
|
+
# // Function to load external scripts dynamically
|
423
|
+
# function loadScript(url, callback) {{
|
424
|
+
# const script = document.createElement('script');
|
425
|
+
# script.src = url;
|
426
|
+
# script.async = true;
|
427
|
+
# script.onload = callback;
|
428
|
+
# script.onerror = () => console.error("Error loading script:", url);
|
429
|
+
# document.head.appendChild(script);
|
430
|
+
# }}
|
431
|
+
#
|
432
|
+
# // Function to initialize Mermaid
|
433
|
+
# function initializeMermaid(graph_id) {{
|
434
|
+
# // Look for the container ID generated dynamically by the template
|
435
|
+
# const containerElement = document.getElementById(`${{graph_id}}-container`);
|
436
|
+
# if (!containerElement) {{
|
437
|
+
# console.error(`Container element with id "${{graph_id}}-container" not found.`);
|
438
|
+
# return;
|
439
|
+
# }}
|
440
|
+
#
|
441
|
+
# // Initialize Mermaid.js with default configuration
|
442
|
+
# mermaid.initialize({{ startOnLoad: false, logLevel: "debug" }});
|
443
|
+
# mermaid.init(undefined, `#${{graph_id}}`); // Initialize element with id matching `graph_id`
|
444
|
+
#
|
445
|
+
# // Add a timeout to ensure the SVG is rendered
|
446
|
+
# setTimeout(() => {{
|
447
|
+
# const svg = containerElement.querySelector("svg");
|
448
|
+
#
|
449
|
+
# // Handle errors if SVG rendering fails
|
450
|
+
# if (!svg) {{
|
451
|
+
# console.error(`SVG not rendered for ID "${{graph_id}}". Check Mermaid syntax or rendering issues.`);
|
452
|
+
# console.log("Container content:", containerElement.innerHTML); // Log the container's content
|
453
|
+
# return;
|
454
|
+
# }}
|
455
|
+
#
|
456
|
+
# // Set SVG attributes for full container fit
|
457
|
+
# svg.setAttribute("width", "100%");
|
458
|
+
# svg.setAttribute("height", "100%");
|
459
|
+
#
|
460
|
+
# // Initialize SVG Pan-Zoom functionality
|
461
|
+
# const panZoom = svgPanZoom(svg, {{
|
462
|
+
# zoomEnabled: true,
|
463
|
+
# controlIconsEnabled: true, // Display default controls if enabled
|
464
|
+
# fit: true, // Fit diagram within the container
|
465
|
+
# center: true, // Center the diagram
|
466
|
+
# minZoom: 0.5, // Prevent too much zooming out
|
467
|
+
# maxZoom: 10, // Prevent extreme zooming in
|
468
|
+
# contain: true // Keep the diagram fully within bounds
|
469
|
+
# }});
|
470
|
+
#
|
471
|
+
# // Optional: Add custom pan/zoom controls dynamically
|
472
|
+
# const controlsContainer = document.createElement("div");
|
473
|
+
# controlsContainer.classList.add("svg-pan-zoom_controls");
|
474
|
+
# controlsContainer.innerHTML = `
|
475
|
+
# <button id="${{graph_id}}-zoom-in">+</button>
|
476
|
+
# <button id="${{graph_id}}-zoom-out">-</button>
|
477
|
+
# <button id="${{graph_id}}-reset">Reset</button>
|
478
|
+
# `;
|
479
|
+
# containerElement.appendChild(controlsContainer);
|
480
|
+
#
|
481
|
+
# // Add event listeners for the custom controls
|
482
|
+
# document.getElementById(`${{graph_id}}-zoom-in`).addEventListener("click", () => panZoom.zoomIn());
|
483
|
+
# document.getElementById(`${{graph_id}}-zoom-out`).addEventListener("click", () => panZoom.zoomOut());
|
484
|
+
# document.getElementById(`${{graph_id}}-reset`).addEventListener("click", () => {{
|
485
|
+
# panZoom.resetZoom();
|
486
|
+
# panZoom.center();
|
487
|
+
# }});
|
488
|
+
# }}, 500); // Short delay to ensure SVG rendering is complete
|
489
|
+
# }}
|
490
|
+
#
|
491
|
+
# // Load Mermaid.js if not already loaded
|
492
|
+
# if (typeof mermaid === "undefined") {{
|
493
|
+
# loadScript("https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js", () => {{
|
494
|
+
# console.log("Mermaid.js loaded successfully");
|
495
|
+
# initializeMermaid(graph_id); // Call initialization after Mermaid.js is loaded
|
496
|
+
# }});
|
497
|
+
# }} else {{
|
498
|
+
# initializeMermaid(graph_id); // If Mermaid.js is already loaded, proceed immediately
|
499
|
+
# }}
|
500
|
+
# }});
|
501
|
+
# </script>
|
502
|
+
#
|
503
|
+
#
|
504
|
+
# </body>
|
505
|
+
# </html>
|
506
|
+
# """
|
507
|
+
|
508
|
+
|
509
|
+
|
510
|
+
# mermaid_html = f"""
|
362
511
|
# <h2 style="text-align: center; color: #007acc; margin-bottom: 16px;">
|
363
512
|
# {escaped_header}
|
364
513
|
# </h2>
|
pyegeria/test_m.html
CHANGED
@@ -1,98 +1,116 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
2
|
+
<style>
|
3
|
+
/* Style for the diagram container */
|
4
|
+
.diagram-container {
|
5
|
+
position: relative;
|
6
|
+
width: 100%; /* Adjust the diagram container width */
|
7
|
+
height: 500px; /* Set a fixed height for the container */
|
8
|
+
margin: 0 auto;
|
9
|
+
border: 1px solid #ccc; /* Optional border for visualization */
|
10
|
+
overflow: hidden; /* Prevent content overflow outside the container */
|
11
|
+
}
|
12
|
+
|
13
|
+
/* Style for zoom controls */
|
14
|
+
.svg-pan-zoom_controls {
|
15
|
+
position: absolute;
|
16
|
+
top: 10px;
|
17
|
+
right: 10px;
|
18
|
+
display: flex;
|
19
|
+
flex-direction: column;
|
20
|
+
gap: 5px;
|
21
|
+
}
|
22
|
+
.svg-pan-zoom_controls button {
|
23
|
+
background-color: #007bff;
|
24
|
+
color: white;
|
25
|
+
border: none;
|
26
|
+
padding: 5px 10px;
|
27
|
+
border-radius: 3px;
|
28
|
+
cursor: pointer;
|
29
|
+
font-size: 14px;
|
30
|
+
}
|
31
|
+
.svg-pan-zoom_controls button:hover {
|
32
|
+
background-color: #0056b3;
|
33
|
+
}
|
34
|
+
</style>
|
35
|
+
|
36
|
+
<div id="mermaid-graph-c4f8d707-7c85-4125-b5fd-c3257a2ef2ef-container" class="diagram-container">
|
37
|
+
<!-- Mermaid diagram will be dynamically rendered here -->
|
38
|
+
<div id="mermaid-graph-c4f8d707-7c85-4125-b5fd-c3257a2ef2ef" class="mermaid">
|
39
|
+
flowchart TD
|
40
|
+
%%{init: {"flowchart": {"htmlLabels": false}} }%%
|
23
41
|
|
24
42
|
subgraph c4f8d707-7c85-4125-b5fd-c3257a2ef2ef [Components and Actors]
|
25
|
-
fc2de77f-7320-48ea-8750-d434c6e870db@{ shape: text, label:
|
26
|
-
**A description of how a clinical trial is managed in Coco Pharmaceuticals
|
27
|
-
37b8560d-84d4-434b-9b0d-105420fcc924@{ shape: subproc, label:
|
28
|
-
**Certify Hospital
|
29
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661@{ shape: trap-t, label:
|
30
|
-
**Clinical Trial Manager
|
31
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661
|
32
|
-
72a86eec-9734-4bc0-babb-4fec0aa7c9ff@{ shape: docs, label:
|
33
|
-
**Assemble Treatment Assessment Report
|
34
|
-
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5@{ shape: rect, label:
|
35
|
-
**Treatment Efficacy Evidence
|
36
|
-
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5
|
37
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661
|
38
|
-
b5c8da4c-f925-4cf1-8294-e43cd2c1a584@{ shape: rect, label:
|
39
|
-
**Analyse Patient Data
|
40
|
-
b5c8da4c-f925-4cf1-8294-e43cd2c1a584
|
41
|
-
7f5dca65-50b4-4103-9ac7-3a406a09047a@{ shape: subproc, label:
|
42
|
-
**Weekly Measurements Onboarding Pipeline
|
43
|
-
07705e15-efff-4f80-8992-f04ac85e0ef1@{ shape: rect, label:
|
44
|
-
**Landing Folder Cataloguer
|
45
|
-
07705e15-efff-4f80-8992-f04ac85e0ef1
|
46
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661
|
47
|
-
b0290339-c96c-4b05-904f-12fc98e54e14@{ shape: trap-t, label:
|
48
|
-
**Certified Data Engineer
|
49
|
-
b0290339-c96c-4b05-904f-12fc98e54e14
|
50
|
-
d48f579f-76d3-4c49-b1b4-575f5645a9d0@{ shape: lin-cyl, label:
|
51
|
-
**Treatment Validation Sandbox
|
52
|
-
26c07ca4-3b8e-484b-812b-36c1ace4b275@{ shape: rect, label:
|
53
|
-
**Populate Sandbox
|
54
|
-
26c07ca4-3b8e-484b-812b-36c1ace4b275
|
55
|
-
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec@{ shape: processes, label:
|
56
|
-
**Hospital Processes
|
57
|
-
a8bd84ca-0aae-4534-b0e8-87e8659467a6@{ shape: trap-t, label:
|
58
|
-
**Clinical Trial Participating Hospital Coordinator
|
59
|
-
a8bd84ca-0aae-4534-b0e8-87e8659467a6
|
60
|
-
30adaab5-8870-47a8-8ae9-facbf84cb05a@{ shape: trap-t, label:
|
61
|
-
**Clinical Trial Participating Hospital
|
62
|
-
30adaab5-8870-47a8-8ae9-facbf84cb05a
|
63
|
-
d48f579f-76d3-4c49-b1b4-575f5645a9d0
|
64
|
-
ece17806-836c-4756-b3a2-2d12dde215f6@{ shape: trap-t, label:
|
65
|
-
**New Treatment Data Scientist
|
66
|
-
ece17806-836c-4756-b3a2-2d12dde215f6
|
67
|
-
0c757e35-8a42-4d5f-b01b-c72a6cea65cc@{ shape: trap-t, label:
|
68
|
-
**New Treatment Researcher
|
69
|
-
0c757e35-8a42-4d5f-b01b-c72a6cea65cc
|
70
|
-
e9c2f911-ffcb-40c6-aeee-8c4d43811576@{ shape: subproc, label:
|
71
|
-
**Onboard Hospital
|
72
|
-
b0290339-c96c-4b05-904f-12fc98e54e14
|
73
|
-
849b0b42-f465-452b-813c-477d6398e082@{ shape: subproc, label:
|
74
|
-
**Set up clinical trial
|
75
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661
|
76
|
-
a5d4d638-6836-47e5-99d0-fdcde637e13f@{ shape: lin-cyl, label:
|
77
|
-
**Weekly Measurements Data Lake Folder
|
78
|
-
7f5dca65-50b4-4103-9ac7-3a406a09047a
|
79
|
-
0bf2547c-937c-41b6-814f-6284849271a1@{ shape: odd, label:
|
80
|
-
**Treatment Assessment Report Validation and Delivery
|
81
|
-
72a86eec-9734-4bc0-babb-4fec0aa7c9ff
|
82
|
-
f6bc847b-868d-43cc-b767-41f5fe3e47d1@{ shape: trap-t, label:
|
83
|
-
**Clinical Trial Sponsor
|
84
|
-
f6bc847b-868d-43cc-b767-41f5fe3e47d1
|
85
|
-
a5d4d638-6836-47e5-99d0-fdcde637e13f
|
86
|
-
fb32bef2-e79f-4893-b500-2e547f24d482@{ shape: subproc, label:
|
87
|
-
**Set up Data Lake Folder
|
88
|
-
b0290339-c96c-4b05-904f-12fc98e54e14
|
89
|
-
1c150d6e-30cf-481c-9afb-3b06c9c9e78f@{ shape: lin-cyl, label:
|
90
|
-
**Hospital Landing Area Folder
|
91
|
-
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec
|
92
|
-
1c150d6e-30cf-481c-9afb-3b06c9c9e78f
|
93
|
-
11c7c850-c67c-41cc-9423-d74db47cbf3a@{ shape: subproc, label:
|
94
|
-
**Nominate Hospital
|
95
|
-
f37f3735-28a1-4e03-9ff5-3fe2f137f661
|
43
|
+
fc2de77f-7320-48ea-8750-d434c6e870db@{ shape: text, label: "*Description*
|
44
|
+
**A description of how a clinical trial is managed in Coco Pharmaceuticals.**"}
|
45
|
+
37b8560d-84d4-434b-9b0d-105420fcc924@{ shape: subproc, label: "*Solution Component*
|
46
|
+
**Certify Hospital**"}
|
47
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661@{ shape: trap-t, label: "*Solution Actor Role*
|
48
|
+
**Clinical Trial Manager**"}
|
49
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661-->|"Certifier"|37b8560d-84d4-434b-9b0d-105420fcc924
|
50
|
+
72a86eec-9734-4bc0-babb-4fec0aa7c9ff@{ shape: docs, label: "*Solution Component*
|
51
|
+
**Assemble Treatment Assessment Report**"}
|
52
|
+
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5@{ shape: rect, label: "*Solution Component*
|
53
|
+
**Treatment Efficacy Evidence**"}
|
54
|
+
48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5-->|"Solution Linking Wire"|72a86eec-9734-4bc0-babb-4fec0aa7c9ff
|
55
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661-->|"Author"|72a86eec-9734-4bc0-babb-4fec0aa7c9ff
|
56
|
+
b5c8da4c-f925-4cf1-8294-e43cd2c1a584@{ shape: rect, label: "*Solution Component*
|
57
|
+
**Analyse Patient Data**"}
|
58
|
+
b5c8da4c-f925-4cf1-8294-e43cd2c1a584-->|"Solution Linking Wire"|48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5
|
59
|
+
7f5dca65-50b4-4103-9ac7-3a406a09047a@{ shape: subproc, label: "*Solution Component*
|
60
|
+
**Weekly Measurements Onboarding Pipeline**"}
|
61
|
+
07705e15-efff-4f80-8992-f04ac85e0ef1@{ shape: rect, label: "*Solution Component*
|
62
|
+
**Landing Folder Cataloguer**"}
|
63
|
+
07705e15-efff-4f80-8992-f04ac85e0ef1-->|"Solution Linking Wire"|7f5dca65-50b4-4103-9ac7-3a406a09047a
|
64
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661-->|"Steward"|7f5dca65-50b4-4103-9ac7-3a406a09047a
|
65
|
+
b0290339-c96c-4b05-904f-12fc98e54e14@{ shape: trap-t, label: "*Solution Actor Role*
|
66
|
+
**Certified Data Engineer**"}
|
67
|
+
b0290339-c96c-4b05-904f-12fc98e54e14-->|"Steward"|7f5dca65-50b4-4103-9ac7-3a406a09047a
|
68
|
+
d48f579f-76d3-4c49-b1b4-575f5645a9d0@{ shape: lin-cyl, label: "*Solution Component*
|
69
|
+
**Treatment Validation Sandbox**"}
|
70
|
+
26c07ca4-3b8e-484b-812b-36c1ace4b275@{ shape: rect, label: "*Solution Component*
|
71
|
+
**Populate Sandbox**"}
|
72
|
+
26c07ca4-3b8e-484b-812b-36c1ace4b275-->|"Solution Linking Wire"|d48f579f-76d3-4c49-b1b4-575f5645a9d0
|
73
|
+
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec@{ shape: processes, label: "*Solution Component*
|
74
|
+
**Hospital Processes**"}
|
75
|
+
a8bd84ca-0aae-4534-b0e8-87e8659467a6@{ shape: trap-t, label: "*Solution Actor Role*
|
76
|
+
**Clinical Trial Participating Hospital Coordinator**"}
|
77
|
+
a8bd84ca-0aae-4534-b0e8-87e8659467a6-->|"Coordinator on behalf of hospital"|ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec
|
78
|
+
30adaab5-8870-47a8-8ae9-facbf84cb05a@{ shape: trap-t, label: "*Solution Actor Role*
|
79
|
+
**Clinical Trial Participating Hospital**"}
|
80
|
+
30adaab5-8870-47a8-8ae9-facbf84cb05a-->|"Owner"|ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec
|
81
|
+
d48f579f-76d3-4c49-b1b4-575f5645a9d0-->|"Solution Linking Wire"|b5c8da4c-f925-4cf1-8294-e43cd2c1a584
|
82
|
+
ece17806-836c-4756-b3a2-2d12dde215f6@{ shape: trap-t, label: "*Solution Actor Role*
|
83
|
+
**New Treatment Data Scientist**"}
|
84
|
+
ece17806-836c-4756-b3a2-2d12dde215f6-->|"Data Analyser"|b5c8da4c-f925-4cf1-8294-e43cd2c1a584
|
85
|
+
0c757e35-8a42-4d5f-b01b-c72a6cea65cc@{ shape: trap-t, label: "*Solution Actor Role*
|
86
|
+
**New Treatment Researcher.**"}
|
87
|
+
0c757e35-8a42-4d5f-b01b-c72a6cea65cc-->|"Results Interpreter"|b5c8da4c-f925-4cf1-8294-e43cd2c1a584
|
88
|
+
e9c2f911-ffcb-40c6-aeee-8c4d43811576@{ shape: subproc, label: "*Solution Component*
|
89
|
+
**Onboard Hospital**"}
|
90
|
+
b0290339-c96c-4b05-904f-12fc98e54e14-->|"Initiator"|e9c2f911-ffcb-40c6-aeee-8c4d43811576
|
91
|
+
849b0b42-f465-452b-813c-477d6398e082@{ shape: subproc, label: "*Solution Component*
|
92
|
+
**Set up clinical trial**"}
|
93
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661-->|"Initiator"|849b0b42-f465-452b-813c-477d6398e082
|
94
|
+
a5d4d638-6836-47e5-99d0-fdcde637e13f@{ shape: lin-cyl, label: "*Solution Component*
|
95
|
+
**Weekly Measurements Data Lake Folder**"}
|
96
|
+
7f5dca65-50b4-4103-9ac7-3a406a09047a-->|"Solution Linking Wire"|a5d4d638-6836-47e5-99d0-fdcde637e13f
|
97
|
+
0bf2547c-937c-41b6-814f-6284849271a1@{ shape: odd, label: "*Solution Component*
|
98
|
+
**Treatment Assessment Report Validation and Delivery**"}
|
99
|
+
72a86eec-9734-4bc0-babb-4fec0aa7c9ff-->|"Solution Linking Wire"|0bf2547c-937c-41b6-814f-6284849271a1
|
100
|
+
f6bc847b-868d-43cc-b767-41f5fe3e47d1@{ shape: trap-t, label: "*Solution Actor Role*
|
101
|
+
**Clinical Trial Sponsor**"}
|
102
|
+
f6bc847b-868d-43cc-b767-41f5fe3e47d1-->|"Reviewer"|0bf2547c-937c-41b6-814f-6284849271a1
|
103
|
+
a5d4d638-6836-47e5-99d0-fdcde637e13f-->|"Solution Linking Wire"|26c07ca4-3b8e-484b-812b-36c1ace4b275
|
104
|
+
fb32bef2-e79f-4893-b500-2e547f24d482@{ shape: subproc, label: "*Solution Component*
|
105
|
+
**Set up Data Lake Folder**"}
|
106
|
+
b0290339-c96c-4b05-904f-12fc98e54e14-->|"Initiator"|fb32bef2-e79f-4893-b500-2e547f24d482
|
107
|
+
1c150d6e-30cf-481c-9afb-3b06c9c9e78f@{ shape: lin-cyl, label: "*Solution Component*
|
108
|
+
**Hospital Landing Area Folder**"}
|
109
|
+
ee2bb773-e630-4cf9-bdf1-7c2dd64fe4ec-->|"Solution Linking Wire"|1c150d6e-30cf-481c-9afb-3b06c9c9e78f
|
110
|
+
1c150d6e-30cf-481c-9afb-3b06c9c9e78f-->|"Solution Linking Wire"|07705e15-efff-4f80-8992-f04ac85e0ef1
|
111
|
+
11c7c850-c67c-41cc-9423-d74db47cbf3a@{ shape: subproc, label: "*Solution Component*
|
112
|
+
**Nominate Hospital**"}
|
113
|
+
f37f3735-28a1-4e03-9ff5-3fe2f137f661-->|"Initiator"|11c7c850-c67c-41cc-9423-d74db47cbf3a
|
96
114
|
end
|
97
115
|
style 48bc201e-3d4e-4beb-bdb2-0fd9d134f6d5 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
98
116
|
style ece17806-836c-4756-b3a2-2d12dde215f6 color:#FFFFFF, fill:#AA00FF, stroke:#E1D5E7
|
@@ -118,109 +136,79 @@ style b5c8da4c-f925-4cf1-8294-e43cd2c1a584 color:#FFFFFF, fill:#838cc7, stroke:#
|
|
118
136
|
style f6bc847b-868d-43cc-b767-41f5fe3e47d1 color:#FFFFFF, fill:#AA00FF, stroke:#E1D5E7
|
119
137
|
style d48f579f-76d3-4c49-b1b4-575f5645a9d0 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
120
138
|
style f37f3735-28a1-4e03-9ff5-3fe2f137f661 color:#FFFFFF, fill:#AA00FF, stroke:#E1D5E7
|
121
|
-
style fb32bef2-e79f-4893-b500-2e547f24d482 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
122
|
-
</div>
|
123
|
-
</div>
|
139
|
+
style fb32bef2-e79f-4893-b500-2e547f24d482 color:#FFFFFF, fill:#838cc7, stroke:#3079ab
|
124
140
|
</div>
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
margin: 0;
|
130
|
-
padding: 0;
|
131
|
-
width: 100%;
|
132
|
-
height: 100%;
|
133
|
-
}
|
134
|
-
/* General reset for Jupyter Notebook's extra spacing */
|
135
|
-
#notebook, .container, .cell, .output_area {
|
136
|
-
margin: 0 !important;
|
137
|
-
padding: 0 !important;
|
138
|
-
}
|
139
|
-
.diagram-container {
|
140
|
-
width: 100%;
|
141
|
-
height: 100%;
|
142
|
-
overflow: hidden; /* Prevent scrollbars during zoom/pan */
|
143
|
-
}
|
144
|
-
h2 {
|
145
|
-
margin: 0;
|
146
|
-
padding: 10px;
|
147
|
-
font-size: 24px;
|
148
|
-
text-align: center;
|
149
|
-
flex: 0 0 auto; /* Fix height explicitly for heading */
|
150
|
-
}
|
151
|
-
.mermaid {
|
152
|
-
margin: 0;
|
153
|
-
padding: 0;
|
154
|
-
}
|
155
|
-
</style>
|
156
|
-
|
141
|
+
</div>
|
142
|
+
|
143
|
+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
144
|
+
<script src="https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.1/dist/svg-pan-zoom.min.js"></script>
|
157
145
|
<script>
|
158
|
-
(
|
159
|
-
|
146
|
+
document.addEventListener("DOMContentLoaded", () => {
|
147
|
+
// Initialize Mermaid and Pan-Zoom functionality
|
148
|
+
const graph_id = "mermaid-graph-c4f8d707-7c85-4125-b5fd-c3257a2ef2ef";
|
160
149
|
|
161
|
-
function
|
162
|
-
const
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
// Initialize Mermaid and render the diagram
|
169
|
-
function initializeMermaid() {
|
170
|
-
mermaid.initialize({startOnLoad: false});
|
171
|
-
mermaid.init(undefined, "#" + graphId);
|
150
|
+
function initializeMermaid(graph_id) {
|
151
|
+
const containerElement = document.getElementById(`${graph_id}-container`);
|
152
|
+
|
153
|
+
if (!containerElement) {
|
154
|
+
console.error(`Container with ID "${graph_id}-container" not found.`);
|
155
|
+
return;
|
156
|
+
}
|
172
157
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
console.error("Container not found for graph:", graphId);
|
177
|
-
return;
|
178
|
-
}
|
158
|
+
// Configure Mermaid
|
159
|
+
mermaid.initialize({ startOnLoad: false, logLevel: "debug" });
|
160
|
+
mermaid.init(undefined, `#${graph_id}`);
|
179
161
|
|
180
|
-
|
162
|
+
setTimeout(() => {
|
163
|
+
const svg = containerElement.querySelector("svg");
|
181
164
|
if (!svg) {
|
182
|
-
console.error(
|
165
|
+
console.error(`SVG not rendered for ID "${graph_id}".`);
|
183
166
|
return;
|
184
167
|
}
|
185
168
|
|
186
|
-
|
169
|
+
// Set initial size
|
170
|
+
svg.setAttribute("width", "100%");
|
171
|
+
svg.setAttribute("height", "100%");
|
187
172
|
|
188
|
-
//
|
189
|
-
const
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
fit: true,
|
199
|
-
center: true,
|
200
|
-
minZoom: 0.5,
|
201
|
-
maxZoom: 10
|
202
|
-
});
|
173
|
+
// Initialize Pan-Zoom
|
174
|
+
const panZoom = svgPanZoom(svg, {
|
175
|
+
zoomEnabled: true,
|
176
|
+
controlIconsEnabled: false,
|
177
|
+
fit: true,
|
178
|
+
center: true,
|
179
|
+
minZoom: 0.5,
|
180
|
+
maxZoom: 10,
|
181
|
+
contain: true
|
182
|
+
});
|
203
183
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
}
|
210
|
-
|
184
|
+
// Add custom controls
|
185
|
+
const controlsContainer = document.createElement("div");
|
186
|
+
controlsContainer.className = "svg-pan-zoom_controls";
|
187
|
+
controlsContainer.innerHTML = `
|
188
|
+
<button id="${graph_id}-zoom-in">+</button>
|
189
|
+
<button id="${graph_id}-zoom-out">-</button>
|
190
|
+
<button id="${graph_id}-reset">Reset</button>
|
191
|
+
`;
|
192
|
+
containerElement.appendChild(controlsContainer);
|
211
193
|
|
212
|
-
|
194
|
+
// Handle controls
|
195
|
+
document.getElementById(`${graph_id}-zoom-in`).addEventListener("click", () => panZoom.zoomIn());
|
196
|
+
document.getElementById(`${graph_id}-zoom-out`).addEventListener("click", () => panZoom.zoomOut());
|
197
|
+
document.getElementById(`${graph_id}-reset`).addEventListener("click", () => {
|
198
|
+
panZoom.resetZoom();
|
199
|
+
panZoom.center();
|
213
200
|
});
|
214
201
|
}, 500);
|
215
202
|
}
|
216
203
|
|
217
|
-
// Load Mermaid.js and initialize
|
218
204
|
if (typeof mermaid === "undefined") {
|
219
|
-
|
205
|
+
const script = document.createElement('script');
|
206
|
+
script.src = "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js";
|
207
|
+
script.onload = () => initializeMermaid(graph_id);
|
208
|
+
document.head.appendChild(script);
|
220
209
|
} else {
|
221
|
-
initializeMermaid();
|
210
|
+
initializeMermaid(graph_id);
|
222
211
|
}
|
223
|
-
})
|
212
|
+
});
|
224
213
|
</script>
|
225
|
-
|
226
|
-
|
214
|
+
|
@@ -245,7 +245,7 @@ pyegeria/full_omag_server_config.py,sha256=CQqLCy_3DZFvJZEOcGf50HWdFaWpiAIs6z-kK
|
|
245
245
|
pyegeria/glossary_browser_omvs.py,sha256=ci57LXFjIAXWw6XXFu8pIbeR_3y4hl_x4F2-HHdy7VM,93585
|
246
246
|
pyegeria/glossary_manager_omvs.py,sha256=GJQo5E3bxv8JL84wTGqJKMrMo7QqNAPtyJJgvGpI_lU,132558
|
247
247
|
pyegeria/m_test.py,sha256=BDKRLsHsAWnwCbzHkkvfsc8ZIJ0k-jmwPPNuTSgW6Qo,7659
|
248
|
-
pyegeria/mermaid_utilities.py,sha256
|
248
|
+
pyegeria/mermaid_utilities.py,sha256=uhMiE9OjLWb6fJ7KQqUHgcJ7FdcVaG0rciAcrX8nioE,34009
|
249
249
|
pyegeria/metadata_explorer_omvs.py,sha256=xHnZTQKbd6XwOhYia-RiIisrvZcqHi0SL1l6OCf04Gk,86911
|
250
250
|
pyegeria/my_profile_omvs.py,sha256=d0oJYCJG7pS9BINPuGciVa00ac0jwPHNANXDCLginEc,34720
|
251
251
|
pyegeria/platform_services.py,sha256=xlF5p5HPKDGTFFDsuxm2RLhr8vjZPv4T7e2qCkDgKXE,41654
|
@@ -255,14 +255,14 @@ pyegeria/runtime_manager_omvs.py,sha256=Z5wY9ignNjil8O6yjihZftxkGoh9A4PQDcXhoIsO
|
|
255
255
|
pyegeria/server_operations.py,sha256=vmiUDU_Xa0U8pa0Fdb-QKkoeSqs7WfMwIpG_XU3xgeI,16784
|
256
256
|
pyegeria/solution_architect_omvs.py,sha256=x6CfPTyn1l2DFYVEFP0t_rT9uVjoFr596hBBeuVaMRg,22093
|
257
257
|
pyegeria/template_manager_omvs.py,sha256=PfJ9dOfmBvf59DgRdZ9Dl1Kl_UYqjF-JncXVnbCqLZU,42408
|
258
|
-
pyegeria/test_m.html,sha256=
|
258
|
+
pyegeria/test_m.html,sha256=Jbc9D5xWa1paVQV2l4HRQ23oJTraw21crd3RgB4-CBw,11819
|
259
259
|
pyegeria/test_m1.html,sha256=XS_1IAtfG4ZlZk45QTkrFWWpjQMVlO21ScDMX2Frl3g,14086
|
260
260
|
pyegeria/test_mer.ipynb,sha256=G7hpHn07IXnt_VKvnTDvljwwHB7RfC0etOMyZKt1icQ,30809
|
261
261
|
pyegeria/utils.py,sha256=GCt1C0bp0Xng1ahzbZhzV9qQwH7Dj93IaCt2dvWb-sg,5417
|
262
262
|
pyegeria/valid_metadata_omvs.py,sha256=kL3bEkoBtNCaQKjziFwRAqQyleu-i2ua_REIogfulFw,65031
|
263
263
|
pyegeria/x_action_author_omvs.py,sha256=6b725SPsC52AI7ols7Qq8MsBlZuAXr_BgJ_-ychVRCw,6386
|
264
|
-
pyegeria-5.3.4.
|
265
|
-
pyegeria-5.3.4.
|
266
|
-
pyegeria-5.3.4.
|
267
|
-
pyegeria-5.3.4.
|
268
|
-
pyegeria-5.3.4.
|
264
|
+
pyegeria-5.3.4.13.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
265
|
+
pyegeria-5.3.4.13.dist-info/METADATA,sha256=iPsKrIUbYAo4puVSk3C7n3m-zFNXqa2YjI20UlZuKF0,2736
|
266
|
+
pyegeria-5.3.4.13.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
267
|
+
pyegeria-5.3.4.13.dist-info/entry_points.txt,sha256=LS9g5JPSBL0whnyAcGhLZCAyUp6PkPU6fjHP9Aso1V4,6176
|
268
|
+
pyegeria-5.3.4.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|