@reqquest/ui 1.0.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 (41) hide show
  1. package/README.md +3 -0
  2. package/dist/api.d.ts +595 -0
  3. package/dist/api.js +618 -0
  4. package/dist/components/ButtonLoadingIcon.svelte +27 -0
  5. package/dist/components/ButtonLoadingIcon.svelte.d.ts +18 -0
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/index.js +1 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.js +4 -0
  10. package/dist/registry.d.ts +138 -0
  11. package/dist/registry.js +42 -0
  12. package/dist/stores/IStateStore.d.ts +5 -0
  13. package/dist/stores/IStateStore.js +1 -0
  14. package/dist/typed-client/index.d.ts +25 -0
  15. package/dist/typed-client/index.js +23 -0
  16. package/dist/typed-client/runtime/batcher.d.ts +105 -0
  17. package/dist/typed-client/runtime/batcher.js +203 -0
  18. package/dist/typed-client/runtime/createClient.d.ts +17 -0
  19. package/dist/typed-client/runtime/createClient.js +24 -0
  20. package/dist/typed-client/runtime/error.d.ts +18 -0
  21. package/dist/typed-client/runtime/error.js +19 -0
  22. package/dist/typed-client/runtime/fetcher.d.ts +10 -0
  23. package/dist/typed-client/runtime/fetcher.js +65 -0
  24. package/dist/typed-client/runtime/generateGraphqlOperation.d.ts +30 -0
  25. package/dist/typed-client/runtime/generateGraphqlOperation.js +128 -0
  26. package/dist/typed-client/runtime/index.d.ts +11 -0
  27. package/dist/typed-client/runtime/index.js +10 -0
  28. package/dist/typed-client/runtime/linkTypeMap.d.ts +9 -0
  29. package/dist/typed-client/runtime/linkTypeMap.js +95 -0
  30. package/dist/typed-client/runtime/typeSelection.d.ts +28 -0
  31. package/dist/typed-client/runtime/typeSelection.js +3 -0
  32. package/dist/typed-client/runtime/types.d.ts +55 -0
  33. package/dist/typed-client/runtime/types.js +2 -0
  34. package/dist/typed-client/schema.d.ts +1483 -0
  35. package/dist/typed-client/schema.graphql +1217 -0
  36. package/dist/typed-client/schema.js +313 -0
  37. package/dist/typed-client/types.d.ts +540 -0
  38. package/dist/typed-client/types.js +1368 -0
  39. package/dist/util.d.ts +2 -0
  40. package/dist/util.js +3 -0
  41. package/package.json +56 -0
