[{"data":1,"prerenderedAt":375},["ShallowReactive",2],{"/en/workflows/decisionready-branch-signals-toolkit":3},{"id":4,"slug":5,"locale":6,"translationGroupId":7,"localeSwitchApproved":8,"title":9,"description":10,"documentationMarkdown":11,"workflowJson":12,"category":354,"tags":355,"integrations":359,"difficulty":362,"author":363,"verified":32,"featured":32,"date":364,"modified":364,"icon":7,"imageSrc":7,"path":365,"alternates":366,"seo":367},"0d26a67e-9f39-41e7-9178-6dbabe234072","decisionready-branch-signals-toolkit","en",null,true,"Decision‑Ready Branch Signals Toolkit","A practical decision coach that helps teams separate trustworthy branch signals from polished noise, spot dirty data early, and decide when to trust automation versus human judgment.","## How it works\nThis workflow turns “we have numbers” into “we have a decision we can defend.” When someone asks about branch performance, attribution, or conversation outcomes, Calypso first tries to answer from your Knowledge Base. If it can’t, it routes the user into a short, decision-shaped menu of reliability checks.\n\nEach path delivers a tight checklist that’s designed to catch the stuff that looks clean on slides but breaks under pressure: inconsistent definitions, selective sampling, mismatched time windows, and overconfident automation. The result is faster alignment and fewer confident wrong turns.\n\n## Key features\n- Uses a **Knowledge Base-first** policy to answer common signal questions before routing.\n- Offers **button-based decision paths** (branch numbers, dirty signal, automation vs. judgment, messy evidence, comparisons, culture).\n- Provides **meeting-ready checklists** that focus on what fails first (definitions, denominators, lag, selection bias).\n- Loops back to the menu so operators can run multiple checks without restarting.\n- Includes a **human handoff** option for cases that need investigation.\n\n## Step-by-step\n1. **Input trigger** starts the workflow when a user opens the flow.\n2. **Knowledge Base Policy** attempts to answer the user’s question using your existing Knowledge Base content.\n3. If no KB answer is used, the workflow sends an **interactive menu**: “Pick the decision you’re about to make.”\n4. Based on the selected button, an **IF** route sends a targeted checklist:\n   1. **Which branch numbers deserve trust?** → reliability checks for definitions, denominators, and comparability.\n   2. **How to spot dirty signal** → fast tests for missingness, weird spikes, and “too-perfect” stability.\n   3. **Automation vs. human judgment** → guardrails for what can be automated vs. what needs review.\n   4. **Messy evidence → usable insight** → how to keep uncertainty visible without freezing the decision.\n   5. **Comparing branches, conversations, attribution** → common misreads and how to prevent them.\n   6. **Build a signal culture** → lightweight habits that improve decisions (not just decks).\n5. After each checklist, the workflow returns to the **menu** so the user can pick another path.\n6. If the user selects **“Loop in a human”**, the workflow sends a **handoff** to the configured department.\n\n## Setup requirements\n- **Calypso Knowledge Base**: recommended (the workflow is designed to try KB answers first). No external credentials are required beyond your Calypso access.\n- **Routing / Departments**: configure the target department (“Insights Ops”) if you want the human handoff path to reach the right team.",{"id":13,"teamId":14,"name":9,"version":15,"workflowVersion":16,"nodes":17,"connections":277,"routingEnabled":8,"active":32},"wf_decision_ready_branch_signals_toolkit","calypso-public-library","1.0.0",1,[18,33,40,52,86,96,101,106,112,118,124,130,138,144,150,156,162,168,178,196,202,208,213,219,224,229,235,242,248,254,260,266,272],{"id":19,"name":20,"type":21,"typeVersion":16,"position":22,"parameters":24,"category":31,"deletable":32,"connectable":32},"n0","Flow settings","flow-configs",[23,23],0,{"name":9,"description":25,"tags":26,"triggerType":30},"KB-first decision coach for branch signal trust, dirty data detection, automation guardrails, and comparison sanity checks.",[27,28,29],"decision-systems","signal-quality","branch-metrics","input","policy",false,{"id":34,"name":35,"type":30,"typeVersion":16,"position":36,"parameters":39,"category":30,"deletable":32,"connectable":8},"n1","Start",[37,38],200,120,{},{"id":41,"name":42,"type":43,"typeVersion":16,"position":44,"parameters":46,"category":51,"deletable":8,"connectable":8},"n2","Knowledge Base first","knowledge-base-policy",[45,38],420,{"enabled":8,"fallbackToRouting":8,"sticky":8,"stickyMode":47,"activationOpener":48,"personalization":50},"ai_sticky_release",{"enabled":8,"instruction":49},"Answer like an experienced operator: practical, specific, and decision-focused. Prefer quick checks, definitions, and what to verify before trusting a number. Avoid academic framing. If the user’s request is ambiguous, ask one clarifying question.",{"useContactName":8},"response",{"id":53,"name":54,"type":55,"typeVersion":16,"position":56,"parameters":58,"category":51,"deletable":8,"connectable":8},"n3","Decision menu","interactive-message",[57,38],660,{"messageType":59,"headerText":60,"bodyText":61,"footerText":62,"sectionTitle":63,"buttons":64,"ctaDisplayText":63,"ctaUrl":63},"button","Pick the decision you’re about to make","Choose the closest match and I’ll give you a tight reliability checklist.","Tip: definitions + time windows fail first.","",[65,68,71,74,77,80,83],{"id":66,"title":67},"trust_branch_numbers","Trust numbers?",{"id":69,"title":70},"spot_dirty_signal","Dirty signal check",{"id":72,"title":73},"automation_vs_judgment","Auto vs human",{"id":75,"title":76},"messy_evidence","Messy to insight",{"id":78,"title":79},"compare_branches","Compare + attrib",{"id":81,"title":82},"signal_culture","Signal culture",{"id":84,"title":85},"handoff","Human handoff",{"id":87,"name":88,"type":89,"typeVersion":16,"position":90,"parameters":93,"category":95,"deletable":8,"connectable":8},"n4","If: trust_branch_numbers","if",[91,92],920,40,{"buttonId":66,"operator":94},"equals","routing",{"id":97,"name":98,"type":89,"typeVersion":16,"position":99,"parameters":100,"category":95,"deletable":8,"connectable":8},"n5","If: spot_dirty_signal",[91,38],{"buttonId":69,"operator":94},{"id":102,"name":103,"type":89,"typeVersion":16,"position":104,"parameters":105,"category":95,"deletable":8,"connectable":8},"n6","If: automation_vs_judgment",[91,37],{"buttonId":72,"operator":94},{"id":107,"name":108,"type":89,"typeVersion":16,"position":109,"parameters":111,"category":95,"deletable":8,"connectable":8},"n7","If: messy_evidence",[91,110],280,{"buttonId":75,"operator":94},{"id":113,"name":114,"type":89,"typeVersion":16,"position":115,"parameters":117,"category":95,"deletable":8,"connectable":8},"n8","If: compare_branches",[91,116],360,{"buttonId":78,"operator":94},{"id":119,"name":120,"type":89,"typeVersion":16,"position":121,"parameters":123,"category":95,"deletable":8,"connectable":8},"n9","If: signal_culture",[91,122],440,{"buttonId":81,"operator":94},{"id":125,"name":126,"type":89,"typeVersion":16,"position":127,"parameters":129,"category":95,"deletable":8,"connectable":8},"n10","If: handoff",[91,128],520,{"buttonId":84,"operator":94},{"id":131,"name":132,"type":133,"typeVersion":16,"position":134,"parameters":136,"category":51,"deletable":8,"connectable":8},"n11","Checklist: trust branch numbers","text-message",[135,92],1180,{"text":137},"Branch numbers you can trust usually have boring properties. Quick test:\n\n1) Definition lock: what exactly counts (and what doesn’t)? If two branches can interpret it differently, it’s not a metric yet.\n2) Denominator sanity: are you looking at totals, per-day, per-eligible-customer, per-employee? Wrong denominator = confident nonsense.\n3) Window alignment: same dates, same cutoff time, same timezone. Misaligned windows create “winners.”\n4) Comparability: staffing changes, outages, promotions, or policy changes? Note them before ranking anyone.\n5) Lag awareness: what’s the natural delay between action and outcome? If you measure too early, you’re measuring wishful thinking.\n\nIf you can’t answer 1–3 in one sentence each, treat the number as a clue—not a conclusion.\n\nChoose another check from the next menu.",{"id":139,"name":140,"type":133,"typeVersion":16,"position":141,"parameters":142,"category":51,"deletable":8,"connectable":8},"n12","Checklist: spot dirty signal",[135,38],{"text":143},"Dirty signal usually looks clean—right up until someone asks one extra question. Fast detectors:\n\n1) Missingness map: did tracking drop for a subset (a branch, a shift, a channel) rather than everywhere?\n2) Too-smooth trend: perfectly stable lines often mean “we stopped measuring,” not “we improved.”\n3) Spike audit: any step-change should have a cause you can name (release, campaign, outage). If not, assume instrumentation first.\n4) Duplicate/loop behavior: sudden growth in ‘events’ without growth in real outcomes = counting the same thing more times.\n5) Boundary checks: any metric that can’t exceed a logical max (e.g., >100%) and does anyway is telling you a story.\n\nIf you have to choose one: ask “what changed in the measurement, not the business?”\n\nChoose another check from the next menu.",{"id":145,"name":146,"type":133,"typeVersion":16,"position":147,"parameters":148,"category":51,"deletable":8,"connectable":8},"n13","Checklist: automation vs judgment",[135,37],{"text":149},"When to trust automation vs. insist on human judgment:\n\nGood candidates for automation:\n- High-volume, low-stakes, reversible decisions (routing, reminders, basic eligibility).\n- Rules anchored to stable definitions (not vibes).\n- Situations where false positives are cheaper than false negatives (or vice versa) and you’ve agreed which.\n\nRequire human judgment when:\n- The cost of being wrong is asymmetric and ugly (compliance, reputational risk, VIP cases).\n- The signal is sparse, new, or recently changed (new channel, new policy, new tracking).\n- There are incentives to game the metric (leaderboards turn adults into creative accountants).\n\nOperational guardrail: automate the default, but build a “suspicious cases” lane. If the model can’t explain itself simply, it shouldn’t be the final approver.\n\nChoose another check from the next menu.",{"id":151,"name":152,"type":133,"typeVersion":16,"position":153,"parameters":154,"category":51,"deletable":8,"connectable":8},"n14","Checklist: messy evidence → insight",[135,110],{"text":155},"Turning messy evidence into usable insight (without cleaning away the truth):\n\n1) Keep the mess visible: separate ‘observed’ vs ‘imputed/assumed.’ Don’t blend them and call it confidence.\n2) Use ranges, not single points: if uncertainty is real, a precise number is a costume.\n3) Explain the mechanism: “why would this be true?” beats “the line went up.”\n4) Triangulate lightly: one metric + one qualitative check (a few conversations, a spot audit) beats ten correlated dashboards.\n5) Decide on thresholds: what would change your decision? If nothing would, stop polishing the analysis.\n\nA practical standard: you’re done when the decision is robust to the top two alternative explanations.\n\nChoose another check from the next menu.",{"id":157,"name":158,"type":133,"typeVersion":16,"position":159,"parameters":160,"category":51,"deletable":8,"connectable":8},"n15","Checklist: comparing branches + attribution",[135,116],{"text":161},"What teams repeatedly misread when comparing branches, conversations, and attribution:\n\n1) Different inputs: Branch A might get harder cases. If you rank outcomes without case-mix, you’re ranking luck.\n2) Different measurement coverage: one branch’s tracking breaks quietly; they “improve” overnight.\n3) Conversation counts ≠ outcomes: more chats can mean confusion, not success.\n4) Attribution overlap: if multiple touches can claim credit, you’ll double-count wins and undercount ‘did nothing’.\n5) Small n confidence: a top-performing branch with 12 cases is not a hero—yet.\n\nTwo fixes that work:\n- Normalize by opportunity (eligible customers, qualified leads, hours staffed).\n- When attributing, write the rule in plain language, then test it on 10 real journeys.\n\nChoose another check from the next menu.",{"id":163,"name":164,"type":133,"typeVersion":16,"position":165,"parameters":166,"category":51,"deletable":8,"connectable":8},"n16","Checklist: build a signal culture",[135,122],{"text":167},"Build a signal culture that helps decisions happen (not just slides):\n\n1) Metric owners, not metric fans: every key number has a named owner who can explain definitions and changes.\n2) “Red flag” rituals: celebrate the person who finds instrumentation issues early. That’s prevention, not negativity.\n3) Decision memos beat deck wars: write the decision, the signal used, and what would falsify it.\n4) One-page comparability notes: when comparing branches, list known differences (case-mix, staffing, outages) upfront.\n5) Close the loop: after a decision, check whether the signal predicted reality. If not, fix the signal before the next meeting.\n\nWit-sized truth: dashboards don’t create accountability—follow-ups do.\n\nChoose another check from the next menu.",{"id":169,"name":170,"type":171,"typeVersion":16,"position":172,"parameters":173,"category":177,"deletable":8,"connectable":8},"n17","Handoff to Insights Ops","fallback",[135,128],{"handoffMessage":174,"departmentId":175,"departmentName":176},"Got it — this sounds like it needs a real investigation. I’m looping in Insights Ops. Please share the branch(es), timeframe, and the metric/decision you’re trying to make.","insights-ops","Insights Ops","terminal",{"id":179,"name":180,"type":55,"typeVersion":16,"position":181,"parameters":184,"category":51,"deletable":8,"connectable":8},"n18","One more check",[182,183],1420,240,{"messageType":59,"headerText":185,"bodyText":186,"footerText":187,"sectionTitle":63,"buttons":188,"ctaDisplayText":63,"ctaUrl":63},"Want to run one more check?","Pick the next angle, or loop in a human if this needs digging.","Tip: start with definitions, then time windows.",[189,190,191,192,193,194,195],{"id":66,"title":67},{"id":69,"title":70},{"id":72,"title":73},{"id":75,"title":76},{"id":78,"title":79},{"id":81,"title":82},{"id":84,"title":85},{"id":197,"name":198,"type":89,"typeVersion":16,"position":199,"parameters":201,"category":95,"deletable":8,"connectable":8},"n19","If: trust_branch_numbers (2)",[200,38],1680,{"buttonId":66,"operator":94},{"id":203,"name":204,"type":89,"typeVersion":16,"position":205,"parameters":207,"category":95,"deletable":8,"connectable":8},"n20","If: spot_dirty_signal (2)",[200,206],180,{"buttonId":69,"operator":94},{"id":209,"name":210,"type":89,"typeVersion":16,"position":211,"parameters":212,"category":95,"deletable":8,"connectable":8},"n21","If: automation_vs_judgment (2)",[200,183],{"buttonId":72,"operator":94},{"id":214,"name":215,"type":89,"typeVersion":16,"position":216,"parameters":218,"category":95,"deletable":8,"connectable":8},"n22","If: messy_evidence (2)",[200,217],300,{"buttonId":75,"operator":94},{"id":220,"name":221,"type":89,"typeVersion":16,"position":222,"parameters":223,"category":95,"deletable":8,"connectable":8},"n23","If: compare_branches (2)",[200,116],{"buttonId":78,"operator":94},{"id":225,"name":226,"type":89,"typeVersion":16,"position":227,"parameters":228,"category":95,"deletable":8,"connectable":8},"n24","If: signal_culture (2)",[200,45],{"buttonId":81,"operator":94},{"id":230,"name":231,"type":89,"typeVersion":16,"position":232,"parameters":234,"category":95,"deletable":8,"connectable":8},"n25","If: handoff (2)",[200,233],480,{"buttonId":84,"operator":94},{"id":236,"name":237,"type":133,"typeVersion":16,"position":238,"parameters":240,"category":51,"deletable":8,"connectable":8},"n26","Checklist: trust branch numbers (2)",[239,38],1940,{"text":241},"Branch numbers you can trust usually have boring properties. Quick test:\n\n1) Definition lock: what exactly counts (and what doesn’t)? If two branches can interpret it differently, it’s not a metric yet.\n2) Denominator sanity: totals vs per-eligible vs per-hour. Wrong denominator = confident nonsense.\n3) Window alignment: same dates, same cutoff time, same timezone.\n4) Comparability: staffing changes, outages, promotions, policy changes—note them before ranking.\n5) Lag awareness: measure too early and you’re measuring wishful thinking.\n\nIf you can’t answer 1–3 in one sentence each, treat the number as a clue—not a conclusion.\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":243,"name":244,"type":133,"typeVersion":16,"position":245,"parameters":246,"category":51,"deletable":8,"connectable":8},"n27","Checklist: spot dirty signal (2)",[239,206],{"text":247},"Dirty signal usually looks clean—until someone asks one extra question. Fast detectors:\n\n1) Missingness map: did tracking drop for a subset (branch/shift/channel)?\n2) Too-smooth trend: perfectly stable lines often mean “we stopped measuring.”\n3) Spike audit: step-changes need a named cause (release/campaign/outage). If not, assume instrumentation.\n4) Duplicate/loop behavior: more events without more outcomes = counting the same thing more times.\n5) Boundary checks: impossible values (>100%, negative counts) are your early warning.\n\nIf you have to choose one: ask “what changed in the measurement, not the business?”\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":249,"name":250,"type":133,"typeVersion":16,"position":251,"parameters":252,"category":51,"deletable":8,"connectable":8},"n28","Checklist: automation vs judgment (2)",[239,183],{"text":253},"Automation vs. human judgment—use this as a last-pass guardrail:\n\nAutomate when it’s high-volume, low-stakes, and reversible—and the rule can be stated in plain language.\n\nRequire a human when the cost of being wrong is ugly, the signal is new/sparse, or incentives encourage gaming.\n\nOperational standard: automate the default, but create a “suspicious cases” lane.\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":255,"name":256,"type":133,"typeVersion":16,"position":257,"parameters":258,"category":51,"deletable":8,"connectable":8},"n29","Checklist: messy evidence → insight (2)",[239,217],{"text":259},"Messy evidence → usable insight (final pass):\n\n- Keep observed vs assumed separate.\n- Use ranges when uncertainty is real.\n- State the mechanism (“why would this be true?”).\n- Triangulate: one metric + one spot audit beats ten dashboards.\n- Decide what would change your mind—then stop.\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":261,"name":262,"type":133,"typeVersion":16,"position":263,"parameters":264,"category":51,"deletable":8,"connectable":8},"n30","Checklist: comparing branches + attribution (2)",[239,116],{"text":265},"Comparing branches + attribution (final pass):\n\n- Case-mix: are branches getting different difficulty?\n- Coverage: did tracking break quietly in one place?\n- Volume ≠ outcomes: more conversations can mean more confusion.\n- Attribution overlap: multiple touches claiming the same win.\n- Small n: don’t crown a hero off 12 cases.\n\nFixes: normalize by opportunity and test the attribution rule on 10 real journeys.\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":267,"name":268,"type":133,"typeVersion":16,"position":269,"parameters":270,"category":51,"deletable":8,"connectable":8},"n31","Checklist: build a signal culture (2)",[239,45],{"text":271},"Signal culture that produces decisions (not slides):\n\n- Every key number has an owner who can explain it.\n- Reward early red flags (instrumentation issues are prevention).\n- Write decision memos: decision, signal, falsifier.\n- Add comparability notes before branch rankings.\n- Close the loop: did the signal predict reality?\n\nNeed more help? Restart the toolkit or request a human handoff.",{"id":273,"name":274,"type":171,"typeVersion":16,"position":275,"parameters":276,"category":177,"deletable":8,"connectable":8},"n32","Handoff to Insights Ops (2)",[239,233],{"handoffMessage":174,"departmentId":175,"departmentName":176},[278,283,285,287,289,291,293,295,297,299,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352],{"id":279,"source":34,"target":41,"sourceHandle":280,"targetHandle":281,"type":282},"e1","out","in","edge",{"id":284,"source":41,"target":53,"sourceHandle":280,"targetHandle":281,"type":282},"e2",{"id":286,"source":53,"target":87,"sourceHandle":280,"targetHandle":281,"type":282},"e3",{"id":288,"source":53,"target":97,"sourceHandle":280,"targetHandle":281,"type":282},"e4",{"id":290,"source":53,"target":102,"sourceHandle":280,"targetHandle":281,"type":282},"e5",{"id":292,"source":53,"target":107,"sourceHandle":280,"targetHandle":281,"type":282},"e6",{"id":294,"source":53,"target":113,"sourceHandle":280,"targetHandle":281,"type":282},"e7",{"id":296,"source":53,"target":119,"sourceHandle":280,"targetHandle":281,"type":282},"e8",{"id":298,"source":53,"target":125,"sourceHandle":280,"targetHandle":281,"type":282},"e9",{"id":300,"source":87,"target":131,"sourceHandle":301,"targetHandle":281,"type":282},"e10","true",{"id":303,"source":97,"target":139,"sourceHandle":301,"targetHandle":281,"type":282},"e11",{"id":305,"source":102,"target":145,"sourceHandle":301,"targetHandle":281,"type":282},"e12",{"id":307,"source":107,"target":151,"sourceHandle":301,"targetHandle":281,"type":282},"e13",{"id":309,"source":113,"target":157,"sourceHandle":301,"targetHandle":281,"type":282},"e14",{"id":311,"source":119,"target":163,"sourceHandle":301,"targetHandle":281,"type":282},"e15",{"id":313,"source":125,"target":169,"sourceHandle":301,"targetHandle":281,"type":282},"e16",{"id":315,"source":131,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e17a",{"id":317,"source":139,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e18a",{"id":319,"source":145,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e19a",{"id":321,"source":151,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e20a",{"id":323,"source":157,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e21a",{"id":325,"source":163,"target":179,"sourceHandle":280,"targetHandle":281,"type":282},"e22a",{"id":327,"source":179,"target":197,"sourceHandle":280,"targetHandle":281,"type":282},"e23",{"id":329,"source":179,"target":203,"sourceHandle":280,"targetHandle":281,"type":282},"e24",{"id":331,"source":179,"target":209,"sourceHandle":280,"targetHandle":281,"type":282},"e25",{"id":333,"source":179,"target":214,"sourceHandle":280,"targetHandle":281,"type":282},"e26",{"id":335,"source":179,"target":220,"sourceHandle":280,"targetHandle":281,"type":282},"e27",{"id":337,"source":179,"target":225,"sourceHandle":280,"targetHandle":281,"type":282},"e28",{"id":339,"source":179,"target":230,"sourceHandle":280,"targetHandle":281,"type":282},"e29",{"id":341,"source":197,"target":236,"sourceHandle":301,"targetHandle":281,"type":282},"e30",{"id":343,"source":203,"target":243,"sourceHandle":301,"targetHandle":281,"type":282},"e31",{"id":345,"source":209,"target":249,"sourceHandle":301,"targetHandle":281,"type":282},"e32",{"id":347,"source":214,"target":255,"sourceHandle":301,"targetHandle":281,"type":282},"e33",{"id":349,"source":220,"target":261,"sourceHandle":301,"targetHandle":281,"type":282},"e34",{"id":351,"source":225,"target":267,"sourceHandle":301,"targetHandle":281,"type":282},"e35",{"id":353,"source":230,"target":273,"sourceHandle":301,"targetHandle":281,"type":282},"e36","automation",[27,28,29,356,357,358],"data-hygiene","automation-judgment","attribution",[360,361],"Calypso Knowledge Base","Calypso Routing","intermediate","Calypso","2026-05-12T11:04:21.593Z","/en/workflows/decisionready-branch-signals-toolkit",{"en":365},{"title":9,"description":368,"ogDescription":369,"twitterDescription":370,"canonicalPath":365,"robots":371,"schemaType":372,"alternates":373},"Guide teams to trust the right branch signals, spot dirty data early, and choose when to automate vs. use human judgment.","A menu driven signal coach: sanity check branch numbers, detect dirty signal, avoid attribution traps, and know when automation needs a human.","Stop confident wrong decisions. Get practical checklists for branch signal trust, dirty data detection, attribution comparisons, and automation guardrails.","index,follow","HowTo",[374],{"hreflang":6,"href":365},1778614429870]