From eb04becc57ea94ab5eadcba919efb04e0c3eea69 Mon Sep 17 00:00:00 2001 From: maaz519 Date: Wed, 1 Jul 2026 12:25:11 +0530 Subject: [PATCH] =?UTF-8?q?feat(service):=20P4=20doc-faithfulness=20?= =?UTF-8?q?=E2=80=94=20SLA=20placeholder=20columns,=20issueSubclass,=20tra?= =?UTF-8?q?ceId=20on=20state.changed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds ticket.slaDueAt + ticket.issueSubclass + queue.slaPolicyRef (placeholder columns, no timer logic until P7) and propagates ticket.traceId onto ticket.state.changed events (assignment + transition). 45 tests still green. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../20260701065451_support_sla_placeholders/migration.sql | 6 ++++++ packages/iios-service/prisma/schema.prisma | 3 +++ packages/iios-service/src/support/assignment.service.ts | 7 ++++++- packages/iios-service/src/support/support.service.ts | 7 ++++++- 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 packages/iios-service/prisma/migrations/20260701065451_support_sla_placeholders/migration.sql diff --git a/packages/iios-service/prisma/migrations/20260701065451_support_sla_placeholders/migration.sql b/packages/iios-service/prisma/migrations/20260701065451_support_sla_placeholders/migration.sql new file mode 100644 index 0000000..041e5ab --- /dev/null +++ b/packages/iios-service/prisma/migrations/20260701065451_support_sla_placeholders/migration.sql @@ -0,0 +1,6 @@ +-- AlterTable +ALTER TABLE "IiosSupportQueue" ADD COLUMN "slaPolicyRef" TEXT; + +-- AlterTable +ALTER TABLE "IiosTicket" ADD COLUMN "issueSubclass" TEXT, +ADD COLUMN "slaDueAt" TIMESTAMP(3); diff --git a/packages/iios-service/prisma/schema.prisma b/packages/iios-service/prisma/schema.prisma index eaf323a..bfb4a58 100644 --- a/packages/iios-service/prisma/schema.prisma +++ b/packages/iios-service/prisma/schema.prisma @@ -414,6 +414,7 @@ model IiosSupportQueue { scope IiosScope @relation(fields: [scopeId], references: [id], onDelete: Cascade) name String supportTier String @default("REGULAR") + slaPolicyRef String? // SLA placeholder (no timer logic until P7) assignmentPolicy Json? enabled Boolean @default(true) createdAt DateTime @default(now()) @@ -454,6 +455,8 @@ model IiosTicket { state IiosTicketState @default(NEW) priority IiosTicketPriority @default(P3) issueClass String? + issueSubclass String? + slaDueAt DateTime? // SLA placeholder (no timer logic until P7) createdFromInteractionId String? createdFromInteraction IiosInteraction? @relation(fields: [createdFromInteractionId], references: [id]) traceId String? diff --git a/packages/iios-service/src/support/assignment.service.ts b/packages/iios-service/src/support/assignment.service.ts index a19adf3..bbf313b 100644 --- a/packages/iios-service/src/support/assignment.service.ts +++ b/packages/iios-service/src/support/assignment.service.ts @@ -55,7 +55,12 @@ export class AssignmentService implements OnModuleInit { subject: `ticket/${ticketId}`, time: new Date().toISOString(), datacontenttype: 'application/json', - insignia: { scopeSnapshotId: ticket.scopeId, idempotencyKey: `assign:${ticketId}`, dataClass: 'internal' }, + insignia: { + scopeSnapshotId: ticket.scopeId, + correlationId: ticket.traceId ?? undefined, + idempotencyKey: `assign:${ticketId}`, + dataClass: 'internal', + }, data: { ticketId, fromState: ticket.state, toState: 'OPEN', assignedActorId: member.actorId }, }; diff --git a/packages/iios-service/src/support/support.service.ts b/packages/iios-service/src/support/support.service.ts index 9a8c553..dfd3ef1 100644 --- a/packages/iios-service/src/support/support.service.ts +++ b/packages/iios-service/src/support/support.service.ts @@ -123,7 +123,12 @@ export class SupportService { subject: `ticket/${ticketId}`, time: new Date().toISOString(), datacontenttype: 'application/json', - insignia: { scopeSnapshotId: ticket.scopeId, idempotencyKey: `ticketstate:${ticketId}:${toState}`, dataClass: 'internal' }, + insignia: { + scopeSnapshotId: ticket.scopeId, + correlationId: ticket.traceId ?? undefined, + idempotencyKey: `ticketstate:${ticketId}:${toState}`, + dataClass: 'internal', + }, data: { ticketId, fromState: ticket.state, toState }, }; const [updated] = await this.prisma.$transaction([