@@ -0,0 +1,1217 @@
1
+ type Access {
2
+ """
3
+ Current user may create a new app request, either for themselves or on behalf of another user.
4
+ """
5
+ createAppRequest: Boolean!
6
+
7
+ """
8
+ Current user is permitted to create new periods in the period management UI.
9
+ """
10
+ createPeriod: Boolean!
11
+
12
+ """
13
+ Current user is permitted to create new roles in the role management UI.
14
+ """
15
+ createRole: Boolean!
16
+
17
+ """Current user is permitted to view the app request list."""
18
+ viewAppRequestList: Boolean!
19
+
20
+ """Current user is permitted to view the applicant dashboard."""
21
+ viewApplicantDashboard: Boolean!
22
+
23
+ """Current user is permitted to view the period management UI."""
24
+ viewPeriodManagement: Boolean!
25
+
26
+ """Current user is permitted to view the reviewer dashboard."""
27
+ viewReviewerInterface: Boolean!
28
+
29
+ """Current user is permitted to view the role management UI."""
30
+ viewRoleManagement: Boolean!
31
+ }
32
+
33
+ type AccessControl {
34
+ description: String!
35
+ name: String!
36
+ }
37
+
38
+ type AccessGrantTag {
39
+ category: String!
40
+ categoryLabel: String!
41
+ label: String!
42
+ tag: String!
43
+ }
44
+
45
+ type AccessRole {
46
+ actions: RoleActions!
47
+
48
+ """
49
+ A description of the grant. This is not used for anything, but can be useful for admins to understand what the grant was trying to do.
50
+ """
51
+ description: String
52
+ grants: [AccessRoleGrant!]!
53
+ groups: [String!]!
54
+ id: ID!
55
+ name: String!
56
+ scope: String
57
+ }
58
+
59
+ input AccessRoleFilter {
60
+ groups: [String!]
61
+ ids: [ID!]
62
+ names: [String!]
63
+ scopes: [String!]
64
+ }
65
+
66
+ type AccessRoleGrant {
67
+ actions: AccessRoleGrantActions!
68
+
69
+ "\n If true, this grant allows the action specified by the selected controls. If false, it removes\n the controls.\n\n Removing a control only happens within the context of a single role. If another role grants the\n same control, the action is allowed. This is more of an exception system than a denial\n system. So you can do something like add the \"view\" control to the \"movie\" subject type in one\n grant, and then in a second grant in the same role, remove it from \"The Princess Bride\". Now you\n have a role that grants \"view\" on all movies _except_ The Princess Bride. If the user has another role\n that grants \"view\" on The Princess Bride (or on all movies), they can view it based on that other role.\n "
70
+ allow: Boolean!
71
+ controls: [String!]!
72
+ id: ID!
73
+
74
+ """The type of subject this grant applies to, e.g. "movie"."""
75
+ subjectType: AccessSubjectType!
76
+ tags: [AccessGrantTag!]!
77
+ }
78
+
79
+ type AccessRoleGrantActions {
80
+ delete: Boolean!
81
+ update: Boolean!
82
+ }
83
+
84
+ input AccessRoleGrantCreate {
85
+ allow: Boolean!
86
+
87
+ """
88
+ A list of controls that are allowed or denied by this grant. Each subjectType has a list of available controls, available under Query.subjectTypes.
89
+ """
90
+ controls: [String!]
91
+ subjectType: String
92
+
93
+ """
94
+ A list of tags to restrict a grant. For instance, if this is added to a grant on PromptAnswer-update, each tag refers to a subset of App Requests.
95
+ """
96
+ tags: [AccessTagInput!]
97
+ }
98
+
99
+ input AccessRoleGrantUpdate {
100
+ allow: Boolean!
101
+
102
+ """
103
+ A list of controls that are allowed or denied by this grant. Each subjectType has a list of available controls, available under Query.subjectTypes.
104
+ """
105
+ controls: [String!]
106
+ subjectType: String
107
+
108
+ """
109
+ A list of tags to restrict a grant. For instance, if this is added to a grant on PromptAnswer-update, each tag refers to a subset of App Requests.
110
+ """
111
+ tags: [AccessTagInput!]
112
+ }
113
+
114
+ input AccessRoleInput {
115
+ """
116
+ A description of the role. This is not used for anything, but can be useful for admins to understand what the role is trying to do.
117
+ """
118
+ description: String
119
+
120
+ """A list of groups this role is associated with."""
121
+ groups: [String!]!
122
+ name: String!
123
+
124
+ """Attach this role to a specific authentication scope, e.g. "parent"."""
125
+ scope: String
126
+ }
127
+
128
+ type AccessRoleValidatedResponse {
129
+ accessRole: AccessRole
130
+ messages: [MutationMessage!]!
131
+
132
+ """
133
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
134
+ """
135
+ success: Boolean!
136
+ }
137
+
138
+ type AccessSubjectType {
139
+ """
140
+ A list of all possible controls for this subjectType. Use this to populate the control dropdown when creating a grant.
141
+ """
142
+ controls: [AccessControl!]!
143
+
144
+ """
145
+ A longer explanation of the subject type for display in the role management interface.
146
+ """
147
+ description: String
148
+ name: String!
149
+ tags: [AccessTagCategory!]!
150
+
151
+ """
152
+ A slightly longer version of the subject type's name, for display in the role management interface.
153
+ """
154
+ title: String!
155
+ }
156
+
157
+ type AccessTag {
158
+ label: String!
159
+ value: String!
160
+ }
161
+
162
+ type AccessTagCategory {
163
+ category: String!
164
+ description: String
165
+ label: String!
166
+ listable: Boolean!
167
+
168
+ """
169
+ A list of all possible tags for this category. Use this to populate the tag dropdown when creating a grant.
170
+ """
171
+ tags: [AccessTag!]!
172
+ }
173
+
174
+ input AccessTagInput {
175
+ """The category this tag belongs to, e.g. "State"."""
176
+ category: String!
177
+
178
+ """The tag value, e.g. "TX"."""
179
+ tag: String!
180
+ }
181
+
182
+ """A user that has or once had access to the system."""
183
+ type AccessUser {
184
+ fullname: String!
185
+ groups: [String!]!
186
+ login: ID!
187
+ otherIdentifiers: [AccessUserIdentifier!]!
188
+
189
+ """
190
+ A JSON object containing any information about the user that the implementing application wants to store. Could be useful for constructing personalized UI.
191
+ """
192
+ otherInfo: JsonData
193
+ roles: AccessRole!
194
+ }
195
+
196
+ input AccessUserFilter {
197
+ logins: [ID!]
198
+
199
+ """Filter by identifiers aside from username, like an Employee ID."""
200
+ otherIdentifiers: [String!]
201
+ otherIdentifiersByLabel: [AccessUserIdentifierInput!]
202
+ search: String
203
+
204
+ """If true, only return the user that is currently logged in."""
205
+ self: Boolean
206
+ }
207
+
208
+ """
209
+ A label and ID pair for an external user unique ID. For example, { label: "Student ID", id: "123456" }
210
+ """
211
+ type AccessUserIdentifier {
212
+ """The unique ID for this identifier, e.g. "123456"."""
213
+ id: ID!
214
+
215
+ """The label for this identifier, e.g. "Student ID"."""
216
+ label: String!
217
+ }
218
+
219
+ """
220
+ A label and ID pair for an external user unique ID. For example, { label: "Student ID", id: "123456" }
221
+ """
222
+ input AccessUserIdentifierInput {
223
+ id: ID!
224
+ label: String!
225
+ }
226
+
227
+ """
228
+ Represents a group of applications all being applied for at the same time. As part of the request, multiple applications will be created and either eliminated as ineligible or submitted for approval.
229
+ """
230
+ type AppRequest {
231
+ """Actions the user can take on this app request."""
232
+ actions: AppRequestActions!
233
+
234
+ """
235
+ The activity log for this app request. This is a list of actions taken on the app request, such as submission, updating prompts, make an offer, add a note, etc. It will be sorted by the date of the activity in descending order.
236
+ """
237
+ activity(
238
+ """
239
+ Filters to apply to the activity log. This can be used to filter by action type, date range, etc.
240
+ """
241
+ filters: AppRequestActivityFilters
242
+ ): [AppRequestActivity!]!
243
+ applicant: AccessUser!
244
+ applications: [Application!]!
245
+
246
+ """
247
+ Date that this request was considered closed and no longer editable. If active or re-opened, will be null. If closed again, will be the second closure date.
248
+ """
249
+ closedAt: DateTime
250
+ createdAt: DateTime!
251
+
252
+ """
253
+ All data that has been gathered from the user for this request. It is a Record whose properties are the prompt keys and values are the data gathered by the corresponding prompt dialog.
254
+ """
255
+ data(
256
+ """
257
+ Provide the schemaVersion at the time the UI was built. Will throw an error if the client is too old, so it knows to refresh.
258
+ """
259
+ schemaVersion: String
260
+ ): JsonData!
261
+ id: ID!
262
+
263
+ """
264
+ Indexes associated with the App Request. These are pieces of data extracted from the App Request by individual prompts in the ReqQuest project. They have several uses such as filtering App Requests and enriching list views.
265
+ """
266
+ indexCategories(
267
+ """
268
+ Returns indexes that are flagged to appear in this destination. Also sorts for this destination.
269
+ """
270
+ for: AppRequestIndexDestination
271
+ ): [AppRequestIndexCategory!]!
272
+
273
+ """The period this appRequest is associated with."""
274
+ period: Period!
275
+
276
+ """
277
+ Retrieve a specific prompt by its ID. This is useful for the UI to get the full prompt data and configuration when trying to edit an individual prompt. We don't want to be downloading all the config data for everything up front.
278
+ """
279
+ prompt(promptId: ID!): RequirementPrompt!
280
+ status: AppRequestStatus!
281
+
282
+ """
283
+ The most pertinent status reason for this app request. The logic is complicated and depends on the AppRequest's status.
284
+ """
285
+ statusReason: String
286
+ updatedAt: DateTime!
287
+ }
288
+
289
+ type AppRequestActions {
290
+ """
291
+ User may cancel this app request as the owner. Separate from closing as a reviewer/admin.
292
+ """
293
+ cancel: Boolean!
294
+
295
+ """
296
+ User may close this app request as a reviewer/admin. Separate from cancelling as the app request owner.
297
+ """
298
+ close: Boolean!
299
+
300
+ """User may make an offer on this app request."""
301
+ offer: Boolean!
302
+
303
+ """
304
+ User may reopen this app request, whether as the owner or as a reviewer/admin.
305
+ """
306
+ reopen: Boolean!
307
+
308
+ """User may return this app request to the applicant phase."""
309
+ return: Boolean!
310
+
311
+ """Whether the user can view this app request as a reviewer."""
312
+ review: Boolean!
313
+
314
+ """User may submit this app request either as or on behalf of the owner."""
315
+ submit: Boolean!
316
+ }
317
+
318
+ type AppRequestActivity {
319
+ action: String!
320
+
321
+ """The app request this activity is associated with."""
322
+ appRequest: AppRequest!
323
+
324
+ """The date and time when the action occurred."""
325
+ createdAt: DateTime!
326
+
327
+ """
328
+ A JSON object containing additional data about the activity. This could be filtered but different actions would place different data here so it is not strongly typed.
329
+ """
330
+ data: JsonData
331
+
332
+ """
333
+ A detailed description of the activity. This is not meant to be filtered and could contain specific details about the action.
334
+ """
335
+ description: String
336
+ id: ID!
337
+
338
+ """
339
+ If this activity was performed by an impersonated user, this will be the user that did the impersonation.
340
+ """
341
+ impersonatedBy: AccessUser
342
+
343
+ """The user that performed the activity."""
344
+ user: AccessUser!
345
+ }
346
+
347
+ """This is used to filter a list of activities."""
348
+ input AppRequestActivityFilters {
349
+ """
350
+ Filter activities by action. This is a list of action names that should be matched. There are many potential action names, they are untyped.
351
+ """
352
+ actions: [String!]
353
+ appRequestIds: [ID!]
354
+
355
+ """Return activities that happened after this date."""
356
+ happenedAfter: DateTime
357
+
358
+ """Return activities that happened before this date."""
359
+ happenedBefore: DateTime
360
+
361
+ """
362
+ true -> Return activities that were performed while a user was impersonating another user. false -> Return activities that were not impersonated.
363
+ """
364
+ impersonated: Boolean
365
+
366
+ """
367
+ Return activities that were performed while one of the given logins was impersonating another user.
368
+ """
369
+ impersonatedBy: [ID!]
370
+
371
+ """
372
+ Return activities that were performed while one of the given logins was being impersonated by someone else.
373
+ """
374
+ impersonatedUsers: [ID!]
375
+
376
+ """Return activities that were performed by one of the given logins."""
377
+ users: [ID!]
378
+ }
379
+
380
+ input AppRequestFilter {
381
+ """
382
+ true -> only return appRequests that are closed. false -> only return appRequests that are open. null -> return all appRequests.
383
+ """
384
+ closed: Boolean
385
+ ids: [ID!]
386
+
387
+ """Only return appRequests that are owned by one the given logins."""
388
+ logins: [ID!]
389
+
390
+ """Only return appRequests that are owned by the current user."""
391
+ own: Boolean
392
+ periodIds: [ID!]
393
+ status: [AppRequestStatus!]
394
+ }
395
+
396
+ """
397
+ This represents an index category attached to an app request. Its tagStrings property contains the tag values that have been extracted from the app request data.
398
+ """
399
+ type AppRequestIndexCategory {
400
+ """
401
+ If this is > 0, the index values should be shown on the main app request list page, sorted by this priority in descending order.
402
+ """
403
+ appRequestListPriority: Float
404
+
405
+ """
406
+ If this is > 0, the index values should be shown on the applicant dashboard, sorted by this priority in descending order.
407
+ """
408
+ applicantDashboardPriority: Float
409
+ category: String!
410
+ categoryLabel: String!
411
+
412
+ """
413
+ If this is > 0, the index values should be shown on the list filters, sorted by this priority in descending order.
414
+ """
415
+ listFiltersPriority: Float
416
+ listable: Boolean!
417
+
418
+ """
419
+ If this is > 0, the index values should be shown on the reviewer dashboard, sorted by this priority in descending order.
420
+ """
421
+ reviewerDashboardPriority: Float
422
+ values: [IndexValue!]!
423
+ }
424
+
425
+ """This is used to indicate where the index values should be displayed."""
426
+ enum AppRequestIndexDestination {
427
+ """
428
+ Show these index values when listing App Requests on the applicant dashboard.
429
+ """
430
+ APPLICANT_DASHBOARD
431
+
432
+ """
433
+ Show these index values when listing App Requests in the main list page.
434
+ """
435
+ APP_REQUEST_LIST
436
+
437
+ """Allow the user to filter on these index values on the main list page."""
438
+ LIST_FILTERS
439
+
440
+ """
441
+ Show these index values when listing App Requests on the reviewer dashboard.
442
+ """
443
+ REVIEWER_DASHBOARD
444
+ }
445
+
446
+ "\n The status of an appRequest. This status is computed based on the \"dbStatus\" recorded in\n the database and the status of each application.\n "
447
+ enum AppRequestStatus {
448
+ """
449
+ Reviewer has approved an offer and we are waiting for the applicant to accept. This status is unreachable if the period has no ACCEPTANCE requirements.
450
+ """
451
+ ACCEPTANCE
452
+
453
+ """
454
+ Applicant has accepted an offer on at least one application and no applications are still pending acceptance.
455
+ """
456
+ ACCEPTED
457
+
458
+ """
459
+ Applicant has submitted and any pre-approval requirements have been met. We are waiting for a reviewer to do their part.
460
+ """
461
+ APPROVAL
462
+
463
+ """
464
+ Applicant has submitted, at least one application is in an approved state, and no applications are pending.
465
+ """
466
+ APPROVED
467
+
468
+ """
469
+ Applicant cancelled the request before submitting. The applicant may be permitted to uncancel and continue, if the period is still open.
470
+ """
471
+ CANCELLED
472
+
473
+ """
474
+ Applicant has not yet submitted but ALL applications have been disqualified. Applicant may continue editing prompts until the App Request is closed.
475
+ """
476
+ DISQUALIFIED
477
+ NOT_ACCEPTED
478
+
479
+ """
480
+ Applicant has submitted, and ALL applications have been disqualified, no applications are pending.
481
+ """
482
+ NOT_APPROVED
483
+
484
+ """
485
+ Applicant has submitted and we are waiting for pre-approval requirements to resolve (these are automations like waiting for data to show up in an external system).
486
+ """
487
+ PREAPPROVAL
488
+
489
+ """
490
+ Applicant has completed all prompts and is ready to submit. At least one application is eligible to proceed.
491
+ """
492
+ READY_TO_SUBMIT
493
+
494
+ """Applicant has begun the process and has not yet submitted."""
495
+ STARTED
496
+
497
+ """
498
+ Applicant withdrew the request after submitting. The request must be re-opened (if eligible) to be edited again.
499
+ """
500
+ WITHDRAWN
501
+ }
502
+
503
+ """
504
+ An application represents the applicant applying to a specific program. Each appRequest has multiple applications - one per program defined in the system. Some applications are mutually exclusive and/or will be eliminated early based on PREQUAL requirements, but they all technically exist in the data model - there is no concept of picking one application over another, just two applications where one dies and the other survives.
505
+ """
506
+ type Application {
507
+ actions: ApplicationActions!
508
+ id: ID!
509
+
510
+ """The navigation title of the program this application is for."""
511
+ navTitle: String!
512
+ requirements: [ApplicationRequirement!]!
513
+ status: ApplicationStatus!
514
+
515
+ """
516
+ When one of the application's requirements is failing or throwing a warning, its reason will be copied here for convenience. If there is a warning and then later a failure, the failure reason will win.
517
+ """
518
+ statusReason: String
519
+
520
+ """The title of the program this application is for."""
521
+ title: String!
522
+ }
523
+
524
+ type ApplicationActions {
525
+ viewAsReviewer: Boolean!
526
+ }
527
+
528
+ """
529
+ The specific instance of a requirement on a particular application. Stores the status of the requirement, e.g. being satisfied or not.
530
+ """
531
+ type ApplicationRequirement {
532
+ application: Application!
533
+
534
+ """
535
+ The configuration data for this requirement in the app request's period.
536
+ """
537
+ configurationData: JsonData
538
+
539
+ """
540
+ An internal description of the requirement. Probably not shown to users.
541
+ """
542
+ description: String!
543
+ id: ID!
544
+
545
+ """
546
+ A human and machine readable unique and stable identifier that we can use to add javascript logic to the evaluation of whether a requirement is satisfied. For example: "gi_ch33_must_be_post911"
547
+ """
548
+ key: String!
549
+
550
+ """
551
+ A human readable title for the requirement in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used.
552
+ """
553
+ navTitle: String!
554
+ prompts: [RequirementPrompt!]!
555
+
556
+ """
557
+ When true, means that the requirement has not been made moot by an earlier requirement failing. It may still need to be hidden from navigation based on evaluatedInEarlierApplication.
558
+ """
559
+ reachable: Boolean!
560
+
561
+ """
562
+ The smart title for this requirement in the app request's period. For instance, might be "Applicant must have GPA over 3.4" instead of the regular title "Applicant must meet GPA requirement". Will fall back to the regular title for any requirement that does not provide a smart title.
563
+ """
564
+ smartTitle: String!
565
+
566
+ """The status of the requirement. This is what will be shown to users."""
567
+ status: RequirementStatus!
568
+
569
+ """
570
+ The reason why the requirement is in the status it is in. This will be shown to the applicant.
571
+ """
572
+ statusReason: String
573
+
574
+ """
575
+ A human readable title for the requirement. This is what will be shown to users.
576
+ """
577
+ title: String!
578
+
579
+ """
580
+ The type of requirement. This determines when the requirement is evaluated and who can see the requirement.
581
+ """
582
+ type: RequirementType!
583
+ }
584
+
585
+ "\n The status of an application. This is usually a computed field, not stored in the database. The status\n is computed based on the status of the appRequest and of the requirements for the program. If\n the appRequest is CLOSED, the status should permanently match the ApplicationStatusDB instead of being\n computed. If the appRequest is CANCELLED, all applications should be CANCELLED as well.\n "
586
+ enum ApplicationStatus {
587
+ """
588
+ The application has been approved and an offer has been submitted for applicant acceptance. This status is only possible for programs with at least one ACCEPTANCE requirement.
589
+ """
590
+ ACCEPTANCE
591
+
592
+ """
593
+ The application's benefit has been accepted by the applicant. This status is only possible for programs with at least one ACCEPTANCE requirement.
594
+ """
595
+ ACCEPTED
596
+
597
+ """
598
+ The application has been submitted, has passed preapproval, and is awaiting approval.
599
+ """
600
+ APPROVAL
601
+
602
+ """The application has been approved."""
603
+ APPROVED
604
+
605
+ "\n The appRequest (and thus the application inside it) has been cancelled by the applicant. In\n some cases, individual programs may have a requirement that the applicant agrees that they\n desire to apply. In that case the appRequest status is not CANCELLED, and neither is the application\n status. It will actually be FAILED_PREQUAL or FAILED_QUALIFICATION, and the statusReason of the\n requirement will explain that the applicant did not wish to pursue the application.\n "
606
+ CANCELLED
607
+
608
+ """
609
+ The applicant is ineligible for the program according to the pre-qual requirements. The application/program should no longer be visible in the UI for this appRequest.
610
+ """
611
+ FAILED_PREQUAL
612
+
613
+ """
614
+ The applicant is ineligible for the program according to the qualification requirements. The application/program should remain visible in the UI and any applicable statusReason from the associated requirements should be displayed.
615
+ """
616
+ FAILED_QUALIFICATION
617
+
618
+ """
619
+ The application's benefit was rejected by the applicant. This status is only possible for programs with at least one ACCEPTANCE requirement.
620
+ """
621
+ NOT_ACCEPTED
622
+
623
+ """The application has not been approved."""
624
+ NOT_APPROVED
625
+
626
+ """The application has been submitted and is awaiting preapproval."""
627
+ PREAPPROVAL
628
+
629
+ """
630
+ The appRequest has not finished pre-qualification yet. This application does not quite exist yet and probably should not appear in the UI.
631
+ """
632
+ PREQUAL
633
+
634
+ """
635
+ The application has been pre-qualified and is awaiting further input from the applicant.
636
+ """
637
+ QUALIFICATION
638
+
639
+ """
640
+ All requirements have been evaluated as MET or NOT_APPLICABLE. The application is ready to be submitted.
641
+ """
642
+ READY_TO_SUBMIT
643
+
644
+ """
645
+ The appRequest (and thus the application inside it) was withdrawn after being submitted. If it is re-opened, it will re-open in submitted state.
646
+ """
647
+ WITHDRAWN
648
+ }
649
+
650
+ type Configuration {
651
+ actions: ConfigurationAccess!
652
+ data: JsonData!
653
+
654
+ """The key being configured. Could be a requirement or prompt key."""
655
+ key: String!
656
+ }
657
+
658
+ type ConfigurationAccess {
659
+ update: Boolean!
660
+ view: Boolean!
661
+ }
662
+
663
+ input ConfigurationFilters {
664
+ """Return specific configurations."""
665
+ ids: [ID!]
666
+
667
+ """Return configurations for these keys."""
668
+ keys: [String!]
669
+
670
+ """Return configurations for these period codes."""
671
+ periodCodes: [String!]
672
+
673
+ """Return configurations for these period IDs."""
674
+ periodIds: [ID!]
675
+ }
676
+
677
+ """
678
+ Date and Time in ISO 8601 string format. JSON parser should convert to javascript Date type.
679
+ """
680
+ scalar DateTime
681
+
682
+ """
683
+ This represents an index as registered by one of the project's prompt definitions.
684
+ """
685
+ type IndexCategory {
686
+ """
687
+ If this is > 0, the index values should be shown on the main app request list page, sorted by this priority in descending order.
688
+ """
689
+ appRequestListPriority: Float
690
+
691
+ """
692
+ If this is > 0, the index values should be shown on the applicant dashboard, sorted by this priority in descending order.
693
+ """
694
+ applicantDashboardPriority: Float
695
+ category: String!
696
+ categoryLabel: String!
697
+
698
+ """
699
+ If this is > 0, the index values should be shown on the list filters, sorted by this priority in descending order.
700
+ """
701
+ listFiltersPriority: Float
702
+ listable: Boolean!
703
+
704
+ """
705
+ If this is > 0, the index values should be shown on the reviewer dashboard, sorted by this priority in descending order.
706
+ """
707
+ reviewerDashboardPriority: Float
708
+ values(
709
+ """
710
+ If true, only return tags that are currently in use by app requests. This is useful for only presenting useful filters.
711
+ """
712
+ inUse: Boolean
713
+ search: String
714
+ ): [IndexValue!]!
715
+ }
716
+
717
+ type IndexValue {
718
+ label: String!
719
+ value: String!
720
+ }
721
+
722
+ """Unstructured JSON data."""
723
+ scalar JsonData
724
+
725
+ type Mutation {
726
+ """Add a note to the app request."""
727
+ addNote(
728
+ content: String!
729
+
730
+ """
731
+ If true, the note will be marked as internal and only visible to reviewers.
732
+ """
733
+ internal: Boolean!
734
+ ): ValidatedAppRequestResponse!
735
+
736
+ """Make an offer on the app request."""
737
+ offerAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
738
+ roleAddGrant(grant: AccessRoleGrantCreate!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
739
+ roleCreate(role: AccessRoleInput!, validateOnly: Boolean): AccessRoleValidatedResponse!
740
+ roleDelete(roleId: ID!): ValidatedResponse!
741
+ roleDeleteGrant(grantId: ID!): AccessRoleValidatedResponse!
742
+ roleUpdate(role: AccessRoleInput!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
743
+ roleUpdateGrant(grant: AccessRoleGrantUpdate!, grantId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
744
+
745
+ """Submit the app request."""
746
+ submitAppRequest(appRequestId: ID!): ValidatedAppRequestResponse!
747
+ updateConfiguration(data: JsonData!, key: String!, periodId: String!, validateOnly: Boolean): ValidatedConfigurationResponse!
748
+ updatePeriod(id: String!, update: PeriodUpdate!, validateOnly: Boolean): ValidatedPeriodResponse!
749
+
750
+ """Update the data for a prompt in this app request."""
751
+ updatePrompt(data: JsonData!, promptId: ID!, validateOnly: Boolean): ValidatedAppRequestResponse!
752
+ }
753
+
754
+ type MutationMessage {
755
+ """
756
+ The path to the arg that produced the error. Dot-separated (lodash.get compatible) if it is deep inside an input type. Null if no particular arg can be blamed for the error.
757
+ """
758
+ arg: String
759
+
760
+ """
761
+ An error message to be shown to the end user, with the context of the given arg.
762
+ """
763
+ message: String!
764
+
765
+ """The type of error message. See the enum descriptions for more detail."""
766
+ type: MutationMessageType!
767
+ }
768
+
769
+ enum MutationMessageType {
770
+ """This error means the mutation cannot and/or did not take place."""
771
+ error
772
+
773
+ """
774
+ This message should be shown to the end user before submission to let them know ahead of time that one of their entries passed validation (e.g. username available or password strength high).
775
+ """
776
+ success
777
+
778
+ """
779
+ The mutation can and/or did complete, but the user should receive the warning anyway (e.g. "Your password sucks but I'll allow it.").
780
+ """
781
+ warning
782
+ }
783
+
784
+ type Period {
785
+ actions: PeriodActions!
786
+
787
+ """
788
+ This is useful for filtering out periods that are no longer useful. For instance, a window might close applications after 2 weeks but the reviewers could be working.
789
+ """
790
+ archiveDate: DateTime
791
+
792
+ """
793
+ Date that this period closes for applications. Some periods do not set a close date.
794
+ """
795
+ closeDate: DateTime
796
+
797
+ """
798
+ Unique identifier for this period that references an external system. Ideally human readable.
799
+ """
800
+ code: String
801
+ configurations(filter: ConfigurationFilters): [Configuration!]!
802
+ id: ID!
803
+
804
+ """
805
+ Name for this period. Will be displayed to applicants if they create an App Request while two periods are simultaneously open.
806
+ """
807
+ name: String!
808
+
809
+ """Date that this period opens for applications."""
810
+ openDate: DateTime!
811
+ programs: [PeriodProgram!]!
812
+ prompts: [PeriodPrompt!]!
813
+ requirements: [PeriodProgramRequirement!]!
814
+ }
815
+
816
+ type PeriodActions {
817
+ update: Boolean!
818
+ view: Boolean!
819
+ }
820
+
821
+ input PeriodFilters {
822
+ """Return periods that will be archived after this date."""
823
+ archiveAfter: DateTime
824
+
825
+ """Return periods that were archived before this date."""
826
+ archiveBefore: DateTime
827
+
828
+ """Return periods that are open at this date or will be open after it."""
829
+ closesAfter: DateTime
830
+
831
+ """
832
+ Return periods that closed before this date, not including that date's active period(s).
833
+ """
834
+ closesBefore: DateTime
835
+
836
+ """Return periods that have any of these codes."""
837
+ codes: [String!]
838
+
839
+ """Return periods that have any of these IDs."""
840
+ ids: [ID!]
841
+
842
+ """true -> open periods. false -> closed periods. null -> all periods."""
843
+ openNow: Boolean
844
+
845
+ """
846
+ Return periods that open after this date, not including that date's active period(s).
847
+ """
848
+ opensAfter: DateTime
849
+
850
+ """Return periods that are open at this date or have been open before it."""
851
+ opensBefore: DateTime
852
+ }
853
+
854
+ type PeriodProgram {
855
+ actions: PeriodProgramActions!
856
+
857
+ """
858
+ Whether the program is enabled in this period. This is set by the system administrator.
859
+ """
860
+ enabled: Boolean!
861
+ group: PeriodProgramActions!
862
+ key: ID!
863
+ navTitle: String!
864
+ period: Period!
865
+ requirements: [PeriodProgramRequirement!]!
866
+ title: String!
867
+ }
868
+
869
+ type PeriodProgramActions {
870
+ configure: Boolean!
871
+ }
872
+
873
+ type PeriodProgramRequirement {
874
+ """The configuration for this requirement in the period."""
875
+ configuration: Configuration!
876
+
877
+ """
878
+ An internal description of the requirement. Probably not shown to users.
879
+ """
880
+ description: String!
881
+
882
+ """
883
+ Whether the requirement is enabled in this period. This is set by the system administrator.
884
+ """
885
+ enabled: Boolean!
886
+
887
+ """
888
+ A human and machine readable unique and stable identifier that we can use to add javascript logic to the evaluation of whether a requirement is satisfied. For example: "gi_ch33_must_be_post911"
889
+ """
890
+ key: String!
891
+
892
+ """
893
+ A human readable title for the requirement in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used.
894
+ """
895
+ navTitle: String!
896
+ prompts: [PeriodPrompt!]!
897
+
898
+ """
899
+ A human readable title for the requirement. This is what will be shown to users.
900
+ """
901
+ title: String!
902
+
903
+ """
904
+ The type of requirement. This determines when the requirement is evaluated and who can see the requirement.
905
+ """
906
+ type: RequirementType!
907
+ }
908
+
909
+ type PeriodPrompt {
910
+ """The configuration for this prompt in the given period."""
911
+ configuration: Configuration!
912
+
913
+ """
914
+ A brief description of the prompt. This should be shown to administrators to help explain the full meaning of the prompt while assigning permissions or editing its configuration.
915
+ """
916
+ description: String
917
+
918
+ """
919
+ A human and machine readable identifier for the prompt. Will be used to match prompt data with UI and API code that handles it.
920
+ """
921
+ key: String!
922
+
923
+ """
924
+ A human readable title for the prompt in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used.
925
+ """
926
+ navTitle: String!
927
+ periodId: String!
928
+
929
+ """
930
+ A human readable title for the prompt. This is what will be shown to users.
931
+ """
932
+ title: String!
933
+ }
934
+
935
+ input PeriodUpdate {
936
+ archiveDate: DateTime
937
+ closeDate: DateTime
938
+ code: String
939
+ name: String!
940
+ openDate: DateTime!
941
+ }
942
+
943
+ type Program {
944
+ key: ID!
945
+ navTitle: String!
946
+ title: String!
947
+ }
948
+
949
+ input ProgramFilters {
950
+ keys: [String!]
951
+ }
952
+
953
+ type ProgramGroup {
954
+ key: ID!
955
+
956
+ """
957
+ A human readable title for the program group in the navigation. You may want it to be shorter than the full title. If not provided, the title will be used.
958
+ """
959
+ navTitle: String!
960
+ programs(filter: ProgramFilters): [Program!]!
961
+
962
+ """
963
+ A human readable title for the program group. This will be shown to users.
964
+ """
965
+ title: String!
966
+ }
967
+
968
+ input ProgramGroupFilter {
969
+ keys: [ID!]
970
+ }
971
+
972
+ """
973
+ The visibility of a prompt on a request. This is used to determine whether the prompt should be shown to the user in the UI.
974
+ """
975
+ enum PromptVisibility {
976
+ """
977
+ This RequirementPrompt is a duplicate of a RequirementPrompt that already appears earlier in the same application (it could also be duplicated yet again in an earlier application). It should not be shown to applicants. The reviewer UI may or may not want to show these repeated dependencies.
978
+ """
979
+ APPLICATION_DUPE
980
+
981
+ """
982
+ The prompt is intended to be filled in by an automation, but is otherwise available to be answered. It may or may not be visible in various UIs but it is not editable in any of them.
983
+ """
984
+ AUTOMATION
985
+
986
+ """
987
+ This RequirementPrompt is available to be answered. It is the first appearance of this prompt in the App Request. It should be visible in both the applicant and reviewer UI.
988
+ """
989
+ AVAILABLE
990
+
991
+ """
992
+ This RequirementPrompt is a duplicate of a RequirementPrompt that already appears earlier in the same app request, but it is the first appearance in its application. It should not be shown to applicants. The reviewer UI may or may not want to show these repeated dependencies.
993
+ """
994
+ REQUEST_DUPE
995
+
996
+ """
997
+ This RequirementPrompt cannot be reached, there is a requirement or prompt in front of it that could or already has disqualified the application.
998
+ """
999
+ UNREACHABLE
1000
+ }
1001
+
1002
+ type Query {
1003
+ "\n This is the global access object. Each field represents a global permission\n like the ability to view the role management interface.\n "
1004
+ access: Access!
1005
+ accessUsers(filter: AccessUserFilter): [AccessUser!]!
1006
+ appRequestIndexes(
1007
+ categories: [String!]
1008
+
1009
+ """
1010
+ Returns indexes that are flagged to appear in this destination. Also sorts for this destination.
1011
+ """
1012
+ for: AppRequestIndexDestination
1013
+ ): [IndexCategory!]!
1014
+ appRequests(filter: AppRequestFilter): [AppRequest!]!
1015
+ periods(filter: PeriodFilters): [Period!]!
1016
+ programGroups(filter: ProgramGroupFilter): [ProgramGroup!]!
1017
+ programs(filter: ProgramFilters): [Program!]!
1018
+ roles(filter: AccessRoleFilter): [AccessRole!]!
1019
+
1020
+ """
1021
+ A list of all possible scopes. Scopes are used to limit users when they are accessing the system through an alternate UI or login method. For instance, if you generate an authentication token to give to a third party, it may have a scope identifying that third party and limiting their access even though they are acting as you. Roles must match the token scope in order to apply permissions.
1022
+ """
1023
+ scopes: [String!]!
1024
+
1025
+ """
1026
+ This is where you get information about the authorization system. Each grant will be associated with one of these subjectTypes and optionally a list of subject instances. The grant will also have a set of controls, and each control will have an optional set of tags. The tags are used to limit the scope of the grant.
1027
+ """
1028
+ subjectTypes: [AccessSubjectType!]!
1029
+ }
1030
+
1031
+ """
1032
+ A RequestPrompt is an instance of a Prompt on a particular request. Once the user has answered the prompt, it contains the answer and the prompt status on that request.
1033
+ """
1034
+ type RequirementPrompt {
1035
+ """Actions that the user can take on this prompt."""
1036
+ actions: RequirementPromptActions!
1037
+
1038
+ """Whether the prompt has been answered on this request."""
1039
+ answered: Boolean!
1040
+
1041
+ """The configuration data for this prompt in the app request's period."""
1042
+ configurationData: JsonData!
1043
+
1044
+ """
1045
+ All the configuration data that could be relevant for this prompt. This includes its own config, and also the config data for any requirements and programs that are related to it.
1046
+ """
1047
+ configurationRelatedData: JsonData!
1048
+
1049
+ """
1050
+ The data that has been gathered from the user in response to this prompt. The schema is controlled by the question's implementation.
1051
+ """
1052
+ data(
1053
+ """
1054
+ Provide the schemaVersion at the time the UI was built. Will throw an error if the client is too old, so it knows to refresh.
1055
+ """
1056
+ schemaVersion: String
1057
+ ): JsonData
1058
+
1059
+ """
1060
+ A brief description of the prompt. This should be shown to administrators to help explain the full meaning of the prompt while assigning permissions or editing its configuration.
1061
+ """
1062
+ description: String
1063
+
1064
+ """
1065
+ Any data that the API needs to provide to the UI to display the prompt properly. For instance, if the prompt text is in the database and able to be modified by admins, the UI can't hardcode the prompt text and needs it from the API. Could also be used to pull reference information from an external system, e.g. a student's course schedule, for display in the prompt dialog.
1066
+ """
1067
+ fetchedData(
1068
+ """
1069
+ Provide the schemaVersion at the time the UI was built. Will throw an error if the client is too old, so it knows to refresh.
1070
+ """
1071
+ schemaVersion: String
1072
+ ): JsonData
1073
+ id: ID!
1074
+
1075
+ """
1076
+ When true, this prompt has been invalidated by the answer to another prompt. The `answered` field should remain false until the user specifically answers this prompt again, regardless of the output of the definition's `complete` method.
1077
+ """
1078
+ invalidated: Boolean!
1079
+
1080
+ """
1081
+ A human and machine readable identifier for the prompt. Will be used to match prompt data with UI and API code that handles it.
1082
+ """
1083
+ key: String!
1084
+
1085
+ """
1086
+ A human readable title for the prompt in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used.
1087
+ """
1088
+ navTitle: String!
1089
+
1090
+ """
1091
+ Preload data that has been generated according to the prompt definition. For example, a prompt might query the database for answers given in previous requests or query an external API to learn facts about the user.
1092
+ """
1093
+ preloadData(
1094
+ """
1095
+ Provide the schemaVersion at the time the UI was built. Will throw an error if the client is too old, so it knows to refresh.
1096
+ """
1097
+ schemaVersion: String
1098
+ ): JsonData
1099
+
1100
+ """The requirement that this prompt is associated with."""
1101
+ requirement: ApplicationRequirement!
1102
+
1103
+ """
1104
+ A human readable title for the prompt. This is what will be shown to users.
1105
+ """
1106
+ title: String!
1107
+
1108
+ """
1109
+ The visibility of the prompt on the request. This is used to determine whether the prompt should be shown to the user in the UI.
1110
+ """
1111
+ visibility: PromptVisibility!
1112
+ }
1113
+
1114
+ type RequirementPromptActions {
1115
+ update: Boolean!
1116
+ }
1117
+
1118
+ enum RequirementStatus {
1119
+ """
1120
+ The requirement has not been met, and it means the application is denied/ineligible.
1121
+ """
1122
+ DISQUALIFYING
1123
+
1124
+ """The requirement has been met."""
1125
+ MET
1126
+
1127
+ """
1128
+ The requirement is not applicable. The application should not yet be denied, proceed to the next requirement.
1129
+ """
1130
+ NOT_APPLICABLE
1131
+
1132
+ """
1133
+ The requirement cannot be evaluated yet because one or more questions are unanswered.
1134
+ """
1135
+ PENDING
1136
+
1137
+ """
1138
+ The requirement has not been met, but the application may still be approved. The requirement should be marked in some way as not quite satisfactory. The statusReason may explain further what is wrong.
1139
+ """
1140
+ WARNING
1141
+ }
1142
+
1143
+ enum RequirementType {
1144
+ """
1145
+ A requirement that should only be shown to applicants after the application has been through review and an offer has been made. The applicant can come back and fill out the requirement's prompts to accept the offer.
1146
+ """
1147
+ ACCEPTANCE
1148
+
1149
+ """
1150
+ A requirement that should only be shown to agents/reviewers and must have a non-pending status before an application is closed.
1151
+ """
1152
+ APPROVAL
1153
+
1154
+ """
1155
+ A requirement that should be shown to applicants at the end of the request process, prior to review and submission, outside the context of the individual programs. It is intended for acknowledgements like "I affirm that I have given truthful answers". It wouldn't make sense to have them affirm that their answers are truthful in one application but not in the others.
1156
+ """
1157
+ POSTQUAL
1158
+
1159
+ """
1160
+ A requirement that has no prompts and must have a non-PENDING status before an application may be reviewed. Use this for materials/data that must appear in an external system before a reviewer will be able to begin their work.
1161
+ """
1162
+ PREAPPROVAL
1163
+
1164
+ """
1165
+ A requirement that should have a non-PENDING status before the user is shown their programs. Only the applications for programs whose PREQUAL requirements are MET or NOT_APPLICABLE should be visible. The others should be entirely hidden, rather than being shown in a disabled/ineligible state.
1166
+ """
1167
+ PREQUAL
1168
+
1169
+ """
1170
+ A requirement that should have a non-pending status before an application may be submitted for review. Programs with a DISQUALIFYING requirement of type APPLICATION should be visible to the submitter but visually distinct as disabled/ineligible.
1171
+ """
1172
+ QUALIFICATION
1173
+ }
1174
+
1175
+ type RoleActions {
1176
+ delete: Boolean!
1177
+ update: Boolean!
1178
+ }
1179
+
1180
+ type ValidatedAppRequestResponse {
1181
+ appRequest: AppRequest!
1182
+ messages: [MutationMessage!]!
1183
+
1184
+ """
1185
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
1186
+ """
1187
+ success: Boolean!
1188
+ }
1189
+
1190
+ type ValidatedConfigurationResponse {
1191
+ configuration: Configuration
1192
+ messages: [MutationMessage!]!
1193
+
1194
+ """
1195
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
1196
+ """
1197
+ success: Boolean!
1198
+ }
1199
+
1200
+ type ValidatedPeriodResponse {
1201
+ messages: [MutationMessage!]!
1202
+ period: Period
1203
+
1204
+ """
1205
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
1206
+ """
1207
+ success: Boolean!
1208
+ }
1209
+
1210
+ type ValidatedResponse {
1211
+ messages: [MutationMessage!]!
1212
+
1213
+ """
1214
+ True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings.
1215
+ """
1216
+ success: Boolean!
1217
+ }