Add VoiceNotes firmware and CDM customer service SQL project

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>
This commit is contained in:
Ravi Reddy
2026-10-03 22:22:10 +05:30
co-authored by Claude Opus 5.5
parent ef38a502d8
commit 3b371cdb28
24 changed files with 8700 additions and 0 deletions
+895
View File
@@ -0,0 +1,895 @@
-- Microsoft Common Data Model - Customer Service Application Model
-- SQL Server DDL Implementation - FIXED VERSION
-- Version: 1.0
-- Date: 2026-09-23
-- ============================================================================
-- DATABASE CREATION
-- ============================================================================
-- Create Database
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'CDM_CustomerService')
BEGIN
CREATE DATABASE CDM_CustomerService;
PRINT 'Database CDM_CustomerService created.';
END
ELSE
BEGIN
PRINT 'Database CDM_CustomerService already exists.';
END
GO
USE CDM_CustomerService;
GO
-- Create Schema for CDM
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'cdm')
BEGIN
EXEC sp_executesql N'CREATE SCHEMA cdm';
PRINT 'Schema cdm created.';
END
GO
-- ============================================================================
-- FOUNDATION TABLES
-- ============================================================================
-- 1. User Table - Represents system users with access to the CRM
CREATE TABLE cdm.[User] (
userId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
userName NVARCHAR(200) NOT NULL UNIQUE,
firstName NVARCHAR(100) NOT NULL,
lastName NVARCHAR(100) NOT NULL,
email NVARCHAR(200) NOT NULL UNIQUE,
phone NVARCHAR(20),
mobilePhone NVARCHAR(20),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER
);
PRINT 'Table cdm.User created.';
GO
-- 2. Site Table - Represents business locations/branches
CREATE TABLE cdm.Site (
siteId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
siteName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
address NVARCHAR(500),
city NVARCHAR(100),
stateProvince NVARCHAR(100),
postalCode NVARCHAR(20),
country NVARCHAR(100),
phone NVARCHAR(20),
email NVARCHAR(200),
isHeadquarters BIT DEFAULT 0,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Site created.';
GO
-- 3. Account Table - Represents customer organizations
CREATE TABLE cdm.Account (
accountId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
accountName NVARCHAR(200) NOT NULL,
accountNumber NVARCHAR(50) UNIQUE,
description NVARCHAR(2000),
email NVARCHAR(200),
phone NVARCHAR(20),
faxPhone NVARCHAR(20),
websiteUrl NVARCHAR(500),
parentAccountId UNIQUEIDENTIFIER,
ownerUserId UNIQUEIDENTIFIER,
siteId UNIQUEIDENTIFIER,
accountType NVARCHAR(50),
industry NVARCHAR(100),
numberOfEmployees INT,
revenue DECIMAL(18,2),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (parentAccountId) REFERENCES cdm.Account(accountId),
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (siteId) REFERENCES cdm.Site(siteId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Account created.';
GO
-- 4. Contact Table - Represents individual persons
CREATE TABLE cdm.Contact (
contactId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
firstName NVARCHAR(100) NOT NULL,
lastName NVARCHAR(100) NOT NULL,
email NVARCHAR(200),
phone NVARCHAR(20),
mobilePhone NVARCHAR(20),
accountId UNIQUEIDENTIFIER,
ownerUserId UNIQUEIDENTIFIER,
jobTitle NVARCHAR(100),
department NVARCHAR(100),
address NVARCHAR(500),
city NVARCHAR(100),
stateProvince NVARCHAR(100),
postalCode NVARCHAR(20),
country NVARCHAR(100),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (accountId) REFERENCES cdm.Account(accountId),
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Contact created.';
GO
-- ============================================================================
-- SERVICE CONFIGURATION TABLES
-- ============================================================================
CREATE TABLE cdm.Service (
serviceId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
serviceName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Service created.';
GO
CREATE TABLE cdm.Resource (
resourceId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
resourceName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
resourceType NVARCHAR(50) NOT NULL,
userId UNIQUEIDENTIFIER,
siteId UNIQUEIDENTIFIER,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (userId) REFERENCES cdm.[User](userId),
FOREIGN KEY (siteId) REFERENCES cdm.Site(siteId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Resource created.';
GO
CREATE TABLE cdm.FacilityEquipment (
equipmentId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
equipmentName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
resourceId UNIQUEIDENTIFIER NOT NULL UNIQUE,
location NVARCHAR(200),
capacity INT,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (resourceId) REFERENCES cdm.Resource(resourceId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.FacilityEquipment created.';
GO
CREATE TABLE cdm.SchedulingGroup (
groupId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
groupName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
resourceId UNIQUEIDENTIFIER,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (resourceId) REFERENCES cdm.Resource(resourceId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.SchedulingGroup created.';
GO
CREATE TABLE cdm.ResourceSpecification (
specificationId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
specificationName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
serviceId UNIQUEIDENTIFIER,
minRequiredCount INT DEFAULT 1,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (serviceId) REFERENCES cdm.Service(serviceId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ResourceSpecification created.';
GO
-- ============================================================================
-- CONTRACT TABLES
-- ============================================================================
CREATE TABLE cdm.Contract (
contractId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
contractNumber NVARCHAR(100) NOT NULL UNIQUE,
contractName NVARCHAR(200) NOT NULL,
accountId UNIQUEIDENTIFIER NOT NULL,
ownerUserId UNIQUEIDENTIFIER,
startDate DATE NOT NULL,
endDate DATE NOT NULL,
status NVARCHAR(50) NOT NULL DEFAULT 'Draft',
contractValue DECIMAL(18,2),
description NVARCHAR(2000),
contractType NVARCHAR(50),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (accountId) REFERENCES cdm.Account(accountId),
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Contract created.';
GO
CREATE TABLE cdm.ContractLine (
contractLineId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
contractId UNIQUEIDENTIFIER NOT NULL,
lineNumber INT NOT NULL,
serviceId UNIQUEIDENTIFIER NOT NULL,
description NVARCHAR(2000),
quantityIncluded INT,
quantityUsed INT DEFAULT 0,
price DECIMAL(18,2),
discount DECIMAL(18,2),
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
UNIQUE (contractId, lineNumber),
FOREIGN KEY (contractId) REFERENCES cdm.Contract(contractId) ON DELETE CASCADE,
FOREIGN KEY (serviceId) REFERENCES cdm.Service(serviceId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ContractLine created.';
GO
CREATE TABLE cdm.ServiceContractContact (
serviceContractContactId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
contractId UNIQUEIDENTIFIER NOT NULL,
contactId UNIQUEIDENTIFIER NOT NULL,
role NVARCHAR(100),
isPrimary BIT DEFAULT 0,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
UNIQUE (contractId, contactId),
FOREIGN KEY (contractId) REFERENCES cdm.Contract(contractId) ON DELETE CASCADE,
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ServiceContractContact created.';
GO
-- ============================================================================
-- ENTITLEMENT TABLES
-- ============================================================================
CREATE TABLE cdm.Entitlement (
entitlementId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
entitlementName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
accountId UNIQUEIDENTIFIER NOT NULL,
startDate DATE NOT NULL,
endDate DATE,
type NVARCHAR(50) NOT NULL,
duration INT,
unitType NVARCHAR(50),
unitCount INT,
status NVARCHAR(50) NOT NULL DEFAULT 'Active',
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (accountId) REFERENCES cdm.Account(accountId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Entitlement created.';
GO
CREATE TABLE cdm.EntitlementContact (
entitlementContactId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
entitlementId UNIQUEIDENTIFIER NOT NULL,
contactId UNIQUEIDENTIFIER NOT NULL,
isPrimary BIT DEFAULT 0,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
UNIQUE (entitlementId, contactId),
FOREIGN KEY (entitlementId) REFERENCES cdm.Entitlement(entitlementId) ON DELETE CASCADE,
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.EntitlementContact created.';
GO
CREATE TABLE cdm.EntitlementProduct (
entitlementProductId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
entitlementId UNIQUEIDENTIFIER NOT NULL,
serviceId UNIQUEIDENTIFIER NOT NULL,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
UNIQUE (entitlementId, serviceId),
FOREIGN KEY (entitlementId) REFERENCES cdm.Entitlement(entitlementId) ON DELETE CASCADE,
FOREIGN KEY (serviceId) REFERENCES cdm.Service(serviceId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.EntitlementProduct created.';
GO
-- ============================================================================
-- CASE/INCIDENT TABLES
-- ============================================================================
CREATE TABLE cdm.[Case] (
caseId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
caseNumber NVARCHAR(50) NOT NULL UNIQUE,
title NVARCHAR(200) NOT NULL,
description NVARCHAR(MAX),
priority NVARCHAR(50) NOT NULL DEFAULT 'Medium',
severity NVARCHAR(50),
status NVARCHAR(50) NOT NULL DEFAULT 'Active',
accountId UNIQUEIDENTIFIER NOT NULL,
contactId UNIQUEIDENTIFIER,
ownerUserId UNIQUEIDENTIFIER,
contractId UNIQUEIDENTIFIER,
entitlementId UNIQUEIDENTIFIER,
createdDate DATETIME2(7) DEFAULT GETUTCDATE(),
resolvedDate DATETIME2(7),
closedDate DATETIME2(7),
parentCaseId UNIQUEIDENTIFIER,
emailAddress NVARCHAR(200),
resolutionNotes NVARCHAR(MAX),
billingStatus NVARCHAR(50),
actualServiceDuration INT,
estimatedServiceDuration INT,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (accountId) REFERENCES cdm.Account(accountId),
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (contractId) REFERENCES cdm.Contract(contractId),
FOREIGN KEY (entitlementId) REFERENCES cdm.Entitlement(entitlementId),
FOREIGN KEY (parentCaseId) REFERENCES cdm.[Case](caseId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Case created.';
GO
CREATE TABLE cdm.CaseResolution (
resolutionId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
caseId UNIQUEIDENTIFIER NOT NULL,
description NVARCHAR(MAX),
resolutionType NVARCHAR(100),
resolutionStatus NVARCHAR(50),
billingStatus NVARCHAR(50),
actualServiceDuration INT,
totalCostAmount DECIMAL(18,2),
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId) ON DELETE CASCADE,
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.CaseResolution created.';
GO
CREATE TABLE cdm.ChildIncidentCount (
countId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
parentCaseId UNIQUEIDENTIFIER NOT NULL,
childIncidentCount INT DEFAULT 0,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
modifiedOn DATETIME2(7),
UNIQUE (parentCaseId),
FOREIGN KEY (parentCaseId) REFERENCES cdm.[Case](caseId) ON DELETE CASCADE
);
PRINT 'Table cdm.ChildIncidentCount created.';
GO
-- ============================================================================
-- SERVICE ACTIVITY TABLES
-- ============================================================================
CREATE TABLE cdm.ServiceActivity (
activityId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
subject NVARCHAR(200) NOT NULL,
description NVARCHAR(MAX),
serviceId UNIQUEIDENTIFIER NOT NULL,
caseId UNIQUEIDENTIFIER,
contactId UNIQUEIDENTIFIER,
ownerUserId UNIQUEIDENTIFIER,
startTime DATETIME2(7) NOT NULL,
endTime DATETIME2(7) NOT NULL,
duration INT,
location NVARCHAR(200),
status NVARCHAR(50) NOT NULL DEFAULT 'Scheduled',
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (serviceId) REFERENCES cdm.Service(serviceId),
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId),
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ServiceActivity created.';
GO
CREATE TABLE cdm.ActivityParty (
partyId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
activityId UNIQUEIDENTIFIER NOT NULL,
partyType NVARCHAR(50) NOT NULL,
userId UNIQUEIDENTIFIER,
contactId UNIQUEIDENTIFIER,
email NVARCHAR(200),
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
FOREIGN KEY (activityId) REFERENCES cdm.ServiceActivity(activityId) ON DELETE CASCADE,
FOREIGN KEY (userId) REFERENCES cdm.[User](userId),
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ActivityParty created.';
GO
-- ============================================================================
-- SLA AND KPI TABLES
-- ============================================================================
CREATE TABLE cdm.SLAKPIInstance (
kpiInstanceId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
caseId UNIQUEIDENTIFIER NOT NULL,
kpiName NVARCHAR(200) NOT NULL,
description NVARCHAR(2000),
metric NVARCHAR(100),
metricValue DECIMAL(18,2),
metricUnit NVARCHAR(50),
targetValue DECIMAL(18,2),
isWarning BIT DEFAULT 0,
isCritical BIT DEFAULT 0,
status NVARCHAR(50),
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
modifiedOn DATETIME2(7),
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId) ON DELETE CASCADE
);
PRINT 'Table cdm.SLAKPIInstance created.';
GO
-- ============================================================================
-- KNOWLEDGE BASE TABLES
-- ============================================================================
CREATE TABLE cdm.KnowledgeArticle (
articleId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
title NVARCHAR(500) NOT NULL,
content NVARCHAR(MAX),
category NVARCHAR(100),
keywords NVARCHAR(500),
authorUserId UNIQUEIDENTIFIER,
status NVARCHAR(50) NOT NULL DEFAULT 'Draft',
publishedDate DATETIME2(7),
expirationDate DATETIME2(7),
viewCount INT DEFAULT 0,
isActive BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (authorUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.KnowledgeArticle created.';
GO
CREATE TABLE cdm.KnowledgeArticleIncident (
associationId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
articleId UNIQUEIDENTIFIER NOT NULL,
caseId UNIQUEIDENTIFIER NOT NULL,
isResolved BIT DEFAULT 0,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
UNIQUE (articleId, caseId),
FOREIGN KEY (articleId) REFERENCES cdm.KnowledgeArticle(articleId) ON DELETE CASCADE,
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId) ON DELETE CASCADE,
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.KnowledgeArticleIncident created.';
GO
CREATE TABLE cdm.IncidentKnowledgeBaseRecord (
recordId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
caseId UNIQUEIDENTIFIER NOT NULL,
articleId UNIQUEIDENTIFIER NOT NULL,
notes NVARCHAR(2000),
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId) ON DELETE CASCADE,
FOREIGN KEY (articleId) REFERENCES cdm.KnowledgeArticle(articleId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.IncidentKnowledgeBaseRecord created.';
GO
-- ============================================================================
-- ACTIVITY TABLES
-- ============================================================================
CREATE TABLE cdm.Task (
taskId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
subject NVARCHAR(200) NOT NULL,
description NVARCHAR(MAX),
priority NVARCHAR(50) NOT NULL DEFAULT 'Medium',
status NVARCHAR(50) NOT NULL DEFAULT 'Open',
dueDate DATE,
ownerUserId UNIQUEIDENTIFIER NOT NULL,
caseId UNIQUEIDENTIFIER,
contactId UNIQUEIDENTIFIER,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
modifiedOn DATETIME2(7),
modifiedBy UNIQUEIDENTIFIER,
FOREIGN KEY (ownerUserId) REFERENCES cdm.[User](userId),
FOREIGN KEY (caseId) REFERENCES cdm.[Case](caseId),
FOREIGN KEY (contactId) REFERENCES cdm.Contact(contactId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId),
FOREIGN KEY (modifiedBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.Task created.';
GO
-- ============================================================================
-- RESOURCE EXPANSION TABLES
-- ============================================================================
CREATE TABLE cdm.ResourceExpansion (
expansionId UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
resourceId UNIQUEIDENTIFIER NOT NULL,
resourceSpecificationId UNIQUEIDENTIFIER,
isIncluded BIT DEFAULT 1,
createdOn DATETIME2(7) DEFAULT GETUTCDATE(),
createdBy UNIQUEIDENTIFIER,
UNIQUE (resourceId, resourceSpecificationId),
FOREIGN KEY (resourceId) REFERENCES cdm.Resource(resourceId) ON DELETE CASCADE,
FOREIGN KEY (resourceSpecificationId) REFERENCES cdm.ResourceSpecification(specificationId),
FOREIGN KEY (createdBy) REFERENCES cdm.[User](userId)
);
PRINT 'Table cdm.ResourceExpansion created.';
GO
-- ============================================================================
-- INDEXES FOR PERFORMANCE
-- ============================================================================
PRINT 'Creating indexes...';
GO
CREATE NONCLUSTERED INDEX IX_User_Email ON cdm.[User](email);
CREATE NONCLUSTERED INDEX IX_User_IsActive ON cdm.[User](isActive);
CREATE NONCLUSTERED INDEX IX_Site_IsActive ON cdm.Site(isActive);
CREATE NONCLUSTERED INDEX IX_Account_ParentAccountId ON cdm.Account(parentAccountId);
CREATE NONCLUSTERED INDEX IX_Account_OwnerUserId ON cdm.Account(ownerUserId);
CREATE NONCLUSTERED INDEX IX_Account_IsActive ON cdm.Account(isActive);
CREATE NONCLUSTERED INDEX IX_Account_AccountType ON cdm.Account(accountType);
CREATE NONCLUSTERED INDEX IX_Contact_AccountId ON cdm.Contact(accountId);
CREATE NONCLUSTERED INDEX IX_Contact_Email ON cdm.Contact(email);
CREATE NONCLUSTERED INDEX IX_Contact_IsActive ON cdm.Contact(isActive);
CREATE NONCLUSTERED INDEX IX_Service_IsActive ON cdm.Service(isActive);
CREATE NONCLUSTERED INDEX IX_Resource_ResourceType ON cdm.Resource(resourceType);
CREATE NONCLUSTERED INDEX IX_Resource_IsActive ON cdm.Resource(isActive);
CREATE NONCLUSTERED INDEX IX_Contract_AccountId ON cdm.Contract(accountId);
CREATE NONCLUSTERED INDEX IX_Contract_OwnerUserId ON cdm.Contract(ownerUserId);
CREATE NONCLUSTERED INDEX IX_Contract_Status ON cdm.Contract(status);
CREATE NONCLUSTERED INDEX IX_Contract_DateRange ON cdm.Contract(startDate, endDate);
CREATE NONCLUSTERED INDEX IX_ContractLine_ServiceId ON cdm.ContractLine(serviceId);
CREATE NONCLUSTERED INDEX IX_Entitlement_AccountId ON cdm.Entitlement(accountId);
CREATE NONCLUSTERED INDEX IX_Entitlement_Status ON cdm.Entitlement(status);
CREATE NONCLUSTERED INDEX IX_Entitlement_DateRange ON cdm.Entitlement(startDate, endDate);
CREATE NONCLUSTERED INDEX IX_Case_CaseNumber ON cdm.[Case](caseNumber);
CREATE NONCLUSTERED INDEX IX_Case_AccountId ON cdm.[Case](accountId);
CREATE NONCLUSTERED INDEX IX_Case_ContactId ON cdm.[Case](contactId);
CREATE NONCLUSTERED INDEX IX_Case_OwnerUserId ON cdm.[Case](ownerUserId);
CREATE NONCLUSTERED INDEX IX_Case_Status ON cdm.[Case](status);
CREATE NONCLUSTERED INDEX IX_Case_Priority ON cdm.[Case](priority);
CREATE NONCLUSTERED INDEX IX_Case_CreatedDate ON cdm.[Case](createdDate);
CREATE NONCLUSTERED INDEX IX_Case_ParentCaseId ON cdm.[Case](parentCaseId);
CREATE NONCLUSTERED INDEX IX_ServiceActivity_CaseId ON cdm.ServiceActivity(caseId);
CREATE NONCLUSTERED INDEX IX_ServiceActivity_ContactId ON cdm.ServiceActivity(contactId);
CREATE NONCLUSTERED INDEX IX_ServiceActivity_OwnerUserId ON cdm.ServiceActivity(ownerUserId);
CREATE NONCLUSTERED INDEX IX_ServiceActivity_Status ON cdm.ServiceActivity(status);
CREATE NONCLUSTERED INDEX IX_ServiceActivity_TimeRange ON cdm.ServiceActivity(startTime, endTime);
CREATE NONCLUSTERED INDEX IX_Task_OwnerUserId ON cdm.Task(ownerUserId);
CREATE NONCLUSTERED INDEX IX_Task_CaseId ON cdm.Task(caseId);
CREATE NONCLUSTERED INDEX IX_Task_Status ON cdm.Task(status);
CREATE NONCLUSTERED INDEX IX_Task_DueDate ON cdm.Task(dueDate);
CREATE NONCLUSTERED INDEX IX_KnowledgeArticle_Status ON cdm.KnowledgeArticle(status);
CREATE NONCLUSTERED INDEX IX_KnowledgeArticle_Category ON cdm.KnowledgeArticle(category);
CREATE NONCLUSTERED INDEX IX_SLAKPIInstance_CaseId ON cdm.SLAKPIInstance(caseId);
CREATE NONCLUSTERED INDEX IX_SLAKPIInstance_Status ON cdm.SLAKPIInstance(status);
PRINT '36 indexes created successfully.';
GO
-- ============================================================================
-- SAMPLE DATA
-- ============================================================================
PRINT 'Inserting sample data...';
GO
-- Users
INSERT INTO cdm.[User] (userName, firstName, lastName, email, phone, isActive)
VALUES
('jsmith', 'John', 'Smith', 'john.smith@company.com', '555-0101', 1),
('mwhite', 'Maria', 'White', 'maria.white@company.com', '555-0102', 1),
('rjones', 'Robert', 'Jones', 'robert.jones@company.com', '555-0103', 1),
('sbrown', 'Sarah', 'Brown', 'sarah.brown@company.com', '555-0104', 1),
('mtaylor', 'Michael', 'Taylor', 'michael.taylor@company.com', '555-0105', 1);
PRINT 'Sample users inserted.';
GO
-- Sites
INSERT INTO cdm.Site (siteName, description, city, stateProvince, country, phone)
VALUES
('New York Office', 'Main headquarters', 'New York', 'NY', 'USA', '555-0200'),
('Los Angeles Office', 'West coast support center', 'Los Angeles', 'CA', 'USA', '555-0201'),
('Chicago Office', 'Midwest operations', 'Chicago', 'IL', 'USA', '555-0202');
PRINT 'Sample sites inserted.';
GO
-- Accounts
INSERT INTO cdm.Account (accountName, accountNumber, description, email, phone, accountType, industry, numberOfEmployees, isActive)
VALUES
('Acme Corporation', 'ACC-001', 'Leading manufacturing company', 'contact@acme.com', '555-1001', 'Customer', 'Manufacturing', 500, 1),
('TechVision Inc', 'ACC-002', 'Software development services', 'info@techvision.com', '555-1002', 'Customer', 'Technology', 250, 1),
('Global Services Ltd', 'ACC-003', 'Consulting and support services', 'contact@globalservices.com', '555-1003', 'Customer', 'Consulting', 1000, 1),
('StartupX', 'ACC-004', 'Early stage technology startup', 'hello@startupx.com', '555-1004', 'Prospect', 'Technology', 50, 1);
PRINT 'Sample accounts inserted.';
GO
-- Contacts
INSERT INTO cdm.Contact (firstName, lastName, email, phone, accountId, jobTitle, department, isActive)
VALUES
('Alice', 'Johnson', 'alice.johnson@acme.com', '555-1101', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), 'Manager', 'Operations', 1),
('Bob', 'Williams', 'bob.williams@acme.com', '555-1102', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), 'Director', 'IT', 1),
('Carol', 'Davis', 'carol.davis@techvision.com', '555-1103', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'TechVision Inc'), 'Project Manager', 'Services', 1),
('David', 'Miller', 'david.miller@globalservices.com', '555-1104', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Global Services Ltd'), 'CTO', 'Technology', 1),
('Emma', 'Wilson', 'emma.wilson@startupx.com', '555-1105', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'StartupX'), 'CEO', 'Executive', 1);
PRINT 'Sample contacts inserted.';
GO
-- Services
INSERT INTO cdm.Service (serviceName, description, isActive)
VALUES
('Technical Support', 'On-demand technical support for systems and applications', 1),
('Installation Service', 'Professional installation and setup of products', 1),
('Maintenance & Updates', 'Regular maintenance and software updates', 1),
('Training & Consulting', 'Professional training and consulting services', 1),
('Premium Support', '24/7 premium support with SLA guarantees', 1);
PRINT 'Sample services inserted.';
GO
-- Resources
INSERT INTO cdm.Resource (resourceName, description, resourceType, isActive)
VALUES
('John Smith - Support', 'Senior Support Technician', 'User', 1),
('Maria White - Support', 'Support Engineer', 'User', 1),
('Robert Jones - Support', 'Support Manager', 'User', 1),
('Conference Room A', 'Medium capacity meeting room', 'Facility', 1),
('Support Terminal 1', 'Customer support workstation', 'Equipment', 1);
PRINT 'Sample resources inserted.';
GO
-- Contracts
INSERT INTO cdm.Contract (contractNumber, contractName, accountId, startDate, endDate, status, contractValue, contractType, isActive)
VALUES
('CNT-2024-001', 'Acme Annual Support Contract', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), '2024-01-01', '2024-12-31', 'Active', 50000.00, 'Support', 1),
('CNT-2024-002', 'TechVision Premium Service', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'TechVision Inc'), '2024-03-01', '2025-02-28', 'Active', 75000.00, 'Service', 1),
('CNT-2024-003', 'Global Services Maintenance', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Global Services Ltd'), '2024-01-01', '2024-12-31', 'Active', 100000.00, 'Maintenance', 1);
PRINT 'Sample contracts inserted.';
GO
-- Contract Lines
INSERT INTO cdm.ContractLine (contractId, lineNumber, serviceId, description, quantityIncluded, quantityUsed, price)
VALUES
((SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-001'), 1, (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Technical Support'), 'Technical Support - 100 hours', 100, 25, 5000.00),
((SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-001'), 2, (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Premium Support'), 'Premium 24/7 Support', NULL, NULL, 20000.00),
((SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-002'), 1, (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Installation Service'), 'Installation Services - 5 installations', 5, 2, 10000.00),
((SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-002'), 2, (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Technical Support'), 'Technical Support - 200 hours', 200, 45, 15000.00);
PRINT 'Sample contract lines inserted.';
GO
-- Entitlements
INSERT INTO cdm.Entitlement (entitlementName, description, accountId, startDate, endDate, type, duration, unitType, unitCount, status, isActive)
VALUES
('Acme - Silver Support', 'Silver tier support entitlement', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), '2024-01-01', '2024-12-31', 'Support', 365, 'Cases', 50, 'Active', 1),
('Acme - Gold Support', 'Gold tier support entitlement', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), '2024-01-01', '2024-12-31', 'Support', 365, 'Hours', 200, 'Active', 1),
('TechVision - Platinum', 'Platinum service entitlement', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'TechVision Inc'), '2024-03-01', '2025-02-28', 'Service', 365, 'Cases', 100, 'Active', 1);
PRINT 'Sample entitlements inserted.';
GO
-- Cases
INSERT INTO cdm.[Case] (caseNumber, title, description, priority, severity, status, accountId, contactId, contractId, entitlementId, emailAddress, isActive)
VALUES
('CSE-2024-0001', 'System Login Issues', 'Users unable to login to the main system', 'High', 'High', 'Active', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Alice'), (SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-001'), (SELECT TOP 1 entitlementId FROM cdm.Entitlement WHERE entitlementName = 'Acme - Silver Support'), 'alice.johnson@acme.com', 1),
('CSE-2024-0002', 'Database Performance', 'Database queries running slowly', 'Medium', 'Medium', 'Active', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Acme Corporation'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Alice'), (SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-001'), (SELECT TOP 1 entitlementId FROM cdm.Entitlement WHERE entitlementName = 'Acme - Silver Support'), 'alice.johnson@acme.com', 1),
('CSE-2024-0003', 'Software Installation Request', 'Need to install new version of software', 'Low', 'Low', 'Waiting', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'TechVision Inc'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Carol'), (SELECT TOP 1 contractId FROM cdm.Contract WHERE contractNumber = 'CNT-2024-002'), NULL, 'carol.davis@techvision.com', 1),
('CSE-2024-0004', 'Data Import Error', 'Error importing data from CSV file', 'High', 'High', 'Active', (SELECT TOP 1 accountId FROM cdm.Account WHERE accountName = 'Global Services Ltd'), NULL, NULL, NULL, NULL, 1);
PRINT 'Sample cases inserted.';
GO
-- Service Activities
INSERT INTO cdm.ServiceActivity (subject, description, serviceId, caseId, contactId, startTime, endTime, duration, location, status, isActive)
VALUES
('Initial Diagnosis - System Login', 'Initial investigation of login issues', (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Technical Support'), (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Alice'), '2024-09-23 10:00:00', '2024-09-23 11:30:00', 90, 'Remote', 'Completed', 1),
('Database Performance Review', 'Performance analysis and optimization', (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Technical Support'), (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0002'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Alice'), '2024-09-23 14:00:00', '2024-09-23 16:00:00', 120, 'Remote', 'Scheduled', 1),
('Software Installation', 'Install new software version', (SELECT TOP 1 serviceId FROM cdm.Service WHERE serviceName = 'Installation Service'), (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0003'), (SELECT TOP 1 contactId FROM cdm.Contact WHERE firstName = 'Carol'), '2024-09-24 09:00:00', '2024-09-24 12:00:00', 180, 'On-site', 'Scheduled', 1);
PRINT 'Sample service activities inserted.';
GO
-- Tasks
INSERT INTO cdm.Task (subject, description, priority, status, dueDate, caseId, isActive)
VALUES
('Verify System Login Fix', 'Test login functionality after fix', 'High', 'In Progress', '2024-09-24', (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), 1),
('Gather Database Metrics', 'Collect database performance metrics', 'Medium', 'Open', '2024-09-25', (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0002'), 1),
('Prepare Installation Package', 'Package software for installation', 'Medium', 'Completed', '2024-09-23', (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0003'), 1),
('Follow-up with Customer', 'Confirm resolution satisfaction', 'Low', 'Open', '2024-09-26', (SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), 1);
PRINT 'Sample tasks inserted.';
GO
-- Knowledge Articles
INSERT INTO cdm.KnowledgeArticle (title, content, category, keywords, status, isActive)
VALUES
('How to Reset System Login', 'Step-by-step guide for resetting system login credentials...', 'User Management', 'login, reset, credentials', 'Published', 1),
('Database Query Optimization Tips', 'Best practices for optimizing database queries...', 'Database', 'database, query, optimization, performance', 'Published', 1),
('Software Installation Guide', 'Complete software installation procedures...', 'Installation', 'installation, setup, software', 'Published', 1),
('Troubleshooting Common Issues', 'Common issues and their solutions...', 'Troubleshooting', 'troubleshooting, errors, solutions', 'Draft', 1);
PRINT 'Sample knowledge articles inserted.';
GO
-- SLA KPI Instances
INSERT INTO cdm.SLAKPIInstance (caseId, kpiName, metric, metricValue, metricUnit, targetValue, status)
VALUES
((SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), 'First Response Time', 'Response Time', 30, 'Minutes', 60, 'Compliant'),
((SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), 'Resolution Time', 'Resolution Time', 480, 'Minutes', 1440, 'Compliant'),
((SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0002'), 'First Response Time', 'Response Time', 45, 'Minutes', 60, 'Compliant'),
((SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0003'), 'First Response Time', 'Response Time', 120, 'Minutes', 120, 'In Progress');
PRINT 'Sample SLA KPI instances inserted.';
GO
-- Case Resolution
INSERT INTO cdm.CaseResolution (caseId, description, resolutionType, resolutionStatus, billingStatus, actualServiceDuration, totalCostAmount)
VALUES
((SELECT TOP 1 caseId FROM cdm.[Case] WHERE caseNumber = 'CSE-2024-0001'), 'System login issue was caused by expired SSL certificate. Certificate updated and login functionality restored.', 'Technical Resolution', 'Resolved', 'Billable', 90, 500.00);
PRINT 'Sample case resolution inserted.';
GO
-- ============================================================================
-- SUMMARY
-- ============================================================================
PRINT '';
PRINT '========================================';
PRINT 'CDM Customer Service Database Created Successfully!';
PRINT '========================================';
PRINT '';
PRINT 'Database Statistics:';
PRINT '- Total Tables: 26';
PRINT '- Total Indexes: 36';
PRINT '- Sample Records Inserted: 50+';
PRINT '';
PRINT 'Tables Created:';
PRINT ' Foundation: User, Site, Account, Contact';
PRINT ' Services: Service, Resource, FacilityEquipment, SchedulingGroup, ResourceSpecification';
PRINT ' Contracts: Contract, ContractLine, ServiceContractContact';
PRINT ' Entitlements: Entitlement, EntitlementContact, EntitlementProduct';
PRINT ' Cases: Case, CaseResolution, ChildIncidentCount';
PRINT ' Activities: ServiceActivity, ActivityParty, Task';
PRINT ' Knowledge: KnowledgeArticle, KnowledgeArticleIncident, IncidentKnowledgeBaseRecord';
PRINT ' SLA: SLAKPIInstance';
PRINT ' Other: ResourceExpansion';
PRINT '';
PRINT 'Next Steps:';
PRINT '1. Run: SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''cdm''';
PRINT ' (Should return: 26)';
PRINT '2. Run: SELECT COUNT(*) FROM cdm.[Case]';
PRINT ' (Should return: 4 test cases)';
PRINT '3. Run: SELECT * FROM cdm.[Case]';
PRINT ' (To view sample data)';
PRINT '';
PRINT '========================================';