@m6d/cortex-server 1.6.0 → 1.8.0

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 (254) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/src/{adapters → lib/adapters}/database.d.ts +16 -1
  3. package/dist/src/lib/ai/context/compressor.d.ts +18 -0
  4. package/dist/src/{ai → lib/ai}/context/index.d.ts +2 -1
  5. package/dist/src/lib/ai/context/intra-turn-compressor.d.ts +24 -0
  6. package/dist/src/{ai → lib/ai}/context/types.d.ts +2 -0
  7. package/dist/src/lib/config.d.ts +153 -0
  8. package/dist/src/{db → lib/db}/schema.d.ts +104 -1
  9. package/dist/src/{index.d.ts → lib/index.d.ts} +2 -2
  10. package/dist/src/{types.d.ts → lib/types.d.ts} +15 -14
  11. package/index.ts +1 -1
  12. package/package.json +8 -3
  13. package/src/{adapters → lib/adapters}/database.ts +20 -1
  14. package/src/{adapters → lib/adapters}/minio.ts +2 -1
  15. package/src/{adapters → lib/adapters}/mssql.ts +38 -2
  16. package/src/lib/ai/context/compressor.ts +259 -0
  17. package/src/{ai → lib/ai}/context/index.ts +6 -1
  18. package/src/lib/ai/context/intra-turn-compressor.ts +264 -0
  19. package/src/{ai → lib/ai}/context/types.ts +4 -1
  20. package/src/{ai → lib/ai}/index.ts +114 -13
  21. package/src/lib/ai/prompt.ts +354 -0
  22. package/src/{ai → lib/ai}/tools/execute-code.tool.ts +5 -2
  23. package/src/{auth → lib/auth}/middleware.ts +7 -0
  24. package/src/lib/config.ts +181 -0
  25. package/src/{db/migrations/20260309012148_cloudy_maria_hill → lib/db/migrations/20260326231647_nice_speedball}/migration.sql +12 -0
  26. package/src/{db/migrations/20260309012148_cloudy_maria_hill → lib/db/migrations/20260326231647_nice_speedball}/snapshot.json +106 -1
  27. package/src/{db → lib/db}/schema.ts +15 -2
  28. package/src/{factory.ts → lib/factory.ts} +1 -0
  29. package/src/{index.ts → lib/index.ts} +3 -1
  30. package/src/{routes → lib/routes}/files.ts +9 -2
  31. package/src/{routes → lib/routes}/threads.ts +8 -1
  32. package/src/{types.ts → lib/types.ts} +16 -15
  33. package/src/sample/db/client.ts +9 -0
  34. package/src/sample/db/migrations/20260411023125_rich_purple_man/migration.sql +5 -0
  35. package/src/sample/db/migrations/20260411023125_rich_purple_man/snapshot.json +50 -0
  36. package/src/sample/db/schema.ts +10 -0
  37. package/src/sample/domains/account/concepts/session.concept.ts +17 -0
  38. package/src/sample/domains/account/endpoints/listCurrentSessions.endpoint.ts +31 -0
  39. package/src/sample/domains/account/endpoints/revokeAllOtherSessions.endpoint.ts +22 -0
  40. package/src/sample/domains/account/endpoints/revokeCurrentSession.endpoint.ts +33 -0
  41. package/src/sample/domains/account/index.ts +18 -0
  42. package/src/sample/domains/appraisals/concepts/appraisalCycle.concept.ts +15 -0
  43. package/src/sample/domains/appraisals/concepts/appraisalRecord.concept.ts +20 -0
  44. package/src/sample/domains/appraisals/concepts/appraisalRecordCompetency.concept.ts +10 -0
  45. package/src/sample/domains/appraisals/concepts/appraisalRecordFunctionalRequirement.concept.ts +10 -0
  46. package/src/sample/domains/appraisals/concepts/appraisalRecordGoal.concept.ts +17 -0
  47. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordById.endpoint.ts +321 -0
  48. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordCompetencies.endpoint.ts +120 -0
  49. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordFunctionalRequirements.endpoint.ts +126 -0
  50. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordGoals.endpoint.ts +104 -0
  51. package/src/sample/domains/appraisals/endpoints/getAppraisalRecordScore.endpoint.ts +58 -0
  52. package/src/sample/domains/appraisals/endpoints/listAppraisalCyclesSimple.endpoint.ts +52 -0
  53. package/src/sample/domains/appraisals/endpoints/listAppraisalRecords.endpoint.ts +245 -0
  54. package/src/sample/domains/appraisals/endpoints/listAppraisalTemplatesSimple.endpoint.ts +52 -0
  55. package/src/sample/domains/appraisals/index.ts +40 -0
  56. package/src/sample/domains/appraisals/rules/appraisalRecordScoping.rule.ts +7 -0
  57. package/src/sample/domains/attendance/concepts/attendancePermission.concept.ts +17 -0
  58. package/src/sample/domains/attendance/concepts/attendanceTransaction.concept.ts +17 -0
  59. package/src/sample/domains/attendance/concepts/publicHoliday.concept.ts +10 -0
  60. package/src/sample/domains/attendance/concepts/punch.concept.ts +19 -0
  61. package/src/sample/domains/attendance/endpoints/getAttendanceTransactionById.endpoint.ts +444 -0
  62. package/src/sample/domains/attendance/endpoints/getCurrentAttendanceProfile.endpoint.ts +886 -0
  63. package/src/sample/domains/attendance/endpoints/getCurrentAttendanceStatistics.endpoint.ts +49 -0
  64. package/src/sample/domains/attendance/endpoints/listAttendancePermissions.endpoint.ts +176 -0
  65. package/src/sample/domains/attendance/endpoints/listAttendanceTransactionStates.endpoint.ts +26 -0
  66. package/src/sample/domains/attendance/endpoints/listAttendanceTransactions.endpoint.ts +373 -0
  67. package/src/sample/domains/attendance/endpoints/listPublicHolidaysSimple.endpoint.ts +52 -0
  68. package/src/sample/domains/attendance/endpoints/listPunchTypes.endpoint.ts +25 -0
  69. package/src/sample/domains/attendance/endpoints/listPunches.endpoint.ts +178 -0
  70. package/src/sample/domains/attendance/index.ts +41 -0
  71. package/src/sample/domains/attendance/services/attendancePermissions.service.ts +15 -0
  72. package/src/sample/domains/employees/concepts/employee.concept.ts +20 -0
  73. package/src/sample/domains/employees/concepts/employeeBankAccount.concept.ts +19 -0
  74. package/src/sample/domains/employees/concepts/employeeChild.concept.ts +19 -0
  75. package/src/sample/domains/employees/concepts/employeeDocument.concept.ts +21 -0
  76. package/src/sample/domains/employees/concepts/employeeEvent.concept.ts +21 -0
  77. package/src/sample/domains/employees/concepts/employeeExperience.concept.ts +18 -0
  78. package/src/sample/domains/employees/concepts/employeeJobLevelChange.concept.ts +21 -0
  79. package/src/sample/domains/employees/concepts/employeeMedal.concept.ts +20 -0
  80. package/src/sample/domains/employees/concepts/employeeQualification.concept.ts +20 -0
  81. package/src/sample/domains/employees/concepts/employeeSpouse.concept.ts +21 -0
  82. package/src/sample/domains/employees/concepts/employeeViolation.concept.ts +19 -0
  83. package/src/sample/domains/employees/endpoints/getCurrentEmployee.endpoint.ts +1651 -0
  84. package/src/sample/domains/employees/endpoints/getCurrentIdentity.endpoint.ts +197 -0
  85. package/src/sample/domains/employees/endpoints/getCurrentManagers.endpoint.ts +142 -0
  86. package/src/sample/domains/employees/endpoints/getEmployeeById.endpoint.ts +1659 -0
  87. package/src/sample/domains/employees/endpoints/getEmployeeStatistics.endpoint.ts +43 -0
  88. package/src/sample/domains/employees/endpoints/listBankAccounts.endpoint.ts +223 -0
  89. package/src/sample/domains/employees/endpoints/listChildren.endpoint.ts +211 -0
  90. package/src/sample/domains/employees/endpoints/listDocuments.endpoint.ts +222 -0
  91. package/src/sample/domains/employees/endpoints/listEmployeesSimple.endpoint.ts +156 -0
  92. package/src/sample/domains/employees/endpoints/listEvents.endpoint.ts +120 -0
  93. package/src/sample/domains/employees/endpoints/listExperiences.endpoint.ts +188 -0
  94. package/src/sample/domains/employees/endpoints/listJobLevelChanges.endpoint.ts +240 -0
  95. package/src/sample/domains/employees/endpoints/listMedals.endpoint.ts +266 -0
  96. package/src/sample/domains/employees/endpoints/listQualifications.endpoint.ts +265 -0
  97. package/src/sample/domains/employees/endpoints/listSpouses.endpoint.ts +278 -0
  98. package/src/sample/domains/employees/endpoints/listViolations.endpoint.ts +245 -0
  99. package/src/sample/domains/employees/index.ts +75 -0
  100. package/src/sample/domains/employees/services/employees.service.ts +181 -0
  101. package/src/sample/domains/index.ts +10 -0
  102. package/src/sample/domains/leaves/concepts/leave.concept.ts +21 -0
  103. package/src/sample/domains/leaves/concepts/leaveBalance.concept.ts +17 -0
  104. package/src/sample/domains/leaves/concepts/leaveBalanceTransaction.concept.ts +16 -0
  105. package/src/sample/domains/leaves/concepts/leaveType.concept.ts +13 -0
  106. package/src/sample/domains/leaves/concepts/leaveTypes.concept.ts +205 -0
  107. package/src/sample/domains/leaves/endpoints/getBalance.endpoint.ts +53 -0
  108. package/src/sample/domains/leaves/endpoints/getLeaveById.endpoint.ts +53 -0
  109. package/src/sample/domains/leaves/endpoints/listBalanceTransactions.endpoint.ts +196 -0
  110. package/src/sample/domains/leaves/endpoints/listBalanceTypes.endpoint.ts +26 -0
  111. package/src/sample/domains/leaves/endpoints/listBalances.endpoint.ts +201 -0
  112. package/src/sample/domains/leaves/endpoints/listLeaveTypes.endpoint.ts +28 -0
  113. package/src/sample/domains/leaves/endpoints/listLeaves.endpoint.ts +234 -0
  114. package/src/sample/domains/leaves/index.ts +38 -0
  115. package/src/sample/domains/leaves/services/leaveRequests.service.ts +232 -0
  116. package/src/sample/domains/notifications/concepts/notification.concept.ts +19 -0
  117. package/src/sample/domains/notifications/endpoints/countMyNotifications.endpoint.ts +21 -0
  118. package/src/sample/domains/notifications/endpoints/getMyNotification.endpoint.ts +57 -0
  119. package/src/sample/domains/notifications/endpoints/listMyNotifications.endpoint.ts +59 -0
  120. package/src/sample/domains/notifications/endpoints/markMyNotificationAsRead.endpoint.ts +32 -0
  121. package/src/sample/domains/notifications/index.ts +20 -0
  122. package/src/sample/domains/payroll/concepts/payslip.concept.ts +18 -0
  123. package/src/sample/domains/payroll/concepts/salaryCertificate.concept.ts +17 -0
  124. package/src/sample/domains/payroll/concepts/salaryCertificateRequestingEntity.concept.ts +8 -0
  125. package/src/sample/domains/payroll/endpoints/getPayslipById.endpoint.ts +238 -0
  126. package/src/sample/domains/payroll/endpoints/listPayslips.endpoint.ts +216 -0
  127. package/src/sample/domains/payroll/endpoints/listSalaryCertificateLanguages.endpoint.ts +25 -0
  128. package/src/sample/domains/payroll/endpoints/listSalaryCertificateRequestingEntities.endpoint.ts +62 -0
  129. package/src/sample/domains/payroll/endpoints/listSalaryCertificateTypes.endpoint.ts +24 -0
  130. package/src/sample/domains/payroll/endpoints/listSalaryCertificates.endpoint.ts +122 -0
  131. package/src/sample/domains/payroll/endpoints/previewSalaryCertificate.endpoint.ts +45 -0
  132. package/src/sample/domains/payroll/index.ts +32 -0
  133. package/src/sample/domains/payroll/rules/payrollEmployeeContext.rule.ts +7 -0
  134. package/src/sample/domains/payroll/services/salaryCertificates.service.ts +15 -0
  135. package/src/sample/domains/servicing/concepts/service.concept.ts +6 -0
  136. package/src/sample/domains/servicing/concepts/serviceRequest.concept.ts +12 -0
  137. package/src/sample/domains/servicing/concepts/serviceRequestApproval.concept.ts +9 -0
  138. package/src/sample/domains/servicing/endpoints/cancelServiceRequest.endpoint.ts +21 -0
  139. package/src/sample/domains/servicing/endpoints/createServiceRequest.endpoint.ts +511 -0
  140. package/src/sample/domains/servicing/endpoints/getServiceRequest.endpoint.ts +352 -0
  141. package/src/sample/domains/servicing/endpoints/getServiceRequestFormItems.endpoint.ts +219 -0
  142. package/src/sample/domains/servicing/endpoints/getServiceRequestTransactionFormItems.endpoint.ts +216 -0
  143. package/src/sample/domains/servicing/endpoints/getServiceStates.endpoint.ts +47 -0
  144. package/src/sample/domains/servicing/endpoints/invokeServiceRequestAction.endpoint.ts +139 -0
  145. package/src/sample/domains/servicing/endpoints/listServiceRequests.endpoint.ts +292 -0
  146. package/src/sample/domains/servicing/endpoints/listServices.endpoint.ts +108 -0
  147. package/src/sample/domains/servicing/endpoints/updateServiceRequest.endpoint.ts +355 -0
  148. package/src/sample/domains/servicing/index.ts +44 -0
  149. package/src/sample/domains/servicing/rules/checkValidActions.rule.ts +7 -0
  150. package/src/sample/domains/servicing/rules/createServiceRequest.rule.ts +7 -0
  151. package/src/sample/domains/servicing/rules/filterServiceRequestsByState.rule.ts +7 -0
  152. package/src/sample/domains/servicing/rules/passingOptionFields.rule.ts +7 -0
  153. package/src/sample/domains/shared/rules/pagination.rule.ts +7 -0
  154. package/src/sample/domains/suggestions/concepts/suggestion.concept.ts +19 -0
  155. package/src/sample/domains/suggestions/concepts/suggestionCategory.concept.ts +7 -0
  156. package/src/sample/domains/suggestions/concepts/suggestionImpactLevel.concept.ts +7 -0
  157. package/src/sample/domains/suggestions/endpoints/createSuggestion.endpoint.ts +705 -0
  158. package/src/sample/domains/suggestions/endpoints/deleteSuggestion.endpoint.ts +32 -0
  159. package/src/sample/domains/suggestions/endpoints/getSuggestionById.endpoint.ts +635 -0
  160. package/src/sample/domains/suggestions/endpoints/listSuggestionCategories.endpoint.ts +62 -0
  161. package/src/sample/domains/suggestions/endpoints/listSuggestionImpactLevels.endpoint.ts +62 -0
  162. package/src/sample/domains/suggestions/endpoints/listSuggestionStates.endpoint.ts +24 -0
  163. package/src/sample/domains/suggestions/endpoints/listSuggestions.endpoint.ts +132 -0
  164. package/src/sample/domains/suggestions/endpoints/updateSuggestion.endpoint.ts +690 -0
  165. package/src/sample/domains/suggestions/endpoints/updateSuggestionState.endpoint.ts +39 -0
  166. package/src/sample/domains/suggestions/index.ts +34 -0
  167. package/src/sample/domains/suggestions/rules/suggestionScope.rule.ts +7 -0
  168. package/src/sample/domains/surveys/concepts/survey.concept.ts +10 -0
  169. package/src/sample/domains/surveys/concepts/surveyResponse.concept.ts +14 -0
  170. package/src/sample/domains/surveys/endpoints/getSurveyResponseById.endpoint.ts +131 -0
  171. package/src/sample/domains/surveys/endpoints/getTargetedSurvey.endpoint.ts +129 -0
  172. package/src/sample/domains/surveys/endpoints/listTargetedSurveys.endpoint.ts +160 -0
  173. package/src/sample/domains/surveys/endpoints/respondToSurvey.endpoint.ts +144 -0
  174. package/src/sample/domains/surveys/index.ts +21 -0
  175. package/src/sample/drizzle.config.ts +11 -0
  176. package/src/sample/index.bak.ts +341 -0
  177. package/src/sample/index.ts +318 -0
  178. package/src/sample/official-statements/defaults.ts +57 -0
  179. package/src/sample/official-statements/routes.ts +137 -0
  180. package/src/sample/official-statements/service.ts +148 -0
  181. package/src/sample/official-statements/types.ts +23 -0
  182. package/dist/src/ai/context/compressor.d.ts +0 -7
  183. package/dist/src/ai/tools/call-endpoint.tool.d.ts +0 -7
  184. package/dist/src/config.d.ts +0 -159
  185. package/src/ai/context/compressor.ts +0 -47
  186. package/src/ai/prompt.ts +0 -126
  187. package/src/ai/tools/call-endpoint.tool.ts +0 -89
  188. package/src/config.ts +0 -164
  189. package/src/db/migrations/20260315000000_add_context_meta/migration.sql +0 -1
  190. package/dist/src/{adapters → lib/adapters}/minio.d.ts +0 -0
  191. package/dist/src/{adapters → lib/adapters}/mssql.d.ts +0 -0
  192. package/dist/src/{adapters → lib/adapters}/storage.d.ts +0 -0
  193. package/dist/src/{ai → lib/ai}/active-streams.d.ts +0 -0
  194. package/dist/src/{ai → lib/ai}/context/builder.d.ts +0 -0
  195. package/dist/src/{ai → lib/ai}/context/summarizer.d.ts +0 -0
  196. package/dist/src/{ai → lib/ai}/context/token-estimator.d.ts +0 -0
  197. package/dist/src/{ai → lib/ai}/fetch.d.ts +0 -0
  198. package/dist/src/{ai → lib/ai}/helpers.d.ts +0 -0
  199. package/dist/src/{ai → lib/ai}/index.d.ts +0 -0
  200. package/dist/src/{ai → lib/ai}/interceptors/request-interceptor.d.ts +0 -0
  201. package/dist/src/{ai → lib/ai}/prompt.d.ts +0 -0
  202. package/dist/src/{ai → lib/ai}/tools/capture-files.tool.d.ts +0 -0
  203. package/dist/src/{ai → lib/ai}/tools/execute-code.tool.d.ts +0 -0
  204. package/dist/src/{ai → lib/ai}/tools/query-graph.tool.d.ts +0 -0
  205. package/dist/src/{auth → lib/auth}/middleware.d.ts +0 -0
  206. package/dist/src/{cli → lib/cli}/extract-endpoints.d.ts +0 -0
  207. package/dist/src/{db → lib/db}/migrate.d.ts +0 -0
  208. package/dist/src/{factory.d.ts → lib/factory.d.ts} +0 -0
  209. package/dist/src/{graph → lib/graph}/expand-domains.d.ts +0 -0
  210. package/dist/src/{graph → lib/graph}/generate-cypher.d.ts +0 -0
  211. package/dist/src/{graph → lib/graph}/helpers.d.ts +2 -2
  212. /package/dist/src/{graph → lib/graph}/index.d.ts +0 -0
  213. /package/dist/src/{graph → lib/graph}/neo4j.d.ts +0 -0
  214. /package/dist/src/{graph → lib/graph}/resolver.d.ts +0 -0
  215. /package/dist/src/{graph → lib/graph}/seed.d.ts +0 -0
  216. /package/dist/src/{graph → lib/graph}/types.d.ts +0 -0
  217. /package/dist/src/{graph → lib/graph}/validate.d.ts +0 -0
  218. /package/dist/src/{routes → lib/routes}/chat.d.ts +0 -0
  219. /package/dist/src/{routes → lib/routes}/files.d.ts +0 -0
  220. /package/dist/src/{routes → lib/routes}/index.d.ts +0 -0
  221. /package/dist/src/{routes → lib/routes}/threads.d.ts +0 -0
  222. /package/dist/src/{routes → lib/routes}/ws.d.ts +0 -0
  223. /package/dist/src/{ws → lib/ws}/connections.d.ts +0 -0
  224. /package/dist/src/{ws → lib/ws}/events.d.ts +0 -0
  225. /package/dist/src/{ws → lib/ws}/index.d.ts +0 -0
  226. /package/dist/src/{ws → lib/ws}/notify.d.ts +0 -0
  227. /package/src/{adapters → lib/adapters}/storage.ts +0 -0
  228. /package/src/{ai → lib/ai}/active-streams.ts +0 -0
  229. /package/src/{ai → lib/ai}/context/builder.ts +0 -0
  230. /package/src/{ai → lib/ai}/context/summarizer.ts +0 -0
  231. /package/src/{ai → lib/ai}/context/token-estimator.ts +0 -0
  232. /package/src/{ai → lib/ai}/fetch.ts +0 -0
  233. /package/src/{ai → lib/ai}/helpers.ts +0 -0
  234. /package/src/{ai → lib/ai}/interceptors/request-interceptor.ts +0 -0
  235. /package/src/{ai → lib/ai}/tools/capture-files.tool.ts +0 -0
  236. /package/src/{ai → lib/ai}/tools/query-graph.tool.ts +0 -0
  237. /package/src/{cli → lib/cli}/extract-endpoints.ts +0 -0
  238. /package/src/{db → lib/db}/migrate.ts +0 -0
  239. /package/src/{graph → lib/graph}/expand-domains.ts +0 -0
  240. /package/src/{graph → lib/graph}/generate-cypher.ts +0 -0
  241. /package/src/{graph → lib/graph}/helpers.ts +0 -0
  242. /package/src/{graph → lib/graph}/index.ts +0 -0
  243. /package/src/{graph → lib/graph}/neo4j.ts +0 -0
  244. /package/src/{graph → lib/graph}/resolver.ts +0 -0
  245. /package/src/{graph → lib/graph}/seed.ts +0 -0
  246. /package/src/{graph → lib/graph}/types.ts +0 -0
  247. /package/src/{graph → lib/graph}/validate.ts +0 -0
  248. /package/src/{routes → lib/routes}/chat.ts +0 -0
  249. /package/src/{routes → lib/routes}/index.ts +0 -0
  250. /package/src/{routes → lib/routes}/ws.ts +0 -0
  251. /package/src/{ws → lib/ws}/connections.ts +0 -0
  252. /package/src/{ws → lib/ws}/events.ts +0 -0
  253. /package/src/{ws → lib/ws}/index.ts +0 -0
  254. /package/src/{ws → lib/ws}/notify.ts +0 -0
