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:
co-authored by
Claude Opus 5.5
parent
ef38a502d8
commit
3b371cdb28
@@ -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 '========================================';
|
||||
|
||||
Reference in New Issue
Block a user