Skip to content

Instantly share code, notes, and snippets.

@PaulisMatrix
Created December 12, 2025 06:33
Show Gist options
  • Select an option

  • Save PaulisMatrix/549ae5a80fa0ac2d512720b1858ba386 to your computer and use it in GitHub Desktop.

Select an option

Save PaulisMatrix/549ae5a80fa0ac2d512720b1858ba386 to your computer and use it in GitHub Desktop.
withdrawal decision tree
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WITHDRAWAL SOP Decision Tree</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
min-height: 100vh;
padding: 20px;
color: #e0e0e0;
}
h1 {
text-align: center;
color: #ff9f43;
margin-bottom: 30px;
font-size: 2.5em;
text-shadow: 0 0 20px rgba(255, 159, 67, 0.5);
}
.legend {
display: flex;
justify-content: center;
gap: 30px;
margin-bottom: 30px;
flex-wrap: wrap;
}
.legend-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
}
.legend-box {
width: 20px;
height: 20px;
border-radius: 4px;
}
.legend-start { background: #ff9f43; }
.legend-decision { background: #ffd700; }
.legend-sop { background: #00ff88; }
.legend-agent { background: #ff6b6b; }
.legend-info { background: #a78bfa; }
.legend-ask { background: #54a0ff; }
.tree-container {
max-width: 1500px;
margin: 0 auto;
}
.section {
background: rgba(255, 255, 255, 0.05);
border-radius: 16px;
padding: 25px;
margin-bottom: 30px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.section-title {
font-size: 1.5em;
color: #ff9f43;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid rgba(255, 159, 67, 0.3);
}
.flow-container {
display: flex;
flex-direction: column;
align-items: center;
gap: 15px;
}
.node {
padding: 15px 25px;
border-radius: 12px;
text-align: center;
font-weight: 500;
max-width: 420px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
transition: transform 0.2s, box-shadow 0.2s;
}
.node:hover {
transform: translateY(-3px);
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.4);
}
.start-node {
background: linear-gradient(135deg, #ff9f43, #ee8c2c);
color: #000;
font-weight: 700;
}
.decision-node {
background: linear-gradient(135deg, #ffd700, #ffb800);
color: #000;
border-radius: 12px;
clip-path: polygon(10% 0%, 90% 0%, 100% 50%, 90% 100%, 10% 100%, 0% 50%);
padding: 20px 40px;
}
.sop-node {
background: linear-gradient(135deg, #00ff88, #00cc6a);
color: #000;
}
.agent-node {
background: linear-gradient(135deg, #ff6b6b, #ee5555);
color: #fff;
}
.info-node {
background: linear-gradient(135deg, #a78bfa, #8b5cf6);
color: #fff;
}
.ask-node {
background: linear-gradient(135deg, #54a0ff, #2e86de);
color: #fff;
}
.arrow {
width: 2px;
height: 30px;
background: #666;
position: relative;
}
.arrow::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-top: 10px solid #666;
}
.branch-container {
display: flex;
gap: 40px;
justify-content: center;
flex-wrap: wrap;
margin-top: 20px;
}
.branch {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
.branch-label {
background: rgba(255, 255, 255, 0.1);
padding: 8px 16px;
border-radius: 20px;
font-size: 13px;
color: #aaa;
margin-bottom: 5px;
}
.yes-label { color: #00ff88; border: 1px solid #00ff88; }
.no-label { color: #ff6b6b; border: 1px solid #ff6b6b; }
.sub-section {
background: rgba(0, 0, 0, 0.2);
border-radius: 12px;
padding: 20px;
margin: 15px 0;
}
.sub-title {
color: #54a0ff;
font-size: 1.1em;
margin-bottom: 15px;
}
.condition-table {
width: 100%;
border-collapse: collapse;
margin: 15px 0;
}
.condition-table th,
.condition-table td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.condition-table th {
background: rgba(255, 159, 67, 0.2);
color: #ff9f43;
font-weight: 600;
}
.condition-table tr:hover {
background: rgba(255, 255, 255, 0.05);
}
.sop-tag {
display: inline-block;
background: rgba(0, 255, 136, 0.2);
color: #00ff88;
padding: 4px 10px;
border-radius: 6px;
font-family: monospace;
font-size: 11px;
}
.agent-tag {
display: inline-block;
background: rgba(255, 107, 107, 0.2);
color: #ff6b6b;
padding: 4px 10px;
border-radius: 6px;
font-family: monospace;
font-size: 11px;
}
.ask-tag {
display: inline-block;
background: rgba(84, 160, 255, 0.2);
color: #54a0ff;
padding: 4px 10px;
border-radius: 6px;
font-family: monospace;
font-size: 11px;
}
.warning-box {
background: rgba(255, 107, 107, 0.1);
border-left: 4px solid #ff6b6b;
padding: 15px;
margin: 15px 0;
border-radius: 0 8px 8px 0;
}
.warning-box strong {
color: #ff6b6b;
}
.info-box {
background: rgba(84, 160, 255, 0.1);
border-left: 4px solid #54a0ff;
padding: 15px;
margin: 15px 0;
border-radius: 0 8px 8px 0;
}
.time-badge {
display: inline-block;
background: rgba(167, 139, 250, 0.2);
color: #a78bfa;
padding: 4px 10px;
border-radius: 6px;
font-size: 12px;
margin-right: 5px;
}
.bank-badge {
display: inline-block;
background: rgba(255, 159, 67, 0.2);
color: #ff9f43;
padding: 4px 10px;
border-radius: 6px;
font-size: 12px;
margin-right: 5px;
}
.flowchart-wrapper {
overflow-x: auto;
padding: 20px 0;
}
.issue-type-badge {
display: inline-block;
background: rgba(0, 255, 136, 0.15);
color: #00ff88;
padding: 3px 8px;
border-radius: 4px;
font-size: 11px;
font-family: monospace;
}
@media (max-width: 768px) {
.branch-container {
flex-direction: column;
gap: 20px;
}
}
</style>
</head>
<body>
<h1>💸 WITHDRAWAL SOP Decision Tree</h1>
<div class="legend">
<div class="legend-item">
<div class="legend-box legend-start"></div>
<span>Start/Entry Point</span>
</div>
<div class="legend-item">
<div class="legend-box legend-decision"></div>
<span>Decision Point</span>
</div>
<div class="legend-item">
<div class="legend-box legend-sop"></div>
<span>SOP Response (PROVIDE_INFO)</span>
</div>
<div class="legend-item">
<div class="legend-box legend-ask"></div>
<span>Ask Clarification</span>
</div>
<div class="legend-item">
<div class="legend-box legend-agent"></div>
<span>Agent Transfer</span>
</div>
</div>
<div class="tree-container">
<!-- SECTION 1: FIRST TURN -->
<div class="section">
<h2 class="section-title">🔴 STEP 1: First Turn Check (No previous_sop)</h2>
<div class="warning-box">
<strong>⛔ CRITICAL RULE:</strong> Even with only 1 order, if user provides NO identifying details (Order ID or Amount+Bank), use ASK_WHICH_ORDER! User must explicitly identify the transaction.
</div>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node start-node">START: User Query About Withdrawal</div>
<div class="arrow"></div>
<div class="node decision-node">total_order_records?</div>
<div class="branch-container">
<!-- Branch: 0 Orders -->
<div class="branch">
<span class="branch-label no-label">= 0 (No Orders)</span>
<div class="arrow"></div>
<div class="node agent-node">WITHDRAWAL_ORDER_RECORD_EMPTY<br><small>(No withdrawals in 15 days)</small></div>
</div>
<!-- Branch: ≥1 Orders -->
<div class="branch">
<span class="branch-label yes-label">≥ 1 (Orders Exist)</span>
<div class="arrow"></div>
<div class="node decision-node">User provides identifying details?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label yes-label">Order ID matches</span>
<div class="arrow"></div>
<div class="node decision-node">Issue Type?</div>
<div class="branch-container" style="margin-top: 10px;">
<div class="branch">
<span class="branch-label" style="color: #00ff88;">SPECIFIC</span>
<div class="arrow"></div>
<div class="node info-node">Route by Issue<br>+ Order Status</div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">VAGUE</span>
<div class="arrow"></div>
<div class="node ask-node">WITHDRAWAL_ASK_WHAT_PROBLEM</div>
</div>
</div>
</div>
<div class="branch">
<span class="branch-label yes-label">Amount+Bank unique match</span>
<div class="arrow"></div>
<div class="node decision-node">Issue Type?</div>
<div class="branch-container" style="margin-top: 10px;">
<div class="branch">
<span class="branch-label" style="color: #00ff88;">SPECIFIC</span>
<div class="arrow"></div>
<div class="node info-node">Route by Issue<br>+ Order Status</div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">VAGUE</span>
<div class="arrow"></div>
<div class="node ask-node">WITHDRAWAL_ASK_WHAT_PROBLEM</div>
</div>
</div>
</div>
<div class="branch">
<span class="branch-label no-label">No details / Multiple matches</span>
<div class="arrow"></div>
<div class="node ask-node">WITHDRAWAL_ASK_WHICH_ORDER<br><small>(Show transaction list)</small></div>
</div>
<div class="branch">
<span class="branch-label no-label">Details don't match</span>
<div class="arrow"></div>
<div class="node agent-node">WITHDRAWAL_ORDER_RECORD_NO_MATCH</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sub-section">
<h3 class="sub-title">Issue Type Detection</h3>
<table class="condition-table">
<tr>
<th>Issue Type</th>
<th>Trigger Phrases (ID)</th>
<th>Trigger Phrases (EN)</th>
</tr>
<tr>
<td><span class="issue-type-badge">MONEY_NOT_RECEIVED</span></td>
<td>"belum masuk", "gak sampai", "kemana", "duitnya mana", "lama banget"</td>
<td>"not received", "hasn't arrived", "where's my money"</td>
</tr>
<tr>
<td><span class="issue-type-badge">CANCEL</span></td>
<td>"mau batalin", "batal", "ga jadi", "stop"</td>
<td>"want to cancel", "stop it"</td>
</tr>
<tr>
<td><span class="issue-type-badge">UNAUTHORIZED</span></td>
<td>"bukan saya", "tidak dikenal", "gak pernah transfer"</td>
<td>"wasn't me", "don't recognize", "didn't make this"</td>
</tr>
<tr>
<td><span class="issue-type-badge">WRONG_DESTINATION</span></td>
<td>"salah rekening", "salah kirim", "salah tujuan"</td>
<td>"wrong account", "sent to wrong person"</td>
</tr>
<tr>
<td><span class="issue-type-badge">AMOUNT_MISMATCH</span></td>
<td>"beda jumlah", "kurang", "lebih", "nominal salah"</td>
<td>"wrong amount", "amount different"</td>
</tr>
<tr>
<td><span class="issue-type-badge">null (VAGUE)</span></td>
<td>"ada masalah", "bermasalah", "kendala", "cek transfer"</td>
<td>"there's a problem", "I have an issue"</td>
</tr>
</table>
</div>
</div>
<!-- SECTION 2: LIST SELECTION -->
<div class="section">
<h2 class="section-title">📋 STEP 2: After Showing Transaction List</h2>
<p style="color: #aaa; margin-bottom: 20px;">Previous SOP = WITHDRAWAL_ASK_WHICH_ORDER</p>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node start-node">User Response to List</div>
<div class="arrow"></div>
<div class="node decision-node">What did user respond?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label no-label">"Not in list" / Rejects all</span>
<div class="arrow"></div>
<div class="node agent-node">WITHDRAWAL_NOT_IN_LIST_RESPONSE</div>
</div>
<div class="branch">
<span class="branch-label yes-label">Selects # + States Issue</span>
<div class="arrow"></div>
<div class="node info-node">Match → Route by Status</div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">Selects # Only (no issue)</span>
<div class="arrow"></div>
<div class="node ask-node">WITHDRAWAL_ASK_WHAT_PROBLEM</div>
</div>
<div class="branch">
<span class="branch-label">Unclear</span>
<div class="arrow"></div>
<div class="node ask-node">Re-ask WITHDRAWAL_ASK_WHICH_ORDER</div>
</div>
</div>
</div>
</div>
<div class="info-box">
<strong>💡 Key Distinction:</strong><br>
• "yang 250rb ke BCA" → Just selection, NO issue → <span class="ask-tag">ASK_WHAT_PROBLEM</span><br>
• "yang 250rb ke BCA belum masuk" → Selection + Issue → Route by status
</div>
</div>
<!-- SECTION 3: STATUS ROUTING -->
<div class="section">
<h2 class="section-title">🔀 STEP 3: Route by Order Status</h2>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node start-node">Transaction Identified + Issue Known</div>
<div class="arrow"></div>
<div class="node decision-node">order_status?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label" style="background: rgba(255, 165, 0, 0.2); color: orange;">IN_PROGRESS</span>
<div class="arrow"></div>
<div class="node info-node">→ See IN_PROGRESS Routing</div>
</div>
<div class="branch">
<span class="branch-label" style="background: rgba(0, 255, 136, 0.2); color: #00ff88;">SUCCESSFUL</span>
<div class="arrow"></div>
<div class="node info-node">→ See SUCCESSFUL Routing</div>
</div>
<div class="branch">
<span class="branch-label" style="background: rgba(255, 107, 107, 0.2); color: #ff6b6b;">CANCELLED</span>
<div class="arrow"></div>
<div class="node info-node">→ See CANCELLED Routing</div>
</div>
</div>
</div>
</div>
</div>
<!-- SECTION 3A: IN_PROGRESS -->
<div class="section">
<h2 class="section-title">⏱️ IN_PROGRESS: Time-Based & Issue Routing</h2>
<div class="warning-box">
<strong>⚠️ IMPORTANT:</strong> Use order_time_elapsed_in_hours from DATA for time routing!
</div>
<div class="sub-section">
<h3 class="sub-title">Time-Based Routing (for MONEY_NOT_RECEIVED or general status)</h3>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node start-node">order_status = IN_PROGRESS</div>
<div class="arrow"></div>
<div class="node decision-node">order_time_elapsed_in_hours?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label" style="color: #00ff88;">< 2 hours</span>
<div class="arrow"></div>
<div class="node sop-node">WITHDRAWAL_IN_PROGRESS_LESS_THAN_2_HOURS<br><small>"Connecting to bank, check later"</small></div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">2-24 hours</span>
<div class="arrow"></div>
<div class="node sop-node">WITHDRAWAL_IN_PROGRESS_DELAYED_LESS_THAN_1_DAY_MORE_THAN_2_HOURS<br><small>"Bank manual check, 1 business day"</small></div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ff6b6b;">≥ 24 hours</span>
<div class="arrow"></div>
<div class="node agent-node">WITHDRAWAL_IN_PROGRESS_DELAYED_MORE_THAN_1_DAY<br><small>"Exceeds normal time, offer agent"</small></div>
</div>
</div>
</div>
</div>
</div>
<div class="sub-section">
<h3 class="sub-title">Issue-Specific IN_PROGRESS SOPs</h3>
<table class="condition-table">
<tr>
<th>Issue Type</th>
<th>SOP</th>
<th>Action</th>
</tr>
<tr>
<td><span class="issue-type-badge">CANCEL</span></td>
<td><span class="sop-tag">WITHDRAWAL_IN_PROGRESS_ASK_CANCELLATION</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">WRONG_DESTINATION</span></td>
<td><span class="sop-tag">WITHDRAWAL_IN_PROGRESS_WRONG_DESTINATION</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">AMOUNT_MISMATCH</span></td>
<td><span class="sop-tag">WITHDRAWAL_IN_PROGRESS_AMOUNT_MISMATCH</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">UNAUTHORIZED</span></td>
<td><span class="sop-tag">WITHDRAWAL_SUCCESSFUL_UNAUTHORIZED_WITHDRAWAL</span></td>
<td>PROVIDE_INFO (fraud link)</td>
</tr>
</table>
</div>
</div>
<!-- SECTION 3B: SUCCESSFUL -->
<div class="section">
<h2 class="section-title">✅ SUCCESSFUL: Issue-Based Routing</h2>
<div class="warning-box">
<strong>🔴 CRITICAL - BANK TYPE CHECK FOR MONEY NOT RECEIVED:</strong><br>
Read <code>order_withdrawal_bank_code</code> from the order!<br>
<span class="bank-badge">bca, bri, bni, mandiri</span> → TYPE_A<br>
<span class="bank-badge">ALL OTHER banks (cimb, btn, bsi, jago, jenius, seabank, etc.)</span> → TYPE_B
</div>
<table class="condition-table">
<tr>
<th>Issue Type</th>
<th>Condition</th>
<th>SOP</th>
<th>Action</th>
</tr>
<tr>
<td rowspan="2"><span class="issue-type-badge">MONEY_NOT_RECEIVED</span></td>
<td><span class="bank-badge">bca/bri/bni/mandiri</span></td>
<td><span class="ask-tag">WITHDRAWAL_SUCCESSFUL_MONEY_NOT_RECEIVED_TYPE_A</span></td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="bank-badge">Other banks</span></td>
<td><span class="sop-tag">WITHDRAWAL_SUCCESSFUL_MONEY_NOT_RECEIVED_TYPE_B</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">AMOUNT_MISMATCH</span></td>
<td></td>
<td><span class="sop-tag">WITHDRAWAL_SUCCESSFUL_INCORRECT_AMOUNT</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">WRONG_DESTINATION</span></td>
<td></td>
<td><span class="ask-tag">WITHDRAWAL_SUCCESSFUL_WRONG_DESTINATION_CLARIFICATION</span></td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="issue-type-badge">UNAUTHORIZED</span></td>
<td></td>
<td><span class="sop-tag">WITHDRAWAL_SUCCESSFUL_UNAUTHORIZED_WITHDRAWAL</span></td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="issue-type-badge">CANCEL</span></td>
<td></td>
<td><span class="sop-tag">WITHDRAWAL_SUCCESSFUL_ASK_CANCELLATION</span></td>
<td>PROVIDE_INFO</td>
</tr>
</table>
<div class="sub-section">
<h3 class="sub-title">TYPE_A Bank Flow (BCA, BRI, BNI, Mandiri)</h3>
<div class="flow-container">
<div class="node ask-node">MONEY_NOT_RECEIVED_TYPE_A<br><small>"Have you contacted bank customer care?"</small></div>
<div class="arrow"></div>
<div class="node decision-node">User's response?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label no-label">"belum" / "no"</span>
<div class="arrow"></div>
<div class="node sop-node">TYPE_A_HAVENT_CONTACTED_CUSTOMER_CARE<br><small>"Please contact bank first"</small></div>
</div>
<div class="branch">
<span class="branch-label yes-label">"sudah, disuruh ke GoPay"</span>
<div class="arrow"></div>
<div class="node agent-node">TYPE_A_REFER_TO_GOPAY<br><small>"Connect to agent"</small></div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">"kenapa harus ke bank?"</span>
<div class="arrow"></div>
<div class="node sop-node">TYPE_A_WHY_CONTACT_BANK<br><small>"GoPay sent it, bank confirms receipt"</small></div>
</div>
<div class="branch">
<span class="branch-label" style="color: #00ff88;">"ok nanti aku hubungi"</span>
<div class="arrow"></div>
<div class="node sop-node">CLOSE_CONVERSATION</div>
</div>
</div>
</div>
</div>
<div class="sub-section">
<h3 class="sub-title">Wrong Destination Clarification Flow</h3>
<div class="flow-container">
<div class="node ask-node">WRONG_DESTINATION_CLARIFICATION<br><small>"Is account inactive/blocked or just wrong number?"</small></div>
<div class="arrow"></div>
<div class="node decision-node">User's answer?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label">"salah nomor rekening"</span>
<div class="arrow"></div>
<div class="node sop-node">WRONG_DESTINATION_WRONG_ACCOUNT<br><small>"Can't cancel, contact recipient"</small></div>
</div>
<div class="branch">
<span class="branch-label">"rekening tidak aktif"</span>
<div class="arrow"></div>
<div class="node sop-node">WRONG_DESTINATION_INACTIVE_BLOCKED<br><small>"Auto refund to GoPay"</small></div>
</div>
</div>
</div>
</div>
</div>
<!-- SECTION 3C: CANCELLED -->
<div class="section">
<h2 class="section-title">❌ CANCELLED: Intent & Refund Routing</h2>
<div class="info-box">
<strong>💡 Routing Priority:</strong> Check user's INTENT first, then refund_status
</div>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node start-node">order_status = CANCELLED</div>
<div class="arrow"></div>
<div class="node decision-node">User's Intent?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label">"ulang/retry"</span>
<div class="arrow"></div>
<div class="node sop-node">CANCELLED_RETRY_TRANSACTION<br><small>"No retry, but can start new transfer"</small></div>
</div>
<div class="branch">
<span class="branch-label">"kenapa gagal?"</span>
<div class="arrow"></div>
<div class="node sop-node">CANCELLED_ASK_CANCELLATION_REASON<br><small>"Bank rejected, refund in 24h"</small></div>
</div>
<div class="branch">
<span class="branch-label">General / Refund Question</span>
<div class="arrow"></div>
<div class="node decision-node">Check refund_status</div>
<div class="branch-container" style="margin-top: 10px;">
<div class="branch">
<span class="branch-label yes-label">REFUNDED</span>
<div class="arrow"></div>
<div class="node sop-node">CANCELLED_REFUNDED<br><small>"Refund received, refresh GoPay"</small></div>
</div>
<div class="branch">
<span class="branch-label" style="color: #ffd700;">NOT REFUNDED + < 24h</span>
<div class="arrow"></div>
<div class="node sop-node">CANCELLED_REFUND_PROCESSING<br><small>"Refund in progress, 24h"</small></div>
</div>
<div class="branch">
<span class="branch-label no-label">NOT REFUNDED + ≥ 24h</span>
<div class="arrow"></div>
<div class="node agent-node">CANCELLED_REFUND_DELAYED<br><small>"Offer agent transfer"</small></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- SECTION 4: AGENT TRANSFER -->
<div class="section">
<h2 class="section-title">🤝 Agent Transfer Response Handling</h2>
<div class="flowchart-wrapper">
<div class="flow-container">
<div class="node agent-node">Agent Transfer Offered (AGENT_TRANSFER_PROPOSAL)</div>
<div class="arrow"></div>
<div class="node decision-node">User's response?</div>
<div class="branch-container">
<div class="branch">
<span class="branch-label yes-label">Accepts<br><small>"iya", "mau", "yes", "boleh"</small></span>
<div class="arrow"></div>
<div class="node agent-node">AGENT_TRANSFER_CONFIRMATION<br><small>(action_type=AGENT_TRANSFER)</small></div>
</div>
<div class="branch">
<span class="branch-label no-label">Declines<br><small>"tidak", "jangan", "gak mau"</small></span>
<div class="arrow"></div>
<div class="node ask-node">AGENT_TRANSFER_USER_DECLINED<br><small>"OK, tell me more about issue"</small></div>
</div>
<div class="branch">
<span class="branch-label">Thanks<br><small>"makasih", "thanks"</small></span>
<div class="arrow"></div>
<div class="node sop-node">CLOSE_CONVERSATION_ASK_FOR_FEEDBACK</div>
</div>
</div>
</div>
</div>
<div class="sub-section">
<h3 class="sub-title">Unprompted Agent Request</h3>
<p style="color: #aaa; margin-bottom: 10px;">When user asks for agent WITHOUT prior AGENT_TRANSFER_PROPOSAL:</p>
<div class="node sop-node" style="max-width: 500px; margin: 0 auto;">AGENT_TRANSFER_DIRA_REJECTION<br><small>"I understand you want an agent. Can you tell me what's happening first?"</small></div>
</div>
</div>
<!-- SECTION 5: QUICK REFERENCE -->
<div class="section">
<h2 class="section-title">📚 Quick Reference: All SOPs</h2>
<div class="sub-section">
<h3 class="sub-title">Transaction Matching SOPs</h3>
<table class="condition-table">
<tr>
<th>SOP</th>
<th>When to Use</th>
<th>Action</th>
</tr>
<tr>
<td><span class="ask-tag">WITHDRAWAL_ASK_WHICH_ORDER</span></td>
<td>orders exist + no identifying details / multiple matches</td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="ask-tag">WITHDRAWAL_ASK_WHAT_PROBLEM</span></td>
<td>Order identified BUT issue is vague</td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="agent-tag">WITHDRAWAL_ORDER_RECORD_EMPTY</span></td>
<td>total_order_records = 0</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
<tr>
<td><span class="agent-tag">WITHDRAWAL_ORDER_RECORD_NO_MATCH</span></td>
<td>User's details don't match any order</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
<tr>
<td><span class="agent-tag">WITHDRAWAL_NOT_IN_LIST_RESPONSE</span></td>
<td>User says transaction not in list</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
</table>
</div>
<div class="sub-section">
<h3 class="sub-title">IN_PROGRESS SOPs</h3>
<table class="condition-table">
<tr>
<th>SOP</th>
<th>Condition</th>
<th>Action</th>
</tr>
<tr>
<td><span class="sop-tag">IN_PROGRESS_LESS_THAN_2_HOURS</span></td>
<td>order_time_elapsed_in_hours < 2</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">IN_PROGRESS_DELAYED_LESS_THAN_1_DAY_MORE_THAN_2_HOURS</span></td>
<td>2 ≤ hours < 24</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="agent-tag">IN_PROGRESS_DELAYED_MORE_THAN_1_DAY</span></td>
<td>≥ 24 hours</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
<tr>
<td><span class="sop-tag">IN_PROGRESS_ASK_CANCELLATION</span></td>
<td>User wants to cancel</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">IN_PROGRESS_WRONG_DESTINATION</span></td>
<td>User sent to wrong account</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">IN_PROGRESS_AMOUNT_MISMATCH</span></td>
<td>Wrong amount entered</td>
<td>PROVIDE_INFO</td>
</tr>
</table>
</div>
<div class="sub-section">
<h3 class="sub-title">SUCCESSFUL SOPs</h3>
<table class="condition-table">
<tr>
<th>SOP</th>
<th>Condition</th>
<th>Action</th>
</tr>
<tr>
<td><span class="ask-tag">MONEY_NOT_RECEIVED_TYPE_A</span></td>
<td>bank = bca/bri/bni/mandiri</td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="sop-tag">MONEY_NOT_RECEIVED_TYPE_B</span></td>
<td>bank = all other banks</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">TYPE_A_HAVENT_CONTACTED_CUSTOMER_CARE</span></td>
<td>User hasn't contacted bank</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">TYPE_A_WHY_CONTACT_BANK</span></td>
<td>User asks why contact bank</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="agent-tag">TYPE_A_REFER_TO_GOPAY</span></td>
<td>Bank referred user to GoPay</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
<tr>
<td><span class="sop-tag">INCORRECT_AMOUNT</span></td>
<td>Amount received is wrong</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="ask-tag">WRONG_DESTINATION_CLARIFICATION</span></td>
<td>User sent to wrong account</td>
<td>ASK_CLARIFICATION</td>
</tr>
<tr>
<td><span class="sop-tag">WRONG_DESTINATION_WRONG_ACCOUNT</span></td>
<td>Wrong account number entered</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">WRONG_DESTINATION_INACTIVE_BLOCKED</span></td>
<td>Destination is inactive/blocked</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">UNAUTHORIZED_WITHDRAWAL</span></td>
<td>User didn't make transaction</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">ASK_CANCELLATION</span></td>
<td>User wants to cancel</td>
<td>PROVIDE_INFO</td>
</tr>
</table>
</div>
<div class="sub-section">
<h3 class="sub-title">CANCELLED SOPs</h3>
<table class="condition-table">
<tr>
<th>SOP</th>
<th>Condition</th>
<th>Action</th>
</tr>
<tr>
<td><span class="sop-tag">CANCELLED_RETRY_TRANSACTION</span></td>
<td>User wants to retry</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">CANCELLED_ASK_CANCELLATION_REASON</span></td>
<td>User asks why cancelled</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">CANCELLED_REFUNDED</span></td>
<td>refund_status = REFUNDED</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">CANCELLED_REFUND_PROCESSING</span></td>
<td>NOT REFUNDED + < 24h</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="agent-tag">CANCELLED_REFUND_DELAYED</span></td>
<td>NOT REFUNDED + ≥ 24h</td>
<td>AGENT_TRANSFER_PROPOSAL</td>
</tr>
</table>
</div>
<div class="sub-section">
<h3 class="sub-title">Other SOPs</h3>
<table class="condition-table">
<tr>
<th>SOP</th>
<th>When to Use</th>
<th>Action</th>
</tr>
<tr>
<td><span class="sop-tag">HOW_TO_WITHDRAWAL_OR_TRANSFER</span></td>
<td>User asks how to withdraw</td>
<td>PROVIDE_INFO</td>
</tr>
<tr>
<td><span class="sop-tag">CLOSE_CONVERSATION_ASK_FOR_FEEDBACK</span></td>
<td>User says thanks/ok after resolution</td>
<td>CLOSE_CONVERSATION</td>
</tr>
</table>
</div>
</div>
</div>
<footer style="text-align: center; padding: 20px; color: #666; font-size: 12px;">
WITHDRAWAL SOP Decision Tree Visualization | Generated from prompt_modules
</footer>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment