VoiceNotes is an Arduino sketch for the Waveshare ESP32-C6-LCD-0.85 that records meetings and voice memos to microSD and turns them into notes: - Records 16 kHz mono WAV (up to 4 h) from the ES7210 dual mics, with a boosted preamp and soft-limited digital gain - Transcribes via an OpenAI-compatible speech-to-text API in ~10 min parts cut at quiet points, with retries and resume after failures - Summarizes the transcript with Claude into meeting notes (decisions, action items, topics with timestamps), streamed to and from the card - Copies the notes to Nextcloud over WebDAV - Shows recording/processing state on the 0.85" LCD and the LED ring - Works around the board's SD card failing multi-sector reads Credentials live in VoiceNotes/secrets.h, which is git-ignored; see secrets.example.h. Also adds the Microsoft CDM customer service SQL implementation (DDL, sample data, reporting queries and docs). Its README is renamed to CDM_README.md so the repository README stays at the top level. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
378 lines
8.9 KiB
Markdown
378 lines
8.9 KiB
Markdown
# CDM Customer Service - Quick Reference Guide
|
|
|
|
## 🎯 Your Complete Database is Ready!
|
|
|
|
**Server:** localhost:1433
|
|
**Database:** CDM_CustomerService
|
|
**Auth:** SA / Welcome1
|
|
**Tables:** 26
|
|
**Views:** 4
|
|
**Procedures:** 19
|
|
|
|
---
|
|
|
|
## 📊 Viewing Dashboards
|
|
|
|
### Executive Dashboard (All Key Metrics)
|
|
```sql
|
|
SELECT
|
|
activeCases,
|
|
closedCases,
|
|
totalCustomers,
|
|
activeContracts,
|
|
activeContractValue
|
|
FROM cdm.v_ExecutiveDashboard;
|
|
```
|
|
|
|
### Case Health Dashboard
|
|
```sql
|
|
SELECT caseNumber, title, priority, status, statusHealth, daysOpen
|
|
FROM cdm.v_CasePerformanceMetrics
|
|
ORDER BY daysOpen DESC;
|
|
```
|
|
|
|
### Agent Performance
|
|
```sql
|
|
SELECT agentName, totalCasesOwned, closedCases, avgHoursToResolution
|
|
FROM cdm.v_AgentPerformance
|
|
ORDER BY closedCases DESC;
|
|
```
|
|
|
|
### Contract Status
|
|
```sql
|
|
SELECT contractNumber, accountName, utilizationPercent, daysRemaining, utilizationStatus
|
|
FROM cdm.v_ContractUtilizationDashboard
|
|
WHERE utilizationStatus != 'NORMAL';
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 Running Reports
|
|
|
|
### Case Analysis
|
|
```sql
|
|
-- Cases by priority (last 90 days)
|
|
EXEC sp_CaseVolumeByPriority @Days = 90;
|
|
|
|
-- Customer satisfaction (last 6 months)
|
|
EXEC sp_CustomerSatisfactionAnalysis @Months = 6;
|
|
|
|
-- SLA Compliance (real-time)
|
|
EXEC sp_SLAComplianceReport;
|
|
```
|
|
|
|
### Schedule & Workload
|
|
```sql
|
|
-- This week's activities
|
|
EXEC sp_ServiceActivitySchedule @Days = 7;
|
|
|
|
-- Resource utilization (last 30 days)
|
|
EXEC sp_ResourceUtilizationReport @Days = 30;
|
|
|
|
-- Agent workload
|
|
SELECT agentName, activeCases, criticalCases, highPriorityCases
|
|
FROM cdm.v_AgentPerformance;
|
|
```
|
|
|
|
### Business Metrics
|
|
```sql
|
|
-- Monthly summary
|
|
EXEC sp_MonthlyActivityReport @Year = 2026, @Month = 9;
|
|
|
|
-- Customer revenue
|
|
EXEC sp_CustomerRevenueAnalysis;
|
|
|
|
-- KB article usage
|
|
EXEC sp_KnowledgeArticleEffectiveness;
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Common Tasks
|
|
|
|
### Find Cases by Status
|
|
```sql
|
|
-- Active cases
|
|
SELECT caseNumber, title, priority FROM cdm.[Case]
|
|
WHERE status = 'Active' AND isActive = 1
|
|
ORDER BY priority DESC, createdDate;
|
|
|
|
-- Overdue cases (> 30 days)
|
|
EXEC sp_UpdateCaseOverdueStatus @ThresholdDays = 30;
|
|
|
|
-- Cases needing attention
|
|
SELECT * FROM cdm.v_CasePerformanceMetrics
|
|
WHERE statusHealth IN ('Overdue', 'Awaiting Close')
|
|
ORDER BY daysOpen DESC;
|
|
```
|
|
|
|
### Find Contracts
|
|
```sql
|
|
-- Active contracts
|
|
SELECT contractNumber, contractName, accountName, status
|
|
FROM cdm.v_ContractSummary
|
|
WHERE status = 'Active'
|
|
ORDER BY contractValue DESC;
|
|
|
|
-- Expiring soon
|
|
EXEC sp_ContractRenewalAlerts @DaysUntilExpiry = 90;
|
|
|
|
-- Overutilized contracts
|
|
SELECT contractNumber, accountName, utilizationPercent
|
|
FROM cdm.v_ContractUtilizationDashboard
|
|
WHERE utilizationPercent > 80;
|
|
```
|
|
|
|
### Find Data Quality Issues
|
|
```sql
|
|
-- Missing data
|
|
EXEC sp_CasesWithMissingData;
|
|
|
|
-- Orphaned records
|
|
EXEC sp_FindOrphanedRecords;
|
|
|
|
-- Incomplete cases
|
|
SELECT caseNumber, title
|
|
FROM cdm.[Case]
|
|
WHERE accountId IS NULL OR ownerUserId IS NULL;
|
|
```
|
|
|
|
---
|
|
|
|
## 📅 Maintenance Commands
|
|
|
|
### Daily
|
|
```sql
|
|
-- Check SLA status
|
|
EXEC sp_SLAComplianceReport;
|
|
|
|
-- Today's schedule
|
|
EXEC sp_ServiceActivitySchedule @Days = 1;
|
|
```
|
|
|
|
### Weekly
|
|
```sql
|
|
-- Overdue cases
|
|
EXEC sp_UpdateCaseOverdueStatus @ThresholdDays = 30;
|
|
|
|
-- Team performance
|
|
SELECT * FROM cdm.v_AgentPerformance
|
|
ORDER BY activeCases DESC;
|
|
|
|
-- Data quality
|
|
EXEC sp_CasesWithMissingData;
|
|
```
|
|
|
|
### Monthly
|
|
```sql
|
|
-- Month summary
|
|
EXEC sp_MonthlyActivityReport @Year = 2026, @Month = 9;
|
|
|
|
-- Customer satisfaction
|
|
EXEC sp_CustomerSatisfactionAnalysis @Months = 1;
|
|
|
|
-- Revenue analysis
|
|
EXEC sp_CustomerRevenueAnalysis;
|
|
|
|
-- Auto-close old resolved cases
|
|
EXEC sp_CloseResolvedCases @DaysOld = 7;
|
|
```
|
|
|
|
### Quarterly
|
|
```sql
|
|
-- Contract renewals
|
|
EXEC sp_ContractRenewalAlerts @DaysUntilExpiry = 90;
|
|
|
|
-- Resource utilization
|
|
EXEC sp_ResourceUtilizationReport @Days = 90;
|
|
|
|
-- KB effectiveness
|
|
EXEC sp_KnowledgeArticleEffectiveness;
|
|
```
|
|
|
|
### Annually
|
|
```sql
|
|
-- Archive old cases (2+ years)
|
|
EXEC sp_ArchiveOldCases @YearsOld = 2;
|
|
|
|
-- Update contract status
|
|
EXEC sp_DeactivateExpiredContracts;
|
|
EXEC sp_UpdateEntitlementStatus;
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 Table Reference
|
|
|
|
### Create Case
|
|
```sql
|
|
INSERT INTO cdm.[Case]
|
|
(caseNumber, title, accountId, contactId, priority, status, createdDate)
|
|
VALUES ('CSE-2026-0005', 'New Issue Title', @accountId, @contactId, 'High', 'Active', GETUTCDATE());
|
|
```
|
|
|
|
### Create Contract
|
|
```sql
|
|
INSERT INTO cdm.Contract
|
|
(contractNumber, contractName, accountId, startDate, endDate, status, contractValue)
|
|
VALUES ('CNT-2026-001', 'Contract Name', @accountId, '2026-01-01', '2026-12-31', 'Active', 50000.00);
|
|
```
|
|
|
|
### Create Service Activity
|
|
```sql
|
|
INSERT INTO cdm.ServiceActivity
|
|
(subject, serviceId, caseId, ownerUserId, startTime, endTime, duration, status)
|
|
VALUES ('Activity Name', @serviceId, @caseId, @userId, '2026-09-24 10:00:00', '2026-09-24 12:00:00', 120, 'Scheduled');
|
|
```
|
|
|
|
### Update Case
|
|
```sql
|
|
UPDATE cdm.[Case]
|
|
SET status = 'Resolved', resolvedDate = GETUTCDATE()
|
|
WHERE caseId = @caseId;
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 Sample Queries for Analysis
|
|
|
|
### Cases by Account
|
|
```sql
|
|
SELECT
|
|
a.accountName,
|
|
COUNT(c.caseId) AS caseCount,
|
|
SUM(CASE WHEN c.status = 'Active' THEN 1 ELSE 0 END) AS activeCases,
|
|
SUM(CASE WHEN c.status = 'Closed' THEN 1 ELSE 0 END) AS closedCases
|
|
FROM cdm.Account a
|
|
LEFT JOIN cdm.[Case] c ON a.accountId = c.accountId
|
|
WHERE a.isActive = 1
|
|
GROUP BY a.accountId, a.accountName
|
|
ORDER BY activeCases DESC;
|
|
```
|
|
|
|
### Average Case Duration
|
|
```sql
|
|
SELECT
|
|
a.accountName,
|
|
AVG(DATEDIFF(DAY, c.createdDate, c.resolvedDate)) AS avgDaysToResolve,
|
|
COUNT(*) AS totalCasesClosed
|
|
FROM cdm.[Case] c
|
|
JOIN cdm.Account a ON c.accountId = a.accountId
|
|
WHERE c.status = 'Closed' AND c.resolvedDate IS NOT NULL AND c.isActive = 1
|
|
GROUP BY a.accountId, a.accountName
|
|
ORDER BY avgDaysToResolve DESC;
|
|
```
|
|
|
|
### Technician Workload
|
|
```sql
|
|
SELECT
|
|
u.firstName + ' ' + u.lastName AS technician,
|
|
COUNT(c.caseId) AS casesAssigned,
|
|
COUNT(CASE WHEN c.status = 'Active' THEN 1 END) AS activeCases,
|
|
COUNT(CASE WHEN c.status = 'Closed' THEN 1 END) AS closedCases,
|
|
ROUND(AVG(DATEDIFF(HOUR, c.createdDate, ISNULL(c.resolvedDate, GETUTCDATE()))), 2) AS avgHours
|
|
FROM cdm.[User] u
|
|
LEFT JOIN cdm.[Case] c ON u.userId = c.ownerUserId
|
|
WHERE u.isActive = 1 AND c.isActive = 1
|
|
GROUP BY u.userId, u.firstName, u.lastName
|
|
ORDER BY activeCases DESC;
|
|
```
|
|
|
|
### Contract Value by Account
|
|
```sql
|
|
SELECT
|
|
a.accountName,
|
|
COUNT(c.contractId) AS contractCount,
|
|
SUM(c.contractValue) AS totalValue,
|
|
AVG(c.contractValue) AS avgValue,
|
|
SUM(CASE WHEN c.status = 'Active' THEN c.contractValue ELSE 0 END) AS activeValue
|
|
FROM cdm.Account a
|
|
LEFT JOIN cdm.Contract c ON a.accountId = c.accountId
|
|
WHERE a.accountType = 'Customer' AND a.isActive = 1
|
|
GROUP BY a.accountId, a.accountName
|
|
ORDER BY totalValue DESC;
|
|
```
|
|
|
|
### Service Activity by Technician
|
|
```sql
|
|
SELECT
|
|
u.firstName + ' ' + u.lastName AS technician,
|
|
s.serviceName,
|
|
COUNT(sa.activityId) AS activityCount,
|
|
SUM(sa.duration) AS totalMinutes,
|
|
ROUND(SUM(sa.duration) / 60.0, 1) AS totalHours,
|
|
COUNT(CASE WHEN sa.status = 'Completed' THEN 1 END) AS completed
|
|
FROM cdm.ServiceActivity sa
|
|
JOIN cdm.[User] u ON sa.ownerUserId = u.userId
|
|
JOIN cdm.Service s ON sa.serviceId = s.serviceId
|
|
WHERE sa.isActive = 1 AND sa.startTime >= DATEADD(MONTH, -1, GETUTCDATE())
|
|
GROUP BY u.userId, u.firstName, u.lastName, s.serviceId, s.serviceName
|
|
ORDER BY totalMinutes DESC;
|
|
```
|
|
|
|
---
|
|
|
|
## 🎓 Learning Path
|
|
|
|
1. **Start:** Review current state with `v_ExecutiveDashboard`
|
|
2. **Explore:** Check `v_CasePerformanceMetrics` for details
|
|
3. **Analyze:** Run `sp_CaseVolumeByPriority` and `sp_SLAComplianceReport`
|
|
4. **Plan:** Use `sp_ServiceActivitySchedule` for scheduling
|
|
5. **Monitor:** Run reports from the procedures list regularly
|
|
|
|
---
|
|
|
|
## 💡 Pro Tips
|
|
|
|
### Create a Dashboard in Excel
|
|
1. Connect to CDM_CustomerService database
|
|
2. Create queries pulling from views
|
|
3. Set up auto-refresh
|
|
4. Use Excel charts for visualization
|
|
|
|
### Create Power BI Reports
|
|
1. Import data from all 4 views
|
|
2. Import result sets from procedures
|
|
3. Create visual dashboards
|
|
4. Set up data refresh schedule
|
|
|
|
### Set Up Alerts
|
|
```sql
|
|
-- Create a job to auto-close resolved cases (weekly)
|
|
EXEC sp_CloseResolvedCases @DaysOld = 7;
|
|
|
|
-- Monitor overdue cases (daily)
|
|
EXEC sp_UpdateCaseOverdueStatus @ThresholdDays = 30;
|
|
|
|
-- Check contract renewals (weekly)
|
|
EXEC sp_ContractRenewalAlerts @DaysUntilExpiry = 30;
|
|
```
|
|
|
|
---
|
|
|
|
## 📞 Quick Links
|
|
|
|
- **Full Documentation:** CDM_Implementation_Guide.md
|
|
- **Reporting Details:** REPORTING_PROCEDURES_SUMMARY.md
|
|
- **Database Setup:** CDM_QUICKSTART.md
|
|
- **Sample Data:** Already loaded in tables
|
|
- **View Definitions:** Use `sp_helptext 'viewName'`
|
|
- **Procedure Help:** Use `sp_helptext 'sp_ProcedureName'`
|
|
|
|
---
|
|
|
|
## 🚀 Next Steps
|
|
|
|
1. ✅ **Database Created** - CDM_CustomerService ready
|
|
2. ✅ **Tables Created** - 26 tables with sample data
|
|
3. ✅ **Views Added** - 4 analytical views
|
|
4. ✅ **Procedures Added** - 19 reporting/admin procedures
|
|
5. 📋 **Now:** Start running queries and building reports!
|
|
|
|
---
|
|
|
|
**Your database is production-ready. Start analyzing your data!**
|
|
|
|
Last Updated: 2026-09-23
|
|
|