@bicon/mcp-composer 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -5
- package/dist/index.mjs +279 -101
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ via API keys is a separate, security-reviewed phase.
|
|
|
24
24
|
| Name | What it does |
|
|
25
25
|
|---|---|
|
|
26
26
|
| resource `initiative://schema` / tool `get_initiative_schema` | The field catalog: required fields, enum values, the four dimensions with their named sub-dimensions (EN/DE labels + help text, plus the wording the app uses in digital / innovation portfolios), the exact shape of every optional section, the EU-AI-Act vocabularies, and the handoff steps. **Read this first.** |
|
|
27
|
-
| `assemble_initiative` | Compact spec (metadata + named sub-ratings 0–100 + confidence per dimension + optional sections, optionally the organisation's `context`) → fully-formed initiative validated against the API contract (`CreateInitiativeBody` from `@workspace/api-zod`). Mints the initiative id and every nested row id (decision-log entries, status reports, milestones, incidents — a client never invents ids), **derives** the four dimension scores (the app's own scoring function), accepts dates as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd, returns `{ok, initiative, derivedScores, warnings, errors, contextId}`. Pass `id` (an existing initiative's) only to **update** that initiative. |
|
|
27
|
+
| `assemble_initiative` | Compact spec (metadata + named sub-ratings 0–100 + confidence per dimension + optional sections, optionally the organisation's `context`) → fully-formed initiative validated against the API contract (`CreateInitiativeBody` from `@workspace/api-zod`). Mints the initiative id and every nested row id (decision-log entries, status reports, milestones, risks, follow-ups, incidents — a client never invents ids; an id given to a milestone or risk is a label a follow-up's `milestoneId` / `riskId` can point at, and the link follows the minted id), **derives** the four dimension scores (the app's own scoring function), accepts dates as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd, returns `{ok, initiative, derivedScores, warnings, errors, contextId}`. Pass `id` (an existing initiative's) only to **update** that initiative. |
|
|
28
28
|
| `export_initiative_file` | Takes the **same compact spec**, assembles it and wraps the result in the app's single-initiative JSON envelope; returns `{ok, filename, json, importInstructions, derivedScores, warnings}`. There is one pipeline — a hand-edited initiative object is not an input, so client-supplied scores or unknown keys can never bypass assembly. |
|
|
29
29
|
| `read_portfolio_context` | Takes the organisation's **portfolio-context file** (see below) and returns the interview plan for that organisation — its own labels, help texts and rating notes per sub-dimension, which sub-dimensions are switched off, its business units, categories, tags, skills (id + name), non-archived initiatives (id + name) and the capability map's capabilities (id, name, domain, importance, current → target maturity; context version 2), currency, discount rate, whether the EU-AI-Act module is on — plus a short **contextId** that stands in for the file in the two other tools. |
|
|
30
30
|
| `composer_version` | Returns `{composerVersion, capabilities}`. Every *successful* tool result also carries `composerVersion`. |
|
|
@@ -93,10 +93,14 @@ vocabularies (`aiActVocabularies` in the descriptor; the app drops unknown
|
|
|
93
93
|
obligation keys and never shows unknown artifact keys), the score derivation —
|
|
94
94
|
is checked in the assembler, which reports **all** problems of a call at once
|
|
95
95
|
with the allowed values in the message (id shapes included). Row ids of
|
|
96
|
-
decision-log entries, status reports, milestones
|
|
97
|
-
Composer — a client-supplied UUID is kept, anything
|
|
98
|
-
the app keys those rows per initiative and a re-used id
|
|
99
|
-
initiative is exactly what collided on import once.
|
|
96
|
+
decision-log entries, status reports, milestones, risks, follow-ups and
|
|
97
|
+
incidents are minted by the Composer — a client-supplied UUID is kept, anything
|
|
98
|
+
else replaced — because the app keys those rows per initiative and a re-used id
|
|
99
|
+
from another initiative is exactly what collided on import once. A follow-up
|
|
100
|
+
links a milestone or risk by the id the spec gave that row (any label, `"m1"`),
|
|
101
|
+
and the link is rewritten to the minted id; a label that names no row, or two
|
|
102
|
+
rows, is an error, since the app would clear such a link on save without a
|
|
103
|
+
word.
|
|
100
104
|
|
|
101
105
|
Errors the SDK raises before a handler runs (`Input validation error: …`) carry
|
|
102
106
|
no `composerVersion` — that is normal. A *successful* result without it means an
|
package/dist/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
12
12
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
13
|
|
|
14
14
|
// src/version.ts
|
|
15
|
-
var COMPOSER_VERSION = true ? "0.
|
|
15
|
+
var COMPOSER_VERSION = true ? "0.9.0" : readPackageVersion();
|
|
16
16
|
|
|
17
17
|
// ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
|
|
18
18
|
var external_exports = {};
|
|
@@ -4271,6 +4271,7 @@ var listSnapshotsResponseInitiativesItemBusinessUnitMax = 200;
|
|
|
4271
4271
|
var listSnapshotsResponseInitiativesItemOwnerMax = 200;
|
|
4272
4272
|
var listSnapshotsResponseInitiativesItemDescriptionMax = 1e4;
|
|
4273
4273
|
var listSnapshotsResponseInitiativesItemAiCategoryMax = 200;
|
|
4274
|
+
var listSnapshotsResponseInitiativesItemDriverBasisMax = 200;
|
|
4274
4275
|
var listSnapshotsResponseInitiativesItemTagsItemMax = 200;
|
|
4275
4276
|
var listSnapshotsResponseInitiativesItemTagsMax = 1e3;
|
|
4276
4277
|
var listSnapshotsResponseInitiativesItemDocsUrlMax = 2e3;
|
|
@@ -4356,6 +4357,8 @@ var ListSnapshotsResponseItem = objectType({
|
|
|
4356
4357
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
4357
4358
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4358
4359
|
"aiCategory": stringType().max(listSnapshotsResponseInitiativesItemAiCategoryMax),
|
|
4360
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
4361
|
+
"driverBasis": stringType().max(listSnapshotsResponseInitiativesItemDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
4359
4362
|
"tags": arrayType(stringType().max(listSnapshotsResponseInitiativesItemTagsItemMax)).max(listSnapshotsResponseInitiativesItemTagsMax),
|
|
4360
4363
|
"docsUrl": stringType().max(listSnapshotsResponseInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4361
4364
|
"pmUrl": stringType().max(listSnapshotsResponseInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -4668,6 +4671,7 @@ var createSnapshotBodyInitiativesItemBusinessUnitMax = 200;
|
|
|
4668
4671
|
var createSnapshotBodyInitiativesItemOwnerMax = 200;
|
|
4669
4672
|
var createSnapshotBodyInitiativesItemDescriptionMax = 1e4;
|
|
4670
4673
|
var createSnapshotBodyInitiativesItemAiCategoryMax = 200;
|
|
4674
|
+
var createSnapshotBodyInitiativesItemDriverBasisMax = 200;
|
|
4671
4675
|
var createSnapshotBodyInitiativesItemTagsItemMax = 200;
|
|
4672
4676
|
var createSnapshotBodyInitiativesItemTagsMax = 1e3;
|
|
4673
4677
|
var createSnapshotBodyInitiativesItemDocsUrlMax = 2e3;
|
|
@@ -4753,6 +4757,8 @@ var CreateSnapshotBody = objectType({
|
|
|
4753
4757
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
4754
4758
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
4755
4759
|
"aiCategory": stringType().max(createSnapshotBodyInitiativesItemAiCategoryMax),
|
|
4760
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
4761
|
+
"driverBasis": stringType().max(createSnapshotBodyInitiativesItemDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
4756
4762
|
"tags": arrayType(stringType().max(createSnapshotBodyInitiativesItemTagsItemMax)).max(createSnapshotBodyInitiativesItemTagsMax),
|
|
4757
4763
|
"docsUrl": stringType().max(createSnapshotBodyInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
4758
4764
|
"pmUrl": stringType().max(createSnapshotBodyInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -5071,6 +5077,7 @@ var renameSnapshotResponseInitiativesItemBusinessUnitMax = 200;
|
|
|
5071
5077
|
var renameSnapshotResponseInitiativesItemOwnerMax = 200;
|
|
5072
5078
|
var renameSnapshotResponseInitiativesItemDescriptionMax = 1e4;
|
|
5073
5079
|
var renameSnapshotResponseInitiativesItemAiCategoryMax = 200;
|
|
5080
|
+
var renameSnapshotResponseInitiativesItemDriverBasisMax = 200;
|
|
5074
5081
|
var renameSnapshotResponseInitiativesItemTagsItemMax = 200;
|
|
5075
5082
|
var renameSnapshotResponseInitiativesItemTagsMax = 1e3;
|
|
5076
5083
|
var renameSnapshotResponseInitiativesItemDocsUrlMax = 2e3;
|
|
@@ -5156,6 +5163,8 @@ var RenameSnapshotResponse = objectType({
|
|
|
5156
5163
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
5157
5164
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5158
5165
|
"aiCategory": stringType().max(renameSnapshotResponseInitiativesItemAiCategoryMax),
|
|
5166
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
5167
|
+
"driverBasis": stringType().max(renameSnapshotResponseInitiativesItemDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
5159
5168
|
"tags": arrayType(stringType().max(renameSnapshotResponseInitiativesItemTagsItemMax)).max(renameSnapshotResponseInitiativesItemTagsMax),
|
|
5160
5169
|
"docsUrl": stringType().max(renameSnapshotResponseInitiativesItemDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5161
5170
|
"pmUrl": stringType().max(renameSnapshotResponseInitiativesItemPmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -5469,6 +5478,7 @@ var listInitiativesResponseBusinessUnitMax = 200;
|
|
|
5469
5478
|
var listInitiativesResponseOwnerMax = 200;
|
|
5470
5479
|
var listInitiativesResponseDescriptionMax = 1e4;
|
|
5471
5480
|
var listInitiativesResponseAiCategoryMax = 200;
|
|
5481
|
+
var listInitiativesResponseDriverBasisMax = 200;
|
|
5472
5482
|
var listInitiativesResponseTagsItemMax = 200;
|
|
5473
5483
|
var listInitiativesResponseTagsMax = 1e3;
|
|
5474
5484
|
var listInitiativesResponseDocsUrlMax = 2e3;
|
|
@@ -5548,6 +5558,8 @@ var ListInitiativesResponseItem = objectType({
|
|
|
5548
5558
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
5549
5559
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5550
5560
|
"aiCategory": stringType().max(listInitiativesResponseAiCategoryMax),
|
|
5561
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
5562
|
+
"driverBasis": stringType().max(listInitiativesResponseDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
5551
5563
|
"tags": arrayType(stringType().max(listInitiativesResponseTagsItemMax)).max(listInitiativesResponseTagsMax),
|
|
5552
5564
|
"docsUrl": stringType().max(listInitiativesResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5553
5565
|
"pmUrl": stringType().max(listInitiativesResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -5857,6 +5869,7 @@ var createInitiativeBodyOneBusinessUnitMax = 200;
|
|
|
5857
5869
|
var createInitiativeBodyOneOwnerMax = 200;
|
|
5858
5870
|
var createInitiativeBodyOneDescriptionMax = 1e4;
|
|
5859
5871
|
var createInitiativeBodyOneAiCategoryMax = 200;
|
|
5872
|
+
var createInitiativeBodyOneDriverBasisMax = 200;
|
|
5860
5873
|
var createInitiativeBodyOneTagsItemMax = 200;
|
|
5861
5874
|
var createInitiativeBodyOneTagsMax = 1e3;
|
|
5862
5875
|
var createInitiativeBodyOneDocsUrlMax = 2e3;
|
|
@@ -5936,6 +5949,8 @@ var CreateInitiativeBody = objectType({
|
|
|
5936
5949
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
5937
5950
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
5938
5951
|
"aiCategory": stringType().max(createInitiativeBodyOneAiCategoryMax),
|
|
5952
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
5953
|
+
"driverBasis": stringType().max(createInitiativeBodyOneDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
5939
5954
|
"tags": arrayType(stringType().max(createInitiativeBodyOneTagsItemMax)).max(createInitiativeBodyOneTagsMax),
|
|
5940
5955
|
"docsUrl": stringType().max(createInitiativeBodyOneDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
5941
5956
|
"pmUrl": stringType().max(createInitiativeBodyOnePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -6255,6 +6270,7 @@ var getInitiativeResponseBusinessUnitMax = 200;
|
|
|
6255
6270
|
var getInitiativeResponseOwnerMax = 200;
|
|
6256
6271
|
var getInitiativeResponseDescriptionMax = 1e4;
|
|
6257
6272
|
var getInitiativeResponseAiCategoryMax = 200;
|
|
6273
|
+
var getInitiativeResponseDriverBasisMax = 200;
|
|
6258
6274
|
var getInitiativeResponseTagsItemMax = 200;
|
|
6259
6275
|
var getInitiativeResponseTagsMax = 1e3;
|
|
6260
6276
|
var getInitiativeResponseDocsUrlMax = 2e3;
|
|
@@ -6334,6 +6350,8 @@ var GetInitiativeResponse = objectType({
|
|
|
6334
6350
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
6335
6351
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
6336
6352
|
"aiCategory": stringType().max(getInitiativeResponseAiCategoryMax),
|
|
6353
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
6354
|
+
"driverBasis": stringType().max(getInitiativeResponseDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
6337
6355
|
"tags": arrayType(stringType().max(getInitiativeResponseTagsItemMax)).max(getInitiativeResponseTagsMax),
|
|
6338
6356
|
"docsUrl": stringType().max(getInitiativeResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
6339
6357
|
"pmUrl": stringType().max(getInitiativeResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -6645,6 +6663,7 @@ var updateInitiativeBodyOneBusinessUnitMax = 200;
|
|
|
6645
6663
|
var updateInitiativeBodyOneOwnerMax = 200;
|
|
6646
6664
|
var updateInitiativeBodyOneDescriptionMax = 1e4;
|
|
6647
6665
|
var updateInitiativeBodyOneAiCategoryMax = 200;
|
|
6666
|
+
var updateInitiativeBodyOneDriverBasisMax = 200;
|
|
6648
6667
|
var updateInitiativeBodyOneTagsItemMax = 200;
|
|
6649
6668
|
var updateInitiativeBodyOneTagsMax = 1e3;
|
|
6650
6669
|
var updateInitiativeBodyOneDocsUrlMax = 2e3;
|
|
@@ -6724,6 +6743,8 @@ var UpdateInitiativeBody = objectType({
|
|
|
6724
6743
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
6725
6744
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
6726
6745
|
"aiCategory": stringType().max(updateInitiativeBodyOneAiCategoryMax),
|
|
6746
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
6747
|
+
"driverBasis": stringType().max(updateInitiativeBodyOneDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
6727
6748
|
"tags": arrayType(stringType().max(updateInitiativeBodyOneTagsItemMax)).max(updateInitiativeBodyOneTagsMax),
|
|
6728
6749
|
"docsUrl": stringType().max(updateInitiativeBodyOneDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
6729
6750
|
"pmUrl": stringType().max(updateInitiativeBodyOnePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -7040,6 +7061,7 @@ var updateInitiativeResponseBusinessUnitMax = 200;
|
|
|
7040
7061
|
var updateInitiativeResponseOwnerMax = 200;
|
|
7041
7062
|
var updateInitiativeResponseDescriptionMax = 1e4;
|
|
7042
7063
|
var updateInitiativeResponseAiCategoryMax = 200;
|
|
7064
|
+
var updateInitiativeResponseDriverBasisMax = 200;
|
|
7043
7065
|
var updateInitiativeResponseTagsItemMax = 200;
|
|
7044
7066
|
var updateInitiativeResponseTagsMax = 1e3;
|
|
7045
7067
|
var updateInitiativeResponseDocsUrlMax = 2e3;
|
|
@@ -7119,6 +7141,8 @@ var UpdateInitiativeResponse = objectType({
|
|
|
7119
7141
|
"vendorDependency": enumType(["None", "Single Vendor", "Multi-Vendor", "Internal Build", "Hybrid"]),
|
|
7120
7142
|
"solutionType": enumType(["Internal", "External", "Hybrid"]),
|
|
7121
7143
|
"aiCategory": stringType().max(updateInitiativeResponseAiCategoryMax),
|
|
7144
|
+
"driver": enumType(["regulatory", "market", "internal"]).optional().describe('Why the initiative exists. "regulatory" is must-do work required by law, a regulator or a binding contract.'),
|
|
7145
|
+
"driverBasis": stringType().max(updateInitiativeResponseDriverBasisMax).optional().describe('Optional reference for the driver, e.g. the law or article ("DORA Art. 28").'),
|
|
7122
7146
|
"tags": arrayType(stringType().max(updateInitiativeResponseTagsItemMax)).max(updateInitiativeResponseTagsMax),
|
|
7123
7147
|
"docsUrl": stringType().max(updateInitiativeResponseDocsUrlMax).optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
7124
7148
|
"pmUrl": stringType().max(updateInitiativeResponsePmUrlMax).optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -7505,6 +7529,13 @@ var InitiativeDpiaStatus = {
|
|
|
7505
7529
|
Completed: "Completed"
|
|
7506
7530
|
};
|
|
7507
7531
|
|
|
7532
|
+
// ../../api-zod/src/generated/types/initiativeDriver.ts
|
|
7533
|
+
var InitiativeDriver = {
|
|
7534
|
+
regulatory: "regulatory",
|
|
7535
|
+
market: "market",
|
|
7536
|
+
internal: "internal"
|
|
7537
|
+
};
|
|
7538
|
+
|
|
7508
7539
|
// ../../api-zod/src/generated/types/initiativeHitlPosture.ts
|
|
7509
7540
|
var InitiativeHitlPosture = {
|
|
7510
7541
|
Unattended: "Unattended",
|
|
@@ -7554,6 +7585,7 @@ var StatusReportDimensionEntryRag = {
|
|
|
7554
7585
|
|
|
7555
7586
|
// ../../initiative-model/src/types.ts
|
|
7556
7587
|
var LANGUAGES = ["en", "de"];
|
|
7588
|
+
var DRIVER_BASIS_MAX = 200;
|
|
7557
7589
|
var GATE_TRANSITIONS = [
|
|
7558
7590
|
{ key: "idea-pilot", from: "Idea", to: "Pilot" },
|
|
7559
7591
|
{ key: "pilot-scaling", from: "Pilot", to: "Scaling" },
|
|
@@ -7684,16 +7716,18 @@ var EN_DIGITAL = {
|
|
|
7684
7716
|
"subHelp.dataAvailability": "Availability of the source systems, APIs and master data the solution depends on.",
|
|
7685
7717
|
"subHelp.dataQuality": "Cleanliness, completeness and timeliness of the data flowing through the digital workflow.",
|
|
7686
7718
|
"dim.feasibility.band1.meaning": "Data, solution or integration gaps make delivery uncertain.",
|
|
7687
|
-
"dim.governance.band2.meaning": "Standard
|
|
7688
|
-
"
|
|
7689
|
-
"govBand.
|
|
7690
|
-
"govBand.
|
|
7691
|
-
"govBand.
|
|
7719
|
+
"dim.governance.band2.meaning": "Standard monitoring; periodic review of the system's operation.",
|
|
7720
|
+
"dim.governance.band3.meaning": "Documented procedures, dual approvals and active monitoring required.",
|
|
7721
|
+
"govBand.Low.desc": "0\u201320 \xB7 Minimal oversight \u2014 routine controls; no escalation required",
|
|
7722
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 Controlled operation \u2014 standard monitoring; periodic review",
|
|
7723
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Supervised operation required \u2014 documented procedures, dual approvals, active monitoring",
|
|
7724
|
+
"govBand.High.desc": "61\u201380 \xB7 Restricted rollout \u2014 active board-level oversight, audit trail and access controls",
|
|
7692
7725
|
"govBand.Critical.desc": "81\u2013100 \xB7 High governance sensitivity \u2014 treat as material risk; ringfencing and continuous oversight",
|
|
7693
7726
|
"govLabel.Controlled Automation": "Controlled Operation",
|
|
7694
7727
|
"govLabel.Human-in-the-Loop Required": "Supervised Operation Required",
|
|
7695
7728
|
"govLabel.Restricted Deployment": "Restricted Rollout",
|
|
7696
7729
|
"memo.governance.intro": "{count} initiatives sit in the Restricted Rollout band or above (governance \u2265 61/100) and require active board-level monitoring.",
|
|
7730
|
+
"settings.guardrails.maxHighGovernanceSharePct.hint": "At most this share of active initiatives may carry a governance score above 60 (Restricted Rollout or higher).",
|
|
7697
7731
|
"subHelp.modelRobustness": "Stability of the solution under load, edge cases and unexpected inputs.",
|
|
7698
7732
|
"subHelp.reproducibility": "Maturity of the underlying cloud / platform stack \u2014 proven and supported (managed services, mature regions, SLAs) vs experimental or self-hosted.",
|
|
7699
7733
|
"subHelp.explainability": "How clearly the system's behaviour and outputs can be explained to operators and end-users.",
|
|
@@ -7720,7 +7754,7 @@ var EN_DIGITAL = {
|
|
|
7720
7754
|
"settings.prio.longTermBets": "Multi-Year Programmes",
|
|
7721
7755
|
"settings.prio.incremental": "Continuous Improvement",
|
|
7722
7756
|
"settings.prio.operatingModel": "Operating Model Modernisation",
|
|
7723
|
-
"settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each digital initiative to a strategic archetype. Rules are
|
|
7757
|
+
"settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each digital initiative to a strategic archetype. Rules are listed in funding order, as on the Prioritisation page; each initiative is assigned by the first rule it matches, checked in the order of its precedence number. 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.",
|
|
7724
7758
|
"inventory.col.scores": "Scores (V/F/C/S)",
|
|
7725
7759
|
"concept.eyebrow": "Steering of AI, digital and transformation portfolios",
|
|
7726
7760
|
"concept.title": "Turn fragmented digital projects into a managed portfolio.",
|
|
@@ -7783,10 +7817,10 @@ var EN_DIGITAL = {
|
|
|
7783
7817
|
"method.s2.title": "2. Compliance & Operational Risk Classification",
|
|
7784
7818
|
"method.s2.subtitle": "Compliance & operational-risk bands and what they imply for the control load.",
|
|
7785
7819
|
"method.s2.intro": "Initiatives are classified into bands based on the Compliance & Operational Risk score:",
|
|
7786
|
-
"method.s2.b2": "<strong>21\u201340 \xB7
|
|
7787
|
-
"method.s2.b3": "<strong>41\u201360 \xB7
|
|
7820
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Controlled operation</strong>: standard monitoring; periodic review.",
|
|
7821
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Supervised operation required</strong>: documented procedures, dual approvals, active monitoring.",
|
|
7788
7822
|
"method.s2.b4": "<strong>61\u201380 \xB7 Restricted rollout</strong>: active board-level oversight, audit trail and access controls.",
|
|
7789
|
-
"method.s2.b5": "<strong>81\u2013100 \xB7
|
|
7823
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 High governance sensitivity</strong>: treat as material risk; deploy only with explicit ringfencing.",
|
|
7790
7824
|
"method.s4.subtitle": "How each initiative is positioned on the Business Impact \xD7 Delivery Feasibility plane.",
|
|
7791
7825
|
"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:",
|
|
7792
7826
|
"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.",
|
|
@@ -7796,7 +7830,7 @@ var EN_DIGITAL = {
|
|
|
7796
7830
|
"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.",
|
|
7797
7831
|
"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.",
|
|
7798
7832
|
"memo.assumptions.signals": "No external regulatory, operational-risk or third-party assurance signals have been incorporated into these scores.",
|
|
7799
|
-
"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
|
|
7833
|
+
"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 on the Concentration page: <strong>vendor strategy</strong>, <strong>digital category</strong>, <strong>business unit</strong> and <strong>compliance band</strong>. The board pack uses vendor, category, business unit and solution type, plus a weighted HHI.',
|
|
7800
7834
|
"method.s6.p2": "A business-unit \xD7 digital-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
|
|
7801
7835
|
"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.",
|
|
7802
7836
|
"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.",
|
|
@@ -7817,9 +7851,8 @@ var EN_DIGITAL = {
|
|
|
7817
7851
|
"dim.valueScale.band1.meaning": "Confined to a single team or process with limited financial signal.",
|
|
7818
7852
|
"dim.feasibility.band2.meaning": "Feasible but requires investment in data, integration or operability.",
|
|
7819
7853
|
"dim.feasibility.band3.meaning": "Data, tooling and operability are in place to execute with confidence.",
|
|
7820
|
-
"dim.governance.
|
|
7821
|
-
"dim.
|
|
7822
|
-
"dim.strategic.band3.meaning": "Reshapes operating model, customer experience, or how data is used across the business.",
|
|
7854
|
+
"dim.governance.band4.meaning": "Active board-level oversight, audit trail and access controls required for the digital system.",
|
|
7855
|
+
"dim.strategic.band4.meaning": "Reshapes operating model, customer experience, or how data is used across the business.",
|
|
7823
7856
|
"op.governance.detailLow": "Embedded delivery teams with part-time operational-risk coverage are typically sufficient at this load.",
|
|
7824
7857
|
"boardPack.col.g": "C",
|
|
7825
7858
|
// ── Concept & Methodology page theming ────────────────────────────────
|
|
@@ -7839,14 +7872,9 @@ var EN_DIGITAL = {
|
|
|
7839
7872
|
"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.",
|
|
7840
7873
|
"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.",
|
|
7841
7874
|
"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.",
|
|
7842
|
-
"method.rules.r1.formula": "Value \xD7 Delivery Feasibility \u2192 Portfolio shape",
|
|
7843
|
-
"method.rules.r1.explanation": "Quadrant placement on the Value \xD7 Delivery-Feasibility map drives the go / scale / pilot / stop decision for each initiative.",
|
|
7844
|
-
"method.rules.r2.formula": "Compliance Band \u2192 Veto criterion",
|
|
7845
|
-
"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.",
|
|
7846
|
-
"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.",
|
|
7847
7875
|
"method.s1.dimensions.feasibility": "<strong>Delivery Feasibility & Operability</strong> \u2014 buildability, operability and transparency.",
|
|
7848
7876
|
"method.s1.dimensions.governance": "<strong>Compliance & Operational Risk</strong> \u2014 regulatory, compliance and operational-risk load (deep dive in \xA7 3).",
|
|
7849
|
-
"method.s2.b1": "<strong>0\u201320 \xB7
|
|
7877
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Minimal oversight</strong>: routine controls suffice.",
|
|
7850
7878
|
"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).",
|
|
7851
7879
|
"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.",
|
|
7852
7880
|
"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.",
|
|
@@ -7854,7 +7882,7 @@ var EN_DIGITAL = {
|
|
|
7854
7882
|
"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.",
|
|
7855
7883
|
"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.",
|
|
7856
7884
|
"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.",
|
|
7857
|
-
"method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by the
|
|
7885
|
+
"method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by category in the order listed above (the order the Prioritisation page shows them), 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.",
|
|
7858
7886
|
"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.",
|
|
7859
7887
|
"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.",
|
|
7860
7888
|
"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.",
|
|
@@ -7901,16 +7929,18 @@ var DE_DIGITAL = {
|
|
|
7901
7929
|
"subHelp.dataAvailability": "Verf\xFCgbarkeit der Quellsysteme, Schnittstellen und Stammdaten, von denen die L\xF6sung abh\xE4ngt.",
|
|
7902
7930
|
"subHelp.dataQuality": "Sauberkeit, Vollst\xE4ndigkeit und Aktualit\xE4t der Daten im digitalen Workflow.",
|
|
7903
7931
|
"dim.feasibility.band1.meaning": "L\xFCcken bei Daten, L\xF6sung oder Integration machen die Umsetzung unsicher.",
|
|
7904
|
-
"dim.governance.band2.meaning": "
|
|
7905
|
-
"
|
|
7906
|
-
"govBand.
|
|
7907
|
-
"govBand.
|
|
7908
|
-
"govBand.
|
|
7932
|
+
"dim.governance.band2.meaning": "Standardmonitoring; regelm\xE4ssige \xDCberpr\xFCfung des Betriebs.",
|
|
7933
|
+
"dim.governance.band3.meaning": "Dokumentierte Verfahren, Vier-Augen-Prinzip und aktives Monitoring erforderlich.",
|
|
7934
|
+
"govBand.Low.desc": "0\u201320 \xB7 Minimale Aufsicht \u2014 Routinekontrollen; keine Eskalation erforderlich",
|
|
7935
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 Kontrollierter Betrieb \u2014 Standardmonitoring; regelm\xE4ssige \xDCberpr\xFCfung",
|
|
7936
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Beaufsichtigter Betrieb erforderlich \u2014 dokumentierte Verfahren, Vier-Augen-Prinzip, aktives Monitoring",
|
|
7937
|
+
"govBand.High.desc": "61\u201380 \xB7 Eingeschr\xE4nkter Rollout \u2014 aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen",
|
|
7909
7938
|
"govBand.Critical.desc": "81\u2013100 \xB7 Hohe Governance-Sensitivit\xE4t \u2014 als wesentliches Risiko behandeln; Ringfencing und kontinuierliche Aufsicht",
|
|
7910
7939
|
"govLabel.Controlled Automation": "Kontrollierter Betrieb",
|
|
7911
7940
|
"govLabel.Human-in-the-Loop Required": "Beaufsichtigter Betrieb erforderlich",
|
|
7912
7941
|
"govLabel.Restricted Deployment": "Eingeschr\xE4nkter Rollout",
|
|
7913
7942
|
"memo.governance.intro": "{count} Initiativen liegen im Band \u201EEingeschr\xE4nkter Rollout\u201C oder dar\xFCber (Governance \u2265 61/100) und ben\xF6tigen aktive Vorstandsaufsicht.",
|
|
7943
|
+
"settings.guardrails.maxHighGovernanceSharePct.hint": "H\xF6chstens dieser Anteil der aktiven Initiativen darf einen Governance-Score \xFCber 60 tragen (Eingeschr\xE4nkter Rollout oder h\xF6her).",
|
|
7914
7944
|
"subHelp.modelRobustness": "Stabilit\xE4t der L\xF6sung unter Last, bei Edge-Cases und unerwarteten Eingaben.",
|
|
7915
7945
|
"subHelp.reproducibility": "Reife des zugrundeliegenden Cloud-/Plattform-Stacks \u2014 bew\xE4hrt und supportet (Managed Services, etablierte Regionen, SLAs) vs. experimentell oder selbstgehostet.",
|
|
7916
7946
|
"subHelp.explainability": "Wie klar Verhalten und Ergebnisse des Systems Betreibern und Endnutzern erkl\xE4rbar sind.",
|
|
@@ -7937,7 +7967,7 @@ var DE_DIGITAL = {
|
|
|
7937
7967
|
"settings.prio.longTermBets": "Mehrjahresprogramme",
|
|
7938
7968
|
"settings.prio.incremental": "Kontinuierliche Verbesserung",
|
|
7939
7969
|
"settings.prio.operatingModel": "Betriebsmodell-Modernisierung",
|
|
7940
|
-
"settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede digitale Initiative einem strategischen Archetyp zuordnet. Die Regeln
|
|
7970
|
+
"settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede digitale Initiative einem strategischen Archetyp zuordnet. Die Regeln stehen in F\xF6rderreihenfolge wie auf der Priorisierungsseite; jede Initiative wird der ersten Regel zugeordnet, die sie erf\xFCllt, gepr\xFCft in der Reihenfolge der Pr\xE4zedenznummer. Alle Werte sind Punkte von 0\u2013100 \xFCber die vier Dimensionen: W = Wert & Skalierung, M = Umsetzbarkeit & Betreibbarkeit, C = Compliance & Betriebsrisiko, S = Strategischer Impact.",
|
|
7941
7971
|
"inventory.col.scores": "Punkte (W/M/C/S)",
|
|
7942
7972
|
"concept.eyebrow": "Steuerung von KI-, Digital- und Transformationsportfolios",
|
|
7943
7973
|
"concept.title": "Fragmentierte Digitalprojekte in ein gesteuertes Portfolio verwandeln.",
|
|
@@ -8000,10 +8030,10 @@ var DE_DIGITAL = {
|
|
|
8000
8030
|
"method.s2.title": "2. Compliance- & Betriebsrisiko-Klassifikation",
|
|
8001
8031
|
"method.s2.subtitle": "Compliance- & Betriebsrisiko-B\xE4nder und was sie f\xFCr die Kontroll-Last bedeuten.",
|
|
8002
8032
|
"method.s2.intro": "Initiativen werden auf Basis des Compliance- & Betriebsrisiko-Werts klassifiziert:",
|
|
8003
|
-
"method.s2.b2": "<strong>21\u201340 \xB7
|
|
8004
|
-
"method.s2.b3": "<strong>41\u201360 \xB7
|
|
8033
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Kontrollierter Betrieb</strong>: Standardmonitoring; regelm\xE4ssige \xDCberpr\xFCfung.",
|
|
8034
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Beaufsichtigter Betrieb erforderlich</strong>: dokumentierte Verfahren, Vier-Augen-Prinzip, aktives Monitoring.",
|
|
8005
8035
|
"method.s2.b4": "<strong>61\u201380 \xB7 Eingeschr\xE4nkter Rollout</strong>: aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen.",
|
|
8006
|
-
"method.s2.b5": "<strong>81\u2013100 \xB7
|
|
8036
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Hohe Governance-Sensitivit\xE4t</strong>: als wesentliches Risiko behandeln; nur mit Ringfencing einsetzen.",
|
|
8007
8037
|
"method.s4.subtitle": "Wie jede Initiative auf der Business-Impact-\xD7-Liefer-Machbarkeit-Ebene positioniert wird.",
|
|
8008
8038
|
"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:",
|
|
8009
8039
|
"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.",
|
|
@@ -8013,7 +8043,7 @@ var DE_DIGITAL = {
|
|
|
8013
8043
|
"method.s4.bubbles": "Die Blasengr\xF6sse betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Initiative erscheint also gr\xF6sser, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Compliance- & Betriebsrisiko-Band wider.",
|
|
8014
8044
|
"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.",
|
|
8015
8045
|
"memo.assumptions.signals": "Es wurden keine externen regulatorischen, Betriebsrisiko- oder Drittparteien-Signale in diese Scores einbezogen.",
|
|
8016
|
-
"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>
|
|
8046
|
+
"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 der Konzentrationsseite angewendet: <strong>Anbieterstrategie</strong>, <strong>Digital-Kategorie</strong>, <strong>Gesch\xE4ftseinheit</strong> und <strong>Compliance-Band</strong>. Das Board-Pack verwendet Anbieter, Kategorie, Gesch\xE4ftseinheit und L\xF6sungstyp sowie einen gewichteten HHI.',
|
|
8017
8047
|
"method.s6.p2": "Eine Gesch\xE4ftseinheit-\xD7-Digital-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
|
|
8018
8048
|
"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.",
|
|
8019
8049
|
"concept.dim.value.body": "\xD6konomischer Hebel der digitalen L\xF6sung. Anwendungsf\xE4lle mit hochfrequenten, ressourcenintensiven Aktivit\xE4ten bieten das gr\xF6sste Potenzial f\xFCr \xF6konomische Wirkung; F\xE4lle mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
|
|
@@ -8034,9 +8064,8 @@ var DE_DIGITAL = {
|
|
|
8034
8064
|
"dim.valueScale.band1.meaning": "Auf ein einzelnes Team oder einen Prozess begrenzt; geringer finanzieller Effekt.",
|
|
8035
8065
|
"dim.feasibility.band2.meaning": "Machbar, erfordert aber Investitionen in Daten, Integration oder Betreibbarkeit.",
|
|
8036
8066
|
"dim.feasibility.band3.meaning": "Daten, Tools und Betreibbarkeit sind vorhanden, um mit Vertrauen umzusetzen.",
|
|
8037
|
-
"dim.governance.
|
|
8038
|
-
"dim.
|
|
8039
|
-
"dim.strategic.band3.meaning": "Ver\xE4ndert Betriebsmodell, Kundenerlebnis oder die Datennutzung im Unternehmen.",
|
|
8067
|
+
"dim.governance.band4.meaning": "Aktive Vorstandsaufsicht, Audit-Trail und Zugriffskontrollen f\xFCr das digitale System erforderlich.",
|
|
8068
|
+
"dim.strategic.band4.meaning": "Ver\xE4ndert Betriebsmodell, Kundenerlebnis oder die Datennutzung im Unternehmen.",
|
|
8040
8069
|
"op.governance.detailLow": "Eingebettete Teams mit teilweiser Betriebsrisiko-Abdeckung reichen bei dieser Last meist aus.",
|
|
8041
8070
|
"boardPack.col.g": "C",
|
|
8042
8071
|
// ── Concept & Methodology page theming ────────────────────────────────
|
|
@@ -8056,14 +8085,9 @@ var DE_DIGITAL = {
|
|
|
8056
8085
|
"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.",
|
|
8057
8086
|
"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.",
|
|
8058
8087
|
"concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Compliance-Last-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Verstoss erscheint hier als Entscheidungspunkt.",
|
|
8059
|
-
"method.rules.r1.formula": "Nutzen \xD7 Liefer-Machbarkeit \u2192 Portfolio-Gestalt",
|
|
8060
|
-
"method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Liefer-Machbarkeits-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
|
|
8061
|
-
"method.rules.r2.formula": "Compliance-Band \u2192 Veto-Kriterium",
|
|
8062
|
-
"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.",
|
|
8063
|
-
"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.",
|
|
8064
8088
|
"method.s1.dimensions.feasibility": "<strong>Liefer-Machbarkeit & Betreibbarkeit</strong> \u2014 Umsetzbarkeit, Betreibbarkeit und Transparenz.",
|
|
8065
8089
|
"method.s1.dimensions.governance": "<strong>Compliance & Betriebsrisiko</strong> \u2014 regulatorische, Compliance- und Betriebsrisiko-Last (Vertiefung in \xA7 3).",
|
|
8066
|
-
"method.s2.b1": "<strong>0\u201320 \xB7
|
|
8090
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Minimale Aufsicht</strong>: Routinekontrollen gen\xFCgen.",
|
|
8067
8091
|
"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).",
|
|
8068
8092
|
"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.",
|
|
8069
8093
|
"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.",
|
|
@@ -8071,7 +8095,7 @@ var DE_DIGITAL = {
|
|
|
8071
8095
|
"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.",
|
|
8072
8096
|
"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.",
|
|
8073
8097
|
"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.",
|
|
8074
|
-
"method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach
|
|
8098
|
+
"method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach Kategorie gruppiert, in der oben aufgef\xFChrten Reihenfolge (wie auf der Priorisierungsseite), 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.",
|
|
8075
8099
|
"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.",
|
|
8076
8100
|
"method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wert, Liefer-Machbarkeit, Compliance & Betriebsrisiko, Strategischer Impact) mit ihrer Konfidenz.",
|
|
8077
8101
|
"method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Anbieterstrategie, L\xF6sungstyp, Digital-Kategorie und Tags.",
|
|
@@ -8123,11 +8147,17 @@ var EN_INNOVATION = {
|
|
|
8123
8147
|
"subHelp.dataAvailability": "How much evidence (data, prior art, prototypes) already exists to support the idea.",
|
|
8124
8148
|
"subHelp.dataQuality": "Strength of that evidence \u2014 rigour, sample size, independence, recency.",
|
|
8125
8149
|
"dim.feasibility.band1.meaning": "Concept, capability or partner gaps make delivery uncertain.",
|
|
8126
|
-
"govBand.
|
|
8150
|
+
"govBand.Low.desc": "0\u201320 \xB7 Minimal oversight \u2014 routine stage-gate checkpoints",
|
|
8151
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 Monitored trial \u2014 standard stage-gate controls",
|
|
8152
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Active stewardship required \u2014 stop-loss thresholds and capital limits",
|
|
8153
|
+
"govBand.High.desc": "61\u201380 \xB7 Bounded pilot only \u2014 named sponsor and explicit kill criteria",
|
|
8154
|
+
"govBand.Critical.desc": "81\u2013100 \xB7 Board-level sponsorship required \u2014 treat as material strategic risk",
|
|
8127
8155
|
"govLabel.Controlled Automation": "Monitored Trial",
|
|
8128
8156
|
"govLabel.Human-in-the-Loop Required": "Active Stewardship Required",
|
|
8129
8157
|
"govLabel.Restricted Deployment": "Bounded Pilot Only",
|
|
8130
8158
|
"memo.governance.intro": "{count} initiatives sit in the Bounded Pilot Only band or above (governance \u2265 61/100) and require active board-level monitoring.",
|
|
8159
|
+
"settings.guardrails.maxHighGovernanceSharePct.hint": "At most this share of active initiatives may carry a governance score above 60 (Bounded Pilot Only or higher).",
|
|
8160
|
+
"governance.warning.body": "{count} initiatives require board-level visibility and active risk mitigation due to scores in the Board-Level Sponsorship Required band.",
|
|
8131
8161
|
"govLabel.High Governance Sensitivity": "Board-Level Sponsorship Required",
|
|
8132
8162
|
"subHelp.modelRobustness": "How well the core concept holds up under stress, edge cases and pessimistic assumptions.",
|
|
8133
8163
|
"subHelp.reproducibility": "Likelihood that observed results would repeat under independent conditions.",
|
|
@@ -8155,7 +8185,7 @@ var EN_INNOVATION = {
|
|
|
8155
8185
|
"settings.prio.longTermBets": "Long Horizons (H3)",
|
|
8156
8186
|
"settings.prio.incremental": "Incremental Refinements",
|
|
8157
8187
|
"settings.prio.operatingModel": "New Operating Models",
|
|
8158
|
-
"settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each innovation initiative to a strategic archetype. Rules are
|
|
8188
|
+
"settings.prio.subtitle": "Thresholds used by the Prioritisation page to assign each innovation initiative to a strategic archetype. Rules are listed in funding order, as on the Prioritisation page; each initiative is assigned by the first rule it matches, checked in the order of its precedence number. All values are scores out of 100 across the four dimensions: V = Value Potential, E = Validation & Evidence, U = Governance & Uncertainty, S = Strategic Impact.",
|
|
8159
8189
|
"inventory.col.scores": "Scores (V/E/U/S)",
|
|
8160
8190
|
"concept.eyebrow": "Steering of AI, digital and transformation portfolios",
|
|
8161
8191
|
"concept.title": "Turn scattered experiments into a managed innovation portfolio.",
|
|
@@ -8223,11 +8253,11 @@ var EN_INNOVATION = {
|
|
|
8223
8253
|
"method.s2.title": "2. Governance & Uncertainty Classification",
|
|
8224
8254
|
"method.s2.subtitle": "Uncertainty bands and what they imply for stage-gate posture and stop-loss controls.",
|
|
8225
8255
|
"method.s2.intro": "Initiatives are classified into bands based on the Governance & Uncertainty score:",
|
|
8226
|
-
"method.s2.b1": "<strong>0\u201320 \xB7
|
|
8227
|
-
"method.s2.b2": "<strong>21\u201340 \xB7
|
|
8228
|
-
"method.s2.b3": "<strong>41\u201360 \xB7
|
|
8229
|
-
"method.s2.b4": "<strong>61\u201380 \xB7
|
|
8230
|
-
"method.s2.b5": "<strong>81\u2013100 \xB7
|
|
8256
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Minimal oversight</strong>: routine stage-gate checkpoints; no escalation required.",
|
|
8257
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 Monitored trial</strong>: standard stage-gate controls and progress monitoring.",
|
|
8258
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Active stewardship required</strong>: tight stage-gating with explicit stop-loss thresholds and capital limits.",
|
|
8259
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Bounded pilot only</strong>: active board-level oversight, named sponsor and explicit kill criteria.",
|
|
8260
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Board-level sponsorship required</strong>: treat as material strategic risk; pursue only with explicit ringfencing and continuous oversight.",
|
|
8231
8261
|
"method.s4.subtitle": "How each initiative is positioned on the Business Impact \xD7 Validation plane.",
|
|
8232
8262
|
"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:",
|
|
8233
8263
|
"method.s4.scale": "<strong>Scale</strong> \u2014 Business Impact \u2265 50 and Validation \u2265 50. High impact, strong evidence \u2014 ready to scale.",
|
|
@@ -8237,7 +8267,7 @@ var EN_INNOVATION = {
|
|
|
8237
8267
|
"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.",
|
|
8238
8268
|
"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.",
|
|
8239
8269
|
"memo.assumptions.signals": "No external regulatory, peer-review or third-party assurance signals have been incorporated into these scores.",
|
|
8240
|
-
"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
|
|
8270
|
+
"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 on the Concentration page: <strong>partner strategy</strong>, <strong>innovation category</strong>, <strong>business unit</strong> and <strong>uncertainty band</strong>. The board pack uses partner, category, business unit and bet type, plus a weighted HHI.',
|
|
8241
8271
|
"method.s6.p2": "A business-unit \xD7 innovation-category cluster heatmap on the Concentration page surfaces specific over-exposed combinations beyond the aggregate.",
|
|
8242
8272
|
"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.",
|
|
8243
8273
|
"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.",
|
|
@@ -8264,7 +8294,11 @@ var EN_INNOVATION = {
|
|
|
8264
8294
|
"filters.vendor.open": "Open / internal",
|
|
8265
8295
|
"concentration.hhi.vendor": "Partner strategy",
|
|
8266
8296
|
"concentration.vendor.title": "Partner dependency",
|
|
8267
|
-
"concentration.vendor.subtitle": "
|
|
8297
|
+
"concentration.vendor.subtitle": "Bets split by stage, ordered by lock-in. Click a segment to view the list.",
|
|
8298
|
+
"concentration.measure.count": "Bets",
|
|
8299
|
+
"concentration.tooltip.count": "Bets",
|
|
8300
|
+
"concentration.takeaway.count": "{name}: {value} of {total} bets ({share} %), {prod} already in production.",
|
|
8301
|
+
"concentration.takeaway.noBudget": "No budget recorded for the bets in scope.",
|
|
8268
8302
|
"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.",
|
|
8269
8303
|
"memo.concentration.vendor": "Partner strategy concentration: {name} accounts for {count} of {total} bets ({pct}%).",
|
|
8270
8304
|
"memo.opmodel.vendor": "Partner strategy: {name} should be reviewed against ecosystem-resilience standards; over-reliance on a single partner increases systemic fragility.",
|
|
@@ -8287,17 +8321,13 @@ var EN_INNOVATION = {
|
|
|
8287
8321
|
"dim.feasibility.band2.meaning": "Promising but requires further evidence, prototypes or partner capability.",
|
|
8288
8322
|
"dim.feasibility.band3.label": "Ready to scale",
|
|
8289
8323
|
"dim.feasibility.band3.meaning": "Evidence, capability and a credible path to scale are in place.",
|
|
8290
|
-
"dim.governance.band1.label": "Low uncertainty",
|
|
8291
8324
|
"dim.governance.band1.meaning": "Routine stage-gate checkpoints; no escalation required.",
|
|
8292
|
-
"dim.governance.band2.label": "Gated trial",
|
|
8293
8325
|
"dim.governance.band2.meaning": "Standard stage-gate controls and progress monitoring required.",
|
|
8294
|
-
"dim.governance.band3.
|
|
8295
|
-
"dim.governance.
|
|
8296
|
-
"dim.governance.
|
|
8297
|
-
"dim.governance.band4.meaning": "Treat as material strategic risk; pursue only with explicit ringfencing and continuous oversight.",
|
|
8298
|
-
"dim.strategic.band1.label": "Incremental",
|
|
8326
|
+
"dim.governance.band3.meaning": "Tight stage-gating with explicit stop-loss thresholds and capital limits required.",
|
|
8327
|
+
"dim.governance.band4.meaning": "Active board-level oversight, a named sponsor and explicit kill criteria required.",
|
|
8328
|
+
"dim.governance.band5.meaning": "Treat as material strategic risk; pursue only with explicit ringfencing and continuous oversight.",
|
|
8299
8329
|
"dim.strategic.band1.meaning": "Refines an existing offering only.",
|
|
8300
|
-
"dim.strategic.
|
|
8330
|
+
"dim.strategic.band5.meaning": "Opens new revenue streams or a structural market position.",
|
|
8301
8331
|
"op.governance.detailLow": "Embedded delivery teams with part-time stage-gate coverage are typically sufficient at this load.",
|
|
8302
8332
|
"boardPack.col.f": "E",
|
|
8303
8333
|
"boardPack.col.g": "U",
|
|
@@ -8322,11 +8352,6 @@ var EN_INNOVATION = {
|
|
|
8322
8352
|
"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.",
|
|
8323
8353
|
"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.",
|
|
8324
8354
|
"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.",
|
|
8325
|
-
"method.rules.r1.formula": "Value \xD7 Validation \u2192 Portfolio shape",
|
|
8326
|
-
"method.rules.r1.explanation": "Quadrant placement on the Value \xD7 Validation map drives the go / scale / pilot / stop decision for each initiative.",
|
|
8327
|
-
"method.rules.r2.formula": "Uncertainty Band \u2192 Veto criterion",
|
|
8328
|
-
"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.",
|
|
8329
|
-
"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.",
|
|
8330
8355
|
"method.s1.dimensions.value": "<strong>Value Potential</strong> \u2014 economic and strategic upside.",
|
|
8331
8356
|
"method.s1.dimensions.feasibility": "<strong>Validation & Evidence</strong> \u2014 strength, rigour and repeatability of the evidence.",
|
|
8332
8357
|
"method.s1.dimensions.governance": "<strong>Governance & Uncertainty</strong> \u2014 stage-gate posture and uncertainty load (deep dive in \xA7 3).",
|
|
@@ -8337,7 +8362,7 @@ var EN_INNOVATION = {
|
|
|
8337
8362
|
"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.",
|
|
8338
8363
|
"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.",
|
|
8339
8364
|
"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.",
|
|
8340
|
-
"method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by the
|
|
8365
|
+
"method.s5.ranking": "<strong>Ranking inside the queue.</strong> Initiatives are first grouped by category in the order listed above (the order the Prioritisation page shows them), 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.",
|
|
8341
8366
|
"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.",
|
|
8342
8367
|
"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.",
|
|
8343
8368
|
"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.",
|
|
@@ -8389,11 +8414,17 @@ var DE_INNOVATION = {
|
|
|
8389
8414
|
"subHelp.dataAvailability": "Wie viel Evidenz (Daten, Stand der Technik, Prototypen) die Idee bereits st\xFCtzt.",
|
|
8390
8415
|
"subHelp.dataQuality": "Belastbarkeit dieser Evidenz \u2014 Rigorosit\xE4t, Stichprobengr\xF6sse, Unabh\xE4ngigkeit, Aktualit\xE4t.",
|
|
8391
8416
|
"dim.feasibility.band1.meaning": "L\xFCcken bei Konzept, F\xE4higkeiten oder Partnern machen die Umsetzung unsicher.",
|
|
8392
|
-
"govBand.
|
|
8417
|
+
"govBand.Low.desc": "0\u201320 \xB7 Minimale Aufsicht \u2014 Routine-Stage-Gate-Checkpoints",
|
|
8418
|
+
"govBand.Moderate.desc": "21\u201340 \xB7 \xDCberwachte Erprobung \u2014 Standard-Stage-Gate-Kontrollen",
|
|
8419
|
+
"govBand.Elevated.desc": "41\u201360 \xB7 Aktive Begleitung erforderlich \u2014 Stop-Loss-Schwellen und Kapitalgrenzen",
|
|
8420
|
+
"govBand.High.desc": "61\u201380 \xB7 Nur eingegrenzter Pilot \u2014 benannter Sponsor und explizite Kill-Kriterien",
|
|
8421
|
+
"govBand.Critical.desc": "81\u2013100 \xB7 Vorstandspatenschaft erforderlich \u2014 als wesentliches strategisches Risiko behandeln",
|
|
8393
8422
|
"govLabel.Controlled Automation": "\xDCberwachte Erprobung",
|
|
8394
8423
|
"govLabel.Human-in-the-Loop Required": "Aktive Begleitung erforderlich",
|
|
8395
8424
|
"govLabel.Restricted Deployment": "Nur eingegrenzter Pilot",
|
|
8396
8425
|
"memo.governance.intro": "{count} Initiativen liegen im Band \u201ENur eingegrenzter Pilot\u201C oder dar\xFCber (Governance \u2265 61/100) und ben\xF6tigen aktive Vorstandsaufsicht.",
|
|
8426
|
+
"settings.guardrails.maxHighGovernanceSharePct.hint": "H\xF6chstens dieser Anteil der aktiven Initiativen darf einen Governance-Score \xFCber 60 tragen (Nur eingegrenzter Pilot oder h\xF6her).",
|
|
8427
|
+
"governance.warning.body": "{count} Initiativen ben\xF6tigen aufgrund von Werten im Band \u201EVorstandspatenschaft erforderlich\u201C Vorstandsaufmerksamkeit und aktive Risikominderung.",
|
|
8397
8428
|
"govLabel.High Governance Sensitivity": "Vorstandspatenschaft erforderlich",
|
|
8398
8429
|
"subHelp.modelRobustness": "Wie gut das Kernkonzept Belastung, Edge-Cases und pessimistische Annahmen aush\xE4lt.",
|
|
8399
8430
|
"subHelp.reproducibility": "Wahrscheinlichkeit, dass beobachtete Ergebnisse unter unabh\xE4ngigen Bedingungen wiederholbar sind.",
|
|
@@ -8421,7 +8452,7 @@ var DE_INNOVATION = {
|
|
|
8421
8452
|
"settings.prio.longTermBets": "Lange Horizonte (H3)",
|
|
8422
8453
|
"settings.prio.incremental": "Inkrementelle Verfeinerungen",
|
|
8423
8454
|
"settings.prio.operatingModel": "Neue Betriebsmodelle",
|
|
8424
|
-
"settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede Innovationsinitiative einem strategischen Archetyp zuordnet. Die Regeln
|
|
8455
|
+
"settings.prio.subtitle": "Schwellenwerte, mit denen die Priorisierungsseite jede Innovationsinitiative einem strategischen Archetyp zuordnet. Die Regeln stehen in F\xF6rderreihenfolge wie auf der Priorisierungsseite; jede Initiative wird der ersten Regel zugeordnet, die sie erf\xFCllt, gepr\xFCft in der Reihenfolge der Pr\xE4zedenznummer. Alle Werte sind Punkte von 0\u2013100 \xFCber die vier Dimensionen: W = Wertpotenzial, E = Validierung & Evidenz, U = Governance & Unsicherheit, S = Strategischer Impact.",
|
|
8425
8456
|
"inventory.col.scores": "Punkte (W/E/U/S)",
|
|
8426
8457
|
"concept.eyebrow": "Steuerung von KI-, Digital- und Transformationsportfolios",
|
|
8427
8458
|
"concept.title": "Verstreute Experimente in ein gesteuertes Innovationsportfolio \xFCberf\xFChren.",
|
|
@@ -8489,11 +8520,11 @@ var DE_INNOVATION = {
|
|
|
8489
8520
|
"method.s2.title": "2. Governance- & Unsicherheits-Klassifikation",
|
|
8490
8521
|
"method.s2.subtitle": "Unsicherheits-B\xE4nder und was sie f\xFCr Stage-Gate-Haltung und Stop-Loss-Kontrollen bedeuten.",
|
|
8491
8522
|
"method.s2.intro": "Initiativen werden auf Basis des Governance- & Unsicherheits-Werts klassifiziert:",
|
|
8492
|
-
"method.s2.b1": "<strong>0\u201320 \xB7
|
|
8493
|
-
"method.s2.b2": "<strong>21\u201340 \xB7
|
|
8494
|
-
"method.s2.b3": "<strong>41\u201360 \xB7
|
|
8495
|
-
"method.s2.b4": "<strong>61\u201380 \xB7
|
|
8496
|
-
"method.s2.b5": "<strong>81\u2013100 \xB7
|
|
8523
|
+
"method.s2.b1": "<strong>0\u201320 \xB7 Minimale Aufsicht</strong>: Routine-Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
|
|
8524
|
+
"method.s2.b2": "<strong>21\u201340 \xB7 \xDCberwachte Erprobung</strong>: Standard-Stage-Gate-Kontrollen und Fortschrittsmonitoring.",
|
|
8525
|
+
"method.s2.b3": "<strong>41\u201360 \xB7 Aktive Begleitung erforderlich</strong>: strenges Stage-Gating mit expliziten Stop-Loss-Schwellen und Kapitalgrenzen.",
|
|
8526
|
+
"method.s2.b4": "<strong>61\u201380 \xB7 Nur eingegrenzter Pilot</strong>: aktive Vorstandsaufsicht, benannter Sponsor und explizite Kill-Kriterien.",
|
|
8527
|
+
"method.s2.b5": "<strong>81\u2013100 \xB7 Vorstandspatenschaft erforderlich</strong>: als wesentliches strategisches Risiko behandeln; nur mit Ringfencing und kontinuierlicher Aufsicht verfolgen.",
|
|
8497
8528
|
"method.s4.subtitle": "Wie jede Initiative auf der Business-Impact-\xD7-Validierung-Ebene positioniert wird.",
|
|
8498
8529
|
"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:",
|
|
8499
8530
|
"method.s4.scale": "<strong>Skalieren</strong> \u2014 Business Impact \u2265 50 und Validierung \u2265 50. Hoher Impact, starke Evidenz \u2014 bereit zur Skalierung.",
|
|
@@ -8503,7 +8534,7 @@ var DE_INNOVATION = {
|
|
|
8503
8534
|
"method.s4.bubbles": "Die Blasengr\xF6sse betont zus\xE4tzlich den strategischen Impact f\xFCr sich (eine strategische Wette erscheint also gr\xF6sser, selbst wenn ihr Wert-Score moderat ist); die Farbe spiegelt das Unsicherheits-Band wider.",
|
|
8504
8535
|
"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.",
|
|
8505
8536
|
"memo.assumptions.signals": "Es wurden keine externen regulatorischen, Peer-Review- oder Drittparteien-Signale in diese Scores einbezogen.",
|
|
8506
|
-
"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>
|
|
8537
|
+
"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 der Konzentrationsseite angewendet: <strong>Partnerstrategie</strong>, <strong>Innovations-Kategorie</strong>, <strong>Gesch\xE4ftseinheit</strong> und <strong>Unsicherheits-Band</strong>. Das Board-Pack verwendet Partner, Kategorie, Gesch\xE4ftseinheit und Wettentyp sowie einen gewichteten HHI.',
|
|
8507
8538
|
"method.s6.p2": "Eine Gesch\xE4ftseinheit-\xD7-Innovations-Kategorie-Heatmap auf der Konzentrations-Seite deckt dar\xFCber hinaus spezifische \xFCberexponierte Kombinationen jenseits des Aggregats auf.",
|
|
8508
8539
|
"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.",
|
|
8509
8540
|
"concept.dim.value.body": "Strategisches und \xF6konomisches Potenzial der Innovationswette. Wetten auf grosse, wachsende oder unterversorgte Chancen bieten das gr\xF6sste Upside; Wetten mit begrenztem Volumen oder marginalen Effizienzgewinnen rechtfertigen den organisatorischen Aufwand selten.",
|
|
@@ -8530,7 +8561,11 @@ var DE_INNOVATION = {
|
|
|
8530
8561
|
"filters.vendor.open": "Offen / intern",
|
|
8531
8562
|
"concentration.hhi.vendor": "Partnerstrategie",
|
|
8532
8563
|
"concentration.vendor.title": "Partner-Abh\xE4ngigkeit",
|
|
8533
|
-
"concentration.vendor.subtitle": "
|
|
8564
|
+
"concentration.vendor.subtitle": "Wetten nach Phase aufgeteilt, nach Lock-in geordnet. Segment anklicken, um die Liste anzuzeigen.",
|
|
8565
|
+
"concentration.measure.count": "Wetten",
|
|
8566
|
+
"concentration.tooltip.count": "Wetten",
|
|
8567
|
+
"concentration.takeaway.count": "{name}: {value} von {total} Wetten ({share} %), {prod} davon bereits in Produktion.",
|
|
8568
|
+
"concentration.takeaway.noBudget": "F\xFCr die Wetten im Fokus ist kein Budget erfasst.",
|
|
8534
8569
|
"concentration.obs.vendor": "Hohe Partnerkonzentration. Das Portfolio h\xE4ngt wesentlich von wenigen externen Partnern ab; eine Verbreiterung des \xD6kosystems reduziert die systemische Abh\xE4ngigkeit.",
|
|
8535
8570
|
"memo.concentration.vendor": "Partnerstrategie-Konzentration: {name} steht f\xFCr {count} von {total} Wetten ({pct} %).",
|
|
8536
8571
|
"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.",
|
|
@@ -8553,17 +8588,13 @@ var DE_INNOVATION = {
|
|
|
8553
8588
|
"dim.feasibility.band2.meaning": "Vielversprechend, erfordert aber weitere Evidenz, Prototypen oder Partnerf\xE4higkeit.",
|
|
8554
8589
|
"dim.feasibility.band3.label": "Bereit zur Skalierung",
|
|
8555
8590
|
"dim.feasibility.band3.meaning": "Evidenz, F\xE4higkeit und ein glaubw\xFCrdiger Skalierungspfad sind vorhanden.",
|
|
8556
|
-
"dim.governance.band1.label": "Geringe Unsicherheit",
|
|
8557
8591
|
"dim.governance.band1.meaning": "Routinem\xE4ssige Stage-Gate-Checkpoints; keine Eskalation erforderlich.",
|
|
8558
|
-
"dim.governance.band2.
|
|
8559
|
-
"dim.governance.
|
|
8560
|
-
"dim.governance.
|
|
8561
|
-
"dim.governance.
|
|
8562
|
-
"dim.governance.band4.label": "Hohe strategische Exposition",
|
|
8563
|
-
"dim.governance.band4.meaning": "Als materielles strategisches Risiko behandeln; nur mit explizitem Ringfencing und kontinuierlicher Aufsicht verfolgen.",
|
|
8564
|
-
"dim.strategic.band1.label": "Inkrementell",
|
|
8592
|
+
"dim.governance.band2.meaning": "Standard-Stage-Gate-Kontrollen und Fortschrittsmonitoring erforderlich.",
|
|
8593
|
+
"dim.governance.band3.meaning": "Strenges Stage-Gating mit expliziten Stop-Loss-Schwellen und Kapitalgrenzen erforderlich.",
|
|
8594
|
+
"dim.governance.band4.meaning": "Aktive Vorstandsaufsicht, benannter Sponsor und explizite Kill-Kriterien erforderlich.",
|
|
8595
|
+
"dim.governance.band5.meaning": "Als wesentliches strategisches Risiko behandeln; nur mit explizitem Ringfencing und kontinuierlicher Aufsicht verfolgen.",
|
|
8565
8596
|
"dim.strategic.band1.meaning": "Verfeinert nur ein bestehendes Angebot.",
|
|
8566
|
-
"dim.strategic.
|
|
8597
|
+
"dim.strategic.band5.meaning": "Er\xF6ffnet neue Erl\xF6sstr\xF6me oder eine strukturelle Marktposition.",
|
|
8567
8598
|
"op.governance.detailLow": "Eingebettete Teams mit teilweiser Stage-Gate-Abdeckung reichen bei dieser Last meist aus.",
|
|
8568
8599
|
"boardPack.col.f": "E",
|
|
8569
8600
|
"boardPack.col.g": "U",
|
|
@@ -8588,11 +8619,6 @@ var DE_INNOVATION = {
|
|
|
8588
8619
|
"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.",
|
|
8589
8620
|
"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.",
|
|
8590
8621
|
"concept.features.f30.body": "Eine regelbasierte, nach Dringlichkeit sortierte Liste der Entscheidungen, die die Portfoliodaten selbst einfordern: Stopp-/Aufschub-Kandidaten, Gate-Disziplin, Kapazit\xE4ts- und Budgetengp\xE4sse sowie Konzentration. Nutzenrealisierungs-Regeln markieren Produktionssysteme, die ihren zugesagten Nutzen verfehlen \u2014 oder nie messen. Vom Board gesetzte Leitplanken erg\xE4nzen die roten Linien: Admins definieren Richtwerte in den Einstellungen \u2014 Budgetkonzentrations-Obergrenze je Gesch\xE4ftsbereich, Wert-Untergrenze f\xFCr finanzierte Initiativen und Unsicherheitslast-Obergrenze \u2014 jeweils mit Live-Pr\xFCfung, und jeder Verstoss erscheint hier als Entscheidungspunkt.",
|
|
8591
|
-
"method.rules.r1.formula": "Nutzen \xD7 Validierung \u2192 Portfolio-Gestalt",
|
|
8592
|
-
"method.rules.r1.explanation": "Die Quadrantenposition auf der Nutzen-\xD7-Validierungs-Karte bestimmt die Go-/Skalieren-/Pilot-/Stopp-Entscheidung f\xFCr jede Initiative.",
|
|
8593
|
-
"method.rules.r2.formula": "Unsicherheits-Band \u2192 Veto-Kriterium",
|
|
8594
|
-
"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.",
|
|
8595
|
-
"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.",
|
|
8596
8622
|
"method.s1.dimensions.value": "<strong>Wertpotenzial</strong> \u2014 \xF6konomischer und strategischer Nutzen.",
|
|
8597
8623
|
"method.s1.dimensions.feasibility": "<strong>Validierung & Evidenz</strong> \u2014 St\xE4rke, Strenge und Wiederholbarkeit der Evidenz.",
|
|
8598
8624
|
"method.s1.dimensions.governance": "<strong>Governance & Unsicherheit</strong> \u2014 Stage-Gate-Haltung und Unsicherheitslast (Vertiefung in \xA7 3).",
|
|
@@ -8603,7 +8629,7 @@ var DE_INNOVATION = {
|
|
|
8603
8629
|
"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.",
|
|
8604
8630
|
"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.",
|
|
8605
8631
|
"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.",
|
|
8606
|
-
"method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach
|
|
8632
|
+
"method.s5.ranking": "<strong>Reihenfolge innerhalb der Warteschlange.</strong> Initiativen werden zuerst nach Kategorie gruppiert, in der oben aufgef\xFChrten Reihenfolge (wie auf der Priorisierungsseite), 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.",
|
|
8607
8633
|
"method.s10.p7": "<strong>Definition Einfaches Experiment.</strong> Die Kategorie Einfache Experimente setzt schnelle Zeit-zum-Wert voraus. Ein Einfaches Experiment, das von einem aktiven Vorgelagerten ausserhalb der Einfachen Experimente abh\xE4ngt (Skalierungs-Kandidat, Neue Betriebsmodelle, Hochunsichere Wetten etc.), wird daher automatisch aus den Einfachen Experimenten demotet \u2014 der Vorlauf macht es nicht mehr schnell. Die Regel ist transitiv: H\xE4ngt A von B ab und wird B demotet, wird A in der n\xE4chsten Iteration ebenfalls demotet.",
|
|
8608
8634
|
"method.audit.scope.governance": "<strong>Status</strong> und die vier <strong>Bewertungsdimensions-Scores</strong> (Wertpotenzial, Validierung & Evidenz, Governance & Unsicherheit, Strategischer Impact) mit ihrer Konfidenz.",
|
|
8609
8635
|
"method.audit.scope.metadata": "<strong>Alle Kern-Metadatenfelder</strong> \u2014 Name, Gesch\xE4ftseinheit, Verantwortliche, Beschreibung, Zeitplan, Budget, Partnerstrategie, L\xF6sungstyp, Innovations-Kategorie und Tags.",
|
|
@@ -8613,6 +8639,7 @@ var DE_INNOVATION = {
|
|
|
8613
8639
|
var DEMO_DIGITAL = {
|
|
8614
8640
|
"Advisor Copilot": {
|
|
8615
8641
|
name: "Advisor Workbench",
|
|
8642
|
+
driver: "market",
|
|
8616
8643
|
description: "Unified advisor desktop consolidating CRM, client documents, and meeting prep into one digital workspace.",
|
|
8617
8644
|
aiCategory: "AI Copilot",
|
|
8618
8645
|
owner: "M. Lindqvist",
|
|
@@ -8651,6 +8678,8 @@ var DEMO_DIGITAL = {
|
|
|
8651
8678
|
},
|
|
8652
8679
|
"Client Meeting Summariser": {
|
|
8653
8680
|
name: "Meeting Recording Platform",
|
|
8681
|
+
driver: "regulatory",
|
|
8682
|
+
driverBasis: "MiFID II Art. 16(7): recording of client communications",
|
|
8654
8683
|
description: "Centralised recording and transcription service for client meetings with searchable archive.",
|
|
8655
8684
|
aiCategory: "Customer Interaction AI",
|
|
8656
8685
|
owner: "D. Okafor",
|
|
@@ -8672,6 +8701,7 @@ var DEMO_DIGITAL = {
|
|
|
8672
8701
|
},
|
|
8673
8702
|
"AI Investment Memo Assistant": {
|
|
8674
8703
|
name: "Investment Memo Workflow",
|
|
8704
|
+
driver: "market",
|
|
8675
8705
|
description: "Digital workflow for drafting, reviewing and publishing investment memos with version control.",
|
|
8676
8706
|
aiCategory: "Knowledge Retrieval",
|
|
8677
8707
|
owner: "J. Park",
|
|
@@ -8692,6 +8722,8 @@ var DEMO_DIGITAL = {
|
|
|
8692
8722
|
},
|
|
8693
8723
|
"Compliance Documentation Assistant": {
|
|
8694
8724
|
name: "Compliance Document Portal",
|
|
8725
|
+
driver: "regulatory",
|
|
8726
|
+
driverBasis: "FinSA/FIDLEG and MiFID II documentation and record-keeping duties",
|
|
8695
8727
|
description: "Self-service portal for compliance documentation with templates, approvals and audit trail.",
|
|
8696
8728
|
aiCategory: "Compliance / Risk AI",
|
|
8697
8729
|
owner: "K. S\xF8rensen",
|
|
@@ -8711,6 +8743,8 @@ var DEMO_DIGITAL = {
|
|
|
8711
8743
|
},
|
|
8712
8744
|
"KYC Document Intelligence": {
|
|
8713
8745
|
name: "KYC Onboarding Platform",
|
|
8746
|
+
driver: "regulatory",
|
|
8747
|
+
driverBasis: "Anti-Money Laundering Act (AMLA): customer due diligence",
|
|
8714
8748
|
description: "Digital KYC onboarding with document upload, e-signature and case management.",
|
|
8715
8749
|
aiCategory: "Process Automation",
|
|
8716
8750
|
owner: "A. Ferreira",
|
|
@@ -8746,6 +8780,7 @@ var DEMO_DIGITAL = {
|
|
|
8746
8780
|
},
|
|
8747
8781
|
"Client Service Chat Assistant": {
|
|
8748
8782
|
name: "Client Service Portal",
|
|
8783
|
+
driver: "market",
|
|
8749
8784
|
description: "Self-service portal with ticketing, knowledge base and live-agent escalation.",
|
|
8750
8785
|
aiCategory: "Customer Interaction AI",
|
|
8751
8786
|
owner: "V. Patel",
|
|
@@ -8782,6 +8817,7 @@ var DEMO_DIGITAL = {
|
|
|
8782
8817
|
},
|
|
8783
8818
|
"Portfolio Exception Monitor": {
|
|
8784
8819
|
name: "Portfolio Monitoring Dashboard",
|
|
8820
|
+
driver: "market",
|
|
8785
8821
|
description: "Real-time monitoring dashboard for portfolio breaches with alerting and case workflow.",
|
|
8786
8822
|
aiCategory: "Predictive AI",
|
|
8787
8823
|
owner: "T. Brennan",
|
|
@@ -8800,6 +8836,8 @@ var DEMO_DIGITAL = {
|
|
|
8800
8836
|
},
|
|
8801
8837
|
"Regulatory Change Monitor": {
|
|
8802
8838
|
name: "Regulatory Intelligence Feed",
|
|
8839
|
+
driver: "regulatory",
|
|
8840
|
+
driverBasis: "FINMA expectations on tracking regulatory change",
|
|
8803
8841
|
description: "Aggregated regulatory feed with tagging, distribution and impact-assessment workflow.",
|
|
8804
8842
|
aiCategory: "Compliance / Risk AI",
|
|
8805
8843
|
owner: "L. Yamamoto",
|
|
@@ -8817,6 +8855,7 @@ var DEMO_DIGITAL = {
|
|
|
8817
8855
|
},
|
|
8818
8856
|
"AI Code Assistant": {
|
|
8819
8857
|
name: "Developer Platform",
|
|
8858
|
+
driver: "internal",
|
|
8820
8859
|
description: "Internal developer platform with CI/CD, code review and shared component libraries.",
|
|
8821
8860
|
aiCategory: "AI Copilot",
|
|
8822
8861
|
owner: "R. Schmidt",
|
|
@@ -8838,6 +8877,7 @@ var DEMO_DIGITAL = {
|
|
|
8838
8877
|
},
|
|
8839
8878
|
"Operations Automation Agent": {
|
|
8840
8879
|
name: "Operations Workflow Engine",
|
|
8880
|
+
driver: "internal",
|
|
8841
8881
|
description: "Workflow engine orchestrating back-office operations across systems.",
|
|
8842
8882
|
aiCategory: "Agentic AI",
|
|
8843
8883
|
owner: "H. Tanaka",
|
|
@@ -8857,6 +8897,7 @@ var DEMO_DIGITAL = {
|
|
|
8857
8897
|
},
|
|
8858
8898
|
"Risk Report Narrator": {
|
|
8859
8899
|
name: "Risk Reporting Portal",
|
|
8900
|
+
driver: "internal",
|
|
8860
8901
|
description: "Centralised risk reporting portal with templated commentary and version control.",
|
|
8861
8902
|
aiCategory: "Decision Support",
|
|
8862
8903
|
owner: "E. Novak",
|
|
@@ -8878,6 +8919,7 @@ var DEMO_DIGITAL = {
|
|
|
8878
8919
|
},
|
|
8879
8920
|
"Marketing Content Assistant": {
|
|
8880
8921
|
name: "Marketing Content Hub",
|
|
8922
|
+
driver: "market",
|
|
8881
8923
|
description: "Digital asset management and publishing workflow for marketing content.",
|
|
8882
8924
|
aiCategory: "Generative AI",
|
|
8883
8925
|
owner: "C. Delgado",
|
|
@@ -8899,6 +8941,7 @@ var DEMO_DIGITAL = {
|
|
|
8899
8941
|
},
|
|
8900
8942
|
"HR Knowledge Assistant": {
|
|
8901
8943
|
name: "HR Self-Service Portal",
|
|
8944
|
+
driver: "internal",
|
|
8902
8945
|
description: "Employee self-service portal with policies, FAQ and ticketing.",
|
|
8903
8946
|
aiCategory: "Knowledge Retrieval",
|
|
8904
8947
|
owner: "S. Murphy",
|
|
@@ -8920,6 +8963,7 @@ var DEMO_DIGITAL = {
|
|
|
8920
8963
|
},
|
|
8921
8964
|
"Finance Forecast Commentary Assistant": {
|
|
8922
8965
|
name: "Finance Planning Platform",
|
|
8966
|
+
driver: "internal",
|
|
8923
8967
|
description: "Integrated planning platform consolidating actuals, forecasts and commentary.",
|
|
8924
8968
|
aiCategory: "Decision Support",
|
|
8925
8969
|
owner: "O. Werner",
|
|
@@ -8937,6 +8981,7 @@ var DEMO_DIGITAL = {
|
|
|
8937
8981
|
},
|
|
8938
8982
|
"AI Governance Register": {
|
|
8939
8983
|
name: "Digital Asset Register",
|
|
8984
|
+
driver: "internal",
|
|
8940
8985
|
description: "Centralised register of digital assets with ownership, lifecycle stage and risk attributes.",
|
|
8941
8986
|
aiCategory: "Compliance / Risk AI",
|
|
8942
8987
|
owner: "I. Kowalski",
|
|
@@ -8956,6 +9001,7 @@ var DEMO_DIGITAL = {
|
|
|
8956
9001
|
var DEMO_INNOVATION = {
|
|
8957
9002
|
"Advisor Copilot": {
|
|
8958
9003
|
name: "Clinician Decision Companion Pilot",
|
|
9004
|
+
driver: "market",
|
|
8959
9005
|
description: "In-consultation decision-support companion surfacing patient context, guideline checks and next-best-actions for clinicians.",
|
|
8960
9006
|
aiCategory: "Decision Support",
|
|
8961
9007
|
businessUnit: "Clinical Affairs",
|
|
@@ -9000,6 +9046,7 @@ var DEMO_INNOVATION = {
|
|
|
9000
9046
|
},
|
|
9001
9047
|
"Client Meeting Summariser": {
|
|
9002
9048
|
name: "Ambient Visit Note Capture",
|
|
9049
|
+
driver: "market",
|
|
9003
9050
|
description: "Ambient documentation prototype turning patient-visit conversations into structured, consent-aware clinical notes.",
|
|
9004
9051
|
aiCategory: "Generative AI",
|
|
9005
9052
|
businessUnit: "Patient Experience",
|
|
@@ -9026,6 +9073,7 @@ var DEMO_INNOVATION = {
|
|
|
9026
9073
|
},
|
|
9027
9074
|
"AI Investment Memo Assistant": {
|
|
9028
9075
|
name: "Translational Research Brief Generator",
|
|
9076
|
+
driver: "market",
|
|
9029
9077
|
description: "Research lab drafting first-pass translational briefs from internal studies, public literature and prior trial precedents.",
|
|
9030
9078
|
aiCategory: "Knowledge Retrieval",
|
|
9031
9079
|
businessUnit: "R&D",
|
|
@@ -9052,6 +9100,8 @@ var DEMO_INNOVATION = {
|
|
|
9052
9100
|
},
|
|
9053
9101
|
"Compliance Documentation Assistant": {
|
|
9054
9102
|
name: "Regulatory Submission Draft Lab",
|
|
9103
|
+
driver: "regulatory",
|
|
9104
|
+
driverBasis: "ICH M4 / eCTD format for regulatory submissions",
|
|
9055
9105
|
description: "Lab drafting first-pass regulatory submissions from study reports, guidance documents and prior dossiers.",
|
|
9056
9106
|
aiCategory: "Compliance / Risk AI",
|
|
9057
9107
|
businessUnit: "Regulatory Affairs",
|
|
@@ -9076,6 +9126,8 @@ var DEMO_INNOVATION = {
|
|
|
9076
9126
|
},
|
|
9077
9127
|
"KYC Document Intelligence": {
|
|
9078
9128
|
name: "Patient Intake & Consent Intelligence",
|
|
9129
|
+
driver: "regulatory",
|
|
9130
|
+
driverBasis: "GDPR Art. 9 and ICH GCP E6 informed consent",
|
|
9079
9131
|
description: "Extracts and reconciles patient-intake fields, insurance documents and consent forms across care entry points.",
|
|
9080
9132
|
aiCategory: "Compliance / Risk AI",
|
|
9081
9133
|
businessUnit: "Patient Onboarding",
|
|
@@ -9117,6 +9169,7 @@ var DEMO_INNOVATION = {
|
|
|
9117
9169
|
},
|
|
9118
9170
|
"Client Service Chat Assistant": {
|
|
9119
9171
|
name: "Patient Support Chat Companion",
|
|
9172
|
+
driver: "market",
|
|
9120
9173
|
description: "Front-line patient support chat with clinical guardrails and an escalation pathway to care-team specialists.",
|
|
9121
9174
|
aiCategory: "Customer Interaction AI",
|
|
9122
9175
|
businessUnit: "Patient Experience",
|
|
@@ -9158,6 +9211,8 @@ var DEMO_INNOVATION = {
|
|
|
9158
9211
|
},
|
|
9159
9212
|
"Portfolio Exception Monitor": {
|
|
9160
9213
|
name: "Adverse Event Signal Detection",
|
|
9214
|
+
driver: "regulatory",
|
|
9215
|
+
driverBasis: "EU GVP Module IX: signal management",
|
|
9161
9216
|
description: "Continuously screens post-market data for adverse-event clusters, safety drifts and concentration signals.",
|
|
9162
9217
|
aiCategory: "Predictive AI",
|
|
9163
9218
|
businessUnit: "Pharmacovigilance",
|
|
@@ -9181,6 +9236,7 @@ var DEMO_INNOVATION = {
|
|
|
9181
9236
|
},
|
|
9182
9237
|
"Regulatory Change Monitor": {
|
|
9183
9238
|
name: "Global Regulatory Horizon Scan",
|
|
9239
|
+
driver: "internal",
|
|
9184
9240
|
description: "Scans regulatory feeds across jurisdictions (FDA, EMA, MHRA, PMDA\u2026) and proposes downstream label and protocol updates.",
|
|
9185
9241
|
aiCategory: "Knowledge Retrieval",
|
|
9186
9242
|
businessUnit: "Regulatory Affairs",
|
|
@@ -9203,6 +9259,7 @@ var DEMO_INNOVATION = {
|
|
|
9203
9259
|
},
|
|
9204
9260
|
"AI Code Assistant": {
|
|
9205
9261
|
name: "Bioinformatics Pipeline Copilot",
|
|
9262
|
+
driver: "internal",
|
|
9206
9263
|
description: "Research-engineer copilot for bioinformatics pipelines, covering internal frameworks, validation and reproducibility standards.",
|
|
9207
9264
|
aiCategory: "AI Copilot",
|
|
9208
9265
|
businessUnit: "Bioinformatics",
|
|
@@ -9229,6 +9286,7 @@ var DEMO_INNOVATION = {
|
|
|
9229
9286
|
},
|
|
9230
9287
|
"Operations Automation Agent": {
|
|
9231
9288
|
name: "Lab Automation Agent Research",
|
|
9289
|
+
driver: "internal",
|
|
9232
9290
|
description: "Agentic workflow research for wet-lab and assay operations spanning instruments and LIMS with human approval gates.",
|
|
9233
9291
|
aiCategory: "Agentic AI",
|
|
9234
9292
|
businessUnit: "Lab Operations",
|
|
@@ -9253,6 +9311,8 @@ var DEMO_INNOVATION = {
|
|
|
9253
9311
|
},
|
|
9254
9312
|
"Risk Report Narrator": {
|
|
9255
9313
|
name: "Clinical Safety Report Narrator",
|
|
9314
|
+
driver: "regulatory",
|
|
9315
|
+
driverBasis: "ICH E2C(R2): periodic benefit-risk evaluation reports",
|
|
9256
9316
|
description: "Drafts narrative sections of periodic safety reports (PSURs, DSURs) from underlying signals and study metrics.",
|
|
9257
9317
|
aiCategory: "Decision Support",
|
|
9258
9318
|
businessUnit: "Quality & Safety",
|
|
@@ -9279,6 +9339,7 @@ var DEMO_INNOVATION = {
|
|
|
9279
9339
|
},
|
|
9280
9340
|
"Marketing Content Assistant": {
|
|
9281
9341
|
name: "HCP Content Studio",
|
|
9342
|
+
driver: "market",
|
|
9282
9343
|
description: "Generates first-draft HCP-facing materials aligned to medical voice and regulated-claim guardrails.",
|
|
9283
9344
|
aiCategory: "Generative AI",
|
|
9284
9345
|
businessUnit: "Medical Affairs",
|
|
@@ -9305,6 +9366,7 @@ var DEMO_INNOVATION = {
|
|
|
9305
9366
|
},
|
|
9306
9367
|
"HR Knowledge Assistant": {
|
|
9307
9368
|
name: "Care-Team Knowledge Companion",
|
|
9369
|
+
driver: "internal",
|
|
9308
9370
|
description: "Internal Q&A surface for care-team protocols, on-call pathways, learning materials and onboarding for new clinicians.",
|
|
9309
9371
|
aiCategory: "Knowledge Retrieval",
|
|
9310
9372
|
businessUnit: "People & Culture",
|
|
@@ -9331,6 +9393,7 @@ var DEMO_INNOVATION = {
|
|
|
9331
9393
|
},
|
|
9332
9394
|
"Finance Forecast Commentary Assistant": {
|
|
9333
9395
|
name: "R&D Investment Planning Lab",
|
|
9396
|
+
driver: "internal",
|
|
9334
9397
|
description: "Research lab drafting commentary on R&D programme variances, drawing on portfolio data and management overlays.",
|
|
9335
9398
|
aiCategory: "Decision Support",
|
|
9336
9399
|
businessUnit: "R&D Strategy",
|
|
@@ -9353,6 +9416,7 @@ var DEMO_INNOVATION = {
|
|
|
9353
9416
|
},
|
|
9354
9417
|
"AI Governance Register": {
|
|
9355
9418
|
name: "R&D Portfolio & IP Register",
|
|
9419
|
+
driver: "internal",
|
|
9356
9420
|
description: "Central register of R&D programmes, IP positions, owners and stage-gate cadence with workflow for attestations.",
|
|
9357
9421
|
aiCategory: "Compliance / Risk AI",
|
|
9358
9422
|
businessUnit: "R&D Strategy",
|
|
@@ -9576,6 +9640,7 @@ var AI_RISK_TIERS = enumValues(InitiativeAiRiskTier);
|
|
|
9576
9640
|
var HITL_POSTURES = enumValues(InitiativeHitlPosture);
|
|
9577
9641
|
var DPIA_STATUSES = enumValues(InitiativeDpiaStatus);
|
|
9578
9642
|
var MODEL_CARD_STATUSES = enumValues(InitiativeModelCardStatus);
|
|
9643
|
+
var DRIVERS = enumValues(InitiativeDriver);
|
|
9579
9644
|
var AI_ACT_ROLES = enumValues(AIActDataRole);
|
|
9580
9645
|
var DECISION_KINDS = enumValues(DecisionEntryKind);
|
|
9581
9646
|
var RAG_VALUES = enumValues(StatusReportDimensionEntryRag);
|
|
@@ -9900,6 +9965,13 @@ var OPTIONAL_SECTIONS = [
|
|
|
9900
9965
|
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."
|
|
9901
9966
|
}
|
|
9902
9967
|
},
|
|
9968
|
+
{
|
|
9969
|
+
key: "driver / driverBasis",
|
|
9970
|
+
hint: {
|
|
9971
|
+
en: `Why the initiative exists: regulatory (the app's "Regulatory / Law (must)": required by law, a regulator or a binding contract; prioritisation funds it first unless the user's what-if switch turns that off), market ("Market / Competition": responds to customers or competitors) or internal ("Internal / Operational": efficiency, risk reduction or the organisation's own goals). Ask for it on every initiative. driverBasis is an optional reference of up to 200 characters, e.g. "DORA Art. 28"; ask for it when the driver is regulatory. A basis needs a driver. On an update, send the driver again: the file replaces the record, so an omitted driver is cleared.`,
|
|
9972
|
+
de: "Warum es die Initiative gibt: regulatory (\u201ERegulatorisch / Gesetz (Pflicht)\u201C: verlangt durch Gesetz, Aufsicht oder einen verbindlichen Vertrag; die Priorisierung f\xF6rdert sie zuerst, ausser der Was-w\xE4re-wenn-Schalter schaltet das ab), market (\u201EMarkt / Wettbewerb\u201C: antwortet auf Kunden oder Wettbewerber) oder internal (\u201EIntern / Betrieblich\u201C: Effizienz, Risikominderung oder eigene Ziele der Organisation). Bei jeder Initiative danach fragen. driverBasis ist eine optionale Referenz mit bis zu 200 Zeichen, z. B. \u201EDORA Art. 28\u201C; bei regulatory danach fragen. Eine Grundlage braucht einen Ausl\xF6ser. Bei einem Update den Ausl\xF6ser wieder senden: Die Datei ersetzt den Datensatz, ein fehlender Ausl\xF6ser wird gel\xF6scht."
|
|
9973
|
+
}
|
|
9974
|
+
},
|
|
9903
9975
|
{ key: "aiRiskTier / hitlPosture / dpiaStatus / modelCardStatus", hint: { en: "EU AI Act governance flags", de: "EU-AI-Act-Governance-Flags" } },
|
|
9904
9976
|
{
|
|
9905
9977
|
key: "aiAct",
|
|
@@ -9914,8 +9986,22 @@ var OPTIONAL_SECTIONS = [
|
|
|
9914
9986
|
{
|
|
9915
9987
|
key: "milestones",
|
|
9916
9988
|
hint: {
|
|
9917
|
-
en:
|
|
9918
|
-
de: "[{title, baselineDate, forecastDate?, doneDate?, note?}] \u2014 datierte Zwischenergebnisse (Pilot live, Anbieter gew\xE4hlt, Go-live; h\xF6chstens 30, Titel bis 300 Zeichen). baselineDate ist der vereinbarte Plan, forecastDate die heutige Erwartung, wenn sie abweicht, doneDate sobald erreicht. Nach den 3\u20135 fragen, die der Lenkungsausschuss verfolgt. Bei einem Update alle Meilensteine senden, die bleiben sollen: die Datei ersetzt die Liste."
|
|
9989
|
+
en: `[{id?, title, baselineDate, forecastDate?, doneDate?, note?}] \u2014 dated intermediate results (pilot live, vendor selected, go-live; at most 30, title up to 300 characters). baselineDate is the agreed plan; forecastDate today's expectation when it differs; doneDate once reached. id? is a label (e.g. "m1") a follow-up's milestoneId can point at; the stored id is minted. Ask for the 3\u20135 that the steering committee watches. On an update, send every milestone the initiative keeps: the file replaces the list.`,
|
|
9990
|
+
de: "[{id?, title, baselineDate, forecastDate?, doneDate?, note?}] \u2014 datierte Zwischenergebnisse (Pilot live, Anbieter gew\xE4hlt, Go-live; h\xF6chstens 30, Titel bis 300 Zeichen). baselineDate ist der vereinbarte Plan, forecastDate die heutige Erwartung, wenn sie abweicht, doneDate sobald erreicht. id? ist ein Label (z. B. \u201Em1\u201C), auf das die milestoneId einer Pendenz zeigen kann; die gespeicherte ID wird gepr\xE4gt. Nach den 3\u20135 fragen, die der Lenkungsausschuss verfolgt. Bei einem Update alle Meilensteine senden, die bleiben sollen: die Datei ersetzt die Liste."
|
|
9991
|
+
}
|
|
9992
|
+
},
|
|
9993
|
+
{
|
|
9994
|
+
key: "risks",
|
|
9995
|
+
hint: {
|
|
9996
|
+
en: '[{id?, title, category, probability, impact, status, residualProbability?, residualImpact?, owner?, mitigation?, raisedDate?, reviewDate?, occurredDate?, note?}] \u2014 the concrete project risks (at most 50, title up to 300 characters): category delivery | vendor | data | people | regulatory | technical | financial; probability and impact 1\u20135 as whole numbers (score = product: low 1\u20134, medium 5\u20139, high 10\u201316, critical 20\u201325); status open | mitigating | closed | occurred (occurred = an issue; give occurredDate, which a closed, resolved issue keeps); the residual pair is the expectation after mitigation (both or neither); owner is free text; mitigation is the plan, its actions are follow-ups linked by riskId; id? is a label (e.g. "r1") for that link, the stored id is minted. Ask for the 2\u20135 risks the steering committee would want named, with owner and mitigation. On an update, send every risk the initiative keeps: the file replaces the list.',
|
|
9997
|
+
de: "[{id?, title, category, probability, impact, status, residualProbability?, residualImpact?, owner?, mitigation?, raisedDate?, reviewDate?, occurredDate?, note?}] \u2014 die konkreten Projektrisiken (h\xF6chstens 50, Titel bis 300 Zeichen): category delivery | vendor | data | people | regulatory | technical | financial; probability und impact 1\u20135 als ganze Zahlen (Score = Produkt: niedrig 1\u20134, mittel 5\u20139, hoch 10\u201316, kritisch 20\u201325); status open | mitigating | closed | occurred (occurred = ein Issue; occurredDate angeben, ein geschlossenes, gel\xF6stes Issue beh\xE4lt es); das Restrisiko-Paar ist die Erwartung nach der Massnahme (beide oder keines); owner ist Freitext; mitigation ist der Plan, seine Schritte sind Pendenzen mit riskId; id? ist ein Label (z. B. \u201Er1\u201C) f\xFCr diese Verkn\xFCpfung, die gespeicherte ID wird gepr\xE4gt. Nach den 2\u20135 Risiken fragen, die der Lenkungsausschuss benannt haben will, mit Owner und Massnahme. Bei einem Update alle Risiken senden, die bleiben sollen: die Datei ersetzt die Liste."
|
|
9998
|
+
}
|
|
9999
|
+
},
|
|
10000
|
+
{
|
|
10001
|
+
key: "followUps",
|
|
10002
|
+
hint: {
|
|
10003
|
+
en: '[{title, dueDate, assigneeName?, assigneeUserId?, doneDate?, milestoneId?, riskId?, note?}] \u2014 agreed next steps: who does what by when (at most 50, title up to 300 characters). assigneeName is a free-text name; assigneeUserId only when the user gives a member id from the app (the app clears an id that is not a member, the name stays). milestoneId / riskId point at a milestone or risk of this same spec by the id you gave it there (e.g. "m1", "r1"); the Composer mints the stored ids and keeps the link. Ask for the open actions, in particular one per severe risk. On an update, send every follow-up the initiative keeps: the file replaces the list.',
|
|
10004
|
+
de: "[{title, dueDate, assigneeName?, assigneeUserId?, doneDate?, milestoneId?, riskId?, note?}] \u2014 vereinbarte n\xE4chste Schritte: wer macht was bis wann (h\xF6chstens 50, Titel bis 300 Zeichen). assigneeName ist ein Freitext-Name; assigneeUserId nur, wenn der Benutzer eine Mitglieds-ID aus der App nennt (die App l\xF6scht eine ID, die kein Mitglied ist, der Name bleibt). milestoneId / riskId zeigen auf einen Meilenstein oder ein Risiko derselben Spezifikation \xFCber die dort vergebene id (z. B. \u201Em1\u201C, \u201Er1\u201C); der Composer pr\xE4gt die gespeicherten IDs und beh\xE4lt die Verkn\xFCpfung. Nach den offenen Schritten fragen, besonders je einem pro schwerem Risiko. Bei einem Update alle Pendenzen senden, die bleiben sollen: die Datei ersetzt die Liste."
|
|
9919
10005
|
}
|
|
9920
10006
|
},
|
|
9921
10007
|
{
|
|
@@ -9977,7 +10063,7 @@ function describeZodShape(schema, depth = 0) {
|
|
|
9977
10063
|
}
|
|
9978
10064
|
function buildSchemaDescriptor(sectionShapes) {
|
|
9979
10065
|
return {
|
|
9980
|
-
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, milestones 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.",
|
|
10066
|
+
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, milestones, risks, follow-ups and incidents are minted by the Composer \u2014 never invent ids; an id you give a milestone or risk is only a label inside the spec, for a follow-up's milestoneId / riskId. To UPDATE an existing initiative pass its id as `id`; omit it for a new one.",
|
|
9981
10067
|
requiredFields: REQUIRED_FIELDS,
|
|
9982
10068
|
enums: {
|
|
9983
10069
|
status: STATUS_VALUES,
|
|
@@ -9988,6 +10074,7 @@ function buildSchemaDescriptor(sectionShapes) {
|
|
|
9988
10074
|
hitlPosture: HITL_POSTURES,
|
|
9989
10075
|
dpiaStatus: DPIA_STATUSES,
|
|
9990
10076
|
modelCardStatus: MODEL_CARD_STATUSES,
|
|
10077
|
+
driver: DRIVERS,
|
|
9991
10078
|
aiActRole: AI_ACT_ROLES,
|
|
9992
10079
|
decisionKind: DECISION_KINDS,
|
|
9993
10080
|
rag: RAG_VALUES
|
|
@@ -10009,7 +10096,8 @@ function buildSchemaDescriptor(sectionShapes) {
|
|
|
10009
10096
|
},
|
|
10010
10097
|
optionalSections: OPTIONAL_SECTIONS,
|
|
10011
10098
|
// Exact shapes of the object/array sections (aiAct, economics, actuals,
|
|
10012
|
-
// decisionLog, statusReports, requiredSkills, capabilityImpacts,
|
|
10099
|
+
// decisionLog, statusReports, requiredSkills, capabilityImpacts,
|
|
10100
|
+
// milestones, risks, followUps). Keys ending in "?" are
|
|
10013
10101
|
// optional; "enum[a|b]" lists the allowed values; "<key>" marks a map.
|
|
10014
10102
|
// Pass these sections as JSON objects/arrays. Any key not listed is
|
|
10015
10103
|
// rejected with its path.
|
|
@@ -10105,7 +10193,7 @@ var parseIfString = (v) => typeof v === "string" ? tryParseJson(v) : v;
|
|
|
10105
10193
|
function wireSection(inner, description) {
|
|
10106
10194
|
return external_exports.preprocess(parseIfString, deepStrict(inner)).describe(description);
|
|
10107
10195
|
}
|
|
10108
|
-
var SECTION_KEYS = ["aiAct", "economics", "actuals", "decisionLog", "statusReports", "requiredSkills", "capabilityImpacts", "milestones"];
|
|
10196
|
+
var SECTION_KEYS = ["aiAct", "economics", "actuals", "decisionLog", "statusReports", "requiredSkills", "capabilityImpacts", "milestones", "risks", "followUps"];
|
|
10109
10197
|
var SECTION_SCHEMAS = Object.fromEntries(
|
|
10110
10198
|
SECTION_KEYS.map((k) => [k, contractSection(k)])
|
|
10111
10199
|
);
|
|
@@ -10116,7 +10204,9 @@ var SECTION_DESCRIPTIONS = {
|
|
|
10116
10204
|
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.",
|
|
10117
10205
|
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.",
|
|
10118
10206
|
capabilityImpacts: "Capability links [{capabilityId, kind: improve|new|replace|retire, maturityTo?}]. maturityTo 1\u20135 = level reached (omit = the capability's target; never for retire). capabilityId: a capability of the map, from read_portfolio_context \u2192 lists.capabilities; without the context leave the list empty.",
|
|
10119
|
-
milestones:
|
|
10207
|
+
milestones: `Milestones (max 30, title \u2264300 chars): baselineDate = the plan, forecastDate = today's expectation (omit = baseline), doneDate = reached. Dates dd/mm/yyyy or yyyy-mm-dd; ids minted \u2014 an id you give (e.g. "m1") is a label a follow-up's milestoneId can point at. An update replaces the list: send all.`,
|
|
10208
|
+
risks: `Risks (max 50, title \u2264300 chars): category delivery|vendor|data|people|regulatory|technical|financial; probability and impact 1\u20135 as whole numbers (score = product); status open|mitigating|closed|occurred (occurred = an issue, with occurredDate); residualProbability + residualImpact = the expectation after mitigation (both or neither); owner (free text), mitigation (the plan), raisedDate, reviewDate, note. Dates dd/mm/yyyy or yyyy-mm-dd; ids minted \u2014 an id you give (e.g. "r1") is a label a follow-up's riskId can point at. An update replaces the list: send all.`,
|
|
10209
|
+
followUps: "Follow-ups (max 50, title \u2264300 chars): who does what by when \u2014 title, dueDate, assigneeName (free text; assigneeUserId only when the user gives a member id from the app), doneDate once done, note; milestoneId / riskId = the id label of a milestone or risk in THIS spec (the Composer keeps the link when it mints the stored ids). Dates dd/mm/yyyy or yyyy-mm-dd; ids minted. An update replaces the list: send all.",
|
|
10120
10210
|
requiredSkills: "Required skills [{skillId, fte, runFte?}] \u2014 fte is the build-phase demand, the optional runFte the run-team demand after the planned end (absent = build fte continues, 0 = no run demand). skillId must be the id of a skill that exists in the organisation. With the portfolio context the Composer validates it (read_portfolio_context \u2192 lists.skills gives id + name); without it, leave the list empty and link skills in the app."
|
|
10121
10211
|
};
|
|
10122
10212
|
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()]));
|
|
@@ -10144,6 +10234,8 @@ var compactSpecSchema = external_exports.object({
|
|
|
10144
10234
|
vendorDependency: external_exports.enum(VENDOR_DEPS),
|
|
10145
10235
|
solutionType: external_exports.enum(SOLUTION_TYPES),
|
|
10146
10236
|
aiCategory: requiredText().describe("With a portfolio context: one of the organisation's categories (read_portfolio_context \u2192 lists.categories)"),
|
|
10237
|
+
driver: external_exports.enum(DRIVERS).optional().describe("Why the initiative exists: regulatory (law, regulator or binding contract; funded first by default), market (customers, competitors) or internal (efficiency, risk reduction, own goals). On an update, send it again: an omitted driver is cleared."),
|
|
10238
|
+
driverBasis: external_exports.preprocess((v) => typeof v === "string" && v.trim() === "" ? void 0 : v, external_exports.string().trim().min(1).max(DRIVER_BASIS_MAX).optional()).describe('Optional reference for the driver, e.g. "DORA Art. 28"; needs a driver'),
|
|
10147
10239
|
tags: external_exports.array(external_exports.string().trim().min(1)).optional(),
|
|
10148
10240
|
docsUrl: external_exports.string().optional().describe("Link to the project documentation (Confluence, SharePoint, \u2026)"),
|
|
10149
10241
|
pmUrl: external_exports.string().optional().describe("Link to the project-management tool (Jira, MS Project, \u2026)"),
|
|
@@ -10162,6 +10254,8 @@ var compactSpecSchema = external_exports.object({
|
|
|
10162
10254
|
requiredSkills: wireSection(SECTION_SCHEMAS.requiredSkills, SECTION_DESCRIPTIONS.requiredSkills).optional(),
|
|
10163
10255
|
capabilityImpacts: wireSection(SECTION_SCHEMAS.capabilityImpacts, SECTION_DESCRIPTIONS.capabilityImpacts).optional(),
|
|
10164
10256
|
milestones: wireSection(SECTION_SCHEMAS.milestones, SECTION_DESCRIPTIONS.milestones).optional(),
|
|
10257
|
+
risks: wireSection(SECTION_SCHEMAS.risks, SECTION_DESCRIPTIONS.risks).optional(),
|
|
10258
|
+
followUps: wireSection(SECTION_SCHEMAS.followUps, SECTION_DESCRIPTIONS.followUps).optional(),
|
|
10165
10259
|
aiRiskTier: external_exports.enum(AI_RISK_TIERS).optional(),
|
|
10166
10260
|
hitlPosture: external_exports.enum(HITL_POSTURES).optional(),
|
|
10167
10261
|
dpiaStatus: external_exports.enum(DPIA_STATUSES).optional(),
|
|
@@ -10599,16 +10693,80 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
10599
10693
|
}
|
|
10600
10694
|
if (m.doneDate && isCalendarDate(m.doneDate) && m.doneDate > today) warnings.push(`milestones.${i}.doneDate: ${m.doneDate} lies in the future \u2014 a done date marks a milestone already reached.`);
|
|
10601
10695
|
}
|
|
10696
|
+
const risks = spec.risks ?? [];
|
|
10697
|
+
for (const [i, r] of risks.entries()) {
|
|
10698
|
+
if (!r.title.trim()) errors.push(`risks.${i}.title: must not be empty (got only spaces).`);
|
|
10699
|
+
for (const field of ["probability", "impact", "residualProbability", "residualImpact"]) {
|
|
10700
|
+
const v = r[field];
|
|
10701
|
+
if (v !== void 0 && !Number.isInteger(v)) errors.push(`risks.${i}.${field}: must be a whole number 1\u20135 (got ${v}).`);
|
|
10702
|
+
}
|
|
10703
|
+
if (r.residualProbability === void 0 !== (r.residualImpact === void 0)) {
|
|
10704
|
+
errors.push(`risks.${i}: the residual needs both residualProbability and residualImpact \u2014 send the pair, or neither.`);
|
|
10705
|
+
}
|
|
10706
|
+
for (const field of ["raisedDate", "reviewDate", "occurredDate"]) {
|
|
10707
|
+
const v = r[field];
|
|
10708
|
+
if (v !== void 0 && !isCalendarDate(v)) errors.push(`risks.${i}.${field}: "${v}" is not a real calendar date \u2014 dd/mm/yyyy or yyyy-mm-dd`);
|
|
10709
|
+
}
|
|
10710
|
+
if (r.occurredDate !== void 0 && (r.status === "open" || r.status === "mitigating")) {
|
|
10711
|
+
errors.push(`risks.${i}.occurredDate: an open or mitigating risk has not occurred \u2014 set status to occurred (or closed for a resolved issue), or omit the date.`);
|
|
10712
|
+
}
|
|
10713
|
+
if (r.status === "occurred" && r.occurredDate === void 0) {
|
|
10714
|
+
warnings.push(`risks.${i}: status occurred without occurredDate \u2014 the app will show the issue without the date it occurred; send occurredDate (dd/mm/yyyy).`);
|
|
10715
|
+
}
|
|
10716
|
+
if (r.occurredDate && isCalendarDate(r.occurredDate) && r.occurredDate > today) warnings.push(`risks.${i}.occurredDate: ${r.occurredDate} lies in the future \u2014 an issue has already occurred.`);
|
|
10717
|
+
}
|
|
10718
|
+
const followUps = spec.followUps ?? [];
|
|
10719
|
+
const labelCounts = (rows) => {
|
|
10720
|
+
const counts = /* @__PURE__ */ new Map();
|
|
10721
|
+
for (const row of rows) if (row.id !== void 0) counts.set(row.id, (counts.get(row.id) ?? 0) + 1);
|
|
10722
|
+
return counts;
|
|
10723
|
+
};
|
|
10724
|
+
const milestoneLabels = labelCounts(milestones);
|
|
10725
|
+
const riskLabels = labelCounts(risks);
|
|
10726
|
+
const checkLink = (i, field, label, labels, what) => {
|
|
10727
|
+
if (!label) return;
|
|
10728
|
+
const n = labels.get(label) ?? 0;
|
|
10729
|
+
if (n === 0) {
|
|
10730
|
+
errors.push(
|
|
10731
|
+
`followUps.${i}.${field}: "${label}" is not the id of a ${what} in this spec \u2014 give that ${what} an id (any label, e.g. "${field === "milestoneId" ? "m1" : "r1"}") and use it here; the Composer mints the stored ids and keeps the link. The app would clear a link it cannot resolve.`
|
|
10732
|
+
);
|
|
10733
|
+
} else if (n > 1) {
|
|
10734
|
+
errors.push(`followUps.${i}.${field}: "${label}" is the id of ${n} ${what}s in this spec \u2014 ids must be unique for the link to resolve.`);
|
|
10735
|
+
}
|
|
10736
|
+
};
|
|
10737
|
+
for (const [i, f] of followUps.entries()) {
|
|
10738
|
+
if (!f.title.trim()) errors.push(`followUps.${i}.title: must not be empty (got only spaces).`);
|
|
10739
|
+
for (const field of ["dueDate", "doneDate"]) {
|
|
10740
|
+
const v = f[field];
|
|
10741
|
+
if (v !== void 0 && !isCalendarDate(v)) errors.push(`followUps.${i}.${field}: "${v}" is not a real calendar date \u2014 dd/mm/yyyy or yyyy-mm-dd`);
|
|
10742
|
+
}
|
|
10743
|
+
if (f.doneDate && isCalendarDate(f.doneDate) && f.doneDate > today) warnings.push(`followUps.${i}.doneDate: ${f.doneDate} lies in the future \u2014 a done date marks a follow-up already done.`);
|
|
10744
|
+
checkLink(i, "milestoneId", f.milestoneId, milestoneLabels, "milestone");
|
|
10745
|
+
checkLink(i, "riskId", f.riskId, riskLabels, "risk");
|
|
10746
|
+
if (f.assigneeUserId !== void 0 && !f.assigneeName?.trim()) {
|
|
10747
|
+
warnings.push(`followUps.${i}.assigneeUserId: the Composer cannot verify workspace members, and the app clears an id that is not a member of the workspace \u2014 send assigneeName too, so the follow-up keeps its assignee either way.`);
|
|
10748
|
+
}
|
|
10749
|
+
}
|
|
10602
10750
|
const norm2 = (v) => (v ?? "").trim().toLowerCase();
|
|
10603
10751
|
const others = context?.initiatives ?? [];
|
|
10604
10752
|
const ext = norm2(spec.externalId);
|
|
10605
10753
|
const updates = spec.id !== void 0 || !!ext && others.filter((x) => norm2(x.externalId) === ext).length === 1 || others.some((x) => norm2(x.name) === norm2(spec.name));
|
|
10606
|
-
if (
|
|
10607
|
-
|
|
10754
|
+
if (spec.driverBasis !== void 0 && spec.driver === void 0) {
|
|
10755
|
+
errors.push(`driverBasis: "${spec.driverBasis}" is given without a driver \u2014 the app drops a basis without a driver. Send driver (${DRIVERS.join(" / ")}) too, or leave driverBasis out.`);
|
|
10608
10756
|
}
|
|
10609
10757
|
if (updates) {
|
|
10610
|
-
|
|
10611
|
-
|
|
10758
|
+
if (spec.driver === void 0) {
|
|
10759
|
+
warnings.push("driver: none sent, and the app will offer this file as an update \u2014 it replaces the record, so the initiative's driver and basis are cleared. Send driver (and driverBasis) to keep them.");
|
|
10760
|
+
}
|
|
10761
|
+
for (const [key, what] of [
|
|
10762
|
+
["milestones", "milestones"],
|
|
10763
|
+
["risks", "risks"],
|
|
10764
|
+
["followUps", "follow-ups"]
|
|
10765
|
+
]) {
|
|
10766
|
+
if (spec[key] === void 0) {
|
|
10767
|
+
warnings.push(`${key}: none sent, and the app will offer this file as an update \u2014 it replaces the initiative's ${what}, so any the app holds are removed. Send the full list to keep them.`);
|
|
10768
|
+
}
|
|
10769
|
+
}
|
|
10612
10770
|
}
|
|
10613
10771
|
let businessUnit = spec.businessUnit;
|
|
10614
10772
|
let aiCategory = spec.aiCategory;
|
|
@@ -10648,6 +10806,24 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
10648
10806
|
}
|
|
10649
10807
|
const stamp = now.toISOString();
|
|
10650
10808
|
const aiAct = spec.aiAct;
|
|
10809
|
+
const trimTitles = (rows) => rows?.map((r) => ({ ...r, title: r.title.trim() }));
|
|
10810
|
+
const mintedMilestones = trimTitles(mintNestedIds(spec.milestones, stamp));
|
|
10811
|
+
const mintedRisks = trimTitles(mintNestedIds(spec.risks, stamp));
|
|
10812
|
+
const mintedIdByLabel = (given, minted) => new Map(
|
|
10813
|
+
(given ?? []).flatMap((row, i) => {
|
|
10814
|
+
const minted_ = minted?.[i]?.id;
|
|
10815
|
+
return row.id !== void 0 && minted_ !== void 0 ? [[row.id, minted_]] : [];
|
|
10816
|
+
})
|
|
10817
|
+
);
|
|
10818
|
+
const milestoneIds = mintedIdByLabel(milestones, mintedMilestones);
|
|
10819
|
+
const riskIds = mintedIdByLabel(risks, mintedRisks);
|
|
10820
|
+
const mintedFollowUps = trimTitles(mintNestedIds(spec.followUps, stamp))?.map(
|
|
10821
|
+
({ milestoneId, riskId, ...f }) => ({
|
|
10822
|
+
...f,
|
|
10823
|
+
...milestoneId ? { milestoneId: milestoneIds.get(milestoneId) ?? milestoneId } : {},
|
|
10824
|
+
...riskId ? { riskId: riskIds.get(riskId) ?? riskId } : {}
|
|
10825
|
+
})
|
|
10826
|
+
);
|
|
10651
10827
|
const candidate = {
|
|
10652
10828
|
...spec,
|
|
10653
10829
|
id: spec.id ?? randomUUID(),
|
|
@@ -10660,7 +10836,9 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
|
|
|
10660
10836
|
evaluation,
|
|
10661
10837
|
decisionLog: mintNestedIds(spec.decisionLog, stamp),
|
|
10662
10838
|
statusReports: mintNestedIds(spec.statusReports, stamp),
|
|
10663
|
-
milestones:
|
|
10839
|
+
milestones: mintedMilestones,
|
|
10840
|
+
risks: mintedRisks,
|
|
10841
|
+
followUps: mintedFollowUps,
|
|
10664
10842
|
aiAct: aiAct ? { ...aiAct, ...aiAct.incidents ? { incidents: mintNestedIds(aiAct.incidents, stamp, true) } : {} } : void 0,
|
|
10665
10843
|
createdAt: stamp,
|
|
10666
10844
|
updatedAt: stamp
|
|
@@ -10698,7 +10876,7 @@ var IMPORT_INSTRUCTIONS = [
|
|
|
10698
10876
|
"2. In the BICon app (signed in to the target organisation), open Import/Export.",
|
|
10699
10877
|
"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.",
|
|
10700
10878
|
"4. In the 'Single initiative' card, drop the file (or Browse).",
|
|
10701
|
-
"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, Initiative ID or name \u2014 the app keeps that initiative's id and creation date, and REPLACES everything else with this file, decision log
|
|
10879
|
+
"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, Initiative ID or name \u2014 the app keeps that initiative's id and creation date, and REPLACES everything else with this file, decision log, status reports, milestones, risks and follow-ups included) and Confirm.",
|
|
10702
10880
|
"6. The initiative appears in the Inventory with the derived dimension scores."
|
|
10703
10881
|
].join("\n");
|
|
10704
10882
|
|
|
@@ -10730,7 +10908,7 @@ function createServer() {
|
|
|
10730
10908
|
async () => text({
|
|
10731
10909
|
capabilities: [
|
|
10732
10910
|
"strict typed schemas: unknown keys anywhere in the spec are rejected with their exact path (never silently dropped)",
|
|
10733
|
-
"sections (aiAct/economics/actuals/decisionLog/statusReports/requiredSkills/capabilityImpacts/milestones) accept a JSON object/array or the same JSON as a string; row ids are minted by the Composer",
|
|
10911
|
+
"sections (aiAct/economics/actuals/decisionLog/statusReports/requiredSkills/capabilityImpacts/milestones/risks/followUps) accept a JSON object/array or the same JSON as a string; row ids are minted by the Composer, and a follow-up's milestoneId / riskId names a milestone or risk of the same spec by the id label given there",
|
|
10734
10912
|
"dates accepted as dd/mm/yyyy, dd.mm.yyyy or yyyy-mm-dd (stored as yyyy-mm-dd)",
|
|
10735
10913
|
"get_initiative_schema: sectionShapes, aiActVocabularies, portfolio-mode wording overlays",
|
|
10736
10914
|
"AI-Act vocabulary and id-format enforcement with the allowed values in the error",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bicon/mcp-composer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "MCP server that helps an AI client compose a valid BICon portfolio initiative and hand it back as an import file (draft-first, no auth, no API calls).",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "BICon Establishment",
|