@carbonbox/domain 0.37.0 → 0.38.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.
Files changed (97) hide show
  1. package/build/carbonbox/reporting/report-instances/domain/entity/ReportInstance.js +3 -2
  2. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/entity/IReportPreparationQuestionnaire.js +2 -0
  3. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/entity/ReportPreparationQuestionnaire.js +284 -0
  4. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/enums/ReportPreparationQuestionnaireStatus.js +22 -0
  5. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/DuplicatePreparationQuestionError.js +29 -0
  6. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationAnswerError.js +33 -0
  7. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationQuestionError.js +30 -0
  8. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/PreparationQuestionNotFoundError.js +29 -0
  9. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeCompletedError.js +31 -0
  10. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeModifiedError.js +29 -0
  11. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeReopenedError.js +28 -0
  12. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/TemplateQuestionCannotBeRemovedError.js +29 -0
  13. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/repository/IReportPreparationQuestionnaireRepository.js +2 -0
  14. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationAnswerPrimitives.js +2 -0
  15. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationQuestionPrimitives.js +2 -0
  16. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireCompletionPrimitives.js +2 -0
  17. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnairePrimitives.js +2 -0
  18. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireProps.js +2 -0
  19. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationAnswer.js +56 -0
  20. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationQuestion.js +173 -0
  21. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireCompletion.js +47 -0
  22. package/build/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireId.js +52 -0
  23. package/build/carbonbox/reporting/shared/domain/enums/ClientInputFieldType.js +34 -0
  24. package/build/carbonbox/reporting/shared/domain/enums/QuestionnaireQuestionOrigin.js +18 -0
  25. package/build/carbonbox/reporting/shared/domain/exceptions/InvalidReportBlockClientInputError.js +31 -0
  26. package/build/carbonbox/reporting/shared/domain/types/ReportBlockClientInputPrimitives.js +2 -0
  27. package/build/carbonbox/reporting/shared/domain/value-objects/ReportSection.js +43 -0
  28. package/build/carbonbox/shared/domain/authorization/enums/Permission.js +6 -0
  29. package/build/carbonbox/shared/domain/enums/ErrorCode.js +9 -0
  30. package/build/carbonbox/shared/domain/enums/SemanticUuidPrefix.js +2 -0
  31. package/build/main/index.js +45 -8
  32. package/build/types/carbonbox/reporting/report-instances/domain/entity/ReportInstance.d.ts.map +1 -1
  33. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/entity/IReportPreparationQuestionnaire.d.ts +28 -0
  34. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/entity/IReportPreparationQuestionnaire.d.ts.map +1 -0
  35. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/entity/ReportPreparationQuestionnaire.d.ts +55 -0
  36. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/entity/ReportPreparationQuestionnaire.d.ts.map +1 -0
  37. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/enums/ReportPreparationQuestionnaireStatus.d.ts +19 -0
  38. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/enums/ReportPreparationQuestionnaireStatus.d.ts.map +1 -0
  39. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/DuplicatePreparationQuestionError.d.ts +7 -0
  40. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/DuplicatePreparationQuestionError.d.ts.map +1 -0
  41. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationAnswerError.d.ts +7 -0
  42. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationAnswerError.d.ts.map +1 -0
  43. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationQuestionError.d.ts +7 -0
  44. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/InvalidPreparationQuestionError.d.ts.map +1 -0
  45. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/PreparationQuestionNotFoundError.d.ts +7 -0
  46. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/PreparationQuestionNotFoundError.d.ts.map +1 -0
  47. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeCompletedError.d.ts +8 -0
  48. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeCompletedError.d.ts.map +1 -0
  49. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeModifiedError.d.ts +7 -0
  50. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeModifiedError.d.ts.map +1 -0
  51. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeReopenedError.d.ts +7 -0
  52. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/ReportPreparationQuestionnaireCannotBeReopenedError.d.ts.map +1 -0
  53. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/TemplateQuestionCannotBeRemovedError.d.ts +7 -0
  54. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/exceptions/TemplateQuestionCannotBeRemovedError.d.ts.map +1 -0
  55. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/repository/IReportPreparationQuestionnaireRepository.d.ts +61 -0
  56. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/repository/IReportPreparationQuestionnaireRepository.d.ts.map +1 -0
  57. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationAnswerPrimitives.d.ts +7 -0
  58. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationAnswerPrimitives.d.ts.map +1 -0
  59. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationQuestionPrimitives.d.ts +17 -0
  60. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/PreparationQuestionPrimitives.d.ts.map +1 -0
  61. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireCompletionPrimitives.d.ts +7 -0
  62. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireCompletionPrimitives.d.ts.map +1 -0
  63. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnairePrimitives.d.ts +17 -0
  64. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnairePrimitives.d.ts.map +1 -0
  65. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireProps.d.ts +15 -0
  66. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/types/ReportPreparationQuestionnaireProps.d.ts.map +1 -0
  67. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationAnswer.d.ts +16 -0
  68. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationAnswer.d.ts.map +1 -0
  69. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationQuestion.d.ts +33 -0
  70. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/PreparationQuestion.d.ts.map +1 -0
  71. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireCompletion.d.ts +17 -0
  72. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireCompletion.d.ts.map +1 -0
  73. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireId.d.ts +14 -0
  74. package/build/types/carbonbox/reporting/report-preparation-questionnaires/domain/value-objects/ReportPreparationQuestionnaireId.d.ts.map +1 -0
  75. package/build/types/carbonbox/reporting/shared/domain/enums/ClientInputFieldType.d.ts +31 -0
  76. package/build/types/carbonbox/reporting/shared/domain/enums/ClientInputFieldType.d.ts.map +1 -0
  77. package/build/types/carbonbox/reporting/shared/domain/enums/QuestionnaireQuestionOrigin.d.ts +15 -0
  78. package/build/types/carbonbox/reporting/shared/domain/enums/QuestionnaireQuestionOrigin.d.ts.map +1 -0
  79. package/build/types/carbonbox/reporting/shared/domain/exceptions/InvalidReportBlockClientInputError.d.ts +7 -0
  80. package/build/types/carbonbox/reporting/shared/domain/exceptions/InvalidReportBlockClientInputError.d.ts.map +1 -0
  81. package/build/types/carbonbox/reporting/shared/domain/types/QuestionnaireAnswerPrimitives.d.ts +8 -2
  82. package/build/types/carbonbox/reporting/shared/domain/types/QuestionnaireAnswerPrimitives.d.ts.map +1 -1
  83. package/build/types/carbonbox/reporting/shared/domain/types/ReportBlockClientInputPrimitives.d.ts +14 -0
  84. package/build/types/carbonbox/reporting/shared/domain/types/ReportBlockClientInputPrimitives.d.ts.map +1 -0
  85. package/build/types/carbonbox/reporting/shared/domain/types/ReportBlockPrimitives.d.ts +2 -0
  86. package/build/types/carbonbox/reporting/shared/domain/types/ReportBlockPrimitives.d.ts.map +1 -1
  87. package/build/types/carbonbox/reporting/shared/domain/value-objects/ReportSection.d.ts +11 -0
  88. package/build/types/carbonbox/reporting/shared/domain/value-objects/ReportSection.d.ts.map +1 -1
  89. package/build/types/carbonbox/shared/domain/authorization/enums/Permission.d.ts +7 -1
  90. package/build/types/carbonbox/shared/domain/authorization/enums/Permission.d.ts.map +1 -1
  91. package/build/types/carbonbox/shared/domain/enums/ErrorCode.d.ts +9 -0
  92. package/build/types/carbonbox/shared/domain/enums/ErrorCode.d.ts.map +1 -1
  93. package/build/types/carbonbox/shared/domain/enums/SemanticUuidPrefix.d.ts +3 -1
  94. package/build/types/carbonbox/shared/domain/enums/SemanticUuidPrefix.d.ts.map +1 -1
  95. package/build/types/main/index.d.ts +25 -0
  96. package/build/types/main/index.d.ts.map +1 -1
  97. package/package.json +1 -1
