@memberjunction/core-entities 5.41.0 → 5.43.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.
@@ -2051,7 +2051,7 @@ export const MJAIAgentNoteSchema = z.object({
2051
2051
  * * SQL Data Type: nvarchar(255)`),
2052
2052
  SourceConversationDetail: z.string().nullable().describe(`
2053
2053
  * * Field Name: SourceConversationDetail
2054
- * * Display Name: Source Conversation Detail
2054
+ * * Display Name: Source Conversation Detail Name
2055
2055
  * * SQL Data Type: nvarchar(100)`),
2056
2056
  SourceAIAgentRun: z.string().nullable().describe(`
2057
2057
  * * Field Name: SourceAIAgentRun
@@ -15026,6 +15026,11 @@ export const MJEntityActionInvocationSchema = z.object({
15026
15026
  * * Display Name: Updated At
15027
15027
  * * SQL Data Type: datetimeoffset
15028
15028
  * * Default Value: getutcdate()`),
15029
+ RuntimeUXDriverClass: z.string().nullable().describe(`
15030
+ * * Field Name: RuntimeUXDriverClass
15031
+ * * Display Name: Runtime UX Driver Class
15032
+ * * SQL Data Type: nvarchar(255)
15033
+ * * Description: Optional class name of a registered runtime-UX driver component (a BaseEntityActionRuntimeUX subclass resolved via MJGlobal.ClassFactory) that owns this invocation's interaction — parameter collection, dry-run preview, confirmation, and progress. NULL invokes the action directly with no custom UX. This lets any action opt into a richer, reusable runtime experience while the grid/toolbar stays operation-agnostic.`),
15029
15034
  EntityAction: z.string().describe(`
15030
15035
  * * Field Name: EntityAction
15031
15036
  * * Display Name: Entity Action Name
@@ -17721,7 +17726,7 @@ export const MJIntegrationObjectSchema = z.object({
17721
17726
  * * Description: Primary key`),
17722
17727
  IntegrationID: z.string().describe(`
17723
17728
  * * Field Name: IntegrationID
17724
- * * Display Name: Integration
17729
+ * * Display Name: Integration ID
17725
17730
  * * SQL Data Type: uniqueidentifier
17726
17731
  * * Related Entity/Foreign Key: MJ: Integrations (vwIntegrations.ID)
17727
17732
  * * Description: Foreign key to the Integration that owns this object`),
@@ -17955,9 +17960,43 @@ export const MJIntegrationObjectSchema = z.object({
17955
17960
  * * Declared
17956
17961
  * * Discovered
17957
17962
  * * Description: Provenance of this IntegrationObject row: Declared (from static research/docs), Discovered (from runtime API introspection like Salesforce /describe), Custom (genuinely customer-created, e.g., HubSpot custom objects). Drives merge precedence in IntegrationSchemaSync.`),
17963
+ SupportsCreate: z.boolean().describe(`
17964
+ * * Field Name: SupportsCreate
17965
+ * * Display Name: Supports Create
17966
+ * * SQL Data Type: bit
17967
+ * * Default Value: 0
17968
+ * * Description: Whether this object supports record creation in the external system (per-operation granularity beyond SupportsWrite). Drives whether the generic CreateRecord path is wired and whether the object is offered for write-back create.`),
17969
+ SupportsUpdate: z.boolean().describe(`
17970
+ * * Field Name: SupportsUpdate
17971
+ * * Display Name: Supports Update
17972
+ * * SQL Data Type: bit
17973
+ * * Default Value: 0
17974
+ * * Description: Whether this object supports record updates in the external system (per-operation granularity beyond SupportsWrite).`),
17975
+ SupportsDelete: z.boolean().describe(`
17976
+ * * Field Name: SupportsDelete
17977
+ * * Display Name: Supports Delete
17978
+ * * SQL Data Type: bit
17979
+ * * Default Value: 0
17980
+ * * Description: Whether this object supports record deletion/tombstoning in the external system (per-operation granularity beyond SupportsWrite).`),
17981
+ SyncStrategy: z.string().nullable().describe(`
17982
+ * * Field Name: SyncStrategy
17983
+ * * Display Name: Sync Strategy
17984
+ * * SQL Data Type: nvarchar(50)
17985
+ * * Description: Declared incremental sync strategy for this object (e.g. WatermarkIncremental, ContentHash, FullSnapshot). Informs how the engine narrows subsequent syncs.`),
17986
+ ContentHashApplicable: z.boolean().describe(`
17987
+ * * Field Name: ContentHashApplicable
17988
+ * * Display Name: Content Hash Applicable
17989
+ * * SQL Data Type: bit
17990
+ * * Default Value: 1
17991
+ * * Description: Whether per-record content hashing is meaningful for this object (false for append-only/event streams where every row is new). Controls whether the engine uses content-hash to skip unchanged-row writes.`),
17992
+ StableOrderingKey: z.string().nullable().describe(`
17993
+ * * Field Name: StableOrderingKey
17994
+ * * Display Name: Stable Ordering Key
17995
+ * * SQL Data Type: nvarchar(255)
17996
+ * * Description: Stable, monotonic ordering column (usually the PK) used for keyset/no-watermark resume of a scan. Null when the object has no stable key.`),
17958
17997
  Integration: z.string().describe(`
17959
17998
  * * Field Name: Integration
17960
- * * Display Name: Integration Name
17999
+ * * Display Name: Integration
17961
18000
  * * SQL Data Type: nvarchar(100)`),
17962
18001
  });
17963
18002
  /**
@@ -18125,6 +18164,11 @@ export const MJIntegrationSchema = z.object({
18125
18164
  * * Display Name: Icon
18126
18165
  * * SQL Data Type: nvarchar(MAX)
18127
18166
  * * Description: Icon for the integration. Supports Font Awesome CSS classes, image URLs, or base64 data URIs.`),
18167
+ Configuration: z.string().nullable().describe(`
18168
+ * * Field Name: Configuration
18169
+ * * Display Name: Configuration
18170
+ * * SQL Data Type: nvarchar(MAX)
18171
+ * * Description: Integration-level connector configuration JSON (e.g. out-of-scope object families, vendor-specific tuning). Free-form JSON the connector reads at runtime.`),
18128
18172
  CredentialType: z.string().nullable().describe(`
18129
18173
  * * Field Name: CredentialType
18130
18174
  * * Display Name: Credential Type Name
@@ -20212,6 +20256,11 @@ export const MJOpenAppSchema = z.object({
20212
20256
  * * Display Name: Updated At
20213
20257
  * * SQL Data Type: datetimeoffset
20214
20258
  * * Default Value: getutcdate()`),
20259
+ Subpath: z.string().nullable().describe(`
20260
+ * * Field Name: Subpath
20261
+ * * Display Name: Subpath
20262
+ * * SQL Data Type: nvarchar(500)
20263
+ * * Description: In-repo subdirectory the app was installed from for multi-app repositories (e.g. 'CRM/HubSpot'). NULL when the app's mj-app.json is at the repository root.`),
20215
20264
  InstalledByUser: z.string().describe(`
20216
20265
  * * Field Name: InstalledByUser
20217
20266
  * * Display Name: Installed By User
@@ -20386,6 +20435,294 @@ export const MJPermissionDomainSchema = z.object({
20386
20435
  * * SQL Data Type: datetimeoffset
20387
20436
  * * Default Value: getutcdate()`),
20388
20437
  });
20438
+ /**
20439
+ * zod schema definition for the entity MJ: Process Run Details
20440
+ */
20441
+ export const MJProcessRunDetailSchema = z.object({
20442
+ ID: z.string().describe(`
20443
+ * * Field Name: ID
20444
+ * * Display Name: ID
20445
+ * * SQL Data Type: uniqueidentifier
20446
+ * * Default Value: newsequentialid()`),
20447
+ ProcessRunID: z.string().describe(`
20448
+ * * Field Name: ProcessRunID
20449
+ * * Display Name: Process Run
20450
+ * * SQL Data Type: uniqueidentifier
20451
+ * * Related Entity/Foreign Key: MJ: Process Runs (vwProcessRuns.ID)
20452
+ * * Description: Foreign key to the parent Process Run`),
20453
+ EntityID: z.string().describe(`
20454
+ * * Field Name: EntityID
20455
+ * * Display Name: Entity ID
20456
+ * * SQL Data Type: uniqueidentifier
20457
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
20458
+ * * Description: Foreign key to the entity of the processed record. Stored (not inherited) because a single run may span entities for ad-hoc / engine-driven runs.`),
20459
+ RecordID: z.string().describe(`
20460
+ * * Field Name: RecordID
20461
+ * * Display Name: Record ID
20462
+ * * SQL Data Type: nvarchar(450)
20463
+ * * Description: Primary key of the processed record, stored as text to remain composite-key safe`),
20464
+ Status: z.union([z.literal('Failed'), z.literal('Pending'), z.literal('Skipped'), z.literal('Succeeded')]).describe(`
20465
+ * * Field Name: Status
20466
+ * * Display Name: Status
20467
+ * * SQL Data Type: nvarchar(20)
20468
+ * * Default Value: Pending
20469
+ * * Value List Type: List
20470
+ * * Possible Values
20471
+ * * Failed
20472
+ * * Pending
20473
+ * * Skipped
20474
+ * * Succeeded
20475
+ * * Description: Per-record status: Pending, Succeeded, Failed, or Skipped`),
20476
+ StartedAt: z.date().nullable().describe(`
20477
+ * * Field Name: StartedAt
20478
+ * * Display Name: Started At
20479
+ * * SQL Data Type: datetimeoffset
20480
+ * * Description: When processing of this record started`),
20481
+ CompletedAt: z.date().nullable().describe(`
20482
+ * * Field Name: CompletedAt
20483
+ * * Display Name: Completed At
20484
+ * * SQL Data Type: datetimeoffset
20485
+ * * Description: When processing of this record completed`),
20486
+ DurationMs: z.number().nullable().describe(`
20487
+ * * Field Name: DurationMs
20488
+ * * Display Name: Duration (ms)
20489
+ * * SQL Data Type: int
20490
+ * * Description: Processing duration for this record in milliseconds`),
20491
+ AttemptCount: z.number().describe(`
20492
+ * * Field Name: AttemptCount
20493
+ * * Display Name: Attempt Count
20494
+ * * SQL Data Type: int
20495
+ * * Default Value: 0
20496
+ * * Description: Number of processing attempts for this record (supports retry)`),
20497
+ ResultPayload: z.string().nullable().describe(`
20498
+ * * Field Name: ResultPayload
20499
+ * * Display Name: Result Payload
20500
+ * * SQL Data Type: nvarchar(MAX)
20501
+ * * Description: Structured output payload (JSON) produced for this record`),
20502
+ ErrorMessage: z.string().nullable().describe(`
20503
+ * * Field Name: ErrorMessage
20504
+ * * Display Name: Error Message
20505
+ * * SQL Data Type: nvarchar(MAX)
20506
+ * * Description: Per-record error message when Status=Failed`),
20507
+ ActionExecutionLogID: z.string().nullable().describe(`
20508
+ * * Field Name: ActionExecutionLogID
20509
+ * * Display Name: Action Execution Log ID
20510
+ * * SQL Data Type: uniqueidentifier
20511
+ * * Related Entity/Foreign Key: MJ: Action Execution Logs (vwActionExecutionLogs.ID)
20512
+ * * Description: Foreign key to the Action Execution Log for deep tracing, when the work was an Action`),
20513
+ AIAgentRunID: z.string().nullable().describe(`
20514
+ * * Field Name: AIAgentRunID
20515
+ * * Display Name: AI Agent Run ID
20516
+ * * SQL Data Type: uniqueidentifier
20517
+ * * Related Entity/Foreign Key: MJ: AI Agent Runs (vwAIAgentRuns.ID)
20518
+ * * Description: Foreign key to the AI Agent Run for deep tracing, when the work was an Agent`),
20519
+ __mj_CreatedAt: z.date().describe(`
20520
+ * * Field Name: __mj_CreatedAt
20521
+ * * Display Name: Created At
20522
+ * * SQL Data Type: datetimeoffset
20523
+ * * Default Value: getutcdate()`),
20524
+ __mj_UpdatedAt: z.date().describe(`
20525
+ * * Field Name: __mj_UpdatedAt
20526
+ * * Display Name: Updated At
20527
+ * * SQL Data Type: datetimeoffset
20528
+ * * Default Value: getutcdate()`),
20529
+ Entity: z.string().describe(`
20530
+ * * Field Name: Entity
20531
+ * * Display Name: Entity Name
20532
+ * * SQL Data Type: nvarchar(255)`),
20533
+ ActionExecutionLog: z.string().nullable().describe(`
20534
+ * * Field Name: ActionExecutionLog
20535
+ * * Display Name: Action Execution Log
20536
+ * * SQL Data Type: nvarchar(425)`),
20537
+ AIAgentRun: z.string().nullable().describe(`
20538
+ * * Field Name: AIAgentRun
20539
+ * * Display Name: AI Agent Run
20540
+ * * SQL Data Type: nvarchar(255)`),
20541
+ });
20542
+ /**
20543
+ * zod schema definition for the entity MJ: Process Runs
20544
+ */
20545
+ export const MJProcessRunSchema = z.object({
20546
+ ID: z.string().describe(`
20547
+ * * Field Name: ID
20548
+ * * Display Name: ID
20549
+ * * SQL Data Type: uniqueidentifier
20550
+ * * Default Value: newsequentialid()`),
20551
+ RecordProcessID: z.string().nullable().describe(`
20552
+ * * Field Name: RecordProcessID
20553
+ * * Display Name: Record Process
20554
+ * * SQL Data Type: uniqueidentifier
20555
+ * * Related Entity/Foreign Key: MJ: Record Processes (vwRecordProcesses.ID)
20556
+ * * Description: Foreign key to the Record Process that spawned this run; NULL for ad-hoc / engine-driven runs not tied to a saved definition`),
20557
+ EntityID: z.string().nullable().describe(`
20558
+ * * Field Name: EntityID
20559
+ * * Display Name: Entity
20560
+ * * SQL Data Type: uniqueidentifier
20561
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
20562
+ * * Description: Foreign key to the entity processed by this run, when the run is entity-scoped`),
20563
+ TriggeredBy: z.union([z.literal('Manual'), z.literal('OnChange'), z.literal('OnDemand'), z.literal('Schedule')]).describe(`
20564
+ * * Field Name: TriggeredBy
20565
+ * * Display Name: Triggered By
20566
+ * * SQL Data Type: nvarchar(20)
20567
+ * * Value List Type: List
20568
+ * * Possible Values
20569
+ * * Manual
20570
+ * * OnChange
20571
+ * * OnDemand
20572
+ * * Schedule
20573
+ * * Description: What triggered this run: OnChange, Schedule, OnDemand, or Manual`),
20574
+ SourceType: z.union([z.literal('Array'), z.literal('Filter'), z.literal('Keyset'), z.literal('List'), z.literal('SingleRecord'), z.literal('View')]).describe(`
20575
+ * * Field Name: SourceType
20576
+ * * Display Name: Source Type
20577
+ * * SQL Data Type: nvarchar(20)
20578
+ * * Value List Type: List
20579
+ * * Possible Values
20580
+ * * Array
20581
+ * * Filter
20582
+ * * Keyset
20583
+ * * List
20584
+ * * SingleRecord
20585
+ * * View
20586
+ * * Description: The kind of record-set source resolved for this run: View, List, Filter, Array, Keyset, or SingleRecord`),
20587
+ SourceID: z.string().nullable().describe(`
20588
+ * * Field Name: SourceID
20589
+ * * Display Name: Source ID
20590
+ * * SQL Data Type: uniqueidentifier
20591
+ * * Description: Polymorphic source identifier (e.g., ViewID or ListID) when applicable; no FK because it spans entities`),
20592
+ SourceFilter: z.string().nullable().describe(`
20593
+ * * Field Name: SourceFilter
20594
+ * * Display Name: Source Filter
20595
+ * * SQL Data Type: nvarchar(MAX)
20596
+ * * Description: Resolved filter snapshot used to materialize the record set for this run`),
20597
+ ScheduledJobRunID: z.string().nullable().describe(`
20598
+ * * Field Name: ScheduledJobRunID
20599
+ * * Display Name: Scheduled Job Run
20600
+ * * SQL Data Type: uniqueidentifier
20601
+ * * Related Entity/Foreign Key: MJ: Scheduled Job Runs (vwScheduledJobRuns.ID)
20602
+ * * Description: Foreign key to the Scheduled Job Run that launched this run, when scheduler-launched`),
20603
+ Status: z.union([z.literal('Cancelled'), z.literal('Completed'), z.literal('Failed'), z.literal('Paused'), z.literal('Pending'), z.literal('Running')]).describe(`
20604
+ * * Field Name: Status
20605
+ * * Display Name: Status
20606
+ * * SQL Data Type: nvarchar(20)
20607
+ * * Default Value: Pending
20608
+ * * Value List Type: List
20609
+ * * Possible Values
20610
+ * * Cancelled
20611
+ * * Completed
20612
+ * * Failed
20613
+ * * Paused
20614
+ * * Pending
20615
+ * * Running
20616
+ * * Description: Run status: Pending, Running, Paused, Completed, Failed, or Cancelled`),
20617
+ StartTime: z.date().nullable().describe(`
20618
+ * * Field Name: StartTime
20619
+ * * Display Name: Start Time
20620
+ * * SQL Data Type: datetimeoffset
20621
+ * * Description: When the run started`),
20622
+ EndTime: z.date().nullable().describe(`
20623
+ * * Field Name: EndTime
20624
+ * * Display Name: End Time
20625
+ * * SQL Data Type: datetimeoffset
20626
+ * * Description: When the run ended`),
20627
+ TotalItemCount: z.number().nullable().describe(`
20628
+ * * Field Name: TotalItemCount
20629
+ * * Display Name: Total Item Count
20630
+ * * SQL Data Type: int
20631
+ * * Description: Estimated or known total number of records to process`),
20632
+ ProcessedItems: z.number().describe(`
20633
+ * * Field Name: ProcessedItems
20634
+ * * Display Name: Processed Items
20635
+ * * SQL Data Type: int
20636
+ * * Default Value: 0
20637
+ * * Description: Count of records processed so far`),
20638
+ SuccessCount: z.number().describe(`
20639
+ * * Field Name: SuccessCount
20640
+ * * Display Name: Success Count
20641
+ * * SQL Data Type: int
20642
+ * * Default Value: 0
20643
+ * * Description: Count of records processed successfully`),
20644
+ ErrorCount: z.number().describe(`
20645
+ * * Field Name: ErrorCount
20646
+ * * Display Name: Error Count
20647
+ * * SQL Data Type: int
20648
+ * * Default Value: 0
20649
+ * * Description: Count of records that failed processing`),
20650
+ SkippedCount: z.number().describe(`
20651
+ * * Field Name: SkippedCount
20652
+ * * Display Name: Skipped Count
20653
+ * * SQL Data Type: int
20654
+ * * Default Value: 0
20655
+ * * Description: Count of records skipped (e.g., unchanged per watermark)`),
20656
+ LastProcessedOffset: z.number().nullable().describe(`
20657
+ * * Field Name: LastProcessedOffset
20658
+ * * Display Name: Last Processed Offset
20659
+ * * SQL Data Type: int
20660
+ * * Description: Offset-based resume cursor (StartRow) for sources that paginate by offset`),
20661
+ LastProcessedKey: z.string().nullable().describe(`
20662
+ * * Field Name: LastProcessedKey
20663
+ * * Display Name: Last Processed Key
20664
+ * * SQL Data Type: nvarchar(450)
20665
+ * * Description: Keyset-based resume cursor (AfterKey) for sources that paginate by seek`),
20666
+ BatchSize: z.number().nullable().describe(`
20667
+ * * Field Name: BatchSize
20668
+ * * Display Name: Batch Size
20669
+ * * SQL Data Type: int
20670
+ * * Description: Effective batch size for this run`),
20671
+ CancellationRequested: z.boolean().describe(`
20672
+ * * Field Name: CancellationRequested
20673
+ * * Display Name: Cancellation Requested
20674
+ * * SQL Data Type: bit
20675
+ * * Default Value: 0
20676
+ * * Description: Pause/cancel handshake flag honored by the processor between batches`),
20677
+ Configuration: z.string().nullable().describe(`
20678
+ * * Field Name: Configuration
20679
+ * * Display Name: Configuration JSON
20680
+ * * SQL Data Type: nvarchar(MAX)
20681
+ * * Description: JSON snapshot of the effective configuration for this run`),
20682
+ ErrorMessage: z.string().nullable().describe(`
20683
+ * * Field Name: ErrorMessage
20684
+ * * Display Name: Error Message
20685
+ * * SQL Data Type: nvarchar(MAX)
20686
+ * * Description: Run-level error message when Status=Failed`),
20687
+ StartedByUserID: z.string().nullable().describe(`
20688
+ * * Field Name: StartedByUserID
20689
+ * * Display Name: Started By User
20690
+ * * SQL Data Type: uniqueidentifier
20691
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
20692
+ * * Description: Foreign key to the user who started the run`),
20693
+ __mj_CreatedAt: z.date().describe(`
20694
+ * * Field Name: __mj_CreatedAt
20695
+ * * Display Name: Created At
20696
+ * * SQL Data Type: datetimeoffset
20697
+ * * Default Value: getutcdate()`),
20698
+ __mj_UpdatedAt: z.date().describe(`
20699
+ * * Field Name: __mj_UpdatedAt
20700
+ * * Display Name: Updated At
20701
+ * * SQL Data Type: datetimeoffset
20702
+ * * Default Value: getutcdate()`),
20703
+ DryRun: z.boolean().describe(`
20704
+ * * Field Name: DryRun
20705
+ * * Display Name: Is Dry Run
20706
+ * * SQL Data Type: bit
20707
+ * * Default Value: 0
20708
+ * * Description: When 1, this run was a dry-run (compute-only) preview: the per-record diffs were computed and persisted as Process Run Details, but no changes were written back to the target records. When 0, the run applied its changes.`),
20709
+ RecordProcess: z.string().nullable().describe(`
20710
+ * * Field Name: RecordProcess
20711
+ * * Display Name: Record Process Name
20712
+ * * SQL Data Type: nvarchar(255)`),
20713
+ Entity: z.string().nullable().describe(`
20714
+ * * Field Name: Entity
20715
+ * * Display Name: Entity Name
20716
+ * * SQL Data Type: nvarchar(255)`),
20717
+ ScheduledJobRun: z.string().nullable().describe(`
20718
+ * * Field Name: ScheduledJobRun
20719
+ * * Display Name: Scheduled Job Run Name
20720
+ * * SQL Data Type: nvarchar(200)`),
20721
+ StartedByUser: z.string().nullable().describe(`
20722
+ * * Field Name: StartedByUser
20723
+ * * Display Name: Started By User Name
20724
+ * * SQL Data Type: nvarchar(100)`),
20725
+ });
20389
20726
  /**
20390
20727
  * zod schema definition for the entity MJ: Projects
20391
20728
  */
@@ -22081,9 +22418,9 @@ export const MJRecordMergeLogSchema = z.object({
22081
22418
  * * SQL Data Type: nvarchar(100)`),
22082
22419
  });
22083
22420
  /**
22084
- * zod schema definition for the entity MJ: Report Categories
22421
+ * zod schema definition for the entity MJ: Record Process Categories
22085
22422
  */
22086
- export const MJReportCategorySchema = z.object({
22423
+ export const MJRecordProcessCategorySchema = z.object({
22087
22424
  ID: z.string().describe(`
22088
22425
  * * Field Name: ID
22089
22426
  * * Display Name: ID
@@ -22092,21 +22429,19 @@ export const MJReportCategorySchema = z.object({
22092
22429
  Name: z.string().describe(`
22093
22430
  * * Field Name: Name
22094
22431
  * * Display Name: Name
22095
- * * SQL Data Type: nvarchar(100)`),
22432
+ * * SQL Data Type: nvarchar(255)
22433
+ * * Description: Display name of the category`),
22096
22434
  Description: z.string().nullable().describe(`
22097
22435
  * * Field Name: Description
22098
22436
  * * Display Name: Description
22099
- * * SQL Data Type: nvarchar(MAX)`),
22437
+ * * SQL Data Type: nvarchar(MAX)
22438
+ * * Description: Optional description of what belongs in this category`),
22100
22439
  ParentID: z.string().nullable().describe(`
22101
22440
  * * Field Name: ParentID
22102
- * * Display Name: Parent ID
22103
- * * SQL Data Type: uniqueidentifier
22104
- * * Related Entity/Foreign Key: MJ: Report Categories (vwReportCategories.ID)`),
22105
- UserID: z.string().describe(`
22106
- * * Field Name: UserID
22107
- * * Display Name: User ID
22441
+ * * Display Name: Parent Category
22108
22442
  * * SQL Data Type: uniqueidentifier
22109
- * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
22443
+ * * Related Entity/Foreign Key: MJ: Record Process Categories (vwRecordProcessCategories.ID)
22444
+ * * Description: Self-referencing foreign key to the parent category, enabling a nested folder hierarchy (NULL for a top-level category)`),
22110
22445
  __mj_CreatedAt: z.date().describe(`
22111
22446
  * * Field Name: __mj_CreatedAt
22112
22447
  * * Display Name: Created At
@@ -22119,41 +22454,49 @@ export const MJReportCategorySchema = z.object({
22119
22454
  * * Default Value: getutcdate()`),
22120
22455
  Parent: z.string().nullable().describe(`
22121
22456
  * * Field Name: Parent
22122
- * * Display Name: Parent
22123
- * * SQL Data Type: nvarchar(100)`),
22124
- User: z.string().describe(`
22125
- * * Field Name: User
22126
- * * Display Name: User
22127
- * * SQL Data Type: nvarchar(100)`),
22457
+ * * Display Name: Parent Name
22458
+ * * SQL Data Type: nvarchar(255)`),
22128
22459
  RootParentID: z.string().nullable().describe(`
22129
22460
  * * Field Name: RootParentID
22130
- * * Display Name: Root Parent ID
22461
+ * * Display Name: Root Parent
22131
22462
  * * SQL Data Type: uniqueidentifier`),
22132
22463
  });
22133
22464
  /**
22134
- * zod schema definition for the entity MJ: Report Snapshots
22465
+ * zod schema definition for the entity MJ: Record Process Watermarks
22135
22466
  */
22136
- export const MJReportSnapshotSchema = z.object({
22467
+ export const MJRecordProcessWatermarkSchema = z.object({
22137
22468
  ID: z.string().describe(`
22138
22469
  * * Field Name: ID
22139
22470
  * * Display Name: ID
22140
22471
  * * SQL Data Type: uniqueidentifier
22141
22472
  * * Default Value: newsequentialid()`),
22142
- ReportID: z.string().describe(`
22143
- * * Field Name: ReportID
22144
- * * Display Name: Report ID
22473
+ RecordProcessID: z.string().describe(`
22474
+ * * Field Name: RecordProcessID
22475
+ * * Display Name: Record Process
22145
22476
  * * SQL Data Type: uniqueidentifier
22146
- * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
22147
- ResultSet: z.string().describe(`
22148
- * * Field Name: ResultSet
22149
- * * Display Name: Result Set
22150
- * * SQL Data Type: nvarchar(MAX)
22151
- * * Description: Field ResultSet for entity Report Snapshots.`),
22152
- UserID: z.string().describe(`
22153
- * * Field Name: UserID
22154
- * * Display Name: User ID
22477
+ * * Related Entity/Foreign Key: MJ: Record Processes (vwRecordProcesses.ID)
22478
+ * * Description: Foreign key to the Record Process this watermark belongs to`),
22479
+ EntityID: z.string().describe(`
22480
+ * * Field Name: EntityID
22481
+ * * Display Name: Entity
22155
22482
  * * SQL Data Type: uniqueidentifier
22156
- * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
22483
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
22484
+ * * Description: Foreign key to the entity of the watermarked record`),
22485
+ RecordID: z.string().describe(`
22486
+ * * Field Name: RecordID
22487
+ * * Display Name: Record ID
22488
+ * * SQL Data Type: nvarchar(450)
22489
+ * * Description: Primary key of the watermarked record, stored as text to remain composite-key safe`),
22490
+ Hash: z.string().describe(`
22491
+ * * Field Name: Hash
22492
+ * * Display Name: Content Hash
22493
+ * * SQL Data Type: nvarchar(128)
22494
+ * * Description: Content hash of the record as of the last time it was processed by this Record Process`),
22495
+ LastProcessedAt: z.date().describe(`
22496
+ * * Field Name: LastProcessedAt
22497
+ * * Display Name: Last Processed At
22498
+ * * SQL Data Type: datetimeoffset
22499
+ * * Description: When this record was last processed by this Record Process`),
22157
22500
  __mj_CreatedAt: z.date().describe(`
22158
22501
  * * Field Name: __mj_CreatedAt
22159
22502
  * * Display Name: Created At
@@ -22164,39 +22507,197 @@ export const MJReportSnapshotSchema = z.object({
22164
22507
  * * Display Name: Updated At
22165
22508
  * * SQL Data Type: datetimeoffset
22166
22509
  * * Default Value: getutcdate()`),
22167
- Report: z.string().describe(`
22168
- * * Field Name: Report
22169
- * * Display Name: Report
22510
+ RecordProcess: z.string().describe(`
22511
+ * * Field Name: RecordProcess
22512
+ * * Display Name: Record Process Name
22513
+ * * SQL Data Type: nvarchar(255)`),
22514
+ Entity: z.string().describe(`
22515
+ * * Field Name: Entity
22516
+ * * Display Name: Entity Name
22170
22517
  * * SQL Data Type: nvarchar(255)`),
22171
- User: z.string().describe(`
22172
- * * Field Name: User
22173
- * * Display Name: User
22174
- * * SQL Data Type: nvarchar(100)`),
22175
22518
  });
22176
22519
  /**
22177
- * zod schema definition for the entity MJ: Report User States
22520
+ * zod schema definition for the entity MJ: Record Processes
22178
22521
  */
22179
- export const MJReportUserStateSchema = z.object({
22522
+ export const MJRecordProcessSchema = z.object({
22180
22523
  ID: z.string().describe(`
22181
22524
  * * Field Name: ID
22182
22525
  * * Display Name: ID
22183
22526
  * * SQL Data Type: uniqueidentifier
22184
22527
  * * Default Value: newsequentialid()`),
22185
- ReportID: z.string().describe(`
22186
- * * Field Name: ReportID
22187
- * * Display Name: Report ID
22528
+ Name: z.string().describe(`
22529
+ * * Field Name: Name
22530
+ * * Display Name: Name
22531
+ * * SQL Data Type: nvarchar(255)
22532
+ * * Description: Human-readable name of the process definition (e.g., "Weekly Customer Health Summary")`),
22533
+ Description: z.string().nullable().describe(`
22534
+ * * Field Name: Description
22535
+ * * Display Name: Description
22536
+ * * SQL Data Type: nvarchar(MAX)
22537
+ * * Description: Optional description of what this process does`),
22538
+ CategoryID: z.string().nullable().describe(`
22539
+ * * Field Name: CategoryID
22540
+ * * Display Name: Category
22188
22541
  * * SQL Data Type: uniqueidentifier
22189
- * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
22190
- UserID: z.string().describe(`
22191
- * * Field Name: UserID
22192
- * * Display Name: User ID
22542
+ * * Related Entity/Foreign Key: MJ: Record Process Categories (vwRecordProcessCategories.ID)
22543
+ * * Description: Optional hierarchical category for organizing this process in the UI`),
22544
+ EntityID: z.string().describe(`
22545
+ * * Field Name: EntityID
22546
+ * * Display Name: Entity
22193
22547
  * * SQL Data Type: uniqueidentifier
22194
- * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
22195
- ReportState: z.string().nullable().describe(`
22196
- * * Field Name: ReportState
22197
- * * Display Name: Report State
22548
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
22549
+ * * Description: Foreign key to the target entity whose records this process operates on`),
22550
+ Status: z.union([z.literal('Active'), z.literal('Disabled'), z.literal('Draft')]).describe(`
22551
+ * * Field Name: Status
22552
+ * * Display Name: Status
22553
+ * * SQL Data Type: nvarchar(20)
22554
+ * * Default Value: Draft
22555
+ * * Value List Type: List
22556
+ * * Possible Values
22557
+ * * Active
22558
+ * * Disabled
22559
+ * * Draft
22560
+ * * Description: Lifecycle status: Draft (not yet wired), Active (triggers live), or Disabled`),
22561
+ WorkType: z.union([z.literal('Action'), z.literal('Agent'), z.literal('FieldRules'), z.literal('Infer')]).describe(`
22562
+ * * Field Name: WorkType
22563
+ * * Display Name: Work Type
22564
+ * * SQL Data Type: nvarchar(20)
22565
+ * * Value List Type: List
22566
+ * * Possible Values
22567
+ * * Action
22568
+ * * Agent
22569
+ * * FieldRules
22570
+ * * Infer
22571
+ * * Description: Whether the work is an Action, an Agent, or an Infer (per-record AI Prompt). Agents are dispatched through the Execute Agent action and must be top-level + ExposeAsAction; Infer runs the AI Prompt named by PromptID for each record and writes its structured output back via OutputMapping.`),
22572
+ ActionID: z.string().nullable().describe(`
22573
+ * * Field Name: ActionID
22574
+ * * Display Name: Action
22575
+ * * SQL Data Type: uniqueidentifier
22576
+ * * Related Entity/Foreign Key: MJ: Actions (vwActions.ID)
22577
+ * * Description: Foreign key to the Action to run, when WorkType=Action`),
22578
+ AgentID: z.string().nullable().describe(`
22579
+ * * Field Name: AgentID
22580
+ * * Display Name: Agent
22581
+ * * SQL Data Type: uniqueidentifier
22582
+ * * Related Entity/Foreign Key: MJ: AI Agents (vwAIAgents.ID)
22583
+ * * Description: Foreign key to the AI Agent to run, when WorkType=Agent`),
22584
+ PromptID: z.string().nullable().describe(`
22585
+ * * Field Name: PromptID
22586
+ * * Display Name: Prompt
22587
+ * * SQL Data Type: uniqueidentifier
22588
+ * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)
22589
+ * * Description: Foreign key to the AI Prompt to run for each record, when WorkType=Infer. The prompt's structured output is written back to the data model via OutputMapping.`),
22590
+ ScopeType: z.union([z.literal('Filter'), z.literal('List'), z.literal('SingleRecord'), z.literal('View')]).describe(`
22591
+ * * Field Name: ScopeType
22592
+ * * Display Name: Scope Type
22593
+ * * SQL Data Type: nvarchar(20)
22594
+ * * Value List Type: List
22595
+ * * Possible Values
22596
+ * * Filter
22597
+ * * List
22598
+ * * SingleRecord
22599
+ * * View
22600
+ * * Description: How the record set is scoped for the Schedule and On-Demand triggers: SingleRecord, View, List, or Filter. The On-Change trigger is always single-record and ignores this.`),
22601
+ ScopeViewID: z.string().nullable().describe(`
22602
+ * * Field Name: ScopeViewID
22603
+ * * Display Name: Scope View
22604
+ * * SQL Data Type: uniqueidentifier
22605
+ * * Related Entity/Foreign Key: MJ: User Views (vwUserViews.ID)
22606
+ * * Description: Foreign key to the User View defining the scope, when ScopeType=View`),
22607
+ ScopeListID: z.string().nullable().describe(`
22608
+ * * Field Name: ScopeListID
22609
+ * * Display Name: Scope List
22610
+ * * SQL Data Type: uniqueidentifier
22611
+ * * Related Entity/Foreign Key: MJ: Lists (vwLists.ID)
22612
+ * * Description: Foreign key to the List defining the scope, when ScopeType=List`),
22613
+ ScopeFilter: z.string().nullable().describe(`
22614
+ * * Field Name: ScopeFilter
22615
+ * * Display Name: Scope Filter
22198
22616
  * * SQL Data Type: nvarchar(MAX)
22199
- * * Description: JSON serialized state of user interaction with the report`),
22617
+ * * Description: Ad-hoc WHERE clause used to resolve the record set, when ScopeType=Filter`),
22618
+ OnChangeEnabled: z.boolean().describe(`
22619
+ * * Field Name: OnChangeEnabled
22620
+ * * Display Name: On-Change Enabled
22621
+ * * SQL Data Type: bit
22622
+ * * Default Value: 0
22623
+ * * Description: When 1, the process runs per-record on save via an owned Entity Action`),
22624
+ OnChangeInvocationType: z.union([z.literal('AfterCreate'), z.literal('AfterDelete'), z.literal('AfterUpdate'), z.literal('Validate')]).nullable().describe(`
22625
+ * * Field Name: OnChangeInvocationType
22626
+ * * Display Name: On-Change Invocation Type
22627
+ * * SQL Data Type: nvarchar(30)
22628
+ * * Value List Type: List
22629
+ * * Possible Values
22630
+ * * AfterCreate
22631
+ * * AfterDelete
22632
+ * * AfterUpdate
22633
+ * * Validate
22634
+ * * Description: Which save event fires the on-change trigger: AfterCreate, AfterUpdate, AfterDelete, or Validate`),
22635
+ OnChangeFilter: z.string().nullable().describe(`
22636
+ * * Field Name: OnChangeFilter
22637
+ * * Display Name: On-Change Filter
22638
+ * * SQL Data Type: nvarchar(MAX)
22639
+ * * Description: Gating expression evaluated against the changed record (with changed-fields context) that compiles into the owned Entity Action Filter; only when it passes does the on-change trigger fire`),
22640
+ ScheduleEnabled: z.boolean().describe(`
22641
+ * * Field Name: ScheduleEnabled
22642
+ * * Display Name: Schedule Enabled
22643
+ * * SQL Data Type: bit
22644
+ * * Default Value: 0
22645
+ * * Description: When 1, the process runs on a cron schedule via an owned Scheduled Job`),
22646
+ CronExpression: z.string().nullable().describe(`
22647
+ * * Field Name: CronExpression
22648
+ * * Display Name: Cron Expression
22649
+ * * SQL Data Type: nvarchar(120)
22650
+ * * Description: Cron expression for the schedule trigger, when ScheduleEnabled=1`),
22651
+ Timezone: z.string().nullable().describe(`
22652
+ * * Field Name: Timezone
22653
+ * * Display Name: Timezone
22654
+ * * SQL Data Type: nvarchar(100)
22655
+ * * Default Value: UTC
22656
+ * * Description: IANA timezone for evaluating the cron expression (default UTC)`),
22657
+ OnDemandEnabled: z.boolean().describe(`
22658
+ * * Field Name: OnDemandEnabled
22659
+ * * Display Name: On-Demand Enabled
22660
+ * * SQL Data Type: bit
22661
+ * * Default Value: 1
22662
+ * * Description: When 1, the process can be run on demand (button / resolver)`),
22663
+ InputMapping: z.string().nullable().describe(`
22664
+ * * Field Name: InputMapping
22665
+ * * Display Name: Input Mapping
22666
+ * * SQL Data Type: nvarchar(MAX)
22667
+ * * Description: JSON mapping describing how a record maps to the work inputs (optionally including an EntityDocumentID for render-to-text)`),
22668
+ OutputMapping: z.string().nullable().describe(`
22669
+ * * Field Name: OutputMapping
22670
+ * * Display Name: Output Mapping
22671
+ * * SQL Data Type: nvarchar(MAX)
22672
+ * * Description: JSON mapping describing how the structured output payload writes back (to fields, a child record, or tags)`),
22673
+ SkipUnchanged: z.boolean().describe(`
22674
+ * * Field Name: SkipUnchanged
22675
+ * * Display Name: Skip Unchanged
22676
+ * * SQL Data Type: bit
22677
+ * * Default Value: 1
22678
+ * * Description: When 1, records whose watermark indicates no change since the last run are skipped`),
22679
+ WatermarkStrategy: z.union([z.literal('Checksum'), z.literal('None'), z.literal('UpdatedAt')]).nullable().describe(`
22680
+ * * Field Name: WatermarkStrategy
22681
+ * * Display Name: Watermark Strategy
22682
+ * * SQL Data Type: nvarchar(20)
22683
+ * * Value List Type: List
22684
+ * * Possible Values
22685
+ * * Checksum
22686
+ * * None
22687
+ * * UpdatedAt
22688
+ * * Description: How unchanged records are detected for SkipUnchanged: Checksum (per-record content hash, stored in RecordProcessWatermark), UpdatedAt (compares __mj_UpdatedAt, stores nothing), or None`),
22689
+ BatchSize: z.number().nullable().describe(`
22690
+ * * Field Name: BatchSize
22691
+ * * Display Name: Batch Size
22692
+ * * SQL Data Type: int
22693
+ * * Default Value: 100
22694
+ * * Description: Number of records processed per batch (default 100)`),
22695
+ MaxConcurrency: z.number().nullable().describe(`
22696
+ * * Field Name: MaxConcurrency
22697
+ * * Display Name: Max Concurrency
22698
+ * * SQL Data Type: int
22699
+ * * Default Value: 1
22700
+ * * Description: Maximum number of records processed concurrently within a batch (default 1)`),
22200
22701
  __mj_CreatedAt: z.date().describe(`
22201
22702
  * * Field Name: __mj_CreatedAt
22202
22703
  * * Display Name: Created At
@@ -22207,55 +22708,65 @@ export const MJReportUserStateSchema = z.object({
22207
22708
  * * Display Name: Updated At
22208
22709
  * * SQL Data Type: datetimeoffset
22209
22710
  * * Default Value: getutcdate()`),
22210
- Report: z.string().describe(`
22211
- * * Field Name: Report
22212
- * * Display Name: Report
22711
+ Configuration: z.string().nullable().describe(`
22712
+ * * Field Name: Configuration
22713
+ * * Display Name: Configuration
22714
+ * * SQL Data Type: nvarchar(MAX)
22715
+ * * Description: JSON configuration for the process's work, used by work types that need structured config beyond Input/Output mappings. For WorkType='FieldRules' this holds the serialized FieldRuleSet (the rules applied to each record). NULL for work types that do not use it.`),
22716
+ Category: z.string().nullable().describe(`
22717
+ * * Field Name: Category
22718
+ * * Display Name: Category Name
22213
22719
  * * SQL Data Type: nvarchar(255)`),
22214
- User: z.string().describe(`
22215
- * * Field Name: User
22216
- * * Display Name: User
22720
+ Entity: z.string().describe(`
22721
+ * * Field Name: Entity
22722
+ * * Display Name: Entity Name
22723
+ * * SQL Data Type: nvarchar(255)`),
22724
+ Action: z.string().nullable().describe(`
22725
+ * * Field Name: Action
22726
+ * * Display Name: Action Name
22727
+ * * SQL Data Type: nvarchar(425)`),
22728
+ Agent: z.string().nullable().describe(`
22729
+ * * Field Name: Agent
22730
+ * * Display Name: Agent Name
22731
+ * * SQL Data Type: nvarchar(255)`),
22732
+ Prompt: z.string().nullable().describe(`
22733
+ * * Field Name: Prompt
22734
+ * * Display Name: Prompt Name
22735
+ * * SQL Data Type: nvarchar(255)`),
22736
+ ScopeView: z.string().nullable().describe(`
22737
+ * * Field Name: ScopeView
22738
+ * * Display Name: Scope View Name
22739
+ * * SQL Data Type: nvarchar(100)`),
22740
+ ScopeList: z.string().nullable().describe(`
22741
+ * * Field Name: ScopeList
22742
+ * * Display Name: Scope List Name
22217
22743
  * * SQL Data Type: nvarchar(100)`),
22218
22744
  });
22219
22745
  /**
22220
- * zod schema definition for the entity MJ: Report Versions
22746
+ * zod schema definition for the entity MJ: Remote Operation Categories
22221
22747
  */
22222
- export const MJReportVersionSchema = z.object({
22748
+ export const MJRemoteOperationCategorySchema = z.object({
22223
22749
  ID: z.string().describe(`
22224
22750
  * * Field Name: ID
22225
22751
  * * Display Name: ID
22226
22752
  * * SQL Data Type: uniqueidentifier
22227
22753
  * * Default Value: newsequentialid()`),
22228
- ReportID: z.string().describe(`
22229
- * * Field Name: ReportID
22230
- * * Display Name: Report ID
22231
- * * SQL Data Type: uniqueidentifier
22232
- * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
22233
- VersionNumber: z.number().describe(`
22234
- * * Field Name: VersionNumber
22235
- * * Display Name: Version Number
22236
- * * SQL Data Type: int
22237
- * * Description: Report version number, sequential per report starting at 1`),
22238
22754
  Name: z.string().describe(`
22239
22755
  * * Field Name: Name
22240
22756
  * * Display Name: Name
22241
22757
  * * SQL Data Type: nvarchar(255)
22242
- * * Description: Name of this report version`),
22758
+ * * Description: Display name of the category`),
22243
22759
  Description: z.string().nullable().describe(`
22244
22760
  * * Field Name: Description
22245
22761
  * * Display Name: Description
22246
22762
  * * SQL Data Type: nvarchar(MAX)
22247
- * * Description: Description of this report version`),
22248
- Configuration: z.string().nullable().describe(`
22249
- * * Field Name: Configuration
22250
- * * Display Name: Configuration
22251
- * * SQL Data Type: nvarchar(MAX)
22252
- * * Description: JSON configuration of report structure, layout and logic`),
22253
- DataContextUpdated: z.boolean().describe(`
22254
- * * Field Name: DataContextUpdated
22255
- * * Display Name: Data Context Updated
22256
- * * SQL Data Type: bit
22257
- * * Default Value: 0
22258
- * * Description: Indicates if the data context was updated in this version`),
22763
+ * * Description: Optional description of what belongs in this category`),
22764
+ ParentID: z.string().nullable().describe(`
22765
+ * * Field Name: ParentID
22766
+ * * Display Name: Parent Category
22767
+ * * SQL Data Type: uniqueidentifier
22768
+ * * Related Entity/Foreign Key: MJ: Remote Operation Categories (vwRemoteOperationCategories.ID)
22769
+ * * Description: Self-referencing foreign key to the parent category, enabling a nested folder hierarchy (NULL for a top-level category)`),
22259
22770
  __mj_CreatedAt: z.date().describe(`
22260
22771
  * * Field Name: __mj_CreatedAt
22261
22772
  * * Display Name: Created At
@@ -22266,15 +22777,19 @@ export const MJReportVersionSchema = z.object({
22266
22777
  * * Display Name: Updated At
22267
22778
  * * SQL Data Type: datetimeoffset
22268
22779
  * * Default Value: getutcdate()`),
22269
- Report: z.string().describe(`
22270
- * * Field Name: Report
22271
- * * Display Name: Report
22780
+ Parent: z.string().nullable().describe(`
22781
+ * * Field Name: Parent
22782
+ * * Display Name: Parent Name
22272
22783
  * * SQL Data Type: nvarchar(255)`),
22784
+ RootParentID: z.string().nullable().describe(`
22785
+ * * Field Name: RootParentID
22786
+ * * Display Name: Root Parent
22787
+ * * SQL Data Type: uniqueidentifier`),
22273
22788
  });
22274
22789
  /**
22275
- * zod schema definition for the entity MJ: Reports
22790
+ * zod schema definition for the entity MJ: Remote Operations
22276
22791
  */
22277
- export const MJReportSchema = z.object({
22792
+ export const MJRemoteOperationSchema = z.object({
22278
22793
  ID: z.string().describe(`
22279
22794
  * * Field Name: ID
22280
22795
  * * Display Name: ID
@@ -22283,38 +22798,417 @@ export const MJReportSchema = z.object({
22283
22798
  Name: z.string().describe(`
22284
22799
  * * Field Name: Name
22285
22800
  * * Display Name: Name
22286
- * * SQL Data Type: nvarchar(255)`),
22287
- Description: z.string().nullable().describe(`
22288
- * * Field Name: Description
22289
- * * Display Name: Description
22290
- * * SQL Data Type: nvarchar(MAX)`),
22801
+ * * SQL Data Type: nvarchar(255)
22802
+ * * Description: Human-readable name of the operation`),
22803
+ OperationKey: z.string().describe(`
22804
+ * * Field Name: OperationKey
22805
+ * * Display Name: Operation Key
22806
+ * * SQL Data Type: nvarchar(255)
22807
+ * * Description: Stable, unique registry key and wire token used to dispatch the operation (e.g., "RecordProcess.RunNow"). Namespaced by convention.`),
22291
22808
  CategoryID: z.string().nullable().describe(`
22292
22809
  * * Field Name: CategoryID
22293
22810
  * * Display Name: Category
22294
22811
  * * SQL Data Type: uniqueidentifier
22295
- * * Related Entity/Foreign Key: MJ: Report Categories (vwReportCategories.ID)`),
22296
- UserID: z.string().describe(`
22297
- * * Field Name: UserID
22298
- * * Display Name: User
22299
- * * SQL Data Type: uniqueidentifier
22300
- * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
22301
- SharingScope: z.union([z.literal('Everyone'), z.literal('None'), z.literal('Specific')]).describe(`
22302
- * * Field Name: SharingScope
22303
- * * Display Name: Sharing Scope
22812
+ * * Related Entity/Foreign Key: MJ: Remote Operation Categories (vwRemoteOperationCategories.ID)
22813
+ * * Description: Optional hierarchical category for organizing this operation in the UI`),
22814
+ Description: z.string().nullable().describe(`
22815
+ * * Field Name: Description
22816
+ * * Display Name: Description
22817
+ * * SQL Data Type: nvarchar(MAX)
22818
+ * * Description: Human description of the operation; also the seed for AI-generated implementation code when GenerationType=AI`),
22819
+ InputTypeName: z.string().nullable().describe(`
22820
+ * * Field Name: InputTypeName
22821
+ * * Display Name: Input Type Name
22822
+ * * SQL Data Type: nvarchar(255)
22823
+ * * Description: TypeScript type name for the operation input (emitted by CodeGen as the TInput interface)`),
22824
+ InputTypeDefinition: z.string().nullable().describe(`
22825
+ * * Field Name: InputTypeDefinition
22826
+ * * Display Name: Input Type Definition
22827
+ * * SQL Data Type: nvarchar(MAX)
22828
+ * * Description: Raw TypeScript interface/type source defining the input shape (same mechanism as EntityField JSON-type definitions)`),
22829
+ InputTypeIsArray: z.boolean().describe(`
22830
+ * * Field Name: InputTypeIsArray
22831
+ * * Display Name: Input Is Array
22832
+ * * SQL Data Type: bit
22833
+ * * Default Value: 0
22834
+ * * Description: When 1, the input type is emitted as an array (TInput[])`),
22835
+ OutputTypeName: z.string().nullable().describe(`
22836
+ * * Field Name: OutputTypeName
22837
+ * * Display Name: Output Type Name
22838
+ * * SQL Data Type: nvarchar(255)
22839
+ * * Description: TypeScript type name for the operation output (emitted by CodeGen as the TOutput interface)`),
22840
+ OutputTypeDefinition: z.string().nullable().describe(`
22841
+ * * Field Name: OutputTypeDefinition
22842
+ * * Display Name: Output Type Definition
22843
+ * * SQL Data Type: nvarchar(MAX)
22844
+ * * Description: Raw TypeScript interface/type source defining the output shape`),
22845
+ OutputTypeIsArray: z.boolean().describe(`
22846
+ * * Field Name: OutputTypeIsArray
22847
+ * * Display Name: Output Is Array
22848
+ * * SQL Data Type: bit
22849
+ * * Default Value: 0
22850
+ * * Description: When 1, the output type is emitted as an array (TOutput[])`),
22851
+ ExecutionMode: z.union([z.literal('LongRunning'), z.literal('Sync')]).describe(`
22852
+ * * Field Name: ExecutionMode
22853
+ * * Display Name: Execution Mode
22304
22854
  * * SQL Data Type: nvarchar(20)
22305
- * * Default Value: Personal
22855
+ * * Default Value: Sync
22306
22856
  * * Value List Type: List
22307
22857
  * * Possible Values
22308
- * * Everyone
22309
- * * None
22310
- * * Specific
22311
- * * Description: Field SharingScope for entity Reports.`),
22312
- ConversationID: z.string().nullable().describe(`
22313
- * * Field Name: ConversationID
22314
- * * Display Name: Conversation
22858
+ * * LongRunning
22859
+ * * Sync
22860
+ * * Description: Sync (request/response) or LongRunning (returns a handle; supports detached and attached consumption)`),
22861
+ RequiredScope: z.string().nullable().describe(`
22862
+ * * Field Name: RequiredScope
22863
+ * * Display Name: Required Scope
22864
+ * * SQL Data Type: nvarchar(255)
22865
+ * * Description: Optional API-key scope string (e.g., recordprocess:execute) enforced for API-key/MCP callers; NULL means no scope gate (interactive users are still bounded by their entity permissions)`),
22866
+ RequiresSystemUser: z.boolean().describe(`
22867
+ * * Field Name: RequiresSystemUser
22868
+ * * Display Name: Requires System User
22869
+ * * SQL Data Type: bit
22870
+ * * Default Value: 0
22871
+ * * Description: When 1, only the system user may invoke this operation`),
22872
+ GenerationType: z.union([z.literal('AI'), z.literal('Default'), z.literal('Manual')]).describe(`
22873
+ * * Field Name: GenerationType
22874
+ * * Display Name: Generation Type
22875
+ * * SQL Data Type: nvarchar(20)
22876
+ * * Default Value: Manual
22877
+ * * Value List Type: List
22878
+ * * Possible Values
22879
+ * * AI
22880
+ * * Default
22881
+ * * Manual
22882
+ * * Description: How the server implementation is provided: Manual (hand-written subclass), AI (generated from Description), or Default (standard generated plumbing)`),
22883
+ Code: z.string().nullable().describe(`
22884
+ * * Field Name: Code
22885
+ * * Display Name: Code
22886
+ * * SQL Data Type: nvarchar(MAX)
22887
+ * * Description: The AI-generated implementation body (when GenerationType=AI); regenerated only when Description changes`),
22888
+ CodeApprovalStatus: z.union([z.literal('Approved'), z.literal('Pending'), z.literal('Rejected')]).describe(`
22889
+ * * Field Name: CodeApprovalStatus
22890
+ * * Display Name: Code Approval Status
22891
+ * * SQL Data Type: nvarchar(20)
22892
+ * * Default Value: Pending
22893
+ * * Value List Type: List
22894
+ * * Possible Values
22895
+ * * Approved
22896
+ * * Pending
22897
+ * * Rejected
22898
+ * * Description: Human approval gate for AI-generated code: Pending, Approved, or Rejected. Only Approved AI code is emitted and routable.`),
22899
+ CodeApprovedByUserID: z.string().nullable().describe(`
22900
+ * * Field Name: CodeApprovedByUserID
22901
+ * * Display Name: Code Approved By User ID
22315
22902
  * * SQL Data Type: uniqueidentifier
22316
- * * Related Entity/Foreign Key: MJ: Conversations (vwConversations.ID)`),
22317
- ConversationDetailID: z.string().nullable().describe(`
22903
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
22904
+ * * Description: Foreign key to the user who approved the generated code`),
22905
+ CodeApprovedAt: z.date().nullable().describe(`
22906
+ * * Field Name: CodeApprovedAt
22907
+ * * Display Name: Code Approved At
22908
+ * * SQL Data Type: datetimeoffset
22909
+ * * Description: When the generated code was approved`),
22910
+ ContractFingerprint: z.string().nullable().describe(`
22911
+ * * Field Name: ContractFingerprint
22912
+ * * Display Name: Contract Fingerprint
22913
+ * * SQL Data Type: nvarchar(100)
22914
+ * * Description: Fingerprint of the input/output contract; carried in the wire envelope so the server can reject a stale client loudly instead of mis-deserializing`),
22915
+ Status: z.union([z.literal('Active'), z.literal('Disabled'), z.literal('Pending')]).describe(`
22916
+ * * Field Name: Status
22917
+ * * Display Name: Status
22918
+ * * SQL Data Type: nvarchar(20)
22919
+ * * Default Value: Pending
22920
+ * * Value List Type: List
22921
+ * * Possible Values
22922
+ * * Active
22923
+ * * Disabled
22924
+ * * Pending
22925
+ * * Description: Lifecycle status: Active (routable), Disabled, or Pending. Only Active operations can be invoked.`),
22926
+ CacheTTLSeconds: z.number().nullable().describe(`
22927
+ * * Field Name: CacheTTLSeconds
22928
+ * * Display Name: Cache TTL (Seconds)
22929
+ * * SQL Data Type: int
22930
+ * * Description: Optional result cache TTL in seconds (NULL = no caching)`),
22931
+ TimeoutMS: z.number().nullable().describe(`
22932
+ * * Field Name: TimeoutMS
22933
+ * * Display Name: Timeout (MS)
22934
+ * * SQL Data Type: int
22935
+ * * Description: Optional execution timeout in milliseconds`),
22936
+ MaxConcurrency: z.number().nullable().describe(`
22937
+ * * Field Name: MaxConcurrency
22938
+ * * Display Name: Max Concurrency
22939
+ * * SQL Data Type: int
22940
+ * * Description: Optional cap on concurrent executions of this operation`),
22941
+ __mj_CreatedAt: z.date().describe(`
22942
+ * * Field Name: __mj_CreatedAt
22943
+ * * Display Name: Created At
22944
+ * * SQL Data Type: datetimeoffset
22945
+ * * Default Value: getutcdate()`),
22946
+ __mj_UpdatedAt: z.date().describe(`
22947
+ * * Field Name: __mj_UpdatedAt
22948
+ * * Display Name: Updated At
22949
+ * * SQL Data Type: datetimeoffset
22950
+ * * Default Value: getutcdate()`),
22951
+ CodeLocked: z.boolean().describe(`
22952
+ * * Field Name: CodeLocked
22953
+ * * Display Name: Code Locked
22954
+ * * SQL Data Type: bit
22955
+ * * Default Value: 0
22956
+ * * Description: When 1, the AI-generated Code is frozen and Save() will not regenerate it even if Description changes (the Generated-Actions CodeLocked analog). Default 0.`),
22957
+ CodeComments: z.string().nullable().describe(`
22958
+ * * Field Name: CodeComments
22959
+ * * Display Name: Code Comments
22960
+ * * SQL Data Type: nvarchar(MAX)
22961
+ * * Description: The model's explanation / comments for the AI-generated Code (populated alongside Code when GenerationType=AI). Human-facing review aid.`),
22962
+ Libraries: z.any().nullable().describe(`
22963
+ * * Field Name: Libraries
22964
+ * * Display Name: Libraries
22965
+ * * SQL Data Type: nvarchar(MAX)
22966
+ * * JSON Type: Array<MJRemoteOperationEntity_RemoteOperationLibrary>
22967
+ * * Description: JSON array of the libraries the generated body imports: [{ "Library": "@memberjunction/ai-prompts", "ItemsUsed": ["AIPromptRunner"] }, ...]. Bound to the RemoteOperationLibrary JSONType via metadata sync so CodeGen emits a typed LibrariesObject accessor; CodeGen uses it to emit the imports at the top of the generated remote_operations.ts. NULL/empty = only the default always-available libraries are imported.`),
22968
+ Category: z.string().nullable().describe(`
22969
+ * * Field Name: Category
22970
+ * * Display Name: Category Name
22971
+ * * SQL Data Type: nvarchar(255)`),
22972
+ CodeApprovedByUser: z.string().nullable().describe(`
22973
+ * * Field Name: CodeApprovedByUser
22974
+ * * Display Name: Code Approved By User
22975
+ * * SQL Data Type: nvarchar(100)`),
22976
+ });
22977
+ /**
22978
+ * zod schema definition for the entity MJ: Report Categories
22979
+ */
22980
+ export const MJReportCategorySchema = z.object({
22981
+ ID: z.string().describe(`
22982
+ * * Field Name: ID
22983
+ * * Display Name: ID
22984
+ * * SQL Data Type: uniqueidentifier
22985
+ * * Default Value: newsequentialid()`),
22986
+ Name: z.string().describe(`
22987
+ * * Field Name: Name
22988
+ * * Display Name: Name
22989
+ * * SQL Data Type: nvarchar(100)`),
22990
+ Description: z.string().nullable().describe(`
22991
+ * * Field Name: Description
22992
+ * * Display Name: Description
22993
+ * * SQL Data Type: nvarchar(MAX)`),
22994
+ ParentID: z.string().nullable().describe(`
22995
+ * * Field Name: ParentID
22996
+ * * Display Name: Parent ID
22997
+ * * SQL Data Type: uniqueidentifier
22998
+ * * Related Entity/Foreign Key: MJ: Report Categories (vwReportCategories.ID)`),
22999
+ UserID: z.string().describe(`
23000
+ * * Field Name: UserID
23001
+ * * Display Name: User ID
23002
+ * * SQL Data Type: uniqueidentifier
23003
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
23004
+ __mj_CreatedAt: z.date().describe(`
23005
+ * * Field Name: __mj_CreatedAt
23006
+ * * Display Name: Created At
23007
+ * * SQL Data Type: datetimeoffset
23008
+ * * Default Value: getutcdate()`),
23009
+ __mj_UpdatedAt: z.date().describe(`
23010
+ * * Field Name: __mj_UpdatedAt
23011
+ * * Display Name: Updated At
23012
+ * * SQL Data Type: datetimeoffset
23013
+ * * Default Value: getutcdate()`),
23014
+ Parent: z.string().nullable().describe(`
23015
+ * * Field Name: Parent
23016
+ * * Display Name: Parent
23017
+ * * SQL Data Type: nvarchar(100)`),
23018
+ User: z.string().describe(`
23019
+ * * Field Name: User
23020
+ * * Display Name: User
23021
+ * * SQL Data Type: nvarchar(100)`),
23022
+ RootParentID: z.string().nullable().describe(`
23023
+ * * Field Name: RootParentID
23024
+ * * Display Name: Root Parent ID
23025
+ * * SQL Data Type: uniqueidentifier`),
23026
+ });
23027
+ /**
23028
+ * zod schema definition for the entity MJ: Report Snapshots
23029
+ */
23030
+ export const MJReportSnapshotSchema = z.object({
23031
+ ID: z.string().describe(`
23032
+ * * Field Name: ID
23033
+ * * Display Name: ID
23034
+ * * SQL Data Type: uniqueidentifier
23035
+ * * Default Value: newsequentialid()`),
23036
+ ReportID: z.string().describe(`
23037
+ * * Field Name: ReportID
23038
+ * * Display Name: Report ID
23039
+ * * SQL Data Type: uniqueidentifier
23040
+ * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
23041
+ ResultSet: z.string().describe(`
23042
+ * * Field Name: ResultSet
23043
+ * * Display Name: Result Set
23044
+ * * SQL Data Type: nvarchar(MAX)
23045
+ * * Description: Field ResultSet for entity Report Snapshots.`),
23046
+ UserID: z.string().describe(`
23047
+ * * Field Name: UserID
23048
+ * * Display Name: User ID
23049
+ * * SQL Data Type: uniqueidentifier
23050
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
23051
+ __mj_CreatedAt: z.date().describe(`
23052
+ * * Field Name: __mj_CreatedAt
23053
+ * * Display Name: Created At
23054
+ * * SQL Data Type: datetimeoffset
23055
+ * * Default Value: getutcdate()`),
23056
+ __mj_UpdatedAt: z.date().describe(`
23057
+ * * Field Name: __mj_UpdatedAt
23058
+ * * Display Name: Updated At
23059
+ * * SQL Data Type: datetimeoffset
23060
+ * * Default Value: getutcdate()`),
23061
+ Report: z.string().describe(`
23062
+ * * Field Name: Report
23063
+ * * Display Name: Report
23064
+ * * SQL Data Type: nvarchar(255)`),
23065
+ User: z.string().describe(`
23066
+ * * Field Name: User
23067
+ * * Display Name: User
23068
+ * * SQL Data Type: nvarchar(100)`),
23069
+ });
23070
+ /**
23071
+ * zod schema definition for the entity MJ: Report User States
23072
+ */
23073
+ export const MJReportUserStateSchema = z.object({
23074
+ ID: z.string().describe(`
23075
+ * * Field Name: ID
23076
+ * * Display Name: ID
23077
+ * * SQL Data Type: uniqueidentifier
23078
+ * * Default Value: newsequentialid()`),
23079
+ ReportID: z.string().describe(`
23080
+ * * Field Name: ReportID
23081
+ * * Display Name: Report ID
23082
+ * * SQL Data Type: uniqueidentifier
23083
+ * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
23084
+ UserID: z.string().describe(`
23085
+ * * Field Name: UserID
23086
+ * * Display Name: User ID
23087
+ * * SQL Data Type: uniqueidentifier
23088
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
23089
+ ReportState: z.string().nullable().describe(`
23090
+ * * Field Name: ReportState
23091
+ * * Display Name: Report State
23092
+ * * SQL Data Type: nvarchar(MAX)
23093
+ * * Description: JSON serialized state of user interaction with the report`),
23094
+ __mj_CreatedAt: z.date().describe(`
23095
+ * * Field Name: __mj_CreatedAt
23096
+ * * Display Name: Created At
23097
+ * * SQL Data Type: datetimeoffset
23098
+ * * Default Value: getutcdate()`),
23099
+ __mj_UpdatedAt: z.date().describe(`
23100
+ * * Field Name: __mj_UpdatedAt
23101
+ * * Display Name: Updated At
23102
+ * * SQL Data Type: datetimeoffset
23103
+ * * Default Value: getutcdate()`),
23104
+ Report: z.string().describe(`
23105
+ * * Field Name: Report
23106
+ * * Display Name: Report
23107
+ * * SQL Data Type: nvarchar(255)`),
23108
+ User: z.string().describe(`
23109
+ * * Field Name: User
23110
+ * * Display Name: User
23111
+ * * SQL Data Type: nvarchar(100)`),
23112
+ });
23113
+ /**
23114
+ * zod schema definition for the entity MJ: Report Versions
23115
+ */
23116
+ export const MJReportVersionSchema = z.object({
23117
+ ID: z.string().describe(`
23118
+ * * Field Name: ID
23119
+ * * Display Name: ID
23120
+ * * SQL Data Type: uniqueidentifier
23121
+ * * Default Value: newsequentialid()`),
23122
+ ReportID: z.string().describe(`
23123
+ * * Field Name: ReportID
23124
+ * * Display Name: Report ID
23125
+ * * SQL Data Type: uniqueidentifier
23126
+ * * Related Entity/Foreign Key: MJ: Reports (vwReports.ID)`),
23127
+ VersionNumber: z.number().describe(`
23128
+ * * Field Name: VersionNumber
23129
+ * * Display Name: Version Number
23130
+ * * SQL Data Type: int
23131
+ * * Description: Report version number, sequential per report starting at 1`),
23132
+ Name: z.string().describe(`
23133
+ * * Field Name: Name
23134
+ * * Display Name: Name
23135
+ * * SQL Data Type: nvarchar(255)
23136
+ * * Description: Name of this report version`),
23137
+ Description: z.string().nullable().describe(`
23138
+ * * Field Name: Description
23139
+ * * Display Name: Description
23140
+ * * SQL Data Type: nvarchar(MAX)
23141
+ * * Description: Description of this report version`),
23142
+ Configuration: z.string().nullable().describe(`
23143
+ * * Field Name: Configuration
23144
+ * * Display Name: Configuration
23145
+ * * SQL Data Type: nvarchar(MAX)
23146
+ * * Description: JSON configuration of report structure, layout and logic`),
23147
+ DataContextUpdated: z.boolean().describe(`
23148
+ * * Field Name: DataContextUpdated
23149
+ * * Display Name: Data Context Updated
23150
+ * * SQL Data Type: bit
23151
+ * * Default Value: 0
23152
+ * * Description: Indicates if the data context was updated in this version`),
23153
+ __mj_CreatedAt: z.date().describe(`
23154
+ * * Field Name: __mj_CreatedAt
23155
+ * * Display Name: Created At
23156
+ * * SQL Data Type: datetimeoffset
23157
+ * * Default Value: getutcdate()`),
23158
+ __mj_UpdatedAt: z.date().describe(`
23159
+ * * Field Name: __mj_UpdatedAt
23160
+ * * Display Name: Updated At
23161
+ * * SQL Data Type: datetimeoffset
23162
+ * * Default Value: getutcdate()`),
23163
+ Report: z.string().describe(`
23164
+ * * Field Name: Report
23165
+ * * Display Name: Report
23166
+ * * SQL Data Type: nvarchar(255)`),
23167
+ });
23168
+ /**
23169
+ * zod schema definition for the entity MJ: Reports
23170
+ */
23171
+ export const MJReportSchema = z.object({
23172
+ ID: z.string().describe(`
23173
+ * * Field Name: ID
23174
+ * * Display Name: ID
23175
+ * * SQL Data Type: uniqueidentifier
23176
+ * * Default Value: newsequentialid()`),
23177
+ Name: z.string().describe(`
23178
+ * * Field Name: Name
23179
+ * * Display Name: Name
23180
+ * * SQL Data Type: nvarchar(255)`),
23181
+ Description: z.string().nullable().describe(`
23182
+ * * Field Name: Description
23183
+ * * Display Name: Description
23184
+ * * SQL Data Type: nvarchar(MAX)`),
23185
+ CategoryID: z.string().nullable().describe(`
23186
+ * * Field Name: CategoryID
23187
+ * * Display Name: Category
23188
+ * * SQL Data Type: uniqueidentifier
23189
+ * * Related Entity/Foreign Key: MJ: Report Categories (vwReportCategories.ID)`),
23190
+ UserID: z.string().describe(`
23191
+ * * Field Name: UserID
23192
+ * * Display Name: User
23193
+ * * SQL Data Type: uniqueidentifier
23194
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)`),
23195
+ SharingScope: z.union([z.literal('Everyone'), z.literal('None'), z.literal('Specific')]).describe(`
23196
+ * * Field Name: SharingScope
23197
+ * * Display Name: Sharing Scope
23198
+ * * SQL Data Type: nvarchar(20)
23199
+ * * Default Value: Personal
23200
+ * * Value List Type: List
23201
+ * * Possible Values
23202
+ * * Everyone
23203
+ * * None
23204
+ * * Specific
23205
+ * * Description: Field SharingScope for entity Reports.`),
23206
+ ConversationID: z.string().nullable().describe(`
23207
+ * * Field Name: ConversationID
23208
+ * * Display Name: Conversation
23209
+ * * SQL Data Type: uniqueidentifier
23210
+ * * Related Entity/Foreign Key: MJ: Conversations (vwConversations.ID)`),
23211
+ ConversationDetailID: z.string().nullable().describe(`
22318
23212
  * * Field Name: ConversationDetailID
22319
23213
  * * Display Name: Conversation Detail
22320
23214
  * * SQL Data Type: uniqueidentifier
@@ -33293,7 +34187,7 @@ let MJAIAgentNoteEntity = class MJAIAgentNoteEntity extends BaseEntity {
33293
34187
  }
33294
34188
  /**
33295
34189
  * * Field Name: SourceConversationDetail
33296
- * * Display Name: Source Conversation Detail
34190
+ * * Display Name: Source Conversation Detail Name
33297
34191
  * * SQL Data Type: nvarchar(100)
33298
34192
  */
33299
34193
  get SourceConversationDetail() {
@@ -65985,6 +66879,18 @@ let MJEntityActionInvocationEntity = class MJEntityActionInvocationEntity extend
65985
66879
  return this.Get('__mj_UpdatedAt');
65986
66880
  }
65987
66881
  /**
66882
+ * * Field Name: RuntimeUXDriverClass
66883
+ * * Display Name: Runtime UX Driver Class
66884
+ * * SQL Data Type: nvarchar(255)
66885
+ * * Description: Optional class name of a registered runtime-UX driver component (a BaseEntityActionRuntimeUX subclass resolved via MJGlobal.ClassFactory) that owns this invocation's interaction — parameter collection, dry-run preview, confirmation, and progress. NULL invokes the action directly with no custom UX. This lets any action opt into a richer, reusable runtime experience while the grid/toolbar stays operation-agnostic.
66886
+ */
66887
+ get RuntimeUXDriverClass() {
66888
+ return this.Get('RuntimeUXDriverClass');
66889
+ }
66890
+ set RuntimeUXDriverClass(value) {
66891
+ this.Set('RuntimeUXDriverClass', value);
66892
+ }
66893
+ /**
65988
66894
  * * Field Name: EntityAction
65989
66895
  * * Display Name: Entity Action Name
65990
66896
  * * SQL Data Type: nvarchar(425)
@@ -67097,6 +68003,41 @@ let MJEntityDocumentEntity = class MJEntityDocumentEntity extends BaseEntity {
67097
68003
  return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
67098
68004
  }
67099
68005
  /**
68006
+ * MJ: Entity Documents - Delete method override to wrap in transaction since CascadeDeletes is true.
68007
+ * Wrapping in a transaction ensures that all cascade delete operations are handled atomically.
68008
+ * @public
68009
+ * @method
68010
+ * @override
68011
+ * @memberof MJEntityDocumentEntity
68012
+ * @returns {Promise<boolean>} - true if successful, false otherwise
68013
+ */
68014
+ async Delete(options) {
68015
+ if (Metadata.Provider.ProviderType === ProviderType.Database) { // global-provider-ok: codegen runs offline against a single provider
68016
+ // For database providers, use the transaction methods directly
68017
+ const provider = Metadata.Provider; // global-provider-ok: codegen runs offline against a single provider
68018
+ try {
68019
+ await provider.BeginTransaction();
68020
+ const result = await super.Delete(options);
68021
+ if (result) {
68022
+ await provider.CommitTransaction();
68023
+ return true;
68024
+ }
68025
+ else {
68026
+ await provider.RollbackTransaction();
68027
+ return false;
68028
+ }
68029
+ }
68030
+ catch (error) {
68031
+ await provider.RollbackTransaction();
68032
+ throw error;
68033
+ }
68034
+ }
68035
+ else {
68036
+ // For network providers, cascading deletes are handled server-side
68037
+ return super.Delete(options);
68038
+ }
68039
+ }
68040
+ /**
67100
68041
  * Validate() method override for MJ: Entity Documents entity. This is an auto-generated method that invokes the generated validators for this entity for the following fields:
67101
68042
  * * Table-Level: This rule ensures that both the Potential Match Threshold and the Absolute Match Threshold are numbers between 0 and 1, inclusive. Additionally, the Potential Match Threshold must not be higher than the Absolute Match Threshold.
67102
68043
  * @public
@@ -72570,7 +73511,7 @@ let MJIntegrationObjectEntity = class MJIntegrationObjectEntity extends BaseEnti
72570
73511
  }
72571
73512
  /**
72572
73513
  * * Field Name: IntegrationID
72573
- * * Display Name: Integration
73514
+ * * Display Name: Integration ID
72574
73515
  * * SQL Data Type: uniqueidentifier
72575
73516
  * * Related Entity/Foreign Key: MJ: Integrations (vwIntegrations.ID)
72576
73517
  * * Description: Foreign key to the Integration that owns this object
@@ -73051,8 +73992,84 @@ let MJIntegrationObjectEntity = class MJIntegrationObjectEntity extends BaseEnti
73051
73992
  this.Set('MetadataSource', value);
73052
73993
  }
73053
73994
  /**
73995
+ * * Field Name: SupportsCreate
73996
+ * * Display Name: Supports Create
73997
+ * * SQL Data Type: bit
73998
+ * * Default Value: 0
73999
+ * * Description: Whether this object supports record creation in the external system (per-operation granularity beyond SupportsWrite). Drives whether the generic CreateRecord path is wired and whether the object is offered for write-back create.
74000
+ */
74001
+ get SupportsCreate() {
74002
+ return this.Get('SupportsCreate');
74003
+ }
74004
+ set SupportsCreate(value) {
74005
+ this.Set('SupportsCreate', value);
74006
+ }
74007
+ /**
74008
+ * * Field Name: SupportsUpdate
74009
+ * * Display Name: Supports Update
74010
+ * * SQL Data Type: bit
74011
+ * * Default Value: 0
74012
+ * * Description: Whether this object supports record updates in the external system (per-operation granularity beyond SupportsWrite).
74013
+ */
74014
+ get SupportsUpdate() {
74015
+ return this.Get('SupportsUpdate');
74016
+ }
74017
+ set SupportsUpdate(value) {
74018
+ this.Set('SupportsUpdate', value);
74019
+ }
74020
+ /**
74021
+ * * Field Name: SupportsDelete
74022
+ * * Display Name: Supports Delete
74023
+ * * SQL Data Type: bit
74024
+ * * Default Value: 0
74025
+ * * Description: Whether this object supports record deletion/tombstoning in the external system (per-operation granularity beyond SupportsWrite).
74026
+ */
74027
+ get SupportsDelete() {
74028
+ return this.Get('SupportsDelete');
74029
+ }
74030
+ set SupportsDelete(value) {
74031
+ this.Set('SupportsDelete', value);
74032
+ }
74033
+ /**
74034
+ * * Field Name: SyncStrategy
74035
+ * * Display Name: Sync Strategy
74036
+ * * SQL Data Type: nvarchar(50)
74037
+ * * Description: Declared incremental sync strategy for this object (e.g. WatermarkIncremental, ContentHash, FullSnapshot). Informs how the engine narrows subsequent syncs.
74038
+ */
74039
+ get SyncStrategy() {
74040
+ return this.Get('SyncStrategy');
74041
+ }
74042
+ set SyncStrategy(value) {
74043
+ this.Set('SyncStrategy', value);
74044
+ }
74045
+ /**
74046
+ * * Field Name: ContentHashApplicable
74047
+ * * Display Name: Content Hash Applicable
74048
+ * * SQL Data Type: bit
74049
+ * * Default Value: 1
74050
+ * * Description: Whether per-record content hashing is meaningful for this object (false for append-only/event streams where every row is new). Controls whether the engine uses content-hash to skip unchanged-row writes.
74051
+ */
74052
+ get ContentHashApplicable() {
74053
+ return this.Get('ContentHashApplicable');
74054
+ }
74055
+ set ContentHashApplicable(value) {
74056
+ this.Set('ContentHashApplicable', value);
74057
+ }
74058
+ /**
74059
+ * * Field Name: StableOrderingKey
74060
+ * * Display Name: Stable Ordering Key
74061
+ * * SQL Data Type: nvarchar(255)
74062
+ * * Description: Stable, monotonic ordering column (usually the PK) used for keyset/no-watermark resume of a scan. Null when the object has no stable key.
74063
+ */
74064
+ get StableOrderingKey() {
74065
+ return this.Get('StableOrderingKey');
74066
+ }
74067
+ set StableOrderingKey(value) {
74068
+ this.Set('StableOrderingKey', value);
74069
+ }
74070
+ /**
73054
74071
  * * Field Name: Integration
73055
- * * Display Name: Integration Name
74072
+ * * Display Name: Integration
73056
74073
  * * SQL Data Type: nvarchar(100)
73057
74074
  */
73058
74075
  get Integration() {
@@ -73492,6 +74509,18 @@ let MJIntegrationEntity = class MJIntegrationEntity extends BaseEntity {
73492
74509
  this.Set('Icon', value);
73493
74510
  }
73494
74511
  /**
74512
+ * * Field Name: Configuration
74513
+ * * Display Name: Configuration
74514
+ * * SQL Data Type: nvarchar(MAX)
74515
+ * * Description: Integration-level connector configuration JSON (e.g. out-of-scope object families, vendor-specific tuning). Free-form JSON the connector reads at runtime.
74516
+ */
74517
+ get Configuration() {
74518
+ return this.Get('Configuration');
74519
+ }
74520
+ set Configuration(value) {
74521
+ this.Set('Configuration', value);
74522
+ }
74523
+ /**
73495
74524
  * * Field Name: CredentialType
73496
74525
  * * Display Name: Credential Type Name
73497
74526
  * * SQL Data Type: nvarchar(100)
@@ -78751,6 +79780,18 @@ let MJOpenAppEntity = class MJOpenAppEntity extends BaseEntity {
78751
79780
  return this.Get('__mj_UpdatedAt');
78752
79781
  }
78753
79782
  /**
79783
+ * * Field Name: Subpath
79784
+ * * Display Name: Subpath
79785
+ * * SQL Data Type: nvarchar(500)
79786
+ * * Description: In-repo subdirectory the app was installed from for multi-app repositories (e.g. 'CRM/HubSpot'). NULL when the app's mj-app.json is at the repository root.
79787
+ */
79788
+ get Subpath() {
79789
+ return this.Get('Subpath');
79790
+ }
79791
+ set Subpath(value) {
79792
+ this.Set('Subpath', value);
79793
+ }
79794
+ /**
78754
79795
  * * Field Name: InstalledByUser
78755
79796
  * * Display Name: Installed By User
78756
79797
  * * SQL Data Type: nvarchar(100)
@@ -79234,25 +80275,25 @@ MJPermissionDomainEntity = __decorate([
79234
80275
  ], MJPermissionDomainEntity);
79235
80276
  export { MJPermissionDomainEntity };
79236
80277
  /**
79237
- * MJ: Projects - strongly typed entity sub-class
80278
+ * MJ: Process Run Details - strongly typed entity sub-class
79238
80279
  * * Schema: __mj
79239
- * * Base Table: Project
79240
- * * Base View: vwProjects
79241
- * * @description Container for grouping related conversations around a common topic, client, or initiative. Supports nesting for sub-projects.
80280
+ * * Base Table: ProcessRunDetail
80281
+ * * Base View: vwProcessRunDetails
80282
+ * * @description Per-record result within a Process Run: powers audit, resume (skip already-done records), and the run-viewer UX. One row per processed record. EXAMPLE: customer CUST-00417 -> Succeeded with ResultPayload {"satisfaction":"High","sentiment":0.82} and a link to its AI Agent Run; customer CUST-00418 -> Failed with ErrorMessage "Model timeout".
79242
80283
  * * Primary Key: ID
79243
80284
  * @extends {BaseEntity}
79244
80285
  * @class
79245
80286
  * @public
79246
80287
  */
79247
- let MJProjectEntity = class MJProjectEntity extends BaseEntity {
80288
+ let MJProcessRunDetailEntity = class MJProcessRunDetailEntity extends BaseEntity {
79248
80289
  /**
79249
- * Loads the MJ: Projects record from the database
79250
- * @param ID: string - primary key value to load the MJ: Projects record.
80290
+ * Loads the MJ: Process Run Details record from the database
80291
+ * @param ID: string - primary key value to load the MJ: Process Run Details record.
79251
80292
  * @param EntityRelationshipsToLoad - (optional) the relationships to load
79252
80293
  * @returns {Promise<boolean>} - true if successful, false otherwise
79253
80294
  * @public
79254
80295
  * @async
79255
- * @memberof MJProjectEntity
80296
+ * @memberof MJProcessRunDetailEntity
79256
80297
  * @method
79257
80298
  * @override
79258
80299
  */
@@ -79274,90 +80315,160 @@ let MJProjectEntity = class MJProjectEntity extends BaseEntity {
79274
80315
  this.Set('ID', value);
79275
80316
  }
79276
80317
  /**
79277
- * * Field Name: EnvironmentID
79278
- * * Display Name: Environment ID
80318
+ * * Field Name: ProcessRunID
80319
+ * * Display Name: Process Run
79279
80320
  * * SQL Data Type: uniqueidentifier
79280
- * * Related Entity/Foreign Key: MJ: Environments (vwEnvironments.ID)
79281
- * * Default Value: F51358F3-9447-4176-B313-BF8025FD8D09
80321
+ * * Related Entity/Foreign Key: MJ: Process Runs (vwProcessRuns.ID)
80322
+ * * Description: Foreign key to the parent Process Run
79282
80323
  */
79283
- get EnvironmentID() {
79284
- return this.Get('EnvironmentID');
80324
+ get ProcessRunID() {
80325
+ return this.Get('ProcessRunID');
79285
80326
  }
79286
- set EnvironmentID(value) {
79287
- this.Set('EnvironmentID', value);
80327
+ set ProcessRunID(value) {
80328
+ this.Set('ProcessRunID', value);
79288
80329
  }
79289
80330
  /**
79290
- * * Field Name: ParentID
79291
- * * Display Name: Parent ID
80331
+ * * Field Name: EntityID
80332
+ * * Display Name: Entity ID
79292
80333
  * * SQL Data Type: uniqueidentifier
79293
- * * Related Entity/Foreign Key: MJ: Projects (vwProjects.ID)
80334
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
80335
+ * * Description: Foreign key to the entity of the processed record. Stored (not inherited) because a single run may span entities for ad-hoc / engine-driven runs.
79294
80336
  */
79295
- get ParentID() {
79296
- return this.Get('ParentID');
80337
+ get EntityID() {
80338
+ return this.Get('EntityID');
79297
80339
  }
79298
- set ParentID(value) {
79299
- this.Set('ParentID', value);
80340
+ set EntityID(value) {
80341
+ this.Set('EntityID', value);
79300
80342
  }
79301
80343
  /**
79302
- * * Field Name: Name
79303
- * * Display Name: Name
79304
- * * SQL Data Type: nvarchar(255)
79305
- * * Description: Display name for the project
80344
+ * * Field Name: RecordID
80345
+ * * Display Name: Record ID
80346
+ * * SQL Data Type: nvarchar(450)
80347
+ * * Description: Primary key of the processed record, stored as text to remain composite-key safe
79306
80348
  */
79307
- get Name() {
79308
- return this.Get('Name');
80349
+ get RecordID() {
80350
+ return this.Get('RecordID');
79309
80351
  }
79310
- set Name(value) {
79311
- this.Set('Name', value);
80352
+ set RecordID(value) {
80353
+ this.Set('RecordID', value);
79312
80354
  }
79313
80355
  /**
79314
- * * Field Name: Description
79315
- * * Display Name: Description
79316
- * * SQL Data Type: nvarchar(MAX)
79317
- * * Description: Detailed description of the project goals and scope
80356
+ * * Field Name: Status
80357
+ * * Display Name: Status
80358
+ * * SQL Data Type: nvarchar(20)
80359
+ * * Default Value: Pending
80360
+ * * Value List Type: List
80361
+ * * Possible Values
80362
+ * * Failed
80363
+ * * Pending
80364
+ * * Skipped
80365
+ * * Succeeded
80366
+ * * Description: Per-record status: Pending, Succeeded, Failed, or Skipped
79318
80367
  */
79319
- get Description() {
79320
- return this.Get('Description');
80368
+ get Status() {
80369
+ return this.Get('Status');
79321
80370
  }
79322
- set Description(value) {
79323
- this.Set('Description', value);
80371
+ set Status(value) {
80372
+ this.Set('Status', value);
79324
80373
  }
79325
80374
  /**
79326
- * * Field Name: Color
79327
- * * Display Name: Color
79328
- * * SQL Data Type: nvarchar(7)
79329
- * * Description: Hex color code for project badges in UI (#RRGGBB format)
80375
+ * * Field Name: StartedAt
80376
+ * * Display Name: Started At
80377
+ * * SQL Data Type: datetimeoffset
80378
+ * * Description: When processing of this record started
79330
80379
  */
79331
- get Color() {
79332
- return this.Get('Color');
80380
+ get StartedAt() {
80381
+ return this.Get('StartedAt');
79333
80382
  }
79334
- set Color(value) {
79335
- this.Set('Color', value);
80383
+ set StartedAt(value) {
80384
+ this.Set('StartedAt', value);
79336
80385
  }
79337
80386
  /**
79338
- * * Field Name: Icon
79339
- * * Display Name: Icon
79340
- * * SQL Data Type: nvarchar(50)
79341
- * * Description: Font Awesome icon class for UI display
80387
+ * * Field Name: CompletedAt
80388
+ * * Display Name: Completed At
80389
+ * * SQL Data Type: datetimeoffset
80390
+ * * Description: When processing of this record completed
79342
80391
  */
79343
- get Icon() {
79344
- return this.Get('Icon');
80392
+ get CompletedAt() {
80393
+ return this.Get('CompletedAt');
79345
80394
  }
79346
- set Icon(value) {
79347
- this.Set('Icon', value);
80395
+ set CompletedAt(value) {
80396
+ this.Set('CompletedAt', value);
79348
80397
  }
79349
80398
  /**
79350
- * * Field Name: IsArchived
79351
- * * Display Name: Is Archived
79352
- * * SQL Data Type: bit
80399
+ * * Field Name: DurationMs
80400
+ * * Display Name: Duration (ms)
80401
+ * * SQL Data Type: int
80402
+ * * Description: Processing duration for this record in milliseconds
80403
+ */
80404
+ get DurationMs() {
80405
+ return this.Get('DurationMs');
80406
+ }
80407
+ set DurationMs(value) {
80408
+ this.Set('DurationMs', value);
80409
+ }
80410
+ /**
80411
+ * * Field Name: AttemptCount
80412
+ * * Display Name: Attempt Count
80413
+ * * SQL Data Type: int
79353
80414
  * * Default Value: 0
79354
- * * Description: Indicates if this project is archived and should be hidden from active lists
80415
+ * * Description: Number of processing attempts for this record (supports retry)
79355
80416
  */
79356
- get IsArchived() {
79357
- return this.Get('IsArchived');
80417
+ get AttemptCount() {
80418
+ return this.Get('AttemptCount');
79358
80419
  }
79359
- set IsArchived(value) {
79360
- this.Set('IsArchived', value);
80420
+ set AttemptCount(value) {
80421
+ this.Set('AttemptCount', value);
80422
+ }
80423
+ /**
80424
+ * * Field Name: ResultPayload
80425
+ * * Display Name: Result Payload
80426
+ * * SQL Data Type: nvarchar(MAX)
80427
+ * * Description: Structured output payload (JSON) produced for this record
80428
+ */
80429
+ get ResultPayload() {
80430
+ return this.Get('ResultPayload');
80431
+ }
80432
+ set ResultPayload(value) {
80433
+ this.Set('ResultPayload', value);
80434
+ }
80435
+ /**
80436
+ * * Field Name: ErrorMessage
80437
+ * * Display Name: Error Message
80438
+ * * SQL Data Type: nvarchar(MAX)
80439
+ * * Description: Per-record error message when Status=Failed
80440
+ */
80441
+ get ErrorMessage() {
80442
+ return this.Get('ErrorMessage');
80443
+ }
80444
+ set ErrorMessage(value) {
80445
+ this.Set('ErrorMessage', value);
80446
+ }
80447
+ /**
80448
+ * * Field Name: ActionExecutionLogID
80449
+ * * Display Name: Action Execution Log ID
80450
+ * * SQL Data Type: uniqueidentifier
80451
+ * * Related Entity/Foreign Key: MJ: Action Execution Logs (vwActionExecutionLogs.ID)
80452
+ * * Description: Foreign key to the Action Execution Log for deep tracing, when the work was an Action
80453
+ */
80454
+ get ActionExecutionLogID() {
80455
+ return this.Get('ActionExecutionLogID');
80456
+ }
80457
+ set ActionExecutionLogID(value) {
80458
+ this.Set('ActionExecutionLogID', value);
80459
+ }
80460
+ /**
80461
+ * * Field Name: AIAgentRunID
80462
+ * * Display Name: AI Agent Run ID
80463
+ * * SQL Data Type: uniqueidentifier
80464
+ * * Related Entity/Foreign Key: MJ: AI Agent Runs (vwAIAgentRuns.ID)
80465
+ * * Description: Foreign key to the AI Agent Run for deep tracing, when the work was an Agent
80466
+ */
80467
+ get AIAgentRunID() {
80468
+ return this.Get('AIAgentRunID');
80469
+ }
80470
+ set AIAgentRunID(value) {
80471
+ this.Set('AIAgentRunID', value);
79361
80472
  }
79362
80473
  /**
79363
80474
  * * Field Name: __mj_CreatedAt
@@ -79378,54 +80489,631 @@ let MJProjectEntity = class MJProjectEntity extends BaseEntity {
79378
80489
  return this.Get('__mj_UpdatedAt');
79379
80490
  }
79380
80491
  /**
79381
- * * Field Name: Environment
79382
- * * Display Name: Environment
80492
+ * * Field Name: Entity
80493
+ * * Display Name: Entity Name
79383
80494
  * * SQL Data Type: nvarchar(255)
79384
80495
  */
79385
- get Environment() {
79386
- return this.Get('Environment');
80496
+ get Entity() {
80497
+ return this.Get('Entity');
79387
80498
  }
79388
80499
  /**
79389
- * * Field Name: Parent
79390
- * * Display Name: Parent
79391
- * * SQL Data Type: nvarchar(255)
80500
+ * * Field Name: ActionExecutionLog
80501
+ * * Display Name: Action Execution Log
80502
+ * * SQL Data Type: nvarchar(425)
79392
80503
  */
79393
- get Parent() {
79394
- return this.Get('Parent');
80504
+ get ActionExecutionLog() {
80505
+ return this.Get('ActionExecutionLog');
79395
80506
  }
79396
80507
  /**
79397
- * * Field Name: RootParentID
79398
- * * Display Name: Root Parent ID
79399
- * * SQL Data Type: uniqueidentifier
80508
+ * * Field Name: AIAgentRun
80509
+ * * Display Name: AI Agent Run
80510
+ * * SQL Data Type: nvarchar(255)
79400
80511
  */
79401
- get RootParentID() {
79402
- return this.Get('RootParentID');
80512
+ get AIAgentRun() {
80513
+ return this.Get('AIAgentRun');
79403
80514
  }
79404
80515
  };
79405
- MJProjectEntity = __decorate([
79406
- RegisterClass(BaseEntity, 'MJ: Projects')
79407
- ], MJProjectEntity);
79408
- export { MJProjectEntity };
80516
+ MJProcessRunDetailEntity = __decorate([
80517
+ RegisterClass(BaseEntity, 'MJ: Process Run Details')
80518
+ ], MJProcessRunDetailEntity);
80519
+ export { MJProcessRunDetailEntity };
79409
80520
  /**
79410
- * MJ: Public Links - strongly typed entity sub-class
80521
+ * MJ: Process Runs - strongly typed entity sub-class
79411
80522
  * * Schema: __mj
79412
- * * Base Table: PublicLink
79413
- * * Base View: vwPublicLinks
79414
- * * @description Shareable links for external access to artifacts and other resources. Supports password protection and expiration.
80523
+ * * Base Table: ProcessRun
80524
+ * * Base View: vwProcessRuns
80525
+ * * @description Source-agnostic header for one execution of any set-processing job. Deliberately generic: a Record Process run sets RecordProcessID, but legacy/engine-driven jobs (e.g., a geocoding sweep or vector sync) keep their own source tables and still record a run here with RecordProcessID = NULL, giving every batch a uniform audit + resume trail. EXAMPLE: the Saturday 2am run of "Weekly Customer Health Summary" over 1,284 active customers (RecordProcessID set, TriggeredBy=Schedule); or a nightly geocoding sweep (RecordProcessID NULL).
79415
80526
  * * Primary Key: ID
79416
80527
  * @extends {BaseEntity}
79417
80528
  * @class
79418
80529
  * @public
79419
80530
  */
79420
- let MJPublicLinkEntity = class MJPublicLinkEntity extends BaseEntity {
80531
+ let MJProcessRunEntity = class MJProcessRunEntity extends BaseEntity {
79421
80532
  /**
79422
- * Loads the MJ: Public Links record from the database
79423
- * @param ID: string - primary key value to load the MJ: Public Links record.
80533
+ * Loads the MJ: Process Runs record from the database
80534
+ * @param ID: string - primary key value to load the MJ: Process Runs record.
79424
80535
  * @param EntityRelationshipsToLoad - (optional) the relationships to load
79425
80536
  * @returns {Promise<boolean>} - true if successful, false otherwise
79426
80537
  * @public
79427
80538
  * @async
79428
- * @memberof MJPublicLinkEntity
80539
+ * @memberof MJProcessRunEntity
80540
+ * @method
80541
+ * @override
80542
+ */
80543
+ async Load(ID, EntityRelationshipsToLoad) {
80544
+ const compositeKey = new CompositeKey();
80545
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
80546
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
80547
+ }
80548
+ /**
80549
+ * * Field Name: ID
80550
+ * * Display Name: ID
80551
+ * * SQL Data Type: uniqueidentifier
80552
+ * * Default Value: newsequentialid()
80553
+ */
80554
+ get ID() {
80555
+ return this.Get('ID');
80556
+ }
80557
+ set ID(value) {
80558
+ this.Set('ID', value);
80559
+ }
80560
+ /**
80561
+ * * Field Name: RecordProcessID
80562
+ * * Display Name: Record Process
80563
+ * * SQL Data Type: uniqueidentifier
80564
+ * * Related Entity/Foreign Key: MJ: Record Processes (vwRecordProcesses.ID)
80565
+ * * Description: Foreign key to the Record Process that spawned this run; NULL for ad-hoc / engine-driven runs not tied to a saved definition
80566
+ */
80567
+ get RecordProcessID() {
80568
+ return this.Get('RecordProcessID');
80569
+ }
80570
+ set RecordProcessID(value) {
80571
+ this.Set('RecordProcessID', value);
80572
+ }
80573
+ /**
80574
+ * * Field Name: EntityID
80575
+ * * Display Name: Entity
80576
+ * * SQL Data Type: uniqueidentifier
80577
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
80578
+ * * Description: Foreign key to the entity processed by this run, when the run is entity-scoped
80579
+ */
80580
+ get EntityID() {
80581
+ return this.Get('EntityID');
80582
+ }
80583
+ set EntityID(value) {
80584
+ this.Set('EntityID', value);
80585
+ }
80586
+ /**
80587
+ * * Field Name: TriggeredBy
80588
+ * * Display Name: Triggered By
80589
+ * * SQL Data Type: nvarchar(20)
80590
+ * * Value List Type: List
80591
+ * * Possible Values
80592
+ * * Manual
80593
+ * * OnChange
80594
+ * * OnDemand
80595
+ * * Schedule
80596
+ * * Description: What triggered this run: OnChange, Schedule, OnDemand, or Manual
80597
+ */
80598
+ get TriggeredBy() {
80599
+ return this.Get('TriggeredBy');
80600
+ }
80601
+ set TriggeredBy(value) {
80602
+ this.Set('TriggeredBy', value);
80603
+ }
80604
+ /**
80605
+ * * Field Name: SourceType
80606
+ * * Display Name: Source Type
80607
+ * * SQL Data Type: nvarchar(20)
80608
+ * * Value List Type: List
80609
+ * * Possible Values
80610
+ * * Array
80611
+ * * Filter
80612
+ * * Keyset
80613
+ * * List
80614
+ * * SingleRecord
80615
+ * * View
80616
+ * * Description: The kind of record-set source resolved for this run: View, List, Filter, Array, Keyset, or SingleRecord
80617
+ */
80618
+ get SourceType() {
80619
+ return this.Get('SourceType');
80620
+ }
80621
+ set SourceType(value) {
80622
+ this.Set('SourceType', value);
80623
+ }
80624
+ /**
80625
+ * * Field Name: SourceID
80626
+ * * Display Name: Source ID
80627
+ * * SQL Data Type: uniqueidentifier
80628
+ * * Description: Polymorphic source identifier (e.g., ViewID or ListID) when applicable; no FK because it spans entities
80629
+ */
80630
+ get SourceID() {
80631
+ return this.Get('SourceID');
80632
+ }
80633
+ set SourceID(value) {
80634
+ this.Set('SourceID', value);
80635
+ }
80636
+ /**
80637
+ * * Field Name: SourceFilter
80638
+ * * Display Name: Source Filter
80639
+ * * SQL Data Type: nvarchar(MAX)
80640
+ * * Description: Resolved filter snapshot used to materialize the record set for this run
80641
+ */
80642
+ get SourceFilter() {
80643
+ return this.Get('SourceFilter');
80644
+ }
80645
+ set SourceFilter(value) {
80646
+ this.Set('SourceFilter', value);
80647
+ }
80648
+ /**
80649
+ * * Field Name: ScheduledJobRunID
80650
+ * * Display Name: Scheduled Job Run
80651
+ * * SQL Data Type: uniqueidentifier
80652
+ * * Related Entity/Foreign Key: MJ: Scheduled Job Runs (vwScheduledJobRuns.ID)
80653
+ * * Description: Foreign key to the Scheduled Job Run that launched this run, when scheduler-launched
80654
+ */
80655
+ get ScheduledJobRunID() {
80656
+ return this.Get('ScheduledJobRunID');
80657
+ }
80658
+ set ScheduledJobRunID(value) {
80659
+ this.Set('ScheduledJobRunID', value);
80660
+ }
80661
+ /**
80662
+ * * Field Name: Status
80663
+ * * Display Name: Status
80664
+ * * SQL Data Type: nvarchar(20)
80665
+ * * Default Value: Pending
80666
+ * * Value List Type: List
80667
+ * * Possible Values
80668
+ * * Cancelled
80669
+ * * Completed
80670
+ * * Failed
80671
+ * * Paused
80672
+ * * Pending
80673
+ * * Running
80674
+ * * Description: Run status: Pending, Running, Paused, Completed, Failed, or Cancelled
80675
+ */
80676
+ get Status() {
80677
+ return this.Get('Status');
80678
+ }
80679
+ set Status(value) {
80680
+ this.Set('Status', value);
80681
+ }
80682
+ /**
80683
+ * * Field Name: StartTime
80684
+ * * Display Name: Start Time
80685
+ * * SQL Data Type: datetimeoffset
80686
+ * * Description: When the run started
80687
+ */
80688
+ get StartTime() {
80689
+ return this.Get('StartTime');
80690
+ }
80691
+ set StartTime(value) {
80692
+ this.Set('StartTime', value);
80693
+ }
80694
+ /**
80695
+ * * Field Name: EndTime
80696
+ * * Display Name: End Time
80697
+ * * SQL Data Type: datetimeoffset
80698
+ * * Description: When the run ended
80699
+ */
80700
+ get EndTime() {
80701
+ return this.Get('EndTime');
80702
+ }
80703
+ set EndTime(value) {
80704
+ this.Set('EndTime', value);
80705
+ }
80706
+ /**
80707
+ * * Field Name: TotalItemCount
80708
+ * * Display Name: Total Item Count
80709
+ * * SQL Data Type: int
80710
+ * * Description: Estimated or known total number of records to process
80711
+ */
80712
+ get TotalItemCount() {
80713
+ return this.Get('TotalItemCount');
80714
+ }
80715
+ set TotalItemCount(value) {
80716
+ this.Set('TotalItemCount', value);
80717
+ }
80718
+ /**
80719
+ * * Field Name: ProcessedItems
80720
+ * * Display Name: Processed Items
80721
+ * * SQL Data Type: int
80722
+ * * Default Value: 0
80723
+ * * Description: Count of records processed so far
80724
+ */
80725
+ get ProcessedItems() {
80726
+ return this.Get('ProcessedItems');
80727
+ }
80728
+ set ProcessedItems(value) {
80729
+ this.Set('ProcessedItems', value);
80730
+ }
80731
+ /**
80732
+ * * Field Name: SuccessCount
80733
+ * * Display Name: Success Count
80734
+ * * SQL Data Type: int
80735
+ * * Default Value: 0
80736
+ * * Description: Count of records processed successfully
80737
+ */
80738
+ get SuccessCount() {
80739
+ return this.Get('SuccessCount');
80740
+ }
80741
+ set SuccessCount(value) {
80742
+ this.Set('SuccessCount', value);
80743
+ }
80744
+ /**
80745
+ * * Field Name: ErrorCount
80746
+ * * Display Name: Error Count
80747
+ * * SQL Data Type: int
80748
+ * * Default Value: 0
80749
+ * * Description: Count of records that failed processing
80750
+ */
80751
+ get ErrorCount() {
80752
+ return this.Get('ErrorCount');
80753
+ }
80754
+ set ErrorCount(value) {
80755
+ this.Set('ErrorCount', value);
80756
+ }
80757
+ /**
80758
+ * * Field Name: SkippedCount
80759
+ * * Display Name: Skipped Count
80760
+ * * SQL Data Type: int
80761
+ * * Default Value: 0
80762
+ * * Description: Count of records skipped (e.g., unchanged per watermark)
80763
+ */
80764
+ get SkippedCount() {
80765
+ return this.Get('SkippedCount');
80766
+ }
80767
+ set SkippedCount(value) {
80768
+ this.Set('SkippedCount', value);
80769
+ }
80770
+ /**
80771
+ * * Field Name: LastProcessedOffset
80772
+ * * Display Name: Last Processed Offset
80773
+ * * SQL Data Type: int
80774
+ * * Description: Offset-based resume cursor (StartRow) for sources that paginate by offset
80775
+ */
80776
+ get LastProcessedOffset() {
80777
+ return this.Get('LastProcessedOffset');
80778
+ }
80779
+ set LastProcessedOffset(value) {
80780
+ this.Set('LastProcessedOffset', value);
80781
+ }
80782
+ /**
80783
+ * * Field Name: LastProcessedKey
80784
+ * * Display Name: Last Processed Key
80785
+ * * SQL Data Type: nvarchar(450)
80786
+ * * Description: Keyset-based resume cursor (AfterKey) for sources that paginate by seek
80787
+ */
80788
+ get LastProcessedKey() {
80789
+ return this.Get('LastProcessedKey');
80790
+ }
80791
+ set LastProcessedKey(value) {
80792
+ this.Set('LastProcessedKey', value);
80793
+ }
80794
+ /**
80795
+ * * Field Name: BatchSize
80796
+ * * Display Name: Batch Size
80797
+ * * SQL Data Type: int
80798
+ * * Description: Effective batch size for this run
80799
+ */
80800
+ get BatchSize() {
80801
+ return this.Get('BatchSize');
80802
+ }
80803
+ set BatchSize(value) {
80804
+ this.Set('BatchSize', value);
80805
+ }
80806
+ /**
80807
+ * * Field Name: CancellationRequested
80808
+ * * Display Name: Cancellation Requested
80809
+ * * SQL Data Type: bit
80810
+ * * Default Value: 0
80811
+ * * Description: Pause/cancel handshake flag honored by the processor between batches
80812
+ */
80813
+ get CancellationRequested() {
80814
+ return this.Get('CancellationRequested');
80815
+ }
80816
+ set CancellationRequested(value) {
80817
+ this.Set('CancellationRequested', value);
80818
+ }
80819
+ /**
80820
+ * * Field Name: Configuration
80821
+ * * Display Name: Configuration JSON
80822
+ * * SQL Data Type: nvarchar(MAX)
80823
+ * * Description: JSON snapshot of the effective configuration for this run
80824
+ */
80825
+ get Configuration() {
80826
+ return this.Get('Configuration');
80827
+ }
80828
+ set Configuration(value) {
80829
+ this.Set('Configuration', value);
80830
+ }
80831
+ /**
80832
+ * * Field Name: ErrorMessage
80833
+ * * Display Name: Error Message
80834
+ * * SQL Data Type: nvarchar(MAX)
80835
+ * * Description: Run-level error message when Status=Failed
80836
+ */
80837
+ get ErrorMessage() {
80838
+ return this.Get('ErrorMessage');
80839
+ }
80840
+ set ErrorMessage(value) {
80841
+ this.Set('ErrorMessage', value);
80842
+ }
80843
+ /**
80844
+ * * Field Name: StartedByUserID
80845
+ * * Display Name: Started By User
80846
+ * * SQL Data Type: uniqueidentifier
80847
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
80848
+ * * Description: Foreign key to the user who started the run
80849
+ */
80850
+ get StartedByUserID() {
80851
+ return this.Get('StartedByUserID');
80852
+ }
80853
+ set StartedByUserID(value) {
80854
+ this.Set('StartedByUserID', value);
80855
+ }
80856
+ /**
80857
+ * * Field Name: __mj_CreatedAt
80858
+ * * Display Name: Created At
80859
+ * * SQL Data Type: datetimeoffset
80860
+ * * Default Value: getutcdate()
80861
+ */
80862
+ get __mj_CreatedAt() {
80863
+ return this.Get('__mj_CreatedAt');
80864
+ }
80865
+ /**
80866
+ * * Field Name: __mj_UpdatedAt
80867
+ * * Display Name: Updated At
80868
+ * * SQL Data Type: datetimeoffset
80869
+ * * Default Value: getutcdate()
80870
+ */
80871
+ get __mj_UpdatedAt() {
80872
+ return this.Get('__mj_UpdatedAt');
80873
+ }
80874
+ /**
80875
+ * * Field Name: DryRun
80876
+ * * Display Name: Is Dry Run
80877
+ * * SQL Data Type: bit
80878
+ * * Default Value: 0
80879
+ * * Description: When 1, this run was a dry-run (compute-only) preview: the per-record diffs were computed and persisted as Process Run Details, but no changes were written back to the target records. When 0, the run applied its changes.
80880
+ */
80881
+ get DryRun() {
80882
+ return this.Get('DryRun');
80883
+ }
80884
+ set DryRun(value) {
80885
+ this.Set('DryRun', value);
80886
+ }
80887
+ /**
80888
+ * * Field Name: RecordProcess
80889
+ * * Display Name: Record Process Name
80890
+ * * SQL Data Type: nvarchar(255)
80891
+ */
80892
+ get RecordProcess() {
80893
+ return this.Get('RecordProcess');
80894
+ }
80895
+ /**
80896
+ * * Field Name: Entity
80897
+ * * Display Name: Entity Name
80898
+ * * SQL Data Type: nvarchar(255)
80899
+ */
80900
+ get Entity() {
80901
+ return this.Get('Entity');
80902
+ }
80903
+ /**
80904
+ * * Field Name: ScheduledJobRun
80905
+ * * Display Name: Scheduled Job Run Name
80906
+ * * SQL Data Type: nvarchar(200)
80907
+ */
80908
+ get ScheduledJobRun() {
80909
+ return this.Get('ScheduledJobRun');
80910
+ }
80911
+ /**
80912
+ * * Field Name: StartedByUser
80913
+ * * Display Name: Started By User Name
80914
+ * * SQL Data Type: nvarchar(100)
80915
+ */
80916
+ get StartedByUser() {
80917
+ return this.Get('StartedByUser');
80918
+ }
80919
+ };
80920
+ MJProcessRunEntity = __decorate([
80921
+ RegisterClass(BaseEntity, 'MJ: Process Runs')
80922
+ ], MJProcessRunEntity);
80923
+ export { MJProcessRunEntity };
80924
+ /**
80925
+ * MJ: Projects - strongly typed entity sub-class
80926
+ * * Schema: __mj
80927
+ * * Base Table: Project
80928
+ * * Base View: vwProjects
80929
+ * * @description Container for grouping related conversations around a common topic, client, or initiative. Supports nesting for sub-projects.
80930
+ * * Primary Key: ID
80931
+ * @extends {BaseEntity}
80932
+ * @class
80933
+ * @public
80934
+ */
80935
+ let MJProjectEntity = class MJProjectEntity extends BaseEntity {
80936
+ /**
80937
+ * Loads the MJ: Projects record from the database
80938
+ * @param ID: string - primary key value to load the MJ: Projects record.
80939
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
80940
+ * @returns {Promise<boolean>} - true if successful, false otherwise
80941
+ * @public
80942
+ * @async
80943
+ * @memberof MJProjectEntity
80944
+ * @method
80945
+ * @override
80946
+ */
80947
+ async Load(ID, EntityRelationshipsToLoad) {
80948
+ const compositeKey = new CompositeKey();
80949
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
80950
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
80951
+ }
80952
+ /**
80953
+ * * Field Name: ID
80954
+ * * Display Name: ID
80955
+ * * SQL Data Type: uniqueidentifier
80956
+ * * Default Value: newsequentialid()
80957
+ */
80958
+ get ID() {
80959
+ return this.Get('ID');
80960
+ }
80961
+ set ID(value) {
80962
+ this.Set('ID', value);
80963
+ }
80964
+ /**
80965
+ * * Field Name: EnvironmentID
80966
+ * * Display Name: Environment ID
80967
+ * * SQL Data Type: uniqueidentifier
80968
+ * * Related Entity/Foreign Key: MJ: Environments (vwEnvironments.ID)
80969
+ * * Default Value: F51358F3-9447-4176-B313-BF8025FD8D09
80970
+ */
80971
+ get EnvironmentID() {
80972
+ return this.Get('EnvironmentID');
80973
+ }
80974
+ set EnvironmentID(value) {
80975
+ this.Set('EnvironmentID', value);
80976
+ }
80977
+ /**
80978
+ * * Field Name: ParentID
80979
+ * * Display Name: Parent ID
80980
+ * * SQL Data Type: uniqueidentifier
80981
+ * * Related Entity/Foreign Key: MJ: Projects (vwProjects.ID)
80982
+ */
80983
+ get ParentID() {
80984
+ return this.Get('ParentID');
80985
+ }
80986
+ set ParentID(value) {
80987
+ this.Set('ParentID', value);
80988
+ }
80989
+ /**
80990
+ * * Field Name: Name
80991
+ * * Display Name: Name
80992
+ * * SQL Data Type: nvarchar(255)
80993
+ * * Description: Display name for the project
80994
+ */
80995
+ get Name() {
80996
+ return this.Get('Name');
80997
+ }
80998
+ set Name(value) {
80999
+ this.Set('Name', value);
81000
+ }
81001
+ /**
81002
+ * * Field Name: Description
81003
+ * * Display Name: Description
81004
+ * * SQL Data Type: nvarchar(MAX)
81005
+ * * Description: Detailed description of the project goals and scope
81006
+ */
81007
+ get Description() {
81008
+ return this.Get('Description');
81009
+ }
81010
+ set Description(value) {
81011
+ this.Set('Description', value);
81012
+ }
81013
+ /**
81014
+ * * Field Name: Color
81015
+ * * Display Name: Color
81016
+ * * SQL Data Type: nvarchar(7)
81017
+ * * Description: Hex color code for project badges in UI (#RRGGBB format)
81018
+ */
81019
+ get Color() {
81020
+ return this.Get('Color');
81021
+ }
81022
+ set Color(value) {
81023
+ this.Set('Color', value);
81024
+ }
81025
+ /**
81026
+ * * Field Name: Icon
81027
+ * * Display Name: Icon
81028
+ * * SQL Data Type: nvarchar(50)
81029
+ * * Description: Font Awesome icon class for UI display
81030
+ */
81031
+ get Icon() {
81032
+ return this.Get('Icon');
81033
+ }
81034
+ set Icon(value) {
81035
+ this.Set('Icon', value);
81036
+ }
81037
+ /**
81038
+ * * Field Name: IsArchived
81039
+ * * Display Name: Is Archived
81040
+ * * SQL Data Type: bit
81041
+ * * Default Value: 0
81042
+ * * Description: Indicates if this project is archived and should be hidden from active lists
81043
+ */
81044
+ get IsArchived() {
81045
+ return this.Get('IsArchived');
81046
+ }
81047
+ set IsArchived(value) {
81048
+ this.Set('IsArchived', value);
81049
+ }
81050
+ /**
81051
+ * * Field Name: __mj_CreatedAt
81052
+ * * Display Name: Created At
81053
+ * * SQL Data Type: datetimeoffset
81054
+ * * Default Value: getutcdate()
81055
+ */
81056
+ get __mj_CreatedAt() {
81057
+ return this.Get('__mj_CreatedAt');
81058
+ }
81059
+ /**
81060
+ * * Field Name: __mj_UpdatedAt
81061
+ * * Display Name: Updated At
81062
+ * * SQL Data Type: datetimeoffset
81063
+ * * Default Value: getutcdate()
81064
+ */
81065
+ get __mj_UpdatedAt() {
81066
+ return this.Get('__mj_UpdatedAt');
81067
+ }
81068
+ /**
81069
+ * * Field Name: Environment
81070
+ * * Display Name: Environment
81071
+ * * SQL Data Type: nvarchar(255)
81072
+ */
81073
+ get Environment() {
81074
+ return this.Get('Environment');
81075
+ }
81076
+ /**
81077
+ * * Field Name: Parent
81078
+ * * Display Name: Parent
81079
+ * * SQL Data Type: nvarchar(255)
81080
+ */
81081
+ get Parent() {
81082
+ return this.Get('Parent');
81083
+ }
81084
+ /**
81085
+ * * Field Name: RootParentID
81086
+ * * Display Name: Root Parent ID
81087
+ * * SQL Data Type: uniqueidentifier
81088
+ */
81089
+ get RootParentID() {
81090
+ return this.Get('RootParentID');
81091
+ }
81092
+ };
81093
+ MJProjectEntity = __decorate([
81094
+ RegisterClass(BaseEntity, 'MJ: Projects')
81095
+ ], MJProjectEntity);
81096
+ export { MJProjectEntity };
81097
+ /**
81098
+ * MJ: Public Links - strongly typed entity sub-class
81099
+ * * Schema: __mj
81100
+ * * Base Table: PublicLink
81101
+ * * Base View: vwPublicLinks
81102
+ * * @description Shareable links for external access to artifacts and other resources. Supports password protection and expiration.
81103
+ * * Primary Key: ID
81104
+ * @extends {BaseEntity}
81105
+ * @class
81106
+ * @public
81107
+ */
81108
+ let MJPublicLinkEntity = class MJPublicLinkEntity extends BaseEntity {
81109
+ /**
81110
+ * Loads the MJ: Public Links record from the database
81111
+ * @param ID: string - primary key value to load the MJ: Public Links record.
81112
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
81113
+ * @returns {Promise<boolean>} - true if successful, false otherwise
81114
+ * @public
81115
+ * @async
81116
+ * @memberof MJPublicLinkEntity
79429
81117
  * @method
79430
81118
  * @override
79431
81119
  */
@@ -83442,6 +85130,1309 @@ MJRecordMergeLogEntity = __decorate([
83442
85130
  RegisterClass(BaseEntity, 'MJ: Record Merge Logs')
83443
85131
  ], MJRecordMergeLogEntity);
83444
85132
  export { MJRecordMergeLogEntity };
85133
+ /**
85134
+ * MJ: Record Process Categories - strongly typed entity sub-class
85135
+ * * Schema: __mj
85136
+ * * Base Table: RecordProcessCategory
85137
+ * * Base View: vwRecordProcessCategories
85138
+ * * @description Hierarchical folder for organizing Record Processes in the UI. Example: "Customer Lifecycle" with a child category "Retention".
85139
+ * * Primary Key: ID
85140
+ * @extends {BaseEntity}
85141
+ * @class
85142
+ * @public
85143
+ */
85144
+ let MJRecordProcessCategoryEntity = class MJRecordProcessCategoryEntity extends BaseEntity {
85145
+ /**
85146
+ * Loads the MJ: Record Process Categories record from the database
85147
+ * @param ID: string - primary key value to load the MJ: Record Process Categories record.
85148
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
85149
+ * @returns {Promise<boolean>} - true if successful, false otherwise
85150
+ * @public
85151
+ * @async
85152
+ * @memberof MJRecordProcessCategoryEntity
85153
+ * @method
85154
+ * @override
85155
+ */
85156
+ async Load(ID, EntityRelationshipsToLoad) {
85157
+ const compositeKey = new CompositeKey();
85158
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
85159
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
85160
+ }
85161
+ /**
85162
+ * * Field Name: ID
85163
+ * * Display Name: ID
85164
+ * * SQL Data Type: uniqueidentifier
85165
+ * * Default Value: newsequentialid()
85166
+ */
85167
+ get ID() {
85168
+ return this.Get('ID');
85169
+ }
85170
+ set ID(value) {
85171
+ this.Set('ID', value);
85172
+ }
85173
+ /**
85174
+ * * Field Name: Name
85175
+ * * Display Name: Name
85176
+ * * SQL Data Type: nvarchar(255)
85177
+ * * Description: Display name of the category
85178
+ */
85179
+ get Name() {
85180
+ return this.Get('Name');
85181
+ }
85182
+ set Name(value) {
85183
+ this.Set('Name', value);
85184
+ }
85185
+ /**
85186
+ * * Field Name: Description
85187
+ * * Display Name: Description
85188
+ * * SQL Data Type: nvarchar(MAX)
85189
+ * * Description: Optional description of what belongs in this category
85190
+ */
85191
+ get Description() {
85192
+ return this.Get('Description');
85193
+ }
85194
+ set Description(value) {
85195
+ this.Set('Description', value);
85196
+ }
85197
+ /**
85198
+ * * Field Name: ParentID
85199
+ * * Display Name: Parent Category
85200
+ * * SQL Data Type: uniqueidentifier
85201
+ * * Related Entity/Foreign Key: MJ: Record Process Categories (vwRecordProcessCategories.ID)
85202
+ * * Description: Self-referencing foreign key to the parent category, enabling a nested folder hierarchy (NULL for a top-level category)
85203
+ */
85204
+ get ParentID() {
85205
+ return this.Get('ParentID');
85206
+ }
85207
+ set ParentID(value) {
85208
+ this.Set('ParentID', value);
85209
+ }
85210
+ /**
85211
+ * * Field Name: __mj_CreatedAt
85212
+ * * Display Name: Created At
85213
+ * * SQL Data Type: datetimeoffset
85214
+ * * Default Value: getutcdate()
85215
+ */
85216
+ get __mj_CreatedAt() {
85217
+ return this.Get('__mj_CreatedAt');
85218
+ }
85219
+ /**
85220
+ * * Field Name: __mj_UpdatedAt
85221
+ * * Display Name: Updated At
85222
+ * * SQL Data Type: datetimeoffset
85223
+ * * Default Value: getutcdate()
85224
+ */
85225
+ get __mj_UpdatedAt() {
85226
+ return this.Get('__mj_UpdatedAt');
85227
+ }
85228
+ /**
85229
+ * * Field Name: Parent
85230
+ * * Display Name: Parent Name
85231
+ * * SQL Data Type: nvarchar(255)
85232
+ */
85233
+ get Parent() {
85234
+ return this.Get('Parent');
85235
+ }
85236
+ /**
85237
+ * * Field Name: RootParentID
85238
+ * * Display Name: Root Parent
85239
+ * * SQL Data Type: uniqueidentifier
85240
+ */
85241
+ get RootParentID() {
85242
+ return this.Get('RootParentID');
85243
+ }
85244
+ };
85245
+ MJRecordProcessCategoryEntity = __decorate([
85246
+ RegisterClass(BaseEntity, 'MJ: Record Process Categories')
85247
+ ], MJRecordProcessCategoryEntity);
85248
+ export { MJRecordProcessCategoryEntity };
85249
+ /**
85250
+ * MJ: Record Process Watermarks - strongly typed entity sub-class
85251
+ * * Schema: __mj
85252
+ * * Base Table: RecordProcessWatermark
85253
+ * * Base View: vwRecordProcessWatermarks
85254
+ * * @description Per-record change-detection watermark backing WatermarkStrategy=Checksum. Stores the last content hash a Record Process processed for a given record so unchanged records are skipped on the next run. Only used by Checksum mode; UpdatedAt mode compares __mj_UpdatedAt and stores nothing here.
85255
+ * * Primary Key: ID
85256
+ * @extends {BaseEntity}
85257
+ * @class
85258
+ * @public
85259
+ */
85260
+ let MJRecordProcessWatermarkEntity = class MJRecordProcessWatermarkEntity extends BaseEntity {
85261
+ /**
85262
+ * Loads the MJ: Record Process Watermarks record from the database
85263
+ * @param ID: string - primary key value to load the MJ: Record Process Watermarks record.
85264
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
85265
+ * @returns {Promise<boolean>} - true if successful, false otherwise
85266
+ * @public
85267
+ * @async
85268
+ * @memberof MJRecordProcessWatermarkEntity
85269
+ * @method
85270
+ * @override
85271
+ */
85272
+ async Load(ID, EntityRelationshipsToLoad) {
85273
+ const compositeKey = new CompositeKey();
85274
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
85275
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
85276
+ }
85277
+ /**
85278
+ * * Field Name: ID
85279
+ * * Display Name: ID
85280
+ * * SQL Data Type: uniqueidentifier
85281
+ * * Default Value: newsequentialid()
85282
+ */
85283
+ get ID() {
85284
+ return this.Get('ID');
85285
+ }
85286
+ set ID(value) {
85287
+ this.Set('ID', value);
85288
+ }
85289
+ /**
85290
+ * * Field Name: RecordProcessID
85291
+ * * Display Name: Record Process
85292
+ * * SQL Data Type: uniqueidentifier
85293
+ * * Related Entity/Foreign Key: MJ: Record Processes (vwRecordProcesses.ID)
85294
+ * * Description: Foreign key to the Record Process this watermark belongs to
85295
+ */
85296
+ get RecordProcessID() {
85297
+ return this.Get('RecordProcessID');
85298
+ }
85299
+ set RecordProcessID(value) {
85300
+ this.Set('RecordProcessID', value);
85301
+ }
85302
+ /**
85303
+ * * Field Name: EntityID
85304
+ * * Display Name: Entity
85305
+ * * SQL Data Type: uniqueidentifier
85306
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
85307
+ * * Description: Foreign key to the entity of the watermarked record
85308
+ */
85309
+ get EntityID() {
85310
+ return this.Get('EntityID');
85311
+ }
85312
+ set EntityID(value) {
85313
+ this.Set('EntityID', value);
85314
+ }
85315
+ /**
85316
+ * * Field Name: RecordID
85317
+ * * Display Name: Record ID
85318
+ * * SQL Data Type: nvarchar(450)
85319
+ * * Description: Primary key of the watermarked record, stored as text to remain composite-key safe
85320
+ */
85321
+ get RecordID() {
85322
+ return this.Get('RecordID');
85323
+ }
85324
+ set RecordID(value) {
85325
+ this.Set('RecordID', value);
85326
+ }
85327
+ /**
85328
+ * * Field Name: Hash
85329
+ * * Display Name: Content Hash
85330
+ * * SQL Data Type: nvarchar(128)
85331
+ * * Description: Content hash of the record as of the last time it was processed by this Record Process
85332
+ */
85333
+ get Hash() {
85334
+ return this.Get('Hash');
85335
+ }
85336
+ set Hash(value) {
85337
+ this.Set('Hash', value);
85338
+ }
85339
+ /**
85340
+ * * Field Name: LastProcessedAt
85341
+ * * Display Name: Last Processed At
85342
+ * * SQL Data Type: datetimeoffset
85343
+ * * Description: When this record was last processed by this Record Process
85344
+ */
85345
+ get LastProcessedAt() {
85346
+ return this.Get('LastProcessedAt');
85347
+ }
85348
+ set LastProcessedAt(value) {
85349
+ this.Set('LastProcessedAt', value);
85350
+ }
85351
+ /**
85352
+ * * Field Name: __mj_CreatedAt
85353
+ * * Display Name: Created At
85354
+ * * SQL Data Type: datetimeoffset
85355
+ * * Default Value: getutcdate()
85356
+ */
85357
+ get __mj_CreatedAt() {
85358
+ return this.Get('__mj_CreatedAt');
85359
+ }
85360
+ /**
85361
+ * * Field Name: __mj_UpdatedAt
85362
+ * * Display Name: Updated At
85363
+ * * SQL Data Type: datetimeoffset
85364
+ * * Default Value: getutcdate()
85365
+ */
85366
+ get __mj_UpdatedAt() {
85367
+ return this.Get('__mj_UpdatedAt');
85368
+ }
85369
+ /**
85370
+ * * Field Name: RecordProcess
85371
+ * * Display Name: Record Process Name
85372
+ * * SQL Data Type: nvarchar(255)
85373
+ */
85374
+ get RecordProcess() {
85375
+ return this.Get('RecordProcess');
85376
+ }
85377
+ /**
85378
+ * * Field Name: Entity
85379
+ * * Display Name: Entity Name
85380
+ * * SQL Data Type: nvarchar(255)
85381
+ */
85382
+ get Entity() {
85383
+ return this.Get('Entity');
85384
+ }
85385
+ };
85386
+ MJRecordProcessWatermarkEntity = __decorate([
85387
+ RegisterClass(BaseEntity, 'MJ: Record Process Watermarks')
85388
+ ], MJRecordProcessWatermarkEntity);
85389
+ export { MJRecordProcessWatermarkEntity };
85390
+ /**
85391
+ * MJ: Record Processes - strongly typed entity sub-class
85392
+ * * Schema: __mj
85393
+ * * Base Table: RecordProcess
85394
+ * * Base View: vwRecordProcesses
85395
+ * * @description A declarative, reusable job definition that binds three axes of a business process: WORK (an Action or an Agent) x SCOPE (a single record, a User View, a List, or an ad-hoc Filter) x TRIGGER (on-change save hooks, a cron schedule, and/or on demand). One row is one configured process; each execution of it produces a Process Run with per-record Process Run Details. EXAMPLE: a "Weekly Customer Health Summary" row runs the "Customer Summarizer" agent over the "Active Customers" view every Saturday 2am, also whenever a customer's NPS/support fields change, and on demand; for each customer it infers {satisfaction, sentiment, personalityStyle, summary} and writes satisfaction/sentiment back onto the Customer plus a summary into a Customer Insights child row, skipping customers unchanged since the last run.
85396
+ * * Primary Key: ID
85397
+ * @extends {BaseEntity}
85398
+ * @class
85399
+ * @public
85400
+ */
85401
+ let MJRecordProcessEntity = class MJRecordProcessEntity extends BaseEntity {
85402
+ /**
85403
+ * Loads the MJ: Record Processes record from the database
85404
+ * @param ID: string - primary key value to load the MJ: Record Processes record.
85405
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
85406
+ * @returns {Promise<boolean>} - true if successful, false otherwise
85407
+ * @public
85408
+ * @async
85409
+ * @memberof MJRecordProcessEntity
85410
+ * @method
85411
+ * @override
85412
+ */
85413
+ async Load(ID, EntityRelationshipsToLoad) {
85414
+ const compositeKey = new CompositeKey();
85415
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
85416
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
85417
+ }
85418
+ /**
85419
+ * * Field Name: ID
85420
+ * * Display Name: ID
85421
+ * * SQL Data Type: uniqueidentifier
85422
+ * * Default Value: newsequentialid()
85423
+ */
85424
+ get ID() {
85425
+ return this.Get('ID');
85426
+ }
85427
+ set ID(value) {
85428
+ this.Set('ID', value);
85429
+ }
85430
+ /**
85431
+ * * Field Name: Name
85432
+ * * Display Name: Name
85433
+ * * SQL Data Type: nvarchar(255)
85434
+ * * Description: Human-readable name of the process definition (e.g., "Weekly Customer Health Summary")
85435
+ */
85436
+ get Name() {
85437
+ return this.Get('Name');
85438
+ }
85439
+ set Name(value) {
85440
+ this.Set('Name', value);
85441
+ }
85442
+ /**
85443
+ * * Field Name: Description
85444
+ * * Display Name: Description
85445
+ * * SQL Data Type: nvarchar(MAX)
85446
+ * * Description: Optional description of what this process does
85447
+ */
85448
+ get Description() {
85449
+ return this.Get('Description');
85450
+ }
85451
+ set Description(value) {
85452
+ this.Set('Description', value);
85453
+ }
85454
+ /**
85455
+ * * Field Name: CategoryID
85456
+ * * Display Name: Category
85457
+ * * SQL Data Type: uniqueidentifier
85458
+ * * Related Entity/Foreign Key: MJ: Record Process Categories (vwRecordProcessCategories.ID)
85459
+ * * Description: Optional hierarchical category for organizing this process in the UI
85460
+ */
85461
+ get CategoryID() {
85462
+ return this.Get('CategoryID');
85463
+ }
85464
+ set CategoryID(value) {
85465
+ this.Set('CategoryID', value);
85466
+ }
85467
+ /**
85468
+ * * Field Name: EntityID
85469
+ * * Display Name: Entity
85470
+ * * SQL Data Type: uniqueidentifier
85471
+ * * Related Entity/Foreign Key: MJ: Entities (vwEntities.ID)
85472
+ * * Description: Foreign key to the target entity whose records this process operates on
85473
+ */
85474
+ get EntityID() {
85475
+ return this.Get('EntityID');
85476
+ }
85477
+ set EntityID(value) {
85478
+ this.Set('EntityID', value);
85479
+ }
85480
+ /**
85481
+ * * Field Name: Status
85482
+ * * Display Name: Status
85483
+ * * SQL Data Type: nvarchar(20)
85484
+ * * Default Value: Draft
85485
+ * * Value List Type: List
85486
+ * * Possible Values
85487
+ * * Active
85488
+ * * Disabled
85489
+ * * Draft
85490
+ * * Description: Lifecycle status: Draft (not yet wired), Active (triggers live), or Disabled
85491
+ */
85492
+ get Status() {
85493
+ return this.Get('Status');
85494
+ }
85495
+ set Status(value) {
85496
+ this.Set('Status', value);
85497
+ }
85498
+ /**
85499
+ * * Field Name: WorkType
85500
+ * * Display Name: Work Type
85501
+ * * SQL Data Type: nvarchar(20)
85502
+ * * Value List Type: List
85503
+ * * Possible Values
85504
+ * * Action
85505
+ * * Agent
85506
+ * * FieldRules
85507
+ * * Infer
85508
+ * * Description: Whether the work is an Action, an Agent, or an Infer (per-record AI Prompt). Agents are dispatched through the Execute Agent action and must be top-level + ExposeAsAction; Infer runs the AI Prompt named by PromptID for each record and writes its structured output back via OutputMapping.
85509
+ */
85510
+ get WorkType() {
85511
+ return this.Get('WorkType');
85512
+ }
85513
+ set WorkType(value) {
85514
+ this.Set('WorkType', value);
85515
+ }
85516
+ /**
85517
+ * * Field Name: ActionID
85518
+ * * Display Name: Action
85519
+ * * SQL Data Type: uniqueidentifier
85520
+ * * Related Entity/Foreign Key: MJ: Actions (vwActions.ID)
85521
+ * * Description: Foreign key to the Action to run, when WorkType=Action
85522
+ */
85523
+ get ActionID() {
85524
+ return this.Get('ActionID');
85525
+ }
85526
+ set ActionID(value) {
85527
+ this.Set('ActionID', value);
85528
+ }
85529
+ /**
85530
+ * * Field Name: AgentID
85531
+ * * Display Name: Agent
85532
+ * * SQL Data Type: uniqueidentifier
85533
+ * * Related Entity/Foreign Key: MJ: AI Agents (vwAIAgents.ID)
85534
+ * * Description: Foreign key to the AI Agent to run, when WorkType=Agent
85535
+ */
85536
+ get AgentID() {
85537
+ return this.Get('AgentID');
85538
+ }
85539
+ set AgentID(value) {
85540
+ this.Set('AgentID', value);
85541
+ }
85542
+ /**
85543
+ * * Field Name: PromptID
85544
+ * * Display Name: Prompt
85545
+ * * SQL Data Type: uniqueidentifier
85546
+ * * Related Entity/Foreign Key: MJ: AI Prompts (vwAIPrompts.ID)
85547
+ * * Description: Foreign key to the AI Prompt to run for each record, when WorkType=Infer. The prompt's structured output is written back to the data model via OutputMapping.
85548
+ */
85549
+ get PromptID() {
85550
+ return this.Get('PromptID');
85551
+ }
85552
+ set PromptID(value) {
85553
+ this.Set('PromptID', value);
85554
+ }
85555
+ /**
85556
+ * * Field Name: ScopeType
85557
+ * * Display Name: Scope Type
85558
+ * * SQL Data Type: nvarchar(20)
85559
+ * * Value List Type: List
85560
+ * * Possible Values
85561
+ * * Filter
85562
+ * * List
85563
+ * * SingleRecord
85564
+ * * View
85565
+ * * Description: How the record set is scoped for the Schedule and On-Demand triggers: SingleRecord, View, List, or Filter. The On-Change trigger is always single-record and ignores this.
85566
+ */
85567
+ get ScopeType() {
85568
+ return this.Get('ScopeType');
85569
+ }
85570
+ set ScopeType(value) {
85571
+ this.Set('ScopeType', value);
85572
+ }
85573
+ /**
85574
+ * * Field Name: ScopeViewID
85575
+ * * Display Name: Scope View
85576
+ * * SQL Data Type: uniqueidentifier
85577
+ * * Related Entity/Foreign Key: MJ: User Views (vwUserViews.ID)
85578
+ * * Description: Foreign key to the User View defining the scope, when ScopeType=View
85579
+ */
85580
+ get ScopeViewID() {
85581
+ return this.Get('ScopeViewID');
85582
+ }
85583
+ set ScopeViewID(value) {
85584
+ this.Set('ScopeViewID', value);
85585
+ }
85586
+ /**
85587
+ * * Field Name: ScopeListID
85588
+ * * Display Name: Scope List
85589
+ * * SQL Data Type: uniqueidentifier
85590
+ * * Related Entity/Foreign Key: MJ: Lists (vwLists.ID)
85591
+ * * Description: Foreign key to the List defining the scope, when ScopeType=List
85592
+ */
85593
+ get ScopeListID() {
85594
+ return this.Get('ScopeListID');
85595
+ }
85596
+ set ScopeListID(value) {
85597
+ this.Set('ScopeListID', value);
85598
+ }
85599
+ /**
85600
+ * * Field Name: ScopeFilter
85601
+ * * Display Name: Scope Filter
85602
+ * * SQL Data Type: nvarchar(MAX)
85603
+ * * Description: Ad-hoc WHERE clause used to resolve the record set, when ScopeType=Filter
85604
+ */
85605
+ get ScopeFilter() {
85606
+ return this.Get('ScopeFilter');
85607
+ }
85608
+ set ScopeFilter(value) {
85609
+ this.Set('ScopeFilter', value);
85610
+ }
85611
+ /**
85612
+ * * Field Name: OnChangeEnabled
85613
+ * * Display Name: On-Change Enabled
85614
+ * * SQL Data Type: bit
85615
+ * * Default Value: 0
85616
+ * * Description: When 1, the process runs per-record on save via an owned Entity Action
85617
+ */
85618
+ get OnChangeEnabled() {
85619
+ return this.Get('OnChangeEnabled');
85620
+ }
85621
+ set OnChangeEnabled(value) {
85622
+ this.Set('OnChangeEnabled', value);
85623
+ }
85624
+ /**
85625
+ * * Field Name: OnChangeInvocationType
85626
+ * * Display Name: On-Change Invocation Type
85627
+ * * SQL Data Type: nvarchar(30)
85628
+ * * Value List Type: List
85629
+ * * Possible Values
85630
+ * * AfterCreate
85631
+ * * AfterDelete
85632
+ * * AfterUpdate
85633
+ * * Validate
85634
+ * * Description: Which save event fires the on-change trigger: AfterCreate, AfterUpdate, AfterDelete, or Validate
85635
+ */
85636
+ get OnChangeInvocationType() {
85637
+ return this.Get('OnChangeInvocationType');
85638
+ }
85639
+ set OnChangeInvocationType(value) {
85640
+ this.Set('OnChangeInvocationType', value);
85641
+ }
85642
+ /**
85643
+ * * Field Name: OnChangeFilter
85644
+ * * Display Name: On-Change Filter
85645
+ * * SQL Data Type: nvarchar(MAX)
85646
+ * * Description: Gating expression evaluated against the changed record (with changed-fields context) that compiles into the owned Entity Action Filter; only when it passes does the on-change trigger fire
85647
+ */
85648
+ get OnChangeFilter() {
85649
+ return this.Get('OnChangeFilter');
85650
+ }
85651
+ set OnChangeFilter(value) {
85652
+ this.Set('OnChangeFilter', value);
85653
+ }
85654
+ /**
85655
+ * * Field Name: ScheduleEnabled
85656
+ * * Display Name: Schedule Enabled
85657
+ * * SQL Data Type: bit
85658
+ * * Default Value: 0
85659
+ * * Description: When 1, the process runs on a cron schedule via an owned Scheduled Job
85660
+ */
85661
+ get ScheduleEnabled() {
85662
+ return this.Get('ScheduleEnabled');
85663
+ }
85664
+ set ScheduleEnabled(value) {
85665
+ this.Set('ScheduleEnabled', value);
85666
+ }
85667
+ /**
85668
+ * * Field Name: CronExpression
85669
+ * * Display Name: Cron Expression
85670
+ * * SQL Data Type: nvarchar(120)
85671
+ * * Description: Cron expression for the schedule trigger, when ScheduleEnabled=1
85672
+ */
85673
+ get CronExpression() {
85674
+ return this.Get('CronExpression');
85675
+ }
85676
+ set CronExpression(value) {
85677
+ this.Set('CronExpression', value);
85678
+ }
85679
+ /**
85680
+ * * Field Name: Timezone
85681
+ * * Display Name: Timezone
85682
+ * * SQL Data Type: nvarchar(100)
85683
+ * * Default Value: UTC
85684
+ * * Description: IANA timezone for evaluating the cron expression (default UTC)
85685
+ */
85686
+ get Timezone() {
85687
+ return this.Get('Timezone');
85688
+ }
85689
+ set Timezone(value) {
85690
+ this.Set('Timezone', value);
85691
+ }
85692
+ /**
85693
+ * * Field Name: OnDemandEnabled
85694
+ * * Display Name: On-Demand Enabled
85695
+ * * SQL Data Type: bit
85696
+ * * Default Value: 1
85697
+ * * Description: When 1, the process can be run on demand (button / resolver)
85698
+ */
85699
+ get OnDemandEnabled() {
85700
+ return this.Get('OnDemandEnabled');
85701
+ }
85702
+ set OnDemandEnabled(value) {
85703
+ this.Set('OnDemandEnabled', value);
85704
+ }
85705
+ /**
85706
+ * * Field Name: InputMapping
85707
+ * * Display Name: Input Mapping
85708
+ * * SQL Data Type: nvarchar(MAX)
85709
+ * * Description: JSON mapping describing how a record maps to the work inputs (optionally including an EntityDocumentID for render-to-text)
85710
+ */
85711
+ get InputMapping() {
85712
+ return this.Get('InputMapping');
85713
+ }
85714
+ set InputMapping(value) {
85715
+ this.Set('InputMapping', value);
85716
+ }
85717
+ /**
85718
+ * * Field Name: OutputMapping
85719
+ * * Display Name: Output Mapping
85720
+ * * SQL Data Type: nvarchar(MAX)
85721
+ * * Description: JSON mapping describing how the structured output payload writes back (to fields, a child record, or tags)
85722
+ */
85723
+ get OutputMapping() {
85724
+ return this.Get('OutputMapping');
85725
+ }
85726
+ set OutputMapping(value) {
85727
+ this.Set('OutputMapping', value);
85728
+ }
85729
+ /**
85730
+ * * Field Name: SkipUnchanged
85731
+ * * Display Name: Skip Unchanged
85732
+ * * SQL Data Type: bit
85733
+ * * Default Value: 1
85734
+ * * Description: When 1, records whose watermark indicates no change since the last run are skipped
85735
+ */
85736
+ get SkipUnchanged() {
85737
+ return this.Get('SkipUnchanged');
85738
+ }
85739
+ set SkipUnchanged(value) {
85740
+ this.Set('SkipUnchanged', value);
85741
+ }
85742
+ /**
85743
+ * * Field Name: WatermarkStrategy
85744
+ * * Display Name: Watermark Strategy
85745
+ * * SQL Data Type: nvarchar(20)
85746
+ * * Value List Type: List
85747
+ * * Possible Values
85748
+ * * Checksum
85749
+ * * None
85750
+ * * UpdatedAt
85751
+ * * Description: How unchanged records are detected for SkipUnchanged: Checksum (per-record content hash, stored in RecordProcessWatermark), UpdatedAt (compares __mj_UpdatedAt, stores nothing), or None
85752
+ */
85753
+ get WatermarkStrategy() {
85754
+ return this.Get('WatermarkStrategy');
85755
+ }
85756
+ set WatermarkStrategy(value) {
85757
+ this.Set('WatermarkStrategy', value);
85758
+ }
85759
+ /**
85760
+ * * Field Name: BatchSize
85761
+ * * Display Name: Batch Size
85762
+ * * SQL Data Type: int
85763
+ * * Default Value: 100
85764
+ * * Description: Number of records processed per batch (default 100)
85765
+ */
85766
+ get BatchSize() {
85767
+ return this.Get('BatchSize');
85768
+ }
85769
+ set BatchSize(value) {
85770
+ this.Set('BatchSize', value);
85771
+ }
85772
+ /**
85773
+ * * Field Name: MaxConcurrency
85774
+ * * Display Name: Max Concurrency
85775
+ * * SQL Data Type: int
85776
+ * * Default Value: 1
85777
+ * * Description: Maximum number of records processed concurrently within a batch (default 1)
85778
+ */
85779
+ get MaxConcurrency() {
85780
+ return this.Get('MaxConcurrency');
85781
+ }
85782
+ set MaxConcurrency(value) {
85783
+ this.Set('MaxConcurrency', value);
85784
+ }
85785
+ /**
85786
+ * * Field Name: __mj_CreatedAt
85787
+ * * Display Name: Created At
85788
+ * * SQL Data Type: datetimeoffset
85789
+ * * Default Value: getutcdate()
85790
+ */
85791
+ get __mj_CreatedAt() {
85792
+ return this.Get('__mj_CreatedAt');
85793
+ }
85794
+ /**
85795
+ * * Field Name: __mj_UpdatedAt
85796
+ * * Display Name: Updated At
85797
+ * * SQL Data Type: datetimeoffset
85798
+ * * Default Value: getutcdate()
85799
+ */
85800
+ get __mj_UpdatedAt() {
85801
+ return this.Get('__mj_UpdatedAt');
85802
+ }
85803
+ /**
85804
+ * * Field Name: Configuration
85805
+ * * Display Name: Configuration
85806
+ * * SQL Data Type: nvarchar(MAX)
85807
+ * * Description: JSON configuration for the process's work, used by work types that need structured config beyond Input/Output mappings. For WorkType='FieldRules' this holds the serialized FieldRuleSet (the rules applied to each record). NULL for work types that do not use it.
85808
+ */
85809
+ get Configuration() {
85810
+ return this.Get('Configuration');
85811
+ }
85812
+ set Configuration(value) {
85813
+ this.Set('Configuration', value);
85814
+ }
85815
+ /**
85816
+ * * Field Name: Category
85817
+ * * Display Name: Category Name
85818
+ * * SQL Data Type: nvarchar(255)
85819
+ */
85820
+ get Category() {
85821
+ return this.Get('Category');
85822
+ }
85823
+ /**
85824
+ * * Field Name: Entity
85825
+ * * Display Name: Entity Name
85826
+ * * SQL Data Type: nvarchar(255)
85827
+ */
85828
+ get Entity() {
85829
+ return this.Get('Entity');
85830
+ }
85831
+ /**
85832
+ * * Field Name: Action
85833
+ * * Display Name: Action Name
85834
+ * * SQL Data Type: nvarchar(425)
85835
+ */
85836
+ get Action() {
85837
+ return this.Get('Action');
85838
+ }
85839
+ /**
85840
+ * * Field Name: Agent
85841
+ * * Display Name: Agent Name
85842
+ * * SQL Data Type: nvarchar(255)
85843
+ */
85844
+ get Agent() {
85845
+ return this.Get('Agent');
85846
+ }
85847
+ /**
85848
+ * * Field Name: Prompt
85849
+ * * Display Name: Prompt Name
85850
+ * * SQL Data Type: nvarchar(255)
85851
+ */
85852
+ get Prompt() {
85853
+ return this.Get('Prompt');
85854
+ }
85855
+ /**
85856
+ * * Field Name: ScopeView
85857
+ * * Display Name: Scope View Name
85858
+ * * SQL Data Type: nvarchar(100)
85859
+ */
85860
+ get ScopeView() {
85861
+ return this.Get('ScopeView');
85862
+ }
85863
+ /**
85864
+ * * Field Name: ScopeList
85865
+ * * Display Name: Scope List Name
85866
+ * * SQL Data Type: nvarchar(100)
85867
+ */
85868
+ get ScopeList() {
85869
+ return this.Get('ScopeList');
85870
+ }
85871
+ };
85872
+ MJRecordProcessEntity = __decorate([
85873
+ RegisterClass(BaseEntity, 'MJ: Record Processes')
85874
+ ], MJRecordProcessEntity);
85875
+ export { MJRecordProcessEntity };
85876
+ /**
85877
+ * MJ: Remote Operation Categories - strongly typed entity sub-class
85878
+ * * Schema: __mj
85879
+ * * Base Table: RemoteOperationCategory
85880
+ * * Base View: vwRemoteOperationCategories
85881
+ * * @description Hierarchical folder for organizing Remote Operations in the UI. Example: "Record Processes" with a child category "Control" holding RunNow / Pause / Cancel.
85882
+ * * Primary Key: ID
85883
+ * @extends {BaseEntity}
85884
+ * @class
85885
+ * @public
85886
+ */
85887
+ let MJRemoteOperationCategoryEntity = class MJRemoteOperationCategoryEntity extends BaseEntity {
85888
+ /**
85889
+ * Loads the MJ: Remote Operation Categories record from the database
85890
+ * @param ID: string - primary key value to load the MJ: Remote Operation Categories record.
85891
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
85892
+ * @returns {Promise<boolean>} - true if successful, false otherwise
85893
+ * @public
85894
+ * @async
85895
+ * @memberof MJRemoteOperationCategoryEntity
85896
+ * @method
85897
+ * @override
85898
+ */
85899
+ async Load(ID, EntityRelationshipsToLoad) {
85900
+ const compositeKey = new CompositeKey();
85901
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
85902
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
85903
+ }
85904
+ /**
85905
+ * * Field Name: ID
85906
+ * * Display Name: ID
85907
+ * * SQL Data Type: uniqueidentifier
85908
+ * * Default Value: newsequentialid()
85909
+ */
85910
+ get ID() {
85911
+ return this.Get('ID');
85912
+ }
85913
+ set ID(value) {
85914
+ this.Set('ID', value);
85915
+ }
85916
+ /**
85917
+ * * Field Name: Name
85918
+ * * Display Name: Name
85919
+ * * SQL Data Type: nvarchar(255)
85920
+ * * Description: Display name of the category
85921
+ */
85922
+ get Name() {
85923
+ return this.Get('Name');
85924
+ }
85925
+ set Name(value) {
85926
+ this.Set('Name', value);
85927
+ }
85928
+ /**
85929
+ * * Field Name: Description
85930
+ * * Display Name: Description
85931
+ * * SQL Data Type: nvarchar(MAX)
85932
+ * * Description: Optional description of what belongs in this category
85933
+ */
85934
+ get Description() {
85935
+ return this.Get('Description');
85936
+ }
85937
+ set Description(value) {
85938
+ this.Set('Description', value);
85939
+ }
85940
+ /**
85941
+ * * Field Name: ParentID
85942
+ * * Display Name: Parent Category
85943
+ * * SQL Data Type: uniqueidentifier
85944
+ * * Related Entity/Foreign Key: MJ: Remote Operation Categories (vwRemoteOperationCategories.ID)
85945
+ * * Description: Self-referencing foreign key to the parent category, enabling a nested folder hierarchy (NULL for a top-level category)
85946
+ */
85947
+ get ParentID() {
85948
+ return this.Get('ParentID');
85949
+ }
85950
+ set ParentID(value) {
85951
+ this.Set('ParentID', value);
85952
+ }
85953
+ /**
85954
+ * * Field Name: __mj_CreatedAt
85955
+ * * Display Name: Created At
85956
+ * * SQL Data Type: datetimeoffset
85957
+ * * Default Value: getutcdate()
85958
+ */
85959
+ get __mj_CreatedAt() {
85960
+ return this.Get('__mj_CreatedAt');
85961
+ }
85962
+ /**
85963
+ * * Field Name: __mj_UpdatedAt
85964
+ * * Display Name: Updated At
85965
+ * * SQL Data Type: datetimeoffset
85966
+ * * Default Value: getutcdate()
85967
+ */
85968
+ get __mj_UpdatedAt() {
85969
+ return this.Get('__mj_UpdatedAt');
85970
+ }
85971
+ /**
85972
+ * * Field Name: Parent
85973
+ * * Display Name: Parent Name
85974
+ * * SQL Data Type: nvarchar(255)
85975
+ */
85976
+ get Parent() {
85977
+ return this.Get('Parent');
85978
+ }
85979
+ /**
85980
+ * * Field Name: RootParentID
85981
+ * * Display Name: Root Parent
85982
+ * * SQL Data Type: uniqueidentifier
85983
+ */
85984
+ get RootParentID() {
85985
+ return this.Get('RootParentID');
85986
+ }
85987
+ };
85988
+ MJRemoteOperationCategoryEntity = __decorate([
85989
+ RegisterClass(BaseEntity, 'MJ: Remote Operation Categories')
85990
+ ], MJRemoteOperationCategoryEntity);
85991
+ export { MJRemoteOperationCategoryEntity };
85992
+ /**
85993
+ * MJ: Remote Operations - strongly typed entity sub-class
85994
+ * * Schema: __mj
85995
+ * * Base Table: RemoteOperation
85996
+ * * Base View: vwRemoteOperations
85997
+ * * @description Definition of a typed, provider-routed server operation invoked identically from the client (marshalled over GraphQL) and the server (dispatched in-process) - the typed peer of BaseEntity (CRUD) and RunView (set reads) for arbitrary capabilities. Input/output types are declared here and emitted by CodeGen into a typed base class; the body may be hand-written or AI-authored from Description. EXAMPLE: "RecordProcess.RunNow" (ExecutionMode=LongRunning) takes {recordProcessID} and returns {processRunID}, authorized by the recordprocess:execute scope plus the caller's entity permissions.
85998
+ * * Primary Key: ID
85999
+ * @extends {BaseEntity}
86000
+ * @class
86001
+ * @public
86002
+ */
86003
+ let MJRemoteOperationEntity = class MJRemoteOperationEntity extends BaseEntity {
86004
+ constructor() {
86005
+ super(...arguments);
86006
+ this._LibrariesObject_cached = undefined;
86007
+ this._LibrariesObject_lastRaw = null;
86008
+ }
86009
+ /**
86010
+ * Loads the MJ: Remote Operations record from the database
86011
+ * @param ID: string - primary key value to load the MJ: Remote Operations record.
86012
+ * @param EntityRelationshipsToLoad - (optional) the relationships to load
86013
+ * @returns {Promise<boolean>} - true if successful, false otherwise
86014
+ * @public
86015
+ * @async
86016
+ * @memberof MJRemoteOperationEntity
86017
+ * @method
86018
+ * @override
86019
+ */
86020
+ async Load(ID, EntityRelationshipsToLoad) {
86021
+ const compositeKey = new CompositeKey();
86022
+ compositeKey.KeyValuePairs.push({ FieldName: 'ID', Value: ID });
86023
+ return await super.InnerLoad(compositeKey, EntityRelationshipsToLoad);
86024
+ }
86025
+ /**
86026
+ * * Field Name: ID
86027
+ * * Display Name: ID
86028
+ * * SQL Data Type: uniqueidentifier
86029
+ * * Default Value: newsequentialid()
86030
+ */
86031
+ get ID() {
86032
+ return this.Get('ID');
86033
+ }
86034
+ set ID(value) {
86035
+ this.Set('ID', value);
86036
+ }
86037
+ /**
86038
+ * * Field Name: Name
86039
+ * * Display Name: Name
86040
+ * * SQL Data Type: nvarchar(255)
86041
+ * * Description: Human-readable name of the operation
86042
+ */
86043
+ get Name() {
86044
+ return this.Get('Name');
86045
+ }
86046
+ set Name(value) {
86047
+ this.Set('Name', value);
86048
+ }
86049
+ /**
86050
+ * * Field Name: OperationKey
86051
+ * * Display Name: Operation Key
86052
+ * * SQL Data Type: nvarchar(255)
86053
+ * * Description: Stable, unique registry key and wire token used to dispatch the operation (e.g., "RecordProcess.RunNow"). Namespaced by convention.
86054
+ */
86055
+ get OperationKey() {
86056
+ return this.Get('OperationKey');
86057
+ }
86058
+ set OperationKey(value) {
86059
+ this.Set('OperationKey', value);
86060
+ }
86061
+ /**
86062
+ * * Field Name: CategoryID
86063
+ * * Display Name: Category
86064
+ * * SQL Data Type: uniqueidentifier
86065
+ * * Related Entity/Foreign Key: MJ: Remote Operation Categories (vwRemoteOperationCategories.ID)
86066
+ * * Description: Optional hierarchical category for organizing this operation in the UI
86067
+ */
86068
+ get CategoryID() {
86069
+ return this.Get('CategoryID');
86070
+ }
86071
+ set CategoryID(value) {
86072
+ this.Set('CategoryID', value);
86073
+ }
86074
+ /**
86075
+ * * Field Name: Description
86076
+ * * Display Name: Description
86077
+ * * SQL Data Type: nvarchar(MAX)
86078
+ * * Description: Human description of the operation; also the seed for AI-generated implementation code when GenerationType=AI
86079
+ */
86080
+ get Description() {
86081
+ return this.Get('Description');
86082
+ }
86083
+ set Description(value) {
86084
+ this.Set('Description', value);
86085
+ }
86086
+ /**
86087
+ * * Field Name: InputTypeName
86088
+ * * Display Name: Input Type Name
86089
+ * * SQL Data Type: nvarchar(255)
86090
+ * * Description: TypeScript type name for the operation input (emitted by CodeGen as the TInput interface)
86091
+ */
86092
+ get InputTypeName() {
86093
+ return this.Get('InputTypeName');
86094
+ }
86095
+ set InputTypeName(value) {
86096
+ this.Set('InputTypeName', value);
86097
+ }
86098
+ /**
86099
+ * * Field Name: InputTypeDefinition
86100
+ * * Display Name: Input Type Definition
86101
+ * * SQL Data Type: nvarchar(MAX)
86102
+ * * Description: Raw TypeScript interface/type source defining the input shape (same mechanism as EntityField JSON-type definitions)
86103
+ */
86104
+ get InputTypeDefinition() {
86105
+ return this.Get('InputTypeDefinition');
86106
+ }
86107
+ set InputTypeDefinition(value) {
86108
+ this.Set('InputTypeDefinition', value);
86109
+ }
86110
+ /**
86111
+ * * Field Name: InputTypeIsArray
86112
+ * * Display Name: Input Is Array
86113
+ * * SQL Data Type: bit
86114
+ * * Default Value: 0
86115
+ * * Description: When 1, the input type is emitted as an array (TInput[])
86116
+ */
86117
+ get InputTypeIsArray() {
86118
+ return this.Get('InputTypeIsArray');
86119
+ }
86120
+ set InputTypeIsArray(value) {
86121
+ this.Set('InputTypeIsArray', value);
86122
+ }
86123
+ /**
86124
+ * * Field Name: OutputTypeName
86125
+ * * Display Name: Output Type Name
86126
+ * * SQL Data Type: nvarchar(255)
86127
+ * * Description: TypeScript type name for the operation output (emitted by CodeGen as the TOutput interface)
86128
+ */
86129
+ get OutputTypeName() {
86130
+ return this.Get('OutputTypeName');
86131
+ }
86132
+ set OutputTypeName(value) {
86133
+ this.Set('OutputTypeName', value);
86134
+ }
86135
+ /**
86136
+ * * Field Name: OutputTypeDefinition
86137
+ * * Display Name: Output Type Definition
86138
+ * * SQL Data Type: nvarchar(MAX)
86139
+ * * Description: Raw TypeScript interface/type source defining the output shape
86140
+ */
86141
+ get OutputTypeDefinition() {
86142
+ return this.Get('OutputTypeDefinition');
86143
+ }
86144
+ set OutputTypeDefinition(value) {
86145
+ this.Set('OutputTypeDefinition', value);
86146
+ }
86147
+ /**
86148
+ * * Field Name: OutputTypeIsArray
86149
+ * * Display Name: Output Is Array
86150
+ * * SQL Data Type: bit
86151
+ * * Default Value: 0
86152
+ * * Description: When 1, the output type is emitted as an array (TOutput[])
86153
+ */
86154
+ get OutputTypeIsArray() {
86155
+ return this.Get('OutputTypeIsArray');
86156
+ }
86157
+ set OutputTypeIsArray(value) {
86158
+ this.Set('OutputTypeIsArray', value);
86159
+ }
86160
+ /**
86161
+ * * Field Name: ExecutionMode
86162
+ * * Display Name: Execution Mode
86163
+ * * SQL Data Type: nvarchar(20)
86164
+ * * Default Value: Sync
86165
+ * * Value List Type: List
86166
+ * * Possible Values
86167
+ * * LongRunning
86168
+ * * Sync
86169
+ * * Description: Sync (request/response) or LongRunning (returns a handle; supports detached and attached consumption)
86170
+ */
86171
+ get ExecutionMode() {
86172
+ return this.Get('ExecutionMode');
86173
+ }
86174
+ set ExecutionMode(value) {
86175
+ this.Set('ExecutionMode', value);
86176
+ }
86177
+ /**
86178
+ * * Field Name: RequiredScope
86179
+ * * Display Name: Required Scope
86180
+ * * SQL Data Type: nvarchar(255)
86181
+ * * Description: Optional API-key scope string (e.g., recordprocess:execute) enforced for API-key/MCP callers; NULL means no scope gate (interactive users are still bounded by their entity permissions)
86182
+ */
86183
+ get RequiredScope() {
86184
+ return this.Get('RequiredScope');
86185
+ }
86186
+ set RequiredScope(value) {
86187
+ this.Set('RequiredScope', value);
86188
+ }
86189
+ /**
86190
+ * * Field Name: RequiresSystemUser
86191
+ * * Display Name: Requires System User
86192
+ * * SQL Data Type: bit
86193
+ * * Default Value: 0
86194
+ * * Description: When 1, only the system user may invoke this operation
86195
+ */
86196
+ get RequiresSystemUser() {
86197
+ return this.Get('RequiresSystemUser');
86198
+ }
86199
+ set RequiresSystemUser(value) {
86200
+ this.Set('RequiresSystemUser', value);
86201
+ }
86202
+ /**
86203
+ * * Field Name: GenerationType
86204
+ * * Display Name: Generation Type
86205
+ * * SQL Data Type: nvarchar(20)
86206
+ * * Default Value: Manual
86207
+ * * Value List Type: List
86208
+ * * Possible Values
86209
+ * * AI
86210
+ * * Default
86211
+ * * Manual
86212
+ * * Description: How the server implementation is provided: Manual (hand-written subclass), AI (generated from Description), or Default (standard generated plumbing)
86213
+ */
86214
+ get GenerationType() {
86215
+ return this.Get('GenerationType');
86216
+ }
86217
+ set GenerationType(value) {
86218
+ this.Set('GenerationType', value);
86219
+ }
86220
+ /**
86221
+ * * Field Name: Code
86222
+ * * Display Name: Code
86223
+ * * SQL Data Type: nvarchar(MAX)
86224
+ * * Description: The AI-generated implementation body (when GenerationType=AI); regenerated only when Description changes
86225
+ */
86226
+ get Code() {
86227
+ return this.Get('Code');
86228
+ }
86229
+ set Code(value) {
86230
+ this.Set('Code', value);
86231
+ }
86232
+ /**
86233
+ * * Field Name: CodeApprovalStatus
86234
+ * * Display Name: Code Approval Status
86235
+ * * SQL Data Type: nvarchar(20)
86236
+ * * Default Value: Pending
86237
+ * * Value List Type: List
86238
+ * * Possible Values
86239
+ * * Approved
86240
+ * * Pending
86241
+ * * Rejected
86242
+ * * Description: Human approval gate for AI-generated code: Pending, Approved, or Rejected. Only Approved AI code is emitted and routable.
86243
+ */
86244
+ get CodeApprovalStatus() {
86245
+ return this.Get('CodeApprovalStatus');
86246
+ }
86247
+ set CodeApprovalStatus(value) {
86248
+ this.Set('CodeApprovalStatus', value);
86249
+ }
86250
+ /**
86251
+ * * Field Name: CodeApprovedByUserID
86252
+ * * Display Name: Code Approved By User ID
86253
+ * * SQL Data Type: uniqueidentifier
86254
+ * * Related Entity/Foreign Key: MJ: Users (vwUsers.ID)
86255
+ * * Description: Foreign key to the user who approved the generated code
86256
+ */
86257
+ get CodeApprovedByUserID() {
86258
+ return this.Get('CodeApprovedByUserID');
86259
+ }
86260
+ set CodeApprovedByUserID(value) {
86261
+ this.Set('CodeApprovedByUserID', value);
86262
+ }
86263
+ /**
86264
+ * * Field Name: CodeApprovedAt
86265
+ * * Display Name: Code Approved At
86266
+ * * SQL Data Type: datetimeoffset
86267
+ * * Description: When the generated code was approved
86268
+ */
86269
+ get CodeApprovedAt() {
86270
+ return this.Get('CodeApprovedAt');
86271
+ }
86272
+ set CodeApprovedAt(value) {
86273
+ this.Set('CodeApprovedAt', value);
86274
+ }
86275
+ /**
86276
+ * * Field Name: ContractFingerprint
86277
+ * * Display Name: Contract Fingerprint
86278
+ * * SQL Data Type: nvarchar(100)
86279
+ * * Description: Fingerprint of the input/output contract; carried in the wire envelope so the server can reject a stale client loudly instead of mis-deserializing
86280
+ */
86281
+ get ContractFingerprint() {
86282
+ return this.Get('ContractFingerprint');
86283
+ }
86284
+ set ContractFingerprint(value) {
86285
+ this.Set('ContractFingerprint', value);
86286
+ }
86287
+ /**
86288
+ * * Field Name: Status
86289
+ * * Display Name: Status
86290
+ * * SQL Data Type: nvarchar(20)
86291
+ * * Default Value: Pending
86292
+ * * Value List Type: List
86293
+ * * Possible Values
86294
+ * * Active
86295
+ * * Disabled
86296
+ * * Pending
86297
+ * * Description: Lifecycle status: Active (routable), Disabled, or Pending. Only Active operations can be invoked.
86298
+ */
86299
+ get Status() {
86300
+ return this.Get('Status');
86301
+ }
86302
+ set Status(value) {
86303
+ this.Set('Status', value);
86304
+ }
86305
+ /**
86306
+ * * Field Name: CacheTTLSeconds
86307
+ * * Display Name: Cache TTL (Seconds)
86308
+ * * SQL Data Type: int
86309
+ * * Description: Optional result cache TTL in seconds (NULL = no caching)
86310
+ */
86311
+ get CacheTTLSeconds() {
86312
+ return this.Get('CacheTTLSeconds');
86313
+ }
86314
+ set CacheTTLSeconds(value) {
86315
+ this.Set('CacheTTLSeconds', value);
86316
+ }
86317
+ /**
86318
+ * * Field Name: TimeoutMS
86319
+ * * Display Name: Timeout (MS)
86320
+ * * SQL Data Type: int
86321
+ * * Description: Optional execution timeout in milliseconds
86322
+ */
86323
+ get TimeoutMS() {
86324
+ return this.Get('TimeoutMS');
86325
+ }
86326
+ set TimeoutMS(value) {
86327
+ this.Set('TimeoutMS', value);
86328
+ }
86329
+ /**
86330
+ * * Field Name: MaxConcurrency
86331
+ * * Display Name: Max Concurrency
86332
+ * * SQL Data Type: int
86333
+ * * Description: Optional cap on concurrent executions of this operation
86334
+ */
86335
+ get MaxConcurrency() {
86336
+ return this.Get('MaxConcurrency');
86337
+ }
86338
+ set MaxConcurrency(value) {
86339
+ this.Set('MaxConcurrency', value);
86340
+ }
86341
+ /**
86342
+ * * Field Name: __mj_CreatedAt
86343
+ * * Display Name: Created At
86344
+ * * SQL Data Type: datetimeoffset
86345
+ * * Default Value: getutcdate()
86346
+ */
86347
+ get __mj_CreatedAt() {
86348
+ return this.Get('__mj_CreatedAt');
86349
+ }
86350
+ /**
86351
+ * * Field Name: __mj_UpdatedAt
86352
+ * * Display Name: Updated At
86353
+ * * SQL Data Type: datetimeoffset
86354
+ * * Default Value: getutcdate()
86355
+ */
86356
+ get __mj_UpdatedAt() {
86357
+ return this.Get('__mj_UpdatedAt');
86358
+ }
86359
+ /**
86360
+ * * Field Name: CodeLocked
86361
+ * * Display Name: Code Locked
86362
+ * * SQL Data Type: bit
86363
+ * * Default Value: 0
86364
+ * * Description: When 1, the AI-generated Code is frozen and Save() will not regenerate it even if Description changes (the Generated-Actions CodeLocked analog). Default 0.
86365
+ */
86366
+ get CodeLocked() {
86367
+ return this.Get('CodeLocked');
86368
+ }
86369
+ set CodeLocked(value) {
86370
+ this.Set('CodeLocked', value);
86371
+ }
86372
+ /**
86373
+ * * Field Name: CodeComments
86374
+ * * Display Name: Code Comments
86375
+ * * SQL Data Type: nvarchar(MAX)
86376
+ * * Description: The model's explanation / comments for the AI-generated Code (populated alongside Code when GenerationType=AI). Human-facing review aid.
86377
+ */
86378
+ get CodeComments() {
86379
+ return this.Get('CodeComments');
86380
+ }
86381
+ set CodeComments(value) {
86382
+ this.Set('CodeComments', value);
86383
+ }
86384
+ /**
86385
+ * * Field Name: Libraries
86386
+ * * Display Name: Libraries
86387
+ * * SQL Data Type: nvarchar(MAX)
86388
+ * * JSON Type: Array<MJRemoteOperationEntity_RemoteOperationLibrary>
86389
+ * * Description: JSON array of the libraries the generated body imports: [{ "Library": "@memberjunction/ai-prompts", "ItemsUsed": ["AIPromptRunner"] }, ...]. Bound to the RemoteOperationLibrary JSONType via metadata sync so CodeGen emits a typed LibrariesObject accessor; CodeGen uses it to emit the imports at the top of the generated remote_operations.ts. NULL/empty = only the default always-available libraries are imported.
86390
+ */
86391
+ get Libraries() {
86392
+ return this.Get('Libraries');
86393
+ }
86394
+ set Libraries(value) {
86395
+ this.Set('Libraries', value);
86396
+ }
86397
+ /**
86398
+ * Typed accessor for Libraries — returns parsed JSON as Array<MJRemoteOperationEntity_RemoteOperationLibrary>.
86399
+ * Uses lazy parsing with cache invalidation when the underlying raw value changes.
86400
+ */
86401
+ get LibrariesObject() {
86402
+ const raw = this.Libraries;
86403
+ if (raw !== this._LibrariesObject_lastRaw) {
86404
+ this._LibrariesObject_cached = raw ? JSON.parse(raw) : null;
86405
+ this._LibrariesObject_lastRaw = raw;
86406
+ }
86407
+ return this._LibrariesObject_cached;
86408
+ }
86409
+ set LibrariesObject(value) {
86410
+ const raw = value ? JSON.stringify(value) : null;
86411
+ this.Libraries = raw;
86412
+ this._LibrariesObject_cached = value;
86413
+ this._LibrariesObject_lastRaw = raw;
86414
+ }
86415
+ /**
86416
+ * * Field Name: Category
86417
+ * * Display Name: Category Name
86418
+ * * SQL Data Type: nvarchar(255)
86419
+ */
86420
+ get Category() {
86421
+ return this.Get('Category');
86422
+ }
86423
+ /**
86424
+ * * Field Name: CodeApprovedByUser
86425
+ * * Display Name: Code Approved By User
86426
+ * * SQL Data Type: nvarchar(100)
86427
+ */
86428
+ get CodeApprovedByUser() {
86429
+ return this.Get('CodeApprovedByUser');
86430
+ }
86431
+ };
86432
+ MJRemoteOperationEntity = __decorate([
86433
+ RegisterClass(BaseEntity, 'MJ: Remote Operations')
86434
+ ], MJRemoteOperationEntity);
86435
+ export { MJRemoteOperationEntity };
83445
86436
  /**
83446
86437
  * MJ: Report Categories - strongly typed entity sub-class
83447
86438
  * * Schema: __mj