@@ -0,0 +1,234 @@
1
+ import { defineEndpoint } from "@m6d/cortex-server";
2
+ import { leaveConcept } from "../concepts/leave.concept";
3
+
4
+ export const listLeavesEndpoint = defineEndpoint({
5
+ name: "List leaves",
6
+ path: "/leaves",
7
+ method: "GET",
8
+ description:
9
+ "List leaves with filtering and pagination. Can return the leaves for the current employee given the employee id as filter.",
10
+ queries: [leaveConcept],
11
+ returns: [{ concept: leaveConcept }],
12
+
13
+ paramDescriptions: {
14
+ pageNumber: "0-based",
15
+ },
16
+
17
+ // @auto-generated-start
18
+ autoGenerated: {
19
+ params: [
20
+ {
21
+ name: "orderByProperties",
22
+ required: false,
23
+ type: "object",
24
+ isArray: true,
25
+ properties: [
26
+ { name: "property", required: false, type: "string" },
27
+ { name: "direction", required: false, type: "'asc' | 'desc'" },
28
+ ],
29
+ },
30
+ {
31
+ name: "filterCountExclusions",
32
+ required: false,
33
+ type: "'employee_ids'",
34
+ isArray: true,
35
+ },
36
+ { name: "pageNumber", required: false, type: "number" },
37
+ { name: "pageSize", required: false, type: "number" },
38
+ { name: "employeeIds", required: false, type: "uuid", isArray: true },
39
+ { name: "types", required: false, type: "string", isArray: true },
40
+ { name: "from", required: false, type: "datetime" },
41
+ { name: "to", required: false, type: "datetime" },
42
+ { name: "employee.keyword", required: false, type: "string" },
43
+ { name: "employee.number", required: false, type: "string" },
44
+ { name: "employee.genders", required: false, type: "string", isArray: true },
45
+ { name: "employee.jobClassificationIds", required: false, type: "uuid", isArray: true },
46
+ { name: "employee.jobLevelIds", required: false, type: "uuid", isArray: true },
47
+ { name: "employee.departmentIds", required: false, type: "uuid", isArray: true },
48
+ { name: "employee.jobTitleIds", required: false, type: "uuid", isArray: true },
49
+ { name: "employee.displayAllUnderHierarchy", required: false, type: "boolean" },
50
+ ] as const,
51
+ body: [] as const,
52
+ response: [
53
+ {
54
+ name: "items",
55
+ required: false,
56
+ type: "object",
57
+ isArray: true,
58
+ properties: [
59
+ { name: "id", required: false, type: "uuid" },
60
+ {
61
+ name: "employee",
62
+ required: false,
63
+ type: "object",
64
+ properties: [
65
+ { name: "id", required: false, type: "uuid" },
66
+ {
67
+ name: "name",
68
+ required: false,
69
+ type: "object",
70
+ properties: [
71
+ { name: "ar", required: false, type: "string" },
72
+ { name: "en", required: false, type: "string" },
73
+ ],
74
+ },
75
+ {
76
+ name: "nationality",
77
+ required: false,
78
+ type: "object",
79
+ properties: [
80
+ { name: "id", required: false, type: "uuid" },
81
+ {
82
+ name: "name",
83
+ required: false,
84
+ type: "object",
85
+ properties: [
86
+ { name: "ar", required: false, type: "string" },
87
+ { name: "en", required: false, type: "string" },
88
+ ],
89
+ },
90
+ ],
91
+ },
92
+ { name: "dateOfBirth", required: false, type: "datetime" },
93
+ {
94
+ name: "photoFile",
95
+ required: false,
96
+ type: "object",
97
+ properties: [
98
+ { name: "id", required: false, type: "uuid" },
99
+ { name: "createdTime", required: false, type: "datetime" },
100
+ {
101
+ name: "name",
102
+ required: false,
103
+ type: "object",
104
+ properties: [
105
+ { name: "ar", required: false, type: "string" },
106
+ { name: "en", required: false, type: "string" },
107
+ ],
108
+ },
109
+ {
110
+ name: "description",
111
+ required: false,
112
+ type: "object",
113
+ properties: [
114
+ { name: "ar", required: false, type: "string" },
115
+ { name: "en", required: false, type: "string" },
116
+ ],
117
+ },
118
+ { name: "sizeInBytes", required: false, type: "number" },
119
+ { name: "contentType", required: false, type: "string" },
120
+ ],
121
+ },
122
+ { name: "email", required: false, type: "string" },
123
+ { name: "number", required: false, type: "string" },
124
+ { name: "isConfidential", required: false, type: "boolean" },
125
+ {
126
+ name: "department",
127
+ required: false,
128
+ type: "object",
129
+ properties: [
130
+ { name: "id", required: false, type: "uuid" },
131
+ {
132
+ name: "name",
133
+ required: false,
134
+ type: "object",
135
+ properties: [
136
+ { name: "ar", required: false, type: "string" },
137
+ { name: "en", required: false, type: "string" },
138
+ ],
139
+ },
140
+ ],
141
+ },
142
+ { name: "hireDate", required: false, type: "datetime" },
143
+ {
144
+ name: "jobClassification",
145
+ required: false,
146
+ type: "object",
147
+ properties: [
148
+ { name: "id", required: false, type: "uuid" },
149
+ {
150
+ name: "name",
151
+ required: false,
152
+ type: "object",
153
+ properties: [
154
+ { name: "ar", required: false, type: "string" },
155
+ { name: "en", required: false, type: "string" },
156
+ ],
157
+ },
158
+ ],
159
+ },
160
+ {
161
+ name: "jobLevel",
162
+ required: false,
163
+ type: "object",
164
+ properties: [
165
+ { name: "id", required: false, type: "uuid" },
166
+ {
167
+ name: "name",
168
+ required: false,
169
+ type: "object",
170
+ properties: [
171
+ { name: "ar", required: false, type: "string" },
172
+ { name: "en", required: false, type: "string" },
173
+ ],
174
+ },
175
+ ],
176
+ },
177
+ {
178
+ name: "jobTitle",
179
+ required: false,
180
+ type: "object",
181
+ properties: [
182
+ { name: "id", required: false, type: "uuid" },
183
+ {
184
+ name: "name",
185
+ required: false,
186
+ type: "object",
187
+ properties: [
188
+ { name: "ar", required: false, type: "string" },
189
+ { name: "en", required: false, type: "string" },
190
+ ],
191
+ },
192
+ ],
193
+ },
194
+ {
195
+ name: "jobCategory",
196
+ required: false,
197
+ type: "object",
198
+ properties: [
199
+ { name: "id", required: false, type: "uuid" },
200
+ {
201
+ name: "name",
202
+ required: false,
203
+ type: "object",
204
+ properties: [
205
+ { name: "ar", required: false, type: "string" },
206
+ { name: "en", required: false, type: "string" },
207
+ ],
208
+ },
209
+ ],
210
+ },
211
+ ],
212
+ },
213
+ { name: "type", required: false, type: "string" },
214
+ { name: "from", required: false, type: "datetime" },
215
+ { name: "to", required: false, type: "datetime" },
216
+ { name: "dayCount", required: false, type: "number" },
217
+ { name: "daysBalanceBeforeLeave", required: false, type: "number" },
218
+ {
219
+ name: "serviceRequest",
220
+ required: false,
221
+ type: "object",
222
+ properties: [{ name: "id", required: false, type: "uuid" }],
223
+ },
224
+ ],
225
+ },
226
+ { name: "count", required: false, type: "number" },
227
+ { name: "filteredCount", required: false, type: "number" },
228
+ ] as const,
229
+ successStatus: 200,
230
+ errorStatuses: [],
231
+ responseKind: "object",
232
+ } as const,
233
+ // @auto-generated-end
234
+ });
@@ -0,0 +1,38 @@
1
+ import { defineDomain } from "@m6d/cortex-server";
2
+ import type { DomainDef } from "@m6d/cortex-server";
3
+ import { leaveConcept } from "./concepts/leave.concept";
4
+ import { leaveBalanceConcept } from "./concepts/leaveBalance.concept";
5
+ import { leaveBalanceTransactionConcept } from "./concepts/leaveBalanceTransaction.concept";
6
+ import { leaveTypeConcept } from "./concepts/leaveType.concept";
7
+ import { leaveTypeConcepts } from "./concepts/leaveTypes.concept";
8
+ import { getBalanceEndpoint } from "./endpoints/getBalance.endpoint";
9
+ import { getLeaveByIdEndpoint } from "./endpoints/getLeaveById.endpoint";
10
+ import { listBalancesEndpoint } from "./endpoints/listBalances.endpoint";
11
+ import { listBalanceTransactionsEndpoint } from "./endpoints/listBalanceTransactions.endpoint";
12
+ import { listBalanceTypesEndpoint } from "./endpoints/listBalanceTypes.endpoint";
13
+ import { listLeavesEndpoint } from "./endpoints/listLeaves.endpoint";
14
+ import { listLeaveTypesEndpoint } from "./endpoints/listLeaveTypes.endpoint";
15
+ import { leaveServices } from "./services/leaveRequests.service";
16
+
17
+ export const leavesDomain: DomainDef = defineDomain({
18
+ name: "Leaves",
19
+ description:
20
+ "Leave management domain covering leave requests, leave balances, leave types, and leave-related service workflows. Handles all employee leave operations including requesting, approving, tracking balances, and processing returns.",
21
+ concepts: [
22
+ leaveConcept,
23
+ leaveBalanceConcept,
24
+ leaveBalanceTransactionConcept,
25
+ leaveTypeConcept,
26
+ ...leaveTypeConcepts,
27
+ ],
28
+ endpoints: [
29
+ getBalanceEndpoint,
30
+ getLeaveByIdEndpoint,
31
+ listBalancesEndpoint,
32
+ listBalanceTransactionsEndpoint,
33
+ listBalanceTypesEndpoint,
34
+ listLeavesEndpoint,
35
+ listLeaveTypesEndpoint,
36
+ ],
37
+ services: [...leaveServices],
38
+ });
@@ -0,0 +1,232 @@
1
+ import { defineService } from "@m6d/cortex-server";
2
+ import type { ConceptDef } from "@m6d/cortex-server";
3
+ import {
4
+ annualLeaveConcept,
5
+ sickLeaveConcept,
6
+ casualLeaveConcept,
7
+ maternityLeaveConcept,
8
+ pilgrimageLeaveConcept,
9
+ paternalLeaveConcept,
10
+ examLeaveConcept,
11
+ unpaidLeaveConcept,
12
+ guardianLeaveConcept,
13
+ sabbaticalLeaveConcept,
14
+ mourningLeaveConcept,
15
+ iddaLeaveConcept,
16
+ officialDutyLeaveConcept,
17
+ careLeaveConcept,
18
+ contactWithInfectedPatientLeaveConcept,
19
+ urgentLeaveConcept,
20
+ timeInLieuLeaveConcept,
21
+ timeInLieuBalanceCreditGrantConcept,
22
+ encashLeaveDaysConcept,
23
+ returnFromLeaveConcept,
24
+ } from "../concepts/leaveTypes.concept";
25
+
26
+ function leaveService(config: {
27
+ name: string;
28
+ builtInId: string;
29
+ belongsTo: ConceptDef;
30
+ description: string;
31
+ intakeMode: "conversational" | "form";
32
+ }) {
33
+ return defineService({
34
+ name: config.name,
35
+ builtInId: config.builtInId,
36
+ belongsTo: config.belongsTo,
37
+ description: config.description,
38
+ metadata: {
39
+ intakeMode: config.intakeMode,
40
+ },
41
+ });
42
+ }
43
+
44
+ export const annualLeaveRequestService = leaveService({
45
+ name: "Annual leave request",
46
+ builtInId: "services:annual_leave",
47
+ belongsTo: annualLeaveConcept,
48
+ description:
49
+ "Request annual leave (vacation). Creates draft then submits for supervisor approval. Requires sufficient annual leave balance.",
50
+ intakeMode: "conversational",
51
+ });
52
+
53
+ export const sickLeaveRequestService = leaveService({
54
+ name: "Sick leave request",
55
+ builtInId: "services:sick_leave",
56
+ belongsTo: sickLeaveConcept,
57
+ description:
58
+ "Request sick leave. Less than 5 days: standard approval. 5+ days: requires medical committee approval and medical certificate.",
59
+ intakeMode: "conversational",
60
+ });
61
+
62
+ export const casualLeaveRequestService = leaveService({
63
+ name: "Casual leave request",
64
+ builtInId: "services:casual_leave",
65
+ belongsTo: casualLeaveConcept,
66
+ description:
67
+ "Request casual/emergency leave. Must be for today only (not past or future). Cannot have adjacent leaves.",
68
+ intakeMode: "conversational",
69
+ });
70
+
71
+ export const maternityLeaveRequestService = leaveService({
72
+ name: "Maternity leave request",
73
+ builtInId: "services:maternity_leave",
74
+ belongsTo: maternityLeaveConcept,
75
+ description:
76
+ "Request maternity leave. Fixed 90-day balance. Requires date of birth and medical report. Female employees only.",
77
+ intakeMode: "conversational",
78
+ });
79
+
80
+ export const pilgrimageLeaveRequestService = leaveService({
81
+ name: "Pilgrimage leave request",
82
+ builtInId: "services:pilgrimage_leave",
83
+ belongsTo: pilgrimageLeaveConcept,
84
+ description:
85
+ "Request pilgrimage (Hajj) leave. Fixed 30-day balance no need to check balance for this one.",
86
+ intakeMode: "conversational",
87
+ });
88
+
89
+ export const paternalLeaveRequestService = leaveService({
90
+ name: "Paternal leave request",
91
+ builtInId: "services:paternal_leave",
92
+ belongsTo: paternalLeaveConcept,
93
+ description: "Request paternal leave for new fathers.",
94
+ intakeMode: "conversational",
95
+ });
96
+
97
+ export const examLeaveRequestService = leaveService({
98
+ name: "Exam leave request",
99
+ builtInId: "services:exam_leave",
100
+ belongsTo: examLeaveConcept,
101
+ description: "Request exam leave for academic examinations.",
102
+ intakeMode: "conversational",
103
+ });
104
+
105
+ export const unpaidLeaveRequestService = leaveService({
106
+ name: "Unpaid leave request",
107
+ builtInId: "services:unpaid_leave",
108
+ belongsTo: unpaidLeaveConcept,
109
+ description: "Request unpaid leave (leave without pay).",
110
+ intakeMode: "conversational",
111
+ });
112
+
113
+ export const guardianLeaveRequestService = leaveService({
114
+ name: "Guardian leave request",
115
+ builtInId: "services:guardian_leave",
116
+ belongsTo: guardianLeaveConcept,
117
+ description: "Request guardian leave for accompanying a patient.",
118
+ intakeMode: "conversational",
119
+ });
120
+
121
+ export const sabbaticalLeaveRequestService = leaveService({
122
+ name: "Sabbatical leave request",
123
+ builtInId: "services:sabbatical_leave",
124
+ belongsTo: sabbaticalLeaveConcept,
125
+ description: "Request sabbatical leave for extended time off.",
126
+ intakeMode: "conversational",
127
+ });
128
+
129
+ export const mourningLeaveRequestService = leaveService({
130
+ name: "Mourning leave request",
131
+ builtInId: "services:mourning_leave",
132
+ belongsTo: mourningLeaveConcept,
133
+ description: "Request mourning/bereavement leave.",
134
+ intakeMode: "conversational",
135
+ });
136
+
137
+ export const iddaLeaveRequestService = leaveService({
138
+ name: "Idda leave request",
139
+ builtInId: "services:idda_leave",
140
+ belongsTo: iddaLeaveConcept,
141
+ description:
142
+ "Request Idda leave (waiting period leave for women after divorce or spouse death).",
143
+ intakeMode: "conversational",
144
+ });
145
+
146
+ export const officialDutyLeaveRequestService = leaveService({
147
+ name: "Official duty leave request",
148
+ builtInId: "services:official_duty_leave",
149
+ belongsTo: officialDutyLeaveConcept,
150
+ description: "Request official duty leave for work-related travel or assignments.",
151
+ intakeMode: "conversational",
152
+ });
153
+
154
+ export const careLeaveRequestService = leaveService({
155
+ name: "Care leave request",
156
+ builtInId: "services:care_leave",
157
+ belongsTo: careLeaveConcept,
158
+ description: "Request care leave for caring for a family member.",
159
+ intakeMode: "conversational",
160
+ });
161
+
162
+ export const contactWithInfectedPatientLeaveRequestService = leaveService({
163
+ name: "Contact with infected patient leave request",
164
+ builtInId: "services:contact_with_infected_patient_leave",
165
+ belongsTo: contactWithInfectedPatientLeaveConcept,
166
+ description: "Request leave due to contact with an infected patient.",
167
+ intakeMode: "conversational",
168
+ });
169
+
170
+ export const urgentLeaveRequestService = leaveService({
171
+ name: "Urgent leave request",
172
+ builtInId: "services:urgent_leave",
173
+ belongsTo: urgentLeaveConcept,
174
+ description: "Request urgent leave for emergencies.",
175
+ intakeMode: "conversational",
176
+ });
177
+
178
+ export const timeInLieuLeaveRequestService = leaveService({
179
+ name: "Time in lieu leave request",
180
+ builtInId: "services:time_in_lieu",
181
+ belongsTo: timeInLieuLeaveConcept,
182
+ description: "Request time in lieu leave (compensatory time off for overtime).",
183
+ intakeMode: "conversational",
184
+ });
185
+
186
+ export const timeInLieuBalanceCreditGrantService = leaveService({
187
+ name: "Time in lieu balance credit grant",
188
+ builtInId: "services:time_in_lieu_balance_credit_grant",
189
+ belongsTo: timeInLieuBalanceCreditGrantConcept,
190
+ description: "Request to credit time in lieu balance (grant overtime compensation days).",
191
+ intakeMode: "conversational",
192
+ });
193
+
194
+ export const encashLeaveDaysRequestService = leaveService({
195
+ name: "Encash leave days request",
196
+ builtInId: "services:encash_leave_days",
197
+ belongsTo: encashLeaveDaysConcept,
198
+ description: "Request to encash (cash out) unused leave days.",
199
+ intakeMode: "conversational",
200
+ });
201
+
202
+ export const returnFromLeaveRequestService = leaveService({
203
+ name: "Return from leave request",
204
+ builtInId: "services:return_from_leave",
205
+ belongsTo: returnFromLeaveConcept,
206
+ description:
207
+ "Register returning from an ongoing leave, possibly earlier than planned end date.",
208
+ intakeMode: "conversational",
209
+ });
210
+
211
+ export const leaveServices = [
212
+ annualLeaveRequestService,
213
+ sickLeaveRequestService,
214
+ casualLeaveRequestService,
215
+ maternityLeaveRequestService,
216
+ pilgrimageLeaveRequestService,
217
+ paternalLeaveRequestService,
218
+ examLeaveRequestService,
219
+ unpaidLeaveRequestService,
220
+ guardianLeaveRequestService,
221
+ sabbaticalLeaveRequestService,
222
+ mourningLeaveRequestService,
223
+ iddaLeaveRequestService,
224
+ officialDutyLeaveRequestService,
225
+ careLeaveRequestService,
226
+ contactWithInfectedPatientLeaveRequestService,
227
+ urgentLeaveRequestService,
228
+ timeInLieuLeaveRequestService,
229
+ timeInLieuBalanceCreditGrantService,
230
+ encashLeaveDaysRequestService,
231
+ returnFromLeaveRequestService,
232
+ ];
@@ -0,0 +1,19 @@
1
+ import { defineConcept } from "@m6d/cortex-server";
2
+ import { paginationRule } from "../../shared/rules/pagination.rule";
3
+
4
+ export const notificationConcept = defineConcept({
5
+ name: "Notification",
6
+ description:
7
+ "A personal in-app notification for the current user, including message content, read state, timestamps, tags, and optional navigation link.",
8
+ aliases: [
9
+ "notification",
10
+ "my notifications",
11
+ "unread notifications",
12
+ "alerts",
13
+ "notifications",
14
+ "الإشعارات",
15
+ "إشعاراتي",
16
+ "الإشعارات غير المقروءة",
17
+ ],
18
+ governedBy: [paginationRule],
19
+ });
@@ -0,0 +1,21 @@
1
+ import { defineEndpoint } from "@m6d/cortex-server";
2
+ import { notificationConcept } from "../concepts/notification.concept";
3
+
4
+ export const countMyNotificationsEndpoint = defineEndpoint({
5
+ name: "Count unread current user notifications",
6
+ path: "/notifications/users/count",
7
+ method: "GET",
8
+ description: "Returns the number of unread notifications for the current user.",
9
+ queries: [notificationConcept],
10
+
11
+ // @auto-generated-start
12
+ autoGenerated: {
13
+ params: [] as const,
14
+ body: [] as const,
15
+ response: [{ name: "value", required: true, type: "number" }] as const,
16
+ successStatus: 200,
17
+ errorStatuses: [],
18
+ responseKind: "object",
19
+ } as const,
20
+ // @auto-generated-end
21
+ });
@@ -0,0 +1,57 @@
1
+ import { defineEndpoint } from "@m6d/cortex-server";
2
+ import { notificationConcept } from "../concepts/notification.concept";
3
+ import { listMyNotificationsEndpoint } from "./listMyNotifications.endpoint";
4
+
5
+ export const getMyNotificationEndpoint = defineEndpoint({
6
+ name: "Get one current user notification",
7
+ path: "/notifications/users/{id}",
8
+ method: "GET",
9
+ description: "Returns a single notification belonging to the current user.",
10
+ queries: [notificationConcept],
11
+ returns: [{ concept: notificationConcept }],
12
+ paramDescriptions: {
13
+ id: "The notification identifier",
14
+ },
15
+ dependsOn: [
16
+ {
17
+ endpoint: listMyNotificationsEndpoint,
18
+ fromField: "id",
19
+ paramName: "id",
20
+ },
21
+ ],
22
+
23
+ // @auto-generated-start
24
+ autoGenerated: {
25
+ params: [{ name: "id", required: true, type: "uuid" }] as const,
26
+ body: [] as const,
27
+ response: [
28
+ { name: "id", required: false, type: "uuid" },
29
+ {
30
+ name: "name",
31
+ required: false,
32
+ type: "object",
33
+ properties: [
34
+ { name: "ar", required: false, type: "string" },
35
+ { name: "en", required: false, type: "string" },
36
+ ],
37
+ },
38
+ {
39
+ name: "description",
40
+ required: false,
41
+ type: "object",
42
+ properties: [
43
+ { name: "ar", required: false, type: "string" },
44
+ { name: "en", required: false, type: "string" },
45
+ ],
46
+ },
47
+ { name: "createdTime", required: false, type: "datetime" },
48
+ { name: "link", required: false, type: "string" },
49
+ { name: "tags", required: false, type: "string", isArray: true },
50
+ { name: "readTime", required: false, type: "datetime" },
51
+ ] as const,
52
+ successStatus: 200,
53
+ errorStatuses: [404],
54
+ responseKind: "object",
55
+ } as const,
56
+ // @auto-generated-end
57
+ });
@@ -0,0 +1,59 @@
1
+ import { defineEndpoint } from "@m6d/cortex-server";
2
+ import { notificationConcept } from "../concepts/notification.concept";
3
+
4
+ export const listMyNotificationsEndpoint = defineEndpoint({
5
+ name: "List current user notifications",
6
+ path: "/notifications/users",
7
+ method: "GET",
8
+ description:
9
+ "Returns paginated notifications for the current user. Supports keyword and unread filtering for personal inbox-style queries.",
10
+ queries: [notificationConcept],
11
+ returns: [{ concept: notificationConcept }],
12
+ paramDescriptions: {
13
+ keyword: "Optional keyword filter",
14
+ isUnread: "Optional boolean filter to return only unread notifications",
15
+ page: "Pagination page number",
16
+ pageSize: "Pagination page size",
17
+ },
18
+
19
+ // @auto-generated-start
20
+ autoGenerated: {
21
+ params: [
22
+ { name: "keyword", required: false, type: "string" },
23
+ { name: "isUnread", required: false, type: "boolean" },
24
+ { name: "pageNumber", required: false, type: "number" },
25
+ { name: "pageSize", required: false, type: "number" },
26
+ ] as const,
27
+ body: [] as const,
28
+ response: [
29
+ {
30
+ name: "items",
31
+ required: false,
32
+ type: "object",
33
+ isArray: true,
34
+ properties: [
35
+ { name: "id", required: false, type: "uuid" },
36
+ {
37
+ name: "name",
38
+ required: false,
39
+ type: "object",
40
+ properties: [
41
+ { name: "ar", required: false, type: "string" },
42
+ { name: "en", required: false, type: "string" },
43
+ ],
44
+ },
45
+ { name: "createdTime", required: false, type: "datetime" },
46
+ { name: "link", required: false, type: "string" },
47
+ { name: "tags", required: false, type: "string", isArray: true },
48
+ { name: "readTime", required: false, type: "datetime" },
49
+ ],
50
+ },
51
+ { name: "count", required: false, type: "number" },
52
+ { name: "filteredCount", required: false, type: "number" },
53
+ ] as const,
54
+ successStatus: 200,
55
+ errorStatuses: [],
56
+ responseKind: "object",
57
+ } as const,
58
+ // @auto-generated-end
59
+ });