feat: agenda polish, SLA sync, filters

This commit is contained in:
Esdras Renan 2025-11-08 02:34:43 -03:00
parent 7fb6c65d9a
commit 6ab8a6ce89
40 changed files with 2771 additions and 154 deletions

View file

@ -6,8 +6,25 @@ export const ticketStatusSchema = z.enum([
"PAUSED",
"RESOLVED",
])
export type TicketStatus = z.infer<typeof ticketStatusSchema>
export type TicketStatus = z.infer<typeof ticketStatusSchema>
const slaStatusSchema = z.enum(["pending", "met", "breached", "n/a"])
const slaTimeModeSchema = z.enum(["business", "calendar"])
export const ticketSlaSnapshotSchema = z.object({
categoryId: z.string().optional(),
categoryName: z.string().optional(),
priority: z.string(),
responseTargetMinutes: z.number().nullable().optional(),
responseMode: slaTimeModeSchema.optional(),
solutionTargetMinutes: z.number().nullable().optional(),
solutionMode: slaTimeModeSchema.optional(),
alertThreshold: z.number().optional(),
pauseStatuses: z.array(z.string()).default([]),
})
export type TicketSlaSnapshot = z.infer<typeof ticketSlaSnapshotSchema>
export const ticketPrioritySchema = z.enum(["LOW", "MEDIUM", "HIGH", "URGENT"])
export type TicketPriority = z.infer<typeof ticketPrioritySchema>
@ -130,15 +147,23 @@ export const ticketSchema = z.object({
company: ticketCompanySummarySchema.optional().nullable(),
machine: ticketMachineSummarySchema.nullable().optional(),
slaPolicy: z
.object({
id: z.string(),
name: z.string(),
targetMinutesToFirstResponse: z.number().nullable(),
targetMinutesToResolution: z.number().nullable(),
})
.nullable(),
dueAt: z.coerce.date().nullable(),
firstResponseAt: z.coerce.date().nullable(),
.object({
id: z.string(),
name: z.string(),
targetMinutesToFirstResponse: z.number().nullable(),
targetMinutesToResolution: z.number().nullable(),
})
.nullable(),
slaSnapshot: ticketSlaSnapshotSchema.nullable().optional(),
slaResponseDueAt: z.coerce.date().nullable().optional(),
slaSolutionDueAt: z.coerce.date().nullable().optional(),
slaResponseStatus: slaStatusSchema.nullable().optional(),
slaSolutionStatus: slaStatusSchema.nullable().optional(),
slaPausedAt: z.coerce.date().nullable().optional(),
slaPausedBy: z.string().nullable().optional(),
slaPausedMs: z.number().nullable().optional(),
dueAt: z.coerce.date().nullable(),
firstResponseAt: z.coerce.date().nullable(),
resolvedAt: z.coerce.date().nullable(),
updatedAt: z.coerce.date(),
createdAt: z.coerce.date(),