Where patients are getting stuck, where the funnel is leaking, and what the data actually means once CRM hygiene is accounted for.
NEW_LEAD in the CRM.
Of the 1,143 leads still open, 1,092 are sitting in NEW_LEAD, and not a single one of those has any entry in CaseStageHistory. They were never touched — never qualified, never lost, just sitting. Median age: 20.9 days. 929 have been there >14 days.
PREAUTH_COMPLETE who never had an admission stage logged, 22 are already marked COMPLETED at the pipeline level — they had surgery, got paid out, but the case stage was never advanced. Real post-approval drop-off is closer to ~11%, not 71%.
Counts of leads that ever reached each case stage (via CaseStageHistory.toStage). Drop column = % retention vs the previous step.
"Admitted" and "Discharged" are CRM-recorded values. The actual admission rate is materially higher — see Section 4.
99 leads got KYP'd. Here is where each ended up, and the post-KYP retention.
| Stage reached | Patients | % of KYP'd (99) | Drop from previous step | Verdict |
|---|---|---|---|---|
| KYP done | 99 | 100.0% | — | baseline |
| Hospitals suggested | 98 | 99.0% | −1.0% | healthy |
| Pre-auth raised | 51 | 51.5% | −48.0% | major leak |
| Pre-auth complete | 45 | 45.5% | −11.8% | healthy |
| Admitted (CRM) | 13 | 13.1% | −71.1% | CRM hygiene, not real |
| Admitted (real, est.) | ~35 | ~35.4% | ~−22% | estimated from completions |
| Discharged (CRM) | 13 | 13.1% | 0% | stage not updated post-surgery |
| Current case stage | Pipeline status | Patients | What this means |
|---|---|---|---|
| HOSPITALS_SUGGESTED | SALES (open) | 47 | Got hospital options, no pre-auth raised yet — actively stuck |
| PREAUTH_RAISED | SALES (open) | 6 | Pre-auth filed, awaiting TPA decision |
| PREAUTH_COMPLETE | COMPLETED | 22 | Surgery happened — case stage was never updated past PA approval |
| PREAUTH_COMPLETE | SALES (open) | 5 | PA approved, awaiting surgery / scheduling |
| PREAUTH_COMPLETE | LOST | 5 | Real drop-off after approval — patients who had insurance approval and walked away |
| INITIATED / ADMITTED | — | 4 | Currently in surgery / hospital |
| DISCHARGED / IPD_DONE | — | 9 | Surgery completed, recorded in CRM |
| CASH_* track | — | ~11 | Cash flow patients spread across CASH_IPD_* stages |
Counts cross-referenced from the open-patients query (1,143 still-open snapshot) and the 32-patient post-PA-complete list. Some overlap is possible where stage was advanced but pipeline status not updated.
PREAUTH_COMPLETEOf 45 leads with approved pre-auths, 32 never had a CRM stage advance to INITIATED/ADMITTED. Breakdown of what's actually going on:
| Lead Ref | Patient | Treatment | BD | Status |
|---|---|---|---|---|
| 240074 | Dhananjay D Gaikwad | Circumcision | Divyanshu Sharma | LOST |
| 241594 | Vikash Kumar | Rhinoplasty | Mani Prakash | LOST |
| 241765 | Umesh Verma | Circumcision | Lalit Kumar | LOST |
| 237713 | Ravi Bhartiya | Circumcision | Divyanshu Sharma | LOST |
| 239591 | Vaibhav Karpe | Lipoma | ASHWANI | LOST |
Pulling lostReason for these 5 would help identify whether the loss was patient-side (cold feet, found alternative) or process-side (we dropped follow-up). See Appendix A.
| Lead Ref | Patient | Treatment | BD |
|---|---|---|---|
| 239520 | veer vikram | Circumcision | Arsh Saifi |
| 239974 | Vijay Takawane | Circumcision | Akshat Bajpai |
| 241749 | Kishore | Circumcision | MAYANK |
| 240652 | Mayur Chheda | Circumcision | Lalit Kumar |
| 241329 | Sagar | Lipoma | Sumit Pal |
| Lead Ref | Patient | Treatment | BD | Surgery date |
|---|---|---|---|---|
| 237691 | Kiran | Gynecomastia | Neha Raj | 2026-04-10 |
| 237498 | Priyanka Meher | Lipoma | PRASHANT SINGH | 2026-04-11 |
| 237960 | Girish Laddha | Circumcision | Lalit Kumar | 2026-04-13 |
| 238860 | panchshila lokhande | Rhinoplasty | PRASHANT SINGH | 2026-04-16 |
| 238953 | Vikas Kishan Grover | Circumcision | Arsh Saifi | 2026-04-18 |
| 241191 | Santosh Prakash Kari | Circumcision | Amir Saifi | 2026-04-23 |
| 239179 | prakash kadganchikar | Circumcision | Arsh Saifi | 2026-04-25 |
| 239133 | Shekhar Rawal | Lipoma | Rajat Srivastav | — |
| 240028 | Shiv Malviya | Tummy Tuck | Ayan Siddhiqui | — |
| 241534 | Vinayak Ambadas Gudur | Gynecomastia | Ayan Siddhiqui | — |
| 239802 | Akshay | Lipoma | Rajat Srivastav | — |
| 242277 | Arun Anap | Lipoma | Adarsh Upadhyay | — |
| 238999 | Nitin Shinde | Lipoma | Alakh Narayan Tiwari | — |
| 239840 | Girish Suvarna | Lipoma | Rajat Srivastav | — |
| 237504 | ROSHAN GAWDE | Lipoma | Rajat Srivastav | — |
| 240296 | Gautam S | Lipoma | Sumit Pal | — |
| 238376 | Bharat | Circumcision | Ayan Siddhiqui | — |
| 238319 | Nitin Ghadi | Lipoma | Sumit Pal | — |
| 237348 | Suraj Chame (Mohit Refferal) | Chest wall lump | Rajat Srivastav | — |
| 237701 | vijay | Gynecomastia | Sumit Pal | — |
| 241505 | Nilesh Jadhav | Lipoma | Mani Prakash | — |
| 237592 | Priyam | Gynecomastia | Sumit Pal | — |
These 22 patients all have pipelineStage = COMPLETED but their caseStage is still PREAUTH_COMPLETE. Backfilling the missing stage transitions would correct the funnel.
Per-BD breakdown of April leads: how many were assigned, how many were touched in the CRM at all, how many got KYP'd, and how many got admitted.
| BD | Leads received | Touched | % Touched | KYP done | Admitted | Verdict |
|---|---|---|---|---|---|---|
| Khushi Singh | 270 | 4 | 1.5% | 3 | 0 | very low engagement on huge volume |
| Divyanshu Sharma | 238 | 9 | 3.8% | 9 | 4 | low touch but admission rate good |
| Pankaj Pal | 228 | 2 | 0.9% | 0 | 0 | zero qualified — flag for review |
| NAMAN KATIYAR | 214 | 2 | 0.9% | 2 | 0 | huge volume, near-zero touch |
| Lalit Kumar | 179 | 5 | 2.8% | 5 | 0 | below average |
| Arsh Saifi | 173 | 7 | 4.0% | 7 | 1 | below average |
| Akash Pandey | 167 | 3 | 1.8% | 3 | 0 | low engagement |
| Mani Prakash | 158 | 5 | 3.2% | 5 | 0 | below average |
| MAYANK | 152 | 5 | 3.3% | 5 | 0 | below average |
| ASHWANI | 147 | 9 | 6.1% | 9 | 0 | decent engagement, no admissions |
| Rajat Srivastav | 146 | 10 | 6.8% | 10 | 1 | decent engagement |
| Kaushal Kumar Pandey | 144 | 6 | 4.2% | 5 | 2 | decent |
| Adarsh Upadhyay | 124 | 1 | 0.8% | 1 | 0 | huge volume, basically nothing done |
| Sumit Pal | 117 | 7 | 6.0% | 7 | 0 | decent engagement |
| PRASHANT SINGH | 108 | 3 | 2.8% | 3 | 0 | below average |
| BD | Leads | Touched | % Touched | KYP done | Admitted | Lead → admission rate |
|---|---|---|---|---|---|---|
| Ayan Siddhiqui | 14 | 6 | 42.9% | 6 | 0 | 0% |
| Harsh Kumar | 32 | 9 | 28.1% | 8 | 4 | 12.5% |
| Neha Raj | 11 | 1 | 9.1% | 1 | 0 | 0% |
| Alakh Narayan Tiwari | 50 | 4 | 8.0% | 4 | 0 | 0% |
| Rajat Srivastav | 146 | 10 | 6.8% | 10 | 1 | 0.7% |
| ASHWANI | 147 | 9 | 6.1% | 9 | 0 | 0% |
| Sumit Pal | 117 | 7 | 6.0% | 7 | 0 | 0% |
| Ujjwal Bhardwaj | 19 | 1 | 5.3% | 1 | 0 | 0% |
| Kaushal Kumar Pandey | 144 | 6 | 4.2% | 5 | 2 | 1.4% |
| Amir Saifi | 49 | 2 | 4.1% | 2 | 0 | 0% |
Harsh Kumar is running ~30x the company average lead→admission rate (12.5% vs 0.4%). Worth understanding what he's doing differently and feeding more leads to him.
| BD account | Leads received | Note |
|---|---|---|
| vishal Kumar | 98 | Verify if active employee |
| Neelu Singh | 90 | Verify if active employee |
| Anishika Singh | 73 | Verify if active employee |
| Ankit Yadav | 55 | Verify if active employee |
| Ishant sharma | 46 | Verify if active employee |
| Abhishek Kashyap | 41 | Verify if active employee |
| BD-611 | 41 | Generic ID — likely inactive / placeholder account |
| Ahbab | 20 | Verify if active employee |
| Amit Shukla | 18 | Verify if active employee |
| Avnish Thakur | 8 | Verify if active employee |
490 leads were assigned to BDs who did not record a single CRM action all month. If any of these accounts are inactive, those leads need to be reassigned or the routing logic fixed to skip them. Either way, this many leads vanishing into dormant accounts is a routing-layer bug, not a BD-performance issue.
User.status = 'ACTIVE' wherever leads are auto-assigned. This is a code/config fix, not a behavior fix.
PREAUTH_COMPLETE stage is treated as the end of the journey by the team, but the schema has six stages after it (INITIATED, ADMITTED, DISCHARGED, IPD_DONE, PL_PENDING, OUTSTANDING). Without these, every funnel report past pre-auth will understate reality by 60–80%. Either enforce stage advancement at the UI layer, or auto-advance to DISCHARGED when pipelineStage moves to COMPLETED.
SELECT "leadRef", "patientName", "treatment", "lostReason", "lostAt"
FROM "Lead"
WHERE id IN (
SELECT id FROM "Lead"
WHERE "leadEntryDate" >= '2026-04-01' AND "leadEntryDate" < '2026-05-01'
AND "pipelineStage" = 'LOST'
AND "caseStage" = 'PREAUTH_COMPLETE'
);
WITH ever AS (SELECT DISTINCT "leadId", "toStage" FROM "CaseStageHistory")
SELECT l."leadRef", l."patientName", l."treatment", l."hospitalName",
u.name AS bd, l."followUpDate",
EXTRACT(DAY FROM NOW() - h."changedAt")::int AS days_at_hosp_suggested
FROM "Lead" l
JOIN "User" u ON u.id = l."bdId"
JOIN "CaseStageHistory" h ON h."leadId" = l.id AND h."toStage" = 'HOSPITALS_SUGGESTED'
WHERE l."leadEntryDate" >= '2026-04-01' AND l."leadEntryDate" < '2026-05-01'
AND l."pipelineStage" NOT IN ('COMPLETED', 'LOST')
AND l."caseStage" = 'HOSPITALS_SUGGESTED'
AND NOT EXISTS (SELECT 1 FROM ever WHERE "leadId" = l.id AND "toStage" = 'PREAUTH_RAISED')
ORDER BY days_at_hosp_suggested DESC;
SELECT u.name, u.email, u.role, u."isActive", u."employeeStatus",
COUNT(l.id) AS april_leads
FROM "User" u
LEFT JOIN "Lead" l ON l."bdId" = u.id
AND l."leadEntryDate" >= '2026-04-01' AND l."leadEntryDate" < '2026-05-01'
WHERE u.id IN (
SELECT DISTINCT "bdId" FROM "Lead"
WHERE "leadEntryDate" >= '2026-04-01' AND "leadEntryDate" < '2026-05-01'
)
GROUP BY u.id, u.name, u.email, u.role, u."isActive", u."employeeStatus"
ORDER BY april_leads DESC;
Adjust column names to match the actual User model — isActive/employeeStatus are best guesses.
SELECT DATE_TRUNC('day', "lostAt")::date AS lost_day,
COUNT(*) AS marked_lost,
COUNT(DISTINCT "bdId") AS distinct_bds
FROM "Lead"
WHERE "leadEntryDate" >= '2026-04-01' AND "leadEntryDate" < '2026-05-01'
AND "pipelineStage" = 'LOST' AND "lostAt" IS NOT NULL
GROUP BY 1 ORDER BY 1;
-- Sanity check first; do NOT run blindly
SELECT id, "leadRef", "patientName", "pipelineStage", "caseStage"
FROM "Lead"
WHERE "leadEntryDate" >= '2026-04-01' AND "leadEntryDate" < '2026-05-01'
AND "pipelineStage" = 'COMPLETED'
AND "caseStage" IN ('PREAUTH_COMPLETE', 'HOSPITALS_SUGGESTED', 'PREAUTH_RAISED');
-- Then, after review, advance to DISCHARGED:
-- UPDATE "Lead" SET "caseStage" = 'DISCHARGED'
-- WHERE id IN (...);
-- And insert backfilled CaseStageHistory rows for audit trail.
Lead.leadEntryDate in [2026-04-01, 2026-05-01). This is the canonical "when the lead was received" field per the Prisma schema.CaseStageHistory.toStage with DISTINCT leadId — i.e. how many leads ever passed through that stage, not how many are currently in it.CaseStageHistory. Untouched leads are the ones whose case stage was never advanced from NEW_LEAD.CaseStageHistory.changedAt, falling back to Lead.createdDate when no history exists.