@bicon/mcp-composer 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +968 -555
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -12,7 +12,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
12
12
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
13
 
14
14
  // src/version.ts
15
- var COMPOSER_VERSION = true ? "0.3.5" : readPackageVersion();
15
+ var COMPOSER_VERSION = true ? "0.3.6" : readPackageVersion();
16
16
 
17
17
  // ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
18
18
  var external_exports = {};
@@ -4111,7 +4111,8 @@ var ListOrganizationMembersResponseItem = objectType({
4111
4111
  });
4112
4112
  var ListOrganizationMembersResponse = arrayType(ListOrganizationMembersResponseItem);
4113
4113
  var SyncOrganizationMembersResponse = objectType({
4114
- "synced": numberType().describe("Number of Clerk memberships upserted into the local DB.")
4114
+ "synced": numberType().describe("Number of Clerk memberships upserted into the local DB."),
4115
+ "removed": numberType().describe("Number of local memberships deleted because Clerk no longer lists them. Always 0 when the removal pass was skipped by the guards above.")
4115
4116
  });
4116
4117
  var GetMyOrganizationAccessResponse = objectType({
4117
4118
  "userId": stringType().describe(`The caller's own local user id (matches AuthorRef.userId on initiatives), so the client can tell its own changes apart from a teammate's \u2014 e.g. to suppress the "updated by X" collaboration banner when an edit echoing back is the caller's own save.`),
@@ -4157,46 +4158,101 @@ var UpdatePermissionProfileResponse = objectType({
4157
4158
  var DeletePermissionProfileParams = objectType({
4158
4159
  "id": coerce.string().uuid()
4159
4160
  });
4161
+ var listUserPortfoliosResponseInitiativeIdsMax = 1e4;
4160
4162
  var ListUserPortfoliosResponseItem = objectType({
4161
4163
  "id": stringType().uuid(),
4162
4164
  "name": stringType(),
4163
- "initiativeIds": arrayType(stringType())
4164
- });
4165
+ "shared": booleanType().describe("When true, everyone in the organisation can see it. Only the owner can ever edit or delete it, shared or not."),
4166
+ "ownedByMe": booleanType().describe("Whether the CALLER owns this portfolio \u2014 the client uses it to hide edit and delete controls it must not offer. The owner's identity is deliberately not exposed; a viewer has no need for it and it would be a second place for authorship to leak."),
4167
+ "initiativeIds": arrayType(stringType()).max(listUserPortfoliosResponseInitiativeIdsMax)
4168
+ }).describe("A saved named subset of initiatives, owned by whoever created it. Private to its owner unless `shared` is set. The list endpoint returns the caller's own portfolios plus the organisation's shared ones; a portfolio whose owner has been erased is returned only if it was shared, so a GDPR erasure cannot publish someone's private views.");
4165
4169
  var ListUserPortfoliosResponse = arrayType(ListUserPortfoliosResponseItem);
4170
+ var createUserPortfolioBodyInitiativeIdsMax = 1e4;
4166
4171
  var CreateUserPortfolioBody = objectType({
4167
4172
  "id": stringType().uuid().optional().describe("Optional client-supplied id \u2014 see SkillInput's id field."),
4168
4173
  "name": stringType(),
4169
- "initiativeIds": arrayType(stringType())
4174
+ "shared": booleanType().optional().describe("Share with the whole organisation. Defaults to false \u2014 a portfolio is private to its creator unless this is set. Ownership itself is never taken from the request body: it comes from the session, and a `createdByUserId` in the payload is ignored."),
4175
+ "initiativeIds": arrayType(stringType().uuid()).max(createUserPortfolioBodyInitiativeIdsMax).describe("Initiatives this saved view contains. Ids that do not resolve to a live initiative in the caller's organisation are dropped on write, and duplicates are collapsed \u2014 so what is stored is always a set of real, in-organisation references. A stale id (its initiative was deleted) and a foreign id (it belongs to another organisation) are treated identically and silently, so a caller cannot use the response to discover that an id exists somewhere else.")
4170
4176
  });
4171
4177
  var UpdateUserPortfolioParams = objectType({
4172
4178
  "id": coerce.string().uuid()
4173
4179
  });
4180
+ var updateUserPortfolioBodyInitiativeIdsMax = 1e4;
4174
4181
  var UpdateUserPortfolioBody = objectType({
4175
4182
  "id": stringType().uuid().optional().describe("Optional client-supplied id \u2014 see SkillInput's id field."),
4176
4183
  "name": stringType(),
4177
- "initiativeIds": arrayType(stringType())
4184
+ "shared": booleanType().optional().describe("Share with the whole organisation. Defaults to false \u2014 a portfolio is private to its creator unless this is set. Ownership itself is never taken from the request body: it comes from the session, and a `createdByUserId` in the payload is ignored."),
4185
+ "initiativeIds": arrayType(stringType().uuid()).max(updateUserPortfolioBodyInitiativeIdsMax).describe("Initiatives this saved view contains. Ids that do not resolve to a live initiative in the caller's organisation are dropped on write, and duplicates are collapsed \u2014 so what is stored is always a set of real, in-organisation references. A stale id (its initiative was deleted) and a foreign id (it belongs to another organisation) are treated identically and silently, so a caller cannot use the response to discover that an id exists somewhere else.")
4178
4186
  });
4187
+ var updateUserPortfolioResponseInitiativeIdsMax = 1e4;
4179
4188
  var UpdateUserPortfolioResponse = objectType({
4180
4189
  "id": stringType().uuid(),
4181
4190
  "name": stringType(),
4182
- "initiativeIds": arrayType(stringType())
4183
- });
4191
+ "shared": booleanType().describe("When true, everyone in the organisation can see it. Only the owner can ever edit or delete it, shared or not."),
4192
+ "ownedByMe": booleanType().describe("Whether the CALLER owns this portfolio \u2014 the client uses it to hide edit and delete controls it must not offer. The owner's identity is deliberately not exposed; a viewer has no need for it and it would be a second place for authorship to leak."),
4193
+ "initiativeIds": arrayType(stringType()).max(updateUserPortfolioResponseInitiativeIdsMax)
4194
+ }).describe("A saved named subset of initiatives, owned by whoever created it. Private to its owner unless `shared` is set. The list endpoint returns the caller's own portfolios plus the organisation's shared ones; a portfolio whose owner has been erased is returned only if it was shared, so a GDPR erasure cannot publish someone's private views.");
4184
4195
  var DeleteUserPortfolioParams = objectType({
4185
4196
  "id": coerce.string().uuid()
4186
4197
  });
4198
+ var listSnapshotsResponseBusinessUnitsMax = 1e3;
4199
+ var listSnapshotsResponseInitiativesItemNameMax = 200;
4200
+ var listSnapshotsResponseInitiativesItemExternalIdMax = 200;
4201
+ var listSnapshotsResponseInitiativesItemBusinessUnitMax = 200;
4202
+ var listSnapshotsResponseInitiativesItemOwnerMax = 200;
4203
+ var listSnapshotsResponseInitiativesItemDescriptionMax = 1e4;
4204
+ var listSnapshotsResponseInitiativesItemAiCategoryMax = 200;
4205
+ var listSnapshotsResponseInitiativesItemTagsItemMax = 200;
4206
+ var listSnapshotsResponseInitiativesItemTagsMax = 1e3;
4207
+ var listSnapshotsResponseInitiativesItemDocsUrlMax = 2e3;
4208
+ var listSnapshotsResponseInitiativesItemPmUrlMax = 2e3;
4209
+ var listSnapshotsResponseInitiativesItemDecisionLogItemOwnerMax = 200;
4210
+ var listSnapshotsResponseInitiativesItemDecisionLogItemRationaleMax = 1e4;
4211
+ var listSnapshotsResponseInitiativesItemDecisionLogMax = 1e3;
4212
+ var listSnapshotsResponseInitiativesItemStatusReportsItemAuthorMax = 200;
4213
+ var listSnapshotsResponseInitiativesItemStatusReportsItemScopeCommentMax = 1e4;
4214
+ var listSnapshotsResponseInitiativesItemStatusReportsItemTimelineCommentMax = 1e4;
4215
+ var listSnapshotsResponseInitiativesItemStatusReportsItemBudgetCommentMax = 1e4;
4216
+ var listSnapshotsResponseInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
4217
+ var listSnapshotsResponseInitiativesItemStatusReportsItemSummaryMax = 1e4;
4218
+ var listSnapshotsResponseInitiativesItemStatusReportsMax = 1e3;
4219
+ var listSnapshotsResponseInitiativesItemDependsOnMax = 1e3;
4220
+ var listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
4221
+ var listSnapshotsResponseInitiativesItemRequiredSkillsMax = 1e3;
4222
+ var listSnapshotsResponseInitiativesItemDpiaUrlMax = 2e3;
4223
+ var listSnapshotsResponseInitiativesItemModelCardUrlMax = 2e3;
4224
+ var listSnapshotsResponseInitiativesItemProhibitedOverrideMax = 2e3;
4225
+ var listSnapshotsResponseInitiativesItemGateEvidenceNoteMax = 1e4;
4226
+ var listSnapshotsResponseInitiativesItemAiActProhibitedPracticesItemMax = 200;
4227
+ var listSnapshotsResponseInitiativesItemAiActProhibitedPracticesMax = 100;
4228
+ var listSnapshotsResponseInitiativesItemAiActArt50FlagsItemMax = 200;
4229
+ var listSnapshotsResponseInitiativesItemAiActArt50FlagsMax = 100;
4230
+ var listSnapshotsResponseInitiativesItemAiActClassificationRationaleMax = 1e4;
4231
+ var listSnapshotsResponseInitiativesItemAiActArtifactsOwnerMax = 200;
4232
+ var listSnapshotsResponseInitiativesItemAiActArtifactsLinkMax = 2e3;
4233
+ var listSnapshotsResponseInitiativesItemAiActArtifactsNoteMax = 1e4;
4234
+ var listSnapshotsResponseInitiativesItemAiActObligationsOwnerMax = 200;
4235
+ var listSnapshotsResponseInitiativesItemAiActObligationsEvidenceLinkMax = 2e3;
4236
+ var listSnapshotsResponseInitiativesItemAiActObligationsApproverMax = 200;
4237
+ var listSnapshotsResponseInitiativesItemAiActIncidentsItemDescriptionMax = 1e4;
4238
+ var listSnapshotsResponseInitiativesItemAiActIncidentsItemAuthorityRefMax = 2e3;
4239
+ var listSnapshotsResponseInitiativesItemAiActIncidentsItemOwnerMax = 200;
4240
+ var listSnapshotsResponseInitiativesItemAiActIncidentsItemRootCauseMax = 1e4;
4241
+ var listSnapshotsResponseInitiativesItemAiActIncidentsItemCorrectiveActionsMax = 1e4;
4242
+ var listSnapshotsResponseInitiativesItemAiActIncidentsMax = 1e3;
4187
4243
  var ListSnapshotsResponseItem = objectType({
4188
4244
  "id": stringType().uuid(),
4189
4245
  "label": stringType(),
4190
4246
  "notes": stringType(),
4191
4247
  "currency": stringType(),
4192
- "businessUnits": arrayType(stringType()),
4248
+ "businessUnits": arrayType(stringType()).max(listSnapshotsResponseBusinessUnitsMax),
4193
4249
  "initiatives": arrayType(objectType({
4194
4250
  "id": stringType(),
4195
- "name": stringType(),
4196
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4197
- "businessUnit": stringType(),
4198
- "owner": stringType(),
4199
- "description": stringType(),
4251
+ "name": stringType().max(listSnapshotsResponseInitiativesItemNameMax),
4252
+ "externalId": stringType().max(listSnapshotsResponseInitiativesItemExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4253
+ "businessUnit": stringType().max(listSnapshotsResponseInitiativesItemBusinessUnitMax),
4254
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemOwnerMax),
4255
+ "description": stringType().max(listSnapshotsResponseInitiativesItemDescriptionMax),
4200
4256
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
4201
4257
  "timelineStart": stringType(),
4202
4258
  "timelineEnd": stringType(),
@@ -4204,10 +4260,10 @@ var ListSnapshotsResponseItem = objectType({
4204
4260
  "budgetForwardLooking": numberType().optional(),
4205
4261
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
4206
4262
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
4207
- "aiCategory": stringType(),
4208
- "tags": arrayType(stringType()),
4209
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4210
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4263
+ "aiCategory": stringType().max(listSnapshotsResponseInitiativesItemAiCategoryMax),
4264
+ "tags": arrayType(stringType().max(listSnapshotsResponseInitiativesItemTagsItemMax)).max(listSnapshotsResponseInitiativesItemTagsMax),
4265
+ "docsUrl": stringType().max(listSnapshotsResponseInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4266
+ "pmUrl": stringType().max(listSnapshotsResponseInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4211
4267
  "archived": booleanType(),
4212
4268
  "evaluation": objectType({
4213
4269
  "valueScale": objectType({
@@ -4287,7 +4343,8 @@ var ListSnapshotsResponseItem = objectType({
4287
4343
  "y1Pct": numberType(),
4288
4344
  "y2Pct": numberType()
4289
4345
  }).optional(),
4290
- "discountRatePct": numberType().optional()
4346
+ "discountRatePct": numberType().optional(),
4347
+ "operatingCostAnnual": numberType().optional()
4291
4348
  }).optional(),
4292
4349
  "actuals": objectType({
4293
4350
  "operatingCostAnnual": numberType().optional(),
@@ -4307,48 +4364,49 @@ var ListSnapshotsResponseItem = objectType({
4307
4364
  "id": stringType(),
4308
4365
  "date": stringType(),
4309
4366
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
4310
- "owner": stringType().optional(),
4311
- "rationale": stringType().optional(),
4367
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemDecisionLogItemOwnerMax).optional(),
4368
+ "rationale": stringType().max(listSnapshotsResponseInitiativesItemDecisionLogItemRationaleMax).optional(),
4312
4369
  "createdAt": stringType().optional()
4313
- })).optional(),
4370
+ })).max(listSnapshotsResponseInitiativesItemDecisionLogMax).optional(),
4314
4371
  "statusReports": arrayType(objectType({
4315
4372
  "id": stringType(),
4316
4373
  "date": stringType(),
4317
- "author": stringType().optional(),
4374
+ "author": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemAuthorMax).optional(),
4318
4375
  "scope": objectType({
4319
4376
  "rag": enumType(["green", "yellow", "red"]),
4320
- "comment": stringType().optional()
4377
+ "comment": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemScopeCommentMax).optional()
4321
4378
  }),
4322
4379
  "timeline": objectType({
4323
4380
  "rag": enumType(["green", "yellow", "red"]),
4324
- "comment": stringType().optional()
4381
+ "comment": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemTimelineCommentMax).optional()
4325
4382
  }),
4326
4383
  "budget": objectType({
4327
4384
  "rag": enumType(["green", "yellow", "red"]),
4328
- "comment": stringType().optional()
4385
+ "comment": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemBudgetCommentMax).optional()
4329
4386
  }),
4330
4387
  "skills": objectType({
4331
4388
  "rag": enumType(["green", "yellow", "red"]),
4332
- "comment": stringType().optional()
4389
+ "comment": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemSkillsCommentMax).optional()
4333
4390
  }),
4334
- "summary": stringType().optional()
4335
- })).optional(),
4336
- "dependsOn": arrayType(stringType()),
4391
+ "summary": stringType().max(listSnapshotsResponseInitiativesItemStatusReportsItemSummaryMax).optional()
4392
+ })).max(listSnapshotsResponseInitiativesItemStatusReportsMax).optional(),
4393
+ "dependsOn": arrayType(stringType()).max(listSnapshotsResponseInitiativesItemDependsOnMax),
4337
4394
  "requiredSkills": arrayType(objectType({
4338
4395
  "skillId": stringType(),
4339
- "fte": numberType()
4340
- })).optional(),
4396
+ "fte": numberType(),
4397
+ "runFte": numberType().min(listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin).optional()
4398
+ })).max(listSnapshotsResponseInitiativesItemRequiredSkillsMax).optional(),
4341
4399
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
4342
4400
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
4343
4401
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
4344
- "dpiaUrl": stringType().optional(),
4402
+ "dpiaUrl": stringType().max(listSnapshotsResponseInitiativesItemDpiaUrlMax).optional(),
4345
4403
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
4346
- "modelCardUrl": stringType().optional(),
4347
- "prohibitedOverride": stringType().optional(),
4404
+ "modelCardUrl": stringType().max(listSnapshotsResponseInitiativesItemModelCardUrlMax).optional(),
4405
+ "prohibitedOverride": stringType().max(listSnapshotsResponseInitiativesItemProhibitedOverrideMax).optional(),
4348
4406
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
4349
4407
  "checked": booleanType(),
4350
4408
  "asOfDate": stringType().optional(),
4351
- "note": stringType().optional()
4409
+ "note": stringType().max(listSnapshotsResponseInitiativesItemGateEvidenceNoteMax).optional()
4352
4410
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
4353
4411
  "gateBypassed": booleanType().optional(),
4354
4412
  "aiAct": objectType({
@@ -4364,28 +4422,28 @@ var ListSnapshotsResponseItem = objectType({
4364
4422
  "integratesThirdPartyGpai": booleanType().optional(),
4365
4423
  "upstreamGpaiProvider": stringType().optional(),
4366
4424
  "upstreamGpaiInfoAvailable": booleanType().optional(),
4367
- "prohibitedPractices": arrayType(stringType()),
4368
- "art50Flags": arrayType(stringType()),
4425
+ "prohibitedPractices": arrayType(stringType().max(listSnapshotsResponseInitiativesItemAiActProhibitedPracticesItemMax)).max(listSnapshotsResponseInitiativesItemAiActProhibitedPracticesMax),
4426
+ "art50Flags": arrayType(stringType().max(listSnapshotsResponseInitiativesItemAiActArt50FlagsItemMax)).max(listSnapshotsResponseInitiativesItemAiActArt50FlagsMax),
4369
4427
  "publicSector": booleanType().optional(),
4370
4428
  "establishedOutsideEU": booleanType().optional(),
4371
- "classificationRationale": stringType().optional(),
4429
+ "classificationRationale": stringType().max(listSnapshotsResponseInitiativesItemAiActClassificationRationaleMax).optional(),
4372
4430
  "classificationConfirmed": booleanType().optional(),
4373
4431
  "classificationConfirmedBy": stringType().optional(),
4374
4432
  "classificationConfirmedAt": stringType().optional(),
4375
4433
  "artifacts": recordType(stringType(), objectType({
4376
4434
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
4377
- "owner": stringType().optional(),
4435
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemAiActArtifactsOwnerMax).optional(),
4378
4436
  "lastReviewedAt": stringType().optional(),
4379
- "link": stringType().optional(),
4380
- "note": stringType().optional(),
4437
+ "link": stringType().max(listSnapshotsResponseInitiativesItemAiActArtifactsLinkMax).optional(),
4438
+ "note": stringType().max(listSnapshotsResponseInitiativesItemAiActArtifactsNoteMax).optional(),
4381
4439
  "maxAgeDays": numberType().optional()
4382
4440
  })).optional(),
4383
4441
  "obligations": recordType(stringType(), objectType({
4384
4442
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
4385
- "owner": stringType().optional(),
4443
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemAiActObligationsOwnerMax).optional(),
4386
4444
  "dueDate": stringType().optional(),
4387
- "evidenceLink": stringType().optional(),
4388
- "approver": stringType().optional(),
4445
+ "evidenceLink": stringType().max(listSnapshotsResponseInitiativesItemAiActObligationsEvidenceLinkMax).optional(),
4446
+ "approver": stringType().max(listSnapshotsResponseInitiativesItemAiActObligationsApproverMax).optional(),
4389
4447
  "approvalDate": stringType().optional(),
4390
4448
  "reviewDate": stringType().optional()
4391
4449
  })).optional(),
@@ -4412,16 +4470,16 @@ var ListSnapshotsResponseItem = objectType({
4412
4470
  "occurredAt": stringType(),
4413
4471
  "detectedAt": stringType(),
4414
4472
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
4415
- "description": stringType(),
4473
+ "description": stringType().max(listSnapshotsResponseInitiativesItemAiActIncidentsItemDescriptionMax),
4416
4474
  "status": enumType(["open", "reported", "closed"]),
4417
- "authorityRef": stringType().optional(),
4418
- "owner": stringType().optional(),
4419
- "rootCause": stringType().optional(),
4420
- "correctiveActions": stringType().optional(),
4475
+ "authorityRef": stringType().max(listSnapshotsResponseInitiativesItemAiActIncidentsItemAuthorityRefMax).optional(),
4476
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemAiActIncidentsItemOwnerMax).optional(),
4477
+ "rootCause": stringType().max(listSnapshotsResponseInitiativesItemAiActIncidentsItemRootCauseMax).optional(),
4478
+ "correctiveActions": stringType().max(listSnapshotsResponseInitiativesItemAiActIncidentsItemCorrectiveActionsMax).optional(),
4421
4479
  "reportedAt": stringType().optional(),
4422
4480
  "createdAt": stringType(),
4423
4481
  "updatedAt": stringType()
4424
- })).optional()
4482
+ })).max(listSnapshotsResponseInitiativesItemAiActIncidentsMax).optional()
4425
4483
  }).optional(),
4426
4484
  "createdBy": objectType({
4427
4485
  "userId": stringType().uuid(),
@@ -4437,19 +4495,64 @@ var ListSnapshotsResponseItem = objectType({
4437
4495
  "createdAt": stringType()
4438
4496
  });
4439
4497
  var ListSnapshotsResponse = arrayType(ListSnapshotsResponseItem);
4498
+ var createSnapshotBodyBusinessUnitsMax = 1e3;
4499
+ var createSnapshotBodyInitiativesItemNameMax = 200;
4500
+ var createSnapshotBodyInitiativesItemExternalIdMax = 200;
4501
+ var createSnapshotBodyInitiativesItemBusinessUnitMax = 200;
4502
+ var createSnapshotBodyInitiativesItemOwnerMax = 200;
4503
+ var createSnapshotBodyInitiativesItemDescriptionMax = 1e4;
4504
+ var createSnapshotBodyInitiativesItemAiCategoryMax = 200;
4505
+ var createSnapshotBodyInitiativesItemTagsItemMax = 200;
4506
+ var createSnapshotBodyInitiativesItemTagsMax = 1e3;
4507
+ var createSnapshotBodyInitiativesItemDocsUrlMax = 2e3;
4508
+ var createSnapshotBodyInitiativesItemPmUrlMax = 2e3;
4509
+ var createSnapshotBodyInitiativesItemDecisionLogItemOwnerMax = 200;
4510
+ var createSnapshotBodyInitiativesItemDecisionLogItemRationaleMax = 1e4;
4511
+ var createSnapshotBodyInitiativesItemDecisionLogMax = 1e3;
4512
+ var createSnapshotBodyInitiativesItemStatusReportsItemAuthorMax = 200;
4513
+ var createSnapshotBodyInitiativesItemStatusReportsItemScopeCommentMax = 1e4;
4514
+ var createSnapshotBodyInitiativesItemStatusReportsItemTimelineCommentMax = 1e4;
4515
+ var createSnapshotBodyInitiativesItemStatusReportsItemBudgetCommentMax = 1e4;
4516
+ var createSnapshotBodyInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
4517
+ var createSnapshotBodyInitiativesItemStatusReportsItemSummaryMax = 1e4;
4518
+ var createSnapshotBodyInitiativesItemStatusReportsMax = 1e3;
4519
+ var createSnapshotBodyInitiativesItemDependsOnMax = 1e3;
4520
+ var createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin = 0;
4521
+ var createSnapshotBodyInitiativesItemRequiredSkillsMax = 1e3;
4522
+ var createSnapshotBodyInitiativesItemDpiaUrlMax = 2e3;
4523
+ var createSnapshotBodyInitiativesItemModelCardUrlMax = 2e3;
4524
+ var createSnapshotBodyInitiativesItemProhibitedOverrideMax = 2e3;
4525
+ var createSnapshotBodyInitiativesItemGateEvidenceNoteMax = 1e4;
4526
+ var createSnapshotBodyInitiativesItemAiActProhibitedPracticesItemMax = 200;
4527
+ var createSnapshotBodyInitiativesItemAiActProhibitedPracticesMax = 100;
4528
+ var createSnapshotBodyInitiativesItemAiActArt50FlagsItemMax = 200;
4529
+ var createSnapshotBodyInitiativesItemAiActArt50FlagsMax = 100;
4530
+ var createSnapshotBodyInitiativesItemAiActClassificationRationaleMax = 1e4;
4531
+ var createSnapshotBodyInitiativesItemAiActArtifactsOwnerMax = 200;
4532
+ var createSnapshotBodyInitiativesItemAiActArtifactsLinkMax = 2e3;
4533
+ var createSnapshotBodyInitiativesItemAiActArtifactsNoteMax = 1e4;
4534
+ var createSnapshotBodyInitiativesItemAiActObligationsOwnerMax = 200;
4535
+ var createSnapshotBodyInitiativesItemAiActObligationsEvidenceLinkMax = 2e3;
4536
+ var createSnapshotBodyInitiativesItemAiActObligationsApproverMax = 200;
4537
+ var createSnapshotBodyInitiativesItemAiActIncidentsItemDescriptionMax = 1e4;
4538
+ var createSnapshotBodyInitiativesItemAiActIncidentsItemAuthorityRefMax = 2e3;
4539
+ var createSnapshotBodyInitiativesItemAiActIncidentsItemOwnerMax = 200;
4540
+ var createSnapshotBodyInitiativesItemAiActIncidentsItemRootCauseMax = 1e4;
4541
+ var createSnapshotBodyInitiativesItemAiActIncidentsItemCorrectiveActionsMax = 1e4;
4542
+ var createSnapshotBodyInitiativesItemAiActIncidentsMax = 1e3;
4440
4543
  var CreateSnapshotBody = objectType({
4441
4544
  "id": stringType().uuid().optional().describe("Optional client-generated id, persisted as the row's primary key (parity with skills/initiatives/portfolios). Without it the client's local snapshot id and the server row diverge, so sync deletes and the poll merge cannot line up by id."),
4442
4545
  "label": stringType(),
4443
4546
  "notes": stringType(),
4444
4547
  "currency": stringType(),
4445
- "businessUnits": arrayType(stringType()),
4548
+ "businessUnits": arrayType(stringType()).max(createSnapshotBodyBusinessUnitsMax),
4446
4549
  "initiatives": arrayType(objectType({
4447
4550
  "id": stringType(),
4448
- "name": stringType(),
4449
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4450
- "businessUnit": stringType(),
4451
- "owner": stringType(),
4452
- "description": stringType(),
4551
+ "name": stringType().max(createSnapshotBodyInitiativesItemNameMax),
4552
+ "externalId": stringType().max(createSnapshotBodyInitiativesItemExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4553
+ "businessUnit": stringType().max(createSnapshotBodyInitiativesItemBusinessUnitMax),
4554
+ "owner": stringType().max(createSnapshotBodyInitiativesItemOwnerMax),
4555
+ "description": stringType().max(createSnapshotBodyInitiativesItemDescriptionMax),
4453
4556
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
4454
4557
  "timelineStart": stringType(),
4455
4558
  "timelineEnd": stringType(),
@@ -4457,10 +4560,10 @@ var CreateSnapshotBody = objectType({
4457
4560
  "budgetForwardLooking": numberType().optional(),
4458
4561
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
4459
4562
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
4460
- "aiCategory": stringType(),
4461
- "tags": arrayType(stringType()),
4462
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4463
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4563
+ "aiCategory": stringType().max(createSnapshotBodyInitiativesItemAiCategoryMax),
4564
+ "tags": arrayType(stringType().max(createSnapshotBodyInitiativesItemTagsItemMax)).max(createSnapshotBodyInitiativesItemTagsMax),
4565
+ "docsUrl": stringType().max(createSnapshotBodyInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4566
+ "pmUrl": stringType().max(createSnapshotBodyInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4464
4567
  "archived": booleanType(),
4465
4568
  "evaluation": objectType({
4466
4569
  "valueScale": objectType({
@@ -4540,7 +4643,8 @@ var CreateSnapshotBody = objectType({
4540
4643
  "y1Pct": numberType(),
4541
4644
  "y2Pct": numberType()
4542
4645
  }).optional(),
4543
- "discountRatePct": numberType().optional()
4646
+ "discountRatePct": numberType().optional(),
4647
+ "operatingCostAnnual": numberType().optional()
4544
4648
  }).optional(),
4545
4649
  "actuals": objectType({
4546
4650
  "operatingCostAnnual": numberType().optional(),
@@ -4560,48 +4664,49 @@ var CreateSnapshotBody = objectType({
4560
4664
  "id": stringType(),
4561
4665
  "date": stringType(),
4562
4666
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
4563
- "owner": stringType().optional(),
4564
- "rationale": stringType().optional(),
4667
+ "owner": stringType().max(createSnapshotBodyInitiativesItemDecisionLogItemOwnerMax).optional(),
4668
+ "rationale": stringType().max(createSnapshotBodyInitiativesItemDecisionLogItemRationaleMax).optional(),
4565
4669
  "createdAt": stringType().optional()
4566
- })).optional(),
4670
+ })).max(createSnapshotBodyInitiativesItemDecisionLogMax).optional(),
4567
4671
  "statusReports": arrayType(objectType({
4568
4672
  "id": stringType(),
4569
4673
  "date": stringType(),
4570
- "author": stringType().optional(),
4674
+ "author": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemAuthorMax).optional(),
4571
4675
  "scope": objectType({
4572
4676
  "rag": enumType(["green", "yellow", "red"]),
4573
- "comment": stringType().optional()
4677
+ "comment": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemScopeCommentMax).optional()
4574
4678
  }),
4575
4679
  "timeline": objectType({
4576
4680
  "rag": enumType(["green", "yellow", "red"]),
4577
- "comment": stringType().optional()
4681
+ "comment": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemTimelineCommentMax).optional()
4578
4682
  }),
4579
4683
  "budget": objectType({
4580
4684
  "rag": enumType(["green", "yellow", "red"]),
4581
- "comment": stringType().optional()
4685
+ "comment": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemBudgetCommentMax).optional()
4582
4686
  }),
4583
4687
  "skills": objectType({
4584
4688
  "rag": enumType(["green", "yellow", "red"]),
4585
- "comment": stringType().optional()
4689
+ "comment": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemSkillsCommentMax).optional()
4586
4690
  }),
4587
- "summary": stringType().optional()
4588
- })).optional(),
4589
- "dependsOn": arrayType(stringType()),
4691
+ "summary": stringType().max(createSnapshotBodyInitiativesItemStatusReportsItemSummaryMax).optional()
4692
+ })).max(createSnapshotBodyInitiativesItemStatusReportsMax).optional(),
4693
+ "dependsOn": arrayType(stringType()).max(createSnapshotBodyInitiativesItemDependsOnMax),
4590
4694
  "requiredSkills": arrayType(objectType({
4591
4695
  "skillId": stringType(),
4592
- "fte": numberType()
4593
- })).optional(),
4696
+ "fte": numberType(),
4697
+ "runFte": numberType().min(createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin).optional()
4698
+ })).max(createSnapshotBodyInitiativesItemRequiredSkillsMax).optional(),
4594
4699
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
4595
4700
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
4596
4701
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
4597
- "dpiaUrl": stringType().optional(),
4702
+ "dpiaUrl": stringType().max(createSnapshotBodyInitiativesItemDpiaUrlMax).optional(),
4598
4703
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
4599
- "modelCardUrl": stringType().optional(),
4600
- "prohibitedOverride": stringType().optional(),
4704
+ "modelCardUrl": stringType().max(createSnapshotBodyInitiativesItemModelCardUrlMax).optional(),
4705
+ "prohibitedOverride": stringType().max(createSnapshotBodyInitiativesItemProhibitedOverrideMax).optional(),
4601
4706
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
4602
4707
  "checked": booleanType(),
4603
4708
  "asOfDate": stringType().optional(),
4604
- "note": stringType().optional()
4709
+ "note": stringType().max(createSnapshotBodyInitiativesItemGateEvidenceNoteMax).optional()
4605
4710
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
4606
4711
  "gateBypassed": booleanType().optional(),
4607
4712
  "aiAct": objectType({
@@ -4617,28 +4722,28 @@ var CreateSnapshotBody = objectType({
4617
4722
  "integratesThirdPartyGpai": booleanType().optional(),
4618
4723
  "upstreamGpaiProvider": stringType().optional(),
4619
4724
  "upstreamGpaiInfoAvailable": booleanType().optional(),
4620
- "prohibitedPractices": arrayType(stringType()),
4621
- "art50Flags": arrayType(stringType()),
4725
+ "prohibitedPractices": arrayType(stringType().max(createSnapshotBodyInitiativesItemAiActProhibitedPracticesItemMax)).max(createSnapshotBodyInitiativesItemAiActProhibitedPracticesMax),
4726
+ "art50Flags": arrayType(stringType().max(createSnapshotBodyInitiativesItemAiActArt50FlagsItemMax)).max(createSnapshotBodyInitiativesItemAiActArt50FlagsMax),
4622
4727
  "publicSector": booleanType().optional(),
4623
4728
  "establishedOutsideEU": booleanType().optional(),
4624
- "classificationRationale": stringType().optional(),
4729
+ "classificationRationale": stringType().max(createSnapshotBodyInitiativesItemAiActClassificationRationaleMax).optional(),
4625
4730
  "classificationConfirmed": booleanType().optional(),
4626
4731
  "classificationConfirmedBy": stringType().optional(),
4627
4732
  "classificationConfirmedAt": stringType().optional(),
4628
4733
  "artifacts": recordType(stringType(), objectType({
4629
4734
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
4630
- "owner": stringType().optional(),
4735
+ "owner": stringType().max(createSnapshotBodyInitiativesItemAiActArtifactsOwnerMax).optional(),
4631
4736
  "lastReviewedAt": stringType().optional(),
4632
- "link": stringType().optional(),
4633
- "note": stringType().optional(),
4737
+ "link": stringType().max(createSnapshotBodyInitiativesItemAiActArtifactsLinkMax).optional(),
4738
+ "note": stringType().max(createSnapshotBodyInitiativesItemAiActArtifactsNoteMax).optional(),
4634
4739
  "maxAgeDays": numberType().optional()
4635
4740
  })).optional(),
4636
4741
  "obligations": recordType(stringType(), objectType({
4637
4742
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
4638
- "owner": stringType().optional(),
4743
+ "owner": stringType().max(createSnapshotBodyInitiativesItemAiActObligationsOwnerMax).optional(),
4639
4744
  "dueDate": stringType().optional(),
4640
- "evidenceLink": stringType().optional(),
4641
- "approver": stringType().optional(),
4745
+ "evidenceLink": stringType().max(createSnapshotBodyInitiativesItemAiActObligationsEvidenceLinkMax).optional(),
4746
+ "approver": stringType().max(createSnapshotBodyInitiativesItemAiActObligationsApproverMax).optional(),
4642
4747
  "approvalDate": stringType().optional(),
4643
4748
  "reviewDate": stringType().optional()
4644
4749
  })).optional(),
@@ -4665,16 +4770,16 @@ var CreateSnapshotBody = objectType({
4665
4770
  "occurredAt": stringType(),
4666
4771
  "detectedAt": stringType(),
4667
4772
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
4668
- "description": stringType(),
4773
+ "description": stringType().max(createSnapshotBodyInitiativesItemAiActIncidentsItemDescriptionMax),
4669
4774
  "status": enumType(["open", "reported", "closed"]),
4670
- "authorityRef": stringType().optional(),
4671
- "owner": stringType().optional(),
4672
- "rootCause": stringType().optional(),
4673
- "correctiveActions": stringType().optional(),
4775
+ "authorityRef": stringType().max(createSnapshotBodyInitiativesItemAiActIncidentsItemAuthorityRefMax).optional(),
4776
+ "owner": stringType().max(createSnapshotBodyInitiativesItemAiActIncidentsItemOwnerMax).optional(),
4777
+ "rootCause": stringType().max(createSnapshotBodyInitiativesItemAiActIncidentsItemRootCauseMax).optional(),
4778
+ "correctiveActions": stringType().max(createSnapshotBodyInitiativesItemAiActIncidentsItemCorrectiveActionsMax).optional(),
4674
4779
  "reportedAt": stringType().optional(),
4675
4780
  "createdAt": stringType(),
4676
4781
  "updatedAt": stringType()
4677
- })).optional()
4782
+ })).max(createSnapshotBodyInitiativesItemAiActIncidentsMax).optional()
4678
4783
  }).optional(),