@@ -207,8 +207,9 @@ class ReportInstance extends AggregateRoot_1.AggregateRoot {
207
207
  if (!__classPrivateFieldGet(this, _ReportInstance_dataSnapshot, "f") || Object.keys(__classPrivateFieldGet(this, _ReportInstance_dataSnapshot, "f")).length === 0) {
208
208
  return false;
209
209
  }
210
- // Must have answered all required questionnaire questions (if any)
211
- // TODO: Add validation for required questionnaire answers
210
+ // Required questionnaire questions are guaranteed at creation time: the application layer
211
+ // only creates an instance from a COMPLETED ReportPreparationQuestionnaire and freezes its
212
+ // self-describing answers (QuestionnaireAnswerPrimitives) into this aggregate.
212
213
  return true;
213
214
  }
214
215
  canBeApprovedInternally() {
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _ReportPreparationQuestionnaire_instances, _ReportPreparationQuestionnaire_carbonClientId, _ReportPreparationQuestionnaire_reportTemplateId, _ReportPreparationQuestionnaire_reportTemplateVersion, _ReportPreparationQuestionnaire_questions, _ReportPreparationQuestionnaire_answers, _ReportPreparationQuestionnaire_status, _ReportPreparationQuestionnaire_createdAt, _ReportPreparationQuestionnaire_updatedAt, _ReportPreparationQuestionnaire_ensureCanBeModified, _ReportPreparationQuestionnaire_ensureUniqueQuestionIds, _ReportPreparationQuestionnaire_findQuestion, _ReportPreparationQuestionnaire_getQuestionOrThrow, _ReportPreparationQuestionnaire_findAnswer, _ReportPreparationQuestionnaire_getUnansweredRequiredQuestionIds, _ReportPreparationQuestionnaire_calculateCompletion;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ReportPreparationQuestionnaire = void 0;
16
+ const AggregateRoot_1 = require("../../../../shared/domain/entities/AggregateRoot");
17
+ const ReportPreparationQuestionnaireId_1 = require("../value-objects/ReportPreparationQuestionnaireId");
18
+ const ReportPreparationQuestionnaireStatus_1 = require("../enums/ReportPreparationQuestionnaireStatus");
19
+ const PreparationQuestion_1 = require("../value-objects/PreparationQuestion");
20
+ const PreparationAnswer_1 = require("../value-objects/PreparationAnswer");
21
+ const ReportPreparationQuestionnaireCompletion_1 = require("../value-objects/ReportPreparationQuestionnaireCompletion");
22
+ const PreparationQuestionNotFoundError_1 = require("../exceptions/PreparationQuestionNotFoundError");
23
+ const DuplicatePreparationQuestionError_1 = require("../exceptions/DuplicatePreparationQuestionError");
24
+ const TemplateQuestionCannotBeRemovedError_1 = require("../exceptions/TemplateQuestionCannotBeRemovedError");
25
+ const InvalidPreparationQuestionError_1 = require("../exceptions/InvalidPreparationQuestionError");
26
+ const ReportPreparationQuestionnaireCannotBeModifiedError_1 = require("../exceptions/ReportPreparationQuestionnaireCannotBeModifiedError");
27
+ const ReportPreparationQuestionnaireCannotBeCompletedError_1 = require("../exceptions/ReportPreparationQuestionnaireCannotBeCompletedError");
28
+ const ReportPreparationQuestionnaireCannotBeReopenedError_1 = require("../exceptions/ReportPreparationQuestionnaireCannotBeReopenedError");
29
+ /**
30
+ * Report preparation questionnaire: one per (carbonClientId, reportTemplateId).
31
+ *
32
+ * Questions come from two origins:
33
+ * - TEMPLATE: materialized from the CLIENT_INPUT blocks of the report template (question id = block id).
34
+ * - CUSTOM: added by the client to provide extra information the AI must use.
35
+ *
36
+ * It is a living document reused across reporting periods; each ReportInstance freezes a copy of
37
+ * the self-describing answers (see toQuestionnaireAnswers) at creation time.
38
+ */
39
+ class ReportPreparationQuestionnaire extends AggregateRoot_1.AggregateRoot {
40
+ constructor(props, skipDomainValidation) {
41
+ const id = skipDomainValidation
42
+ ? ReportPreparationQuestionnaireId_1.ReportPreparationQuestionnaireId.fromPrimitives(props.id).toPrimitives()
43
+ : ReportPreparationQuestionnaireId_1.ReportPreparationQuestionnaireId.create(props.id).toPrimitives();
44
+ super({ id }, skipDomainValidation);
45
+ _ReportPreparationQuestionnaire_instances.add(this);
46
+ _ReportPreparationQuestionnaire_carbonClientId.set(this, void 0);
47
+ _ReportPreparationQuestionnaire_reportTemplateId.set(this, void 0);
48
+ _ReportPreparationQuestionnaire_reportTemplateVersion.set(this, void 0);
49
+ _ReportPreparationQuestionnaire_questions.set(this, void 0);
50
+ _ReportPreparationQuestionnaire_answers.set(this, void 0);
51
+ _ReportPreparationQuestionnaire_status.set(this, void 0);
52
+ _ReportPreparationQuestionnaire_createdAt.set(this, void 0);
53
+ _ReportPreparationQuestionnaire_updatedAt.set(this, void 0);
54
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_carbonClientId, props.carbonClientId, "f");
55
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_reportTemplateId, props.reportTemplateId, "f");
56
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_reportTemplateVersion, props.reportTemplateVersion, "f");
57
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_status, props.status, "f");
58
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_createdAt, props.createdAt, "f");
59
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, props.updatedAt, "f");
60
+ if (skipDomainValidation === false) {
61
+ // Initialize with domain validation
62
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_questions, props.questions.map((question) => PreparationQuestion_1.PreparationQuestion.create(question.toPrimitives())), "f");
63
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_answers, props.answers.map((answer) => PreparationAnswer_1.PreparationAnswer.create(answer.toPrimitives())), "f");
64
+ __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_ensureUniqueQuestionIds).call(this);
65
+ }
66
+ else {
67
+ // Initialize from primitives (no domain validation)
68
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_questions, props.questions.map((question) => PreparationQuestion_1.PreparationQuestion.fromPrimitives(question.toPrimitives())), "f");
69
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_answers, props.answers.map((answer) => PreparationAnswer_1.PreparationAnswer.fromPrimitives(answer.toPrimitives())), "f");
70
+ }
71
+ }
72
+ static create(props) {
73
+ const now = new Date().toISOString();
74
+ const fullProps = {
75
+ ...props,
76
+ answers: [],
77
+ status: ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.DRAFT,
78
+ createdAt: now,
79
+ updatedAt: now,
80
+ };
81
+ return new ReportPreparationQuestionnaire(fullProps, false);
82
+ }
83
+ static fromPrimitives(primitives) {
84
+ const props = {
85
+ id: primitives.id,
86
+ carbonClientId: primitives.carbonClientId,
87
+ reportTemplateId: primitives.reportTemplateId,
88
+ reportTemplateVersion: primitives.reportTemplateVersion,
89
+ questions: primitives.questions.map((question) => PreparationQuestion_1.PreparationQuestion.fromPrimitives(question)),
90
+ answers: primitives.answers.map((answer) => PreparationAnswer_1.PreparationAnswer.fromPrimitives(answer)),
91
+ status: primitives.status,
92
+ createdAt: primitives.createdAt,
93
+ updatedAt: primitives.updatedAt,
94
+ };
95
+ return new ReportPreparationQuestionnaire(props, true);
96
+ }
97
+ get toPrimitives() {
98
+ return {
99
+ id: this.id.toPrimitives(),
100
+ carbonClientId: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_carbonClientId, "f"),
101
+ reportTemplateId: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_reportTemplateId, "f"),
102
+ reportTemplateVersion: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_reportTemplateVersion, "f"),
103
+ questions: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").map((question) => question.toPrimitives()),
104
+ answers: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_answers, "f").map((answer) => answer.toPrimitives()),
105
+ status: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f"),
106
+ completion: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_calculateCompletion).call(this).toPrimitives(),
107
+ createdAt: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_createdAt, "f"),
108
+ updatedAt: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_updatedAt, "f"),
109
+ };
110
+ }
111
+ // Getters
112
+ getId() {
113
+ return this.id.toPrimitives();
114
+ }
115
+ getCarbonClientId() {
116
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_carbonClientId, "f");
117
+ }
118
+ getReportTemplateId() {
119
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_reportTemplateId, "f");
120
+ }
121
+ getReportTemplateVersion() {
122
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_reportTemplateVersion, "f");
123
+ }
124
+ getQuestions() {
125
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").map((question) => question.toPrimitives());
126
+ }
127
+ getAnswers() {
128
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_answers, "f").map((answer) => answer.toPrimitives());
129
+ }
130
+ getStatus() {
131
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f");
132
+ }
133
+ getCompletion() {
134
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_calculateCompletion).call(this).toPrimitives();
135
+ }
136
+ getCreatedAt() {
137
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_createdAt, "f");
138
+ }
139
+ getUpdatedAt() {
140
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_updatedAt, "f");
141
+ }
142
+ // Status checks
143
+ isDraft() {
144
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f") === ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.DRAFT;
145
+ }
146
+ isInProgress() {
147
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f") === ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.IN_PROGRESS;
148
+ }
149
+ isCompleted() {
150
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f") === ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.COMPLETED;
151
+ }
152
+ // Business logic - Capabilities
153
+ canBeModified() {
154
+ return !this.isCompleted();
155
+ }
156
+ canBeCompleted() {
157
+ return !this.isCompleted() && __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_calculateCompletion).call(this).isComplete();
158
+ }
159
+ canBeReopened() {
160
+ return this.isCompleted();
161
+ }
162
+ // Business logic - Actions
163
+ addCustomQuestion(question) {
164
+ __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_ensureCanBeModified).call(this, 'add custom question');
165
+ if (!question.isCustom()) {
166
+ throw InvalidPreparationQuestionError_1.InvalidPreparationQuestionError.create(question.getId(), 'only questions with origin CUSTOM can be added to an existing questionnaire');
167
+ }
168
+ if (__classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findQuestion).call(this, question.getId()) !== undefined) {
169
+ throw DuplicatePreparationQuestionError_1.DuplicatePreparationQuestionError.create(this.id.toPrimitives(), question.getId());
170
+ }
171
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_questions, [...__classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f"), question], "f");
172
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, new Date().toISOString(), "f");
173
+ }
174
+ removeCustomQuestion(questionId) {
175
+ __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_ensureCanBeModified).call(this, 'remove custom question');
176
+ const question = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_getQuestionOrThrow).call(this, questionId);
177
+ if (question.isFromTemplate()) {
178
+ throw TemplateQuestionCannotBeRemovedError_1.TemplateQuestionCannotBeRemovedError.create(this.id.toPrimitives(), questionId);
179
+ }
180
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_questions, __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").filter((existing) => existing.getId() !== questionId), "f");
181
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_answers, __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_answers, "f").filter((existing) => existing.getQuestionId() !== questionId), "f");
182
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, new Date().toISOString(), "f");
183
+ }
184
+ answerQuestion(questionId, answer, answeredBy) {
185
+ __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_ensureCanBeModified).call(this, 'answer question');
186
+ const question = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_getQuestionOrThrow).call(this, questionId);
187
+ question.validateAnswer(answer);
188
+ const newAnswer = PreparationAnswer_1.PreparationAnswer.create({
189
+ questionId,
190
+ answer: answer.trim(),
191
+ answeredAt: new Date().toISOString(),
192
+ answeredBy,
193
+ });
194
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_answers, [
195
+ ...__classPrivateFieldGet(this, _ReportPreparationQuestionnaire_answers, "f").filter((existing) => existing.getQuestionId() !== questionId),
196
+ newAnswer,
197
+ ], "f");
198
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_status, ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.IN_PROGRESS, "f");
199
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, new Date().toISOString(), "f");
200
+ }
201
+ complete() {
202
+ if (!this.canBeCompleted()) {
203
+ throw ReportPreparationQuestionnaireCannotBeCompletedError_1.ReportPreparationQuestionnaireCannotBeCompletedError.create(this.id.toPrimitives(), __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f"), __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_calculateCompletion).call(this).toPrimitives(), __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_getUnansweredRequiredQuestionIds).call(this));
204
+ }
205
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_status, ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.COMPLETED, "f");
206
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, new Date().toISOString(), "f");
207
+ }
208
+ reopen() {
209
+ if (!this.canBeReopened()) {
210
+ throw ReportPreparationQuestionnaireCannotBeReopenedError_1.ReportPreparationQuestionnaireCannotBeReopenedError.create(this.id.toPrimitives(), __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f"));
211
+ }
212
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_status, ReportPreparationQuestionnaireStatus_1.ReportPreparationQuestionnaireStatus.IN_PROGRESS, "f");
213
+ __classPrivateFieldSet(this, _ReportPreparationQuestionnaire_updatedAt, new Date().toISOString(), "f");
214
+ }
215
+ /**
216
+ * Self-describing projection of the answers, frozen into a ReportInstance and consumed by the AI.
217
+ * Ordered by question order so the prompt follows the template structure.
218
+ */
219
+ toQuestionnaireAnswers() {
220
+ return [...__classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f")]
221
+ .sort((first, second) => first.getOrder() - second.getOrder())
222
+ .flatMap((question) => {
223
+ const answer = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findAnswer).call(this, question.getId());
224
+ if (answer === undefined) {
225
+ return [];
226
+ }
227
+ return [{
228
+ questionId: question.getId(),
229
+ origin: question.getOrigin(),
230
+ questionText: question.getQuestionText(),
231
+ targetSectionId: question.getTargetSectionId(),
232
+ aiInstruction: question.getAiInstruction(),
233
+ answer: answer.getAnswer(),
234
+ answeredAt: answer.getAnsweredAt(),
235
+ answeredBy: answer.getAnsweredBy(),
236
+ }];
237
+ });
238
+ }
239
+ // Helper methods
240
+ getUnansweredRequiredQuestionIds() {
241
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_getUnansweredRequiredQuestionIds).call(this);
242
+ }
243
+ hasAnswerFor(questionId) {
244
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findAnswer).call(this, questionId) !== undefined;
245
+ }
246
+ }
247
+ exports.ReportPreparationQuestionnaire = ReportPreparationQuestionnaire;
248
+ _ReportPreparationQuestionnaire_carbonClientId = new WeakMap(), _ReportPreparationQuestionnaire_reportTemplateId = new WeakMap(), _ReportPreparationQuestionnaire_reportTemplateVersion = new WeakMap(), _ReportPreparationQuestionnaire_questions = new WeakMap(), _ReportPreparationQuestionnaire_answers = new WeakMap(), _ReportPreparationQuestionnaire_status = new WeakMap(), _ReportPreparationQuestionnaire_createdAt = new WeakMap(), _ReportPreparationQuestionnaire_updatedAt = new WeakMap(), _ReportPreparationQuestionnaire_instances = new WeakSet(), _ReportPreparationQuestionnaire_ensureCanBeModified = function _ReportPreparationQuestionnaire_ensureCanBeModified(attemptedAction) {
249
+ if (!this.canBeModified()) {
250
+ throw ReportPreparationQuestionnaireCannotBeModifiedError_1.ReportPreparationQuestionnaireCannotBeModifiedError.create(this.id.toPrimitives(), __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_status, "f"), attemptedAction);
251
+ }
252
+ }, _ReportPreparationQuestionnaire_ensureUniqueQuestionIds = function _ReportPreparationQuestionnaire_ensureUniqueQuestionIds() {
253
+ const seenQuestionIds = new Set();
254
+ __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").forEach((question) => {
255
+ if (seenQuestionIds.has(question.getId())) {
256
+ throw DuplicatePreparationQuestionError_1.DuplicatePreparationQuestionError.create(this.id.toPrimitives(), question.getId());
257
+ }
258
+ seenQuestionIds.add(question.getId());
259
+ });
260
+ }, _ReportPreparationQuestionnaire_findQuestion = function _ReportPreparationQuestionnaire_findQuestion(questionId) {
261
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").find((question) => question.getId() === questionId);
262
+ }, _ReportPreparationQuestionnaire_getQuestionOrThrow = function _ReportPreparationQuestionnaire_getQuestionOrThrow(questionId) {
263
+ const question = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findQuestion).call(this, questionId);
264
+ if (question === undefined) {
265
+ throw PreparationQuestionNotFoundError_1.PreparationQuestionNotFoundError.create(this.id.toPrimitives(), questionId);
266
+ }
267
+ return question;
268
+ }, _ReportPreparationQuestionnaire_findAnswer = function _ReportPreparationQuestionnaire_findAnswer(questionId) {
269
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_answers, "f").find((answer) => answer.getQuestionId() === questionId);
270
+ }, _ReportPreparationQuestionnaire_getUnansweredRequiredQuestionIds = function _ReportPreparationQuestionnaire_getUnansweredRequiredQuestionIds() {
271
+ return __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f")
272
+ .filter((question) => question.isRequired() && __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findAnswer).call(this, question.getId()) === undefined)
273
+ .map((question) => question.getId());
274
+ }, _ReportPreparationQuestionnaire_calculateCompletion = function _ReportPreparationQuestionnaire_calculateCompletion() {
275
+ const requiredQuestions = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").filter((question) => question.isRequired());
276
+ const answeredRequired = requiredQuestions.filter((question) => __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findAnswer).call(this, question.getId()) !== undefined);
277
+ const answeredTotal = __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").filter((question) => __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_instances, "m", _ReportPreparationQuestionnaire_findAnswer).call(this, question.getId()) !== undefined);
278
+ return ReportPreparationQuestionnaireCompletion_1.ReportPreparationQuestionnaireCompletion.create({
279
+ answeredRequired: answeredRequired.length,
280
+ totalRequired: requiredQuestions.length,
281
+ answeredTotal: answeredTotal.length,
282
+ totalQuestions: __classPrivateFieldGet(this, _ReportPreparationQuestionnaire_questions, "f").length,
283
+ });
284
+ };
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportPreparationQuestionnaireStatus = void 0;
4
+ /**
5
+ * Report preparation questionnaire status enumeration
6
+ * Defines the lifecycle states of a client questionnaire for a report template
7
+ */
8
+ var ReportPreparationQuestionnaireStatus;
9
+ (function (ReportPreparationQuestionnaireStatus) {
10
+ /**
11
+ * Draft - Questionnaire created, no answers yet
12
+ */
13
+ ReportPreparationQuestionnaireStatus["DRAFT"] = "DRAFT";
14
+ /**
15
+ * In progress - At least one answer provided (or reopened after completion)
16
+ */
17
+ ReportPreparationQuestionnaireStatus["IN_PROGRESS"] = "IN_PROGRESS";
18
+ /**
19
+ * Completed - All required questions answered; report instances can be created from it
20
+ */
21
+ ReportPreparationQuestionnaireStatus["COMPLETED"] = "COMPLETED";
22
+ })(ReportPreparationQuestionnaireStatus || (exports.ReportPreparationQuestionnaireStatus = ReportPreparationQuestionnaireStatus = {}));
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DuplicatePreparationQuestionError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class DuplicatePreparationQuestionError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, questionId) {
8
+ const technicalMessage = `Preparation question '${questionId}' already exists in report preparation questionnaire '${questionnaireId}'.`;
9
+ const context = {
10
+ questionnaireId,
11
+ questionId,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ const suggestions = [
15
+ 'Question ids must be unique within a questionnaire',
16
+ 'Generate a new semantic id (RPT-PRE-QST) for each custom question',
17
+ 'Template questions are materialized once from the template blocks; do not add them again',
18
+ ];
19
+ super(ErrorCode_1.ErrorCode.DUPLICATE_PREPARATION_QUESTION, technicalMessage, context, suggestions);
20
+ this.name = 'DuplicatePreparationQuestionError';
21
+ }
22
+ static create(questionnaireId, questionId) {
23
+ return new DuplicatePreparationQuestionError(questionnaireId, questionId);
24
+ }
25
+ logError() {
26
+ return `${this.name}: ${this.technicalMessage}`;
27
+ }
28
+ }
29
+ exports.DuplicatePreparationQuestionError = DuplicatePreparationQuestionError;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvalidPreparationAnswerError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class InvalidPreparationAnswerError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionId, fieldType, receivedAnswer, reason) {
8
+ const technicalMessage = `Invalid answer for preparation question '${questionId}' (${fieldType}): ${reason}`;
9
+ const context = {
10
+ questionId,
11
+ fieldType,
12
+ receivedAnswer,
13
+ receivedLength: receivedAnswer.length,
14
+ reason,
15
+ timestamp: new Date().toISOString(),
16
+ };
17
+ const suggestions = [
18
+ 'Provide an answer compatible with the question field type',
19
+ 'For SINGLE_CHOICE use one of the configured options; for MULTIPLE_CHOICE send a JSON array of options',
20
+ 'For NUMBER send a numeric value; for DATE send an ISO 8601 date',
21
+ 'Respect the minLength / maxLength configured for text questions',
22
+ ];
23
+ super(ErrorCode_1.ErrorCode.INVALID_PREPARATION_ANSWER, technicalMessage, context, suggestions);
24
+ this.name = 'InvalidPreparationAnswerError';
25
+ }
26
+ static create(questionId, fieldType, receivedAnswer, reason) {
27
+ return new InvalidPreparationAnswerError(questionId, fieldType, receivedAnswer, reason);
28
+ }
29
+ logError() {
30
+ return `${this.name}: ${this.technicalMessage}`;
31
+ }
32
+ }
33
+ exports.InvalidPreparationAnswerError = InvalidPreparationAnswerError;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvalidPreparationQuestionError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class InvalidPreparationQuestionError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionId, reason) {
8
+ const technicalMessage = `Invalid preparation question '${questionId}': ${reason}`;
9
+ const context = {
10
+ questionId,
11
+ reason,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ const suggestions = [
15
+ 'Provide a non-empty id and questionText',
16
+ 'SINGLE_CHOICE and MULTIPLE_CHOICE questions need at least one option; other field types must not define options',
17
+ 'minLength / maxLength must be non-negative and minLength cannot exceed maxLength',
18
+ 'order must be a non-negative integer',
19
+ ];
20
+ super(ErrorCode_1.ErrorCode.INVALID_PREPARATION_QUESTION, technicalMessage, context, suggestions);
21
+ this.name = 'InvalidPreparationQuestionError';
22
+ }
23
+ static create(questionId, reason) {
24
+ return new InvalidPreparationQuestionError(questionId, reason);
25
+ }
26
+ logError() {
27
+ return `${this.name}: ${this.technicalMessage}`;
28
+ }
29
+ }
30
+ exports.InvalidPreparationQuestionError = InvalidPreparationQuestionError;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PreparationQuestionNotFoundError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class PreparationQuestionNotFoundError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, questionId) {
8
+ const technicalMessage = `Preparation question '${questionId}' does not exist in report preparation questionnaire '${questionnaireId}'.`;
9
+ const context = {
10
+ questionnaireId,
11
+ questionId,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ const suggestions = [
15
+ 'Verify the question id belongs to this questionnaire (template block id or custom question id)',
16
+ 'Retrieve the questionnaire to list its current questions',
17
+ 'Custom questions may have been removed; refresh the questionnaire before answering',
18
+ ];
19
+ super(ErrorCode_1.ErrorCode.PREPARATION_QUESTION_NOT_FOUND, technicalMessage, context, suggestions);
20
+ this.name = 'PreparationQuestionNotFoundError';
21
+ }
22
+ static create(questionnaireId, questionId) {
23
+ return new PreparationQuestionNotFoundError(questionnaireId, questionId);
24
+ }
25
+ logError() {
26
+ return `${this.name}: ${this.technicalMessage}`;
27
+ }
28
+ }
29
+ exports.PreparationQuestionNotFoundError = PreparationQuestionNotFoundError;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportPreparationQuestionnaireCannotBeCompletedError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class ReportPreparationQuestionnaireCannotBeCompletedError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, currentStatus, completion, unansweredRequiredQuestionIds) {
8
+ const technicalMessage = `Report preparation questionnaire '${questionnaireId}' cannot be completed. Current status: ${currentStatus}. Required questions answered: ${completion.answeredRequired}/${completion.totalRequired}. Missing: ${unansweredRequiredQuestionIds.join(', ') || 'none'}.`;
9
+ const context = {
10
+ questionnaireId,
11
+ currentStatus,
12
+ completion,
13
+ unansweredRequiredQuestionIds,
14
+ timestamp: new Date().toISOString(),
15
+ };
16
+ const suggestions = [
17
+ 'Answer every required question before completing the questionnaire',
18
+ 'Retrieve the questionnaire to see which required questions are still unanswered',
19
+ 'A questionnaire that is already COMPLETED does not need to be completed again',
20
+ ];
21
+ super(ErrorCode_1.ErrorCode.REPORT_PREPARATION_QUESTIONNAIRE_CANNOT_BE_COMPLETED, technicalMessage, context, suggestions);
22
+ this.name = 'ReportPreparationQuestionnaireCannotBeCompletedError';
23
+ }
24
+ static create(questionnaireId, currentStatus, completion, unansweredRequiredQuestionIds) {
25
+ return new ReportPreparationQuestionnaireCannotBeCompletedError(questionnaireId, currentStatus, completion, unansweredRequiredQuestionIds);
26
+ }
27
+ logError() {
28
+ return `${this.name}: ${this.technicalMessage}`;
29
+ }
30
+ }
31
+ exports.ReportPreparationQuestionnaireCannotBeCompletedError = ReportPreparationQuestionnaireCannotBeCompletedError;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportPreparationQuestionnaireCannotBeModifiedError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class ReportPreparationQuestionnaireCannotBeModifiedError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, currentStatus, attemptedAction) {
8
+ const technicalMessage = `Report preparation questionnaire '${questionnaireId}' cannot be modified (${attemptedAction}). Current status: ${currentStatus}.`;
9
+ const context = {
10
+ questionnaireId,
11
+ currentStatus,
12
+ attemptedAction,
13
+ timestamp: new Date().toISOString(),
14
+ };
15
+ const suggestions = [
16
+ 'Completed questionnaires are frozen; reopen the questionnaire before answering or changing custom questions',
17
+ `Review the current status of questionnaire '${questionnaireId}'`,
18
+ ];
19
+ super(ErrorCode_1.ErrorCode.REPORT_PREPARATION_QUESTIONNAIRE_CANNOT_BE_MODIFIED, technicalMessage, context, suggestions);
20
+ this.name = 'ReportPreparationQuestionnaireCannotBeModifiedError';
21
+ }
22
+ static create(questionnaireId, currentStatus, attemptedAction) {
23
+ return new ReportPreparationQuestionnaireCannotBeModifiedError(questionnaireId, currentStatus, attemptedAction);
24
+ }
25
+ logError() {
26
+ return `${this.name}: ${this.technicalMessage}`;
27
+ }
28
+ }
29
+ exports.ReportPreparationQuestionnaireCannotBeModifiedError = ReportPreparationQuestionnaireCannotBeModifiedError;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReportPreparationQuestionnaireCannotBeReopenedError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class ReportPreparationQuestionnaireCannotBeReopenedError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, currentStatus) {
8
+ const technicalMessage = `Report preparation questionnaire '${questionnaireId}' cannot be reopened. Current status: ${currentStatus}. Only COMPLETED questionnaires can be reopened.`;
9
+ const context = {
10
+ questionnaireId,
11
+ currentStatus,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ const suggestions = [
15
+ 'Only COMPLETED questionnaires can be reopened',
16
+ 'DRAFT and IN_PROGRESS questionnaires are already editable',
17
+ ];
18
+ super(ErrorCode_1.ErrorCode.REPORT_PREPARATION_QUESTIONNAIRE_CANNOT_BE_REOPENED, technicalMessage, context, suggestions);
19
+ this.name = 'ReportPreparationQuestionnaireCannotBeReopenedError';
20
+ }
21
+ static create(questionnaireId, currentStatus) {
22
+ return new ReportPreparationQuestionnaireCannotBeReopenedError(questionnaireId, currentStatus);
23
+ }
24
+ logError() {
25
+ return `${this.name}: ${this.technicalMessage}`;
26
+ }
27
+ }
28
+ exports.ReportPreparationQuestionnaireCannotBeReopenedError = ReportPreparationQuestionnaireCannotBeReopenedError;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TemplateQuestionCannotBeRemovedError = void 0;
4
+ const CodedRootError_1 = require("../../../../shared/domain/exceptions/CodedRootError");
5
+ const ErrorCode_1 = require("../../../../shared/domain/enums/ErrorCode");
6
+ class TemplateQuestionCannotBeRemovedError extends CodedRootError_1.CodedRootError {
7
+ constructor(questionnaireId, questionId) {
8
+ const technicalMessage = `Preparation question '${questionId}' in questionnaire '${questionnaireId}' comes from the report template and cannot be removed. Only CUSTOM questions can be removed.`;
9
+ const context = {
10
+ questionnaireId,
11
+ questionId,
12
+ timestamp: new Date().toISOString(),
13
+ };
14
+ const suggestions = [
15
+ 'Only questions with origin CUSTOM can be removed from a questionnaire',
16
+ 'Template questions are defined by the CLIENT_INPUT blocks of the report template; change the template instead',
17
+ 'If the question is not applicable and it is not required, leave it unanswered',
18
+ ];
19
+ super(ErrorCode_1.ErrorCode.TEMPLATE_QUESTION_CANNOT_BE_REMOVED, technicalMessage, context, suggestions);
20
+ this.name = 'TemplateQuestionCannotBeRemovedError';
21
+ }
22
+ static create(questionnaireId, questionId) {
23
+ return new TemplateQuestionCannotBeRemovedError(questionnaireId, questionId);
24
+ }
25
+ logError() {
26
+ return `${this.name}: ${this.technicalMessage}`;
27
+ }
28
+ }
29
+ exports.TemplateQuestionCannotBeRemovedError = TemplateQuestionCannotBeRemovedError;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });