@tellescope/schema 1.253.0 → 1.254.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.
package/lib/esm/schema.js CHANGED
@@ -9,8 +9,17 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
+ if (ar || !(i in from)) {
15
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
+ ar[i] = from[i];
17
+ }
18
+ }
19
+ return to.concat(ar || Array.prototype.slice.call(from));
20
+ };
12
21
  import { WEBHOOK_MODELS, } from "@tellescope/types-models";
13
- import { booleanValidator, dateValidator, emailValidator, fieldsValidator, journeysValidator, journeyStatesValidator, phoneValidator, nameValidator, nonNegNumberValidator, nonNegNumberValidatorOptional, mongoIdValidator, mongoIdStringRequired as mongoIdStringValidator, listOfMongoIdStringValidator, preferenceValidator, objectAnyFieldsAnyValuesValidator, stringValidator, stringValidator100, stringValidator105, listOfStringsValidator, emailEncodingValidator, numberToDateValidator, SMSMessageValidator, chatRoomTypeValidator, idStringToDateValidator, subdomainValidator, messageTemplateTypeValidator, stringValidator210, stringValidator250, stringValidator5000, listOfDisplayNameInfo, fileTypeValidator, fileSizeValidator, meetingStatusValidator, listOfAttendeesValidator, meetingInfoValidator, listOfUserIndentitiesValidator, meetingsListValidator, urlValidator, WebhookSubscriptionValidator, attendeeValidator, meetingDisplayInfoValidator, intakePhoneValidator, formResponsesValidator, stringValidator25000, automationActionValidator, automationEventValidator, automatedActionStatusValidator, listOfStringsValidatorEmptyOk, listOfChatAttachmentsValidator, listOfCalendarEventRemindersValidator, messageTemplateModeValidator, listOfAutomationConditionsValidator, chatRoomUserInfoValidator, CUDStringValidator, listOfRelatedRecordsValidator, cancelConditionsValidator, notificationPreferencesValidator, userPortalSettingsValidator, FHIRObservationCategoryValidator, FHIRObservationStatusCodeValidator, FHIRObservationValueValidator, userIdentityValidator, formFieldTypeValidator, previousFormFieldsValidator, numberValidator, organizationThemeValidator, managedContentRecordTypeValidator, passwordValidator, flowchartUIValidator, integrationAuthenticationsValidator, listOfMongoIdStringValidatorEmptyOk, formFieldOptionsValidator, blocksValidator, sessionTypeValidator, portalSettingsValidator, emailValidatorEmptyOkay, phoneValidatorOptional, stringValidator1000, databaseFieldsValidator, databaseRecordValuesValidator, automationEventsValidator, portalBlocksValidator, enduserFormResponsesForEventValidator, enduserTasksForEventValidator, stateCredentialsValidator, stateValidator, weeklyAvailabilitiesValidator, calendarEventLimitsValidator, timezoneValidator, formTypeValidator, managedContentRecordAssignmentTypeValidator, listOfGenericAttachmentsValidator, accessPermissionsValidator, organizationLimitsValidator, organizationSettingsValidator, communicationsChannelValidator, genericUnitWithQuantityValidator, stringValidator25000EmptyOkay, slugValidator, stringValidator5000EmptyOkay, loginFlowResultValidator, sharedWithOrganizationIdsValidator, stringValidator1000Optional, tellescopeGenderValidator, appointmentTermsValidator, paymentProcessorValidator, purchaseCreditValueValidator, costValidator, integrationTitleValidator, journeyContextValidator, stringValidator100000, stringValidator100000EmptyOkay, analyticsQueryValidator, dateRangeValidator, calendarEventPortalSettingsValidator, dateOptionalOrEmptyStringValidator, baseAvailabilityBlocksValidator, availabilityEntitiesValidator, indexUpdatesValidator, dateRangeOptionalValidator, booleanValidatorOptional, automationTriggerActionValidator, automationTriggerEventValidator, automatioNTriggerStatusValidator, exactMatchValidator, exactMatchValidatorOptional, listOfMongoIdStringValidatorOptionalOrEmptyOk, linkedAccountAccessValidator, listOfStringsValidatorOptionalOrEmptyOk, stringValidatorOptionalEmptyOkay, analyticsQueryResultsValidator, stringValidatorOptional, addressValidator, superbillPatientInfoValidator, superbillProviderInfoValidator, superbillLineItemsValidator, billingCodeValidatorOptional, analyticsFrameTypeValidator, videoIntegrationTypesValidator, scheduledJourneysValidator, formScoringValidator, embeddingTypeValidator, listValidator, userCallRoutingBehaviorValidator, userUIRestrictionsValidator, userFieldRedactionsValidator, externalChatGPTMessagesValidator, enduserProfileViewBlocksValidator, customDashboardBlocksValidator, intakeDateOfBirthValidator, objectValidator, mongoIdStringRequired, objectAnyFieldsValidator, phoneTreeNodesValidator, phoneTreeEnduserConditionValidator, orValidator, optionalAnyObjectValidator, listValidatorOptionalOrEmptyOk, formCustomizationValidator, aiSummaryConfigurationValidator, buildInFieldsValidator, customEnduserFieldsValidatorOptionalOrEmpty, ticketActionsValidator, formResponseValidator, numberValidatorOptional, languageValidator, relatedRecordValidator, mongoIdStringOptional, tableViewColumnsValidator, formFieldCalloutConditionsValidator, endusersReportQueriesValidator, formResponsesReportQueriesValidator, phoneCallsReportQueriesValidator, listValidatorEmptyOk, phonePlaybackValidatorOptional, ticketSnoozesValidator, listOfStringsWithQualifierValidator, listOfStringsWithQualifierValidatorOptional, stringValidator100000OptionalEmptyOkay, mmsMessagesValidator, groupMMSUserStatesValidator, sortingFieldsValidator, listOfUniqueStringsValidatorEmptyOk, ticketReminderValidator, insuranceOptionalValidator, pharmacyValidator, listOfStringsValidatorUniqueOptionalOrEmptyOkay, diagnosesValidator, stateValidatorOptional, canvasCodingValidator, vitalConfigurationRangesValidator, smartMeterLinesValidator, formFieldFeedbackValidator, phonePlaybackValidator, enduserProfileWebhooksValidator, fieldsSyncValidator, athenaSubscriptionTypeValidator, dateValidatorOptional, listQueryQualifiersValidator, stringValidator5000OptionalEmptyOkay, labeledFieldsValidator, fieldMappingsValidator, analyticsFrameGroupingCategoriesValidator, customDashboardViewValidator, bookingRestrictionsByTemplateValidator, listOfNumbersValidatorUniqueOptionalOrEmptyOkay, enduserDiagnosisValidator, canvasCodingValidatorOptional, calendarEventAttendeesValidator, developHealthDrugsValidator, developHealthDiagnosesValidator, developHealthMockResultValidator, positiveNumberValidator, listOfStringsWithQualifierValidatorOptionalValuesEmptyOkay, recentViewersValidator, stringValidator100000OptionalEmptyOkayEscapeHTML, customPoliciesValidator, stringValidator100EscapeHTML, outOfOfficeBlocksValidator, AIDecisionSourceValidator, AIMessageInputValidator, listOfObjectAnyFieldsAnyValuesValidator, listOfEmailCCsValidator, externalIdNumberValidatorOptional, DEPRECATED_AUTOMATION_TRIGGER_EVENT_TYPES, compoundFilterValidator, } from "@tellescope/validation";
22
+ import { booleanValidator, dateValidator, emailValidator, fieldsValidator, journeysValidator, journeyStatesValidator, phoneValidator, nameValidator, nonNegNumberValidator, nonNegNumberValidatorOptional, mongoIdValidator, mongoIdStringRequired as mongoIdStringValidator, listOfMongoIdStringValidator, preferenceValidator, objectAnyFieldsAnyValuesValidator, stringValidator, stringValidator100, stringValidator105, listOfStringsValidator, emailEncodingValidator, numberToDateValidator, SMSMessageValidator, chatRoomTypeValidator, idStringToDateValidator, subdomainValidator, messageTemplateTypeValidator, stringValidator210, stringValidator250, stringValidator5000, listOfDisplayNameInfo, fileTypeValidator, fileSizeValidator, meetingStatusValidator, listOfAttendeesValidator, listOfVideoCallParticipantEventsValidator, meetingInfoValidator, listOfUserIndentitiesValidator, meetingsListValidator, urlValidator, WebhookSubscriptionValidator, attendeeValidator, meetingDisplayInfoValidator, intakePhoneValidator, formResponsesValidator, stringValidator25000, automationActionValidator, automationEventValidator, automatedActionStatusValidator, listOfStringsValidatorEmptyOk, listOfChatAttachmentsValidator, listOfCalendarEventRemindersValidator, messageTemplateModeValidator, listOfAutomationConditionsValidator, chatRoomUserInfoValidator, CUDStringValidator, listOfRelatedRecordsValidator, cancelConditionsValidator, notificationPreferencesValidator, userPortalSettingsValidator, FHIRObservationCategoryValidator, FHIRObservationStatusCodeValidator, FHIRObservationValueValidator, userIdentityValidator, formFieldTypeValidator, previousFormFieldsValidator, numberValidator, organizationThemeValidator, managedContentRecordTypeValidator, passwordValidator, flowchartUIValidator, integrationAuthenticationsValidator, listOfMongoIdStringValidatorEmptyOk, formFieldOptionsValidator, blocksValidator, sessionTypeValidator, portalSettingsValidator, emailValidatorEmptyOkay, phoneValidatorOptional, stringValidator1000, databaseFieldsValidator, databaseRecordValuesValidator, automationEventsValidator, portalBlocksValidator, enduserFormResponsesForEventValidator, enduserTasksForEventValidator, stateCredentialsValidator, stateValidator, weeklyAvailabilitiesValidator, calendarEventLimitsValidator, timezoneValidator, formTypeValidator, managedContentRecordAssignmentTypeValidator, listOfGenericAttachmentsValidator, accessPermissionsValidator, organizationLimitsValidator, organizationSettingsValidator, communicationsChannelValidator, genericUnitWithQuantityValidator, stringValidator25000EmptyOkay, slugValidator, stringValidator5000EmptyOkay, loginFlowResultValidator, sharedWithOrganizationIdsValidator, stringValidator1000Optional, tellescopeGenderValidator, appointmentTermsValidator, paymentProcessorValidator, purchaseCreditValueValidator, costValidator, integrationTitleValidator, journeyContextValidator, stringValidator100000, stringValidator100000EmptyOkay, analyticsQueryValidator, dateRangeValidator, calendarEventPortalSettingsValidator, dateOptionalOrEmptyStringValidator, baseAvailabilityBlocksValidator, availabilityEntitiesValidator, indexUpdatesValidator, dateRangeOptionalValidator, booleanValidatorOptional, automationTriggerActionValidator, automationTriggerEventValidator, automatioNTriggerStatusValidator, exactMatchValidator, exactMatchValidatorOptional, listOfMongoIdStringValidatorOptionalOrEmptyOk, linkedAccountAccessValidator, listOfStringsValidatorOptionalOrEmptyOk, stringValidatorOptionalEmptyOkay, analyticsQueryResultsValidator, stringValidatorOptional, addressValidator, superbillPatientInfoValidator, superbillProviderInfoValidator, superbillLineItemsValidator, billingCodeValidatorOptional, analyticsFrameTypeValidator, videoIntegrationTypesValidator, scheduledJourneysValidator, formScoringValidator, embeddingTypeValidator, listValidator, userCallRoutingBehaviorValidator, userUIRestrictionsValidator, userFieldRedactionsValidator, portalSchemaRestrictionsValidator, externalChatGPTMessagesValidator, enduserProfileViewBlocksValidator, customDashboardBlocksValidator, intakeDateOfBirthValidator, objectValidator, mongoIdStringRequired, objectAnyFieldsValidator, phoneTreeNodesValidator, phoneTreeEnduserConditionValidator, orValidator, optionalAnyObjectValidator, listValidatorOptionalOrEmptyOk, formCustomizationValidator, aiSummaryConfigurationValidator, buildInFieldsValidator, customEnduserFieldsValidatorOptionalOrEmpty, ticketActionsValidator, formResponseValidator, numberValidatorOptional, languageValidator, relatedRecordValidator, mongoIdStringOptional, tableViewColumnsValidator, formFieldCalloutConditionsValidator, endusersReportQueriesValidator, formResponsesReportQueriesValidator, phoneCallsReportQueriesValidator, listValidatorEmptyOk, phonePlaybackValidatorOptional, ticketSnoozesValidator, listOfStringsWithQualifierValidator, listOfStringsWithQualifierValidatorOptional, stringValidator100000OptionalEmptyOkay, mmsMessagesValidator, groupMMSUserStatesValidator, sortingFieldsValidator, listOfUniqueStringsValidatorEmptyOk, ticketReminderValidator, insuranceOptionalValidator, pharmacyValidator, listOfStringsValidatorUniqueOptionalOrEmptyOkay, diagnosesValidator, stateValidatorOptional, canvasCodingValidator, vitalConfigurationRangesValidator, smartMeterLinesValidator, formFieldFeedbackValidator, phonePlaybackValidator, enduserProfileWebhooksValidator, fieldsSyncValidator, athenaSubscriptionTypeValidator, dateValidatorOptional, listQueryQualifiersValidator, stringValidator5000OptionalEmptyOkay, labeledFieldsValidator, fieldMappingsValidator, analyticsFrameGroupingCategoriesValidator, customDashboardViewValidator, bookingRestrictionsByTemplateValidator, listOfNumbersValidatorUniqueOptionalOrEmptyOkay, enduserDiagnosisValidator, canvasCodingValidatorOptional, calendarEventAttendeesValidator, developHealthDrugsValidator, developHealthDiagnosesValidator, developHealthMockResultValidator, positiveNumberValidator, listOfStringsWithQualifierValidatorOptionalValuesEmptyOkay, recentViewersValidator, stringValidator100000OptionalEmptyOkayEscapeHTML, customPoliciesValidator, stringValidator100EscapeHTML, outOfOfficeBlocksValidator, AIDecisionSourceValidator, AIMessageInputValidator, listOfObjectAnyFieldsAnyValuesValidator, listOfEmailCCsValidator, externalIdNumberValidatorOptional, DEPRECATED_AUTOMATION_TRIGGER_EVENT_TYPES, compoundFilterValidator, } from "@tellescope/validation";
14
23
  import { CREATOR_ONLY_ACCESS, DEFAULT_OPERATIONS, PLACEHOLDER_ID, ENDUSER_SESSION_TYPE, USER_SESSION_TYPE, CANDID_TITLE, DEVELOP_HEALTH_TITLE, } from "@tellescope/constants";