4679
4784
  "createdBy": objectType({
4680
4785
  "userId": stringType().uuid(),
@@ -4686,7 +4791,8 @@ var CreateSnapshotBody = objectType({
4686
4791
  }).optional().describe("Display reference to the local user who created / last edited a record. Server-assigned from the authenticated session \u2014 never taken from the request body."),
4687
4792
  "createdAt": stringType(),
4688
4793
  "updatedAt": stringType()
4689
- }))
4794
+ })),
4795
+ "createdAt": stringType().optional().describe("Optional original creation timestamp (ISO 8601). Persisted when parseable, so a backup restore keeps each snapshot's real date instead of collapsing the whole timeline onto the restore date (and the client/server createdAt mismatch stops re-triggering a no-op rename on every sync). Unparseable or absent \u2014 the server stamps now, as before.")
4690
4796
  });
4691
4797
  var RenameSnapshotParams = objectType({
4692
4798
  "id": coerce.string().uuid()
@@ -4695,19 +4801,64 @@ var RenameSnapshotBody = objectType({
4695
4801
  "label": stringType(),
4696
4802
  "notes": stringType().optional()
4697
4803
  });
4804
+ var renameSnapshotResponseBusinessUnitsMax = 1e3;
4805
+ var renameSnapshotResponseInitiativesItemNameMax = 200;
4806
+ var renameSnapshotResponseInitiativesItemExternalIdMax = 200;
4807
+ var renameSnapshotResponseInitiativesItemBusinessUnitMax = 200;
4808
+ var renameSnapshotResponseInitiativesItemOwnerMax = 200;
4809
+ var renameSnapshotResponseInitiativesItemDescriptionMax = 1e4;
4810
+ var renameSnapshotResponseInitiativesItemAiCategoryMax = 200;
4811
+ var renameSnapshotResponseInitiativesItemTagsItemMax = 200;
4812
+ var renameSnapshotResponseInitiativesItemTagsMax = 1e3;
4813
+ var renameSnapshotResponseInitiativesItemDocsUrlMax = 2e3;
4814
+ var renameSnapshotResponseInitiativesItemPmUrlMax = 2e3;
4815
+ var renameSnapshotResponseInitiativesItemDecisionLogItemOwnerMax = 200;
4816
+ var renameSnapshotResponseInitiativesItemDecisionLogItemRationaleMax = 1e4;
4817
+ var renameSnapshotResponseInitiativesItemDecisionLogMax = 1e3;
4818
+ var renameSnapshotResponseInitiativesItemStatusReportsItemAuthorMax = 200;
4819
+ var renameSnapshotResponseInitiativesItemStatusReportsItemScopeCommentMax = 1e4;
4820
+ var renameSnapshotResponseInitiativesItemStatusReportsItemTimelineCommentMax = 1e4;
4821
+ var renameSnapshotResponseInitiativesItemStatusReportsItemBudgetCommentMax = 1e4;
4822
+ var renameSnapshotResponseInitiativesItemStatusReportsItemSkillsCommentMax = 1e4;
4823
+ var renameSnapshotResponseInitiativesItemStatusReportsItemSummaryMax = 1e4;
4824
+ var renameSnapshotResponseInitiativesItemStatusReportsMax = 1e3;
4825
+ var renameSnapshotResponseInitiativesItemDependsOnMax = 1e3;
4826
+ var renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
4827
+ var renameSnapshotResponseInitiativesItemRequiredSkillsMax = 1e3;
4828
+ var renameSnapshotResponseInitiativesItemDpiaUrlMax = 2e3;
4829
+ var renameSnapshotResponseInitiativesItemModelCardUrlMax = 2e3;
4830
+ var renameSnapshotResponseInitiativesItemProhibitedOverrideMax = 2e3;
4831
+ var renameSnapshotResponseInitiativesItemGateEvidenceNoteMax = 1e4;
4832
+ var renameSnapshotResponseInitiativesItemAiActProhibitedPracticesItemMax = 200;
4833
+ var renameSnapshotResponseInitiativesItemAiActProhibitedPracticesMax = 100;
4834
+ var renameSnapshotResponseInitiativesItemAiActArt50FlagsItemMax = 200;
4835
+ var renameSnapshotResponseInitiativesItemAiActArt50FlagsMax = 100;
4836
+ var renameSnapshotResponseInitiativesItemAiActClassificationRationaleMax = 1e4;
4837
+ var renameSnapshotResponseInitiativesItemAiActArtifactsOwnerMax = 200;
4838
+ var renameSnapshotResponseInitiativesItemAiActArtifactsLinkMax = 2e3;
4839
+ var renameSnapshotResponseInitiativesItemAiActArtifactsNoteMax = 1e4;
4840
+ var renameSnapshotResponseInitiativesItemAiActObligationsOwnerMax = 200;
4841
+ var renameSnapshotResponseInitiativesItemAiActObligationsEvidenceLinkMax = 2e3;
4842
+ var renameSnapshotResponseInitiativesItemAiActObligationsApproverMax = 200;
4843
+ var renameSnapshotResponseInitiativesItemAiActIncidentsItemDescriptionMax = 1e4;
4844
+ var renameSnapshotResponseInitiativesItemAiActIncidentsItemAuthorityRefMax = 2e3;
4845
+ var renameSnapshotResponseInitiativesItemAiActIncidentsItemOwnerMax = 200;
4846
+ var renameSnapshotResponseInitiativesItemAiActIncidentsItemRootCauseMax = 1e4;
4847
+ var renameSnapshotResponseInitiativesItemAiActIncidentsItemCorrectiveActionsMax = 1e4;
4848
+ var renameSnapshotResponseInitiativesItemAiActIncidentsMax = 1e3;
4698
4849
  var RenameSnapshotResponse = objectType({
4699
4850
  "id": stringType().uuid(),
4700
4851
  "label": stringType(),
4701
4852
  "notes": stringType(),
4702
4853
  "currency": stringType(),
4703
- "businessUnits": arrayType(stringType()),
4854
+ "businessUnits": arrayType(stringType()).max(renameSnapshotResponseBusinessUnitsMax),
4704
4855
  "initiatives": arrayType(objectType({
4705
4856
  "id": stringType(),
4706
- "name": stringType(),
4707
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4708
- "businessUnit": stringType(),
4709
- "owner": stringType(),
4710
- "description": stringType(),
4857
+ "name": stringType().max(renameSnapshotResponseInitiativesItemNameMax),
4858
+ "externalId": stringType().max(renameSnapshotResponseInitiativesItemExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4859
+ "businessUnit": stringType().max(renameSnapshotResponseInitiativesItemBusinessUnitMax),
4860
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemOwnerMax),
4861
+ "description": stringType().max(renameSnapshotResponseInitiativesItemDescriptionMax),
4711
4862
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
4712
4863
  "timelineStart": stringType(),
4713
4864
  "timelineEnd": stringType(),
@@ -4715,10 +4866,10 @@ var RenameSnapshotResponse = objectType({
4715
4866
  "budgetForwardLooking": numberType().optional(),
4716
4867
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
4717
4868
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
4718
- "aiCategory": stringType(),
4719
- "tags": arrayType(stringType()),
4720
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4721
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4869
+ "aiCategory": stringType().max(renameSnapshotResponseInitiativesItemAiCategoryMax),
4870
+ "tags": arrayType(stringType().max(renameSnapshotResponseInitiativesItemTagsItemMax)).max(renameSnapshotResponseInitiativesItemTagsMax),
4871
+ "docsUrl": stringType().max(renameSnapshotResponseInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4872
+ "pmUrl": stringType().max(renameSnapshotResponseInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4722
4873
  "archived": booleanType(),
4723
4874
  "evaluation": objectType({
4724
4875
  "valueScale": objectType({
@@ -4798,7 +4949,8 @@ var RenameSnapshotResponse = objectType({
4798
4949
  "y1Pct": numberType(),
4799
4950
  "y2Pct": numberType()
4800
4951
  }).optional(),
4801
- "discountRatePct": numberType().optional()
4952
+ "discountRatePct": numberType().optional(),
4953
+ "operatingCostAnnual": numberType().optional()
4802
4954
  }).optional(),
4803
4955
  "actuals": objectType({
4804
4956
  "operatingCostAnnual": numberType().optional(),
@@ -4818,48 +4970,49 @@ var RenameSnapshotResponse = objectType({
4818
4970
  "id": stringType(),
4819
4971
  "date": stringType(),
4820
4972
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
4821
- "owner": stringType().optional(),
4822
- "rationale": stringType().optional(),
4973
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemDecisionLogItemOwnerMax).optional(),
4974
+ "rationale": stringType().max(renameSnapshotResponseInitiativesItemDecisionLogItemRationaleMax).optional(),
4823
4975
  "createdAt": stringType().optional()
4824
- })).optional(),
4976
+ })).max(renameSnapshotResponseInitiativesItemDecisionLogMax).optional(),
4825
4977
  "statusReports": arrayType(objectType({
4826
4978
  "id": stringType(),
4827
4979
  "date": stringType(),
4828
- "author": stringType().optional(),
4980
+ "author": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemAuthorMax).optional(),
4829
4981
  "scope": objectType({
4830
4982
  "rag": enumType(["green", "yellow", "red"]),
4831
- "comment": stringType().optional()
4983
+ "comment": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemScopeCommentMax).optional()
4832
4984
  }),
4833
4985
  "timeline": objectType({
4834
4986
  "rag": enumType(["green", "yellow", "red"]),
4835
- "comment": stringType().optional()
4987
+ "comment": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemTimelineCommentMax).optional()
4836
4988
  }),
4837
4989
  "budget": objectType({
4838
4990
  "rag": enumType(["green", "yellow", "red"]),
4839
- "comment": stringType().optional()
4991
+ "comment": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemBudgetCommentMax).optional()
4840
4992
  }),
4841
4993
  "skills": objectType({
4842
4994
  "rag": enumType(["green", "yellow", "red"]),
4843
- "comment": stringType().optional()
4995
+ "comment": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemSkillsCommentMax).optional()
4844
4996
  }),
4845
- "summary": stringType().optional()
4846
- })).optional(),
4847
- "dependsOn": arrayType(stringType()),
4997
+ "summary": stringType().max(renameSnapshotResponseInitiativesItemStatusReportsItemSummaryMax).optional()
4998
+ })).max(renameSnapshotResponseInitiativesItemStatusReportsMax).optional(),
4999
+ "dependsOn": arrayType(stringType()).max(renameSnapshotResponseInitiativesItemDependsOnMax),
4848
5000
  "requiredSkills": arrayType(objectType({
4849
5001
  "skillId": stringType(),
4850
- "fte": numberType()
4851
- })).optional(),
5002
+ "fte": numberType(),
5003
+ "runFte": numberType().min(renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin).optional()
5004
+ })).max(renameSnapshotResponseInitiativesItemRequiredSkillsMax).optional(),
4852
5005
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
4853
5006
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
4854
5007
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
4855
- "dpiaUrl": stringType().optional(),
5008
+ "dpiaUrl": stringType().max(renameSnapshotResponseInitiativesItemDpiaUrlMax).optional(),
4856
5009
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
4857
- "modelCardUrl": stringType().optional(),
4858
- "prohibitedOverride": stringType().optional(),
5010
+ "modelCardUrl": stringType().max(renameSnapshotResponseInitiativesItemModelCardUrlMax).optional(),
5011
+ "prohibitedOverride": stringType().max(renameSnapshotResponseInitiativesItemProhibitedOverrideMax).optional(),
4859
5012
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
4860
5013
  "checked": booleanType(),
4861
5014
  "asOfDate": stringType().optional(),
4862
- "note": stringType().optional()
5015
+ "note": stringType().max(renameSnapshotResponseInitiativesItemGateEvidenceNoteMax).optional()
4863
5016
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
4864
5017
  "gateBypassed": booleanType().optional(),
4865
5018
  "aiAct": objectType({
@@ -4875,28 +5028,28 @@ var RenameSnapshotResponse = objectType({
4875
5028
  "integratesThirdPartyGpai": booleanType().optional(),
4876
5029
  "upstreamGpaiProvider": stringType().optional(),
4877
5030
  "upstreamGpaiInfoAvailable": booleanType().optional(),
4878
- "prohibitedPractices": arrayType(stringType()),
4879
- "art50Flags": arrayType(stringType()),
5031
+ "prohibitedPractices": arrayType(stringType().max(renameSnapshotResponseInitiativesItemAiActProhibitedPracticesItemMax)).max(renameSnapshotResponseInitiativesItemAiActProhibitedPracticesMax),
5032
+ "art50Flags": arrayType(stringType().max(renameSnapshotResponseInitiativesItemAiActArt50FlagsItemMax)).max(renameSnapshotResponseInitiativesItemAiActArt50FlagsMax),
4880
5033
  "publicSector": booleanType().optional(),
4881
5034
  "establishedOutsideEU": booleanType().optional(),
4882
- "classificationRationale": stringType().optional(),
5035
+ "classificationRationale": stringType().max(renameSnapshotResponseInitiativesItemAiActClassificationRationaleMax).optional(),
4883
5036
  "classificationConfirmed": booleanType().optional(),
4884
5037
  "classificationConfirmedBy": stringType().optional(),
4885
5038
  "classificationConfirmedAt": stringType().optional(),
4886
5039
  "artifacts": recordType(stringType(), objectType({
4887
5040
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
4888
- "owner": stringType().optional(),
5041
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemAiActArtifactsOwnerMax).optional(),
4889
5042
  "lastReviewedAt": stringType().optional(),
4890
- "link": stringType().optional(),
4891
- "note": stringType().optional(),
5043
+ "link": stringType().max(renameSnapshotResponseInitiativesItemAiActArtifactsLinkMax).optional(),
5044
+ "note": stringType().max(renameSnapshotResponseInitiativesItemAiActArtifactsNoteMax).optional(),
4892
5045
  "maxAgeDays": numberType().optional()
4893
5046
  })).optional(),
4894
5047
  "obligations": recordType(stringType(), objectType({
4895
5048
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
4896
- "owner": stringType().optional(),
5049
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemAiActObligationsOwnerMax).optional(),
4897
5050
  "dueDate": stringType().optional(),
4898
- "evidenceLink": stringType().optional(),
4899
- "approver": stringType().optional(),
5051
+ "evidenceLink": stringType().max(renameSnapshotResponseInitiativesItemAiActObligationsEvidenceLinkMax).optional(),
5052
+ "approver": stringType().max(renameSnapshotResponseInitiativesItemAiActObligationsApproverMax).optional(),
4900
5053
  "approvalDate": stringType().optional(),
4901
5054
  "reviewDate": stringType().optional()
4902
5055
  })).optional(),
@@ -4923,16 +5076,16 @@ var RenameSnapshotResponse = objectType({
4923
5076
  "occurredAt": stringType(),
4924
5077
  "detectedAt": stringType(),
4925
5078
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
4926
- "description": stringType(),
5079
+ "description": stringType().max(renameSnapshotResponseInitiativesItemAiActIncidentsItemDescriptionMax),
4927
5080
  "status": enumType(["open", "reported", "closed"]),
4928
- "authorityRef": stringType().optional(),
4929
- "owner": stringType().optional(),
4930
- "rootCause": stringType().optional(),
4931
- "correctiveActions": stringType().optional(),
5081
+ "authorityRef": stringType().max(renameSnapshotResponseInitiativesItemAiActIncidentsItemAuthorityRefMax).optional(),
5082
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemAiActIncidentsItemOwnerMax).optional(),
5083
+ "rootCause": stringType().max(renameSnapshotResponseInitiativesItemAiActIncidentsItemRootCauseMax).optional(),
5084
+ "correctiveActions": stringType().max(renameSnapshotResponseInitiativesItemAiActIncidentsItemCorrectiveActionsMax).optional(),
4932
5085
  "reportedAt": stringType().optional(),
4933
5086
  "createdAt": stringType(),
4934
5087
  "updatedAt": stringType()
4935
- })).optional()
5088
+ })).max(renameSnapshotResponseInitiativesItemAiActIncidentsMax).optional()
4936
5089
  }).optional(),
