Промт по созданию отчета конверсий на активных звонках
ты архитектор программного обеспечения и программист нужно сделать аналитику по конверсии по холодным звонкам в CRM Voronka (измененный форк Yetiforce CRM), сейчас есть интеграция телефонии и CRM и все звонки регистрируются, входящие звонки создают сделки автоматически сами, а исходящие звонки не создают сделки их создают менеджеры по продажам когда в разговоре получают информацию об интересе к продуктам, нужно чтобы была таблица месяца с 28-31 по столбцам номера дня и показатели по строкам нужно выводить результаты отработки исходящих и входящих звонков при этом разделять по сотрудникам по отделам по воронкам и смотреть как итоговые результаты так и в разрезах сотрудников и воронок и источников, к источникам активных продаж относим исходящие звонки больше чем 15 секунд (или 30 секунд это настройка) холодные звонки без воронки - по лидам т.е номера звонящего в контрагентах нет, повторные звонки по клиентам (сделки нет, это реанимация базы) и теплые звонки по сделкм (номер на клиенте, у клиента в момент звонка есть сделка и звонок привязывается и к клиенту и к сделке) при этом есть отдельная воронка продаж по холодным (ни разу еще не продали услуги сделка на то чтобы впервые продать) и воронка по теплым клиентам (ранее уже продавали это реанимация базы или повторные регулярные продажи) и может быть воронка входящих обращений (когда клиенты сами звонят с интересомм и им не надо продавать на исходящих) , нужно считать сейчас количество звонков и количество созданных сделок (и конверсию между ними в %) и количество и сумму успешно завершенных сделок (и % конверсии между созданными сделками и завершенными сдеелками) в каждом дней по дате создания или завершения сделок и дате совершения звонков. Пользователю-руководителю важно видеть интенсивность работы менеджеров и их эффективность как они конвертируют. еще есть в лидах источник базы (какой сектор берется в работу) по ним тоже надо срез делать потому что одна база будет успешной а другая нулевой (нецелевая) учти этот срез данных. Сейчас есть модуль аналитики и в нем есть отчет по конверсии но он работает как общий итоговый и использует накопление данных чтобы в момент формировния отчета не сканировать все записи за весь год а пересчитывать записи в момент действий (каждого действия заапускается рабочий процесс) а при выводе отчета просто берутся нужные итогвые данные по разрезам уже собранные в месяца и разрезы и как нужно группируются, подумай доработать этот отчет или создать новый, разархивируй файлы каждый в свою папку это модуль там файлы могут называются одинаково но они разные, проверь у себя в кеше по этим названиям если есть сохраненное - удали не используй данные из кэша используй эти файлы как источник анализа, спланируй вид отчета фильтры и группировки, продумай архитектуру с учетом текущего контекста и твоих знаний о структуре Yetiforce CRM, разработай нужный код для модуля, выдай код в виде файлов или замен функций, вот база данных CREATE TABLE `voronka_analytics_conversionsyear` (
`id` int(21) NOT NULL,
`dateyear` int(11) NOT NULL,
`datemonth` int(11) NOT NULL,
`category` varchar(254) DEFAULT NULL,
`locations` int(11) NOT NULL DEFAULT 0,
`value` decimal(55,3) DEFAULT 0.000,
`units` varchar(50) DEFAULT NULL,
`amount` decimal(55,3) DEFAULT 0.000
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_uca1400_ai_ci COMMENT='агрегация данных для отчета ДДС по месяцам';
--
-- Дамп данных таблицы `voronka_analytics_conversionsyear`
--
INSERT INTO `voronka_analytics_conversionsyear` (`id`, `dateyear`, `datemonth`, `category`, `locations`, `value`, `units`, `amount`) VALUES
(1, 2026, 2, 'ssalesprocesses', 32263, '206.000', 'int', '0.000'),
(2, 2026, 2, 'ssalesprocesses', 32263, '206.000', 'int', '0.000'),
(3, 2026, 2, 'ssalesprocesses', -1, '206.000', 'int', '0.000'),
(4, 2026, 2, 'ssalesprocesses', -1, '206.000', 'int', '0.000'),
(5, 2026, 2, 'vbossalespersent', 32263, '0.485', 'pers', '0.000'),
(6, 2026, 2, 'vbossalespersent', 32263, '0.485', 'pers', '0.000'),
(7, 2026, 2, 'vbossalespersent', -1, '0.485', 'pers', '0.000'),
(8, 2026, 2, 'vbookingstart', 32263, '1.000', 'int', '0.000'),
(9, 2026, 2, 'vbookingstart', -1, '1.000', 'int', '0.000'),
(10, 2026, 2, 'vbooking', 32263, '1.000', 'int', '0.000'),
(11, 2026, 2, 'vbooking', 32263, '1.000', 'int', '0.000'),
(12, 2026, 2, 'vbookingcancel', 32263, '0.000', 'int', '0.000'),
(13, 2026, 2, 'vbookingopen', 32263, '1.000', 'int', '0.000'),
(14, 2026, 2, 'vbookingprepay', 32263, '1.000', 'int', '0.000'),
(15, 2026, 2, 'vbookingprepay', 32263, '1.000', 'int', '0.000'),
(16, 2026, 2, 'vbookingsuccess', 32263, '0.000', 'int', '0.000'),
(17, 2026, 2, 'vbooking', -1, '1.000', 'int', '0.000'),
(18, 2026, 2, 'vbooking', -1, '1.000', 'int', '0.000'),
(19, 2026, 2, 'vbookingcancel', -1, '0.000', 'int', '0.000'),
(20, 2026, 2, 'vbookingprepay', -1, '1.000', 'int', '0.000'),
(21, 2026, 2, 'vbookingsuccess', -1, '0.000', 'int', '0.000'),
(22, 2026, 2, 'vbookingopen', -1, '1.000', 'int', '0.000'),
(23, 2026, 2, 'vbookingsuccesspersent', 32263, '0.000', 'pers', '0.000'),
(24, 2026, 2, 'vbookingsuccesspersent', -1, '0.000', 'pers', '0.000'),
(25, 2026, 3, 'ssalesprocesses', 213261, '14.000', 'int', '0.000'),
(26, 2026, 3, 'ssalesprocesses', 213261, '14.000', 'int', '0.000'),
(27, 2026, 3, 'ssalesprocesses', -1, '36.000', 'int', '0.000'),
(28, 2026, 3, 'ssalesprocesses', 32263, '21.000', 'int', '0.000'),
(29, 2026, 3, 'ssalesprocesses', 0, '1.000', 'int', '0.000'),
(30, 2026, 3, 'ssalesprocesses', 0, '1.000', 'int', '0.000'),
(31, 2026, 3, 'vbossalespersent', 213261, '0.000', 'pers', '0.000'),
(32, 2026, 3, 'vbossalespersent', -1, '0.000', 'pers', '0.000'),
(33, 2026, 3, 'vbossalespersent', 32263, '0.000', 'pers', '0.000'),
(34, 2026, 3, 'vbossalespersent', 0, '0.000', 'pers', '0.000');
CREATE TABLE `voronka_menu_analytics` (
`id` int(10) UNSIGNED NOT NULL,
`role` int(10) DEFAULT NULL,
`parentid` int(10) DEFAULT 0,
`type` tinyint(1) DEFAULT NULL,
`sequence` int(3) DEFAULT NULL,
`module` smallint(5) DEFAULT NULL,
`label` varchar(100) DEFAULT NULL,
`newwindow` tinyint(1) DEFAULT 0,
`dataurl` text DEFAULT NULL,
`showicon` tinyint(1) DEFAULT 0,
`icon` varchar(255) DEFAULT NULL,
`sizeicon` varchar(255) DEFAULT NULL,
`hotkey` varchar(30) DEFAULT NULL,
`filters` varchar(255) DEFAULT NULL,
`ownergroups` text DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_uca1400_ai_ci;
--
-- Дамп данных таблицы `voronka_menu_analytics`
--
INSERT INTO `voronka_menu_analytics` (`id`, `role`, `parentid`, `type`, `sequence`, `module`, `label`, `newwindow`, `dataurl`, `showicon`, `icon`, `sizeicon`, `hotkey`, `filters`, `ownergroups`) VALUES
(1, NULL, 0, NULL, 5, NULL, 'MEN_MARKETING', 0, NULL, 0, 'fal fa-megaphone', NULL, NULL, NULL, NULL),
(2, NULL, 0, NULL, 2, NULL, 'MEN_SALES', 0, NULL, 0, 'fal fa-funnel-dollar', NULL, NULL, NULL, NULL),
(3, NULL, 0, NULL, 3, NULL, 'MEN_STOCK', 0, NULL, 0, 'fal fa-truck-loading', NULL, NULL, NULL, NULL),
(4, NULL, 0, NULL, 1, NULL, 'MEN_FINANCE', 0, NULL, 0, 'fal fa-function', NULL, NULL, NULL, NULL),
(5, NULL, 0, NULL, 4, NULL, 'MEN_STAFF', 0, NULL, 0, 'fal fa-walking', NULL, NULL, NULL, NULL),
(6, NULL, 4, NULL, 1, NULL, 'Dds_day', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(7, NULL, 4, NULL, 2, NULL, 'Dds_year', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(8, NULL, 4, NULL, 4, NULL, 'Revenue_month', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(9, NULL, 4, NULL, 5, NULL, 'Revenue_year', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(10, NULL, 4, NULL, 3, NULL, 'Dds_month', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(11, NULL, 1, NULL, 1, NULL, 'Sources_channel_leads', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(12, NULL, 3, NULL, 1, NULL, 'ProductHystory', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(13, NULL, 2, NULL, 3, NULL, 'Bron_prepayment', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(14, NULL, 2, NULL, 1, NULL, 'SaleDetailInventory', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(15, NULL, 2, NULL, 3, NULL, 'Conversions_year', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(16, NULL, 4, NULL, 6, NULL, 'Prepayments_balance', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(17, NULL, 1, NULL, 2, NULL, 'Frequencyofvisits2', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(18, NULL, 1, NULL, 3, NULL, 'Frequencyofvisits1', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(19, NULL, 1, NULL, 4, NULL, 'Frequencyofvisits0', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(20, NULL, 2, NULL, 4, NULL, 'Conversions_weeks', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(21, NULL, 2, NULL, 6, NULL, 'Product_revenue', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(22, NULL, 4, NULL, 7, NULL, 'Balance', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(23, NULL, 5, NULL, 1, NULL, 'Planfactmanager', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(24, NULL, 3, NULL, 2, NULL, 'ProductInventory', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL),
(25, NULL, 3, NULL, 3, NULL, 'ProductOborot', 0, NULL, 0, NULL, NULL, NULL, NULL, NULL);