@hed-hog/ticket 0.0.285

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +480 -0
  2. package/dist/dto/assign-ticket-owner.dto.d.ts +4 -0
  3. package/dist/dto/assign-ticket-owner.dto.d.ts.map +1 -0
  4. package/dist/dto/assign-ticket-owner.dto.js +7 -0
  5. package/dist/dto/assign-ticket-owner.dto.js.map +1 -0
  6. package/dist/dto/create-ticket-channel-account.dto.d.ts +10 -0
  7. package/dist/dto/create-ticket-channel-account.dto.d.ts.map +1 -0
  8. package/dist/dto/create-ticket-channel-account.dto.js +7 -0
  9. package/dist/dto/create-ticket-channel-account.dto.js.map +1 -0
  10. package/dist/dto/create-ticket-channel.dto.d.ts +7 -0
  11. package/dist/dto/create-ticket-channel.dto.d.ts.map +1 -0
  12. package/dist/dto/create-ticket-channel.dto.js +7 -0
  13. package/dist/dto/create-ticket-channel.dto.js.map +1 -0
  14. package/dist/dto/create-ticket-internal-note.dto.d.ts +4 -0
  15. package/dist/dto/create-ticket-internal-note.dto.d.ts.map +1 -0
  16. package/dist/dto/create-ticket-internal-note.dto.js +7 -0
  17. package/dist/dto/create-ticket-internal-note.dto.js.map +1 -0
  18. package/dist/dto/create-ticket-reply.dto.d.ts +5 -0
  19. package/dist/dto/create-ticket-reply.dto.d.ts.map +1 -0
  20. package/dist/dto/create-ticket-reply.dto.js +7 -0
  21. package/dist/dto/create-ticket-reply.dto.js.map +1 -0
  22. package/dist/dto/update-ticket-channel-account.dto.d.ts +8 -0
  23. package/dist/dto/update-ticket-channel-account.dto.d.ts.map +1 -0
  24. package/dist/dto/update-ticket-channel-account.dto.js +7 -0
  25. package/dist/dto/update-ticket-channel-account.dto.js.map +1 -0
  26. package/dist/dto/update-ticket-channel.dto.d.ts +5 -0
  27. package/dist/dto/update-ticket-channel.dto.d.ts.map +1 -0
  28. package/dist/dto/update-ticket-channel.dto.js +7 -0
  29. package/dist/dto/update-ticket-channel.dto.js.map +1 -0
  30. package/dist/dto/update-ticket-priority.dto.d.ts +4 -0
  31. package/dist/dto/update-ticket-priority.dto.d.ts.map +1 -0
  32. package/dist/dto/update-ticket-priority.dto.js +7 -0
  33. package/dist/dto/update-ticket-priority.dto.js.map +1 -0
  34. package/dist/dto/update-ticket-settings.dto.d.ts +13 -0
  35. package/dist/dto/update-ticket-settings.dto.d.ts.map +1 -0
  36. package/dist/dto/update-ticket-settings.dto.js +7 -0
  37. package/dist/dto/update-ticket-settings.dto.js.map +1 -0
  38. package/dist/dto/update-ticket-status.dto.d.ts +4 -0
  39. package/dist/dto/update-ticket-status.dto.d.ts.map +1 -0
  40. package/dist/dto/update-ticket-status.dto.js +7 -0
  41. package/dist/dto/update-ticket-status.dto.js.map +1 -0
  42. package/dist/index.d.ts +19 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +35 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/ticket-ai-review.controller.d.ts +9 -0
  47. package/dist/ticket-ai-review.controller.d.ts.map +1 -0
  48. package/dist/ticket-ai-review.controller.js +36 -0
  49. package/dist/ticket-ai-review.controller.js.map +1 -0
  50. package/dist/ticket-channel-accounts.controller.d.ts +24 -0
  51. package/dist/ticket-channel-accounts.controller.d.ts.map +1 -0
  52. package/dist/ticket-channel-accounts.controller.js +72 -0
  53. package/dist/ticket-channel-accounts.controller.js.map +1 -0
  54. package/dist/ticket-channels.controller.d.ts +21 -0
  55. package/dist/ticket-channels.controller.d.ts.map +1 -0
  56. package/dist/ticket-channels.controller.js +72 -0
  57. package/dist/ticket-channels.controller.js.map +1 -0
  58. package/dist/ticket-data.controller.d.ts +24 -0
  59. package/dist/ticket-data.controller.d.ts.map +1 -0
  60. package/dist/ticket-data.controller.js +81 -0
  61. package/dist/ticket-data.controller.js.map +1 -0
  62. package/dist/ticket-items.controller.d.ts +35 -0
  63. package/dist/ticket-items.controller.d.ts.map +1 -0
  64. package/dist/ticket-items.controller.js +100 -0
  65. package/dist/ticket-items.controller.js.map +1 -0
  66. package/dist/ticket-settings.controller.d.ts +11 -0
  67. package/dist/ticket-settings.controller.d.ts.map +1 -0
  68. package/dist/ticket-settings.controller.js +50 -0
  69. package/dist/ticket-settings.controller.js.map +1 -0
  70. package/dist/ticket.module.d.ts +3 -0
  71. package/dist/ticket.module.d.ts.map +1 -0
  72. package/dist/ticket.module.js +45 -0
  73. package/dist/ticket.module.js.map +1 -0
  74. package/dist/ticket.service.d.ts +88 -0
  75. package/dist/ticket.service.d.ts.map +1 -0
  76. package/dist/ticket.service.js +83 -0
  77. package/dist/ticket.service.js.map +1 -0
  78. package/hedhog/data/menu.yaml +164 -0
  79. package/hedhog/data/role.yaml +23 -0
  80. package/hedhog/data/route.yaml +225 -0
  81. package/hedhog/data/setting_group.yaml +574 -0
  82. package/hedhog/frontend/app/[id]/page.tsx.ejs +360 -0
  83. package/hedhog/frontend/app/_components/ai-draft-editor-dialog.tsx.ejs +67 -0
  84. package/hedhog/frontend/app/_components/ticket-badges.tsx.ejs +65 -0
  85. package/hedhog/frontend/app/_components/ticket-context-card.tsx.ejs +80 -0
  86. package/hedhog/frontend/app/_components/ticket-timeline.tsx.ejs +59 -0
  87. package/hedhog/frontend/app/_lib/mock-data.ts.ejs +474 -0
  88. package/hedhog/frontend/app/_lib/types.ts.ejs +134 -0
  89. package/hedhog/frontend/app/ai-review/page.tsx.ejs +205 -0
  90. package/hedhog/frontend/app/channel-accounts/page.tsx.ejs +476 -0
  91. package/hedhog/frontend/app/channels/page.tsx.ejs +406 -0
  92. package/hedhog/frontend/app/dashboard/page.tsx.ejs +178 -0
  93. package/hedhog/frontend/app/inbox/page.tsx.ejs +500 -0
  94. package/hedhog/frontend/app/page.tsx.ejs +5 -0
  95. package/hedhog/frontend/app/reports/page.tsx.ejs +151 -0
  96. package/hedhog/frontend/app/roles/page.tsx.ejs +110 -0
  97. package/hedhog/frontend/app/settings/page.tsx.ejs +484 -0
  98. package/hedhog/frontend/messages/en.json +412 -0
  99. package/hedhog/frontend/messages/pt.json +412 -0
  100. package/hedhog/table/channel.yaml +23 -0
  101. package/hedhog/table/channel_account.yaml +34 -0
  102. package/hedhog/table/ticket.yaml +73 -0
  103. package/hedhog/table/ticket_ai_draft.yaml +51 -0
  104. package/hedhog/table/ticket_attachment.yaml +40 -0
  105. package/hedhog/table/ticket_category.yaml +22 -0
  106. package/hedhog/table/ticket_context.yaml +64 -0
  107. package/hedhog/table/ticket_message.yaml +49 -0
  108. package/hedhog/table/ticket_message_source.yaml +50 -0
  109. package/hedhog/table/ticket_metadata.yaml +21 -0
  110. package/hedhog/table/ticket_participant.yaml +25 -0
  111. package/hedhog/table/ticket_source.yaml +43 -0
  112. package/hedhog/table/ticket_tag.yaml +22 -0
  113. package/package.json +40 -0
  114. package/src/dto/assign-ticket-owner.dto.ts +3 -0
  115. package/src/dto/create-ticket-channel-account.dto.ts +9 -0
  116. package/src/dto/create-ticket-channel.dto.ts +6 -0
  117. package/src/dto/create-ticket-internal-note.dto.ts +3 -0
  118. package/src/dto/create-ticket-reply.dto.ts +4 -0
  119. package/src/dto/update-ticket-channel-account.dto.ts +7 -0
  120. package/src/dto/update-ticket-channel.dto.ts +4 -0
  121. package/src/dto/update-ticket-priority.dto.ts +3 -0
  122. package/src/dto/update-ticket-settings.dto.ts +12 -0
  123. package/src/dto/update-ticket-status.dto.ts +3 -0
  124. package/src/index.ts +19 -0
  125. package/src/language/en.json +8 -0
  126. package/src/language/pt.json +8 -0
  127. package/src/ticket-ai-review.controller.ts +14 -0
  128. package/src/ticket-channel-accounts.controller.ts +34 -0
  129. package/src/ticket-channels.controller.ts +31 -0
  130. package/src/ticket-data.controller.ts +39 -0
  131. package/src/ticket-items.controller.ts +56 -0
  132. package/src/ticket-settings.controller.ts +20 -0
  133. package/src/ticket.module.ts +32 -0
  134. package/src/ticket.service.ts +102 -0
