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>
896 lines
39 KiB
Transact-SQL
896 lines
39 KiB
Transact-SQL
-- 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 '========================================';
|
|
|