@sonnechasser/ntrp 2.2.1 → 2.2.2
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.
- package/dist/index.js +44 -44
- package/dist/mcp/server.js +44 -44
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -18345,21 +18345,21 @@ var init_metric_definitions = __esm({
|
|
|
18345
18345
|
kind: "vital",
|
|
18346
18346
|
label: "Freshness",
|
|
18347
18347
|
group: "Vital Signs",
|
|
18348
|
-
tagline: "Is the CRM
|
|
18349
|
-
how_computed: "
|
|
18348
|
+
tagline: "Is the CRM talking about live deals \u2014 or a museum of old ones?",
|
|
18349
|
+
how_computed: "We look at how recently people, companies, and deals got a touch. Deals need a fresher pulse than people or companies, and past-due deals count as stale. The formula lines on this card show the exact mix and windows.",
|
|
18350
18350
|
formula_lines: [
|
|
18351
18351
|
"freshness = people%\xD70.35 + orgs%\xD70.30 + opps%\xD70.35",
|
|
18352
18352
|
"people/orgs fresh if activity within 90d",
|
|
18353
18353
|
"opps fresh if activity within 30d AND not past-due"
|
|
18354
18354
|
],
|
|
18355
|
-
meaning:
|
|
18356
|
-
expert_read:
|
|
18355
|
+
meaning: `Freshness asks whether the pipeline number is still true. Quiet deals pad the forecast. Like milk dates on a shelf \u2014 past the date, don't trust the carton. Stale open dollars show as "pipeline at risk."`,
|
|
18356
|
+
expert_read: "Cut by owner and stage first \u2014 reds usually clump, they don't sprinkle. A sudden cliff is often a broken sync or a departed rep, not slow decay. New bulk imports can look stale when they're just new.",
|
|
18357
18357
|
deepdive: [
|
|
18358
|
-
"
|
|
18359
|
-
'
|
|
18360
|
-
"
|
|
18361
|
-
"
|
|
18362
|
-
"
|
|
18358
|
+
"Green 80+, yellow 60+, red below 60. Motion presets can change the windows.",
|
|
18359
|
+
'Dollars: sum of amount on stale open deals \u2192 "pipeline at risk".',
|
|
18360
|
+
"Read this first. If Freshness is red, later vitals are harder to trust.",
|
|
18361
|
+
"Weak score \u2192 play Clean Dead Pipeline.",
|
|
18362
|
+
"Useful moves: stale-deal alert, weekly hygiene scrub, enrichment on quiet records."
|
|
18363
18363
|
],
|
|
18364
18364
|
visual: {
|
|
18365
18365
|
kind: "bars",
|
|
@@ -18383,21 +18383,21 @@ var init_metric_definitions = __esm({
|
|
|
18383
18383
|
kind: "vital",
|
|
18384
18384
|
label: "Flow Rate",
|
|
18385
18385
|
group: "Vital Signs",
|
|
18386
|
-
tagline: "Where
|
|
18387
|
-
how_computed: "
|
|
18386
|
+
tagline: "Where do deals stop moving \u2014 and what's piled up behind that stage?",
|
|
18387
|
+
how_computed: "We start from how old open deals are versus a max window, then shave points for the share that look stuck. A deal is stuck when it goes quiet too long or its close date is already past. The formula lines show the base, the penalty, and the stuck rules.",
|
|
18388
18388
|
formula_lines: [
|
|
18389
18389
|
"base = 100 \xD7 (1 \u2212 avgOpenAge / max_days)",
|
|
18390
18390
|
"score = base \u2212 stuckSharePenalty (\u226420)",
|
|
18391
18391
|
"stuck = no update > stuck_days OR past-due close"
|
|
18392
18392
|
],
|
|
18393
|
-
meaning: '
|
|
18394
|
-
expert_read: "
|
|
18393
|
+
meaning: 'Flow Rate asks whether deals are still advancing or sitting still. Stuck deals pad next quarter on paper. Like traffic behind a closed lane \u2014 the jam is one stage, not the whole highway. Dollars on stuck deals show as "stuck in pipeline."',
|
|
18394
|
+
expert_read: "Find the stage where advancement collapses first \u2014 it's usually one stage, not everywhere. Compare stuck age to this company's own median cycle rather than a generic norm. Stuck deals plus past-due closes are often a forecast-credibility problem before they're a revenue miss.",
|
|
18395
18395
|
deepdive: [
|
|
18396
|
-
"Status uses average open age. Green
|
|
18397
|
-
'
|
|
18398
|
-
"
|
|
18399
|
-
"
|
|
18400
|
-
"
|
|
18396
|
+
"Status uses average open age. Green \u226445 days, yellow \u226490, else red. Defaults: max_days 120, stuck_days 60.",
|
|
18397
|
+
'Dollars: sum of amount on stuck deals \u2192 "stuck in pipeline".',
|
|
18398
|
+
"Read with Drop Rate \u2014 stuck deals and handoff leaks often show up together.",
|
|
18399
|
+
"Weak score \u2192 play Unstick the Pipeline.",
|
|
18400
|
+
"Useful moves: stage-age report, past-due close cleanup, progression plans on stuck deals, forecast hygiene on optimistic close dates."
|
|
18401
18401
|
],
|
|
18402
18402
|
visual: {
|
|
18403
18403
|
kind: "funnel",
|
|
@@ -18423,21 +18423,21 @@ var init_metric_definitions = __esm({
|
|
|
18423
18423
|
kind: "vital",
|
|
18424
18424
|
label: "Drop Rate",
|
|
18425
18425
|
group: "Vital Signs",
|
|
18426
|
-
tagline: "Where does paid demand fall between systems before
|
|
18427
|
-
how_computed: "
|
|
18426
|
+
tagline: "Where does paid demand fall between systems before a rep works it?",
|
|
18427
|
+
how_computed: "We blend two checks: do marketing people also show up in sales CRM, and are open deals still being worked (not abandoned). The formula lines show the weights and the 30-day abandon window.",
|
|
18428
18428
|
formula_lines: [
|
|
18429
18429
|
"score = crossSystemRetention\xD70.6 + oppRetention\xD70.4",
|
|
18430
18430
|
"cross-system = marketing people also in sales CRM",
|
|
18431
18431
|
"abandoned = open opps with no activity in 30d"
|
|
18432
18432
|
],
|
|
18433
|
-
meaning: '
|
|
18434
|
-
expert_read:
|
|
18433
|
+
meaning: 'Drop Rate prices the handoff leak \u2014 money you already spent on leads that never reach a working rep. Like buying groceries and leaving half the bags in the parking lot. The dollar line is "est. lost at handoff."',
|
|
18434
|
+
expert_read: "A useful first cut is by lead source \u2014 the leak usually concentrates in one or two, not everywhere. Routing rules, unassigned territories, dead queues, or a sync gap between marketing and CRM show up more often than lazy reps. The cheapest pipeline you can buy is often the leads you already paid for.",
|
|
18435
18435
|
deepdive: [
|
|
18436
|
-
"
|
|
18437
|
-
'
|
|
18438
|
-
"
|
|
18439
|
-
"
|
|
18440
|
-
"
|
|
18436
|
+
"Green 80+, yellow 60+, red below 60.",
|
|
18437
|
+
'Dollars: dropped \xD7 conversion \xD7 avg deal (fallback: drop% \xD7 open pipeline) \u2192 "est. lost at handoff".',
|
|
18438
|
+
"Read with Flow Rate \u2014 handoff leaks and stuck deals often show up together.",
|
|
18439
|
+
"Weak score \u2192 play Fix the Handoff Gap.",
|
|
18440
|
+
"Useful moves: source-level handoff audit, routing and sync repair, time-to-first-touch SLA, weekly marketing-only-leads report."
|
|
18441
18441
|
],
|
|
18442
18442
|
visual: {
|
|
18443
18443
|
kind: "funnel",
|
|
@@ -18462,21 +18462,21 @@ var init_metric_definitions = __esm({
|
|
|
18462
18462
|
kind: "vital",
|
|
18463
18463
|
label: "Signal:Noise",
|
|
18464
18464
|
group: "Vital Signs",
|
|
18465
|
-
tagline: "How much
|
|
18466
|
-
how_computed: "
|
|
18465
|
+
tagline: "How much effort still aims at accounts that can close \u2014 versus dead ends?",
|
|
18466
|
+
how_computed: "We look at the last 90 days of activity and ask what share is signal \u2014 linked to an open deal, a pipeline person, or a pipeline company. The formula lines show the ratio and what counts as signal.",
|
|
18467
18467
|
formula_lines: [
|
|
18468
18468
|
"score = (signalCount / activityCount) \xD7 100",
|
|
18469
18469
|
"signal = linked to open opp / pipeline person / pipeline org",
|
|
18470
18470
|
"lookback = trailing 90 days"
|
|
18471
18471
|
],
|
|
18472
|
-
meaning:
|
|
18472
|
+
meaning: 'Signal:Noise asks whether activity still points at deals that can close. Noise hours are capacity spent on dead ends. Like a radio stuck between stations \u2014 lots of static, little signal. Those hours show as "misdirected effort."',
|
|
18473
18473
|
expert_read: "A useful cut is by rep and by account status. Persistent noise often means reps keep working dead accounts they already know \u2014 stale targeting or coverage models more than a coaching gap. Also check whether activity is logged against closed or unlinked records; that can be a hygiene artifact pretending to be effort.",
|
|
18474
18474
|
deepdive: [
|
|
18475
|
-
"
|
|
18476
|
-
|
|
18477
|
-
"
|
|
18478
|
-
"
|
|
18479
|
-
"
|
|
18475
|
+
"Green 65+, yellow 40+, red below 40.",
|
|
18476
|
+
'Dollar defaults: 0.25 hours/activity \xD7 $75/hr (config: hours_per_activity, rep_hourly_cost) \u2192 "misdirected effort".',
|
|
18477
|
+
"Read Freshness, Flow Rate, and Drop Rate before you trust this score.",
|
|
18478
|
+
"Weak score \u2192 play Retarget Misdirected Effort.",
|
|
18479
|
+
"Useful moves: refresh account lists, signal-based targeting, stop logging against closed or unlinked records, coverage-model redesign."
|
|
18480
18480
|
],
|
|
18481
18481
|
visual: {
|
|
18482
18482
|
kind: "split",
|
|
@@ -18499,21 +18499,21 @@ var init_metric_definitions = __esm({
|
|
|
18499
18499
|
kind: "vital",
|
|
18500
18500
|
label: "Thread Depth",
|
|
18501
18501
|
group: "Vital Signs",
|
|
18502
|
-
tagline: "How fragile is
|
|
18503
|
-
how_computed: "
|
|
18502
|
+
tagline: "How fragile is a deal if one champion changes jobs?",
|
|
18503
|
+
how_computed: "We ask what share of open deals have at least two people active in the last 90 days. Contacts on the deal and activity at the same company both count. The formula lines show the threshold.",
|
|
18504
18504
|
formula_lines: [
|
|
18505
18505
|
"score = % open deals with \u22652 active people (90d)",
|
|
18506
18506
|
"people counted via opp contacts + same-org activity",
|
|
18507
18507
|
"threshold configurable (default 2)"
|
|
18508
18508
|
],
|
|
18509
|
-
meaning:
|
|
18510
|
-
expert_read: "Weight by deal size when you triage
|
|
18509
|
+
meaning: 'Thread Depth asks how many people keep each deal warm. One contact is a single point of failure \u2014 if they leave, the deal often dies with them. Like a bridge with one cable. Dollars on thin deals show as "single-threaded."',
|
|
18510
|
+
expert_read: "Weight by deal size when you triage \u2014 one thin mega-deal can outweigh ten small ones. Late-cycle single-threading tends to matter more than early. In enterprise motions, thin threads often lead to slipped quarters: the champion leaves and nobody else is warm enough to carry the deal.",
|
|
18511
18511
|
deepdive: [
|
|
18512
|
-
"
|
|
18513
|
-
'
|
|
18514
|
-
"
|
|
18515
|
-
"
|
|
18516
|
-
"
|
|
18512
|
+
"Green 65+, yellow 40+, red below 40.",
|
|
18513
|
+
'Dollars: sum of amount on single-threaded deals \u2192 "single-threaded".',
|
|
18514
|
+
"Read this last, after Freshness, Flow Rate, Drop Rate, and Signal:Noise.",
|
|
18515
|
+
"Weak score \u2192 play Multi-Thread Your Deals.",
|
|
18516
|
+
"Useful moves: buying-committee map, warm internal referral first, CRM contact roles, mid-stage single-thread alerts, champion job-change signals."
|
|
18517
18517
|
],
|
|
18518
18518
|
visual: {
|
|
18519
18519
|
kind: "bars",
|
package/dist/mcp/server.js
CHANGED
|
@@ -12989,21 +12989,21 @@ var init_metric_definitions = __esm({
|
|
|
12989
12989
|
kind: "vital",
|
|
12990
12990
|
label: "Freshness",
|
|
12991
12991
|
group: "Vital Signs",
|
|
12992
|
-
tagline: "Is the CRM
|
|
12993
|
-
how_computed: "
|
|
12992
|
+
tagline: "Is the CRM talking about live deals \u2014 or a museum of old ones?",
|
|
12993
|
+
how_computed: "We look at how recently people, companies, and deals got a touch. Deals need a fresher pulse than people or companies, and past-due deals count as stale. The formula lines on this card show the exact mix and windows.",
|
|
12994
12994
|
formula_lines: [
|
|
12995
12995
|
"freshness = people%\xD70.35 + orgs%\xD70.30 + opps%\xD70.35",
|
|
12996
12996
|
"people/orgs fresh if activity within 90d",
|
|
12997
12997
|
"opps fresh if activity within 30d AND not past-due"
|
|
12998
12998
|
],
|
|
12999
|
-
meaning:
|
|
13000
|
-
expert_read:
|
|
12999
|
+
meaning: `Freshness asks whether the pipeline number is still true. Quiet deals pad the forecast. Like milk dates on a shelf \u2014 past the date, don't trust the carton. Stale open dollars show as "pipeline at risk."`,
|
|
13000
|
+
expert_read: "Cut by owner and stage first \u2014 reds usually clump, they don't sprinkle. A sudden cliff is often a broken sync or a departed rep, not slow decay. New bulk imports can look stale when they're just new.",
|
|
13001
13001
|
deepdive: [
|
|
13002
|
-
"
|
|
13003
|
-
'
|
|
13004
|
-
"
|
|
13005
|
-
"
|
|
13006
|
-
"
|
|
13002
|
+
"Green 80+, yellow 60+, red below 60. Motion presets can change the windows.",
|
|
13003
|
+
'Dollars: sum of amount on stale open deals \u2192 "pipeline at risk".',
|
|
13004
|
+
"Read this first. If Freshness is red, later vitals are harder to trust.",
|
|
13005
|
+
"Weak score \u2192 play Clean Dead Pipeline.",
|
|
13006
|
+
"Useful moves: stale-deal alert, weekly hygiene scrub, enrichment on quiet records."
|
|
13007
13007
|
],
|
|
13008
13008
|
visual: {
|
|
13009
13009
|
kind: "bars",
|
|
@@ -13027,21 +13027,21 @@ var init_metric_definitions = __esm({
|
|
|
13027
13027
|
kind: "vital",
|
|
13028
13028
|
label: "Flow Rate",
|
|
13029
13029
|
group: "Vital Signs",
|
|
13030
|
-
tagline: "Where
|
|
13031
|
-
how_computed: "
|
|
13030
|
+
tagline: "Where do deals stop moving \u2014 and what's piled up behind that stage?",
|
|
13031
|
+
how_computed: "We start from how old open deals are versus a max window, then shave points for the share that look stuck. A deal is stuck when it goes quiet too long or its close date is already past. The formula lines show the base, the penalty, and the stuck rules.",
|
|
13032
13032
|
formula_lines: [
|
|
13033
13033
|
"base = 100 \xD7 (1 \u2212 avgOpenAge / max_days)",
|
|
13034
13034
|
"score = base \u2212 stuckSharePenalty (\u226420)",
|
|
13035
13035
|
"stuck = no update > stuck_days OR past-due close"
|
|
13036
13036
|
],
|
|
13037
|
-
meaning: '
|
|
13038
|
-
expert_read: "
|
|
13037
|
+
meaning: 'Flow Rate asks whether deals are still advancing or sitting still. Stuck deals pad next quarter on paper. Like traffic behind a closed lane \u2014 the jam is one stage, not the whole highway. Dollars on stuck deals show as "stuck in pipeline."',
|
|
13038
|
+
expert_read: "Find the stage where advancement collapses first \u2014 it's usually one stage, not everywhere. Compare stuck age to this company's own median cycle rather than a generic norm. Stuck deals plus past-due closes are often a forecast-credibility problem before they're a revenue miss.",
|
|
13039
13039
|
deepdive: [
|
|
13040
|
-
"Status uses average open age. Green
|
|
13041
|
-
'
|
|
13042
|
-
"
|
|
13043
|
-
"
|
|
13044
|
-
"
|
|
13040
|
+
"Status uses average open age. Green \u226445 days, yellow \u226490, else red. Defaults: max_days 120, stuck_days 60.",
|
|
13041
|
+
'Dollars: sum of amount on stuck deals \u2192 "stuck in pipeline".',
|
|
13042
|
+
"Read with Drop Rate \u2014 stuck deals and handoff leaks often show up together.",
|
|
13043
|
+
"Weak score \u2192 play Unstick the Pipeline.",
|
|
13044
|
+
"Useful moves: stage-age report, past-due close cleanup, progression plans on stuck deals, forecast hygiene on optimistic close dates."
|
|
13045
13045
|
],
|
|
13046
13046
|
visual: {
|
|
13047
13047
|
kind: "funnel",
|
|
@@ -13067,21 +13067,21 @@ var init_metric_definitions = __esm({
|
|
|
13067
13067
|
kind: "vital",
|
|
13068
13068
|
label: "Drop Rate",
|
|
13069
13069
|
group: "Vital Signs",
|
|
13070
|
-
tagline: "Where does paid demand fall between systems before
|
|
13071
|
-
how_computed: "
|
|
13070
|
+
tagline: "Where does paid demand fall between systems before a rep works it?",
|
|
13071
|
+
how_computed: "We blend two checks: do marketing people also show up in sales CRM, and are open deals still being worked (not abandoned). The formula lines show the weights and the 30-day abandon window.",
|
|
13072
13072
|
formula_lines: [
|
|
13073
13073
|
"score = crossSystemRetention\xD70.6 + oppRetention\xD70.4",
|
|
13074
13074
|
"cross-system = marketing people also in sales CRM",
|
|
13075
13075
|
"abandoned = open opps with no activity in 30d"
|
|
13076
13076
|
],
|
|
13077
|
-
meaning: '
|
|
13078
|
-
expert_read:
|
|
13077
|
+
meaning: 'Drop Rate prices the handoff leak \u2014 money you already spent on leads that never reach a working rep. Like buying groceries and leaving half the bags in the parking lot. The dollar line is "est. lost at handoff."',
|
|
13078
|
+
expert_read: "A useful first cut is by lead source \u2014 the leak usually concentrates in one or two, not everywhere. Routing rules, unassigned territories, dead queues, or a sync gap between marketing and CRM show up more often than lazy reps. The cheapest pipeline you can buy is often the leads you already paid for.",
|
|
13079
13079
|
deepdive: [
|
|
13080
|
-
"
|
|
13081
|
-
'
|
|
13082
|
-
"
|
|
13083
|
-
"
|
|
13084
|
-
"
|
|
13080
|
+
"Green 80+, yellow 60+, red below 60.",
|
|
13081
|
+
'Dollars: dropped \xD7 conversion \xD7 avg deal (fallback: drop% \xD7 open pipeline) \u2192 "est. lost at handoff".',
|
|
13082
|
+
"Read with Flow Rate \u2014 handoff leaks and stuck deals often show up together.",
|
|
13083
|
+
"Weak score \u2192 play Fix the Handoff Gap.",
|
|
13084
|
+
"Useful moves: source-level handoff audit, routing and sync repair, time-to-first-touch SLA, weekly marketing-only-leads report."
|
|
13085
13085
|
],
|
|
13086
13086
|
visual: {
|
|
13087
13087
|
kind: "funnel",
|
|
@@ -13106,21 +13106,21 @@ var init_metric_definitions = __esm({
|
|
|
13106
13106
|
kind: "vital",
|
|
13107
13107
|
label: "Signal:Noise",
|
|
13108
13108
|
group: "Vital Signs",
|
|
13109
|
-
tagline: "How much
|
|
13110
|
-
how_computed: "
|
|
13109
|
+
tagline: "How much effort still aims at accounts that can close \u2014 versus dead ends?",
|
|
13110
|
+
how_computed: "We look at the last 90 days of activity and ask what share is signal \u2014 linked to an open deal, a pipeline person, or a pipeline company. The formula lines show the ratio and what counts as signal.",
|
|
13111
13111
|
formula_lines: [
|
|
13112
13112
|
"score = (signalCount / activityCount) \xD7 100",
|
|
13113
13113
|
"signal = linked to open opp / pipeline person / pipeline org",
|
|
13114
13114
|
"lookback = trailing 90 days"
|
|
13115
13115
|
],
|
|
13116
|
-
meaning:
|
|
13116
|
+
meaning: 'Signal:Noise asks whether activity still points at deals that can close. Noise hours are capacity spent on dead ends. Like a radio stuck between stations \u2014 lots of static, little signal. Those hours show as "misdirected effort."',
|
|
13117
13117
|
expert_read: "A useful cut is by rep and by account status. Persistent noise often means reps keep working dead accounts they already know \u2014 stale targeting or coverage models more than a coaching gap. Also check whether activity is logged against closed or unlinked records; that can be a hygiene artifact pretending to be effort.",
|
|
13118
13118
|
deepdive: [
|
|
13119
|
-
"
|
|
13120
|
-
|
|
13121
|
-
"
|
|
13122
|
-
"
|
|
13123
|
-
"
|
|
13119
|
+
"Green 65+, yellow 40+, red below 40.",
|
|
13120
|
+
'Dollar defaults: 0.25 hours/activity \xD7 $75/hr (config: hours_per_activity, rep_hourly_cost) \u2192 "misdirected effort".',
|
|
13121
|
+
"Read Freshness, Flow Rate, and Drop Rate before you trust this score.",
|
|
13122
|
+
"Weak score \u2192 play Retarget Misdirected Effort.",
|
|
13123
|
+
"Useful moves: refresh account lists, signal-based targeting, stop logging against closed or unlinked records, coverage-model redesign."
|
|
13124
13124
|
],
|
|
13125
13125
|
visual: {
|
|
13126
13126
|
kind: "split",
|
|
@@ -13143,21 +13143,21 @@ var init_metric_definitions = __esm({
|
|
|
13143
13143
|
kind: "vital",
|
|
13144
13144
|
label: "Thread Depth",
|
|
13145
13145
|
group: "Vital Signs",
|
|
13146
|
-
tagline: "How fragile is
|
|
13147
|
-
how_computed: "
|
|
13146
|
+
tagline: "How fragile is a deal if one champion changes jobs?",
|
|
13147
|
+
how_computed: "We ask what share of open deals have at least two people active in the last 90 days. Contacts on the deal and activity at the same company both count. The formula lines show the threshold.",
|
|
13148
13148
|
formula_lines: [
|
|
13149
13149
|
"score = % open deals with \u22652 active people (90d)",
|
|
13150
13150
|
"people counted via opp contacts + same-org activity",
|
|
13151
13151
|
"threshold configurable (default 2)"
|
|
13152
13152
|
],
|
|
13153
|
-
meaning:
|
|
13154
|
-
expert_read: "Weight by deal size when you triage
|
|
13153
|
+
meaning: 'Thread Depth asks how many people keep each deal warm. One contact is a single point of failure \u2014 if they leave, the deal often dies with them. Like a bridge with one cable. Dollars on thin deals show as "single-threaded."',
|
|
13154
|
+
expert_read: "Weight by deal size when you triage \u2014 one thin mega-deal can outweigh ten small ones. Late-cycle single-threading tends to matter more than early. In enterprise motions, thin threads often lead to slipped quarters: the champion leaves and nobody else is warm enough to carry the deal.",
|
|
13155
13155
|
deepdive: [
|
|
13156
|
-
"
|
|
13157
|
-
'
|
|
13158
|
-
"
|
|
13159
|
-
"
|
|
13160
|
-
"
|
|
13156
|
+
"Green 65+, yellow 40+, red below 40.",
|
|
13157
|
+
'Dollars: sum of amount on single-threaded deals \u2192 "single-threaded".',
|
|
13158
|
+
"Read this last, after Freshness, Flow Rate, Drop Rate, and Signal:Noise.",
|
|
13159
|
+
"Weak score \u2192 play Multi-Thread Your Deals.",
|
|
13160
|
+
"Useful moves: buying-committee map, warm internal referral first, CRM contact roles, mid-stage single-thread alerts, champion job-change signals."
|
|
13161
13161
|
],
|
|
13162
13162
|
visual: {
|
|
13163
13163
|
kind: "bars",
|