Sasidhar commited on
Commit
a33ae14
·
verified ·
1 Parent(s): be5a8cb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -60
app.py CHANGED
@@ -1,68 +1,87 @@
1
  import streamlit as st
2
- from streamlit_cytoscapejs import cytoscape
 
3
 
4
- st.set_page_config(page_title="GenAI Claims Workflow", layout="wide")
5
- st.title("GenAI Claims Automation Workflow")
6
 
7
- # Define the workflow steps and edges
8
- nodes = [
9
- {"data": {"id": "lodged", "label": "1. Claim Lodged"}},
10
- {"data": {"id": "fraud", "label": "2. Fraud Check"}},
11
- {"data": {"id": "coverage", "label": "3. Coverage Check"}},
12
- {"data": {"id": "builder", "label": "4. Builder Assignment"}},
13
- {"data": {"id": "schedule", "label": "5. Schedule Repairs"}},
14
- {"data": {"id": "payment", "label": "6. Authorise Payment"}},
15
- {"data": {"id": "settle", "label": "7. Settle Claim"}},
16
- ]
17
-
18
- edges = [
19
- {"data": {"source": "lodged", "target": "fraud"}},
20
- {"data": {"source": "fraud", "target": "coverage"}},
21
- {"data": {"source": "coverage", "target": "builder"}},
22
- {"data": {"source": "builder", "target": "schedule"}},
23
- {"data": {"source": "schedule", "target": "payment"}},
24
- {"data": {"source": "payment", "target": "settle"}},
25
- ]
26
 
27
- # Combine into elements
28
- elements = nodes + edges
29
 
30
- # Render the graph
31
- selected_node = cytoscape(
32
- elements=elements,
33
- layout_name="breadthfirst", # Options: grid, circle, breadthfirst
34
- height="500px",
35
- style={
36
- "node": {
37
- "label": "data(label)",
38
- "background-color": "#0077B6",
39
- "text-valign": "center",
40
- "text-halign": "center",
41
- "color": "white",
42
- "font-size": "14px",
43
- "width": "label",
44
- "height": "label",
45
- "padding": "10px",
46
- "border-color": "#023E8A",
47
- "border-width": "2px",
48
- }
49
- },
50
- )
51
 
52
- # Show step details
53
- step_details = {
54
- "lodged": "The claim is received via the customer portal. If more info is needed, an email is sent.",
55
- "fraud": "LLM checks for fraud patterns using historic claims and language cues.",
56
- "coverage": "The policy is evaluated to check coverage eligibility using claim metadata.",
57
- "builder": "Based on the location and nature of damage, an approved builder is assigned.",
58
- "schedule": "The repair is scheduled by coordinating between the builder and customer.",
59
- "payment": "The system authorises payment to builder after repair progress is validated.",
60
- "settle": "Final review is done, and the claim is marked as settled in the system."
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
- if selected_node:
64
- st.subheader(f"Details for: {selected_node}")
65
- st.success(step_details.get(selected_node, "No info available."))
66
- else:
67
- st.info("Click a node to view details about that step.")
 
 
68
 
 
 
1
  import streamlit as st
2
+ import streamlit.components.v1 as components
3
+ import json
4
 
5
+ st.set_page_config(layout="wide")
6
+ st.title("GenAI Claims Workflow - Interactive Demo")
7
 
8
+ # Define node data and labels (pass to JS)
9
+ step_details = {
10
+ "lodged": "The claim is received via the customer portal.",
11
+ "fraud": "LLM checks for fraud patterns.",
12
+ "coverage": "Check if claim is covered under the policy.",
13
+ "builder": "Assign a builder based on location and task.",
14
+ "schedule": "Schedule repair with builder and customer.",
15
+ "payment": "Authorise payment after repair is complete.",
16
+ "settle": "Mark claim as settled after review."
17
+ }
 
 
 
 
 
 
 
 
 
18
 
19
+ node_data = json.dumps(step_details)
 
20
 
21
+ html_content = f"""
22
+ <div id="cy" style="width: 100%; height: 500px; border:1px solid #ccc;"></div>
23
+ <p id="step-details" style="font-weight:bold; font-size:16px;"></p>
24
+ <script src="https://unpkg.com/[email protected]/dist/cytoscape.min.js"></script>
25
+ <script>
26
+ const stepDetails = {node_data};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
+ var cy = cytoscape({{
29
+ container: document.getElementById('cy'),
30
+ elements: [
31
+ {{ data: {{ id: 'lodged', label: '1. Claim Lodged' }} }},
32
+ {{ data: {{ id: 'fraud', label: '2. Fraud Check' }} }},
33
+ {{ data: {{ id: 'coverage', label: '3. Coverage Check' }} }},
34
+ {{ data: {{ id: 'builder', label: '4. Builder Assignment' }} }},
35
+ {{ data: {{ id: 'schedule', label: '5. Schedule Repairs' }} }},
36
+ {{ data: {{ id: 'payment', label: '6. Authorise Payment' }} }},
37
+ {{ data: {{ id: 'settle', label: '7. Settle Claim' }} }},
38
+ {{ data: {{ source: 'lodged', target: 'fraud' }} }},
39
+ {{ data: {{ source: 'fraud', target: 'coverage' }} }},
40
+ {{ data: {{ source: 'coverage', target: 'builder' }} }},
41
+ {{ data: {{ source: 'builder', target: 'schedule' }} }},
42
+ {{ data: {{ source: 'schedule', target: 'payment' }} }},
43
+ {{ data: {{ source: 'payment', target: 'settle' }} }},
44
+ ],
45
+ style: [
46
+ {{
47
+ selector: 'node',
48
+ style: {{
49
+ 'label': 'data(label)',
50
+ 'text-valign': 'center',
51
+ 'color': '#fff',
52
+ 'background-color': '#0077B6',
53
+ 'text-outline-width': 2,
54
+ 'text-outline-color': '#0077B6',
55
+ 'width': 'label',
56
+ 'height': 'label',
57
+ 'padding': '10px',
58
+ 'font-size': '12px',
59
+ 'shape': 'roundrectangle'
60
+ }}
61
+ }},
62
+ {{
63
+ selector: 'edge',
64
+ style: {{
65
+ 'width': 2,
66
+ 'line-color': '#aaa',
67
+ 'target-arrow-color': '#aaa',
68
+ 'target-arrow-shape': 'triangle'
69
+ }}
70
+ }}
71
+ ],
72
+ layout: {{
73
+ name: 'breadthfirst',
74
+ directed: true,
75
+ padding: 10
76
+ }}
77
+ }});
78
 
79
+ cy.on('tap', 'node', function(evt){{
80
+ const nodeId = evt.target.id();
81
+ const info = stepDetails[nodeId] || "No details available";
82
+ document.getElementById('step-details').innerText = info;
83
+ }});
84
+ </script>
85
+ """
86
 
87
+ components.html(html_content, height=600, scrolling=False)