@iblai/iblai-api 4.23.2-test-core → 4.24.0-core

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.
@@ -14,6 +14,7 @@ import type { EngagementPerCourse } from '../models/EngagementPerCourse';
14
14
  import type { Enrollments } from '../models/Enrollments';
15
15
  import type { EnrollmentsPerUser } from '../models/EnrollmentsPerUser';
16
16
  import type { GradingPerUser } from '../models/GradingPerUser';
17
+ import type { LearnerAnalyticsResponse } from '../models/LearnerAnalyticsResponse';
17
18
  import type { LearnerInformationAPI } from '../models/LearnerInformationAPI';
18
19
  import type { NewPerLearnerList } from '../models/NewPerLearnerList';
19
20
  import type { OvertimeWithChangeInfo } from '../models/OvertimeWithChangeInfo';
@@ -43,6 +44,43 @@ import type { WatchedVideosPerCourse } from '../models/WatchedVideosPerCourse';
43
44
  import type { WatchedVideosPerUser } from '../models/WatchedVideosPerUser';
44
45
  import type { CancelablePromise } from '../core/CancelablePromise';
45
46
  export declare class AiAnalyticsService {
47
+ /**
48
+ * Unified API endpoint for learner analytics.
49
+ *
50
+ * This endpoint provides either:
51
+ * 1. Cross-platform summary (when only username is provided)
52
+ * 2. Platform-specific detailed data (when username + platform_key are provided)
53
+ *
54
+ * Query params:
55
+ * - username (required): Username of the learner
56
+ * - platform_key (optional): Platform key for platform-specific data
57
+ * - page (optional): Page number (default: 1)
58
+ * - limit (optional): Records per page (default: 20, max: 100)
59
+ *
60
+ * Returns:
61
+ * - If platform_key provided: Detailed platform metrics
62
+ * - If no platform_key: Cross-platform summary with pagination
63
+ * @returns LearnerAnalyticsResponse
64
+ * @throws ApiError
65
+ */
66
+ static analyticsLearnersRetrieve({ limit, page, platformKey, username, }: {
67
+ /**
68
+ * Number of records per page (default: 20, max: 100)
69
+ */
70
+ limit?: number;
71
+ /**
72
+ * Page number (default: 1)
73
+ */
74
+ page?: number;
75
+ /**
76
+ * Optional platform key - if provided, returns platform-specific detailed data
77
+ */
78
+ platformKey?: string;
79
+ /**
80
+ * Username of the learner to get analytics for. Defaults to self if not provided.
81
+ */
82
+ username?: string;
83
+ }): CancelablePromise<LearnerAnalyticsResponse>;
46
84
  /**
47
85
  * Update time spent tracking data from client-side events.
48
86
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iblai/iblai-api",
3
- "version": "4.23.2-test-core",
3
+ "version": "4.24.0-core",
4
4
  "main": "dist/index.cjs.js",
5
5
  "module": "dist/index.esm.js",
6
6
  "type": "module",
package/sdk_schema.yml CHANGED
@@ -1,9 +1,69 @@
1
1
  openapi: 3.0.3
2
2
  info:
3
3
  title: ibl-data-manager
4
- version: 4.23.2-core
4
+ version: 4.24.0-core
5
5
  description: API for iblai
6
6
  paths:
7
+ /api/analytics/learners/:
8
+ get:
9
+ operationId: analytics_learners_retrieve
10
+ description: |-
11
+ Unified API endpoint for learner analytics.
12
+
13
+ This endpoint provides either:
14
+ 1. Cross-platform summary (when only username is provided)
15
+ 2. Platform-specific detailed data (when username + platform_key are provided)
16
+
17
+ Query params:
18
+ - username (required): Username of the learner
19
+ - platform_key (optional): Platform key for platform-specific data
20
+ - page (optional): Page number (default: 1)
21
+ - limit (optional): Records per page (default: 20, max: 100)
22
+
23
+ Returns:
24
+ - If platform_key provided: Detailed platform metrics
25
+ - If no platform_key: Cross-platform summary with pagination
26
+ parameters:
27
+ - in: query
28
+ name: limit
29
+ schema:
30
+ type: integer
31
+ maximum: 100
32
+ minimum: 1
33
+ default: 20
34
+ description: 'Number of records per page (default: 20, max: 100)'
35
+ - in: query
36
+ name: page
37
+ schema:
38
+ type: integer
39
+ minimum: 1
40
+ default: 1
41
+ description: 'Page number (default: 1)'
42
+ - in: query
43
+ name: platform_key
44
+ schema:
45
+ type: string
46
+ minLength: 1
47
+ description: Optional platform key - if provided, returns platform-specific
48
+ detailed data
49
+ - in: query
50
+ name: username
51
+ schema:
52
+ type: string
53
+ minLength: 1
54
+ description: Username of the learner to get analytics for. Defaults to self
55
+ if not provided.
56
+ tags:
57
+ - ai-analytics
58
+ security:
59
+ - PlatformApiKeyAuthentication: []
60
+ responses:
61
+ '200':
62
+ content:
63
+ application/json:
64
+ schema:
65
+ $ref: '#/components/schemas/LearnerAnalyticsResponse'
66
+ description: ''
7
67
  /api/analytics/orgs/{org}/time/update/:
8
68
  post:
9
69
  operationId: analytics_orgs_time_update_create
@@ -27658,6 +27718,21 @@ components:
27658
27718
  - last_access_date
27659
27719
  - name
27660
27720
  - time_invested
27721
+ ActivityInfo:
27722
+ type: object
27723
+ description: Serializer for activity information.
27724
+ properties:
27725
+ first_activity:
27726
+ type: string
27727
+ format: date-time
27728
+ nullable: true
27729
+ last_activity:
27730
+ type: string
27731
+ format: date-time
27732
+ nullable: true
27733
+ required:
27734
+ - first_activity
27735
+ - last_activity
27661
27736
  App:
27662
27737
  type: object
27663
27738
  properties:
@@ -30455,6 +30530,53 @@ components:
30455
30530
  required:
30456
30531
  - key
30457
30532
  - user_id
30533
+ LearnerAnalyticsResponse:
30534
+ type: object
30535
+ description: Unified response serializer for learner analytics endpoint.
30536
+ properties:
30537
+ user:
30538
+ $ref: '#/components/schemas/UserInfo'
30539
+ results:
30540
+ type: array
30541
+ items:
30542
+ $ref: '#/components/schemas/LearnerAnalyticsResult'
30543
+ pagination:
30544
+ $ref: '#/components/schemas/Pagination'
30545
+ generated_at:
30546
+ type: string
30547
+ format: date-time
30548
+ required:
30549
+ - generated_at
30550
+ - pagination
30551
+ - results
30552
+ - user
30553
+ LearnerAnalyticsResult:
30554
+ type: object
30555
+ description: Unified serializer for learner analytics results - handles both
30556
+ cross-platform and platform-specific data.
30557
+ properties:
30558
+ platform_id:
30559
+ type: integer
30560
+ platform_name:
30561
+ type: string
30562
+ platform_key:
30563
+ type: string
30564
+ nullable: true
30565
+ summary:
30566
+ $ref: '#/components/schemas/PlatformSummary'
30567
+ metrics:
30568
+ $ref: '#/components/schemas/PlatformMetrics'
30569
+ activity:
30570
+ $ref: '#/components/schemas/ActivityInfo'
30571
+ last_updated:
30572
+ type: string
30573
+ format: date-time
30574
+ user_id:
30575
+ type: integer
30576
+ required:
30577
+ - platform_id
30578
+ - platform_key
30579
+ - platform_name
30458
30580
  LearnerInformationAPI:
30459
30581
  type: object
30460
30582
  properties:
@@ -30829,6 +30951,19 @@ components:
30829
30951
  * `document` - Document
30830
30952
  * `audio` - Audio
30831
30953
  * `other` - Other
30954
+ MetricDetail:
30955
+ type: object
30956
+ description: Base serializer for detailed metric data.
30957
+ properties:
30958
+ total:
30959
+ type: integer
30960
+ details:
30961
+ type: array
30962
+ items:
30963
+ type: object
30964
+ additionalProperties: {}
30965
+ required:
30966
+ - total
30832
30967
  ModeEnum:
30833
30968
  enum:
30834
30969
  - subscription
@@ -31853,24 +31988,35 @@ components:
31853
31988
  - results
31854
31989
  Pagination:
31855
31990
  type: object
31991
+ description: Serializer for pagination metadata.
31856
31992
  properties:
31857
- totalItems:
31993
+ page:
31858
31994
  type: integer
31859
- description: Total records
31860
- currentPage:
31995
+ limit:
31861
31996
  type: integer
31862
- description: Current Page
31863
- perPage:
31997
+ total_pages:
31998
+ type: integer
31999
+ total_records:
32000
+ type: integer
32001
+ has_next:
32002
+ type: boolean
32003
+ has_previous:
32004
+ type: boolean
32005
+ next_page:
31864
32006
  type: integer
31865
- description: Size of data returned per page
31866
- totalPages:
32007
+ nullable: true
32008
+ previous_page:
31867
32009
  type: integer
31868
- description: Amount of pages
32010
+ nullable: true
31869
32011
  required:
31870
- - currentPage
31871
- - perPage
31872
- - totalItems
31873
- - totalPages
32012
+ - has_next
32013
+ - has_previous
32014
+ - limit
32015
+ - next_page
32016
+ - page
32017
+ - previous_page
32018
+ - total_pages
32019
+ - total_records
31874
32020
  PatchedMediaResource:
31875
32021
  type: object
31876
32022
  properties:
@@ -33423,6 +33569,32 @@ components:
33423
33569
  * `4` - STOPPING
33424
33570
  * `5` - STOPPED
33425
33571
  * `6` - REPAIR
33572
+ PlatformMetrics:
33573
+ type: object
33574
+ description: Serializer for detailed platform metrics (platform-specific view).
33575
+ properties:
33576
+ enrollments:
33577
+ $ref: '#/components/schemas/MetricDetail'
33578
+ programs:
33579
+ $ref: '#/components/schemas/MetricDetail'
33580
+ pathways:
33581
+ $ref: '#/components/schemas/MetricDetail'
33582
+ resources:
33583
+ $ref: '#/components/schemas/MetricDetail'
33584
+ skills:
33585
+ $ref: '#/components/schemas/SkillsMetric'
33586
+ credentials:
33587
+ $ref: '#/components/schemas/MetricDetail'
33588
+ points:
33589
+ $ref: '#/components/schemas/PointsMetric'
33590
+ required:
33591
+ - credentials
33592
+ - enrollments
33593
+ - pathways
33594
+ - points
33595
+ - programs
33596
+ - resources
33597
+ - skills
33426
33598
  PlatformPublicMetadata:
33427
33599
  type: object
33428
33600
  properties:
@@ -33548,6 +33720,52 @@ components:
33548
33720
  - next_page
33549
33721
  - previous_page
33550
33722
  - results
33723
+ PlatformSummary:
33724
+ type: object
33725
+ description: Serializer for platform summary data (cross-platform view).
33726
+ properties:
33727
+ enrollments:
33728
+ type: integer
33729
+ programs:
33730
+ type: integer
33731
+ pathways:
33732
+ type: integer
33733
+ resources:
33734
+ type: integer
33735
+ reported_skills:
33736
+ type: integer
33737
+ desired_skills:
33738
+ type: integer
33739
+ assigned_skills:
33740
+ type: integer
33741
+ total_skills:
33742
+ type: integer
33743
+ credentials:
33744
+ type: integer
33745
+ points:
33746
+ type: number
33747
+ format: double
33748
+ first_activity:
33749
+ type: string
33750
+ format: date-time
33751
+ nullable: true
33752
+ last_activity:
33753
+ type: string
33754
+ format: date-time
33755
+ nullable: true
33756
+ required:
33757
+ - assigned_skills
33758
+ - credentials
33759
+ - desired_skills
33760
+ - enrollments
33761
+ - first_activity
33762
+ - last_activity
33763
+ - pathways
33764
+ - points
33765
+ - programs
33766
+ - reported_skills
33767
+ - resources
33768
+ - total_skills
33551
33769
  PlatformUpdatePostRequest:
33552
33770
  type: object
33553
33771
  properties:
@@ -33568,6 +33786,20 @@ components:
33568
33786
  required:
33569
33787
  - key
33570
33788
  - user_id
33789
+ PointsMetric:
33790
+ type: object
33791
+ description: Serializer for points metrics.
33792
+ properties:
33793
+ total:
33794
+ type: number
33795
+ format: double
33796
+ details:
33797
+ type: array
33798
+ items:
33799
+ type: object
33800
+ additionalProperties: {}
33801
+ required:
33802
+ - total
33571
33803
  PointsPercentile:
33572
33804
  type: object
33573
33805
  properties:
@@ -35859,6 +36091,28 @@ components:
35859
36091
  - name
35860
36092
  - platform
35861
36093
  - threshold
36094
+ SkillsMetric:
36095
+ type: object
36096
+ description: Serializer for skills metrics with breakdown.
36097
+ properties:
36098
+ reported:
36099
+ type: integer
36100
+ desired:
36101
+ type: integer
36102
+ assigned:
36103
+ type: integer
36104
+ total:
36105
+ type: integer
36106
+ details:
36107
+ type: array
36108
+ items:
36109
+ type: object
36110
+ additionalProperties: {}
36111
+ required:
36112
+ - assigned
36113
+ - desired
36114
+ - reported
36115
+ - total
35862
36116
  StateEnum:
35863
36117
  enum:
35864
36118
  - pending
@@ -36607,26 +36861,27 @@ components:
36607
36861
  - message
36608
36862
  UserInfo:
36609
36863
  type: object
36864
+ description: Serializer for user information.
36610
36865
  properties:
36611
- id:
36866
+ user_id:
36612
36867
  type: integer
36613
- description: edX user ID
36614
36868
  username:
36615
36869
  type: string
36616
36870
  nullable: true
36617
- description: edX username
36618
- maxLength: 100
36619
36871
  email:
36620
36872
  type: string
36621
36873
  format: email
36622
- active:
36874
+ nullable: true
36875
+ name:
36876
+ type: string
36877
+ is_active:
36623
36878
  type: boolean
36624
- edx_data: {}
36625
36879
  required:
36626
- - active
36627
- - edx_data
36628
36880
  - email
36629
- - id
36881
+ - is_active
36882
+ - name
36883
+ - user_id
36884
+ - username
36630
36885
  UserLicenseAssignmentCreate:
36631
36886
  type: object
36632
36887
  description: Request serializer for UserLicenseAssignmentView POST endpoint
@@ -21,7 +21,7 @@ export type OpenAPIConfig = {
21
21
 
22
22
  export const OpenAPI: OpenAPIConfig = {
23
23
  BASE: 'https://base.manager.iblai.app',
24
- VERSION: '4.23.2-core',
24
+ VERSION: '4.24.0-core',
25
25
  WITH_CREDENTIALS: false,
26
26
  CREDENTIALS: 'include',
27
27
  TOKEN: undefined,
package/src/index.ts CHANGED
@@ -15,6 +15,7 @@ export type { ActiveUsersPerCourse } from './models/ActiveUsersPerCourse';
15
15
  export type { ActiveUsersPerCourseData } from './models/ActiveUsersPerCourseData';
16
16
  export type { ActivityAPI } from './models/ActivityAPI';
17
17
  export type { ActivityData } from './models/ActivityData';
18
+ export type { ActivityInfo } from './models/ActivityInfo';
18
19
  export type { App } from './models/App';
19
20
  export type { AppleSubscriptionStatusRequest } from './models/AppleSubscriptionStatusRequest';
20
21
  export type { AppleSubscriptionStatusView } from './models/AppleSubscriptionStatusView';
@@ -133,6 +134,8 @@ export type { Issuer } from './models/Issuer';
133
134
  export type { IssuerAuthority } from './models/IssuerAuthority';
134
135
  export { ItemTypeEnum } from './models/ItemTypeEnum';
135
136
  export type { LauncherViewPostRequest } from './models/LauncherViewPostRequest';
137
+ export type { LearnerAnalyticsResponse } from './models/LearnerAnalyticsResponse';
138
+ export type { LearnerAnalyticsResult } from './models/LearnerAnalyticsResult';
136
139
  export type { LearnerInformationAPI } from './models/LearnerInformationAPI';
137
140
  export type { LearnerInformationAPIData } from './models/LearnerInformationAPIData';
138
141
  export type { LtiKey } from './models/LtiKey';
@@ -145,6 +148,7 @@ export type { MarkAllReadRequest } from './models/MarkAllReadRequest';
145
148
  export type { MarkAllReadResponse } from './models/MarkAllReadResponse';
146
149
  export type { MediaResource } from './models/MediaResource';
147
150
  export { MediaTypeEnum } from './models/MediaTypeEnum';
151
+ export type { MetricDetail } from './models/MetricDetail';
148
152
  export { ModeEnum } from './models/ModeEnum';
149
153
  export type { NewPerLearnerList } from './models/NewPerLearnerList';
150
154
  export type { NewPerLearnerListData } from './models/NewPerLearnerListData';
@@ -238,13 +242,16 @@ export type { PlatformLicenseDetail } from './models/PlatformLicenseDetail';
238
242
  export type { PlatformLicenseUpdate } from './models/PlatformLicenseUpdate';
239
243
  export type { PlatformList } from './models/PlatformList';
240
244
  export { PlatformListStatusEnum } from './models/PlatformListStatusEnum';
245
+ export type { PlatformMetrics } from './models/PlatformMetrics';
241
246
  export type { PlatformPublicMetadata } from './models/PlatformPublicMetadata';
242
247
  export type { PlatformSkillPointBulkRequest } from './models/PlatformSkillPointBulkRequest';
243
248
  export type { PlatformSkillPointBulkResponse } from './models/PlatformSkillPointBulkResponse';
244
249
  export type { PlatformSkillPointGroupRequest } from './models/PlatformSkillPointGroupRequest';
245
250
  export type { PlatformSkillPointRequest } from './models/PlatformSkillPointRequest';
246
251
  export type { PlatformSkillPointResponse } from './models/PlatformSkillPointResponse';
252
+ export type { PlatformSummary } from './models/PlatformSummary';
247
253
  export type { PlatformUpdatePostRequest } from './models/PlatformUpdatePostRequest';
254
+ export type { PointsMetric } from './models/PointsMetric';
248
255
  export type { PointsPercentile } from './models/PointsPercentile';
249
256
  export type { PreviewResponse } from './models/PreviewResponse';
250
257
  export type { Program } from './models/Program';
@@ -313,6 +320,7 @@ export type { Skill } from './models/Skill';
313
320
  export type { SkillCreateUpdateRequest } from './models/SkillCreateUpdateRequest';
314
321
  export type { SkillDetail } from './models/SkillDetail';
315
322
  export type { SkillInfo } from './models/SkillInfo';
323
+ export type { SkillsMetric } from './models/SkillsMetric';
316
324
  export type { SkillThreshold } from './models/SkillThreshold';
317
325
  export { StateEnum } from './models/StateEnum';
318
326
  export type { StripeBillingPageIdentifierResponse } from './models/StripeBillingPageIdentifierResponse';
@@ -0,0 +1,12 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ /**
6
+ * Serializer for activity information.
7
+ */
8
+ export type ActivityInfo = {
9
+ first_activity: string | null;
10
+ last_activity: string | null;
11
+ };
12
+
@@ -0,0 +1,17 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ import type { LearnerAnalyticsResult } from './LearnerAnalyticsResult';
6
+ import type { Pagination } from './Pagination';
7
+ import type { UserInfo } from './UserInfo';
8
+ /**
9
+ * Unified response serializer for learner analytics endpoint.
10
+ */
11
+ export type LearnerAnalyticsResponse = {
12
+ user: UserInfo;
13
+ results: Array<LearnerAnalyticsResult>;
14
+ pagination: Pagination;
15
+ generated_at: string;
16
+ };
17
+
@@ -0,0 +1,21 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ import type { ActivityInfo } from './ActivityInfo';
6
+ import type { PlatformMetrics } from './PlatformMetrics';
7
+ import type { PlatformSummary } from './PlatformSummary';
8
+ /**
9
+ * Unified serializer for learner analytics results - handles both cross-platform and platform-specific data.
10
+ */
11
+ export type LearnerAnalyticsResult = {
12
+ platform_id: number;
13
+ platform_name: string;
14
+ platform_key: string | null;
15
+ summary?: PlatformSummary;
16
+ metrics?: PlatformMetrics;
17
+ activity?: ActivityInfo;
18
+ last_updated?: string;
19
+ user_id?: number;
20
+ };
21
+
@@ -0,0 +1,12 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ /**
6
+ * Base serializer for detailed metric data.
7
+ */
8
+ export type MetricDetail = {
9
+ total: number;
10
+ details?: Array<Record<string, any>>;
11
+ };
12
+
@@ -2,22 +2,17 @@
2
2
  /* istanbul ignore file */
3
3
  /* tslint:disable */
4
4
  /* eslint-disable */
5
+ /**
6
+ * Serializer for pagination metadata.
7
+ */
5
8
  export type Pagination = {
6
- /**
7
- * Total records
8
- */
9
- totalItems: number;
10
- /**
11
- * Current Page
12
- */
13
- currentPage: number;
14
- /**
15
- * Size of data returned per page
16
- */
17
- perPage: number;
18
- /**
19
- * Amount of pages
20
- */
21
- totalPages: number;
9
+ page: number;
10
+ limit: number;
11
+ total_pages: number;
12
+ total_records: number;
13
+ has_next: boolean;
14
+ has_previous: boolean;
15
+ next_page: number | null;
16
+ previous_page: number | null;
22
17
  };
23
18
 
@@ -0,0 +1,20 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ import type { MetricDetail } from './MetricDetail';
6
+ import type { PointsMetric } from './PointsMetric';
7
+ import type { SkillsMetric } from './SkillsMetric';
8
+ /**
9
+ * Serializer for detailed platform metrics (platform-specific view).
10
+ */
11
+ export type PlatformMetrics = {
12
+ enrollments: MetricDetail;
13
+ programs: MetricDetail;
14
+ pathways: MetricDetail;
15
+ resources: MetricDetail;
16
+ skills: SkillsMetric;
17
+ credentials: MetricDetail;
18
+ points: PointsMetric;
19
+ };
20
+
@@ -0,0 +1,22 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ /**
6
+ * Serializer for platform summary data (cross-platform view).
7
+ */
8
+ export type PlatformSummary = {
9
+ enrollments: number;
10
+ programs: number;
11
+ pathways: number;
12
+ resources: number;
13
+ reported_skills: number;
14
+ desired_skills: number;
15
+ assigned_skills: number;
16
+ total_skills: number;
17
+ credentials: number;
18
+ points: number;
19
+ first_activity: string | null;
20
+ last_activity: string | null;
21
+ };
22
+
@@ -0,0 +1,12 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ /**
6
+ * Serializer for points metrics.
7
+ */
8
+ export type PointsMetric = {
9
+ total: number;
10
+ details?: Array<Record<string, any>>;
11
+ };
12
+
@@ -0,0 +1,15 @@
1
+ /* generated using openapi-typescript-codegen -- do not edit */
2
+ /* istanbul ignore file */
3
+ /* tslint:disable */
4
+ /* eslint-disable */
5
+ /**
6
+ * Serializer for skills metrics with breakdown.
7
+ */
8
+ export type SkillsMetric = {
9
+ reported: number;
10
+ desired: number;
11
+ assigned: number;
12
+ total: number;
13
+ details?: Array<Record<string, any>>;
14
+ };
15
+