@@ -0,0 +1,412 @@
1
+ {
2
+ "TicketModule": {
3
+ "common": {
4
+ "home": "Inicio",
5
+ "tickets": "Tickets",
6
+ "all": "Todos",
7
+ "yes": "Sim",
8
+ "no": "Nao",
9
+ "actions": "Acoes",
10
+ "status": "Status",
11
+ "priority": "Prioridade",
12
+ "channel": "Canal",
13
+ "context": "Contexto",
14
+ "owner": "Responsavel",
15
+ "requester": "Solicitante",
16
+ "code": "Codigo",
17
+ "name": "Nome",
18
+ "edit": "Editar",
19
+ "disabled": "desabilitado",
20
+ "enabled": "habilitado"
21
+ },
22
+ "badges": {
23
+ "status": {
24
+ "open": "Aberto",
25
+ "pending": "Pendente",
26
+ "waiting_customer": "Aguardando Cliente",
27
+ "resolved": "Resolvido",
28
+ "closed": "Fechado",
29
+ "spam": "Spam"
30
+ },
31
+ "priority": {
32
+ "low": "Baixa",
33
+ "normal": "Normal",
34
+ "high": "Alta",
35
+ "urgent": "Urgente"
36
+ },
37
+ "aiReviewMode": {
38
+ "disabled": "Desabilitado",
39
+ "optional": "Opcional",
40
+ "required": "Obrigatorio"
41
+ }
42
+ },
43
+ "dashboard": {
44
+ "title": "Dashboard de Tickets",
45
+ "description": "Visao operacional e executiva omnichannel para o suporte Hcode",
46
+ "breadcrumb": "Dashboard",
47
+ "stats": {
48
+ "totalOpen": "Total Abertos",
49
+ "pending": "Pendentes",
50
+ "resolvedToday": "Resolvidos Hoje",
51
+ "aiPendingReview": "IA Aguardando Revisao",
52
+ "waitingCustomer": "Aguardando Cliente",
53
+ "urgent": "Urgentes"
54
+ },
55
+ "cards": {
56
+ "byChannel": "Tickets por Canal",
57
+ "byCourse": "Tickets por Curso",
58
+ "byOwner": "Tickets por Responsavel",
59
+ "latestActivity": "Ultimas Atividades"
60
+ }
61
+ },
62
+ "inbox": {
63
+ "title": "Caixa de Tickets",
64
+ "description": "Caixa operacional com filtros omnichannel para o time de suporte",
65
+ "breadcrumb": "Inbox",
66
+ "newTicket": "Novo Ticket",
67
+ "stats": {
68
+ "open": "Abertos",
69
+ "pending": "Pendentes",
70
+ "waitingCustomer": "Aguardando Cliente",
71
+ "urgent": "Urgentes"
72
+ },
73
+ "quick": {
74
+ "all": "Todos",
75
+ "my": "Meus Tickets",
76
+ "open": "Abertos",
77
+ "waiting_customer": "Aguardando Cliente",
78
+ "resolved": "Resolvidos",
79
+ "urgent": "Urgentes"
80
+ },
81
+ "searchPlaceholder": "Buscar por codigo, assunto, solicitante, aula",
82
+ "filters": {
83
+ "status": "Status",
84
+ "allStatus": "Todos os Status",
85
+ "priority": "Prioridade",
86
+ "allPriority": "Todas as Prioridades",
87
+ "channel": "Canal",
88
+ "allChannels": "Todos os Canais",
89
+ "owner": "Responsavel",
90
+ "allOwners": "Todos os Responsaveis",
91
+ "requester": "Solicitante",
92
+ "allRequesters": "Todos os Solicitantes",
93
+ "course": "Curso",
94
+ "allCourses": "Todos os Cursos",
95
+ "section": "Secao",
96
+ "allSections": "Todas as Secoes",
97
+ "lesson": "Aula",
98
+ "allLessons": "Todas as Aulas",
99
+ "video": "Video",
100
+ "allVideos": "Todos os Videos",
101
+ "aiStatus": "Status IA",
102
+ "allAiStatus": "Todos os Status IA",
103
+ "pendingReview": "Aguardando Revisao",
104
+ "approved": "Aprovado",
105
+ "tags": "Tags",
106
+ "allTags": "Todas as Tags",
107
+ "categories": "Categorias",
108
+ "allCategories": "Todas as Categorias"
109
+ },
110
+ "table": {
111
+ "title": "Inbox Operacional",
112
+ "subject": "Assunto",
113
+ "channelAccount": "Conta do Canal",
114
+ "lastActivity": "Ultima Atividade",
115
+ "aiReview": "Revisao IA"
116
+ }
117
+ },
118
+ "detail": {
119
+ "description": "Detalhe operacional do ticket com contexto omnichannel e assistente de IA",
120
+ "takeOwnership": "Assumir Atendimento",
121
+ "assign": "Atribuir",
122
+ "changeStatus": "Alterar Status",
123
+ "ownerBadge": "Responsavel: {name}",
124
+ "requesterCard": {
125
+ "title": "Solicitante",
126
+ "role": "Papel: {role}"
127
+ },
128
+ "sourceCard": {
129
+ "title": "Origem e Rotulos",
130
+ "channel": "Canal:",
131
+ "account": "Conta:",
132
+ "tag": "tag: {value}",
133
+ "category": "categoria: {value}"
134
+ },
135
+ "reply": {
136
+ "title": "Compositor de Resposta Publica",
137
+ "subjectPlaceholder": "Assunto",
138
+ "bodyPlaceholder": "Digite uma resposta publica para o solicitante...",
139
+ "send": "Enviar Resposta"
140
+ },
141
+ "internalNote": {
142
+ "title": "Compositor de Nota Interna",
143
+ "bodyPlaceholder": "Adicione nota interna para operadores e admins...",
144
+ "save": "Salvar Nota Interna"
145
+ },
146
+ "validation": {
147
+ "replySubjectRequired": "Informe o assunto da resposta.",
148
+ "replyBodyRequired": "Informe o conteudo da resposta.",
149
+ "internalNoteBodyRequired": "Informe o conteudo da nota interna."
150
+ },
151
+ "messages": {
152
+ "replySendSuccess": "Resposta enviada com sucesso.",
153
+ "internalNoteSaveSuccess": "Nota interna salva com sucesso."
154
+ },
155
+ "aiPanel": {
156
+ "title": "Painel do Assistente IA",
157
+ "draftTitle": "Rascunho aguardando revisao",
158
+ "approve": "Aprovar e Enviar",
159
+ "edit": "Editar Rascunho",
160
+ "reject": "Rejeitar Rascunho",
161
+ "participants": "Participantes",
162
+ "attachments": "Anexos",
163
+ "participantRequester": "{name} (solicitante)",
164
+ "participantAgent": "{name} (agente)",
165
+ "participantCollaborator": "Bruno Araujo (colaborador)"
166
+ }
167
+ },
168
+ "aiReview": {
169
+ "title": "Fila de Revisao IA",
170
+ "description": "Revise, edite e aprove sugestoes de IA antes do envio",
171
+ "breadcrumb": "Revisao IA",
172
+ "searchPlaceholder": "Buscar por codigo do ticket, canal ou contexto",
173
+ "allStatus": "Todos os Status",
174
+ "pendingReview": "Aguardando Revisao",
175
+ "approved": "Aprovado",
176
+ "rejected": "Rejeitado",
177
+ "tableTitle": "Rascunhos Pendentes",
178
+ "columns": {
179
+ "ticket": "Ticket",
180
+ "channel": "Canal",
181
+ "context": "Contexto",
182
+ "model": "Modelo",
183
+ "status": "Status",
184
+ "original": "Mensagem Original",
185
+ "suggestion": "Sugestao de IA",
186
+ "actions": "Acoes"
187
+ },
188
+ "actions": {
189
+ "approve": "Aprovar",
190
+ "reject": "Rejeitar",
191
+ "edit": "Editar"
192
+ }
193
+ },
194
+ "reports": {
195
+ "title": "Relatorios de Tickets",
196
+ "description": "Indicadores operacionais por canal, curso, aula e operador",
197
+ "breadcrumb": "Relatorios",
198
+ "stats": {
199
+ "firstResponse": "Tempo Medio 1a Resposta",
200
+ "resolution": "Tempo Medio Resolucao",
201
+ "approvalRate": "Taxa de Aprovacao IA",
202
+ "usageByChannel": "Uso de IA por Canal"
203
+ },
204
+ "cards": {
205
+ "byChannel": "Volume por Canal",
206
+ "byCourse": "Volume por Curso",
207
+ "byLesson": "Volume por Aula",
208
+ "byOperator": "Volume por Operador",
209
+ "summary": "Resumo Operacional"
210
+ },
211
+ "summary": {
212
+ "open": "Tickets abertos: {value}",
213
+ "pending": "Tickets pendentes: {value}",
214
+ "waiting": "Aguardando cliente: {value}",
215
+ "resolved": "Resolvidos hoje: {value}",
216
+ "urgent": "Backlog urgente: {value}",
217
+ "aiPending": "IA aguardando revisao: {value}"
218
+ }
219
+ },
220
+ "channels": {
221
+ "title": "Canais",
222
+ "description": "Catalogo de tipos de canal usados nas operacoes omnichannel de tickets",
223
+ "breadcrumb": "Canais",
224
+ "new": "Novo Canal",
225
+ "searchPlaceholder": "Buscar por codigo, nome ou tipo...",
226
+ "tableTitle": "Tipos de Canal",
227
+ "kind": "Tipo",
228
+ "disable": "Desabilitar",
229
+ "emptyState": {
230
+ "title": "Nenhum canal encontrado",
231
+ "description": "Ajuste sua busca ou crie um novo canal.",
232
+ "action": "Novo Canal"
233
+ },
234
+ "sheet": {
235
+ "createTitle": "Novo Canal",
236
+ "createDescription": "Preencha os dados para cadastrar um novo canal.",
237
+ "editTitle": "Editar Canal",
238
+ "editDescription": "Atualize os dados do canal selecionado."
239
+ },
240
+ "form": {
241
+ "codePlaceholder": "ex: portal",
242
+ "namePlaceholder": "ex: Hcode Class",
243
+ "submitCreate": "Cadastrar Canal",
244
+ "submitUpdate": "Salvar Alteracoes"
245
+ },
246
+ "validation": {
247
+ "codeRequired": "Informe o codigo do canal.",
248
+ "nameRequired": "Informe o nome do canal."
249
+ },
250
+ "messages": {
251
+ "created": "Canal criado com sucesso.",
252
+ "updated": "Canal atualizado com sucesso."
253
+ }
254
+ },
255
+ "channelAccounts": {
256
+ "title": "Contas de Canal",
257
+ "description": "Integracoes concretas de canal usadas pelo suporte Hcode",
258
+ "breadcrumb": "Contas de Canal",
259
+ "new": "Nova Conta de Canal",
260
+ "searchPlaceholder": "Buscar por codigo, canal, nome ou identificador...",
261
+ "tableTitle": "Contas Configuradas",
262
+ "externalIdentifier": "Identificador Externo",
263
+ "aiEnabled": "IA Habilitada",
264
+ "testConnection": "Testar Conexao",
265
+ "emptyState": {
266
+ "title": "Nenhuma conta de canal encontrada",
267
+ "description": "Ajuste sua busca ou crie uma nova conta.",
268
+ "action": "Nova Conta de Canal"
269
+ },
270
+ "sheet": {
271
+ "createTitle": "Nova Conta de Canal",
272
+ "createDescription": "Preencha os dados para cadastrar uma conta de canal.",
273
+ "editTitle": "Editar Conta de Canal",
274
+ "editDescription": "Atualize os dados da conta de canal selecionada."
275
+ },
276
+ "form": {
277
+ "codePlaceholder": "ex: suporte_hcode_com_br",
278
+ "namePlaceholder": "ex: Suporte Hcode",
279
+ "externalIdentifierPlaceholder": "ex: mailbox_support_prod",
280
+ "submitCreate": "Cadastrar Conta",
281
+ "submitUpdate": "Salvar Alteracoes"
282
+ },
283
+ "validation": {
284
+ "codeRequired": "Informe o codigo da conta.",
285
+ "channelRequired": "Selecione um canal.",
286
+ "nameRequired": "Informe o nome da conta.",
287
+ "externalIdentifierRequired": "Informe o identificador externo."
288
+ },
289
+ "messages": {
290
+ "created": "Conta de canal criada com sucesso.",
291
+ "updated": "Conta de canal atualizada com sucesso.",
292
+ "connectionTested": "Conexao testada com sucesso."
293
+ }
294
+ },
295
+ "settings": {
296
+ "title": "Configuracoes de Tickets",
297
+ "description": "Controles globais, de canal e de conta de canal para operacoes omnichannel de tickets",
298
+ "breadcrumb": "Configuracoes",
299
+ "general": "Geral",
300
+ "groups": {
301
+ "email": "Email",
302
+ "whatsapp": "WhatsApp",
303
+ "portal": "Portal / Hcode Class",
304
+ "marketplace": "Marketplace / Udemy",
305
+ "social": "Social / YouTube",
306
+ "accounts": "Contas Configuradas",
307
+ "help": "Ajuda"
308
+ },
309
+ "rows": {
310
+ "enabledTitle": "ticket.enabled",
311
+ "enabledDesc": "Habilitar modulo de tickets e telas operacionais",
312
+ "codePrefixTitle": "ticket.code_prefix",
313
+ "codePrefixDesc": "Prefixo usado para gerar codigo do ticket",
314
+ "aiModeTitle": "ticket.default_ai_review_mode",
315
+ "aiModeDesc": "Politica padrao para revisao de rascunho IA",
316
+ "visibilityTitle": "ticket.default_visibility",
317
+ "visibilityDesc": "Visibilidade padrao para novos tickets",
318
+ "autoAssignTitle": "ticket.auto_assign_enabled",
319
+ "autoAssignDesc": "Atribuir automaticamente novos tickets aos operadores",
320
+ "ownerTitle": "ticket.default_owner_person_id",
321
+ "ownerDesc": "Identificador da pessoa responsavel de fallback",
322
+ "publicReplyTitle": "ticket.allow_public_reply",
323
+ "publicReplyDesc": "Permitir respostas publicas de saida",
324
+ "internalNotesTitle": "ticket.allow_internal_notes",
325
+ "internalNotesDesc": "Permitir notas internas na timeline",
326
+ "reopenTitle": "ticket.default_reopen_on_customer_reply",
327
+ "reopenDesc": "Reabrir ticket quando o cliente responder",
328
+ "closeAfterTitle": "ticket.default_close_after_days_without_reply",
329
+ "closeAfterDesc": "Fechamento automatico por inatividade"
330
+ },
331
+ "values": {
332
+ "disabled": "desabilitado",
333
+ "optional": "opcional",
334
+ "required": "obrigatorio",
335
+ "private": "privado",
336
+ "public": "publico"
337
+ },
338
+ "actions": {
339
+ "save": "Salvar configuracoes"
340
+ },
341
+ "messages": {
342
+ "saved": "Configuracoes salvas com sucesso."
343
+ },
344
+ "validation": {
345
+ "codePrefixRequired": "Informe o prefixo do codigo.",
346
+ "ownerRequired": "Informe o identificador do responsavel.",
347
+ "ownerNumeric": "O identificador do responsavel deve ser numerico.",
348
+ "closeAfterRequired": "Informe os dias para fechamento automatico.",
349
+ "closeAfterNumeric": "Os dias para fechamento devem ser numericos."
350
+ },
351
+ "descriptions": {
352
+ "emailControls": "Controles: enabled, inbound_enabled, outbound_enabled, ai_enabled, ai_model, ai_auto_send, ai_require_human_review, append_ticket_code_to_subject, create_new_ticket_if_no_match.",
353
+ "whatsappControls": "Controles: enabled, inbound_enabled, outbound_enabled, ai_enabled, ai_model, ai_auto_send, ai_require_human_review, reopen_last_open_ticket, open_new_ticket_after_hours, window_hours.",
354
+ "portalControls": "Controles: enabled, ai_enabled, ai_model.",
355
+ "marketplaceControls": "Controles: enabled, ai_enabled, ai_model.",
356
+ "socialControls": "Controles: enabled, ai_enabled, ai_model.",
357
+ "accountsControls": "Overrides por conta para enabled, ai_enabled, ai_model e ai_auto_send.",
358
+ "helpLine1": "O auto envio por IA deve ser usado com cautela. Se ai_require_human_review estiver habilitado, o auto envio deve permanecer desabilitado para manter aprovacao do operador no fluxo.",
359
+ "helpLine2": "Overrides de conta de canal tem precedencia sobre defaults de canal quando ambos estiverem configurados."
360
+ }
361
+ },
362
+ "roles": {
363
+ "title": "Papeis e Permissoes",
364
+ "description": "Matriz de permissao para ticket_admin, ticket_operator e ticket_analyst",
365
+ "breadcrumb": "Papeis",
366
+ "cards": {
367
+ "adminTitle": "ticket_admin",
368
+ "adminDesc": "Acesso administrativo e operacional completo incluindo canais, configuracoes, atribuicao, relatorios e governanca de IA.",
369
+ "operatorTitle": "ticket_operator",
370
+ "operatorDesc": "Acesso operacional para inbox, respostas, notas internas e atualizacao de status sem gestao de configuracoes globais.",
371
+ "analystTitle": "ticket_analyst",
372
+ "analystDesc": "Acesso somente leitura com foco em dashboards, relatorios e visibilidade de tickets."
373
+ },
374
+ "tableTitle": "Matriz de Permissao",
375
+ "columns": {
376
+ "permission": "Permissao",
377
+ "admin": "ticket_admin",
378
+ "operator": "ticket_operator",
379
+ "analyst": "ticket_analyst"
380
+ }
381
+ },
382
+ "contextCard": {
383
+ "title": "Contexto",
384
+ "empty": "Nenhum contexto estruturado anexado ainda.",
385
+ "type": "Tipo:",
386
+ "source": "Origem:",
387
+ "course": "Curso:",
388
+ "section": "Secao:",
389
+ "lesson": "Aula:",
390
+ "video": "Video:",
391
+ "page": "Pagina:",
392
+ "openSource": "Abrir referencia da origem"
393
+ },
394
+ "timeline": {
395
+ "title": "Timeline",
396
+ "internalNote": "nota interna",
397
+ "directions": {
398
+ "inbound": "entrada",
399
+ "outbound": "saida",
400
+ "system": "sistema"
401
+ }
402
+ },
403
+ "draftDialog": {
404
+ "title": "Editar Rascunho IA",
405
+ "description": "Revise e ajuste a sugestao antes de aprovar e enviar.",
406
+ "originalTitle": "Mensagem original do solicitante",
407
+ "placeholder": "Refine a sugestao de IA...",
408
+ "cancel": "Cancelar",
409
+ "save": "Salvar Rascunho"
410
+ }
411
+ }
412
+ }
@@ -0,0 +1,23 @@
1
+ columns:
2
+ - type: pk
3
+ - name: code
4
+ type: varchar
5
+ length: 64
6
+ - name: name
7
+ type: varchar
8
+ length: 160
9
+ - name: kind
10
+ type: enum
11
+ values: [portal, marketplace, social, form, email, whatsapp, api, other]
12
+ - name: status
13
+ type: enum
14
+ values: [active, inactive]
15
+ default: active
16
+ - type: created_at
17
+ - type: updated_at
18
+
19
+ indices:
20
+ - columns: [code]
21
+ isUnique: true
22
+ - columns: [kind]
23
+ - columns: [status]
@@ -0,0 +1,34 @@
1
+ columns:
2
+ - type: pk
3
+ - name: channel_id
4
+ type: fk
5
+ references:
6
+ table: channel
7
+ column: id
8
+ onDelete: RESTRICT
9
+ - name: code
10
+ type: varchar
11
+ length: 80
12
+ - name: name
13
+ type: varchar
14
+ length: 180
15
+ - name: external_identifier
16
+ type: varchar
17
+ length: 255
18
+ isNullable: true
19
+ - name: status
20
+ type: enum
21
+ values: [active, inactive]
22
+ default: active
23
+ - name: settings_json
24
+ type: json
25
+ isNullable: true
26
+ - type: created_at
27
+ - type: updated_at
28
+
29
+ indices:
30
+ - columns: [code]
31
+ isUnique: true
32
+ - columns: [channel_id]
33
+ - columns: [status]
34
+ - columns: [external_identifier]
@@ -0,0 +1,73 @@
1
+ columns:
2
+ - type: pk
3
+ - name: code
4
+ type: varchar
5
+ length: 40
6
+ - name: subject
7
+ type: varchar
8
+ length: 255
9
+ - name: status
10
+ type: enum
11
+ values: [open, pending, waiting_customer, resolved, closed, spam]
12
+ default: open
13
+ - name: priority
14
+ type: enum
15
+ values: [low, normal, high, urgent]
16
+ default: normal
17
+ - name: visibility
18
+ type: enum
19
+ values: [private, public]
20
+ default: private
21
+ - name: ai_review_mode
22
+ type: enum
23
+ values: [disabled, optional, required]
24
+ default: optional
25
+ - name: requester_person_id
26
+ type: fk
27
+ isNullable: true
28
+ references:
29
+ table: person
30
+ column: id
31
+ onDelete: SET NULL
32
+ - name: owner_person_id
33
+ type: fk
34
+ isNullable: true
35
+ references:
36
+ table: person
37
+ column: id
38
+ onDelete: SET NULL
39
+ - name: first_message_at
40
+ type: datetime
41
+ isNullable: true
42
+ - name: last_message_at
43
+ type: datetime
44
+ isNullable: true
45
+ - name: last_customer_message_at
46
+ type: datetime
47
+ isNullable: true
48
+ - name: last_agent_message_at
49
+ type: datetime
50
+ isNullable: true
51
+ - name: resolved_at
52
+ type: datetime
53
+ isNullable: true
54
+ - name: closed_at
55
+ type: datetime
56
+ isNullable: true
57
+ - type: created_at
58
+ - type: updated_at
59
+
60
+ indices:
61
+ - columns: [code]
62
+ isUnique: true
63
+ - columns: [status]
64
+ - columns: [priority]
65
+ - columns: [visibility]
66
+ - columns: [ai_review_mode]
67
+ - columns: [requester_person_id]
68
+ - columns: [owner_person_id]
69
+ - columns: [created_at]
70
+ - columns: [last_message_at]
71
+ - columns: [owner_person_id, status]
72
+ - columns: [requester_person_id, status]
73
+ - columns: [status, last_message_at]
@@ -0,0 +1,51 @@
1
+ columns:
2
+ - type: pk
3
+ - name: ticket_id
4
+ type: fk
5
+ references:
6
+ table: ticket
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: ticket_message_id
10
+ type: fk
11
+ isNullable: true
12
+ references:
13
+ table: ticket_message
14
+ column: id
15
+ onDelete: SET NULL
16
+ - name: model_name
17
+ type: varchar
18
+ length: 120
19
+ - name: status
20
+ type: enum
21
+ values: [draft, pending_review, approved, rejected, sent]
22
+ default: draft
23
+ - name: suggestion_html
24
+ type: text
25
+ isNullable: true
26
+ - name: suggestion_text
27
+ type: text
28
+ isNullable: true
29
+ - name: feedback
30
+ type: text
31
+ isNullable: true
32
+ - name: reviewed_by_person_id
33
+ type: fk
34
+ isNullable: true
35
+ references:
36
+ table: person
37
+ column: id
38
+ onDelete: SET NULL
39
+ - name: reviewed_at
40
+ type: datetime
41
+ isNullable: true
42
+ - type: created_at
43
+ - type: updated_at
44
+
45
+ indices:
46
+ - columns: [ticket_id]
47
+ - columns: [ticket_message_id]
48
+ - columns: [status]
49
+ - columns: [reviewed_by_person_id]
50
+ - columns: [created_at]
51
+ - columns: [ticket_id, status]
@@ -0,0 +1,40 @@
1
+ columns:
2
+ - type: pk
3
+ - name: ticket_message_id
4
+ type: fk
5
+ references:
6
+ table: ticket_message
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: kind
10
+ type: enum
11
+ values: [image, file, link]
12
+ - name: storage
13
+ type: enum
14
+ values: [upload, external_url]
15
+ - name: file_name
16
+ type: varchar
17
+ length: 255
18
+ isNullable: true
19
+ - name: mime_type
20
+ type: varchar
21
+ length: 120
22
+ isNullable: true
23
+ - name: url
24
+ type: varchar
25
+ length: 500
26
+ isNullable: true
27
+ - name: size_bytes
28
+ type: int
29
+ isNullable: true
30
+ - name: content
31
+ type: text
32
+ isNullable: true
33
+ - type: created_at
34
+ - type: updated_at
35
+
36
+ indices:
37
+ - columns: [ticket_message_id]
38
+ - columns: [kind]
39
+ - columns: [storage]
40
+ - columns: [created_at]
@@ -0,0 +1,22 @@
1
+ columns:
2
+ - type: pk
3
+ - name: ticket_id
4
+ type: fk
5
+ references:
6
+ table: ticket
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: category_id
10
+ type: fk
11
+ references:
12
+ table: category
13
+ column: id
14
+ onDelete: CASCADE
15
+ - type: created_at
16
+ - type: updated_at
17
+
18
+ indices:
19
+ - columns: [ticket_id, category_id]
20
+ isUnique: true
21
+ - columns: [ticket_id]
22
+ - columns: [category_id]