GET /cc-dashboard/scheduler-metrics) includes an aggregate Online / Self-Booked row (onlineScheduler in ccDashboard.ts), rendered in EmployeeTable.tsx as "Online / Self-Booked" with Close Rate, # Created, and # Confirmed.confirmed / (created inspections + open online quotes), where created = non-cancelled online inspections (scheduledBy: null) in the selected date range, and open quotes = online quotes with no linked inspection that count toward the denominator.createdAt:pending → createdAtrejected → rejectedAtabandoned → abandonedAtdashboard.ts + computeInternalVsOnline.ts), which uses rejectedAt for rejected quotes but does not include abandoned quotes in close-rate math.GET /metrics close-rate quote portion uses createdAt only for pending + rejected open quotes (no abandoned status in that query).dateType=booked (default) uses scheduledTs (fallback datetime); dateType=inspection uses appointment datetime. Quotes in CC metrics comments say attribution stays on createdAt in both modes — but the online-scheduler open-quote branch currently overrides that for rejected/abandoned.createdAt, not abandonedAt, when measuring close rate.buildCompanyTzRanges / TZDayjs (same pattern as main dashboard after ATT-1701). Residual mismatches may still come from which date field is filtered, not only boundary math.draftAbandonmentWorker.ts sets status: 'abandoned' + abandonedAt). CSRs can resume abandoned quotes to pending; abandonedAt may remain set (ATT-1716 Backlog covers durable "started as abandoned" origin reporting — adjacent but separate).Locked
(None yet — June 16 call surfaced direction; validation required before locking.)
Open
pending, rejected, abandoned), or abandoned only while rejected keeps rejectedAt?createdAt falls in range (even if abandonedAt is later), including quotes later revived to pending/accepted that still carry abandonedAt.booked vs inspection) for confirmed/created inspections, or force a single date basis for the entire online close-rate row?InternalVsOnlineSplit.tsx / dashboard.ts) and/or GET /cc-dashboard/metrics top-level close rate?on_hold online quotes? Exclude draft only (current behavior)? Any role for archived?scheduledBy: null, status confirmed), or also accepted online quotes without a booked inspection?Backend (attik-backend)
src/routes/ccDashboard.ts — GET /scheduler-metrics online open-quote query (~lines 1073–1091) and onlineOpenQuoteCount aggregation (Step 5b); computeRates() close-rate math for onlineScheduler.GET /metrics open-quote filter (uses createdAt for pending/rejected); src/routes/dashboard.ts rejected-quote aggregation (rejectedAt range) and src/util/functions/dashboard/computeInternalVsOnline.ts for Booking Channel Split close percentages.quoteSchema.ts — createdType: 'online', status, createdAt, abandonedAt, rejectedAt, _finalInspectionId.src/util/functions/dashboard/companyTzRanges.ts — tzScopedDateFieldOr used for quote date filters.Frontend (attik-frontend)
src/app/admin/client-care-dashboard/_components/EmployeeTable.tsx displays onlineScheduler metrics; likely no UI change unless product adds explanatory copy/tooltips for date basis after logic is locked.src/components/dashboard/InternalVsOnlineSplit/InternalVsOnlineSplit.tsx — only in scope if product decides to align Booking Channel Split (Open #4).Out of scope (unless product expands Open decisions)
createdAt-based; excludes abandoned today).attik-backend/src/routes/ccDashboard.ts, attik-backend/src/util/functions/dashboard/computeInternalVsOnline.tsattik-frontend/src/app/admin/client-care-dashboard/_components/EmployeeTable.tsxPlease authenticate to join the conversation.
Planned
Main App
1 day ago
Linear
Get notified by email when there are changes.
Planned
Main App
1 day ago
Linear
Get notified by email when there are changes.