@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,100 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TicketItemsController = void 0;
16
+ const api_1 = require("@hed-hog/api");
17
+ const common_1 = require("@nestjs/common");
18
+ const assign_ticket_owner_dto_1 = require("./dto/assign-ticket-owner.dto");
19
+ const create_ticket_internal_note_dto_1 = require("./dto/create-ticket-internal-note.dto");
20
+ const create_ticket_reply_dto_1 = require("./dto/create-ticket-reply.dto");
21
+ const update_ticket_priority_dto_1 = require("./dto/update-ticket-priority.dto");
22
+ const update_ticket_status_dto_1 = require("./dto/update-ticket-status.dto");
23
+ const ticket_service_1 = require("./ticket.service");
24
+ let TicketItemsController = class TicketItemsController {
25
+ constructor(ticketService) {
26
+ this.ticketService = ticketService;
27
+ }
28
+ async getTicketById(id) {
29
+ return this.ticketService.getTicketById(Number(id));
30
+ }
31
+ async createPublicReply(id, data) {
32
+ return this.ticketService.createPublicReply(Number(id), data);
33
+ }
34
+ async createInternalNote(id, data) {
35
+ return this.ticketService.createInternalNote(Number(id), data);
36
+ }
37
+ async assignOwner(id, data) {
38
+ return this.ticketService.assignOwner(Number(id), data);
39
+ }
40
+ async updateStatus(id, data) {
41
+ return this.ticketService.updateStatus(Number(id), data);
42
+ }
43
+ async updatePriority(id, data) {
44
+ return this.ticketService.updatePriority(Number(id), data);
45
+ }
46
+ };
47
+ exports.TicketItemsController = TicketItemsController;
48
+ __decorate([
49
+ (0, common_1.Get)(':id'),
50
+ __param(0, (0, common_1.Param)('id')),
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", [String]),
53
+ __metadata("design:returntype", Promise)
54
+ ], TicketItemsController.prototype, "getTicketById", null);
55
+ __decorate([
56
+ (0, common_1.Post)(':id/reply'),
57
+ __param(0, (0, common_1.Param)('id')),
58
+ __param(1, (0, common_1.Body)()),
59
+ __metadata("design:type", Function),
60
+ __metadata("design:paramtypes", [String, create_ticket_reply_dto_1.CreateTicketReplyDto]),
61
+ __metadata("design:returntype", Promise)
62
+ ], TicketItemsController.prototype, "createPublicReply", null);
63
+ __decorate([
64
+ (0, common_1.Post)(':id/internal-note'),
65
+ __param(0, (0, common_1.Param)('id')),
66
+ __param(1, (0, common_1.Body)()),
67
+ __metadata("design:type", Function),
68
+ __metadata("design:paramtypes", [String, create_ticket_internal_note_dto_1.CreateTicketInternalNoteDto]),
69
+ __metadata("design:returntype", Promise)
70
+ ], TicketItemsController.prototype, "createInternalNote", null);
71
+ __decorate([
72
+ (0, common_1.Patch)(':id/assign'),
73
+ __param(0, (0, common_1.Param)('id')),
74
+ __param(1, (0, common_1.Body)()),
75
+ __metadata("design:type", Function),
76
+ __metadata("design:paramtypes", [String, assign_ticket_owner_dto_1.AssignTicketOwnerDto]),
77
+ __metadata("design:returntype", Promise)
78
+ ], TicketItemsController.prototype, "assignOwner", null);
79
+ __decorate([
80
+ (0, common_1.Patch)(':id/status'),
81
+ __param(0, (0, common_1.Param)('id')),
82
+ __param(1, (0, common_1.Body)()),
83
+ __metadata("design:type", Function),
84
+ __metadata("design:paramtypes", [String, update_ticket_status_dto_1.UpdateTicketStatusDto]),
85
+ __metadata("design:returntype", Promise)
86
+ ], TicketItemsController.prototype, "updateStatus", null);
87
+ __decorate([
88
+ (0, common_1.Patch)(':id/priority'),
89
+ __param(0, (0, common_1.Param)('id')),
90
+ __param(1, (0, common_1.Body)()),
91
+ __metadata("design:type", Function),
92
+ __metadata("design:paramtypes", [String, update_ticket_priority_dto_1.UpdateTicketPriorityDto]),
93
+ __metadata("design:returntype", Promise)
94
+ ], TicketItemsController.prototype, "updatePriority", null);
95
+ exports.TicketItemsController = TicketItemsController = __decorate([
96
+ (0, api_1.Role)(),
97
+ (0, common_1.Controller)('ticket'),
98
+ __metadata("design:paramtypes", [ticket_service_1.TicketService])
99
+ ], TicketItemsController);
100
+ //# sourceMappingURL=ticket-items.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-items.controller.js","sourceRoot":"","sources":["../src/ticket-items.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sCAAoC;AACpC,2CAA2E;AAC3E,2EAAqE;AACrE,2FAAoF;AACpF,2EAAqE;AACrE,iFAA2E;AAC3E,6EAAuE;AACvE,qDAAiD;AAI1C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAGvD,AAAN,KAAK,CAAC,aAAa,CAAc,EAAU;QACzC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CACR,EAAU,EACf,IAA0B;QAElC,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CACT,EAAU,EACf,IAAiC;QAEzC,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAc,EAAU,EAAU,IAA0B;QAC3E,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CACH,EAAU,EACf,IAA2B;QAEnC,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CACL,EAAU,EACf,IAA6B;QAErC,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF,CAAA;AA5CY,sDAAqB;AAI1B;IADL,IAAA,YAAG,EAAC,KAAK,CAAC;IACU,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;0DAE/B;AAGK;IADL,IAAA,aAAI,EAAC,WAAW,CAAC;IAEf,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,8CAAoB;;8DAGnC;AAGK;IADL,IAAA,aAAI,EAAC,mBAAmB,CAAC;IAEvB,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,6DAA2B;;+DAG1C;AAGK;IADL,IAAA,cAAK,EAAC,YAAY,CAAC;IACD,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,8CAAoB;;wDAE5E;AAGK;IADL,IAAA,cAAK,EAAC,YAAY,CAAC;IAEjB,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,gDAAqB;;yDAGpC;AAGK;IADL,IAAA,cAAK,EAAC,cAAc,CAAC;IAEnB,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IACX,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,oDAAuB;;2DAGtC;gCA3CU,qBAAqB;IAFjC,IAAA,UAAI,GAAE;IACN,IAAA,mBAAU,EAAC,QAAQ,CAAC;qCAEyB,8BAAa;GAD9C,qBAAqB,CA4CjC"}
@@ -0,0 +1,11 @@
1
+ import { UpdateTicketSettingsDto } from './dto/update-ticket-settings.dto';
2
+ import { TicketService } from './ticket.service';
3
+ export declare class TicketSettingsController {
4
+ private readonly ticketService;
5
+ constructor(ticketService: TicketService);
6
+ getSettings(): Promise<{
7
+ items: any[];
8
+ }>;
9
+ updateSettings(data: UpdateTicketSettingsDto): Promise<UpdateTicketSettingsDto>;
10
+ }
11
+ //# sourceMappingURL=ticket-settings.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-settings.controller.d.ts","sourceRoot":"","sources":["../src/ticket-settings.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAEa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAGnD,WAAW;;;IAKX,cAAc,CAAS,IAAI,EAAE,uBAAuB;CAG3D"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TicketSettingsController = void 0;
16
+ const api_1 = require("@hed-hog/api");
17
+ const common_1 = require("@nestjs/common");
18
+ const update_ticket_settings_dto_1 = require("./dto/update-ticket-settings.dto");
19
+ const ticket_service_1 = require("./ticket.service");
20
+ let TicketSettingsController = class TicketSettingsController {
21
+ constructor(ticketService) {
22
+ this.ticketService = ticketService;
23
+ }
24
+ async getSettings() {
25
+ return this.ticketService.getSettings();
26
+ }
27
+ async updateSettings(data) {
28
+ return this.ticketService.updateSettings(data);
29
+ }
30
+ };
31
+ exports.TicketSettingsController = TicketSettingsController;
32
+ __decorate([
33
+ (0, common_1.Get)(),
34
+ __metadata("design:type", Function),
35
+ __metadata("design:paramtypes", []),
36
+ __metadata("design:returntype", Promise)
37
+ ], TicketSettingsController.prototype, "getSettings", null);
38
+ __decorate([
39
+ (0, common_1.Patch)(),
40
+ __param(0, (0, common_1.Body)()),
41
+ __metadata("design:type", Function),
42
+ __metadata("design:paramtypes", [update_ticket_settings_dto_1.UpdateTicketSettingsDto]),
43
+ __metadata("design:returntype", Promise)
44
+ ], TicketSettingsController.prototype, "updateSettings", null);
45
+ exports.TicketSettingsController = TicketSettingsController = __decorate([
46
+ (0, api_1.Role)(),
47
+ (0, common_1.Controller)('ticket/settings'),
48
+ __metadata("design:paramtypes", [ticket_service_1.TicketService])
49
+ ], TicketSettingsController);
50
+ //# sourceMappingURL=ticket-settings.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-settings.controller.js","sourceRoot":"","sources":["../src/ticket-settings.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sCAAoC;AACpC,2CAA8D;AAC9D,iFAA2E;AAC3E,qDAAiD;AAI1C,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAGvD,AAAN,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAC1C,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CAAS,IAA6B;QACxD,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AAZY,4DAAwB;AAI7B;IADL,IAAA,YAAG,GAAE;;;;2DAGL;AAGK;IADL,IAAA,cAAK,GAAE;IACc,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAO,oDAAuB;;8DAEzD;mCAXU,wBAAwB;IAFpC,IAAA,UAAI,GAAE;IACN,IAAA,mBAAU,EAAC,iBAAiB,CAAC;qCAEgB,8BAAa;GAD9C,wBAAwB,CAYpC"}
@@ -0,0 +1,3 @@
1
+ export declare class TicketModule {
2
+ }
3
+ //# sourceMappingURL=ticket.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.module.d.ts","sourceRoot":"","sources":["../src/ticket.module.ts"],"names":[],"mappings":"AAaA,qBAkBa,YAAY;CAAG"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TicketModule = void 0;
10
+ const api_locale_1 = require("@hed-hog/api-locale");
11
+ const api_pagination_1 = require("@hed-hog/api-pagination");
12
+ const api_prisma_1 = require("@hed-hog/api-prisma");
13
+ const common_1 = require("@nestjs/common");
14
+ const config_1 = require("@nestjs/config");
15
+ const ticket_ai_review_controller_1 = require("./ticket-ai-review.controller");
16
+ const ticket_channel_accounts_controller_1 = require("./ticket-channel-accounts.controller");
17
+ const ticket_channels_controller_1 = require("./ticket-channels.controller");
18
+ const ticket_data_controller_1 = require("./ticket-data.controller");
19
+ const ticket_items_controller_1 = require("./ticket-items.controller");
20
+ const ticket_settings_controller_1 = require("./ticket-settings.controller");
21
+ const ticket_service_1 = require("./ticket.service");
22
+ let TicketModule = class TicketModule {
23
+ };
24
+ exports.TicketModule = TicketModule;
25
+ exports.TicketModule = TicketModule = __decorate([
26
+ (0, common_1.Module)({
27
+ imports: [
28
+ config_1.ConfigModule.forRoot(),
29
+ (0, common_1.forwardRef)(() => api_pagination_1.PaginationModule),
30
+ (0, common_1.forwardRef)(() => api_prisma_1.PrismaModule),
31
+ (0, common_1.forwardRef)(() => api_locale_1.LocaleModule)
32
+ ],
33
+ controllers: [
34
+ ticket_data_controller_1.TicketDataController,
35
+ ticket_items_controller_1.TicketItemsController,
36
+ ticket_channels_controller_1.TicketChannelsController,
37
+ ticket_channel_accounts_controller_1.TicketChannelAccountsController,
38
+ ticket_settings_controller_1.TicketSettingsController,
39
+ ticket_ai_review_controller_1.TicketAiReviewController,
40
+ ],
41
+ providers: [ticket_service_1.TicketService],
42
+ exports: [ticket_service_1.TicketService],
43
+ })
44
+ ], TicketModule);
45
+ //# sourceMappingURL=ticket.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.module.js","sourceRoot":"","sources":["../src/ticket.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAmD;AACnD,4DAA2D;AAC3D,oDAAmD;AACnD,2CAAoD;AACpD,2CAA8C;AAC9C,+EAAyE;AACzE,6FAAuF;AACvF,6EAAwE;AACxE,qEAAgE;AAChE,uEAAkE;AAClE,6EAAwE;AACxE,qDAAiD;AAoB1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IAlBxB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,EAAE;YACtB,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,iCAAgB,CAAC;YAClC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,yBAAY,CAAC;SAC/B;QACD,WAAW,EAAE;YACX,6CAAoB;YACpB,+CAAqB;YACrB,qDAAwB;YACxB,oEAA+B;YAC/B,qDAAwB;YACxB,sDAAwB;SACzB;QACD,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
@@ -0,0 +1,88 @@
1
+ import { AssignTicketOwnerDto } from './dto/assign-ticket-owner.dto';
2
+ import { CreateTicketChannelAccountDto } from './dto/create-ticket-channel-account.dto';
3
+ import { CreateTicketChannelDto } from './dto/create-ticket-channel.dto';
4
+ import { CreateTicketInternalNoteDto } from './dto/create-ticket-internal-note.dto';
5
+ import { CreateTicketReplyDto } from './dto/create-ticket-reply.dto';
6
+ import { UpdateTicketChannelAccountDto } from './dto/update-ticket-channel-account.dto';
7
+ import { UpdateTicketChannelDto } from './dto/update-ticket-channel.dto';
8
+ import { UpdateTicketPriorityDto } from './dto/update-ticket-priority.dto';
9
+ import { UpdateTicketSettingsDto } from './dto/update-ticket-settings.dto';
10
+ import { UpdateTicketStatusDto } from './dto/update-ticket-status.dto';
11
+ export declare class TicketService {
12
+ getDashboard(): Promise<{
13
+ items: any[];
14
+ }>;
15
+ getInbox(): Promise<{
16
+ items: any[];
17
+ }>;
18
+ getAiReviewQueue(): Promise<{
19
+ items: any[];
20
+ }>;
21
+ getReports(): Promise<{
22
+ items: any[];
23
+ }>;
24
+ listTickets(): Promise<{
25
+ items: any[];
26
+ }>;
27
+ getTicketById(id: number): Promise<{
28
+ id: number;
29
+ }>;
30
+ createPublicReply(id: number, data: CreateTicketReplyDto): Promise<{
31
+ subject?: string;
32
+ body?: string;
33
+ id: number;
34
+ }>;
35
+ createInternalNote(id: number, data: CreateTicketInternalNoteDto): Promise<{
36
+ body?: string;
37
+ id: number;
38
+ }>;
39
+ assignOwner(id: number, data: AssignTicketOwnerDto): Promise<{
40
+ owner_person_id?: number;
41
+ id: number;
42
+ }>;
43
+ updateStatus(id: number, data: UpdateTicketStatusDto): Promise<{
44
+ status?: string;
45
+ id: number;
46
+ }>;
47
+ updatePriority(id: number, data: UpdateTicketPriorityDto): Promise<{
48
+ priority?: string;
49
+ id: number;
50
+ }>;
51
+ getChannels(): Promise<{
52
+ items: any[];
53
+ }>;
54
+ createChannel(data: CreateTicketChannelDto): Promise<CreateTicketChannelDto>;
55
+ updateChannel(id: number, data: UpdateTicketChannelDto): Promise<{
56
+ name?: string;
57
+ status?: string;
58
+ id: number;
59
+ }>;
60
+ deleteChannel(id: number): Promise<{
61
+ id: number;
62
+ deleted: boolean;
63
+ }>;
64
+ getChannelAccounts(): Promise<{
65
+ items: any[];
66
+ }>;
67
+ createChannelAccount(data: CreateTicketChannelAccountDto): Promise<CreateTicketChannelAccountDto>;
68
+ updateChannelAccount(id: number, data: UpdateTicketChannelAccountDto): Promise<{
69
+ name?: string;
70
+ external_identifier?: string;
71
+ status?: string;
72
+ ai_enabled?: boolean;
73
+ ai_model?: string;
74
+ id: number;
75
+ }>;
76
+ deleteChannelAccount(id: number): Promise<{
77
+ id: number;
78
+ deleted: boolean;
79
+ }>;
80
+ getSettings(): Promise<{
81
+ items: any[];
82
+ }>;
83
+ updateSettings(data: UpdateTicketSettingsDto): Promise<UpdateTicketSettingsDto>;
84
+ getRoleMatrix(): Promise<{
85
+ items: any[];
86
+ }>;
87
+ }
88
+ //# sourceMappingURL=ticket.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.service.d.ts","sourceRoot":"","sources":["../src/ticket.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,qBACa,aAAa;IAClB,YAAY;;;IAIZ,QAAQ;;;IAIR,gBAAgB;;;IAIhB,UAAU;;;IAIV,WAAW;;;IAIX,aAAa,CAAC,EAAE,EAAE,MAAM;;;IAIxB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB;;;;;IAIxD,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B;;;;IAIhE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB;;;;IAIlD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB;;;;IAIpD,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB;;;;IAIxD,WAAW;;;IAIX,aAAa,CAAC,IAAI,EAAE,sBAAsB;IAI1C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB;;;;;IAItD,aAAa,CAAC,EAAE,EAAE,MAAM;;;;IAIxB,kBAAkB;;;IAIlB,oBAAoB,CAAC,IAAI,EAAE,6BAA6B;IAIxD,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B;;;;;;;;IAIpE,oBAAoB,CAAC,EAAE,EAAE,MAAM;;;;IAI/B,WAAW;;;IAIX,cAAc,CAAC,IAAI,EAAE,uBAAuB;IAI5C,aAAa;;;CAGpB"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TicketService = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ let TicketService = class TicketService {
12
+ async getDashboard() {
13
+ return { items: [] };
14
+ }
15
+ async getInbox() {
16
+ return { items: [] };
17
+ }
18
+ async getAiReviewQueue() {
19
+ return { items: [] };
20
+ }
21
+ async getReports() {
22
+ return { items: [] };
23
+ }
24
+ async listTickets() {
25
+ return { items: [] };
26
+ }
27
+ async getTicketById(id) {
28
+ return { id };
29
+ }
30
+ async createPublicReply(id, data) {
31
+ return Object.assign({ id }, data);
32
+ }
33
+ async createInternalNote(id, data) {
34
+ return Object.assign({ id }, data);
35
+ }
36
+ async assignOwner(id, data) {
37
+ return Object.assign({ id }, data);
38
+ }
39
+ async updateStatus(id, data) {
40
+ return Object.assign({ id }, data);
41
+ }
42
+ async updatePriority(id, data) {
43
+ return Object.assign({ id }, data);
44
+ }
45
+ async getChannels() {
46
+ return { items: [] };
47
+ }
48
+ async createChannel(data) {
49
+ return data;
50
+ }
51
+ async updateChannel(id, data) {
52
+ return Object.assign({ id }, data);
53
+ }
54
+ async deleteChannel(id) {
55
+ return { id, deleted: true };
56
+ }
57
+ async getChannelAccounts() {
58
+ return { items: [] };
59
+ }
60
+ async createChannelAccount(data) {
61
+ return data;
62
+ }
63
+ async updateChannelAccount(id, data) {
64
+ return Object.assign({ id }, data);
65
+ }
66
+ async deleteChannelAccount(id) {
67
+ return { id, deleted: true };
68
+ }
69
+ async getSettings() {
70
+ return { items: [] };
71
+ }
72
+ async updateSettings(data) {
73
+ return data;
74
+ }
75
+ async getRoleMatrix() {
76
+ return { items: [] };
77
+ }
78
+ };
79
+ exports.TicketService = TicketService;
80
+ exports.TicketService = TicketService = __decorate([
81
+ (0, common_1.Injectable)()
82
+ ], TicketService);
83
+ //# sourceMappingURL=ticket.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket.service.js","sourceRoot":"","sources":["../src/ticket.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAarC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,KAAK,CAAC,YAAY;QAChB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAU,EAAE,IAA0B;QAC5D,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,IAAiC;QACpE,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,IAA0B;QACtD,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,IAA2B;QACxD,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU,EAAE,IAA6B;QAC5D,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA4B;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,IAA4B;QAC1D,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAmC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,IAAmC;QACxE,uBAAS,EAAE,IAAK,IAAI,EAAG;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU;QACnC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAA6B;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAxFY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;GACA,aAAa,CAwFzB"}
@@ -0,0 +1,164 @@
1
+ - icon: message-square-text
2
+ name:
3
+ en: Tickets
4
+ pt: Tickets
5
+ slug: /ticket
6
+ order: 400
7
+ relations:
8
+ role:
9
+ - where:
10
+ slug: admin
11
+ - where:
12
+ slug: admin-ticket
13
+ - where:
14
+ slug: operator-ticket
15
+ - where:
16
+ slug: analyst-ticket
17
+
18
+ - menu_id:
19
+ where:
20
+ slug: /ticket
21
+ icon: layout-dashboard
22
+ url: /ticket/dashboard
23
+ name:
24
+ en: Dashboard
25
+ pt: Dashboard
26
+ slug: /ticket/dashboard
27
+ order: 401
28
+ relations:
29
+ role:
30
+ - where:
31
+ slug: admin
32
+ - where:
33
+ slug: admin-ticket
34
+ - where:
35
+ slug: operator-ticket
36
+ - where:
37
+ slug: analyst-ticket
38
+
39
+ - menu_id:
40
+ where:
41
+ slug: /ticket
42
+ icon: inbox
43
+ url: /ticket/inbox
44
+ name:
45
+ en: Inbox
46
+ pt: Inbox
47
+ slug: /ticket/inbox
48
+ order: 402
49
+ relations:
50
+ role:
51
+ - where:
52
+ slug: admin
53
+ - where:
54
+ slug: admin-ticket
55
+ - where:
56
+ slug: operator-ticket
57
+ - where:
58
+ slug: analyst-ticket
59
+
60
+ - menu_id:
61
+ where:
62
+ slug: /ticket
63
+ icon: wand-sparkles
64
+ url: /ticket/ai-review
65
+ name:
66
+ en: AI Review
67
+ pt: Revisao IA
68
+ slug: /ticket/ai-review
69
+ order: 403
70
+ relations:
71
+ role:
72
+ - where:
73
+ slug: admin
74
+ - where:
75
+ slug: admin-ticket
76
+ - where:
77
+ slug: operator-ticket
78
+
79
+ - menu_id:
80
+ where:
81
+ slug: /ticket
82
+ icon: chart-column
83
+ url: /ticket/reports
84
+ name:
85
+ en: Reports
86
+ pt: Relatorios
87
+ slug: /ticket/reports
88
+ order: 404
89
+ relations:
90
+ role:
91
+ - where:
92
+ slug: admin
93
+ - where:
94
+ slug: admin-ticket
95
+ - where:
96
+ slug: analyst-ticket
97
+
98
+ - menu_id:
99
+ where:
100
+ slug: /ticket
101
+ icon: radio
102
+ url: /ticket/channels
103
+ name:
104
+ en: Channels
105
+ pt: Canais
106
+ slug: /ticket/channels
107
+ order: 405
108
+ relations:
109
+ role:
110
+ - where:
111
+ slug: admin
112
+ - where:
113
+ slug: admin-ticket
114
+
115
+ - menu_id:
116
+ where:
117
+ slug: /ticket
118
+ icon: link-2
119
+ url: /ticket/channel-accounts
120
+ name:
121
+ en: Channel Accounts
122
+ pt: Contas de Canal
123
+ slug: /ticket/channel-accounts
124
+ order: 406
125
+ relations:
126
+ role:
127
+ - where:
128
+ slug: admin
129
+ - where:
130
+ slug: admin-ticket
131
+
132
+ - menu_id:
133
+ where:
134
+ slug: /ticket
135
+ icon: settings-2
136
+ url: /ticket/settings
137
+ name:
138
+ en: Settings
139
+ pt: Configuracoes
140
+ slug: /ticket/settings
141
+ order: 407
142
+ relations:
143
+ role:
144
+ - where:
145
+ slug: admin
146
+ - where:
147
+ slug: admin-ticket
148
+
149
+ - menu_id:
150
+ where:
151
+ slug: /ticket
152
+ icon: shield-check
153
+ url: /ticket/roles
154
+ name:
155
+ en: Roles
156
+ pt: Papeis
157
+ slug: /ticket/roles
158
+ order: 408
159
+ relations:
160
+ role:
161
+ - where:
162
+ slug: admin
163
+ - where:
164
+ slug: admin-ticket
@@ -0,0 +1,23 @@
1
+ - slug: admin-ticket
2
+ name:
3
+ en: Ticket Administrator
4
+ pt: Administrador de Tickets
5
+ description:
6
+ en: Full omnichannel ticket administration with channels, settings, and governance access.
7
+ pt: Administracao completa de tickets omnichannel com acesso a canais, configuracoes e governanca.
8
+
9
+ - slug: operator-ticket
10
+ name:
11
+ en: Ticket Operator
12
+ pt: Operador de Tickets
13
+ description:
14
+ en: Operational ticket handling with replies, internal notes, status updates, and ownership actions.
15
+ pt: Atuacao operacional em tickets com resposta, notas internas, alteracao de status e atribuicao de ownership.
16
+
17
+ - slug: analyst-ticket
18
+ name:
19
+ en: Ticket Analyst
20
+ pt: Analista de Tickets
21
+ description:
22
+ en: Read-only access to ticket views and operational reports.
23
+ pt: Acesso de leitura para visoes de tickets e relatorios operacionais.