@acorex-platform/module-software-management-client 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/fesm2022/acorex-platform-module-software-management-client-accept-software-suggestion.command-DVcM5TTv.mjs +83 -0
  2. package/fesm2022/acorex-platform-module-software-management-client-accept-software-suggestion.command-DVcM5TTv.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-software-management-client-complete-software-phase.activity-C56HhK20.mjs +182 -0
  4. package/fesm2022/acorex-platform-module-software-management-client-complete-software-phase.activity-C56HhK20.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-software-management-client-contracts.mjs +1196 -0
  6. package/fesm2022/acorex-platform-module-software-management-client-contracts.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-software-management-client-discovery-kickoff.commands-gB0_htfF.mjs +162 -0
  8. package/fesm2022/acorex-platform-module-software-management-client-discovery-kickoff.commands-gB0_htfF.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-software-management-client-discovery-report.commands-D2ricLpq.mjs +278 -0
  10. package/fesm2022/acorex-platform-module-software-management-client-discovery-report.commands-D2ricLpq.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-software-management-client-introduction-exit-message.util-DShFM8MY.mjs +71 -0
  12. package/fesm2022/acorex-platform-module-software-management-client-introduction-exit-message.util-DShFM8MY.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-software-management-client-introduction-task.activities-BOsJbeJe.mjs +158 -0
  14. package/fesm2022/acorex-platform-module-software-management-client-introduction-task.activities-BOsJbeJe.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-software-management-client-software-command.util-BsoKQCX5.mjs +9 -0
  16. package/fesm2022/acorex-platform-module-software-management-client-software-command.util-BsoKQCX5.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-software-management-client-start-software-definition-flow.command-B0YCgv2V.mjs +124 -0
  18. package/fesm2022/acorex-platform-module-software-management-client-start-software-definition-flow.command-B0YCgv2V.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-software-management-client.mjs +260 -0
  20. package/fesm2022/acorex-platform-module-software-management-client.mjs.map +1 -0
  21. package/package.json +28 -0
  22. package/types/acorex-platform-module-software-management-client-contracts.d.ts +547 -0
  23. package/types/acorex-platform-module-software-management-client.d.ts +9 -0
