@quesmed/types 2.6.296 → 2.6.298
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.
- package/dist/cjs/models/Condition.d.ts +9 -2
- package/dist/cjs/models/Presentation.d.ts +8 -2
- package/dist/cjs/models/Question.d.ts +3 -0
- package/dist/cjs/models/Tutor.d.ts +0 -3
- package/dist/cjs/models/Ukmla2026.d.ts +45 -0
- package/dist/cjs/models/Video.d.ts +1 -0
- package/dist/cjs/resolvers/fragments/question.js +10 -10
- package/dist/cjs/resolvers/fragments/tutor.js +0 -2
- package/dist/cjs/resolvers/fragments/video.js +2 -0
- package/dist/cjs/resolvers/query/restricted/quesBook.js +100 -3
- package/dist/cjs/resolvers/query/restricted/ukmla2026.d.ts +14 -1
- package/dist/cjs/resolvers/query/restricted/ukmla2026.js +52 -1
- package/dist/mjs/models/Condition.d.ts +9 -2
- package/dist/mjs/models/Presentation.d.ts +8 -2
- package/dist/mjs/models/Question.d.ts +3 -0
- package/dist/mjs/models/Tutor.d.ts +0 -3
- package/dist/mjs/models/Ukmla2026.d.ts +45 -0
- package/dist/mjs/models/Video.d.ts +1 -0
- package/dist/mjs/resolvers/fragments/question.js +10 -10
- package/dist/mjs/resolvers/fragments/tutor.js +0 -2
- package/dist/mjs/resolvers/fragments/video.js +2 -0
- package/dist/mjs/resolvers/query/restricted/quesBook.js +101 -4
- package/dist/mjs/resolvers/query/restricted/ukmla2026.d.ts +14 -1
- package/dist/mjs/resolvers/query/restricted/ukmla2026.js +51 -0
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IConcept } from './Concept';
|
|
2
2
|
import { Id } from './Type';
|
|
3
|
+
import { EUkmla2026ChangeType } from './Ukmla2026';
|
|
3
4
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
4
5
|
export interface ICondition {
|
|
5
6
|
id: Id;
|
|
@@ -7,12 +8,18 @@ export interface ICondition {
|
|
|
7
8
|
updatedAt: number | Date;
|
|
8
9
|
deletedAt: number | Date;
|
|
9
10
|
name: string;
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
/** @deprecated Legacy UKMLA content map. Use `bodySystemId` instead. */
|
|
12
|
+
topicId?: Id | null;
|
|
13
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
14
|
+
topic?: IUkmlaTopic | null;
|
|
12
15
|
concepts?: IConcept[];
|
|
16
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
13
17
|
demo?: boolean;
|
|
14
18
|
public: boolean;
|
|
15
19
|
questionIds: number[];
|
|
20
|
+
bodySystemId?: number | null;
|
|
21
|
+
changeType?: EUkmla2026ChangeType | null;
|
|
22
|
+
legacyNames?: string[] | null;
|
|
16
23
|
totalQuestions?: number | null;
|
|
17
24
|
correctQuestions?: number | null;
|
|
18
25
|
incorrectQuestions?: number | null;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Id } from './Type';
|
|
2
|
+
import { EUkmla2026ChangeType } from './Ukmla2026';
|
|
2
3
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
3
4
|
export interface IPresentation {
|
|
4
5
|
id: Id;
|
|
@@ -6,11 +7,16 @@ export interface IPresentation {
|
|
|
6
7
|
updatedAt: number | Date;
|
|
7
8
|
deletedAt: number | Date;
|
|
8
9
|
name: string;
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
11
|
+
topicId?: Id | null;
|
|
12
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
13
|
+
topic?: IUkmlaTopic | null;
|
|
14
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
11
15
|
demo?: boolean;
|
|
12
16
|
public: boolean;
|
|
13
17
|
questionIds: number[];
|
|
18
|
+
changeType?: EUkmla2026ChangeType | null;
|
|
19
|
+
legacyNames?: string[] | null;
|
|
14
20
|
totalQuestions?: number | null;
|
|
15
21
|
correctQuestions?: number | null;
|
|
16
22
|
incorrectQuestions?: number | null;
|
|
@@ -10,6 +10,7 @@ import { IPresentation } from './Presentation';
|
|
|
10
10
|
import { ITopic } from './Topic';
|
|
11
11
|
import { Id } from './Type';
|
|
12
12
|
import { ITheme } from './Ucat';
|
|
13
|
+
import { IUkmla2026Area, IUkmla2026BodySystem } from './Ukmla2026';
|
|
13
14
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
14
15
|
import { EUserLearningPoint, IUser } from './User';
|
|
15
16
|
export declare enum EPsaSectionType {
|
|
@@ -95,6 +96,8 @@ export interface IQuestion {
|
|
|
95
96
|
concept?: IConcept;
|
|
96
97
|
conditions?: ICondition[];
|
|
97
98
|
presentations?: IPresentation[];
|
|
99
|
+
bodySystems?: Pick<IUkmla2026BodySystem, 'id' | 'name' | 'sortOrder'>[];
|
|
100
|
+
areas?: Pick<IUkmla2026Area, 'id' | 'name' | 'sortOrder'>[];
|
|
98
101
|
question: string;
|
|
99
102
|
explanation?: string;
|
|
100
103
|
learningPoint?: string;
|
|
@@ -46,13 +46,10 @@ export interface ITutorHint {
|
|
|
46
46
|
}
|
|
47
47
|
export interface ITutorFeedback {
|
|
48
48
|
rating: number | null;
|
|
49
|
-
categories: string[] | null;
|
|
50
49
|
comment: string | null;
|
|
51
|
-
submittedAt: number | Date | null;
|
|
52
50
|
}
|
|
53
51
|
export interface ITutorFeedbackInput {
|
|
54
52
|
rating?: number;
|
|
55
|
-
categories?: string[];
|
|
56
53
|
comment?: string;
|
|
57
54
|
}
|
|
58
55
|
export interface ITutorResource {
|
|
@@ -43,3 +43,48 @@ export interface IUkmla2026Presentation {
|
|
|
43
43
|
correctQuestions?: number | null;
|
|
44
44
|
incorrectQuestions?: number | null;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* A Quesmed area of clinical practice: our own curated grouping.
|
|
48
|
+
* Conditions and presentations can sit in several areas, and their counts here
|
|
49
|
+
* are specific to this area.
|
|
50
|
+
*/
|
|
51
|
+
export interface IUkmla2026Area {
|
|
52
|
+
id: Id;
|
|
53
|
+
name: string;
|
|
54
|
+
sortOrder: number;
|
|
55
|
+
descriptor?: string | null;
|
|
56
|
+
changeType: EUkmla2026ChangeType;
|
|
57
|
+
legacyNames?: string[];
|
|
58
|
+
conditions?: IUkmla2026AreaCondition[];
|
|
59
|
+
presentations?: IUkmla2026AreaPresentation[];
|
|
60
|
+
totalQuestions?: number | null;
|
|
61
|
+
correctQuestions?: number | null;
|
|
62
|
+
incorrectQuestions?: number | null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A condition as it appears inside one area.
|
|
66
|
+
*/
|
|
67
|
+
export interface IUkmla2026AreaCondition {
|
|
68
|
+
areaId: number;
|
|
69
|
+
conditionId: number;
|
|
70
|
+
name: string;
|
|
71
|
+
changeType: EUkmla2026ChangeType;
|
|
72
|
+
legacyNames?: string[];
|
|
73
|
+
concepts?: IConcept[];
|
|
74
|
+
questionIds?: number[];
|
|
75
|
+
totalQuestions?: number | null;
|
|
76
|
+
correctQuestions?: number | null;
|
|
77
|
+
incorrectQuestions?: number | null;
|
|
78
|
+
}
|
|
79
|
+
/** A presentation as it appears inside one area. */
|
|
80
|
+
export interface IUkmla2026AreaPresentation {
|
|
81
|
+
areaId: number;
|
|
82
|
+
presentationId: number;
|
|
83
|
+
name: string;
|
|
84
|
+
changeType: EUkmla2026ChangeType;
|
|
85
|
+
legacyNames?: string[];
|
|
86
|
+
questionIds?: number[];
|
|
87
|
+
totalQuestions?: number | null;
|
|
88
|
+
correctQuestions?: number | null;
|
|
89
|
+
incorrectQuestions?: number | null;
|
|
90
|
+
}
|
|
@@ -43,20 +43,20 @@ exports.QUESTION_UKMLA_FIELDS = (0, client_1.gql) `
|
|
|
43
43
|
presentations {
|
|
44
44
|
id
|
|
45
45
|
name
|
|
46
|
-
topicId
|
|
47
|
-
topic {
|
|
48
|
-
id
|
|
49
|
-
name
|
|
50
|
-
}
|
|
51
46
|
}
|
|
52
47
|
conditions {
|
|
53
48
|
id
|
|
54
49
|
name
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
}
|
|
51
|
+
bodySystems {
|
|
52
|
+
id
|
|
53
|
+
name
|
|
54
|
+
sortOrder
|
|
55
|
+
}
|
|
56
|
+
areas {
|
|
57
|
+
id
|
|
58
|
+
name
|
|
59
|
+
sortOrder
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
`;
|
|
@@ -59,6 +59,7 @@ exports.VIDEO_LIBRARY_FIELDS = (0, client_1.gql) `
|
|
|
59
59
|
thumbnail
|
|
60
60
|
gif
|
|
61
61
|
bunnyUrl
|
|
62
|
+
hlsUrl
|
|
62
63
|
}
|
|
63
64
|
duration
|
|
64
65
|
status
|
|
@@ -88,6 +89,7 @@ exports.VIDEO_TOKENS_FIELDS = (0, client_1.gql) `
|
|
|
88
89
|
storyboard
|
|
89
90
|
gif
|
|
90
91
|
bunnyUrl
|
|
92
|
+
hlsUrl
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
`;
|
|
@@ -137,14 +137,111 @@ exports.PUBLIC_QBANK_KNOWLEDGE_LIBRARY = (0, client_1.gql) `
|
|
|
137
137
|
}
|
|
138
138
|
`;
|
|
139
139
|
exports.OSCE_KNOWLEDGE_VIDEO_LIBRARY = (0, client_1.gql) `
|
|
140
|
-
|
|
140
|
+
${fragments_1.PICTURE_FIELDS}
|
|
141
|
+
fragment OsceStationMarkFields on OsceStationMark {
|
|
142
|
+
id
|
|
143
|
+
index
|
|
144
|
+
osceStationId
|
|
145
|
+
header
|
|
146
|
+
name
|
|
147
|
+
weight
|
|
148
|
+
__typename
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
fragment VideoFields on Video {
|
|
152
|
+
id
|
|
153
|
+
title
|
|
154
|
+
thumbnail
|
|
155
|
+
description
|
|
156
|
+
duration
|
|
157
|
+
watchLater
|
|
158
|
+
tokens {
|
|
159
|
+
hlsUrl
|
|
160
|
+
bunnyUrl
|
|
161
|
+
thumbnail
|
|
162
|
+
gif
|
|
163
|
+
}
|
|
164
|
+
__typename
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
fragment OsceStationFields on OsceStation {
|
|
168
|
+
id
|
|
169
|
+
updatedAt
|
|
170
|
+
name
|
|
171
|
+
hiddenName
|
|
172
|
+
status
|
|
173
|
+
createdBy
|
|
174
|
+
preDefined
|
|
175
|
+
aiEnabled
|
|
176
|
+
phaseTimers
|
|
177
|
+
userNote {
|
|
178
|
+
id
|
|
179
|
+
userId
|
|
180
|
+
stationId
|
|
181
|
+
note
|
|
182
|
+
updatedAt
|
|
183
|
+
__typename
|
|
184
|
+
}
|
|
185
|
+
osceType {
|
|
186
|
+
id
|
|
187
|
+
name
|
|
188
|
+
__typename
|
|
189
|
+
}
|
|
190
|
+
entitlement {
|
|
191
|
+
id
|
|
192
|
+
name
|
|
193
|
+
index
|
|
194
|
+
__typename
|
|
195
|
+
}
|
|
196
|
+
difficulty
|
|
197
|
+
candidateBrief
|
|
198
|
+
examinerBrief
|
|
199
|
+
actorBrief
|
|
200
|
+
explanation
|
|
201
|
+
marks {
|
|
202
|
+
...OsceStationMarkFields
|
|
203
|
+
__typename
|
|
204
|
+
}
|
|
205
|
+
clinicalData
|
|
206
|
+
picture {
|
|
207
|
+
...PictureFields
|
|
208
|
+
__typename
|
|
209
|
+
}
|
|
210
|
+
candidatePictures {
|
|
211
|
+
...PictureFields
|
|
212
|
+
__typename
|
|
213
|
+
}
|
|
214
|
+
actorPictures {
|
|
215
|
+
...PictureFields
|
|
216
|
+
__typename
|
|
217
|
+
}
|
|
218
|
+
examinerPictures {
|
|
219
|
+
...PictureFields
|
|
220
|
+
__typename
|
|
221
|
+
}
|
|
222
|
+
walkthroughPictures {
|
|
223
|
+
...PictureFields
|
|
224
|
+
__typename
|
|
225
|
+
}
|
|
226
|
+
clinicalPictures {
|
|
227
|
+
...PictureFields
|
|
228
|
+
__typename
|
|
229
|
+
}
|
|
230
|
+
videos {
|
|
231
|
+
...VideoFields
|
|
232
|
+
__typename
|
|
233
|
+
}
|
|
234
|
+
demo
|
|
235
|
+
__typename
|
|
236
|
+
}
|
|
237
|
+
|
|
141
238
|
query OsceKnowledgeVideoLibrary($videosOnly: Boolean) {
|
|
142
239
|
restricted {
|
|
143
240
|
osceBook(videosOnly: $videosOnly) {
|
|
144
241
|
...OsceStationFields
|
|
145
|
-
|
|
146
|
-
score
|
|
242
|
+
__typename
|
|
147
243
|
}
|
|
244
|
+
__typename
|
|
148
245
|
}
|
|
149
246
|
}
|
|
150
247
|
`;
|
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
import { EDifficultyType, IUkmla2026BodySystem, IUkmla2026PresentationLetter, Id } from '../../../models';
|
|
1
|
+
import { EDifficultyType, IUkmla2026Area, IUkmla2026BodySystem, IUkmla2026PresentationLetter, Id } from '../../../models';
|
|
2
2
|
import { IPreBuildMarksheet } from '../../mutation/restricted';
|
|
3
3
|
import { RestrictedData, graphqlNormalize } from '../../types';
|
|
4
4
|
export type IUkmla2026BodySystemsData = RestrictedData<(graphqlNormalize & IUkmla2026BodySystem)[], 'ukmlaBodySystems'>;
|
|
5
5
|
export declare const UKMLA_2026_BODY_SYSTEMS: import("@apollo/client").DocumentNode;
|
|
6
6
|
export type IUkmla2026PresentationsData = RestrictedData<(graphqlNormalize & IUkmla2026PresentationLetter)[], 'ukmlaPresentations'>;
|
|
7
7
|
export declare const UKMLA_2026_PRESENTATIONS: import("@apollo/client").DocumentNode;
|
|
8
|
+
export type IUkmla2026AreasData = RestrictedData<(graphqlNormalize & IUkmla2026Area)[], 'ukmlaAreas'>;
|
|
9
|
+
export declare const UKMLA_2026_AREAS: import("@apollo/client").DocumentNode;
|
|
10
|
+
/**
|
|
11
|
+
* One item inside one area of the Areas of Practice tab. `itemId` is the
|
|
12
|
+
* `conditionId` or `presentationId`, depending on which list it is passed in.
|
|
13
|
+
*/
|
|
14
|
+
export interface IUkmla2026AreaItemInput {
|
|
15
|
+
areaId: number;
|
|
16
|
+
itemId: number;
|
|
17
|
+
}
|
|
8
18
|
export interface IPreBuildUkmla2026MarksheetVar {
|
|
9
19
|
bodySystemIds?: number[];
|
|
10
20
|
conditionIds?: number[];
|
|
11
21
|
presentationIds?: number[];
|
|
22
|
+
areaIds?: number[];
|
|
23
|
+
areaConditions?: IUkmla2026AreaItemInput[];
|
|
24
|
+
areaPresentations?: IUkmla2026AreaItemInput[];
|
|
12
25
|
search?: string;
|
|
13
26
|
marksheetId?: Id;
|
|
14
27
|
source: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PRE_BUILD_UKMLA_2026_MARKSHEET = exports.UKMLA_2026_PRESENTATIONS = exports.UKMLA_2026_BODY_SYSTEMS = void 0;
|
|
3
|
+
exports.PRE_BUILD_UKMLA_2026_MARKSHEET = exports.UKMLA_2026_AREAS = exports.UKMLA_2026_PRESENTATIONS = exports.UKMLA_2026_BODY_SYSTEMS = void 0;
|
|
4
4
|
const client_1 = require("@apollo/client");
|
|
5
5
|
exports.UKMLA_2026_BODY_SYSTEMS = (0, client_1.gql) `
|
|
6
6
|
query Ukmla2026BodySystems {
|
|
@@ -55,11 +55,59 @@ exports.UKMLA_2026_PRESENTATIONS = (0, client_1.gql) `
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
`;
|
|
58
|
+
exports.UKMLA_2026_AREAS = (0, client_1.gql) `
|
|
59
|
+
query Ukmla2026Areas {
|
|
60
|
+
restricted {
|
|
61
|
+
ukmlaAreas {
|
|
62
|
+
id
|
|
63
|
+
name
|
|
64
|
+
sortOrder
|
|
65
|
+
descriptor
|
|
66
|
+
changeType
|
|
67
|
+
legacyNames
|
|
68
|
+
totalQuestions
|
|
69
|
+
correctQuestions
|
|
70
|
+
incorrectQuestions
|
|
71
|
+
conditions {
|
|
72
|
+
areaId
|
|
73
|
+
conditionId
|
|
74
|
+
name
|
|
75
|
+
changeType
|
|
76
|
+
legacyNames
|
|
77
|
+
questionIds
|
|
78
|
+
totalQuestions
|
|
79
|
+
correctQuestions
|
|
80
|
+
incorrectQuestions
|
|
81
|
+
concepts {
|
|
82
|
+
id
|
|
83
|
+
name
|
|
84
|
+
topicId
|
|
85
|
+
chapterId
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
presentations {
|
|
89
|
+
areaId
|
|
90
|
+
presentationId
|
|
91
|
+
name
|
|
92
|
+
changeType
|
|
93
|
+
legacyNames
|
|
94
|
+
questionIds
|
|
95
|
+
totalQuestions
|
|
96
|
+
correctQuestions
|
|
97
|
+
incorrectQuestions
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
58
103
|
exports.PRE_BUILD_UKMLA_2026_MARKSHEET = (0, client_1.gql) `
|
|
59
104
|
query PreBuildUkmla2026Marksheet(
|
|
60
105
|
$bodySystemIds: [Int!]
|
|
61
106
|
$conditionIds: [Int!]
|
|
62
107
|
$presentationIds: [Int!]
|
|
108
|
+
$areaIds: [Int!]
|
|
109
|
+
$areaConditions: [Ukmla2026AreaItemInput!]
|
|
110
|
+
$areaPresentations: [Ukmla2026AreaItemInput!]
|
|
63
111
|
$source: String!
|
|
64
112
|
$search: String
|
|
65
113
|
$marksheetId: Int
|
|
@@ -71,6 +119,9 @@ exports.PRE_BUILD_UKMLA_2026_MARKSHEET = (0, client_1.gql) `
|
|
|
71
119
|
bodySystemIds: $bodySystemIds
|
|
72
120
|
conditionIds: $conditionIds
|
|
73
121
|
presentationIds: $presentationIds
|
|
122
|
+
areaIds: $areaIds
|
|
123
|
+
areaConditions: $areaConditions
|
|
124
|
+
areaPresentations: $areaPresentations
|
|
74
125
|
source: $source
|
|
75
126
|
search: $search
|
|
76
127
|
marksheetId: $marksheetId
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IConcept } from './Concept';
|
|
2
2
|
import { Id } from './Type';
|
|
3
|
+
import { EUkmla2026ChangeType } from './Ukmla2026';
|
|
3
4
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
4
5
|
export interface ICondition {
|
|
5
6
|
id: Id;
|
|
@@ -7,12 +8,18 @@ export interface ICondition {
|
|
|
7
8
|
updatedAt: number | Date;
|
|
8
9
|
deletedAt: number | Date;
|
|
9
10
|
name: string;
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
/** @deprecated Legacy UKMLA content map. Use `bodySystemId` instead. */
|
|
12
|
+
topicId?: Id | null;
|
|
13
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
14
|
+
topic?: IUkmlaTopic | null;
|
|
12
15
|
concepts?: IConcept[];
|
|
16
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
13
17
|
demo?: boolean;
|
|
14
18
|
public: boolean;
|
|
15
19
|
questionIds: number[];
|
|
20
|
+
bodySystemId?: number | null;
|
|
21
|
+
changeType?: EUkmla2026ChangeType | null;
|
|
22
|
+
legacyNames?: string[] | null;
|
|
16
23
|
totalQuestions?: number | null;
|
|
17
24
|
correctQuestions?: number | null;
|
|
18
25
|
incorrectQuestions?: number | null;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Id } from './Type';
|
|
2
|
+
import { EUkmla2026ChangeType } from './Ukmla2026';
|
|
2
3
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
3
4
|
export interface IPresentation {
|
|
4
5
|
id: Id;
|
|
@@ -6,11 +7,16 @@ export interface IPresentation {
|
|
|
6
7
|
updatedAt: number | Date;
|
|
7
8
|
deletedAt: number | Date;
|
|
8
9
|
name: string;
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
11
|
+
topicId?: Id | null;
|
|
12
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
13
|
+
topic?: IUkmlaTopic | null;
|
|
14
|
+
/** @deprecated Legacy UKMLA content map. Not set on UKMLA 2026 rows. */
|
|
11
15
|
demo?: boolean;
|
|
12
16
|
public: boolean;
|
|
13
17
|
questionIds: number[];
|
|
18
|
+
changeType?: EUkmla2026ChangeType | null;
|
|
19
|
+
legacyNames?: string[] | null;
|
|
14
20
|
totalQuestions?: number | null;
|
|
15
21
|
correctQuestions?: number | null;
|
|
16
22
|
incorrectQuestions?: number | null;
|
|
@@ -10,6 +10,7 @@ import { IPresentation } from './Presentation';
|
|
|
10
10
|
import { ITopic } from './Topic';
|
|
11
11
|
import { Id } from './Type';
|
|
12
12
|
import { ITheme } from './Ucat';
|
|
13
|
+
import { IUkmla2026Area, IUkmla2026BodySystem } from './Ukmla2026';
|
|
13
14
|
import { IUkmlaTopic } from './UkmlaTopic';
|
|
14
15
|
import { EUserLearningPoint, IUser } from './User';
|
|
15
16
|
export declare enum EPsaSectionType {
|
|
@@ -95,6 +96,8 @@ export interface IQuestion {
|
|
|
95
96
|
concept?: IConcept;
|
|
96
97
|
conditions?: ICondition[];
|
|
97
98
|
presentations?: IPresentation[];
|
|
99
|
+
bodySystems?: Pick<IUkmla2026BodySystem, 'id' | 'name' | 'sortOrder'>[];
|
|
100
|
+
areas?: Pick<IUkmla2026Area, 'id' | 'name' | 'sortOrder'>[];
|
|
98
101
|
question: string;
|
|
99
102
|
explanation?: string;
|
|
100
103
|
learningPoint?: string;
|
|
@@ -46,13 +46,10 @@ export interface ITutorHint {
|
|
|
46
46
|
}
|
|
47
47
|
export interface ITutorFeedback {
|
|
48
48
|
rating: number | null;
|
|
49
|
-
categories: string[] | null;
|
|
50
49
|
comment: string | null;
|
|
51
|
-
submittedAt: number | Date | null;
|
|
52
50
|
}
|
|
53
51
|
export interface ITutorFeedbackInput {
|
|
54
52
|
rating?: number;
|
|
55
|
-
categories?: string[];
|
|
56
53
|
comment?: string;
|
|
57
54
|
}
|
|
58
55
|
export interface ITutorResource {
|
|
@@ -43,3 +43,48 @@ export interface IUkmla2026Presentation {
|
|
|
43
43
|
correctQuestions?: number | null;
|
|
44
44
|
incorrectQuestions?: number | null;
|
|
45
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* A Quesmed area of clinical practice: our own curated grouping.
|
|
48
|
+
* Conditions and presentations can sit in several areas, and their counts here
|
|
49
|
+
* are specific to this area.
|
|
50
|
+
*/
|
|
51
|
+
export interface IUkmla2026Area {
|
|
52
|
+
id: Id;
|
|
53
|
+
name: string;
|
|
54
|
+
sortOrder: number;
|
|
55
|
+
descriptor?: string | null;
|
|
56
|
+
changeType: EUkmla2026ChangeType;
|
|
57
|
+
legacyNames?: string[];
|
|
58
|
+
conditions?: IUkmla2026AreaCondition[];
|
|
59
|
+
presentations?: IUkmla2026AreaPresentation[];
|
|
60
|
+
totalQuestions?: number | null;
|
|
61
|
+
correctQuestions?: number | null;
|
|
62
|
+
incorrectQuestions?: number | null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A condition as it appears inside one area.
|
|
66
|
+
*/
|
|
67
|
+
export interface IUkmla2026AreaCondition {
|
|
68
|
+
areaId: number;
|
|
69
|
+
conditionId: number;
|
|
70
|
+
name: string;
|
|
71
|
+
changeType: EUkmla2026ChangeType;
|
|
72
|
+
legacyNames?: string[];
|
|
73
|
+
concepts?: IConcept[];
|
|
74
|
+
questionIds?: number[];
|
|
75
|
+
totalQuestions?: number | null;
|
|
76
|
+
correctQuestions?: number | null;
|
|
77
|
+
incorrectQuestions?: number | null;
|
|
78
|
+
}
|
|
79
|
+
/** A presentation as it appears inside one area. */
|
|
80
|
+
export interface IUkmla2026AreaPresentation {
|
|
81
|
+
areaId: number;
|
|
82
|
+
presentationId: number;
|
|
83
|
+
name: string;
|
|
84
|
+
changeType: EUkmla2026ChangeType;
|
|
85
|
+
legacyNames?: string[];
|
|
86
|
+
questionIds?: number[];
|
|
87
|
+
totalQuestions?: number | null;
|
|
88
|
+
correctQuestions?: number | null;
|
|
89
|
+
incorrectQuestions?: number | null;
|
|
90
|
+
}
|
|
@@ -40,20 +40,20 @@ export const QUESTION_UKMLA_FIELDS = gql `
|
|
|
40
40
|
presentations {
|
|
41
41
|
id
|
|
42
42
|
name
|
|
43
|
-
topicId
|
|
44
|
-
topic {
|
|
45
|
-
id
|
|
46
|
-
name
|
|
47
|
-
}
|
|
48
43
|
}
|
|
49
44
|
conditions {
|
|
50
45
|
id
|
|
51
46
|
name
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
}
|
|
48
|
+
bodySystems {
|
|
49
|
+
id
|
|
50
|
+
name
|
|
51
|
+
sortOrder
|
|
52
|
+
}
|
|
53
|
+
areas {
|
|
54
|
+
id
|
|
55
|
+
name
|
|
56
|
+
sortOrder
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { gql } from '@apollo/client';
|
|
2
|
-
import { CHAPTER_FIELDS } from '../../fragments';
|
|
2
|
+
import { CHAPTER_FIELDS, PICTURE_FIELDS } from '../../fragments';
|
|
3
3
|
import { OSCE_STATION_FIELDS } from './../../fragments/osce';
|
|
4
4
|
export const QBANK_KNOWLEDGE_VIDEO_LIBRARY = gql `
|
|
5
5
|
${CHAPTER_FIELDS}
|
|
@@ -134,14 +134,111 @@ export const PUBLIC_QBANK_KNOWLEDGE_LIBRARY = gql `
|
|
|
134
134
|
}
|
|
135
135
|
`;
|
|
136
136
|
export const OSCE_KNOWLEDGE_VIDEO_LIBRARY = gql `
|
|
137
|
-
|
|
137
|
+
${PICTURE_FIELDS}
|
|
138
|
+
fragment OsceStationMarkFields on OsceStationMark {
|
|
139
|
+
id
|
|
140
|
+
index
|
|
141
|
+
osceStationId
|
|
142
|
+
header
|
|
143
|
+
name
|
|
144
|
+
weight
|
|
145
|
+
__typename
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
fragment VideoFields on Video {
|
|
149
|
+
id
|
|
150
|
+
title
|
|
151
|
+
thumbnail
|
|
152
|
+
description
|
|
153
|
+
duration
|
|
154
|
+
watchLater
|
|
155
|
+
tokens {
|
|
156
|
+
hlsUrl
|
|
157
|
+
bunnyUrl
|
|
158
|
+
thumbnail
|
|
159
|
+
gif
|
|
160
|
+
}
|
|
161
|
+
__typename
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
fragment OsceStationFields on OsceStation {
|
|
165
|
+
id
|
|
166
|
+
updatedAt
|
|
167
|
+
name
|
|
168
|
+
hiddenName
|
|
169
|
+
status
|
|
170
|
+
createdBy
|
|
171
|
+
preDefined
|
|
172
|
+
aiEnabled
|
|
173
|
+
phaseTimers
|
|
174
|
+
userNote {
|
|
175
|
+
id
|
|
176
|
+
userId
|
|
177
|
+
stationId
|
|
178
|
+
note
|
|
179
|
+
updatedAt
|
|
180
|
+
__typename
|
|
181
|
+
}
|
|
182
|
+
osceType {
|
|
183
|
+
id
|
|
184
|
+
name
|
|
185
|
+
__typename
|
|
186
|
+
}
|
|
187
|
+
entitlement {
|
|
188
|
+
id
|
|
189
|
+
name
|
|
190
|
+
index
|
|
191
|
+
__typename
|
|
192
|
+
}
|
|
193
|
+
difficulty
|
|
194
|
+
candidateBrief
|
|
195
|
+
examinerBrief
|
|
196
|
+
actorBrief
|
|
197
|
+
explanation
|
|
198
|
+
marks {
|
|
199
|
+
...OsceStationMarkFields
|
|
200
|
+
__typename
|
|
201
|
+
}
|
|
202
|
+
clinicalData
|
|
203
|
+
picture {
|
|
204
|
+
...PictureFields
|
|
205
|
+
__typename
|
|
206
|
+
}
|
|
207
|
+
candidatePictures {
|
|
208
|
+
...PictureFields
|
|
209
|
+
__typename
|
|
210
|
+
}
|
|
211
|
+
actorPictures {
|
|
212
|
+
...PictureFields
|
|
213
|
+
__typename
|
|
214
|
+
}
|
|
215
|
+
examinerPictures {
|
|
216
|
+
...PictureFields
|
|
217
|
+
__typename
|
|
218
|
+
}
|
|
219
|
+
walkthroughPictures {
|
|
220
|
+
...PictureFields
|
|
221
|
+
__typename
|
|
222
|
+
}
|
|
223
|
+
clinicalPictures {
|
|
224
|
+
...PictureFields
|
|
225
|
+
__typename
|
|
226
|
+
}
|
|
227
|
+
videos {
|
|
228
|
+
...VideoFields
|
|
229
|
+
__typename
|
|
230
|
+
}
|
|
231
|
+
demo
|
|
232
|
+
__typename
|
|
233
|
+
}
|
|
234
|
+
|
|
138
235
|
query OsceKnowledgeVideoLibrary($videosOnly: Boolean) {
|
|
139
236
|
restricted {
|
|
140
237
|
osceBook(videosOnly: $videosOnly) {
|
|
141
238
|
...OsceStationFields
|
|
142
|
-
|
|
143
|
-
score
|
|
239
|
+
__typename
|
|
144
240
|
}
|
|
241
|
+
__typename
|
|
145
242
|
}
|
|
146
243
|
}
|
|
147
244
|
`;
|
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
import { EDifficultyType, IUkmla2026BodySystem, IUkmla2026PresentationLetter, Id } from '../../../models';
|
|
1
|
+
import { EDifficultyType, IUkmla2026Area, IUkmla2026BodySystem, IUkmla2026PresentationLetter, Id } from '../../../models';
|
|
2
2
|
import { IPreBuildMarksheet } from '../../mutation/restricted';
|
|
3
3
|
import { RestrictedData, graphqlNormalize } from '../../types';
|
|
4
4
|
export type IUkmla2026BodySystemsData = RestrictedData<(graphqlNormalize & IUkmla2026BodySystem)[], 'ukmlaBodySystems'>;
|
|
5
5
|
export declare const UKMLA_2026_BODY_SYSTEMS: import("@apollo/client").DocumentNode;
|
|
6
6
|
export type IUkmla2026PresentationsData = RestrictedData<(graphqlNormalize & IUkmla2026PresentationLetter)[], 'ukmlaPresentations'>;
|
|
7
7
|
export declare const UKMLA_2026_PRESENTATIONS: import("@apollo/client").DocumentNode;
|
|
8
|
+
export type IUkmla2026AreasData = RestrictedData<(graphqlNormalize & IUkmla2026Area)[], 'ukmlaAreas'>;
|
|
9
|
+
export declare const UKMLA_2026_AREAS: import("@apollo/client").DocumentNode;
|
|
10
|
+
/**
|
|
11
|
+
* One item inside one area of the Areas of Practice tab. `itemId` is the
|
|
12
|
+
* `conditionId` or `presentationId`, depending on which list it is passed in.
|
|
13
|
+
*/
|
|
14
|
+
export interface IUkmla2026AreaItemInput {
|
|
15
|
+
areaId: number;
|
|
16
|
+
itemId: number;
|
|
17
|
+
}
|
|
8
18
|
export interface IPreBuildUkmla2026MarksheetVar {
|
|
9
19
|
bodySystemIds?: number[];
|
|
10
20
|
conditionIds?: number[];
|
|
11
21
|
presentationIds?: number[];
|
|
22
|
+
areaIds?: number[];
|
|
23
|
+
areaConditions?: IUkmla2026AreaItemInput[];
|
|
24
|
+
areaPresentations?: IUkmla2026AreaItemInput[];
|
|
12
25
|
search?: string;
|
|
13
26
|
marksheetId?: Id;
|
|
14
27
|
source: string;
|
|
@@ -52,11 +52,59 @@ export const UKMLA_2026_PRESENTATIONS = gql `
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
`;
|
|
55
|
+
export const UKMLA_2026_AREAS = gql `
|
|
56
|
+
query Ukmla2026Areas {
|
|
57
|
+
restricted {
|
|
58
|
+
ukmlaAreas {
|
|
59
|
+
id
|
|
60
|
+
name
|
|
61
|
+
sortOrder
|
|
62
|
+
descriptor
|
|
63
|
+
changeType
|
|
64
|
+
legacyNames
|
|
65
|
+
totalQuestions
|
|
66
|
+
correctQuestions
|
|
67
|
+
incorrectQuestions
|
|
68
|
+
conditions {
|
|
69
|
+
areaId
|
|
70
|
+
conditionId
|
|
71
|
+
name
|
|
72
|
+
changeType
|
|
73
|
+
legacyNames
|
|
74
|
+
questionIds
|
|
75
|
+
totalQuestions
|
|
76
|
+
correctQuestions
|
|
77
|
+
incorrectQuestions
|
|
78
|
+
concepts {
|
|
79
|
+
id
|
|
80
|
+
name
|
|
81
|
+
topicId
|
|
82
|
+
chapterId
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
presentations {
|
|
86
|
+
areaId
|
|
87
|
+
presentationId
|
|
88
|
+
name
|
|
89
|
+
changeType
|
|
90
|
+
legacyNames
|
|
91
|
+
questionIds
|
|
92
|
+
totalQuestions
|
|
93
|
+
correctQuestions
|
|
94
|
+
incorrectQuestions
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
`;
|
|
55
100
|
export const PRE_BUILD_UKMLA_2026_MARKSHEET = gql `
|
|
56
101
|
query PreBuildUkmla2026Marksheet(
|
|
57
102
|
$bodySystemIds: [Int!]
|
|
58
103
|
$conditionIds: [Int!]
|
|
59
104
|
$presentationIds: [Int!]
|
|
105
|
+
$areaIds: [Int!]
|
|
106
|
+
$areaConditions: [Ukmla2026AreaItemInput!]
|
|
107
|
+
$areaPresentations: [Ukmla2026AreaItemInput!]
|
|
60
108
|
$source: String!
|
|
61
109
|
$search: String
|
|
62
110
|
$marksheetId: Int
|
|
@@ -68,6 +116,9 @@ export const PRE_BUILD_UKMLA_2026_MARKSHEET = gql `
|
|
|
68
116
|
bodySystemIds: $bodySystemIds
|
|
69
117
|
conditionIds: $conditionIds
|
|
70
118
|
presentationIds: $presentationIds
|
|
119
|
+
areaIds: $areaIds
|
|
120
|
+
areaConditions: $areaConditions
|
|
121
|
+
areaPresentations: $areaPresentations
|
|
71
122
|
source: $source
|
|
72
123
|
search: $search
|
|
73
124
|
marksheetId: $marksheetId
|