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([