@@ -0,0 +1,547 @@
1
+ import { AXPModuleManifest, AXPWorkflowDefinition } from '@acorex-platform/framework-shared/core';
2
+ import { AXPEntityModel, AXPRecordWorkflowInfo } from '@acorex-platform/framework-shared/entity';
3
+
4
+ /**
5
+ * Applications & Platform capability for defining standalone software products.
6
+ * Group ids live in `AXPCommonPermissionGroupKeys`.
7
+ */
8
+ declare const AXPSoftwareManagementPermissionKeys: {
9
+ readonly MaintainSoftwareDefinitions: "ApplicationsPlatform:Permission:MaintainSoftwareDefinitions";
10
+ };
11
+
12
+ declare const AXPSoftwareManagementMenuKeys: {
13
+ readonly Root: "SoftwareManagement:Menu";
14
+ readonly Software: "SoftwareManagement:Menu:Software";
15
+ readonly DiscoveryItems: "SoftwareManagement:Menu:DiscoveryItems";
16
+ readonly ScopeItems: "SoftwareManagement:Menu:ScopeItems";
17
+ readonly Requirements: "SoftwareManagement:Menu:Requirements";
18
+ readonly AcceptanceCriteria: "SoftwareManagement:Menu:AcceptanceCriteria";
19
+ readonly BusinessRules: "SoftwareManagement:Menu:BusinessRules";
20
+ readonly Modules: "SoftwareManagement:Menu:Modules";
21
+ readonly Features: "SoftwareManagement:Menu:Features";
22
+ readonly UseCases: "SoftwareManagement:Menu:UseCases";
23
+ readonly DesignDecisions: "SoftwareManagement:Menu:DesignDecisions";
24
+ };
25
+
26
+ declare const RootConfig: {
27
+ readonly config: {
28
+ readonly i18n: "software-management";
29
+ readonly module: "SoftwareManagement";
30
+ };
31
+ readonly module: {
32
+ readonly module: "software-management";
33
+ readonly name: "SoftwareManagement";
34
+ readonly title: "@software-management:module.title";
35
+ readonly icon: "fa-light fa-diagram-project";
36
+ };
37
+ readonly entities: {
38
+ readonly software: {
39
+ readonly name: "Software";
40
+ readonly source: "SoftwareManagement.Software";
41
+ readonly title: "@software-management:entities.software.title";
42
+ readonly titlePlural: "@software-management:entities.software.plural";
43
+ readonly icon: "fa-light fa-lightbulb";
44
+ };
45
+ readonly discoveryItem: {
46
+ readonly name: "SoftwareDiscoveryItem";
47
+ readonly source: "SoftwareManagement.SoftwareDiscoveryItem";
48
+ readonly title: "@software-management:entities.discovery-item.title";
49
+ readonly titlePlural: "@software-management:entities.discovery-item.plural";
50
+ readonly icon: "fa-light fa-magnifying-glass";
51
+ };
52
+ readonly scopeItem: {
53
+ readonly name: "SoftwareScopeItem";
54
+ readonly source: "SoftwareManagement.SoftwareScopeItem";
55
+ readonly title: "@software-management:entities.scope-item.title";
56
+ readonly titlePlural: "@software-management:entities.scope-item.plural";
57
+ readonly icon: "fa-light fa-border-outer";
58
+ };
59
+ readonly requirement: {
60
+ readonly name: "SoftwareRequirement";
61
+ readonly source: "SoftwareManagement.SoftwareRequirement";
62
+ readonly title: "@software-management:entities.requirement.title";
63
+ readonly titlePlural: "@software-management:entities.requirement.plural";
64
+ readonly icon: "fa-light fa-list-check";
65
+ };
66
+ readonly acceptanceCriterion: {
67
+ readonly name: "SoftwareAcceptanceCriterion";
68
+ readonly source: "SoftwareManagement.SoftwareAcceptanceCriterion";
69
+ readonly title: "@software-management:entities.acceptance-criterion.title";
70
+ readonly titlePlural: "@software-management:entities.acceptance-criterion.plural";
71
+ readonly icon: "fa-light fa-badge-check";
72
+ };
73
+ readonly businessRule: {
74
+ readonly name: "SoftwareBusinessRule";
75
+ readonly source: "SoftwareManagement.SoftwareBusinessRule";
76
+ readonly title: "@software-management:entities.business-rule.title";
77
+ readonly titlePlural: "@software-management:entities.business-rule.plural";
78
+ readonly icon: "fa-light fa-scale-balanced";
79
+ };
80
+ readonly module: {
81
+ readonly name: "SoftwareModule";
82
+ readonly source: "SoftwareManagement.SoftwareModule";
83
+ readonly title: "@software-management:entities.module.title";
84
+ readonly titlePlural: "@software-management:entities.module.plural";
85
+ readonly icon: "fa-light fa-cubes";
86
+ };
87
+ readonly feature: {
88
+ readonly name: "SoftwareFeature";
89
+ readonly source: "SoftwareManagement.SoftwareFeature";
90
+ readonly title: "@software-management:entities.feature.title";
91
+ readonly titlePlural: "@software-management:entities.feature.plural";
92
+ readonly icon: "fa-light fa-puzzle-piece";
93
+ };
94
+ readonly useCase: {
95
+ readonly name: "SoftwareUseCase";
96
+ readonly source: "SoftwareManagement.SoftwareUseCase";
97
+ readonly title: "@software-management:entities.use-case.title";
98
+ readonly titlePlural: "@software-management:entities.use-case.plural";
99
+ readonly icon: "fa-light fa-person-walking-arrow-right";
100
+ };
101
+ readonly designDecision: {
102
+ readonly name: "SoftwareDesignDecision";
103
+ readonly source: "SoftwareManagement.SoftwareDesignDecision";
104
+ readonly title: "@software-management:entities.design-decision.title";
105
+ readonly titlePlural: "@software-management:entities.design-decision.plural";
106
+ readonly icon: "fa-light fa-compass-drafting";
107
+ };
108
+ };
109
+ };
110
+
111
+ declare const SoftwareManagementManifest: AXPModuleManifest;
112
+
113
+ declare const AXPSoftwareManagementCommandKeys: {
114
+ readonly Software: {
115
+ readonly StartFlow: "SoftwareManagement.Software:StartFlow";
116
+ readonly CompletePhase: "SoftwareManagement.Software:CompletePhase";
117
+ readonly AcceptSuggestion: "SoftwareManagement:AcceptSuggestion";
118
+ readonly GenerateKickoffSheet: "SoftwareManagement.Software:GenerateKickoffSheet";
119
+ readonly SubmitKickoffSheet: "SoftwareManagement.Software:SubmitKickoffSheet";
120
+ readonly ExportKickoffPdf: "SoftwareManagement.Software:ExportKickoffPdf";
121
+ readonly OpenKickoffSheet: "SoftwareManagement.Software:OpenKickoffSheet";
122
+ readonly ViewPinnedKickoff: "SoftwareManagement.Software:ViewPinnedKickoff";
123
+ readonly GenerateDiscoveryReport: "SoftwareManagement.Software:GenerateDiscoveryReport";
124
+ readonly SubmitDiscoveryReport: "SoftwareManagement.Software:SubmitDiscoveryReport";
125
+ readonly ExportDiscoveryReportPdf: "SoftwareManagement.Software:ExportDiscoveryReportPdf";
126
+ readonly OpenDiscoveryReport: "SoftwareManagement.Software:OpenDiscoveryReport";
127
+ readonly LinkDiscoveryQuestionnaire: "SoftwareManagement.Software:LinkDiscoveryQuestionnaire";
128
+ };
129
+ readonly WorkflowActivity: {
130
+ readonly CompletePhase: "workflow-activity:complete-software-phase";
131
+ readonly LoadIntroduction: "workflow-activity:load-software-introduction";
132
+ readonly SaveIntroduction: "workflow-activity:save-software-introduction";
133
+ };
134
+ };
135
+
136
+ declare const SOFTWARE_PHASES: readonly ["introduction", "discovery", "first-version-scope", "behavior-specification", "design", "delivery-planning"];
137
+ type SoftwarePhase = (typeof SOFTWARE_PHASES)[number];
138
+ declare const SOFTWARE_DEFINITION_WORKFLOW_NAME = "software-definition";
139
+ declare function softwarePhaseIndex(phase: string | null | undefined): number;
140
+ declare function nextSoftwarePhase(phase: string | null | undefined): SoftwarePhase | null;
141
+ declare function isSoftwarePhaseAtLeast(current: string | null | undefined, required: SoftwarePhase): boolean;
142
+
143
+ declare const SOFTWARE_ORIGINS: readonly ["original", "assumption", "suggestion", "approved-fact"];
144
+ type SoftwareOrigin = (typeof SOFTWARE_ORIGINS)[number];
145
+ declare const SOFTWARE_PROPOSED_BY: readonly ["user", "ai"];
146
+ type SoftwareProposedBy = (typeof SOFTWARE_PROPOSED_BY)[number];
147
+ declare const SOFTWARE_DISCOVERY_KINDS: readonly ["audience", "problem", "pain", "current-practice", "constraint", "alternative", "hypothesis", "evidence", "unknown"];
148
+ type SoftwareDiscoveryKind = (typeof SOFTWARE_DISCOVERY_KINDS)[number];
149
+ declare const SOFTWARE_SCOPE_KINDS: readonly ["capability", "out-of-scope", "success-metric"];
150
+ type SoftwareScopeKind = (typeof SOFTWARE_SCOPE_KINDS)[number];
151
+ declare const SOFTWARE_DESIGN_KINDS: readonly ["data-model", "ux", "technical"];
152
+ type SoftwareDesignKind = (typeof SOFTWARE_DESIGN_KINDS)[number];
153
+
154
+ declare const softwareDefinitionWorkflowDefinition: AXPWorkflowDefinition;
155
+
156
+ /** Document type name in Document Management. One kickoff sheet per Software record. */
157
+ declare const DISCOVERY_KICKOFF_DOCUMENT_TYPE_NAME = "software-discovery-kickoff";
158
+ declare const DISCOVERY_KICKOFF_FILE_NAME = "discovery-kickoff.html";
159
+ /**
160
+ * Review statuses stored on DocumentManagement.Document.
161
+ * Same vocabulary as the EDMS document review workflow.
162
+ */
163
+ declare const KICKOFF_REVIEW_STATUS: {
164
+ readonly Draft: "draft";
165
+ readonly InReview: "in-review";
166
+ readonly Approved: "approved";
167
+ readonly Rejected: "rejected";
168
+ readonly RevisionRequested: "revision-requested";
169
+ };
170
+ type KickoffReviewStatus = (typeof KICKOFF_REVIEW_STATUS)[keyof typeof KICKOFF_REVIEW_STATUS];
171
+ declare const KICKOFF_REVIEW_REASON_BASE_DATA = "introduction-fields-changed";
172
+ /** Fields whose change must not silently rewrite an approved sheet. */
173
+ declare const KICKOFF_SOURCE_FIELDS: readonly ["title", "idea", "originalIdea", "initialProblem", "goal", "ownerId", "potentialUsers", "openQuestions"];
174
+ type KickoffCertainty = 'recorded' | 'hypothesis' | 'unknown';
175
+ interface DiscoveryKickoffSource {
176
+ title?: unknown;
177
+ idea?: unknown;
178
+ originalIdea?: unknown;
179
+ initialProblem?: unknown;
180
+ goal?: unknown;
181
+ ownerId?: unknown;
182
+ ownerName?: unknown;
183
+ potentialUsers?: unknown;
184
+ openQuestions?: unknown;
185
+ proposedBy?: unknown;
186
+ origin?: unknown;
187
+ }
188
+ interface DiscoveryKickoffSection {
189
+ key: string;
190
+ titleEn: string;
191
+ titleFa: string;
192
+ body: string;
193
+ certainty: KickoffCertainty;
194
+ }
195
+ interface DiscoveryKickoffSheet {
196
+ title: string;
197
+ fingerprint: string;
198
+ html: string;
199
+ plainText: string;
200
+ sections: DiscoveryKickoffSection[];
201
+ aiDraft: boolean;
202
+ }
203
+ interface DiscoveryKickoffMeta {
204
+ bodyHtml?: string;
205
+ plainText?: string;
206
+ fingerprint?: string;
207
+ aiDraft?: boolean;
208
+ sections?: DiscoveryKickoffSection[];
209
+ }
210
+ /** What introduction must see before it may advance. Discovery reads `approvedVersionId`. */
211
+ interface IntroductionKickoffCheck {
212
+ statusId?: string | null;
213
+ hostVersionId?: string | null;
214
+ approvedVersionId?: string | null;
215
+ approvedFingerprint?: string | null;
216
+ }
217
+ declare const INTRODUCTION_REQUIRED_FIELDS: readonly ["title", "idea", "initialProblem", "goal", "ownerId"];
218
+ type IntroductionRequiredField = (typeof INTRODUCTION_REQUIRED_FIELDS)[number];
219
+ declare const INTRODUCTION_EXIT_MESSAGE: {
220
+ readonly missingFields: "@software-management:messages.introduction.missing-fields";
221
+ readonly kickoffRejected: "@software-management:messages.introduction.kickoff-rejected";
222
+ readonly kickoffRevision: "@software-management:messages.introduction.kickoff-revision";
223
+ readonly kickoffInReview: "@software-management:messages.introduction.kickoff-in-review";
224
+ readonly kickoffDraft: "@software-management:messages.introduction.kickoff-draft";
225
+ readonly kickoffMissing: "@software-management:messages.introduction.kickoff-missing";
226
+ readonly kickoffRequired: "@software-management:messages.introduction.kickoff-required";
227
+ readonly kickoffPinMissing: "@software-management:messages.introduction.kickoff-pin-missing";
228
+ readonly kickoffFingerprintMissing: "@software-management:messages.introduction.kickoff-fingerprint-missing";
229
+ readonly kickoffStale: "@software-management:messages.introduction.kickoff-stale";
230
+ readonly kickoffNotApproved: "@software-management:messages.introduction.kickoff-not-approved";
231
+ readonly kickoffVersionMismatch: "@software-management:messages.introduction.kickoff-version-mismatch";
232
+ readonly ready: "@software-management:messages.introduction.ready";
233
+ readonly saved: "@software-management:messages.introduction.saved";
234
+ };
235
+ interface IntroductionExitDecision {
236
+ ok: boolean;
237
+ message: string;
238
+ /** Document version discovery must keep using. Empty until a version is approved. */
239
+ discoveryVersionId: string;
240
+ /** Required introduction fields that are still empty after lookup and locale coercion. */
241
+ missingFields?: IntroductionRequiredField[];
242
+ }
243
+ declare function kickoffText(value: unknown): string;
244
+ /** Review status stored as a string or as a lookup `{ id }`. */
245
+ declare function kickoffStatusId(value: unknown): string;
246
+ /**
247
+ * Reads introduction text from a string, a locale map, or a lookup stub such as `{ id, displayName }`.
248
+ * A lookup stub contributes its id. Other objects contribute the first non-empty locale string.
249
+ */
250
+ declare function introductionValueText(value: unknown): string;
251
+ declare function missingIntroductionFields(software: DiscoveryKickoffSource): IntroductionRequiredField[];
252
+ /** Stable id of the introduction inputs baked into a sheet version. */
253
+ declare function discoveryKickoffFingerprint(source: DiscoveryKickoffSource): string;
254
+ declare function kickoffSourceFromSoftware(software: DiscoveryKickoffSource & {
255
+ owner?: {
256
+ displayName?: unknown;
257
+ };
258
+ }): DiscoveryKickoffSource;
259
+ /**
260
+ * Builds the discovery kickoff sheet from introduction fields only.
261
+ * Empty research items stay Unknown. Author-supplied guesses stay Hypothesis.
262
+ * AI text is a draft: it is never labeled as evidence or a confirmed fact.
263
+ */
264
+ declare function buildDiscoveryKickoffSheet(source: DiscoveryKickoffSource): DiscoveryKickoffSheet;
265
+ declare function readKickoffMeta(value: unknown): DiscoveryKickoffMeta;
266
+ /** Fingerprint stored on the version, with the host document as fallback. */
267
+ declare function kickoffFingerprintFromRows(version: {
268
+ metaDataForm?: unknown;
269
+ } | null | undefined, host?: {
270
+ metaDataForm?: unknown;
271
+ } | null): string;
272
+ declare function kickoffReviewKeepsIntroduction(statusId: string | null | undefined): boolean;
273
+ /**
274
+ * Fills the gate check from the document when an approved host version exists
275
+ * but the software row has not stored that version yet.
276
+ * An unapproved sheet never becomes the pinned version here.
277
+ */
278
+ declare function buildIntroductionKickoffCheck(input: {
279
+ statusId?: unknown;
280
+ status?: unknown;
281
+ hostVersionId?: unknown;
282
+ approvedVersionId?: unknown;
283
+ approvedFingerprint?: unknown;
284
+ versionFingerprint?: unknown;
285
+ } | null | undefined): IntroductionKickoffCheck | null;
286
+ /**
287
+ * Introduction may leave only when one specific document version is approved
288
+ * and still matches the current introduction fields.
289
+ * Discovery must keep using `discoveryVersionId`, not a later draft.
290
+ */
291
+ declare function evaluateIntroductionExit(software: DiscoveryKickoffSource, kickoff: IntroductionKickoffCheck | null | undefined): IntroductionExitDecision;
292
+ /**
293
+ * PDF bytes must be rendered from the approved version's stored HTML.
294
+ * Rebuilding from later introduction fields is not allowed.
295
+ */
296
+ declare function approvedKickoffPdfSource(version: {
297
+ id?: unknown;
298
+ metaDataForm?: unknown;
299
+ } | null | undefined, approvedVersionId: string): {
300
+ ok: boolean;
301
+ html: string;
302
+ message: string;
303
+ };
304
+ /**
305
+ * A later edit must keep the approved HTML intact and ask for a new version.
306
+ */
307
+ declare function kickoffAfterBaseDataChange(approved: {
308
+ html: string;
309
+ fingerprint: string;
310
+ }, next: DiscoveryKickoffSource): {
311
+ approvedHtml: string;
312
+ needsReview: boolean;
313
+ reviewReason: string;
314
+ nextFingerprint: string;
315
+ };
316
+
317
+ declare const DISCOVERY_REPORT_DOCUMENT_TYPE_NAME = "software-discovery-report";
318
+ declare const DISCOVERY_REPORT_FILE_NAME = "discovery-report.html";
319
+ declare const DISCOVERY_DECISIONS: readonly ["proceed", "revise", "stop"];
320
+ type DiscoveryDecision = (typeof DISCOVERY_DECISIONS)[number];
321
+ declare const DISCOVERY_STANCES: readonly ["assumption", "validated"];
322
+ type DiscoveryStance = (typeof DISCOVERY_STANCES)[number];
323
+ declare const DISCOVERY_METHODS: readonly ["interview", "observation", "analytics", "document", "questionnaire", "other"];
324
+ type DiscoveryMethod = (typeof DISCOVERY_METHODS)[number];
325
+ declare const DISCOVERY_FINDINGS_CHANGED = "discovery-findings-changed";
326
+ interface DiscoveryFindingRecord {
327
+ id?: unknown;
328
+ kind?: unknown;
329
+ title?: unknown;
330
+ body?: unknown;
331
+ stance?: unknown;
332
+ method?: unknown;
333
+ researchDate?: unknown;
334
+ userGroup?: unknown;
335
+ claim?: unknown;
336
+ sourceRefs?: unknown;
337
+ kickoffVersionId?: unknown;
338
+ }
339
+ interface DiscoveryReportSource {
340
+ kickoffVersionId: string;
341
+ kickoffPlainText: string;
342
+ decision: string;
343
+ rationale: string;
344
+ findings: DiscoveryFindingRecord[];
345
+ }
346
+ interface DiscoveryReportSheet {
347
+ fingerprint: string;
348
+ html: string;
349
+ plainText: string;
350
+ }
351
+ interface DiscoveryExitDecision {
352
+ ok: boolean;
353
+ advance: boolean;
354
+ message: string;
355
+ discoveryVersionId: string;
356
+ }
357
+ declare function discoveryStance(value: unknown): DiscoveryStance;
358
+ declare function parseSourceRefs(value: unknown): string[];
359
+ declare function findingSupportsProceed(finding: DiscoveryFindingRecord): boolean;
360
+ declare function discoveryReportFingerprint(source: DiscoveryReportSource): string;
361
+ declare function kickoffPlainTextFromVersion(version: {
362
+ metaDataForm?: unknown;
363
+ } | null | undefined): string;
364
+ declare function buildDiscoveryReport(source: DiscoveryReportSource): DiscoveryReportSheet;
365
+ declare function evaluateDiscoveryExit(input: {
366
+ currentPhase?: unknown;
367
+ decision?: unknown;
368
+ rationale?: unknown;
369
+ kickoffApprovedVersionId?: unknown;
370
+ findings?: DiscoveryFindingRecord[];
371
+ statusId?: unknown;
372
+ hostVersionId?: unknown;
373
+ approvedVersionId?: unknown;
374
+ approvedFingerprint?: unknown;
375
+ reportFingerprint?: unknown;
376
+ }): DiscoveryExitDecision;
377
+
378
+ declare function textPresent(value: unknown): boolean;
379
+ declare function canCompleteIntroduction(software: {
380
+ title?: unknown;
381
+ idea?: unknown;
382
+ initialProblem?: unknown;
383
+ goal?: unknown;
384
+ ownerId?: unknown;
385
+ }): boolean;
386
+ declare function isIntroductionComplete(software: {
387
+ introductionCompletedAt?: unknown;
388
+ currentPhase?: unknown;
389
+ }): boolean;
390
+ declare function canLinkProject(software: {
391
+ introductionCompletedAt?: unknown;
392
+ currentPhase?: unknown;
393
+ }): boolean;
394
+ declare function canWriteDesignKind(software: {
395
+ currentPhase?: unknown;
396
+ }, kind: string | undefined): boolean;
397
+ declare const INTRODUCTION_UPSTREAM_FIELDS: readonly ["title", "idea", "initialProblem", "goal", "ownerId", "potentialUsers", "openQuestions"];
398
+ declare function canCompletePhase(phase: SoftwarePhase, software: {
399
+ title?: unknown;
400
+ idea?: unknown;
401
+ originalIdea?: unknown;
402
+ initialProblem?: unknown;
403
+ goal?: unknown;
404
+ ownerId?: unknown;
405
+ potentialUsers?: unknown;
406
+ openQuestions?: unknown;
407
+ proposedBy?: unknown;
408
+ origin?: unknown;
409
+ currentPhase?: unknown;
410
+ introductionCompletedAt?: unknown;
411
+ }, kickoff?: IntroductionKickoffCheck | null, discovery?: Parameters<typeof evaluateDiscoveryExit>[0] | null): {
412
+ ok: boolean;
413
+ message: string;
414
+ advance?: boolean;
415
+ missingFields?: IntroductionRequiredField[];
416
+ };
417
+
418
+ interface AXMSoftwareManagementProvenanceFields {
419
+ origin?: SoftwareOrigin;
420
+ proposedBy?: SoftwareProposedBy;
421
+ acceptedAt?: Date | string | null;
422
+ needsReview?: boolean;
423
+ reviewReason?: string;
424
+ sourceNote?: string;
425
+ }
426
+ interface AXMSoftwareManagementSoftwareEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
427
+ title: string;
428
+ idea: string;
429
+ originalIdea?: string;
430
+ initialProblem?: string;
431
+ goal?: string;
432
+ ownerId?: string;
433
+ owner?: {
434
+ id: string;
435
+ displayName?: string;
436
+ };
437
+ /** Author guess only. The kickoff sheet labels this Hypothesis, or Unknown when empty. */
438
+ potentialUsers?: string;
439
+ /** Open questions only. The kickoff sheet labels these Hypothesis, or Unknown when empty. */
440
+ openQuestions?: string;
441
+ code?: string;
442
+ currentPhase?: SoftwarePhase;
443
+ kickoffDocumentId?: string;
444
+ /** DocumentManagement.DocumentVersion id discovery must read. */
445
+ kickoffApprovedVersionId?: string;
446
+ kickoffApprovedFingerprint?: string;
447
+ discoveryReportDocumentId?: string;
448
+ /** DocumentManagement.DocumentVersion id the next stage must read. */
449
+ discoveryApprovedVersionId?: string;
450
+ discoveryApprovedFingerprint?: string;
451
+ discoveryDecision?: 'proceed' | 'revise' | 'stop' | string;
452
+ discoveryRationale?: string;
453
+ introductionCompletedAt?: Date | string | null;
454
+ definitionCompletedAt?: Date | string | null;
455
+ projectId?: string;
456
+ project?: {
457
+ id: string;
458
+ title?: unknown;
459
+ };
460
+ workflowInfo?: AXPRecordWorkflowInfo;
461
+ }
462
+
463
+ interface AXMSoftwareManagementSoftwareDiscoveryItemEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
464
+ softwareId: string;
465
+ kind: SoftwareDiscoveryKind;
466
+ title: string;
467
+ body?: string;
468
+ /** assumption until research validates the claim. */
469
+ stance?: 'assumption' | 'validated';
470
+ method?: string;
471
+ researchDate?: string;
472
+ userGroup?: string;
473
+ claim?: string;
474
+ /** One source reference per line. A finding may cite several, including questionnaire sessions. */
475
+ sourceRefs?: string;
476
+ /** Approved introduction version this item investigates. */
477
+ kickoffVersionId?: string;
478
+ }
479
+
480
+ interface AXMSoftwareManagementSoftwareScopeItemEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
481
+ softwareId: string;
482
+ kind: SoftwareScopeKind;
483
+ title: string;
484
+ body?: string;
485
+ metricBaseline?: string;
486
+ metricTarget?: string;
487
+ }
488
+
489
+ interface AXMSoftwareManagementSoftwareRequirementEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
490
+ softwareId: string;
491
+ scopedId?: string;
492
+ title: string;
493
+ statement: string;
494
+ priority?: string;
495
+ }
496
+
497
+ interface AXMSoftwareManagementSoftwareAcceptanceCriterionEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
498
+ softwareId: string;
499
+ requirementId: string;
500
+ statement: string;
501
+ }
502
+
503
+ interface AXMSoftwareManagementSoftwareBusinessRuleEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
504
+ softwareId: string;
505
+ title: string;
506
+ statement: string;
507
+ trigger?: string;
508
+ consequence?: string;
509
+ }
510
+
511
+ interface AXMSoftwareManagementSoftwareModuleEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
512
+ softwareId: string;
513
+ code: string;
514
+ title: string;
515
+ responsibility?: string;
516
+ }
517
+
518
+ interface AXMSoftwareManagementSoftwareFeatureEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
519
+ softwareId: string;
520
+ moduleId: string;
521
+ code: string;
522
+ title: string;
523
+ summary?: string;
524
+ }
525
+
526
+ interface AXMSoftwareManagementSoftwareUseCaseEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
527
+ softwareId: string;
528
+ featureId?: string;
529
+ requirementId?: string;
530
+ code: string;
531
+ title: string;
532
+ primaryActor?: string;
533
+ preconditions?: string;
534
+ mainFlow?: string;
535
+ postconditions?: string;
536
+ }
537
+
538
+ interface AXMSoftwareManagementSoftwareDesignDecisionEntityModel extends AXPEntityModel<string>, AXMSoftwareManagementProvenanceFields {
539
+ softwareId: string;
540
+ kind: SoftwareDesignKind;
541
+ title: string;
542
+ body?: string;
543
+ technology?: string;
544
+ }
545
+
546
+ export { AXPSoftwareManagementCommandKeys, AXPSoftwareManagementMenuKeys, AXPSoftwareManagementPermissionKeys, DISCOVERY_DECISIONS, DISCOVERY_FINDINGS_CHANGED, DISCOVERY_KICKOFF_DOCUMENT_TYPE_NAME, DISCOVERY_KICKOFF_FILE_NAME, DISCOVERY_METHODS, DISCOVERY_REPORT_DOCUMENT_TYPE_NAME, DISCOVERY_REPORT_FILE_NAME, DISCOVERY_STANCES, INTRODUCTION_EXIT_MESSAGE, INTRODUCTION_REQUIRED_FIELDS, INTRODUCTION_UPSTREAM_FIELDS, KICKOFF_REVIEW_REASON_BASE_DATA, KICKOFF_REVIEW_STATUS, KICKOFF_SOURCE_FIELDS, RootConfig, SOFTWARE_DEFINITION_WORKFLOW_NAME, SOFTWARE_DESIGN_KINDS, SOFTWARE_DISCOVERY_KINDS, SOFTWARE_ORIGINS, SOFTWARE_PHASES, SOFTWARE_PROPOSED_BY, SOFTWARE_SCOPE_KINDS, SoftwareManagementManifest, approvedKickoffPdfSource, buildDiscoveryKickoffSheet, buildDiscoveryReport, buildIntroductionKickoffCheck, canCompleteIntroduction, canCompletePhase, canLinkProject, canWriteDesignKind, discoveryKickoffFingerprint, discoveryReportFingerprint, discoveryStance, evaluateDiscoveryExit, evaluateIntroductionExit, findingSupportsProceed, introductionValueText, isIntroductionComplete, isSoftwarePhaseAtLeast, kickoffAfterBaseDataChange, kickoffFingerprintFromRows, kickoffPlainTextFromVersion, kickoffReviewKeepsIntroduction, kickoffSourceFromSoftware, kickoffStatusId, kickoffText, missingIntroductionFields, nextSoftwarePhase, parseSourceRefs, readKickoffMeta, softwareDefinitionWorkflowDefinition, softwarePhaseIndex, textPresent };
547
+ export type { AXMSoftwareManagementProvenanceFields, AXMSoftwareManagementSoftwareAcceptanceCriterionEntityModel, AXMSoftwareManagementSoftwareBusinessRuleEntityModel, AXMSoftwareManagementSoftwareDesignDecisionEntityModel, AXMSoftwareManagementSoftwareDiscoveryItemEntityModel, AXMSoftwareManagementSoftwareEntityModel, AXMSoftwareManagementSoftwareFeatureEntityModel, AXMSoftwareManagementSoftwareModuleEntityModel, AXMSoftwareManagementSoftwareRequirementEntityModel, AXMSoftwareManagementSoftwareScopeItemEntityModel, AXMSoftwareManagementSoftwareUseCaseEntityModel, DiscoveryDecision, DiscoveryExitDecision, DiscoveryFindingRecord, DiscoveryKickoffMeta, DiscoveryKickoffSection, DiscoveryKickoffSheet, DiscoveryKickoffSource, DiscoveryMethod, DiscoveryReportSheet, DiscoveryReportSource, DiscoveryStance, IntroductionExitDecision, IntroductionKickoffCheck, IntroductionRequiredField, KickoffCertainty, KickoffReviewStatus, SoftwareDesignKind, SoftwareDiscoveryKind, SoftwareOrigin, SoftwarePhase, SoftwareProposedBy, SoftwareScopeKind };
@@ -0,0 +1,9 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ declare class AXMSoftwareManagementModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXMSoftwareManagementModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AXMSoftwareManagementModule, never, never, never>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<AXMSoftwareManagementModule>;
7
+ }
8
+
9
+ export { AXMSoftwareManagementModule };