@bicon/mcp-composer 0.1.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -75
- package/dist/index.mjs +2821 -241
- package/package.json +11 -3
package/dist/index.mjs
CHANGED
|
@@ -6,9 +6,14 @@ var __export = (target, all) => {
|
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
// src/index.ts
|
|
9
|
-
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
10
|
|
|
11
|
+
// src/server.ts
|
|
12
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
+
|
|
14
|
+
// src/version.ts
|
|
15
|
+
var COMPOSER_VERSION = true ? "0.3.1" : readPackageVersion();
|
|
16
|
+
|
|
12
17
|
// ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
|
|
13
18
|
var external_exports = {};
|
|
14
19
|
__export(external_exports, {
|
|
@@ -3459,25 +3464,25 @@ var ZodEnum = class _ZodEnum extends ZodType {
|
|
|
3459
3464
|
return this._def.values;
|
|
3460
3465
|
}
|
|
3461
3466
|
get enum() {
|
|
3462
|
-
const
|
|
3467
|
+
const enumValues2 = {};
|
|
3463
3468
|
for (const val of this._def.values) {
|
|
3464
|
-
|
|
3469
|
+
enumValues2[val] = val;
|
|
3465
3470
|
}
|
|
3466
|
-
return
|
|
3471
|
+
return enumValues2;
|
|
3467
3472
|
}
|
|
3468
3473
|
get Values() {
|
|
3469
|
-
const
|
|
3474
|
+
const enumValues2 = {};
|
|
3470
3475
|
for (const val of this._def.values) {
|
|
3471
|
-
|
|
3476
|
+
enumValues2[val] = val;
|
|
3472
3477
|
}
|
|
3473
|
-
return
|
|
3478
|
+
return enumValues2;
|
|
3474
3479
|
}
|
|
3475
3480
|
get Enum() {
|
|
3476
|
-
const
|
|
3481
|
+
const enumValues2 = {};
|
|
3477
3482
|
for (const val of this._def.values) {
|
|
3478
|
-
|
|
3483
|
+
enumValues2[val] = val;
|
|
3479
3484
|
}
|
|
3480
|
-
return
|
|
3485
|
+
return enumValues2;
|
|
3481
3486
|
}
|
|
3482
3487
|
extract(values, newDef = this._def) {
|
|
3483
3488
|
return _ZodEnum.create(values, {
|
|
@@ -4200,6 +4205,8 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4200
4205
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4201
4206
|
"aiCategory": stringType(),
|
|
4202
4207
|
"tags": arrayType(stringType()),
|
|
4208
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4209
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
4203
4210
|
"archived": booleanType(),
|
|
4204
4211
|
"evaluation": objectType({
|
|
4205
4212
|
"valueScale": objectType({
|
|
@@ -4450,6 +4457,8 @@ var CreateSnapshotBody = objectType({
|
|
|
4450
4457
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4451
4458
|
"aiCategory": stringType(),
|
|
4452
4459
|
"tags": arrayType(stringType()),
|
|
4460
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4461
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
4453
4462
|
"archived": booleanType(),
|
|
4454
4463
|
"evaluation": objectType({
|
|
4455
4464
|
"valueScale": objectType({
|
|
@@ -4705,6 +4714,8 @@ var RenameSnapshotResponse = objectType({
|
|
|
4705
4714
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4706
4715
|
"aiCategory": stringType(),
|
|
4707
4716
|
"tags": arrayType(stringType()),
|
|
4717
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4718
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
4708
4719
|
"archived": booleanType(),
|
|
4709
4720
|
"evaluation": objectType({
|
|
4710
4721
|
"valueScale": objectType({
|
|
@@ -4951,6 +4962,8 @@ var ListInitiativesResponseItem = objectType({
|
|
|
4951
4962
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4952
4963
|
"aiCategory": stringType(),
|
|
4953
4964
|
"tags": arrayType(stringType()),
|
|
4965
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4966
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
4954
4967
|
"archived": booleanType(),
|
|
4955
4968
|
"evaluation": objectType({
|
|
4956
4969
|
"valueScale": objectType({
|
|
@@ -5193,6 +5206,8 @@ var CreateInitiativeBody = objectType({
|
|
|
5193
5206
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5194
5207
|
"aiCategory": stringType(),
|
|
5195
5208
|
"tags": arrayType(stringType()),
|
|
5209
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5210
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
5196
5211
|
"archived": booleanType(),
|
|
5197
5212
|
"evaluation": objectType({
|
|
5198
5213
|
"valueScale": objectType({
|
|
@@ -5443,6 +5458,8 @@ var GetInitiativeResponse = objectType({
|
|
|
5443
5458
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5444
5459
|
"aiCategory": stringType(),
|
|
5445
5460
|
"tags": arrayType(stringType()),
|
|
5461
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5462
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
5446
5463
|
"archived": booleanType(),
|
|
5447
5464
|
"evaluation": objectType({
|
|
5448
5465
|
"valueScale": objectType({
|
|
@@ -5687,6 +5704,8 @@ var UpdateInitiativeBody = objectType({
|
|
|
5687
5704
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5688
5705
|
"aiCategory": stringType(),
|
|
5689
5706
|
"tags": arrayType(stringType()),
|
|
5707
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5708
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
5690
5709
|
"archived": booleanType(),
|
|
5691
5710
|
"evaluation": objectType({
|
|
5692
5711
|
"valueScale": objectType({
|
|
@@ -5934,6 +5953,8 @@ var UpdateInitiativeResponse = objectType({
|
|
|
5934
5953
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5935
5954
|
"aiCategory": stringType(),
|
|
5936
5955
|
"tags": arrayType(stringType()),
|
|
5956
|
+
"docsUrl": stringType().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5957
|
+
"pmUrl": stringType().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
5937
5958
|
"archived": booleanType(),
|
|
5938
5959
|
"evaluation": objectType({
|
|
5939
5960
|
"valueScale": objectType({
|
|
@@ -6203,37 +6224,2093 @@ var ListAdminAuditLogResponseItem = objectType({
|
|
|
6203
6224
|
}).describe(`One privileged admin action from the org-level trail (admin_audit_log). action/targetType are stable slugs (e.g. "member.permissions_changed" / "member"); the closed set lives in the server's AdminAction union. actorName null = system-driven (Clerk webhook \u2014 Clerk does not report which admin clicked) or the acting account was since erased. detail is a JSON string of minimal facts (role from/to, permission lists, changed setting keys, a name for deleted objects) \u2014 never a full entity payload.`);
|
|
6204
6225
|
var ListAdminAuditLogResponse = arrayType(ListAdminAuditLogResponseItem);
|
|
6205
6226
|
|
|
6206
|
-
// src/
|
|
6207
|
-
var
|
|
6208
|
-
"
|
|
6209
|
-
"
|
|
6210
|
-
"
|
|
6211
|
-
|
|
6212
|
-
"
|
|
6213
|
-
|
|
6227
|
+
// ../../api-zod/src/generated/types/aIActDataRole.ts
|
|
6228
|
+
var AIActDataRole = {
|
|
6229
|
+
Provider: "Provider",
|
|
6230
|
+
Deployer: "Deployer",
|
|
6231
|
+
Importer: "Importer",
|
|
6232
|
+
Distributor: "Distributor",
|
|
6233
|
+
"Not-in-Scope": "Not-in-Scope"
|
|
6234
|
+
};
|
|
6235
|
+
|
|
6236
|
+
// ../../api-zod/src/generated/types/decisionEntryKind.ts
|
|
6237
|
+
var DecisionEntryKind = {
|
|
6238
|
+
go: "go",
|
|
6239
|
+
pause: "pause",
|
|
6240
|
+
stop: "stop",
|
|
6241
|
+
rescope: "rescope",
|
|
6242
|
+
rebudget: "rebudget",
|
|
6243
|
+
other: "other"
|
|
6244
|
+
};
|
|
6245
|
+
|
|
6246
|
+
// ../../api-zod/src/generated/types/evaluationDimensionConfidence.ts
|
|
6247
|
+
var EvaluationDimensionConfidence = {
|
|
6248
|
+
Low: "Low",
|
|
6249
|
+
Medium: "Medium",
|
|
6250
|
+
High: "High"
|
|
6251
|
+
};
|
|
6252
|
+
|
|
6253
|
+
// ../../api-zod/src/generated/types/initiativeAiRiskTier.ts
|
|
6254
|
+
var InitiativeAiRiskTier = {
|
|
6255
|
+
Prohibited: "Prohibited",
|
|
6256
|
+
"High-Risk": "High-Risk",
|
|
6257
|
+
Limited: "Limited",
|
|
6258
|
+
Minimal: "Minimal"
|
|
6259
|
+
};
|
|
6260
|
+
|
|
6261
|
+
// ../../api-zod/src/generated/types/initiativeDpiaStatus.ts
|
|
6262
|
+
var InitiativeDpiaStatus = {
|
|
6263
|
+
Not_Required: "Not Required",
|
|
6264
|
+
In_Progress: "In Progress",
|
|
6265
|
+
Completed: "Completed"
|
|
6266
|
+
};
|
|
6267
|
+
|
|
6268
|
+
// ../../api-zod/src/generated/types/initiativeHitlPosture.ts
|
|
6269
|
+
var InitiativeHitlPosture = {
|
|
6270
|
+
Unattended: "Unattended",
|
|
6271
|
+
Supervised: "Supervised",
|
|
6272
|
+
"Human-Required": "Human-Required"
|
|
6273
|
+
};
|
|
6274
|
+
|
|
6275
|
+
// ../../api-zod/src/generated/types/initiativeModelCardStatus.ts
|
|
6276
|
+
var InitiativeModelCardStatus = {
|
|
6277
|
+
Not_Required: "Not Required",
|
|
6278
|
+
Draft: "Draft",
|
|
6279
|
+
Published: "Published"
|
|
6280
|
+
};
|
|
6281
|
+
|
|
6282
|
+
// ../../api-zod/src/generated/types/initiativeSolutionType.ts
|
|
6283
|
+
var InitiativeSolutionType = {
|
|
6284
|
+
Internal: "Internal",
|
|
6285
|
+
External: "External",
|
|
6286
|
+
Hybrid: "Hybrid"
|
|
6287
|
+
};
|
|
6288
|
+
|
|
6289
|
+
// ../../api-zod/src/generated/types/initiativeStatus.ts
|
|
6290
|
+
var InitiativeStatus = {
|
|
6291
|
+
Idea: "Idea",
|
|
6292
|
+
Pilot: "Pilot",
|
|
6293
|
+
Scaling: "Scaling",
|
|
6294
|
+
In_Production: "In Production",
|
|
6295
|
+
On_Hold: "On Hold",
|
|
6296
|
+
Retired: "Retired"
|
|
6297
|
+
};
|
|
6298
|
+
|
|
6299
|
+
// ../../api-zod/src/generated/types/initiativeVendorDependency.ts
|
|
6300
|
+
var InitiativeVendorDependency = {
|
|
6301
|
+
None: "None",
|
|
6302
|
+
Single_Vendor: "Single Vendor",
|
|
6303
|
+
"Multi-Vendor": "Multi-Vendor",
|
|
6304
|
+
Internal_Build: "Internal Build",
|
|
6305
|
+
Hybrid: "Hybrid"
|
|
6306
|
+
};
|
|
6307
|
+
|
|
6308
|
+
// ../../api-zod/src/generated/types/statusReportDimensionEntryRag.ts
|
|
6309
|
+
var StatusReportDimensionEntryRag = {
|
|
6310
|
+
green: "green",
|
|
6311
|
+
yellow: "yellow",
|
|
6312
|
+
red: "red"
|
|
6313
|
+
};
|
|
6314
|
+
|
|
6315
|
+
// ../../initiative-model/src/types.ts
|
|
6316
|
+
var LANGUAGES = ["en", "de"];
|
|
6317
|
+
var GATE_TRANSITIONS = [
|
|
6318
|
+
{ key: "idea-pilot", from: "Idea", to: "Pilot" },
|
|
6319
|
+
{ key: "pilot-scaling", from: "Pilot", to: "Scaling" },
|
|
6320
|
+
{ key: "scaling-production", from: "Scaling", to: "In Production" }
|
|
6321
|
+
];
|
|
6322
|
+
var GATE_TRANSITION_KEYS = GATE_TRANSITIONS.map((t) => t.key);
|
|
6323
|
+
var ANNEX_III_CATEGORIES = [
|
|
6324
|
+
"Biometrics",
|
|
6325
|
+
"Critical Infrastructure",
|
|
6326
|
+
"Education",
|
|
6327
|
+
"Employment",
|
|
6328
|
+
"Essential Services",
|
|
6329
|
+
"Law Enforcement",
|
|
6330
|
+
"Migration",
|
|
6331
|
+
"Justice",
|
|
6332
|
+
"Democratic Processes"
|
|
6333
|
+
];
|
|
6334
|
+
var AI_ACT_PROHIBITED_PRACTICES = [
|
|
6335
|
+
"social-scoring",
|
|
6336
|
+
"subliminal-manipulation",
|
|
6337
|
+
"exploitation-of-vulnerabilities",
|
|
6338
|
+
"biometric-realtime-public",
|
|
6339
|
+
"emotion-workplace",
|
|
6340
|
+
"untargeted-scraping",
|
|
6341
|
+
"predictive-policing-profiling",
|
|
6342
|
+
"biometric-categorisation-characteristics"
|
|
6343
|
+
];
|
|
6344
|
+
var AI_ACT_ART50_FLAGS = [
|
|
6345
|
+
"chatbot",
|
|
6346
|
+
"deepfake",
|
|
6347
|
+
"emotion-recognition",
|
|
6348
|
+
"biometric-categorisation",
|
|
6349
|
+
"ai-generated-content"
|
|
6214
6350
|
];
|
|
6215
|
-
var
|
|
6216
|
-
"
|
|
6217
|
-
"
|
|
6218
|
-
"
|
|
6219
|
-
"
|
|
6220
|
-
"
|
|
6351
|
+
var ACT_ARTIFACT_KEYS = [
|
|
6352
|
+
"tech-doc",
|
|
6353
|
+
"fria",
|
|
6354
|
+
"risk-mgmt",
|
|
6355
|
+
"data-governance",
|
|
6356
|
+
"instructions-for-use",
|
|
6357
|
+
"logging-records",
|
|
6358
|
+
"conformity-declaration",
|
|
6359
|
+
"post-market-monitoring",
|
|
6360
|
+
"copyright-statement",
|
|
6361
|
+
"model-evaluation",
|
|
6362
|
+
"systemic-cybersecurity"
|
|
6221
6363
|
];
|
|
6222
|
-
var
|
|
6223
|
-
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
|
|
6230
|
-
|
|
6231
|
-
|
|
6232
|
-
"
|
|
6233
|
-
"
|
|
6234
|
-
"
|
|
6235
|
-
"
|
|
6364
|
+
var OPERATIONAL_OBLIGATION_KEYS = [
|
|
6365
|
+
"deployer-ifu-confirmed",
|
|
6366
|
+
"deployer-oversight-assigned",
|
|
6367
|
+
"deployer-input-data-checked",
|
|
6368
|
+
"deployer-logging-retention",
|
|
6369
|
+
"deployer-operational-monitoring",
|
|
6370
|
+
"deployer-escalation-path",
|
|
6371
|
+
"deployer-persons-informed",
|
|
6372
|
+
"provider-qms-applied",
|
|
6373
|
+
"provider-conformity-assessment",
|
|
6374
|
+
"provider-post-market-monitoring",
|
|
6375
|
+
"provider-corrective-action",
|
|
6376
|
+
"provider-incident-reporting",
|
|
6377
|
+
"provider-substantial-modification",
|
|
6378
|
+
"provider-market-surveillance-coop",
|
|
6379
|
+
"gpai-technical-documentation",
|
|
6380
|
+
"gpai-downstream-information",
|
|
6381
|
+
"gpai-copyright-policy",
|
|
6382
|
+
"gpai-training-content-summary",
|
|
6383
|
+
"gpai-systemic-model-evaluation",
|
|
6384
|
+
"gpai-systemic-risk-mitigation",
|
|
6385
|
+
"gpai-systemic-incident-tracking",
|
|
6386
|
+
"gpai-systemic-cybersecurity",
|
|
6387
|
+
"art50-ai-interaction-disclosed",
|
|
6388
|
+
"art50-synthetic-content-marked",
|
|
6389
|
+
"art50-emotion-biometric-disclosed",
|
|
6390
|
+
"art50-deepfake-disclosed",
|
|
6391
|
+
"importer-verify-conformity",
|
|
6392
|
+
"distributor-verify-conformity"
|
|
6236
6393
|
];
|
|
6394
|
+
|
|
6395
|
+
// ../../initiative-model/src/modes.ts
|
|
6396
|
+
var PORTFOLIO_MODES = ["ai", "digital", "innovation"];
|
|
6397
|
+
var EN_AI = {};
|
|
6398
|
+
var DE_AI = {};
|
|
6399
|
+
var EN_DIGITAL = {
|
|
6400
|
+
"brand.app": "Digital Portfolio Steering",
|
|
6401
|
+
"brand.mobile": "BICon \xB7 Digital Portfolio Steering",
|
|
6402
|
+
"brand.motto": "Digital investments multiply value, but they can also multiply complexity.",
|
|
6403
|
+
"filters.aiCategory": "Digital category",
|
|
6404
|
+
"evaluate.field.aiCategory": "Digital Category",
|
|
6405
|
+
"evaluate.fieldHelp.aiCategory": "Drives the digital-category concentration metric (Concentration page) and the category-mix breakdown in the Board Memo. Also used to filter the inventory.",
|
|
6406
|
+
"category.Generative AI": "Customer Channels",
|
|
6407
|
+
"category.Predictive AI": "Data & Analytics",
|
|
6408
|
+
"category.Automation": "Workflow Automation",
|
|
6409
|
+
"category.Agentic AI": "Platform Services",
|
|
6410
|
+
"category.Decision Support": "Reporting & BI",
|
|
6411
|
+
"category.AI Copilot": "Productivity Tools",
|
|
6412
|
+
"category.Knowledge Retrieval": "Content & Knowledge",
|
|
6413
|
+
"category.Process Automation": "Process Digitisation",
|
|
6414
|
+
"category.Compliance / Risk AI": "RegTech & Risk",
|
|
6415
|
+
"category.Customer Interaction AI": "Customer Experience",
|
|
6416
|
+
"method.motto": "Digital investments multiply value, but they can also multiply complexity.",
|
|
6417
|
+
"method.intro": "This platform applies deterministic abstractions to convert qualitative board-level judgement about your digital portfolio into auditable strategic signals. Every number on every screen can be traced back to a slider, a select, or a published threshold below.",
|
|
6418
|
+
"quadrant.Scale": "Roll out",
|
|
6419
|
+
"quadrant.Pilot": "Pilot",
|
|
6420
|
+
"quadrant.Stop": "Stop",
|
|
6421
|
+
"quadrant.Assist": "Strengthen",
|
|
6422
|
+
"quadrant.Pilot.subtitle": "Technically Ready but unclear Value",
|
|
6423
|
+
"quadrant.Scale.subtitle": "High Impact \xB7 High Delivery Confidence",
|
|
6424
|
+
"quadrant.Stop.subtitle": "Low Value \xB7 Low Delivery Confidence",
|
|
6425
|
+
"quadrant.Assist.subtitle": "Valuable but not yet Stable enough to scale",
|
|
6426
|
+
"sub.dataAvailability": "Source-System Readiness",
|
|
6427
|
+
"sub.dataQuality": "Data & Process Quality",
|
|
6428
|
+
"sub.modelRobustness": "Solution Stability",
|
|
6429
|
+
"sub.reproducibility": "Cloud Readiness",
|
|
6430
|
+
"sub.explainability": "Transparency to Users",
|
|
6431
|
+
"sub.humanOversight": "Manual Controls Required",
|
|
6432
|
+
"sub.decisionCriticality": "Business Criticality",
|
|
6433
|
+
"sub.monitoringComplexity": "Monitoring Complexity",
|
|
6434
|
+
"sub.cybersecurityExposure": "Cybersecurity Exposure",
|
|
6435
|
+
"sub.innovationCapability": "Digital Capability Build-up",
|
|
6436
|
+
"subHelp.dataAvailability": "Availability of the source systems, APIs and master data the solution depends on.",
|
|
6437
|
+
"subHelp.dataQuality": "Cleanliness, completeness and timeliness of the data flowing through the digital workflow.",
|
|
6438
|
+
"dim.feasibility.band1.meaning": "Data, solution or integration gaps make delivery uncertain.",
|
|
6439
|
+
"dim.governance.band2.meaning": "Standard risk controls and monitoring required.",
|
|
6440
|
+
"govBand.Low.desc": "0\u201320 \xB7 Low sensitivity \u2014 routine controls; no escalation required",
|
|
6441
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 Low sensitivity \u2014 routine controls suffice",
|
|
6442
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Supervised operation \u2014 standard risk controls and monitoring required",
|
|
6443
|
+
"govBand.High.desc": "61\u201380 \xB7 Restricted deployment \u2014 active board-level oversight, audit trail and access controls",
|
|
6444
|
+
"govBand.Critical.desc": "81\u2013100 \xB7 High governance sensitivity \u2014 treat as material risk; ringfencing and continuous oversight",
|
|
6445
|
+
"govLabel.Controlled Automation": "Controlled Operation",
|
|
6446
|
+
"govLabel.Human-in-the-Loop Required": "Supervised Operation Required",
|
|
6447
|
+
"govLabel.Restricted Deployment": "Restricted Rollout",
|
|
6448
|
+
"subHelp.modelRobustness": "Stability of the solution under load, edge cases and unexpected inputs.",
|
|
6449
|
+
"subHelp.reproducibility": "Maturity of the underlying cloud / platform stack \u2014 proven and supported (managed services, mature regions, SLAs) vs experimental or self-hosted.",
|
|
6450
|
+
"subHelp.explainability": "How clearly the system's behaviour and outputs can be explained to operators and end-users.",
|
|
6451
|
+
"subHelp.regulatoryExposure": "Exposure to regulation (GDPR, DORA, sector-specific rules). Higher = more controls required.",
|
|
6452
|
+
"subHelp.humanOversight": "How much manual checking, approval or four-eyes review is needed for safe operation.",
|
|
6453
|
+
"subHelp.decisionCriticality": "Impact of a wrong, delayed or missed decision on operations, finances or clients.",
|
|
6454
|
+
"subHelp.monitoringComplexity": "Effort required to monitor uptime, errors, SLAs and incidents in production.",
|
|
6455
|
+
"subHelp.cybersecurityExposure": "Attack surface introduced \u2014 data flows, identities, third-party APIs, supply chain.",
|
|
6456
|
+
"subHelp.innovationCapability": "Strengthening of internal digital muscle \u2014 talent, platforms, tooling, reusable assets.",
|
|
6457
|
+
"scenarios.lever.adoptionSpeed": "Rollout Speed",
|
|
6458
|
+
"scenarios.lever.oversightIntensity": "Operational Oversight",
|
|
6459
|
+
"scenarios.leverHelp.adoptionSpeed": "How quickly initiatives move from Pilot \u2192 Rollout \u2192 Production at scale.",
|
|
6460
|
+
"scenarios.leverHelp.oversightIntensity": "Operational monitoring, SRE practice and four-eyes review in production.",
|
|
6461
|
+
"prioritisation.cat.Quick Wins": "Quick Wins",
|
|
6462
|
+
"prioritisation.cat.Strategic Core Initiatives": "Strategic Platform Initiatives",
|
|
6463
|
+
"prioritisation.cat.High Governance Risk": "High Compliance Risk",
|
|
6464
|
+
"prioritisation.cat.Long-Term Strategic Bets": "Multi-Year Programmes",
|
|
6465
|
+
"prioritisation.cat.Incremental Optimisation": "Continuous Improvement",
|
|
6466
|
+
"prioritisation.cat.Operating Model Transformation": "Operating Model Modernisation",
|
|
6467
|
+
"prioritisation.cat.Uncategorised / Tactical": "Tactical / Uncategorised",
|
|
6468
|
+
"prioritisation.subtitle": "Digital initiatives grouped by strategic archetype.",
|
|
6469
|
+
"prioritisation.highRisk": "High Compliance Risk",
|
|
6470
|
+
"settings.prio.quickWins": "Quick Wins",
|
|
6471
|
+
"settings.prio.strategicCore": "Strategic Platform Initiatives",
|
|
6472
|
+
"settings.prio.highGovRisk": "High Compliance Risk",
|
|
6473
|
+
"settings.prio.longTermBets": "Multi-Year Programmes",
|
|
6474
|
+
"settings.prio.incremental": "Continuous Improvement",
|
|
6475
|
+
"settings.prio.operatingModel": "Operating Model Modernisation",
|
|
6476
|
+
"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.",
|
|
6477
|
+
"inventory.col.scores": "Scores (V/F/C/S)",
|
|
6478
|
+
"concept.eyebrow": "Digital Portfolio Steering",
|
|
6479
|
+
"concept.title": "Turn fragmented digital projects into a managed portfolio.",
|
|
6480
|
+
"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.",
|
|
6481
|
+
"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.",
|
|
6482
|
+
"concept.problem.p2": "Local delivery generates real value, but frequently leads to fragmented portfolios of platforms, point solutions and undocumented integrations \u2014 leaving leadership to decide, often without comparable evidence, which initiatives should be scaled, which should remain in pilot, and which should be retired.",
|
|
6483
|
+
"concept.dimensions.title": "Four dimensions for evaluating digital initiatives",
|
|
6484
|
+
"concept.dimensions.subtitle": "Each digital initiative is scored along the same four dimensions so it can be compared on a consistent basis.",
|
|
6485
|
+
"concept.dim.feasibility.title": "2. Delivery Feasibility & Operability",
|
|
6486
|
+
"concept.dim.feasibility.q1": "Are source systems and master data available and of sufficient quality?",
|
|
6487
|
+
"concept.dim.governance.title": "3. Compliance & Operational Risk",
|
|
6488
|
+
"concept.dim.governance.q2": "What is the degree of regulatory and cyber exposure?",
|
|
6489
|
+
"concept.dim.governance.q3": "What manual controls and oversight are required?",
|
|
6490
|
+
"concept.dim.strategic.body": "Whether the initiative merely improves existing processes or contributes to new strategic capabilities. Some digital projects deliver efficiency gains; others reshape the operating model, the customer experience or the way data is used across the business.",
|
|
6491
|
+
"concept.quadrants.subtitle": "Value and delivery confidence position a digital initiative in the portfolio map; compliance and operational risk define the boundaries within which it can be deployed in practice.",
|
|
6492
|
+
"concept.quad.Scale.body": "High value, high delivery confidence and manageable risk \u2014 ready for enterprise roll-out.",
|
|
6493
|
+
"concept.quad.Pilot.body": "Promising potential, but with technical, integration or organisational uncertainty \u2014 pilot before scaling.",
|
|
6494
|
+
"concept.quad.Assist.body": "Valuable, but not yet stable enough to scale \u2014 strengthen the foundations first.",
|
|
6495
|
+
"concept.quad.Stop.body": "Limited value or excessive delivery and compliance risk \u2014 defer or sunset.",
|
|
6496
|
+
"concept.features.f1.body": "Capture each digital initiative with business unit, owner, tags, lifecycle status and a 0\u2013100 score on all four dimensions.",
|
|
6497
|
+
"concept.features.f2.body": "Business Impact \xD7 Delivery Confidence bubble chart with compliance-band colouring and Roll out / Pilot / Strengthen / Stop quadrant counts.",
|
|
6498
|
+
"dim.feasibility.title": "Delivery Feasibility & Operability",
|
|
6499
|
+
"dim.governance.title": "Compliance & Operational Risk",
|
|
6500
|
+
"portfolio.tooltip.governance": "Compliance & Op. Risk",
|
|
6501
|
+
"portfolio.kpi.governance": "Avg. compliance & op. risk load",
|
|
6502
|
+
"portfolio.custom.metric.governance": "Compliance & Op. Risk",
|
|
6503
|
+
"nav.governance": "Compliance & Op. Risk",
|
|
6504
|
+
"filters.govBand": "Compliance & Op. Risk",
|
|
6505
|
+
"inventory.col.governance": "Compliance Band",
|
|
6506
|
+
"inventory.sort.governance": "Sort: Compliance & op. risk",
|
|
6507
|
+
"inventory.sort.feasibility": "Sort: Delivery feasibility",
|
|
6508
|
+
"portfolio.axis.y": "Delivery Feasibility & Operability",
|
|
6509
|
+
"portfolio.tooltip.feasibility": "Delivery Feasibility",
|
|
6510
|
+
"op.input.feasibility": "Delivery Feasibility",
|
|
6511
|
+
"evaluate.profile.radarFeasibility": "Delivery",
|
|
6512
|
+
"evaluate.profile.radarGovernance": "Compliance",
|
|
6513
|
+
"inventory.title": "Digital Initiative Inventory",
|
|
6514
|
+
"inventory.subtitle": "Manage and evaluate your portfolio of digital initiatives.",
|
|
6515
|
+
"inventory.empty.title": "Digital investments multiply value, but they can also multiply complexity.",
|
|
6516
|
+
"inventory.empty.subtitle": "Begin by adding your enterprise digital initiatives to the portfolio, or load the strategic demo dataset to explore the evaluation frameworks.",
|
|
6517
|
+
"memo.summary.portfolio": "The enterprise currently runs {count} active digital initiatives with an aggregate committed budget of {budget}.",
|
|
6518
|
+
"governance.subtitle": "Executive oversight of digital delivery risk, compliance exposure and operational dependencies.",
|
|
6519
|
+
"op.subtitle": "Organisational implications of the current digital portfolio across staffing, compliance, scalability, customer interaction and operating-model evolution.",
|
|
6520
|
+
"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.",
|
|
6521
|
+
"concentration.hhi.category": "Digital category",
|
|
6522
|
+
"concentration.heatmap.title": "Cluster heatmap \u2014 business unit \xD7 digital category",
|
|
6523
|
+
"concentration.heatmap.subtitle": "Identifies clusters where a single business unit accumulates exposure in one digital category.",
|
|
6524
|
+
"concentration.obs.category": "Digital category concentration. Initiatives are skewed towards a small number of digital categories, leaving broader strategic capabilities underdeveloped.",
|
|
6525
|
+
"concentration.cat.title": "Digital category",
|
|
6526
|
+
"ie.boardPack.coverTitlePlaceholder": "Digital Portfolio \u2014 Q3 2026 board review",
|
|
6527
|
+
"boardPack.heatmap.subtitle": "Business unit \xD7 digital category \u2014 clusters where one BU stacks one digital capability.",
|
|
6528
|
+
"portfolio.custom.metric.feasibility": "Delivery Feasibility",
|
|
6529
|
+
"subHelp.operationalLeverage": "How much the digital solution multiplies output per unit of human work. Higher = broader operational reach per FTE.",
|
|
6530
|
+
"op.staffing.level3": "Dedicated digital control function",
|
|
6531
|
+
"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.",
|
|
6532
|
+
"scenarios.preset.transformational.desc": "Reshape the operating model around digital; high readiness and diversified vendor base.",
|
|
6533
|
+
"memo.heading": "Board Memorandum \u2014 Digital Transformation Portfolio",
|
|
6534
|
+
"memo.concentration.category": "Digital category concentration: {name} accounts for {count} of {total} initiatives ({pct}%).",
|
|
6535
|
+
"memo.opmodel.talent": "Talent & capability: a portfolio of this composition typically demands a centralised digital control function (delivery, integration, ops, data governance) sized proportionately to the oversight load above.",
|
|
6536
|
+
"method.s1.p1": "Each initiative is scored on four strategic dimensions: <strong>Value & Scale</strong>, <strong>Delivery Feasibility & Operability</strong>, <strong>Compliance & Operational Risk</strong>, and <strong>Strategic Impact</strong>. Every dimension contains 7\u20138 subcomponents scored from 0 to 100.",
|
|
6537
|
+
"method.s2.title": "2. Compliance & Operational Risk Classification",
|
|
6538
|
+
"method.s2.subtitle": "Compliance & operational-risk bands and what they imply for the control load.",
|
|
6539
|
+
"method.s2.intro": "Initiatives are classified into bands based on the Compliance & Operational Risk score:",
|
|
6540
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Standard controls</strong>: standard monitoring; periodic review.",
|
|
6541
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Enhanced operational controls</strong>: documented procedures, dual approvals, active monitoring.",
|
|
6542
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Restricted rollout</strong>: active board-level oversight, audit trail and access controls.",
|
|
6543
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Board-level sponsorship required</strong>: treat as material risk; deploy only with explicit ringfencing.",
|
|
6544
|
+
"method.s4.subtitle": "How each initiative is positioned on the Business Impact \xD7 Delivery Feasibility plane.",
|
|
6545
|
+
"method.s4.intro": "The x-axis (<strong>Business Impact</strong>) is the equal-weighted average of Value & Scale and Strategic Impact: <code>BusinessImpact = (Value + Strategic) / 2</code>. The y-axis is Delivery Feasibility & Operability. Quadrants are split deterministically at 50 on both axes:",
|
|
6546
|
+
"method.s4.scale": "<strong>Roll out</strong> \u2014 Business Impact \u2265 50 and Delivery Feasibility \u2265 50. High impact, reliably deliverable \u2014 ready for enterprise roll-out.",
|
|
6547
|
+
"method.s4.assist": "<strong>Strengthen</strong> \u2014 Business Impact \u2265 50 and Delivery Feasibility < 50. Valuable but delivery is not yet robust \u2014 invest in operability before scaling.",
|
|
6548
|
+
"method.s4.pilot": "<strong>Pilot</strong> \u2014 Business Impact < 50 and Delivery Feasibility \u2265 50. Technically deliverable but unclear business case \u2014 pilot before scaling.",
|
|
6549
|
+
"method.s4.stop": "<strong>Stop</strong> \u2014 Business Impact < 50 and Delivery Feasibility < 50. Low impact and low feasibility \u2014 defer or sunset.",
|
|
6550
|
+
"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.",
|
|
6551
|
+
"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.",
|
|
6552
|
+
"method.s8.b3": "No external regulatory, operational-risk or third-party assurance signals are incorporated.",
|
|
6553
|
+
"memo.assumptions.signals": "No external regulatory, operational-risk or third-party assurance signals have been incorporated into these scores.",
|
|
6554
|
+
"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>.',
|
|
6555
|
+
"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.",
|
|
6556
|
+
"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.",
|
|
6557
|
+
"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.",
|
|
6558
|
+
"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.",
|
|
6559
|
+
"concept.dim.feasibility.q2": "Are the solution's outputs stable and reproducible across environments?",
|
|
6560
|
+
"concept.dim.feasibility.q3": "Can the solution's behaviour be explained and traced for operators and auditors?",
|
|
6561
|
+
"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.",
|
|
6562
|
+
"concept.dim.governance.q1": "What is the worst-case impact of a failure or incorrect output of the digital system?",
|
|
6563
|
+
"scenarios.leverHelp.automationIntensity": "How much of human work the digital portfolio takes on (straight-through processing, end-to-end automation).",
|
|
6564
|
+
"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.",
|
|
6565
|
+
"op.staffing.detailHigh": "Recommend a central digital control function with named accountability per high-governance initiative.",
|
|
6566
|
+
"op.scalability.detailHigh": "The portfolio is positioned to scale; ensure platform and operations capacity matches demand.",
|
|
6567
|
+
"op.customer.detailHigh": "Direct customer exposure requires explicit transparency, accessibility and complaints-handling controls.",
|
|
6568
|
+
"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.",
|
|
6569
|
+
"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.",
|
|
6570
|
+
"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.",
|
|
6571
|
+
"dim.strategic.intro": "Score the contribution to strategic differentiation and operating-model change. Higher scores indicate the initiative reshapes processes, customer experience, or how data is used across the business \u2014 beyond incremental efficiency.",
|
|
6572
|
+
"dim.valueScale.band1.meaning": "Confined to a single team or process with limited financial signal.",
|
|
6573
|
+
"dim.feasibility.band2.meaning": "Feasible but requires investment in data, integration or operability.",
|
|
6574
|
+
"dim.feasibility.band3.meaning": "Data, tooling and operability are in place to execute with confidence.",
|
|
6575
|
+
"dim.governance.band2.label": "Supervised operation",
|
|
6576
|
+
"dim.governance.band3.meaning": "Active board-level oversight, audit trail and access controls required for the digital system.",
|
|
6577
|
+
"dim.strategic.band3.meaning": "Reshapes operating model, customer experience, or how data is used across the business.",
|
|
6578
|
+
"op.staffing.detailLow": "Embedded delivery teams with part-time operational-risk coverage are typically sufficient at this load.",
|
|
6579
|
+
"boardPack.col.g": "C",
|
|
6580
|
+
// ── Concept & Methodology page theming ────────────────────────────────
|
|
6581
|
+
"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.",
|
|
6582
|
+
"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.",
|
|
6583
|
+
"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.",
|
|
6584
|
+
"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.",
|
|
6585
|
+
"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.",
|
|
6586
|
+
"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.",
|
|
6587
|
+
"concept.pillar.portfolio.b1": "Multi-dimensional scoring: value, delivery feasibility, compliance & operational risk, strategic fit",
|
|
6588
|
+
"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.",
|
|
6589
|
+
"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.",
|
|
6590
|
+
"concept.features.f13.body": "Portfolio health on one screen \u2014 funded vs. parked, score distribution, transitions at risk, compliance hotspots and stale gate evidence. Designed for the weekly steering meeting and standing committee reviews.",
|
|
6591
|
+
"concept.features.f17.body": "A dedicated page with HHI scores per cut, a business-unit \xD7 digital-category cluster heatmap and drill-downs into over-exposed combinations \u2014 beyond the aggregate signal in the Compliance band.",
|
|
6592
|
+
"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.",
|
|
6593
|
+
"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.",
|
|
6594
|
+
"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.",
|
|
6595
|
+
"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.",
|
|
6596
|
+
"concept.features.f30.body": "A rules-based, severity-ranked list of the decisions the portfolio's own data calls for: stop/defer candidates, gate discipline, capacity and budget shortfalls, and concentration. Benefits-realisation rules flag production systems that under-deliver \u2014 or never measure \u2014 their promised value. Board-set guardrails add the red lines: admins define policy limits in Settings \u2014 a budget-concentration cap per business unit, a value floor for funded initiatives and a compliance-load ceiling \u2014 each showing a live pass/fail, and every breach lands here as a decide-now item.",
|
|
6597
|
+
"method.rules.r1.formula": "Value \xD7 Delivery Feasibility \u2192 Portfolio shape",
|
|
6598
|
+
"method.rules.r1.explanation": "Quadrant placement on the Value \xD7 Delivery-Feasibility map drives the go / scale / pilot / stop decision for each initiative.",
|
|
6599
|
+
"method.rules.r2.formula": "Compliance Band \u2192 Veto criterion",
|
|
6600
|
+
"method.rules.r2.explanation": "Any initiative above the restricted band (Compliance & Operational Risk \u2265 61) cannot scale until explicit board-level controls are in place; it is removed from the prioritised list regardless of value or feasibility.",
|
|
6601
|
+
"method.rules.r4.explanation": "If any portfolio cut (vendor, solution type, digital category, or business unit) exceeds HHI 0.25 on the normalised 0\u20131 scale, the portfolio steward must actively consider redistribution before approving new initiatives in the dominant segment.",
|
|
6602
|
+
"method.s1.dimensions.feasibility": "<strong>Delivery Feasibility & Operability</strong> \u2014 buildability, operability and transparency.",
|
|
6603
|
+
"method.s1.dimensions.governance": "<strong>Compliance & Operational Risk</strong> \u2014 regulatory, compliance and operational-risk load (deep dive in \xA7 3).",
|
|
6604
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Low sensitivity</strong>: routine controls suffice.",
|
|
6605
|
+
"method.s5.intro": "Each initiative is evaluated against the rules below and assigned to the <em>first</em> category whose rule matches, in the precedence order <strong>1 \u2192 2 \u2192 3 \u2192 4 \u2192 5 \u2192 6 \u2192 7</strong>. The list below is shown in the same order the Prioritisation page renders the groups, which is not the same as precedence \u2014 the precedence number is given on each rule. Initiatives that satisfy none of rules 1\u20136 fall into the fallback group <em>Tactical / Uncategorised</em> (precedence 7).",
|
|
6606
|
+
"method.s5.quickWins": "<strong>Quick Wins</strong> (precedence 1) \u2014 value \u2265 {v}, feasibility \u2265 {f}, and compliance & operational risk \u2264 {g}. High return, low risk, ready to execute.",
|
|
6607
|
+
"method.s5.strategicCore": "<strong>Strategic Platform Initiatives</strong> (precedence 2) \u2014 value \u2265 {v}, feasibility \u2265 {f}, and strategic \u2265 {s}. Core platform bets that are both valuable and strategically central.",
|
|
6608
|
+
"method.s5.operatingModel": "<strong>Operating Model Modernisation</strong> (precedence 6) \u2014 strategic \u2265 {s}, and the initiative did not already match Quick Wins, Strategic Platform Initiatives, High Compliance Risk, Multi-Year Programmes, or Continuous Improvement. Deep, business-model-level shifts that aren't better described by an earlier rule.",
|
|
6609
|
+
"method.s5.longTerm": "<strong>Multi-Year Programmes</strong> (precedence 4) \u2014 value \u2265 {v}, feasibility < {f}, and strategic \u2265 {s} (after High Compliance Risk has already claimed initiatives above its threshold). Strategically attractive but not yet feasible \u2014 keep on the horizon.",
|
|
6610
|
+
"method.s5.incremental": "<strong>Continuous Improvement</strong> (precedence 5) \u2014 value < {v}, feasibility \u2265 {f}, and strategic < {s}. Easy to ship but limited upside; useful as fillers.",
|
|
6611
|
+
"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.",
|
|
6612
|
+
"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.",
|
|
6613
|
+
"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.",
|
|
6614
|
+
"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.",
|
|
6615
|
+
"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 & 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.",
|
|
6616
|
+
"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.",
|
|
6617
|
+
"method.audit.scope.governance": "<strong>Status</strong> and the four <strong>evaluation dimension scores</strong> (Value, Delivery Feasibility, Compliance & Operational Risk, Strategic Impact) with their confidence.",
|
|
6618
|
+
"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.",
|
|
6619
|
+
"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:",
|
|
6620
|
+
"method.gates.enforced.scope": "Both checks feed the EU AI Act readiness score in addition to the hard block."
|
|
6621
|
+
};
|
|
6622
|
+
var DE_DIGITAL = {
|
|
6623
|
+
"brand.app": "Digital-Portfolio-Steuerung",
|
|
6624
|
+
"brand.mobile": "BICon \xB7 Digital-Portfolio-Steuerung",
|
|
6625
|
+
"brand.motto": "Digitale Investitionen vervielfachen den Nutzen, aber auch die Komplexit\xE4t.",
|
|
6626
|
+
"filters.aiCategory": "Digital-Kategorie",
|
|
6627
|
+
"evaluate.field.aiCategory": "Digital-Kategorie",
|
|
6628
|
+
"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.",
|
|
6629
|
+
"category.Generative AI": "Kundenkan\xE4le",
|
|
6630
|
+
"category.Predictive AI": "Daten & Analytik",
|
|
6631
|
+
"category.Automation": "Workflow-Automatisierung",
|
|
6632
|
+
"category.Agentic AI": "Plattformdienste",
|
|
6633
|
+
"category.Decision Support": "Reporting & BI",
|
|
6634
|
+
"category.AI Copilot": "Produktivit\xE4tswerkzeuge",
|
|
6635
|
+
"category.Knowledge Retrieval": "Inhalte & Wissen",
|
|
6636
|
+
"category.Process Automation": "Prozess-Digitalisierung",
|
|
6637
|
+
"category.Compliance / Risk AI": "RegTech & Risiko",
|
|
6638
|
+
"category.Customer Interaction AI": "Kundenerlebnis",
|
|
6639
|
+
"method.motto": "Digitale Investitionen vervielfachen den Nutzen, aber auch die Komplexit\xE4t.",
|
|
6640
|
+
"method.intro": "Diese Plattform wandelt qualitative Vorstandsurteile zu Ihrem Digital-Portfolio durch deterministische Abstraktionen in auditierbare strategische Signale um. Jede Zahl auf jedem Bildschirm l\xE4sst sich auf einen Schieberegler, ein Auswahlfeld oder eine unten ver\xF6ffentlichte Schwelle zur\xFCckf\xFChren.",
|
|
6641
|
+
"quadrant.Scale": "Ausrollen",
|
|
6642
|
+
"quadrant.Pilot": "Pilot",
|
|
6643
|
+
"quadrant.Stop": "Stopp",
|
|
6644
|
+
"quadrant.Assist": "St\xE4rken",
|
|
6645
|
+
"quadrant.Pilot.subtitle": "Technisch bereit, aber unklarer Wert",
|
|
6646
|
+
"quadrant.Scale.subtitle": "Hoher Impact \xB7 hohe Liefersicherheit",
|
|
6647
|
+
"quadrant.Stop.subtitle": "Geringer Wert \xB7 geringe Liefersicherheit",
|
|
6648
|
+
"quadrant.Assist.subtitle": "Wertvoll, aber noch nicht stabil genug zum Skalieren",
|
|
6649
|
+
"sub.dataAvailability": "Bereitschaft der Quellsysteme",
|
|
6650
|
+
"sub.dataQuality": "Daten- und Prozessqualit\xE4t",
|
|
6651
|
+
"sub.modelRobustness": "L\xF6sungsstabilit\xE4t",
|
|
6652
|
+
"sub.reproducibility": "Cloud-Reife",
|
|
6653
|
+
"sub.explainability": "Transparenz f\xFCr Nutzer",
|
|
6654
|
+
"sub.humanOversight": "Erforderliche manuelle Kontrollen",
|
|
6655
|
+
"sub.decisionCriticality": "Gesch\xE4ftskritikalit\xE4t",
|
|
6656
|
+
"sub.monitoringComplexity": "Monitoring-Komplexit\xE4t",
|
|
6657
|
+
"sub.cybersecurityExposure": "Cybersicherheits-Exposition",
|
|
6658
|
+
"sub.innovationCapability": "Aufbau digitaler F\xE4higkeiten",
|
|
6659
|
+
"subHelp.dataAvailability": "Verf\xFCgbarkeit der Quellsysteme, Schnittstellen und Stammdaten, von denen die L\xF6sung abh\xE4ngt.",
|
|
6660
|
+
"subHelp.dataQuality": "Sauberkeit, Vollst\xE4ndigkeit und Aktualit\xE4t der Daten im digitalen Workflow.",
|
|
6661
|
+
"dim.feasibility.band1.meaning": "L\xFCcken bei Daten, L\xF6sung oder Integration machen die Umsetzung unsicher.",
|
|
6662
|
+
"dim.governance.band2.meaning": "Standard-Risikokontrollen und Monitoring erforderlich.",
|
|
6663
|
+
"govBand.Low.desc": "0\u201320 \xB7 Geringe Sensitivit\xE4t \u2014 Routinekontrollen; keine Eskalation erforderlich",
|
|
6664
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 Geringe Sensitivit\xE4t \u2014 Routinekontrollen ausreichend",
|
|
6665
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 \xDCberwachter Betrieb \u2014 Standard-Risikokontrollen und Monitoring erforderlich",
|
|
6666
|
+
"govBand.High.desc": "61\u201380 \xB7 Eingeschr\xE4nkter Einsatz \u2014 aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen",
|
|
6667
|
+
"govBand.Critical.desc": "81\u2013100 \xB7 Hohe Governance-Sensitivit\xE4t \u2014 als wesentliches Risiko behandeln; Ringfencing und kontinuierliche Aufsicht",
|
|
6668
|
+
"govLabel.Controlled Automation": "Kontrollierter Betrieb",
|
|
6669
|
+
"govLabel.Human-in-the-Loop Required": "Beaufsichtigter Betrieb erforderlich",
|
|
6670
|
+
"govLabel.Restricted Deployment": "Eingeschr\xE4nkter Rollout",
|
|
6671
|
+
"subHelp.modelRobustness": "Stabilit\xE4t der L\xF6sung unter Last, bei Edge-Cases und unerwarteten Eingaben.",
|
|
6672
|
+
"subHelp.reproducibility": "Reife des zugrundeliegenden Cloud-/Plattform-Stacks \u2014 bew\xE4hrt und supportet (Managed Services, etablierte Regionen, SLAs) vs. experimentell oder selbstgehostet.",
|
|
6673
|
+
"subHelp.explainability": "Wie klar Verhalten und Ergebnisse des Systems Betreibern und Endnutzern erkl\xE4rbar sind.",
|
|
6674
|
+
"subHelp.regulatoryExposure": "Exposition gegen\xFCber Regulierung (DSGVO, DORA, branchenspezifische Regeln). H\xF6her = mehr Kontrollen erforderlich.",
|
|
6675
|
+
"subHelp.humanOversight": "Wie viel manuelle Pr\xFCfung, Freigabe oder Vier-Augen-Prinzip f\xFCr einen sicheren Betrieb n\xF6tig ist.",
|
|
6676
|
+
"subHelp.decisionCriticality": "Auswirkung einer falschen, versp\xE4teten oder ausgelassenen Entscheidung auf Betrieb, Finanzen oder Kunden.",
|
|
6677
|
+
"subHelp.monitoringComplexity": "Aufwand f\xFCr Monitoring von Verf\xFCgbarkeit, Fehlern, SLAs und Incidents im Produktivbetrieb.",
|
|
6678
|
+
"subHelp.cybersecurityExposure": "Eingef\xFChrte Angriffsfl\xE4che \u2014 Datenfl\xFCsse, Identit\xE4ten, Drittanbieter-APIs, Lieferkette.",
|
|
6679
|
+
"subHelp.innovationCapability": "Aufbau interner digitaler Muskeln \u2014 Talente, Plattformen, Tooling, wiederverwendbare Bausteine.",
|
|
6680
|
+
"scenarios.lever.adoptionSpeed": "Rollout-Tempo",
|
|
6681
|
+
"scenarios.lever.oversightIntensity": "Operative Aufsicht",
|
|
6682
|
+
"scenarios.leverHelp.adoptionSpeed": "Wie schnell Initiativen von Pilot \u2192 Rollout \u2192 Produktion in der Breite wandern.",
|
|
6683
|
+
"scenarios.leverHelp.oversightIntensity": "Operatives Monitoring, SRE-Praxis und Vier-Augen-Prinzip im Produktivbetrieb.",
|
|
6684
|
+
"prioritisation.cat.Quick Wins": "Quick Wins",
|
|
6685
|
+
"prioritisation.cat.Strategic Core Initiatives": "Strategische Plattform-Initiativen",
|
|
6686
|
+
"prioritisation.cat.High Governance Risk": "Hohes Compliance-Risiko",
|
|
6687
|
+
"prioritisation.cat.Long-Term Strategic Bets": "Mehrjahresprogramme",
|
|
6688
|
+
"prioritisation.cat.Incremental Optimisation": "Kontinuierliche Verbesserung",
|
|
6689
|
+
"prioritisation.cat.Operating Model Transformation": "Betriebsmodell-Modernisierung",
|
|
6690
|
+
"prioritisation.cat.Uncategorised / Tactical": "Taktisch / nicht kategorisiert",
|
|
6691
|
+
"prioritisation.subtitle": "Digitale Initiativen nach strategischem Archetyp gruppiert.",
|
|
6692
|
+
"prioritisation.highRisk": "Hohes Compliance-Risiko",
|
|
6693
|
+
"settings.prio.quickWins": "Quick Wins",
|
|
6694
|
+
"settings.prio.strategicCore": "Strategische Plattform-Initiativen",
|
|
6695
|
+
"settings.prio.highGovRisk": "Hohes Compliance-Risiko",
|
|
6696
|
+
"settings.prio.longTermBets": "Mehrjahresprogramme",
|
|
6697
|
+
"settings.prio.incremental": "Kontinuierliche Verbesserung",
|
|
6698
|
+
"settings.prio.operatingModel": "Betriebsmodell-Modernisierung",
|
|
6699
|
+
"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.",
|
|
6700
|
+
"inventory.col.scores": "Punkte (W/M/C/S)",
|
|
6701
|
+
"concept.eyebrow": "Digital-Portfolio-Steuerung",
|
|
6702
|
+
"concept.title": "Fragmentierte Digitalprojekte in ein gesteuertes Portfolio verwandeln.",
|
|
6703
|
+
"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.",
|
|
6704
|
+
"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.",
|
|
6705
|
+
"concept.problem.p2": "Lokale Umsetzung liefert echten Wert, f\xFChrt aber h\xE4ufig zu einem fragmentierten Portfolio aus Plattformen, Insell\xF6sungen und undokumentierten Integrationen. Die F\xFChrung muss dann \u2013 oft ohne vergleichbare Evidenz \u2013 entscheiden, welche Initiativen skaliert, welche im Pilot bleiben und welche zur\xFCckgebaut werden sollen.",
|
|
6706
|
+
"concept.dimensions.title": "Vier Dimensionen zur Bewertung digitaler Initiativen",
|
|
6707
|
+
"concept.dimensions.subtitle": "Jede Digitalinitiative wird entlang derselben vier Dimensionen bewertet, um auf konsistenter Basis vergleichbar zu sein.",
|
|
6708
|
+
"concept.dim.feasibility.title": "2. Liefer-Machbarkeit & Betreibbarkeit",
|
|
6709
|
+
"concept.dim.feasibility.q1": "Sind Quellsysteme und Stammdaten in ausreichender Qualit\xE4t verf\xFCgbar?",
|
|
6710
|
+
"concept.dim.governance.title": "3. Compliance & Betriebsrisiko",
|
|
6711
|
+
"concept.dim.governance.q2": "Wie hoch sind regulatorische und Cyber-Exposition?",
|
|
6712
|
+
"concept.dim.governance.q3": "Welche manuellen Kontrollen und Aufsicht sind erforderlich?",
|
|
6713
|
+
"concept.dim.strategic.body": "Verbessert die Initiative lediglich bestehende Prozesse oder tr\xE4gt sie zu neuen strategischen F\xE4higkeiten bei? Manche Digitalprojekte liefern Effizienzgewinne, andere ver\xE4ndern das Betriebsmodell, das Kundenerlebnis oder die Datennutzung im Unternehmen.",
|
|
6714
|
+
"concept.quadrants.subtitle": "Wert und Lieferzuversicht verorten eine Digitalinitiative in der Portfolio-Karte; Compliance und Betriebsrisiko definieren die Grenzen, innerhalb derer sie in der Praxis eingesetzt werden darf.",
|
|
6715
|
+
"concept.quad.Scale.body": "Hoher Wert, hohe Lieferzuversicht und beherrschbares Risiko \u2014 bereit f\xFCr den unternehmensweiten Roll-out.",
|
|
6716
|
+
"concept.quad.Pilot.body": "Vielversprechendes Potenzial, aber technische, Integrations- oder organisatorische Unsicherheit \u2014 vor dem Skalieren pilotieren.",
|
|
6717
|
+
"concept.quad.Assist.body": "Wertvoll, aber noch nicht stabil genug f\xFCr die Skalierung \u2014 zun\xE4chst Grundlagen st\xE4rken.",
|
|
6718
|
+
"concept.quad.Stop.body": "Begrenzter Wert oder \xFCberm\xE4\xDFiges Liefer- und Compliance-Risiko \u2014 zur\xFCckstellen oder beenden.",
|
|
6719
|
+
"concept.features.f1.body": "Jede Digitalinitiative mit Gesch\xE4ftseinheit, Owner, Tags, Lebenszyklus und 0\u2013100-Bewertung \xFCber alle vier Dimensionen erfassen.",
|
|
6720
|
+
"concept.features.f2.body": "Business-Impact \xD7 Lieferzuversicht als Blasendiagramm, eingef\xE4rbt nach Compliance-Band, mit Ausrollen / Pilot / St\xE4rken / Stopp-Quadrantenz\xE4hlung.",
|
|
6721
|
+
"dim.feasibility.title": "Liefer-Machbarkeit & Betreibbarkeit",
|
|
6722
|
+
"dim.governance.title": "Compliance & Betriebsrisiko",
|
|
6723
|
+
"portfolio.tooltip.governance": "Compliance & Betriebsrisiko",
|
|
6724
|
+
"portfolio.kpi.governance": "\xD8 Compliance- & Betriebsrisiko-Last",
|
|
6725
|
+
"portfolio.custom.metric.governance": "Compliance & Betriebsrisiko",
|
|
6726
|
+
"nav.governance": "Compliance & Betriebsrisiko",
|
|
6727
|
+
"filters.govBand": "Compliance & Betriebsrisiko",
|
|
6728
|
+
"inventory.col.governance": "Compliance-Band",
|
|
6729
|
+
"inventory.sort.governance": "Sortieren: Compliance & Betriebsrisiko",
|
|
6730
|
+
"inventory.sort.feasibility": "Sortieren: Liefer-Machbarkeit",
|
|
6731
|
+
"portfolio.axis.y": "Liefer-Machbarkeit & Betreibbarkeit",
|
|
6732
|
+
"portfolio.tooltip.feasibility": "Liefer-Machbarkeit",
|
|
6733
|
+
"op.input.feasibility": "Liefer-Machbarkeit",
|
|
6734
|
+
"evaluate.profile.radarFeasibility": "Lieferung",
|
|
6735
|
+
"evaluate.profile.radarGovernance": "Compliance",
|
|
6736
|
+
"inventory.title": "Digital-Initiativen-Inventar",
|
|
6737
|
+
"inventory.subtitle": "Verwalten und bewerten Sie Ihr Portfolio digitaler Initiativen.",
|
|
6738
|
+
"inventory.empty.title": "Digitale Investitionen vervielfachen den Nutzen, aber auch die Komplexit\xE4t.",
|
|
6739
|
+
"inventory.empty.subtitle": "F\xFCgen Sie zuerst Ihre digitalen Initiativen dem Portfolio hinzu, oder laden Sie den strategischen Demodatensatz, um die Bewertungsrahmen zu erkunden.",
|
|
6740
|
+
"memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive digitale Initiativen mit einem zugesagten Gesamtbudget von {budget}.",
|
|
6741
|
+
"governance.subtitle": "F\xFChrungsaufsicht \xFCber Lieferrisiken, Compliance-Exposition und operative Abh\xE4ngigkeiten im Digital-Portfolio.",
|
|
6742
|
+
"op.subtitle": "Organisatorische Implikationen des aktuellen Digital-Portfolios \xFCber Staffing, Compliance, Skalierbarkeit, Kundeninteraktion und Betriebsmodell-Entwicklung.",
|
|
6743
|
+
"concentration.subtitle": "Systemische Exposition \xFCber Anbieterstrategie, Digital-Kategorie, Gesch\xE4ftseinheit und Compliance-Band erkennen. HHI-Schwellen: <1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert.",
|
|
6744
|
+
"concentration.hhi.category": "Digital-Kategorie",
|
|
6745
|
+
"concentration.heatmap.title": "Cluster-Heatmap \u2014 Gesch\xE4ftseinheit \xD7 Digital-Kategorie",
|
|
6746
|
+
"concentration.heatmap.subtitle": "Zeigt Cluster, in denen eine einzelne Gesch\xE4ftseinheit Exposition in einer Digital-Kategorie aufbaut.",
|
|
6747
|
+
"concentration.obs.category": "Digital-Kategorie-Konzentration. Initiativen konzentrieren sich auf wenige Digital-Kategorien, breitere strategische F\xE4higkeiten bleiben unterentwickelt.",
|
|
6748
|
+
"concentration.cat.title": "Digital-Kategorie",
|
|
6749
|
+
"ie.boardPack.coverTitlePlaceholder": "Digital-Portfolio \u2014 Vorstandssitzung Q3 2026",
|
|
6750
|
+
"boardPack.heatmap.subtitle": "Gesch\xE4ftseinheit \xD7 Digital-Kategorie \u2014 Cluster, in denen eine GE eine digitale F\xE4higkeit b\xFCndelt.",
|
|
6751
|
+
"portfolio.custom.metric.feasibility": "Liefer-Machbarkeit",
|
|
6752
|
+
"subHelp.operationalLeverage": "Wie stark die digitale L\xF6sung den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6\xDFere operative Reichweite pro FTE.",
|
|
6753
|
+
"op.staffing.level3": "Dedizierte Digital-Kontrollfunktion",
|
|
6754
|
+
"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.",
|
|
6755
|
+
"scenarios.preset.transformational.desc": "Betriebsmodell um Digital neu gestalten; hohe Reife und diversifizierte Anbieterbasis.",
|
|
6756
|
+
"memo.heading": "Vorstandsmemo \u2014 Digital-Transformations-Portfolio",
|
|
6757
|
+
"memo.concentration.category": "Digital-Kategoriekonzentration: {name} stellt {count} von {total} Initiativen ({pct}%).",
|
|
6758
|
+
"memo.opmodel.talent": "Talent & F\xE4higkeiten: ein Portfolio dieser Zusammensetzung erfordert typischerweise eine zentrale Digital-Kontrollfunktion (Lieferung, Integration, Betrieb, Datengovernance), proportional zur Aufsichtslast.",
|
|
6759
|
+
"method.s1.p1": "Jede Initiative wird auf vier strategischen Dimensionen bewertet: <strong>Wert & Skalierung</strong>, <strong>Liefer-Machbarkeit & Betreibbarkeit</strong>, <strong>Compliance & Betriebsrisiko</strong> und <strong>Strategischer Impact</strong>. Jede Dimension besteht aus 7\u20138 Unterkomponenten, je 0\u2013100.",
|
|
6760
|
+
"method.s2.title": "2. Compliance- & Betriebsrisiko-Klassifikation",
|
|
6761
|
+
"method.s2.subtitle": "Compliance- & Betriebsrisiko-B\xE4nder und was sie f\xFCr die Kontroll-Last bedeuten.",
|
|
6762
|
+
"method.s2.intro": "Initiativen werden auf Basis des Compliance- & Betriebsrisiko-Werts klassifiziert:",
|
|
6763
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Standard-Kontrollen</strong>: Standardmonitoring; regelm\xE4\xDFige \xDCberpr\xFCfung.",
|
|
6764
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Erweiterte Betriebskontrollen</strong>: dokumentierte Verfahren, Vier-Augen-Prinzip, aktives Monitoring.",
|
|
6765
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Eingeschr\xE4nkter Rollout</strong>: aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen.",
|
|
6766
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Vorstandspatenschaft erforderlich</strong>: als wesentliches Risiko behandeln; nur mit Ringfencing einsetzen.",
|
|
6767
|
+
"method.s4.subtitle": "Wie jede Initiative auf der Business-Impact-\xD7-Liefer-Machbarkeit-Ebene positioniert wird.",
|
|
6768
|
+
"method.s4.intro": "Die x-Achse (<strong>Business Impact</strong>) ist der gleichgewichtete Mittelwert aus Wert & Skalierung und strategischem Impact: <code>BusinessImpact = (Wert + Strategisch) / 2</code>. Die y-Achse ist Liefer-Machbarkeit & Betreibbarkeit. Die Quadranten werden deterministisch bei 50 auf beiden Achsen geteilt:",
|
|
6769
|
+
"method.s4.scale": "<strong>Ausrollen</strong> \u2014 Business Impact \u2265 50 und Liefer-Machbarkeit \u2265 50. Hoher Impact, verl\xE4sslich lieferbar \u2014 bereit f\xFCr unternehmensweiten Roll-out.",
|
|
6770
|
+
"method.s4.assist": "<strong>St\xE4rken</strong> \u2014 Business Impact \u2265 50 und Liefer-Machbarkeit < 50. Wertvoll, aber Lieferung noch nicht robust \u2014 Betreibbarkeit ausbauen, bevor skaliert wird.",
|
|
6771
|
+
"method.s4.pilot": "<strong>Pilot</strong> \u2014 Business Impact < 50 und Liefer-Machbarkeit \u2265 50. Technisch lieferbar, aber unklarer Business Case \u2014 vor der Skalierung pilotieren.",
|
|
6772
|
+
"method.s4.stop": "<strong>Stopp</strong> \u2014 Business Impact < 50 und Liefer-Machbarkeit < 50. Geringer Impact und geringe Machbarkeit \u2014 zur\xFCckstellen oder beenden.",
|
|
6773
|
+
"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.",
|
|
6774
|
+
"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.",
|
|
6775
|
+
"method.s8.b3": "Es werden keine externen regulatorischen, Betriebsrisiko- oder Drittparteien-Signale ber\xFCcksichtigt.",
|
|
6776
|
+
"memo.assumptions.signals": "Es wurden keine externen regulatorischen, Betriebsrisiko- oder Drittparteien-Signale in diese Scores einbezogen.",
|
|
6777
|
+
"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>.',
|
|
6778
|
+
"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.",
|
|
6779
|
+
"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.",
|
|
6780
|
+
"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.",
|
|
6781
|
+
"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.",
|
|
6782
|
+
"concept.dim.feasibility.q2": "Sind die Ergebnisse der L\xF6sung stabil und \xFCber Umgebungen hinweg reproduzierbar?",
|
|
6783
|
+
"concept.dim.feasibility.q3": "L\xE4sst sich das Verhalten der L\xF6sung f\xFCr Betreiber und Auditoren erkl\xE4ren und nachvollziehen?",
|
|
6784
|
+
"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.",
|
|
6785
|
+
"concept.dim.governance.q1": "Wie gro\xDF ist der Worst-Case-Effekt eines Ausfalls oder einer fehlerhaften Ausgabe des digitalen Systems?",
|
|
6786
|
+
"scenarios.leverHelp.automationIntensity": "Wieviel menschliche Arbeit das Digital-Portfolio \xFCbernimmt (Dunkelverarbeitung, End-to-End-Automatisierung).",
|
|
6787
|
+
"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.",
|
|
6788
|
+
"op.staffing.detailHigh": "Empfehlung: zentrale Digital-Kontrollfunktion mit benannter Verantwortung pro Initiative mit hoher Governance.",
|
|
6789
|
+
"op.scalability.detailHigh": "Das Portfolio ist auf Skalierung ausgelegt; Plattform- und Betriebskapazit\xE4t muss zur Nachfrage passen.",
|
|
6790
|
+
"op.customer.detailHigh": "Direkter Kundenkontakt erfordert explizite Transparenz-, Barrierefreiheits- und Beschwerdemanagement-Kontrollen.",
|
|
6791
|
+
"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.",
|
|
6792
|
+
"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.",
|
|
6793
|
+
"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.",
|
|
6794
|
+
"dim.strategic.intro": "Bewerten Sie den Beitrag zu strategischer Differenzierung und Ver\xE4nderung des Betriebsmodells. H\xF6here Werte bedeuten, dass die Initiative Prozesse, Kundenerlebnis oder die Datennutzung im Unternehmen neu pr\xE4gt \u2014 \xFCber inkrementelle Effizienz hinaus.",
|
|
6795
|
+
"dim.valueScale.band1.meaning": "Auf ein einzelnes Team oder einen Prozess begrenzt; geringer finanzieller Effekt.",
|
|
6796
|
+
"dim.feasibility.band2.meaning": "Machbar, erfordert aber Investitionen in Daten, Integration oder Betreibbarkeit.",
|
|
6797
|
+
"dim.feasibility.band3.meaning": "Daten, Tools und Betreibbarkeit sind vorhanden, um mit Vertrauen umzusetzen.",
|
|
6798
|
+
"dim.governance.band2.label": "\xDCberwachter Betrieb",
|
|
6799
|
+
"dim.governance.band3.meaning": "Aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen f\xFCr das digitale System erforderlich.",
|
|
6800
|
+
"dim.strategic.band3.meaning": "Ver\xE4ndert Betriebsmodell, Kundenerlebnis oder die Datennutzung im Unternehmen.",
|
|
6801
|
+
"op.staffing.detailLow": "Eingebettete Teams mit teilweiser Betriebsrisiko-Abdeckung reichen bei dieser Last meist aus.",
|
|
6802
|
+
"boardPack.col.g": "C",
|
|
6803
|
+
// ── Concept & Methodology page theming ────────────────────────────────
|
|
6804
|
+
"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.",
|
|
6805
|
+
"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.",
|
|
6806
|
+
"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.",
|
|
6807
|
+
"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.",
|
|
6808
|
+
"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.",
|
|
6809
|
+
"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.",
|
|
6810
|
+
"concept.pillar.portfolio.b1": "Mehrdimensionales Scoring: Wert, Liefer-Machbarkeit, Compliance & Betriebsrisiko, strategischer Fit",
|
|
6811
|
+
"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.",
|
|
6812
|
+
"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.",
|
|
6813
|
+
"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.",
|
|
6814
|
+
"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.",
|
|
6815
|
+
"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.",
|
|
6816
|
+
"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.",
|
|
6817
|
+
"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.",
|
|
6818
|
+
"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.",
|
|
6819
|
+
"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.",
|
|
6820
|
+
"method.rules.r1.formula": "Nutzen \xD7 Liefer-Machbarkeit \u2192 Portfolio-Gestalt",
|
|
6821
|
+
"method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Liefer-Machbarkeits-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
|
|
6822
|
+
"method.rules.r2.formula": "Compliance-Band \u2192 Veto-Kriterium",
|
|
6823
|
+
"method.rules.r2.explanation": "Jede Initiative oberhalb des Restricted-Bands (Compliance & Betriebsrisiko \u2265 61) darf nicht skaliert werden, solange keine expliziten Vorstandskontrollen vorhanden sind; sie wird unabh\xE4ngig von Nutzen oder Machbarkeit von der Priorisierungsliste entfernt.",
|
|
6824
|
+
"method.rules.r4.explanation": "\xDCbersteigt ein Portfolio-Schnitt (Anbieter, L\xF6sungstyp, Digital-Kategorie oder Gesch\xE4ftseinheit) den HHI 0,25 auf der normierten 0\u20131-Skala, muss der Portfolio-Steward eine Umverteilung aktiv pr\xFCfen, bevor neue Initiativen im dominanten Segment freigegeben werden.",
|
|
6825
|
+
"method.s1.dimensions.feasibility": "<strong>Liefer-Machbarkeit & Betreibbarkeit</strong> \u2014 Umsetzbarkeit, Betreibbarkeit und Transparenz.",
|
|
6826
|
+
"method.s1.dimensions.governance": "<strong>Compliance & Betriebsrisiko</strong> \u2014 regulatorische, Compliance- und Betriebsrisiko-Last (Vertiefung in \xA7 3).",
|
|
6827
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Geringe Sensitivit\xE4t</strong>: Routinekontrollen gen\xFCgen.",
|
|
6828
|
+
"method.s5.intro": "Jede Initiative wird gegen die folgenden Regeln gepr\xFCft und der <em>ersten</em> Kategorie zugeordnet, deren Regel zutrifft \u2014 in der Pr\xE4zedenzreihenfolge <strong>1 \u2192 2 \u2192 3 \u2192 4 \u2192 5 \u2192 6 \u2192 7</strong>. Die Liste unten erscheint in derselben Reihenfolge, in der die Priorisierungsseite die Gruppen darstellt; das entspricht nicht der Pr\xE4zedenz \u2014 die Pr\xE4zedenznummer steht jeweils an der Regel. Initiativen, die keine der Regeln 1\u20136 erf\xFCllen, landen in der Auffangkategorie <em>Taktisch / nicht kategorisiert</em> (Pr\xE4zedenz 7).",
|
|
6829
|
+
"method.s5.quickWins": "<strong>Quick Wins</strong> (Pr\xE4zedenz 1) \u2014 Wert \u2265 {v}, Machbarkeit \u2265 {f} und Compliance & Betriebsrisiko \u2264 {g}. Hoher Nutzen, geringes Risiko, umsetzungsreif.",
|
|
6830
|
+
"method.s5.strategicCore": "<strong>Strategische Plattform-Initiativen</strong> (Pr\xE4zedenz 2) \u2014 Wert \u2265 {v}, Machbarkeit \u2265 {f} und Strategie \u2265 {s}. Kern-Plattform-Wetten, die zugleich wertvoll und strategisch zentral sind.",
|
|
6831
|
+
"method.s5.operatingModel": "<strong>Betriebsmodell-Modernisierung</strong> (Pr\xE4zedenz 6) \u2014 Strategie \u2265 {s}, sofern die Initiative nicht bereits unter Quick Wins, Strategische Plattform-Initiativen, Hohes Compliance-Risiko, Mehrjahresprogramme oder Kontinuierliche Verbesserung gefallen ist. Tiefgreifende Ver\xE4nderungen auf Gesch\xE4ftsmodell-Ebene, die nicht durch eine fr\xFChere Regel besser beschrieben werden.",
|
|
6832
|
+
"method.s5.longTerm": "<strong>Mehrjahresprogramme</strong> (Pr\xE4zedenz 4) \u2014 Wert \u2265 {v}, Machbarkeit < {f} und Strategie \u2265 {s} (nachdem Hohes Compliance-Risiko Initiativen oberhalb seines Schwellenwerts bereits beansprucht hat). Strategisch attraktiv, aber noch nicht machbar \u2014 am Horizont halten.",
|
|
6833
|
+
"method.s5.incremental": "<strong>Kontinuierliche Verbesserung</strong> (Pr\xE4zedenz 5) \u2014 Wert < {v}, Machbarkeit \u2265 {f} und Strategie < {s}. Leicht umsetzbar, aber begrenzter Nutzen; geeignet als F\xFCllinitiativen.",
|
|
6834
|
+
"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.",
|
|
6835
|
+
"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.",
|
|
6836
|
+
"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.",
|
|
6837
|
+
"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.",
|
|
6838
|
+
"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-&-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.",
|
|
6839
|
+
"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.",
|
|
6840
|
+
"method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wert, Liefer-Machbarkeit, Compliance & Betriebsrisiko, Strategischer Impact) mit ihrer Konfidenz.",
|
|
6841
|
+
"method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Anbieterstrategie, L\xF6sungstyp, Digital-Kategorie und Tags.",
|
|
6842
|
+
"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:",
|
|
6843
|
+
"method.gates.enforced.scope": "Beide Pr\xFCfungen fliessen zus\xE4tzlich zum harten Block in den EU-AI-Act-Reifegrad ein."
|
|
6844
|
+
};
|
|
6845
|
+
var EN_INNOVATION = {
|
|
6846
|
+
"brand.app": "Innovation Portfolio Steering",
|
|
6847
|
+
"brand.mobile": "BICon \xB7 Innovation Portfolio Steering",
|
|
6848
|
+
"brand.motto": "Innovation multiplies opportunity, but it can also multiply uncertainty.",
|
|
6849
|
+
"filters.aiCategory": "Innovation category",
|
|
6850
|
+
"evaluate.field.aiCategory": "Innovation Category",
|
|
6851
|
+
"evaluate.fieldHelp.aiCategory": "Drives the innovation-category concentration metric (Concentration page) and the category-mix breakdown in the Board Memo. Also used to filter the inventory.",
|
|
6852
|
+
"category.Generative AI": "New Products",
|
|
6853
|
+
"category.Predictive AI": "Data Ventures",
|
|
6854
|
+
"category.Automation": "Operational Innovation",
|
|
6855
|
+
"category.Agentic AI": "Emerging Technology",
|
|
6856
|
+
"category.Decision Support": "Strategic Foresight",
|
|
6857
|
+
"category.AI Copilot": "Workforce Innovation",
|
|
6858
|
+
"category.Knowledge Retrieval": "Research & Insights",
|
|
6859
|
+
"category.Process Automation": "Service Design",
|
|
6860
|
+
"category.Compliance / Risk AI": "Sustainable Innovation",
|
|
6861
|
+
"category.Customer Interaction AI": "Customer Innovation",
|
|
6862
|
+
"method.motto": "Innovation multiplies opportunity, but it can also multiply uncertainty.",
|
|
6863
|
+
"method.intro": "This platform applies deterministic abstractions to convert qualitative board-level judgement about your innovation portfolio into auditable strategic signals. Every number on every screen can be traced back to a slider, a select, or a published threshold below.",
|
|
6864
|
+
"quadrant.Scale": "Scale",
|
|
6865
|
+
"quadrant.Pilot": "Explore",
|
|
6866
|
+
"quadrant.Stop": "Stop",
|
|
6867
|
+
"quadrant.Assist": "Incubate",
|
|
6868
|
+
"quadrant.Pilot.subtitle": "Easy to test, value still unclear",
|
|
6869
|
+
"quadrant.Scale.subtitle": "Validated \xB7 ready to industrialise",
|
|
6870
|
+
"quadrant.Stop.subtitle": "Low value \xB7 thin evidence",
|
|
6871
|
+
"quadrant.Assist.subtitle": "Promising value, evidence still thin",
|
|
6872
|
+
"sub.dataAvailability": "Evidence Base",
|
|
6873
|
+
"sub.dataQuality": "Quality of Evidence",
|
|
6874
|
+
"sub.modelRobustness": "Concept Robustness",
|
|
6875
|
+
"sub.reproducibility": "Replicability of Results",
|
|
6876
|
+
"sub.explainability": "Clarity of Hypothesis",
|
|
6877
|
+
"sub.regulatoryExposure": "Regulatory & Market Risk",
|
|
6878
|
+
"sub.humanOversight": "Stewardship Required",
|
|
6879
|
+
"sub.decisionCriticality": "Decision Stakes",
|
|
6880
|
+
"sub.monitoringComplexity": "Learning-Loop Complexity",
|
|
6881
|
+
"sub.cybersecurityExposure": "Security & IP Exposure",
|
|
6882
|
+
"sub.innovationCapability": "Innovation Muscle Build-up",
|
|
6883
|
+
"subHelp.dataAvailability": "How much evidence (data, prior art, prototypes) already exists to support the idea.",
|
|
6884
|
+
"subHelp.dataQuality": "Strength of that evidence \u2014 rigour, sample size, independence, recency.",
|
|
6885
|
+
"dim.feasibility.band1.meaning": "Concept, capability or partner gaps make delivery uncertain.",
|
|
6886
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Gated trial \u2014 standard stage-gate controls",
|
|
6887
|
+
"govLabel.Controlled Automation": "Monitored Trial",
|
|
6888
|
+
"govLabel.Human-in-the-Loop Required": "Active Stewardship Required",
|
|
6889
|
+
"govLabel.Restricted Deployment": "Bounded Pilot Only",
|
|
6890
|
+
"govLabel.High Governance Sensitivity": "Board-Level Sponsorship Required",
|
|
6891
|
+
"subHelp.modelRobustness": "How well the core concept holds up under stress, edge cases and pessimistic assumptions.",
|
|
6892
|
+
"subHelp.reproducibility": "Likelihood that observed results would repeat under independent conditions.",
|
|
6893
|
+
"subHelp.explainability": "How clearly the hypothesis and value proposition can be articulated to sponsors and reviewers.",
|
|
6894
|
+
"subHelp.regulatoryExposure": "Combined regulatory, market-acceptance and ethics risk the innovation must navigate.",
|
|
6895
|
+
"subHelp.humanOversight": "How much active stewardship, coaching and review the team needs to progress safely.",
|
|
6896
|
+
"subHelp.decisionCriticality": "What is at stake if the experiment fails \u2014 brand, capital, strategic option, partnerships.",
|
|
6897
|
+
"subHelp.monitoringComplexity": "Effort to run the learning loop \u2014 instrumentation, metrics, stakeholder reviews.",
|
|
6898
|
+
"subHelp.cybersecurityExposure": "Exposure of confidential data, IP and partner relationships introduced by the work.",
|
|
6899
|
+
"subHelp.innovationCapability": "Strengthening of innovation muscle \u2014 talent, methods, partnerships, reusable IP.",
|
|
6900
|
+
"scenarios.lever.adoptionSpeed": "Experiment Velocity",
|
|
6901
|
+
"scenarios.lever.governanceStrictness": "Stage-Gate Rigour",
|
|
6902
|
+
"scenarios.lever.organisationalReadiness": "Team Readiness",
|
|
6903
|
+
"scenarios.lever.oversightIntensity": "Coaching Intensity",
|
|
6904
|
+
"scenarios.leverHelp.adoptionSpeed": "How quickly ideas move through Explore \u2192 Validate \u2192 Scale.",
|
|
6905
|
+
"scenarios.leverHelp.governanceStrictness": "How strict the stage-gate reviews, evidence bars and kill criteria are.",
|
|
6906
|
+
"scenarios.leverHelp.organisationalReadiness": "Innovation skills, sponsor support and absorption capacity of the operating business.",
|
|
6907
|
+
"scenarios.leverHelp.oversightIntensity": "Active coaching, mentoring and stakeholder review around innovation teams.",
|
|
6908
|
+
"prioritisation.cat.Quick Wins": "Easy Experiments",
|
|
6909
|
+
"prioritisation.cat.Strategic Core Initiatives": "Scale Candidates",
|
|
6910
|
+
"prioritisation.cat.High Governance Risk": "High-Uncertainty Bets",
|
|
6911
|
+
"prioritisation.cat.Long-Term Strategic Bets": "Long Horizons (H3)",
|
|
6912
|
+
"prioritisation.cat.Incremental Optimisation": "Incremental Refinements",
|
|
6913
|
+
"prioritisation.cat.Operating Model Transformation": "New Operating Models",
|
|
6914
|
+
"prioritisation.cat.Uncategorised / Tactical": "Unsorted Experiments",
|
|
6915
|
+
"prioritisation.subtitle": "Innovation initiatives grouped by horizon and uncertainty profile.",
|
|
6916
|
+
"prioritisation.highRisk": "High Uncertainty",
|
|
6917
|
+
"settings.prio.quickWins": "Easy Experiments",
|
|
6918
|
+
"settings.prio.strategicCore": "Scale Candidates",
|
|
6919
|
+
"settings.prio.highGovRisk": "High-Uncertainty Bets",
|
|
6920
|
+
"settings.prio.longTermBets": "Long Horizons (H3)",
|
|
6921
|
+
"settings.prio.incremental": "Incremental Refinements",
|
|
6922
|
+
"settings.prio.operatingModel": "New Operating Models",
|
|
6923
|
+
"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.",
|
|
6924
|
+
"inventory.col.scores": "Scores (V/E/U/S)",
|
|
6925
|
+
"concept.eyebrow": "Innovation Portfolio Steering",
|
|
6926
|
+
"concept.title": "Turn scattered experiments into a managed innovation portfolio.",
|
|
6927
|
+
"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.",
|
|
6928
|
+
"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.",
|
|
6929
|
+
"concept.problem.p2": "Experimentation generates valuable learning, but frequently leads to fragmented portfolios of pilots, prototypes and one-off experiments \u2014 leaving leadership to decide, often without comparable evidence, which initiatives should be scaled, which should keep incubating, and which should be killed to free up capacity.",
|
|
6930
|
+
"concept.dimensions.title": "Four dimensions for evaluating innovation initiatives",
|
|
6931
|
+
"concept.dimensions.subtitle": "Each initiative is scored along the same four dimensions so it can be compared on a consistent basis across horizons.",
|
|
6932
|
+
"concept.dim.feasibility.title": "2. Validation & Evidence",
|
|
6933
|
+
"concept.dim.governance.title": "3. Governance & Uncertainty",
|
|
6934
|
+
"concept.dim.governance.q2": "What is the degree of regulatory and market uncertainty?",
|
|
6935
|
+
"concept.dim.governance.q3": "What stage-gate oversight and stop-loss controls are required?",
|
|
6936
|
+
"concept.dim.strategic.body": "Whether the initiative merely refines existing offerings or contributes to new strategic capabilities. Some innovations deliver incremental gains; others open new operating models, new revenue streams or new positioning.",
|
|
6937
|
+
"concept.quadrants.subtitle": "Value and validation position an innovation in the portfolio map; governance and uncertainty define how far it can be pushed before more evidence is required.",
|
|
6938
|
+
"concept.quad.Scale.body": "Validated value, ready to industrialise \u2014 move from innovation portfolio into the operating business.",
|
|
6939
|
+
"concept.quad.Pilot.body": "Easy to test, value still unclear \u2014 run cheap experiments to find signal.",
|
|
6940
|
+
"concept.quad.Assist.body": "Promising value, evidence still thin \u2014 incubate and de-risk before scaling.",
|
|
6941
|
+
"concept.quad.Stop.body": "Low value \xB7 thin evidence \u2014 kill to free up capacity.",
|
|
6942
|
+
"concept.features.f1.body": "Capture each innovation initiative with business unit, sponsor, tags, lifecycle status and a 0\u2013100 score on all four dimensions.",
|
|
6943
|
+
"concept.features.f2.body": "Value \xD7 Validation bubble chart with uncertainty-band colouring and Scale / Explore / Incubate / Kill quadrant counts.",
|
|
6944
|
+
"dim.valueScale.title": "Value Potential",
|
|
6945
|
+
"dim.feasibility.title": "Validation & Evidence",
|
|
6946
|
+
"dim.governance.title": "Governance & Uncertainty",
|
|
6947
|
+
"portfolio.tooltip.governance": "Governance & Uncertainty",
|
|
6948
|
+
"portfolio.kpi.governance": "Avg. governance & uncertainty load",
|
|
6949
|
+
"portfolio.custom.metric.governance": "Governance & Uncertainty",
|
|
6950
|
+
"nav.governance": "Governance & Uncertainty",
|
|
6951
|
+
"filters.govBand": "Governance & Uncertainty",
|
|
6952
|
+
"inventory.col.governance": "Uncertainty Band",
|
|
6953
|
+
"inventory.sort.governance": "Sort: Governance & uncertainty",
|
|
6954
|
+
"inventory.sort.value": "Sort: Value potential",
|
|
6955
|
+
"inventory.sort.feasibility": "Sort: Validation & evidence",
|
|
6956
|
+
"portfolio.axis.x": "Value Potential & Strategic Impact",
|
|
6957
|
+
"portfolio.axis.y": "Validation & Evidence",
|
|
6958
|
+
"portfolio.tooltip.valueScale": "Value Potential",
|
|
6959
|
+
"portfolio.tooltip.feasibility": "Validation",
|
|
6960
|
+
"op.input.value": "Value Potential",
|
|
6961
|
+
"op.input.feasibility": "Validation",
|
|
6962
|
+
"evaluate.profile.radarValue": "Potential",
|
|
6963
|
+
"evaluate.profile.radarFeasibility": "Validation",
|
|
6964
|
+
"concept.dim.value.title": "1. Value Potential",
|
|
6965
|
+
"inventory.title": "Innovation Initiative Inventory",
|
|
6966
|
+
"inventory.subtitle": "Manage and evaluate your portfolio of innovation initiatives.",
|
|
6967
|
+
"inventory.empty.title": "Innovation multiplies opportunity, but it can also multiply uncertainty.",
|
|
6968
|
+
"inventory.empty.subtitle": "Begin by adding your innovation initiatives to the portfolio, or load the strategic demo dataset to explore the evaluation frameworks.",
|
|
6969
|
+
"memo.summary.portfolio": "The enterprise currently runs {count} active innovation initiatives with an aggregate committed budget of {budget}.",
|
|
6970
|
+
"governance.subtitle": "Executive oversight of innovation bets, stage-gate posture and uncertainty exposure.",
|
|
6971
|
+
"op.subtitle": "Organisational implications of the current innovation portfolio across staffing, governance, scalability, partnerships and operating-model evolution.",
|
|
6972
|
+
"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.",
|
|
6973
|
+
"concentration.hhi.category": "Innovation category",
|
|
6974
|
+
"concentration.heatmap.title": "Cluster heatmap \u2014 business unit \xD7 innovation category",
|
|
6975
|
+
"concentration.heatmap.subtitle": "Identifies clusters where a single business unit accumulates bets in one innovation category.",
|
|
6976
|
+
"concentration.obs.category": "Innovation category concentration. Bets are skewed towards a small number of innovation categories, leaving broader strategic options underdeveloped.",
|
|
6977
|
+
"concentration.cat.title": "Innovation category",
|
|
6978
|
+
"ie.boardPack.coverTitlePlaceholder": "Innovation Portfolio \u2014 Q3 2026 board review",
|
|
6979
|
+
"boardPack.heatmap.subtitle": "Business unit \xD7 innovation category \u2014 clusters where one BU stacks one innovation theme.",
|
|
6980
|
+
"portfolio.custom.metric.valueScale": "Value Potential",
|
|
6981
|
+
"portfolio.custom.metric.feasibility": "Validation",
|
|
6982
|
+
"subHelp.operationalLeverage": "How much the innovation multiplies output per unit of human work. Higher = broader operational reach per FTE.",
|
|
6983
|
+
"op.staffing.level3": "Dedicated innovation control function",
|
|
6984
|
+
"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.",
|
|
6985
|
+
"scenarios.preset.transformational.desc": "Reshape the operating model around innovation; high readiness and diversified partner base.",
|
|
6986
|
+
"memo.heading": "Board Memorandum \u2014 Innovation Portfolio",
|
|
6987
|
+
"memo.concentration.category": "Innovation category concentration: {name} accounts for {count} of {total} initiatives ({pct}%).",
|
|
6988
|
+
"memo.opmodel.talent": "Talent & capability: a portfolio of this composition typically demands a centralised innovation control function (stage-gate review, sponsor governance, scouting and incubation) sized proportionately to the oversight load above.",
|
|
6989
|
+
"method.s1.p1": "Each initiative is scored on four strategic dimensions: <strong>Value Potential</strong>, <strong>Validation & Evidence</strong>, <strong>Governance & Uncertainty</strong>, and <strong>Strategic Impact</strong>. Every dimension contains 7\u20138 subcomponents scored from 0 to 100.",
|
|
6990
|
+
"method.s2.title": "2. Governance & Uncertainty Classification",
|
|
6991
|
+
"method.s2.subtitle": "Uncertainty bands and what they imply for stage-gate posture and stop-loss controls.",
|
|
6992
|
+
"method.s2.intro": "Initiatives are classified into bands based on the Governance & Uncertainty score:",
|
|
6993
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Low uncertainty</strong>: routine stage-gate checkpoints; no escalation required.",
|
|
6994
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Gated trial</strong>: standard stage-gate controls and progress monitoring.",
|
|
6995
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Tight stage-gating</strong>: explicit stop-loss thresholds and capital limits.",
|
|
6996
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Board sponsorship required</strong>: active board-level oversight, named sponsor and explicit kill criteria.",
|
|
6997
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 High strategic exposure</strong>: treat as material strategic risk; pursue only with explicit ringfencing and continuous oversight.",
|
|
6998
|
+
"method.s4.subtitle": "How each initiative is positioned on the Business Impact \xD7 Validation plane.",
|
|
6999
|
+
"method.s4.intro": "The x-axis (<strong>Business Impact</strong>) is the equal-weighted average of Value Potential and Strategic Impact: <code>BusinessImpact = (Value + Strategic) / 2</code>. The y-axis is Validation & Evidence. Quadrants are split deterministically at 50 on both axes:",
|
|
7000
|
+
"method.s4.scale": "<strong>Scale</strong> \u2014 Business Impact \u2265 50 and Validation \u2265 50. High impact, strong evidence \u2014 ready to scale.",
|
|
7001
|
+
"method.s4.assist": "<strong>Incubate</strong> \u2014 Business Impact \u2265 50 and Validation < 50. Promising but unproven \u2014 keep in incubation while gathering evidence.",
|
|
7002
|
+
"method.s4.pilot": "<strong>Explore</strong> \u2014 Business Impact < 50 and Validation \u2265 50. Validated but unclear strategic payoff \u2014 explore adjacent applications before committing.",
|
|
7003
|
+
"method.s4.stop": "<strong>Kill</strong> \u2014 Business Impact < 50 and Validation < 50. Low impact and weak evidence \u2014 kill or recycle the learnings.",
|
|
7004
|
+
"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.",
|
|
7005
|
+
"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.",
|
|
7006
|
+
"method.s8.b3": "No external regulatory, peer-review or third-party assurance signals are incorporated.",
|
|
7007
|
+
"memo.assumptions.signals": "No external regulatory, peer-review or third-party assurance signals have been incorporated into these scores.",
|
|
7008
|
+
"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>.',
|
|
7009
|
+
"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.",
|
|
7010
|
+
"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.",
|
|
7011
|
+
"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.",
|
|
7012
|
+
"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.",
|
|
7013
|
+
"concept.dim.feasibility.q1": "Is there sufficient evidence (signals, prototypes, pilots) that the bet works?",
|
|
7014
|
+
"concept.dim.feasibility.q2": "Are outcomes repeatable across customers, segments or contexts?",
|
|
7015
|
+
"concept.dim.feasibility.q3": "Can the underlying assumptions be tested and falsified cheaply?",
|
|
7016
|
+
"concept.dim.governance.body": "Innovation bets introduce new forms of strategic, market and reputational uncertainty. Governance defines how bets are gated, monitored and limited \u2014 whether they may scale, must stay in incubation, or should be killed.",
|
|
7017
|
+
"concept.dim.governance.q1": "What is the worst-case impact if the bet fails or the underlying assumption proves wrong?",
|
|
7018
|
+
"scenarios.lever.automationIntensity": "Scale-up Intensity",
|
|
7019
|
+
"scenarios.leverHelp.automationIntensity": "How aggressively the innovation portfolio is pushed from incubation into broad rollout.",
|
|
7020
|
+
"scenarios.lever.vendorDiversification": "Partner Diversification",
|
|
7021
|
+
"scenarios.leverHelp.vendorDiversification": "Spread across innovation partners (lower = more concentrated).",
|
|
7022
|
+
"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.",
|
|
7023
|
+
"scenarios.calc.transformation": "Transformation = 55% \xD7 Scale-up Intensity + 25% \xD7 Adoption Speed + 20% \xD7 Organisational Readiness",
|
|
7024
|
+
"scenarios.calc.concentrationRisk": "Concentration Risk = 100 \u2212 Partner Diversification (a wider partner spread directly lowers the risk).",
|
|
7025
|
+
"scenarios.metricHelp.concentrationRisk": "Risk from over-reliance on few innovation partners or platforms.",
|
|
7026
|
+
"op.staffing.detailHigh": "Recommend a central innovation control function (stage-gate review, sponsor governance) with named accountability per high-governance bet.",
|
|
7027
|
+
"op.scalability.detailHigh": "The portfolio is positioned to scale; ensure incubation, partner and operations capacity matches demand.",
|
|
7028
|
+
"op.customer.detailHigh": "Direct customer exposure requires explicit transparency, expectation management and feedback-handling controls.",
|
|
7029
|
+
"evaluate.field.vendor": "Partner Dependency",
|
|
7030
|
+
"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.",
|
|
7031
|
+
"filters.vendor": "Partner strategy",
|
|
7032
|
+
"filters.vendor.single": "Single partner",
|
|
7033
|
+
"filters.vendor.multi": "Multi-partner",
|
|
7034
|
+
"filters.vendor.open": "Open / internal",
|
|
7035
|
+
"concentration.hhi.vendor": "Partner strategy",
|
|
7036
|
+
"concentration.vendor.title": "Partner dependency",
|
|
7037
|
+
"concentration.vendor.subtitle": "Number of bets by partner strategy. Click a bar to view the list.",
|
|
7038
|
+
"concentration.obs.vendor": "High partner concentration. The portfolio is materially dependent on a narrow set of external partners; consider broadening the ecosystem to reduce systemic dependency.",
|
|
7039
|
+
"memo.concentration.vendor": "Partner strategy concentration: {name} accounts for {count} of {total} bets ({pct}%).",
|
|
7040
|
+
"memo.opmodel.vendor": "Partner strategy: {name} should be reviewed against ecosystem-resilience standards; over-reliance on a single partner increases systemic fragility.",
|
|
7041
|
+
"vendor.None": "None",
|
|
7042
|
+
"vendor.Single Vendor": "Single partner",
|
|
7043
|
+
"vendor.Multi-Vendor": "Multi-partner",
|
|
7044
|
+
"vendor.Internal Build": "Internal build",
|
|
7045
|
+
"vendor.Hybrid": "Hybrid",
|
|
7046
|
+
"dim.valueScale.intro": "Score the strategic and economic upside of this innovation bet \u2014 how large the opportunity is and how broadly it could scale beyond a single experiment. Higher scores indicate sizeable, repeatable potential rather than a niche or one-off result.",
|
|
7047
|
+
"dim.feasibility.intro": "Score the strength of evidence that the bet works given today's signals, prototypes and validation. Early bets rely on directional signal; higher scores indicate repeatable outcomes, testable assumptions and a credible path out of the lab.",
|
|
7048
|
+
"dim.governance.intro": "Score the strategic, market, regulatory and reputational uncertainty surrounding the bet. Higher scores mean MORE uncertainty and a heavier stage-gate and stop-loss load \u2014 covering whether the bet may scale, must stay in incubation, or should be killed if assumptions fail.",
|
|
7049
|
+
"dim.strategic.intro": "Score the contribution to new strategic capabilities, operating models or market positioning. Higher scores indicate the bet could open new revenue streams or reshape how the organisation competes \u2014 beyond refining an existing offering.",
|
|
7050
|
+
"dim.valueScale.band1.label": "Niche bet",
|
|
7051
|
+
"dim.valueScale.band1.meaning": "Confined to a single team or experiment with limited strategic signal.",
|
|
7052
|
+
"dim.valueScale.band2.label": "Targeted bet",
|
|
7053
|
+
"dim.valueScale.band2.meaning": "Meaningful within a business unit but not yet portfolio-defining.",
|
|
7054
|
+
"dim.valueScale.band3.label": "Strategic bet",
|
|
7055
|
+
"dim.valueScale.band3.meaning": "Large, repeatable upside across the organisation; warrants executive sponsorship.",
|
|
7056
|
+
"dim.feasibility.band2.label": "Validate with caveats",
|
|
7057
|
+
"dim.feasibility.band2.meaning": "Promising but requires further evidence, prototypes or partner capability.",
|
|
7058
|
+
"dim.feasibility.band3.label": "Ready to scale",
|
|
7059
|
+
"dim.feasibility.band3.meaning": "Evidence, capability and a credible path to scale are in place.",
|
|
7060
|
+
"dim.governance.band1.label": "Low uncertainty",
|
|
7061
|
+
"dim.governance.band1.meaning": "Routine stage-gate checkpoints; no escalation required.",
|
|
7062
|
+
"dim.governance.band2.label": "Gated trial",
|
|
7063
|
+
"dim.governance.band2.meaning": "Standard stage-gate controls and progress monitoring required.",
|
|
7064
|
+
"dim.governance.band3.label": "Tight stage-gating",
|
|
7065
|
+
"dim.governance.band3.meaning": "Active board-level oversight, stop-loss thresholds and capital limits required.",
|
|
7066
|
+
"dim.governance.band4.label": "High strategic exposure",
|
|
7067
|
+
"dim.governance.band4.meaning": "Treat as material strategic risk; pursue only with explicit ringfencing and continuous oversight.",
|
|
7068
|
+
"dim.strategic.band1.label": "Incremental",
|
|
7069
|
+
"dim.strategic.band1.meaning": "Refines an existing offering only.",
|
|
7070
|
+
"dim.strategic.band3.meaning": "Opens new operating models, revenue streams or market positioning.",
|
|
7071
|
+
"op.staffing.detailLow": "Embedded delivery teams with part-time stage-gate coverage are typically sufficient at this load.",
|
|
7072
|
+
"boardPack.col.f": "E",
|
|
7073
|
+
"boardPack.col.g": "U",
|
|
7074
|
+
// ── Concept & Methodology page theming ────────────────────────────────
|
|
7075
|
+
"concept.pillars.subtitle": "Steer the innovation portfolio and govern the EU AI Act \u2014 in the same place.",
|
|
7076
|
+
"concept.pillar.portfolio.title": "Innovation portfolio management",
|
|
7077
|
+
"concept.pillar.portfolio.b1": "Multi-dimensional scoring: value potential, validation, uncertainty, strategic fit",
|
|
7078
|
+
"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.",
|
|
7079
|
+
"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.",
|
|
7080
|
+
"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.",
|
|
7081
|
+
"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.",
|
|
7082
|
+
"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.",
|
|
7083
|
+
"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.",
|
|
7084
|
+
"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.",
|
|
7085
|
+
"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.",
|
|
7086
|
+
"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.",
|
|
7087
|
+
"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.",
|
|
7088
|
+
"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.",
|
|
7089
|
+
"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.",
|
|
7090
|
+
"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.",
|
|
7091
|
+
"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.",
|
|
7092
|
+
"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.",
|
|
7093
|
+
"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.",
|
|
7094
|
+
"concept.features.f30.body": "A rules-based, severity-ranked list of the decisions the portfolio's own data calls for: stop/defer candidates, gate discipline, capacity and budget shortfalls, and concentration. Benefits-realisation rules flag production systems that under-deliver \u2014 or never measure \u2014 their promised value. Board-set guardrails add the red lines: admins define policy limits in Settings \u2014 a budget-concentration cap per business unit, a value floor for funded initiatives and an uncertainty-load ceiling \u2014 each showing a live pass/fail, and every breach lands here as a decide-now item.",
|
|
7095
|
+
"method.rules.r1.formula": "Value \xD7 Validation \u2192 Portfolio shape",
|
|
7096
|
+
"method.rules.r1.explanation": "Quadrant placement on the Value \xD7 Validation map drives the go / scale / pilot / stop decision for each initiative.",
|
|
7097
|
+
"method.rules.r2.formula": "Uncertainty Band \u2192 Veto criterion",
|
|
7098
|
+
"method.rules.r2.explanation": "Any initiative above the restricted band (Governance & Uncertainty \u2265 61) cannot scale until explicit board-level controls are in place; it is removed from the prioritised list regardless of value or validation.",
|
|
7099
|
+
"method.rules.r4.explanation": "If any portfolio cut (partner, solution type, innovation category, or business unit) exceeds HHI 0.25 on the normalised 0\u20131 scale, the portfolio steward must actively consider redistribution before approving new initiatives in the dominant segment.",
|
|
7100
|
+
"method.s1.dimensions.value": "<strong>Value Potential</strong> \u2014 economic and strategic upside.",
|
|
7101
|
+
"method.s1.dimensions.feasibility": "<strong>Validation & Evidence</strong> \u2014 strength, rigour and repeatability of the evidence.",
|
|
7102
|
+
"method.s1.dimensions.governance": "<strong>Governance & Uncertainty</strong> \u2014 stage-gate posture and uncertainty load (deep dive in \xA7 3).",
|
|
7103
|
+
"method.s5.intro": "Each initiative is evaluated against the rules below and assigned to the <em>first</em> category whose rule matches, in the precedence order <strong>1 \u2192 2 \u2192 3 \u2192 4 \u2192 5 \u2192 6 \u2192 7</strong>. The list below is shown in the same order the Prioritisation page renders the groups, which is not the same as precedence \u2014 the precedence number is given on each rule. Initiatives that satisfy none of rules 1\u20136 fall into the fallback group <em>Unsorted Experiments</em> (precedence 7).",
|
|
7104
|
+
"method.s5.quickWins": "<strong>Easy Experiments</strong> (precedence 1) \u2014 value \u2265 {v}, validation \u2265 {f}, and uncertainty \u2264 {g}. High return, low uncertainty, ready to run.",
|
|
7105
|
+
"method.s5.strategicCore": "<strong>Scale Candidates</strong> (precedence 2) \u2014 value \u2265 {v}, validation \u2265 {f}, and strategic \u2265 {s}. Validated bets that are both valuable and strategically central.",
|
|
7106
|
+
"method.s5.operatingModel": "<strong>New Operating Models</strong> (precedence 6) \u2014 strategic \u2265 {s}, and the initiative did not already match Easy Experiments, Scale Candidates, High-Uncertainty Bets, Long Horizons (H3), or Incremental Refinements. Deep, business-model-level shifts that aren't better described by an earlier rule.",
|
|
7107
|
+
"method.s5.longTerm": "<strong>Long Horizons (H3)</strong> (precedence 4) \u2014 value \u2265 {v}, validation < {f}, and strategic \u2265 {s} (after High-Uncertainty Bets has already claimed initiatives above its threshold). Strategically attractive but not yet validated \u2014 keep on the horizon.",
|
|
7108
|
+
"method.s5.incremental": "<strong>Incremental Refinements</strong> (precedence 5) \u2014 value < {v}, validation \u2265 {f}, and strategic < {s}. Easy to ship but limited upside; useful as fillers.",
|
|
7109
|
+
"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.",
|
|
7110
|
+
"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.",
|
|
7111
|
+
"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.",
|
|
7112
|
+
"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.",
|
|
7113
|
+
"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 & 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.",
|
|
7114
|
+
"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.",
|
|
7115
|
+
"method.audit.scope.governance": "<strong>Status</strong> and the four <strong>evaluation dimension scores</strong> (Value Potential, Validation & Evidence, Governance & Uncertainty, Strategic Impact) with their confidence.",
|
|
7116
|
+
"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.",
|
|
7117
|
+
"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:",
|
|
7118
|
+
"method.gates.enforced.scope": "Both checks feed the EU AI Act readiness score in addition to the hard block."
|
|
7119
|
+
};
|
|
7120
|
+
var DE_INNOVATION = {
|
|
7121
|
+
"brand.app": "Innovations-Portfolio-Steuerung",
|
|
7122
|
+
"brand.mobile": "BICon \xB7 Innovations-Portfolio-Steuerung",
|
|
7123
|
+
"brand.motto": "Innovation vervielfacht Chancen, aber auch Unsicherheit.",
|
|
7124
|
+
"filters.aiCategory": "Innovations-Kategorie",
|
|
7125
|
+
"evaluate.field.aiCategory": "Innovations-Kategorie",
|
|
7126
|
+
"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.",
|
|
7127
|
+
"category.Generative AI": "Neue Produkte",
|
|
7128
|
+
"category.Predictive AI": "Daten-Ventures",
|
|
7129
|
+
"category.Automation": "Operative Innovation",
|
|
7130
|
+
"category.Agentic AI": "Aufkommende Technologien",
|
|
7131
|
+
"category.Decision Support": "Strategische Vorausschau",
|
|
7132
|
+
"category.AI Copilot": "Workforce-Innovation",
|
|
7133
|
+
"category.Knowledge Retrieval": "Forschung & Erkenntnisse",
|
|
7134
|
+
"category.Process Automation": "Service Design",
|
|
7135
|
+
"category.Compliance / Risk AI": "Nachhaltige Innovation",
|
|
7136
|
+
"category.Customer Interaction AI": "Kunden-Innovation",
|
|
7137
|
+
"method.motto": "Innovation vervielfacht Chancen, aber auch Unsicherheit.",
|
|
7138
|
+
"method.intro": "Diese Plattform wandelt qualitative Vorstandsurteile zu Ihrem Innovations-Portfolio durch deterministische Abstraktionen in auditierbare strategische Signale um. Jede Zahl auf jedem Bildschirm l\xE4sst sich auf einen Schieberegler, ein Auswahlfeld oder eine unten ver\xF6ffentlichte Schwelle zur\xFCckf\xFChren.",
|
|
7139
|
+
"quadrant.Scale": "Skalieren",
|
|
7140
|
+
"quadrant.Pilot": "Erproben",
|
|
7141
|
+
"quadrant.Stop": "Stopp",
|
|
7142
|
+
"quadrant.Assist": "Inkubieren",
|
|
7143
|
+
"quadrant.Pilot.subtitle": "Leicht testbar, Wert noch unklar",
|
|
7144
|
+
"quadrant.Scale.subtitle": "Validiert \xB7 bereit zur Industrialisierung",
|
|
7145
|
+
"quadrant.Stop.subtitle": "Geringer Wert \xB7 d\xFCnne Evidenz",
|
|
7146
|
+
"quadrant.Assist.subtitle": "Vielversprechender Wert, Evidenz noch d\xFCnn",
|
|
7147
|
+
"sub.dataAvailability": "Evidenzbasis",
|
|
7148
|
+
"sub.dataQuality": "Qualit\xE4t der Evidenz",
|
|
7149
|
+
"sub.modelRobustness": "Robustheit des Konzepts",
|
|
7150
|
+
"sub.reproducibility": "Replizierbarkeit der Ergebnisse",
|
|
7151
|
+
"sub.explainability": "Klarheit der Hypothese",
|
|
7152
|
+
"sub.regulatoryExposure": "Regulatorisches & Marktrisiko",
|
|
7153
|
+
"sub.humanOversight": "Erforderliche Begleitung",
|
|
7154
|
+
"sub.decisionCriticality": "Entscheidungs-Tragweite",
|
|
7155
|
+
"sub.monitoringComplexity": "Komplexit\xE4t der Lernschleife",
|
|
7156
|
+
"sub.cybersecurityExposure": "Sicherheits- & IP-Exposition",
|
|
7157
|
+
"sub.innovationCapability": "Aufbau von Innovationsmuskeln",
|
|
7158
|
+
"subHelp.dataAvailability": "Wie viel Evidenz (Daten, Stand der Technik, Prototypen) die Idee bereits st\xFCtzt.",
|
|
7159
|
+
"subHelp.dataQuality": "Belastbarkeit dieser Evidenz \u2014 Rigorosit\xE4t, Stichprobengr\xF6\xDFe, Unabh\xE4ngigkeit, Aktualit\xE4t.",
|
|
7160
|
+
"dim.feasibility.band1.meaning": "L\xFCcken bei Konzept, F\xE4higkeiten oder Partnern machen die Umsetzung unsicher.",
|
|
7161
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Gegateter Pilot \u2014 Standard-Stage-Gate-Kontrollen",
|
|
7162
|
+
"govLabel.Controlled Automation": "\xDCberwachte Erprobung",
|
|
7163
|
+
"govLabel.Human-in-the-Loop Required": "Aktive Begleitung erforderlich",
|
|
7164
|
+
"govLabel.Restricted Deployment": "Nur eingegrenzter Pilot",
|
|
7165
|
+
"govLabel.High Governance Sensitivity": "Vorstandspatenschaft erforderlich",
|
|
7166
|
+
"subHelp.modelRobustness": "Wie gut das Kernkonzept Belastung, Edge-Cases und pessimistische Annahmen aush\xE4lt.",
|
|
7167
|
+
"subHelp.reproducibility": "Wahrscheinlichkeit, dass beobachtete Ergebnisse unter unabh\xE4ngigen Bedingungen wiederholbar sind.",
|
|
7168
|
+
"subHelp.explainability": "Wie klar Hypothese und Wertversprechen Sponsoren und Reviewern erkl\xE4rt werden k\xF6nnen.",
|
|
7169
|
+
"subHelp.regulatoryExposure": "Kombiniertes regulatorisches, Markt- und Ethikrisiko, das die Innovation bew\xE4ltigen muss.",
|
|
7170
|
+
"subHelp.humanOversight": "Wie viel aktive Begleitung, Coaching und Review das Team f\xFCr sicheren Fortschritt ben\xF6tigt.",
|
|
7171
|
+
"subHelp.decisionCriticality": "Was bei einem Scheitern auf dem Spiel steht \u2014 Marke, Kapital, strategische Option, Partnerschaften.",
|
|
7172
|
+
"subHelp.monitoringComplexity": "Aufwand f\xFCr die Lernschleife \u2014 Instrumentierung, Kennzahlen, Stakeholder-Reviews.",
|
|
7173
|
+
"subHelp.cybersecurityExposure": "Exposition vertraulicher Daten, IP und Partnerbeziehungen durch die Arbeit.",
|
|
7174
|
+
"subHelp.innovationCapability": "Aufbau von Innovationsmuskeln \u2014 Talente, Methoden, Partnerschaften, wiederverwendbares IP.",
|
|
7175
|
+
"scenarios.lever.adoptionSpeed": "Experiment-Tempo",
|
|
7176
|
+
"scenarios.lever.governanceStrictness": "Stage-Gate-Rigorosit\xE4t",
|
|
7177
|
+
"scenarios.lever.organisationalReadiness": "Team-Reife",
|
|
7178
|
+
"scenarios.lever.oversightIntensity": "Coaching-Intensit\xE4t",
|
|
7179
|
+
"scenarios.leverHelp.adoptionSpeed": "Wie schnell Ideen durch Erproben \u2192 Validieren \u2192 Skalieren wandern.",
|
|
7180
|
+
"scenarios.leverHelp.governanceStrictness": "Wie streng Stage-Gate-Reviews, Evidenzschwellen und Kill-Kriterien sind.",
|
|
7181
|
+
"scenarios.leverHelp.organisationalReadiness": "Innovations-Skills, Sponsor-Unterst\xFCtzung und Aufnahmef\xE4higkeit des operativen Gesch\xE4fts.",
|
|
7182
|
+
"scenarios.leverHelp.oversightIntensity": "Aktives Coaching, Mentoring und Stakeholder-Review rund um Innovationsteams.",
|
|
7183
|
+
"prioritisation.cat.Quick Wins": "Einfache Experimente",
|
|
7184
|
+
"prioritisation.cat.Strategic Core Initiatives": "Skalierungs-Kandidaten",
|
|
7185
|
+
"prioritisation.cat.High Governance Risk": "Hochunsichere Wetten",
|
|
7186
|
+
"prioritisation.cat.Long-Term Strategic Bets": "Lange Horizonte (H3)",
|
|
7187
|
+
"prioritisation.cat.Incremental Optimisation": "Inkrementelle Verfeinerungen",
|
|
7188
|
+
"prioritisation.cat.Operating Model Transformation": "Neue Betriebsmodelle",
|
|
7189
|
+
"prioritisation.cat.Uncategorised / Tactical": "Unsortierte Experimente",
|
|
7190
|
+
"prioritisation.subtitle": "Innovationsinitiativen nach Horizont und Unsicherheitsprofil gruppiert.",
|
|
7191
|
+
"prioritisation.highRisk": "Hohe Unsicherheit",
|
|
7192
|
+
"settings.prio.quickWins": "Einfache Experimente",
|
|
7193
|
+
"settings.prio.strategicCore": "Skalierungs-Kandidaten",
|
|
7194
|
+
"settings.prio.highGovRisk": "Hochunsichere Wetten",
|
|
7195
|
+
"settings.prio.longTermBets": "Lange Horizonte (H3)",
|
|
7196
|
+
"settings.prio.incremental": "Inkrementelle Verfeinerungen",
|
|
7197
|
+
"settings.prio.operatingModel": "Neue Betriebsmodelle",
|
|
7198
|
+
"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.",
|
|
7199
|
+
"inventory.col.scores": "Punkte (W/E/U/S)",
|
|
7200
|
+
"concept.eyebrow": "Innovations-Portfolio-Steuerung",
|
|
7201
|
+
"concept.title": "Verstreute Experimente in ein gesteuertes Innovationsportfolio \xFCberf\xFChren.",
|
|
7202
|
+
"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.",
|
|
7203
|
+
"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.",
|
|
7204
|
+
"concept.problem.p2": "Experimentieren liefert wertvolle Erkenntnisse, f\xFChrt aber h\xE4ufig zu einem fragmentierten Portfolio aus Pilotprojekten, Prototypen und Einzelversuchen. Die F\xFChrung muss dann \u2013 oft ohne vergleichbare Evidenz \u2013 entscheiden, welche Initiativen skaliert, welche weiter inkubiert und welche beendet werden sollen, um Kapazit\xE4t freizusetzen.",
|
|
7205
|
+
"concept.dimensions.title": "Vier Dimensionen zur Bewertung von Innovationsinitiativen",
|
|
7206
|
+
"concept.dimensions.subtitle": "Jede Initiative wird entlang derselben vier Dimensionen bewertet, um auf konsistenter Basis \xFCber Horizonte hinweg vergleichbar zu sein.",
|
|
7207
|
+
"concept.dim.feasibility.title": "2. Validierung & Evidenz",
|
|
7208
|
+
"concept.dim.governance.title": "3. Governance & Unsicherheit",
|
|
7209
|
+
"concept.dim.governance.q2": "Wie hoch sind regulatorische und Marktunsicherheit?",
|
|
7210
|
+
"concept.dim.governance.q3": "Welche Stage-Gate-Aufsicht und Stop-Loss-Kontrollen sind erforderlich?",
|
|
7211
|
+
"concept.dim.strategic.body": "Verfeinert die Initiative lediglich bestehende Angebote oder tr\xE4gt sie zu neuen strategischen F\xE4higkeiten bei? Manche Innovationen liefern inkrementelle Verbesserungen, andere er\xF6ffnen neue Betriebsmodelle, Erl\xF6sstr\xF6me oder Positionierungen.",
|
|
7212
|
+
"concept.quadrants.subtitle": "Wert und Validierung verorten eine Innovation in der Portfolio-Karte; Governance und Unsicherheit definieren, wie weit sie getrieben werden kann, bevor mehr Evidenz erforderlich ist.",
|
|
7213
|
+
"concept.quad.Scale.body": "Validierter Wert, bereit zur Industrialisierung \u2014 vom Innovationsportfolio in das operative Gesch\xE4ft \xFCberf\xFChren.",
|
|
7214
|
+
"concept.quad.Pilot.body": "Leicht testbar, Wert noch unklar \u2014 g\xFCnstige Experimente fahren, um Signal zu finden.",
|
|
7215
|
+
"concept.quad.Assist.body": "Vielversprechender Wert, Evidenz noch d\xFCnn \u2014 inkubieren und entrisiken, bevor skaliert wird.",
|
|
7216
|
+
"concept.quad.Stop.body": "Geringer Wert \xB7 d\xFCnne Evidenz \u2014 beenden, um Kapazit\xE4t freizusetzen.",
|
|
7217
|
+
"concept.features.f1.body": "Jede Innovationsinitiative mit Gesch\xE4ftseinheit, Sponsor, Tags, Lebenszyklus und 0\u2013100-Bewertung \xFCber alle vier Dimensionen erfassen.",
|
|
7218
|
+
"concept.features.f2.body": "Wert \xD7 Validierung als Blasendiagramm, eingef\xE4rbt nach Unsicherheits-Band, mit Skalieren / Erproben / Inkubieren / Beenden-Quadrantenz\xE4hlung.",
|
|
7219
|
+
"dim.valueScale.title": "Wertpotenzial",
|
|
7220
|
+
"dim.feasibility.title": "Validierung & Evidenz",
|
|
7221
|
+
"dim.governance.title": "Governance & Unsicherheit",
|
|
7222
|
+
"portfolio.tooltip.governance": "Governance & Unsicherheit",
|
|
7223
|
+
"portfolio.kpi.governance": "\xD8 Governance- & Unsicherheits-Last",
|
|
7224
|
+
"portfolio.custom.metric.governance": "Governance & Unsicherheit",
|
|
7225
|
+
"nav.governance": "Governance & Unsicherheit",
|
|
7226
|
+
"filters.govBand": "Governance & Unsicherheit",
|
|
7227
|
+
"inventory.col.governance": "Unsicherheits-Band",
|
|
7228
|
+
"inventory.sort.governance": "Sortieren: Governance & Unsicherheit",
|
|
7229
|
+
"inventory.sort.value": "Sortieren: Wertpotenzial",
|
|
7230
|
+
"inventory.sort.feasibility": "Sortieren: Validierung & Evidenz",
|
|
7231
|
+
"portfolio.axis.x": "Wertpotenzial & Strategischer Impact",
|
|
7232
|
+
"portfolio.axis.y": "Validierung & Evidenz",
|
|
7233
|
+
"portfolio.tooltip.valueScale": "Wertpotenzial",
|
|
7234
|
+
"portfolio.tooltip.feasibility": "Validierung",
|
|
7235
|
+
"op.input.value": "Wertpotenzial",
|
|
7236
|
+
"op.input.feasibility": "Validierung",
|
|
7237
|
+
"evaluate.profile.radarValue": "Potenzial",
|
|
7238
|
+
"evaluate.profile.radarFeasibility": "Validierung",
|
|
7239
|
+
"concept.dim.value.title": "1. Wertpotenzial",
|
|
7240
|
+
"inventory.title": "Innovations-Initiativen-Inventar",
|
|
7241
|
+
"inventory.subtitle": "Verwalten und bewerten Sie Ihr Portfolio an Innovationsinitiativen.",
|
|
7242
|
+
"inventory.empty.title": "Innovation vervielfacht Chancen, aber auch Unsicherheit.",
|
|
7243
|
+
"inventory.empty.subtitle": "F\xFCgen Sie zuerst Ihre Innovationsinitiativen dem Portfolio hinzu, oder laden Sie den strategischen Demodatensatz, um die Bewertungsrahmen zu erkunden.",
|
|
7244
|
+
"memo.summary.portfolio": "Das Unternehmen f\xFChrt aktuell {count} aktive Innovationsinitiativen mit einem zugesagten Gesamtbudget von {budget}.",
|
|
7245
|
+
"governance.subtitle": "F\xFChrungsaufsicht \xFCber Innovationswetten, Stage-Gate-Haltung und Unsicherheits-Exposition.",
|
|
7246
|
+
"op.subtitle": "Organisatorische Implikationen des aktuellen Innovationsportfolios \xFCber Staffing, Governance, Skalierbarkeit, Partnerschaften und Betriebsmodell-Entwicklung.",
|
|
7247
|
+
"concentration.subtitle": "Systemische Exposition \xFCber Partnerstrategie, Innovations-Kategorie, Gesch\xE4ftseinheit und Unsicherheits-Band erkennen. HHI-Schwellen: <1500 diversifiziert, 1500\u20132500 moderat, >2500 hoch konzentriert.",
|
|
7248
|
+
"concentration.hhi.category": "Innovations-Kategorie",
|
|
7249
|
+
"concentration.heatmap.title": "Cluster-Heatmap \u2014 Gesch\xE4ftseinheit \xD7 Innovations-Kategorie",
|
|
7250
|
+
"concentration.heatmap.subtitle": "Zeigt Cluster, in denen eine einzelne Gesch\xE4ftseinheit Wetten in einer Innovations-Kategorie b\xFCndelt.",
|
|
7251
|
+
"concentration.obs.category": "Innovations-Kategorie-Konzentration. Wetten konzentrieren sich auf wenige Innovations-Kategorien, breitere strategische Optionen bleiben unterentwickelt.",
|
|
7252
|
+
"concentration.cat.title": "Innovations-Kategorie",
|
|
7253
|
+
"ie.boardPack.coverTitlePlaceholder": "Innovations-Portfolio \u2014 Vorstandssitzung Q3 2026",
|
|
7254
|
+
"boardPack.heatmap.subtitle": "Gesch\xE4ftseinheit \xD7 Innovations-Kategorie \u2014 Cluster, in denen eine GE ein Innovationsthema b\xFCndelt.",
|
|
7255
|
+
"portfolio.custom.metric.valueScale": "Wertpotenzial",
|
|
7256
|
+
"portfolio.custom.metric.feasibility": "Validierung",
|
|
7257
|
+
"subHelp.operationalLeverage": "Wie stark die Innovation den Output pro menschlicher Arbeitseinheit multipliziert. H\xF6her = gr\xF6\xDFere operative Reichweite pro FTE.",
|
|
7258
|
+
"op.staffing.level3": "Dedizierte Innovations-Kontrollfunktion",
|
|
7259
|
+
"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.",
|
|
7260
|
+
"scenarios.preset.transformational.desc": "Betriebsmodell um Innovation neu gestalten; hohe Reife und diversifizierte Partnerbasis.",
|
|
7261
|
+
"memo.heading": "Vorstandsmemo \u2014 Innovations-Portfolio",
|
|
7262
|
+
"memo.concentration.category": "Innovations-Kategoriekonzentration: {name} stellt {count} von {total} Initiativen ({pct}%).",
|
|
7263
|
+
"memo.opmodel.talent": "Talent & F\xE4higkeiten: ein Portfolio dieser Zusammensetzung erfordert typischerweise eine zentrale Innovations-Kontrollfunktion (Stage-Gate-Review, Sponsor-Governance, Scouting und Inkubation), proportional zur Aufsichtslast.",
|
|
7264
|
+
"method.s1.p1": "Jede Initiative wird auf vier strategischen Dimensionen bewertet: <strong>Wertpotenzial</strong>, <strong>Validierung & Evidenz</strong>, <strong>Governance & Unsicherheit</strong> und <strong>Strategischer Impact</strong>. Jede Dimension besteht aus 7\u20138 Unterkomponenten, je 0\u2013100.",
|
|
7265
|
+
"method.s2.title": "2. Governance- & Unsicherheits-Klassifikation",
|
|
7266
|
+
"method.s2.subtitle": "Unsicherheits-B\xE4nder und was sie f\xFCr Stage-Gate-Haltung und Stop-Loss-Kontrollen bedeuten.",
|
|
7267
|
+
"method.s2.intro": "Initiativen werden auf Basis des Governance- & Unsicherheits-Werts klassifiziert:",
|
|
7268
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Geringe Unsicherheit</strong>: Routine-Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
|
|
7269
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Gated Trial</strong>: Standard-Stage-Gate-Kontrollen und Fortschrittsmonitoring.",
|
|
7270
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Strenges Stage-Gating</strong>: explizite Stop-Loss-Schwellen und Kapitalgrenzen.",
|
|
7271
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Vorstandspatenschaft erforderlich</strong>: aktive Vorstandsaufsicht, benannter Sponsor und explizite Kill-Kriterien.",
|
|
7272
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Hohe strategische Exposition</strong>: als wesentliches strategisches Risiko behandeln; nur mit Ringfencing und kontinuierlicher Aufsicht verfolgen.",
|
|
7273
|
+
"method.s4.subtitle": "Wie jede Initiative auf der Business-Impact-\xD7-Validierung-Ebene positioniert wird.",
|
|
7274
|
+
"method.s4.intro": "Die x-Achse (<strong>Business Impact</strong>) ist der gleichgewichtete Mittelwert aus Wertpotenzial und strategischem Impact: <code>BusinessImpact = (Wert + Strategisch) / 2</code>. Die y-Achse ist Validierung & Evidenz. Die Quadranten werden deterministisch bei 50 auf beiden Achsen geteilt:",
|
|
7275
|
+
"method.s4.scale": "<strong>Skalieren</strong> \u2014 Business Impact \u2265 50 und Validierung \u2265 50. Hoher Impact, starke Evidenz \u2014 bereit zur Skalierung.",
|
|
7276
|
+
"method.s4.assist": "<strong>Inkubieren</strong> \u2014 Business Impact \u2265 50 und Validierung < 50. Vielversprechend, aber unbewiesen \u2014 in der Inkubation belassen, weitere Evidenz sammeln.",
|
|
7277
|
+
"method.s4.pilot": "<strong>Erproben</strong> \u2014 Business Impact < 50 und Validierung \u2265 50. Validiert, aber unklarer strategischer Ertrag \u2014 angrenzende Anwendungen erproben, bevor committet wird.",
|
|
7278
|
+
"method.s4.stop": "<strong>Beenden</strong> \u2014 Business Impact < 50 und Validierung < 50. Geringer Impact und schwache Evidenz \u2014 beenden oder Erkenntnisse weiterverwerten.",
|
|
7279
|
+
"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.",
|
|
7280
|
+
"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.",
|
|
7281
|
+
"method.s8.b3": "Es werden keine externen regulatorischen, Peer-Review- oder Drittparteien-Signale ber\xFCcksichtigt.",
|
|
7282
|
+
"memo.assumptions.signals": "Es wurden keine externen regulatorischen, Peer-Review- oder Drittparteien-Signale in diese Scores einbezogen.",
|
|
7283
|
+
"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>.',
|
|
7284
|
+
"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.",
|
|
7285
|
+
"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.",
|
|
7286
|
+
"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.",
|
|
7287
|
+
"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.",
|
|
7288
|
+
"concept.dim.feasibility.q1": "Liegt ausreichend Evidenz vor (Signale, Prototypen, Pilotprojekte), dass die Wette funktioniert?",
|
|
7289
|
+
"concept.dim.feasibility.q2": "Sind die Ergebnisse \xFCber Kunden, Segmente oder Kontexte hinweg wiederholbar?",
|
|
7290
|
+
"concept.dim.feasibility.q3": "Lassen sich die zugrundeliegenden Annahmen g\xFCnstig testen und falsifizieren?",
|
|
7291
|
+
"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.",
|
|
7292
|
+
"concept.dim.governance.q1": "Wie gro\xDF ist der Worst-Case-Effekt, falls die Wette scheitert oder die zugrundeliegende Annahme falsch ist?",
|
|
7293
|
+
"scenarios.lever.automationIntensity": "Skalierungs\xADintensit\xE4t",
|
|
7294
|
+
"scenarios.leverHelp.automationIntensity": "Wie offensiv das Innovationsportfolio aus der Inkubation in den breiten Rollout getrieben wird.",
|
|
7295
|
+
"scenarios.lever.vendorDiversification": "Partnerdiversifizierung",
|
|
7296
|
+
"scenarios.leverHelp.vendorDiversification": "Streuung \xFCber Innovationspartner (niedriger = konzentrierter).",
|
|
7297
|
+
"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.",
|
|
7298
|
+
"scenarios.calc.transformation": "Transformation = 55 % \xD7 Skalierungsintensit\xE4t + 25 % \xD7 Einf\xFChrungstempo + 20 % \xD7 organisatorische Reife",
|
|
7299
|
+
"scenarios.calc.concentrationRisk": "Konzentrationsrisiko = 100 \u2212 Partnerdiversifizierung (eine breitere Streuung senkt das Risiko direkt).",
|
|
7300
|
+
"scenarios.metricHelp.concentrationRisk": "Risiko aus Abh\xE4ngigkeit von wenigen Innovationspartnern oder Plattformen.",
|
|
7301
|
+
"op.staffing.detailHigh": "Empfehlung: zentrale Innovations-Kontrollfunktion (Stage-Gate-Review, Sponsor-Governance) mit benannter Verantwortung pro Wette mit hoher Governance.",
|
|
7302
|
+
"op.scalability.detailHigh": "Das Portfolio ist auf Skalierung ausgelegt; Inkubations-, Partner- und Betriebskapazit\xE4t muss zur Nachfrage passen.",
|
|
7303
|
+
"op.customer.detailHigh": "Direkter Kundenkontakt erfordert explizite Transparenz-, Erwartungsmanagement- und Feedback-Handling-Kontrollen.",
|
|
7304
|
+
"evaluate.field.vendor": "Partner-Abh\xE4ngigkeit",
|
|
7305
|
+
"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.",
|
|
7306
|
+
"filters.vendor": "Partnerstrategie",
|
|
7307
|
+
"filters.vendor.single": "Einzelpartner",
|
|
7308
|
+
"filters.vendor.multi": "Multi-Partner",
|
|
7309
|
+
"filters.vendor.open": "Offen / intern",
|
|
7310
|
+
"concentration.hhi.vendor": "Partnerstrategie",
|
|
7311
|
+
"concentration.vendor.title": "Partner-Abh\xE4ngigkeit",
|
|
7312
|
+
"concentration.vendor.subtitle": "Anzahl Wetten nach Partnerstrategie. Auf einen Balken klicken, um die Liste anzuzeigen.",
|
|
7313
|
+
"concentration.obs.vendor": "Hohe Partnerkonzentration. Das Portfolio h\xE4ngt wesentlich von wenigen externen Partnern ab; eine Verbreiterung des \xD6kosystems reduziert die systemische Abh\xE4ngigkeit.",
|
|
7314
|
+
"memo.concentration.vendor": "Partnerstrategie-Konzentration: {name} steht f\xFCr {count} von {total} Wetten ({pct} %).",
|
|
7315
|
+
"memo.opmodel.vendor": "Partnerstrategie: {name} sollte gegen Standards der \xD6kosystem-Resilienz gepr\xFCft werden; zu starke Abh\xE4ngigkeit von einem Partner erh\xF6ht die systemische Fragilit\xE4t.",
|
|
7316
|
+
"vendor.None": "Keine",
|
|
7317
|
+
"vendor.Single Vendor": "Einzelpartner",
|
|
7318
|
+
"vendor.Multi-Vendor": "Mehrere Partner",
|
|
7319
|
+
"vendor.Internal Build": "Eigenentwicklung",
|
|
7320
|
+
"vendor.Hybrid": "Hybrid",
|
|
7321
|
+
"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.",
|
|
7322
|
+
"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.",
|
|
7323
|
+
"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.",
|
|
7324
|
+
"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.",
|
|
7325
|
+
"dim.valueScale.band1.label": "Nischen-Wette",
|
|
7326
|
+
"dim.valueScale.band1.meaning": "Auf ein einzelnes Team oder Experiment begrenzt; geringes strategisches Signal.",
|
|
7327
|
+
"dim.valueScale.band2.label": "Gezielte Wette",
|
|
7328
|
+
"dim.valueScale.band2.meaning": "Relevant innerhalb einer Gesch\xE4ftseinheit, aber noch nicht portfolio-pr\xE4gend.",
|
|
7329
|
+
"dim.valueScale.band3.label": "Strategische Wette",
|
|
7330
|
+
"dim.valueScale.band3.meaning": "Gro\xDFes, wiederholbares Upside organisationsweit; ben\xF6tigt Vorstandsunterst\xFCtzung.",
|
|
7331
|
+
"dim.feasibility.band2.label": "Validieren mit Vorbehalt",
|
|
7332
|
+
"dim.feasibility.band2.meaning": "Vielversprechend, erfordert aber weitere Evidenz, Prototypen oder Partnerf\xE4higkeit.",
|
|
7333
|
+
"dim.feasibility.band3.label": "Bereit zur Skalierung",
|
|
7334
|
+
"dim.feasibility.band3.meaning": "Evidenz, F\xE4higkeit und ein glaubw\xFCrdiger Skalierungspfad sind vorhanden.",
|
|
7335
|
+
"dim.governance.band1.label": "Geringe Unsicherheit",
|
|
7336
|
+
"dim.governance.band1.meaning": "Routinem\xE4\xDFige Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
|
|
7337
|
+
"dim.governance.band2.label": "Gegateter Pilot",
|
|
7338
|
+
"dim.governance.band2.meaning": "Standard Stage-Gate-Kontrollen und Fortschrittsmonitoring erforderlich.",
|
|
7339
|
+
"dim.governance.band3.label": "Enges Stage-Gating",
|
|
7340
|
+
"dim.governance.band3.meaning": "Aktive Vorstandsaufsicht, Stop-Loss-Schwellen und Kapitallimits erforderlich.",
|
|
7341
|
+
"dim.governance.band4.label": "Hohe strategische Exposition",
|
|
7342
|
+
"dim.governance.band4.meaning": "Als materielles strategisches Risiko behandeln; nur mit explizitem Ringfencing und kontinuierlicher Aufsicht verfolgen.",
|
|
7343
|
+
"dim.strategic.band1.label": "Inkrementell",
|
|
7344
|
+
"dim.strategic.band1.meaning": "Verfeinert nur ein bestehendes Angebot.",
|
|
7345
|
+
"dim.strategic.band3.meaning": "Er\xF6ffnet neue Betriebsmodelle, Erl\xF6sstr\xF6me oder Marktpositionierungen.",
|
|
7346
|
+
"op.staffing.detailLow": "Eingebettete Teams mit teilweiser Stage-Gate-Abdeckung reichen bei dieser Last meist aus.",
|
|
7347
|
+
"boardPack.col.f": "E",
|
|
7348
|
+
"boardPack.col.g": "U",
|
|
7349
|
+
// ── Concept & Methodology page theming ────────────────────────────────
|
|
7350
|
+
"concept.pillars.subtitle": "Das Innovationsportfolio steuern und die EU-AI-Act-Konformit\xE4t sicherstellen \u2014 am selben Ort.",
|
|
7351
|
+
"concept.pillar.portfolio.title": "Innovations-Portfoliomanagement",
|
|
7352
|
+
"concept.pillar.portfolio.b1": "Mehrdimensionales Scoring: Wertpotenzial, Validierung, Unsicherheit, strategischer Fit",
|
|
7353
|
+
"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.",
|
|
7354
|
+
"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.",
|
|
7355
|
+
"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.",
|
|
7356
|
+
"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.",
|
|
7357
|
+
"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.",
|
|
7358
|
+
"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.",
|
|
7359
|
+
"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.",
|
|
7360
|
+
"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.",
|
|
7361
|
+
"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.",
|
|
7362
|
+
"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.",
|
|
7363
|
+
"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.",
|
|
7364
|
+
"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.",
|
|
7365
|
+
"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.",
|
|
7366
|
+
"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.",
|
|
7367
|
+
"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.",
|
|
7368
|
+
"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.",
|
|
7369
|
+
"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.",
|
|
7370
|
+
"method.rules.r1.formula": "Nutzen \xD7 Validierung \u2192 Portfolio-Gestalt",
|
|
7371
|
+
"method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Validierungs-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
|
|
7372
|
+
"method.rules.r2.formula": "Unsicherheits-Band \u2192 Veto-Kriterium",
|
|
7373
|
+
"method.rules.r2.explanation": "Jede Initiative oberhalb des Restricted-Bands (Governance & Unsicherheit \u2265 61) darf nicht skaliert werden, solange keine expliziten Vorstandskontrollen vorhanden sind; sie wird unabh\xE4ngig von Nutzen oder Validierung von der Priorisierungsliste entfernt.",
|
|
7374
|
+
"method.rules.r4.explanation": "\xDCbersteigt ein Portfolio-Schnitt (Partner, L\xF6sungstyp, Innovations-Kategorie oder Gesch\xE4ftseinheit) den HHI 0,25 auf der normierten 0\u20131-Skala, muss der Portfolio-Steward eine Umverteilung aktiv pr\xFCfen, bevor neue Initiativen im dominanten Segment freigegeben werden.",
|
|
7375
|
+
"method.s1.dimensions.value": "<strong>Wertpotenzial</strong> \u2014 \xF6konomischer und strategischer Nutzen.",
|
|
7376
|
+
"method.s1.dimensions.feasibility": "<strong>Validierung & Evidenz</strong> \u2014 St\xE4rke, Strenge und Wiederholbarkeit der Evidenz.",
|
|
7377
|
+
"method.s1.dimensions.governance": "<strong>Governance & Unsicherheit</strong> \u2014 Stage-Gate-Haltung und Unsicherheitslast (Vertiefung in \xA7 3).",
|
|
7378
|
+
"method.s5.intro": "Jede Initiative wird gegen die folgenden Regeln gepr\xFCft und der <em>ersten</em> Kategorie zugeordnet, deren Regel zutrifft \u2014 in der Pr\xE4zedenzreihenfolge <strong>1 \u2192 2 \u2192 3 \u2192 4 \u2192 5 \u2192 6 \u2192 7</strong>. Die Liste unten erscheint in derselben Reihenfolge, in der die Priorisierungsseite die Gruppen darstellt; das entspricht nicht der Pr\xE4zedenz \u2014 die Pr\xE4zedenznummer steht jeweils an der Regel. Initiativen, die keine der Regeln 1\u20136 erf\xFCllen, landen in der Auffangkategorie <em>Unsortierte Experimente</em> (Pr\xE4zedenz 7).",
|
|
7379
|
+
"method.s5.quickWins": "<strong>Einfache Experimente</strong> (Pr\xE4zedenz 1) \u2014 Wert \u2265 {v}, Validierung \u2265 {f} und Unsicherheit \u2264 {g}. Hoher Nutzen, geringe Unsicherheit, sofort startbar.",
|
|
7380
|
+
"method.s5.strategicCore": "<strong>Skalierungs-Kandidaten</strong> (Pr\xE4zedenz 2) \u2014 Wert \u2265 {v}, Validierung \u2265 {f} und Strategie \u2265 {s}. Validierte Wetten, die zugleich wertvoll und strategisch zentral sind.",
|
|
7381
|
+
"method.s5.operatingModel": "<strong>Neue Betriebsmodelle</strong> (Pr\xE4zedenz 6) \u2014 Strategie \u2265 {s}, sofern die Initiative nicht bereits unter Einfache Experimente, Skalierungs-Kandidaten, Hochunsichere Wetten, Lange Horizonte (H3) oder Inkrementelle Verfeinerungen gefallen ist. Tiefgreifende Ver\xE4nderungen auf Gesch\xE4ftsmodell-Ebene, die nicht durch eine fr\xFChere Regel besser beschrieben werden.",
|
|
7382
|
+
"method.s5.longTerm": "<strong>Lange Horizonte (H3)</strong> (Pr\xE4zedenz 4) \u2014 Wert \u2265 {v}, Validierung < {f} und Strategie \u2265 {s} (nachdem Hochunsichere Wetten Initiativen oberhalb ihres Schwellenwerts bereits beansprucht haben). Strategisch attraktiv, aber noch nicht validiert \u2014 am Horizont halten.",
|
|
7383
|
+
"method.s5.incremental": "<strong>Inkrementelle Verfeinerungen</strong> (Pr\xE4zedenz 5) \u2014 Wert < {v}, Validierung \u2265 {f} und Strategie < {s}. Leicht umsetzbar, aber begrenzter Nutzen; geeignet als F\xFCllinitiativen.",
|
|
7384
|
+
"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.",
|
|
7385
|
+
"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.",
|
|
7386
|
+
"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.",
|
|
7387
|
+
"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.",
|
|
7388
|
+
"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-&-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.",
|
|
7389
|
+
"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.",
|
|
7390
|
+
"method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wertpotenzial, Validierung & Evidenz, Governance & Unsicherheit, Strategischer Impact) mit ihrer Konfidenz.",
|
|
7391
|
+
"method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Partnerstrategie, L\xF6sungstyp, Innovations-Kategorie und Tags.",
|
|
7392
|
+
"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:",
|
|
7393
|
+
"method.gates.enforced.scope": "Beide Pr\xFCfungen fliessen zus\xE4tzlich zum harten Block in den EU-AI-Act-Reifegrad ein."
|
|
7394
|
+
};
|
|
7395
|
+
var DEMO_DIGITAL = {
|
|
7396
|
+
"Advisor Copilot": {
|
|
7397
|
+
name: "Advisor Workbench",
|
|
7398
|
+
description: "Unified advisor desktop consolidating CRM, client documents, and meeting prep into one digital workspace.",
|
|
7399
|
+
aiCategory: "AI Copilot",
|
|
7400
|
+
owner: "M. Lindqvist",
|
|
7401
|
+
aiAct: {
|
|
7402
|
+
role: "Deployer",
|
|
7403
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7404
|
+
annexIIICategory: "Essential Services",
|
|
7405
|
+
prohibitedPractices: [],
|
|
7406
|
+
art50Flags: ["chatbot"],
|
|
7407
|
+
integratesThirdPartyGpai: true,
|
|
7408
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7409
|
+
upstreamGpaiInfoAvailable: true,
|
|
7410
|
+
obligations: { "deployer-operational-monitoring": { status: "Done" } },
|
|
7411
|
+
aiLiteracy: {
|
|
7412
|
+
status: "completed",
|
|
7413
|
+
owner: "M. Lindqvist",
|
|
7414
|
+
lastTrainedAt: "2026-04-10",
|
|
7415
|
+
note: "Advisor cohort completed mandatory platform-disclosure training in Q2 2026."
|
|
7416
|
+
},
|
|
7417
|
+
incidents: [
|
|
7418
|
+
{
|
|
7419
|
+
id: "seed-inc-advisor-1",
|
|
7420
|
+
occurredAt: "2026-05-03",
|
|
7421
|
+
detectedAt: "2026-05-04",
|
|
7422
|
+
category: "cybersecurity",
|
|
7423
|
+
description: "An imported client document with hidden instructions caused the workbench to surface three client summaries to an external indexing service before input controls were tightened.",
|
|
7424
|
+
status: "open",
|
|
7425
|
+
owner: "M. Lindqvist",
|
|
7426
|
+
rootCause: "Unsanitised third-party document ingested without a provenance check.",
|
|
7427
|
+
correctiveActions: "Tightened input-source allowlist; rolled out provenance signing; alerted the security team.",
|
|
7428
|
+
createdAt: "2026-05-04T08:30:00.000Z",
|
|
7429
|
+
updatedAt: "2026-05-04T08:30:00.000Z"
|
|
7430
|
+
}
|
|
7431
|
+
]
|
|
7432
|
+
}
|
|
7433
|
+
},
|
|
7434
|
+
"Client Meeting Summariser": {
|
|
7435
|
+
name: "Meeting Recording Platform",
|
|
7436
|
+
description: "Centralised recording and transcription service for client meetings with searchable archive.",
|
|
7437
|
+
aiCategory: "Customer Interaction AI",
|
|
7438
|
+
owner: "D. Okafor",
|
|
7439
|
+
aiAct: {
|
|
7440
|
+
role: "Deployer",
|
|
7441
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7442
|
+
prohibitedPractices: [],
|
|
7443
|
+
art50Flags: ["ai-generated-content"],
|
|
7444
|
+
integratesThirdPartyGpai: true,
|
|
7445
|
+
upstreamGpaiProvider: "Anthropic (Claude 3.5 Sonnet)",
|
|
7446
|
+
upstreamGpaiInfoAvailable: true,
|
|
7447
|
+
aiLiteracy: {
|
|
7448
|
+
status: "stale",
|
|
7449
|
+
owner: "D. Okafor",
|
|
7450
|
+
lastTrainedAt: "2025-02-15",
|
|
7451
|
+
note: "Initial cohort trained at rollout \u2014 annual refresh overdue."
|
|
7452
|
+
}
|
|
7453
|
+
}
|
|
7454
|
+
},
|
|
7455
|
+
"AI Investment Memo Assistant": {
|
|
7456
|
+
name: "Investment Memo Workflow",
|
|
7457
|
+
description: "Digital workflow for drafting, reviewing and publishing investment memos with version control.",
|
|
7458
|
+
aiCategory: "Knowledge Retrieval",
|
|
7459
|
+
owner: "J. Park",
|
|
7460
|
+
aiAct: {
|
|
7461
|
+
role: "Deployer",
|
|
7462
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7463
|
+
prohibitedPractices: [],
|
|
7464
|
+
art50Flags: ["ai-generated-content"],
|
|
7465
|
+
integratesThirdPartyGpai: true,
|
|
7466
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7467
|
+
upstreamGpaiInfoAvailable: true,
|
|
7468
|
+
aiLiteracy: {
|
|
7469
|
+
status: "in-progress",
|
|
7470
|
+
owner: "J. Park",
|
|
7471
|
+
note: "Analyst cohort scheduled \u2014 first session planned for May 2026."
|
|
7472
|
+
}
|
|
7473
|
+
}
|
|
7474
|
+
},
|
|
7475
|
+
"Compliance Documentation Assistant": {
|
|
7476
|
+
name: "Compliance Document Portal",
|
|
7477
|
+
description: "Self-service portal for compliance documentation with templates, approvals and audit trail.",
|
|
7478
|
+
aiCategory: "Compliance / Risk AI",
|
|
7479
|
+
owner: "K. S\xF8rensen",
|
|
7480
|
+
aiAct: {
|
|
7481
|
+
role: "Deployer",
|
|
7482
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7483
|
+
prohibitedPractices: [],
|
|
7484
|
+
art50Flags: ["ai-generated-content"],
|
|
7485
|
+
integratesThirdPartyGpai: true,
|
|
7486
|
+
upstreamGpaiProvider: "Meta (Llama 3.1 70B)",
|
|
7487
|
+
upstreamGpaiInfoAvailable: false,
|
|
7488
|
+
aiLiteracy: {
|
|
7489
|
+
status: "none",
|
|
7490
|
+
note: "Programme to be scoped once the portal leaves the Idea stage."
|
|
7491
|
+
}
|
|
7492
|
+
}
|
|
7493
|
+
},
|
|
7494
|
+
"KYC Document Intelligence": {
|
|
7495
|
+
name: "KYC Onboarding Platform",
|
|
7496
|
+
description: "Digital KYC onboarding with document upload, e-signature and case management.",
|
|
7497
|
+
aiCategory: "Process Automation",
|
|
7498
|
+
owner: "A. Ferreira",
|
|
7499
|
+
aiAct: {
|
|
7500
|
+
role: "Deployer",
|
|
7501
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7502
|
+
annexIIICategory: "Essential Services",
|
|
7503
|
+
prohibitedPractices: [],
|
|
7504
|
+
art50Flags: [],
|
|
7505
|
+
obligations: { "deployer-operational-monitoring": { status: "Done" } },
|
|
7506
|
+
aiLiteracy: {
|
|
7507
|
+
status: "completed",
|
|
7508
|
+
owner: "A. Ferreira",
|
|
7509
|
+
lastTrainedAt: "2026-02-12",
|
|
7510
|
+
note: "Onboarding analysts re-certified after the platform upgrade."
|
|
7511
|
+
},
|
|
7512
|
+
incidents: [
|
|
7513
|
+
{
|
|
7514
|
+
id: "seed-inc-kyc-1",
|
|
7515
|
+
occurredAt: "2026-05-14",
|
|
7516
|
+
detectedAt: "2026-05-15",
|
|
7517
|
+
category: "fundamental-rights",
|
|
7518
|
+
description: "The adverse-media check misflagged 14 verified low-risk retail clients as politically exposed persons, blocking onboarding for roughly six hours before manual override.",
|
|
7519
|
+
status: "open",
|
|
7520
|
+
owner: "A. Ferreira",
|
|
7521
|
+
rootCause: "Drift in the adverse-media matching model after an upstream vendor update.",
|
|
7522
|
+
correctiveActions: "Rolled back the matching version; added drift monitoring on the PEP precision metric.",
|
|
7523
|
+
createdAt: "2026-05-15T10:15:00.000Z",
|
|
7524
|
+
updatedAt: "2026-05-15T10:15:00.000Z"
|
|
7525
|
+
}
|
|
7526
|
+
]
|
|
7527
|
+
}
|
|
7528
|
+
},
|
|
7529
|
+
"Client Service Chat Assistant": {
|
|
7530
|
+
name: "Client Service Portal",
|
|
7531
|
+
description: "Self-service portal with ticketing, knowledge base and live-agent escalation.",
|
|
7532
|
+
aiCategory: "Customer Interaction AI",
|
|
7533
|
+
owner: "V. Patel",
|
|
7534
|
+
aiAct: {
|
|
7535
|
+
role: "Deployer",
|
|
7536
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7537
|
+
prohibitedPractices: [],
|
|
7538
|
+
art50Flags: ["chatbot", "ai-generated-content"],
|
|
7539
|
+
integratesThirdPartyGpai: true,
|
|
7540
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7541
|
+
upstreamGpaiInfoAvailable: true,
|
|
7542
|
+
aiLiteracy: {
|
|
7543
|
+
status: "completed",
|
|
7544
|
+
owner: "V. Patel",
|
|
7545
|
+
lastTrainedAt: "2025-10-15",
|
|
7546
|
+
note: "All client-service agents trained on escalation policy and disclosure."
|
|
7547
|
+
},
|
|
7548
|
+
incidents: [
|
|
7549
|
+
{
|
|
7550
|
+
id: "seed-inc-cschat-1",
|
|
7551
|
+
occurredAt: "2026-05-10",
|
|
7552
|
+
detectedAt: "2026-05-10",
|
|
7553
|
+
category: "general",
|
|
7554
|
+
description: "The portal chat failed to disclose its AI nature in 312 sessions due to a regression that suppressed the opening disclaimer banner on the mobile web channel.",
|
|
7555
|
+
status: "open",
|
|
7556
|
+
owner: "V. Patel",
|
|
7557
|
+
rootCause: "A frontend A/B-test variant removed the disclosure component without compliance review.",
|
|
7558
|
+
correctiveActions: "Disclosure banner restored; A/B-test gating added to require compliance approval for any change touching the disclosure surface.",
|
|
7559
|
+
createdAt: "2026-05-10T18:05:00.000Z",
|
|
7560
|
+
updatedAt: "2026-05-12T09:30:00.000Z"
|
|
7561
|
+
}
|
|
7562
|
+
]
|
|
7563
|
+
}
|
|
7564
|
+
},
|
|
7565
|
+
"Portfolio Exception Monitor": {
|
|
7566
|
+
name: "Portfolio Monitoring Dashboard",
|
|
7567
|
+
description: "Real-time monitoring dashboard for portfolio breaches with alerting and case workflow.",
|
|
7568
|
+
aiCategory: "Predictive AI",
|
|
7569
|
+
owner: "T. Brennan",
|
|
7570
|
+
aiAct: {
|
|
7571
|
+
role: "Deployer",
|
|
7572
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7573
|
+
prohibitedPractices: [],
|
|
7574
|
+
art50Flags: [],
|
|
7575
|
+
aiLiteracy: {
|
|
7576
|
+
status: "in-progress",
|
|
7577
|
+
owner: "T. Brennan",
|
|
7578
|
+
lastTrainedAt: "2026-03-20",
|
|
7579
|
+
note: "Risk team kickoff completed; portfolio managers cohort scheduled for Q3."
|
|
7580
|
+
}
|
|
7581
|
+
}
|
|
7582
|
+
},
|
|
7583
|
+
"Regulatory Change Monitor": {
|
|
7584
|
+
name: "Regulatory Intelligence Feed",
|
|
7585
|
+
description: "Aggregated regulatory feed with tagging, distribution and impact-assessment workflow.",
|
|
7586
|
+
aiCategory: "Compliance / Risk AI",
|
|
7587
|
+
owner: "L. Yamamoto",
|
|
7588
|
+
aiAct: {
|
|
7589
|
+
role: "Deployer",
|
|
7590
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7591
|
+
prohibitedPractices: [],
|
|
7592
|
+
art50Flags: [],
|
|
7593
|
+
aiLiteracy: {
|
|
7594
|
+
status: "in-progress",
|
|
7595
|
+
owner: "L. Yamamoto",
|
|
7596
|
+
note: "Compliance analyst training plan drafted; first session pending vendor selection."
|
|
7597
|
+
}
|
|
7598
|
+
}
|
|
7599
|
+
},
|
|
7600
|
+
"AI Code Assistant": {
|
|
7601
|
+
name: "Developer Platform",
|
|
7602
|
+
description: "Internal developer platform with CI/CD, code review and shared component libraries.",
|
|
7603
|
+
aiCategory: "AI Copilot",
|
|
7604
|
+
owner: "R. Schmidt",
|
|
7605
|
+
aiAct: {
|
|
7606
|
+
role: "Deployer",
|
|
7607
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7608
|
+
prohibitedPractices: [],
|
|
7609
|
+
art50Flags: ["ai-generated-content"],
|
|
7610
|
+
integratesThirdPartyGpai: true,
|
|
7611
|
+
upstreamGpaiProvider: "GitHub Copilot (OpenAI)",
|
|
7612
|
+
upstreamGpaiInfoAvailable: true,
|
|
7613
|
+
aiLiteracy: {
|
|
7614
|
+
status: "completed",
|
|
7615
|
+
owner: "R. Schmidt",
|
|
7616
|
+
lastTrainedAt: "2024-09-01",
|
|
7617
|
+
note: "Engineering org-wide training from initial rollout \u2014 annual refresh overdue."
|
|
7618
|
+
}
|
|
7619
|
+
}
|
|
7620
|
+
},
|
|
7621
|
+
"Operations Automation Agent": {
|
|
7622
|
+
name: "Operations Workflow Engine",
|
|
7623
|
+
description: "Workflow engine orchestrating back-office operations across systems.",
|
|
7624
|
+
aiCategory: "Agentic AI",
|
|
7625
|
+
owner: "H. Tanaka",
|
|
7626
|
+
aiAct: {
|
|
7627
|
+
role: "Deployer",
|
|
7628
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7629
|
+
annexIIICategory: "Critical Infrastructure",
|
|
7630
|
+
prohibitedPractices: [],
|
|
7631
|
+
art50Flags: [],
|
|
7632
|
+
aiLiteracy: {
|
|
7633
|
+
status: "completed",
|
|
7634
|
+
owner: "H. Tanaka",
|
|
7635
|
+
lastTrainedAt: "2026-02-25",
|
|
7636
|
+
note: "Ops reviewers certified on the human-in-the-loop posture before pilot start."
|
|
7637
|
+
}
|
|
7638
|
+
}
|
|
7639
|
+
},
|
|
7640
|
+
"Risk Report Narrator": {
|
|
7641
|
+
name: "Risk Reporting Portal",
|
|
7642
|
+
description: "Centralised risk reporting portal with templated commentary and version control.",
|
|
7643
|
+
aiCategory: "Decision Support",
|
|
7644
|
+
owner: "E. Novak",
|
|
7645
|
+
aiAct: {
|
|
7646
|
+
role: "Deployer",
|
|
7647
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7648
|
+
prohibitedPractices: [],
|
|
7649
|
+
art50Flags: ["ai-generated-content"],
|
|
7650
|
+
integratesThirdPartyGpai: true,
|
|
7651
|
+
upstreamGpaiProvider: "Anthropic (Claude 3.5 Sonnet)",
|
|
7652
|
+
upstreamGpaiInfoAvailable: true,
|
|
7653
|
+
aiLiteracy: {
|
|
7654
|
+
status: "completed",
|
|
7655
|
+
owner: "E. Novak",
|
|
7656
|
+
lastTrainedAt: "2025-11-30",
|
|
7657
|
+
note: "Risk reporting team trained on the review checklist and disclosure wording."
|
|
7658
|
+
}
|
|
7659
|
+
}
|
|
7660
|
+
},
|
|
7661
|
+
"Marketing Content Assistant": {
|
|
7662
|
+
name: "Marketing Content Hub",
|
|
7663
|
+
description: "Digital asset management and publishing workflow for marketing content.",
|
|
7664
|
+
aiCategory: "Generative AI",
|
|
7665
|
+
owner: "C. Delgado",
|
|
7666
|
+
aiAct: {
|
|
7667
|
+
role: "Deployer",
|
|
7668
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7669
|
+
prohibitedPractices: [],
|
|
7670
|
+
art50Flags: ["ai-generated-content"],
|
|
7671
|
+
integratesThirdPartyGpai: true,
|
|
7672
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7673
|
+
upstreamGpaiInfoAvailable: true,
|
|
7674
|
+
aiLiteracy: {
|
|
7675
|
+
status: "completed",
|
|
7676
|
+
owner: "C. Delgado",
|
|
7677
|
+
lastTrainedAt: "2026-01-15",
|
|
7678
|
+
note: "Brand and content teams trained on regulated-claims guardrails."
|
|
7679
|
+
}
|
|
7680
|
+
}
|
|
7681
|
+
},
|
|
7682
|
+
"HR Knowledge Assistant": {
|
|
7683
|
+
name: "HR Self-Service Portal",
|
|
7684
|
+
description: "Employee self-service portal with policies, FAQ and ticketing.",
|
|
7685
|
+
aiCategory: "Knowledge Retrieval",
|
|
7686
|
+
owner: "S. Murphy",
|
|
7687
|
+
aiAct: {
|
|
7688
|
+
role: "Deployer",
|
|
7689
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7690
|
+
prohibitedPractices: [],
|
|
7691
|
+
art50Flags: ["chatbot"],
|
|
7692
|
+
integratesThirdPartyGpai: true,
|
|
7693
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7694
|
+
upstreamGpaiInfoAvailable: false,
|
|
7695
|
+
aiLiteracy: {
|
|
7696
|
+
status: "completed",
|
|
7697
|
+
owner: "S. Murphy",
|
|
7698
|
+
lastTrainedAt: "2025-12-10",
|
|
7699
|
+
note: "HR business partners and people leaders trained on chatbot disclosure."
|
|
7700
|
+
}
|
|
7701
|
+
}
|
|
7702
|
+
},
|
|
7703
|
+
"Finance Forecast Commentary Assistant": {
|
|
7704
|
+
name: "Finance Planning Platform",
|
|
7705
|
+
description: "Integrated planning platform consolidating actuals, forecasts and commentary.",
|
|
7706
|
+
aiCategory: "Decision Support",
|
|
7707
|
+
owner: "O. Werner",
|
|
7708
|
+
aiAct: {
|
|
7709
|
+
role: "Not-in-Scope",
|
|
7710
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7711
|
+
prohibitedPractices: [],
|
|
7712
|
+
art50Flags: [],
|
|
7713
|
+
aiLiteracy: {
|
|
7714
|
+
status: "in-progress",
|
|
7715
|
+
owner: "O. Werner",
|
|
7716
|
+
note: "Planning-team enablement drafted; AI Act scoping not applicable to this tool."
|
|
7717
|
+
}
|
|
7718
|
+
}
|
|
7719
|
+
},
|
|
7720
|
+
"AI Governance Register": {
|
|
7721
|
+
name: "Digital Asset Register",
|
|
7722
|
+
description: "Centralised register of digital assets with ownership, lifecycle stage and risk attributes.",
|
|
7723
|
+
aiCategory: "Compliance / Risk AI",
|
|
7724
|
+
owner: "I. Kowalski",
|
|
7725
|
+
aiAct: {
|
|
7726
|
+
role: "Not-in-Scope",
|
|
7727
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7728
|
+
prohibitedPractices: [],
|
|
7729
|
+
art50Flags: [],
|
|
7730
|
+
aiLiteracy: {
|
|
7731
|
+
status: "in-progress",
|
|
7732
|
+
owner: "I. Kowalski",
|
|
7733
|
+
note: "Curriculum for register stewards drafted; the register itself is not an AI system in scope."
|
|
7734
|
+
}
|
|
7735
|
+
}
|
|
7736
|
+
}
|
|
7737
|
+
};
|
|
7738
|
+
var DEMO_INNOVATION = {
|
|
7739
|
+
"Advisor Copilot": {
|
|
7740
|
+
name: "Clinician Decision Companion Pilot",
|
|
7741
|
+
description: "In-consultation decision-support companion surfacing patient context, guideline checks and next-best-actions for clinicians.",
|
|
7742
|
+
aiCategory: "Decision Support",
|
|
7743
|
+
businessUnit: "Clinical Affairs",
|
|
7744
|
+
owner: "Dr. H. Eriksen",
|
|
7745
|
+
tags: ["clinical", "prototype", "r&d"],
|
|
7746
|
+
decisionLog: [
|
|
7747
|
+
{ owner: "Clinical Governance Board", rationale: "Pilot expansion approved across three care sites after a positive Q3 safety and usability readout." },
|
|
7748
|
+
{ owner: "Dr. H. Eriksen", rationale: "Narrowed initial scope to primary-care consultations to de-risk the clinical-evidence review." }
|
|
7749
|
+
],
|
|
7750
|
+
aiAct: {
|
|
7751
|
+
role: "Deployer",
|
|
7752
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7753
|
+
annexIIICategory: "Essential Services",
|
|
7754
|
+
prohibitedPractices: [],
|
|
7755
|
+
art50Flags: ["chatbot"],
|
|
7756
|
+
integratesThirdPartyGpai: true,
|
|
7757
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7758
|
+
upstreamGpaiInfoAvailable: true,
|
|
7759
|
+
obligations: { "deployer-operational-monitoring": { status: "Done" } },
|
|
7760
|
+
aiLiteracy: {
|
|
7761
|
+
status: "completed",
|
|
7762
|
+
owner: "Dr. H. Eriksen",
|
|
7763
|
+
lastTrainedAt: "2026-04-10",
|
|
7764
|
+
note: "Clinician cohort completed mandatory decision-support and disclosure training in Q2 2026."
|
|
7765
|
+
},
|
|
7766
|
+
incidents: [
|
|
7767
|
+
{
|
|
7768
|
+
id: "seed-inc-advisor-1",
|
|
7769
|
+
occurredAt: "2026-05-03",
|
|
7770
|
+
detectedAt: "2026-05-04",
|
|
7771
|
+
category: "cybersecurity",
|
|
7772
|
+
description: "A shared visit document with hidden instructions caused the companion to surface three patient summaries to an external indexing service before input controls were tightened.",
|
|
7773
|
+
status: "open",
|
|
7774
|
+
owner: "Dr. H. Eriksen",
|
|
7775
|
+
rootCause: "Unsanitised third-party document ingested without a provenance check.",
|
|
7776
|
+
correctiveActions: "Tightened input-source allowlist; rolled out provenance signing; alerted the security team.",
|
|
7777
|
+
createdAt: "2026-05-04T08:30:00.000Z",
|
|
7778
|
+
updatedAt: "2026-05-04T08:30:00.000Z"
|
|
7779
|
+
}
|
|
7780
|
+
]
|
|
7781
|
+
}
|
|
7782
|
+
},
|
|
7783
|
+
"Client Meeting Summariser": {
|
|
7784
|
+
name: "Ambient Visit Note Capture",
|
|
7785
|
+
description: "Ambient documentation prototype turning patient-visit conversations into structured, consent-aware clinical notes.",
|
|
7786
|
+
aiCategory: "Generative AI",
|
|
7787
|
+
businessUnit: "Patient Experience",
|
|
7788
|
+
owner: "Dr. J. Mensah",
|
|
7789
|
+
tags: ["clinical", "patient-experience", "research"],
|
|
7790
|
+
decisionLog: [
|
|
7791
|
+
{ owner: "Dr. J. Mensah", rationale: "Rollout to outpatient care teams approved after legal sign-off on patient consent and disclosure flows." }
|
|
7792
|
+
],
|
|
7793
|
+
aiAct: {
|
|
7794
|
+
role: "Deployer",
|
|
7795
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7796
|
+
prohibitedPractices: [],
|
|
7797
|
+
art50Flags: ["ai-generated-content"],
|
|
7798
|
+
integratesThirdPartyGpai: true,
|
|
7799
|
+
upstreamGpaiProvider: "Anthropic (Claude 3.5 Sonnet)",
|
|
7800
|
+
upstreamGpaiInfoAvailable: true,
|
|
7801
|
+
aiLiteracy: {
|
|
7802
|
+
status: "stale",
|
|
7803
|
+
owner: "Dr. J. Mensah",
|
|
7804
|
+
lastTrainedAt: "2025-02-15",
|
|
7805
|
+
note: "Initial care-team cohort trained at rollout \u2014 annual refresh overdue."
|
|
7806
|
+
}
|
|
7807
|
+
}
|
|
7808
|
+
},
|
|
7809
|
+
"AI Investment Memo Assistant": {
|
|
7810
|
+
name: "Translational Research Brief Generator",
|
|
7811
|
+
description: "Research lab drafting first-pass translational briefs from internal studies, public literature and prior trial precedents.",
|
|
7812
|
+
aiCategory: "Knowledge Retrieval",
|
|
7813
|
+
businessUnit: "R&D",
|
|
7814
|
+
owner: "Dr. A. Ramaswamy",
|
|
7815
|
+
tags: ["r&d", "research", "applied-research"],
|
|
7816
|
+
decisionLog: [
|
|
7817
|
+
{ owner: "Dr. A. Ramaswamy", rationale: "Reduced scope to oncology programmes first; rare-disease briefs deferred to phase 2." },
|
|
7818
|
+
{ owner: "R&D Steering Committee", rationale: "Pilot extension approved subject to mandatory researcher sign-off on every brief." }
|
|
7819
|
+
],
|
|
7820
|
+
aiAct: {
|
|
7821
|
+
role: "Deployer",
|
|
7822
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7823
|
+
prohibitedPractices: [],
|
|
7824
|
+
art50Flags: ["ai-generated-content"],
|
|
7825
|
+
integratesThirdPartyGpai: true,
|
|
7826
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7827
|
+
upstreamGpaiInfoAvailable: true,
|
|
7828
|
+
aiLiteracy: {
|
|
7829
|
+
status: "in-progress",
|
|
7830
|
+
owner: "Dr. A. Ramaswamy",
|
|
7831
|
+
note: "Researcher cohort scheduled \u2014 first session planned for May 2026."
|
|
7832
|
+
}
|
|
7833
|
+
}
|
|
7834
|
+
},
|
|
7835
|
+
"Compliance Documentation Assistant": {
|
|
7836
|
+
name: "Regulatory Submission Draft Lab",
|
|
7837
|
+
description: "Lab drafting first-pass regulatory submissions from study reports, guidance documents and prior dossiers.",
|
|
7838
|
+
aiCategory: "Compliance / Risk AI",
|
|
7839
|
+
businessUnit: "Regulatory Affairs",
|
|
7840
|
+
owner: "Dr. E. Petrova",
|
|
7841
|
+
tags: ["regulatory-science", "r&d"],
|
|
7842
|
+
decisionLog: [
|
|
7843
|
+
{ owner: "Dr. E. Petrova", rationale: "Paused pending guidance from the Regulatory Steering Committee on permissible draft uses inside submission dossiers." }
|
|
7844
|
+
],
|
|
7845
|
+
aiAct: {
|
|
7846
|
+
role: "Deployer",
|
|
7847
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7848
|
+
prohibitedPractices: [],
|
|
7849
|
+
art50Flags: ["ai-generated-content"],
|
|
7850
|
+
integratesThirdPartyGpai: true,
|
|
7851
|
+
upstreamGpaiProvider: "Meta (Llama 3.1 70B)",
|
|
7852
|
+
upstreamGpaiInfoAvailable: false,
|
|
7853
|
+
aiLiteracy: {
|
|
7854
|
+
status: "none",
|
|
7855
|
+
note: "Programme to be scoped once the lab leaves the Idea stage."
|
|
7856
|
+
}
|
|
7857
|
+
}
|
|
7858
|
+
},
|
|
7859
|
+
"KYC Document Intelligence": {
|
|
7860
|
+
name: "Patient Intake & Consent Intelligence",
|
|
7861
|
+
description: "Extracts and reconciles patient-intake fields, insurance documents and consent forms across care entry points.",
|
|
7862
|
+
aiCategory: "Compliance / Risk AI",
|
|
7863
|
+
businessUnit: "Patient Onboarding",
|
|
7864
|
+
owner: "Dr. N. Okonkwo",
|
|
7865
|
+
tags: ["clinical", "regulated", "patient-experience"],
|
|
7866
|
+
decisionLog: [
|
|
7867
|
+
{ owner: "Clinical Governance Board", rationale: "Initial deployment approved as a core regulated intake workflow across the main care sites." },
|
|
7868
|
+
{ owner: "Dr. N. Okonkwo", rationale: "Annual OpEx envelope increased to cover additional care sites and new consent variants." }
|
|
7869
|
+
],
|
|
7870
|
+
aiAct: {
|
|
7871
|
+
role: "Deployer",
|
|
7872
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7873
|
+
annexIIICategory: "Essential Services",
|
|
7874
|
+
prohibitedPractices: [],
|
|
7875
|
+
art50Flags: [],
|
|
7876
|
+
obligations: { "deployer-operational-monitoring": { status: "Done" } },
|
|
7877
|
+
aiLiteracy: {
|
|
7878
|
+
status: "completed",
|
|
7879
|
+
owner: "Dr. N. Okonkwo",
|
|
7880
|
+
lastTrainedAt: "2026-02-12",
|
|
7881
|
+
note: "Intake staff re-certified after the model upgrade."
|
|
7882
|
+
},
|
|
7883
|
+
incidents: [
|
|
7884
|
+
{
|
|
7885
|
+
id: "seed-inc-kyc-1",
|
|
7886
|
+
occurredAt: "2026-05-14",
|
|
7887
|
+
detectedAt: "2026-05-15",
|
|
7888
|
+
category: "fundamental-rights",
|
|
7889
|
+
description: "The consent reconciliation step misflagged 14 verified patients as missing valid consent, blocking intake for roughly six hours before manual override.",
|
|
7890
|
+
status: "open",
|
|
7891
|
+
owner: "Dr. N. Okonkwo",
|
|
7892
|
+
rootCause: "Drift in the consent-form matching model after an upstream vendor update.",
|
|
7893
|
+
correctiveActions: "Rolled back the matching version; added drift monitoring on the consent-match precision metric.",
|
|
7894
|
+
createdAt: "2026-05-15T10:15:00.000Z",
|
|
7895
|
+
updatedAt: "2026-05-15T10:15:00.000Z"
|
|
7896
|
+
}
|
|
7897
|
+
]
|
|
7898
|
+
}
|
|
7899
|
+
},
|
|
7900
|
+
"Client Service Chat Assistant": {
|
|
7901
|
+
name: "Patient Support Chat Companion",
|
|
7902
|
+
description: "Front-line patient support chat with clinical guardrails and an escalation pathway to care-team specialists.",
|
|
7903
|
+
aiCategory: "Customer Interaction AI",
|
|
7904
|
+
businessUnit: "Patient Experience",
|
|
7905
|
+
owner: "S. Goretti",
|
|
7906
|
+
tags: ["patient-experience", "clinical"],
|
|
7907
|
+
decisionLog: [
|
|
7908
|
+
{ owner: "S. Goretti", rationale: "Scaling phase approved after a clear patient-satisfaction uplift and within-tolerance escalation rates to care teams." }
|
|
7909
|
+
],
|
|
7910
|
+
aiAct: {
|
|
7911
|
+
role: "Deployer",
|
|
7912
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7913
|
+
prohibitedPractices: [],
|
|
7914
|
+
art50Flags: ["chatbot", "ai-generated-content"],
|
|
7915
|
+
integratesThirdPartyGpai: true,
|
|
7916
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
7917
|
+
upstreamGpaiInfoAvailable: true,
|
|
7918
|
+
aiLiteracy: {
|
|
7919
|
+
status: "completed",
|
|
7920
|
+
owner: "S. Goretti",
|
|
7921
|
+
lastTrainedAt: "2025-10-15",
|
|
7922
|
+
note: "All patient-support staff trained on escalation policy and disclosure."
|
|
7923
|
+
},
|
|
7924
|
+
incidents: [
|
|
7925
|
+
{
|
|
7926
|
+
id: "seed-inc-cschat-1",
|
|
7927
|
+
occurredAt: "2026-05-10",
|
|
7928
|
+
detectedAt: "2026-05-10",
|
|
7929
|
+
category: "general",
|
|
7930
|
+
description: "The chat companion failed to disclose its AI nature in 312 sessions due to a regression that suppressed the opening disclaimer banner on the mobile web channel.",
|
|
7931
|
+
status: "open",
|
|
7932
|
+
owner: "S. Goretti",
|
|
7933
|
+
rootCause: "A frontend A/B-test variant removed the disclosure component without compliance review.",
|
|
7934
|
+
correctiveActions: "Disclosure banner restored; A/B-test gating added to require compliance approval for any change touching the disclosure surface.",
|
|
7935
|
+
createdAt: "2026-05-10T18:05:00.000Z",
|
|
7936
|
+
updatedAt: "2026-05-12T09:30:00.000Z"
|
|
7937
|
+
}
|
|
7938
|
+
]
|
|
7939
|
+
}
|
|
7940
|
+
},
|
|
7941
|
+
"Portfolio Exception Monitor": {
|
|
7942
|
+
name: "Adverse Event Signal Detection",
|
|
7943
|
+
description: "Continuously screens post-market data for adverse-event clusters, safety drifts and concentration signals.",
|
|
7944
|
+
aiCategory: "Predictive AI",
|
|
7945
|
+
businessUnit: "Pharmacovigilance",
|
|
7946
|
+
owner: "Dr. K. Vasquez",
|
|
7947
|
+
tags: ["rwe", "research", "foresight"],
|
|
7948
|
+
decisionLog: [
|
|
7949
|
+
{ owner: "Dr. K. Vasquez", rationale: "Phase 1 limited to post-market device signals; investigational-product signals deferred to a later phase." }
|
|
7950
|
+
],
|
|
7951
|
+
aiAct: {
|
|
7952
|
+
role: "Deployer",
|
|
7953
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7954
|
+
prohibitedPractices: [],
|
|
7955
|
+
art50Flags: [],
|
|
7956
|
+
aiLiteracy: {
|
|
7957
|
+
status: "in-progress",
|
|
7958
|
+
owner: "Dr. K. Vasquez",
|
|
7959
|
+
lastTrainedAt: "2026-03-20",
|
|
7960
|
+
note: "Pharmacovigilance team kickoff completed; safety reviewers cohort scheduled for Q3."
|
|
7961
|
+
}
|
|
7962
|
+
}
|
|
7963
|
+
},
|
|
7964
|
+
"Regulatory Change Monitor": {
|
|
7965
|
+
name: "Global Regulatory Horizon Scan",
|
|
7966
|
+
description: "Scans regulatory feeds across jurisdictions (FDA, EMA, MHRA, PMDA\u2026) and proposes downstream label and protocol updates.",
|
|
7967
|
+
aiCategory: "Knowledge Retrieval",
|
|
7968
|
+
businessUnit: "Regulatory Affairs",
|
|
7969
|
+
owner: "Dr. M. Haddad",
|
|
7970
|
+
tags: ["regulatory-science", "foresight", "research"],
|
|
7971
|
+
decisionLog: [
|
|
7972
|
+
{ owner: "Dr. M. Haddad", rationale: "Vendor selection paused awaiting the outcome of the cross-jurisdiction (FDA / EMA / PMDA) coverage RFP." }
|
|
7973
|
+
],
|
|
7974
|
+
aiAct: {
|
|
7975
|
+
role: "Deployer",
|
|
7976
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7977
|
+
prohibitedPractices: [],
|
|
7978
|
+
art50Flags: [],
|
|
7979
|
+
aiLiteracy: {
|
|
7980
|
+
status: "in-progress",
|
|
7981
|
+
owner: "Dr. M. Haddad",
|
|
7982
|
+
note: "Regulatory analyst training plan drafted; first session pending vendor selection."
|
|
7983
|
+
}
|
|
7984
|
+
}
|
|
7985
|
+
},
|
|
7986
|
+
"AI Code Assistant": {
|
|
7987
|
+
name: "Bioinformatics Pipeline Copilot",
|
|
7988
|
+
description: "Research-engineer copilot for bioinformatics pipelines, covering internal frameworks, validation and reproducibility standards.",
|
|
7989
|
+
aiCategory: "AI Copilot",
|
|
7990
|
+
businessUnit: "Bioinformatics",
|
|
7991
|
+
owner: "Dr. Y. Tanaka",
|
|
7992
|
+
tags: ["r&d", "applied-research", "tech-scouting"],
|
|
7993
|
+
decisionLog: [
|
|
7994
|
+
{ owner: "Dr. Y. Tanaka", rationale: "Rollout to bioinformatics teams approved with standard usage telemetry and reproducibility checks." }
|
|
7995
|
+
],
|
|
7996
|
+
aiAct: {
|
|
7997
|
+
role: "Deployer",
|
|
7998
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
7999
|
+
prohibitedPractices: [],
|
|
8000
|
+
art50Flags: ["ai-generated-content"],
|
|
8001
|
+
integratesThirdPartyGpai: true,
|
|
8002
|
+
upstreamGpaiProvider: "GitHub Copilot (OpenAI)",
|
|
8003
|
+
upstreamGpaiInfoAvailable: true,
|
|
8004
|
+
aiLiteracy: {
|
|
8005
|
+
status: "completed",
|
|
8006
|
+
owner: "Dr. Y. Tanaka",
|
|
8007
|
+
lastTrainedAt: "2024-09-01",
|
|
8008
|
+
note: "Bioinformatics teams trained from initial rollout \u2014 annual refresh overdue."
|
|
8009
|
+
}
|
|
8010
|
+
}
|
|
8011
|
+
},
|
|
8012
|
+
"Operations Automation Agent": {
|
|
8013
|
+
name: "Lab Automation Agent Research",
|
|
8014
|
+
description: "Agentic workflow research for wet-lab and assay operations spanning instruments and LIMS with human approval gates.",
|
|
8015
|
+
aiCategory: "Agentic AI",
|
|
8016
|
+
businessUnit: "Lab Operations",
|
|
8017
|
+
owner: "Dr. R. Anand",
|
|
8018
|
+
tags: ["r&d", "prototype", "applied-research"],
|
|
8019
|
+
decisionLog: [
|
|
8020
|
+
{ owner: "R&D Steering Committee", rationale: "Pilot approved with mandatory human-in-the-loop on every lab-instruction action." }
|
|
8021
|
+
],
|
|
8022
|
+
aiAct: {
|
|
8023
|
+
role: "Deployer",
|
|
8024
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8025
|
+
annexIIICategory: "Critical Infrastructure",
|
|
8026
|
+
prohibitedPractices: [],
|
|
8027
|
+
art50Flags: [],
|
|
8028
|
+
aiLiteracy: {
|
|
8029
|
+
status: "completed",
|
|
8030
|
+
owner: "Dr. R. Anand",
|
|
8031
|
+
lastTrainedAt: "2026-02-25",
|
|
8032
|
+
note: "Lab reviewers certified on the human-in-the-loop posture before pilot start."
|
|
8033
|
+
}
|
|
8034
|
+
}
|
|
8035
|
+
},
|
|
8036
|
+
"Risk Report Narrator": {
|
|
8037
|
+
name: "Clinical Safety Report Narrator",
|
|
8038
|
+
description: "Drafts narrative sections of periodic safety reports (PSURs, DSURs) from underlying signals and study metrics.",
|
|
8039
|
+
aiCategory: "Decision Support",
|
|
8040
|
+
businessUnit: "Quality & Safety",
|
|
8041
|
+
owner: "Dr. P. Lindqvist",
|
|
8042
|
+
tags: ["clinical", "research", "prototype"],
|
|
8043
|
+
decisionLog: [
|
|
8044
|
+
{ owner: "Dr. P. Lindqvist", rationale: "Focused on monthly safety reporting only; the quarterly PSUR narrative is deferred to a later phase." }
|
|
8045
|
+
],
|
|
8046
|
+
aiAct: {
|
|
8047
|
+
role: "Deployer",
|
|
8048
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8049
|
+
prohibitedPractices: [],
|
|
8050
|
+
art50Flags: ["ai-generated-content"],
|
|
8051
|
+
integratesThirdPartyGpai: true,
|
|
8052
|
+
upstreamGpaiProvider: "Anthropic (Claude 3.5 Sonnet)",
|
|
8053
|
+
upstreamGpaiInfoAvailable: true,
|
|
8054
|
+
aiLiteracy: {
|
|
8055
|
+
status: "completed",
|
|
8056
|
+
owner: "Dr. P. Lindqvist",
|
|
8057
|
+
lastTrainedAt: "2025-11-30",
|
|
8058
|
+
note: "Safety reporting team trained on the review checklist and disclosure wording."
|
|
8059
|
+
}
|
|
8060
|
+
}
|
|
8061
|
+
},
|
|
8062
|
+
"Marketing Content Assistant": {
|
|
8063
|
+
name: "HCP Content Studio",
|
|
8064
|
+
description: "Generates first-draft HCP-facing materials aligned to medical voice and regulated-claim guardrails.",
|
|
8065
|
+
aiCategory: "Generative AI",
|
|
8066
|
+
businessUnit: "Medical Affairs",
|
|
8067
|
+
owner: "L. Marchetti",
|
|
8068
|
+
tags: ["clinical", "patient-experience"],
|
|
8069
|
+
decisionLog: [
|
|
8070
|
+
{ owner: "L. Marchetti", rationale: "Approved for production after medical-voice and regulated-claims checks passed." }
|
|
8071
|
+
],
|
|
8072
|
+
aiAct: {
|
|
8073
|
+
role: "Deployer",
|
|
8074
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8075
|
+
prohibitedPractices: [],
|
|
8076
|
+
art50Flags: ["ai-generated-content"],
|
|
8077
|
+
integratesThirdPartyGpai: true,
|
|
8078
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
8079
|
+
upstreamGpaiInfoAvailable: true,
|
|
8080
|
+
aiLiteracy: {
|
|
8081
|
+
status: "completed",
|
|
8082
|
+
owner: "L. Marchetti",
|
|
8083
|
+
lastTrainedAt: "2026-01-15",
|
|
8084
|
+
note: "Medical Affairs teams trained on regulated-claims guardrails."
|
|
8085
|
+
}
|
|
8086
|
+
}
|
|
8087
|
+
},
|
|
8088
|
+
"HR Knowledge Assistant": {
|
|
8089
|
+
name: "Care-Team Knowledge Companion",
|
|
8090
|
+
description: "Internal Q&A surface for care-team protocols, on-call pathways, learning materials and onboarding for new clinicians.",
|
|
8091
|
+
aiCategory: "Knowledge Retrieval",
|
|
8092
|
+
businessUnit: "People & Culture",
|
|
8093
|
+
owner: "H. S\xF8rensen",
|
|
8094
|
+
tags: ["internal", "patient-experience"],
|
|
8095
|
+
decisionLog: [
|
|
8096
|
+
{ owner: "H. S\xF8rensen", rationale: "Rolled out organisation-wide after the pilot deflected around 40% of care-team support requests." }
|
|
8097
|
+
],
|
|
8098
|
+
aiAct: {
|
|
8099
|
+
role: "Deployer",
|
|
8100
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8101
|
+
prohibitedPractices: [],
|
|
8102
|
+
art50Flags: ["chatbot"],
|
|
8103
|
+
integratesThirdPartyGpai: true,
|
|
8104
|
+
upstreamGpaiProvider: "OpenAI (GPT-4o)",
|
|
8105
|
+
upstreamGpaiInfoAvailable: false,
|
|
8106
|
+
aiLiteracy: {
|
|
8107
|
+
status: "completed",
|
|
8108
|
+
owner: "H. S\xF8rensen",
|
|
8109
|
+
lastTrainedAt: "2025-12-10",
|
|
8110
|
+
note: "Care-team leads trained on chatbot disclosure."
|
|
8111
|
+
}
|
|
8112
|
+
}
|
|
8113
|
+
},
|
|
8114
|
+
"Finance Forecast Commentary Assistant": {
|
|
8115
|
+
name: "R&D Investment Planning Lab",
|
|
8116
|
+
description: "Research lab drafting commentary on R&D programme variances, drawing on portfolio data and management overlays.",
|
|
8117
|
+
aiCategory: "Decision Support",
|
|
8118
|
+
businessUnit: "R&D Strategy",
|
|
8119
|
+
owner: "D. Achterberg",
|
|
8120
|
+
tags: ["r&d", "research", "applied-research"],
|
|
8121
|
+
decisionLog: [
|
|
8122
|
+
{ owner: "D. Achterberg", rationale: "Pilot greenlit for the next two planning cycles before a broader rollout decision." }
|
|
8123
|
+
],
|
|
8124
|
+
aiAct: {
|
|
8125
|
+
role: "Not-in-Scope",
|
|
8126
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8127
|
+
prohibitedPractices: [],
|
|
8128
|
+
art50Flags: [],
|
|
8129
|
+
aiLiteracy: {
|
|
8130
|
+
status: "in-progress",
|
|
8131
|
+
owner: "D. Achterberg",
|
|
8132
|
+
note: "Planning-team enablement drafted; AI Act scoping not applicable to this tool."
|
|
8133
|
+
}
|
|
8134
|
+
}
|
|
8135
|
+
},
|
|
8136
|
+
"AI Governance Register": {
|
|
8137
|
+
name: "R&D Portfolio & IP Register",
|
|
8138
|
+
description: "Central register of R&D programmes, IP positions, owners and stage-gate cadence with workflow for attestations.",
|
|
8139
|
+
aiCategory: "Compliance / Risk AI",
|
|
8140
|
+
businessUnit: "R&D Strategy",
|
|
8141
|
+
owner: "Dr. C. Ibrahim",
|
|
8142
|
+
tags: ["r&d", "governance", "tech-scouting"],
|
|
8143
|
+
decisionLog: [
|
|
8144
|
+
{ owner: "Dr. C. Ibrahim", rationale: "Paused while the R&D Steering Committee reviews scope and ownership boundaries with Quality & Safety." }
|
|
8145
|
+
],
|
|
8146
|
+
aiAct: {
|
|
8147
|
+
role: "Not-in-Scope",
|
|
8148
|
+
gpai: { isGpai: false, systemicRisk: false },
|
|
8149
|
+
prohibitedPractices: [],
|
|
8150
|
+
art50Flags: [],
|
|
8151
|
+
aiLiteracy: {
|
|
8152
|
+
status: "in-progress",
|
|
8153
|
+
owner: "Dr. C. Ibrahim",
|
|
8154
|
+
note: "Curriculum for register stewards drafted; the register itself is not an AI system in scope."
|
|
8155
|
+
}
|
|
8156
|
+
}
|
|
8157
|
+
}
|
|
8158
|
+
};
|
|
8159
|
+
var MODES = {
|
|
8160
|
+
ai: {
|
|
8161
|
+
id: "ai",
|
|
8162
|
+
displayName: { en: "AI Portfolio", de: "KI-Portfolio" },
|
|
8163
|
+
shortLabel: { en: "AI", de: "KI" },
|
|
8164
|
+
description: {
|
|
8165
|
+
en: "Steer a portfolio of AI initiatives. Categories, sub-metrics and demo data reflect AI-specific patterns (model robustness, explainability, regulatory exposure for AI).",
|
|
8166
|
+
de: "Steuern Sie ein Portfolio von KI-Initiativen. Kategorien, Sub-Metriken und Demodaten spiegeln KI-spezifische Muster wider (Modellrobustheit, Erkl\xE4rbarkeit, regulatorische Exposition f\xFCr KI)."
|
|
8167
|
+
},
|
|
8168
|
+
overrides: { en: EN_AI, de: DE_AI },
|
|
8169
|
+
demoOverrides: {},
|
|
8170
|
+
defaultCompanyName: "Aegis & Cortex Ltd"
|
|
8171
|
+
},
|
|
8172
|
+
digital: {
|
|
8173
|
+
id: "digital",
|
|
8174
|
+
displayName: { en: "Digital Portfolio", de: "Digital-Portfolio" },
|
|
8175
|
+
shortLabel: { en: "Digital", de: "Digital" },
|
|
8176
|
+
description: {
|
|
8177
|
+
en: "Steer a portfolio of digital projects (platforms, channels, workflow automation, RegTech). Same scoring engine and structure as the AI mode; categories, demo data and labels are themed for digital.",
|
|
8178
|
+
de: "Steuern Sie ein Portfolio digitaler Projekte (Plattformen, Kan\xE4le, Workflow-Automatisierung, RegTech). Gleiche Bewertungslogik und Struktur wie im KI-Modus; Kategorien, Demodaten und Beschriftungen sind f\xFCr Digital angepasst."
|
|
8179
|
+
},
|
|
8180
|
+
overrides: { en: EN_DIGITAL, de: DE_DIGITAL },
|
|
8181
|
+
demoOverrides: DEMO_DIGITAL,
|
|
8182
|
+
defaultCompanyName: "Lightstone Pixel Bank"
|
|
8183
|
+
},
|
|
8184
|
+
innovation: {
|
|
8185
|
+
id: "innovation",
|
|
8186
|
+
displayName: { en: "Innovation Portfolio", de: "Innovations-Portfolio" },
|
|
8187
|
+
shortLabel: { en: "Innovation", de: "Innovation" },
|
|
8188
|
+
description: {
|
|
8189
|
+
en: "Steer a portfolio of innovation initiatives, pilots and experiments. Same scoring engine and structure as the AI mode; categories, demo data and labels are themed for innovation work.",
|
|
8190
|
+
de: "Steuern Sie ein Portfolio von Innovationsinitiativen, Piloten und Experimenten. Gleiche Bewertungslogik und Struktur wie im KI-Modus; Kategorien, Demodaten und Beschriftungen sind f\xFCr Innovationsarbeit angepasst."
|
|
8191
|
+
},
|
|
8192
|
+
overrides: { en: EN_INNOVATION, de: DE_INNOVATION },
|
|
8193
|
+
demoOverrides: DEMO_INNOVATION,
|
|
8194
|
+
defaultCompanyName: "Halcyon Biosciences AG"
|
|
8195
|
+
}
|
|
8196
|
+
};
|
|
8197
|
+
function getModeOverride(mode, language, key) {
|
|
8198
|
+
const md = MODES[mode];
|
|
8199
|
+
if (!md) return void 0;
|
|
8200
|
+
const dict = md.overrides[language];
|
|
8201
|
+
if (dict && key in dict) return dict[key];
|
|
8202
|
+
const enDict = md.overrides.en;
|
|
8203
|
+
if (enDict && key in enDict) return enDict[key];
|
|
8204
|
+
return void 0;
|
|
8205
|
+
}
|
|
8206
|
+
var AI_GATE_ITEMS = [
|
|
8207
|
+
{ id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
|
|
8208
|
+
{ id: "dpia", label: { en: "DPIA / risk assessment signed", de: "DSFA / Risikobewertung unterzeichnet" } },
|
|
8209
|
+
{ id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
|
|
8210
|
+
{ id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } },
|
|
8211
|
+
{ id: "hitl", label: { en: "Human-in-the-loop posture confirmed", de: "Human-in-the-Loop-Haltung best\xE4tigt" } }
|
|
8212
|
+
];
|
|
8213
|
+
var DIGITAL_GATE_ITEMS = [
|
|
8214
|
+
{ id: "businessCase", label: { en: "Business case validated", de: "Business Case validiert" } },
|
|
8215
|
+
{ id: "architecture", label: { en: "Architecture review", de: "Architektur-Review" } },
|
|
8216
|
+
{ id: "owner", label: { en: "Owner accountable", de: "Owner verantwortlich" } },
|
|
8217
|
+
{ id: "operability", label: { en: "Operability check", de: "Betreibbarkeits-Check" } },
|
|
8218
|
+
{ id: "compliance", label: { en: "Compliance review", de: "Compliance-Review" } }
|
|
8219
|
+
];
|
|
8220
|
+
var INNOVATION_GATE_ITEMS = [
|
|
8221
|
+
{ id: "hypothesis", label: { en: "Hypothesis & success metric defined", de: "Hypothese & Erfolgsmetrik definiert" } },
|
|
8222
|
+
{ id: "validation", label: { en: "Validation evidence captured", de: "Validierungsnachweise erfasst" } },
|
|
8223
|
+
{ id: "sponsor", label: { en: "Stage-gate sponsor sign-off", de: "Sponsor-Freigabe (Stage-Gate)" } },
|
|
8224
|
+
{ id: "nextStep", label: { en: "Next-step option declared (scale / pivot / stop)", de: "N\xE4chster Schritt benannt (skalieren / pivotieren / stoppen)" } }
|
|
8225
|
+
];
|
|
8226
|
+
function buildDefaultsForMode(items) {
|
|
8227
|
+
return {
|
|
8228
|
+
"idea-pilot": items.map((i) => ({ ...i })),
|
|
8229
|
+
"pilot-scaling": items.map((i) => ({ ...i })),
|
|
8230
|
+
"scaling-production": items.map((i) => ({ ...i }))
|
|
8231
|
+
};
|
|
8232
|
+
}
|
|
8233
|
+
var DEFAULT_GATE_CHECKLISTS_BY_MODE = {
|
|
8234
|
+
ai: buildDefaultsForMode(AI_GATE_ITEMS),
|
|
8235
|
+
digital: buildDefaultsForMode(DIGITAL_GATE_ITEMS),
|
|
8236
|
+
innovation: buildDefaultsForMode(INNOVATION_GATE_ITEMS)
|
|
8237
|
+
};
|
|
8238
|
+
|
|
8239
|
+
// ../../initiative-model/src/dimensions.ts
|
|
8240
|
+
var DIMENSION_KEYS = ["valueScale", "feasibility", "governance", "strategic"];
|
|
8241
|
+
var VALUE_SUBS = [
|
|
8242
|
+
"frequencyOfProcess",
|
|
8243
|
+
"labourIntensity",
|
|
8244
|
+
"operationalLeverage",
|
|
8245
|
+
"scalability",
|
|
8246
|
+
"volumeSensitivity",
|
|
8247
|
+
"costReduction",
|
|
8248
|
+
"revenueImpact"
|
|
8249
|
+
];
|
|
8250
|
+
var FEASIBILITY_SUBS = [
|
|
8251
|
+
"dataAvailability",
|
|
8252
|
+
"dataQuality",
|
|
8253
|
+
"modelRobustness",
|
|
8254
|
+
"reproducibility",
|
|
8255
|
+
"explainability",
|
|
8256
|
+
"technologyMaturity",
|
|
8257
|
+
"integrationFeasibility"
|
|
8258
|
+
];
|
|
8259
|
+
var GOVERNANCE_SUBS = [
|
|
8260
|
+
"regulatoryExposure",
|
|
8261
|
+
"humanOversight",
|
|
8262
|
+
"decisionCriticality",
|
|
8263
|
+
"reputationalRisk",
|
|
8264
|
+
"operationalDependency",
|
|
8265
|
+
"auditability",
|
|
8266
|
+
"monitoringComplexity",
|
|
8267
|
+
"cybersecurityExposure"
|
|
8268
|
+
];
|
|
8269
|
+
var STRATEGIC_SUBS = [
|
|
8270
|
+
"strategicDifferentiation",
|
|
8271
|
+
"qualityImprovement",
|
|
8272
|
+
"operatingModelAlignment",
|
|
8273
|
+
"transformationPotential",
|
|
8274
|
+
"competitiveAdvantage",
|
|
8275
|
+
"clientImpact",
|
|
8276
|
+
"organisationalLeverage",
|
|
8277
|
+
"innovationCapability"
|
|
8278
|
+
];
|
|
8279
|
+
var DIMENSION_SUBS = {
|
|
8280
|
+
valueScale: VALUE_SUBS,
|
|
8281
|
+
feasibility: FEASIBILITY_SUBS,
|
|
8282
|
+
governance: GOVERNANCE_SUBS,
|
|
8283
|
+
strategic: STRATEGIC_SUBS
|
|
8284
|
+
};
|
|
8285
|
+
var ALL_SLIDER_IDS = [...VALUE_SUBS, ...FEASIBILITY_SUBS, ...GOVERNANCE_SUBS, ...STRATEGIC_SUBS];
|
|
8286
|
+
var SLIDER_QUADRANT = (() => {
|
|
8287
|
+
const out = {};
|
|
8288
|
+
for (const dim of DIMENSION_KEYS) for (const k of DIMENSION_SUBS[dim]) out[k] = dim;
|
|
8289
|
+
return out;
|
|
8290
|
+
})();
|
|
8291
|
+
|
|
8292
|
+
// src/catalog.ts
|
|
8293
|
+
var enumValues = (e) => Object.values(e);
|
|
8294
|
+
var STATUS_VALUES = enumValues(InitiativeStatus);
|
|
8295
|
+
var VENDOR_DEPS = enumValues(InitiativeVendorDependency);
|
|
8296
|
+
var SOLUTION_TYPES = enumValues(InitiativeSolutionType);
|
|
8297
|
+
var CONFIDENCES = enumValues(EvaluationDimensionConfidence);
|
|
8298
|
+
var AI_RISK_TIERS = enumValues(InitiativeAiRiskTier);
|
|
8299
|
+
var HITL_POSTURES = enumValues(InitiativeHitlPosture);
|
|
8300
|
+
var DPIA_STATUSES = enumValues(InitiativeDpiaStatus);
|
|
8301
|
+
var MODEL_CARD_STATUSES = enumValues(InitiativeModelCardStatus);
|
|
8302
|
+
var AI_ACT_ROLES = enumValues(AIActDataRole);
|
|
8303
|
+
var DECISION_KINDS = enumValues(DecisionEntryKind);
|
|
8304
|
+
var RAG_VALUES = enumValues(StatusReportDimensionEntryRag);
|
|
8305
|
+
var PORTFOLIO_MODES2 = PORTFOLIO_MODES;
|
|
8306
|
+
var LANGUAGES2 = LANGUAGES;
|
|
8307
|
+
var AI_ACT_VOCABULARIES = {
|
|
8308
|
+
prohibitedPractices: AI_ACT_PROHIBITED_PRACTICES,
|
|
8309
|
+
art50Flags: AI_ACT_ART50_FLAGS,
|
|
8310
|
+
annexIIICategory: ANNEX_III_CATEGORIES,
|
|
8311
|
+
artifactKeys: ACT_ARTIFACT_KEYS,
|
|
8312
|
+
obligationKeys: OPERATIONAL_OBLIGATION_KEYS
|
|
8313
|
+
};
|
|
6237
8314
|
var sd = (key, en, de, helpEn, helpDe) => ({
|
|
6238
8315
|
key,
|
|
6239
8316
|
label: { en, de },
|
|
@@ -6475,17 +8552,49 @@ var DIMENSIONS = [
|
|
|
6475
8552
|
]
|
|
6476
8553
|
}
|
|
6477
8554
|
];
|
|
6478
|
-
|
|
6479
|
-
|
|
6480
|
-
|
|
8555
|
+
function modeOverlays() {
|
|
8556
|
+
return MODE_OVERLAYS;
|
|
8557
|
+
}
|
|
8558
|
+
function computeModeOverlays() {
|
|
8559
|
+
const out = {};
|
|
8560
|
+
for (const mode of PORTFOLIO_MODES2) {
|
|
8561
|
+
if (mode === "ai") continue;
|
|
8562
|
+
const overlay = { dimensions: {}, subs: {} };
|
|
8563
|
+
let any = false;
|
|
8564
|
+
for (const lang of LANGUAGES2) {
|
|
8565
|
+
const dict = MODES[mode].overrides[lang] ?? {};
|
|
8566
|
+
for (const dim of DIMENSIONS) {
|
|
8567
|
+
const t = dict[`dim.${dim.key}.title`];
|
|
8568
|
+
if (t && t !== dim.title[lang]) {
|
|
8569
|
+
(overlay.dimensions[dim.key] ??= {})[lang] = t;
|
|
8570
|
+
any = true;
|
|
8571
|
+
}
|
|
8572
|
+
for (const s of dim.subs) {
|
|
8573
|
+
const label = dict[`sub.${s.key}`];
|
|
8574
|
+
const help = dict[`subHelp.${s.key}`];
|
|
8575
|
+
const entry = {};
|
|
8576
|
+
if (label && label !== s.label[lang]) entry.label = label;
|
|
8577
|
+
if (help && help !== s.help[lang]) entry.help = help;
|
|
8578
|
+
if (entry.label || entry.help) {
|
|
8579
|
+
(overlay.subs[s.key] ??= {})[lang] = entry;
|
|
8580
|
+
any = true;
|
|
8581
|
+
}
|
|
8582
|
+
}
|
|
8583
|
+
}
|
|
8584
|
+
}
|
|
8585
|
+
if (any) out[mode] = overlay;
|
|
8586
|
+
}
|
|
8587
|
+
return out;
|
|
8588
|
+
}
|
|
8589
|
+
var MODE_OVERLAYS = computeModeOverlays();
|
|
6481
8590
|
var REQUIRED_FIELDS = [
|
|
6482
8591
|
{ key: "name", type: "string", hint: { en: "Short initiative name", de: "Kurzer Name der Initiative" } },
|
|
6483
8592
|
{ key: "businessUnit", type: "string", hint: { en: "Owning business unit (use the org's own BU names)", de: "Zust\xE4ndiger Gesch\xE4ftsbereich (Namen der Organisation verwenden)" } },
|
|
6484
8593
|
{ key: "owner", type: "string", hint: { en: "Accountable person", de: "Verantwortliche Person" } },
|
|
6485
8594
|
{ key: "description", type: "string", hint: { en: "One or two sentences on what it does and for whom", de: "Ein bis zwei S\xE4tze: was sie tut und f\xFCr wen" } },
|
|
6486
8595
|
{ key: "status", type: "enum", values: STATUS_VALUES, hint: { en: "Lifecycle stage", de: "Lebenszyklus-Phase" } },
|
|
6487
|
-
{ key: "timelineStart", type: "date", hint: { en: "
|
|
6488
|
-
{ key: "timelineEnd", type: "date", hint: { en: "
|
|
8596
|
+
{ key: "timelineStart", type: "date", hint: { en: "dd/mm/yyyy (stored as yyyy-mm-dd)", de: "TT/MM/JJJJ (gespeichert als JJJJ-MM-TT)" } },
|
|
8597
|
+
{ key: "timelineEnd", type: "date", hint: { en: "dd/mm/yyyy (stored as yyyy-mm-dd)", de: "TT/MM/JJJJ (gespeichert als JJJJ-MM-TT)" } },
|
|
6489
8598
|
{ key: "budget", type: "number", hint: { en: "Total budget in the org's currency", de: "Gesamtbudget in der Organisationsw\xE4hrung" } },
|
|
6490
8599
|
{ key: "vendorDependency", type: "enum", values: VENDOR_DEPS, hint: { en: "How dependent on external vendors", de: "Abh\xE4ngigkeit von externen Anbietern" } },
|
|
6491
8600
|
{ key: "solutionType", type: "enum", values: SOLUTION_TYPES, hint: { en: "Built internally, bought, or hybrid", de: "Eigenbau, Zukauf oder hybrid" } },
|
|
@@ -6493,17 +8602,84 @@ var REQUIRED_FIELDS = [
|
|
|
6493
8602
|
];
|
|
6494
8603
|
var OPTIONAL_SECTIONS = [
|
|
6495
8604
|
{ key: "tags", hint: { en: "Free-text tags", de: "Freie Schlagworte" } },
|
|
6496
|
-
{
|
|
8605
|
+
{
|
|
8606
|
+
key: "docsUrl / pmUrl",
|
|
8607
|
+
hint: {
|
|
8608
|
+
en: "Links to the project documentation (Confluence, SharePoint, \u2026) and the project-management tool (Jira, MS Project, \u2026)",
|
|
8609
|
+
de: "Links zur Projektdokumentation (Confluence, SharePoint, \u2026) und zum Projektmanagement-Werkzeug (Jira, MS Project, \u2026)"
|
|
8610
|
+
}
|
|
8611
|
+
},
|
|
8612
|
+
{
|
|
8613
|
+
key: "dependsOn",
|
|
8614
|
+
hint: {
|
|
8615
|
+
en: "Ids of initiatives this one depends on. With the portfolio-context file, pick them from read_portfolio_context \u2192 lists.initiatives (id + name); without it, leave empty and link dependencies in the app.",
|
|
8616
|
+
de: "IDs vorgelagerter Initiativen. Mit der Portfolio-Kontext-Datei aus read_portfolio_context \u2192 lists.initiatives (ID + Name) w\xE4hlen; ohne sie leer lassen und in der App verkn\xFCpfen."
|
|
8617
|
+
}
|
|
8618
|
+
},
|
|
6497
8619
|
{ key: "aiRiskTier / hitlPosture / dpiaStatus / modelCardStatus", hint: { en: "EU AI Act governance flags", de: "EU-AI-Act-Governance-Flags" } },
|
|
6498
|
-
{
|
|
8620
|
+
{
|
|
8621
|
+
key: "aiAct",
|
|
8622
|
+
hint: {
|
|
8623
|
+
en: "Full EU AI Act block \u2014 keys exactly as in sectionShapes.aiAct: role, gpai, prohibitedPractices, art50Flags, annexIIICategory, annexHighRiskException, annexExceptionRationale, classificationRationale, artifacts, obligations, registration, aiLiteracy, incidents\u2026; ids from aiActVocabularies",
|
|
8624
|
+
de: "Vollst\xE4ndiger EU-AI-Act-Block \u2014 Schl\xFCssel exakt wie in sectionShapes.aiAct; IDs aus aiActVocabularies"
|
|
8625
|
+
}
|
|
8626
|
+
},
|
|
6499
8627
|
{ key: "economics", hint: { en: "Benefit/cost P10/P50/P90 ranges, ramp, confidence, discount rate", de: "Nutzen/Kosten P10/P50/P90, Ramp, Konfidenz, Diskontsatz" } },
|
|
6500
8628
|
{ key: "decisionLog", hint: { en: "Dated decisions (go/pause/stop/rescope/rebudget/other)", de: "Datierte Entscheidungen" } },
|
|
6501
8629
|
{ key: "statusReports", hint: { en: "Dated RAG reports (scope/timeline/budget/skills)", de: "Datierte RAG-Berichte" } },
|
|
6502
|
-
{
|
|
8630
|
+
{
|
|
8631
|
+
key: "requiredSkills",
|
|
8632
|
+
hint: {
|
|
8633
|
+
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.",
|
|
8634
|
+
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."
|
|
8635
|
+
}
|
|
8636
|
+
}
|
|
6503
8637
|
];
|
|
6504
|
-
function
|
|
8638
|
+
function describeZodShape(schema, depth = 0) {
|
|
8639
|
+
const def = schema?._def;
|
|
8640
|
+
if (!def || depth > 8) return "unknown";
|
|
8641
|
+
const tn = def["typeName"];
|
|
8642
|
+
switch (tn) {
|
|
8643
|
+
case "ZodOptional":
|
|
8644
|
+
case "ZodNullable":
|
|
8645
|
+
case "ZodDefault":
|
|
8646
|
+
return describeZodShape(def["innerType"], depth);
|
|
8647
|
+
case "ZodEffects":
|
|
8648
|
+
return describeZodShape(def["schema"], depth);
|
|
8649
|
+
case "ZodString":
|
|
8650
|
+
return "string";
|
|
8651
|
+
case "ZodNumber":
|
|
8652
|
+
return "number";
|
|
8653
|
+
case "ZodBoolean":
|
|
8654
|
+
return "boolean";
|
|
8655
|
+
case "ZodEnum":
|
|
8656
|
+
return `enum[${def["values"].join("|")}]`;
|
|
8657
|
+
case "ZodLiteral":
|
|
8658
|
+
return `literal[${String(def["value"])}]`;
|
|
8659
|
+
case "ZodArray":
|
|
8660
|
+
return [describeZodShape(def["type"], depth + 1)];
|
|
8661
|
+
case "ZodRecord":
|
|
8662
|
+
return { "<key>": describeZodShape(def["valueType"], depth + 1) };
|
|
8663
|
+
case "ZodObject": {
|
|
8664
|
+
const shape = def["shape"]();
|
|
8665
|
+
const out = {};
|
|
8666
|
+
for (const [k, v] of Object.entries(shape)) {
|
|
8667
|
+
const optional = v?.isOptional?.() === true;
|
|
8668
|
+
out[optional ? `${k}?` : k] = describeZodShape(v, depth + 1);
|
|
8669
|
+
}
|
|
8670
|
+
return out;
|
|
8671
|
+
}
|
|
8672
|
+
case "ZodUnion":
|
|
8673
|
+
return def["options"].map((o) => describeZodShape(o, depth + 1));
|
|
8674
|
+
case "ZodIntersection":
|
|
8675
|
+
return { allOf: [describeZodShape(def["left"], depth + 1), describeZodShape(def["right"], depth + 1)] };
|
|
8676
|
+
default:
|
|
8677
|
+
return tn ?? "unknown";
|
|
8678
|
+
}
|
|
8679
|
+
}
|
|
8680
|
+
function buildSchemaDescriptor(sectionShapes) {
|
|
6505
8681
|
return {
|
|
6506
|
-
about: "BICon initiative composer. Collect the required fields, then rate every sub-dimension 0\u2013100 (higher = more of the named quality) and a confidence per dimension. Dimension scores are DERIVED (mean of subs) \u2014 never ask the user for them. Values are used verbatim; enum values must match exactly.",
|
|
8682
|
+
about: "BICon initiative composer. Collect the required fields, then rate every sub-dimension 0\u2013100 (higher = more of the named quality) and a confidence per dimension. Dimension scores are DERIVED (mean of subs) \u2014 never ask the user for them. Values are used verbatim; enum values must match exactly; unknown keys are rejected. Dates: talk dd/mm/yyyy with the user (dd/mm/yyyy, dd.mm.yyyy and yyyy-mm-dd are all accepted; stored as yyyy-mm-dd). Row ids of decision-log entries, status reports and incidents are minted by the Composer \u2014 never invent ids. To UPDATE an existing initiative pass its id as `id`; omit it for a new one.",
|
|
6507
8683
|
requiredFields: REQUIRED_FIELDS,
|
|
6508
8684
|
enums: {
|
|
6509
8685
|
status: STATUS_VALUES,
|
|
@@ -6525,124 +8701,550 @@ function buildSchemaDescriptor() {
|
|
|
6525
8701
|
confidence: CONFIDENCES,
|
|
6526
8702
|
subs: d.subs
|
|
6527
8703
|
})),
|
|
8704
|
+
// The wording above is the app's AI-portfolio wording. In a digital or
|
|
8705
|
+
// innovation portfolio the app relabels the entries listed here (same
|
|
8706
|
+
// keys, same 0–100 scale) — ask the user which mode their portfolio is in
|
|
8707
|
+
// and interview with that mode's wording. Missing entries = unchanged.
|
|
8708
|
+
portfolioModes: {
|
|
8709
|
+
note: "Ask which portfolio mode the user works in (ai | digital | innovation) \u2014 or read it from the portfolio-context file. Keys and scale never change; only the wording below does. Whether EU-AI-Act fields are kept depends on the organisation's AI-Act module switch (on by default in AI portfolios, configurable in every mode), not on the mode itself.",
|
|
8710
|
+
overlays: modeOverlays()
|
|
8711
|
+
},
|
|
6528
8712
|
optionalSections: OPTIONAL_SECTIONS,
|
|
6529
|
-
|
|
8713
|
+
// Exact shapes of the object/array sections (aiAct, economics, actuals,
|
|
8714
|
+
// decisionLog, statusReports, requiredSkills). Keys ending in "?" are
|
|
8715
|
+
// optional; "enum[a|b]" lists the allowed values; "<key>" marks a map.
|
|
8716
|
+
// Pass these sections as JSON objects/arrays. Any key not listed is
|
|
8717
|
+
// rejected with its path.
|
|
8718
|
+
sectionShapes,
|
|
8719
|
+
// The AI Act block's controlled vocabularies (see the note on the export).
|
|
8720
|
+
aiActVocabularies: {
|
|
8721
|
+
...AI_ACT_VOCABULARIES,
|
|
8722
|
+
note: "prohibitedPractices/art50Flags: arrays of these ids. artifacts/obligations: maps keyed by these ids. annexIIICategory: one of these, or omit when no Annex III area applies (record the reasoning in classificationRationale; annexExceptionRationale is only for an Art. 6(3) exception claim). Empty is honest; invented values are rejected."
|
|
8723
|
+
},
|
|
8724
|
+
portfolioContext: "Ask the user for the organisation's portfolio-context file first (in the app: Import/Export \u2192 'Download portfolio context'). Call read_portfolio_context on it: it returns the interview plan in the organisation's own wording, the sub-dimensions that are switched off, and the organisation's business units, categories, tags, skills and initiatives \u2014 with the file, business unit and category MUST be from those lists (no inventing) and skill / dependency ids are validated. Pass the same context to assemble_initiative and export_initiative_file. Without the file, interview with the wording below and treat business unit / category as free text.",
|
|
8725
|
+
handoff: "Call assemble_initiative with the compact spec (+ context), review derivedScores (and any warnings) with the user, then call export_initiative_file with the SAME spec (+ context) \u2192 save the JSON \u2192 in the app: Import/Export \u2192 Single initiative \u2192 drop the file \u2192 'Add as new' \u2192 Confirm. If the initiative carries EU-AI-Act data, the organisation's EU-AI-Act module must be switched on (Settings \u203A AI Act) when importing."
|
|
8726
|
+
};
|
|
8727
|
+
}
|
|
8728
|
+
|
|
8729
|
+
// src/schema.ts
|
|
8730
|
+
function contractObjectShape() {
|
|
8731
|
+
const def = CreateInitiativeBody._def;
|
|
8732
|
+
if (def.typeName === "ZodIntersection" && def.left && def.right) return { ...def.left.shape, ...def.right.shape };
|
|
8733
|
+
return CreateInitiativeBody.shape;
|
|
8734
|
+
}
|
|
8735
|
+
var contractShape = contractObjectShape();
|
|
8736
|
+
function contractSection(key) {
|
|
8737
|
+
const s = contractShape[key];
|
|
8738
|
+
if (!s) throw new Error(`contract has no section ${key}`);
|
|
8739
|
+
return s instanceof external_exports.ZodOptional ? s.unwrap() : s;
|
|
8740
|
+
}
|
|
8741
|
+
var keepDescription = (from, to) => from.description ? to.describe(from.description) : to;
|
|
8742
|
+
var ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
|
|
8743
|
+
var DMY = /^(\d{1,2})[./](\d{1,2})[./](\d{4})$/;
|
|
8744
|
+
function normaliseDateInput(v) {
|
|
8745
|
+
if (typeof v !== "string") return v;
|
|
8746
|
+
const m = DMY.exec(v.trim());
|
|
8747
|
+
if (!m) return v;
|
|
8748
|
+
const [, d, mo, y] = m;
|
|
8749
|
+
return `${y}-${mo.padStart(2, "0")}-${d.padStart(2, "0")}`;
|
|
8750
|
+
}
|
|
8751
|
+
function isCalendarDate(s) {
|
|
8752
|
+
if (!ISO_DATE.test(s)) return false;
|
|
8753
|
+
const [y, m, d] = s.split("-").map(Number);
|
|
8754
|
+
const dt = new Date(Date.UTC(y, m - 1, d));
|
|
8755
|
+
return dt.getUTCFullYear() === y && dt.getUTCMonth() === m - 1 && dt.getUTCDate() === d;
|
|
8756
|
+
}
|
|
8757
|
+
var dateField = (what) => external_exports.preprocess(normaliseDateInput, external_exports.string().refine(isCalendarDate, { message: `${what} must be a real calendar date \u2014 dd/mm/yyyy or yyyy-mm-dd` })).describe("dd/mm/yyyy (or yyyy-mm-dd)");
|
|
8758
|
+
var DATE_LIKE_KEY = /^date$|Date$|At$/;
|
|
8759
|
+
var MINTED_KEYS = /* @__PURE__ */ new Set(["id", "createdAt", "updatedAt"]);
|
|
8760
|
+
var holdsString = (s) => s instanceof external_exports.ZodString || s instanceof external_exports.ZodOptional && s.unwrap() instanceof external_exports.ZodString || s instanceof external_exports.ZodNullable && s.unwrap() instanceof external_exports.ZodString;
|
|
8761
|
+
function deepStrict(schema) {
|
|
8762
|
+
const walk = (s, inArrayItem = false) => {
|
|
8763
|
+
if (s instanceof external_exports.ZodObject) {
|
|
8764
|
+
const next = {};
|
|
8765
|
+
for (const [k, v] of Object.entries(s.shape)) {
|
|
8766
|
+
let field = walk(v, false);
|
|
8767
|
+
if (inArrayItem && MINTED_KEYS.has(k) && !(field instanceof external_exports.ZodOptional)) field = field.optional();
|
|
8768
|
+
if (DATE_LIKE_KEY.test(k) && holdsString(field)) field = keepDescription(field, external_exports.preprocess(normaliseDateInput, field));
|
|
8769
|
+
next[k] = field;
|
|
8770
|
+
}
|
|
8771
|
+
return keepDescription(s, external_exports.object(next).strict());
|
|
8772
|
+
}
|
|
8773
|
+
if (s instanceof external_exports.ZodOptional) return keepDescription(s, walk(s.unwrap(), inArrayItem).optional());
|
|
8774
|
+
if (s instanceof external_exports.ZodNullable) return keepDescription(s, walk(s.unwrap(), inArrayItem).nullable());
|
|
8775
|
+
if (s instanceof external_exports.ZodDefault) return keepDescription(s, walk(s.removeDefault(), inArrayItem).default(s._def.defaultValue()));
|
|
8776
|
+
if (s instanceof external_exports.ZodEffects) return new external_exports.ZodEffects({ ...s._def, schema: walk(s._def.schema, inArrayItem) });
|
|
8777
|
+
if (s instanceof external_exports.ZodArray) return new external_exports.ZodArray({ ...s._def, type: walk(s.element, true) });
|
|
8778
|
+
if (s instanceof external_exports.ZodRecord) return new external_exports.ZodRecord({ ...s._def, valueType: walk(s.valueSchema, inArrayItem) });
|
|
8779
|
+
if (s instanceof external_exports.ZodUnion) return new external_exports.ZodUnion({ ...s._def, options: s.options.map((o) => walk(o, inArrayItem)) });
|
|
8780
|
+
if (s instanceof external_exports.ZodIntersection) {
|
|
8781
|
+
const { left, right } = s._def;
|
|
8782
|
+
if (left instanceof external_exports.ZodObject && right instanceof external_exports.ZodObject) return keepDescription(s, walk(left.merge(right), inArrayItem));
|
|
8783
|
+
return new external_exports.ZodIntersection({ ...s._def, left: walk(left, inArrayItem), right: walk(right, inArrayItem) });
|
|
8784
|
+
}
|
|
8785
|
+
return s;
|
|
6530
8786
|
};
|
|
8787
|
+
return walk(schema);
|
|
8788
|
+
}
|
|
8789
|
+
function tryParseJson(s) {
|
|
8790
|
+
const t = s.trim();
|
|
8791
|
+
if (!(t.startsWith("{") || t.startsWith("["))) return s;
|
|
8792
|
+
try {
|
|
8793
|
+
return JSON.parse(t);
|
|
8794
|
+
} catch {
|
|
8795
|
+
return s;
|
|
8796
|
+
}
|
|
8797
|
+
}
|
|
8798
|
+
var parseIfString = (v) => typeof v === "string" ? tryParseJson(v) : v;
|
|
8799
|
+
function wireSection(inner, description) {
|
|
8800
|
+
return external_exports.preprocess(parseIfString, deepStrict(inner)).describe(description);
|
|
8801
|
+
}
|
|
8802
|
+
var SECTION_KEYS = ["aiAct", "economics", "actuals", "decisionLog", "statusReports", "requiredSkills"];
|
|
8803
|
+
var SECTION_SCHEMAS = Object.fromEntries(
|
|
8804
|
+
SECTION_KEYS.map((k) => [k, contractSection(k)])
|
|
8805
|
+
);
|
|
8806
|
+
var SECTION_DESCRIPTIONS = {
|
|
8807
|
+
aiAct: "EU AI Act block \u2014 see get_initiative_schema \u2192 sectionShapes.aiAct for the exact keys (role, gpai, prohibitedPractices, art50Flags, annexIIICategory, artifacts, obligations, registration, aiLiteracy, incidents\u2026) and aiActVocabularies for the allowed ids. Unknown keys are rejected. Incident ids/stamps are minted by the Composer \u2014 leave them out.",
|
|
8808
|
+
economics: "Economics block (P10/P50/P90 benefit & cost, ramp, confidence, discount rate) \u2014 see sectionShapes.economics.",
|
|
8809
|
+
actuals: "Actuals block (In Production only) \u2014 see sectionShapes.actuals.",
|
|
8810
|
+
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.",
|
|
8811
|
+
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.",
|
|
8812
|
+
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."
|
|
8813
|
+
};
|
|
8814
|
+
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()]));
|
|
8815
|
+
var requiredText = () => external_exports.string().trim().min(1, "must not be empty");
|
|
8816
|
+
var DEPENDS_ON_HINT = "the id of an initiative that exists in the organisation. With the portfolio context the Composer validates it (read_portfolio_context \u2192 lists.initiatives gives id + name); without it, only UUID-shaped ids are accepted \u2014 leave the list empty and link dependencies in the app when unsure";
|
|
8817
|
+
var dimensionInput = () => external_exports.object({
|
|
8818
|
+
subs: external_exports.record(external_exports.string(), external_exports.number()).optional().describe(
|
|
8819
|
+
"Named sub-dimension ratings 0\u2013100 \u2014 every ENABLED key of the dimension is required and no other key is accepted; switched-off ones (portfolio context) are left out"
|
|
8820
|
+
),
|
|
8821
|
+
confidence: external_exports.enum(CONFIDENCES)
|
|
8822
|
+
}).strict();
|
|
8823
|
+
var compactSpecSchema = external_exports.object({
|
|
8824
|
+
id: external_exports.string().trim().min(1).optional().describe(
|
|
8825
|
+
"ONLY to UPDATE an existing initiative: its id (from read_portfolio_context \u2192 lists.initiatives, or the app). The exported file then updates that initiative in place. Omit for a new initiative \u2014 never invent an id."
|
|
8826
|
+
),
|
|
8827
|
+
name: requiredText(),
|
|
8828
|
+
businessUnit: requiredText().describe("With a portfolio context: one of the organisation's business units (read_portfolio_context \u2192 lists.businessUnits)"),
|
|
8829
|
+
owner: requiredText(),
|
|
8830
|
+
description: requiredText(),
|
|
8831
|
+
status: external_exports.enum(STATUS_VALUES),
|
|
8832
|
+
timelineStart: dateField("timelineStart"),
|
|
8833
|
+
timelineEnd: dateField("timelineEnd"),
|
|
8834
|
+
budget: external_exports.number().finite(),
|
|
8835
|
+
vendorDependency: external_exports.enum(VENDOR_DEPS),
|
|
8836
|
+
solutionType: external_exports.enum(SOLUTION_TYPES),
|
|
8837
|
+
aiCategory: requiredText().describe("With a portfolio context: one of the organisation's categories (read_portfolio_context \u2192 lists.categories)"),
|
|
8838
|
+
tags: external_exports.array(external_exports.string().trim().min(1)).optional(),
|
|
8839
|
+
docsUrl: external_exports.string().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
8840
|
+
pmUrl: external_exports.string().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
8841
|
+
dependsOn: external_exports.array(external_exports.string().trim().min(1)).optional().describe(`Ids of initiatives this one depends on \u2014 each entry ${DEPENDS_ON_HINT}`),
|
|
8842
|
+
evaluation: external_exports.object({
|
|
8843
|
+
valueScale: dimensionInput(),
|
|
8844
|
+
feasibility: dimensionInput(),
|
|
8845
|
+
governance: dimensionInput(),
|
|
8846
|
+
strategic: dimensionInput()
|
|
8847
|
+
}).strict(),
|
|
8848
|
+
budgetForwardLooking: external_exports.number().finite().optional(),
|
|
8849
|
+
economics: wireSection(SECTION_SCHEMAS.economics, SECTION_DESCRIPTIONS.economics).optional(),
|
|
8850
|
+
actuals: wireSection(SECTION_SCHEMAS.actuals, SECTION_DESCRIPTIONS.actuals).optional(),
|
|
8851
|
+
decisionLog: wireSection(SECTION_SCHEMAS.decisionLog, SECTION_DESCRIPTIONS.decisionLog).optional(),
|
|
8852
|
+
statusReports: wireSection(SECTION_SCHEMAS.statusReports, SECTION_DESCRIPTIONS.statusReports).optional(),
|
|
8853
|
+
requiredSkills: wireSection(SECTION_SCHEMAS.requiredSkills, SECTION_DESCRIPTIONS.requiredSkills).optional(),
|
|
8854
|
+
aiRiskTier: external_exports.enum(AI_RISK_TIERS).optional(),
|
|
8855
|
+
hitlPosture: external_exports.enum(HITL_POSTURES).optional(),
|
|
8856
|
+
dpiaStatus: external_exports.enum(DPIA_STATUSES).optional(),
|
|
8857
|
+
dpiaUrl: external_exports.string().optional(),
|
|
8858
|
+
modelCardStatus: external_exports.enum(MODEL_CARD_STATUSES).optional(),
|
|
8859
|
+
modelCardUrl: external_exports.string().optional(),
|
|
8860
|
+
prohibitedOverride: external_exports.string().optional(),
|
|
8861
|
+
aiAct: wireSection(SECTION_SCHEMAS.aiAct, SECTION_DESCRIPTIONS.aiAct).optional(),
|
|
8862
|
+
context: contextWire().optional().describe(
|
|
8863
|
+
`OPTIONAL but strongly recommended: the organisation's portfolio context \u2014 the contextId returned by read_portfolio_context ("ctx_\u2026") or the file's JSON itself. With it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / update ids are validated.`
|
|
8864
|
+
)
|
|
8865
|
+
}).strict();
|
|
8866
|
+
var exportInputSchema = external_exports.object({
|
|
8867
|
+
spec: external_exports.preprocess(parseIfString, external_exports.object({}).passthrough()).describe("The compact spec exactly as accepted by assemble_initiative (same object \u2014 see that tool's schema)"),
|
|
8868
|
+
sourceMode: external_exports.enum(PORTFOLIO_MODES2).optional().describe(
|
|
8869
|
+
"Portfolio mode recorded in the file (default: the context's mode, else ai). Informational \u2014 whether the app keeps EU-AI-Act fields depends on the organisation's AI-Act module switch, not on this."
|
|
8870
|
+
),
|
|
8871
|
+
language: external_exports.enum(LANGUAGES2).optional().describe("Language recorded in the file (default: the context's language, else en)"),
|
|
8872
|
+
filename: external_exports.string().trim().min(1).optional().describe("Override the suggested filename"),
|
|
8873
|
+
context: contextWire().optional().describe("The organisation's portfolio context (contextId or file), same as for assemble_initiative \u2014 also sets the file's default sourceMode and language.")
|
|
8874
|
+
}).strict();
|
|
8875
|
+
var readContextInputSchema = external_exports.object({
|
|
8876
|
+
context: contextWire().describe("The portfolio-context file's JSON (object or string), exactly as downloaded from the app \u2014 or a contextId from an earlier call")
|
|
8877
|
+
}).strict();
|
|
8878
|
+
function formatIssues(err) {
|
|
8879
|
+
return err.issues.map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`);
|
|
6531
8880
|
}
|
|
6532
8881
|
|
|
8882
|
+
// src/descriptor.ts
|
|
8883
|
+
var SECTION_SHAPES = Object.fromEntries(
|
|
8884
|
+
SECTION_KEYS.map((k) => [k, describeZodShape(SECTION_SCHEMAS[k])])
|
|
8885
|
+
);
|
|
8886
|
+
var SCHEMA_DESCRIPTOR = buildSchemaDescriptor(SECTION_SHAPES);
|
|
8887
|
+
|
|
6533
8888
|
// src/assembler.ts
|
|
6534
8889
|
import { randomUUID } from "node:crypto";
|
|
8890
|
+
|
|
8891
|
+
// ../../initiative-model/src/scoring.ts
|
|
6535
8892
|
function normaliseScore(n) {
|
|
6536
8893
|
if (!Number.isFinite(n)) return 0;
|
|
6537
8894
|
return Math.max(0, Math.min(100, Math.round(n)));
|
|
6538
8895
|
}
|
|
6539
|
-
function dimensionScore(
|
|
6540
|
-
const values = Object.
|
|
8896
|
+
function dimensionScore(subcomponents, disabled) {
|
|
8897
|
+
const values = Object.entries(subcomponents).filter(([k, v]) => typeof v === "number" && !(disabled && disabled.has(k))).map(([, v]) => v);
|
|
6541
8898
|
if (values.length === 0) return 0;
|
|
6542
|
-
|
|
8899
|
+
const sum = values.reduce((a, b) => a + b, 0);
|
|
8900
|
+
return normaliseScore(sum / values.length);
|
|
6543
8901
|
}
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
|
|
6547
|
-
|
|
8902
|
+
|
|
8903
|
+
// src/context.ts
|
|
8904
|
+
import { createHash } from "node:crypto";
|
|
8905
|
+
|
|
8906
|
+
// ../../initiative-model/src/portfolio-context.ts
|
|
8907
|
+
var PORTFOLIO_CONTEXT_KIND = "portfolio-context";
|
|
8908
|
+
var PORTFOLIO_CONTEXT_VERSION = 1;
|
|
8909
|
+
|
|
8910
|
+
// ../../initiative-model/src/ai-act-fields.ts
|
|
8911
|
+
var AI_ACT_FIELDS = [
|
|
8912
|
+
"aiAct",
|
|
8913
|
+
"aiRiskTier",
|
|
8914
|
+
"hitlPosture",
|
|
8915
|
+
"dpiaStatus",
|
|
8916
|
+
"dpiaUrl",
|
|
8917
|
+
"modelCardStatus",
|
|
8918
|
+
"modelCardUrl",
|
|
8919
|
+
"prohibitedOverride"
|
|
8920
|
+
];
|
|
8921
|
+
|
|
8922
|
+
// src/context.ts
|
|
8923
|
+
var sliderSchema = external_exports.object({
|
|
8924
|
+
key: external_exports.string().min(1),
|
|
8925
|
+
dimension: external_exports.enum(DIMENSION_KEYS),
|
|
8926
|
+
enabled: external_exports.boolean(),
|
|
8927
|
+
label: external_exports.string().optional(),
|
|
8928
|
+
help: external_exports.string().optional(),
|
|
8929
|
+
note: external_exports.string().optional()
|
|
8930
|
+
}).passthrough();
|
|
8931
|
+
var portfolioContextSchema = external_exports.object({
|
|
8932
|
+
kind: external_exports.literal(PORTFOLIO_CONTEXT_KIND),
|
|
8933
|
+
version: external_exports.number().int().min(1),
|
|
8934
|
+
exportedAt: external_exports.string(),
|
|
8935
|
+
companyName: external_exports.string().optional(),
|
|
8936
|
+
portfolioMode: external_exports.enum(PORTFOLIO_MODES2),
|
|
8937
|
+
language: external_exports.enum(LANGUAGES2),
|
|
8938
|
+
currency: external_exports.string(),
|
|
8939
|
+
aiActEnabled: external_exports.boolean(),
|
|
8940
|
+
discountRatePct: external_exports.number(),
|
|
8941
|
+
businessUnits: external_exports.array(external_exports.string()),
|
|
8942
|
+
categories: external_exports.array(external_exports.string()),
|
|
8943
|
+
suggestedTags: external_exports.array(external_exports.string()),
|
|
8944
|
+
skills: external_exports.array(external_exports.object({ id: external_exports.string().min(1), name: external_exports.string() }).passthrough()),
|
|
8945
|
+
initiatives: external_exports.array(external_exports.object({ id: external_exports.string().min(1), name: external_exports.string(), status: external_exports.enum(STATUS_VALUES) }).passthrough()),
|
|
8946
|
+
sliders: external_exports.array(sliderSchema)
|
|
8947
|
+
}).passthrough();
|
|
8948
|
+
var CONTEXT_SUPPORTED_VERSION = PORTFOLIO_CONTEXT_VERSION;
|
|
8949
|
+
function versionNotice(ctx) {
|
|
8950
|
+
return ctx.version > CONTEXT_SUPPORTED_VERSION ? `The portfolio-context file is version ${ctx.version}; this Composer understands version ${CONTEXT_SUPPORTED_VERSION}. Newer fields are ignored \u2014 update the Composer (Import/Export \u2192 download the extension again) to be safe.` : void 0;
|
|
8951
|
+
}
|
|
8952
|
+
var CONTEXT_ID_PREFIX = "ctx_";
|
|
8953
|
+
var CACHE_MAX = 32;
|
|
8954
|
+
var cache = /* @__PURE__ */ new Map();
|
|
8955
|
+
function contextIdOf(ctx) {
|
|
8956
|
+
return CONTEXT_ID_PREFIX + createHash("sha256").update(JSON.stringify(ctx)).digest("hex").slice(0, 16);
|
|
8957
|
+
}
|
|
8958
|
+
function remember(ctx) {
|
|
8959
|
+
const id = contextIdOf(ctx);
|
|
8960
|
+
cache.delete(id);
|
|
8961
|
+
cache.set(id, ctx);
|
|
8962
|
+
while (cache.size > CACHE_MAX) cache.delete(cache.keys().next().value);
|
|
8963
|
+
return id;
|
|
8964
|
+
}
|
|
8965
|
+
function resolveContext(raw) {
|
|
8966
|
+
if (typeof raw === "string") {
|
|
8967
|
+
if (raw.startsWith(CONTEXT_ID_PREFIX)) {
|
|
8968
|
+
const hit = cache.get(raw);
|
|
8969
|
+
if (hit) {
|
|
8970
|
+
remember(hit);
|
|
8971
|
+
return { ok: true, context: hit, contextId: raw };
|
|
8972
|
+
}
|
|
8973
|
+
return {
|
|
8974
|
+
ok: false,
|
|
8975
|
+
errors: [
|
|
8976
|
+
`context: unknown contextId "${raw}" \u2014 the Composer has restarted since it was issued, or it belongs to a different file. Call read_portfolio_context again with the file's JSON and use the new contextId (or pass the file itself).`
|
|
8977
|
+
]
|
|
8978
|
+
};
|
|
8979
|
+
}
|
|
8980
|
+
return { ok: false, errors: ["context: expected the portfolio-context file's JSON (object or JSON string) or a contextId from read_portfolio_context."] };
|
|
8981
|
+
}
|
|
8982
|
+
const parsed = portfolioContextSchema.safeParse(raw);
|
|
8983
|
+
if (!parsed.success) return { ok: false, errors: formatIssues(parsed.error).map((e) => `context.${e}`) };
|
|
8984
|
+
const context = parsed.data;
|
|
8985
|
+
return { ok: true, context, contextId: remember(context) };
|
|
8986
|
+
}
|
|
8987
|
+
function disabledSliders(ctx) {
|
|
8988
|
+
return new Set(ctx.sliders.filter((s) => !s.enabled).map((s) => s.key));
|
|
8989
|
+
}
|
|
8990
|
+
function allowedList(values, max = 12) {
|
|
8991
|
+
if (values.length <= max) return values.join(" | ");
|
|
8992
|
+
return `${values.slice(0, max).join(" | ")} \u2026 (${values.length - max} more \u2014 see read_portfolio_context)`;
|
|
8993
|
+
}
|
|
8994
|
+
var norm = (s) => s.trim().toLowerCase();
|
|
8995
|
+
function canonical(value, list) {
|
|
8996
|
+
const key = norm(value);
|
|
8997
|
+
return list.find((v) => norm(v) === key);
|
|
8998
|
+
}
|
|
8999
|
+
function checkAgainstContext(spec, ctx) {
|
|
9000
|
+
const errors = [];
|
|
9001
|
+
const warnings = [];
|
|
9002
|
+
const v = versionNotice(ctx);
|
|
9003
|
+
if (v) warnings.push(v);
|
|
9004
|
+
const bus = ctx.businessUnits;
|
|
9005
|
+
let businessUnit = spec.businessUnit;
|
|
9006
|
+
const buMatch = canonical(spec.businessUnit, bus);
|
|
9007
|
+
if (!buMatch) {
|
|
9008
|
+
errors.push(
|
|
9009
|
+
bus.length ? `businessUnit: "${spec.businessUnit}" is not a business unit of this organisation \u2014 use one of: ${allowedList(bus)}. New business units are created in the app's Settings, not here.` : `businessUnit: this organisation has no business units configured \u2014 add them in the app's Settings, download the portfolio context again, then continue.`
|
|
9010
|
+
);
|
|
9011
|
+
} else {
|
|
9012
|
+
if (buMatch !== spec.businessUnit) warnings.push(`businessUnit: "${spec.businessUnit}" normalised to the organisation's spelling "${buMatch}".`);
|
|
9013
|
+
businessUnit = buMatch;
|
|
9014
|
+
}
|
|
9015
|
+
const cats = ctx.categories;
|
|
9016
|
+
let aiCategory = spec.aiCategory;
|
|
9017
|
+
const catMatch = canonical(spec.aiCategory, cats);
|
|
9018
|
+
if (!catMatch) {
|
|
9019
|
+
errors.push(
|
|
9020
|
+
cats.length ? `aiCategory: "${spec.aiCategory}" is not a category of this organisation \u2014 use one of: ${allowedList(cats)}. New categories are created in the app's Settings, not here.` : `aiCategory: this organisation has no categories configured \u2014 add them in the app's Settings, download the portfolio context again, then continue.`
|
|
9021
|
+
);
|
|
9022
|
+
} else {
|
|
9023
|
+
if (catMatch !== spec.aiCategory) warnings.push(`aiCategory: "${spec.aiCategory}" normalised to the organisation's spelling "${catMatch}".`);
|
|
9024
|
+
aiCategory = catMatch;
|
|
9025
|
+
}
|
|
9026
|
+
const initiativeIds = new Set(ctx.initiatives.map((i) => i.id));
|
|
9027
|
+
if (spec.id !== void 0 && !initiativeIds.has(spec.id)) {
|
|
9028
|
+
errors.push(`id: "${spec.id}" is not an initiative of this organisation \u2014 an id is only for UPDATING an existing initiative (read_portfolio_context \u2192 lists.initiatives); omit it to create a new one.`);
|
|
9029
|
+
}
|
|
9030
|
+
for (const [i, id] of (spec.dependsOn ?? []).entries()) {
|
|
9031
|
+
if (!initiativeIds.has(id)) errors.push(`dependsOn.${i}: "${id}" is not the id of an initiative in this organisation \u2014 pick from read_portfolio_context \u2192 lists.initiatives (id + name), or leave dependsOn empty.`);
|
|
9032
|
+
}
|
|
9033
|
+
if (spec.id !== void 0 && (spec.dependsOn ?? []).includes(spec.id)) errors.push("dependsOn: an initiative cannot depend on itself.");
|
|
9034
|
+
const skillIds = new Set(ctx.skills.map((s) => s.id));
|
|
9035
|
+
for (const [i, s] of (spec.requiredSkills ?? []).entries()) {
|
|
9036
|
+
if (!skillIds.has(s.skillId)) errors.push(`requiredSkills.${i}.skillId: "${s.skillId}" is not a skill of this organisation \u2014 pick from read_portfolio_context \u2192 lists.skills (id + name), or leave requiredSkills empty.`);
|
|
9037
|
+
}
|
|
9038
|
+
const aiFieldsSet = AI_ACT_FIELDS.filter((f) => spec[f] !== void 0);
|
|
9039
|
+
if (aiFieldsSet.length && !ctx.aiActEnabled) {
|
|
9040
|
+
warnings.push(
|
|
9041
|
+
`EU-AI-Act fields are set (${aiFieldsSet.join(", ")}), but this organisation's AI-Act module is switched OFF \u2014 the app removes ${AI_ACT_FIELDS.join(" / ")} on import unless the module is switched on first (Settings \u203A AI Act).`
|
|
9042
|
+
);
|
|
9043
|
+
}
|
|
9044
|
+
return { errors, warnings, businessUnit, aiCategory };
|
|
9045
|
+
}
|
|
9046
|
+
function resolveSub(base, ctxSlider, mode, lang) {
|
|
9047
|
+
const out = {
|
|
9048
|
+
key: base.key,
|
|
9049
|
+
label: ctxSlider?.label?.trim() || getModeOverride(mode, lang, `sub.${base.key}`) || base.label[lang],
|
|
9050
|
+
help: ctxSlider?.help?.trim() || getModeOverride(mode, lang, `subHelp.${base.key}`) || base.help[lang]
|
|
9051
|
+
};
|
|
9052
|
+
const note = ctxSlider?.note?.trim();
|
|
9053
|
+
if (note) out.note = note;
|
|
9054
|
+
return out;
|
|
9055
|
+
}
|
|
9056
|
+
function buildInterviewPlan(ctx, contextId) {
|
|
9057
|
+
const mode = ctx.portfolioMode;
|
|
9058
|
+
const lang = ctx.language;
|
|
9059
|
+
const ctxByKey = new Map(ctx.sliders.map((s) => [s.key, s]));
|
|
9060
|
+
const disabled = disabledSliders(ctx);
|
|
9061
|
+
const dimensions = DIMENSIONS.map((d) => {
|
|
9062
|
+
const subs = d.subs.filter((s) => !disabled.has(s.key)).map((s) => resolveSub(s, ctxByKey.get(s.key), mode, lang));
|
|
9063
|
+
return { key: d.key, title: getModeOverride(mode, lang, `dim.${d.key}.title`) || d.title[lang], subs, allSwitchedOff: subs.length === 0 };
|
|
9064
|
+
});
|
|
9065
|
+
const skipped = DIMENSION_KEYS.flatMap((dim) => DIMENSION_SUBS[dim].filter((k) => disabled.has(k)).map((key) => ({ key, dimension: dim })));
|
|
9066
|
+
const allOff = dimensions.filter((d) => d.allSwitchedOff).map((d) => d.key);
|
|
9067
|
+
const warnings = [];
|
|
9068
|
+
const v = versionNotice(ctx);
|
|
9069
|
+
if (v) warnings.push(v);
|
|
9070
|
+
const rules = [
|
|
9071
|
+
"Interview with these labels, help texts and notes \u2014 they are the organisation's own wording for its portfolio mode.",
|
|
9072
|
+
skipped.length ? `Do NOT ask about the ${skipped.length} switched-off sub-dimension(s) listed under interview.skipped and do not send them; the app excludes them from the dimension score, and so does the Composer when the same context is passed to assemble_initiative / export_initiative_file. Every OTHER sub-dimension of a dimension is still required.` : "No sub-dimension is switched off in this mode: all 30 are asked and scored.",
|
|
9073
|
+
...allOff.length ? [`Dimension(s) with EVERY sub-dimension switched off (${allOff.join(", ")}) still need an entry in evaluation: { subs: {}, confidence } \u2014 the score is 0 there; ask only for the confidence.`] : [],
|
|
9074
|
+
ctx.businessUnits.length && ctx.categories.length ? "businessUnit MUST be one of lists.businessUnits and aiCategory one of lists.categories (matched case-insensitively, normalised to the organisation's spelling) \u2014 the Composer rejects anything else; new ones are created in the app's Settings, not in the interview." : "This organisation has no business units and/or categories configured yet \u2014 they must be added in the app's Settings and the context downloaded again before an initiative can be assembled.",
|
|
9075
|
+
"dependsOn entries must be ids from lists.initiatives; requiredSkills[].skillId must be ids from lists.skills. Never invent an id; leave the list empty when unsure.",
|
|
9076
|
+
"To UPDATE an existing initiative instead of creating a new one, pass its id (from lists.initiatives) as `id` in the spec \u2014 the exported file then updates it in the app (Import/Export \u2192 Single initiative \u2192 'Update'). Omit id for a new initiative.",
|
|
9077
|
+
"Dates: talk to the user in dd/mm/yyyy; you may send dates as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd \u2014 the Composer stores yyyy-mm-dd.",
|
|
9078
|
+
ctx.aiActEnabled ? "The organisation's EU-AI-Act module is ON: collect the AI-Act block and governance flags." : "The organisation's EU-AI-Act module is OFF: skip the AI-Act block and governance flags (the app would remove them on import).",
|
|
9079
|
+
`Pass \`context: "${contextId}"\` (this contextId \u2014 or the whole file again) to assemble_initiative and export_initiative_file so scores are derived over the enabled sub-dimensions and ids are validated. Amounts are in ${ctx.currency}; the default discount rate is ${ctx.discountRatePct}%.`,
|
|
9080
|
+
`The file is from ${ctx.exportedAt}; if the user changed settings since, ask them to export it again (Import/Export \u2192 Download portfolio context).`
|
|
9081
|
+
];
|
|
9082
|
+
return {
|
|
9083
|
+
contextId,
|
|
9084
|
+
organisation: {
|
|
9085
|
+
...ctx.companyName ? { companyName: ctx.companyName } : {},
|
|
9086
|
+
portfolioMode: mode,
|
|
9087
|
+
language: lang,
|
|
9088
|
+
currency: ctx.currency,
|
|
9089
|
+
aiActEnabled: ctx.aiActEnabled,
|
|
9090
|
+
discountRatePct: ctx.discountRatePct,
|
|
9091
|
+
contextExportedAt: ctx.exportedAt
|
|
9092
|
+
},
|
|
9093
|
+
lists: {
|
|
9094
|
+
businessUnits: ctx.businessUnits,
|
|
9095
|
+
categories: ctx.categories,
|
|
9096
|
+
suggestedTags: ctx.suggestedTags,
|
|
9097
|
+
skills: ctx.skills.map((s) => ({ id: s.id, name: s.name })),
|
|
9098
|
+
initiatives: ctx.initiatives.map((i) => ({ id: i.id, name: i.name, status: i.status }))
|
|
9099
|
+
},
|
|
9100
|
+
interview: {
|
|
9101
|
+
dimensions,
|
|
9102
|
+
skipped,
|
|
9103
|
+
scoreDerivation: "mean of the ENABLED sub-dimension values (switched-off ones excluded), rounded, clamped 0\u2013100 \u2014 the app's own function"
|
|
9104
|
+
},
|
|
9105
|
+
rules,
|
|
9106
|
+
warnings
|
|
9107
|
+
};
|
|
9108
|
+
}
|
|
9109
|
+
|
|
9110
|
+
// src/assembler.ts
|
|
9111
|
+
var uuidSchema = external_exports.string().uuid();
|
|
9112
|
+
var isUuid = (v) => typeof v === "string" && uuidSchema.safeParse(v).success;
|
|
9113
|
+
function checkSubs(dim, subs, errors, disabled) {
|
|
9114
|
+
const expected = DIMENSION_SUBS[dim];
|
|
9115
|
+
const enabled = expected.filter((k) => !disabled.has(k));
|
|
6548
9116
|
if (!subs || typeof subs !== "object") {
|
|
6549
|
-
errors.push(`evaluation.${dim}.subs is missing (expected keys: ${
|
|
9117
|
+
if (enabled.length) errors.push(`evaluation.${dim}.subs is missing (expected keys: ${enabled.join(", ")})`);
|
|
6550
9118
|
return;
|
|
6551
9119
|
}
|
|
6552
|
-
for (const key of
|
|
9120
|
+
for (const key of enabled) {
|
|
6553
9121
|
const v = subs[key];
|
|
6554
9122
|
if (v === void 0) errors.push(`evaluation.${dim}.subs.${key} is missing`);
|
|
6555
9123
|
else if (typeof v !== "number" || !Number.isFinite(v)) errors.push(`evaluation.${dim}.subs.${key} must be a number`);
|
|
6556
9124
|
else if (v < 0 || v > 100) errors.push(`evaluation.${dim}.subs.${key} must be within 0\u2013100 (got ${v})`);
|
|
6557
9125
|
}
|
|
6558
9126
|
for (const key of Object.keys(subs)) {
|
|
6559
|
-
if (!expected.includes(key)) errors.push(`evaluation.${dim}.subs.${key} is not a known sub-dimension (expected: ${
|
|
9127
|
+
if (!expected.includes(key)) errors.push(`evaluation.${dim}.subs.${key} is not a known sub-dimension (expected: ${enabled.join(", ")})`);
|
|
9128
|
+
}
|
|
9129
|
+
}
|
|
9130
|
+
function checkAiActVocabularies(block, errors) {
|
|
9131
|
+
const listCheck = (field, allowed) => {
|
|
9132
|
+
const v = block[field];
|
|
9133
|
+
if (!Array.isArray(v)) return;
|
|
9134
|
+
for (const item of v) {
|
|
9135
|
+
if (!allowed.includes(String(item))) {
|
|
9136
|
+
errors.push(`aiAct.${field}: "${String(item)}" is not a known id \u2014 allowed: ${allowed.join(" | ")}. Leave the list empty rather than inventing an entry.`);
|
|
9137
|
+
}
|
|
9138
|
+
}
|
|
9139
|
+
};
|
|
9140
|
+
const mapCheck = (field, allowed, consequence) => {
|
|
9141
|
+
const v = block[field];
|
|
9142
|
+
if (!v || typeof v !== "object" || Array.isArray(v)) return;
|
|
9143
|
+
for (const key of Object.keys(v)) {
|
|
9144
|
+
if (!allowed.includes(key)) errors.push(`aiAct.${field}.${key}: unknown key \u2014 ${consequence}. Allowed keys: ${allowed.join(" | ")}.`);
|
|
9145
|
+
}
|
|
9146
|
+
};
|
|
9147
|
+
listCheck("prohibitedPractices", AI_ACT_PROHIBITED_PRACTICES);
|
|
9148
|
+
listCheck("art50Flags", AI_ACT_ART50_FLAGS);
|
|
9149
|
+
mapCheck("artifacts", ACT_ARTIFACT_KEYS, "the app never shows an artifact it does not know");
|
|
9150
|
+
mapCheck("obligations", OPERATIONAL_OBLIGATION_KEYS, "the app drops it on import");
|
|
9151
|
+
const cat = block["annexIIICategory"];
|
|
9152
|
+
if (typeof cat === "string" && cat !== "" && !ANNEX_III_CATEGORIES.includes(cat)) {
|
|
9153
|
+
errors.push(`aiAct.annexIIICategory: "${cat}" is not an Annex III category \u2014 allowed: ${ANNEX_III_CATEGORIES.join(" | ")}; omit it when no Annex III area applies.`);
|
|
6560
9154
|
}
|
|
6561
9155
|
}
|
|
6562
|
-
function
|
|
9156
|
+
function mintNestedIds(rows, stamp, withStamps = false) {
|
|
9157
|
+
if (!rows) return void 0;
|
|
9158
|
+
return rows.map((r) => {
|
|
9159
|
+
const next = { ...r, id: isUuid(r.id) ? r.id : randomUUID() };
|
|
9160
|
+
if (withStamps) {
|
|
9161
|
+
if (!next.createdAt) next.createdAt = stamp;
|
|
9162
|
+
if (!next.updatedAt) next.updatedAt = stamp;
|
|
9163
|
+
}
|
|
9164
|
+
return next;
|
|
9165
|
+
});
|
|
9166
|
+
}
|
|
9167
|
+
function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
6563
9168
|
const errors = [];
|
|
6564
9169
|
const warnings = [];
|
|
6565
|
-
|
|
6566
|
-
|
|
6567
|
-
|
|
9170
|
+
const { context: rawContext, ...spec } = input;
|
|
9171
|
+
let context;
|
|
9172
|
+
let contextId;
|
|
9173
|
+
if (rawContext !== void 0) {
|
|
9174
|
+
const resolved = resolveContext(rawContext);
|
|
9175
|
+
if (!resolved.ok) return { ok: false, errors: resolved.errors, warnings };
|
|
9176
|
+
context = resolved.context;
|
|
9177
|
+
contextId = resolved.contextId;
|
|
9178
|
+
}
|
|
9179
|
+
const disabled = context ? disabledSliders(context) : /* @__PURE__ */ new Set();
|
|
9180
|
+
for (const dim of DIMENSION_KEYS) {
|
|
9181
|
+
const d = spec.evaluation?.[dim];
|
|
9182
|
+
if (!d) {
|
|
9183
|
+
errors.push(`evaluation.${dim} is missing`);
|
|
9184
|
+
continue;
|
|
9185
|
+
}
|
|
9186
|
+
checkSubs(dim, d.subs, errors, disabled);
|
|
9187
|
+
if (!d.confidence) errors.push(`evaluation.${dim}.confidence is missing (Low | Medium | High)`);
|
|
9188
|
+
for (const key of Object.keys(d.subs ?? {})) {
|
|
9189
|
+
if (disabled.has(key)) warnings.push(`evaluation.${dim}.subs.${key}: this sub-dimension is switched off in the organisation \u2014 value ignored (stored as 0, not scored).`);
|
|
9190
|
+
}
|
|
9191
|
+
}
|
|
9192
|
+
if (spec.aiAct && typeof spec.aiAct === "object") checkAiActVocabularies(spec.aiAct, errors);
|
|
9193
|
+
let businessUnit = spec.businessUnit;
|
|
9194
|
+
let aiCategory = spec.aiCategory;
|
|
9195
|
+
if (context) {
|
|
9196
|
+
const c = checkAgainstContext(spec, context);
|
|
9197
|
+
errors.push(...c.errors);
|
|
9198
|
+
warnings.push(...c.warnings);
|
|
9199
|
+
businessUnit = c.businessUnit;
|
|
9200
|
+
aiCategory = c.aiCategory;
|
|
6568
9201
|
} else {
|
|
6569
|
-
|
|
6570
|
-
|
|
6571
|
-
if (!
|
|
6572
|
-
errors.push(`evaluation.${dim} is missing`);
|
|
6573
|
-
continue;
|
|
6574
|
-
}
|
|
6575
|
-
checkSubs(dim, d.subs, errors);
|
|
6576
|
-
if (!d.confidence) errors.push(`evaluation.${dim}.confidence is missing (Low | Medium | High)`);
|
|
9202
|
+
if (spec.id !== void 0 && !isUuid(spec.id)) errors.push(`id: "${spec.id}" is not a UUID \u2014 an id is only for UPDATING an existing initiative; omit it to create a new one, or provide the organisation's portfolio context so the id can be verified.`);
|
|
9203
|
+
for (const [i, id] of (spec.dependsOn ?? []).entries()) {
|
|
9204
|
+
if (!isUuid(id)) errors.push(`dependsOn.${i}: "${id}" is not a UUID \u2014 without the organisation's portfolio context the Composer cannot verify ids; leave dependsOn empty and link dependencies in the app, or provide the context.`);
|
|
6577
9205
|
}
|
|
6578
9206
|
}
|
|
6579
|
-
if (spec.timelineStart && !ISO_DATE.test(spec.timelineStart)) warnings.push("timelineStart is not YYYY-MM-DD");
|
|
6580
|
-
if (spec.timelineEnd && !ISO_DATE.test(spec.timelineEnd)) warnings.push("timelineEnd is not YYYY-MM-DD");
|
|
6581
9207
|
if (spec.timelineStart && spec.timelineEnd && spec.timelineEnd < spec.timelineStart) {
|
|
6582
9208
|
warnings.push("timelineEnd is before timelineStart");
|
|
6583
9209
|
}
|
|
6584
|
-
if (errors.length) return { ok: false, errors, warnings };
|
|
9210
|
+
if (errors.length) return { ok: false, errors, warnings, ...contextId ? { contextId } : {} };
|
|
6585
9211
|
const evaluation = Object.fromEntries(
|
|
6586
9212
|
DIMENSION_KEYS.map((dim) => {
|
|
6587
9213
|
const d = spec.evaluation[dim];
|
|
6588
|
-
|
|
9214
|
+
const subs = Object.fromEntries(DIMENSION_SUBS[dim].map((k) => [k, disabled.has(k) ? 0 : d.subs?.[k] ?? 0]));
|
|
9215
|
+
return [dim, { score: dimensionScore(subs, disabled), confidence: d.confidence, subs }];
|
|
6589
9216
|
})
|
|
6590
9217
|
);
|
|
6591
9218
|
const stamp = now.toISOString();
|
|
9219
|
+
const aiAct = spec.aiAct;
|
|
6592
9220
|
const candidate = {
|
|
6593
|
-
|
|
6594
|
-
|
|
6595
|
-
businessUnit
|
|
6596
|
-
|
|
6597
|
-
description: spec.description,
|
|
6598
|
-
status: spec.status,
|
|
6599
|
-
timelineStart: spec.timelineStart,
|
|
6600
|
-
timelineEnd: spec.timelineEnd,
|
|
6601
|
-
budget: spec.budget,
|
|
6602
|
-
budgetForwardLooking: spec.budgetForwardLooking,
|
|
6603
|
-
vendorDependency: spec.vendorDependency,
|
|
6604
|
-
solutionType: spec.solutionType,
|
|
6605
|
-
aiCategory: spec.aiCategory,
|
|
9221
|
+
...spec,
|
|
9222
|
+
id: spec.id ?? randomUUID(),
|
|
9223
|
+
businessUnit,
|
|
9224
|
+
aiCategory,
|
|
6606
9225
|
tags: spec.tags ?? [],
|
|
6607
9226
|
archived: false,
|
|
6608
9227
|
dependsOn: spec.dependsOn ?? [],
|
|
6609
9228
|
evaluation,
|
|
6610
|
-
|
|
6611
|
-
|
|
6612
|
-
|
|
6613
|
-
statusReports: spec.statusReports,
|
|
6614
|
-
requiredSkills: spec.requiredSkills,
|
|
6615
|
-
aiRiskTier: spec.aiRiskTier,
|
|
6616
|
-
hitlPosture: spec.hitlPosture,
|
|
6617
|
-
dpiaStatus: spec.dpiaStatus,
|
|
6618
|
-
dpiaUrl: spec.dpiaUrl,
|
|
6619
|
-
modelCardStatus: spec.modelCardStatus,
|
|
6620
|
-
modelCardUrl: spec.modelCardUrl,
|
|
6621
|
-
prohibitedOverride: spec.prohibitedOverride,
|
|
6622
|
-
aiAct: spec.aiAct,
|
|
9229
|
+
decisionLog: mintNestedIds(spec.decisionLog, stamp),
|
|
9230
|
+
statusReports: mintNestedIds(spec.statusReports, stamp),
|
|
9231
|
+
aiAct: aiAct ? { ...aiAct, ...aiAct.incidents ? { incidents: mintNestedIds(aiAct.incidents, stamp, true) } : {} } : void 0,
|
|
6623
9232
|
createdAt: stamp,
|
|
6624
9233
|
updatedAt: stamp
|
|
6625
9234
|
};
|
|
6626
|
-
for (const k of Object.keys(candidate)) {
|
|
6627
|
-
if (candidate[k] === void 0) delete candidate[k];
|
|
6628
|
-
}
|
|
6629
9235
|
const parsed = CreateInitiativeBody.safeParse(candidate);
|
|
6630
|
-
if (!parsed.success) {
|
|
6631
|
-
|
|
6632
|
-
|
|
6633
|
-
}
|
|
6634
|
-
return { ok: false, errors, warnings };
|
|
6635
|
-
}
|
|
6636
|
-
const derivedScores = Object.fromEntries(
|
|
6637
|
-
DIMENSION_KEYS.map((dim) => [dim, evaluation[dim].score])
|
|
6638
|
-
);
|
|
6639
|
-
return { ok: true, initiative: parsed.data, derivedScores, warnings, errors };
|
|
9236
|
+
if (!parsed.success) return { ok: false, errors: formatIssues(parsed.error), warnings, ...contextId ? { contextId } : {} };
|
|
9237
|
+
const derivedScores = Object.fromEntries(DIMENSION_KEYS.map((dim) => [dim, evaluation[dim].score]));
|
|
9238
|
+
return { ok: true, initiative: parsed.data, derivedScores, warnings, errors, ...contextId ? { contextId } : {} };
|
|
6640
9239
|
}
|
|
6641
9240
|
|
|
9241
|
+
// ../../initiative-model/src/backup-version.ts
|
|
9242
|
+
var BACKUP_VERSION = 10;
|
|
9243
|
+
|
|
6642
9244
|
// src/envelope.ts
|
|
6643
9245
|
var ENVELOPE_BRAND = "BICon Transformation Portfolio Steering";
|
|
6644
9246
|
var ENVELOPE_KIND = "single-initiative";
|
|
6645
|
-
var ENVELOPE_VERSION =
|
|
9247
|
+
var ENVELOPE_VERSION = BACKUP_VERSION;
|
|
6646
9248
|
function buildEnvelope(initiative, opts = {}) {
|
|
6647
9249
|
return {
|
|
6648
9250
|
brand: ENVELOPE_BRAND,
|
|
@@ -6661,134 +9263,112 @@ function suggestFilename(name, now = /* @__PURE__ */ new Date()) {
|
|
|
6661
9263
|
var IMPORT_INSTRUCTIONS = [
|
|
6662
9264
|
"1. Save the JSON below as the suggested filename.",
|
|
6663
9265
|
"2. In the BICon app (signed in to the target organisation), open Import/Export.",
|
|
6664
|
-
"3.
|
|
6665
|
-
"4.
|
|
6666
|
-
"5.
|
|
9266
|
+
"3. If the initiative carries EU-AI-Act data, make sure the organisation's EU-AI-Act module is switched on (Settings \u203A AI Act) \u2014 the app strips AI-Act fields while it is off.",
|
|
9267
|
+
"4. In the 'Single initiative' card, drop the file (or Browse).",
|
|
9268
|
+
"5. Review the preview \u2014 it should show 0 warnings \u2014 then choose 'Add as new' (or 'Update' when the file carries an existing initiative's id or the same name \u2014 the app then keeps that initiative's id and history) and Confirm.",
|
|
9269
|
+
"6. The initiative appears in the Inventory with the derived dimension scores."
|
|
6667
9270
|
].join("\n");
|
|
6668
9271
|
|
|
6669
|
-
// src/
|
|
6670
|
-
var
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
})
|
|
6674
|
-
var compactSpecSchema = external_exports.object({
|
|
6675
|
-
name: external_exports.string().min(1),
|
|
6676
|
-
businessUnit: external_exports.string().min(1),
|
|
6677
|
-
owner: external_exports.string().min(1),
|
|
6678
|
-
description: external_exports.string().min(1),
|
|
6679
|
-
status: external_exports.enum(STATUS_VALUES),
|
|
6680
|
-
timelineStart: external_exports.string().describe("YYYY-MM-DD"),
|
|
6681
|
-
timelineEnd: external_exports.string().describe("YYYY-MM-DD"),
|
|
6682
|
-
budget: external_exports.number(),
|
|
6683
|
-
vendorDependency: external_exports.enum(VENDOR_DEPS),
|
|
6684
|
-
solutionType: external_exports.enum(SOLUTION_TYPES),
|
|
6685
|
-
aiCategory: external_exports.string().min(1),
|
|
6686
|
-
tags: external_exports.array(external_exports.string()).optional(),
|
|
6687
|
-
dependsOn: external_exports.array(external_exports.string()).optional(),
|
|
6688
|
-
evaluation: external_exports.object({
|
|
6689
|
-
valueScale: dimensionInput,
|
|
6690
|
-
feasibility: dimensionInput,
|
|
6691
|
-
governance: dimensionInput,
|
|
6692
|
-
strategic: dimensionInput
|
|
6693
|
-
}),
|
|
6694
|
-
budgetForwardLooking: external_exports.number().optional(),
|
|
6695
|
-
economics: external_exports.unknown().optional(),
|
|
6696
|
-
actuals: external_exports.unknown().optional(),
|
|
6697
|
-
decisionLog: external_exports.unknown().optional(),
|
|
6698
|
-
statusReports: external_exports.unknown().optional(),
|
|
6699
|
-
requiredSkills: external_exports.unknown().optional(),
|
|
6700
|
-
aiRiskTier: external_exports.enum(AI_RISK_TIERS).optional(),
|
|
6701
|
-
hitlPosture: external_exports.enum(HITL_POSTURES).optional(),
|
|
6702
|
-
dpiaStatus: external_exports.enum(DPIA_STATUSES).optional(),
|
|
6703
|
-
dpiaUrl: external_exports.string().optional(),
|
|
6704
|
-
modelCardStatus: external_exports.enum(MODEL_CARD_STATUSES).optional(),
|
|
6705
|
-
modelCardUrl: external_exports.string().optional(),
|
|
6706
|
-
prohibitedOverride: external_exports.string().optional(),
|
|
6707
|
-
aiAct: external_exports.unknown().optional()
|
|
6708
|
-
});
|
|
6709
|
-
var exportInputSchema = external_exports.object({
|
|
6710
|
-
spec: compactSpecSchema.optional().describe("Compact spec \u2014 assembled first if given"),
|
|
6711
|
-
initiative: external_exports.unknown().optional().describe("An already-assembled initiative (output of assemble_initiative)"),
|
|
6712
|
-
sourceMode: external_exports.enum(["ai", "digital", "innovation"]).optional().describe("Target portfolio mode (default ai)"),
|
|
6713
|
-
language: external_exports.enum(["en", "de"]).optional(),
|
|
6714
|
-
filename: external_exports.string().optional()
|
|
9272
|
+
// src/server.ts
|
|
9273
|
+
var SERVER_NAME = "bicon-initiative-composer";
|
|
9274
|
+
var RESOURCE_URI = "initiative://schema";
|
|
9275
|
+
var text = (payload) => ({
|
|
9276
|
+
content: [{ type: "text", text: JSON.stringify({ composerVersion: COMPOSER_VERSION, ...payload }, null, 2) }]
|
|
6715
9277
|
});
|
|
9278
|
+
var DESCRIPTOR_TEXT = JSON.stringify(SCHEMA_DESCRIPTOR, null, 2);
|
|
9279
|
+
function createServer() {
|
|
9280
|
+
const server = new McpServer({ name: SERVER_NAME, version: COMPOSER_VERSION });
|
|
9281
|
+
server.registerResource(
|
|
9282
|
+
"initiative-schema",
|
|
9283
|
+
RESOURCE_URI,
|
|
9284
|
+
{
|
|
9285
|
+
title: "Initiative schema",
|
|
9286
|
+
description: "Every field, enum and the 30 scored sub-dimensions (with EN/DE labels and help text, plus the digital/innovation wording overlays), the exact shape of every optional section, the EU-AI-Act vocabularies, and the handoff steps.",
|
|
9287
|
+
mimeType: "application/json"
|
|
9288
|
+
},
|
|
9289
|
+
async (uri) => ({ contents: [{ uri: uri.href, mimeType: "application/json", text: DESCRIPTOR_TEXT }] })
|
|
9290
|
+
);
|
|
9291
|
+
server.registerTool(
|
|
9292
|
+
"composer_version",
|
|
9293
|
+
{
|
|
9294
|
+
title: "Composer version",
|
|
9295
|
+
description: "Returns the running Composer's version and capabilities. Call it when a SUCCESSFUL tool result lacks `composerVersion` (a stale instance) \u2014 SDK-level input rejections ('Input validation error \u2026') never carry it and are not a sign of staleness."
|
|
9296
|
+
},
|
|
9297
|
+
async () => text({
|
|
9298
|
+
capabilities: [
|
|
9299
|
+
"strict typed schemas: unknown keys anywhere in the spec are rejected with their exact path (never silently dropped)",
|
|
9300
|
+
"sections (aiAct/economics/actuals/decisionLog/statusReports/requiredSkills) accept a JSON object/array or the same JSON as a string; row ids are minted by the Composer",
|
|
9301
|
+
"dates accepted as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd (stored as yyyy-mm-dd)",
|
|
9302
|
+
"get_initiative_schema: sectionShapes, aiActVocabularies, portfolio-mode wording overlays",
|
|
9303
|
+
"AI-Act vocabulary and id-format enforcement with the allowed values in the error",
|
|
9304
|
+
"one pipeline: export_initiative_file takes the same spec as assemble_initiative \u2014 scores are always derived; pass `id` to update an existing initiative",
|
|
9305
|
+
"portfolio context: read_portfolio_context turns the app's exported context file into an organisation-specific interview plan and a short contextId; with it, switched-off sub-dimensions are skipped in the score, business unit / category must be the organisation's own, and skill / dependency / update ids are validated"
|
|
9306
|
+
]
|
|
9307
|
+
})
|
|
9308
|
+
);
|
|
9309
|
+
server.registerTool(
|
|
9310
|
+
"get_initiative_schema",
|
|
9311
|
+
{
|
|
9312
|
+
title: "Get initiative schema",
|
|
9313
|
+
description: "Returns the field catalog: required fields, enum values, the four dimensions with their named sub-dimensions (rate each 0\u2013100) and confidence scale, portfolio-mode wording overlays, optional sections with their exact shapes, the EU-AI-Act vocabularies, and the import handoff steps. Call this first."
|
|
9314
|
+
},
|
|
9315
|
+
async () => ({ content: [{ type: "text", text: DESCRIPTOR_TEXT }] })
|
|
9316
|
+
);
|
|
9317
|
+
server.registerTool(
|
|
9318
|
+
"read_portfolio_context",
|
|
9319
|
+
{
|
|
9320
|
+
title: "Read portfolio context",
|
|
9321
|
+
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.",
|
|
9322
|
+
inputSchema: readContextInputSchema
|
|
9323
|
+
},
|
|
9324
|
+
async ({ context }) => {
|
|
9325
|
+
const resolved = resolveContext(context);
|
|
9326
|
+
if (!resolved.ok) return text({ ok: false, errors: resolved.errors });
|
|
9327
|
+
return text({ ok: true, ...buildInterviewPlan(resolved.context, resolved.contextId) });
|
|
9328
|
+
}
|
|
9329
|
+
);
|
|
9330
|
+
server.registerTool(
|
|
9331
|
+
"assemble_initiative",
|
|
9332
|
+
{
|
|
9333
|
+
title: "Assemble initiative",
|
|
9334
|
+
description: "Turns a compact spec (metadata + named sub-dimension ratings + confidence per dimension + optional sections, plus the organisation's `context` \u2014 contextId or file \u2014 when the user provided it) into a fully-formed, contract-valid initiative. Mints the id and timestamps (pass `id` only to UPDATE an existing initiative), DERIVES the four dimension scores (mean of the enabled subs) and validates against the API contract and \u2014 with context \u2014 the organisation's own lists and ids. Returns {ok, initiative, derivedScores, warnings, errors, contextId}. On errors, fix the listed fields and call again. Show derivedScores (and warnings) to the user before exporting.",
|
|
9335
|
+
inputSchema: compactSpecSchema
|
|
9336
|
+
},
|
|
9337
|
+
async (spec) => text(assembleInitiative(spec))
|
|
9338
|
+
);
|
|
9339
|
+
server.registerTool(
|
|
9340
|
+
"export_initiative_file",
|
|
9341
|
+
{
|
|
9342
|
+
title: "Export initiative file",
|
|
9343
|
+
description: "Assembles the SAME compact spec (and context) you passed to assemble_initiative and wraps the result in the app's single-initiative JSON envelope. Returns {ok, filename, json, importInstructions, derivedScores, warnings}. Save `json` under `filename`; the user imports it via Import/Export \u2192 Single initiative \u2192 'Add as new' (or 'Update' when the spec carried an existing id or the name matches) \u2192 Confirm. sourceMode/language are recorded in the file (defaulting to the context's); whether the app keeps EU-AI-Act fields depends on the organisation's AI-Act module switch.",
|
|
9344
|
+
inputSchema: exportInputSchema
|
|
9345
|
+
},
|
|
9346
|
+
async (input) => {
|
|
9347
|
+
const parsed = compactSpecSchema.safeParse(input.spec);
|
|
9348
|
+
if (!parsed.success) return text({ ok: false, errors: formatIssues(parsed.error), warnings: [] });
|
|
9349
|
+
const rawContext = input.context ?? parsed.data.context;
|
|
9350
|
+
const result = assembleInitiative({ ...parsed.data, context: rawContext });
|
|
9351
|
+
if (!result.ok || !result.initiative) return text({ ok: false, errors: result.errors, warnings: result.warnings, ...result.contextId ? { contextId: result.contextId } : {} });
|
|
9352
|
+
const ctx = rawContext !== void 0 ? resolveContext(rawContext) : void 0;
|
|
9353
|
+
const ctxData = ctx && ctx.ok ? ctx.context : void 0;
|
|
9354
|
+
const envelope = buildEnvelope(result.initiative, {
|
|
9355
|
+
sourceMode: input.sourceMode ?? ctxData?.portfolioMode,
|
|
9356
|
+
language: input.language ?? ctxData?.language
|
|
9357
|
+
});
|
|
9358
|
+
return text({
|
|
9359
|
+
ok: true,
|
|
9360
|
+
filename: input.filename ?? suggestFilename(result.initiative.name),
|
|
9361
|
+
json: JSON.stringify(envelope, null, 2),
|
|
9362
|
+
importInstructions: IMPORT_INSTRUCTIONS,
|
|
9363
|
+
derivedScores: result.derivedScores,
|
|
9364
|
+
warnings: result.warnings,
|
|
9365
|
+
...result.contextId ? { contextId: result.contextId } : {},
|
|
9366
|
+
update: parsed.data.id !== void 0
|
|
9367
|
+
});
|
|
9368
|
+
}
|
|
9369
|
+
);
|
|
9370
|
+
return server;
|
|
9371
|
+
}
|
|
6716
9372
|
|
|
6717
9373
|
// src/index.ts
|
|
6718
|
-
|
|
6719
|
-
var text = (payload) => ({
|
|
6720
|
-
content: [{ type: "text", text: JSON.stringify(payload, null, 2) }]
|
|
6721
|
-
});
|
|
6722
|
-
server.registerResource(
|
|
6723
|
-
"initiative-schema",
|
|
6724
|
-
new ResourceTemplate("initiative://schema", { list: void 0 }),
|
|
6725
|
-
{
|
|
6726
|
-
title: "Initiative schema",
|
|
6727
|
-
description: "Every field, enum and the 30 scored sub-dimensions (with EN/DE labels and help text) an initiative needs, plus the handoff steps.",
|
|
6728
|
-
mimeType: "application/json"
|
|
6729
|
-
},
|
|
6730
|
-
async (uri) => ({
|
|
6731
|
-
contents: [{ uri: uri.href, mimeType: "application/json", text: JSON.stringify(buildSchemaDescriptor(), null, 2) }]
|
|
6732
|
-
})
|
|
6733
|
-
);
|
|
6734
|
-
server.registerTool(
|
|
6735
|
-
"get_initiative_schema",
|
|
6736
|
-
{
|
|
6737
|
-
title: "Get initiative schema",
|
|
6738
|
-
description: "Returns the field catalog: required fields, enum values, the four dimensions with their named sub-dimensions (rate each 0\u2013100) and confidence scale, optional sections, and the import handoff steps. Call this first.",
|
|
6739
|
-
inputSchema: {}
|
|
6740
|
-
},
|
|
6741
|
-
async () => text(buildSchemaDescriptor())
|
|
6742
|
-
);
|
|
6743
|
-
server.registerTool(
|
|
6744
|
-
"assemble_initiative",
|
|
6745
|
-
{
|
|
6746
|
-
title: "Assemble initiative",
|
|
6747
|
-
description: "Turns a compact spec (metadata + named sub-dimension ratings + confidence per dimension) into a fully-formed, contract-valid initiative. Mints the id and timestamps, DERIVES the four dimension scores (mean of subs) and validates against the API contract. Returns {ok, initiative, derivedScores, warnings, errors}. On errors, fix the listed fields and call again. Show derivedScores to the user as a sanity check before exporting.",
|
|
6748
|
-
inputSchema: compactSpecSchema.shape
|
|
6749
|
-
},
|
|
6750
|
-
async (input) => text(assembleInitiative(input))
|
|
6751
|
-
);
|
|
6752
|
-
server.registerTool(
|
|
6753
|
-
"export_initiative_file",
|
|
6754
|
-
{
|
|
6755
|
-
title: "Export initiative file",
|
|
6756
|
-
description: "Wraps an assembled initiative (or assembles a spec first) in the app's single-initiative JSON envelope and returns {filename, json, importInstructions}. Save `json` under `filename`; the user imports it in the app via Import/Export \u2192 Single initiative \u2192 'Add as new' \u2192 Confirm. sourceMode must match the target portfolio mode (default ai) or AI-Act fields are stripped on import.",
|
|
6757
|
-
inputSchema: exportInputSchema.shape
|
|
6758
|
-
},
|
|
6759
|
-
async (input) => {
|
|
6760
|
-
let initiative;
|
|
6761
|
-
if (input.spec) {
|
|
6762
|
-
const result = assembleInitiative(input.spec);
|
|
6763
|
-
if (!result.ok || !result.initiative) return text({ ok: false, errors: result.errors, warnings: result.warnings });
|
|
6764
|
-
initiative = result.initiative;
|
|
6765
|
-
} else if (input.initiative !== void 0) {
|
|
6766
|
-
const parsed = CreateInitiativeBody.safeParse(input.initiative);
|
|
6767
|
-
if (!parsed.success) {
|
|
6768
|
-
return text({
|
|
6769
|
-
ok: false,
|
|
6770
|
-
errors: parsed.error.issues.map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`)
|
|
6771
|
-
});
|
|
6772
|
-
}
|
|
6773
|
-
initiative = parsed.data;
|
|
6774
|
-
} else {
|
|
6775
|
-
return text({ ok: false, errors: ["Provide either `spec` (compact) or `initiative` (assembled)."] });
|
|
6776
|
-
}
|
|
6777
|
-
const envelope = buildEnvelope(initiative, { sourceMode: input.sourceMode, language: input.language });
|
|
6778
|
-
return text({
|
|
6779
|
-
ok: true,
|
|
6780
|
-
filename: input.filename ?? suggestFilename(initiative.name),
|
|
6781
|
-
json: JSON.stringify(envelope, null, 2),
|
|
6782
|
-
importInstructions: IMPORT_INSTRUCTIONS,
|
|
6783
|
-
derivedScores: {
|
|
6784
|
-
valueScale: initiative.evaluation.valueScale.score,
|
|
6785
|
-
feasibility: initiative.evaluation.feasibility.score,
|
|
6786
|
-
governance: initiative.evaluation.governance.score,
|
|
6787
|
-
strategic: initiative.evaluation.strategic.score
|
|
6788
|
-
}
|
|
6789
|
-
});
|
|
6790
|
-
}
|
|
6791
|
-
);
|
|
6792
|
-
var transport = new StdioServerTransport();
|
|
6793
|
-
await server.connect(transport);
|
|
6794
|
-
//# sourceMappingURL=index.mjs.map
|
|
9374
|
+
await createServer().connect(new StdioServerTransport());
|