15
24
  export var get_next_reminder_timestamp_for_ticket = function (_a) {
16
25
  var dueDateInMS = _a.dueDateInMS, reminders = _a.reminders, closedAt = _a.closedAt;
@@ -184,9 +193,10 @@ export var schema = build_schema({
184
193
  add_to_journey: {}, remove_from_journey: {}, begin_login_flow: {}, set_password: {},
185
194
  unsubscribe: {},
186
195
  },
187
- fields: __assign(__assign({}, BuiltInFields), { recentViewers: { validator: recentViewersValidator }, healthie_dietitian_id: { validator: stringValidator100 }, mergedIds: { validator: listOfMongoIdStringValidatorOptionalOrEmptyOk, readonly: true, redactions: ['enduser'] }, externalId: {
196
+ fields: __assign(__assign({}, BuiltInFields), { sharedWithOrganizations: __assign(__assign({}, BuiltInFields.sharedWithOrganizations), { enduserUpdatesDisabled: true }), recentViewers: { validator: recentViewersValidator }, healthie_dietitian_id: { validator: stringValidator100, enduserUpdatesDisabled: true }, mergedIds: { validator: listOfMongoIdStringValidatorOptionalOrEmptyOk, readonly: true, redactions: ['enduser'] }, externalId: {
188
197
  validator: stringValidator250,
189
198
  examples: ['addfed3e-ddea-415b-b52b-df820c944dbb'],
199
+ enduserUpdatesDisabled: true,
190
200
  }, email: {
191
201
  validator: emailValidatorEmptyOkay,
192
202
  examples: ['test@tellescope.com'],
@@ -228,6 +238,7 @@ export var schema = build_schema({
228
238
  }, journeys: {
229
239
  validator: journeysValidator,
230
240
  redactions: ['enduser'],
241
+ enduserUpdatesDisabled: true,
231
242
  dependencies: [
232
243
  {
233
244
  dependsOn: ['journeys'],
@@ -244,14 +255,17 @@ export var schema = build_schema({
244
255
  }, scheduledJourneys: { validator: scheduledJourneysValidator }, tags: {
245
256
  redactions: ['enduser'],
246
257
  validator: listOfStringsValidatorUniqueOptionalOrEmptyOkay,
258
+ enduserUpdatesDisabled: true,
247
259
  }, accessTags: {
248
260
  redactions: ['enduser'],
249
261
  validator: listOfStringsValidatorEmptyOk,
262
+ enduserUpdatesDisabled: true,
250
263
  }, unredactedTags: {
251
264
  validator: listOfStringsValidatorEmptyOk,
252
265
  }, fields: {
253
266
  redactions: ['enduser'],
254
267
  validator: fieldsValidator,
268
+ enduserUpdatesDisabled: true, // intake forms write fields server-side; direct enduser PATCH is not a supported path
255
269
  }, unredactedFields: {
256
270
  validator: fieldsValidator,
257
271
  }, preference: {
@@ -260,12 +274,15 @@ export var schema = build_schema({
260
274
  }, assignedTo: {
261
275
  redactions: ['enduser'],
262
276
  validator: listOfUniqueStringsValidatorEmptyOk,
277
+ enduserUpdatesDisabled: true,
263
278
  }, primaryAssignee: {
264
279
  validator: mongoIdStringValidator,
265
280
  redactions: ['enduser'],
281
+ enduserUpdatesDisabled: true,
266
282
  }, unread: {
267
283
  redactions: ['enduser'],
268
284
  validator: booleanValidator,
285
+ enduserUpdatesDisabled: true,
269
286
  }, lastActive: {
270
287
  validator: dateValidator,
271
288
  }, lastLogout: { validator: dateValidator }, invalidateSessionsBefore: { validator: dateValidator }, termsSigned: { validator: dateValidator }, termsVersion: { validator: stringValidator100 }, lastCommunication: {
@@ -288,12 +305,12 @@ export var schema = build_schema({
288
305
  // ]
289
306
  },
290
307
  // should allow any gender via API but our UI can limit to Tellescope types by default
291
- gender: { validator: stringValidator, redactions: ['enduser'] }, genderIdentity: { validator: stringValidator100, redactions: ['enduser'] }, pronouns: { validator: stringValidator100, redactions: ['enduser'] }, height: { validator: genericUnitWithQuantityValidator, redactions: ['enduser'] }, weight: { validator: genericUnitWithQuantityValidator, redactions: ['enduser'] }, source: { validator: stringValidator1000Optional }, addressLineOne: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, addressLineTwo: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, city: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, state: { validator: stateValidator, redactions: ['enduser'] }, zipCode: { validator: stringValidator25000EmptyOkay, redactions: ['enduser'] }, zipPlusFour: { validator: stringValidator100, redactions: ['enduser'] }, timezone: { validator: timezoneValidator }, humanReadableId: { validator: stringValidator100 }, displayName: { validator: stringValidator250 }, unsubscribedFromPortalChatNotifications: { validator: booleanValidator }, triggeredEvents: { validator: objectAnyFieldsValidator(numberValidator) }, customTypeId: { validator: mongoIdStringValidator }, language: { validator: languageValidator }, relationships: {
308
+ gender: { validator: stringValidator, redactions: ['enduser'] }, genderIdentity: { validator: stringValidator100, redactions: ['enduser'] }, pronouns: { validator: stringValidator100, redactions: ['enduser'] }, height: { validator: genericUnitWithQuantityValidator, redactions: ['enduser'] }, weight: { validator: genericUnitWithQuantityValidator, redactions: ['enduser'] }, source: { validator: stringValidator1000Optional, enduserUpdatesDisabled: true }, addressLineOne: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, addressLineTwo: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, city: { validator: stringValidator5000EmptyOkay, redactions: ['enduser'] }, state: { validator: stateValidator, redactions: ['enduser'] }, zipCode: { validator: stringValidator25000EmptyOkay, redactions: ['enduser'] }, zipPlusFour: { validator: stringValidator100, redactions: ['enduser'] }, timezone: { validator: timezoneValidator }, humanReadableId: { validator: stringValidator100 }, displayName: { validator: stringValidator250 }, unsubscribedFromPortalChatNotifications: { validator: booleanValidator }, triggeredEvents: { validator: objectAnyFieldsValidator(numberValidator) }, customTypeId: { validator: mongoIdStringValidator, enduserUpdatesDisabled: true }, language: { validator: languageValidator }, relationships: {
292
309
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
293
310
  id: mongoIdStringRequired,
294
311
  type: stringValidator100,
295
312
  }))
296
- }, markedReadAt: { validator: dateOptionalOrEmptyStringValidator }, markedUnreadAt: { validator: dateOptionalOrEmptyStringValidator }, note: { validator: stringValidator25000EmptyOkay, redactions: ['enduser'] }, noteIsFlagged: { validator: booleanValidator }, insurance: { validator: insuranceOptionalValidator, redactions: ['enduser'] }, insuranceSecondary: { validator: insuranceOptionalValidator, redactions: ['enduser'] }, bookingNotes: {
313
+ }, markedReadAt: { validator: dateOptionalOrEmptyStringValidator }, markedUnreadAt: { validator: dateOptionalOrEmptyStringValidator }, note: { validator: stringValidator25000EmptyOkay, redactions: ['enduser'], enduserUpdatesDisabled: true }, noteIsFlagged: { validator: booleanValidator }, insurance: { validator: insuranceOptionalValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, insuranceSecondary: { validator: insuranceOptionalValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, bookingNotes: {
297
314
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
298
315
  bookingPageId: mongoIdStringRequired,
299
316
  note: stringValidator5000EmptyOkay,
@@ -308,10 +325,11 @@ export var schema = build_schema({
308
325
  archivedAt: dateValidatorOptional,
309
326
  })),
310
327
  redactions: ['enduser'],
311
- }, references: { validator: listOfRelatedRecordsValidator, redactions: ['enduser'] }, athenaDepartmentId: { validator: stringValidator100, redactions: ['enduser'] }, athenaPracticeId: { validator: stringValidator100, redactions: ['enduser'] }, salesforceId: { validator: stringValidator100, redactions: ['enduser'] }, vitalTriggersDisabled: { validator: booleanValidator }, defaultFromPhone: { validator: phoneValidator, redactions: ['enduser'] }, defaultFromEmail: { validator: emailValidator, redactions: ['enduser'] }, useDefaultFromEmailInAutomations: { validator: booleanValidator }, useDefaultFromPhoneInAutomations: { validator: booleanValidator }, stripeCustomerId: { validator: stringValidator100, redactions: ['enduser'] }, stripeKey: { validator: stringValidator250, redactions: ['enduser'] }, diagnoses: {
328
+ }, references: { validator: listOfRelatedRecordsValidator, redactions: ['enduser'], enduserUpdatesDisabled: true }, athenaDepartmentId: { validator: stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, athenaPracticeId: { validator: stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, salesforceId: { validator: stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, vitalTriggersDisabled: { validator: booleanValidator }, defaultFromPhone: { validator: phoneValidator, redactions: ['enduser'] }, defaultFromEmail: { validator: emailValidator, redactions: ['enduser'] }, useDefaultFromEmailInAutomations: { validator: booleanValidator }, useDefaultFromPhoneInAutomations: { validator: booleanValidator }, stripeCustomerId: { validator: stringValidator100, redactions: ['enduser'], enduserUpdatesDisabled: true }, stripeKey: { validator: stringValidator250, redactions: ['enduser'], enduserUpdatesDisabled: true }, diagnoses: {
312
329
  validator: listValidatorOptionalOrEmptyOk(enduserDiagnosisValidator),
313
- redactions: ['enduser']
314
- }, unsubscribedFromPhones: { validator: listOfStringsValidatorUniqueOptionalOrEmptyOkay, redactions: ['enduser'] }, lockedFromPortal: { validator: booleanValidator }, eligibleForAutoMerge: { validator: booleanValidator }, preferredPharmacy: { validator: pharmacyValidator, redactions: ['enduser'] } }),
330
+ redactions: ['enduser'],
331
+ enduserUpdatesDisabled: true,
332
+ }, unsubscribedFromPhones: { validator: listOfStringsValidatorUniqueOptionalOrEmptyOkay, redactions: ['enduser'] }, lockedFromPortal: { validator: booleanValidator, enduserUpdatesDisabled: true }, eligibleForAutoMerge: { validator: booleanValidator, enduserUpdatesDisabled: true }, preferredPharmacy: { validator: pharmacyValidator, redactions: ['enduser'] } }),
315
333
  customActions: {
316
334
  rename_stored_custom_fields: {
317
335
  op: "custom", access: 'update', method: "patch",
@@ -1175,7 +1193,7 @@ export var schema = build_schema({
1175
1193
  },
1176
1194
  journeys: {
1177
1195
  info: {},
1178
- fields: __assign(__assign({}, BuiltInFields), { archivedAt: { validator: dateOptionalOrEmptyStringValidator }, title: {
1196
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, title: {
1179
1197
  validator: stringValidator100,
1180
1198
  required: true,
1181
1199
  examples: ['Test']
@@ -1867,8 +1885,10 @@ export var schema = build_schema({
1867
1885
  var _c;
1868
1886
  var _id = _a._id;
1869
1887
  var updates = _b.updates;
1870
- if (session.type === 'user' && !session.eat)
1871
- return; // accessTags is not enabled
1888
+ // editing a user's tags is a privilege-escalation vector whenever tags gate visibility:
1889
+ // enduser access tags (eat) OR resource access tags (erat). Skip only when neither is enabled.
1890
+ if (session.type === 'user' && !session.eat && !(session === null || session === void 0 ? void 0 : session.erat))
1891
+ return; // neither access-tags feature enabled
1872
1892
  if ((_c = session === null || session === void 0 ? void 0 : session.roles) === null || _c === void 0 ? void 0 : _c.includes('Admin'))
1873
1893
  return;
1874
1894
  if (method === 'create')
@@ -2549,7 +2569,7 @@ export var schema = build_schema({
2549
2569
  },
2550
2570
  },
2551
2571
  },
2552
- fields: __assign(__assign({}, BuiltInFields), { archivedAt: { validator: dateOptionalOrEmptyStringValidator }, mmsAttachmentURLs: { validator: listOfUniqueStringsValidatorEmptyOk }, title: {
2572
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, mmsAttachmentURLs: { validator: listOfUniqueStringsValidatorEmptyOk }, title: {
2553
2573
  validator: stringValidator100,
2554
2574
  required: true,
2555
2575
  examples: ["Template Name"],
@@ -2579,7 +2599,7 @@ export var schema = build_schema({
2579
2599
  constraints: { unique: [], relationship: [] },
2580
2600
  defaultActions: { read: {}, readMany: {}, update: {}, delete: {} },
2581
2601
  enduserActions: { prepare_file_upload: {}, confirm_file_upload: {}, file_download_URL: {}, read: {}, readMany: {}, delete: {}, update: {} /* allow to hide from client side */ },
2582
- fields: __assign(__assign({}, BuiltInFields), { source: { validator: stringValidator100 }, tags: { validator: listOfStringsValidatorUniqueOptionalOrEmptyOkay }, name: {
2602
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, source: { validator: stringValidator100 }, tags: { validator: listOfStringsValidatorUniqueOptionalOrEmptyOkay }, name: {
2583
2603
  validator: stringValidator250,
2584
2604
  required: true,
2585
2605
  }, size: {
@@ -2590,6 +2610,8 @@ export var schema = build_schema({
2590
2610
  required: true
2591
2611
  }, enduserId: {
2592
2612
  validator: mongoIdStringValidator,
2613
+ }, formResponseId: {
2614
+ validator: mongoIdStringValidator,
2593
2615
  }, secureName: {
2594
2616
  validator: stringValidator250,
2595
2617
  readonly: true,
@@ -3070,7 +3092,7 @@ export var schema = build_schema({
3070
3092
  },
3071
3093
  },
3072
3094
  },
3073
- fields: __assign(__assign({}, BuiltInFields), { showByUserTags: { validator: listOfStringsValidatorOptionalOrEmptyOk }, belugaVisitType: { validator: stringValidator }, belugaVerificationId: { validator: stringValidator }, belugaPharmacyMappings: {
3095
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, showByUserTags: { validator: listOfStringsValidatorOptionalOrEmptyOk }, belugaVisitType: { validator: stringValidator }, belugaVerificationId: { validator: stringValidator }, belugaPharmacyMappings: {
3074
3096
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
3075
3097
  title: stringValidatorOptionalEmptyOkay,
3076
3098
  pharmacyId: stringValidator100,
@@ -3185,7 +3207,7 @@ export var schema = build_schema({
3185
3207
  unique: [],
3186
3208
  relationship: [],
3187
3209
  },
3188
- fields: __assign(__assign({}, BuiltInFields), { discussionRoomId: { validator: mongoIdStringValidator }, hiddenFromTimeline: { validator: booleanValidator }, lockedAt: { validator: dateValidator }, formId: {
3210
+ fields: __assign(__assign({}, BuiltInFields), { discussionRoomId: { validator: mongoIdStringValidator }, hiddenFromTimeline: { validator: booleanValidator, enduserUpdatesDisabled: true }, lockedAt: { validator: dateValidator, enduserUpdatesDisabled: true }, formId: {
3189
3211
  validator: stringValidator100,
3190
3212
  required: true,
3191
3213
  dependencies: [
@@ -3210,12 +3232,13 @@ export var schema = build_schema({
3210
3232
  updatesDisabled: true,
3211
3233
  }, openedAt: {
3212
3234
  validator: dateValidator,
3213
- }, copiedFrom: { validator: mongoIdStringOptional }, copiedFromEnduserId: { validator: mongoIdStringOptional }, publicSubmit: { validator: booleanValidator }, submittedBy: { validator: stringValidator250 }, submittedByIsPlaceholder: { validator: booleanValidator }, markedAsSubmitted: { validator: booleanValidator }, accessCode: { validator: stringValidator250 }, userEmail: { validator: emailValidator }, submittedAt: { validator: dateValidator }, formTitle: { validator: stringValidator250 }, responses: { validator: formResponsesValidator }, draftSavedAt: { validator: dateValidator }, draftSavedBy: { validator: mongoIdStringValidator }, hideFromEnduserPortal: { validator: booleanValidator }, sharedVia: { validator: communicationsChannelValidator }, isInternalNote: { validator: booleanValidator }, pinnedAt: { validator: dateOptionalOrEmptyStringValidator }, publicIdentifier: { validator: stringValidator250 }, source: { validator: stringValidator250 }, externalId: { validator: stringValidator250 }, rootResponseId: { validator: mongoIdStringValidator }, parentResponseId: { validator: mongoIdStringValidator }, tags: { validator: listOfStringsValidatorOptionalOrEmptyOk }, carePlanId: { validator: mongoIdStringValidator }, context: { validator: stringValidator1000 }, logoURL: { validator: stringValidator5000 }, logoHeight: { validator: numberValidator }, calendarEventId: { validator: mongoIdStringValidator }, references: { validator: listOfRelatedRecordsValidator, readonly: true }, groupId: { validator: mongoIdStringValidator }, groupInstance: { validator: stringValidator100 }, groupPosition: { validator: nonNegNumberValidator }, hideAfterUnsubmittedInMS: { validator: numberValidator }, addenda: {
3235
+ }, copiedFrom: { validator: mongoIdStringOptional }, copiedFromEnduserId: { validator: mongoIdStringOptional }, publicSubmit: { validator: booleanValidator }, submittedBy: { validator: stringValidator250, enduserUpdatesDisabled: true }, submittedByIsPlaceholder: { validator: booleanValidator, enduserUpdatesDisabled: true }, markedAsSubmitted: { validator: booleanValidator, enduserUpdatesDisabled: true }, accessCode: { validator: stringValidator250 }, userEmail: { validator: emailValidator, enduserUpdatesDisabled: true }, submittedAt: { validator: dateValidator, enduserUpdatesDisabled: true }, formTitle: { validator: stringValidator250, enduserUpdatesDisabled: true }, responses: { validator: formResponsesValidator }, draftSavedAt: { validator: dateValidator }, draftSavedBy: { validator: mongoIdStringValidator }, hideFromEnduserPortal: { validator: booleanValidator }, sharedVia: { validator: communicationsChannelValidator }, isInternalNote: { validator: booleanValidator, enduserUpdatesDisabled: true }, pinnedAt: { validator: dateOptionalOrEmptyStringValidator, enduserUpdatesDisabled: true }, publicIdentifier: { validator: stringValidator250 }, source: { validator: stringValidator250 }, externalId: { validator: stringValidator250 }, rootResponseId: { validator: mongoIdStringValidator }, parentResponseId: { validator: mongoIdStringValidator }, tags: { validator: listOfStringsValidatorOptionalOrEmptyOk, enduserUpdatesDisabled: true }, carePlanId: { validator: mongoIdStringValidator }, context: { validator: stringValidator1000 }, logoURL: { validator: stringValidator5000, enduserUpdatesDisabled: true }, logoHeight: { validator: numberValidator, enduserUpdatesDisabled: true }, calendarEventId: { validator: mongoIdStringValidator }, references: { validator: listOfRelatedRecordsValidator, readonly: true }, groupId: { validator: mongoIdStringValidator }, groupInstance: { validator: stringValidator100 }, groupPosition: { validator: nonNegNumberValidator }, hideAfterUnsubmittedInMS: { validator: numberValidator }, addenda: {
3214
3236
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
3215
3237
  text: stringValidator25000EmptyOkay,
3216
3238
  timestamp: dateValidator,
3217
3239
  userId: mongoIdStringRequired,
3218
- }))
3240
+ })),
3241
+ enduserUpdatesDisabled: true,
3219
3242
  }, followups: {
3220
3243
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
3221
3244
  formId: mongoIdStringRequired,
@@ -3228,7 +3251,7 @@ export var schema = build_schema({
3228
3251
  fieldTitle: stringValidator250,
3229
3252
  timestamp: dateValidator,
3230
3253
  }))
3231
- }, startedViaPinnedForm: { validator: booleanValidator }, enduserAISummary: { validator: stringValidator25000 }, procedureCodes: { validator: procedureCodesValidator }, diagnosisCodes: { validator: diagnosisCodesValidator } }),
3254
+ }, startedViaPinnedForm: { validator: booleanValidator }, enduserAISummary: { validator: stringValidator25000, enduserUpdatesDisabled: true }, procedureCodes: { validator: procedureCodesValidator, enduserUpdatesDisabled: true }, diagnosisCodes: { validator: diagnosisCodesValidator, enduserUpdatesDisabled: true } }),
3232
3255
  defaultActions: DEFAULT_OPERATIONS,
3233
3256
  enduserActions: {
3234
3257
  prepare_form_response: {}, info_for_access_code: {}, submit_form_response: {}, stripe_details: {}, chargebee_details: {},
@@ -3960,7 +3983,7 @@ export var schema = build_schema({
3960
3983
  validator: nonNegNumberValidator,
3961
3984
  examples: [100],
3962
3985
  required: true,
3963
- }, locationId: { validator: mongoIdStringValidator }, locationIds: { validator: listOfMongoIdStringValidatorOptionalOrEmptyOk }, type: { validator: stringValidator100 }, description: { validator: stringValidator5000 }, agreedToTerms: { validator: appointmentTermsValidator }, meetingId: { validator: mongoIdStringValidator, readonly: true }, bookingPageId: { validator: mongoIdStringValidator }, meetingStatus: { validator: meetingStatusValidator }, attachments: { validator: listOfGenericAttachmentsValidator }, cancelledAt: { validator: dateOptionalOrEmptyStringValidator }, rescheduledAt: { validator: dateOptionalOrEmptyStringValidator }, noShowedAt: { validator: dateOptionalOrEmptyStringValidator }, rescheduledTo: { validator: mongoIdStringValidator }, chatRoomId: {
3986
+ }, locationId: { validator: mongoIdStringValidator }, locationIds: { validator: listOfMongoIdStringValidatorOptionalOrEmptyOk }, type: { validator: stringValidator100 }, description: { validator: stringValidator5000 }, agreedToTerms: { validator: appointmentTermsValidator }, meetingId: { validator: mongoIdStringValidator, readonly: true }, bookingPageId: { validator: mongoIdStringValidator }, meetingStatus: { validator: meetingStatusValidator }, videoCallAttendance: { validator: listOfVideoCallParticipantEventsValidator, readonly: true }, attachments: { validator: listOfGenericAttachmentsValidator }, cancelledAt: { validator: dateOptionalOrEmptyStringValidator }, rescheduledAt: { validator: dateOptionalOrEmptyStringValidator }, noShowedAt: { validator: dateOptionalOrEmptyStringValidator }, rescheduledTo: { validator: mongoIdStringValidator }, chatRoomId: {
3964
3987
  validator: mongoIdStringValidator,
3965
3988
  dependencies: [{
3966
3989
  dependsOn: ['chat_rooms'],
@@ -4026,7 +4049,7 @@ export var schema = build_schema({
4026
4049
  defaultActions: DEFAULT_OPERATIONS,
4027
4050
  customActions: {},
4028
4051
  enduserActions: { read: {}, readMany: {} },
4029
- fields: __assign(__assign({}, BuiltInFields), { dontSyncToElation: { validator: booleanValidator }, sendIcsEmail: { validator: booleanValidator }, createAndBookAthenaSlot: { validator: booleanValidator }, athenaDepartmentId: { validator: stringValidator1000 }, generateAthenaTelehealthLink: { validator: booleanValidator }, athenaTypeId: { validator: stringValidator1000 }, athenaBookingTypeId: { validator: stringValidator1000 }, preventCancelMinutesInAdvance: { validator: numberValidator }, preventRescheduleMinutesInAdvance: { validator: numberValidator }, preventCancelInPortal: { validator: booleanValidator }, preventRescheduleInPortal: { validator: booleanValidator }, dontSyncToCanvas: { validator: booleanValidator }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, allowGroupReschedule: { validator: booleanValidator }, dontAutoSyncPatientToHealthie: { validator: booleanValidator }, title: {
4052
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, dontSyncToElation: { validator: booleanValidator }, sendIcsEmail: { validator: booleanValidator }, createAndBookAthenaSlot: { validator: booleanValidator }, athenaDepartmentId: { validator: stringValidator1000 }, generateAthenaTelehealthLink: { validator: booleanValidator }, athenaTypeId: { validator: stringValidator1000 }, athenaBookingTypeId: { validator: stringValidator1000 }, preventCancelMinutesInAdvance: { validator: numberValidator }, preventRescheduleMinutesInAdvance: { validator: numberValidator }, preventCancelInPortal: { validator: booleanValidator }, preventRescheduleInPortal: { validator: booleanValidator }, dontSyncToCanvas: { validator: booleanValidator }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, allowGroupReschedule: { validator: booleanValidator }, dontAutoSyncPatientToHealthie: { validator: booleanValidator }, title: {
4030
4053
  validator: stringValidator250,
4031
4054
  required: true,
4032
4055
  examples: ["Text"],
@@ -4421,7 +4444,7 @@ export var schema = build_schema({
4421
4444
  create: {}, createMany: {}, read: {}, readMany: {},
4422
4445
  search: {},
4423
4446
  },
4424
- fields: __assign(__assign({}, BuiltInFields), { slug: { validator: stringValidator250 }, title: {
4447
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, slug: { validator: stringValidator250 }, title: {
4425
4448
  validator: stringValidator1000,
4426
4449
  required: true,
4427
4450
  examples: ["Template Name"],
@@ -4969,7 +4992,7 @@ export var schema = build_schema({
4969
4992
  validator: objectValidator({
4970
4993
  type: stringValidatorOptional,
4971
4994
  }),
4972
- }, onboardingStatus: { validator: stringValidator100 }, creditCount: { validator: numberValidator, readonly: true }, stripeKeyDetails: {
4995
+ }, onboardingStatus: { validator: userPortalSettingsValidator }, creditCount: { validator: numberValidator, readonly: true }, stripeKeyDetails: {
4973
4996
  validator: listValidatorOptionalOrEmptyOk(objectValidator({
4974
4997
  key: stringValidator5000EmptyOkay,
4975
4998
  title: stringValidator5000EmptyOkay,
@@ -5246,7 +5269,10 @@ export var schema = build_schema({
5246
5269
  }
5247
5270
  },
5248
5271
  ]
5249
- }, uiRestrictions: { validator: userUIRestrictionsValidator }, fieldRedactions: { validator: userFieldRedactionsValidator } })
5272
+ }, uiRestrictions: { validator: userUIRestrictionsValidator }, fieldRedactions: { validator: userFieldRedactionsValidator }, portalSchemaRestrictions: {
5273
+ validator: portalSchemaRestrictionsValidator,
5274
+ initializer: function () { return ({ disableEditContent: true, disableEditTheming: true, disableEditSnippets: true }); },
5275
+ }, color: { validator: stringValidator1000 }, description: { validator: stringValidator1000Optional } })
5250
5276
  },
5251
5277
  appointment_booking_pages: {
5252
5278
  info: {},
@@ -5288,7 +5314,7 @@ export var schema = build_schema({
5288
5314
  enduserActions: {
5289
5315
  read: {}, readMany: {}, validate_access_token: {},
5290
5316
  },
5291
- fields: __assign(__assign({}, BuiltInFields), { dontRestrictRescheduleToOriginalHost: { validator: booleanValidator }, gtmTag: { validator: stringValidator100EscapeHTML }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, title: {
5317
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, dontRestrictRescheduleToOriginalHost: { validator: booleanValidator }, gtmTag: { validator: stringValidator100EscapeHTML }, archivedAt: { validator: dateOptionalOrEmptyStringValidator }, title: {
5292
5318
  validator: stringValidator100,
5293
5319
  required: true,
5294
5320
  examples: ["Appointment Booking Title"]
@@ -5910,7 +5936,7 @@ export var schema = build_schema({
5910
5936
  },
5911
5937
  },
5912
5938
  enduserActions: {},
5913
- fields: __assign(__assign({}, BuiltInFields), { title: {
5939
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, title: {
5914
5940
  validator: stringValidator100,
5915
5941
  required: true,
5916
5942
  examples: ["Automation Trigger"]
@@ -6186,7 +6212,7 @@ export var schema = build_schema({
6186
6212
  defaultActions: DEFAULT_OPERATIONS,
6187
6213
  customActions: {},
6188
6214
  enduserActions: {},
6189
- fields: __assign(__assign({}, BuiltInFields), { title: {
6215
+ fields: __assign(__assign({}, BuiltInFields), { accessTags: { redactions: ['enduser'], validator: listOfStringsValidatorEmptyOk }, title: {
6190
6216
  validator: stringValidator,
6191
6217
  required: true,
6192
6218
  examples: ["Title"]
@@ -6326,18 +6352,34 @@ export var schema = build_schema({
6326
6352
  }
6327
6353
  },
6328
6354
  {
6329
- explanation: "Locked time tracks only allow review field updates",
6330
- evaluate: function (_v, _deps, _session, method, _a) {
6355
+ explanation: "Locked time tracks only allow review field updates, or owner resubmission of rejected entries",
6356
+ evaluate: function (_v, _deps, session, method, _a) {
6331
6357
  var original = _a.original, updates = _a.updates;
6332
6358
  if (method !== 'update')
6333
6359
  return;
6334
6360
  var orig = original;
6335
6361
  if (!(orig === null || orig === void 0 ? void 0 : orig.lockedAt))
6336
6362
  return;
6363
+ var u = updates;
6337
6364
  var reviewFields = ['reviewedAt', 'reviewedByUserId', 'reviewApproved', 'reviewNote'];
6338
6365
  var nonReviewFields = Object.keys(updates || {}).filter(function (k) { return !reviewFields.includes(k); });
6339
- if (nonReviewFields.length > 0)
6340
- return "Time track is locked. Only review fields (".concat(reviewFields.join(', '), ") can be updated.");
6366
+ if (nonReviewFields.length === 0)
6367
+ return; // pure review update unchanged behavior
6368
+ var isRejected = !!orig.reviewedAt && orig.reviewApproved === false;
6369
+ var resubmitFields = __spreadArray(__spreadArray([], reviewFields, true), [
6370
+ 'correctedAt', 'correctedByUserId', 'correctionNote',
6371
+ 'originalTotalDurationInMS', 'totalDurationInMS',
6372
+ 'lockedAt', 'lockedByUserId',
6373
+ ], false);
6374
+ var disallowed = Object.keys(updates || {}).filter(function (k) { return !resubmitFields.includes(k); });
6375
+ if (isRejected && session.id === orig.userId && disallowed.length === 0) {
6376
+ if ((u === null || u === void 0 ? void 0 : u.reviewedAt) !== '')
6377
+ return "Resubmitting a rejected time track requires clearing reviewedAt (set to '')";
6378
+ if ((u === null || u === void 0 ? void 0 : u.reviewApproved) === true)
6379
+ return "Cannot approve your own time track during resubmission";
6380
+ return; // valid resubmit — entry returns to Pending
6381
+ }
6382
+ return "Time track is locked. Only review fields (".concat(reviewFields.join(', '), ") can be updated.");
6341
6383
  }
6342
6384
  },
6343
6385
  {
@@ -6412,7 +6454,20 @@ export var schema = build_schema({
6412
6454
  type: stringValidator,
6413
6455
  id: stringValidator,
6414
6456
  }, { isOptional: true, emptyOk: true }),
6415
- }, isHistorical: { validator: booleanValidatorOptional, updatesDisabled: true }, correctedAt: { validator: dateValidatorOptional }, correctedByUserId: { validator: mongoIdStringOptional }, correctionNote: { validator: stringValidator1000Optional }, originalTotalDurationInMS: { validator: numberValidatorOptional }, reviewedAt: { validator: dateValidatorOptional }, reviewedByUserId: { validator: mongoIdStringOptional }, reviewApproved: { validator: booleanValidatorOptional }, reviewNote: { validator: stringValidator1000Optional }, lockedAt: { validator: dateValidatorOptional }, lockedByUserId: { validator: mongoIdStringOptional } }),
6457
+ }, isHistorical: { validator: booleanValidatorOptional, updatesDisabled: true }, correctedAt: { validator: dateValidatorOptional }, correctedByUserId: { validator: mongoIdStringOptional }, correctionNote: { validator: stringValidator1000Optional }, originalTotalDurationInMS: { validator: numberValidatorOptional }, reviewedAt: { validator: dateValidatorOptional }, reviewedByUserId: { validator: mongoIdStringOptional }, reviewApproved: { validator: booleanValidatorOptional }, reviewNote: { validator: stringValidator1000Optional }, lockedAt: { validator: dateValidatorOptional }, lockedByUserId: { validator: mongoIdStringOptional },
6458
+ // server-appended on resubmission of a rejected entry (see routing.ts update handler)
6459
+ // note: reviewApproved remains false after resubmit (booleans can't be cleared to '') — status logic must key off reviewedAt
6460
+ reviewHistory: {
6461
+ validator: listValidatorOptionalOrEmptyOk(objectValidator({
6462
+ reviewedAt: dateValidator,
6463
+ reviewedByUserId: mongoIdStringOptional,
6464
+ reviewApproved: booleanValidatorOptional,
6465
+ reviewNote: stringValidator1000Optional,
6466
+ resubmittedAt: dateValidatorOptional,
6467
+ resubmittedByUserId: mongoIdStringOptional,
6468
+ })),
6469
+ readonly: true, // server-appended only — clients can read, never write
6470
+ } }),
6416
6471
  },
6417
6472
  ticket_queues: {
6418
6473
  info: {},
@@ -6840,7 +6895,7 @@ export var schema = build_schema({
6840
6895
  defaultActions: { read: {}, readMany: {} },
6841
6896
  customActions: {},
6842
6897
  enduserActions: {},
6843
- fields: __assign(__assign({}, BuiltInFields), { integration: { validator: stringValidator, readonly: true, examples: ['Canvas'] }, status: { validator: exactMatchValidator(['Success', 'Error']), readonly: true, examples: ['Error'] }, type: { validator: stringValidator, readonly: true, examples: ['Patient Create'] }, payload: { validator: stringValidator, readonly: true, examples: ['{}'] }, response: { validator: stringValidator, readonly: true, examples: ['{}'] }, url: { validator: stringValidator, readonly: true, examples: ['https://www.tellescope.com'] }, enduserId: { validator: mongoIdStringValidator, readonly: true } })
6898
+ fields: __assign(__assign({}, BuiltInFields), { integration: { validator: stringValidator, readonly: true, examples: ['Canvas'] }, status: { validator: exactMatchValidator(['Success', 'Error', 'Info']), readonly: true, examples: ['Error'] }, type: { validator: stringValidator, readonly: true, examples: ['Patient Create'] }, payload: { validator: stringValidator, readonly: true, examples: ['{}'] }, response: { validator: stringValidator, readonly: true, examples: ['{}'] }, url: { validator: stringValidator, readonly: true, examples: ['https://www.tellescope.com'] }, enduserId: { validator: mongoIdStringValidator, readonly: true } })
6844
6899
  },
6845
6900
  organization_payments: {
6846
6901
  info: { description: 'Read Only - Organization Payment Transaction Logs' },