Created
December 12, 2025 06:33
-
-
Save PaulisMatrix/549ae5a80fa0ac2d512720b1858ba386 to your computer and use it in GitHub Desktop.
withdrawal decision tree
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!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