4937
5090
  "createdBy": objectType({
4938
5091
  "userId": stringType().uuid(),
@@ -4950,13 +5103,57 @@ var RenameSnapshotResponse = objectType({
4950
5103
  var DeleteSnapshotParams = objectType({
4951
5104
  "id": coerce.string().uuid()
4952
5105
  });
5106
+ var listInitiativesResponseNameMax = 200;
5107
+ var listInitiativesResponseExternalIdMax = 200;
5108
+ var listInitiativesResponseBusinessUnitMax = 200;
5109
+ var listInitiativesResponseOwnerMax = 200;
5110
+ var listInitiativesResponseDescriptionMax = 1e4;
5111
+ var listInitiativesResponseAiCategoryMax = 200;
5112
+ var listInitiativesResponseTagsItemMax = 200;
5113
+ var listInitiativesResponseTagsMax = 1e3;
5114
+ var listInitiativesResponseDocsUrlMax = 2e3;
5115
+ var listInitiativesResponsePmUrlMax = 2e3;
5116
+ var listInitiativesResponseDecisionLogItemOwnerMax = 200;
5117
+ var listInitiativesResponseDecisionLogItemRationaleMax = 1e4;
5118
+ var listInitiativesResponseDecisionLogMax = 1e3;
5119
+ var listInitiativesResponseStatusReportsItemAuthorMax = 200;
5120
+ var listInitiativesResponseStatusReportsItemScopeCommentMax = 1e4;
5121
+ var listInitiativesResponseStatusReportsItemTimelineCommentMax = 1e4;
5122
+ var listInitiativesResponseStatusReportsItemBudgetCommentMax = 1e4;
5123
+ var listInitiativesResponseStatusReportsItemSkillsCommentMax = 1e4;
5124
+ var listInitiativesResponseStatusReportsItemSummaryMax = 1e4;
5125
+ var listInitiativesResponseStatusReportsMax = 1e3;
5126
+ var listInitiativesResponseDependsOnMax = 1e3;
5127
+ var listInitiativesResponseRequiredSkillsItemRunFteMin = 0;
5128
+ var listInitiativesResponseRequiredSkillsMax = 1e3;
5129
+ var listInitiativesResponseDpiaUrlMax = 2e3;
5130
+ var listInitiativesResponseModelCardUrlMax = 2e3;
5131
+ var listInitiativesResponseProhibitedOverrideMax = 2e3;
5132
+ var listInitiativesResponseGateEvidenceNoteMax = 1e4;
5133
+ var listInitiativesResponseAiActProhibitedPracticesItemMax = 200;
5134
+ var listInitiativesResponseAiActProhibitedPracticesMax = 100;
5135
+ var listInitiativesResponseAiActArt50FlagsItemMax = 200;
5136
+ var listInitiativesResponseAiActArt50FlagsMax = 100;
5137
+ var listInitiativesResponseAiActClassificationRationaleMax = 1e4;
5138
+ var listInitiativesResponseAiActArtifactsOwnerMax = 200;
5139
+ var listInitiativesResponseAiActArtifactsLinkMax = 2e3;
5140
+ var listInitiativesResponseAiActArtifactsNoteMax = 1e4;
5141
+ var listInitiativesResponseAiActObligationsOwnerMax = 200;
5142
+ var listInitiativesResponseAiActObligationsEvidenceLinkMax = 2e3;
5143
+ var listInitiativesResponseAiActObligationsApproverMax = 200;
5144
+ var listInitiativesResponseAiActIncidentsItemDescriptionMax = 1e4;
5145
+ var listInitiativesResponseAiActIncidentsItemAuthorityRefMax = 2e3;
5146
+ var listInitiativesResponseAiActIncidentsItemOwnerMax = 200;
5147
+ var listInitiativesResponseAiActIncidentsItemRootCauseMax = 1e4;
5148
+ var listInitiativesResponseAiActIncidentsItemCorrectiveActionsMax = 1e4;
5149
+ var listInitiativesResponseAiActIncidentsMax = 1e3;
4953
5150
  var ListInitiativesResponseItem = objectType({
4954
5151
  "id": stringType(),
4955
- "name": stringType(),
4956
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
4957
- "businessUnit": stringType(),
4958
- "owner": stringType(),
4959
- "description": stringType(),
5152
+ "name": stringType().max(listInitiativesResponseNameMax),
5153
+ "externalId": stringType().max(listInitiativesResponseExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5154
+ "businessUnit": stringType().max(listInitiativesResponseBusinessUnitMax),
5155
+ "owner": stringType().max(listInitiativesResponseOwnerMax),
5156
+ "description": stringType().max(listInitiativesResponseDescriptionMax),
4960
5157
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
4961
5158
  "timelineStart": stringType(),
4962
5159
  "timelineEnd": stringType(),
@@ -4964,10 +5161,10 @@ var ListInitiativesResponseItem = objectType({
4964
5161
  "budgetForwardLooking": numberType().optional(),
4965
5162
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
4966
5163
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
4967
- "aiCategory": stringType(),
4968
- "tags": arrayType(stringType()),
4969
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
4970
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5164
+ "aiCategory": stringType().max(listInitiativesResponseAiCategoryMax),
5165
+ "tags": arrayType(stringType().max(listInitiativesResponseTagsItemMax)).max(listInitiativesResponseTagsMax),
5166
+ "docsUrl": stringType().max(listInitiativesResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5167
+ "pmUrl": stringType().max(listInitiativesResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
4971
5168
  "archived": booleanType(),
4972
5169
  "evaluation": objectType({
4973
5170
  "valueScale": objectType({
@@ -5047,7 +5244,8 @@ var ListInitiativesResponseItem = objectType({
5047
5244
  "y1Pct": numberType(),
5048
5245
  "y2Pct": numberType()
5049
5246
  }).optional(),
5050
- "discountRatePct": numberType().optional()
5247
+ "discountRatePct": numberType().optional(),
5248
+ "operatingCostAnnual": numberType().optional()
5051
5249
  }).optional(),
5052
5250
  "actuals": objectType({
5053
5251
  "operatingCostAnnual": numberType().optional(),
@@ -5067,48 +5265,49 @@ var ListInitiativesResponseItem = objectType({
5067
5265
  "id": stringType(),
5068
5266
  "date": stringType(),
5069
5267
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
5070
- "owner": stringType().optional(),
5071
- "rationale": stringType().optional(),
5268
+ "owner": stringType().max(listInitiativesResponseDecisionLogItemOwnerMax).optional(),
5269
+ "rationale": stringType().max(listInitiativesResponseDecisionLogItemRationaleMax).optional(),
5072
5270
  "createdAt": stringType().optional()
5073
- })).optional(),
5271
+ })).max(listInitiativesResponseDecisionLogMax).optional(),
5074
5272
  "statusReports": arrayType(objectType({
5075
5273
  "id": stringType(),
5076
5274
  "date": stringType(),
5077
- "author": stringType().optional(),
5275
+ "author": stringType().max(listInitiativesResponseStatusReportsItemAuthorMax).optional(),
5078
5276
  "scope": objectType({
5079
5277
  "rag": enumType(["green", "yellow", "red"]),
5080
- "comment": stringType().optional()
5278
+ "comment": stringType().max(listInitiativesResponseStatusReportsItemScopeCommentMax).optional()
5081
5279
  }),
5082
5280
  "timeline": objectType({
5083
5281
  "rag": enumType(["green", "yellow", "red"]),
5084
- "comment": stringType().optional()
5282
+ "comment": stringType().max(listInitiativesResponseStatusReportsItemTimelineCommentMax).optional()
5085
5283
  }),
5086
5284
  "budget": objectType({
5087
5285
  "rag": enumType(["green", "yellow", "red"]),
5088
- "comment": stringType().optional()
5286
+ "comment": stringType().max(listInitiativesResponseStatusReportsItemBudgetCommentMax).optional()
5089
5287
  }),
5090
5288
  "skills": objectType({
5091
5289
  "rag": enumType(["green", "yellow", "red"]),
5092
- "comment": stringType().optional()
5290
+ "comment": stringType().max(listInitiativesResponseStatusReportsItemSkillsCommentMax).optional()
5093
5291
  }),
5094
- "summary": stringType().optional()
5095
- })).optional(),
5096
- "dependsOn": arrayType(stringType()),
5292
+ "summary": stringType().max(listInitiativesResponseStatusReportsItemSummaryMax).optional()
5293
+ })).max(listInitiativesResponseStatusReportsMax).optional(),
5294
+ "dependsOn": arrayType(stringType()).max(listInitiativesResponseDependsOnMax),
5097
5295
  "requiredSkills": arrayType(objectType({
5098
5296
  "skillId": stringType(),
5099
- "fte": numberType()
5100
- })).optional(),
5297
+ "fte": numberType(),
5298
+ "runFte": numberType().min(listInitiativesResponseRequiredSkillsItemRunFteMin).optional()
5299
+ })).max(listInitiativesResponseRequiredSkillsMax).optional(),
5101
5300
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
5102
5301
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
5103
5302
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
5104
- "dpiaUrl": stringType().optional(),
5303
+ "dpiaUrl": stringType().max(listInitiativesResponseDpiaUrlMax).optional(),
5105
5304
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
5106
- "modelCardUrl": stringType().optional(),
5107
- "prohibitedOverride": stringType().optional(),
5305
+ "modelCardUrl": stringType().max(listInitiativesResponseModelCardUrlMax).optional(),
5306
+ "prohibitedOverride": stringType().max(listInitiativesResponseProhibitedOverrideMax).optional(),
5108
5307
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
5109
5308
  "checked": booleanType(),
5110
5309
  "asOfDate": stringType().optional(),
5111
- "note": stringType().optional()
5310
+ "note": stringType().max(listInitiativesResponseGateEvidenceNoteMax).optional()
5112
5311
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
5113
5312
  "gateBypassed": booleanType().optional(),
5114
5313
  "aiAct": objectType({
@@ -5124,28 +5323,28 @@ var ListInitiativesResponseItem = objectType({
5124
5323
  "integratesThirdPartyGpai": booleanType().optional(),
5125
5324
  "upstreamGpaiProvider": stringType().optional(),
5126
5325
  "upstreamGpaiInfoAvailable": booleanType().optional(),
5127
- "prohibitedPractices": arrayType(stringType()),
5128
- "art50Flags": arrayType(stringType()),
5326
+ "prohibitedPractices": arrayType(stringType().max(listInitiativesResponseAiActProhibitedPracticesItemMax)).max(listInitiativesResponseAiActProhibitedPracticesMax),
5327
+ "art50Flags": arrayType(stringType().max(listInitiativesResponseAiActArt50FlagsItemMax)).max(listInitiativesResponseAiActArt50FlagsMax),
5129
5328
  "publicSector": booleanType().optional(),
5130
5329
  "establishedOutsideEU": booleanType().optional(),
5131
- "classificationRationale": stringType().optional(),
5330
+ "classificationRationale": stringType().max(listInitiativesResponseAiActClassificationRationaleMax).optional(),
5132
5331
  "classificationConfirmed": booleanType().optional(),
5133
5332
  "classificationConfirmedBy": stringType().optional(),
5134
5333
  "classificationConfirmedAt": stringType().optional(),
5135
5334
  "artifacts": recordType(stringType(), objectType({
5136
5335
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
5137
- "owner": stringType().optional(),
5336
+ "owner": stringType().max(listInitiativesResponseAiActArtifactsOwnerMax).optional(),
5138
5337
  "lastReviewedAt": stringType().optional(),
5139
- "link": stringType().optional(),
5140
- "note": stringType().optional(),
5338
+ "link": stringType().max(listInitiativesResponseAiActArtifactsLinkMax).optional(),
5339
+ "note": stringType().max(listInitiativesResponseAiActArtifactsNoteMax).optional(),
5141
5340
  "maxAgeDays": numberType().optional()
5142
5341
  })).optional(),
5143
5342
  "obligations": recordType(stringType(), objectType({
5144
5343
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
5145
- "owner": stringType().optional(),
5344
+ "owner": stringType().max(listInitiativesResponseAiActObligationsOwnerMax).optional(),
5146
5345
  "dueDate": stringType().optional(),
5147
- "evidenceLink": stringType().optional(),
5148
- "approver": stringType().optional(),
5346
+ "evidenceLink": stringType().max(listInitiativesResponseAiActObligationsEvidenceLinkMax).optional(),
5347
+ "approver": stringType().max(listInitiativesResponseAiActObligationsApproverMax).optional(),
5149
5348
  "approvalDate": stringType().optional(),
5150
5349
  "reviewDate": stringType().optional()
5151
5350
  })).optional(),
@@ -5172,16 +5371,16 @@ var ListInitiativesResponseItem = objectType({
5172
5371
  "occurredAt": stringType(),
5173
5372
  "detectedAt": stringType(),
5174
5373
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
5175
- "description": stringType(),
5374
+ "description": stringType().max(listInitiativesResponseAiActIncidentsItemDescriptionMax),
5176
5375
  "status": enumType(["open", "reported", "closed"]),
5177
- "authorityRef": stringType().optional(),
5178
- "owner": stringType().optional(),
5179
- "rootCause": stringType().optional(),
5180
- "correctiveActions": stringType().optional(),
5376
+ "authorityRef": stringType().max(listInitiativesResponseAiActIncidentsItemAuthorityRefMax).optional(),
5377
+ "owner": stringType().max(listInitiativesResponseAiActIncidentsItemOwnerMax).optional(),
5378
+ "rootCause": stringType().max(listInitiativesResponseAiActIncidentsItemRootCauseMax).optional(),
5379
+ "correctiveActions": stringType().max(listInitiativesResponseAiActIncidentsItemCorrectiveActionsMax).optional(),
5181
5380
  "reportedAt": stringType().optional(),
5182
5381
  "createdAt": stringType(),
5183
5382
  "updatedAt": stringType()
5184
- })).optional()
5383
+ })).max(listInitiativesResponseAiActIncidentsMax).optional()
5185
5384
  }).optional(),
5186
5385
  "createdBy": objectType({
5187
5386
  "userId": stringType().uuid(),
@@ -5195,13 +5394,57 @@ var ListInitiativesResponseItem = objectType({
5195
5394
  "updatedAt": stringType()
5196
5395
  });
5197
5396
  var ListInitiativesResponse = arrayType(ListInitiativesResponseItem);
5397
+ var createInitiativeBodyOneNameMax = 200;
5398
+ var createInitiativeBodyOneExternalIdMax = 200;
5399
+ var createInitiativeBodyOneBusinessUnitMax = 200;
5400
+ var createInitiativeBodyOneOwnerMax = 200;
5401
+ var createInitiativeBodyOneDescriptionMax = 1e4;
5402
+ var createInitiativeBodyOneAiCategoryMax = 200;
5403
+ var createInitiativeBodyOneTagsItemMax = 200;
5404
+ var createInitiativeBodyOneTagsMax = 1e3;
5405
+ var createInitiativeBodyOneDocsUrlMax = 2e3;
5406
+ var createInitiativeBodyOnePmUrlMax = 2e3;
5407
+ var createInitiativeBodyOneDecisionLogItemOwnerMax = 200;
5408
+ var createInitiativeBodyOneDecisionLogItemRationaleMax = 1e4;
5409
+ var createInitiativeBodyOneDecisionLogMax = 1e3;
5410
+ var createInitiativeBodyOneStatusReportsItemAuthorMax = 200;
5411
+ var createInitiativeBodyOneStatusReportsItemScopeCommentMax = 1e4;
5412
+ var createInitiativeBodyOneStatusReportsItemTimelineCommentMax = 1e4;
5413
+ var createInitiativeBodyOneStatusReportsItemBudgetCommentMax = 1e4;
5414
+ var createInitiativeBodyOneStatusReportsItemSkillsCommentMax = 1e4;
5415
+ var createInitiativeBodyOneStatusReportsItemSummaryMax = 1e4;
5416
+ var createInitiativeBodyOneStatusReportsMax = 1e3;
5417
+ var createInitiativeBodyOneDependsOnMax = 1e3;
5418
+ var createInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
5419
+ var createInitiativeBodyOneRequiredSkillsMax = 1e3;
5420
+ var createInitiativeBodyOneDpiaUrlMax = 2e3;
5421
+ var createInitiativeBodyOneModelCardUrlMax = 2e3;
5422
+ var createInitiativeBodyOneProhibitedOverrideMax = 2e3;
5423
+ var createInitiativeBodyOneGateEvidenceNoteMax = 1e4;
5424
+ var createInitiativeBodyOneAiActProhibitedPracticesItemMax = 200;
5425
+ var createInitiativeBodyOneAiActProhibitedPracticesMax = 100;
5426
+ var createInitiativeBodyOneAiActArt50FlagsItemMax = 200;
5427
+ var createInitiativeBodyOneAiActArt50FlagsMax = 100;
5428
+ var createInitiativeBodyOneAiActClassificationRationaleMax = 1e4;
5429
+ var createInitiativeBodyOneAiActArtifactsOwnerMax = 200;
5430
+ var createInitiativeBodyOneAiActArtifactsLinkMax = 2e3;
5431
+ var createInitiativeBodyOneAiActArtifactsNoteMax = 1e4;
5432
+ var createInitiativeBodyOneAiActObligationsOwnerMax = 200;
5433
+ var createInitiativeBodyOneAiActObligationsEvidenceLinkMax = 2e3;
5434
+ var createInitiativeBodyOneAiActObligationsApproverMax = 200;
5435
+ var createInitiativeBodyOneAiActIncidentsItemDescriptionMax = 1e4;
5436
+ var createInitiativeBodyOneAiActIncidentsItemAuthorityRefMax = 2e3;
5437
+ var createInitiativeBodyOneAiActIncidentsItemOwnerMax = 200;
5438
+ var createInitiativeBodyOneAiActIncidentsItemRootCauseMax = 1e4;
5439
+ var createInitiativeBodyOneAiActIncidentsItemCorrectiveActionsMax = 1e4;
5440
+ var createInitiativeBodyOneAiActIncidentsMax = 1e3;
5198
5441
  var CreateInitiativeBody = objectType({
5199
5442
  "id": stringType(),
5200
- "name": stringType(),
5201
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5202
- "businessUnit": stringType(),
5203
- "owner": stringType(),
5204
- "description": stringType(),
5443
+ "name": stringType().max(createInitiativeBodyOneNameMax),
5444
+ "externalId": stringType().max(createInitiativeBodyOneExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5445
+ "businessUnit": stringType().max(createInitiativeBodyOneBusinessUnitMax),
5446
+ "owner": stringType().max(createInitiativeBodyOneOwnerMax),
5447
+ "description": stringType().max(createInitiativeBodyOneDescriptionMax),
5205
5448
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
5206
5449
  "timelineStart": stringType(),
5207
5450
  "timelineEnd": stringType(),
@@ -5209,10 +5452,10 @@ var CreateInitiativeBody = objectType({
5209
5452
  "budgetForwardLooking": numberType().optional(),
5210
5453
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
5211
5454
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
5212
- "aiCategory": stringType(),
5213
- "tags": arrayType(stringType()),
5214
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5215
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5455
+ "aiCategory": stringType().max(createInitiativeBodyOneAiCategoryMax),
5456
+ "tags": arrayType(stringType().max(createInitiativeBodyOneTagsItemMax)).max(createInitiativeBodyOneTagsMax),
5457
+ "docsUrl": stringType().max(createInitiativeBodyOneDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5458
+ "pmUrl": stringType().max(createInitiativeBodyOnePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5216
5459
  "archived": booleanType(),
5217
5460
  "evaluation": objectType({
5218
5461
  "valueScale": objectType({
@@ -5292,7 +5535,8 @@ var CreateInitiativeBody = objectType({
5292
5535
  "y1Pct": numberType(),
5293
5536
  "y2Pct": numberType()
5294
5537
  }).optional(),
5295
- "discountRatePct": numberType().optional()
5538
+ "discountRatePct": numberType().optional(),
5539
+ "operatingCostAnnual": numberType().optional()
5296
5540
  }).optional(),
5297
5541
  "actuals": objectType({
5298
5542
  "operatingCostAnnual": numberType().optional(),
@@ -5312,48 +5556,49 @@ var CreateInitiativeBody = objectType({
5312
5556
  "id": stringType(),
5313
5557
  "date": stringType(),
5314
5558
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
5315
- "owner": stringType().optional(),
5316
- "rationale": stringType().optional(),
5559
+ "owner": stringType().max(createInitiativeBodyOneDecisionLogItemOwnerMax).optional(),
5560
+ "rationale": stringType().max(createInitiativeBodyOneDecisionLogItemRationaleMax).optional(),
5317
5561
  "createdAt": stringType().optional()
5318
- })).optional(),
5562
+ })).max(createInitiativeBodyOneDecisionLogMax).optional(),
5319
5563
  "statusReports": arrayType(objectType({
5320
5564
  "id": stringType(),
5321
5565
  "date": stringType(),
5322
- "author": stringType().optional(),
5566
+ "author": stringType().max(createInitiativeBodyOneStatusReportsItemAuthorMax).optional(),
5323
5567
  "scope": objectType({
5324
5568
  "rag": enumType(["green", "yellow", "red"]),
5325
- "comment": stringType().optional()
5569
+ "comment": stringType().max(createInitiativeBodyOneStatusReportsItemScopeCommentMax).optional()
5326
5570
  }),
5327
5571
  "timeline": objectType({
5328
5572
  "rag": enumType(["green", "yellow", "red"]),
5329
- "comment": stringType().optional()
5573
+ "comment": stringType().max(createInitiativeBodyOneStatusReportsItemTimelineCommentMax).optional()
5330
5574
  }),
5331
5575
  "budget": objectType({
5332
5576
  "rag": enumType(["green", "yellow", "red"]),
5333
- "comment": stringType().optional()
5577
+ "comment": stringType().max(createInitiativeBodyOneStatusReportsItemBudgetCommentMax).optional()
5334
5578
  }),
5335
5579
  "skills": objectType({
5336
5580
  "rag": enumType(["green", "yellow", "red"]),
5337
- "comment": stringType().optional()
5581
+ "comment": stringType().max(createInitiativeBodyOneStatusReportsItemSkillsCommentMax).optional()
5338
5582
  }),
5339
- "summary": stringType().optional()
5340
- })).optional(),
5341
- "dependsOn": arrayType(stringType()),
5583
+ "summary": stringType().max(createInitiativeBodyOneStatusReportsItemSummaryMax).optional()
5584
+ })).max(createInitiativeBodyOneStatusReportsMax).optional(),
5585
+ "dependsOn": arrayType(stringType()).max(createInitiativeBodyOneDependsOnMax),
5342
5586
  "requiredSkills": arrayType(objectType({
5343
5587
  "skillId": stringType(),
5344
- "fte": numberType()
5345
- })).optional(),
5588
+ "fte": numberType(),
5589
+ "runFte": numberType().min(createInitiativeBodyOneRequiredSkillsItemRunFteMin).optional()
5590
+ })).max(createInitiativeBodyOneRequiredSkillsMax).optional(),
5346
5591
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
5347
5592
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
5348
5593
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
5349
- "dpiaUrl": stringType().optional(),
5594
+ "dpiaUrl": stringType().max(createInitiativeBodyOneDpiaUrlMax).optional(),
5350
5595
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
5351
- "modelCardUrl": stringType().optional(),
5352
- "prohibitedOverride": stringType().optional(),
5596
+ "modelCardUrl": stringType().max(createInitiativeBodyOneModelCardUrlMax).optional(),
5597
+ "prohibitedOverride": stringType().max(createInitiativeBodyOneProhibitedOverrideMax).optional(),
5353
5598
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
5354
5599
  "checked": booleanType(),
5355
5600
  "asOfDate": stringType().optional(),
5356
- "note": stringType().optional()
5601
+ "note": stringType().max(createInitiativeBodyOneGateEvidenceNoteMax).optional()
5357
5602
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
5358
5603
  "gateBypassed": booleanType().optional(),
5359
5604
  "aiAct": objectType({
@@ -5369,28 +5614,28 @@ var CreateInitiativeBody = objectType({
5369
5614
  "integratesThirdPartyGpai": booleanType().optional(),
5370
5615
  "upstreamGpaiProvider": stringType().optional(),
5371
5616
  "upstreamGpaiInfoAvailable": booleanType().optional(),
5372
- "prohibitedPractices": arrayType(stringType()),
5373
- "art50Flags": arrayType(stringType()),
5617
+ "prohibitedPractices": arrayType(stringType().max(createInitiativeBodyOneAiActProhibitedPracticesItemMax)).max(createInitiativeBodyOneAiActProhibitedPracticesMax),
5618
+ "art50Flags": arrayType(stringType().max(createInitiativeBodyOneAiActArt50FlagsItemMax)).max(createInitiativeBodyOneAiActArt50FlagsMax),
5374
5619
  "publicSector": booleanType().optional(),
5375
5620
  "establishedOutsideEU": booleanType().optional(),
5376
- "classificationRationale": stringType().optional(),
5621
+ "classificationRationale": stringType().max(createInitiativeBodyOneAiActClassificationRationaleMax).optional(),
5377
5622
  "classificationConfirmed": booleanType().optional(),
5378
5623
  "classificationConfirmedBy": stringType().optional(),
5379
5624
  "classificationConfirmedAt": stringType().optional(),
5380
5625
  "artifacts": recordType(stringType(), objectType({
5381
5626
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
5382
- "owner": stringType().optional(),
5627
+ "owner": stringType().max(createInitiativeBodyOneAiActArtifactsOwnerMax).optional(),
5383
5628
  "lastReviewedAt": stringType().optional(),
5384
- "link": stringType().optional(),
5385
- "note": stringType().optional(),
5629
+ "link": stringType().max(createInitiativeBodyOneAiActArtifactsLinkMax).optional(),
5630
+ "note": stringType().max(createInitiativeBodyOneAiActArtifactsNoteMax).optional(),
5386
5631
  "maxAgeDays": numberType().optional()
5387
5632
  })).optional(),
5388
5633
  "obligations": recordType(stringType(), objectType({
5389
5634
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
5390
- "owner": stringType().optional(),
5635
+ "owner": stringType().max(createInitiativeBodyOneAiActObligationsOwnerMax).optional(),
5391
5636
  "dueDate": stringType().optional(),
5392
- "evidenceLink": stringType().optional(),
5393
- "approver": stringType().optional(),
5637
+ "evidenceLink": stringType().max(createInitiativeBodyOneAiActObligationsEvidenceLinkMax).optional(),
5638
+ "approver": stringType().max(createInitiativeBodyOneAiActObligationsApproverMax).optional(),
5394
5639
  "approvalDate": stringType().optional(),
5395
5640
  "reviewDate": stringType().optional()
5396
5641
  })).optional(),
@@ -5417,16 +5662,16 @@ var CreateInitiativeBody = objectType({
5417
5662
  "occurredAt": stringType(),
5418
5663
  "detectedAt": stringType(),
5419
5664
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
5420
- "description": stringType(),
5665
+ "description": stringType().max(createInitiativeBodyOneAiActIncidentsItemDescriptionMax),
5421
5666
  "status": enumType(["open", "reported", "closed"]),
5422
- "authorityRef": stringType().optional(),
5423
- "owner": stringType().optional(),
5424
- "rootCause": stringType().optional(),
5425
- "correctiveActions": stringType().optional(),
5667
+ "authorityRef": stringType().max(createInitiativeBodyOneAiActIncidentsItemAuthorityRefMax).optional(),
5668
+ "owner": stringType().max(createInitiativeBodyOneAiActIncidentsItemOwnerMax).optional(),
5669
+ "rootCause": stringType().max(createInitiativeBodyOneAiActIncidentsItemRootCauseMax).optional(),
5670
+ "correctiveActions": stringType().max(createInitiativeBodyOneAiActIncidentsItemCorrectiveActionsMax).optional(),
5426
5671
  "reportedAt": stringType().optional(),
5427
5672
  "createdAt": stringType(),
5428
5673
  "updatedAt": stringType()
5429
- })).optional()
5674
+ })).max(createInitiativeBodyOneAiActIncidentsMax).optional()
5430
5675
  }).optional(),
5431
5676
  "createdBy": objectType({
5432
5677
  "userId": stringType().uuid(),
@@ -5448,13 +5693,57 @@ var CreateInitiativeBody = objectType({
5448
5693
  var GetInitiativeParams = objectType({
5449
5694
  "id": coerce.string().uuid()
5450
5695
  });
5696
+ var getInitiativeResponseNameMax = 200;
5697
+ var getInitiativeResponseExternalIdMax = 200;
5698
+ var getInitiativeResponseBusinessUnitMax = 200;
5699
+ var getInitiativeResponseOwnerMax = 200;
5700
+ var getInitiativeResponseDescriptionMax = 1e4;
5701
+ var getInitiativeResponseAiCategoryMax = 200;
5702
+ var getInitiativeResponseTagsItemMax = 200;
5703
+ var getInitiativeResponseTagsMax = 1e3;
5704
+ var getInitiativeResponseDocsUrlMax = 2e3;
5705
+ var getInitiativeResponsePmUrlMax = 2e3;
5706
+ var getInitiativeResponseDecisionLogItemOwnerMax = 200;
5707
+ var getInitiativeResponseDecisionLogItemRationaleMax = 1e4;
5708
+ var getInitiativeResponseDecisionLogMax = 1e3;
5709
+ var getInitiativeResponseStatusReportsItemAuthorMax = 200;
5710
+ var getInitiativeResponseStatusReportsItemScopeCommentMax = 1e4;
5711
+ var getInitiativeResponseStatusReportsItemTimelineCommentMax = 1e4;
5712
+ var getInitiativeResponseStatusReportsItemBudgetCommentMax = 1e4;
5713
+ var getInitiativeResponseStatusReportsItemSkillsCommentMax = 1e4;
5714
+ var getInitiativeResponseStatusReportsItemSummaryMax = 1e4;
5715
+ var getInitiativeResponseStatusReportsMax = 1e3;
5716
+ var getInitiativeResponseDependsOnMax = 1e3;
5717
+ var getInitiativeResponseRequiredSkillsItemRunFteMin = 0;
5718
+ var getInitiativeResponseRequiredSkillsMax = 1e3;
5719
+ var getInitiativeResponseDpiaUrlMax = 2e3;
5720
+ var getInitiativeResponseModelCardUrlMax = 2e3;
5721
+ var getInitiativeResponseProhibitedOverrideMax = 2e3;
5722
+ var getInitiativeResponseGateEvidenceNoteMax = 1e4;
5723
+ var getInitiativeResponseAiActProhibitedPracticesItemMax = 200;
5724
+ var getInitiativeResponseAiActProhibitedPracticesMax = 100;
5725
+ var getInitiativeResponseAiActArt50FlagsItemMax = 200;
5726
+ var getInitiativeResponseAiActArt50FlagsMax = 100;
5727
+ var getInitiativeResponseAiActClassificationRationaleMax = 1e4;
5728
+ var getInitiativeResponseAiActArtifactsOwnerMax = 200;
5729
+ var getInitiativeResponseAiActArtifactsLinkMax = 2e3;
5730
+ var getInitiativeResponseAiActArtifactsNoteMax = 1e4;
5731
+ var getInitiativeResponseAiActObligationsOwnerMax = 200;
5732
+ var getInitiativeResponseAiActObligationsEvidenceLinkMax = 2e3;
5733
+ var getInitiativeResponseAiActObligationsApproverMax = 200;
5734
+ var getInitiativeResponseAiActIncidentsItemDescriptionMax = 1e4;
5735
+ var getInitiativeResponseAiActIncidentsItemAuthorityRefMax = 2e3;
5736
+ var getInitiativeResponseAiActIncidentsItemOwnerMax = 200;
5737
+ var getInitiativeResponseAiActIncidentsItemRootCauseMax = 1e4;
5738
+ var getInitiativeResponseAiActIncidentsItemCorrectiveActionsMax = 1e4;
5739
+ var getInitiativeResponseAiActIncidentsMax = 1e3;
5451
5740
  var GetInitiativeResponse = objectType({
5452
5741
  "id": stringType(),
5453
- "name": stringType(),
5454
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5455
- "businessUnit": stringType(),
5456
- "owner": stringType(),
5457
- "description": stringType(),
5742
+ "name": stringType().max(getInitiativeResponseNameMax),
5743
+ "externalId": stringType().max(getInitiativeResponseExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5744
+ "businessUnit": stringType().max(getInitiativeResponseBusinessUnitMax),
5745
+ "owner": stringType().max(getInitiativeResponseOwnerMax),
5746
+ "description": stringType().max(getInitiativeResponseDescriptionMax),
5458
5747
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
5459
5748
  "timelineStart": stringType(),
5460
5749
  "timelineEnd": stringType(),
@@ -5462,10 +5751,10 @@ var GetInitiativeResponse = objectType({
5462
5751
  "budgetForwardLooking": numberType().optional(),
5463
5752
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
5464
5753
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
5465
- "aiCategory": stringType(),
5466
- "tags": arrayType(stringType()),
5467
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5468
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5754
+ "aiCategory": stringType().max(getInitiativeResponseAiCategoryMax),
5755
+ "tags": arrayType(stringType().max(getInitiativeResponseTagsItemMax)).max(getInitiativeResponseTagsMax),
5756
+ "docsUrl": stringType().max(getInitiativeResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5757
+ "pmUrl": stringType().max(getInitiativeResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5469
5758
  "archived": booleanType(),
5470
5759
  "evaluation": objectType({
5471
5760
  "valueScale": objectType({
@@ -5545,7 +5834,8 @@ var GetInitiativeResponse = objectType({
5545
5834
  "y1Pct": numberType(),
5546
5835
  "y2Pct": numberType()
5547
5836
  }).optional(),
5548
- "discountRatePct": numberType().optional()
5837
+ "discountRatePct": numberType().optional(),
5838
+ "operatingCostAnnual": numberType().optional()
5549
5839
  }).optional(),
5550
5840
  "actuals": objectType({
5551
5841
  "operatingCostAnnual": numberType().optional(),
@@ -5565,48 +5855,49 @@ var GetInitiativeResponse = objectType({
5565
5855
  "id": stringType(),
5566
5856
  "date": stringType(),
5567
5857
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
5568
- "owner": stringType().optional(),
5569
- "rationale": stringType().optional(),
5858
+ "owner": stringType().max(getInitiativeResponseDecisionLogItemOwnerMax).optional(),
5859
+ "rationale": stringType().max(getInitiativeResponseDecisionLogItemRationaleMax).optional(),
5570
5860
  "createdAt": stringType().optional()
5571
- })).optional(),
5861
+ })).max(getInitiativeResponseDecisionLogMax).optional(),
5572
5862
  "statusReports": arrayType(objectType({
5573
5863
  "id": stringType(),
5574
5864
  "date": stringType(),
5575
- "author": stringType().optional(),
5865
+ "author": stringType().max(getInitiativeResponseStatusReportsItemAuthorMax).optional(),
5576
5866
  "scope": objectType({
5577
5867
  "rag": enumType(["green", "yellow", "red"]),
5578
- "comment": stringType().optional()
5868
+ "comment": stringType().max(getInitiativeResponseStatusReportsItemScopeCommentMax).optional()
5579
5869
  }),
5580
5870
  "timeline": objectType({
5581
5871
  "rag": enumType(["green", "yellow", "red"]),
5582
- "comment": stringType().optional()
5872
+ "comment": stringType().max(getInitiativeResponseStatusReportsItemTimelineCommentMax).optional()
5583
5873
  }),
5584
5874
  "budget": objectType({
5585
5875
  "rag": enumType(["green", "yellow", "red"]),
5586
- "comment": stringType().optional()
5876
+ "comment": stringType().max(getInitiativeResponseStatusReportsItemBudgetCommentMax).optional()
5587
5877
  }),
5588
5878
  "skills": objectType({
5589
5879
  "rag": enumType(["green", "yellow", "red"]),
5590
- "comment": stringType().optional()
5880
+ "comment": stringType().max(getInitiativeResponseStatusReportsItemSkillsCommentMax).optional()
5591
5881
  }),
5592
- "summary": stringType().optional()
5593
- })).optional(),
5594
- "dependsOn": arrayType(stringType()),
5882
+ "summary": stringType().max(getInitiativeResponseStatusReportsItemSummaryMax).optional()
5883
+ })).max(getInitiativeResponseStatusReportsMax).optional(),
5884
+ "dependsOn": arrayType(stringType()).max(getInitiativeResponseDependsOnMax),
5595
5885
  "requiredSkills": arrayType(objectType({
5596
5886
  "skillId": stringType(),
5597
- "fte": numberType()
5598
- })).optional(),
5887
+ "fte": numberType(),
5888
+ "runFte": numberType().min(getInitiativeResponseRequiredSkillsItemRunFteMin).optional()
5889
+ })).max(getInitiativeResponseRequiredSkillsMax).optional(),
5599
5890
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
5600
5891
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
5601
5892
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
5602
- "dpiaUrl": stringType().optional(),
5893
+ "dpiaUrl": stringType().max(getInitiativeResponseDpiaUrlMax).optional(),
5603
5894
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
5604
- "modelCardUrl": stringType().optional(),
5605
- "prohibitedOverride": stringType().optional(),
5895
+ "modelCardUrl": stringType().max(getInitiativeResponseModelCardUrlMax).optional(),
5896
+ "prohibitedOverride": stringType().max(getInitiativeResponseProhibitedOverrideMax).optional(),
5606
5897
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
5607
5898
  "checked": booleanType(),
5608
5899
  "asOfDate": stringType().optional(),
5609
- "note": stringType().optional()
5900
+ "note": stringType().max(getInitiativeResponseGateEvidenceNoteMax).optional()
5610
5901
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
5611
5902
  "gateBypassed": booleanType().optional(),
5612
5903
  "aiAct": objectType({
@@ -5622,28 +5913,28 @@ var GetInitiativeResponse = objectType({
5622
5913
  "integratesThirdPartyGpai": booleanType().optional(),
5623
5914
  "upstreamGpaiProvider": stringType().optional(),
5624
5915
  "upstreamGpaiInfoAvailable": booleanType().optional(),
5625
- "prohibitedPractices": arrayType(stringType()),
5626
- "art50Flags": arrayType(stringType()),
5916
+ "prohibitedPractices": arrayType(stringType().max(getInitiativeResponseAiActProhibitedPracticesItemMax)).max(getInitiativeResponseAiActProhibitedPracticesMax),
5917
+ "art50Flags": arrayType(stringType().max(getInitiativeResponseAiActArt50FlagsItemMax)).max(getInitiativeResponseAiActArt50FlagsMax),
5627
5918
  "publicSector": booleanType().optional(),
5628
5919
  "establishedOutsideEU": booleanType().optional(),
5629
- "classificationRationale": stringType().optional(),
5920
+ "classificationRationale": stringType().max(getInitiativeResponseAiActClassificationRationaleMax).optional(),
5630
5921
  "classificationConfirmed": booleanType().optional(),
5631
5922
  "classificationConfirmedBy": stringType().optional(),
5632
5923
  "classificationConfirmedAt": stringType().optional(),
5633
5924
  "artifacts": recordType(stringType(), objectType({
5634
5925
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
5635
- "owner": stringType().optional(),
5926
+ "owner": stringType().max(getInitiativeResponseAiActArtifactsOwnerMax).optional(),
5636
5927
  "lastReviewedAt": stringType().optional(),
5637
- "link": stringType().optional(),
5638
- "note": stringType().optional(),
5928
+ "link": stringType().max(getInitiativeResponseAiActArtifactsLinkMax).optional(),
5929
+ "note": stringType().max(getInitiativeResponseAiActArtifactsNoteMax).optional(),
5639
5930
  "maxAgeDays": numberType().optional()
5640
5931
  })).optional(),
5641
5932
  "obligations": recordType(stringType(), objectType({
5642
5933
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
5643
- "owner": stringType().optional(),
5934
+ "owner": stringType().max(getInitiativeResponseAiActObligationsOwnerMax).optional(),
5644
5935
  "dueDate": stringType().optional(),
5645
- "evidenceLink": stringType().optional(),
5646
- "approver": stringType().optional(),
5936
+ "evidenceLink": stringType().max(getInitiativeResponseAiActObligationsEvidenceLinkMax).optional(),
5937
+ "approver": stringType().max(getInitiativeResponseAiActObligationsApproverMax).optional(),
5647
5938
  "approvalDate": stringType().optional(),
5648
5939
  "reviewDate": stringType().optional()
5649
5940
  })).optional(),
@@ -5670,16 +5961,16 @@ var GetInitiativeResponse = objectType({
5670
5961
  "occurredAt": stringType(),
5671
5962
  "detectedAt": stringType(),
5672
5963
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
5673
- "description": stringType(),
5964
+ "description": stringType().max(getInitiativeResponseAiActIncidentsItemDescriptionMax),
5674
5965
  "status": enumType(["open", "reported", "closed"]),
5675
- "authorityRef": stringType().optional(),
5676
- "owner": stringType().optional(),
5677
- "rootCause": stringType().optional(),
5678
- "correctiveActions": stringType().optional(),
5966
+ "authorityRef": stringType().max(getInitiativeResponseAiActIncidentsItemAuthorityRefMax).optional(),
5967
+ "owner": stringType().max(getInitiativeResponseAiActIncidentsItemOwnerMax).optional(),
5968
+ "rootCause": stringType().max(getInitiativeResponseAiActIncidentsItemRootCauseMax).optional(),
5969
+ "correctiveActions": stringType().max(getInitiativeResponseAiActIncidentsItemCorrectiveActionsMax).optional(),
5679
5970
  "reportedAt": stringType().optional(),
5680
5971
  "createdAt": stringType(),
5681
5972
  "updatedAt": stringType()
5682
- })).optional()
5973
+ })).max(getInitiativeResponseAiActIncidentsMax).optional()
5683
5974
  }).optional(),
5684
5975
  "createdBy": objectType({
5685
5976
  "userId": stringType().uuid(),
@@ -5695,13 +5986,57 @@ var GetInitiativeResponse = objectType({
5695
5986
  var UpdateInitiativeParams = objectType({
5696
5987
  "id": coerce.string().uuid()
5697
5988
  });
5989
+ var updateInitiativeBodyOneNameMax = 200;
5990
+ var updateInitiativeBodyOneExternalIdMax = 200;
5991
+ var updateInitiativeBodyOneBusinessUnitMax = 200;
5992
+ var updateInitiativeBodyOneOwnerMax = 200;
5993
+ var updateInitiativeBodyOneDescriptionMax = 1e4;
5994
+ var updateInitiativeBodyOneAiCategoryMax = 200;
5995
+ var updateInitiativeBodyOneTagsItemMax = 200;
5996
+ var updateInitiativeBodyOneTagsMax = 1e3;
5997
+ var updateInitiativeBodyOneDocsUrlMax = 2e3;
5998
+ var updateInitiativeBodyOnePmUrlMax = 2e3;
5999
+ var updateInitiativeBodyOneDecisionLogItemOwnerMax = 200;
6000
+ var updateInitiativeBodyOneDecisionLogItemRationaleMax = 1e4;
6001
+ var updateInitiativeBodyOneDecisionLogMax = 1e3;
6002
+ var updateInitiativeBodyOneStatusReportsItemAuthorMax = 200;
6003
+ var updateInitiativeBodyOneStatusReportsItemScopeCommentMax = 1e4;
6004
+ var updateInitiativeBodyOneStatusReportsItemTimelineCommentMax = 1e4;
6005
+ var updateInitiativeBodyOneStatusReportsItemBudgetCommentMax = 1e4;
6006
+ var updateInitiativeBodyOneStatusReportsItemSkillsCommentMax = 1e4;
6007
+ var updateInitiativeBodyOneStatusReportsItemSummaryMax = 1e4;
6008
+ var updateInitiativeBodyOneStatusReportsMax = 1e3;
6009
+ var updateInitiativeBodyOneDependsOnMax = 1e3;
6010
+ var updateInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
6011
+ var updateInitiativeBodyOneRequiredSkillsMax = 1e3;
6012
+ var updateInitiativeBodyOneDpiaUrlMax = 2e3;
6013
+ var updateInitiativeBodyOneModelCardUrlMax = 2e3;
6014
+ var updateInitiativeBodyOneProhibitedOverrideMax = 2e3;
6015
+ var updateInitiativeBodyOneGateEvidenceNoteMax = 1e4;
6016
+ var updateInitiativeBodyOneAiActProhibitedPracticesItemMax = 200;
6017
+ var updateInitiativeBodyOneAiActProhibitedPracticesMax = 100;
6018
+ var updateInitiativeBodyOneAiActArt50FlagsItemMax = 200;
6019
+ var updateInitiativeBodyOneAiActArt50FlagsMax = 100;
6020
+ var updateInitiativeBodyOneAiActClassificationRationaleMax = 1e4;
6021
+ var updateInitiativeBodyOneAiActArtifactsOwnerMax = 200;
6022
+ var updateInitiativeBodyOneAiActArtifactsLinkMax = 2e3;
6023
+ var updateInitiativeBodyOneAiActArtifactsNoteMax = 1e4;
6024
+ var updateInitiativeBodyOneAiActObligationsOwnerMax = 200;
6025
+ var updateInitiativeBodyOneAiActObligationsEvidenceLinkMax = 2e3;
6026
+ var updateInitiativeBodyOneAiActObligationsApproverMax = 200;
6027
+ var updateInitiativeBodyOneAiActIncidentsItemDescriptionMax = 1e4;
6028
+ var updateInitiativeBodyOneAiActIncidentsItemAuthorityRefMax = 2e3;
6029
+ var updateInitiativeBodyOneAiActIncidentsItemOwnerMax = 200;
6030
+ var updateInitiativeBodyOneAiActIncidentsItemRootCauseMax = 1e4;
6031
+ var updateInitiativeBodyOneAiActIncidentsItemCorrectiveActionsMax = 1e4;
6032
+ var updateInitiativeBodyOneAiActIncidentsMax = 1e3;
5698
6033
  var UpdateInitiativeBody = objectType({
5699
6034
  "id": stringType(),
5700
- "name": stringType(),
5701
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5702
- "businessUnit": stringType(),
5703
- "owner": stringType(),
5704
- "description": stringType(),
6035
+ "name": stringType().max(updateInitiativeBodyOneNameMax),
6036
+ "externalId": stringType().max(updateInitiativeBodyOneExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
6037
+ "businessUnit": stringType().max(updateInitiativeBodyOneBusinessUnitMax),
6038
+ "owner": stringType().max(updateInitiativeBodyOneOwnerMax),
6039
+ "description": stringType().max(updateInitiativeBodyOneDescriptionMax),
5705
6040
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
5706
6041
  "timelineStart": stringType(),
5707
6042
  "timelineEnd": stringType(),
@@ -5709,10 +6044,10 @@ var UpdateInitiativeBody = objectType({
5709
6044
  "budgetForwardLooking": numberType().optional(),
5710
6045
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
5711
6046
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
5712
- "aiCategory": stringType(),
5713
- "tags": arrayType(stringType()),
5714
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5715
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
6047
+ "aiCategory": stringType().max(updateInitiativeBodyOneAiCategoryMax),
6048
+ "tags": arrayType(stringType().max(updateInitiativeBodyOneTagsItemMax)).max(updateInitiativeBodyOneTagsMax),
6049
+ "docsUrl": stringType().max(updateInitiativeBodyOneDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
6050
+ "pmUrl": stringType().max(updateInitiativeBodyOnePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5716
6051
  "archived": booleanType(),
5717
6052
  "evaluation": objectType({
5718
6053
  "valueScale": objectType({
@@ -5792,7 +6127,8 @@ var UpdateInitiativeBody = objectType({
5792
6127
  "y1Pct": numberType(),
5793
6128
  "y2Pct": numberType()
5794
6129
  }).optional(),
5795
- "discountRatePct": numberType().optional()
6130
+ "discountRatePct": numberType().optional(),
6131
+ "operatingCostAnnual": numberType().optional()
5796
6132
  }).optional(),
5797
6133
  "actuals": objectType({
5798
6134
  "operatingCostAnnual": numberType().optional(),
@@ -5812,48 +6148,49 @@ var UpdateInitiativeBody = objectType({
5812
6148
  "id": stringType(),
5813
6149
  "date": stringType(),
5814
6150
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
5815
- "owner": stringType().optional(),
5816
- "rationale": stringType().optional(),
6151
+ "owner": stringType().max(updateInitiativeBodyOneDecisionLogItemOwnerMax).optional(),
6152
+ "rationale": stringType().max(updateInitiativeBodyOneDecisionLogItemRationaleMax).optional(),
5817
6153
  "createdAt": stringType().optional()
5818
- })).optional(),
6154
+ })).max(updateInitiativeBodyOneDecisionLogMax).optional(),
5819
6155
  "statusReports": arrayType(objectType({
5820
6156
  "id": stringType(),
5821
6157
  "date": stringType(),
5822
- "author": stringType().optional(),
6158
+ "author": stringType().max(updateInitiativeBodyOneStatusReportsItemAuthorMax).optional(),
5823
6159
  "scope": objectType({
5824
6160
  "rag": enumType(["green", "yellow", "red"]),
5825
- "comment": stringType().optional()
6161
+ "comment": stringType().max(updateInitiativeBodyOneStatusReportsItemScopeCommentMax).optional()
5826
6162
  }),
5827
6163
  "timeline": objectType({
5828
6164
  "rag": enumType(["green", "yellow", "red"]),
5829
- "comment": stringType().optional()
6165
+ "comment": stringType().max(updateInitiativeBodyOneStatusReportsItemTimelineCommentMax).optional()
5830
6166
  }),
5831
6167
  "budget": objectType({
5832
6168
  "rag": enumType(["green", "yellow", "red"]),
5833
- "comment": stringType().optional()
6169
+ "comment": stringType().max(updateInitiativeBodyOneStatusReportsItemBudgetCommentMax).optional()
5834
6170
  }),
5835
6171
  "skills": objectType({
5836
6172
  "rag": enumType(["green", "yellow", "red"]),
5837
- "comment": stringType().optional()
6173
+ "comment": stringType().max(updateInitiativeBodyOneStatusReportsItemSkillsCommentMax).optional()
5838
6174
  }),
5839
- "summary": stringType().optional()
5840
- })).optional(),
5841
- "dependsOn": arrayType(stringType()),
6175
+ "summary": stringType().max(updateInitiativeBodyOneStatusReportsItemSummaryMax).optional()
6176
+ })).max(updateInitiativeBodyOneStatusReportsMax).optional(),
6177
+ "dependsOn": arrayType(stringType()).max(updateInitiativeBodyOneDependsOnMax),
5842
6178
  "requiredSkills": arrayType(objectType({
5843
6179
  "skillId": stringType(),
5844
- "fte": numberType()
5845
- })).optional(),
6180
+ "fte": numberType(),
6181
+ "runFte": numberType().min(updateInitiativeBodyOneRequiredSkillsItemRunFteMin).optional()
6182
+ })).max(updateInitiativeBodyOneRequiredSkillsMax).optional(),
5846
6183
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
5847
6184
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
5848
6185
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
5849
- "dpiaUrl": stringType().optional(),
6186
+ "dpiaUrl": stringType().max(updateInitiativeBodyOneDpiaUrlMax).optional(),
5850
6187
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
5851
- "modelCardUrl": stringType().optional(),
5852
- "prohibitedOverride": stringType().optional(),
6188
+ "modelCardUrl": stringType().max(updateInitiativeBodyOneModelCardUrlMax).optional(),
6189
+ "prohibitedOverride": stringType().max(updateInitiativeBodyOneProhibitedOverrideMax).optional(),
5853
6190
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
5854
6191
  "checked": booleanType(),
5855
6192
  "asOfDate": stringType().optional(),
5856
- "note": stringType().optional()
6193
+ "note": stringType().max(updateInitiativeBodyOneGateEvidenceNoteMax).optional()
5857
6194
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
5858
6195
  "gateBypassed": booleanType().optional(),
5859
6196
  "aiAct": objectType({
@@ -5869,28 +6206,28 @@ var UpdateInitiativeBody = objectType({
5869
6206
  "integratesThirdPartyGpai": booleanType().optional(),
5870
6207
  "upstreamGpaiProvider": stringType().optional(),
5871
6208
  "upstreamGpaiInfoAvailable": booleanType().optional(),
5872
- "prohibitedPractices": arrayType(stringType()),
5873
- "art50Flags": arrayType(stringType()),
6209
+ "prohibitedPractices": arrayType(stringType().max(updateInitiativeBodyOneAiActProhibitedPracticesItemMax)).max(updateInitiativeBodyOneAiActProhibitedPracticesMax),
6210
+ "art50Flags": arrayType(stringType().max(updateInitiativeBodyOneAiActArt50FlagsItemMax)).max(updateInitiativeBodyOneAiActArt50FlagsMax),
5874
6211
  "publicSector": booleanType().optional(),
5875
6212
  "establishedOutsideEU": booleanType().optional(),
5876
- "classificationRationale": stringType().optional(),
6213
+ "classificationRationale": stringType().max(updateInitiativeBodyOneAiActClassificationRationaleMax).optional(),
5877
6214
  "classificationConfirmed": booleanType().optional(),
5878
6215
  "classificationConfirmedBy": stringType().optional(),
5879
6216
  "classificationConfirmedAt": stringType().optional(),
5880
6217
  "artifacts": recordType(stringType(), objectType({
5881
6218
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
5882
- "owner": stringType().optional(),
6219
+ "owner": stringType().max(updateInitiativeBodyOneAiActArtifactsOwnerMax).optional(),
5883
6220
  "lastReviewedAt": stringType().optional(),
5884
- "link": stringType().optional(),
5885
- "note": stringType().optional(),
6221
+ "link": stringType().max(updateInitiativeBodyOneAiActArtifactsLinkMax).optional(),
6222
+ "note": stringType().max(updateInitiativeBodyOneAiActArtifactsNoteMax).optional(),
5886
6223
  "maxAgeDays": numberType().optional()
5887
6224
  })).optional(),
5888
6225
  "obligations": recordType(stringType(), objectType({
5889
6226
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
5890
- "owner": stringType().optional(),
6227
+ "owner": stringType().max(updateInitiativeBodyOneAiActObligationsOwnerMax).optional(),
5891
6228
  "dueDate": stringType().optional(),
5892
- "evidenceLink": stringType().optional(),
5893
- "approver": stringType().optional(),
6229
+ "evidenceLink": stringType().max(updateInitiativeBodyOneAiActObligationsEvidenceLinkMax).optional(),
6230
+ "approver": stringType().max(updateInitiativeBodyOneAiActObligationsApproverMax).optional(),
5894
6231
  "approvalDate": stringType().optional(),
5895
6232
  "reviewDate": stringType().optional()
5896
6233
  })).optional(),
@@ -5917,16 +6254,16 @@ var UpdateInitiativeBody = objectType({
5917
6254
  "occurredAt": stringType(),
5918
6255
  "detectedAt": stringType(),
5919
6256
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
5920
- "description": stringType(),
6257
+ "description": stringType().max(updateInitiativeBodyOneAiActIncidentsItemDescriptionMax),
5921
6258
  "status": enumType(["open", "reported", "closed"]),
5922
- "authorityRef": stringType().optional(),
5923
- "owner": stringType().optional(),
5924
- "rootCause": stringType().optional(),
5925
- "correctiveActions": stringType().optional(),
6259
+ "authorityRef": stringType().max(updateInitiativeBodyOneAiActIncidentsItemAuthorityRefMax).optional(),
6260
+ "owner": stringType().max(updateInitiativeBodyOneAiActIncidentsItemOwnerMax).optional(),
6261
+ "rootCause": stringType().max(updateInitiativeBodyOneAiActIncidentsItemRootCauseMax).optional(),
6262
+ "correctiveActions": stringType().max(updateInitiativeBodyOneAiActIncidentsItemCorrectiveActionsMax).optional(),
5926
6263
  "reportedAt": stringType().optional(),
5927
6264
  "createdAt": stringType(),
5928
6265
  "updatedAt": stringType()
5929
- })).optional()
6266
+ })).max(updateInitiativeBodyOneAiActIncidentsMax).optional()
5930
6267
  }).optional(),
5931
6268
  "createdBy": objectType({
5932
6269
  "userId": stringType().uuid(),
@@ -5945,13 +6282,57 @@ var UpdateInitiativeBody = objectType({
5945
6282
  "createdAt": unknownType().optional(),
5946
6283
  "updatedAt": unknownType().optional()
5947
6284
  })).describe("Same as Initiative, minus server-assigned fields.");
6285
+ var updateInitiativeResponseNameMax = 200;
6286
+ var updateInitiativeResponseExternalIdMax = 200;
6287
+ var updateInitiativeResponseBusinessUnitMax = 200;
6288
+ var updateInitiativeResponseOwnerMax = 200;
6289
+ var updateInitiativeResponseDescriptionMax = 1e4;
6290
+ var updateInitiativeResponseAiCategoryMax = 200;
6291
+ var updateInitiativeResponseTagsItemMax = 200;
6292
+ var updateInitiativeResponseTagsMax = 1e3;
6293
+ var updateInitiativeResponseDocsUrlMax = 2e3;
6294
+ var updateInitiativeResponsePmUrlMax = 2e3;
6295
+ var updateInitiativeResponseDecisionLogItemOwnerMax = 200;
6296
+ var updateInitiativeResponseDecisionLogItemRationaleMax = 1e4;
6297
+ var updateInitiativeResponseDecisionLogMax = 1e3;
6298
+ var updateInitiativeResponseStatusReportsItemAuthorMax = 200;
6299
+ var updateInitiativeResponseStatusReportsItemScopeCommentMax = 1e4;
6300
+ var updateInitiativeResponseStatusReportsItemTimelineCommentMax = 1e4;
6301
+ var updateInitiativeResponseStatusReportsItemBudgetCommentMax = 1e4;
6302
+ var updateInitiativeResponseStatusReportsItemSkillsCommentMax = 1e4;
6303
+ var updateInitiativeResponseStatusReportsItemSummaryMax = 1e4;
6304
+ var updateInitiativeResponseStatusReportsMax = 1e3;
6305
+ var updateInitiativeResponseDependsOnMax = 1e3;
6306
+ var updateInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6307
+ var updateInitiativeResponseRequiredSkillsMax = 1e3;
6308
+ var updateInitiativeResponseDpiaUrlMax = 2e3;
6309
+ var updateInitiativeResponseModelCardUrlMax = 2e3;
6310
+ var updateInitiativeResponseProhibitedOverrideMax = 2e3;
6311
+ var updateInitiativeResponseGateEvidenceNoteMax = 1e4;
6312
+ var updateInitiativeResponseAiActProhibitedPracticesItemMax = 200;
6313
+ var updateInitiativeResponseAiActProhibitedPracticesMax = 100;
6314
+ var updateInitiativeResponseAiActArt50FlagsItemMax = 200;
6315
+ var updateInitiativeResponseAiActArt50FlagsMax = 100;
6316
+ var updateInitiativeResponseAiActClassificationRationaleMax = 1e4;
6317
+ var updateInitiativeResponseAiActArtifactsOwnerMax = 200;
6318
+ var updateInitiativeResponseAiActArtifactsLinkMax = 2e3;
6319
+ var updateInitiativeResponseAiActArtifactsNoteMax = 1e4;
6320
+ var updateInitiativeResponseAiActObligationsOwnerMax = 200;
6321
+ var updateInitiativeResponseAiActObligationsEvidenceLinkMax = 2e3;
6322
+ var updateInitiativeResponseAiActObligationsApproverMax = 200;
6323
+ var updateInitiativeResponseAiActIncidentsItemDescriptionMax = 1e4;
6324
+ var updateInitiativeResponseAiActIncidentsItemAuthorityRefMax = 2e3;
6325
+ var updateInitiativeResponseAiActIncidentsItemOwnerMax = 200;
6326
+ var updateInitiativeResponseAiActIncidentsItemRootCauseMax = 1e4;
6327
+ var updateInitiativeResponseAiActIncidentsItemCorrectiveActionsMax = 1e4;
6328
+ var updateInitiativeResponseAiActIncidentsMax = 1e3;
5948
6329
  var UpdateInitiativeResponse = objectType({
5949
6330
  "id": stringType(),
5950
- "name": stringType(),
5951
- "externalId": stringType().optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
5952
- "businessUnit": stringType(),
5953
- "owner": stringType(),
5954
- "description": stringType(),
6331
+ "name": stringType().max(updateInitiativeResponseNameMax),
6332
+ "externalId": stringType().max(updateInitiativeResponseExternalIdMax).optional().describe("The organisation's own reference for the initiative (project number, Jira key, IC id, \u2026)"),
6333
+ "businessUnit": stringType().max(updateInitiativeResponseBusinessUnitMax),
6334
+ "owner": stringType().max(updateInitiativeResponseOwnerMax),
6335
+ "description": stringType().max(updateInitiativeResponseDescriptionMax),
5955
6336
  "status": enumType(["Idea", "Pilot", "Scaling", "In Production", "On Hold", "Retired"]),
5956
6337
  "timelineStart": stringType(),
5957
6338
  "timelineEnd": stringType(),
@@ -5959,10 +6340,10 @@ var UpdateInitiativeResponse = objectType({
5959
6340
  "budgetForwardLooking": numberType().optional(),
5960
6341
  "vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
5961
6342
  "solutionType": enumType(["Internal", "External", "Hybrid"]),
5962
- "aiCategory": stringType(),
5963
- "tags": arrayType(stringType()),
5964
- "docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
5965
- "pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
6343
+ "aiCategory": stringType().max(updateInitiativeResponseAiCategoryMax),
6344
+ "tags": arrayType(stringType().max(updateInitiativeResponseTagsItemMax)).max(updateInitiativeResponseTagsMax),
6345
+ "docsUrl": stringType().max(updateInitiativeResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
6346
+ "pmUrl": stringType().max(updateInitiativeResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
5966
6347
  "archived": booleanType(),
5967
6348
  "evaluation": objectType({
5968
6349
  "valueScale": objectType({
@@ -6042,7 +6423,8 @@ var UpdateInitiativeResponse = objectType({
6042
6423
  "y1Pct": numberType(),
6043
6424
  "y2Pct": numberType()
6044
6425
  }).optional(),
6045
- "discountRatePct": numberType().optional()
6426
+ "discountRatePct": numberType().optional(),
6427
+ "operatingCostAnnual": numberType().optional()
6046
6428
  }).optional(),
6047
6429
  "actuals": objectType({
6048
6430
  "operatingCostAnnual": numberType().optional(),
@@ -6062,48 +6444,49 @@ var UpdateInitiativeResponse = objectType({
6062
6444
  "id": stringType(),
6063
6445
  "date": stringType(),
6064
6446
  "kind": enumType(["go", "pause", "stop", "rescope", "rebudget", "other"]),
6065
- "owner": stringType().optional(),
6066
- "rationale": stringType().optional(),
6447
+ "owner": stringType().max(updateInitiativeResponseDecisionLogItemOwnerMax).optional(),
6448
+ "rationale": stringType().max(updateInitiativeResponseDecisionLogItemRationaleMax).optional(),
6067
6449
  "createdAt": stringType().optional()
6068
- })).optional(),
6450
+ })).max(updateInitiativeResponseDecisionLogMax).optional(),
6069
6451
  "statusReports": arrayType(objectType({
6070
6452
  "id": stringType(),
6071
6453
  "date": stringType(),
6072
- "author": stringType().optional(),
6454
+ "author": stringType().max(updateInitiativeResponseStatusReportsItemAuthorMax).optional(),
6073
6455
  "scope": objectType({
6074
6456
  "rag": enumType(["green", "yellow", "red"]),
6075
- "comment": stringType().optional()
6457
+ "comment": stringType().max(updateInitiativeResponseStatusReportsItemScopeCommentMax).optional()
6076
6458
  }),
6077
6459
  "timeline": objectType({
6078
6460
  "rag": enumType(["green", "yellow", "red"]),
6079
- "comment": stringType().optional()
6461
+ "comment": stringType().max(updateInitiativeResponseStatusReportsItemTimelineCommentMax).optional()
6080
6462
  }),
6081
6463
  "budget": objectType({
6082
6464
  "rag": enumType(["green", "yellow", "red"]),
6083
- "comment": stringType().optional()
6465
+ "comment": stringType().max(updateInitiativeResponseStatusReportsItemBudgetCommentMax).optional()
6084
6466
  }),
6085
6467
  "skills": objectType({
6086
6468
  "rag": enumType(["green", "yellow", "red"]),
6087
- "comment": stringType().optional()
6469
+ "comment": stringType().max(updateInitiativeResponseStatusReportsItemSkillsCommentMax).optional()
6088
6470
  }),
6089
- "summary": stringType().optional()
6090
- })).optional(),
6091
- "dependsOn": arrayType(stringType()),
6471
+ "summary": stringType().max(updateInitiativeResponseStatusReportsItemSummaryMax).optional()
6472
+ })).max(updateInitiativeResponseStatusReportsMax).optional(),
6473
+ "dependsOn": arrayType(stringType()).max(updateInitiativeResponseDependsOnMax),
6092
6474
  "requiredSkills": arrayType(objectType({
6093
6475
  "skillId": stringType(),
6094
- "fte": numberType()
6095
- })).optional(),
6476
+ "fte": numberType(),
6477
+ "runFte": numberType().min(updateInitiativeResponseRequiredSkillsItemRunFteMin).optional()
6478
+ })).max(updateInitiativeResponseRequiredSkillsMax).optional(),
6096
6479
  "aiRiskTier": enumType(["Prohibited", "High-Risk", "Limited", "Minimal"]).optional(),
6097
6480
  "hitlPosture": enumType(["Unattended", "Supervised", "Human-Required"]).optional(),
6098
6481
  "dpiaStatus": enumType(["Not Required", "In Progress", "Completed"]).optional(),
6099
- "dpiaUrl": stringType().optional(),
6482
+ "dpiaUrl": stringType().max(updateInitiativeResponseDpiaUrlMax).optional(),
6100
6483
  "modelCardStatus": enumType(["Not Required", "Draft", "Published"]).optional(),
6101
- "modelCardUrl": stringType().optional(),
6102
- "prohibitedOverride": stringType().optional(),
6484
+ "modelCardUrl": stringType().max(updateInitiativeResponseModelCardUrlMax).optional(),
6485
+ "prohibitedOverride": stringType().max(updateInitiativeResponseProhibitedOverrideMax).optional(),
6103
6486
  "gateEvidence": recordType(stringType(), recordType(stringType(), objectType({
6104
6487
  "checked": booleanType(),
6105
6488
  "asOfDate": stringType().optional(),
6106
- "note": stringType().optional()
6489
+ "note": stringType().max(updateInitiativeResponseGateEvidenceNoteMax).optional()
6107
6490
  }))).optional().describe("Partial<Record<GateTransitionKey, Record<itemId, GateEvidenceItem>>>"),
6108
6491
  "gateBypassed": booleanType().optional(),
6109
6492
  "aiAct": objectType({
@@ -6119,28 +6502,28 @@ var UpdateInitiativeResponse = objectType({
6119
6502
  "integratesThirdPartyGpai": booleanType().optional(),
6120
6503
  "upstreamGpaiProvider": stringType().optional(),
6121
6504
  "upstreamGpaiInfoAvailable": booleanType().optional(),
6122
- "prohibitedPractices": arrayType(stringType()),
6123
- "art50Flags": arrayType(stringType()),
6505
+ "prohibitedPractices": arrayType(stringType().max(updateInitiativeResponseAiActProhibitedPracticesItemMax)).max(updateInitiativeResponseAiActProhibitedPracticesMax),
6506
+ "art50Flags": arrayType(stringType().max(updateInitiativeResponseAiActArt50FlagsItemMax)).max(updateInitiativeResponseAiActArt50FlagsMax),
6124
6507
  "publicSector": booleanType().optional(),
6125
6508
  "establishedOutsideEU": booleanType().optional(),
6126
- "classificationRationale": stringType().optional(),
6509
+ "classificationRationale": stringType().max(updateInitiativeResponseAiActClassificationRationaleMax).optional(),
6127
6510
  "classificationConfirmed": booleanType().optional(),
6128
6511
  "classificationConfirmedBy": stringType().optional(),
6129
6512
  "classificationConfirmedAt": stringType().optional(),
6130
6513
  "artifacts": recordType(stringType(), objectType({
6131
6514
  "status": enumType(["Not started", "Draft", "In Review", "Approved", "Outdated"]),
6132
- "owner": stringType().optional(),
6515
+ "owner": stringType().max(updateInitiativeResponseAiActArtifactsOwnerMax).optional(),
6133
6516
  "lastReviewedAt": stringType().optional(),
6134
- "link": stringType().optional(),
6135
- "note": stringType().optional(),
6517
+ "link": stringType().max(updateInitiativeResponseAiActArtifactsLinkMax).optional(),
6518
+ "note": stringType().max(updateInitiativeResponseAiActArtifactsNoteMax).optional(),
6136
6519
  "maxAgeDays": numberType().optional()
6137
6520
  })).optional(),
6138
6521
  "obligations": recordType(stringType(), objectType({
6139
6522
  "status": enumType(["Not started", "In Progress", "Done", "N/A"]),
6140
- "owner": stringType().optional(),
6523
+ "owner": stringType().max(updateInitiativeResponseAiActObligationsOwnerMax).optional(),
6141
6524
  "dueDate": stringType().optional(),
6142
- "evidenceLink": stringType().optional(),
6143
- "approver": stringType().optional(),
6525
+ "evidenceLink": stringType().max(updateInitiativeResponseAiActObligationsEvidenceLinkMax).optional(),
6526
+ "approver": stringType().max(updateInitiativeResponseAiActObligationsApproverMax).optional(),
6144
6527
  "approvalDate": stringType().optional(),
6145
6528
  "reviewDate": stringType().optional()
6146
6529
  })).optional(),
@@ -6167,16 +6550,16 @@ var UpdateInitiativeResponse = objectType({
6167
6550
  "occurredAt": stringType(),
6168
6551
  "detectedAt": stringType(),
6169
6552
  "category": enumType(["general", "death-or-serious-damage", "cybersecurity", "fundamental-rights", "infrastructure-disruption"]),
6170
- "description": stringType(),
6553
+ "description": stringType().max(updateInitiativeResponseAiActIncidentsItemDescriptionMax),
6171
6554
  "status": enumType(["open", "reported", "closed"]),
6172
- "authorityRef": stringType().optional(),
6173
- "owner": stringType().optional(),
6174
- "rootCause": stringType().optional(),
6175
- "correctiveActions": stringType().optional(),
6555
+ "authorityRef": stringType().max(updateInitiativeResponseAiActIncidentsItemAuthorityRefMax).optional(),
6556
+ "owner": stringType().max(updateInitiativeResponseAiActIncidentsItemOwnerMax).optional(),
6557
+ "rootCause": stringType().max(updateInitiativeResponseAiActIncidentsItemRootCauseMax).optional(),
6558
+ "correctiveActions": stringType().max(updateInitiativeResponseAiActIncidentsItemCorrectiveActionsMax).optional(),
6176
6559
  "reportedAt": stringType().optional(),
6177
6560
  "createdAt": stringType(),
6178
6561
  "updatedAt": stringType()
6179
- })).optional()
6562
+ })).max(updateInitiativeResponseAiActIncidentsMax).optional()
6180
6563
  }).optional(),
6181
6564
  "createdBy": objectType({
6182
6565
  "userId": stringType().uuid(),
@@ -6222,7 +6605,7 @@ var ListAdminAuditLogQueryParams = objectType({
6222
6605
  });
6223
6606
  var ListAdminAuditLogResponseItem = objectType({
6224
6607
  "id": stringType().uuid(),
6225
- "action": enumType(["member.added", "member.role_changed", "member.permissions_changed", "member.removed", "settings.updated", "permission_profile.created", "permission_profile.updated", "permission_profile.deleted", "initiative.created", "initiative.deleted", "user.erased"]),
6608
+ "action": enumType(["member.added", "member.role_changed", "member.permissions_changed", "member.removed", "settings.updated", "permission_profile.created", "permission_profile.updated", "permission_profile.deleted", "initiative.created", "initiative.deleted", "snapshot.created", "snapshot.renamed", "snapshot.deleted", "skill.created", "skill.updated", "skill.deleted", "organization.renamed", "user.erased"]),
6226
6609
  "targetType": stringType(),
6227
6610
  "targetId": stringType().nullable(),
6228
6611
  "actorName": stringType().nullable(),
@@ -6377,6 +6760,9 @@ var OPERATIONAL_OBLIGATION_KEYS = [
6377
6760
  "deployer-operational-monitoring",
6378
6761
  "deployer-escalation-path",
6379
6762
  "deployer-persons-informed",
6763
+ "deployer-verify-risk-mgmt",
6764
+ "deployer-verify-data-governance",
6765
+ "deployer-verify-technical-documentation",
6380
6766
  "provider-qms-applied",
6381
6767
  "provider-conformity-assessment",
6382
6768
  "provider-post-market-monitoring",
@@ -6393,7 +6779,9 @@ var OPERATIONAL_OBLIGATION_KEYS = [
6393
6779
  "gpai-systemic-incident-tracking",
6394
6780
  "gpai-systemic-cybersecurity",
6395
6781
  "art50-ai-interaction-disclosed",
6782
+ "deployer-verify-interaction-disclosure",
6396
6783
  "art50-synthetic-content-marked",
6784
+ "art50-generated-text-disclosed",
6397
6785
  "art50-emotion-biometric-disclosed",
6398
6786
  "art50-deepfake-disclosed",
6399
6787
  "importer-verify-conformity",
@@ -6405,8 +6793,8 @@ var PORTFOLIO_MODES = ["ai", "digital", "innovation"];
6405
6793
  var EN_AI = {};
6406
6794
  var DE_AI = {};
6407
6795
  var EN_DIGITAL = {
6408
- "brand.app": "Digital Portfolio Steering",
6409
- "brand.mobile": "BICon \xB7 Digital Portfolio Steering",
6796
+ "brand.app": "BICon Portfolio Steering",
6797
+ "brand.mobile": "BICon Portfolio Steering",
6410
6798
  "brand.motto": "Digital investments multiply value, but they can also multiply complexity.",
6411
6799
  "filters.aiCategory": "Digital category",
6412
6800
  "evaluate.field.aiCategory": "Digital Category",
@@ -6463,9 +6851,7 @@ var EN_DIGITAL = {
6463
6851
  "subHelp.cybersecurityExposure": "Attack surface introduced \u2014 data flows, identities, third-party APIs, supply chain.",
6464
6852
  "subHelp.innovationCapability": "Strengthening of internal digital muscle \u2014 talent, platforms, tooling, reusable assets.",
6465
6853
  "scenarios.lever.adoptionSpeed": "Rollout Speed",
6466
- "scenarios.lever.oversightIntensity": "Operational Oversight",
6467
6854
  "scenarios.leverHelp.adoptionSpeed": "How quickly initiatives move from Pilot \u2192 Rollout \u2192 Production at scale.",
6468
- "scenarios.leverHelp.oversightIntensity": "Operational monitoring, SRE practice and four-eyes review in production.",
6469
6855
  "prioritisation.cat.Quick Wins": "Quick Wins",
6470
6856
  "prioritisation.cat.Strategic Core Initiatives": "Strategic Platform Initiatives",
6471
6857
  "prioritisation.cat.High Governance Risk": "High Compliance Risk",
@@ -6483,7 +6869,7 @@ var EN_DIGITAL = {
6483
6869
  "settings.prio.operatingModel": "Operating Model Modernisation",
6484
6870
  "settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each digital initiative to a strategic archetype. Rules are evaluated top-to-bottom and the first match wins. All values are scores out of 100 across the four dimensions: V = Value & Scale, F = Delivery Feasibility & Operability, C = Compliance & Operational Risk, S = Strategic Impact.",
6485
6871
  "inventory.col.scores": "Scores (V/F/C/S)",
6486
- "concept.eyebrow": "Digital Portfolio Steering",
6872
+ "concept.eyebrow": "Steering of AI, digital and transformation portfolios",
6487
6873
  "concept.title": "Turn fragmented digital projects into a managed portfolio.",
6488
6874
  "concept.lead": "Digital initiatives create value only when they are prioritised, governed and scaled systematically. This console helps boards and steering committees decide which digital projects to roll out, which to keep in pilot, and which to stop.",
6489
6875
  "concept.quote": "Treat digital initiatives not as isolated projects, but as a managed portfolio of capabilities \u2014 assessed along a consistent set of dimensions that capture both value creation and delivery risk.",
@@ -6515,16 +6901,15 @@ var EN_DIGITAL = {
6515
6901
  "inventory.sort.feasibility": "Sort: Delivery feasibility",
6516
6902
  "portfolio.axis.y": "Delivery Feasibility & Operability",
6517
6903
  "portfolio.tooltip.feasibility": "Delivery Feasibility",
6518
- "op.input.feasibility": "Delivery Feasibility",
6519
6904
  "evaluate.profile.radarFeasibility": "Delivery",
6520
6905
  "evaluate.profile.radarGovernance": "Compliance",
6521
6906
  "inventory.title": "Digital Initiative Inventory",
6522
6907
  "inventory.subtitle": "Manage and evaluate your portfolio of digital initiatives.",
6523
6908
  "inventory.empty.title": "Digital investments multiply value, but they can also multiply complexity.",
6524
6909
  "inventory.empty.subtitle": "Begin by adding your enterprise digital initiatives to the portfolio, or load the strategic demo dataset to explore the evaluation frameworks.",
6525
- "memo.summary.portfolio": "The enterprise currently runs {count} active digital initiatives with an aggregate committed budget of {budget}.",
6910
+ "memo.summary.portfolio": "The enterprise currently runs {count} active digital initiatives with a committed budget of {budget} (from {stPilot} onwards).",
6526
6911
  "governance.subtitle": "Executive oversight of digital delivery risk, compliance exposure and operational dependencies.",
6527
- "op.subtitle": "Organisational implications of the current digital portfolio across staffing, compliance, scalability, customer interaction and operating-model evolution.",
6912
+ "op.subtitle": "Organisational implications of the current digital portfolio: the governance work it creates, how much of the business now depends on it, how ready delivery is, whether it can absorb volume, how far it shifts the operating model, how much labour it automates, and how far along it is.",
6528
6913
  "concentration.subtitle": "Detect systemic exposure across vendor strategy, digital category, business unit, and compliance band. HHI thresholds: <1500 diversified, 1500\u20132500 moderate, >2500 highly concentrated.",
6529
6914
  "concentration.hhi.category": "Digital category",
6530
6915
  "concentration.heatmap.title": "Cluster heatmap \u2014 business unit \xD7 digital category",
@@ -6535,8 +6920,8 @@ var EN_DIGITAL = {
6535
6920
  "boardPack.heatmap.subtitle": "Business unit \xD7 digital category \u2014 clusters where one BU stacks one digital capability.",
6536
6921
  "portfolio.custom.metric.feasibility": "Delivery Feasibility",
6537
6922
  "subHelp.operationalLeverage": "How much the digital solution multiplies output per unit of human work. Higher = broader operational reach per FTE.",
6538
- "op.staffing.level3": "Dedicated digital control function",
6539
- "scenarios.subtitle": "A what-if tool: pick a strategic stance, move the sliders, and see how five portfolio outcomes change. Everything is calculated live from the sliders \u2014 no forecasting.",
6923
+ "op.governance.level3": "Dedicated digital control function",
6924
+ "scenarios.subtitle": "A what-if tool: pick a strategic stance, move the sliders, and see how three portfolio outcomes change. Everything is calculated live from the sliders \u2014 no forecasting.",
6540
6925
  "scenarios.preset.transformational.desc": "Reshape the operating model around digital; high readiness and diversified vendor base.",
6541
6926
  "memo.heading": "Board Memorandum \u2014 Digital Transformation Portfolio",
6542
6927
  "memo.concentration.category": "Digital category concentration: {name} accounts for {count} of {total} initiatives ({pct}%).",
@@ -6557,10 +6942,9 @@ var EN_DIGITAL = {
6557
6942
  "method.s4.stop": "<strong>Stop</strong> \u2014 Business Impact &lt; 50 and Delivery Feasibility &lt; 50. Low impact and low feasibility \u2014 defer or sunset.",
6558
6943
  "method.s4.bubbles": "Bubble size additionally emphasises Strategic Impact on its own (so a strategic initiative reads as a larger bubble even when its value score is moderate); bubble colour reflects the compliance & operational-risk band.",
6559
6944
  "method.s5.governance": "<strong>High Compliance & Operational Risk</strong> (precedence 3) \u2014 compliance & operational-risk score \u2265 {g} (and the initiative was not already classified as Quick Wins or Strategic Core). Elevated regulatory, compliance or operational-risk exposure that must be addressed before scaling.",
6560
- "method.s8.b3": "No external regulatory, operational-risk or third-party assurance signals are incorporated.",
6561
6945
  "memo.assumptions.signals": "No external regulatory, operational-risk or third-party assurance signals have been incorporated into these scores.",
6562
6946
  "method.s6.p1": 'The <a href="https://www.investopedia.com/terms/h/hhi.asp" target="_blank" rel="noopener noreferrer" class="text-primary underline underline-offset-2 hover:no-underline">Herfindahl\u2013Hirschman Index</a> is applied to four cuts of the portfolio: <strong>vendor strategy</strong>, <strong>solution type</strong>, <strong>digital category</strong>, and <strong>business unit</strong>.',
6563
- "method.s6.p2": "For the Scenarios page, each per-dimension HHI is mapped to a 0\u2013100 risk score using the same thresholds, then blended <strong>35 / 20 / 20 / 15</strong> (vendor / solution type / digital category / business unit) with a further <strong>10 %</strong> weight on average operational dependency. The overall reading is then lifted toward the worst single dimension (50 / 50 blend of weighted average and maximum), so a highly concentrated vendor strategy alone pushes the score up even if the other dimensions look balanced. A business-unit \xD7 digital-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
6947
+ "method.s6.p2": "A business-unit \xD7 digital-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
6564
6948
  "concept.problem.p1": "Many organisations are pursuing digital initiatives across a wide range of business processes. These initiatives often emerge from local experimentation within business units or technology teams rather than from a structured strategic process.",
6565
6949
  "concept.dim.value.body": "Economic leverage of the digital solution. Use cases addressing high-frequency, resource-intensive activities typically offer the greatest potential for economic impact; limited-scale or marginal-efficiency cases rarely justify the organisational effort required.",
6566
6950
  "concept.dim.feasibility.body": "Practical reliability of the digital solution in the given context. In regulated environments technical feasibility alone is rarely enough \u2014 the solution must also be operable, monitorable and defensible before it can leave experimentation.",
@@ -6569,10 +6953,10 @@ var EN_DIGITAL = {
6569
6953
  "concept.dim.governance.body": "Digital systems introduce new forms of operational, regulatory and reputational risk. Governance defines how they are controlled, monitored and limited \u2014 whether they may be fully automated, must keep humans in the loop, or are subject to deployment restrictions.",
6570
6954
  "concept.dim.governance.q1": "What is the worst-case impact of a failure or incorrect output of the digital system?",
6571
6955
  "scenarios.leverHelp.automationIntensity": "How much of human work the digital portfolio takes on (straight-through processing, end-to-end automation).",
6572
- "scenarios.calc.baselineNote": "Baseline is different: its five numbers are read directly from your Inventory, not from the levers. Adoption = % of active initiatives in Production or Scaling. Governance Load = average of governance scores (weighted with human oversight, monitoring complexity and auditability). Transformation = average of strategic sub-scores for transformation potential and operating-model alignment. Concentration Risk uses the same HHI methodology as the Concentration page: a per-dimension risk score (vendor, solution type, digital category, business unit) is derived from HHI thresholds (<1500 diversified, 1500\u20132500 moderate, >2500 highly concentrated), blended 35/20/20/15 with 10% operational dependency \u2014 and the overall reading is lifted toward the worst single dimension so a highly concentrated vendor strategy alone pushes the score up. Delivery Confidence = average of feasibility scores.",
6573
- "op.staffing.detailHigh": "Recommend a central digital control function with named accountability per high-governance initiative.",
6574
- "op.scalability.detailHigh": "The portfolio is positioned to scale; ensure platform and operations capacity matches demand.",
6575
- "op.customer.detailHigh": "Direct customer exposure requires explicit transparency, accessibility and complaints-handling controls.",
6956
+ "scenarios.calc.baselineNote": "Baseline is different: its three numbers are read directly from your Inventory, not from the levers. Adoption = % of active initiatives in Production or Scaling. Transformation = average of strategic sub-scores for transformation potential and operating-model alignment. Delivery Confidence = average of feasibility scores.",
6957
+ "op.governance.detailHigh": "Recommend a central digital control function with named accountability per high-governance initiative.",
6958
+ "op.governance.detailMed": "Oversight is more than incidental: name a part-time owner for operational risk and keep review time in the delivery plan.",
6959
+ "op.delivery.detailHigh": "Data, integration and platform foundations are sound across the portfolio; ensure platform and operations capacity keeps pace.",
6576
6960
  "dim.valueScale.intro": "Score the economic leverage of this digital solution \u2014 how much measurable value it can generate and how broadly it can scale across the enterprise. Higher scores indicate broad, repeatable, financially material impact rather than a single-team efficiency gain.",
6577
6961
  "dim.feasibility.intro": "Score how realistic delivery is given current data, integration, operability and traceability constraints. In regulated environments technical feasibility alone is rarely enough \u2014 higher scores indicate the solution can be built, operated, monitored and defended to operators and auditors.",
6578
6962
  "dim.governance.intro": "Score the regulatory, oversight, auditability, security and reputational exposure of the digital system. Higher scores mean MORE sensitivity and a greater control load on operations and the board \u2014 covering whether the system may run unattended, must keep humans in the loop, or needs deployment restrictions.",
@@ -6583,15 +6967,15 @@ var EN_DIGITAL = {
6583
6967
  "dim.governance.band2.label": "Supervised operation",
6584
6968
  "dim.governance.band3.meaning": "Active board-level oversight, audit trail and access controls required for the digital system.",
6585
6969
  "dim.strategic.band3.meaning": "Reshapes operating model, customer experience, or how data is used across the business.",
6586
- "op.staffing.detailLow": "Embedded delivery teams with part-time operational-risk coverage are typically sufficient at this load.",
6970
+ "op.governance.detailLow": "Embedded delivery teams with part-time operational-risk coverage are typically sufficient at this load.",
6587
6971
  "boardPack.col.g": "C",
6588
6972
  // ── Concept & Methodology page theming ────────────────────────────────
6589
6973
  "concept.problem.p3": "Without a shared rubric the failure modes are predictable: <strong>pilot fatigue</strong> (many proofs of concept, few productions), <strong>redundant tooling</strong> across business units, <strong>compliance debt</strong> that surfaces only at audit time, and <strong>shadow IT</strong> that escapes both budget and risk visibility.",
6590
- "concept.problem.p4": "BICon is built for the steering audience: <strong>CIO, CDO, CTO, COO</strong>, Digital Council, Risk and Compliance \u2014 anyone who needs one reproducible portfolio view across functions, not a per-team backlog.",
6974
+ "concept.problem.p4": "BICon Portfolio Steering is built for the steering audience: <strong>CIO, CDO, CTO, COO</strong>, Digital Council, Risk and Compliance \u2014 anyone who needs one reproducible portfolio view across functions, not a per-team backlog.",
6591
6975
  "concept.problem.p5": "Unlike classic PPM tools (Jira Portfolio, Planview, ServiceNow SPM) this console is purpose-built for AI / Digital / Innovation steering: explicit compliance bands, dependency-aware stage-gates and a deterministic prioritisation rule book \u2014 not generic project tasks and Gantt charts.",
6592
6976
  "concept.gettingStarted.s2.body": "For each initiative open Evaluate, set the four 0\u2013100 dimension scores with confidence, add dependencies and Stage-gate evidence. The Soft-Sync hint catches contradictions; the decision log keeps the audit trail.",
6593
6977
  "concept.gettingStarted.s3.body": "Check the Portfolio Map (Scale / Pilot / Assist / Stop), the Value-at-Stake view and the Compliance bands. Concentration and Operating Model surface where the portfolio is over-exposed.",
6594
- "concept.gettingStarted.s5.body": "Run Scenarios for \u221210 % / \u221220 % budget, freeze a Snapshot, then export the Executive Memo and Board Pack (PDF/PPTX) \u2014 bilingual, with the full Stage-gate section. The Board Memo and Steering KPIs surface the forward-looking budget alongside Net 3-year value so the board sees what is still allocatable.",
6978
+ "concept.gettingStarted.s5.body": "Try a \u221210 % / \u221220 % budget on Strategic Prioritisation, freeze a Snapshot, then export the Executive Memo and Board Pack (PDF/PPTX) \u2014 bilingual, with the full Stage-gate section. The Board Memo and Steering KPIs surface the forward-looking budget alongside Net 3-year value so the board sees what is still allocatable.",
6595
6979
  "concept.pillar.portfolio.b1": "Multi-dimensional scoring: value, delivery feasibility, compliance & operational risk, strategic fit",
6596
6980
  "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman Index)</strong> \u2014 concentration metric. 0 = perfectly diversified, 10 000 = single dominant share. Used here on vendor, solution type, digital category and business unit cuts.",
6597
6981
  "concept.features.f5.body": "Automatic compliance-band assignment per initiative, plus concentration cuts by business unit and operating model. Provides early visibility on dependency on a single unit, platform or vendor for risk and compliance review.",
@@ -6619,21 +7003,18 @@ var EN_DIGITAL = {
6619
7003
  "method.s5.uncategorised": "<strong>Tactical / Uncategorised</strong> (precedence 7) \u2014 fallback for initiatives that don't satisfy any of rules 1\u20136. Treat as tactical until scores sharpen.",
6620
7004
  "method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by the category rules above (precedence 1 \u2192 7), then within each category ordered by <strong>Value</strong> score descending, then \u2014 if Value-at-Stake weighting is enabled in Settings and the row sits in Quick Wins / Strategic Platform Initiatives \u2014 Year-3 benefit descending. Final tie-break is <strong>Strategic Impact</strong> descending, then name A\u2192Z, so the result is deterministic and reproducible.",
6621
7005
  "method.s10.p7": "<strong>Quick Win definition.</strong> The Quick Wins category requires fast time-to-value. Therefore a Quick Win that depends on an active non-Quick-Win upstream (Strategic Platform Initiative, Operating Model Modernisation, High Compliance Risk etc.) is automatically demoted out of Quick Wins \u2014 the upstream's pre-work makes it no longer quick. The rule is transitive: if A depends on B, and B is itself demoted, A is also demoted in the next iteration.",
6622
- "method.s7.p1": "Five named presets (Baseline, Accelerated Adoption, Controlled Scaling, Defensive Posture, Operating Model Transformation) plus Custom, each driven by six explicit levers: rollout speed, governance strictness, automation intensity, organisational readiness, vendor diversification, operational oversight.",
6623
- "method.s7.p2": "<strong>Baseline is special.</strong> Its slider positions are derived directly from your Inventory \u2014 rollout speed = % of active initiatives In Production or Scaling, governance strictness = average compliance &amp; operational-risk score, automation intensity = average transformation potential, organisational readiness = average of organisational leverage and integration feasibility, vendor diversification = 100 \u2212 vendor HHI risk, operational oversight = average oversight sub-score. These derived positions also act as the <strong>neutral reference</strong> for the projection.",
6624
- "method.s7.p3": "Projected outcomes are computed as transparent linear blends of the levers' <strong>delta from this Baseline</strong>, combined with structural inputs from the portfolio (production-stage share, compliance-load average, HHI-based concentration risk, delivery-feasibility average). Selecting Baseline therefore overlays Current on top of Baseline by construction; moving any slider produces an honest delta from where the portfolio actually sits today.",
6625
7006
  "method.audit.scope.governance": "<strong>Status</strong> and the four <strong>evaluation dimension scores</strong> (Value, Delivery Feasibility, Compliance &amp; Operational Risk, Strategic Impact) with their confidence.",
6626
7007
  "method.audit.scope.metadata": "<strong>All Core Metadata fields</strong> \u2014 name, business unit, owner, description, timeline, budget, vendor strategy, solution type, digital category and tags.",
6627
7008
  "method.gates.enforced.intro": "Two governance fields are enforced as hard checks when the lifecycle status changes \u2014 active because the EU AI Act module is enabled for this workspace:",
6628
7009
  "method.gates.enforced.scope": "Both checks feed the EU AI Act readiness score in addition to the hard block."
6629
7010
  };
6630
7011
  var DE_DIGITAL = {
6631
- "brand.app": "Digital-Portfolio-Steuerung",
6632
- "brand.mobile": "BICon \xB7 Digital-Portfolio-Steuerung",
7012
+ "brand.app": "BICon Portfolio Steering",
7013
+ "brand.mobile": "BICon Portfolio Steering",
6633
7014
  "brand.motto": "Digitale Investitionen vervielfachen den Nutzen, aber auch die Komplexit\xE4t.",
6634
7015
  "filters.aiCategory": "Digital-Kategorie",
6635
7016
  "evaluate.field.aiCategory": "Digital-Kategorie",
6636
- "evaluate.fieldHelp.aiCategory": "Bestimmt die Digital-Kategorie-Konzentration (Seite \u201EKonzentration\u201C) und den Kategorie-Mix im Vorstandsmemo. Wird au\xDFerdem zur Filterung im Inventar verwendet.",
7017
+ "evaluate.fieldHelp.aiCategory": "Bestimmt die Digital-Kategorie-Konzentration (Seite \u201EKonzentration\u201C) und den Kategorie-Mix im Vorstandsmemo. Wird ausserdem zur Filterung im Inventar verwendet.",
6637
7018
  "category.Generative AI": "Kundenkan\xE4le",
6638
7019
  "category.Predictive AI": "Daten & Analytik",
6639
7020
  "category.Automation": "Workflow-Automatisierung",
@@ -6686,9 +7067,7 @@ var DE_DIGITAL = {
6686
7067
  "subHelp.cybersecurityExposure": "Eingef\xFChrte Angriffsfl\xE4che \u2014 Datenfl\xFCsse, Identit\xE4ten, Drittanbieter-APIs, Lieferkette.",
6687
7068
  "subHelp.innovationCapability": "Aufbau interner digitaler Muskeln \u2014 Talente, Plattformen, Tooling, wiederverwendbare Bausteine.",
6688
7069
  "scenarios.lever.adoptionSpeed": "Rollout-Tempo",
6689
- "scenarios.lever.oversightIntensity": "Operative Aufsicht",
6690
7070
  "scenarios.leverHelp.adoptionSpeed": "Wie schnell Initiativen von Pilot \u2192 Rollout \u2192 Produktion in der Breite wandern.",
6691
- "scenarios.leverHelp.oversightIntensity": "Operatives Monitoring, SRE-Praxis und Vier-Augen-Prinzip im Produktivbetrieb.",
6692
7071
  "prioritisation.cat.Quick Wins": "Quick Wins",
6693
7072
  "prioritisation.cat.Strategic Core Initiatives": "Strategische Plattform-Initiativen",
6694
7073
  "prioritisation.cat.High Governance Risk": "Hohes Compliance-Risiko",
@@ -6706,7 +7085,7 @@ var DE_DIGITAL = {
6706
7085
  "settings.prio.operatingModel": "Betriebsmodell-Modernisierung",
6707
7086
  "settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede digitale Initiative einem strategischen Archetyp zuordnet. Die Regeln werden von oben nach unten gepr\xFCft, die erste \xDCbereinstimmung gewinnt. Alle Werte sind Punkte von 0\u2013100 \xFCber die vier Dimensionen: W = Wert & Skalierung, M = Umsetzbarkeit & Betreibbarkeit, C = Compliance & Betriebsrisiko, S = Strategischer Impact.",
6708
7087
  "inventory.col.scores": "Punkte (W/M/C/S)",
6709
- "concept.eyebrow": "Digital-Portfolio-Steuerung",
7088
+ "concept.eyebrow": "Steuerung von KI-, Digital- und Transformationsportfolios",
6710
7089
  "concept.title": "Fragmentierte Digitalprojekte in ein gesteuertes Portfolio verwandeln.",
6711
7090
  "concept.lead": "Digitale Initiativen schaffen nur dann Wert, wenn sie systematisch priorisiert, gesteuert und skaliert werden. Diese Konsole hilft Vorst\xE4nden und Steuerungsgremien zu entscheiden, welche Digitalprojekte ausgerollt, welche im Pilot weitergef\xFChrt und welche eingestellt werden sollten.",
6712
7091
  "concept.quote": "Digitale Initiativen sind nicht als isolierte Projekte zu betrachten, sondern als gesteuertes Portfolio von F\xE4higkeiten \u2014 bewertet entlang eines einheitlichen Satzes von Dimensionen, die sowohl Wertbeitrag als auch Liefer- und Betriebsrisiko erfassen.",
@@ -6723,7 +7102,7 @@ var DE_DIGITAL = {
6723
7102
  "concept.quad.Scale.body": "Hoher Wert, hohe Lieferzuversicht und beherrschbares Risiko \u2014 bereit f\xFCr den unternehmensweiten Roll-out.",
6724
7103
  "concept.quad.Pilot.body": "Vielversprechendes Potenzial, aber technische, Integrations- oder organisatorische Unsicherheit \u2014 vor dem Skalieren pilotieren.",
6725
7104
  "concept.quad.Assist.body": "Wertvoll, aber noch nicht stabil genug f\xFCr die Skalierung \u2014 zun\xE4chst Grundlagen st\xE4rken.",
6726
- "concept.quad.Stop.body": "Begrenzter Wert oder \xFCberm\xE4\xDFiges Liefer- und Compliance-Risiko \u2014 zur\xFCckstellen oder beenden.",
7105
+ "concept.quad.Stop.body": "Begrenzter Wert oder \xFCberm\xE4ssiges Liefer- und Compliance-Risiko \u2014 zur\xFCckstellen oder beenden.",
6727
7106
  "concept.features.f1.body": "Jede Digitalinitiative mit Gesch\xE4ftseinheit, Owner, Tags, Lebenszyklus und 0\u2013100-Bewertung \xFCber alle vier Dimensionen erfassen.",
6728
7107
  "concept.features.f2.body": "Business-Impact \xD7 Lieferzuversicht als Blasendiagramm, eingef\xE4rbt nach Compliance-Band, mit Ausrollen / Pilot / St\xE4rken / Stopp-Quadrantenz\xE4hlung.",
6729
7108
  "dim.feasibility.title": "Liefer-Machbarkeit & Betreibbarkeit",
@@ -6738,16 +7117,15 @@ var DE_DIGITAL = {
6738
7117
  "inventory.sort.feasibility": "Sortieren: Liefer-Machbarkeit",
6739
7118
  "portfolio.axis.y": "Liefer-Machbarkeit & Betreibbarkeit",
6740
7119
  "portfolio.tooltip.feasibility": "Liefer-Machbarkeit",
6741
- "op.input.feasibility": "Liefer-Machbarkeit",
6742
7120
  "evaluate.profile.radarFeasibility": "Lieferung",
6743
7121
  "evaluate.profile.radarGovernance": "Compliance",
6744
7122
  "inventory.title": "Digital-Initiativen-Inventar",
6745
7123
  "inventory.subtitle": "Verwalten und bewerten Sie Ihr Portfolio digitaler Initiativen.",
6746
7124
  "inventory.empty.title": "Digitale Investitionen vervielfachen den Nutzen, aber auch die Komplexit\xE4t.",
6747
7125
  "inventory.empty.subtitle": "F\xFCgen Sie zuerst Ihre digitalen Initiativen dem Portfolio hinzu, oder laden Sie den strategischen Demodatensatz, um die Bewertungsrahmen zu erkunden.",
6748
- "memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive digitale Initiativen mit einem zugesagten Gesamtbudget von {budget}.",
7126
+ "memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive digitale Initiativen mit einem zugesagten Budget von {budget} (ab {stPilot}).",
6749
7127
  "governance.subtitle": "F\xFChrungsaufsicht \xFCber Lieferrisiken, Compliance-Exposition und operative Abh\xE4ngigkeiten im Digital-Portfolio.",
6750
- "op.subtitle": "Organisatorische Implikationen des aktuellen Digital-Portfolios \xFCber Staffing, Compliance, Skalierbarkeit, Kundeninteraktion und Betriebsmodell-Entwicklung.",
7128
+ "op.subtitle": "Organisatorische Implikationen des aktuellen Digital-Portfolios: welche Governance-Arbeit es erzeugt, wie viel des Gesch\xE4fts inzwischen daran h\xE4ngt, wie lieferbereit es ist, ob es Mengen verkraftet, wie stark es das Betriebsmodell verschiebt, wie viel Arbeit es automatisiert und wie weit es fortgeschritten ist.",
6751
7129
  "concentration.subtitle": "Systemische Exposition \xFCber Anbieterstrategie, Digital-Kategorie, Gesch\xE4ftseinheit und Compliance-Band erkennen. HHI-Schwellen: <1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert.",
6752
7130
  "concentration.hhi.category": "Digital-Kategorie",
6753
7131
  "concentration.heatmap.title": "Cluster-Heatmap \u2014 Gesch\xE4ftseinheit \xD7 Digital-Kategorie",
@@ -6757,9 +7135,9 @@ var DE_DIGITAL = {
6757
7135
  "ie.boardPack.coverTitlePlaceholder": "Digital-Portfolio \u2014 Vorstandssitzung Q3 2026",
6758
7136
  "boardPack.heatmap.subtitle": "Gesch\xE4ftseinheit \xD7 Digital-Kategorie \u2014 Cluster, in denen eine GE eine digitale F\xE4higkeit b\xFCndelt.",
6759
7137
  "portfolio.custom.metric.feasibility": "Liefer-Machbarkeit",
6760
- "subHelp.operationalLeverage": "Wie stark die digitale L\xF6sung den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6\xDFere operative Reichweite pro FTE.",
6761
- "op.staffing.level3": "Dedizierte Digital-Kontrollfunktion",
6762
- "scenarios.subtitle": "Ein What-if-Werkzeug: eine strategische Haltung w\xE4hlen, die Regler bewegen und sehen, wie sich f\xFCnf Portfolio-Kennzahlen ver\xE4ndern. Alles wird live aus den Reglern berechnet \u2014 keine Prognose.",
7138
+ "subHelp.operationalLeverage": "Wie stark die digitale L\xF6sung den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6ssere operative Reichweite pro FTE.",
7139
+ "op.governance.level3": "Dedizierte Digital-Kontrollfunktion",
7140
+ "scenarios.subtitle": "Ein What-if-Werkzeug: eine strategische Haltung w\xE4hlen, die Regler bewegen und sehen, wie sich drei Portfolio-Kennzahlen ver\xE4ndern. Alles wird live aus den Reglern berechnet \u2014 keine Prognose.",
6763
7141
  "scenarios.preset.transformational.desc": "Betriebsmodell um Digital neu gestalten; hohe Reife und diversifizierte Anbieterbasis.",
6764
7142
  "memo.heading": "Vorstandsmemo \u2014 Digital-Transformations-Portfolio",
6765
7143
  "memo.concentration.category": "Digital-Kategoriekonzentration: {name} stellt {count} von {total} Initiativen ({pct}%).",
@@ -6768,7 +7146,7 @@ var DE_DIGITAL = {
6768
7146
  "method.s2.title": "2. Compliance- & Betriebsrisiko-Klassifikation",
6769
7147
  "method.s2.subtitle": "Compliance- & Betriebsrisiko-B\xE4nder und was sie f\xFCr die Kontroll-Last bedeuten.",
6770
7148
  "method.s2.intro": "Initiativen werden auf Basis des Compliance- & Betriebsrisiko-Werts klassifiziert:",
6771
- "method.s2.b2": "<strong>21\u201340 \xB7 Standard-Kontrollen</strong>: Standardmonitoring; regelm\xE4\xDFige \xDCberpr\xFCfung.",
7149
+ "method.s2.b2": "<strong>21\u201340 \xB7 Standard-Kontrollen</strong>: Standardmonitoring; regelm\xE4ssige \xDCberpr\xFCfung.",
6772
7150
  "method.s2.b3": "<strong>41\u201360 \xB7 Erweiterte Betriebskontrollen</strong>: dokumentierte Verfahren, Vier-Augen-Prinzip, aktives Monitoring.",
6773
7151
  "method.s2.b4": "<strong>61\u201380 \xB7 Eingeschr\xE4nkter Rollout</strong>: aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen.",
6774
7152
  "method.s2.b5": "<strong>81\u2013100 \xB7 Vorstandspatenschaft erforderlich</strong>: als wesentliches Risiko behandeln; nur mit Ringfencing einsetzen.",
@@ -6778,24 +7156,23 @@ var DE_DIGITAL = {
6778
7156
  "method.s4.assist": "<strong>St\xE4rken</strong> \u2014 Business Impact \u2265 50 und Liefer-Machbarkeit &lt; 50. Wertvoll, aber Lieferung noch nicht robust \u2014 Betreibbarkeit ausbauen, bevor skaliert wird.",
6779
7157
  "method.s4.pilot": "<strong>Pilot</strong> \u2014 Business Impact &lt; 50 und Liefer-Machbarkeit \u2265 50. Technisch lieferbar, aber unklarer Business Case \u2014 vor der Skalierung pilotieren.",
6780
7158
  "method.s4.stop": "<strong>Stopp</strong> \u2014 Business Impact &lt; 50 und Liefer-Machbarkeit &lt; 50. Geringer Impact und geringe Machbarkeit \u2014 zur\xFCckstellen oder beenden.",
6781
- "method.s4.bubbles": "Die Blasengr\xF6\xDFe betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Initiative erscheint also gr\xF6\xDFer, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Compliance- & Betriebsrisiko-Band wider.",
7159
+ "method.s4.bubbles": "Die Blasengr\xF6sse betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Initiative erscheint also gr\xF6sser, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Compliance- & Betriebsrisiko-Band wider.",
6782
7160
  "method.s5.governance": "<strong>Hohes Compliance- & Betriebsrisiko</strong> (Pr\xE4zedenz 3) \u2014 Compliance- & Betriebsrisiko-Wert \u2265 {g} (und die Initiative wurde nicht bereits als Quick Wins oder Strategische Kerninitiative klassifiziert). Erh\xF6hte regulatorische, Compliance- oder Betriebsrisiko-Exposition, die vor einer Skalierung adressiert werden muss.",
6783
- "method.s8.b3": "Es werden keine externen regulatorischen, Betriebsrisiko- oder Drittparteien-Signale ber\xFCcksichtigt.",
6784
7161
  "memo.assumptions.signals": "Es wurden keine externen regulatorischen, Betriebsrisiko- oder Drittparteien-Signale in diese Scores einbezogen.",
6785
7162
  "method.s6.p1": 'Der <a href="https://www.investopedia.com/terms/h/hhi.asp" target="_blank" rel="noopener noreferrer" class="text-primary underline underline-offset-2 hover:no-underline">Herfindahl\u2013Hirschman-Index</a> wird auf vier Schnitte angewendet: <strong>Anbieterstrategie</strong>, <strong>L\xF6sungstyp</strong>, <strong>Digital-Kategorie</strong> und <strong>Gesch\xE4ftseinheit</strong>.',
6786
- "method.s6.p2": "F\xFCr die Szenarien-Seite wird jeder dimensionale HHI mit denselben Schwellenwerten auf einen Risikowert 0\u2013100 abgebildet und anschlie\xDFend zu <strong>35 / 20 / 20 / 15</strong> (Vendor / L\xF6sungstyp / Digital-Kategorie / Gesch\xE4ftseinheit) gewichtet, plus weiteren <strong>10 %</strong> f\xFCr die durchschnittliche operative Abh\xE4ngigkeit. Der Gesamtwert wird dann in Richtung der schlechtesten Einzeldimension angehoben (50 / 50-Mischung aus gewichtetem Durchschnitt und Maximum), sodass z. B. eine hoch konzentrierte Vendor-Strategie allein den Score nach oben zieht \u2013 auch wenn die \xFCbrigen Dimensionen ausgewogen wirken. Eine Gesch\xE4ftseinheit-\xD7-Digital-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
7163
+ "method.s6.p2": "Eine Gesch\xE4ftseinheit-\xD7-Digital-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
6787
7164
  "concept.problem.p1": "Viele Organisationen verfolgen Digital-Initiativen \xFCber eine Vielzahl von Gesch\xE4ftsprozessen hinweg. Diese Initiativen entstehen h\xE4ufig aus lokalen Experimenten in einzelnen Gesch\xE4ftseinheiten oder Technologieteams \u2013 nicht aus einem strukturierten strategischen Prozess.",
6788
- "concept.dim.value.body": "\xD6konomischer Hebel der digitalen L\xF6sung. Anwendungsf\xE4lle mit hochfrequenten, ressourcenintensiven Aktivit\xE4ten bieten das gr\xF6\xDFte Potenzial f\xFCr \xF6konomische Wirkung; F\xE4lle mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
7165
+ "concept.dim.value.body": "\xD6konomischer Hebel der digitalen L\xF6sung. Anwendungsf\xE4lle mit hochfrequenten, ressourcenintensiven Aktivit\xE4ten bieten das gr\xF6sste Potenzial f\xFCr \xF6konomische Wirkung; F\xE4lle mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
6789
7166
  "concept.dim.feasibility.body": "Praktische Zuverl\xE4ssigkeit der digitalen L\xF6sung im jeweiligen Kontext. In regulierten Umgebungen reicht technische Machbarkeit allein selten aus \u2013 die L\xF6sung muss auch betreibbar, \xFCberwachbar und vertretbar sein, bevor sie das Experimentierstadium verlassen kann.",
6790
7167
  "concept.dim.feasibility.q2": "Sind die Ergebnisse der L\xF6sung stabil und \xFCber Umgebungen hinweg reproduzierbar?",
6791
7168
  "concept.dim.feasibility.q3": "L\xE4sst sich das Verhalten der L\xF6sung f\xFCr Betreiber und Auditoren erkl\xE4ren und nachvollziehen?",
6792
7169
  "concept.dim.governance.body": "Digitale Systeme bringen neue Formen operationeller, regulatorischer und reputativer Risiken mit sich. Governance bestimmt, wie sie kontrolliert, \xFCberwacht und beschr\xE4nkt werden \u2013 ob sie vollst\xE4ndig automatisiert werden d\xFCrfen, einen Menschen in der Schleife ben\xF6tigen oder Einsatzbeschr\xE4nkungen unterliegen.",
6793
- "concept.dim.governance.q1": "Wie gro\xDF ist der Worst-Case-Effekt eines Ausfalls oder einer fehlerhaften Ausgabe des digitalen Systems?",
7170
+ "concept.dim.governance.q1": "Wie gross ist der Worst-Case-Effekt eines Ausfalls oder einer fehlerhaften Ausgabe des digitalen Systems?",
6794
7171
  "scenarios.leverHelp.automationIntensity": "Wieviel menschliche Arbeit das Digital-Portfolio \xFCbernimmt (Dunkelverarbeitung, End-to-End-Automatisierung).",
6795
- "scenarios.calc.baselineNote": "Baseline ist anders: die f\xFCnf Kennzahlen werden direkt aus dem Inventar gelesen, nicht aus den Reglern. Adoption = Anteil aktiver Initiativen in Production oder Scaling. Governance-Last = Durchschnitt der Governance-Scores (gewichtet mit menschlicher Aufsicht, Monitoring-Komplexit\xE4t und Auditierbarkeit). Transformation = Durchschnitt der strategischen Sub-Scores f\xFCr Transformationspotenzial und Betriebsmodell-Ausrichtung. Konzentrationsrisiko nutzt dieselbe HHI-Methodik wie die Konzentrations-Seite: pro Dimension (Vendor, L\xF6sungstyp, Digital-Kategorie, Gesch\xE4ftsbereich) wird aus dem HHI ein Risikowert abgeleitet (<1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert), gewichtet zu 35/20/20/15 mit 10 % operativer Abh\xE4ngigkeit \u2014 und der Gesamtwert wird in Richtung der schlechtesten Einzeldimension angehoben, sodass z. B. eine hoch konzentrierte Vendor-Strategie allein den Score nach oben zieht. Liefervertrauen = Durchschnitt der Feasibility-Scores.",
6796
- "op.staffing.detailHigh": "Empfehlung: zentrale Digital-Kontrollfunktion mit benannter Verantwortung pro Initiative mit hoher Governance.",
6797
- "op.scalability.detailHigh": "Das Portfolio ist auf Skalierung ausgelegt; Plattform- und Betriebskapazit\xE4t muss zur Nachfrage passen.",
6798
- "op.customer.detailHigh": "Direkter Kundenkontakt erfordert explizite Transparenz-, Barrierefreiheits- und Beschwerdemanagement-Kontrollen.",
7172
+ "scenarios.calc.baselineNote": "Baseline ist anders: die drei Kennzahlen werden direkt aus dem Inventar gelesen, nicht aus den Reglern. Adoption = Anteil aktiver Initiativen in Production oder Scaling. Transformation = Durchschnitt der strategischen Sub-Scores f\xFCr Transformationspotenzial und Betriebsmodell-Ausrichtung. Liefervertrauen = Durchschnitt der Feasibility-Scores.",
7173
+ "op.governance.detailHigh": "Empfehlung: zentrale Digital-Kontrollfunktion mit benannter Verantwortung pro Initiative mit hoher Governance.",
7174
+ "op.governance.detailMed": "Die Aufsicht ist mehr als nebenbei zu leisten: Benennen Sie eine Teilzeit-Verantwortung f\xFCr Betriebsrisiko und planen Sie Pr\xFCfzeit fest ein.",
7175
+ "op.delivery.detailHigh": "Daten-, Integrations- und Plattformgrundlagen tragen portfolioweit; Plattform- und Betriebskapazit\xE4t mitwachsen lassen.",
6799
7176
  "dim.valueScale.intro": "Bewerten Sie den \xF6konomischen Hebel dieser digitalen L\xF6sung \u2014 wie viel messbaren Nutzen sie erzeugt und wie breit sie unternehmensweit skalierbar ist. H\xF6here Werte bedeuten breite, wiederholbare und finanziell relevante Wirkung statt eines einzelnen Effizienzgewinns in einem Team.",
6800
7177
  "dim.feasibility.intro": "Bewerten Sie, wie realistisch die Umsetzung unter aktuellen Daten-, Integrations-, Betriebs- und Nachvollziehbarkeitsbedingungen ist. In regulierten Umgebungen reicht technische Machbarkeit allein selten \u2014 h\xF6here Werte bedeuten, dass die L\xF6sung aufgebaut, betrieben, \xFCberwacht und gegen\xFCber Betreibern und Auditoren vertreten werden kann.",
6801
7178
  "dim.governance.intro": "Bewerten Sie regulatorische, Aufsichts-, Auditierbarkeits-, Sicherheits- und Reputationsexposition des digitalen Systems. H\xF6here Werte bedeuten MEHR Sensitivit\xE4t und h\xF6here Kontroll-Last f\xFCr Betrieb und Vorstand \u2014 also ob das System unbeaufsichtigt laufen darf, einen Menschen in der Schleife braucht oder Einsatzbeschr\xE4nkungen erfordert.",
@@ -6806,17 +7183,17 @@ var DE_DIGITAL = {
6806
7183
  "dim.governance.band2.label": "\xDCberwachter Betrieb",
6807
7184
  "dim.governance.band3.meaning": "Aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen f\xFCr das digitale System erforderlich.",
6808
7185
  "dim.strategic.band3.meaning": "Ver\xE4ndert Betriebsmodell, Kundenerlebnis oder die Datennutzung im Unternehmen.",
6809
- "op.staffing.detailLow": "Eingebettete Teams mit teilweiser Betriebsrisiko-Abdeckung reichen bei dieser Last meist aus.",
7186
+ "op.governance.detailLow": "Eingebettete Teams mit teilweiser Betriebsrisiko-Abdeckung reichen bei dieser Last meist aus.",
6810
7187
  "boardPack.col.g": "C",
6811
7188
  // ── Concept & Methodology page theming ────────────────────────────────
6812
7189
  "concept.problem.p3": "Ohne gemeinsame Bewertungsbasis sind die typischen Fehlermuster vorhersehbar: <strong>Piloten-M\xFCdigkeit</strong> (viele Proofs of Concept, wenige Produktionen), <strong>redundante Werkzeuge</strong> \xFCber Gesch\xE4ftseinheiten hinweg, <strong>Compliance-Schulden</strong>, die erst im Audit sichtbar werden, und <strong>Schatten-IT</strong>, die weder Budget- noch Risikosicht erreicht.",
6813
- "concept.problem.p4": "BICon ist f\xFCr das Steering-Publikum gebaut: <strong>CIO, CDO, CTO, COO</strong>, Digital-Council, Risk und Compliance \u2014 alle, die eine reproduzierbare Portfolio-Sicht \xFCber Funktionen hinweg brauchen, kein Team-Backlog.",
7190
+ "concept.problem.p4": "BICon Portfolio Steering ist f\xFCr das Steering-Publikum gebaut: <strong>CIO, CDO, CTO, COO</strong>, Digital-Council, Risk und Compliance \u2014 alle, die eine reproduzierbare Portfolio-Sicht \xFCber Funktionen hinweg brauchen, kein Team-Backlog.",
6814
7191
  "concept.problem.p5": "Anders als klassische PPM-Werkzeuge (Jira Portfolio, Planview, ServiceNow SPM) ist diese Konsole gezielt f\xFCr KI- / Digital- / Innovations-Steuerung gebaut: explizite Compliance-B\xE4nder, abh\xE4ngigkeitsbewusste Stage-Gates und ein deterministisches Priorisierungs-Regelwerk \u2014 keine generischen Projektaufgaben und Gantt-Charts.",
6815
7192
  "concept.gettingStarted.s2.body": "Je Initiative die Evaluate-Maske \xF6ffnen, die vier 0\u2013100-Dimensionsscores mit Konfidenz setzen, Abh\xE4ngigkeiten und Stage-Gate-Evidenz erg\xE4nzen. Der Soft-Sync-Hinweis f\xE4ngt Widerspr\xFCche, das Entscheidungsprotokoll h\xE4lt den Audit-Trail fest.",
6816
7193
  "concept.gettingStarted.s3.body": "Portfolio-Karte (Scale / Pilot / Assist / Stop), Value-at-Stake-Sicht und Compliance-B\xE4nder pr\xFCfen. Konzentration und Operating Model zeigen, wo das Portfolio \xFCberexponiert ist.",
6817
- "concept.gettingStarted.s5.body": "Szenarien f\xFCr \u221210 % / \u221220 % Budget rechnen, einen Snapshot einfrieren, dann Executive Memo und Board Pack (PDF/PPTX) exportieren \u2014 zweisprachig, mit voller Stage-Gate-Sektion. Board Memo und Steering-KPIs zeigen das vorausschauende Budget neben dem Netto-3-Jahres-Wert, damit das Gremium sieht, was noch alloziierbar ist.",
7194
+ "concept.gettingStarted.s5.body": "Ein Budget von \u221210 % / \u221220 % in der Strategischen Priorisierung durchspielen, einen Snapshot einfrieren, dann Executive Memo und Board Pack (PDF/PPTX) exportieren \u2014 zweisprachig, mit voller Stage-Gate-Sektion. Board Memo und Steering-KPIs zeigen das vorausschauende Budget neben dem Netto-3-Jahres-Wert, damit das Gremium sieht, was noch alloziierbar ist.",
6818
7195
  "concept.pillar.portfolio.b1": "Mehrdimensionales Scoring: Wert, Liefer-Machbarkeit, Compliance & Betriebsrisiko, strategischer Fit",
6819
- "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman-Index)</strong> \u2014 Konzentrationsma\xDF. 0 = vollst\xE4ndig diversifiziert, 10 000 = ein dominanter Anteil. Hier auf Vendor, L\xF6sungstyp, Digital-Kategorie und Gesch\xE4ftseinheit angewendet.",
7196
+ "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman-Index)</strong> \u2014 Konzentrationsmass. 0 = vollst\xE4ndig diversifiziert, 10 000 = ein dominanter Anteil. Hier auf Vendor, L\xF6sungstyp, Digital-Kategorie und Gesch\xE4ftseinheit angewendet.",
6820
7197
  "concept.features.f5.body": "Automatische Zuordnung eines Compliance-Bands je Initiative, plus Konzentrations-Schnitte nach Gesch\xE4ftseinheit und Betriebsmodell. Liefert fr\xFChzeitige Sichtbarkeit auf Abh\xE4ngigkeiten von einer Einheit, einer Plattform oder einem Anbieter f\xFCr Risiko- und Compliance-Reviews.",
6821
7198
  "concept.features.f13.body": "Portfolio-Gesundheit auf einem Bildschirm \u2014 gef\xF6rdert vs. zur\xFCckgestellt, Bewertungs-Verteilung, Transitions at Risk, Compliance-Hotspots und veraltete Gate-Nachweise. Konzipiert f\xFCr das w\xF6chentliche Steering und stehende Gremien-Reviews.",
6822
7199
  "concept.features.f17.body": "Eigene Seite mit HHI-Scores pro Schnitt, einer Gesch\xE4ftseinheit-\xD7-Digital-Kategorie-Heatmap und Drill-downs in \xFCberexponierte Kombinationen \u2014 \xFCber das Aggregat-Signal aus den Compliance-B\xE4ndern hinaus.",
@@ -6824,7 +7201,7 @@ var DE_DIGITAL = {
6824
7201
  "concept.features.f23.body": "Priorisierungs-Schwellen, Stage-Gate-Checklisten und Reminder-Kadenzen sind alle in den Einstellungen editierbar \u2014 so l\xE4sst sich das Framework an Ihr Portfolio anpassen, ohne den Code zu forken.",
6825
7202
  "concept.features.f24.body": "In sich geschlossene Demo-Portfolios pro Modus (KI / Digital / Innovation) laden mit realistischen Initiativen und Abh\xE4ngigkeiten \u2014 sodass neue Nutzer jede Sicht sofort erkunden k\xF6nnen, ohne Daten einzugeben.",
6826
7203
  "concept.features.f29.body": "Die Konsole l\xE4uft als mandantenf\xE4hige SaaS: Jede Organisation ist ein isolierter Mandant mit eigenem Portfolio und eigenen Daten. Mitglieder melden sich \xFCber eine verwaltete Authentifizierung an und erhalten rollenbasierten Zugriff \u2014 Admin, Mitglied oder Betrachter \u2014 verfeinert durch granulare Berechtigungen pro Bereich, die ein Admin in den Einstellungen vergibt und die serverseitig wie auch in der Oberfl\xE4che durchgesetzt werden. Jede governance-kritische und Kern-Metadaten-\xC4nderung wird in einem feldgenauen Audit-Trail mit handelndem Benutzer und Zeitstempel erfasst, und jede Initiative zeigt, wer sie erstellt und zuletzt bearbeitet hat. Cloud-Sync h\xE4lt das gemeinsame Portfolio im Team konsistent, w\xE4hrend der lokale Modus (ohne Konto) weiterhin f\xFCr einen einzelnen Nutzer funktioniert. Privilegierte Admin-Aktionen \u2014 Zugriffsvergaben, Rollen- und Rechte\xE4nderungen, \xC4nderungen an Einstellungen, Profilen und Initiativen \u2014 werden zus\xE4tzlich in einem Admin-Aktivit\xE4tsprotokoll auf Organisationsebene in den Einstellungen erfasst.",
6827
- "concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Compliance-Last-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Versto\xDF erscheint hier als Entscheidungspunkt.",
7204
+ "concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Compliance-Last-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Verstoss erscheint hier als Entscheidungspunkt.",
6828
7205
  "method.rules.r1.formula": "Nutzen \xD7 Liefer-Machbarkeit \u2192 Portfolio-Gestalt",
6829
7206
  "method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Liefer-Machbarkeits-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
6830
7207
  "method.rules.r2.formula": "Compliance-Band \u2192 Veto-Kriterium",
@@ -6842,17 +7219,14 @@ var DE_DIGITAL = {
6842
7219
  "method.s5.uncategorised": "<strong>Taktisch / nicht kategorisiert</strong> (Pr\xE4zedenz 7) \u2014 Auffangkategorie f\xFCr Initiativen, die keine der Regeln 1\u20136 erf\xFCllen. Bis zur Sch\xE4rfung der Bewertung taktisch behandeln.",
6843
7220
  "method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach den Kategorie-Regeln oben gruppiert (Pr\xE4zedenz 1 \u2192 7), dann innerhalb jeder Kategorie nach <strong>Value</strong>-Score absteigend geordnet, dann \u2014 wenn die Value-at-Stake-Gewichtung in den Einstellungen aktiv ist und die Zeile in Quick Wins / Strategische Plattform-Initiativen liegt \u2014 nach Jahr-3-Nutzen absteigend. Letzter Tiebreaker ist <strong>Strategischer Impact</strong> absteigend, danach Name A\u2192Z, damit das Ergebnis deterministisch und reproduzierbar ist.",
6844
7221
  "method.s10.p7": "<strong>Quick-Win-Definition.</strong> Die Kategorie Quick Wins setzt schnelle Zeit-zum-Wert voraus. Ein Quick Win, der von einem aktiven, nicht-Quick-Win-en Vorgelagerten abh\xE4ngt (Strategische Plattform-Initiative, Betriebsmodell-Modernisierung, Hohes Compliance-Risiko etc.), wird daher automatisch aus den Quick Wins demotet \u2014 der Vorlauf macht ihn nicht mehr schnell. Die Regel ist transitiv: H\xE4ngt A von B ab und wird B demotet, wird A in der n\xE4chsten Iteration ebenfalls demotet.",
6845
- "method.s7.p1": "F\xFCnf Presets (Baseline, Beschleunigte Einf\xFChrung, Kontrollierte Skalierung, Defensive Haltung, Betriebsmodell-Transformation) plus Custom, getrieben durch sechs explizite Hebel: Rollout-Tempo, Governance-Strenge, Automatisierungsintensit\xE4t, organisatorische Reife, Anbieterdiversifizierung, operative Aufsicht.",
6846
- "method.s7.p2": "<strong>Baseline ist besonders.</strong> Die Reglerpositionen werden direkt aus dem Inventar abgeleitet \u2014 Rollout-Tempo = Anteil aktiver Initiativen in Production oder Scaling, Governance-Strenge = Durchschnitt der Compliance-&amp;-Betriebsrisiko-Scores, Automatisierungsintensit\xE4t = Durchschnitt des Transformationspotenzials, organisatorische Reife = Mittel aus organisatorischer Hebelwirkung und Integrationsmachbarkeit, Anbieterdiversifizierung = 100 \u2212 Vendor-HHI-Risiko, operative Aufsicht = Durchschnitt der Aufsichts-Sub-Scores. Diese abgeleiteten Positionen dienen zugleich als <strong>neutraler Bezugspunkt</strong> f\xFCr die Projektion.",
6847
- "method.s7.p3": "Die projizierten Ergebnisse werden als transparente lineare Kombination der <strong>Hebel-Deltas gegen\xFCber dieser Baseline</strong> berechnet, kombiniert mit strukturellen Inputs aus dem Portfolio (Produktionsanteil, Compliance-Last-Durchschnitt, HHI-basiertes Konzentrationsrisiko, Liefer-Machbarkeits-Durchschnitt). Wenn Baseline gew\xE4hlt ist, liegt Current konstruktionsbedingt deckungsgleich darauf; das Bewegen eines Reglers erzeugt ein ehrliches Delta gegen\xFCber dem heutigen Stand des Portfolios.",
6848
7222
  "method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wert, Liefer-Machbarkeit, Compliance &amp; Betriebsrisiko, Strategischer Impact) mit ihrer Konfidenz.",
6849
7223
  "method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Anbieterstrategie, L\xF6sungstyp, Digital-Kategorie und Tags.",
6850
7224
  "method.gates.enforced.intro": "Zwei Governance-Felder werden beim Wechsel des Lebenszyklus-Status als harte Pr\xFCfungen erzwungen \u2014 aktiv, weil das EU-AI-Act-Modul f\xFCr diesen Arbeitsbereich aktiviert ist:",
6851
7225
  "method.gates.enforced.scope": "Beide Pr\xFCfungen fliessen zus\xE4tzlich zum harten Block in den EU-AI-Act-Reifegrad ein."
6852
7226
  };
6853
7227
  var EN_INNOVATION = {
6854
- "brand.app": "Innovation Portfolio Steering",
6855
- "brand.mobile": "BICon \xB7 Innovation Portfolio Steering",
7228
+ "brand.app": "BICon Portfolio Steering",
7229
+ "brand.mobile": "BICon Portfolio Steering",
6856
7230
  "brand.motto": "Innovation multiplies opportunity, but it can also multiply uncertainty.",
6857
7231
  "filters.aiCategory": "Innovation category",
6858
7232
  "evaluate.field.aiCategory": "Innovation Category",
@@ -6877,6 +7251,10 @@ var EN_INNOVATION = {
6877
7251
  "quadrant.Scale.subtitle": "Validated \xB7 ready to industrialise",
6878
7252
  "quadrant.Stop.subtitle": "Low value \xB7 thin evidence",
6879
7253
  "quadrant.Assist.subtitle": "Promising value, evidence still thin",
7254
+ // The feasibility group headers follow the slider relabeling: an innovation
7255
+ // portfolio talks about evidence, not data/model vocabulary.
7256
+ "subGroup.feasibility.data": "Evidence base",
7257
+ "subGroup.feasibility.solution": "Concept properties",
6880
7258
  "sub.dataAvailability": "Evidence Base",
6881
7259
  "sub.dataQuality": "Quality of Evidence",
6882
7260
  "sub.modelRobustness": "Concept Robustness",
@@ -6906,13 +7284,7 @@ var EN_INNOVATION = {
6906
7284
  "subHelp.cybersecurityExposure": "Exposure of confidential data, IP and partner relationships introduced by the work.",
6907
7285
  "subHelp.innovationCapability": "Strengthening of innovation muscle \u2014 talent, methods, partnerships, reusable IP.",
6908
7286
  "scenarios.lever.adoptionSpeed": "Experiment Velocity",
6909
- "scenarios.lever.governanceStrictness": "Stage-Gate Rigour",
6910
- "scenarios.lever.organisationalReadiness": "Team Readiness",
6911
- "scenarios.lever.oversightIntensity": "Coaching Intensity",
6912
7287
  "scenarios.leverHelp.adoptionSpeed": "How quickly ideas move through Explore \u2192 Validate \u2192 Scale.",
6913
- "scenarios.leverHelp.governanceStrictness": "How strict the stage-gate reviews, evidence bars and kill criteria are.",
6914
- "scenarios.leverHelp.organisationalReadiness": "Innovation skills, sponsor support and absorption capacity of the operating business.",
6915
- "scenarios.leverHelp.oversightIntensity": "Active coaching, mentoring and stakeholder review around innovation teams.",
6916
7288
  "prioritisation.cat.Quick Wins": "Easy Experiments",
6917
7289
  "prioritisation.cat.Strategic Core Initiatives": "Scale Candidates",
6918
7290
  "prioritisation.cat.High Governance Risk": "High-Uncertainty Bets",
@@ -6930,7 +7302,7 @@ var EN_INNOVATION = {
6930
7302
  "settings.prio.operatingModel": "New Operating Models",
6931
7303
  "settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each innovation initiative to a strategic archetype. Rules are evaluated top-to-bottom and the first match wins. All values are scores out of 100 across the four dimensions: V = Value Potential, E = Validation & Evidence, U = Governance & Uncertainty, S = Strategic Impact.",
6932
7304
  "inventory.col.scores": "Scores (V/E/U/S)",
6933
- "concept.eyebrow": "Innovation Portfolio Steering",
7305
+ "concept.eyebrow": "Steering of AI, digital and transformation portfolios",
6934
7306
  "concept.title": "Turn scattered experiments into a managed innovation portfolio.",
6935
7307
  "concept.lead": "Innovation initiatives create value only when they are prioritised, governed and scaled systematically. This console helps boards and innovation committees decide which experiments to scale, which to keep incubating, and which to kill.",
6936
7308
  "concept.quote": "Treat innovation initiatives not as isolated bets, but as a managed portfolio of options \u2014 assessed along a consistent set of dimensions that capture both potential value and remaining uncertainty.",
@@ -6965,8 +7337,6 @@ var EN_INNOVATION = {
6965
7337
  "portfolio.axis.y": "Validation & Evidence",
6966
7338
  "portfolio.tooltip.valueScale": "Value Potential",
6967
7339
  "portfolio.tooltip.feasibility": "Validation",
6968
- "op.input.value": "Value Potential",
6969
- "op.input.feasibility": "Validation",
6970
7340
  "evaluate.profile.radarValue": "Potential",
6971
7341
  "evaluate.profile.radarFeasibility": "Validation",
6972
7342
  "concept.dim.value.title": "1. Value Potential",
@@ -6974,9 +7344,9 @@ var EN_INNOVATION = {
6974
7344
  "inventory.subtitle": "Manage and evaluate your portfolio of innovation initiatives.",
6975
7345
  "inventory.empty.title": "Innovation multiplies opportunity, but it can also multiply uncertainty.",
6976
7346
  "inventory.empty.subtitle": "Begin by adding your innovation initiatives to the portfolio, or load the strategic demo dataset to explore the evaluation frameworks.",
6977
- "memo.summary.portfolio": "The enterprise currently runs {count} active innovation initiatives with an aggregate committed budget of {budget}.",
7347
+ "memo.summary.portfolio": "The enterprise currently runs {count} active innovation initiatives with a committed budget of {budget} (from {stPilot} onwards).",
6978
7348
  "governance.subtitle": "Executive oversight of innovation bets, stage-gate posture and uncertainty exposure.",
6979
- "op.subtitle": "Organisational implications of the current innovation portfolio across staffing, governance, scalability, partnerships and operating-model evolution.",
7349
+ "op.subtitle": "Organisational implications of the current innovation portfolio: the governance work it creates, how much of the business now depends on it, how ready delivery is, whether it can absorb volume, how far it shifts the operating model, how much labour it automates, and how far along it is.",
6980
7350
  "concentration.subtitle": "Detect systemic exposure across partner strategy, innovation category, business unit, and uncertainty band. HHI thresholds: <1500 diversified, 1500\u20132500 moderate, >2500 highly concentrated.",
6981
7351
  "concentration.hhi.category": "Innovation category",
6982
7352
  "concentration.heatmap.title": "Cluster heatmap \u2014 business unit \xD7 innovation category",
@@ -6988,8 +7358,8 @@ var EN_INNOVATION = {
6988
7358
  "portfolio.custom.metric.valueScale": "Value Potential",
6989
7359
  "portfolio.custom.metric.feasibility": "Validation",
6990
7360
  "subHelp.operationalLeverage": "How much the innovation multiplies output per unit of human work. Higher = broader operational reach per FTE.",
6991
- "op.staffing.level3": "Dedicated innovation control function",
6992
- "scenarios.subtitle": "A what-if tool: pick a strategic stance, move the sliders, and see how five portfolio outcomes change. Everything is calculated live from the sliders \u2014 no forecasting.",
7361
+ "op.governance.level3": "Dedicated innovation control function",
7362
+ "scenarios.subtitle": "A what-if tool: pick a strategic stance, move the sliders, and see how three portfolio outcomes change. Everything is calculated live from the sliders \u2014 no forecasting.",
6993
7363
  "scenarios.preset.transformational.desc": "Reshape the operating model around innovation; high readiness and diversified partner base.",
6994
7364
  "memo.heading": "Board Memorandum \u2014 Innovation Portfolio",
6995
7365
  "memo.concentration.category": "Innovation category concentration: {name} accounts for {count} of {total} initiatives ({pct}%).",
@@ -7011,10 +7381,9 @@ var EN_INNOVATION = {
7011
7381
  "method.s4.stop": "<strong>Kill</strong> \u2014 Business Impact &lt; 50 and Validation &lt; 50. Low impact and weak evidence \u2014 kill or recycle the learnings.",
7012
7382
  "method.s4.bubbles": "Bubble size additionally emphasises Strategic Impact on its own (so a strategic bet reads as a larger bubble even when its value score is moderate); bubble colour reflects the uncertainty band.",
7013
7383
  "method.s5.governance": "<strong>High-Uncertainty Bets</strong> (precedence 3) \u2014 governance & uncertainty score \u2265 {g} (and the bet was not already classified as Quick Wins or Strategic Core). Elevated strategic, market or execution uncertainty that must be de-risked through stage-gating before scaling.",
7014
- "method.s8.b3": "No external regulatory, peer-review or third-party assurance signals are incorporated.",
7015
7384
  "memo.assumptions.signals": "No external regulatory, peer-review or third-party assurance signals have been incorporated into these scores.",
7016
7385
  "method.s6.p1": 'The <a href="https://www.investopedia.com/terms/h/hhi.asp" target="_blank" rel="noopener noreferrer" class="text-primary underline underline-offset-2 hover:no-underline">Herfindahl\u2013Hirschman Index</a> is applied to four cuts of the portfolio: <strong>partner strategy</strong>, <strong>bet type</strong>, <strong>innovation category</strong>, and <strong>business unit</strong>.',
7017
- "method.s6.p2": "For the Scenarios page, each per-dimension HHI is mapped to a 0\u2013100 risk score using the same thresholds, then blended <strong>35 / 20 / 20 / 15</strong> (partner / bet type / innovation category / business unit) with a further <strong>10 %</strong> weight on average operational dependency. The overall reading is then lifted toward the worst single dimension (50 / 50 blend of weighted average and maximum), so a highly concentrated partner strategy alone pushes the score up even if the other dimensions look balanced. A business-unit \xD7 innovation-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
7386
+ "method.s6.p2": "A business-unit \xD7 innovation-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
7018
7387
  "concept.problem.p1": "Many organisations are pursuing innovation bets across a wide range of horizons. These initiatives often emerge from local experimentation within business units, labs or partner ecosystems rather than from a structured strategic process.",
7019
7388
  "concept.dim.value.body": "Strategic and economic potential of the innovation bet. Bets that target large, growing or under-served opportunities typically offer the greatest upside; narrow-scale or marginal-efficiency bets rarely justify the organisational effort required.",
7020
7389
  "concept.dim.feasibility.body": "Strength of evidence that the bet works. Early bets rely on directional signal; later bets need validated demand, repeatable outcomes and a credible path to scale before they can leave the lab.",
@@ -7027,13 +7396,11 @@ var EN_INNOVATION = {
7027
7396
  "scenarios.leverHelp.automationIntensity": "How aggressively the innovation portfolio is pushed from incubation into broad rollout.",
7028
7397
  "scenarios.lever.vendorDiversification": "Partner Diversification",
7029
7398
  "scenarios.leverHelp.vendorDiversification": "Spread across innovation partners (lower = more concentrated).",
7030
- "scenarios.calc.baselineNote": "Baseline is different: its five numbers are read directly from your Inventory, not from the levers. Adoption = % of active bets in Production or Scaling. Governance Load = average of governance scores (weighted with human oversight, monitoring complexity and auditability). Transformation = average of strategic sub-scores for transformation potential and operating-model alignment. Concentration Risk uses the same HHI methodology as the Concentration page: a per-dimension risk score (partner, bet type, innovation category, business unit) is derived from HHI thresholds (<1500 diversified, 1500\u20132500 moderate, >2500 highly concentrated), blended 35/20/20/15 with 10% operational dependency \u2014 and the overall reading is lifted toward the worst single dimension so a highly concentrated partner strategy alone pushes the score up. Delivery Confidence = average of feasibility scores.",
7031
- "scenarios.calc.transformation": "Transformation = 55% \xD7 Scale-up Intensity + 25% \xD7 Adoption Speed + 20% \xD7 Organisational Readiness",
7032
- "scenarios.calc.concentrationRisk": "Concentration Risk = 100 \u2212 Partner Diversification (a wider partner spread directly lowers the risk).",
7033
- "scenarios.metricHelp.concentrationRisk": "Risk from over-reliance on few innovation partners or platforms.",
7034
- "op.staffing.detailHigh": "Recommend a central innovation control function (stage-gate review, sponsor governance) with named accountability per high-governance bet.",
7035
- "op.scalability.detailHigh": "The portfolio is positioned to scale; ensure incubation, partner and operations capacity matches demand.",
7036
- "op.customer.detailHigh": "Direct customer exposure requires explicit transparency, expectation management and feedback-handling controls.",
7399
+ "scenarios.calc.baselineNote": "Baseline is different: its three numbers are read directly from your Inventory, not from the levers. Adoption = % of active bets in Production or Scaling. Transformation = average of strategic sub-scores for transformation potential and operating-model alignment. Delivery Confidence = average of feasibility scores.",
7400
+ "scenarios.calc.transformation": "Transformation = Baseline transformation + \u0394 Scale-up Intensity \xD7 0.5 + \u0394 Experiment Velocity \xD7 0.5",
7401
+ "op.governance.detailHigh": "Recommend a central innovation control function (stage-gate review, sponsor governance) with named accountability per high-governance bet.",
7402
+ "op.governance.detailMed": "Oversight is more than incidental: name a part-time owner for stage-gate review and keep review time in the delivery plan.",
7403
+ "op.delivery.detailHigh": "Data, integration and platform foundations are sound across the portfolio; ensure incubation, partner and operations capacity keeps pace.",
7037
7404
  "evaluate.field.vendor": "Partner Dependency",
7038
7405
  "evaluate.fieldHelp.vendor": "Drives the partner-concentration metric (Concentration page) and the partner-strategy bullet in the Board Memo's operating-model section. Influences the recommended posture when concentration is high.",
7039
7406
  "filters.vendor": "Partner strategy",
@@ -7076,7 +7443,7 @@ var EN_INNOVATION = {
7076
7443
  "dim.strategic.band1.label": "Incremental",
7077
7444
  "dim.strategic.band1.meaning": "Refines an existing offering only.",
7078
7445
  "dim.strategic.band3.meaning": "Opens new operating models, revenue streams or market positioning.",
7079
- "op.staffing.detailLow": "Embedded delivery teams with part-time stage-gate coverage are typically sufficient at this load.",
7446
+ "op.governance.detailLow": "Embedded delivery teams with part-time stage-gate coverage are typically sufficient at this load.",
7080
7447
  "boardPack.col.f": "E",
7081
7448
  "boardPack.col.g": "U",
7082
7449
  // ── Concept & Methodology page theming ────────────────────────────────
@@ -7084,18 +7451,18 @@ var EN_INNOVATION = {
7084
7451
  "concept.pillar.portfolio.title": "Innovation portfolio management",
7085
7452
  "concept.pillar.portfolio.b1": "Multi-dimensional scoring: value potential, validation, uncertainty, strategic fit",
7086
7453
  "concept.problem.p3": "Without a shared rubric the failure modes are predictable: <strong>pilot fatigue</strong> (many experiments, few scale-ups), <strong>redundant tooling</strong> across business units, <strong>stage-gate debt</strong> that surfaces only at review time, and <strong>zombie experiments</strong> that escape both budget and portfolio visibility.",
7087
- "concept.problem.p4": "BICon is built for the steering audience: <strong>CIO, CDO, CTO, COO</strong>, Innovation Board, Risk and Compliance \u2014 anyone who needs one reproducible portfolio view across functions, not a per-team backlog.",
7454
+ "concept.problem.p4": "BICon Portfolio Steering is built for the steering audience: <strong>CIO, CDO, CTO, COO</strong>, Innovation Board, Risk and Compliance \u2014 anyone who needs one reproducible portfolio view across functions, not a per-team backlog.",
7088
7455
  "concept.problem.p5": "Unlike classic PPM tools (Jira Portfolio, Planview, ServiceNow SPM) this console is purpose-built for AI / Digital / Innovation steering: explicit uncertainty bands, dependency-aware stage-gates and a deterministic prioritisation rule book \u2014 not generic project tasks and Gantt charts.",
7089
7456
  "concept.gettingStarted.s2.body": "For each initiative open Evaluate, set the four 0\u2013100 dimension scores with confidence, add dependencies and Stage-gate evidence. The Soft-Sync hint catches contradictions; the decision log keeps the audit trail.",
7090
7457
  "concept.gettingStarted.s3.body": "Check the Portfolio Map (Scale / Pilot / Assist / Stop), the Value-at-Stake view and the Uncertainty bands. Concentration and Operating Model surface where the portfolio is over-exposed.",
7091
- "concept.gettingStarted.s5.body": "Run Scenarios for \u221210 % / \u221220 % budget, freeze a Snapshot, then export the Executive Memo and Board Pack (PDF/PPTX) \u2014 bilingual, with the full Stage-gate section. The Board Memo and Steering KPIs surface the forward-looking budget alongside Net 3-year value so the board sees what is still allocatable.",
7458
+ "concept.gettingStarted.s5.body": "Try a \u221210 % / \u221220 % budget on Strategic Prioritisation, freeze a Snapshot, then export the Executive Memo and Board Pack (PDF/PPTX) \u2014 bilingual, with the full Stage-gate section. The Board Memo and Steering KPIs surface the forward-looking budget alongside Net 3-year value so the board sees what is still allocatable.",
7092
7459
  "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman Index)</strong> \u2014 concentration metric. 0 = perfectly diversified, 10 000 = single dominant share. Used here on partner, solution type, innovation category and business unit cuts.",
7093
7460
  "concept.features.f5.body": "Automatic uncertainty-band assignment per initiative, plus concentration cuts by business unit and operating model. Provides early visibility on dependency on a single unit, technology or partner for risk and portfolio review.",
7094
7461
  "concept.features.f12.body": "Build any portfolio view on demand: select two axes (Value Potential, Validation, Strategic, Confidence, Budget, NPV, Y3 benefit, average score), choose what colours and sizes the bubbles, save and share the view. Designed for board-specific questions that don't fit a standard chart.",
7095
7462
  "concept.features.f13.body": "Portfolio health on one screen \u2014 funded vs. parked, score distribution, transitions at risk, uncertainty hotspots and stale gate evidence. Designed for the weekly steering meeting and standing committee reviews.",
7096
7463
  "concept.features.f17.body": "A dedicated page with HHI scores per cut, a business-unit \xD7 innovation-category cluster heatmap and drill-downs into over-exposed combinations \u2014 beyond the aggregate signal in the Uncertainty band.",
7097
7464
  "concept.features.f18.body": "Single form to score one initiative end-to-end: 0\u2013100 sliders with confidence, stage-gate roadmap, dependencies, costs, P10/P50/P90 benefit ranges \u2014 with soft-sync hints when fields contradict each other.",
7098
- "concept.features.f20.body": "Each initiative captures explicit upstream / downstream dependencies in Evaluate. The Prioritisation cut-line treats them as a hard constraint: an initiative is only funded if all its active upstream dependencies are also funded (cascade), and an Easy Experiment is automatically demoted when it depends on an upstream outside Easy Experiments. Scenarios additionally apply a dependency-aware adoption haircut when upstream work is parked.",
7465
+ "concept.features.f20.body": "Each initiative captures explicit upstream / downstream dependencies in Evaluate. The Prioritisation cut-line treats them as a hard constraint: an initiative is only funded if all its active upstream dependencies are also funded (cascade), and an Easy Experiment is automatically demoted when it depends on an upstream outside Easy Experiments.",
7099
7466
  "concept.features.f23.body": "Prioritisation thresholds, stage-gate checklists and reminder cadences are all editable in Settings \u2014 so the framework can be tuned to your portfolio without forking the code.",
7100
7467
  "concept.features.f24.body": "Self-contained demo portfolios per mode (AI / Digital / Innovation) load with realistic initiatives and dependencies \u2014 so new users can explore every view immediately without entering data.",
7101
7468
  "concept.features.f29.body": "Run the console as a multi-tenant SaaS: each organisation is an isolated tenant with its own portfolio and data. Members sign in through managed authentication and get role-based access \u2014 admin, member or viewer \u2014 refined by granular per-section permissions an admin grants from Settings, enforced on both the server and the UI. Every governance-critical and Core Metadata change is captured in a per-field audit trail with the acting user and a timestamp, and each initiative shows who created and last edited it. Cloud sync keeps the shared portfolio consistent across the team, while local (no-account) mode still works for a single user. Privileged admin actions \u2014 access grants, role and permission changes, settings, profile and initiative changes \u2014 are additionally recorded in an organisation-level admin activity log in Settings.",
@@ -7117,21 +7484,18 @@ var EN_INNOVATION = {
7117
7484
  "method.s5.uncategorised": "<strong>Unsorted Experiments</strong> (precedence 7) \u2014 fallback for initiatives that don't satisfy any of rules 1\u20136. Treat as exploratory until scores sharpen.",
7118
7485
  "method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by the category rules above (precedence 1 \u2192 7), then within each category ordered by <strong>Value Potential</strong> score descending, then \u2014 if Value-at-Stake weighting is enabled in Settings and the row sits in Easy Experiments / Scale Candidates \u2014 Year-3 benefit descending. Final tie-break is <strong>Strategic Impact</strong> descending, then name A\u2192Z, so the result is deterministic and reproducible.",
7119
7486
  "method.s10.p7": "<strong>Easy Experiment definition.</strong> The Easy Experiments category requires fast time-to-value. Therefore an Easy Experiment that depends on an active upstream outside Easy Experiments (Scale Candidate, New Operating Models, High-Uncertainty Bets etc.) is automatically demoted out of Easy Experiments \u2014 the upstream's pre-work makes it no longer quick. The rule is transitive: if A depends on B, and B is itself demoted, A is also demoted in the next iteration.",
7120
- "method.s7.p1": "Five named presets (Baseline, Accelerated Adoption, Controlled Scaling, Defensive Posture, Operating Model Transformation) plus Custom, each driven by six explicit levers: experiment velocity, stage-gate rigour, scale-up intensity, team readiness, partner diversification, coaching intensity.",
7121
- "method.s7.p2": "<strong>Baseline is special.</strong> Its slider positions are derived directly from your Inventory \u2014 experiment velocity = % of active initiatives In Production or Scaling, stage-gate rigour = average governance &amp; uncertainty score, scale-up intensity = average transformation potential, team readiness = average of organisational leverage and integration feasibility, partner diversification = 100 \u2212 partner HHI risk, coaching intensity = average human-oversight sub-score. These derived positions also act as the <strong>neutral reference</strong> for the projection.",
7122
- "method.s7.p3": "Projected outcomes are computed as transparent linear blends of the levers' <strong>delta from this Baseline</strong>, combined with structural inputs from the portfolio (production-stage share, uncertainty-load average, HHI-based concentration risk, validation average). Selecting Baseline therefore overlays Current on top of Baseline by construction; moving any slider produces an honest delta from where the portfolio actually sits today.",
7123
7487
  "method.audit.scope.governance": "<strong>Status</strong> and the four <strong>evaluation dimension scores</strong> (Value Potential, Validation &amp; Evidence, Governance &amp; Uncertainty, Strategic Impact) with their confidence.",
7124
7488
  "method.audit.scope.metadata": "<strong>All Core Metadata fields</strong> \u2014 name, business unit, owner, description, timeline, budget, partner strategy, solution type, innovation category and tags.",
7125
7489
  "method.gates.enforced.intro": "Two governance fields are enforced as hard checks when the lifecycle status changes \u2014 active because the EU AI Act module is enabled for this workspace:",
7126
7490
  "method.gates.enforced.scope": "Both checks feed the EU AI Act readiness score in addition to the hard block."
7127
7491
  };
7128
7492
  var DE_INNOVATION = {
7129
- "brand.app": "Innovations-Portfolio-Steuerung",
7130
- "brand.mobile": "BICon \xB7 Innovations-Portfolio-Steuerung",
7493
+ "brand.app": "BICon Portfolio Steering",
7494
+ "brand.mobile": "BICon Portfolio Steering",
7131
7495
  "brand.motto": "Innovation vervielfacht Chancen, aber auch Unsicherheit.",
7132
7496
  "filters.aiCategory": "Innovations-Kategorie",
7133
7497
  "evaluate.field.aiCategory": "Innovations-Kategorie",
7134
- "evaluate.fieldHelp.aiCategory": "Bestimmt die Innovations-Kategorie-Konzentration (Seite \u201EKonzentration\u201C) und den Kategorie-Mix im Vorstandsmemo. Wird au\xDFerdem zur Filterung im Inventar verwendet.",
7498
+ "evaluate.fieldHelp.aiCategory": "Bestimmt die Innovations-Kategorie-Konzentration (Seite \u201EKonzentration\u201C) und den Kategorie-Mix im Vorstandsmemo. Wird ausserdem zur Filterung im Inventar verwendet.",
7135
7499
  "category.Generative AI": "Neue Produkte",
7136
7500
  "category.Predictive AI": "Daten-Ventures",
7137
7501
  "category.Automation": "Operative Innovation",
@@ -7152,6 +7516,10 @@ var DE_INNOVATION = {
7152
7516
  "quadrant.Scale.subtitle": "Validiert \xB7 bereit zur Industrialisierung",
7153
7517
  "quadrant.Stop.subtitle": "Geringer Wert \xB7 d\xFCnne Evidenz",
7154
7518
  "quadrant.Assist.subtitle": "Vielversprechender Wert, Evidenz noch d\xFCnn",
7519
+ // Gruppenüberschriften folgen der Slider-Umbenennung: ein
7520
+ // Innovationsportfolio spricht von Evidenz, nicht von Daten/Modellen.
7521
+ "subGroup.feasibility.data": "Evidenzbasis",
7522
+ "subGroup.feasibility.solution": "Konzepteigenschaften",
7155
7523
  "sub.dataAvailability": "Evidenzbasis",
7156
7524
  "sub.dataQuality": "Qualit\xE4t der Evidenz",
7157
7525
  "sub.modelRobustness": "Robustheit des Konzepts",
@@ -7164,7 +7532,7 @@ var DE_INNOVATION = {
7164
7532
  "sub.cybersecurityExposure": "Sicherheits- & IP-Exposition",
7165
7533
  "sub.innovationCapability": "Aufbau von Innovationsmuskeln",
7166
7534
  "subHelp.dataAvailability": "Wie viel Evidenz (Daten, Stand der Technik, Prototypen) die Idee bereits st\xFCtzt.",
7167
- "subHelp.dataQuality": "Belastbarkeit dieser Evidenz \u2014 Rigorosit\xE4t, Stichprobengr\xF6\xDFe, Unabh\xE4ngigkeit, Aktualit\xE4t.",
7535
+ "subHelp.dataQuality": "Belastbarkeit dieser Evidenz \u2014 Rigorosit\xE4t, Stichprobengr\xF6sse, Unabh\xE4ngigkeit, Aktualit\xE4t.",
7168
7536
  "dim.feasibility.band1.meaning": "L\xFCcken bei Konzept, F\xE4higkeiten oder Partnern machen die Umsetzung unsicher.",
7169
7537
  "govBand.Elevated.desc": "41\u201360 \xB7 Gegateter Pilot \u2014 Standard-Stage-Gate-Kontrollen",
7170
7538
  "govLabel.Controlled Automation": "\xDCberwachte Erprobung",
@@ -7181,13 +7549,7 @@ var DE_INNOVATION = {
7181
7549
  "subHelp.cybersecurityExposure": "Exposition vertraulicher Daten, IP und Partnerbeziehungen durch die Arbeit.",
7182
7550
  "subHelp.innovationCapability": "Aufbau von Innovationsmuskeln \u2014 Talente, Methoden, Partnerschaften, wiederverwendbares IP.",
7183
7551
  "scenarios.lever.adoptionSpeed": "Experiment-Tempo",
7184
- "scenarios.lever.governanceStrictness": "Stage-Gate-Rigorosit\xE4t",
7185
- "scenarios.lever.organisationalReadiness": "Team-Reife",
7186
- "scenarios.lever.oversightIntensity": "Coaching-Intensit\xE4t",
7187
7552
  "scenarios.leverHelp.adoptionSpeed": "Wie schnell Ideen durch Erproben \u2192 Validieren \u2192 Skalieren wandern.",
7188
- "scenarios.leverHelp.governanceStrictness": "Wie streng Stage-Gate-Reviews, Evidenzschwellen und Kill-Kriterien sind.",
7189
- "scenarios.leverHelp.organisationalReadiness": "Innovations-Skills, Sponsor-Unterst\xFCtzung und Aufnahmef\xE4higkeit des operativen Gesch\xE4fts.",
7190
- "scenarios.leverHelp.oversightIntensity": "Aktives Coaching, Mentoring und Stakeholder-Review rund um Innovationsteams.",
7191
7553
  "prioritisation.cat.Quick Wins": "Einfache Experimente",
7192
7554
  "prioritisation.cat.Strategic Core Initiatives": "Skalierungs-Kandidaten",
7193
7555
  "prioritisation.cat.High Governance Risk": "Hochunsichere Wetten",
@@ -7205,7 +7567,7 @@ var DE_INNOVATION = {
7205
7567
  "settings.prio.operatingModel": "Neue Betriebsmodelle",
7206
7568
  "settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede Innovationsinitiative einem strategischen Archetyp zuordnet. Die Regeln werden von oben nach unten gepr\xFCft, die erste \xDCbereinstimmung gewinnt. Alle Werte sind Punkte von 0\u2013100 \xFCber die vier Dimensionen: W = Wertpotenzial, E = Validierung & Evidenz, U = Governance & Unsicherheit, S = Strategischer Impact.",
7207
7569
  "inventory.col.scores": "Punkte (W/E/U/S)",
7208
- "concept.eyebrow": "Innovations-Portfolio-Steuerung",
7570
+ "concept.eyebrow": "Steuerung von KI-, Digital- und Transformationsportfolios",
7209
7571
  "concept.title": "Verstreute Experimente in ein gesteuertes Innovationsportfolio \xFCberf\xFChren.",
7210
7572
  "concept.lead": "Innovationsinitiativen schaffen nur dann Wert, wenn sie systematisch priorisiert, gesteuert und skaliert werden. Diese Konsole hilft Vorst\xE4nden und Innovationsaussch\xFCssen zu entscheiden, welche Experimente skaliert, welche weiter inkubiert und welche beendet werden sollten.",
7211
7573
  "concept.quote": "Innovationsinitiativen sind nicht als isolierte Wetten zu betrachten, sondern als gesteuertes Portfolio von Optionen \u2014 bewertet entlang eines einheitlichen Satzes von Dimensionen, die sowohl potenziellen Wert als auch verbleibende Unsicherheit erfassen.",
@@ -7240,8 +7602,6 @@ var DE_INNOVATION = {
7240
7602
  "portfolio.axis.y": "Validierung & Evidenz",
7241
7603
  "portfolio.tooltip.valueScale": "Wertpotenzial",
7242
7604
  "portfolio.tooltip.feasibility": "Validierung",
7243
- "op.input.value": "Wertpotenzial",
7244
- "op.input.feasibility": "Validierung",
7245
7605
  "evaluate.profile.radarValue": "Potenzial",
7246
7606
  "evaluate.profile.radarFeasibility": "Validierung",
7247
7607
  "concept.dim.value.title": "1. Wertpotenzial",
@@ -7249,9 +7609,9 @@ var DE_INNOVATION = {
7249
7609
  "inventory.subtitle": "Verwalten und bewerten Sie Ihr Portfolio an Innovationsinitiativen.",
7250
7610
  "inventory.empty.title": "Innovation vervielfacht Chancen, aber auch Unsicherheit.",
7251
7611
  "inventory.empty.subtitle": "F\xFCgen Sie zuerst Ihre Innovationsinitiativen dem Portfolio hinzu, oder laden Sie den strategischen Demodatensatz, um die Bewertungsrahmen zu erkunden.",
7252
- "memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive Innovationsinitiativen mit einem zugesagten Gesamtbudget von {budget}.",
7612
+ "memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive Innovationsinitiativen mit einem zugesagten Budget von {budget} (ab {stPilot}).",
7253
7613
  "governance.subtitle": "F\xFChrungsaufsicht \xFCber Innovationswetten, Stage-Gate-Haltung und Unsicherheits-Exposition.",
7254
- "op.subtitle": "Organisatorische Implikationen des aktuellen Innovationsportfolios \xFCber Staffing, Governance, Skalierbarkeit, Partnerschaften und Betriebsmodell-Entwicklung.",
7614
+ "op.subtitle": "Organisatorische Implikationen des aktuellen Innovationsportfolios: welche Governance-Arbeit es erzeugt, wie viel des Gesch\xE4fts inzwischen daran h\xE4ngt, wie lieferbereit es ist, ob es Mengen verkraftet, wie stark es das Betriebsmodell verschiebt, wie viel Arbeit es automatisiert und wie weit es fortgeschritten ist.",
7255
7615
  "concentration.subtitle": "Systemische Exposition \xFCber Partnerstrategie, Innovations-Kategorie, Gesch\xE4ftseinheit und Unsicherheits-Band erkennen. HHI-Schwellen: <1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert.",
7256
7616
  "concentration.hhi.category": "Innovations-Kategorie",
7257
7617
  "concentration.heatmap.title": "Cluster-Heatmap \u2014 Gesch\xE4ftseinheit \xD7 Innovations-Kategorie",
@@ -7262,9 +7622,9 @@ var DE_INNOVATION = {
7262
7622
  "boardPack.heatmap.subtitle": "Gesch\xE4ftseinheit \xD7 Innovations-Kategorie \u2014 Cluster, in denen eine GE ein Innovationsthema b\xFCndelt.",
7263
7623
  "portfolio.custom.metric.valueScale": "Wertpotenzial",
7264
7624
  "portfolio.custom.metric.feasibility": "Validierung",
7265
- "subHelp.operationalLeverage": "Wie stark die Innovation den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6\xDFere operative Reichweite pro FTE.",
7266
- "op.staffing.level3": "Dedizierte Innovations-Kontrollfunktion",
7267
- "scenarios.subtitle": "Ein What-if-Werkzeug: eine strategische Haltung w\xE4hlen, die Regler bewegen und sehen, wie sich f\xFCnf Portfolio-Kennzahlen ver\xE4ndern. Alles wird live aus den Reglern berechnet \u2014 keine Prognose.",
7625
+ "subHelp.operationalLeverage": "Wie stark die Innovation den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6ssere operative Reichweite pro FTE.",
7626
+ "op.governance.level3": "Dedizierte Innovations-Kontrollfunktion",
7627
+ "scenarios.subtitle": "Ein What-if-Werkzeug: eine strategische Haltung w\xE4hlen, die Regler bewegen und sehen, wie sich drei Portfolio-Kennzahlen ver\xE4ndern. Alles wird live aus den Reglern berechnet \u2014 keine Prognose.",
7268
7628
  "scenarios.preset.transformational.desc": "Betriebsmodell um Innovation neu gestalten; hohe Reife und diversifizierte Partnerbasis.",
7269
7629
  "memo.heading": "Vorstandsmemo \u2014 Innovations-Portfolio",
7270
7630
  "memo.concentration.category": "Innovations-Kategoriekonzentration: {name} stellt {count} von {total} Initiativen ({pct}%).",
@@ -7284,31 +7644,28 @@ var DE_INNOVATION = {
7284
7644
  "method.s4.assist": "<strong>Inkubieren</strong> \u2014 Business Impact \u2265 50 und Validierung &lt; 50. Vielversprechend, aber unbewiesen \u2014 in der Inkubation belassen, weitere Evidenz sammeln.",
7285
7645
  "method.s4.pilot": "<strong>Erproben</strong> \u2014 Business Impact &lt; 50 und Validierung \u2265 50. Validiert, aber unklarer strategischer Ertrag \u2014 angrenzende Anwendungen erproben, bevor committet wird.",
7286
7646
  "method.s4.stop": "<strong>Beenden</strong> \u2014 Business Impact &lt; 50 und Validierung &lt; 50. Geringer Impact und schwache Evidenz \u2014 beenden oder Erkenntnisse weiterverwerten.",
7287
- "method.s4.bubbles": "Die Blasengr\xF6\xDFe betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Wette erscheint also gr\xF6\xDFer, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Unsicherheits-Band wider.",
7647
+ "method.s4.bubbles": "Die Blasengr\xF6sse betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Wette erscheint also gr\xF6sser, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Unsicherheits-Band wider.",
7288
7648
  "method.s5.governance": "<strong>Hochunsichere Wetten</strong> (Pr\xE4zedenz 3) \u2014 Governance- & Unsicherheits-Wert \u2265 {g} (und die Wette wurde nicht bereits als Quick Wins oder Strategische Kernwette klassifiziert). Erh\xF6hte strategische, Markt- oder Ausf\xFChrungsunsicherheit, die vor einer Skalierung durch Stage-Gating reduziert werden muss.",
7289
- "method.s8.b3": "Es werden keine externen regulatorischen, Peer-Review- oder Drittparteien-Signale ber\xFCcksichtigt.",
7290
7649
  "memo.assumptions.signals": "Es wurden keine externen regulatorischen, Peer-Review- oder Drittparteien-Signale in diese Scores einbezogen.",
7291
7650
  "method.s6.p1": 'Der <a href="https://www.investopedia.com/terms/h/hhi.asp" target="_blank" rel="noopener noreferrer" class="text-primary underline underline-offset-2 hover:no-underline">Herfindahl\u2013Hirschman-Index</a> wird auf vier Schnitte angewendet: <strong>Partnerstrategie</strong>, <strong>Wettentyp</strong>, <strong>Innovations-Kategorie</strong> und <strong>Gesch\xE4ftseinheit</strong>.',
7292
- "method.s6.p2": "F\xFCr die Szenarien-Seite wird jeder dimensionale HHI mit denselben Schwellenwerten auf einen Risikowert 0\u2013100 abgebildet und anschlie\xDFend zu <strong>35 / 20 / 20 / 15</strong> (Partner / Wettentyp / Innovations-Kategorie / Gesch\xE4ftseinheit) gewichtet, plus weiteren <strong>10 %</strong> f\xFCr die durchschnittliche operative Abh\xE4ngigkeit. Der Gesamtwert wird dann in Richtung der schlechtesten Einzeldimension angehoben (50 / 50-Mischung aus gewichtetem Durchschnitt und Maximum), sodass z. B. eine hoch konzentrierte Partnerstrategie allein den Score nach oben zieht \u2013 auch wenn die \xFCbrigen Dimensionen ausgewogen wirken. Eine Gesch\xE4ftseinheit-\xD7-Innovations-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
7651
+ "method.s6.p2": "Eine Gesch\xE4ftseinheit-\xD7-Innovations-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
7293
7652
  "concept.problem.p1": "Viele Organisationen verfolgen Innovationswetten \xFCber unterschiedliche Horizonte hinweg. Diese Initiativen entstehen h\xE4ufig aus lokalen Experimenten in Gesch\xE4ftseinheiten, Labs oder Partner-\xD6kosystemen \u2013 nicht aus einem strukturierten strategischen Prozess.",
7294
- "concept.dim.value.body": "Strategisches und \xF6konomisches Potenzial der Innovationswette. Wetten auf gro\xDFe, wachsende oder unterversorgte Chancen bieten das gr\xF6\xDFte Upside; Wetten mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
7653
+ "concept.dim.value.body": "Strategisches und \xF6konomisches Potenzial der Innovationswette. Wetten auf grosse, wachsende oder unterversorgte Chancen bieten das gr\xF6sste Upside; Wetten mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
7295
7654
  "concept.dim.feasibility.body": "St\xE4rke der Evidenz, dass die Wette funktioniert. Fr\xFChe Wetten st\xFCtzen sich auf Indikatoren; sp\xE4tere Wetten ben\xF6tigen validierte Nachfrage, wiederholbare Ergebnisse und einen glaubw\xFCrdigen Skalierungspfad, bevor sie das Lab verlassen k\xF6nnen.",
7296
7655
  "concept.dim.feasibility.q1": "Liegt ausreichend Evidenz vor (Signale, Prototypen, Pilotprojekte), dass die Wette funktioniert?",
7297
7656
  "concept.dim.feasibility.q2": "Sind die Ergebnisse \xFCber Kunden, Segmente oder Kontexte hinweg wiederholbar?",
7298
7657
  "concept.dim.feasibility.q3": "Lassen sich die zugrundeliegenden Annahmen g\xFCnstig testen und falsifizieren?",
7299
7658
  "concept.dim.governance.body": "Innovationswetten bringen neue Formen strategischer, marktbezogener und reputativer Unsicherheit mit sich. Governance bestimmt, wie Wetten getaktet, \xFCberwacht und begrenzt werden \u2013 ob sie skalieren d\xFCrfen, in Inkubation bleiben m\xFCssen oder beendet werden sollen.",
7300
- "concept.dim.governance.q1": "Wie gro\xDF ist der Worst-Case-Effekt, falls die Wette scheitert oder die zugrundeliegende Annahme falsch ist?",
7659
+ "concept.dim.governance.q1": "Wie gross ist der Worst-Case-Effekt, falls die Wette scheitert oder die zugrundeliegende Annahme falsch ist?",
7301
7660
  "scenarios.lever.automationIntensity": "Skalierungs\xADintensit\xE4t",
7302
7661
  "scenarios.leverHelp.automationIntensity": "Wie offensiv das Innovationsportfolio aus der Inkubation in den breiten Rollout getrieben wird.",
7303
7662
  "scenarios.lever.vendorDiversification": "Partnerdiversifizierung",
7304
7663
  "scenarios.leverHelp.vendorDiversification": "Streuung \xFCber Innovationspartner (niedriger = konzentrierter).",
7305
- "scenarios.calc.baselineNote": "Baseline ist anders: die f\xFCnf Kennzahlen werden direkt aus dem Inventar gelesen, nicht aus den Reglern. Adoption = Anteil aktiver Wetten in Production oder Scaling. Governance-Last = Durchschnitt der Governance-Scores (gewichtet mit menschlicher Aufsicht, Monitoring-Komplexit\xE4t und Auditierbarkeit). Transformation = Durchschnitt der strategischen Sub-Scores f\xFCr Transformationspotenzial und Betriebsmodell-Ausrichtung. Konzentrationsrisiko nutzt dieselbe HHI-Methodik wie die Konzentrations-Seite: pro Dimension (Partner, Wettentyp, Innovations-Kategorie, Gesch\xE4ftsbereich) wird aus dem HHI ein Risikowert abgeleitet (<1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert), gewichtet zu 35/20/20/15 mit 10 % operativer Abh\xE4ngigkeit \u2014 und der Gesamtwert wird in Richtung der schlechtesten Einzeldimension angehoben, sodass z. B. eine hoch konzentrierte Partnerstrategie allein den Score nach oben zieht. Liefervertrauen = Durchschnitt der Feasibility-Scores.",
7306
- "scenarios.calc.transformation": "Transformation = 55 % \xD7 Skalierungsintensit\xE4t + 25 % \xD7 Einf\xFChrungstempo + 20 % \xD7 organisatorische Reife",
7307
- "scenarios.calc.concentrationRisk": "Konzentrationsrisiko = 100 \u2212 Partnerdiversifizierung (eine breitere Streuung senkt das Risiko direkt).",
7308
- "scenarios.metricHelp.concentrationRisk": "Risiko aus Abh\xE4ngigkeit von wenigen Innovationspartnern oder Plattformen.",
7309
- "op.staffing.detailHigh": "Empfehlung: zentrale Innovations-Kontrollfunktion (Stage-Gate-Review, Sponsor-Governance) mit benannter Verantwortung pro Wette mit hoher Governance.",
7310
- "op.scalability.detailHigh": "Das Portfolio ist auf Skalierung ausgelegt; Inkubations-, Partner- und Betriebskapazit\xE4t muss zur Nachfrage passen.",
7311
- "op.customer.detailHigh": "Direkter Kundenkontakt erfordert explizite Transparenz-, Erwartungsmanagement- und Feedback-Handling-Kontrollen.",
7664
+ "scenarios.calc.baselineNote": "Baseline ist anders: die drei Kennzahlen werden direkt aus dem Inventar gelesen, nicht aus den Reglern. Adoption = Anteil aktiver Wetten in Production oder Scaling. Transformation = Durchschnitt der strategischen Sub-Scores f\xFCr Transformationspotenzial und Betriebsmodell-Ausrichtung. Liefervertrauen = Durchschnitt der Feasibility-Scores.",
7665
+ "scenarios.calc.transformation": "Transformation = Baseline-Transformation + \u0394 Skalierungsintensit\xE4t \xD7 0,5 + \u0394 Experiment-Tempo \xD7 0,5",
7666
+ "op.governance.detailHigh": "Empfehlung: zentrale Innovations-Kontrollfunktion (Stage-Gate-Review, Sponsor-Governance) mit benannter Verantwortung pro Wette mit hoher Governance.",
7667
+ "op.governance.detailMed": "Die Aufsicht ist mehr als nebenbei zu leisten: Benennen Sie eine Teilzeit-Verantwortung f\xFCr Stage-Gate-Reviews und planen Sie Pr\xFCfzeit fest ein.",
7668
+ "op.delivery.detailHigh": "Daten-, Integrations- und Plattformgrundlagen tragen portfolioweit; Inkubations-, Partner- und Betriebskapazit\xE4t mitwachsen lassen.",
7312
7669
  "evaluate.field.vendor": "Partner-Abh\xE4ngigkeit",
7313
7670
  "evaluate.fieldHelp.vendor": "Bestimmt die Partnerkonzentrations-Kennzahl (Konzentrations-Seite) und den Partnerstrategie-Punkt im Betriebsmodell-Abschnitt des Board-Memos. Beeinflusst die empfohlene Haltung bei hoher Konzentration.",
7314
7671
  "filters.vendor": "Partnerstrategie",
@@ -7326,7 +7683,7 @@ var DE_INNOVATION = {
7326
7683
  "vendor.Multi-Vendor": "Mehrere Partner",
7327
7684
  "vendor.Internal Build": "Eigenentwicklung",
7328
7685
  "vendor.Hybrid": "Hybrid",
7329
- "dim.valueScale.intro": "Bewerten Sie das strategische und \xF6konomische Upside dieser Innovationswette \u2014 wie gro\xDF die Chance ist und wie breit sie \xFCber ein einzelnes Experiment hinaus skalieren k\xF6nnte. H\xF6here Werte bedeuten substanzielles, wiederholbares Potenzial statt eines Nischen- oder Einzelergebnisses.",
7686
+ "dim.valueScale.intro": "Bewerten Sie das strategische und \xF6konomische Upside dieser Innovationswette \u2014 wie gross die Chance ist und wie breit sie \xFCber ein einzelnes Experiment hinaus skalieren k\xF6nnte. H\xF6here Werte bedeuten substanzielles, wiederholbares Potenzial statt eines Nischen- oder Einzelergebnisses.",
7330
7687
  "dim.feasibility.intro": "Bewerten Sie die St\xE4rke der Evidenz, dass die Wette funktioniert \u2013 basierend auf heutigen Signalen, Prototypen und Validierung. Fr\xFChe Wetten st\xFCtzen sich auf Indikatoren; h\xF6here Werte bedeuten wiederholbare Ergebnisse, pr\xFCfbare Annahmen und einen glaubw\xFCrdigen Pfad aus dem Lab.",
7331
7688
  "dim.governance.intro": "Bewerten Sie strategische, marktbezogene, regulatorische und reputative Unsicherheit rund um die Wette. H\xF6here Werte bedeuten MEHR Unsicherheit und eine h\xF6here Stage-Gate- und Stop-Loss-Last \u2014 also ob die Wette skalieren darf, in Inkubation bleiben muss oder bei nicht haltbaren Annahmen beendet werden sollte.",
7332
7689
  "dim.strategic.intro": "Bewerten Sie den Beitrag zu neuen strategischen F\xE4higkeiten, Betriebsmodellen oder Marktpositionierungen. H\xF6here Werte bedeuten, dass die Wette neue Erl\xF6sstr\xF6me er\xF6ffnen oder das Wettbewerbsverhalten der Organisation neu pr\xE4gen k\xF6nnte \u2014 \xFCber die Verfeinerung eines bestehenden Angebots hinaus.",
@@ -7335,13 +7692,13 @@ var DE_INNOVATION = {
7335
7692
  "dim.valueScale.band2.label": "Gezielte Wette",
7336
7693
  "dim.valueScale.band2.meaning": "Relevant innerhalb einer Gesch\xE4ftseinheit, aber noch nicht portfolio-pr\xE4gend.",
7337
7694
  "dim.valueScale.band3.label": "Strategische Wette",
7338
- "dim.valueScale.band3.meaning": "Gro\xDFes, wiederholbares Upside organisationsweit; ben\xF6tigt Vorstandsunterst\xFCtzung.",
7695
+ "dim.valueScale.band3.meaning": "Grosses, wiederholbares Upside organisationsweit; ben\xF6tigt Vorstandsunterst\xFCtzung.",
7339
7696
  "dim.feasibility.band2.label": "Validieren mit Vorbehalt",
7340
7697
  "dim.feasibility.band2.meaning": "Vielversprechend, erfordert aber weitere Evidenz, Prototypen oder Partnerf\xE4higkeit.",
7341
7698
  "dim.feasibility.band3.label": "Bereit zur Skalierung",
7342
7699
  "dim.feasibility.band3.meaning": "Evidenz, F\xE4higkeit und ein glaubw\xFCrdiger Skalierungspfad sind vorhanden.",
7343
7700
  "dim.governance.band1.label": "Geringe Unsicherheit",
7344
- "dim.governance.band1.meaning": "Routinem\xE4\xDFige Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
7701
+ "dim.governance.band1.meaning": "Routinem\xE4ssige Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
7345
7702
  "dim.governance.band2.label": "Gegateter Pilot",
7346
7703
  "dim.governance.band2.meaning": "Standard Stage-Gate-Kontrollen und Fortschrittsmonitoring erforderlich.",
7347
7704
  "dim.governance.band3.label": "Enges Stage-Gating",
@@ -7351,7 +7708,7 @@ var DE_INNOVATION = {
7351
7708
  "dim.strategic.band1.label": "Inkrementell",
7352
7709
  "dim.strategic.band1.meaning": "Verfeinert nur ein bestehendes Angebot.",
7353
7710
  "dim.strategic.band3.meaning": "Er\xF6ffnet neue Betriebsmodelle, Erl\xF6sstr\xF6me oder Marktpositionierungen.",
7354
- "op.staffing.detailLow": "Eingebettete Teams mit teilweiser Stage-Gate-Abdeckung reichen bei dieser Last meist aus.",
7711
+ "op.governance.detailLow": "Eingebettete Teams mit teilweiser Stage-Gate-Abdeckung reichen bei dieser Last meist aus.",
7355
7712
  "boardPack.col.f": "E",
7356
7713
  "boardPack.col.g": "U",
7357
7714
  // ── Concept & Methodology page theming ────────────────────────────────
@@ -7359,22 +7716,22 @@ var DE_INNOVATION = {
7359
7716
  "concept.pillar.portfolio.title": "Innovations-Portfoliomanagement",
7360
7717
  "concept.pillar.portfolio.b1": "Mehrdimensionales Scoring: Wertpotenzial, Validierung, Unsicherheit, strategischer Fit",
7361
7718
  "concept.problem.p3": "Ohne gemeinsame Bewertungsbasis sind die typischen Fehlermuster vorhersehbar: <strong>Piloten-M\xFCdigkeit</strong> (viele Experimente, wenige Skalierungen), <strong>redundante Werkzeuge</strong> \xFCber Gesch\xE4ftseinheiten hinweg, <strong>Stage-Gate-Schulden</strong>, die erst im Review sichtbar werden, und <strong>Zombie-Experimente</strong>, die weder Budget- noch Portfoliosicht erreichen.",
7362
- "concept.problem.p4": "BICon ist f\xFCr das Steering-Publikum gebaut: <strong>CIO, CDO, CTO, COO</strong>, Innovation Board, Risk und Compliance \u2014 alle, die eine reproduzierbare Portfolio-Sicht \xFCber Funktionen hinweg brauchen, kein Team-Backlog.",
7719
+ "concept.problem.p4": "BICon Portfolio Steering ist f\xFCr das Steering-Publikum gebaut: <strong>CIO, CDO, CTO, COO</strong>, Innovation Board, Risk und Compliance \u2014 alle, die eine reproduzierbare Portfolio-Sicht \xFCber Funktionen hinweg brauchen, kein Team-Backlog.",
7363
7720
  "concept.problem.p5": "Anders als klassische PPM-Werkzeuge (Jira Portfolio, Planview, ServiceNow SPM) ist diese Konsole gezielt f\xFCr KI- / Digital- / Innovations-Steuerung gebaut: explizite Unsicherheits-B\xE4nder, abh\xE4ngigkeitsbewusste Stage-Gates und ein deterministisches Priorisierungs-Regelwerk \u2014 keine generischen Projektaufgaben und Gantt-Charts.",
7364
7721
  "concept.gettingStarted.s2.body": "Je Initiative die Evaluate-Maske \xF6ffnen, die vier 0\u2013100-Dimensionsscores mit Konfidenz setzen, Abh\xE4ngigkeiten und Stage-Gate-Evidenz erg\xE4nzen. Der Soft-Sync-Hinweis f\xE4ngt Widerspr\xFCche, das Entscheidungsprotokoll h\xE4lt den Audit-Trail fest.",
7365
7722
  "concept.gettingStarted.s3.body": "Portfolio-Karte (Scale / Pilot / Assist / Stop), Value-at-Stake-Sicht und Unsicherheits-B\xE4nder pr\xFCfen. Konzentration und Operating Model zeigen, wo das Portfolio \xFCberexponiert ist.",
7366
- "concept.gettingStarted.s5.body": "Szenarien f\xFCr \u221210 % / \u221220 % Budget rechnen, einen Snapshot einfrieren, dann Executive Memo und Board Pack (PDF/PPTX) exportieren \u2014 zweisprachig, mit voller Stage-Gate-Sektion. Board Memo und Steering-KPIs zeigen das vorausschauende Budget neben dem Netto-3-Jahres-Wert, damit das Gremium sieht, was noch alloziierbar ist.",
7367
- "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman-Index)</strong> \u2014 Konzentrationsma\xDF. 0 = vollst\xE4ndig diversifiziert, 10 000 = ein dominanter Anteil. Hier auf Partner, L\xF6sungstyp, Innovations-Kategorie und Gesch\xE4ftseinheit angewendet.",
7723
+ "concept.gettingStarted.s5.body": "Ein Budget von \u221210 % / \u221220 % in der Strategischen Priorisierung durchspielen, einen Snapshot einfrieren, dann Executive Memo und Board Pack (PDF/PPTX) exportieren \u2014 zweisprachig, mit voller Stage-Gate-Sektion. Board Memo und Steering-KPIs zeigen das vorausschauende Budget neben dem Netto-3-Jahres-Wert, damit das Gremium sieht, was noch alloziierbar ist.",
7724
+ "concept.glossary.hhi": "<strong>HHI (Herfindahl\u2013Hirschman-Index)</strong> \u2014 Konzentrationsmass. 0 = vollst\xE4ndig diversifiziert, 10 000 = ein dominanter Anteil. Hier auf Partner, L\xF6sungstyp, Innovations-Kategorie und Gesch\xE4ftseinheit angewendet.",
7368
7725
  "concept.features.f5.body": "Automatische Zuordnung eines Unsicherheits-Bands je Initiative, plus Konzentrations-Schnitte nach Gesch\xE4ftseinheit und Betriebsmodell. Liefert fr\xFChzeitige Sichtbarkeit auf Abh\xE4ngigkeiten von einer Einheit, einer Technologie oder einem Partner f\xFCr Risiko- und Portfolio-Reviews.",
7369
7726
  "concept.features.f12.body": "Jede Portfolio-Sicht bedarfsgerecht bauen: zwei Achsen w\xE4hlen (Wertpotenzial, Validierung, Strategisch, Konfidenz, Budget, NPV, Y3-Nutzen, Durchschnitts-Score), bestimmen, was Blasen einf\xE4rbt und skaliert, Sicht speichern und teilen. Konzipiert f\xFCr vorstandsspezifische Fragestellungen jenseits der Standard-Diagramme.",
7370
7727
  "concept.features.f13.body": "Portfolio-Gesundheit auf einem Bildschirm \u2014 gef\xF6rdert vs. zur\xFCckgestellt, Bewertungs-Verteilung, Transitions at Risk, Unsicherheits-Hotspots und veraltete Gate-Nachweise. Konzipiert f\xFCr das w\xF6chentliche Steering und stehende Gremien-Reviews.",
7371
7728
  "concept.features.f17.body": "Eigene Seite mit HHI-Scores pro Schnitt, einer Gesch\xE4ftseinheit-\xD7-Innovations-Kategorie-Heatmap und Drill-downs in \xFCberexponierte Kombinationen \u2014 \xFCber das Aggregat-Signal aus den Unsicherheits-B\xE4ndern hinaus.",
7372
7729
  "concept.features.f18.body": "Eine Maske, um eine Initiative durchg\xE4ngig zu bewerten: 0\u2013100-Slider mit Konfidenz, Stage-Gate-Roadmap, Abh\xE4ngigkeiten, Kosten, P10/P50/P90-Nutzenbandbreiten \u2014 mit Soft-Sync-Hinweisen bei widerspr\xFCchlichen Feldern.",
7373
- "concept.features.f20.body": "Jede Initiative erfasst in Evaluate explizit Vor- und Nachgelagertes. Die Priorisierungs-Schnittlinie behandelt sie als harte Bedingung: Eine Initiative wird nur gef\xF6rdert, wenn alle ihre aktiven vorgelagerten Abh\xE4ngigkeiten ebenfalls gef\xF6rdert sind (Kaskade); ein Einfaches Experiment wird automatisch demotet, sobald es von etwas au\xDFerhalb der Einfachen Experimente abh\xE4ngt. Szenarien wenden zus\xE4tzlich einen abh\xE4ngigkeitsbewussten Einf\xFChrungs-Abschlag an, wenn Vorgelagertes zur\xFCckgestellt wird.",
7730
+ "concept.features.f20.body": "Jede Initiative erfasst in Evaluate explizit Vor- und Nachgelagertes. Die Priorisierungs-Schnittlinie behandelt sie als harte Bedingung: Eine Initiative wird nur gef\xF6rdert, wenn alle ihre aktiven vorgelagerten Abh\xE4ngigkeiten ebenfalls gef\xF6rdert sind (Kaskade); ein Einfaches Experiment wird automatisch demotet, sobald es von etwas ausserhalb der Einfachen Experimente abh\xE4ngt.",
7374
7731
  "concept.features.f23.body": "Priorisierungs-Schwellen, Stage-Gate-Checklisten und Reminder-Kadenzen sind alle in den Einstellungen editierbar \u2014 so l\xE4sst sich das Framework an Ihr Portfolio anpassen, ohne den Code zu forken.",
7375
7732
  "concept.features.f24.body": "In sich geschlossene Demo-Portfolios pro Modus (KI / Digital / Innovation) laden mit realistischen Initiativen und Abh\xE4ngigkeiten \u2014 sodass neue Nutzer jede Sicht sofort erkunden k\xF6nnen, ohne Daten einzugeben.",
7376
7733
  "concept.features.f29.body": "Die Konsole l\xE4uft als mandantenf\xE4hige SaaS: Jede Organisation ist ein isolierter Mandant mit eigenem Portfolio und eigenen Daten. Mitglieder melden sich \xFCber eine verwaltete Authentifizierung an und erhalten rollenbasierten Zugriff \u2014 Admin, Mitglied oder Betrachter \u2014 verfeinert durch granulare Berechtigungen pro Bereich, die ein Admin in den Einstellungen vergibt und die serverseitig wie auch in der Oberfl\xE4che durchgesetzt werden. Jede governance-kritische und Kern-Metadaten-\xC4nderung wird in einem feldgenauen Audit-Trail mit handelndem Benutzer und Zeitstempel erfasst, und jede Initiative zeigt, wer sie erstellt und zuletzt bearbeitet hat. Cloud-Sync h\xE4lt das gemeinsame Portfolio im Team konsistent, w\xE4hrend der lokale Modus (ohne Konto) weiterhin f\xFCr einen einzelnen Nutzer funktioniert. Privilegierte Admin-Aktionen \u2014 Zugriffsvergaben, Rollen- und Rechte\xE4nderungen, \xC4nderungen an Einstellungen, Profilen und Initiativen \u2014 werden zus\xE4tzlich in einem Admin-Aktivit\xE4tsprotokoll auf Organisationsebene in den Einstellungen erfasst.",
7377
- "concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Unsicherheitslast-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Versto\xDF erscheint hier als Entscheidungspunkt.",
7734
+ "concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Unsicherheitslast-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Verstoss erscheint hier als Entscheidungspunkt.",
7378
7735
  "method.rules.r1.formula": "Nutzen \xD7 Validierung \u2192 Portfolio-Gestalt",
7379
7736
  "method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Validierungs-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
7380
7737
  "method.rules.r2.formula": "Unsicherheits-Band \u2192 Veto-Kriterium",
@@ -7391,10 +7748,7 @@ var DE_INNOVATION = {
7391
7748
  "method.s5.incremental": "<strong>Inkrementelle Verfeinerungen</strong> (Pr\xE4zedenz 5) \u2014 Wert &lt; {v}, Validierung \u2265 {f} und Strategie &lt; {s}. Leicht umsetzbar, aber begrenzter Nutzen; geeignet als F\xFCllinitiativen.",
7392
7749
  "method.s5.uncategorised": "<strong>Unsortierte Experimente</strong> (Pr\xE4zedenz 7) \u2014 Auffangkategorie f\xFCr Initiativen, die keine der Regeln 1\u20136 erf\xFCllen. Bis zur Sch\xE4rfung der Bewertung explorativ behandeln.",
7393
7750
  "method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach den Kategorie-Regeln oben gruppiert (Pr\xE4zedenz 1 \u2192 7), dann innerhalb jeder Kategorie nach <strong>Wertpotenzial</strong>-Score absteigend geordnet, dann \u2014 wenn die Value-at-Stake-Gewichtung in den Einstellungen aktiv ist und die Zeile in Einfache Experimente / Skalierungs-Kandidaten liegt \u2014 nach Jahr-3-Nutzen absteigend. Letzter Tiebreaker ist <strong>Strategischer Impact</strong> absteigend, danach Name A\u2192Z, damit das Ergebnis deterministisch und reproduzierbar ist.",
7394
- "method.s10.p7": "<strong>Definition Einfaches Experiment.</strong> Die Kategorie Einfache Experimente setzt schnelle Zeit-zum-Wert voraus. Ein Einfaches Experiment, das von einem aktiven Vorgelagerten au\xDFerhalb der Einfachen Experimente abh\xE4ngt (Skalierungs-Kandidat, Neue Betriebsmodelle, Hochunsichere Wetten etc.), wird daher automatisch aus den Einfachen Experimenten demotet \u2014 der Vorlauf macht es nicht mehr schnell. Die Regel ist transitiv: H\xE4ngt A von B ab und wird B demotet, wird A in der n\xE4chsten Iteration ebenfalls demotet.",
7395
- "method.s7.p1": "F\xFCnf Presets (Baseline, Beschleunigte Einf\xFChrung, Kontrollierte Skalierung, Defensive Haltung, Betriebsmodell-Transformation) plus Custom, getrieben durch sechs explizite Hebel: Experiment-Tempo, Stage-Gate-Rigorosit\xE4t, Skalierungsintensit\xE4t, Team-Reife, Partnerdiversifizierung, Coaching-Intensit\xE4t.",
7396
- "method.s7.p2": "<strong>Baseline ist besonders.</strong> Die Reglerpositionen werden direkt aus dem Inventar abgeleitet \u2014 Experiment-Tempo = Anteil aktiver Initiativen in Production oder Scaling, Stage-Gate-Rigorosit\xE4t = Durchschnitt der Governance-&amp;-Unsicherheits-Scores, Skalierungsintensit\xE4t = Durchschnitt des Transformationspotenzials, Team-Reife = Mittel aus organisatorischer Hebelwirkung und Integrationsmachbarkeit, Partnerdiversifizierung = 100 \u2212 Partner-HHI-Risiko, Coaching-Intensit\xE4t = Durchschnitt der entsprechenden Sub-Scores. Diese abgeleiteten Positionen dienen zugleich als <strong>neutraler Bezugspunkt</strong> f\xFCr die Projektion.",
7397
- "method.s7.p3": "Die projizierten Ergebnisse werden als transparente lineare Kombination der <strong>Hebel-Deltas gegen\xFCber dieser Baseline</strong> berechnet, kombiniert mit strukturellen Inputs aus dem Portfolio (Produktionsanteil, Unsicherheitslast-Durchschnitt, HHI-basiertes Konzentrationsrisiko, Validierungs-Durchschnitt). Wenn Baseline gew\xE4hlt ist, liegt Current konstruktionsbedingt deckungsgleich darauf; das Bewegen eines Reglers erzeugt ein ehrliches Delta gegen\xFCber dem heutigen Stand des Portfolios.",
7751
+ "method.s10.p7": "<strong>Definition Einfaches Experiment.</strong> Die Kategorie Einfache Experimente setzt schnelle Zeit-zum-Wert voraus. Ein Einfaches Experiment, das von einem aktiven Vorgelagerten ausserhalb der Einfachen Experimente abh\xE4ngt (Skalierungs-Kandidat, Neue Betriebsmodelle, Hochunsichere Wetten etc.), wird daher automatisch aus den Einfachen Experimenten demotet \u2014 der Vorlauf macht es nicht mehr schnell. Die Regel ist transitiv: H\xE4ngt A von B ab und wird B demotet, wird A in der n\xE4chsten Iteration ebenfalls demotet.",
7398
7752
  "method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wertpotenzial, Validierung &amp; Evidenz, Governance &amp; Unsicherheit, Strategischer Impact) mit ihrer Konfidenz.",
7399
7753
  "method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Partnerstrategie, L\xF6sungstyp, Innovations-Kategorie und Tags.",
7400
7754
  "method.gates.enforced.intro": "Zwei Governance-Felder werden beim Wechsel des Lebenszyklus-Status als harte Pr\xFCfungen erzwungen \u2014 aktiv, weil das EU-AI-Act-Modul f\xFCr diesen Arbeitsbereich aktiviert ist:",
@@ -8211,47 +8565,106 @@ function getModeOverride(mode, language, key) {
8211
8565
  if (enDict && key in enDict) return enDict[key];
8212
8566
  return void 0;
8213
8567
  }
8214
- var AI_GATE_ITEMS = [
8215
- { id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
8216
- { id: "dpia", label: { en: "DPIA / risk assessment signed", de: "DSFA / Risikobewertung unterzeichnet" } },
8217
- { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8218
- { id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } },
8219
- { id: "hitl", label: { en: "Human-in-the-loop posture confirmed", de: "Human-in-the-Loop-Haltung best\xE4tigt" } }
8220
- ];
8221
- var DIGITAL_GATE_ITEMS = [
8222
- { id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
8223
- { id: "architecture", label: { en: "Architecture review", de: "Architektur-Review" } },
8224
- { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8225
- { id: "operability", label: { en: "Operability check", de: "Betreibbarkeits-Check" } },
8226
- { id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } }
8227
- ];
8228
- var INNOVATION_GATE_ITEMS = [
8229
- { id: "hypothesis", label: { en: "Hypothesis & success metric defined", de: "Hypothese & Erfolgsmetrik definiert" } },
8230
- { id: "validation", label: { en: "Validation evidence captured", de: "Validierungsnachweise erfasst" } },
8231
- { id: "sponsor", label: { en: "Stage-gate sponsor sign-off", de: "Sponsor-Freigabe (Stage-Gate)" } },
8232
- { id: "nextStep", label: { en: "Next-step option declared (scale / pivot / stop)", de: "N\xE4chster Schritt benannt (skalieren / pivotieren / stoppen)" } }
8233
- ];
8234
- function buildDefaultsForMode(items) {
8235
- return {
8236
- "idea-pilot": items.map((i) => ({ ...i })),
8237
- "pilot-scaling": items.map((i) => ({ ...i })),
8238
- "scaling-production": items.map((i) => ({ ...i }))
8239
- };
8240
- }
8241
- var DEFAULT_GATE_CHECKLISTS_BY_MODE = {
8242
- ai: buildDefaultsForMode(AI_GATE_ITEMS),
8243
- digital: buildDefaultsForMode(DIGITAL_GATE_ITEMS),
8244
- innovation: buildDefaultsForMode(INNOVATION_GATE_ITEMS)
8568
+ var LEGACY_GATE_ITEMS = {
8569
+ ai: [
8570
+ { id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
8571
+ { id: "dpia", label: { en: "DPIA / risk assessment signed", de: "DSFA / Risikobewertung unterzeichnet" } },
8572
+ { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8573
+ { id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } },
8574
+ { id: "hitl", label: { en: "Human-in-the-loop posture confirmed", de: "Human-in-the-Loop-Haltung best\xE4tigt" } }
8575
+ ],
8576
+ digital: [
8577
+ { id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
8578
+ { id: "architecture", label: { en: "Architecture review", de: "Architektur-Review" } },
8579
+ { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8580
+ { id: "operability", label: { en: "Operability check", de: "Betreibbarkeits-Check" } },
8581
+ { id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } }
8582
+ ],
8583
+ innovation: [
8584
+ { id: "hypothesis", label: { en: "Hypothesis & success metric defined", de: "Hypothese & Erfolgsmetrik definiert" } },
8585
+ { id: "validation", label: { en: "Validation evidence captured", de: "Validierungsnachweise erfasst" } },
8586
+ { id: "sponsor", label: { en: "Stage-gate sponsor sign-off", de: "Sponsor-Freigabe (Stage-Gate)" } },
8587
+ { id: "nextStep", label: { en: "Next-step option declared (scale / pivot / stop)", de: "N\xE4chster Schritt benannt (skalieren / pivotieren / stoppen)" } }
8588
+ ]
8589
+ };
8590
+ var V520_RC_GATES = {
8591
+ ai: {
8592
+ "idea-pilot": [
8593
+ { id: "businessCase", label: { en: "Business case drafted, problem validated", de: "Business Case entworfen, Problem validiert" } },
8594
+ { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8595
+ { id: "successMetric", label: { en: "Success metric and kill criteria defined", de: "Erfolgsmetrik und Abbruchkriterien definiert" } },
8596
+ { id: "dpia", label: { en: "Initial DPIA / risk assessment signed", de: "Erste DSFA / Risikobewertung unterzeichnet" } },
8597
+ { id: "compliance", label: { en: "Compliance sign-off on pilot scope", de: "Compliance-Freigabe f\xFCr den Pilotumfang" } }
8598
+ ],
8599
+ "pilot-scaling": [
8600
+ { id: "successMet", label: { en: "Pilot met its pre-declared success metric", de: "Pilot hat seine vorab definierte Erfolgsmetrik erreicht" } },
8601
+ { id: "businessCase", label: { en: "Business case validated under audited assumptions", de: "Business Case unter gepr\xFCften Annahmen validiert" } },
8602
+ { id: "architecture", label: { en: "Architecture and operability checked at target volumes", de: "Architektur und Betreibbarkeit bei Zielvolumen gepr\xFCft" } },
8603
+ { id: "hitl", label: { en: "Human-in-the-loop posture confirmed", de: "Human-in-the-Loop-Haltung best\xE4tigt" } },
8604
+ { id: "compliance", label: { en: "Compliance review at scale", de: "Compliance-Review im Skalierungsumfang" } }
8605
+ ],
8606
+ "scaling-production": [
8607
+ { id: "slaMonitoring", label: { en: "SLAs, on-call and monitoring in place", de: "SLAs, Bereitschaft und Monitoring etabliert" } },
8608
+ { id: "dpia", label: { en: "DPIA and model card current", de: "DSFA und Model Card aktuell" } },
8609
+ { id: "owner", label: { en: "Operational owner and support model named", de: "Operativer Owner und Support-Modell benannt" } },
8610
+ { id: "runRate", label: { en: "Business case re-baselined on run-rate economics", de: "Business Case auf Run-Rate-\xD6konomie neu referenziert" } }
8611
+ ]
8612
+ },
8613
+ digital: {
8614
+ "idea-pilot": [
8615
+ { id: "businessCase", label: { en: "Business case drafted, problem validated", de: "Business Case entworfen, Problem validiert" } },
8616
+ { id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
8617
+ { id: "successMetric", label: { en: "Success metric defined", de: "Erfolgsmetrik definiert" } },
8618
+ { id: "compliance", label: { en: "Compliance sign-off on pilot scope", de: "Compliance-Freigabe f\xFCr den Pilotumfang" } }
8619
+ ],
8620
+ "pilot-scaling": [
8621
+ { id: "successMet", label: { en: "Pilot met its success metric", de: "Pilot hat seine Erfolgsmetrik erreicht" } },
8622
+ { id: "businessCase", label: { en: "Business case validated under audited assumptions", de: "Business Case unter gepr\xFCften Annahmen validiert" } },
8623
+ { id: "architecture", label: { en: "Architecture review at target volumes", de: "Architektur-Review bei Zielvolumen" } },
8624
+ { id: "compliance", label: { en: "Compliance review at scale", de: "Compliance-Review im Skalierungsumfang" } }
8625
+ ],
8626
+ "scaling-production": [
8627
+ { id: "operability", label: { en: "Operability check (SLAs, on-call, monitoring)", de: "Betreibbarkeits-Check (SLAs, Bereitschaft, Monitoring)" } },
8628
+ { id: "owner", label: { en: "Operational owner and support model named", de: "Operativer Owner und Support-Modell benannt" } },
8629
+ { id: "runRate", label: { en: "Business case re-baselined on run-rate", de: "Business Case auf Run-Rate neu referenziert" } }
8630
+ ]
8631
+ },
8632
+ innovation: {
8633
+ "idea-pilot": [
8634
+ { id: "hypothesis", label: { en: "Hypothesis and success metric defined", de: "Hypothese und Erfolgsmetrik definiert" } },
8635
+ { id: "sponsor", label: { en: "Sponsor sign-off on the experiment", de: "Sponsor-Freigabe f\xFCr das Experiment" } },
8636
+ { id: "testScope", label: { en: "Smallest falsifiable test scoped", de: "Kleinster falsifizierbarer Test definiert" } }
8637
+ ],
8638
+ "pilot-scaling": [
8639
+ { id: "validation", label: { en: "Validation evidence captured", de: "Validierungsnachweise erfasst" } },
8640
+ { id: "businessCase", label: { en: "Business case stands up beyond the experiment", de: "Business Case tr\xE4gt \xFCber das Experiment hinaus" } },
8641
+ { id: "sponsor", label: { en: "Sponsor sign-off (stage-gate)", de: "Sponsor-Freigabe (Stage-Gate)" } },
8642
+ { id: "nextStep", label: { en: "Next-step option declared (scale / pivot / stop)", de: "N\xE4chster Schritt benannt (skalieren / pivotieren / stoppen)" } }
8643
+ ],
8644
+ "scaling-production": [
8645
+ { id: "handover", label: { en: "Handover to run organisation agreed", de: "\xDCbergabe an die Run-Organisation vereinbart" } },
8646
+ { id: "benefits", label: { en: "Benefits tracking in place", de: "Nutzen-Tracking etabliert" } },
8647
+ { id: "sponsor", label: { en: "Sponsor sign-off (stage-gate)", de: "Sponsor-Freigabe (Stage-Gate)" } }
8648
+ ]
8649
+ }
8245
8650
  };
8651
+ var HISTORICAL_DEFAULT_SHAPES = [
8652
+ {
8653
+ ai: { "idea-pilot": LEGACY_GATE_ITEMS.ai, "pilot-scaling": LEGACY_GATE_ITEMS.ai, "scaling-production": LEGACY_GATE_ITEMS.ai },
8654
+ digital: { "idea-pilot": LEGACY_GATE_ITEMS.digital, "pilot-scaling": LEGACY_GATE_ITEMS.digital, "scaling-production": LEGACY_GATE_ITEMS.digital },
8655
+ innovation: { "idea-pilot": LEGACY_GATE_ITEMS.innovation, "pilot-scaling": LEGACY_GATE_ITEMS.innovation, "scaling-production": LEGACY_GATE_ITEMS.innovation }
8656
+ },
8657
+ V520_RC_GATES
8658
+ ];
8246
8659
 
8247
8660
  // ../../initiative-model/src/dimensions.ts
8248
8661
  var DIMENSION_KEYS = ["valueScale", "feasibility", "governance", "strategic"];
8249
8662
  var VALUE_SUBS = [
8250
8663
  "frequencyOfProcess",
8664
+ "volumeSensitivity",
8251
8665
  "labourIntensity",
8252
8666
  "operationalLeverage",
8253
8667
  "scalability",
8254
- "volumeSensitivity",
8255
8668
  "costReduction",
8256
8669
  "revenueImpact"
8257
8670
  ];
@@ -8270,18 +8683,18 @@ var GOVERNANCE_SUBS = [
8270
8683
  "decisionCriticality",
8271
8684
  "reputationalRisk",
8272
8685
  "operationalDependency",
8273
- "auditability",
8274
8686
  "monitoringComplexity",
8275
- "cybersecurityExposure"
8687
+ "cybersecurityExposure",
8688
+ "auditability"
8276
8689
  ];
8277
8690
  var STRATEGIC_SUBS = [
8278
8691
  "strategicDifferentiation",
8279
- "qualityImprovement",
8280
- "operatingModelAlignment",
8281
- "transformationPotential",
8282
8692
  "competitiveAdvantage",
8283
8693
  "clientImpact",
8694
+ "qualityImprovement",
8695
+ "operatingModelAlignment",
8284
8696
  "organisationalLeverage",
8697
+ "transformationPotential",
8285
8698
  "innovationCapability"
8286
8699
  ];
8287
8700
  var DIMENSION_SUBS = {
@@ -8336,19 +8749,26 @@ var DIMENSIONS = [
8336
8749
  "How often the underlying process runs. Higher frequency means more events benefit from automation.",
8337
8750
  "Wie oft der zugrundeliegende Prozess l\xE4uft. H\xF6here Frequenz = mehr Ereignisse profitieren von Automatisierung."
8338
8751
  ),
8752
+ sd(
8753
+ "volumeSensitivity",
8754
+ "Volume Sensitivity",
8755
+ "Volumensensitivit\xE4t",
8756
+ "How strongly business value grows with transaction volume. Higher = value compounds with throughput.",
8757
+ "Wie stark der Gesch\xE4ftsnutzen mit dem Transaktionsvolumen w\xE4chst. H\xF6her = Wert skaliert mit Durchsatz."
8758
+ ),
8339
8759
  sd(
8340
8760
  "labourIntensity",
8341
8761
  "Labour Intensity",
8342
8762
  "Personalintensit\xE4t",
8343
8763
  "Manual effort the process currently consumes. Higher = larger FTE-savings potential.",
8344
- "Manueller Aufwand, den der Prozess heute verursacht. H\xF6her = gr\xF6\xDFeres FTE-Einsparpotenzial."
8764
+ "Manueller Aufwand, den der Prozess heute verursacht. H\xF6her = gr\xF6sseres FTE-Einsparpotenzial."
8345
8765
  ),
8346
8766
  sd(
8347
8767
  "operationalLeverage",
8348
8768
  "Operational Leverage",
8349
8769
  "Operativer Hebel",
8350
8770
  "How much AI multiplies output per unit of human work. Higher = broader operational reach per FTE.",
8351
- "Wie stark KI den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6\xDFere operative Reichweite pro FTE."
8771
+ "Wie stark KI den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6ssere operative Reichweite pro FTE."
8352
8772
  ),
8353
8773
  sd(
8354
8774
  "scalability",
@@ -8357,13 +8777,6 @@ var DIMENSIONS = [
8357
8777
  "How easily the solution scales to more users, regions or volume without proportional cost.",
8358
8778
  "Wie leicht die L\xF6sung auf mehr Nutzer, Regionen oder Volumen skaliert, ohne dass Kosten proportional mitwachsen."
8359
8779
  ),
8360
- sd(
8361
- "volumeSensitivity",
8362
- "Volume Sensitivity",
8363
- "Volumensensitivit\xE4t",
8364
- "How strongly business value grows with transaction volume. Higher = value compounds with throughput.",
8365
- "Wie stark der Gesch\xE4ftsnutzen mit dem Transaktionsvolumen w\xE4chst. H\xF6her = Wert skaliert mit Durchsatz."
8366
- ),
8367
8780
  sd(
8368
8781
  "costReduction",
8369
8782
  "Cost Reduction",
@@ -8474,13 +8887,6 @@ var DIMENSIONS = [
8474
8887
  "How dependent core operations become on this system being continuously available.",
8475
8888
  "Wie abh\xE4ngig der Kernbetrieb von der st\xE4ndigen Verf\xFCgbarkeit dieses Systems wird."
8476
8889
  ),
8477
- sd(
8478
- "auditability",
8479
- "Auditability",
8480
- "Auditierbarkeit",
8481
- "Ability to log, trace and reconstruct decisions end-to-end for internal and external audit.",
8482
- "F\xE4higkeit, Entscheidungen End-to-End zu protokollieren, nachzuvollziehen und f\xFCr Audit-Zwecke zu rekonstruieren."
8483
- ),
8484
8890
  sd(
8485
8891
  "monitoringComplexity",
8486
8892
  "Monitoring Complexity",
@@ -8494,6 +8900,13 @@ var DIMENSIONS = [
8494
8900
  "Cybersicherheitsexposition",
8495
8901
  "Attack surface introduced \u2014 data, prompts, vendor APIs, model supply chain.",
8496
8902
  "Eingef\xFChrte Angriffsfl\xE4che \u2014 Daten, Prompts, Anbieter-APIs, Modell-Lieferkette."
8903
+ ),
8904
+ sd(
8905
+ "auditability",
8906
+ "Auditability",
8907
+ "Auditierbarkeit",
8908
+ "Ability to log, trace and reconstruct decisions end-to-end for internal and external audit.",
8909
+ "F\xE4higkeit, Entscheidungen End-to-End zu protokollieren, nachzuvollziehen und f\xFCr Audit-Zwecke zu rekonstruieren."
8497
8910
  )
8498
8911
  ]
8499
8912
  },
@@ -8508,27 +8921,6 @@ var DIMENSIONS = [
8508
8921
  "How much the initiative differentiates the firm from competitors.",
8509
8922
  "Wie stark sich das Unternehmen durch die Initiative von Wettbewerbern differenziert."
8510
8923
  ),
8511
- sd(
8512
- "qualityImprovement",
8513
- "Quality Improvement",
8514
- "Qualit\xE4tsverbesserung",
8515
- "Expected improvement in the quality of service, output or decision-making.",
8516
- "Erwartete Verbesserung der Qualit\xE4t von Service, Output oder Entscheidung."
8517
- ),
8518
- sd(
8519
- "operatingModelAlignment",
8520
- "Operating Model Alignment",
8521
- "Passung Betriebsmodell",
8522
- "Fit with the target operating model and existing capability map.",
8523
- "Passung zum Ziel-Betriebsmodell und zur bestehenden Capability-Map."
8524
- ),
8525
- sd(
8526
- "transformationPotential",
8527
- "Transformation Potential",
8528
- "Transformationspotenzial",
8529
- "Potential to reshape processes, roles, products or the revenue model.",
8530
- "Potenzial, Prozesse, Rollen, Produkte oder das Erl\xF6smodell neu zu formen."
8531
- ),
8532
8924
  sd(
8533
8925
  "competitiveAdvantage",
8534
8926
  "Competitive Advantage",
@@ -8543,6 +8935,20 @@ var DIMENSIONS = [
8543
8935
  "Visibility and value delivered directly to clients or end-users.",
8544
8936
  "Sichtbarkeit und Mehrwert, die direkt bei Kunden oder Endnutzern ankommen."
8545
8937
  ),
8938
+ sd(
8939
+ "qualityImprovement",
8940
+ "Quality Improvement",
8941
+ "Qualit\xE4tsverbesserung",
8942
+ "Expected improvement in the quality of service, output or decision-making.",
8943
+ "Erwartete Verbesserung der Qualit\xE4t von Service, Output oder Entscheidung."
8944
+ ),
8945
+ sd(
8946
+ "operatingModelAlignment",
8947
+ "Operating Model Alignment",
8948
+ "Passung Betriebsmodell",
8949
+ "Fit with the target operating model and existing capability map.",
8950
+ "Passung zum Ziel-Betriebsmodell und zur bestehenden Capability-Map."
8951
+ ),
8546
8952
  sd(
8547
8953
  "organisationalLeverage",
8548
8954
  "Organisational Leverage",
@@ -8550,6 +8956,13 @@ var DIMENSIONS = [
8550
8956
  "Reusability of the solution across business units, geographies or use cases.",
8551
8957
  "Wiederverwendbarkeit der L\xF6sung \xFCber Gesch\xE4ftsbereiche, Regionen oder Anwendungsf\xE4lle."
8552
8958
  ),
8959
+ sd(
8960
+ "transformationPotential",
8961
+ "Transformation Potential",
8962
+ "Transformationspotenzial",
8963
+ "Potential to reshape processes, roles, products or the revenue model.",
8964
+ "Potenzial, Prozesse, Rollen, Produkte oder das Erl\xF6smodell neu zu formen."
8965
+ ),
8553
8966
  sd(
8554
8967
  "innovationCapability",
8555
8968
  "Innovation Capability",
@@ -8645,8 +9058,8 @@ var OPTIONAL_SECTIONS = [
8645
9058
  {
8646
9059
  key: "requiredSkills",
8647
9060
  hint: {
8648
- en: "[{skillId, fte}] \u2014 skillId is the id of a skill that exists in the organisation. With the portfolio-context file, pick from read_portfolio_context \u2192 lists.skills (id + name); without it, leave empty and link skills in the app.",
8649
- de: "[{skillId, fte}] \u2014 skillId ist die ID eines vorhandenen Skills. Mit der Portfolio-Kontext-Datei aus read_portfolio_context \u2192 lists.skills (ID + Name) w\xE4hlen; ohne sie leer lassen und in der App verkn\xFCpfen."
9061
+ en: "[{skillId, fte, runFte?}] \u2014 fte is the build-phase demand, runFte the optional run-team demand after the planned end (absent = build fte continues, 0 = no run demand). skillId is the id of a skill that exists in the organisation. With the portfolio-context file, pick from read_portfolio_context \u2192 lists.skills (id + name); without it, leave empty and link skills in the app.",
9062
+ de: "[{skillId, fte, runFte?}] \u2014 fte ist der Bedarf der Aufbauphase, runFte der optionale Run-Team-Bedarf nach dem geplanten Ende (fehlend = Aufbau-FTE l\xE4uft weiter, 0 = kein Run-Bedarf). skillId ist die ID eines vorhandenen Skills. Mit der Portfolio-Kontext-Datei aus read_portfolio_context \u2192 lists.skills (ID + Name) w\xE4hlen; ohne sie leer lassen und in der App verkn\xFCpfen."
8650
9063
  }
8651
9064
  }
8652
9065
  ];
@@ -8830,7 +9243,7 @@ var SECTION_DESCRIPTIONS = {
8830
9243
  actuals: "Actuals block (In Production only) \u2014 see sectionShapes.actuals.",
8831
9244
  decisionLog: "Decision log entries \u2014 see sectionShapes.decisionLog. Entry ids are minted by the Composer \u2014 leave them out. Dates dd/mm/yyyy or yyyy-mm-dd.",
8832
9245
  statusReports: "Status reports \u2014 see sectionShapes.statusReports. Report ids are minted by the Composer \u2014 leave them out. Dates dd/mm/yyyy or yyyy-mm-dd.",
8833
- requiredSkills: "Required skills [{skillId, fte}] \u2014 skillId must be the id of a skill that exists in the organisation. With the portfolio context the Composer validates it (read_portfolio_context \u2192 lists.skills gives id + name); without it, leave the list empty and link skills in the app."
9246
+ requiredSkills: "Required skills [{skillId, fte, runFte?}] \u2014 fte is the build-phase demand, the optional runFte the run-team demand after the planned end (absent = build fte continues, 0 = no run demand). skillId must be the id of a skill that exists in the organisation. With the portfolio context the Composer validates it (read_portfolio_context \u2192 lists.skills gives id + name); without it, leave the list empty and link skills in the app."
8834
9247
  };
8835
9248
  var contextWire = () => external_exports.preprocess(parseIfString, external_exports.union([external_exports.string().regex(/^ctx_[0-9a-f]{16}$/, "a contextId looks like ctx_<16 hex>"), external_exports.object({}).passthrough()]));
8836
9249
  var requiredText = () => external_exports.string().trim().min(1, "must not be empty");
@@ -9291,7 +9704,7 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
9291
9704
  var BACKUP_VERSION = 10;
9292
9705
 
9293
9706
  // src/envelope.ts
9294
- var ENVELOPE_BRAND = "BICon Transformation Portfolio Steering";
9707
+ var ENVELOPE_BRAND = "BICon Portfolio Steering";
9295
9708
  var ENVELOPE_KIND = "single-initiative";
9296
9709
  var ENVELOPE_VERSION = BACKUP_VERSION;
9297
9710
  function buildEnvelope(initiative, opts = {}) {
@@ -9367,7 +9780,7 @@ function createServer() {
9367
9780
  "read_portfolio_context",
9368
9781
  {
9369
9782
  title: "Read portfolio context",
9370
- description: "Turns the organisation's portfolio-context file (downloaded in the BICon app: Import/Export \u2192 'Download portfolio context') into the interview plan for THIS organisation: its own labels, help texts and rating notes for the sub-dimensions, which sub-dimensions are switched off (do not ask, not scored), its business units, categories, tags, skills (id + name) and initiatives (id + name), currency, discount rate and whether the EU-AI-Act module is on \u2014 plus a short contextId. Call it right after get_initiative_schema when the user provides the file, then pass `context: \"<contextId>\"` to assemble_initiative and export_initiative_file.",
9783
+ description: "Turns the organisation's portfolio-context file (downloaded in the BICon Portfolio Steering app: Import/Export \u2192 'Download portfolio context') into the interview plan for THIS organisation: its own labels, help texts and rating notes for the sub-dimensions, which sub-dimensions are switched off (do not ask, not scored), its business units, categories, tags, skills (id + name) and initiatives (id + name), currency, discount rate and whether the EU-AI-Act module is on \u2014 plus a short contextId. Call it right after get_initiative_schema when the user provides the file, then pass `context: \"<contextId>\"` to assemble_initiative and export_initiative_file.",
9371
9784
  inputSchema: readContextInputSchema
9372
9785
  },
9373
9786
  async ({ context }) => {