Мониторинг качества
Насколько ровно отдел отрабатывает возражения, соблюдает процесс и представляет компанию — по всем звонкам, а не по десятку прослушанных выборочно.
CRM в актуальном состоянии — без лишней работы
При реальном потоке звонков поддерживать CRM в порядке — заведомо проигранная битва. Менеджер кладёт трубку, и у него есть честный выбор: аккуратно заполнить карточку или взять следующий звонок. Следующий звонок выигрывает почти всегда.
Карточка устаревает. Договорённости не зафиксированы. Про обещание перезвонить забыли. А руководитель остаётся без единственного, ради чего CRM и заводили: без ясной картины по каждому клиенту.
Сигналы Продаж заполняют карточку за менеджера. После звонка система записывает, о чём говорили, фиксирует согласованный следующий шаг и ставит задачу — сразу в вашей CRM.
В работе менеджеров при этом не меняется ничего, и ничто больше не держится на памяти и дисциплине. Карточка остаётся полной, потому что больше никому не нужно помнить о её заполнении.
Ручное заполнение CRM не выглядит дорого: что такое потратить пару минут после звонка, чтобы заполнить данные. Но если сложить его по отделу за год, получается вполне реальная сумма, потраченная на ввод данных вместо продаж.
countryData = FileAttachment("/data/salary-by-country.csv").csv({ typed: true })
fmtMoney = (value, row) =>
new Intl.NumberFormat(row.locale, {maximumFractionDigits: 0}).format(Math.round(value)) + " " + row.sym
renderResult = (rows) => html`<div class="calc-result">
${rows.map(r => html`<div class="calc-result-row ${r.total ? 'calc-result-total' : ''}">
<span>${r.label}</span><span>${r.value}</span>
</div>`)}
</div>`
// Persist a value to a cookie shared across the site (1-year expiry).
// Used to carry calculator inputs (country, reps, calls/day) into the contact form.
setSSCookie = (name, value) => {
document.cookie = "salessignals-" + name + "=" + encodeURIComponent(value) +
";path=/;max-age=" + (60*60*24*365) + ";SameSite=Lax";
}viewof netSalary = Inputs.number({label: "Зарплата менеджера на руки, ₽/мес", value: 90000, min: 0, step: 1000})
viewof isMsp = Inputs.toggle({label: "Компания в реестре МСП", value: true})
viewof reps = Inputs.number({label: "Менеджеров в отделе", value: 5, min: 1, step: 1})
viewof callsPerDay = Inputs.number({label: "Звонков на менеджера в день", value: 20, min: 1, step: 1})
viewof minutesPerUpdate = Inputs.range([0.5, 5], {label: "Минут на заполнение карточки", value: 2, step: 0.5})
viewof workingDays = Inputs.number({label: "Рабочих дней в году", value: 225, min: 1, step: 5})mrotThreshold = 40639.5 // 1,5 МРОТ — месячный порог льготной ставки МСП
contribCap = 2979000 // предельный годовой доход для единого тарифа
rateBase = 0.30 // взносы до порога
rateReduced = 0.15 // взносы сверх порога, только для МСП
rateOverCap = 0.151 // взносы сверх предельного годового дохода
rateInjury = 0.002 // травматизм, I класс проф. риска
ndflBand1 = 2400000 // граница ставки НДФЛ 13% / 15% (годовой доход)
ndflNetAt1 = ndflBand1 * 0.87annualContributions = {
let cumulative = 0;
let total = 0;
for (let m = 0; m < 12; m++) {
const capRemaining = Math.max(0, contribCap - cumulative);
const underCap = Math.min(grossMonthly, capRemaining);
const overCap = grossMonthly - underCap;
total += isMsp
? Math.min(underCap, mrotThreshold) * rateBase
+ Math.max(0, underCap - mrotThreshold) * rateReduced
: underCap * rateBase;
total += overCap * rateOverCap;
total += grossMonthly * rateInjury;
cumulative += grossMonthly;
}
return total;
}annualCost = annualGross + annualContributions
loadedHourly = annualCost / (workingDays * 8)
hoursPerRep = callsPerDay * minutesPerUpdate * workingDays / 60
costPerRep = hoursPerRep * loadedHourly
teamCost = costPerRep * reps
renderResult([
{label: "Обходится компании в месяц", value: fmtRub(annualCost / 12, row)},
{label: "Часов на менеджера в год", value: Math.round(hoursPerRep) + " ч"},
{label: "Стоимость на менеджера в год", value: fmtRub(costPerRep, row)},
{label: "На отдел из " + reps + " чел., в год", value: fmtRub(teamCost, row), total: true}
])Расчёт по ставкам 2026 года. Из суммы на руки восстанавливается оклад с учётом НДФЛ (13% и 15% с дохода свыше 2,4 млн ₽ в год), сверху начисляются страховые взносы: для компаний из реестра МСП — 30% на выплату в пределах 1,5 МРОТ и 15% на превышение, плюс 0,2% на травматизм. Цифры приблизительные, подставьте свои.
Сигналы Продаж делают эту работу автоматически и возвращают эти часы менеджерам — для тех задач, на которые вы их нанимали.
CRM отражает то, что было на самом деле, а не то, что менеджер записал на скорую руку. Следующие шаги зафиксированы, и по ним есть задачи. А время, которое отдел тратил на ввод данных, возвращается в продажи.
Понятнее всего Сигналы Продаж объясняют себя на реальных разговорах вашего отдела. Мы подключаем систему к вашей текущей телефонии — устанавливатьничего не нужно, для менеджеров ничего не меняется.